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

Everything this repository serves is served to whoever reaches the port. That was safe while the server bound loopback and the only reader was the person standing in front of the checkout, and it stops being safe the moment the deployment milestone puts a public HTTPS URL in front of the same router: the Cockpit, the API, the OpenAPI document and the MCP surface would all be readable by anyone who found the host, and no mutating capability could ever be exposed through the browser because there would be nobody to attribute the mutation to. The obvious repair is the wrong one twice over. Hand-written provider clients for Google and for Facebook would be two implementations of one flow, and a compiled-in list of which providers exist would put an identity decision in Rust source where every other decision of this repository is a declarative object under .ai/repo/. The provider set is expected to change — both of the first two may be struck and replaced once the audience is known — and a change of that kind must be an edit to one object, not a release of the executable.

The outcome

One canonical identity-provider kind under .ai/repo/identity/providers/ describes each provider as data: its issuer, its endpoints or its discovery document, the scopes requested, the claim that carries a stable subject and the environment variable names its credentials arrive in. A single OpenID-Connect-shaped flow in the executable serves every provider in that directory; Google and Facebook are two objects, not two code paths. Sessions are cookie-borne, signed, short and revocable; identity is attached to a request once, in the router, and every surface — HTTP, Cockpit, OpenAPI, MCP — reads it from the same place. The capability registry's effect classification, not a per-route list, decides what an anonymous reader may do, and the OpenAPI document and the Cockpit both state that decision because both project it from the registry. Striking a provider is deleting one file and regenerating.

Where it stands

There is no authentication of any kind: no session, no cookie, no identity type, no login route, no credential handling and no notion of a caller anywhere in apps/majordomus-cli/src/http. The lease file records a URL and the server warns when it binds anything but loopback. The deployment milestone (fly-deployment) states as non-scope that mutating deployment operations must not be exposed to unauthenticated HTTP or to the browser, which is a constraint this milestone is what removes.

Where it should stand

A reader who opens the public URL is served the public read-only surfaces as they are today. A reader who signs in with any provider declared in .ai/repo/identity/providers/ gets a session, is named in the Cockpit, and may invoke the capabilities the effect policy allows a signed-in reader to invoke. Adding a third provider is one YAML file; removing the first two is deleting two files; neither is a code change, and the generated documentation, the Cockpit's sign-in offer and the OpenAPI security scheme all follow from the same objects.

In scope

  • .ai/repo/identity
  • .ai/repo/adrs
  • .ai/repo/rules/project
  • .ai/repo/policy.yaml
  • apps/majordomus-cli/src/identity
  • apps/majordomus-cli/src/capability/builtin
  • apps/majordomus-cli/src/http
  • apps/majordomus-cli/src/cockpit
  • share/kinds.yaml
  • share/allow
  • share/schemas
  • docs
  • site
  • test/cases
  • .github/workflows

Out of scope

  • A user database, a profile store, or any record of a reader beyond the session needed to answer the next request
  • Passwords, password reset, e-mail verification or any credential this repository would itself have to store
  • A provider-specific code path, client library or SDK for Google, for Facebook or for any successor
  • Authorisation roles, groups or an access-control language beyond what the capability registry's effect classification already decides
  • Any credential, client secret or token committed to the repository, written into a generated artifact, rendered into the site or logged
  • Exposing mutating capabilities to a signed-in reader before the effect classification says which ones are safe to expose at all
  • Signing in to the local development server as a requirement; loopback stays open so the existing workflow is unchanged

Proven when

  • Every fact about a provider — issuer, endpoints, scopes, subject claim, credential variable names, display name, ordering — lives in one object under .ai/repo/identity/providers/ and nowhere else
  • Google and Facebook are each one such object, and the executable contains no identifier, endpoint or branch naming either of them
  • Deleting a provider object removes the provider from the sign-in offer, from the generated documentation, from the OpenAPI security scheme and from the Cockpit, with no other edit
  • The flow validates state and nonce, rejects a callback whose state it did not issue, pins the session to the issuer and subject, and refuses a provider whose credentials are absent rather than starting a flow that cannot complete
  • The session cookie is signed, HttpOnly, SameSite-constrained, Secure when the surface is served over HTTPS, and expires; signing out revokes it server-side rather than only clearing it in the browser
  • Identity is resolved once in the router and read by every surface from that one place; no surface parses the cookie a second time
  • What an anonymous reader may do is derived from the capability registry's effect classification rather than from a list of routes
  • No secret sentinel placed in the credential environment variables appears in any response, generated artifact, log line, cache, site output or OpenAPI example
  • The documentation states how to add a provider and how to remove one, and both statements are executed by a test rather than only written

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.list241 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