Skip to content

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.

Searches the titles and descriptions of every page this site publishes.