I1516 — Adaptér skládá promítané tělo na jednom místě
Zařídit, aby tělo, které scripts/github-sync odešle k úkolu, bylo tímtéž textem, který pro tento úkol vypisuje, složeným jednou, aby tělo, které adaptér napsal, bylo tělem, které adaptér pozná jako vlastní.
HOTOVO vlna 0 · p0 · profil implementation · bezpečné souběžně
Cíl
Zařídit, aby tělo, které scripts/github-sync odešle k úkolu, bylo tímtéž textem, který pro tento úkol vypisuje, složeným jednou, aby tělo, které adaptér napsal, bylo tělem, které adaptér pozná jako vlastní.
Proč
Adaptér skládal generovanou oblast dvakrát — jednou pro --render a jednou pro splice, který aktualizuje už existující úkol — a obě kompozice se rozešly. record_marker() tiskne bez koncového newline; --render ho obalil do printf '%s\\n' a splice ne, takže první řádek záznamu byl v každém těle, které splice odeslal, slepen se značkou. region_intact() před hashováním oblasti zpět odstraní řádek značky a ta shoda prefixu vzala slepený první řádek s sebou, takže taková oblast nikdy nedala hash, který tvrdila její vlastní značka. Každý úkol zapsaný přes splice byl pak klasifikován jako `edited` — ruční úprava člověka, která se nikdy nepřepisuje — a --force ho nemohl opravit, protože ho přepsal přesně stejně. Je to změřeno, ne hypotetické: 19 z 215 spravovaných úkolů na GitHubu nese řádek značky s připojeným textem těla a jsou to přesně těch 19 nálezů, které drží kontrolu github-projection červenou.
Aktuální stav
19 spravovaných úkolů nese spojený řádek značky; scripts/ci/github-check na nich končí s 10; strukturální úloha selže na každé větvi, která k ní dojde. test/cases/45 provádí jen složení --render, takže složení splice nebylo nikdy testováno. Obnoveno na master 2026-09-30 z PR #554: master stále nese obě složení.
Cílový stav
Jedna funkce skládá obsah oblasti a vykreslování i splice ji volají. Případ 45 odmítá druhé složení a volajícího, který zapíše značku, aniž by ukončil její řádek; případ 602 pohání --apply proti zastubovanému gh a čte odeslané tělo zpět jako insync. 19 vzdálených těl se přepíše příkazem --apply --force a gate zezelená.
Rozsah
- scripts/github-sync
- test/cases/45_github_projection.sh
- test/cases/602_a_spliced_body_is_recognised_as_its_own.sh
Mimo rozsah
- Samotné přepsání remote, což je operace, ne změna repozitáře.
- Baseline driftu, která se sama zmenšuje, jakmile jsou těla správná.
Závislosti
Žádné. Tento úkol je kořenem grafu.
Kritéria přijetí
- Tělo regionu se v adaptéru skládá právě na jednom místě
- Žádný volající nezapisuje značku záznamu bez ukončení jejího řádku
- Tělo, které by splice odeslal, se klasifikuje jako insync, ne jako upravené
Validace
- bash test/run.sh 45_github_projection
- bash test/run.sh 602_a_spliced_body_is_recognised_as_its_own
- bash scripts/ci/shell-lint
Požadované důkazy
- the_two_compositions_are_one
- a_spliced_body_is_recognised_as_its_own
Důkazy
| pokrývá | typ | command | výsledek | u commitu |
|---|---|---|---|---|
| the_two_compositions_are_one | test | bash test/run.sh 45_github_projection | ok na b4a781c668: případ 45 odmítne druhé složení a značku zapsanou bez ukončení řádku; oprava je a19588c506 (PR #690) | b4a781c |
| a_spliced_body_is_recognised_as_its_own | test | bash test/run.sh 602_a_spliced_body_is_recognised_as_its_own; scripts/ci/github-check | ok na b4a781c668: tělo, které --apply odešle, se čte zpět jako insync; github-check proti živému remote hlásí 0 nálezů, 0 záznamů adopt | b4a781c |
Riziko
Nízké. Změna odstraňuje duplicitní definici; vykreslení, které ponechává, je to, které už tiskne každý jiný povrch.
Časová osa
- zahájeno
- 2026-09-15
- ověřeno
- 2026-10-07T13:27:22Z
- dokončeno
- 2026-10-07T13:27:24Z
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.
Kanonický záznam: .ai/repo/project/issues/I1516.yaml. Načtěte ho zpět pomocí majordomus plan show I1516.