Skip to content

I2740 — An issue's delivery is inferred from branches, pull requests, merges, tags and the published site

Add the capability plan.delivery (CLI majordomus plan delivery [--json] [<id>], HTTP and MCP from the one capability declaration) that answers, for every issue, the furthest stage of none, branch, pr_open, merged, released, deployed, each with the object that proved it and when it was observed, and expose it in the site data the plan pages read.

DONE wave 0 · p0 · implementation profile · parallel safe

Part of truthful-plan-surfaces — The plan's surfaces are inferred from delivery, and nothing they show is typed beside the repository.

Objective

Add the capability plan.delivery (CLI majordomus plan delivery [--json] [<id>], HTTP and MCP from the one capability declaration) that answers, for every issue, the furthest stage of none, branch, pr_open, merged, released, deployed, each with the object that proved it and when it was observed, and expose it in the site data the plan pages read.

Why

ADR 0166. Status is derived from stamps only (lib/project.awk:156-170, plan.rs derive); trace.issue, delivery.report and github-sync each read a part of the truth and nothing joins them. I2653 was merged whole by #1097 and still reads READY.

Current state

trace.issue (capability/builtin/trace.rs, worktree/trace.rs) gives an issue's branches and merged commits; the served forge cache holds pull requests and releases; nothing answers a stage per issue.

Desired state

plan.delivery reuses trace.issue for branches and merges, the issue edge of I1405 for pull requests named by title, branch or trailer, the served forge cache for open pull requests (unread forge reported as unread, never as none), git tag --contains for the first v* tag, and the published latest.json for deployed; scripts/generate-site-data writes site/data/generated/delivery.json from it.

Scope

  • apps/majordomus-cli/src/capability/builtin/plan.rs
  • apps/majordomus-cli/src/plan
  • apps/majordomus-cli/src/plan.rs
  • apps/majordomus-cli/tests/plan_delivery.rs
  • scripts/generate-site-data
  • site/data/generated/delivery.json
  • docs/PLANNING.md
  • docs/generated
  • test/cases/3100_an_issue_delivery_is_inferred.sh

Dependencies

None. This issue is a root of the graph.

What waits on this

Acceptance criteria

  • An issue named by a merged pull request in a fixture repository reads merged with the merge commit, and released once a v* tag contains it
  • An issue with only an open pull request reads pr_open with its number; with an unread forge the answer says unread
  • The capability is declared once and reaches CLI, HTTP and MCP through majordomus generate
  • site/data/generated/delivery.json is produced by the executable and checked by generate-site-data --check

Validation

  • cargo test --manifest-path apps/majordomus-cli/Cargo.toml --test plan_delivery
  • bash test/run.sh 3100_an_issue_delivery_is_inferred

Evidence required

  • delivery_stage_case
  • mutations_fail_the_case

Evidence

coverstypecommandresultat commit
delivery_stage_casetestcargo test --manifest-path apps/majordomus-cli/Cargo.toml --test plan_delivery3 passed, 0 failed (merged with merge commit and PR #5, released by the first release record v0.1.0, pr_open #9 from the forge observation, unread forge reported unread and unsettled, deployed from the observed Pages deployment's latest.json; --at reads history only and is byte-stable across a later tag; CLI = HTTP = MCP)b80c183
mutations_fail_the_casetestbash test/run.sh 3100_an_issue_delivery_is_inferred1 passed; 4 code mutations of src/plan/delivery.rs applied one at a time each failed it where named (slug half of branch_names, merge title dropped, unread forge not named, open pulls empty)b80c183
delivery_stage_casecivalidate run 39438896504 at master 9a5a9b77520: suite-shard (2) job 118683338077 runs 3100_an_issue_delivery_is_inferred; rust (1) job 118683336143 runs cargo test incl. tests/plan_delivery.rssuccess (the run's only red job is pages, which runs no test)573df96

Timeline

started
2026-10-16T09:56:45Z
verified
2026-10-16T13:32:49Z
completed
2026-10-20T22:11:19Z

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

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