Skip to content

Read at

A snapshot: read at commit 707a04c7ce8 on 2026-10-18T00:01:48Z by majordomus 0.29.0. Nothing on this page is read again. See it live

Roadmap

From intent to impact, in the order the plan's dependencies allow.

Every milestone of the plan with the issues it holds, and the intents the work serves.

  • NowM002plan.roadmap /now
  • NextM003plan.roadmap /next
  • Milestones41plan.roadmap /milestones
  • Intents5intents.list /intents

What it is for

The milestone's own record: why it exists, what it promises, and what would prove it.

The problem

This repository already models work once: milestones are outcomes, issues are execution contracts, no status is stored, and scripts/github-sync projects both onto GitHub with a hash-marked region that protects what a human wrote. The model is not the defect. The defect is that nothing runs the detector: core-check runs github-sync --plan and --render, never --check, so the adapter's exit 11 has never fired in CI. The projection was applied once on 2026-09-04 and has not been applied since. Measured on 2026-09-09 at 867f3a9: 191 drift findings, of which 172 are canonical issues that have never existed on GitHub and 19 are bodies whose canonical text has moved on. All 8 milestones are in sync, which is exactly what makes the rot invisible: the surface a person looks at is the surface that still agrees. Underneath that, the adapter identifies a remote record by parsing its title for an I0001 — prefix and reads the remote through a 200-item page that already holds 19 issues and 117 pull requests, so the mapping breaks when a person renames a title and the read truncates as soon as the backfill runs.

The outcome

The projection cannot rot silently: a gate runs the drift check on every change that can move the model or the adapter, and drift is a CI failure with the record named. Identity travels with the record rather than being parsed out of its title, so renaming a GitHub title moves nothing and creates no duplicate, and the remote can be a fixture, so which record is which is provable with no network. The reconciliation vocabulary distinguishes the states it currently conflates, so missing no longer stands for both a record never created and a record a person deleted, and a remote edit is reported as a remote edit. Above the projection, a pull request names the issue it realises and the edge is derived from git and GitHub rather than remembered, so a merged commit leads back to the acceptance criteria it satisfied and an outcome leads forward to the evidence that it holds. The derivations the shell already computes — ready, blocked, waves, next, status — are readable through the same capability surface as every other thing this repository knows, rather than only from a terminal.

Where it stands

The canonical model is 15 milestones and 184 issues, validated by majordomus plan validate (0 failures, 4 scope warnings) and enforced by lib/doctor.sh and scripts/ci/core-check. scripts/github-sync implements plan, check, apply and render with field ownership and a marker hash. GitHub holds 8 milestones and 19 issues. --check exits 11 on drift and no gate calls it. Issues and milestones are served as documents through objects.get, and none of the plan's derivations is a capability: lib/plan.sh computes them and the Rust executable reads .ai/repo/project/issues/ for filenames only. Evidence carries an optional commit string and no pull request, check run or branch.

Where it should stand

A contributor moves an issue, runs the gates, and CI tells them the projection is behind before a reviewer does. A person renames an issue on GitHub and the next sync updates it rather than duplicating it. A reader asks which pull request realised an issue, or which outcome a merged commit served, and one command answers from derived edges. The plan's readiness is answerable over MCP and HTTP because it is a capability, not a shell function.

In scope

  • scripts/github-sync
  • scripts/ci
  • .ai/repo/ci/gates.yaml
  • .ai/repo/project
  • .ai/repo/rules/project
  • .ai/repo/adrs
  • apps/majordomus-cli/src
  • lib/plan.sh
  • lib/project.sh
  • docs
  • site
  • test/cases

Out of scope

  • Replacing the canonical model, which is not the defect
  • Importing GitHub semantics into canonical records; GitHub stays a projection
  • Moving network calls into the tool itself, which test/cases/08_no_forbidden_constructs.sh forbids
  • A GraphQL client, or any provider abstraction beyond the one GitHub host this repository publishes to
  • Assignees, reactions, projects boards or discussions

Proven when

  • A gate runs the drift check on every change that can move the model or the adapter, and a drift finding fails CI naming the record and the remedy
  • Identity is canonical data: renaming a title on GitHub moves the mapping with it and creates no duplicate record
  • Reconciliation is provable offline against a fixture remote, and a fixture is refused for any mutation
  • The reconciliation vocabulary distinguishes never-created, deleted-remotely, edited-remotely, canonically-moved and conflicting, and each state names what would change before anything changes
  • A pull request is related to the issue it realises by a derived edge, and the relation is traversable in both directions
  • The plan's derivations are readable through the capability surface, and adding one requires no edit to a transport registry
  • Every claim this milestone makes about GitHub is backed by a test that runs offline against a fixture

objects.get0 msAPI/api/v1/objectMCPmajordomus_gettechnical view

Milestone

One milestone of the plan: what it holds, what can start, and what it waits for.

plan.roadmap0 msAPI/api/v1/plan/roadmapMCPmajordomus_plan_roadmaptechnical view

plan.issues0 msAPI/api/v1/plan/issuesMCPmajordomus_plan_issuestechnical view

Milestones

Every milestone, in the plan's order; the plan declares no dates, so none are drawn.

MilestoneStateIssues done
M000Milestone and DAG driven developmentdone15 of 15
M001A blocking question survives a handoverdone4 of 4
M002A durable record names the worker that wrote itactive1 of 4
M003A session is a durable envelope, and knowledge is compiled from what is already canonicalactive11 of 16
M004Performance is executable evidence, and the hot path does no canonical work twiceactive16 of 38
foundationA supervisory control layer that is real rather than describeddone0 of 0
fly-deploymentThe container image is a projection of the repository model, and its smoke is its evidenceactive4 of 32
web-sign-inThe deployed surfaces know who is asking, and the identity providers are dataplanned0 of 8
capability-graphOne capability graph, two projections, and no second inventory of what this repository can doactive9 of 32
external-workspacesAn external workspace is read the way this repository reads anything else, and its content never becomes public by accidentactive1 of 10
two-folder-integrationA repository that adopts Majordomus gains two directories and two lines, and can give them backactive0 of 23
derived-data-integrityA committed derivation describes something it can be a projection ofverify1 of 1
work-graph-githubThe projection to GitHub is gated, identified and traversable, and a merged pull request leads back to the outcome it servedverify10 of 10
intent-lifecycleWork is traceable to the intent it serves, and an intent is satisfied only by evidenceplanned0 of 2
development-runtimeThe runtime has a development surfaceactive38 of 70
test-evidenceEvery verifiable claim and widget resolves to revision-bound test evidence, on every surfaceactive12 of 28
public-proofA visitor sees the product prove itself, and can check every claim it makesactive1 of 2
adopter-upgradesAn adopting repository survives a Majordomus upgrade, and what the tool vendors into it is adopter-neutralactive10 of 17
a-second-adopter-is-servedA second adopter is served: what a foreign repository met on its first day is fixed in the toolactive0 of 1
a-session-leaves-what-it-observedA session leaves what it observed, and the repository routes itdone3 of 3
automationRepository automation is scripted capabilities over typed Rust, not shellactive2 of 5
runtime-trustA runtime is safe to reach from another machine, and joining the mesh trusts nobody by accidentactive5 of 9
runtime-lifecycleOne usable server per checkout starts, attaches, stops and reports its state without races or hidden killsactive5 of 8
mesh-journal-convergesThe cooperation journal is durable, converges under any delivery order, and never lets a stale claim winactive2 of 5
mcp-transports-are-reliableEvery MCP transport delivers each request at most once, bounds what it carries, and honours cancellationverify2 of 2
surfaces-never-disagreeEvery surface projects the same state, says when it was observed, and keeps no list of its ownactive1 of 6
failure-is-visibleEvery failure the runtime can suffer is bounded, tested or stated, and changes the health it reportsactive3 of 4
architecture-is-enforcedA violated invariant fails a gate, and green means every required check ranactive2 of 3
safe-self-updateEvery mesh node follows the published release by itself, versions meet safely, and a release's provenance can be checkedactive2 of 7
every-session-joins-the-meshEvery LLM session joins the Majordomus mesh at start, told the mesh as workplanned0 of 4
truthful-plan-surfacesThe plan's surfaces are inferred from delivery, and nothing they show is typed beside the repositoryactive0 of 9
idd-workspaceThe UI is where the owner directs the work, from an intent to its next moveactive0 of 1
everything-is-followed-in-one-streamEverything that happens in the repository is followed in one streamactive1 of 8
the-mesh-works-out-of-the-boxThe mesh works out of the box: trusted machines find each other by every means and their sessions cooperate from the first turnplanned0 of 6
runtime-adaptersProfiles become runtime constraints rather than adviceplanned0 of 6
intent-planningThe plan of an intent is held to it before executionblocked0 of 2
execution-telemetryExecution telemetry, only from providers that expose it honestlyblocked0 of 5
intent-bound-workA task is bound to the intent it servesblocked0 of 5
cost-per-accepted-outcomeCost per accepted outcome, only on measured datablocked0 of 4
routing-recommendationsRouting recommendations derived from measured costblocked0 of 4
shared-policyShared policy across repositories and workersblocked0 of 5

plan.roadmap0 msAPI/api/v1/plan/roadmapMCPmajordomus_plan_roadmaptechnical view

Intents

What the work is for, and whether the evidence says it is met.

intents.list206 msAPI/api/v1/intentsCLImajordomus intent listMCPmajordomus_intentstechnical view

Issues by status

Every issue of the plan, counted by the plan.

View all
424issues
  • active1
  • blocked159
  • cancelled10
  • done161
  • ready86
  • verify7

plan.status0 msAPI/api/v1/plan/statusMCPmajordomus_plan_statustechnical view

Dependencies

Which milestone waits for which, as the plan records it.

MilestoneDepends onBlocked by
runtime-adaptersfoundation
intent-planningintent-lifecycleintent-lifecycle
execution-telemetryruntime-adaptersruntime-adapters
intent-bound-workintent-planningintent-planning
cost-per-accepted-outcomeexecution-telemetryexecution-telemetry
routing-recommendationscost-per-accepted-outcomecost-per-accepted-outcome
shared-policyrouting-recommendationsrouting-recommendations

plan.roadmap0 msAPI/api/v1/plan/roadmapMCPmajordomus_plan_roadmaptechnical view