Schemas
Every component of the document, derived from the Rust types the capabilities take and return. Each row of the API's shape is the type's own field, its doc comment the description.
ActiveTask
object
The active task of this checkout, when there is one.
| property | type | required | description |
| id |
string |
yes |
The task id. |
| task |
string |
yes |
What is being worked on. |
| profile |
string |
yes |
The execution profile it runs under. |
| outcome |
string |
yes |
Its typed outcome so far: active, handed_over, or a finished one. |
| scope |
array of string |
no |
The paths it claims. |
| requires |
array of string |
no |
The obligations it owes before the outcome completed is available.
Beside scope and not inside it, because the two are different promises: scope is
containment — where a worker may write — and this is delivery. A change can sit
entirely inside its scope and still be uncommitted on a laptop (ADR 0030).
[super::obligations] is what judges each of these against its evidence; here it
is reported as declared. |
| started_at |
string |
no |
When it started. |
| head |
string |
no |
The commit it started at. |
Used by Closure Continuity
Actor
object
Who asked, and which peer they are when this process knows.
| property | type | required | description |
| kind |
ActorKind → ActorKind |
yes |
Where the request came from. |
| peer |
string | null |
no |
The peer id, for a call that arrived through an MCP session. |
Used by ExecutionView
ActorKind
"http" | "mcp" | "cli" | "internal"
Who asked for the execution. Not an authorisation decision — this server authenticates
nobody — but a fact worth carrying into the audit line and the UI.
httpAn HTTP client, which includes the Cockpit.mcpAn MCP client attached to this process.cliThe command line of this process.internalThis executable's own tests and benchmarks.
Used by Actor
AdrRef
object
One architecture decision the feature names.
| property | type | required | description |
| id |
string |
yes |
The declared id. |
| title |
string |
yes |
The title. |
| status |
string |
yes |
proposed, accepted, superseded or rejected. |
| path |
string |
yes |
Repository-relative path. |
Used by ResolvedRefs
AnnounceInput
object
The input of peers.announce: what the calling peer is working on.
| property | type | required | description |
| intent |
string |
yes |
One line, in the peer's words: the task, the question, the intent. |
| scope |
array of string |
no |
Repository-relative paths the peer expects to touch. Informational: other peers
read it to avoid a collision; nothing here enforces it. |
Used by peers.announce
Announced
object
What announce answers: the peer as recorded, and who else is on that ground.
| property | type | required | description |
| id |
PeerId → PeerId |
yes |
p1, p2, ... |
| client |
ClientInfo → ClientInfo |
yes |
The client behind it. |
| transport |
Transport → Transport |
yes |
How it is attached. |
| connected_at |
string |
yes |
When it attached, RFC 3339, UTC. |
| last_seen_seconds_ago |
integer (uint64) |
yes |
Seconds since its last message. |
| attached |
boolean |
yes |
Whether the session is still attached. A peer that announced something and then
went away is kept and listed with attached: false: what it said it was working on
outlives the connection that said it, because the work does. |
| announcement |
Announcement | null → Announcement |
no |
Its announcement, when it made one. |
| overlaps |
array of Overlap → Overlap |
no |
Every other peer whose claimed scope meets this one. Empty is the ordinary case. |
Used by peers.announce
Announcement
object
What a peer said it is working on.
| property | type | required | description |
| intent |
string |
yes |
One line: the task or intent, in the peer's words. |
| scope |
array of string |
yes |
Repository-relative paths the peer expects to touch; informational, never enforced here. |
| at |
string |
yes |
When it was announced, RFC 3339, UTC. |
Used by Announced Peer
AnswerView
object
A URI a query projects (majordomus://repository), answered: the same fields a client
reads on an [ObjectView] where they apply, the answer itself as data, and the text
resources/read returns for the URI.
| property | type | required | description |
| uri |
string |
yes |
The URI as given. |
| id |
string |
yes |
The capability that answered (repository.info). |
| kind |
CapabilityKind → CapabilityKind |
yes |
Its kind: query. |
| identity |
string |
yes |
The resource name a client lists (repository). |
| title |
string |
yes |
The capability's title. |
| description |
string | null |
no |
The capability's description, when it has one. |
| answer |
any |
yes |
The answer, as the capability's output schema describes it (capabilities.describe
carries that schema). |
| provenance |
CapabilityProvenance → CapabilityProvenance |
yes |
Where the capability comes from: the Rust module it is composed in. |
| media_type |
string |
yes |
application/json. |
| content |
string |
yes |
The answer as text: byte for byte what resources/read returns for the URI. |
Used by ResourceView
Arch
"x86_64" | "aarch64"
A processor architecture.
x86_6464-bit x86, detected as `x86_64` or `amd64`.aarch6464-bit ARM, detected as `aarch64` or `arm64`.
Used by TargetView
AreaList
object
Every area.
| property | type | required | description |
| count |
integer (uint) |
yes |
How many. |
| areas |
array of AreaView → AreaView |
yes |
Each, with its derived membership, in presentation order. |
Used by why.areas
AreaView
object
One area, with the membership nobody authored.
| property | type | required | description |
| id |
string |
yes |
The identity, the slug and the file name. |
| title |
string |
yes |
The area. |
| summary |
string |
yes |
One line: what falls under it. |
| status |
string |
yes |
stable, draft or deprecated. |
| weight |
integer (uint32) |
no |
Presentation order. |
| tags |
array of string |
no |
Free tags. |
| route |
string |
no |
Derived: /why/areas/<id>/. |
| source |
string |
no |
Derived: the file it came from. |
| body |
string |
no |
The Markdown body. |
| moments |
array of string |
yes |
Derived: the public moments that fall under it, in presentation order. |
| count |
integer (uint) |
yes |
Derived: how many. |
Used by AreaList CatalogueView
ArtifactFormat
"json" | "yaml" | "markdown" | "text"
The encoding one generated artifact is written in.
jsonA JSON document: pretty-printed, one trailing newline, provenance as members.yamlThe same document in the layer's YAML, provenance as a comment banner.markdownMarkdown for a reader, provenance as an HTML comment.textLine-oriented text another program reads: the shell tool's allow-lists,
provenance as `#` comments.
Used by artifacts.list ArtifactView DocumentView
ArtifactReport
object
The answer of artifacts.list.
| property | type | required | description |
| manifest |
string |
yes |
The manifest this was read from, repository-relative. |
| present |
boolean |
yes |
Whether the manifest is committed in this repository at all. A repository that has
never run majordomus generate has no generated tree, which is a fact about it and
not a failure of this call: every list below is then empty and every tally zero. |
| schema |
string |
yes |
The schema the manifest carries, empty when there is none to read. |
| documents |
array of DocumentView → DocumentView |
yes |
The documents, in the manifest's order. |
| artifacts |
array of ArtifactView → ArtifactView |
yes |
The files, in the manifest's order, after any filter. |
| tallies |
ArtifactTallies → ArtifactTallies |
yes |
The counts. |
| regenerate |
string |
yes |
The command that rewrites every one of them. |
| verify |
string |
yes |
The command that decides staleness byte for byte, which is stronger than the hash. |
Used by artifacts.list
ArtifactState
"current" | "stale" | "missing" | "present"
Where one generated file stands against the tree it is committed in.
currentThe file is there and its bytes hash to what the manifest recorded.staleThe file is there and its bytes differ: it was edited, or the generator moved on.missingThe manifest names it and the tree does not have it.presentThe file is there and the manifest records no hash for it: the manifest's own
encodings, which cannot hash themselves. `generate --check` compares them.
Used by ArtifactView
ArtifactTallies
object
How many of each, so a caller needs no arithmetic of its own.
| property | type | required | description |
| documents |
integer (uint) |
yes |
Documents in the manifest. |
| artifacts |
integer (uint) |
yes |
Files in the manifest, after any filter. |
| current |
integer (uint) |
yes |
Hashes that match. |
| stale |
integer (uint) |
yes |
Hashes that do not. |
| missing |
integer (uint) |
yes |
Files the manifest names and the tree lacks. |
| present |
integer (uint) |
yes |
Files the manifest records no hash for. |
Used by ArtifactReport
ArtifactView
object
One generated file, as the manifest declares it and as the tree has it.
| property | type | required | description |
| path |
string |
yes |
Repository-relative path. |
| document |
string |
yes |
The document it projects. |
| format |
ArtifactFormat → ArtifactFormat |
yes |
The encoding. |
| schema |
string | null |
no |
The JSON Schema its content satisfies, when it declares one. |
| source |
string |
yes |
One line: what it was derived from. |
| bytes |
integer | null |
no |
The size the manifest recorded. |
| sha256 |
string | null |
no |
The hash the manifest recorded. |
| state |
ArtifactState → ArtifactState |
yes |
Where the file stands against it. |
Used by ArtifactReport
Attribution
"attributed" | "unattributed" | "ambiguous"
What is known about the contract one commit served.
attributedExactly one issue's branches contain it.unattributedNo branch naming an issue contains it.ambiguousBranches naming more than one issue contain it.
Used by CommitAttribution
AudienceList
object
Every audience.
| property | type | required | description |
| count |
integer (uint) |
yes |
How many. |
| audiences |
array of AudienceView → AudienceView |
yes |
Each, with its derived membership, in presentation order. |
Used by why.audiences
AudienceView
object
One audience, with the membership nobody authored.
| property | type | required | description |
| id |
string |
yes |
The identity, the slug and the file name. |
| title |
string |
yes |
Who they are. |
| short_title |
string | null |
no |
Two or three words for a filter chip. |
| summary |
string |
yes |
One line: the working situation. |
| workflow |
string | null |
no |
One line: how work flows for them. |
| status |
string |
yes |
stable, draft or deprecated. |
| weight |
integer (uint32) |
no |
Presentation order. |
| tags |
array of string |
no |
Free tags. |
| route |
string |
no |
Derived: /why/audiences/<id>/. |
| source |
string |
no |
Derived: the file it came from. |
| body |
string |
no |
The Markdown body. |
| moments |
array of string |
yes |
Derived: the public moments that name it, in presentation order. |
| count |
integer (uint) |
yes |
Derived: how many. |
Used by AudienceList CatalogueView
BenchmarkPolicy
one of 2 variants
Whether the capability is a benchmark target. Required is the default and the norm:
every executable capability is timed directly and through every transport it is
exposed on, with the cases its input type provides.
variant Timed directly and through every exposure; coverage fails without a case.
variant Not timed, for the typed reason; coverage reports it as waived, never as covered.
Used by Capability CapabilitySummary
BranchState
object
One local branch, with or without a work tree.
| property | type | required | description |
| name |
string |
yes |
The branch, short. |
| head |
string |
yes |
The commit it points at. |
| trunk |
boolean |
yes |
This branch is the trunk. |
| expected_path |
string | null |
no |
Where its work tree belongs. |
| worktree |
string | null |
no |
Where it is checked out, when it is. |
| upstream |
UpstreamState | null → UpstreamState |
no |
The upstream and its distance. |
| merged_into_trunk |
boolean | null |
no |
Reachable from the trunk. Absent when the trunk is unknown. |
| cleanup_eligible |
boolean |
yes |
Merged into the trunk, not the trunk, and either not checked out or checked out in a
work tree known to be clean. Derived state, never acted on automatically. |
| issue |
string | null |
no |
The issue this branch provably names. |
Used by RepositoryTopology
BranchTrace
object
One branch that names an issue, with the commits it holds.
| property | type | required | description |
| name |
string |
yes |
The ref, short: feature/I1305-traceability, or origin/feature/I1305-traceability
when only the remote still has it. |
| remote |
boolean |
yes |
True when the ref is a remote-tracking one and no local branch of the same name
stands for it. |
| head |
string |
yes |
The commit the ref points at. |
| integration |
Integration → Integration |
yes |
How it stands to the trunk. |
| merge_commit |
string | null |
no |
The merge commit that brought it into the trunk, when one did. |
| note |
string | null |
no |
Why the commit list is what it is, when it is worth a sentence. |
| commits |
array of CommitRef → CommitRef |
yes |
The commits this branch holds and the trunk did not, newest first, merges excluded. |
Used by IssueTrace
Budgets
object
The measured figures this deployment is held to. Each is written by the run that
measured it; an absent one has not been measured yet and is not a licence.
| property | type | required | description |
| image_bytes |
Positive | null → Positive |
no |
Largest accepted compressed image size. |
| binary_bytes |
Positive | null → Positive |
no |
Largest accepted stripped binary size. |
| build_context_bytes |
Positive | null → Positive |
no |
Largest accepted build context. |
| cold_start_ms |
Positive | null → Positive |
no |
Longest accepted time from a stopped machine to a served response. |
| resident_memory_mb |
Positive | null → Positive |
no |
Largest accepted resident set under load. |
| blocking_check_ms |
Positive | null → Positive |
no |
Longest accepted time for one liveness or readiness check. |
| request_p99_ms |
Positive | null → Positive |
no |
Longest accepted p99 for a served request. |
Used by DeploymentView
Build
object
What is shipped and what it is built from.
| property | type | required | description |
| package |
string |
yes |
The Cargo package that is built. |
| binary |
string |
yes |
The binary target the image runs. |
| profile |
string |
yes |
The Cargo profile the image is built under. |
| inputs |
array of string |
yes |
The repository-relative paths the build context carries, and the only ones. |
| site |
string | null |
no |
The directory the canonical site pipeline writes; absent means the image serves no
site. |
Used by DeploymentView
BuildReport
object
What this executable is: enough to tell two builds apart without asking a repository.
| property | type | required | description |
| version |
string |
yes |
The version of the crate this executable was built from. |
| target |
string |
yes |
The Rust target triple it was built for; the model names a target by the same string. |
| profile |
string |
yes |
The cargo profile. |
| commit |
string |
yes |
The commit, or unknown when it was built outside a work tree. |
| distribution_target |
string | null |
no |
The target of the model this build matches, when the model declares one for the triple. |
Used by distribution.build
CachePolicy
one of 2 variants
Whether, and how, the executor keeps results of this capability. Cache lives in the
executor and nowhere else, so MCP, HTTP and the command line share one; the key is the
canonical id, the normalised input and the registry fingerprint, so a changed
repository never answers from an old entry.
variant Every call runs the handler.
variant Results are kept in this process's memory, bounded, for equal inputs.
| max_entries | integer (uint) | yes | The most entries kept for this capability; the oldest is evicted first. |
| ttl_seconds | integer | null | no | Seconds an entry stays valid; `None` for the life of the process. |
| policy | "process" | yes | |
Used by Capability CapabilitySummary
CancelInput
object
The input of executions.cancel.
| property | type | required | description |
| id |
string |
yes |
The execution's id. |
Used by executions.cancel
CancelReport
object
The answer of executions.cancel.
| property | type | required | description |
| outcome |
string |
yes |
What asking achieved: requested, already_requested or already_finished. |
| cancellable |
boolean |
yes |
Whether the capability declares that it looks at its cancellation flag. When it
does not, the request is recorded and the execution runs to completion. |
| execution |
ExecutionView → ExecutionView |
yes |
The execution as it stands after the request. |
Used by executions.cancel
CanonicalSchema
object
A JSON Schema with, when the type has one, a stable component name (the type's title).
| property | type | required | description |
| name |
string | null |
no |
The component name projections use (RepositoryInfo); None for an anonymous
schema such as the empty input. |
| schema |
any |
yes |
The schema itself, without $schema; nested types live under $defs. |
Used by Capability
Capability
object
The canonical descriptor. Everything a projection may say about a capability is here.
| property | type | required | description |
| id |
CapabilityId → CapabilityId |
yes |
The canonical identity. |
| module |
ModuleId → ModuleId |
yes |
The module that composes it: the id's namespace for a builtin, the kind for a
declarative object. |
| kind |
CapabilityKind → CapabilityKind |
yes |
Query, command or resource. |
| title |
string |
yes |
The short name every projection shows. |
| description |
string |
yes |
The one-paragraph description every projection shows. |
| input |
CanonicalSchema → CanonicalSchema |
yes |
The canonical schema of the input; an empty object for a resource. |
| output |
CanonicalSchema → CanonicalSchema |
yes |
The canonical schema of the output; the object view for a resource. |
| provenance |
CapabilityProvenance → CapabilityProvenance |
yes |
Where it came from. |
| exposure |
Exposure → Exposure |
yes |
Where it is projected; absence is explicit. |
| availability |
CapabilityAvailability → CapabilityAvailability |
yes |
Where it means anything: classified from the kind and the transports above, so
that a projection reads a field instead of deciding for itself. |
| visibility |
CapabilityVisibility → CapabilityVisibility |
yes |
Who it is for: classified from the same transports. |
| stability |
Stability → Stability |
yes |
Where it stands. |
| tags |
array of string |
no |
Free tags, from the declarative object's tags or the descriptor. |
| benchmark |
BenchmarkPolicy → BenchmarkPolicy |
yes |
Whether it is a benchmark target; the cases come from the input type. |
| cache |
CachePolicy → CachePolicy |
yes |
Whether the executor keeps its results. |
| execution |
ExecutionPolicy → ExecutionPolicy |
yes |
What running it as an execution means: classified from the kind, so that a client
reads a fact rather than deciding for itself. |
Used by capabilities.describe
CapabilityAvailability
"always" | "runtime" | "build_time" | "authenticated"
Where a capability means anything: the environment a caller must be in for it to
answer at all.
The published site and the running server are genuinely different places. Without this
on the model, every template grows its own idea of what works where — and the usual
shape that takes is a condition on the page's own address, which is a rule hidden
where nobody will find it and nothing can test it. This is the only thing a projection
may ask.
It is classified rather than declared: the facts that decide it — what kind of thing
this is and which transports it is projected through — are already on the descriptor,
and asking each declaration to restate them would be the same knowledge written twice.
[Availability::classify] is the one place the rule lives.
alwaysTrue in every environment, a published page with no server included: the layer's
own content, which a build renders and a process serves from the same index.runtimeA process must be running to answer: everything with a handler, whether it is
reached over HTTP, over MCP or from the command line.build_timeA value captured when the site was generated, rendered afterwards as the capture
it is. Nothing classifies to this yet; the static projection of the graph is what
will declare it, and it is on the model so that a captured value can be labelled
as captured instead of being shown as current.authenticatedA process must be running and the caller must be one it has authenticated. Nothing
in this repository authenticates a caller yet; a surface that does will say so
here rather than in the template that renders its link.
Used by Capability
CapabilityId
string
A stable, globally meaningful identity: a namespace, a dot, and a local part.
repository.info and objects.get for executables; <kind>.<identity> for a
declarative object (rule.majordomus.scope-integrity@1, document.docs/CLI.md,
policy..ai/repo/policy.yaml).
Grammar: the namespace matches [a-z][a-z0-9_-]*; the local part is non-empty and
carries no whitespace or control character, any other Unicode included, because it is
opaque: a path, a versioned identity, or a name, as the kind's identity rule produced it.
Used by Capability CapabilitySummary CommandProvenance
CapabilityKind
"query" | "command" | "resource"
What a capability is. Three kinds exist because three semantics exist: something that
is executed and changes nothing, something that is executed and changes this process's
own memory, and something that is read. Nothing of any kind writes to the repository.
How long a call takes is not a kind. A read that walks every file of the layer is
still a read, and the thing that makes it worth watching — that it reports as it goes
and stops when it is asked to — is one property of its handler, declared with
[crate::capability::Executable::cancellable] and carried on [ExecutionPolicy].
queryExecutable and read-only: a typed handler, an input schema, an output schema.commandExecutable with an effect on this process's in-memory state and nowhere else (a
peer announcing itself): a typed handler, bound to `POST` over HTTP, and announced
to MCP clients as not read-only.resourceDeclarative content the repository holds: read as it is, never executed.
Used by AnswerView Capability CapabilitySummary
CapabilityList
object
The answer of capabilities.list: the matching capabilities, summarised, and the
registry counted.
| property | type | required | description |
| count |
integer (uint) |
yes |
How many capabilities matched the filters. |
| summary |
Summary → Summary |
yes |
The whole registry, counted by kind, stability and projection. |
| capabilities |
array of CapabilitySummary → CapabilitySummary |
yes |
The matching capabilities, by id, without their schemas. |
Used by capabilities.list
CapabilityProvenance
one of 2 variants
Where a capability came from. Never an absolute path.
variant Written in Rust, in the named module of this executable.
Written in Rust, composed in `builtin.rs`.
| module | string | yes | The Rust module the descriptor was composed in. |
| source | "builtin" | yes | |
variant Read from the repository's layer.
| path | string | yes | Repository-relative path. |
| directory | string | yes | The directory the path sits in, repository-relative; `.` for the root. |
| source_class | string | yes | The `sources.yaml` class that discovered the file. |
| section | string | null | no | The manifest section the path falls under, when it falls under one. |
| media_type | string | yes | IANA media type of the object's content. |
| member | string | null | no | For one member of a collection file, its key path in the file (`claims.3`). |
| source | "declarative" | yes | |
Used by AnswerView Capability CapabilitySummary
CapabilityRef
object
One capability of a module the feature names, with the projections the registry
declares for it.
| property | type | required | description |
| id |
string |
yes |
The canonical id. |
| title |
string |
yes |
The title. |
| kind |
string |
yes |
query, command or resource. |
| stability |
string |
yes |
Where it stands. |
| tool |
string | null |
no |
The MCP tool name, when exposed as one. |
| resource |
string | null |
no |
The MCP resource URI, when exposed as one. |
| route |
string | null |
no |
METHOD /path, when exposed over HTTP. |
| cli |
string | null |
no |
The words after majordomus, when exposed on the command line. |
Used by ModuleRef
CapabilitySummary
object
One capability as a listing shows it: everything the descriptor says except its two
schemas, which capabilities.describe answers for one capability. A listing of a
repository's registry runs to hundreds of entries; their schemas would be megabytes
of the same object view repeated.
| property | type | required | description |
| id |
CapabilityId → CapabilityId |
yes |
The canonical identity. |
| module |
ModuleId → ModuleId |
yes |
The module that composes it. |
| kind |
CapabilityKind → CapabilityKind |
yes |
Query, command or resource. |
| title |
string |
yes |
The short name. |
| description |
string |
yes |
The one-paragraph description. |
| provenance |
CapabilityProvenance → CapabilityProvenance |
yes |
Where it came from. |
| exposure |
Exposure → Exposure |
yes |
Where it is projected. |
| stability |
Stability → Stability |
yes |
Where it stands. |
| tags |
array of string |
no |
Free tags. |
| benchmark |
BenchmarkPolicy → BenchmarkPolicy |
yes |
Whether it is a benchmark target. |
| cache |
CachePolicy → CachePolicy |
yes |
Whether the executor keeps its results. |
Used by CapabilityList
CapabilityVisibility
"public" | "developer" | "internal"
Who a capability is for, and whether anything offers it.
Internal is a statement, not an omission: a capability nothing projects is invisible
either way, and the difference between deliberate and forgotten is exactly what this
records.
publicOffered to anyone who can reach the process: an HTTP route or an MCP entry.developerOffered to whoever runs the executable, and to nobody over a network.internalProjected nowhere. It exists, it is listed as existing, and no surface offers it.
Used by Capability
CatalogueView
object
The whole catalogue as a client reads it.
| property | type | required | description |
| schema |
string |
yes |
[SCHEMA]. |
| fingerprint |
string |
yes |
The hash of the catalogue's own sources: stable for a tree, and independent of the
rest of the index, so two runs over one tree agree. |
| counts |
Counts → Counts |
yes |
The counts. |
| moments |
array of MomentSummary → MomentSummary |
yes |
The matching moments, in presentation order. |
| audiences |
array of AudienceView → AudienceView |
yes |
Every audience, with its derived membership. |
| areas |
array of AreaView → AreaView |
yes |
Every area, with its derived membership. |
| facets |
Facets → Facets |
yes |
The filters, derived from the records. |
Used by why.list
Category
object
One category of out: pathspecs and file-name patterns.
| property | type | required | description |
| paths |
array of string |
no |
Pathspecs anchored at the repository root. |
| names |
array of string |
no |
Patterns matched against the file name alone. |
Used by Out
Channel
"stable" | "prerelease"
Which releases an unpinned installation may resolve to.
stableResolved by `latest`.prereleasePublished, addressable by its exact tag, never resolved by default.
Used by ReleaseView
CheckState
"ok" | "failed" | "unknown"
The state of one check in the installability report. Three states and no more: a check
either holds, does not, or could not be made from what this process can see.
okThe check holds.failedThe check does not hold, and the public installation is affected.unknownThe check could not be made here; it says nothing either way.
Used by InstallCheck
ClaimRef
object
One claim the feature names, with the status the matrix gives it.
| property | type | required | description |
| id |
string |
yes |
The claim id. |
| claim |
string |
yes |
The sentence. |
| status |
string |
yes |
guaranteed, advisory, planned or rejected. |
Used by ResolvedRefs
Classification
object
One path, judged.
| property | type | required | description |
| path |
string |
yes |
The path, repository-relative, as judged. |
| verdict |
Verdict → Verdict |
yes |
In or out. |
| reason |
Reason | null → Reason |
no |
Why it is out; absent when it is in. |
| rule |
string | null |
no |
The pattern or limit that decided: the in pathspec, the out pattern, binary,
max_bytes or fixtures.max_bytes; absent for undeclared. |
| exists |
boolean |
yes |
Whether the path exists in the work tree; a path that does not is judged by name. |
| directory |
boolean |
yes |
Whether the path is a directory; a directory is in when something beneath it can be. |
| bytes |
integer | null |
no |
The size, when the path is an existing file. |
Used by repository.scope_classify
CliExposure
object
How a capability appears on the command line: the words after majordomus.
| property | type | required | description |
| path |
array of string |
yes |
The words after majordomus, e.g. ["capabilities", "list"]. |
Used by Exposure
ClientInfo
object
What a client said about itself in initialize.
| property | type | required | description |
| name |
string |
yes |
clientInfo.name: claude-code, codex, gemini-cli, whatever the client sends. |
| version |
string |
yes |
clientInfo.version. |
| title |
string | null |
no |
clientInfo.title, when the client sends one. |
Used by Announced Peer
Closure
object
What this checkout's active task owes, and how much of it is still true.
A clone that has never run the lifecycle answers this too, and answers it as absence:
present false, no task, and a finding saying so. "Nothing owed" and "nothing to owe
it" are different facts, and a served instance must not report the second as the first.
use majordomus_cli::capability::builtin::obligations::Closure;
let fresh: Closure = serde_json::from_str(
r#"{"present":false,"worktree":"/srv/clone","branch":"master","closed":false,
"tallies":{},
"findings":["no active task in this checkout (.ai/local/state/current.yaml); nothing owes anything here"]}"#,
)
.unwrap();
assert!(!fresh.present && !fresh.closed, "nothing that does not exist is closed");
assert!(fresh.task.is_none() && fresh.obligations.is_empty());
assert_eq!(fresh.findings.len(), 1, "absence is reported, not implied");
| property | type | required | description |
| present |
boolean |
yes |
Whether this checkout has a task to report about at all. False in a clone that has
never run the lifecycle, which is not a fault and is not "nothing owed". |
| worktree |
string |
yes |
The worktree this answer is about. Every reading below is scoped to it, and to no
other checkout of the same repository. |
| branch |
string |
yes |
The branch, or DETACHED. |
| head |
string |
no |
The commit this checkout is on. |
| working_tree |
string |
no |
clean or dirty. |
| task |
ActiveTask | null → ActiveTask |
no |
The active task, or None. Its requires is the list the entries below expand. |
| closed |
boolean |
yes |
True when the task declares obligations and every one of them is discharged and
current — that is, when majordomus.obligation-closure would not refuse
finish --outcome completed. False when anything is owed, stale or undeclared, and
false when there is no task: nothing that does not exist is closed. |
| tallies |
map of integer (uint) |
yes |
How many obligations stand where, by state word. Absent states are absent rather
than zero, so a reader never has to know the vocabulary to read the tallies. |
| obligations |
array of ObligationClosure → ObligationClosure |
no |
Every obligation the task declared, in the order it declared them. |
| findings |
array of string |
no |
What a reader should know before trusting any of the above: an unreadable
vocabulary, a ledger that could not be read, a task that declares nothing. Empty is
the ordinary case. |
Used by obligations.closure
ClosureMatrix
object
The whole matrix, with the findings and the debt beside it: one value that answers
"where does each capability appear, and is any claim unmet".
| property | type | required | description |
| rows |
array of Row → Row |
yes |
One row per capability, in id order. |
| unbacked |
array of string |
yes |
Runnable commands of the command line that no capability claims, in command order. |
Used by capabilities.projections
CockpitAreaRef
object
One area of the Cockpit the feature names.
| property | type | required | description |
| id |
string |
yes |
The area id. |
| title |
string |
yes |
The label the Cockpit shows. |
| route |
string |
yes |
The route under the running server. |
Used by ResolvedRefs
CommandArgument
object
One argument of a command, as the declaration gives it plus what can be inferred.
| property | type | required | description |
| name |
string |
yes |
The argument's id. |
| long |
string | null |
no |
--long, without the dashes. |
| short |
string | null |
no |
-s, without the dash. |
| positional |
boolean |
yes |
Given by position rather than by flag. |
| takes_value |
boolean |
yes |
Takes a value at all; a flag does not. |
| required |
boolean |
yes |
Must be given. |
| variadic |
boolean |
yes |
Takes any number of values. |
| global |
boolean |
yes |
Accepted by every command under the one that declares it. |
| help |
string |
yes |
The help text, one line. |
| value_name |
string | null |
no |
The placeholder, PATH. |
| values |
array of CommandValueChoice → CommandValueChoice |
no |
The values the declaration carries, each with its help. |
| defaults |
array of string |
no |
The defaults, as the declaration renders them. |
| source |
CommandValueSource → CommandValueSource |
yes |
Where further values come from. |
| secrecy |
CommandSecrecy → CommandSecrecy |
yes |
How openly the value may be handled. |
Used by CommandNode
CommandAvailability
object
Where a command means anything, and why not when it does not.
Derived from the repository environment rather than declared per command, so that a
projection reads a field instead of re-deciding. The reason is carried because the
answer a person needs is never false.
| property | type | required | description |
| available |
boolean |
yes |
Can it be run here, now? |
| reason |
string | null |
no |
Why not, in one line, when it cannot. |
| requires |
array of CommandRequirement → CommandRequirement |
no |
What it needs, whether or not that is satisfied here. |
Used by CommandNode
CommandDeprecation
object
A command that is no longer the name to use.
| property | type | required | description |
| reason |
string |
yes |
Why, in one line. |
| replaced_by |
CommandId | null → CommandId |
no |
What to use instead. |
Used by CommandNode
CommandDiagnostic
object
One thing the build found.
| property | type | required | description |
| severity |
CommandDiagnosticSeverity → CommandDiagnosticSeverity |
yes |
How bad. |
| code |
string |
yes |
A stable code, for a gate to match on. |
| message |
string |
yes |
What is wrong, in one line. |
| commands |
array of CommandId → CommandId |
no |
The nodes it is about. |
| remedy |
string | null |
no |
What to do about it. |
Used by CommandGraph
CommandDiagnosticSeverity
"error" | "warning" | "info"
How bad a finding is.
errorThe graph is wrong and a projection built from it would be wrong.warningWorth saying; the graph stands.infoA fact a reader may want.
Used by CommandDiagnostic
CommandEffect
"read_only" | "local_mutation" | "repository_mutation" | "network_mutation" | "destructive"
What running a command changes. The one thing a surface policy is allowed to ask.
The order is the order of increasing consequence, and it is the order the derived
exposure policy reads: a surface declares the strongest effect it will carry, and
every node at or below it is projected there. Nothing configures a surface per
command.
read_onlyReads and answers. Changes nothing anywhere.local_mutationWrites only where the repository keeps a checkout's own state — the process's
memory, `.ai/local/`, a build directory. Nothing a commit would carry.repository_mutationWrites tracked files: generated artifacts, the worktree, git itself.network_mutationReaches the network with an effect on the far side: a push, a deploy, a release.destructiveRemoves something a person would have to reconstruct.
Used by CommandNode
CommandExecution
object
How a command is actually run: the program and the words before the caller's own.
This is what forbids a cycle. A projection renders an invocation from the execution
descriptor, so a generated bridge always spells the canonical program — never the
surface it is a bridge for.
| property | type | required | description |
| origin |
CommandOrigin → CommandOrigin |
yes |
Which program. |
| argv |
array of string |
yes |
The words that precede the caller's arguments, the program's own name excluded. |
Used by CommandNode
CommandGraph
object
The whole graph.
| property | type | required | description |
| schema |
string |
yes |
The schema of this document. |
| fingerprint |
string |
yes |
A hash of the semantic content: the identity a cache and a generated projection
key on. Nothing that varies between two runs over the same tree is in it. |
| commands |
array of CommandNode → CommandNode |
yes |
Every command, in a deterministic order: origin, then path. |
| diagnostics |
array of CommandDiagnostic → CommandDiagnostic |
yes |
What the build found. |
Used by CommandGraphReport
CommandGraphReport
object
The whole graph, with what its build found.
| property | type | required | description |
| graph |
CommandGraph → CommandGraph |
yes |
The graph. |
| errors |
integer (uint) |
yes |
How many findings are errors; a projection refuses to write while this is not zero. |
Used by commands.graph
CommandId
string
The canonical identity of one command.
Constructed from the origin and the command path, never written by hand, so that a
projection cannot invent one and a rename of a display string cannot change one.
Used by CommandDeprecation CommandDiagnostic CommandNode
CommandIndex
object
The commands this repository offers, filtered.
| property | type | required | description |
| schema |
string |
yes |
The schema of the graph these came from. |
| fingerprint |
string |
yes |
The fingerprint of that graph: a client may cache against it. |
| total |
integer (uint) |
yes |
How many commands the graph holds, before the filter. |
| commands |
array of CommandSummary → CommandSummary |
yes |
The commands that matched, in graph order. |
Used by commands.list
CommandInteractivity
"non_interactive" | "interactive" | "long_running"
How a command behaves towards the caller's terminal and the caller's patience.
non_interactiveRuns, answers, exits. Safe to call from a machine surface.interactiveAsks the person something, or reads the body of a record from a terminal. A
machine surface that offered it would hang.long_runningServes until it is stopped. A request/response surface cannot carry it.
Used by CommandNode
CommandNode
object
One command, from whichever program offers it.
| property | type | required | description |
| id |
CommandId → CommandId |
yes |
The canonical identity. |
| origin |
CommandOrigin → CommandOrigin |
yes |
Which program runs it. |
| path |
array of string |
yes |
The words after the program's own name. |
| invocation |
string |
yes |
The command line a person types, rendered once here. |
| summary |
string |
yes |
One line. |
| description |
string | null |
no |
The longer description, when the declaration carries one. |
| runnable |
boolean |
yes |
Can it be run on its own, or does it only group the commands under it? |
| arguments |
array of CommandArgument → CommandArgument |
yes |
The arguments, in declaration order. |
| execution |
CommandExecution → CommandExecution |
yes |
How it is run. |
| effect |
CommandEffect → CommandEffect |
yes |
What it changes. |
| interactivity |
CommandInteractivity → CommandInteractivity |
yes |
How it behaves towards a terminal. |
| stability |
Stability → Stability |
yes |
Where it stands. |
| availability |
CommandAvailability → CommandAvailability |
yes |
Where it means anything. |
| group |
string | null |
no |
The group a person finds it under, when the declaration has groups. |
| tags |
array of string |
no |
Free tags. |
| aliases |
array of string |
no |
Other names that resolve to this node, declared once here and honoured by every
projection that has a use for one. |
| deprecation |
CommandDeprecation | null → CommandDeprecation |
no |
Whether this is still the name to use. |
| provenance |
CommandProvenance → CommandProvenance |
yes |
Where it came from. |
| projections |
CommandProjections → CommandProjections |
yes |
Where it appears. |
| entrypoint |
boolean | null |
no |
Is this command an entry point of its group — the one a newcomer is offered? |
Used by commands.get CommandGraph
CommandOrigin
"executable" | "tool" | "workflow"
Which program runs a command. Part of the identity, because the three are different
programs that share one name on the path.
executableThe Rust executable, `apps/majordomus-cli`: the read-only interfaces, generation,
introspection, the servers. Declared by clap.toolThe shell tool, `bin/majordomus`: the task lifecycle. Declared by the shipped
command registry and dispatched by the tool itself.workflowA workflow the repository declares for a person to run — a `just` recipe that is
not a generated bridge. Declared by the justfile and read from the runner's dump.
Used by CommandExecution CommandNode
CommandProjections
object
Where one command appears, derived from its effect, its interactivity and its origin.
Every field is computed by [super::policy]. Nothing declares a projection, and no
surface keeps a list of what it carries: a surface asks the graph.
| property | type | required | description |
| cli |
string | null |
no |
The command line, as typed. |
| workflow |
string | null |
no |
The generated workflow bridge's recipe name. |
| mcp |
string | null |
no |
The MCP tool name, when the capability behind it declares one. |
| http |
string | null |
no |
The HTTP route, when the capability behind it declares one. |
| cockpit |
string | null |
no |
The Cockpit address, when the surface carries it. |
| docs |
string |
yes |
The page on the site. Every command has one. |
| withheld |
string | null |
no |
Why a machine surface does not carry it, when one does not. |
Used by CommandNode CommandSummary
CommandProvenance
object
Where a node came from, in enough detail to open the file.
| property | type | required | description |
| declared_in |
string |
yes |
The repository-relative file that declares it. |
| read_by |
string | null |
no |
The command that reads that declaration, when a reader wants to reproduce it. |
| capability |
CapabilityId | null → CapabilityId |
no |
The capability this command runs, when it runs one. |
Used by CommandNode
CommandRef
object
One public command of the shell tool the feature names, as share/commands.yaml
declares it.
| property | type | required | description |
| id |
string |
yes |
The command. |
| summary |
string |
yes |
One line. |
| stage |
string | null |
no |
The lifecycle stage it belongs to. |
| read_only |
boolean |
yes |
Whether it writes nothing. |
Used by ResolvedRefs
CommandRequirement
"repository" | "layer" | "task" | "executable" | "workflow_runner" | "rust_toolchain" | "site"
One thing a command needs before it can run.
repositoryA git repository.layerThe `.ai/` layer, initialised.taskAn active task record.executableThe Rust executable, built.workflow_runnerThe workflow runner, installed.rust_toolchainA cargo workspace and a toolchain to build it.siteThe site sources and its generator.
Used by CommandAvailability
CommandSecrecy
"public" | "sensitive" | "secret"
How openly a value may be handled.
publicOrdinary: may be logged, completed, shown.sensitiveA path or an identifier that names something private. Shown, never logged.secretA credential. Never completed, never logged, never cached.
Used by CommandArgument
CommandSummary
object
One command, as an index shows it: enough to choose, never enough to have to skim.
| property | type | required | description |
| id |
string |
yes |
The canonical identity. |
| invocation |
string |
yes |
The command line a person types. |
| summary |
string |
yes |
One line. |
| origin |
string |
yes |
Which program runs it. |
| effect |
string |
yes |
What running it changes. |
| group |
string | null |
no |
The group it is found under. |
| projections |
CommandProjections → CommandProjections |
yes |
Where it appears. |
Used by CommandIndex
CommandValueChoice
object
One value an argument accepts, from the declaration.
| property | type | required | description |
| value |
string |
yes |
The value as typed. |
| description |
string | null |
no |
Its help, when the declaration carries one. |
Used by CommandArgument
CommandValueSource
one of 13 variants
Where a value for an argument comes from, when something in this repository knows the
set.
This is the completion contract, and it is a property of the argument, not of a shell
script: the same source answers a shell's TAB, a generated form's select and a machine
surface's enumeration of what it will accept. Inference from the declaration comes
first — a value-enum argument carries its own values, a PATH placeholder is a path —
and only what cannot be inferred is annotated beside the command.
variant Nothing here knows the set; the caller types a value.
variant The declaration carries the values; they are on the argument.
variant A path in the filesystem.
variant A path inside the repository.
variant A capability id, from the registry.
variant A command id, from this graph.
variant A rule id, from the effective rule set.
variant An object kind, from the index.
variant A git branch in this repository.
variant A graph id, from the graph registry.
variant A moment id, from the why catalogue.
variant A shell name, from the shells the activation supports.
variant A secret. Never enumerated, never cached, never suggested.
Used by CommandArgument
CommitAttribution
object
One commit and the contract it served, or the fact that none can be found.
| property | type | required | description |
| commit |
CommitRef → CommitRef |
yes |
The commit. |
| attribution |
Attribution → Attribution |
yes |
What is known. |
| issue |
string | null |
no |
The issue, when exactly one claims it. |
| milestone |
string | null |
no |
The milestone that issue belongs to, filled by the caller that has the index. |
| issues |
array of string |
yes |
Every issue whose branches contain it: one when attributed, none when unattributed,
more than one when ambiguous. |
| branches |
array of string |
yes |
The branches that contain it, by the names their refs carry. |
| reason |
string |
yes |
Why the verdict is what it is, in one line a person can act on. |
Used by trace.commit TraceReport
CommitRef
object
One commit, exactly as git names it. Nothing here is stored anywhere: the whole record
is re-read from the object database on every call.
| property | type | required | description |
| id |
string |
yes |
The full object name. |
| short |
string |
yes |
The abbreviated object name, as this repository abbreviates it. |
| author |
string |
yes |
The author, as the commit records them. |
| date |
string |
yes |
The author date, ISO 8601 as the commit records it. |
| subject |
string |
yes |
The subject line. |
Used by BranchTrace CommitAttribution
Comparison
"content" | "size"
How closely a file could be compared with what the index holds.
A file that is one object is compared byte for byte, because the index kept its whole
content. A collection file holds one object per member, and what the index kept for each
is that member as JSON rather than the file's text — so the strongest thing that can be
said without re-parsing it is whether its size is what it was. The report says which
comparison was made rather than implying the stronger one.
contentByte for byte against the content the index holds.sizeBy size against the size the index recorded.
Used by DriftedObject
Concurrency
object
When the edge considers a machine loaded, in requests.
| property | type | required | description |
| soft_limit |
Positive → Positive |
yes |
Where the edge starts preferring another machine. |
| hard_limit |
Positive → Positive |
yes |
Where it stops sending requests to this one. |
Used by Fly
Confidence
"exact" | "cached" | "unknown"
How far a resolved value can be trusted.
exactRead from its canonical source during this resolution.cachedRead from a cache whose fingerprint still matches its inputs.unknownNot resolved.
Used by FieldSource
ContainerView
object
The container, as the topology reports it.
| property | type | required | description |
| path |
string |
yes |
The derived path. |
| suffix |
string |
yes |
The suffix it was derived with. |
| exists |
boolean |
yes |
It exists on disk. Created by the first worktree that needs it. |
Used by RepositoryTopology StatusReport
Continuity
object
What the lifecycle of this checkout is holding.
| property | type | required | description |
| present |
boolean |
yes |
Whether this checkout's lifecycle has ever run: a ledger line, a task, an episode or
a record. False in a fresh clone, which is not a fault.
It is not "the directory exists". Several things create that directory before
anything has been recorded in it, so a reader that took its presence for evidence
would be told the lifecycle had run in a checkout where it never had. |
| worktree |
string |
yes |
The worktree this answer is about. Every selection below is scoped to it. |
| branch |
string |
yes |
The branch, or DETACHED. |
| head |
string |
no |
The commit this checkout is on. |
| working_tree |
string |
no |
clean or dirty. |
| session |
OpenSession | null → OpenSession |
no |
The open episode, or None. |
| task |
ActiveTask | null → ActiveTask |
no |
The active task, or None. |
| handover |
Record | null → Record |
no |
The record the next worker would resume from, or None when nothing resolves here. |
| checkpoint |
Record | null → Record |
no |
The newest progress note for this worktree and branch, or None. |
| blockers |
array of string |
no |
Unresolved questions on this branch. Every one refuses finish --outcome completed,
whichever task opened it. |
| tallies |
map of integer (uint) |
yes |
How many records of each kind this checkout holds, against the policy's caps. |
| findings |
array of string |
no |
What a reader should know before trusting any of the above: a diverged record, a
foreign open session, a malformed file that was skipped. Empty is the good case. |
Used by continuity.state
ContractView
object
A directory contract as the document declares it, before anything is inherited.
| property | type | required | description |
| id |
string |
yes |
The document's identity; it survives a move, the file name does not. |
| path |
string |
yes |
The document's path, repository-relative. |
| title |
string | null |
no |
One line naming the directory. |
| description |
string | null |
no |
One line saying what the directory is for. |
| status |
string |
yes |
active or deprecated; a deprecated document is listed and never applied. |
| scope |
string |
yes |
directory, subtree or explicit: how far the document reaches. |
| composition |
string |
yes |
extend, replace or final: how it composes with what is above it. |
| order |
integer (int64) |
yes |
Ties within one depth are broken by this, then by path. |
| providers |
array of string |
yes |
*, or the providers the document is written for. |
| audience |
array of string |
yes |
Who it addresses; both when it says nothing. |
| tracks |
array of string |
no |
Pathspecs whose change names this document for review. |
| children_require_contract |
boolean | null |
no |
Whether the directories below owe a contract, when this document says. |
| children_exempt |
array of string |
no |
Subtrees below this one that owe nothing: carried, not authored here. |
Used by DirectoryNode
CounterSnapshot
object
The counters and phase totals of this process at one moment. Every value is a count
or a duration this process measured; none is written anywhere by hand.
| property | type | required | description |
| repository_scans |
integer (uint64) |
yes |
Enumerations of the repository's declared sources. |
| index_builds |
integer (uint64) |
yes |
Index builds. |
| registry_builds |
integer (uint64) |
yes |
Registry builds. |
| schema_generations |
integer (uint64) |
yes |
JSON Schemas derived from Rust types. |
| mcp_projection_builds |
integer (uint64) |
yes |
MCP tool and resource listings computed. |
| openapi_builds |
integer (uint64) |
yes |
OpenAPI documents built. |
| http_projection_builds |
integer (uint64) |
yes |
HTTP routers built. |
| graph_builds |
integer (uint64) |
yes |
Graphs derived from the registry and the index. |
| executions |
integer (uint64) |
yes |
Calls through the executor, every transport. |
| handler_invocations |
integer (uint64) |
yes |
Handlers actually run. |
| cache_hits |
integer (uint64) |
yes |
Executions answered from the cache. |
| cache_misses |
integer (uint64) |
yes |
Executions of a cached capability that ran the handler. |
| cache_evictions |
integer (uint64) |
yes |
Cache entries dropped. |
| phases |
map of PhaseTotals → PhaseTotals |
yes |
Phase totals by phase name. |
Used by perf.counters
Counts
object
How much the catalogue holds. Every count anywhere — a page, a heading, a report — is
one of these, so no number is ever written down.
| property | type | required | description |
| moments |
integer (uint) |
yes |
Public moments. |
| moments_all |
integer (uint) |
yes |
Moments of every status, drafts included. |
| audiences |
integer (uint) |
yes |
Public audiences. |
| areas |
integer (uint) |
yes |
Public areas. |
| signals |
integer (uint) |
yes |
Signals across the public moments: the size of the questionnaire. |
| examples |
integer (uint) |
yes |
Concrete situations across the public moments. |
Used by CatalogueView ValidationReport
CpuKind
"shared" | "performance"
What a machine's CPU is.
sharedA fraction of a core: the cheap profile.performanceA dedicated one.
Used by Resources
Declaration
object
scope.yaml, typed. Unknown keys are refused by the type and by the scope schema.
| property | type | required | description |
| version |
integer (uint64) |
yes |
The format version; only [SCOPE_VERSION] is read. |
| in |
array of string |
yes |
The allow-list: pathspecs anchored at the repository root. |
| out |
Out → Out |
yes |
What is never read; wins over in. |
Used by ScopeReport
DemonstrateReport
object
The answer of executions.demonstrate.
| property | type | required | description |
| steps |
integer (uint64) |
yes |
How many steps ran. |
| elapsed_ms |
integer (uint64) |
yes |
How long it took, in milliseconds. |
| observed |
boolean |
yes |
Whether anything was watching: false when it was called directly rather than as an
execution, which is the difference this capability exists to show. |
Used by executions.demonstrate
DeploymentCheck
object
Whether the deployments this repository declares would work, decided locally: against
the capability registry this process built and the workspace it sits in.
| property | type | required | description |
| ok |
boolean |
yes |
True when no deployment earned a refusal. |
| decided |
integer (uint) |
yes |
How many deployments were decided. |
| refusals |
array of Refusal → Refusal |
yes |
Every refusal, in the order the objects and their keys appear. |
Used by deploy.check
DeploymentList
object
Every deployment the layer declares.
| property | type | required | description |
| count |
integer (uint) |
yes |
How many. |
| deployments |
array of DeploymentView → DeploymentView |
yes |
Each, in identity order. |
| unreadable |
array of Refusal → Refusal |
no |
Objects of the deployment kind this executable could not read, with why. A
malformed object is reported here rather than hidden by being skipped. |
Used by deploy.list
DeploymentStatus
"declared" | "active" | "retired"
Where a deployment stands.
Status is the right name inside this module; the schema component namespace is flat,
and distribution::Status answers a different question, so each says which it is.
declaredThe object exists and nothing is deployed from it yet.activeIt is deployed.retiredIt was, and the object is kept for the record.
Used by DeploymentView
DeploymentView
object
One deployment as this process reads it, with where it came from.
| property | type | required | description |
| file |
string |
yes |
The repository-relative file the object lives in. |
| schema |
string |
yes |
The format version; a version this executable does not read is refused. |
| kind |
string |
yes |
Always deployment. |
| id |
string |
yes |
The identity within the repository. |
| title |
string |
yes |
One line naming it. |
| description |
string | null |
no |
One line: what it serves and to whom. |
| status |
DeploymentStatus | null → DeploymentStatus |
no |
Where it stands. |
| application |
string |
yes |
The application's name at the provider. |
| build |
Build → Build |
yes |
What is shipped and what it is built from. |
| listen |
Listen → Listen |
yes |
The address the process listens on. |
| health |
HealthRoutes → HealthRoutes |
yes |
The routes a platform polls. |
| resources |
Resources → Resources |
yes |
What one machine is granted. |
| machines |
Machines → Machines |
yes |
How many machines run. |
| region |
string |
yes |
The region they run in. |
| budgets |
Budgets → Budgets |
no |
The measured figures it is held to. |
| provider |
Provider → Provider |
yes |
The provider and its own facts. |
| created_at |
string | null |
no |
When the object was written. |
| updated_at |
string | null |
no |
When it was last changed. |
Used by deploy.get DeploymentList
Diagnosis
object
What a reader's selection implies, computed by counting rather than by inference.
The arithmetic is the whole model and is stated so a reader can check it: a selection
resolves to a set of moments; an area or an audience scores the number of selected
moments that name it; a recommendation scores the number that name it and carries
their ids. There is no weighting and no percentage, because there is no model behind
one.
| property | type | required | description |
| moments |
array of string |
yes |
The moments the selection resolved to, in presentation order. |
| unresolved |
array of string |
yes |
Selected names that resolved to nothing. |
| areas |
array of Recommendation → Recommendation |
yes |
Operational areas by how many selected moments fall under them, heaviest first. |
| audiences |
array of Recommendation → Recommendation |
yes |
Audiences by how many selected moments they recognise, heaviest first. |
| capabilities |
array of Recommendation → Recommendation |
yes |
Capabilities of the executable that answer the selected moments. |
| commands |
array of Recommendation → Recommendation |
yes |
Commands that answer them. |
| claims |
array of Recommendation → Recommendation |
yes |
Claims that say what is guaranteed. |
| doctrines |
array of Recommendation → Recommendation |
yes |
Rules of the effective set that govern them. |
| use_cases |
array of Recommendation → Recommendation |
yes |
Use cases that show the way out. |
| also_worth_reading |
array of string |
yes |
Moments the selection did not include that share an area with one that it did. |
Used by why.diagnose
Diagnostic
object
One finding about the declarative state, named by a stable code, tied to a path where
there is one, and carrying the command that reproduces it where there is one.
| property | type | required | description |
| severity |
Severity → Severity |
yes |
How bad. |
| code |
string |
yes |
A stable machine-readable code, e.g. unknown_key, duplicate_identity. |
| path |
string | null |
no |
Repository-relative path of the file concerned, when there is one. |
| message |
string |
yes |
What is wrong, for a person; the code is for a program. |
Used by RepositoryEnvironment RepositoryReport
DiagnosticCode
"worktree.path_mismatch" | "worktree.container_occupied" | "worktree.nested" | "worktree.destination_conflict" | "worktree.missing" | "worktree.stale_registration" | "worktree.branch_already_checked_out" | "worktree.detached" | "worktree.ephemeral" | "worktree.primary_on_non_trunk" | "worktree.trunk_in_linked_worktree" | "worktree.path_escape" | "worktree.invalid_branch_name" | "worktree.locked" | "worktree.migration_verification_failed" | "worktree.trunk_unknown" | "worktree.case_collision" | "worktree.cross_device"
The stable machine name of everything that can be wrong with the topology. One code per
condition, reused by the command line, the API, MCP, the Cockpit, the tests and the
documentation; the prose beside a code is rendered from the typed state.
worktree.path_mismatchA linked work tree is not at its branch's canonical path.worktree.container_occupiedA linked work tree occupies the container path itself.worktree.nestedA linked work tree sits inside the primary checkout or inside another work tree.worktree.destination_conflictThe canonical path of a branch is occupied by something that is not its work tree.worktree.missingA registered work tree's directory does not exist.worktree.stale_registrationGit reports the registration as prunable.worktree.branch_already_checked_outA branch is checked out somewhere other than its canonical path.worktree.detachedA linked work tree has no branch.worktree.ephemeralA linked work tree is a session's scratch checkout: under the temporary directory or
under the primary checkout's `.claude/worktrees/`.worktree.primary_on_non_trunkThe primary checkout holds a branch that is not the trunk.worktree.trunk_in_linked_worktreeThe trunk is checked out in a linked work tree rather than the primary checkout.worktree.path_escapeA derived path would leave the container. Cannot happen for a valid branch name.worktree.invalid_branch_nameA branch name git accepted that this executable cannot derive a path for.worktree.lockedA work tree is locked, so it cannot be moved until it is unlocked.worktree.migration_verification_failedA move happened and the fingerprint after it differs from the one before.worktree.trunk_unknownThe trunk could not be determined.worktree.case_collisionTwo branch names map to one directory on a case-insensitive filesystem.worktree.cross_deviceA move crossed devices and was made by copy, repair and verification.
Used by TopologyDiagnostic
DirectoryNode
object
One directory of the layer, what it owes, and what applies to it.
| property | type | required | description |
| path |
string |
yes |
Repository-relative, forward slashes. |
| depth |
integer (uint) |
yes |
Segments below the layer root; the root itself is 0. |
| parent |
string | null |
no |
The directory above, when it is inside the layer. |
| children |
array of string |
no |
The directories immediately below, sorted. |
| state |
DirectoryState → DirectoryState |
yes |
Whether it carries the contract it owes. |
| requires_contract |
boolean |
yes |
Whether a contract is owed here at all. |
| governed_by |
string | null |
no |
The contract that made the requirement explicit, when one did. |
| exempted_by |
string | null |
no |
The contract that released this subtree, when one did. |
| objects |
integer (uint) |
yes |
How many objects of any kind the index holds directly in this directory. |
| contract |
ContractView | null → ContractView |
no |
The contract this directory declares, before inheritance. |
| effective |
array of EffectiveEntry → EffectiveEntry |
no |
The contracts that apply here once inheritance is resolved, least specific first.
Present when the request asked for it, or when it asked about one path. |
Used by DirectoryReport
DirectoryReport
object
The layer's directories, what each owes, and the contracts that apply.
| property | type | required | description |
| root |
string |
yes |
The layer root the tree is rooted at. |
| tallies |
DirectoryTallies → DirectoryTallies |
yes |
The directories in each state. |
| directories |
array of DirectoryNode → DirectoryNode |
yes |
Every directory asked for, sorted by path. |
Used by directories.list
DirectoryState
"documented" | "exempt" | "owed"
Whether a directory of the layer carries the contract it owes.
documentedIt carries a context document of its own.exemptIt owes none, because a contract above it says so.owedIt owes one and has none.
Used by directories.list DirectoryNode
DirectoryTallies
object
How many directories are in each state.
| property | type | required | description |
| directories |
integer (uint) |
yes |
Every directory of the layer the index knows. |
| documented |
integer (uint) |
yes |
Carrying a contract of their own. |
| exempt |
integer (uint) |
yes |
Released by a contract above them. |
| owed |
integer (uint) |
yes |
Owing a contract and carrying none. |
Used by DirectoryReport
DirtyState
object
Uncommitted work in a work tree, counted from git status --porcelain. Untracked
content counts: it is exactly what a careless move loses.
| property | type | required | description |
| staged |
integer (uint) |
yes |
Entries with a change in the index. |
| unstaged |
integer (uint) |
yes |
Entries with a change in the work tree that is not in the index. |
| untracked |
integer (uint) |
yes |
Untracked, not ignored, files. |
| conflicted |
integer (uint) |
yes |
Entries with an unresolved merge conflict. |
| clean |
boolean |
yes |
Nothing above is non-zero. |
| in_progress |
string | null |
no |
A merge, rebase, cherry-pick, revert or bisect is in progress here. |
Used by MigrationStep WorktreeState
DistributionReport
object
The distribution, as a person or a script asks for it.
| property | type | required | description |
| binary |
string |
yes |
The command a person types after installing. |
| repository |
string |
yes |
owner/name, the only host release assets come from. |
| installer_url |
string |
yes |
The installer's canonical URL. |
| install_command |
string |
yes |
The one-line install command, composed from its parts. |
| install_and_init_command |
string |
yes |
The same, initialising the repository afterwards. |
| next_command |
string |
yes |
What a person runs next. |
| checksum |
string |
yes |
The digest algorithm the installer verifies. |
| install_dir |
string |
yes |
Where the launchers go by default. |
| prefix |
string |
yes |
Where the versioned trees go by default. |
| latest_url |
string |
yes |
Where the stable release metadata is published. |
| supported |
integer (uint) |
yes |
How many targets a release builds. |
| targets |
array of TargetView → TargetView |
yes |
Every declared target, in the model's order. |
Used by distribution.model
Divergence
"exact" | "advanced" | "diverged" | "different_context" | "unknown"
How far a record's recorded commit is from the commit this checkout is on.
The four words are the shell tool's, deliberately. A reader that met advanced from one
surface and stale from another would have to learn the same four facts twice.
exactWritten at this commit. Trust it.advancedGit has moved forward since. Trust it, and expect some of it to be done.divergedThe recorded commit is not an ancestor: history was rewritten. Trust git, not this.different_contextAnother branch or another worktree. This record is not about your work.unknownGit could not answer, so this process says so rather than guessing `exact`.
Used by ObligationClosure Record
DocRef
object
One document the feature names.
| property | type | required | description |
| path |
string |
yes |
Repository-relative path. |
| title |
string | null |
no |
The title, when the document has one. |
Used by ResolvedRefs
DocumentView
object
One document, and the encodings it is committed in.
| property | type | required | description |
| id |
string |
yes |
The document id, shared by every encoding of it. |
| schema |
string | null |
no |
The schema id its structured encodings carry. |
| source |
string |
yes |
One line: what it was derived from. |
| formats |
array of ArtifactFormat → ArtifactFormat |
yes |
The encodings, in the manifest's order. |
Used by ArtifactReport
DriftedObject
object
One file of the layer that is no longer what the index read.
| property | type | required | description |
| path |
string |
yes |
Its repository-relative path. |
| standing |
ObjectStanding → ObjectStanding |
yes |
How it stands. |
| comparison |
Comparison → Comparison |
yes |
How it was compared. |
| objects |
integer (uint) |
yes |
How many objects of the index came from it. |
| example_uri |
string |
yes |
One of the URIs it holds, so a reader can see what is affected. |
| detail |
string |
yes |
What is wrong, for a person. |
Used by VerifyReport
Edge
object
One directed edge. Both ends are node ids of the same graph; a derivation that cannot
resolve an end adds an external node rather than a dangling edge.
| property | type | required | description |
| source |
string |
yes |
The node the edge leaves. |
| target |
string |
yes |
The node the edge enters. |
| kind |
string |
yes |
One of the graph's declared edge kinds. |
Used by Graph
EffectiveEntry
object
One contract in a directory's effective chain, in the order it is applied.
| property | type | required | description |
| id |
string |
yes |
The document's identity. |
| path |
string |
yes |
The document's path. |
| depth |
integer (uint) |
yes |
Depth below the layer root; less is less specific and applies first. |
| order |
integer (int64) |
yes |
The declared order, the second sort key. |
| composition |
string |
yes |
extend, replace or final. |
| reason |
string |
yes |
Why it applies to this directory, in words. |
| local |
boolean |
yes |
True for the directory's own document, false for one it inherits. |
Used by DirectoryNode
EnvironmentProvenance
object
Where the values of one snapshot came from.
| property | type | required | description |
| resolution |
Resolution → Resolution |
yes |
How the snapshot behind these entries was resolved. |
| fields |
array of FieldSource → FieldSource |
yes |
One entry per field, in the order the resolver produced them. |
Used by environment.explain
EnvrcApproval
one of 6 variants
What became of the .envrc of a worktree that was just created, found, or moved.
variant direnv accepted it: the next `cd` loads the environment.
variant The worktree has no `.envrc`; there is nothing to approve and nothing is blocked.
variant direnv is not on the PATH; nothing was done, and nothing is blocked either, because
nothing would load the file.
| outcome | "direnv_absent" | yes | |
variant The worktree's `.envrc` is not the primary checkout's, so the approval given there
does not carry. `direnv allow` in the worktree, after reading it, is the person's.
variant The primary checkout's `.envrc` is not approved, so there is no approval to carry.
| outcome | "not_approved_in_primary" | yes | |
variant direnv was asked and refused, or could not be run; the message is its own.
| message | string | yes | direnv's standard error, or the error running it. |
| outcome | "failed" | yes | |
Used by MigrationStep
ErrorBody
object
The body of every error response.
| property | type | required | description |
| error |
ErrorDetail → ErrorDetail |
yes |
The one error. |
Used by artifacts.list capabilities.list capabilities.projections capabilities.describe release.changelog commands.get commands.list commands.graph continuity.state deploy.get deploy.list deploy.check directories.list distribution.model distribution.artifact distribution.build distribution.releases distribution.status environment.status environment.explain executions.list executions.cancel executions.demonstrate executions.events executions.get executions.protocol executions.start graph.get graph.list health.report health.live objects.get objects.list objects.verify obligations.vocabulary obligations.closure peers.list peers.announce perf.counters plan.model plan.issues plan.next plan.record plan.roadmap plan.status plan.validate plan.waves product.feature product.features product.matrix product.providers product.validate quality.report health.ready release.version repository.info repository.scope repository.scope_classify objects.search trace.report trace.commit trace.issue web.surfaces why.list why.areas why.audiences why.diagnose why.moment why.validate worktree.topology worktree.inspect worktree.migration_plan worktree.status
ErrorDetail
object
What went wrong, as the HTTP projection names it.
| property | type | required | description |
| code |
string |
yes |
What kind of failure it is: invalid_input, not_found, method_not_allowed,
refused, forbidden, too_large, unavailable (a surface whose producer has not
run) or internal. |
| message |
string |
yes |
The reason, for a person. |
Used by ErrorBody
EventHistory
object
The answer of executions.events: one page of an execution's retained history.
| property | type | required | description |
| execution_id |
string |
yes |
The execution the events belong to. |
| state |
ExecutionState → ExecutionState |
yes |
Where the execution stands now, so a client needs one request rather than two. |
| events |
array of ExecutionEvent → ExecutionEvent |
yes |
The events, oldest first. |
| last_sequence |
integer (uint64) |
yes |
The sequence of the last event here: the cursor for the next page, and the one to
open the live channel with. |
| more |
boolean |
yes |
Whether more events follow this page right now. |
| truncated |
boolean |
yes |
Whether events before this page had already been dropped by the store's bound. |
Used by executions.events
Evidence
object
The task.evidence line that discharged an obligation, as the ledger holds it.
Nothing older is consulted: evidence is superseded by evidence, and the ledger keeps
the history for a reader that wants it.
use majordomus_cli::capability::builtin::obligations::Evidence;
let e: Evidence = serde_json::from_str(
r#"{"recorded_at":"2026-09-09T21:01:00Z","head":"f00ba7","branch":"master",
"kind":"ci","command":"scripts/ci/reference-check","inputs_hash":"7f68b9"}"#,
)
.unwrap();
assert_eq!(e.head, "f00ba7", "the envelope's commit is what a remote fact is judged against");
assert!(e.artifact.is_empty(), "one of command and artifact; narrative is not evidence");
| property | type | required | description |
| recorded_at |
string |
yes |
When the line was appended. |
| head |
string |
yes |
The commit the ledger's envelope stamped on it. |
| branch |
string |
no |
The branch it was recorded on. |
| kind |
string |
no |
How it was taken: test, build, ci, artifact or manual. |
| command |
string |
no |
The command that produced it. Narrative is not evidence, so one of this and
artifact is always present. |
| artifact |
string |
no |
The reference it points at, such as a published URL. |
| result |
string |
no |
What the command said, when its output was the point. |
| session |
string |
no |
The episode that recorded it, when one was open. |
| inputs_hash |
string |
no |
The hash of the token's declared inputs at the moment it was taken. Empty for a
token that declares none. |
Used by ObligationClosure
Example
object
One concrete situation, in one audience, with what happens today and what happens
instead.
| property | type | required | description |
| id |
string |
yes |
Unique within the moment. |
| audience |
string |
yes |
The audience this situation belongs to; must name an audience of the catalogue. |
| title |
string |
yes |
One line naming the situation. |
| before |
string |
yes |
What happens without the tool. |
| after |
string |
yes |
What happens with it. |
Used by MomentDetail
ExecutionConcurrency
"unrestricted" | "serial"
Whether two executions of one capability may overlap.
unrestrictedAny number at once. Every read is one of these: the index and the registry are
immutable for the life of the process, so concurrent readers cannot interfere.serialOne at a time. A second execution of the same capability waits for the first, which
is what a capability that changes anything — this process's own memory included —
needs in order to be reasoned about at all.
Used by ExecutionPolicy
ExecutionDiagnostic
object
A structured finding an execution reported on its way, distinct from its outcome.
| property | type | required | description |
| severity |
Severity → Severity |
yes |
How bad. |
| code |
string |
yes |
A stable machine-readable code. |
| summary |
string |
yes |
One line, for a person. |
| detail |
string | null |
no |
The rest, when there is more. |
| suggestion |
string | null |
no |
What to do about it, when there is something. |
Used by ExecutionEvent ExecutionView
ExecutionEffect
"read" | "process_state" | "repository_mutation"
What running a capability changes outside the caller.
Classified, never declared: it follows from the kind, which is the field a declaration
already carries. A projection reads this to decide whether to ask before running
something — the Cockpit's confirmation is derived from it — instead of naming
capabilities it must treat carefully, which is a list that goes stale the day after it
is written.
readNothing changes. Every query and every resource of this executable.process_stateThis process's own memory changes, and nothing outside it.repository_mutationThe repository changes.
Nothing classifies to this, and the doctrine of this tool is why: no capability of
any kind writes to the repository. It is on the model so that the day one does, it
says so here — where a projection already reads it and a client already asks before
running it — rather than in whichever page happens to render its button.
Used by ExecutionPolicy
ExecutionError
object
Why an execution ended badly, in the repository's diagnostic vocabulary rather than in
Rust's: a code a program branches on, a sentence a person reads, and where to look.
A panic message and a backtrace are never in here. The engine catches a panicking
handler and reports internal with the execution's correlation id; the panic itself is
on the process's own error stream, where the operator running the server can read it.
| property | type | required | description |
| code |
string |
yes |
invalid_input, not_found, refused, internal, cancelled, unavailable. |
| message |
string |
yes |
What went wrong, for a person. |
| suggestion |
string | null |
no |
What to do about it, when there is something. |
| correlation_id |
string |
yes |
The execution this failure belongs to, so a log line and a UI agree. |
Used by ExecutionEvent ExecutionView
ExecutionEvent
one of 12 variants
One event about one execution.
sequence is dense and starts at 1 within an execution: a client that has seen
sequence n knows it has missed something when the next event it reads is not n + 1,
and asks for the gap by cursor rather than reloading the world.
| property | type | required | description |
| schema_version |
string |
yes |
The protocol version, [PROTOCOL_VERSION]. |
| event_id |
string |
yes |
The identity of this event: the execution's id and the sequence, so a client that
deduplicates needs no composite key of its own. |
| execution_id |
ExecutionId → ExecutionId |
yes |
The execution it is about. |
| sequence |
integer (uint64) |
yes |
Its position in that execution's stream, from 1, without gaps. |
| timestamp |
string |
yes |
When the event was produced, RFC 3339 in UTC. |
variant The execution was accepted and exists. Carries what it will run and with what,
redacted, so a client that joins at the first event needs nothing else to render a
heading.
| type | "execution.created" | yes | |
| data | object | yes | |
variant It is waiting for a worker.
| type | "execution.queued" | yes | |
| data | object | yes | |
variant A worker picked it up and is about to enter the handler.
| type | "execution.started" | yes | |
variant How far along it is.
| type | "execution.progress" | yes | |
| data | ProgressView → ProgressView | yes | |
variant A named phase was entered.
| type | "execution.step.started" | yes | |
| data | object | yes | |
variant A named phase finished.
| type | "execution.step.completed" | yes | |
| data | object | yes | |
variant A line of output.
| type | "execution.log" | yes | |
| data | object → LogStream | yes | |
variant A structured finding, distinct from the outcome.
variant Cancellation was asked for; the handler has not stopped yet.
| type | "execution.cancelling" | yes | |
| data | object | yes | |
variant It stopped because it was asked to.
| type | "execution.cancelled" | yes | |
variant It finished, and the handler returned an output.
The output is on this event and not on one of its own, because a client must never
be able to read "succeeded" and find no result: the state and the value it produced
are one fact and travel together.
| type | "execution.completed" | yes | |
| data | object | yes | |
variant It finished, and it did not.
Used by EventHistory
ExecutionId
string
The identity of one execution: x-<UTC timestamp>-<8 hex>.
The shape is the layer's own — a task is t-20260905034523-a9f1 — so that an id read
in a log, a URL or a browser tab is recognisable as this repository's without a
dependency on a UUID crate. The timestamp orders ids by creation for a reader; the
suffix, not the timestamp, is what makes two ids created in the same second differ.
Used by ExecutionEvent ExecutionView
ExecutionLinks
object
Where to read more about one execution, in this server's own terms.
Every value is derived from the registry's declared routes and from the live channel's
own constant, so a route that moves moves here too and no client holds a path this
server does not serve.
| property | type | required | description |
| self |
string |
yes |
The snapshot: GET /api/v1/executions/get?id=…. |
| events |
string |
yes |
The retained history: GET /api/v1/executions/events?id=…. |
| cancel |
string |
yes |
Where to ask it to stop: POST /api/v1/executions/cancel. |
| websocket |
string |
yes |
The live channel, from the beginning: GET /events?execution=…. |
| cockpit |
string |
yes |
The page a person opens. |
Used by ExecutionView
ExecutionList
object
The answer of executions.list.
| property | type | required | description |
| count |
integer (uint) |
yes |
How many are answered here. |
| remembered |
integer (uint) |
yes |
How many this process remembers in total, before the filter. |
| active |
integer (uint) |
yes |
How many are not finished. |
| queued |
integer (uint) |
yes |
How many are waiting for a worker. |
| live_channels |
integer (uint) |
yes |
How many live channels are following them. |
| executions |
array of ExecutionView → ExecutionView |
yes |
The executions, newest first. |
Used by executions.list
ExecutionPolicy
object
What running a capability as an execution means: what it changes, whether asking it to
stop achieves anything, and whether two of them may overlap.
The effect and the concurrency are classified from the kind by
[ExecutionPolicy::classify], for the same reason [Availability] is: the facts are
already on the declaration, and asking each capability! block to restate them would be
one more thing that can disagree with itself.
Cancellability is the one thing the kind cannot decide, because it is a fact about the
handler: whether it looks at its cancellation flag and stops. A handler that does says
so with [crate::capability::Executable::cancellable], and a client is then told
whether a Cancel button will achieve anything instead of being given one that lies.
| property | type | required | description |
| effect |
ExecutionEffect → ExecutionEffect |
yes |
What it changes. |
| cancellable |
boolean |
yes |
Whether asking it to stop does anything. A task looks at its cancellation flag; a
query and a command do not, and a client is told so rather than being given a
button that lies. |
| concurrency |
ExecutionConcurrency → ExecutionConcurrency |
yes |
Whether two of them may overlap. |
Used by Capability
ExecutionState
"queued" | "running" | "cancelling" | "succeeded" | "failed" | "cancelled"
Where an execution is in its life.
The transitions are the whole contract, and [ExecutionState::may_move_to] is the one
place they are written down: the engine asks before every change, the store refuses a
move it did not allow, and a client that reads a final state never sees it move again.
queued ──► running ──┬──► succeeded
│ ├──► failed
│ └──► cancelling ──┬──► cancelled
│ ├──► succeeded
└──► cancelled └──► failed
There is no starting. An in-process engine claims an execution and enters its handler
in the same instant, so a state between the two would be one no client could ever
observe and every client would have to handle.
queuedAccepted, and no worker has picked it up.runningThe handler is running.cancellingCancellation was asked for and the handler has not stopped yet.succeededThe handler returned an output.failedThe handler returned an error, or the worker could not run it.cancelledIt stopped because it was asked to.
Used by executions.list EventHistory ExecutionView
ExecutionView
object
One execution with the links to everything else about it.
| property | type | required | description |
| id |
ExecutionId → ExecutionId |
yes |
The identity. |
| capability |
string |
yes |
The capability that ran, by its canonical id. |
| title |
string |
yes |
That capability's title, so a list needs no second lookup. |
| state |
ExecutionState → ExecutionState |
yes |
Where it is. |
| created_at |
string |
yes |
When it was accepted, RFC 3339 in UTC. |
| started_at |
string | null |
no |
When the handler was entered. |
| finished_at |
string | null |
no |
When it reached a final state. |
| duration_ms |
integer | null |
no |
How long it ran, in milliseconds, once it has finished. |
| input |
any |
yes |
The input it was given, with every value the input schema marks sensitive replaced. |
| output |
any |
no |
What the handler returned, for a succeeded execution and never before. |
| error |
ExecutionError | null → ExecutionError |
no |
Why it failed, for a failed execution and never before. |
| progress |
ProgressView | null → ProgressView |
no |
The last progress the handler reported. |
| steps |
array of StepView → StepView |
no |
The steps it entered, in order. |
| diagnostics |
array of ExecutionDiagnostic → ExecutionDiagnostic |
no |
The findings it reported. |
| last_sequence |
integer (uint64) |
yes |
The sequence number of the last event: the cursor a client subscribes from. |
| event_count |
integer (uint64) |
yes |
How many events it has produced, including the ones no longer retained. |
| events_truncated |
boolean |
yes |
Whether the retained event history has lost its oldest entries to the bound. |
| cancellable |
boolean |
yes |
Whether asking to cancel this execution will do anything: the capability's policy. |
| actor |
Actor → Actor |
yes |
Who asked for it. |
| repository |
RepositoryRef → RepositoryRef |
yes |
Which repository it ran against. |
| correlation_id |
string |
yes |
The id used in this process's logs and tracing spans for this execution; the
execution id itself, carried under the name a reader of a log expects. |
| links |
ExecutionLinks → ExecutionLinks |
yes |
Where to read more. |
Used by executions.get executions.start CancelReport ExecutionList
Exemption
object
A group of items the example policy does not apply to, with the reason it does not.
| property | type | required | description |
| reason |
string |
yes |
The reason, as the policy names it. |
| items |
integer (uint) |
yes |
How many items it covers. |
Used by PublicApiQuality
Exposure
object
The projections a capability declares. Absence is explicit: None means not exposed
there, and nothing infers an exposure a descriptor did not declare.
| property | type | required | description |
| mcp |
McpExposure | null → McpExposure |
no |
The MCP projection, when declared. |
| http |
HttpExposure | null → HttpExposure |
no |
The HTTP projection, when declared. |
| cli |
CliExposure | null → CliExposure |
no |
The command-line projection, when declared. |
Used by Capability CapabilitySummary
FacetValue
object
One selectable value of one facet, with how many public moments carry it. Every filter
a reader is offered is one of these; nothing anywhere lists the values by hand.
| property | type | required | description |
| value |
string |
yes |
The value as a moment declares it. |
| label |
string |
yes |
The name to show; the value itself when the taxonomy holds no title for it. |
| count |
integer (uint) |
yes |
How many public moments carry it. |
Used by Facets
Facets
object
The filters the catalogue offers, derived from the records rather than declared.
| property | type | required | description |
| audiences |
array of FacetValue → FacetValue |
yes |
By audience. |
| areas |
array of FacetValue → FacetValue |
yes |
By operational area. |
| tags |
array of FacetValue → FacetValue |
yes |
By tag. |
| severities |
array of FacetValue → FacetValue |
yes |
By severity. |
| frequencies |
array of FacetValue → FacetValue |
yes |
By frequency. |
| lifecycle |
array of FacetValue → FacetValue |
yes |
By stage of work. |
| capabilities |
array of FacetValue → FacetValue |
yes |
By capability of the executable. |
| commands |
array of FacetValue → FacetValue |
yes |
By command. |
Used by CatalogueView
Fact
boolean | integer (int64) | string | array of string
One fact a node carries from its object's front matter, in the shapes a node can hold.
Used by Node
Feature
"mcp" | "cockpit"
A capability of the running process a surface needs in order to exist.
The registry describes the effective process, not the maximum one: a build or an
invocation that answers no MCP has no MCP surface, and the home page cannot link to
one. Stating the dependency as data is what keeps that automatic.
mcpThis process answers MCP over HTTP.cockpitThis process serves the Cockpit.
Used by Surface
FeatureCounts
object
How much stands behind a feature, every number derived.
| property | type | required | description |
| capabilities |
integer (uint) |
yes |
Builtin capabilities of the modules it names. |
| mcp_tools |
integer (uint) |
yes |
MCP tools among them. |
| mcp_resources |
integer (uint) |
yes |
MCP resources among them, plus one per object of the kinds it names. |
| http_routes |
integer (uint) |
yes |
HTTP routes among them. |
| cli_paths |
integer (uint) |
yes |
Command-line paths of the executable among them. |
| commands |
integer (uint) |
yes |
Public commands of the shell tool it names. |
| objects |
integer (uint) |
yes |
Objects of the kinds it names. |
| rules |
integer (uint) |
yes |
Rules it names. |
| enforced_rules |
integer (uint) |
yes |
Rules the tool enforces among them. |
| docs |
integer (uint) |
yes |
Documents it names. |
| adrs |
integer (uint) |
yes |
Decisions it names. |
| claims |
integer (uint) |
yes |
Claims it names. |
| use_cases |
integer (uint) |
yes |
Use cases it names. |
| moments |
integer (uint) |
yes |
Moments it answers. |
Used by FeatureSummary ResolvedRefs
FeatureEvidence
object
What is guaranteed about a feature, counted from the claims it names: never a word a
person wrote about the feature's maturity.
| property | type | required | description |
| claims |
map of integer (uint) |
yes |
Claims by status: guaranteed, advisory, planned, rejected. |
| modules |
map of integer (uint) |
yes |
The modules it names by stability. |
Used by FeatureSummary ResolvedRefs
FeatureList
object
The features as a client reads them.
| property | type | required | description |
| schema |
string |
yes |
[SCHEMA]. |
| fingerprint |
string |
yes |
The hash of the model's sources and derived facts. |
| counts |
ProductCounts → ProductCounts |
yes |
The counts. |
| surfaces |
array of SurfaceInfo → SurfaceInfo |
yes |
The surface vocabulary, with how many stable features each exposes. |
| features |
array of FeatureSummary → FeatureSummary |
yes |
The matching features, in presentation order. |
Used by product.features
FeatureSummary
object
One feature as a listing shows it: everything a card needs and nothing a page needs.
| property | type | required | description |
| id |
string |
yes |
The identity and the slug. |
| title |
string |
yes |
The feature as a heading. |
| label |
string |
yes |
The name a narrow column shows: the short title, or the title. |
| headline |
string |
yes |
The promise a visitor reads first. |
| summary |
string |
yes |
One line: what it does. |
| status |
string |
yes |
stable, draft or deprecated. |
| weight |
integer (uint32) |
yes |
Presentation order. |
| featured |
boolean |
yes |
Whether the homepage shows it. |
| areas |
array of string |
yes |
The operational areas it serves. |
| audiences |
array of string |
yes |
The audiences it is written for. |
| tags |
array of string |
yes |
Free tags. |
| route |
string |
yes |
Derived: /features/<id>/. |
| surfaces |
Surfaces → Surfaces |
yes |
Derived: the interfaces it is exposed through. |
| counts |
FeatureCounts → FeatureCounts |
yes |
Derived: how much stands behind it. |
| evidence |
FeatureEvidence → FeatureEvidence |
yes |
Derived: what is guaranteed. |
Used by FeatureList
FieldSource
object
Where one field of the snapshot came from. This is what makes an inferred system
debuggable: every fact can name the thing that decided it, so "why does it say that"
is answered by the tool rather than by reading its source.
| property | type | required | description |
| field |
string |
yes |
The field, in dotted form: services.cockpit.url, vcs.branch. |
| value |
string | null |
no |
The value as it appears in the snapshot, rendered for a person; absent for a field
that resolved to nothing. |
| source |
string |
yes |
What decided it: a file, a command, a compile-time constant, the cache. |
| resolver |
string |
yes |
The part of this executable that read it. |
| confidence |
Confidence → Confidence |
yes |
How certain the value is. |
Used by EnvironmentProvenance RepositoryEnvironment
Finding
object
One thing wrong with the catalogue, named where it is, with the nearest candidate when
there is one. A finding always carries enough to fix it without searching.
| property | type | required | description |
| severity |
Severity → Severity |
yes |
error or warning. |
| code |
string |
yes |
A short category: unknown_reference, duplicate_identity, missing_content, ... |
| path |
string |
yes |
The repository-relative file the finding is in. |
| id |
string | null |
no |
The record's identity, when one record owns the finding. |
| field |
string | null |
no |
The front-matter key the finding is about, when one key owns it. |
| message |
string |
yes |
What is wrong, in one sentence. |
| did_you_mean |
string | null |
no |
The nearest existing name, when the value looks like a typo of one. |
Used by ValidationReport
Fixtures
object
The fixtures category: where fixtures live and how large one may be.
| property | type | required | description |
| paths |
array of string |
no |
Pathspecs anchored at the repository root. |
| names |
array of string |
no |
Patterns matched against the file name alone. |
| max_bytes |
integer (uint64) |
yes |
A fixture over this many bytes is out. |
Used by Out
Fly
object
Fly.io's own facts: what has no meaning for any other provider.
| property | type | required | description |
| org |
string | null |
no |
The organisation the application belongs to. |
| force_https |
boolean | null |
no |
Whether the edge redirects plain HTTP to HTTPS. |
| concurrency |
Concurrency | null → Concurrency |
no |
When the edge considers a machine loaded. |
Used by Provider
GitInfo
object
What git said about the repository.
| property | type | required | description |
| toplevel |
string |
yes |
Absolute path of the work tree top level. |
| head |
string | null |
no |
Full commit id of HEAD, or None in an unborn repository. |
| branch |
string | null |
no |
Branch name, or None when detached or unborn. |
| working_tree |
string |
yes |
clean or dirty, from git status --porcelain. |
Used by GitState
GitState
one of 2 variants
What git says about the repository, or why it could not be asked.
variant `git` answered; the facts follow.
variant `git` could not be asked, or the root is not a work tree; the reason says which.
| reason | string | yes | What `git` said, or why it could not be run. |
| state | "unavailable" | yes | |
Used by RepositoryInfo
GitWorkingTree
object
The state of one work tree, as porcelain v2 reports it.
| property | type | required | description |
| head |
string | null |
no |
The commit HEAD names, or None in a repository with no commits yet. |
| branch |
string | null |
no |
The branch, or None when HEAD is detached or unborn. |
| detached |
boolean |
yes |
Whether HEAD names a commit directly rather than a branch. |
| upstream |
string | null |
no |
The upstream the branch tracks, when it tracks one. |
| ahead |
integer | null |
no |
Commits this branch has that its upstream does not; None without an upstream. |
| behind |
integer | null |
no |
Commits the upstream has that this branch does not; None without an upstream. |
| staged |
integer (uint32) |
yes |
Tracked files with staged changes. |
| modified |
integer (uint32) |
yes |
Tracked files changed in the work tree and not staged. |
| untracked |
integer (uint32) |
yes |
Files git does not track and is not ignoring. |
| conflicted |
integer (uint32) |
yes |
Files with an unresolved merge. |
| clean |
boolean |
yes |
Whether nothing at all is staged, modified, untracked or conflicted. |
| changed_paths |
array of string |
no |
Every path that is not clean, repository-relative, in git's order. Used to decide
whether the cached tier is still valid, and shown to nobody. |
Used by VcsState
Graph
object
A derived graph: what it is, where it came from, what its vocabularies mean, and the
nodes and edges themselves.
| property | type | required | description |
| id |
string |
yes |
The identity, [a-z][a-z0-9-]*; the last segment of its route. |
| title |
string |
yes |
The short name. |
| description |
string |
yes |
One paragraph: what a reader learns from it. |
| source |
string |
yes |
What it was derived from, in the repository's own words. |
| node_kinds |
map of string |
yes |
Node kind to what that kind means. |
| edge_kinds |
map of string |
yes |
Edge kind to what that edge asserts. |
| nodes |
array of Node → Node |
yes |
Sorted by id. |
| edges |
array of Edge → Edge |
yes |
Sorted. |
| metadata |
GraphMetadata → GraphMetadata |
yes |
Counts and invariants. |
Used by graph.get
GraphInfo
object
One graph the executable can derive: what it is, without deriving it.
| property | type | required | description |
| id |
string |
yes |
The identity. |
| title |
string |
yes |
The short name. |
| description |
string |
yes |
One paragraph. |
| source |
string |
yes |
What it is derived from. |
Used by GraphList
GraphList
object
Every graph this executable derives.
| property | type | required | description |
| count |
integer (uint) |
yes |
How many. |
| graphs |
array of GraphInfo → GraphInfo |
yes |
Each, described but not derived. |
Used by graph.list
GraphMetadata
object
What a reader needs to know about the graph as a whole before drawing it.
| property | type | required | description |
| nodes |
integer (uint) |
yes |
How many nodes. |
| edges |
integer (uint) |
yes |
How many edges. |
| acyclic |
boolean |
yes |
Whether the edges form a directed acyclic graph. Derived, never declared: a graph
whose contract is a DAG and whose answer here is false is a defect in the data. |
| truncated |
boolean |
yes |
True when the derivation stopped at [MAX_NODES] and the graph is a prefix of
what the repository holds. |
Used by Graph
Health
object
The health of what this process serves.
| property | type | required | description |
| status |
HealthStatus → HealthStatus |
yes |
The worst check's status. |
| tallies |
map of integer (uint) |
yes |
How many checks stand where, by status word. |
| checks |
array of HealthCheck → HealthCheck |
yes |
Every dimension, in a stable order. |
Used by health.report
HealthCheck
object
One dimension of the system, decided by one engine, with what a reader needs to check
it themselves.
| property | type | required | description |
| id |
string |
yes |
A stable id, [a-z][a-z0-9-]*. |
| title |
string |
yes |
The short name. |
| status |
HealthStatus → HealthStatus |
yes |
Where it stands. |
| detail |
string |
yes |
One line: what the engine decided and on what. |
| decided_by |
string |
yes |
The engine that decided it, named so the reader knows what to fix. |
| evidence |
array of string |
no |
What reproduces the verdict: a command, or a path. |
| findings |
array of string |
no |
Findings behind the verdict, when the engine produced any: the diagnostic
messages, the stale files, the missing coverage lines. |
Used by Health
HealthRoutes
object
The routes a platform polls, and how often.
| property | type | required | description |
| liveness |
Route → Route |
yes |
Is this process alive. |
| readiness |
Route → Route |
yes |
Can this process serve traffic. |
| grace_seconds |
integer | null |
no |
How long the platform waits before the first check counts. |
| interval_seconds |
Positive | null → Positive |
no |
How often the platform polls liveness. |
| timeout_seconds |
Positive | null → Positive |
no |
How long one check may take before it counts as failed. |
Used by DeploymentView
HealthStatus
"ok" | "warn" | "fail" | "unknown"
Where one dimension of the system stands. Ordered by severity, so the worst check
decides the whole.
okThe engine that decides this dimension is satisfied.warnNothing is broken and something is worth looking at.failThe engine that decides this dimension is not satisfied.unknownThis process cannot decide it, and says so rather than reporting `ok`.
Used by Health HealthCheck Readiness
HttpExposure
object
How a capability appears over HTTP. GET binds every top-level input property as a
query parameter; POST binds the input as the JSON request body. Paths are absolute
and live under [HttpExposure::PREFIX].
| property | type | required | description |
| method |
HttpMethod → HttpMethod |
yes |
The method. |
| path |
string |
yes |
The absolute path, under [HttpExposure::PREFIX]. |
Used by Exposure
HttpMethod
"GET" | "POST"
The HTTP methods a capability may be bound to.
GETRead-only; the input is bound from the query string.POSTThe input is bound from the JSON body. No builtin uses it yet.
Used by HttpExposure
InspectReport
object
One branch, inspected: where its work tree belongs and what is there.
| property | type | required | description |
| branch |
string |
yes |
The branch asked about. |
| branch_exists |
boolean |
yes |
The branch exists locally. |
| expected_path |
string |
yes |
Where its work tree belongs. |
| destination_exists |
boolean |
yes |
Something exists at that path. |
| worktree |
WorktreeState | null → WorktreeState |
no |
The work tree that holds the branch, when one does. |
| canonical |
boolean |
yes |
The branch is checked out at its canonical path. |
| diagnostics |
array of TopologyDiagnostic → TopologyDiagnostic |
yes |
What stands in the way, if anything. |
Used by worktree.inspect
InstallCheck
object
One check: what was asked, what was seen, and — when it does not hold — why, and the
command that changes it. The cause and next fields exist so that a report is
actionable without a second document; a check that fails without naming its remedy is
a diagnostic nobody can act on.
| property | type | required | description |
| id |
string |
yes |
A short stable name: model, version, targets, release, artifacts, metadata. |
| state |
CheckState → CheckState |
yes |
Whether it holds. |
| observed |
string |
yes |
What was observed, in one line. |
| cause |
string | null |
no |
Why it does not hold. Absent when it does. |
| next |
string | null |
no |
The command or action that would change it. Absent when there is nothing to do. |
Used by InstallabilityReport
InstallabilityReport
object
Whether the advertised one-line installation works right now, and if not, what is missing.
This answers the operator's actual question — can a machine that has never seen this
project install it with the published command? — from local state alone. It performs no
network access: a repository can be offline and this still answers, because everything it
needs is the distribution model and the release records the repository itself carries.
What it cannot see it reports as unknown rather than guessing; the public half of the
question is answered by the release workflow's smoke phase, which installs from the
published URL on every native runner and is the only thing that proves the public path.
| property | type | required | description |
| installable |
boolean |
yes |
True when every check holds: a stable release is recorded and complete. |
| summary |
string |
yes |
One line for a person: what the state is, in the project's own terms. |
| local_version |
string |
yes |
The version this tree would release. |
| stable_tag |
string | null |
no |
The tag an unpinned installation resolves to, when a stable release is recorded. |
| required_targets |
integer (uint) |
yes |
How many targets a release must publish for that release to be complete. |
| published_artifacts |
integer (uint) |
yes |
How many of them the stable release actually publishes. |
| install_command |
string |
yes |
The command a person would run, whether or not it currently works. |
| installer_url |
string |
yes |
Where the installer is served. |
| latest_url |
string |
yes |
Where the stable pointer is served. |
| checks |
array of InstallCheck → InstallCheck |
yes |
Every check, in the order they are worth reading. |
Used by distribution.status
Integration
"open" | "merged" | "absorbed" | "unknown"
How a branch stands to the trunk, which is what decides which commits are its own.
openNot reachable from the trunk: its commits are the ones the trunk does not have.mergedReachable from the trunk through a merge commit, which the trace names: its commits
are the ones that merge brought in.absorbedReachable from the trunk with no merge commit of its own — fast-forwarded, or
rebased onto it. Its commits cannot be told from the trunk's and none are claimed.unknownThe trunk is unknown, so there is nothing to measure the branch against.
Used by BranchTrace
Interface
"loopback" | "all"
Which interface a process listens on.
loopbackReachable from this host alone: the local default, and what every local invocation
keeps.allEvery interface. A hosted process needs it and a local one never does; stating it
is the intent that replaces suppressing the bind warning.
Used by Listen
IssueTrace
object
Everything git knows about one issue's realisation.
| property | type | required | description |
| issue |
string |
yes |
The issue id, as the project model spells it. |
| declared |
boolean |
yes |
True when the project model declares this id. False is not an error and not an
empty answer: it says the id was looked for and the model does not have it, which a
caller must be able to tell apart from "declared, and nothing has realised it yet".
A repository with no project model at all answers false for every id rather than
refusing, because the branches naming an id are still derivable there. |
| milestone |
string | null |
no |
The milestone the canonical issue record names. Git does not hold this edge and
nothing here derives it: the caller with the index fills it in, and it is null in
a repository whose issue record does not name one. |
| trunk |
string | null |
no |
The trunk every branch was measured against. |
| branches |
array of BranchTrace → BranchTrace |
yes |
The branches that name it, local first. |
| commits |
integer (uint) |
yes |
How many distinct commits the branches hold between them. |
| complete |
boolean |
yes |
True when every branch's commits could be derived. False when at least one reached
the trunk without a merge commit, so part of the work is not distinguishable. |
Used by trace.issue TraceReport
KindCount
object
How many valid objects of one kind the layer holds.
| property | type | required | description |
| kind |
string |
yes |
The kind, as share/kinds.yaml declares it. |
| count |
integer (uint) |
yes |
How many objects of it the index holds. |
Used by LayerSummary
KindRef
object
One object kind the feature names, with how many objects of it the layer holds.
| property | type | required | description |
| name |
string |
yes |
The kind. |
| objects |
integer (uint) |
yes |
Objects of this kind in the index. |
Used by ResolvedRefs
LayerSummary
object
What the layer holds, counted per kind, plus the registry the executable composes.
Every number here comes from the index — the same objects every other surface serves —
and never from counting files that match a pattern: a file that does not parse is not
a rule, and a count that says otherwise is a lie a person acts on.
| property | type | required | description |
| state |
TierState → TierState |
yes |
Where these numbers came from. |
| kinds |
array of KindCount → KindCount |
no |
One entry per kind present, sorted by kind. |
| objects |
integer | null |
no |
How many objects the index holds. |
| capabilities |
integer | null |
no |
How many capabilities the registry holds. |
| invalid |
integer | null |
no |
How many files the layer declared that did not become objects. |
| degraded |
boolean | null |
no |
Whether the layer read cleanly. |
Used by RepositoryEnvironment
Libc
"gnu" | "musl"
The C library a Linux artifact is linked against.
gnuGNU libc: the ordinary distributions.muslmusl: Alpine, and any statically linked artifact.
Used by TargetView
LimitsView
object
What this process's execution store keeps.
| property | type | required | description |
| max_executions |
integer (uint) |
yes |
How many executions are remembered. |
| max_events |
integer (uint) |
yes |
How many events are retained per execution. |
| max_log_chars |
integer (uint) |
yes |
The longest a single log line may be. |
| max_running |
integer (uint) |
yes |
How many executions run at once. |
| max_subscriber_queue |
integer (uint) |
yes |
How far a live channel may fall behind before it is told to resynchronise. |
Used by ProtocolReport
Listen
object
The address the process listens on.
| property | type | required | description |
| port |
Port → Port |
yes |
The port, stated once for the process, the image and the provider configuration. |
| interface |
Interface → Interface |
yes |
Which interface. |
Used by DeploymentView
Liveness
object
The answer to "is this process alive": the cheapest true thing this executable can
say about itself. Deliberately not a summary of anything — a probe that grew an
opinion would stop reporting the one fact the platform polls it for.
| property | type | required | description |
| alive |
boolean |
yes |
Always true. A process that could not answer would not answer at all, which is
the signal. |
| version |
string |
yes |
This executable's version, so a rolling deployment can tell which build answered. |
Used by health.live
LogStream
"stdout" | "stderr" | "handler"
Which stream a log line came from.
stdoutThe standard output of a child process the handler ran.stderrIts standard error.handlerThe handler itself, saying something it wants a reader to see.
Used by ExecutionEvent
Machines
object
How many machines run, and whether the platform may stop them.
| property | type | required | description |
| count |
Positive → Positive |
yes |
How many machines the application has. |
| min_running |
integer (uint32) |
yes |
How many stay running when idle. |
| autostart |
boolean |
yes |
Whether a request to a stopped machine starts it. |
| autostop |
boolean |
yes |
Whether an idle machine is stopped. |
Used by DeploymentView
Match
"same_worktree_same_branch" | "same_branch"
Which tier of the resolution rule matched. There is no third tier on purpose: a record
from an unrelated worktree or branch is never offered.
same_worktree_same_branchSame repository, same worktree, same branch.same_branchSame repository, same branch, another worktree of it.
Used by Record
Matrix
object
Every feature against every interface, and every module, command and kind against the
features that name it.
| property | type | required | description |
| schema |
string |
yes |
[SCHEMA]. |
| surfaces |
array of SurfaceInfo → SurfaceInfo |
yes |
The surface vocabulary. |
| rows |
array of MatrixRow → MatrixRow |
yes |
One row per feature of any status but deprecated, in presentation order. |
| modules |
array of ProductCoverage → ProductCoverage |
yes |
Every builtin module of the executable with the stable features that name it. |
| commands |
array of ProductCoverage → ProductCoverage |
yes |
Every public command of the shell tool with the stable features that name it. |
| kinds |
array of ProductCoverage → ProductCoverage |
yes |
Every kind of the layer a feature can present, with the stable features that name it. |
Used by product.matrix
MatrixRow
object
One row of the matrix: a feature and the surfaces it is exposed through.
| property | type | required | description |
| id |
string |
yes |
The feature id. |
| label |
string |
yes |
The name a narrow column shows. |
| route |
string |
yes |
/features/<id>/. |
| status |
string |
yes |
stable or draft. |
| surfaces |
Surfaces → Surfaces |
yes |
The surfaces, by id, in the vocabulary's order. |
| exposed |
array of string |
yes |
The surface ids that are true. |
Used by Matrix
McpExposure
object
How, if at all, a capability appears to an MCP client.
| property | type | required | description |
| tool |
string | null |
no |
As a tool with this name ([a-z0-9_]+). |
| resource |
McpResource | null → McpResource |
no |
As a readable resource. |
Used by Exposure
McpResource
object
An MCP resource: its URI and the short name a client lists.
| property | type | required | description |
| uri |
string |
yes |
majordomus://<kind>/<identity>, or majordomus://repository. |
| name |
string |
yes |
The short name a client lists; the identity for a declarative object. |
Used by McpExposure
MigrationAction
"move" | "move_via_staging" | "copy_and_repair" | "none"
How a step moves its worktree.
moveOne `git worktree move`.move_via_stagingThe worktree is the container itself: out to a staging path, then into the container.copy_and_repairThe move crossed devices: copy, `git worktree repair`, verify, remove the original.noneNothing: the step is blocked.
Used by MigrationStep
MigrationPlan
object
A migration, planned or applied.
| property | type | required | description |
| schema |
string |
yes |
[SCHEMA]. |
| container |
string |
yes |
The container everything moves into. |
| steps |
array of MigrationStep → MigrationStep |
yes |
One step per misplaced worktree with a branch, container occupants first. |
| exceptions |
array of TopologyDiagnostic → TopologyDiagnostic |
yes |
Worktrees the migration cannot address by design: detached, missing, the primary
checkout off the trunk. Each says what a person does about it. |
| movable |
integer (uint) |
yes |
Steps that can be carried out as things stand. |
| blocked |
integer (uint) |
yes |
Steps that cannot. |
| moved |
integer (uint) |
yes |
Steps carried out and verified. |
| failed |
integer (uint) |
yes |
Steps attempted and not verified. |
| applied |
boolean |
yes |
Whether anything was changed. |
| moved_current |
string | null |
no |
The new path of the worktree the command was run from, when that one moved. |
Used by worktree.migration_plan
MigrationStep
object
One worktree to bring home.
| property | type | required | description |
| branch |
string |
yes |
The branch it holds. |
| from |
string |
yes |
Where it is. |
| to |
string |
yes |
Where it belongs. |
| head |
string | null |
no |
The commit checked out. |
| action |
MigrationAction → MigrationAction |
yes |
How it moves. |
| dirty |
DirtyState → DirtyState |
yes |
Its uncommitted work, which moves with it. |
| blockers |
array of TopologyDiagnostic → TopologyDiagnostic |
yes |
Why it cannot move, when it cannot. |
| outcome |
StepOutcome → StepOutcome |
yes |
What happened. |
| message |
string | null |
no |
What happened, in words, when it was not simply moved. |
| before |
WorktreeFingerprint | null → WorktreeFingerprint |
no |
The fingerprint before the move. |
| after |
WorktreeFingerprint | null → WorktreeFingerprint |
no |
The fingerprint after it. |
| differences |
array of string |
yes |
What differs between the two; empty when verified. |
| envrc |
EnvrcApproval | null → EnvrcApproval |
no |
What became of its .envrc under direnv once it was at its new path: the primary
checkout's approval carried there, or why it was not. Only on a moved step. |
Used by MigrationPlan
ModuleId
string
A module identity: the namespace of every capability the module composes, matching
[a-z][a-z0-9_-]*. Builtin modules declare theirs in module!; a declarative
object's module is its kind.
Used by Capability CapabilitySummary
ModuleQuality
object
What the exported module surface looks like.
| property | type | required | description |
| modules |
integer (uint) |
yes |
Modules the crate exports, the crate root included. |
| documented |
integer (uint) |
yes |
Of those, how many carry a //! header. |
| exampled |
integer (uint) |
yes |
How many carry an executable example in that header. |
| behaviourally_tested |
integer (uint) |
yes |
How many something exercises: an in-file test, or a test that names them. |
Used by QualityReport
ModuleRef
object
One capability module the feature names.
| property | type | required | description |
| id |
string |
yes |
The module id. |
| title |
string |
yes |
The short name. |
| description |
string |
yes |
One paragraph. |
| stability |
string | null |
no |
Where the module stands, when it declared it. |
| source_path |
string |
yes |
Repository-relative path of the file its descriptors were composed in. |
| capabilities |
array of CapabilityRef → CapabilityRef |
yes |
The builtin capabilities it composes, in id order. |
Used by ResolvedRefs
MomentDetail
object
One moment in full, with everything derived that a page shows and no file states.
| property | type | required | description |
| id |
string |
yes |
The identity, the slug and the file name. |
| title |
string |
yes |
The moment as a heading. |
| short_title |
string | null |
no |
Two or three words for a narrow column, when the record carries one. |
| hook |
string |
yes |
The first-person line an index shows. |
| summary |
string |
yes |
One line: what is actually wrong. |
| status |
string |
yes |
stable, draft or deprecated. |
| severity |
string |
yes |
low, medium or high. |
| frequency |
string |
yes |
rare, occasional, common or constant. |
| weight |
integer (uint32) |
no |
Presentation order, lowest first. |
| featured |
boolean |
no |
Whether the homepage shows it. |
| audiences |
array of string |
yes |
The audiences that recognise it. |
| areas |
array of string |
yes |
The operational areas it falls under. |
| lifecycle |
array of string |
no |
The stages of work at which it shows up. |
| tags |
array of string |
no |
Free tags. |
| signals |
array of Signal → Signal |
yes |
The observable symptoms. |
| examples |
array of Example → Example |
yes |
The concrete situations. |
| commands |
array of string |
no |
Commands of the tool that answer it. |
| capabilities |
array of string |
no |
Capability ids of the executable that answer it. |
| claims |
array of string |
no |
Claims that say what is guaranteed here. |
| doctrines |
array of string |
no |
Rules of the effective set that govern it. |
| use_cases |
array of string |
no |
Use cases that show the way out. |
| related |
array of string |
no |
Moments explicitly related to this one. The reverse is derived. |
| aliases |
array of string |
no |
Other words a reader might search for. |
| route |
string |
no |
Derived: /why/<id>/. Never authored; the schema refuses a route key. |
| source |
string |
no |
Derived: the repository-relative file the record came from. |
| body |
string |
no |
The Markdown body, without its front matter. |
| responsibilities |
array of string |
yes |
Derived: the responsibilities the claims it names belong to. |
| backlinks |
array of string |
yes |
Derived: the moments that name this one in their related. |
| similar |
array of string |
yes |
Derived: moments sharing an area or an audience with this one and not already
named by it, nearest first — most shared metadata, then presentation order. |
| related_detail |
array of MomentSummary → MomentSummary |
yes |
Derived: the explicitly related moments, summarised so a page needs one call. |
| neighbours |
array of string |
yes |
Derived: what a reader should see next, in one list and in a stated order — what
this moment names, then what names it, then what is nearest by shared metadata,
each appearing once. The three lists above are the same relations kept apart for a
reader that wants to know which is which. |
Used by why.moment
MomentRef
object
One operational moment the feature answers: derived from the moments that name any of
the feature's commands, capabilities, claims or rules.
| property | type | required | description |
| id |
string |
yes |
The moment id. |
| title |
string |
yes |
The title. |
| hook |
string |
yes |
The first-person line an index shows. |
| route |
string |
yes |
/why/<id>/. |
Used by ResolvedRefs
MomentSummary
object
One moment as a listing shows it: everything a card needs and nothing a page needs.
| property | type | required | description |
| id |
string |
yes |
The identity and the slug. |
| title |
string |
yes |
The moment as a heading. |
| label |
string |
yes |
The name a narrow column shows: the short title, or the title. |
| hook |
string |
yes |
The first-person line an index shows. |
| summary |
string |
yes |
One line: what is actually wrong. |
| status |
string |
yes |
stable, draft or deprecated. |
| severity |
string |
yes |
low, medium or high. |
| frequency |
string |
yes |
rare, occasional, common or constant. |
| weight |
integer (uint32) |
yes |
Presentation order. |
| featured |
boolean |
yes |
Whether the homepage shows it. |
| audiences |
array of string |
yes |
The audiences that recognise it. |
| areas |
array of string |
yes |
The operational areas it falls under. |
| tags |
array of string |
yes |
Free tags. |
| route |
string |
yes |
Derived: /why/<id>/. |
| signals |
integer (uint) |
yes |
How many observable symptoms it declares. |
| examples |
integer (uint) |
yes |
How many concrete situations it carries. |
Used by CatalogueView MomentDetail
Mount
string
An absolute mount path, without a trailing slash.
Used by Surface
Node
object
One node. id is unique within the graph; kind is what the graph's node_kinds
declares it to be; route is where the Cockpit shows the thing itself, when it shows
it anywhere.
| property | type | required | description |
| id |
string |
yes |
Unique within the graph. |
| kind |
string |
yes |
One of the graph's declared node kinds. |
| label |
string |
yes |
The short label a renderer draws. |
| summary |
string | null |
no |
One line about the thing, when the source holds one. |
| route |
string | null |
no |
Where the Cockpit shows this thing, when it shows it. |
| source |
string | null |
no |
The repository-relative file the node was derived from, when one file owns it. |
| status |
string | null |
no |
A status word the graph's own vocabulary defines (accepted, active, query). |
| external |
boolean |
no |
True when the node stands for something the graph names but does not hold: a
reference that resolves to nothing in this repository. |
| facts |
map of Fact → Fact |
no |
What the object's own kind declares about it, as its schema validated it: the
fields of its front matter that are facts about the thing rather than the document
itself. A rule carries its class and its statement, a skill its inputs and
outputs, a decision its date — the vocabulary that makes each kind worth having,
rather than the four fields every kind happens to share. |
Used by Graph
ObjectList
object
The answer of objects.list: the matching objects, summarised, in URI order.
| property | type | required | description |
| count |
integer (uint) |
yes |
How many objects matched. |
| objects |
array of ObjectSummary → ObjectSummary |
yes |
The objects, one summary each. |
Used by objects.list
ObjectProvenance
object
Where an object came from. Every field is computed from the repository, never authored.
| property | type | required | description |
| path |
string |
yes |
Repository-relative path, forward slashes, as the version-control index names it. |
| directory |
string |
yes |
The directory the path sits in, repository-relative; . for the root. This is the
hierarchy position a client orders by; no merge semantics are implied. |
| source_class |
string |
yes |
The sources.yaml class that discovered the file (rule, readme, ...). |
| section |
string | null |
no |
The manifest section the path falls under (rules, prompts, ...), when it falls
under one; a root README.md falls under none. |
| bytes |
integer (uint64) |
yes |
Size of the file in bytes. |
| member |
string | null |
no |
For an object that is one member of a collection file: the member's key path in
the file (claims.3). |
Used by ObjectView
ObjectStanding
"current" | "changed" | "missing" | "unreadable"
How one file stands against what the index read from it.
currentIt is what the index read.changedIt is there and it has changed since the index was built.missingThe file the index read is no longer there.unreadableIt is there and could not be read.
Used by DriftedObject
ObjectSummary
object
One object, summarised for a listing.
| property | type | required | description |
| uri |
string |
yes |
majordomus://<kind>/<identity>. |
| id |
string |
yes |
The capability id, <kind>.<identity>. |
| kind |
string |
yes |
The kind the object was read as. |
| identity |
string |
yes |
The identity within the kind. |
| title |
string | null |
no |
The title, when the kind's title rule found one. |
| description |
string | null |
no |
The one-line description, when the kind holds one. |
| path |
string |
yes |
Repository-relative source path. |
Used by ObjectList
ObjectView
object
One declarative object of the repository's layer, as a client reads it.
| property | type | required | description |
| uri |
string |
yes |
majordomus://<kind>/<identity>. |
| id |
string |
yes |
The capability id, <kind>.<identity>. |
| kind |
string |
yes |
The kind the object was read as (rule, prompt, document, ...). |
| identity |
string |
yes |
The identity within the kind (majordomus.scope-integrity@1, continue, a path). |
| title |
string | null |
no |
The title the kind's title rule found, when it found one. |
| description |
string | null |
no |
The one-line description the kind's description field held, when it held one. |
| metadata |
any |
yes |
The parsed front matter or YAML, keys in the file's order. |
| provenance |
ObjectProvenance → ObjectProvenance |
yes |
Where the object came from: path, directory, source class, section, size, member. |
| media_type |
string |
yes |
IANA media type of content (text/markdown, application/yaml, application/json, text/plain). |
| content |
string |
yes |
The file as read. |
Used by ResourceView
Obligation
object
One token a task may declare in requires, as the distribution ships it.
remote and inputs are what decide how its evidence is judged, and they are the
file's decision rather than this reader's: a fact the working tree cannot establish is
bound to the commit it was taken at, and everything else is bound to the bytes of the
files its pathspecs select.
use majordomus_cli::capability::builtin::obligations::Obligation;
let push: Obligation = serde_json::from_str(
r#"{"id":"push","title":"The commit reached the remote",
"summary":"The branch's head exists on the remote it tracks.",
"discharged_by":"git","remote":true}"#,
)
.unwrap();
assert!(push.remote);
assert!(push.inputs.is_empty(), "a remote fact is bound to a commit, not to a tree");
| property | type | required | description |
| id |
string |
yes |
The token, as a task's requires names it. |
| title |
string |
yes |
The obligation as a heading. |
| summary |
string |
yes |
What a worker is being asked to have done. |
| discharged_by |
string |
yes |
The command that produces the evidence. none for a token held by another line of
the contract and listed so that a report can say it rather than leave a hole. |
| inputs |
array of string |
no |
The pathspecs the evidence is hashed over. Empty for a token whose fact is remote,
and empty for one bound to neither: see [ObligationClosure::staleness]. |
| remote |
boolean |
yes |
True when the fact cannot be established from the working tree alone — a push, a
publication, a deployment. Such evidence is bound to a commit, not to a tree. |
| note |
string |
no |
What the vocabulary says about the token beyond its summary. |
Used by Vocabulary
ObligationClosure
object
One obligation the task declared, joined with what the vocabulary says about it and
with the evidence that does or does not discharge it.
The vocabulary's fields are repeated here on purpose: a client asking what this task
owes gets the token's title, its summary and the command that would discharge it in the
same answer, and needs no second call to render a report.
use majordomus_cli::capability::builtin::obligations::{ObligationClosure, ObligationState};
let owed: ObligationClosure = serde_json::from_str(
r#"{"id":"pages","title":"The published site serves this commit","remote":true,
"state":"owed","detail":"owed, and no evidence was recorded",
"reproduce":"majordomus evidence --covers pages --command 'scripts/pages verify'"}"#,
)
.unwrap();
assert_eq!(owed.state, ObligationState::Owed);
assert!(owed.evidence.is_none() && owed.staleness.is_none(), "nothing to label");
assert!(owed.reproduce.starts_with("majordomus evidence"), "a finding carries its repair");
| property | type | required | description |
| id |
string |
yes |
The token, as the task's requires names it. |
| title |
string |
yes |
From the vocabulary; the token itself when it declares none. |
| summary |
string |
no |
From the vocabulary. |
| discharged_by |
string |
no |
From the vocabulary: the command that produces the evidence. |
| remote |
boolean |
yes |
From the vocabulary: whether the fact is remote. |
| inputs |
array of string |
no |
From the vocabulary: the pathspecs the evidence is hashed over. |
| state |
ObligationState → ObligationState |
yes |
Where it stands. |
| staleness |
Divergence | null → Divergence |
no |
How far the evidence is from this checkout, in the repository's one staleness
vocabulary. None when there is no evidence to label.
A remote fact is labelled against the commit it was taken at, because the site that
serves a commit goes on serving it while the tree moves underneath. A tree-bound
fact is labelled by re-hashing: equal hashes are exact, and a difference takes the
commit's label, which is advanced when the working tree has merely moved on and
diverged when the history it named is gone. A token that declares neither inputs
nor a remote fact is bound to nothing and stays exact once recorded — that is the
validator's behaviour, and it is reproduced rather than tightened here. |
| evidence |
Evidence | null → Evidence |
no |
The line that discharged it, or None. |
| inputs_hash_now |
string | null |
no |
What the token's inputs hash to in this tree now — the other half of "stale against
what". None for a token that declares no inputs, and None when git could not be
asked which files they select. |
| inputs_files |
integer | null |
no |
How many tracked files that hash was taken over. Reported because the shell's
selection and this one are not always the same set — see the module header — and a
count is the cheapest way for a reader to see it rather than be told it. |
| detail |
string |
yes |
One line: what this obligation's standing actually is, in the words the validator
uses when it refuses. |
| reproduce |
string |
yes |
The command that would discharge it. Every finding here carries the way to act on
it, as project.finding-carries-reproduce asks. |
Used by Closure
ObligationState
"owed" | "discharged" | "stale" | "undeclared"
Where one obligation stands.
The words are the validator's verdicts, not a severity scale: stale is not a worse
owed, it is evidence that was true and no longer describes what it proved.
use majordomus_cli::capability::builtin::obligations::ObligationState;
// only one of the four lets a task be called completed
let completable = |s: ObligationState| s == ObligationState::Discharged;
assert!(completable(ObligationState::Discharged));
assert!(!completable(ObligationState::Stale), "evidence that no longer describes the tree");
assert!(!completable(ObligationState::Owed));
assert!(!completable(ObligationState::Undeclared));
owedDeclared, and no evidence for it was ever recorded.dischargedEvidence exists and still describes this tree, or this commit.staleEvidence exists and no longer describes what it proved: the inputs changed, or the
commit it named is not this one.undeclaredThe task requires a token the shipped vocabulary does not declare. Nothing can
discharge it, because nothing knows what would.
Used by ObligationClosure
OpenSession
object
The open episode of this worktree, when there is one.
| property | type | required | description |
| session_id |
string |
yes |
The episode's id. |
| started_at |
string |
yes |
When it opened. |
| owner |
string |
no |
Who opened it. |
| worker |
string |
no |
The worker identity, when one was supplied. Never inferred. |
| provider |
string |
no |
The provider whose event opened it, when one did. |
| branch |
string |
no |
The branch it opened on. |
| start_head |
string |
no |
The commit it opened at. |
| foreign |
boolean |
yes |
True when the open record here belongs to another checkout. Such a record is
reported and never treated as this checkout's episode. |
Used by Continuity
OperationParity
object
What the canonical operations look like against the transports that project them.
| property | type | required | description |
| canonical |
integer (uint) |
yes |
Executable capabilities in the registry. |
| cli |
integer (uint) |
yes |
Of those, how many declare a command-line projection. |
| http |
integer (uint) |
yes |
How many declare an HTTP route. |
| openapi |
integer (uint) |
yes |
How many the OpenAPI document describes. |
| mcp |
integer (uint) |
yes |
How many declare an MCP tool. |
| cli_commands |
integer (uint) |
yes |
Commands of the command line, leaves and runnable parents. |
| cli_from_capability |
integer (uint) |
yes |
Of those, how many are the projection of a capability. |
| cli_local |
integer (uint) |
yes |
How many are declared to belong to the command line alone, with a reason. |
Used by QualityReport
Origin
"repository" | "distribution"
Where the declaration was read from.
repositoryThe repository's own, named by the manifest's `scope` section.distributionThe distribution's default, because the repository declares none.
Used by RepositoryInfo ScopeReport
Os
"macos" | "linux" | "windows"
An operating system a target runs on.
macosApple's, detected as `Darwin`.linuxLinux, detected as `Linux`, and the only one where the C library matters.windowsWindows; representable, and not built today.
Used by TargetView
Out
object
The out: mapping: every category optional, each the reason a path is out.
| property | type | required | description |
| paths |
array of string |
no |
Never read, by path: version control, the local half, dependencies, build outputs. |
| binary |
boolean |
no |
Content that is not text (a NUL byte in the first window) is out, whatever the name says. |
| max_bytes |
integer | null |
no |
A file over this many bytes is out, whatever it is. |
| archive |
Category | null → Category |
no |
Archives. |
| image |
Category | null → Category |
no |
Images. |
| video |
Category | null → Category |
no |
Video. |
| pdf |
Category | null → Category |
no |
PDF documents. |
| database_dump |
Category | null → Category |
no |
Database dumps. |
| generated |
Category | null → Category |
no |
Generated assets: changed by changing the source and regenerating. |
| secret |
Category | null → Category |
no |
Secrets: never read, never served, never quoted; a tracked one is reported. |
| fixtures |
Fixtures | null → Fixtures |
no |
Fixtures are read up to a size; over it they are data, not context. |
Used by Declaration
OutFile
object
One tracked file that is out.
| property | type | required | description |
| path |
string |
yes |
Repository-relative. |
| reason |
Reason → Reason |
yes |
Why. |
| rule |
string | null |
no |
The rule that decided; absent for undeclared. |
Used by Tally
Overlap
object
Two peers that claimed the same ground.
Reported when the second of them announces, so that a collision is known at the moment
it is created rather than discovered afterwards in the history of a branch.
| property | type | required | description |
| peer |
PeerId → PeerId |
yes |
The other peer. |
| attached |
boolean |
yes |
Whether that peer is still attached. An overlap with a departed peer is a weaker
signal than one with a live session, and the reader is told which it is. |
| intent |
string |
yes |
What it said it was doing. |
| paths |
array of OverlapPath → OverlapPath |
yes |
The claims that meet: one line per pair, yours and theirs. |
Used by Announced PeerList
OverlapPath
object
One pair of claims that contain one another.
| property | type | required | description |
| yours |
string |
yes |
The path the announcing peer claimed. |
| theirs |
string |
yes |
The path the other peer claimed. |
Used by Overlap
ParameterView
object
One query parameter of the live channel.
| property | type | required | description |
| name |
string |
yes |
Its name. |
| description |
string |
yes |
What it does. |
| required |
boolean |
yes |
Whether it must be given. |
Used by ProtocolReport
Peer
object
One peer as the board lists it.
| property | type | required | description |
| id |
PeerId → PeerId |
yes |
p1, p2, ... |
| client |
ClientInfo → ClientInfo |
yes |
The client behind it. |
| transport |
Transport → Transport |
yes |
How it is attached. |
| connected_at |
string |
yes |
When it attached, RFC 3339, UTC. |
| last_seen_seconds_ago |
integer (uint64) |
yes |
Seconds since its last message. |
| attached |
boolean |
yes |
Whether the session is still attached. A peer that announced something and then
went away is kept and listed with attached: false: what it said it was working on
outlives the connection that said it, because the work does. |
| announcement |
Announcement | null → Announcement |
no |
Its announcement, when it made one. |
Used by PeerList
PeerId
string
A peer's identity for the life of the server: p1, p2, ... in attachment order.
p1 is the session that started the server.
Used by Announced Overlap Peer PeerList
PeerList
object
The answer of peers.list: every client attached to this shared server.
| property | type | required | description |
| count |
integer (uint) |
yes |
How many peers are attached, the caller included. |
| caller |
PeerId | null → PeerId |
no |
The caller's own peer id, when the call came through an MCP session. |
| peers |
array of Peer → Peer |
yes |
The peers, in attachment order; p1 started the server. A peer that announced
something and then went away is still here, with attached: false. |
| overlaps |
array of Overlap → Overlap |
no |
Every pair of peers whose claimed scope meets, each pair once. Empty is the
ordinary case, and a reader who sees an entry here is looking at two sessions
about to do the same work. |
Used by peers.list
PhaseTotals
object
A phase's totals.
| property | type | required | description |
| count |
integer (uint64) |
yes |
How many times the phase ran. |
| total_nanos |
integer (uint64) |
yes |
Nanoseconds spent in it, summed. |
Used by CounterSnapshot
Plan
object
The whole derived plan: what every plan capability answers out of.
| property | type | required | description |
| project |
PlanProject → PlanProject |
yes |
The plan's header, with the active milestone derived. |
| statuses |
PlanVocabulary → PlanVocabulary |
yes |
The declared status vocabularies. |
| milestones |
array of PlanMilestone → PlanMilestone |
yes |
Every milestone, in id order. |
| issues |
array of PlanIssue → PlanIssue |
yes |
Every issue, in id order. |
| waves |
array of PlanWave → PlanWave |
yes |
The execution waves, lowest first. |
| edges |
array of PlanEdge → PlanEdge |
yes |
The issue dependency graph, sorted. |
| milestone_edges |
array of PlanEdge → PlanEdge |
yes |
The milestone dependency graph, sorted. |
| findings |
array of PlanFinding → PlanFinding |
yes |
Every finding, in derivation order. |
Used by plan.model
PlanCounts
object
A milestone's issues counted: the two denominators, then one entry per declared status.
| property | type | required | description |
| total |
integer (uint32) |
yes |
Every issue naming this milestone. |
| required |
integer (uint32) |
yes |
The denominator the milestone's own status derivation uses: total less cancelled, so
no surface prints "n of total" for a milestone the engine calls DONE. |
| by_status |
map of integer (uint32) |
yes |
One entry per declared issue status, keyed by the vocabulary. |
Used by PlanMilestone PlanMilestoneProgress PlanStatusReport
PlanEdge
object
One dependency edge, from before to.
| property | type | required | description |
| from |
string |
yes |
The record that must be real first. |
| to |
string |
yes |
The record that waits for it. |
Used by Plan
PlanFinding
object
One validation finding, in the shape project.finding-carries-reproduce asks for.
| property | type | required | description |
| level |
string |
yes |
FAIL or WARN. A failure means the model is invalid. |
| code |
string |
yes |
The stable code a reader greps for (unknown_dependency, scope_conflict, …). |
| subject |
string |
yes |
The record the finding is about, or graph when it is about the whole graph. |
| message |
string |
yes |
What is wrong, in one line. |
Used by Plan PlanValidation PlanWaveReport
PlanIssue
object
One issue, as its record declares it and as the graph derives it.
| property | type | required | description |
| id |
string |
yes |
The identity, which is also the file name. |
| milestone |
string |
yes |
The milestone it belongs to. |
| status |
string |
yes |
The derived status. Never stored: an issue records what happened to it and the
status follows from that and from the state of its dependencies. |
| wave |
integer (uint32) |
yes |
The execution wave: one past the longest path to it through the dependency graph. |
| priority |
string |
yes |
p0 … p3. |
| profile |
string |
yes |
The execution profile the issue is worked under. |
| parallel_safe |
boolean |
yes |
Whether it may run beside another issue of its wave. |
| title |
string |
yes |
One line naming the outcome. |
| slug |
string |
yes |
The slug, when the record carries one. |
| depends_on |
array of string |
yes |
Every issue it declares a dependency on, as declared — including one that does not
exist, which is a finding rather than a silent omission. |
| blocked_by |
array of string |
yes |
The dependencies that are not DONE, plus milestone:<id> when the milestone gate
holds the whole outcome back. |
| dependents |
array of string |
yes |
The issues that depend on this one. |
| scope |
array of string |
yes |
The paths it touches; two issues of one wave that share a path are serialised. |
| objective |
string |
yes |
One line: what the issue is for. |
| evidence_have |
integer (uint32) |
yes |
Evidence entries attached. |
| evidence_need |
integer (uint32) |
yes |
Evidence tokens the record requires before it may be DONE. |
| started_at |
string |
yes |
When execution began, when it did. |
| verified_at |
string |
yes |
When implementation was declared complete. |
| completed_at |
string |
yes |
When completion was recorded. |
Used by Plan PlanIssueList PlanNextIssue PlanRecord PlanStatusReport PlanWaveView
PlanIssueList
object
Issues matching a filter, with the vocabulary that names their statuses.
| property | type | required | description |
| issues |
array of PlanIssue → PlanIssue |
yes |
The matching issues, in id order. |
| total |
integer (uint) |
yes |
How many matched. |
| statuses |
PlanVocabulary → PlanVocabulary |
yes |
The declared status vocabularies. |
Used by plan.issues
PlanMilestone
object
One milestone, as its record declares it and as the two graphs derive it.
| property | type | required | description |
| id |
string |
yes |
The identity, which is also the file name; a stable slug, never a version. |
| status |
string |
yes |
The derived status. |
| order |
integer (int64) |
yes |
Tie-break inside one rank; the roadmap is ordered by rank first. |
| priority |
string |
yes |
p0 … p3. |
| title |
string |
yes |
One line naming the outcome. |
| slug |
string |
yes |
The slug, when the record carries one. |
| version |
string |
yes |
The release the milestone belongs to, when it declares one. |
| rank |
integer (uint32) |
yes |
Its layer in the milestone graph: what orders the roadmap. |
| depends_on |
array of string |
yes |
The milestones it requires. |
| blocked_by |
array of string |
yes |
Those of them that are not DONE. Non-empty means the gate holds every issue of this
milestone back, whatever the issue graph says. |
| dependents |
array of string |
yes |
The milestones that require it. |
| claims |
array of string |
yes |
The claims of the repository this outcome makes true. |
| counts |
PlanCounts → PlanCounts |
yes |
Its issues, counted by derived status. |
| issues |
array of string |
yes |
Its issues, in id order. |
| outcome |
string |
yes |
One line: what is true once the milestone is real. |
Used by Plan PlanRecord PlanRoadmap
PlanMilestoneProgress
object
One milestone's progress, without its prose.
| property | type | required | description |
| id |
string |
yes |
The identity. |
| status |
string |
yes |
The derived status. |
| title |
string |
yes |
One line naming the outcome. |
| counts |
PlanCounts → PlanCounts |
yes |
Its issues, counted by derived status. |
Used by PlanStatusReport
PlanNextIssue
object
The one issue a worker should take now.
| property | type | required | description |
| issue |
PlanIssue | null → PlanIssue |
no |
The issue, when the plan has one that is executable. |
| active_milestone |
string |
yes |
The milestone the search started in. |
| reason |
string | null |
no |
Why there is none, when there is none: what to run to see what is in the way. |
Used by plan.next
PlanProject
object
The plan's header: what this repository is, plus the one field nobody authors.
| property | type | required | description |
| name |
string |
yes |
The project's name, from project.yaml. |
| repository |
string |
yes |
The repository it belongs to, owner/name. |
| default_branch |
string |
yes |
The branch the plan is executed on. |
| active_milestone |
string |
yes |
The milestone a worker is executing now: the lowest-ranked unblocked milestone that
is ACTIVE, else the lowest-ranked unblocked one not finished. Derived on every read,
stored nowhere, and never authored — the plan cannot nominate a milestone whose
prerequisites are not real. |
Used by Plan PlanStatusReport
PlanRecord
object | object
One record of the plan, milestone or issue, with everything derived about it.
Used by plan.record
PlanRoadmap
object
The milestones in derived order, with the one being executed and the one after it.
| property | type | required | description |
| milestones |
array of PlanMilestone → PlanMilestone |
yes |
The milestones ordered by rank, then order, then id. The sequence is derived from
the milestone graph; no list of versions is maintained anywhere. |
| now |
string | null |
no |
The first unfinished, unblocked milestone in that sequence. |
| next |
string | null |
no |
The one after it, blocked or not. |
Used by plan.roadmap
PlanStatusReport
object
Where the plan stands: every milestone's progress, the milestone being executed, and the
one issue to take next.
| property | type | required | description |
| project |
PlanProject → PlanProject |
yes |
The plan's header, with the active milestone derived. |
| statuses |
PlanVocabulary → PlanVocabulary |
yes |
The declared status vocabularies. |
| milestones |
array of PlanMilestoneProgress → PlanMilestoneProgress |
yes |
Every milestone, in id order. |
| next_ready |
PlanIssue | null → PlanIssue |
no |
The next ready issue, when there is one. |
| counts |
PlanCounts → PlanCounts |
yes |
Every issue of the plan, counted by derived status. |
Used by plan.status
PlanValidation
object
The model's own validation: what the graph refuses and what it merely warns about.
| property | type | required | description |
| valid |
boolean |
yes |
Whether the model is valid: no finding is a failure. |
| milestones |
integer (uint) |
yes |
How many milestones the plan holds. |
| issues |
integer (uint) |
yes |
How many issues. |
| failures |
integer (uint) |
yes |
How many findings are failures. |
| warnings |
integer (uint) |
yes |
How many are warnings. |
| findings |
array of PlanFinding → PlanFinding |
yes |
Every finding, in derivation order. |
Used by plan.validate
PlanVocabulary
object
The status vocabularies, so a reader never has to know which statuses exist.
| property | type | required | description |
| issue |
array of string |
yes |
The issue statuses, in derivation order. |
| milestone |
array of string |
yes |
The milestone statuses, in derivation order. |
Used by Plan PlanIssueList PlanStatusReport
PlanWave
object
One execution wave: the issues the graph allows to run at the same time.
| property | type | required | description |
| wave |
integer (uint32) |
yes |
The layer, from zero. |
| issues |
array of string |
yes |
The issues in it, in id order. |
Used by Plan
PlanWaveReport
object
The execution waves, with the overlaps that serialise issues the graph would let run
together.
| property | type | required | description |
| waves |
array of PlanWaveView → PlanWaveView |
yes |
The waves, lowest first, with the issues of each. |
| serialised_by_scope |
array of PlanFinding → PlanFinding |
yes |
Scope overlaps between two issues of one wave. Two issues sharing a wave is a
necessary condition for running them at once, not a sufficient one: overlapping
scope serialises them, and the overlap is reported here rather than left for two
workers to discover in a conflict. |
Used by plan.waves
PlanWaveView
object
One wave, with the issues in it.
| property | type | required | description |
| wave |
integer (uint32) |
yes |
The layer, from zero. |
| issues |
array of PlanIssue → PlanIssue |
yes |
The issues in it, in id order. |
Used by PlanWaveReport
Port
integer (uint16)
A TCP port a deployed process may bind. Privileged ports are not among them: the
process runs as a non-root user and could not bind one.
Used by Listen
Positive
integer (uint32)
A count that is at least one: memory in megabytes, CPUs, machines. Zero is refused
wherever zero would mean "a deployment that cannot run".
Used by Budgets Concurrency HealthRoutes Machines Resources
ProductCounts
object
How much the model holds. Every count anywhere is one of these.
| property | type | required | description |
| features |
integer (uint) |
yes |
Stable features. |
| features_all |
integer (uint) |
yes |
Features of every status, drafts included. |
| featured |
integer (uint) |
yes |
Stable features the homepage shows. |
| providers |
integer (uint) |
yes |
Providers the tool has an adapter for. |
| modules |
integer (uint) |
yes |
Builtin modules of the executable, and how many a stable feature names. |
| modules_covered |
integer (uint) |
yes |
Modules a stable feature names. |
| commands |
integer (uint) |
yes |
Public commands of the shell tool. |
| commands_covered |
integer (uint) |
yes |
Commands a stable feature names. |
| kinds |
integer (uint) |
yes |
Kinds of the layer a feature can present. |
| kinds_covered |
integer (uint) |
yes |
Kinds a stable feature names. |
Used by FeatureList ProductValidationReport
ProductCoverage
object
One thing of the product — a module, a public command, a kind — and the features that
name it. Empty means the product page says nothing about it, which is a gap the
validation reports and the matrix shows rather than hides.
| property | type | required | description |
| id |
string |
yes |
The id. |
| title |
string |
yes |
The title. |
| features |
array of string |
yes |
The stable features that name it. |
Used by Matrix
ProductFinding
object
One thing wrong with the product model, named where it is, with the nearest candidate
when there is one.
| property | type | required | description |
| severity |
Severity → Severity |
yes |
error or warning. |
| code |
string |
yes |
unknown_reference, duplicate_identity, missing_content, uncovered, ... |
| path |
string |
yes |
The repository-relative file the finding is in, or the registry it is about. |
| id |
string | null |
no |
The record's identity, when one record owns the finding. |
| field |
string | null |
no |
The front-matter key the finding is about, when one key owns it. |
| message |
string |
yes |
What is wrong, in one sentence. |
| did_you_mean |
string | null |
no |
The nearest existing name, when the value looks like a typo of one. |
Used by ProductValidationReport
ProductProvider
object
One provider the tool has an adapter for, discovered from the templates the distribution
ships and decorated with what this repository does with it.
| property | type | required | description |
| id |
string |
yes |
The provider id: the template's file stem. |
| title |
string |
yes |
The name a person knows it by. |
| bootstraps |
array of ProviderBootstrap → ProviderBootstrap |
yes |
The bootstraps this repository's policy renders through it: target, mode, whether
every worker loads it. |
| client_config |
string | null |
no |
The client configuration at the repository root that starts the shared MCP server
for this provider, when the repository carries it. |
| hooks |
array of string |
yes |
The enforcement entries of the policy wired by this provider's hooks. |
| scratch_roots |
array of string |
no |
The scratch roots this provider creates checkouts of its own under, as declared:
the worktree topology reports a checkout there as a session's scratch checkout and
never moves it (ADR 0024). |
Used by ProviderList
ProductValidationReport
object
What the model's own validation found.
| property | type | required | description |
| valid |
boolean |
yes |
True when nothing is an error. Warnings do not make it false. |
| errors |
integer (uint) |
yes |
How many findings are errors. |
| warnings |
integer (uint) |
yes |
How many findings are warnings. |
| counts |
ProductCounts → ProductCounts |
yes |
The counts the model reached. |
| findings |
array of ProductFinding → ProductFinding |
yes |
The findings, errors first, then by file. |
Used by product.validate
ProgressView
object
How far along an execution is.
| property | type | required | description |
| current |
integer (uint64) |
yes |
Units done. |
| total |
integer | null |
no |
Units in total, when the handler knows how many. |
| message |
string | null |
no |
What is being done, for a reader. |
Used by ExecutionEvent ExecutionView
ProjectIdentity
object
What the project is, from the crate manifest and the prose written once in
[crate::about]. Every field here is a compile-time constant of this executable: there
is no file to read, nothing to parse, and nothing that can disagree with the binary
that answers.
| property | type | required | description |
| name |
string |
yes |
The product name. |
| version |
string |
yes |
The version of this executable, from the crate manifest. |
| summary |
string |
yes |
One sentence: what this is. |
| license |
string |
yes |
The SPDX licence identifier. |
| repository |
string |
yes |
The source repository. |
| target |
string |
yes |
The Rust target triple this executable was built for. |
| profile |
string |
yes |
The cargo profile it was built with. |
| commit |
string |
yes |
The commit it was built from, or unknown outside a work tree. |
Used by RepositoryEnvironment
ProjectionState
"current" | "stale" | "absent" | "unknown"
Where one provider projection stands against its policy.
currentThe file matches the rendering byte for byte.staleThe file differs: it was hand-edited, or the policy moved under it.absentThe file is not there.unknownIt could not be rendered, so nothing can be said.
Used by ProviderState
ProtocolReport
object
The answer of executions.protocol: the live channel's whole contract, derived from
the types that implement it.
| property | type | required | description |
| protocol_version |
string |
yes |
The version of the event protocol this server speaks. |
| websocket |
string |
yes |
Where the live channel is: a path on this same server, not a second daemon. |
| subscription |
array of ParameterView → ParameterView |
yes |
How the subscription is expressed, and what a reconnect sends. |
| heartbeat_seconds |
integer (uint64) |
yes |
How many seconds of quiet before the server pings. |
| max_connections |
integer (uint) |
yes |
How many live channels this process serves at once. |
| max_replay |
integer (uint) |
yes |
How many retained events a scoped connection replays before going live. |
| event_types |
array of string |
yes |
The event types a client may receive, from the one enum that defines them. |
| stream_types |
array of string |
yes |
The stream's own control messages. |
| event_schema |
any |
yes |
The JSON Schema of an event, derived from the Rust type. |
| stream_schema |
any |
yes |
The JSON Schema of a control message, derived from the Rust type. |
| limits |
LimitsView → LimitsView |
yes |
What the store keeps, so a client knows what it may ask for. |
Used by executions.protocol
Provenance
one of 5 variants
Where a resolved value came from.
Kept for every field a consumer can be surprised by, so that web explain can answer
"why is this mounted here?" without anybody reading the discovery code.
variant Read from the capability registry: the routes the executable already declares once.
variant Read from a producer's own declaration beside its output (`surface.json`).
| path | string | yes | The declaration file, repository-relative. |
| source | "producer-declaration" | yes | |
variant Inferred from a file or directory being where the convention says it is.
| path | string | yes | What was found, repository-relative. |
| source | "filesystem" | yes | |
variant Inferred from the site generator's own configuration.
| path | string | yes | The configuration file, repository-relative. |
| source | "site-config" | yes | |
variant The model's documented default for a value nobody stated.
Used by Surface
Provider
object
The provider and the facts that belong to it alone.
| property | type | required | description |
| name |
ProviderName → ProviderName |
yes |
Which provider. |
| fly |
Fly | null → Fly |
no |
Fly's own block, when the provider is Fly. |
Used by DeploymentView
ProviderBootstrap
object
One bootstrap a provider renders.
| property | type | required | description |
| target |
string |
yes |
The target file, repository-relative. |
| mode |
string |
yes |
file or region. |
| always_loaded |
boolean |
yes |
Loaded by every worker without asking. |
Used by ProductProvider
ProviderList
object
Every provider.
| property | type | required | description |
| count |
integer (uint) |
yes |
How many. |
| providers |
array of ProductProvider → ProductProvider |
yes |
Each, in id order. |
Used by product.providers
ProviderName
"fly"
The hosting provider. One is supported; a second is an object of its own rather than an
abstraction over this one.
Used by Provider
ProviderState
object
One provider projection the policy declares, and whether the file on disk still matches
what the policy renders.
| property | type | required | description |
| id |
string |
yes |
The provider id, as the policy names it: agents, claude-code. |
| target |
string |
yes |
The repository-relative file it renders to. |
| state |
ProjectionState → ProjectionState |
yes |
Whether the file matches what the policy renders now. |
| always_loaded |
boolean |
yes |
Whether the provider loads this file into every context. |
Used by RepositoryEnvironment
PublicApiQuality
object
What the exported item surface looks like.
| property | type | required | description |
| items |
integer (uint) |
yes |
Items the crate exports, of every kind. |
| documented |
integer (uint) |
yes |
Of those, how many carry documentation. |
| owe_example |
integer (uint) |
yes |
How many owe an executable example under the policy. |
| exampled |
integer (uint) |
yes |
Of those, how many have one that counts. |
| exempt |
array of Exemption → Exemption |
yes |
How many are exempt from the example policy for a structural reason, and why, by
reason, so that the exemptions are visible rather than implied by a subtraction. |
Used by QualityReport
QualityAnswer
object
The answer: the measurement, or the reason there was not one.
| property | type | required | description |
| measured |
boolean |
yes |
Whether a crate was found and measured. false is a complete answer, not a failure:
the layer installs into repositories that carry no Rust crate, and a doctrine that
cannot apply is not a violation. |
| reason |
string | null |
no |
Why nothing was measured, when nothing was. |
| report |
QualityReport → QualityReport |
yes |
The measurement. Present and empty-of-findings when measured is false, so that a
consumer reads one shape either way and measured is the only question it must ask. |
| passes |
boolean |
yes |
Whether the report as filtered leaves nothing blocking. Answered here so that a
caller over any transport reads the verdict rather than deriving it, and so that the
command line's exit code and this field can never disagree. |
| baselined |
integer (uint) |
yes |
The findings the ratchet accepts because they stood when the rule landed. A finding
outside this count is what fails the gate. |
Used by quality.report
QualityReport
object
One measurement of one crate, and everything found wrong in it.
| property | type | required | description |
| schema |
string |
no |
[SCHEMA]. |
| target |
string |
yes |
What was measured: the crate directory, repository-relative. |
| public_api |
PublicApiQuality → PublicApiQuality |
yes |
The exported item surface. |
| modules |
ModuleQuality → ModuleQuality |
yes |
The exported module surface. |
| operations |
OperationParity → OperationParity |
yes |
The canonical operations against their transports. |
| violations |
array of Violation → Violation |
yes |
Every finding, errors first, then by file and line. |
Used by QualityAnswer
QualitySeverity
"error" | "warning"
How much a finding matters.
There are two levels and not five, because the only question a gate can answer is
whether the change may land. A warning is a finding the repository has decided not to
block on; nothing else is a warning.
errorThe gate fails.warningReported, and the gate passes.
Used by Violation
Readiness
object
The answer to "can this process serve traffic": the local initialisation a request
would need, and nothing beyond this process. A readiness check that grew a dependency
probe fails a deployment because an unrelated service is down.
| property | type | required | description |
| ready |
boolean |
yes |
Whether every part below is in place. |
| version |
string |
yes |
This executable's version. |
| capabilities |
integer (uint) |
yes |
How many capabilities the registry holds; zero would mean nothing to serve. |
| objects |
integer (uint) |
yes |
How many objects the index holds. Read from the index this process built at
start-up: it is already in memory, and reading it walks nothing. |
| layer |
HealthStatus → HealthStatus |
yes |
Whether the layer read cleanly. A degraded layer is still served — the diagnostics
are the point — so this reports rather than refuses. |
Used by health.ready
Reason
"path" | "secret" | "generated" | "archive" | "image" | "video" | "pdf" | "database_dump" | "undeclared" | "fixture_over_limit" | "over_limit" | "binary"
Why a path is out. The order is the order the rules decide in.
pathNamed under `out.paths`.secretA secret.generatedA generated asset.archiveAn archive.imageAn image.videoVideo.pdfA PDF document.database_dumpA database dump.undeclaredMatches no `in` pathspec.fixture_over_limitA fixture over `out.fixtures.max_bytes`.over_limitOver `out.max_bytes`.binaryContent with a NUL byte in its first [`SNIFF_BYTES`]: not text.
Used by Classification OutFile
Recommendation
object
One recommendation, with the moments that produced it. A recommendation with no
matched_because is a recommendation nobody can check.
| property | type | required | description |
| id |
string |
yes |
The thing recommended: a capability id, a command, a claim, a rule, a use case. |
| count |
integer (uint) |
yes |
How many of the selected moments name it. |
| matched_because |
array of string |
yes |
The selected moments that named it, in presentation order. |
Used by Diagnosis
Record
object
One durable record of the local half, as much of it as a reader needs to decide whether
to open the file.
| property | type | required | description |
| path |
string |
yes |
Repository-relative path. The body is at the path; it is not copied here. |
| created_at |
string |
yes |
When the record says it was written. |
| task_id |
string |
yes |
The task it belongs to, or none. |
| branch |
string |
yes |
The branch it was written on. |
| head |
string |
yes |
The commit it was written at. |
| working_tree |
string |
yes |
Whether the working tree was clean or dirty then. |
| matched |
Match → Match |
yes |
Which tier of the resolution rule matched. |
| divergence |
Divergence → Divergence |
yes |
How far its commit is from this one. |
| next_action |
string |
no |
The section a resuming worker acts on, when the record has one. A handover's Next Action; empty for a record that carries no sections. |
Used by Continuity
Refusal
object
Why a deployment object is refused: what was read, where, and what to do about it.
| property | type | required | description |
| file |
string |
yes |
The repository-relative file the value came from. |
| key |
string |
yes |
The key path within it, as the contract names it. |
| found |
string |
yes |
The value observed, rendered as it was read. |
| problem |
string |
yes |
What is wrong with it, in one line. |
| correction |
string |
yes |
What to do instead. |
Used by DeploymentCheck DeploymentList
ReleaseArtifactView
object
The artifact a target and a tag name, and the directory it unpacks into.
| property | type | required | description |
| target |
string |
yes |
The target's id in the model. |
| rust_target |
string |
yes |
The Rust target triple. |
| tag |
string |
yes |
The tag the name was derived for. |
| name |
string |
yes |
The archive's file name. |
| root |
string |
yes |
The directory the archive unpacks into. |
| url |
string |
yes |
Where a release publishes it, when the tag is a real one. |
Used by distribution.artifact
ReleaseChange
object
One change, from one commit.
| property | type | required | description |
| kind |
ReleaseChangeKind → ReleaseChangeKind |
yes |
What it did. |
| scope |
string | null |
no |
The area it did it in, when the subject named one: commands, ci, site. |
| subject |
string |
yes |
The subject, without the type and scope that prefixed it. |
| breaking |
boolean |
yes |
Whether the commit marked itself breaking, with ! or a BREAKING CHANGE: trailer. |
| commit |
string |
yes |
The abbreviated commit. |
| url |
string | null |
no |
Where that commit can be read, when the repository's own URL is known. Derived from
about::REPOSITORY, never written beside each entry. |
| references |
array of ReleaseReference → ReleaseReference |
no |
The records of the layer this commit names — issues, milestones — resolved against
what the layer actually holds. |
Used by ReleaseChangeGroup ReleaseVersionReport
ReleaseChangeGroup
object
The changes of one kind, with the heading and the rank that decide where they are shown.
The grouping is in the document rather than in each renderer. It was in the Markdown
renderer alone, and the site — which cannot see a Rust function — grouped alphabetically
instead, so the same changelog read in two orders depending on which surface showed it.
A presentation order stated once and carried is the only kind that survives a projection.
| property | type | required | description |
| kind |
ReleaseChangeKind → ReleaseChangeKind |
yes |
What the changes in it did. |
| heading |
string |
yes |
The heading it is shown under. |
| rank |
integer (uint8) |
yes |
Where it sorts among the other groups; ascending. |
| changes |
array of ReleaseChange → ReleaseChange |
yes |
The changes, in the order the commits were read. |
Used by ReleaseSection
ReleaseChangeKind
"feat" | "fix" | "perf" | "refactor" | "docs" | "test" | "chore" | "ci" | "style" | "build" | "revert" | "other"
What a conventional commit says it did.
The set is the one the repository's own commit convention uses; a commit whose subject
does not parse is [ChangeKind::Other] and still appears, because a changelog that
silently drops what it cannot classify is a changelog that lies by omission.
featA capability a person did not have before.fixBehaviour that was wrong and is not any more.perfPerformance, with the behaviour unchanged.refactorStructure, with the behaviour unchanged.docsDocumentation.testTests.choreThe build, the pipeline, the tooling.ciContinuous integration.styleFormatting, with the behaviour unchanged.buildThe build system or its dependencies.revertA change that undoes another.otherA commit whose subject does not parse as a conventional commit.
Used by ReleaseChange ReleaseChangeGroup
ReleaseChangelog
object
The whole changelog.
| property | type | required | description |
| schema |
string |
yes |
The schema this document satisfies. |
| current |
string |
yes |
The version the tree currently declares. |
| sections |
array of ReleaseSection → ReleaseSection |
yes |
Newest first, the unreleased section leading when there is one. |
| diagnostics |
array of string |
yes |
What could not be read, said rather than hidden: a repository with no git history,
a release record that names no commit, a tag that is not in this clone. |
| produced_by |
ReleaseProducedBy | null → ReleaseProducedBy |
no |
Which capability answered, and where else the same value can be had. |
Used by release.changelog
ReleaseChangelogArtifact
object
One published artifact, from the release record's own evidence.
| property | type | required | description |
| target |
string |
yes |
The platform triple the record names. |
| name |
string |
yes |
The file name. |
| sha256 |
string |
yes |
Its SHA-256, as the record read it off the file. |
Used by ReleaseSection
ReleaseDecision
object
One decision, as the layer's own ADR object states it.
| property | type | required | description |
| id |
string |
yes |
adr-0027. |
| title |
string |
yes |
The decision, in its own words. |
| status |
string |
yes |
proposed, accepted, superseded. |
| date |
string |
yes |
The date the record carries. |
| url |
string | null |
no |
Where the decision itself can be read: the file in the repository. The site has no
per-ADR page, so this is the honest destination rather than an invented route. |
| added |
string | null |
no |
The commit that added the file, which is what decides the release it belongs to. The
front-matter date says when the decision was made; those are different questions. |
Used by ReleaseSection
ReleaseProducedBy
object
Which capability answered with this document, and where that capability is projected.
The document carries its own provenance so that a reader — a person on the site, a client
over MCP — can find the same value elsewhere without anything having to enumerate the
routes. A page that listed them would be declaring them a second time, which is the
failure site-check's registry and cli assertions exist to catch; it caught this one.
use majordomus_cli::release::model::ProducedBy;
let by = ProducedBy {
capability: "release.changelog".into(),
cli: Some("majordomus release changelog".into()),
http: Some("/api/v1/changelog".into()),
mcp_tool: None,
mcp_resource: Some("majordomus://changelog".into()),
};
let json = serde_json::to_value(&by).unwrap();
assert_eq!(json["capability"], "release.changelog");
// a surface the capability is not projected on is absent, not null
assert!(json.get("mcp_tool").is_none());
assert_eq!(ProducedBy::default().capability, "");
| property | type | required | description |
| capability |
string |
yes |
The capability id. |
| cli |
string | null |
no |
The command line that renders it. |
| http |
string | null |
no |
The HTTP route that answers with it. |
| mcp_tool |
string | null |
no |
The MCP tool. |
| mcp_resource |
string | null |
no |
The MCP resource URI. |
Used by ReleaseChangelog
ReleaseReference
object
A record of the layer that a commit names in its own text.
Inferred, never declared beside the commit: an issue id or a milestone id appearing in a
subject or a body is a reference, and the layer already holds the object it refers to. A
reference to something the layer does not have is not carried — a link to a record that
does not exist is worse than no link, because the reader cannot tell until they follow it.
use majordomus_cli::release::model::Reference;
let r = Reference {
kind: "issue".into(),
id: "I1305".into(),
title: "An observed contract has a fingerprint".into(),
route: Some("/plan/i1305/".into()),
};
let json = serde_json::to_value(&r).unwrap();
assert_eq!(json["id"], "I1305");
assert_eq!(json["route"], "/plan/i1305/");
// a reference the site has no page for carries no route rather than an invented one
let bare = Reference { route: None, ..r };
assert!(serde_json::to_value(&bare).unwrap().get("route").is_none());
| property | type | required | description |
| kind |
string |
yes |
issue or milestone. |
| id |
string |
yes |
I1305, M000. |
| title |
string |
yes |
What it is, from the record itself. |
| route |
string | null |
no |
Where it is published on this site, when it has a page. |
Used by ReleaseChange
ReleaseSection
object
One version's worth of changelog.
| property | type | required | description |
| version |
string |
yes |
The version, or unreleased. |
| tag |
string | null |
no |
The tag, when one was published. |
| date |
string | null |
no |
When it was published, from the record. |
| commit |
string | null |
no |
The commit it was published from. |
| unreleased |
boolean |
yes |
Whether this section is the work that has not been released. |
| notes_url |
string | null |
no |
The release notes the record names — the published release itself. |
| compare_url |
string | null |
no |
Every commit between the previous release and this one, as the forge renders it. |
| tree_url |
string | null |
no |
The tree at this release. |
| decisions |
array of ReleaseDecision → ReleaseDecision |
yes |
The decisions dated inside this release's window. |
| groups |
array of ReleaseChangeGroup → ReleaseChangeGroup |
yes |
The changes, from the commits in this release's range, grouped by what they did and
ordered by the rank each group carries. The flat list is the concatenation of the
groups' own; nothing holds it twice. |
| artifacts |
array of ReleaseChangelogArtifact → ReleaseChangelogArtifact |
yes |
What was published, when this section is a release. |
Used by ReleaseChangelog
ReleaseVersionReport
object
What the version is, and what the commits since the last release imply it should become.
| property | type | required | description |
| declared |
string |
yes |
The version the crate manifest declares — the authority. |
| tool |
string |
yes |
The version bin/majordomus prints. |
| agree |
boolean |
yes |
Whether the two agree. scripts/release-version --check is the gate; this is the
same question asked by the executable, so every surface can show the answer. |
| last_release |
string | null |
no |
The last release the layer records. |
| bump |
string |
yes |
What the commits since it imply: major, minor, patch, or none. |
| next |
string | null |
no |
The version that bump would produce. |
| changes |
array of ReleaseChange → ReleaseChange |
yes |
How many commits since the last release, and of what kind — the evidence for the
bump, so that a surprising answer can be checked rather than believed. |
Used by release.version
ReleaseView
object
One release, as every projection shows it.
| property | type | required | description |
| tag |
string |
yes |
The git tag. |
| version |
string |
yes |
The semantic version. |
| channel |
Channel → Channel |
yes |
Whether an unpinned installation may resolve it. |
| published_at |
string |
yes |
When it was published, UTC. |
| commit |
string |
yes |
The commit it was built from. |
| yanked |
boolean |
yes |
True when it has been withdrawn. |
| artifacts |
integer (uint) |
yes |
How many artifacts it published. |
| metadata_url |
string |
yes |
Where its public metadata is served. |
Used by ReleasesReport
ReleasesReport
object
The releases this repository recorded, and the one an unpinned installation resolves to.
| property | type | required | description |
| count |
integer (uint) |
yes |
How many records there are. |
| latest |
ReleaseView | null → ReleaseView |
no |
The release an unpinned installation resolves to, when there is one. |
| releases |
array of ReleaseView → ReleaseView |
yes |
Every record, newest first. |
Used by distribution.releases
RepositoryEnvironment
object
The snapshot: what this checkout is, right now.
Every surface that reports any of this renders this value. Collections are in a
documented, stable order — kinds and workflows by name, services and providers in the
order their canonical source declares them, diagnostics in the order they were found —
so that two snapshots of the same repository serialise identically apart from
[RepositoryEnvironment::generated_at].
| property | type | required | description |
| schema |
string |
yes |
The contract this document follows, majordomus/repository-environment/v1. |
| generated_at |
string |
yes |
When it was taken, RFC 3339 in UTC. |
| resolution |
Resolution → Resolution |
yes |
How completely it was resolved. |
| project |
ProjectIdentity → ProjectIdentity |
yes |
What the project is. |
| repository |
RepositoryIdentity → RepositoryIdentity |
yes |
What the checkout is. |
| vcs |
VcsState → VcsState |
yes |
What version control says. |
| toolchains |
array of ToolchainState → ToolchainState |
yes |
The toolchains the repository declares, sorted by id. |
| layer |
LayerSummary → LayerSummary |
yes |
What the layer holds. |
| workflows |
WorkflowCatalogue → WorkflowCatalogue |
yes |
The workflows a person can run. |
| providers |
array of ProviderState → ProviderState |
yes |
The provider projections the policy declares, in the policy's order. |
| services |
array of ServiceState → ServiceState |
yes |
The local services, in the order the service table declares them. |
| diagnostics |
array of Diagnostic → Diagnostic |
yes |
Everything that went wrong or is worth knowing, in the order it was found. |
| provenance |
array of FieldSource → FieldSource |
yes |
Where every field came from. |
Used by environment.status
RepositoryIdentity
object
The checkout this snapshot is of.
| property | type | required | description |
| name |
string |
yes |
The name a person calls it: the base name of the root directory. |
| root |
string |
yes |
The root, absolute. The same value repository.info reports. |
| layer_schema |
string |
yes |
The manifest's schema, ai-repository/v1. |
| sections |
map of string |
yes |
Section name to repository-relative path, as the manifest declares them. |
| local_path |
string |
yes |
The checkout-local half of the layer, repository-relative. Never tracked, and
where anything this checkout alone knows — the server's lease, this snapshot's
cache — is kept. |
| linked_worktree |
boolean |
yes |
Whether this checkout is a linked work tree rather than the main one. |
Used by RepositoryEnvironment
RepositoryInfo
object
What the index knows about the repository it was built from.
| property | type | required | description |
| root |
string |
yes |
The repository root, absolute. |
| layer_schema |
string |
yes |
The manifest's schema, ai-repository/v1. |
| sections |
map of string |
yes |
Manifest section name to repository-relative path. |
| git |
GitState → GitState |
yes |
What git said, or why it could not be asked. |
| discovery |
string |
yes |
vcs or filesystem. |
| source_classes |
array of array of any |
yes |
Source class id to kind, in declared order. |
| kind_sources |
array of string |
yes |
The kinds files the reader was configured from: the distribution's, then the
repository's own when it has one. |
| scope_origin |
Origin → Origin |
yes |
Where the scope was read from: repository or distribution. |
| scope_path |
string |
yes |
The scope file: repository-relative for the repository's own, the share path for
the distribution's default. |
Used by RepositoryReport
RepositoryRef
object
Which repository, and which checkout of it, an execution ran against.
An execution is never run against "wherever this process happens to be": the engine
stamps the repository the index was read from, and a request that names a different one
is refused. The path itself is not here — this value is served to whoever can reach the
socket, and where the checkout sits on the host is of no use to them.
| property | type | required | description |
| name |
string |
yes |
The repository's name: the last component of its root. |
| id |
string |
yes |
The stable identity two processes over one checkout both compute. |
| branch |
string | null |
no |
The branch checked out, when git can say. |
Used by ExecutionView
RepositoryReport
object
The repository, its layer, its git state, and the state of this process's index.
| property | type | required | description |
| repository |
RepositoryInfo → RepositoryInfo |
yes |
The repository: root, layer schema, sections, git state, discovery mode, source classes, kind sources. |
| state |
State → State |
yes |
ok when every discovered file became an object, degraded otherwise. |
| objects |
integer (uint) |
yes |
How many objects the index holds. |
| kinds |
map of integer (uint) |
yes |
Objects per kind. |
| diagnostics |
array of Diagnostic → Diagnostic |
yes |
Every diagnostic the index produced. |
| capabilities |
Summary → Summary |
yes |
The capability registry, counted. |
Used by repository.info
RepositoryTopology
object
The whole topology: what worktree list, the MCP resource, the HTTP route and the
Cockpit all read.
| property | type | required | description |
| schema |
string |
yes |
[SCHEMA]. |
| repository |
RepositoryView → RepositoryView |
yes |
The repository. |
| container |
ContainerView → ContainerView |
yes |
The container every linked work tree belongs under. |
| trunk |
TrunkView → TrunkView |
yes |
The trunk. |
| observed_from |
string |
yes |
The work tree the call was answered from. |
| worktrees |
array of WorktreeState → WorktreeState |
yes |
Every registered work tree, primary first. |
| branches |
array of BranchState → BranchState |
yes |
Every local branch, by name. |
| diagnostics |
array of TopologyDiagnostic → TopologyDiagnostic |
yes |
Everything wrong with the topology, work trees first, then repository-wide. |
| tallies |
TopologyTallies → TopologyTallies |
yes |
The counts. |
| valid |
boolean |
yes |
No error-level diagnostic stands. |
Used by worktree.topology
RepositoryView
object
The repository's identity, as the topology reports it.
| property | type | required | description |
| primary_worktree |
string |
yes |
The primary checkout: what the container is named after. |
| git_common_dir |
string |
yes |
The common git directory: the repository's identity. |
| name |
string |
yes |
The primary checkout's directory name. |
Used by RepositoryTopology StatusReport
Resolution
"fast" | "full"
How completely a snapshot was resolved. Carried in the snapshot because a consumer must
be able to tell "there is no server running" from "nobody looked".
fastOnly what is cheap enough for a shell prompt; the rest from the cache.fullEverything, including the index. Writes the cache.
Used by EnvironmentProvenance RepositoryEnvironment
ResolvedRefs
object
One feature, resolved: the record as its file declares it, and everything derived.
| property | type | required | description |
| id |
string |
yes |
The identity, the slug and the file name. |
| title |
string |
yes |
The feature as a heading. |
| short_title |
string | null |
no |
Two or three words for a card or a matrix row. |
| headline |
string |
yes |
The promise a visitor reads first. |
| summary |
string |
yes |
One line: what it does. |
| status |
string |
yes |
stable, draft or deprecated. |
| weight |
integer (uint32) |
no |
Presentation order, lowest first. |
| featured |
boolean |
no |
Whether the homepage shows it as a chapter. |
| areas |
array of string |
no |
The operational areas of the why catalogue it serves. |
| audiences |
array of string |
no |
The audiences of the why catalogue it is written for. |
| modules |
array of string |
no |
Capability modules of the executable it is made of. |
| commands |
array of string |
no |
Public commands of the shell tool it is made of. |
| kinds |
array of string |
no |
Object kinds of the layer it is made of. |
| rules |
array of string |
no |
Rules of the effective set that govern it, by id without the version. |
| docs |
array of string |
no |
The documents that explain it, by repository-relative path. |
| adrs |
array of string |
no |
The decisions behind it, by declared id. |
| claims |
array of string |
no |
Claims that say what is guaranteed here. |
| use_cases |
array of string |
no |
Use cases that show it in use. |
| cockpit |
array of string |
no |
Areas of the Cockpit that show it. |
| web |
array of string |
no |
Web surfaces of the topology it is offered through. |
| related |
array of string |
no |
Features explicitly related to this one. The reverse is derived. |
| tags |
array of string |
no |
Free tags. |
| route |
string |
no |
Derived: /features/<id>/. Never authored; the schema refuses a route key. |
| source |
string |
no |
Derived: the repository-relative file the record came from. |
| body |
string |
no |
The Markdown body, without its front matter. |
| surfaces |
Surfaces → Surfaces |
yes |
Derived: the interfaces it is exposed through. |
| module_refs |
array of ModuleRef → ModuleRef |
yes |
Derived: the modules it names, each with its capabilities and their projections. |
| command_refs |
array of CommandRef → CommandRef |
yes |
Derived: the shell commands it names, as the command registry declares them. |
| kind_refs |
array of KindRef → KindRef |
yes |
Derived: the kinds it names, each with its object count. |
| rule_refs |
array of RuleRef → RuleRef |
yes |
Derived: the rules it names, each with its class and whether it is enforced. |
| doc_refs |
array of DocRef → DocRef |
yes |
Derived: the documents it names, with their titles. |
| adr_refs |
array of AdrRef → AdrRef |
yes |
Derived: the decisions it names, with their status. |
| claim_refs |
array of ClaimRef → ClaimRef |
yes |
Derived: the claims it names, with their status. |
| use_case_refs |
array of UseCaseRef → UseCaseRef |
yes |
Derived: the use cases it names. |
| cockpit_refs |
array of CockpitAreaRef → CockpitAreaRef |
yes |
Derived: the Cockpit areas it names, with their routes. |
| web_refs |
array of SurfaceRef → SurfaceRef |
yes |
Derived: the web surfaces it names, with their mounts. |
| moments |
array of MomentRef → MomentRef |
yes |
Derived: the moments that name any command, capability, claim or rule of this feature. |
| backlinks |
array of string |
yes |
Derived: the features that name this one in their related. |
| counts |
FeatureCounts → FeatureCounts |
yes |
Derived: how much stands behind it. |
| evidence |
FeatureEvidence → FeatureEvidence |
yes |
Derived: what is guaranteed. |
Used by product.feature
ResourceView
one of 2 variants
The answer of objects.get: what the URI resolved to, tagged by source the way a
capability's provenance is.
variant A file of the layer, read as it is.
variant A query with a resource exposure, executed and rendered as a JSON document.
Used by objects.get
Resources
object
What one machine is granted.
| property | type | required | description |
| cpu_kind |
CpuKind → CpuKind |
yes |
Shared or dedicated. |
| cpus |
Positive → Positive |
yes |
How many CPUs one machine has. |
| memory_mb |
Positive → Positive |
yes |
Memory per machine, in megabytes. |
Used by DeploymentView
Route
string
A route a platform polls: an absolute path on this service, never a URL. The host is
the deployment's to know and not the object's to state.
Used by HealthRoutes
Row
object
Where one capability is projected, and where it is not.
This is the coverage matrix of the rule: a row per capability, a column per interface.
It is derived, never written down — a capability that reaches nothing shows as a row of
false, which is exactly the "exists but is invisible" case worth seeing.
| property | type | required | description |
| id |
string |
yes |
The canonical id. |
| module |
string |
yes |
The module that composes it. |
| kind |
string |
yes |
Query, command or resource. |
| stability |
string |
yes |
Where it stands. |
| cli |
string | null |
no |
The command line, when it declares one and clap has it. |
| http |
string | null |
no |
The HTTP route, when it declares one. |
| mcp_tool |
string | null |
no |
The MCP tool name, when it declares one. |
| mcp_resource |
string | null |
no |
The MCP resource URI, when it declares one. |
| closed |
boolean |
yes |
Whether every exposure this row declares is answered by its surface. |
| source |
string |
yes |
Where the capability is declared; repository-relative. |
Used by ClosureMatrix
RuleRef
object
One rule the feature names.
| property | type | required | description |
| id |
string |
yes |
The rule id, without the version. |
| identity |
string |
yes |
The identity the index holds, with the version. |
| title |
string |
yes |
The title. |
| class |
string |
yes |
blocking or advisory. |
| enforced |
boolean |
yes |
Whether the tool enforces it: the rule carries an x-majordomus block. |
| path |
string |
yes |
Repository-relative path. |
Used by ResolvedRefs
ScopeReport
object
The scope: the declaration as read, its origin, and every tracked file against it.
| property | type | required | description |
| origin |
Origin → Origin |
yes |
repository when the manifest names a scope section, distribution for the default. |
| path |
string |
yes |
The file the declaration was read from. |
| declaration |
Declaration → Declaration |
yes |
The declaration as read. |
| tracked |
Tally → Tally |
yes |
Every tracked file judged by name and size, counted; the out ones listed. |
Used by repository.scope
SearchHit
object
One search hit: the object, summarised, and the first matching line of its content.
| property | type | required | description |
| uri |
string |
yes |
majordomus://<kind>/<identity>. |
| id |
string |
yes |
The capability id, <kind>.<identity>. |
| kind |
string |
yes |
The kind the object was read as. |
| identity |
string |
yes |
The identity within the kind. |
| title |
string | null |
no |
The title, when the kind's title rule found one. |
| description |
string | null |
no |
The one-line description, when the kind holds one. |
| path |
string |
yes |
Repository-relative source path. |
| snippet |
string | null |
no |
The first line of content that matched, when one did. |
Used by SearchResult
SearchResult
object
The answer of objects.search.
| property | type | required | description |
| query |
string |
yes |
The query as given. |
| count |
integer (uint) |
yes |
How many hits were returned. |
| limit |
integer (uint64) |
yes |
The limit that applied. |
| hits |
array of SearchHit → SearchHit |
yes |
The hits, in URI order, at most limit of them. |
Used by objects.search
ServiceAvailability
"available" | "not_running" | "unknown"
Whether a service answers. Unknown is a real answer and never a disguised no: a
probe that timed out and a port that refused the connection lead a reader to different
actions.
availableThe address accepted a connection.not_runningNo server holds the repository's lease, or the address refused the connection.unknownThe probe did not finish in its budget, or this resolution did not probe.
Used by ServiceState
ServiceState
object
One local service of this repository: what it is, where it is, and whether anything
answers there. The path is the one the router serves; the URL exists only while a
server does.
| property | type | required | description |
| id |
string |
yes |
A stable id, [a-z][a-z0-9-]*. |
| title |
string |
yes |
The short name a person reads. |
| path |
string |
yes |
The absolute path the router serves it under. |
| url |
string | null |
no |
The full URL, when a server is running and published its address. |
| availability |
ServiceAvailability → ServiceAvailability |
yes |
Whether anything answers there. |
Used by RepositoryEnvironment
Severity
"info" | "warning" | "error"
How bad a diagnostic is. Error excludes the file it concerns from the index and puts
the index into the degraded state; Warning and Info do neither.
infoWorth knowing; changes nothing.warningSomething to look at; the object is still served.errorThe file is excluded and the index is degraded.
Used by Diagnostic ExecutionDiagnostic Finding ProductFinding TopologyDiagnostic
Signal
object
One observable symptom of a moment: a question a reader can answer about their own
week. The questionnaire on the site and the input of why diagnose are these and
nothing else.
| property | type | required | description |
| id |
string |
yes |
Unique within the moment; the identity a diagnosis selects by. |
| text |
string |
yes |
The symptom, phrased so a reader can say whether it happened to them. |
Used by MomentDetail
Stability
"implemented" | "behaviorally_verified" | "experimental" | "planned" | "unsupported"
Where a capability stands, in the repository's own vocabulary for claims. A capability
that is Planned or Unsupported may be listed but is never executable through any
projection; the registry refuses to build otherwise.
implementedImplemented, and no behavioural test names it yet.behaviorally_verifiedImplemented and proved by a behavioural test.experimentalImplemented, executable, and expected to change.plannedSpecified and not implemented: listed, never executable.unsupportedConsidered and refused: listed with the reason, never executable.
Used by Capability CapabilitySummary CommandNode
Standing
"primary" | "canonical" | "misplaced" | "detached" | "ephemeral" | "missing"
Where a work tree stands against the topology.
primaryThe primary checkout: exempt from the path rule, held to the trunk rule.canonicalA linked work tree at exactly its branch's canonical path.misplacedA linked work tree somewhere else. Migration brings it home.detachedA linked work tree with no branch. It has no canonical path and is never moved.ephemeralA linked work tree under the operating system's temporary directory or under the
primary checkout's `.claude/worktrees/`: a session's scratch checkout, owned and
removed by the harness that made it. Reported; migrated only on request.missingA registration whose directory is gone. Repair drops it.
Used by WorktreeState
StartInput
object
The input of executions.start: which capability to run, and with what.
| property | type | required | description |
| capability |
string |
yes |
The canonical id of the capability to run (health.report, objects.verify). |
| input |
any |
no |
Its input, as its own input schema describes it; an empty object when it takes none. |
Used by executions.start
State
"ok" | "degraded"
Whether every discovered file became an object.
okEvery discovered file became an object.degradedAt least one file could not be read; the diagnostics say which.
Used by RepositoryReport
StatusReport
object
The answer to "where am I, and is that where I belong".
| property | type | required | description |
| schema |
string |
yes |
[SCHEMA]. |
| repository |
RepositoryView → RepositoryView |
yes |
The repository. |
| container |
ContainerView → ContainerView |
yes |
The container. |
| trunk |
TrunkView → TrunkView |
yes |
The trunk. |
| worktree |
WorktreeState → WorktreeState |
yes |
The work tree the call came from, with its uncommitted work counted. |
| canonical |
boolean |
yes |
Whether this work tree is where it belongs: canonical, or the primary checkout on
the trunk, or detached. |
| repository_errors |
integer (uint) |
yes |
How many error-level diagnostics the whole topology carries. |
Used by worktree.status
StepOutcome
"planned" | "blocked" | "moved" | "failed"
What became of a step.
plannedPlanned and not applied.blockedNot carried out, with the blockers on the step.movedMoved, and the fingerprint after equals the one before.failedAttempted and not completed, or completed and not verified; the message says which.
Used by MigrationStep
StepState
"running" | "completed" | "failed"
Where a step of an execution stands.
runningEntered and not finished.completedFinished, and what it was asked to do happened.failedFinished, and it did not.
Used by StepView
StepView
object
One named phase of an execution, as the handler reported it.
| property | type | required | description |
| name |
string |
yes |
A stable name, unique within the execution. |
| title |
string |
yes |
One line for a reader. |
| state |
StepState → StepState |
yes |
Where it stands. |
| started_at |
string |
yes |
When it was entered, RFC 3339 in UTC. |
| finished_at |
string | null |
no |
When it finished, when it has. |
| detail |
string | null |
no |
What it said when it finished, when it said anything. |
Used by ExecutionView
Summary
object
The registry counted: by source, kind, stability and projection.
| property | type | required | description |
| total |
integer (uint) |
yes |
Every capability. |
| builtin |
integer (uint) |
yes |
Composed in Rust. |
| declarative |
integer (uint) |
yes |
Read from the layer. |
| by_kind |
map of integer (uint) |
yes |
By kind (query, resource). |
| by_stability |
map of integer (uint) |
yes |
By stability. |
| mcp_tools |
integer (uint) |
yes |
With an MCP tool exposure. |
| mcp_resources |
integer (uint) |
yes |
With an MCP resource exposure. |
| http_routes |
integer (uint) |
yes |
With an HTTP exposure. |
| cli_commands |
integer (uint) |
yes |
With a CLI exposure. |
| modules |
integer (uint) |
yes |
Modules: composed, derived, and one per declarative kind. |
| benchmark_required |
integer (uint) |
yes |
Executables whose benchmark policy is required. |
| benchmark_waived |
integer (uint) |
yes |
Executables waived from benchmarking for a typed reason. |
| cached |
integer (uint) |
yes |
Executables the executor caches. |
Used by CapabilityList RepositoryReport
Surface
object
One resolved surface: everything a consumer needs, with the provenance of what it could
be surprised by.
| property | type | required | description |
| id |
string |
yes |
Identity, unique across the topology; the selector --only and --exclude use it. |
| title |
string |
yes |
One line: what a reader sees in a listing. |
| category |
SurfaceCategory → SurfaceCategory |
yes |
What it is for, which is how a listing groups it. |
| visibility |
SurfaceVisibility → SurfaceVisibility |
yes |
Whether a person is shown it. |
| kind |
SurfaceKind → SurfaceKind |
yes |
How it answers. |
| mount |
Mount → Mount |
yes |
Where it answers. |
| producer |
string |
yes |
What produced it: a command, a module, or the generator that writes the directory. |
| feature |
Feature | null → Feature |
no |
The runtime capability it needs; absent when the process always has it. |
| artifact |
string | null |
no |
The generated directory, repository-relative, for a static surface. |
| index |
string | null |
no |
The file served for the mount itself, when the surface has one. |
| availability |
SurfaceAvailability → SurfaceAvailability |
yes |
Where the surface's files go and who answers for it. |
| built_from |
string | null |
no |
The revision the artifact was built from, when its producer recorded one: what
makes a stale build a finding rather than a surprise. |
| provenance |
map of Provenance → Provenance |
yes |
Where each interesting value came from, by field name. |
Used by SurfaceReport
SurfaceAvailability
"both" | "served-only" | "published-only"
Whether a surface is part of the static publication, served only while a process runs,
or both.
bothServed by the running executable and published as files.served-onlyAnswered by the running executable and never published: a route the process
computes, or a build made for this server's own mount rather than for deployment.published-onlyPublished as files; the running executable serves it from the same directory.
Used by Surface
SurfaceCategory
"interface" | "documentation" | "api" | "protocol" | "report"
What a surface is for, which is how a reader is shown it.
A category is the one piece of intent that a mount cannot carry: /openapi.json and
/swagger sit beside each other and are a document and a viewer for it. Grouping is
derived from this field and never from a list of paths kept somewhere else.
interfaceSomething a person opens and looks at: the home page, the Cockpit.documentationProse and reference written for a person: the site, the Swagger UI.apiA machine-readable surface of the capability registry.protocolA wire protocol another program speaks.reportGenerated evidence of a run: a test report, a benchmark report.
Used by Surface
SurfaceFinding
object
One thing wrong with a topology, said so a person can fix it without reading this file.
| property | type | required | description |
| severity |
SurfaceFindingSeverity → SurfaceFindingSeverity |
yes |
How much it matters. |
| rule |
string |
yes |
The rule that produced it, stable enough to grep for. |
| surface |
string |
yes |
The surface it is about. |
| message |
string |
yes |
What is wrong. |
| remedy |
string |
yes |
What to do about it. |
Used by SurfaceReport
SurfaceFindingSeverity
"warning" | "error"
How much a finding matters.
warningWorth reading; serving is still coherent.errorThe topology may not be served or published in this state.
Used by SurfaceFinding
SurfaceInfo
object
One surface of the vocabulary, as a client reads it.
| property | type | required | description |
| id |
string |
yes |
cli, api, mcp, cockpit or docs. |
| title |
string |
yes |
The name a person reads. |
| route |
string |
yes |
The route on the website where the surface is documented. |
| features |
integer (uint) |
yes |
How many stable features it exposes. |
Used by FeatureList Matrix
SurfaceKind
"static-directory" | "native-route" | "redirect"
How a surface answers a request.
Only what this repository serves: a directory of generated files, a path the executable
answers itself, and a redirect. A new kind is a new behaviour, never a new name for
the same behaviour with different data.
static-directoryA generated directory, mounted under its prefix and served from disk.native-routeA path the executable answers itself, from its own registry or handlers.redirectA path that answers with a redirect to another one.
Used by Surface
SurfaceRef
object
One web surface of the topology the feature names.
| property | type | required | description |
| id |
string |
yes |
The surface id. |
| title |
string |
yes |
The title. |
| mount |
string |
yes |
Where it is mounted. |
| category |
string |
yes |
What it is for. |
Used by ResolvedRefs
SurfaceReport
object
The web surfaces of this repository, as the process that answers resolved them.
| property | type | required | description |
| surfaces |
array of Surface → Surface |
yes |
Every resolved surface, in route-precedence order: the order a router consults
them in, so the first whose mount owns a path is the one that answers it. |
| served |
array of string |
yes |
The ids a process answers for, in the same order. A surface published and not
served is absent here. |
| published |
array of string |
yes |
The ids a publication holds, in the same order. |
| public |
array of string |
yes |
The ids offered to a person, which is what the home page lists. |
| findings |
array of SurfaceFinding → SurfaceFinding |
yes |
What validation says about the topology as it stands. Empty is the healthy answer;
a finding here is the same one majordomus web validate reports, with its remedy. |
Used by web.surfaces
SurfaceVisibility
"public" | "internal"
Who a surface is offered to.
Two values and no more: a surface is either offered for a person to discover, or it is
part of the topology without being advertised. Both are always in the machine-readable
answer — hiding a served route from introspection would only hide it from the people
maintaining it.
publicListed for a person: it appears on the home page.internalServed and introspectable, not advertised: a machine speaks to it, or another
surface links to it.
Used by Surface
Surfaces
object
The interfaces a feature is exposed through, decided from what its references project
and from nothing a file says. Each is a fact with a reason a reader can check: cli is
true when a module of the feature has a capability with a command-line path or the
feature names a shell command; api when a module has an HTTP route; mcp when a module
has an MCP tool or resource, or the feature names a kind, since every object of the layer
is an MCP resource; cockpit when the feature names a Cockpit area or a module, since
every capability has a Cockpit page; docs when it names a document.
| property | type | required | description |
| cli |
boolean |
yes |
The command line: the executable's own, or the shell tool's. |
| api |
boolean |
yes |
The HTTP routes under /api/v1/, and the OpenAPI document over them. |
| mcp |
boolean |
yes |
MCP: a tool, or a resource. |
| cockpit |
boolean |
yes |
The Cockpit. |
| docs |
boolean |
yes |
The documentation. |
Used by FeatureSummary MatrixRow ResolvedRefs
Tally
object
Every tracked file against the scope, counted.
| property | type | required | description |
| files |
integer (uint) |
yes |
How many tracked files were judged. |
| in |
integer (uint) |
yes |
How many are in. |
| out |
integer (uint) |
yes |
How many are out. |
| by_reason |
map of integer (uint) |
yes |
How many are out for each reason present. |
| out_files |
array of OutFile → OutFile |
yes |
Every tracked file that is out, with its reason and the rule that decided. |
Used by ScopeReport
TargetStatus
"supported" | "experimental" | "unavailable"
What the project promises about a target.
See [crate::deploy::Status]: both are Status in their own module and neither is in
the one component namespace the schema document has.
supportedBuilt by every release, offered by the installer, listed as supported. A release
that is missing this artifact is not published.experimentalBuilt and offered, and documented as not yet proven.unavailableDocumented, never built, refused by the installer with its recorded reason.
Used by TargetView
TargetView
object
One target, as every projection shows it: what it is, what it is called in prose, and
the artifact name the naming function derives for a tag yet to be chosen.
| property | type | required | description |
| id |
string |
yes |
The target's id in the model. |
| title |
string |
yes |
How it is written in prose: Linux x86_64 musl. |
| os |
Os → Os |
yes |
The operating system. |
| arch |
Arch → Arch |
yes |
The architecture. |
| libc |
Libc | null → Libc |
no |
The C library, on Linux. |
| rust_target |
string |
yes |
The Rust target triple. |
| status |
TargetStatus → TargetStatus |
yes |
What the project promises about it. |
| reason |
string | null |
no |
Why, when it is not built. |
| artifact |
string |
yes |
The artifact name, with {tag} where a release's tag goes. |
Used by DistributionReport
TierState
"resolved" | "cached" | "unavailable"
Where a tier of the snapshot came from. A tier the active resolution cannot reach is
[TierState::Unavailable] with the reason, and its values are absent rather than zero.
resolvedRead from its canonical source during this resolution.cachedTaken from the cache written by an earlier full resolution.unavailableNeither available; the values are absent and the reason is a diagnostic.
Used by LayerSummary WorkflowCatalogue
ToolchainAvailability
"installed" | "missing" | "unknown"
Whether a declared toolchain is usable here.
installedInstalled, and its version answered.missingThe executable is not on the path.unknownNobody asked: this resolution may not run a subprocess for it, and no cache held it.
Used by ToolchainState
ToolchainState
object
A toolchain the repository declares, and what is installed for it. The three are kept
apart on purpose: a repository can declare a version nobody has, and a machine can have
a version no repository asked for, and reporting either as the other is how a version
mismatch stays invisible for a week.
| property | type | required | description |
| id |
string |
yes |
A stable id, [a-z][a-z0-9-]*: rust, node. |
| title |
string |
yes |
The short name a person reads. |
| declared |
string | null |
no |
The version the repository declares, when it declares one. |
| declared_by |
string |
yes |
The repository-relative file that declares it. |
| installed |
string | null |
no |
The version installed here, when it could be asked and the answer is not stale. |
| availability |
ToolchainAvailability → ToolchainAvailability |
yes |
Where the installed version stands. |
Used by RepositoryEnvironment
TopologyDiagnostic
object
One thing wrong with, or worth knowing about, the topology.
| property | type | required | description |
| code |
DiagnosticCode → DiagnosticCode |
yes |
The stable code. |
| severity |
Severity → Severity |
yes |
How serious it is. |
| path |
string | null |
no |
The work tree involved. |
| branch |
string | null |
no |
The branch involved. |
| expected |
string | null |
no |
Where the work tree belongs. |
| message |
string |
yes |
What is wrong, in one line. |
| remedy |
string |
yes |
The command that addresses it. |
Used by InspectReport MigrationPlan MigrationStep RepositoryTopology WorktreeState
TopologyTallies
object
How many work trees and branches are in each state.
| property | type | required | description |
| worktrees |
integer (uint) |
yes |
Every registered work tree, primary included. |
| canonical |
integer (uint) |
yes |
Linked work trees at their canonical path. |
| misplaced |
integer (uint) |
yes |
Linked work trees somewhere else. |
| detached |
integer (uint) |
yes |
Linked work trees without a branch. |
| ephemeral |
integer (uint) |
yes |
Scratch checkouts of a session. |
| missing |
integer (uint) |
yes |
Registrations whose directory is gone. |
| locked |
integer (uint) |
yes |
Work trees git reports as locked. |
| dirty |
integer (uint) |
yes |
Work trees with uncommitted work, when it was asked for. |
| branches |
integer (uint) |
yes |
Local branches. |
| branches_without_worktree |
integer (uint) |
yes |
Local branches with no work tree. |
| cleanup_eligible |
integer (uint) |
yes |
Branches eligible for cleanup. |
| errors |
integer (uint) |
yes |
Error-level diagnostics. |
| warnings |
integer (uint) |
yes |
Warning-level diagnostics. |
Used by RepositoryTopology
TraceReport
object
The whole traceability answer: every issue git can say something about, and every commit
of a stretch of the trunk with the contract it served or the fact that it has none.
| property | type | required | description |
| trunk |
string | null |
no |
The trunk every branch and commit was measured against. |
| examined |
integer (uint) |
yes |
How many trunk commits were attributed. |
| issues |
array of IssueTrace → IssueTrace |
yes |
The issues that at least one branch names, in id order. |
| without_branch |
array of string |
yes |
The issue ids the project model declares that no ref names. Not a fault: an issue
nobody has started has no branch yet. |
| commits |
array of CommitAttribution → CommitAttribution |
yes |
The examined trunk commits, newest first. |
| tallies |
TraceTallies → TraceTallies |
yes |
The counts, so a caller need not add them up. |
Used by trace.report
TraceTallies
object
The counts of one report.
| property | type | required | description |
| issues_declared |
integer (uint) |
yes |
Issue ids the project model declares. |
| issues_with_branch |
integer (uint) |
yes |
Of those, the ones at least one ref names. |
| branches |
integer (uint) |
yes |
Branches naming an issue. |
| branch_commits |
integer (uint) |
yes |
Distinct commits those branches claim. |
| attributed |
integer (uint) |
yes |
Examined trunk commits with exactly one issue. |
| unattributed |
integer (uint) |
yes |
Examined trunk commits no branch naming an issue contains. |
| ambiguous |
integer (uint) |
yes |
Examined trunk commits more than one issue claims. |
Used by TraceReport
Transport
"stdio" | "http"
How a peer reached the server.
stdioThe owner's own client, on the process's stdin and stdout.httpMCP over HTTP at `/mcp`: a `majordomus mcp` bridge, or a client speaking it directly.
Used by Announced Peer
TrunkSource
"remote_head" | "default_branch_config" | "conventional_name" | "primary_checkout" | "unknown"
Where the trunk was learned from, in the order it is looked for.
remote_head`refs/remotes/<remote>/HEAD`: what the remote calls its default branch.default_branch_config`init.defaultBranch` in the git configuration, and that branch exists locally.conventional_nameExactly one of `main` and `master` exists locally.primary_checkoutThe branch the primary checkout holds, because nothing else said.unknownNothing said; the trunk is unknown and every check that needs it says so.
Used by TrunkView
TrunkView
object
The trunk, as the topology reports it.
| property | type | required | description |
| branch |
string | null |
no |
The branch, when known. |
| source |
TrunkSource → TrunkSource |
yes |
How it was decided. |
| checked_out_at |
string | null |
no |
Where it is checked out. |
Used by RepositoryTopology StatusReport
UpstreamState
object
A branch's upstream and how far the two have moved apart, from for-each-ref in one
subprocess for every branch, never a fetch.
| property | type | required | description |
| name |
string |
yes |
The upstream ref, short (origin/master). |
| ahead |
integer | null |
no |
Commits here that the upstream lacks. |
| behind |
integer | null |
no |
Commits upstream that this branch lacks. |
| gone |
boolean |
yes |
The upstream ref no longer exists. |
Used by BranchState WorktreeState
UseCaseRef
object
One use case the feature names.
| property | type | required | description |
| id |
string |
yes |
The use case id. |
| title |
string |
yes |
The title. |
| category |
string | null |
no |
The category it is filed under. |
Used by ResolvedRefs
ValidationReport
object
What the catalogue's own validation found.
| property | type | required | description |
| valid |
boolean |
yes |
True when nothing is an error. Warnings do not make it false. |
| errors |
integer (uint) |
yes |
How many findings are errors: a reference that resolves to nothing, a duplicate
identity, a file name that disagrees with its id. |
| warnings |
integer (uint) |
yes |
How many findings are warnings: a public record that does not meet its floor. |
| counts |
Counts → Counts |
yes |
The counts the catalogue reached. |
| findings |
array of Finding → Finding |
yes |
The findings, errors first, then by file. |
Used by why.validate
VcsState
one of 2 variants
What version control says about the checkout, or why it could not be asked.
variant `git` answered.
variant `git` could not be asked, or this is not a work tree.
| reason | string | yes | What went wrong. |
| state | "unavailable" | yes | |
Used by RepositoryEnvironment
Verdict
"in" | "out"
In or out.
inRead.outNever read; the reason says why.
Used by Classification
VerifyReport
object
The answer of objects.verify.
| property | type | required | description |
| files |
integer (uint) |
yes |
How many files were read. |
| current |
integer (uint) |
yes |
How many of them are what the index read. |
| drifted |
integer (uint) |
yes |
How many are not, of any kind of not. |
| objects |
integer (uint) |
yes |
How many objects of the index those files carry. |
| compared_by_content |
integer (uint) |
yes |
How many were compared byte for byte rather than by size. |
| fingerprint |
string |
yes |
The index fingerprint this process is serving. |
| index_is_current |
boolean |
yes |
Whether the index is still a true picture of the working tree, as far as this
comparison can tell. |
| findings |
array of DriftedObject → DriftedObject |
yes |
The files that are not, with what is wrong with each. |
Used by objects.verify
Violation
object
One finding: what, where, why, and what to do.
| property | type | required | description |
| code |
ViolationCode → ViolationCode |
yes |
The stable code. |
| severity |
QualitySeverity → QualitySeverity |
yes |
How bad it is. |
| rule |
string |
yes |
The canonical id of the rule that requires this. |
| path |
string |
yes |
Where it is, repository-relative; empty when the finding is not about a file. |
| line |
integer | null |
no |
The line, 1-based; None when the finding is not about a line. |
| symbol |
string |
yes |
The item's full path, or the command, or the capability id: what the finding is about. |
| message |
string |
yes |
One sentence, specific to this occurrence. |
| why |
string |
yes |
Why it matters, from the code. |
| remediation |
string |
yes |
What to do, from the code. |
Used by QualityReport
ViolationCode
"RUST_PUBLIC_MISSING_DOCS" | "RUST_PUBLIC_THIN_DOCS" | "RUST_PUBLIC_MISSING_EXAMPLE" | "RUST_EXAMPLE_NOT_EXECUTABLE" | "RUST_EXAMPLE_PLACEHOLDER" | "RUST_EXAMPLE_DOES_NOT_NAME_SUBJECT" | "RUST_MODULE_MISSING_DOCS" | "RUST_MODULE_MISSING_EXAMPLE" | "RUST_MODULE_MISSING_BEHAVIOURAL_TEST" | "OPERATION_CLI_UNCLASSIFIED" | "OPERATION_CLASSIFICATION_STALE" | "OPERATION_CLASSIFICATION_CONFLICT" | "OPERATION_MISSING_OPENAPI" | "OPERATION_PROJECTION_MISSING" | "OPERATION_PROJECTION_ORPHAN"
What is wrong, as a stable machine-readable code.
The codes are the contract between the validator and everything downstream: CI
annotations, Cockpit filters, documentation anchors and an agent deciding what to fix.
A code is never renamed once it has shipped; a rule that stops existing takes its code
with it.
RUST_PUBLIC_MISSING_DOCSAn exported item carries no documentation at all.RUST_PUBLIC_THIN_DOCSAn exported item's documentation says nothing its signature had not already said.RUST_PUBLIC_MISSING_EXAMPLEAn exported item that carries behaviour has no executable example.RUST_EXAMPLE_NOT_EXECUTABLEEvery example an item has is `ignore`d or is prose in a fenced box.RUST_EXAMPLE_PLACEHOLDERAn example asserts nothing, or asserts something that is true of any program.RUST_EXAMPLE_DOES_NOT_NAME_SUBJECTAn example never names the item it is documenting.RUST_MODULE_MISSING_DOCSAn exported module carries no module-level documentation.RUST_MODULE_MISSING_EXAMPLEAn exported module has no module-level executable example.RUST_MODULE_MISSING_BEHAVIOURAL_TESTNo test names an exported module, and it declares none of its own.OPERATION_CLI_UNCLASSIFIEDA command of the command line is neither a canonical capability nor classified as
belonging to the command line alone.OPERATION_CLASSIFICATION_STALEA command is classified as belonging to the command line alone, and the command
line no longer has it.OPERATION_CLASSIFICATION_CONFLICTA command is classified as local *and* bound to a capability: two answers to one
question.OPERATION_MISSING_OPENAPIA capability declares an HTTP route and the OpenAPI document does not describe it.OPERATION_PROJECTION_MISSINGA capability declares a projection that the projection itself does not carry.OPERATION_PROJECTION_ORPHANA projection carries an entry the registry does not hold.
Used by Violation
Vocabulary
object
The vocabulary the distribution ships: every token there is.
count is measured from obligations rather than written down, so a token added to
the file is counted by the same act that declares it.
use majordomus_cli::capability::builtin::obligations::Vocabulary;
let v: Vocabulary = serde_json::from_str(
r#"{"version":1,"source":"/opt/majordomus/share/obligations.yaml","count":1,
"obligations":[{"id":"commit","title":"The work is committed",
"summary":"In the branch's history, not the working tree.",
"discharged_by":"git","remote":false}]}"#,
)
.unwrap();
assert_eq!(v.count, v.obligations.len());
assert_eq!(v.version, 1, "the only shape this reader accepts");
| property | type | required | description |
| version |
integer (uint64) |
yes |
The file's own format version. 1 is the only one this reader accepts. |
| source |
string |
yes |
Where it was read from, absolute: the distribution's share directory, which is not
necessarily inside the repository. |
| count |
integer (uint) |
yes |
How many tokens there are. No number anywhere is written down. |
| obligations |
array of Obligation → Obligation |
yes |
Every token, in the order the file declares them. |
Used by obligations.vocabulary
WaiverReason
"not_executable" | "destructive" | "external_dependency" | "transient_state"
Why an executable capability is not benchmarked. Typed, so that a waiver is a
reviewable statement and never a convenience; not_executable is the registry's own
reason for resources and is never written by hand.
not_executableA resource: read, never executed; nothing to time but `objects.get`, which is.destructiveThe capability changes something outside this process and cannot be run in a loop.external_dependencyThe capability talks to something the benchmark host cannot provide.transient_stateThe capability starts, or answers about, work that exists only while it is running.
A benchmark host cannot stage an execution to read, and running the operation in a
loop would measure the work rather than the operation.
Used by BenchmarkPolicy
WorkflowCatalogue
object
The workflows a person can run here, as the workflow runner itself describes them.
| property | type | required | description |
| state |
TierState → TierState |
yes |
Where these came from. |
| source |
string | null |
no |
The command that produced them, when one did. |
| workflows |
array of WorkflowDescriptor → WorkflowDescriptor |
no |
Every public workflow, sorted by name. |
| entrypoints |
array of WorkflowEntrypoint → WorkflowEntrypoint |
no |
The entry point of each group, in the order the groups are declared: what a person
new to the repository runs first. Derived, never listed anywhere. |
Used by RepositoryEnvironment
WorkflowDescriptor
object
One workflow: a recipe of the repository's justfile, as just describes it.
| property | type | required | description |
| name |
string |
yes |
The name a person types after just. |
| namespace |
string | null |
no |
The module path, for a recipe in an imported module; empty at the root. |
| description |
string | null |
no |
The recipe's doc comment, when it has one. |
| group |
string | null |
no |
The [group(...)] it belongs to, when it declares one. |
| parameters |
array of WorkflowParameter → WorkflowParameter |
no |
Its parameters, in declaration order. |
| dependencies |
array of string |
no |
The recipes it runs first, in order. |
| confirm |
boolean |
yes |
Whether it asks before it runs ([confirm]). |
Used by WorkflowCatalogue
WorkflowEntrypoint
object
The entry point of one group of workflows: what the group is, and the one workflow that
stands for it.
| property | type | required | description |
| group |
string |
yes |
The group, as the justfile declares it. |
| workflow |
string |
yes |
The workflow that stands for the group. |
| command |
string |
yes |
The command a person types. |
| description |
string | null |
no |
The workflow's description, when it has one. |
Used by WorkflowCatalogue
WorkflowParameter
object
One parameter of a workflow.
| property | type | required | description |
| name |
string |
yes |
The name. |
| variadic |
boolean |
yes |
Whether it may be repeated (*args, +args). |
| required |
boolean |
yes |
Whether it must be given. |
Used by WorkflowDescriptor
WorktreeFingerprint
object
What a work tree held at one moment, reduced to digests.
| property | type | required | description |
| branch |
string | null |
no |
The branch, or none when detached. |
| head |
string | null |
no |
The commit. |
| index_digest |
string |
yes |
A digest of the index: every tracked path with its mode, blob and stage. |
| staged_diff_digest |
string |
yes |
A digest of the staged diff against HEAD. |
| unstaged_diff_digest |
string |
yes |
A digest of the unstaged diff against the index. |
| untracked_manifest_digest |
string |
yes |
A digest of every untracked file: path, kind, size and content. |
| untracked_files |
integer (uint) |
yes |
How many untracked files the manifest holds. |
| ignored_manifest_digest |
string |
yes |
A digest of every ignored entry: path, kind and size, never content. |
| in_progress |
string | null |
no |
The operation in progress, if any. |
| tree_manifest_digest |
string | null |
no |
A digest of every entry of the directory tree, ignored included: path, kind, size
and link target. Taken only for a move made by copying, where the rename guarantee
does not hold. |
Used by MigrationStep
WorktreeKind
"primary" | "linked"
Whether a work tree is the repository's own checkout or one linked to it.
primaryThe main work tree. It hosts the trunk, is never moved and is never removed.linkedA linked work tree. Belongs at its branch's canonical path.
Used by WorktreeState
WorktreeState
object
One work tree, as the topology sees it.
| property | type | required | description |
| path |
string |
yes |
Absolute, as git holds it. |
| kind |
WorktreeKind → WorktreeKind |
yes |
Primary or linked. |
| standing |
Standing → Standing |
yes |
Where it stands against the topology. |
| branch |
string | null |
no |
The branch checked out here, short. Absent when detached. |
| label |
string |
yes |
The name it is shown under: the branch, or detached/<short commit>. |
| head |
string | null |
no |
The commit checked out here. |
| detached |
boolean |
yes |
HEAD is detached here. |
| expected_path |
string | null |
no |
Where this branch's work tree belongs. Absent when detached, or for the primary
checkout on the trunk. |
| exists |
boolean |
yes |
The directory git registered still exists on disk. |
| current |
boolean |
yes |
The call came from inside this work tree. |
| locked |
string | null |
no |
Locked, with git's reason; an empty string when it recorded none. |
| prunable |
string | null |
no |
Prunable, with git's reason. |
| dirty |
DirtyState | null → DirtyState |
no |
Uncommitted work here. Absent when it was not asked for: it costs one subprocess per
work tree, and a topology check does not need it. |
| upstream |
UpstreamState | null → UpstreamState |
no |
The branch's upstream and its distance from it. |
| issue |
string | null |
no |
The issue this branch provably names: a path component of the branch equal to an
issue id of .ai/repo/project/issues/, or beginning with it and a hyphen. Nothing
is inferred from similarity. |
| diagnostics |
array of TopologyDiagnostic → TopologyDiagnostic |
yes |
What is wrong with this work tree, if anything. |
Used by InspectReport RepositoryTopology StatusReport