I2301 — Zda je práce hotová, se zodpovídá měřením: invariant hotovosti se ptá na dluh, na to, co zbylo za námi, a na backlog
Přidat do invariantu hotovo tři otázky, které si člověk klade na konci relace a které zatím neklade — vzrostl zaznamenaný dluh, existuje ještě větev nebo worktree vytvořený od startu úlohy, je pull request otevřený od té doby stále otevřený — každou čtenou ze záznamu, který fakt drží, a stanovit jako projektové pravidlo, že na závěrečnou otázku odpovídá toto čtení, nikdy vzpomínka workera.
HOTOVO vlna 0 · p1 · profil implementation · bezpečné souběžně
Součást development-runtime — The runtime has a development surface.
Cíl
Přidat do invariantu hotovo tři otázky, které si člověk klade na konci relace a které zatím neklade — vzrostl zaznamenaný dluh, existuje ještě větev nebo worktree vytvořený od startu úlohy, je pull request otevřený od té doby stále otevřený — každou čtenou ze záznamu, který fakt drží, a stanovit jako projektové pravidlo, že na závěrečnou otázku odpovídá toto čtení, nikdy vzpomínka workera.
Proč
Dne 2026-10-10 se vlastník ptal jedné relace sedmkrát, zda je vše hotovo, sloučeno a nasazeno, zda se přidal dluh a zda je méně pull requestů, větví a worktrees než na začátku. Každá ze sedmi odpovědí byla napsána z toho, co si relace pamatovala, že dělala, a popisovala jen její vlastní stopu. Změřeno u osmé: 52 otevřených pull requestů proti 49 na začátku relace, 42 v konfliktu s kmenem; 117 worktrees, kde předchozí relace nechala 96; 225 lokálních větví, 59 dosažených kmenem a 13 držících commity, které žádný remote neměl; 10 neauditovaných stashů; v0.20.0 netagováno. Invariant done (apps/majordomus-cli/src/gates/done.rs) kladl úloze devatenáct otázek a každou odpověď bral z jejího zdroje, ale žádná z devatenácti se netýkala repozitáře v čase, takže tato polovina otázky neměla odkud být čtena. Příkaz vlastníka z 2026-10-10 16:00Z: vynutit, pokrýt testy, v .ai, zdokumentovat na stránkách.
Aktuální stav
gates.completion obsahuje devatenáct otázek; `no-stale-topology` čte convergence.report (práce držená na jednom disku). Nic nečte, zda dluhový základ narostl, co vzniklo od zahájení úlohy ani co přibylo ve frontě úkolů forge. Žádné pravidlo neříká, jak se odpovídá na závěrečnou otázku.
Cílový stav
gates.completion nese dvaadvacet otázek. `no-new-debt` porovnává záznamy každého .ai/repo/*-baseline.txt v commitu, ve kterém úloha začala, s pracovním stromem a při nárůstu odmítne, přičemž jmenuje baseline a čísla; `nothing-accumulated` jmenuje lokální branche a linked worktrees, které reflogy gitu datují od začátku úlohy, a platí, dokud nějaká zůstává; `backlog-not-grown` počítá pull requesty, které zaznamenané pozorování forge datuje od začátku úlohy. Odečet, který nešlo provést, je neznámý a říká proč. `majordomus check` jmenuje každou jako id=status. project.a-closing-question-is-answered-by-measurement popisuje chování a jmenuje jeho případy; docs/CLI.md dokumentuje tři otázky a tvrzení the-closing-question-is-measured má svou stránku.
Rozsah
- apps/majordomus-cli/src/gates/closing.rs
- apps/majordomus-cli/src/gates/done.rs
- apps/majordomus-cli/src/gates/mod.rs
- apps/majordomus-cli/src/capability/builtin/gates.rs
- .ai/repo/rules/project
- .ai/repo/workflows/task-lifecycle.md
- lib/gates.sh
- docs/CLI.md
- docs/CLAIMS.yaml
- docs/claims/the-closing-question-is-measured.md
- test/cases/1037_the_closing_question_is_measured.sh
- test/cases/131_completion_gates.sh
Mimo rozsah
- Počet větví, worktrees a pull requestů zaznamenaný na začátku a s ním přesné „méně než na začátku“: odstranění v gitu nezanechává záznam, takže to vyžaduje snímek zapsaný při otevření úlohy nebo epizody, což je změna záznamů, které shellový nástroj zapisuje, a jejich schémat.
- Připisování větve nebo worktree relaci, která je vytvořila: git žádného tvůrce nezaznamenává.
- Odmítat `finish` kvůli těmto otázkám: invariant hotovo hlásí `check` a o dokončení dál rozhodují kontroly a povinnosti.
- Odstraňování čehokoli: redukce patří pravidlu project.accumulation-is-measured a pull requestu 882.
Závislosti
Žádné. Tento úkol je kořenem grafu.
Kritéria přijetí
- Položka přidaná do baseline dluhu od prvního commitu úlohy způsobí selhání `no-new-debt` a jmenuje baseline s jejími položkami tehdy a nyní, ať je přidání commitnuto, nebo ne; její odstranění otázku zodpoví
- Základní hodnota, která při prvním commitu úlohy neexistovala, je označena jako poprvé zaznamenaná a není růstem
- Branch a propojený worktree vytvořené po zahájení úlohy způsobí, že `nothing-accumulated` je ve frontě, a jsou jmenovány; projde, jakmile obojí zmizí
- Pull request, jehož zaznamenané pozorování je datováno po začátku úlohy, činí `backlog-not-grown` zařazeným do fronty a je očíslován; pozorování starší než úloha, nebo žádné, je neznámé s uvedením důvodu
- Bez záznamu úlohy jsou tři otázky neznámé a říkají, že není od čeho měřit
- `majordomus check` jmenuje každou ze tří, která není zodpovězena, jako id=status
Validace
- bin/majordomus plan validate
- MJ_TEST_JOBS=4 bash test/run.sh 1037_the_closing_question_is_measured
- MJ_TEST_JOBS=4 bash test/run.sh 131_completion_gates
- cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib gates::
Požadované důkazy
- closing_readings_unit_tests
- the_closing_question_is_measured_case
Důkazy
| pokrývá | typ | command | výsledek | u commitu |
|---|---|---|---|---|
| closing_readings_unit_tests | test | cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib gates:: | ok na ecb51b2772: 59 prošlo, 0 selhalo; závěrečná čtení nad skutečným repozitářem, nepřečtené čtení neznámé, růst v jedné základní linii není hrazen jinou | ecb51b2 |
| the_closing_question_is_measured_case | test | MJ_TEST_JOBS=4 bash test/run.sh 1037_the_closing_question_is_measured 131_completion_gates | ok na ecb51b2772: případ 1037 (119 s) s jeho mutací, případ 131 (1390 s); majordomus check jmenuje no-new-debt, nothing-accumulated a backlog-not-grown jako id=status | ecb51b2 |
Časová osa
- zahájeno
- 2026-10-10T21:36:49Z
- ověřeno
- 2026-10-10T21:36:58Z
- dokončeno
- 2026-10-10T21:56:14Z
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/I2301.yaml. Přečtěte jej zpět pomocí majordomus plan show I2301.