I3971 — Work in an open pull request or under a live branch claim is reported taken and is never the next issue
The one next-issue function I3754 builds (plan.rs ranking, then delivery at the trunk) gains a second, observed pass: a READY candidate whose delivery stage is pr_open (plan/delivery.rs, from the recorded forge observation) or branch with a live claim on the mesh board (read from mesh/state.rs) is passed over as taken and listed with the pull request or claim that put it there and the time of that observation. Taken is a readiness refinement inside READY (devtask/readiness.rs TaskReadiness::Taken), neither a seventh canonical status nor TaskReadiness::Review, which already means VERIFY (readiness.rs:25-27): ISSUE_STATUSES and lib/project.awk stay byte-equal, and readiness.rs's note that no record field can distinguish such a word is amended to say that delivery, an observation, now does. plan next, plan ready and plan.status's next_ready answer the same. The shell's plan next (mj_pj_next_ready, lib/plan.sh:230, 262, 337) cannot read the forge cache or the board, so it asks the executable for the observed pass, and when the executable is absent answers the stamps-only pick labelled as such. plan next --at <rev> keeps I3754's answer that depends on the commit alone.
BLOKOVÁNO vlna 4 · p0 · profil implementation · běží samostatně
Blocked. This issue cannot start until I3754 is done. The status is derived from that, not declared.
Cíl
The one next-issue function I3754 builds (plan.rs ranking, then delivery at the trunk) gains a second, observed pass: a READY candidate whose delivery stage is pr_open (plan/delivery.rs, from the recorded forge observation) or branch with a live claim on the mesh board (read from mesh/state.rs) is passed over as taken and listed with the pull request or claim that put it there and the time of that observation. Taken is a readiness refinement inside READY (devtask/readiness.rs TaskReadiness::Taken), neither a seventh canonical status nor TaskReadiness::Review, which already means VERIFY (readiness.rs:25-27): ISSUE_STATUSES and lib/project.awk stay byte-equal, and readiness.rs's note that no record field can distinguish such a word is amended to say that delivery, an observation, now does. plan next, plan ready and plan.status's next_ready answer the same. The shell's plan next (mj_pj_next_ready, lib/plan.sh:230, 262, 337) cannot read the forge cache or the board, so it asks the executable for the observed pass, and when the executable is absent answers the stamps-only pick labelled as such. plan next --at <rev> keeps I3754's answer that depends on the commit alone.
Proč
Sessions on 2026-10-22 were handed issues whose work was already in an open pull request (I3910 and I3916 were each announced taken while plan next still offered them), so two workers started the same work; the plan reads only stamps, and delivery, which knows of the pull request, is not consulted.
Aktuální stav
Verified at 355a0cee79a: plan.rs:567-580 ranks READY issues by wave, priority and id; plan/delivery.rs derives pr_open from the forge cache (delivery.rs:487-529); devtask/readiness.rs:32 states there is no in_review; ISSUE_STATUSES is plan.rs:51, held to lib/project.awk by case 99_plan_capabilities. I3754 (one next function reading delivery at the trunk only) is BLOCKED and not started.
Cílový stav
plan next never names an issue with an open pull request or a live branch claim; plan ready lists it as taken with its evidence; the canonical six statuses are unchanged.
Rozsah
- apps/majordomus-cli/src/plan.rs
- apps/majordomus-cli/src/plan/delivery.rs
- apps/majordomus-cli/src/devtask/readiness.rs
- apps/majordomus-cli/src/capability/builtin/plan.rs
- lib/plan.sh
- lib/project.sh
- apps/majordomus-cli/src/mesh/state.rs
- apps/majordomus-cli/tests/plan_delivery.rs
- test/cases/99_plan_capabilities.sh
- .ai/repo/project/issues/I3971.yaml
Mimo rozsah
- A new canonical issue status
- Writing any stamp from an observation; the record stays the person's or the lifecycle's
Závislosti
Kritéria přijetí
- With a forge fixture holding an open pull request naming the top READY issue, plan next answers the second and lists the first as taken with the pull request number and the observation time (case work_in_an_open_pull_request_is_not_next)
- A live branch claim on the board passes an issue over the same way; an expired claim does not
- The shell's plan next answers the same through the executable, and labels a stamps-only answer when the executable is absent
- plan next --at <rev> answers from the commit alone, as I3754 defines
- ISSUE_STATUSES and lib/project.awk are unchanged and case 99_plan_capabilities passes
Validace
- bin/majordomus plan validate
- env -u MAJORDOMUS_SHARE cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib -- plan::
- env -u MAJORDOMUS_SHARE cargo test --manifest-path apps/majordomus-cli/Cargo.toml --test plan_delivery
- env -u MAJORDOMUS_SHARE bash test/run.sh 99_plan_capabilities
Požadované důkazy
- work_in_review_is_not_next
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/I3971.yaml. Read it back with majordomus plan show I3971.