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

I1002

Relations are typed, inferred from stable identities, and never dangle

Where it stands

devtask.issue
Readiness
complete completion is recorded and every required evidence token is present
Status
DONE
Can start
not now
Milestone
Milestone status
ACTIVE
Wave
1
Waiting on
none
Holds back
Behind it in all
24
Evidence
2 of 2
A move writes the repository: it stamps one field of this issue's record and appends one event to the ledger, and a commit will carry both.
The same moves from a terminal

majordomus plan start I1002

majordomus plan verify I1002

majordomus plan done I1002

What it is

Objective
Give the graph typed relations — implements, documents, exposes, generated from, enforced by, tested by, benchmarked by, depends on, projects to, served at — inferred where a stable convention exists, declared where it does not, and resolved or refused.
Why
A list of capabilities is an inventory; a graph of them is an architecture a person can navigate. The value is entirely in the edges, and an edge that points at nothing is worse than a missing one because it renders as an empty section instead of an error.
Now
Relations exist implicitly in frontmatter references, capability tags, rule metadata and ADR related lists. Nothing resolves them into a common edge type, and nothing fails when one does not resolve.
Wanted
Every edge has a type, both ends resolve to a node, and an unresolvable edge fails generation with a message naming the declaration, the missing end and the correction.
Done when
unknown: the record declares no `completion`
Risk
Strict resolution can make an unrelated documentation edit fail the build. The message has to be good enough that the failure is a five-second fix rather than an investigation.

Acceptance

  • Each relation type is explicit, and the direction is part of its meaning
  • Inference uses stable identities only, and an ambiguous case requires an explicit declaration instead of a guess
  • A relation whose target does not exist fails generation, naming where it was declared and what is missing
  • Tests cover malformed metadata, duplicate identities and dangling relations
Validation
cargo test --workspace --all-featuresmajordomus generate --check
Evidence required
relations_resolvedangling_refused
Evidence present
relations_resolvedangling_refused

Scope

Touches
apps/majordomus-cli/src/graph.rs
Not
Inference by substring or title matching where a stable identity existsRequiring a contributor to restate a relation the metadata already implies
Depends on
Priority
p0
Profile
deep-work
Parallel safe
true
Owner
unknown: the record declares no `owner`

The work so far

Branches
none
Merged
none
Commits
0
Trunk
master
Sessions
none
Created
2026-09-06
Updated
2026-09-06T16:19:14Z
Started
2026-09-06T15:54:48Z
Verified
unknown: the record declares no `verified_at`
Completed
2026-09-06T16:19:14Z

Synchronisation

Adapter
scripts/github-sync
Repository
unknown: the derived plan's header carries no repository
External issue
unknown: a live GitHub state; this executable makes no network call, so only `scripts/github-sync --check` can answer it
State there
unknown: a live GitHub state; this executable makes no network call, so only `scripts/github-sync --check` can answer it

Findings

Nothing is wrong with these records.