I3920 — The GitHub projection reads every issue, and a listing shorter than the repository refuses rather than reads as missing
scripts/github-sync lists the repository issues with gh issue list (GraphQL, paged to the end) instead of gh api --paginate over the REST issues endpoint, and refuses as unreadable (exit 12, nothing changed) any listing shorter than the repository issues.totalCount, so a truncated read can never be taken for absent issues. The scripted forges of the cases that drive the adapter answer the new reads.
PŘIPRAVENO vlna 0 · p0 · profil implementation · běží samostatně
Připraveno. Všechny závislosti jsou hotové, takže majordomus plan start I3920 bude přijato.
Cíl
scripts/github-sync lists the repository issues with gh issue list (GraphQL, paged to the end) instead of gh api --paginate over the REST issues endpoint, and refuses as unreadable (exit 12, nothing changed) any listing shorter than the repository issues.totalCount, so a truncated read can never be taken for absent issues. The scripted forges of the cases that drive the adapter answer the new reads.
Proč
On 2026-10-22 github-check reported 788 to 888 records missing on master and on every pull request although they existed on GitHub: gh api --paginate over repos/<repo>/issues?state=all&per_page=100 stopped after four pages of issues and pull requests mixed (gh 2.98; the endpoint pages by cursor), so about 400 of 1384 issues were read. The structure job was red everywhere, and an --apply run by the landing seat created 487 duplicate issues (#1861-#2347) before it was stopped; each was closed citing its original and its record marker removed. The unreadable guard did not fire because the call succeeded with a partial answer.
Aktuální stav
Fixed on train 4 (integration/train-4-20261022, commit 5164599181f): scripts/github-sync lists with gh issue list and checks the count; cases 602, 894 and 1038 answer issue list and api graphql. Not on master until train 4 lands.
Cílový stav
On master the projection reads every issue; github-check finds nothing missing that exists; a listing shorter than totalCount exits 12 and writes nothing; a case proves the truncated listing is refused.
Rozsah
- scripts/github-sync
- test/cases/894_github_sync_applies_only_the_trunk.sh
- test/cases/602_a_spliced_body_is_recognised_as_its_own.sh
- test/cases/1038_a_head_is_judged_against_what_it_changes.sh
- .ai/repo/project/issues/I3920.yaml
Závislosti
Žádné. Tento úkol je kořenem grafu.
Kritéria přijetí
- github-sync --check against the live repository reports no record missing that has an issue
- A listing shorter than the repository issue count exits 12 and nothing is written
- Cases 602, 894 and 1038 drive the adapter through issue list and api graphql
Validace
- bin/majordomus plan validate
- env -u MAJORDOMUS_SHARE -u MAJORDOMUS_HTTP_HOST -u MJ_ROOT bash test/run.sh 894_github_sync_applies_only_the_trunk
Požadované důkazy
- truncated_listing_is_unreadable
- no_duplicate_on_apply
Důkazy
Nic nezaznamenáno. Za každým tokenem výše musí stát příkaz nebo artefakt, než lze tento úkol dokončit; vyprávění se odmítá.
Časová osa
- zahájeno
- —
- ověřeno
- —
- dokončeno
- —
Tato tři pole, důkazy výše a stav závislostí jsou vše, z čeho se stav skládá. Neexistuje žádné pole stavu, které by s nimi mohlo být v rozporu.
Canonical record: .ai/repo/project/issues/I3920.yaml. Read it back with majordomus plan show I3920.