I2901 — One grammar names an issue id, and every surface reads it
Declare the issue id grammar once: a pattern in the issue schema (or generated from one Rust const) and one plan::is_issue_id, read by ui/prs.rs, ui/idd.rs, case 3220 and share/ui JS, so no surface spells it its own way.
READY wave 0 · p2 · implementation profile · runs alone
Part of idd-reads-at-a-glance — The intent workspace reads at a glance and leads everywhere it names.
Ready. Every dependency is done, so majordomus plan start I2901 will be accepted.
Objective
Declare the issue id grammar once: a pattern in the issue schema (or generated from one Rust const) and one plan::is_issue_id, read by ui/prs.rs, ui/idd.rs, case 3220 and share/ui JS, so no surface spells it its own way.
Why
Four places restate the grammar and disagree: prs.rs says I and four digits, idd.rs any digits, case 3220 /I\\d{4}/, and the schema declares no pattern at all, although all 429 records are I and four digits.
Current state
issue.v1.schema.json types id as a bare string; four surfaces carry their own predicate.
Desired state
The schema states the pattern; one predicate exists and every surface calls it; a test fails if a second one appears.
Scope
- share/schemas/majordomus/issue/issue.v1.schema.json
- apps/majordomus-cli/src/plan.rs
- apps/majordomus-cli/src/ui/prs.rs
- apps/majordomus-cli/src/ui/idd.rs
- test/cases/3220_the_idd_loop_is_walked_in_a_browser.sh
- .ai/repo/project
- docs
- site
Dependencies
None. This issue is a root of the graph.
Acceptance criteria
- The issue schema refuses an id that is not I and four digits
- ui/prs.rs and ui/idd.rs call one plan::is_issue_id
Validation
- majordomus plan validate
- majordomus plan validate
- cargo test --lib plan::
Evidence
None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.
Timeline
- started
- —
- verified
- —
- completed
- —
Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.
Canonical record: .ai/repo/project/issues/I2901.yaml. Read it back with majordomus plan show I2901.