Skip to content

I2844 — plan validate refuses a milestone whose GitHub title would be over 255 characters

Both engines' plan validate (lib/project.awk and plan.rs) refuse a milestone whose projected GitHub title, \"<id> — <title>\" as scripts/github-sync title_of writes it, is over 255 characters, counted in characters rather than bytes, and name the milestone and the projected length.

READY wave 0 · p1 · implementation profile · parallel safe

Part of work-graph-github — The projection to GitHub is gated, identified and traversable, and a merged pull request leads back to the outcome it served.

Ready. Every dependency is done, so majordomus plan start I2844 will be accepted.

Objective

Both engines' plan validate (lib/project.awk and plan.rs) refuse a milestone whose projected GitHub title, \"<id> — <title>\" as scripts/github-sync title_of writes it, is over 255 characters, counted in characters rather than bytes, and name the milestone and the projected length.

Why

On 2026-10-20 master 82ac259d0ae's github-projection went red (run 39392245555, exit 13): 1 of 368 mutations failed, POST milestones answering HTTP 422, because a-prompt-reaches-the-work-it-serves projected to 282 characters. That left the release top's (#1434) structure job unclearable from a branch. The title itself was shortened in the release top; nothing stopped the next one.

Current state

No check bounds a milestone title. The first sign of an over-long one is the GitHub API refusing it during the projection on master.

Desired state

plan validate fails with milestone_title_too_long, naming the milestone and its projected character count, for any milestone over 255 projected characters, in the shell engine and the executable alike. A title exactly at the limit passes, and multi-byte characters count once.

Scope

  • lib/project.awk
  • apps/majordomus-cli/src/plan.rs
  • test/cases/3244_a_milestone_title_fits_on_github.sh
  • .ai/repo/project/issues/I2844.yaml

Out of scope

  • Shortening any milestone title (done in the release top #1434)
  • Issue titles, whose GitHub limit is a separate question

Dependencies

None. This issue is a root of the graph.

Acceptance criteria

  • A milestone projecting to 256 characters fails plan validate in both engines with milestone_title_too_long naming the milestone and 256
  • A milestone projecting to exactly 255 characters, one of them multi-byte, passes
  • Case 3244 fails on master's lib/project.awk

Validation

  • bin/majordomus plan validate
  • bash test/run.sh 3244_a_milestone_title_fits_on_github
  • cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib plan::tests::a_milestone_title_github_would_refuse_is_refused

Evidence required

  • a_milestone_title_fits_on_github_case

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/I2844.yaml. Read it back with majordomus plan show I2844.

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