Skip to content

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

Every plan surface draws every milestone in the graph's order, each issue with its declared status beside the delivery stage inferred from branches, pull requests, merges, tags and the published site; a merged but unrecorded issue turns the trunk red past a window; no milestone carries a typed version; every relationship is a drawn, clickable diagram; every code block is highlighted by one engine with one token-derived palette.

ACTIVE 13 of 23 issues done

ready
9
blocked
1
active
0
verify
0
done
13
cancelled
0

Problem

Measured 2026-10-16 at master d1162668036 (v0.27.0): /roadmap/ lists 8 of 38 milestones, the ones with a hand-typed version 0.1-1.0; issue status is derived from stamps only and nothing compares it with merged work (I2653 merged by #1097 still READY); /ui/roadmap said latest release 0.26.0 under a 0.27.0 header; the landing page states the present in hand-written toml prose; box art survives outside the diagram rule's scope; code is highlighted by three engines, one fetched from a CDN. ADR 0166.

Outcome

Every plan surface draws every milestone in the graph's order, each issue with its declared status beside the delivery stage inferred from branches, pull requests, merges, tags and the published site; a merged but unrecorded issue turns the trunk red past a window; no milestone carries a typed version; every relationship is a drawn, clickable diagram; every code block is highlighted by one engine with one token-derived palette.

Current state

Status from stamps; roadmap filtered by a hand field; landing prose hand-written; three highlighters; diagram rule covers docs, site sources and templates only.

Desired state

plan.delivery and plan.drift capabilities; version inferred from tags; /roadmap/, /plan/, landing page, /ui/roadmap and PLAN_STATUS.md read one derivation; homepage-check refuses present-state prose; diagram rule v2 over ADRs, rules, handbook and UI markdown; syntect everywhere.

Scope

  • apps/majordomus-cli/src/plan.rs
  • apps/majordomus-cli/src/capability/builtin/plan.rs
  • apps/majordomus-cli/src/ui
  • apps/majordomus-cli/src/web
  • lib/project.awk
  • lib/project.sh
  • lib/plan.sh
  • scripts/generate-site-data
  • scripts/ci
  • site/templates
  • site/content-src
  • site/data
  • share/ui
  • share/design
  • share/schemas
  • handbook
  • .ai/repo/project/milestones
  • .ai/repo/rules/project
  • .ai/repo/adrs
  • docs/PLANNING.md
  • docs/DIAGRAMS.md
  • test/cases

Out of scope

  • Writing lifecycle stamps from inference; a merge is not acceptance and evidence still decides DONE (ADR 0166, alternatives).
  • Rewriting the awk status engine; delivery is Rust only.

Acceptance criteria

  • plan.delivery answers a stage with its proving object for every issue, and an unread forge is reported as unread
  • The trunk's ci refuses an issue merged and unrecorded past the declared window, naming the command that settles it
  • No milestone record carries version, and the schema refuses one
  • /roadmap/ and /ui/roadmap list every milestone of the plan in the graph's order, with the inferred stage of each issue linked to its proof
  • homepage-check refuses a present-state sentence in site/data
  • The diagram gate covers ADRs, rules, the handbook and UI markdown, and finds no box art
  • One highlighter: no highlight.js and no CDN highlighter on any surface, and a gate refuses one

Validation

  • bin/majordomus plan validate
  • bash test/run.sh 3100_an_issue_delivery_is_inferred 3101_merged_work_unrecorded_is_drift 3102_a_milestone_version_is_inferred 3103_the_roadmap_draws_every_milestone 3104_the_ui_roadmap_reads_delivery 3105_the_homepage_states_no_present_it_does_not_read 3106_every_published_tree_draws_its_diagrams 3107_one_highlighter

Evidence required

  • delivery_inferred
  • drift_gated
  • surfaces_read_one_derivation
  • diagrams_and_code_unified

Risks

  • The drift gate turns the trunk red on landing for every issue already merged and unrecorded; I2748 records them before the gate is made blocking.
  • syntect adds to the executable's build time and size; measured in I2747 before it lands.

Issues

Each one is an execution contract with its own acceptance criteria, validation command and required evidence. The wave column is the layer of the dependency graph it sits in.

issuestatuswavedepends ontitle
I2740 DONE 0 — An issue's delivery is inferred from branches, pull requests, merges, tags and the published site
I2741 DONE 1 I2740 Merged work the plan has not recorded is drift, and on the trunk past a window it is red
I2742 DONE 0 — A milestone's version is inferred from the release that carried it, never typed
I2743 READY 1 I2740, I2742 The public roadmap draws every milestone in the graph's order, each issue with its inferred delivery
I2744 READY 1 I2740 The UI roadmap reads delivery and the releases themselves, and its now is where work is
I2745 DONE 0 — The landing page states no present it does not read
I2746 DONE 0 — Every published tree draws its diagrams, and every diagram is the interactive viewer
I2747 READY 0 — Every code block on every surface is highlighted by one engine with one palette
I2748 BLOCKED 3 I2741, I2749, I2750 The drift already on the trunk is settled before the gate is made blocking
I2749 READY 2 I2741 A commit that only plans an issue is not its delivery
I2750 READY 2 I2741 The trunk's drift gate reads the forge before it judges
I2850 DONE 0 — the published PR Drain carries its pull requests, and counts pull requests rather than plan issues
I2851 READY 1 I2740 the homepage's product view counts the delivery the history proves beside the statuses the records declare, each count a link
I2852 DONE 0 — every class a UI screen gives an element is one the UI's stylesheet defines
I3020 DONE 0 — The Knowledge screen states nothing about the repository that its checkout could not observe
I3021 DONE 0 — The Knowledge screen shows each review command as code with what it does as a sentence
I3022 DONE 0 — An empty knowledge queue is one sentence that says how a record arrives, not two empty tables
I3023 DONE 0 — The Knowledge screen reads in review order, in plain labels, and leads to the knowledge manual
I3024 DONE 0 — The Knowledge screen's manual link names a page the site has, on the server and on Pages
I3025 DONE 0 — Every Knowledge tile reads whole at a phone's width
I3079 READY 0 — The links of the Deployments table on /ui/delivery meet the target size at every audited width
I3271 READY 2 I2741 plan.drift reports a source it could not observe as unknown, never as a drift finding
I3319 READY 0 — No record names a repository a design was studied in

The graph

truthful-plan-surfaces dependency graphfrom .ai/repo/project
flowchart LR
    I2740["I2740<br/>An issue's delivery is inferred from branches, pull requests, merges, tags and the published site"]:::done
    I2741["I2741<br/>Merged work the plan has not recorded is drift, and on the trunk past a window it is red"]:::done
    I2742["I2742<br/>A milestone's version is inferred from the release that carried it, never typed"]:::done
    I2743["I2743<br/>The public roadmap draws every milestone in the graph's order, each issue with its inferred delivery"]:::ready
    I2744["I2744<br/>The UI roadmap reads delivery and the releases themselves, and its now is where work is"]:::ready
    I2745["I2745<br/>The landing page states no present it does not read"]:::done
    I2746["I2746<br/>Every published tree draws its diagrams, and every diagram is the interactive viewer"]:::done
    I2747["I2747<br/>Every code block on every surface is highlighted by one engine with one palette"]:::ready
    I2748["I2748<br/>The drift already on the trunk is settled before the gate is made blocking"]:::blocked
    I2749["I2749<br/>A commit that only plans an issue is not its delivery"]:::ready
    I2750["I2750<br/>The trunk's drift gate reads the forge before it judges"]:::ready
    I2850["I2850<br/>the published PR Drain carries its pull requests, and counts pull requests rather than plan issues"]:::done
    I2851["I2851<br/>the homepage's product view counts the delivery the history proves beside the statuses the records declare, each count a link"]:::ready
    I2852["I2852<br/>every class a UI screen gives an element is one the UI's stylesheet defines"]:::done
    I3020["I3020<br/>The Knowledge screen states nothing about the repository that its checkout could not observe"]:::done
    I3021["I3021<br/>The Knowledge screen shows each review command as code with what it does as a sentence"]:::done
    I3022["I3022<br/>An empty knowledge queue is one sentence that says how a record arrives, not two empty tables"]:::done
    I3023["I3023<br/>The Knowledge screen reads in review order, in plain labels, and leads to the knowledge manual"]:::done
    I3024["I3024<br/>The Knowledge screen's manual link names a page the site has, on the server and on Pages"]:::done
    I3025["I3025<br/>Every Knowledge tile reads whole at a phone's width"]:::done
    I3079["I3079<br/>The links of the Deployments table on /ui/delivery meet the target size at every audited width"]:::ready
    I3271["I3271<br/>plan.drift reports a source it could not observe as unknown, never as a drift finding"]:::ready
    I3319["I3319<br/>No record names a repository a design was studied in"]:::ready
    I2740 --> I2741
    I2740 --> I2743
    I2740 --> I2744
    I2740 --> I2851
    I2741 --> I2748
    I2741 --> I2749
    I2741 --> I2750
    I2741 --> I3271
    I2742 --> I2743
    I2749 --> I2748
    I2750 --> I2748
    classDef done stroke:#16a34a,fill:#dcfce7,color:#14532d,stroke-width:2px
    classDef active stroke:#2563eb,fill:#eff6ff,color:#1e3a8a,stroke-width:2px
    classDef verify stroke:#7c3aed,fill:#f5f3ff,color:#4c1d95,stroke-width:2px
    classDef ready stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
    classDef planned stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
    classDef blocked stroke:#b45309,fill:#fffbeb,color:#78350f,stroke-width:2px
    classDef cancelled stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2px
    classDef superseded stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2px

Canonical record: .ai/repo/project/milestones/truthful-plan-surfaces.yaml. Read it back with majordomus plan show truthful-plan-surfaces.

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