○zaručeno
Relace a předávkapokročilýagentreviewerzapisuje stav
Pracovník otevřel otázku, vyčerpal relaci a předal práci. Další pracovník začne novou úlohu. Pokud otázka patřila staré úloze, nová úloha by byla přijatelná s otázkou stále nezodpovězenou a předávka by vyprala bloker do poznámky pod čarou.
handover --close: záznam o pokračování a úloha označená jako předaná
start <task> --scope <paths>: pokračování; předchozí předávka je jmenována
check: nevyřešená otázka je na této větvi selhávající řádek
question list: položka, očíslovaná, s úlohou, která ji otevřela
finish --outcome completed: odmítnuto stejnou položkou
setup: finish-blocker-open
given:
- 'an active task with one unresolved question open against it'
steps:
- id: hand-over
run: ['handover', '--close']
stdin: handover-body.md
note: 'the record the next session resumes from; --close marks the task handed over so a new one may start'
expect:
exit: 0
stdout_contains: ['\.ai/local/state/handovers/']
- id: follow-up
run: ['start', 'the follow-up', '--scope', 'lib']
note: 'the next task; the prior handover for this worktree and branch is named on the way in'
expect:
exit: 0
stdout_contains: ['^INFO handover', 'same_worktree_same_branch', 'next: majordomus context']
- id: still-blocked
run: ['check']
note: 'the question opened under the previous task still blocks this branch'
expect:
exit: 10
stdout_contains: ['^FAIL blockers', 'unresolved question', 'tabs']
- id: still-listed
run: ['question', 'list']
note: 'the entry, numbered, with the task it was opened under'
expect:
exit: 0
stdout_contains: ['^1 \[unresolved\]', 'tabs']
- id: refused
run: ['finish', '--outcome', 'completed', '--verify-command', 'test -d .ai']
note: 'completion of the follow-up is refused by the same entry'
expect:
exit: 10
stdout_contains: ['^FAIL blockers']
then:
- 'the handover carries the branch and head it was written at'
- 'a question is a fact of the branch, not of the task that happened to open it'
- 'nothing was resolved by handing over; the next worker sees the same blocker'
Blokující otázka blokuje dál, i když se práce předá nové úloze. Záznam o tom, kdo se ptal a pod jakou úlohou, přežije a vyčistí ho jen odpověď.
Scénář
Provedeno proti skutečnému nástroji v repozitáři připraveném pomocí finish-blocker-open, 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 jednou nevyřešenou otevřenou otázkou
kdy
- 1
majordomus handover --close - 2
majordomus start the follow-up --scope lib - 3
majordomus check - 4
majordomus question list - 5
majordomus finish --outcome completed --verify-command test -d .ai
pak
- ·předávka nese větev a head, na kterých byla napsána
- ·otázka je fakt větve, ne úlohy, která ji náhodou otevřela
- ·předáním se nic nevyřešilo; další worker uvidí stejnou překážku
Co nástroj udělal
Důkaz běhu, z něhož byla tato stránka vygenerována: pass, 5 kroků. Výstup je normalizován: cesta repozitáře, časová razítka, id 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.
-
záznam, ze kterého další relace pokračuje; --close označí úlohu jako předanou, aby mohla začít nová
.ai/local/state/handovers/<time>--main--<head>--<hash>.md
- exit 0
- stdout_contains /\.ai/local/state/handovers//
-
další úloha; předchozí předávka pro tento worktree a větev je jmenována cestou dovnitř
started t-<id> profile=implementation scope=lib
INFO handover .ai/local/state/handovers/<time>--main--<head>--<hash>.md — prior record, same_worktree_same_branch, exact, <age> ago [reproduce: majordomus handover --resolve]
next: majordomus context; checkpoint every 15m; majordomus check before claiming anything
- exit 0
- stdout_contains /^INFO handover/
- stdout_contains /same_worktree_same_branch/
- stdout_contains /next: majordomus context/
-
otázka otevřená pod předchozí úlohou stále blokuje tuto větev
OK knowledge records — 0 record(s) valid against knowledge/v1; every reference resolves [reproduce: majordomus knowledge check]
· checkpoint t-<id> — <timed against the checkpoint interval>
OK records ledger.jsonl — every line is a well-formed event
FAIL blockers t-<id> — 1 unresolved question(s) on this branch; first: t-<id> — does the parser need to accept tabs? [reproduce: majordomus question list]
OK records decisions.md — every entry is attributable
OK scope t-<id> — 1 touched file(s), all within scope
OK state t-<id> — exact (head <head>)
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)
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
check: 12 finding(s), 1 failing
- exit 10
- stdout_contains /^FAIL blockers/
- stdout_contains /unresolved question/
- stdout_contains /tabs/
-
záznam, očíslovaný, s úlohou, pod kterou byl otevřen
1 [unresolved] t-<id> — does the parser need to accept tabs? (<date>)
- exit 0
- stdout_contains /^1 \[unresolved\]/
- stdout_contains /tabs/
-
dokončení navazující úlohy odmítne tentýž záznam
FAIL blockers t-<id> — 1 unresolved question(s) on this branch; first: t-<id> — does the parser need to accept tabs? [reproduce: majordomus question list]
FAIL note t-<id> — no --note file and no handover for this task [reproduce: majordomus handover < note.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, 2 unmet
blocking doctrines:
- majordomus.blocker-resolution
- majordomus.note-integrity
- exit 10
- stdout_contains /^FAIL blockers/
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í
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ř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.
- Předat nedokončenou práci další relaciZastavte se uprostřed úlohy a zanechte dalšímu pracovníkovi něco, na co lze navázat a co není přepis.
- Rozhodnout, zda je dokončená práce skutečně dokončenáVyhodnoťte kontrakt řádek po řádku, místo abyste přijali větu, která tvrdí, že je práce hotová.
- Navažte ve správném worktree, nikdy proti cizí úlozeNajděte předávku, která patří tomuto worktree a větvi, a podívejte se, jak se záznam úlohy z jiného checkoutu ohlásí jako cizí, místo aby se tady vynucoval.