○zaručeno
Kontroly dokončení a kvalitypokročilýrevieweragentzapisuje stav
Worker ohlásí úspěch. Hlášení je odstavec, důkazem je ten odstavec a jeho přijetí je věc důvěry, a ne kontroly.
question: cokoli nevyřešeného se zaznamená jako stav a odmítá dokončení, dokud trvá
finish: --verify-command spustí vlastní ověření projektu a zaznamená jeho návratový kód, dobu trvání a strom, nad nímž běželo
setup: finish-ready
given:
- 'an active task with its completion note written'
steps:
- id: open-a-question
run: ['question', 'add', 'should tabs be an error or a warning?']
note: 'an unresolved question naming the task'
expect:
exit: 0
stdout_contains: ['^opened for t-']
- id: refused-while-open
run: ['finish', '--outcome', 'completed', '--verify-command', 'test -d .ai']
note: 'an open question is a blocker; completed is refused'
expect:
exit: 10
stdout_contains: ['^FAIL blockers', 'refused']
- id: resolve-it
run: ['question', 'resolve', '1', '--answer', 'an error']
note: 'the question is answered as state, not in prose'
expect:
exit: 0
stdout_contains: ['resolved']
- id: accepted
run: ['finish', '--outcome', 'completed', '--verify-command', 'test -d .ai']
note: 'every line of the finish contract passes and the outcome is recorded'
expect:
exit: 0
stdout_contains: ['completed']
then:
- 'finish writes nothing while any line of the contract fails'
- 'the verification command, its exit code, its duration and the tree it ran over are recorded'
Odmítnutí jmenuje pravidla, která odmítla. Výsledek je typovaný — completed, partial, blocked, no_match, failed — takže „věc neexistuje“ a „nemohl jsem to udělat“ zůstávají různými fakty.
Scénář
Provedeno proti skutečnému nástroji v repozitáři připraveném pomocí finish-ready, při každém generování tohoto webu. To, co následuje, není popis toho, co by se mělo stát; je to to, co se stalo.
dáno
- ·aktivní úloha s napsanou poznámkou o dokončení
kdy
- 1
majordomus question add should tabs be an error or a warning? - 2
majordomus finish --outcome completed --verify-command test -d .ai - 3
majordomus question resolve 1 --answer an error - 4
majordomus finish --outcome completed --verify-command test -d .ai
pak
- ·finish nezapisuje nic, dokud selže některý řádek kontraktu
- ·ověřovací příkaz, jeho návratový kód, jeho doba trvání a strom, nad nímž běžel, se zaznamenávají
Co nástroj udělal
Důkazy o běhu, ze kterého byla tato stránka vygenerována: pass, kroků: 4. Výstup je normalizovaný: cesta k repozitáři, časová razítka, identifikátory a doby trvání jsou zástupné hodnoty, nic dalšího se neupravuje.
Testováno v test/cases/94_use_cases.sh, který spouští každý scénář a odmítne krok, jehož zaznamenaný výstup není tím, co vyprodukoval.
-
nevyřešená otázka jmenující úlohu
opened for t-<id>: should tabs be an error or a warning?
- exit 0
- stdout_contains /^opened for t-/
-
otevřená otázka je blokátor; completed se odmítne
FAIL blockers t-<id> — 1 unresolved question(s) on this branch; first: t-<id> — should tabs be an error or a warning? [reproduce: majordomus question list]
OK note t-<id> — <time>--main--<head>--<hash>.md
INFO regression t-<id> — profile implementation adds no requirement beyond the shared contract
OK scope t-<id> — 1 touched file(s), all within scope
OK state t-<id> — exact (head <head>)
INFO continuity t-<id> — applies to partial and blocked
INFO mesh t-<id> — the repository declares no enabled mesh
INFO use-case 30 advisory gap(s) — not covered by an active use case, and the policy does not require it: command:init command:update command:doctor command:watch command:start command:context command:checkpoint command:handover command:check command:finish command:history command:decision command:question command:prompt command:evidence command:skills command:capture command:search command:doctrine command:plan command:version command:session command:knowledge command:adr command:usecase command:rules command:migrate command:recover command:bench command:archive [reproduce: majordomus usecase coverage]
OK use-case 0 of 30 target(s) covered — every public command the policy requires is named and run by an active use case (policy use_cases.coverage)
OK verification t-<id> — test -d .ai — exit 0, <s>s, tree <tree>
INFO obligation t-<id> — the task declares no obligations
INFO gate t-<id> — this repository declares no CI model at .ai/repo/ci/gates.yaml; nothing can be planned
INFO gate t-<id> — not in verification.finish_requires
finish: refused, 1 unmet
blocking doctrines:
- majordomus.blocker-resolution
- exit 10
- stdout_contains /^FAIL blockers/
- stdout_contains /refused/
-
otázka je zodpovězena jako stav, ne prózou
resolved for t-<id>: should tabs be an error or a warning?
- exit 0
- stdout_contains /resolved/
-
každý řádek kontraktu dokončení projde a výsledek je zaznamenán
OK blockers t-<id> — none open
OK note t-<id> — <time>--main--<head>--<hash>.md
INFO regression t-<id> — profile implementation adds no requirement beyond the shared contract
OK scope t-<id> — 1 touched file(s), all within scope
OK state t-<id> — exact (head <head>)
INFO continuity t-<id> — applies to partial and blocked
INFO mesh t-<id> — the repository declares no enabled mesh
INFO use-case 30 advisory gap(s) — not covered by an active use case, and the policy does not require it: command:init command:update command:doctor command:watch command:start command:context command:checkpoint command:handover command:check command:finish command:history command:decision command:question command:prompt command:evidence command:skills command:capture command:search command:doctrine command:plan command:version command:session command:knowledge command:adr command:usecase command:rules command:migrate command:recover command:bench command:archive [reproduce: majordomus usecase coverage]
OK use-case 0 of 30 target(s) covered — every public command the policy requires is named and run by an active use case (policy use_cases.coverage)
OK verification t-<id> — test -d .ai — exit 0, <s>s, tree <tree>
INFO obligation t-<id> — the task declares no obligations
INFO gate t-<id> — this repository declares no CI model at .ai/repo/ci/gates.yaml; nothing can be planned
INFO gate t-<id> — not in verification.finish_requires
finish: t-<id> completed
- exit 0
- stdout_contains /completed/
Proč to nástroj ví
Řetězec od této stránky ke kódu: případ užití jmenuje příkazy, pravidla a tvrzení; každé pravidlo se dispatchuje z registru a každé tvrzení jmenuje test, který ho dokazuje; scénář výše provedl příkazy. Nic v tomto řetězci není text o záměru.
Pravidla, díky nimž platí
- ✕blokující Integrita ověřeníDokončení vyžaduje ověřovací příkaz, který skutečně běžel a skončil s kódem 0 nad stromem, který se pod ním nezměnil; jeho návratový kód, doba trvání a strom se zaznamenávají.
- ✕blokující Řešení blokátorůŽádnou úlohu nelze dokončit, dokud je nevyřešena jakákoli otázka na této větvi; stále ji lze ukončit jako blocked, partial, no_match nebo failed.
- ✕blokující Požadavky profiluProfil může žádat víc než sdílený kontrakt, například regresní test nebo záznam rozhodnutí, a finish bez něj odmítne.
- ✕blokující Integrita poznámkyKaždý výsledek potřebuje poznámku se sekcemi, které tento výsledek vyžaduje, a bez přepisu.
Uplatněné záruky
Související případy užití
Vypočteno z toho, co sdílejí: tvrzení, pravidla, příkazy, kategorie, aplikace. Tento seznam nikdo neudržuje.
- Zablokovat přijetí kvůli otázce, na kterou nikdo neodpovědělOtevřete k úloze otázku, sledujte, jak finish odmítá dokončení, dokud je nevyřešená, vyřešte ji odpovědí a teprve pak úlohu dokončete.
- Předat práci s otevřenou otázkou a nechat ji blokovatUzavřít úlohu do předávky, dokud je otázka nevyřešená, spustit navazující úlohu a vidět, že tatáž otázka tam přijetí stále odmítá.
- Přichytit agenta, který tvrdí, že je hotov, a neníJedna úloha od začátku do konce: worker vybočí z rozsahu, prohlásí, že je hotov, předá práci a je přijat teprve tehdy, když projde vlastní ověření repozitáře.
- Dělat checkpointy dlouhé práce, aby zastavení stálo minuty, ne celý denZaznamenávat kompaktní postup uvnitř aktivní úlohy v intervalu profilu, aby relace, která skončí bez varování, nechala další relaci místo, kde začít.
- Dokončit úkol, jen když existují jeho důkazySledujte, jak úkol odmítne dokončení, dokud chybí požadovaný důkaz, přečtěte si plán rozvoje odvozený ze stavu milníků a nechte projekci na GitHub projekcí.
Okamžiky, na které to odpovídá
-
→ přijali „hotovo“, protože to řekl model, a druhý den ráno za to zaplatili Plynulé tvrzení o dokončení se přijme jako důkaz, protože nic předem nezapsalo, co by muselo platit.
-
→ našel hotovou práci na větvi, kterou nikdo nikdy nemergoval Workeři vyprodukují mnohem víc, než integrace pojme, a nic nerozlišuje práci hotovou od práce hotové a přistálé.
-
→ našel podstatnou změnu, kterou nikdy nepožadoval žádný úkol, ticket ani plán Práce přichází bez vymezeného kontraktu, takže její rozsah, kritéria přijetí i vlastnictví se rozhodují až zpětně.
-
→ uzavřel úkol, jehož kritéria přijetí nikdo skutečně neověřil Dokončení se eviduje jako změna stavu v trackeru, a ne jako důkaz v repozitáři, takže se obojí okamžitě rozejde.
-
→ se podíval na účet a nedokázal říct, co z něj cokoli vyprodukovalo Spotřeba se měří po účtech a výsledky se zaznamenávají po lidech, takže je nelze nikdy spojit.