Skip to content

I3768 — Every plan surface answers 'when' from the records: a release's date beside its version, and the last delivery date of each open milestone

Let a reader of /roadmap/ (both languages), a /plan/<milestone>/ page or /ui/roadmap tell when things happened without any date being typed or forecast: each release a milestone shipped in is drawn with the publication date its release record holds, each open milestone with the date of its newest delivered issue taken from the inferred delivery, and the latest release with its date, while the sentences saying the plan draws no dates are withdrawn.

BLOCKED wave 3 · p2 · implementation profile · runs alone

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

Blocked. This issue cannot start until I3755, I3440, I3441 are done. The status is derived from that, not declared.

Objective

Let a reader of /roadmap/ (both languages), a /plan/<milestone>/ page or /ui/roadmap tell when things happened without any date being typed or forecast: each release a milestone shipped in is drawn with the publication date its release record holds, each open milestone with the date of its newest delivered issue taken from the inferred delivery, and the latest release with its date, while the sentences saying the plan draws no dates are withdrawn.

Why

Campaign defect D20 (roadmap finding F17): no surface answers 'when'. The plan declares no dates by design, and /ui says so, yet the release records carry a publication time and the delivery projection carries each merge time, so the answer already exists in the repository. The owner decided on 2026-10-20 that the roadmap shows release dates and the last delivery per open milestone on every surface. Dates read from records are observations; a due date or forecast would still be a claim nobody made, and stays out.

Current state

Each of the 33 release records under .ai/repo/releases/ carries published_at (for example .ai/repo/releases/v1.0.0-alpha.1.yaml:8), and site/data/generated/changelog.json carries it again as each section's date. site/data/generated/delivery.json carries merged.merged_at for each merged issue (for example I0102, merged 2026-09-04T07:03:08Z). None of it is drawn: site/templates/roadmap.html:53 prints a milestone's released_in as a bare version and roadmap.html:89-93 print a release tag and a merge commit without a date; site/templates/milestone.html:11 prints counts only. apps/majordomus-cli/src/ui/roadmap.rs:16-18 states that milestones carry no dates so the roadmap is never a calendar, roadmap.rs:233 captions the Milestones panel 'the plan declares no dates, so none are drawn', the Milestones table rows come from apps/majordomus-cli/src/ui/dashboard.rs:173-189 (milestone_row, shared by /ui/roadmap at roadmap.rs:97, the Overview and the IDD workspace) with no date column, roadmap.rs:88 and :433-436 show the latest release as a version without its date, and docs/MAJORDOMUS_UI.md:547 repeats that milestones carry no dates.

Desired state

A milestone's release label reads 'v0.30.2, 2026-10-19', its date the published_at of that release's record (through changelog.json on the site, through the release readings on /ui); a release with no record date shows the version alone. An open milestone reads 'last delivery 2026-10-20' from the newest merged_at among its issues in delivery.json, or 'nothing delivered yet'. /plan/<milestone>/ and /ui/roadmap's Milestones table and inspector show the same two facts, and the Latest release KPI and line add the release's date. Every date is an ISO calendar date in a time element whose datetime holds the full observed timestamp. The no-dates statements in roadmap.rs and docs/MAJORDOMUS_UI.md are replaced by the rule: dates are observed from release records and delivery, never declared or forecast.

Scope

  • site/templates/roadmap.html
  • site/templates/milestone.html
  • apps/majordomus-cli/src/ui/roadmap.rs
  • apps/majordomus-cli/src/ui/dashboard.rs
  • apps/majordomus-cli/src/ui/milestone.rs
  • apps/majordomus-cli/tests/ui_roadmap.rs
  • docs/MAJORDOMUS_UI.md
  • test/cases/3741_every_plan_surface_says_when_from_the_records.sh

Out of scope

  • The public /roadmap/ itself, whose bars and dates I3751 delivers
  • Due dates, target dates, forecasts or a calendar or timeline view of milestones
  • A date field on milestone or issue records: dates stay observations, never declared values (ADR 0166)
  • Measuring delivery flow and its phases: milestone delivery-flow-is-measured
  • Translating the new labels: the multilingual work, after the English settles

Dependencies

Acceptance criteria

  • On a fixture with release records v0.1.0 (published 2026-01-02) and v0.2.0 (published 2026-02-03), a DONE milestone shipped in v0.2.0 reads 'v0.2.0' with the date 2026-02-03 on /roadmap/, on its /plan/ page and in /ui/roadmap
  • A fixture open milestone whose issues merged on 2026-03-01 and 2026-03-05 reads 'last delivery 2026-03-05' on every one of those surfaces, and each date sits in a time element whose datetime is the merged_at it came from
  • Neither apps/majordomus-cli/src/ui/roadmap.rs nor the built /ui/roadmap contains 'the plan declares no dates'
  • Negative: a fixture open milestone with no merged issue shows no date and reads 'nothing delivered yet', and a release record without published_at shows its version with no date rather than the tag's or the build's time

Validation

  • bash test/run.sh 3741_every_plan_surface_says_when_from_the_records 3103_the_roadmap_draws_every_milestone 3104_the_ui_roadmap_reads_delivery
  • cargo test --manifest-path apps/majordomus-cli/Cargo.toml --test ui_roadmap
  • cargo test --manifest-path apps/majordomus-cli/Cargo.toml --test dashboard
  • scripts/site-build && scripts/site-check
  • scripts/ui audit --only /ui/roadmap
  • bin/majordomus plan validate

Evidence required

  • test_every_plan_surface_says_when_from_the_records

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

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