I3427 — Every entity read names how its record says it is known, and never answers verified itself: proof stays the pointer it is
Add an epistemic field holding class and basis to EntityView. One pure function in apps/majordomus-cli/src/entity.rs reads it from the record's own fields. A candidate or proposed status gives proposed. A superseded status or superseded_by gives superseded. Knowledge epistemics inferred gives inferred, and a generated projection gives derived. Anything else is observed. The function never computes verified: an object with a proof keeps the existing ProofRef pointer (entity.rs:181-185), and a surface shows verified only from that capability's answer. docs/SURFACES.md states the vocabulary once, with each older vocabulary's mapping, as the proposed ADR decides.
BLOCKED wave 0 · p1 · implementation profile · parallel safe
Blocked. This issue cannot start until milestone:an-entity-says-how-it-is-known-and-what-it-affects is done. The status is derived from that, not declared.
Objective
Add an epistemic field holding class and basis to EntityView. One pure function in apps/majordomus-cli/src/entity.rs reads it from the record's own fields. A candidate or proposed status gives proposed. A superseded status or superseded_by gives superseded. Knowledge epistemics inferred gives inferred, and a generated projection gives derived. Anything else is observed. The function never computes verified: an object with a proof keeps the existing ProofRef pointer (entity.rs:181-185), and a surface shows verified only from that capability's answer. docs/SURFACES.md states the vocabulary once, with each older vocabulary's mapping, as the proposed ADR decides.
Why
The owner's 2026-10-19 Cognitive Fabric pack asks every surface to show one epistemic classification per entity, and forbids a model output from promoting an inferred claim to verified (campaigns/prismatic-way-cognitive-fabric-prompt-pack/prompts/05_SURFACES.md, contracts/ARCHITECTURE.md).
Current state
EntityView (apps/majordomus-cli/src/capability/builtin/entity.rs:395-435) has no class field. Its EvidenceState of unclaimed, dangling or resolved (entity.rs:140-151) says that artefacts exist, never that they ran. The module answers proof by pointer, 'a pointer, never an answer' (entity.rs:181-185). The other vocabularies are IntentLinkProvenance (intent_realization.rs:77-101), FieldProvenance (devtask/mod.rs:93-125), knowledge epistemics (docs/KNOWLEDGE.md:30; knowledge_base.rs:141,441) with superseded_by (knowledge_base.rs:457), and ProofState (evidence/mod.rs).
Desired state
entity.show answers the class and its basis on every surface from one capability. Verified is visible only where the proof capability answers it.
Scope
- apps/majordomus-cli/src/capability/builtin/entity.rs
- apps/majordomus-cli/src/entity.rs
- docs/SURFACES.md
- docs/generated/registry.json
- docs/generated/registry.yaml
- docs/generated/openapi.json
- docs/generated/openapi.yaml
- docs/generated/modules/entity.md
- site/data/generated/openapi.json
- site/data/registry/registry.json
Out of scope
- Renaming or removing the older vocabularies
- Reading crate::evidence or running a proof inside entity.show
- Any model or advisor call
- A confidence score
Dependencies
None. This issue is a root of the graph.
What waits on this
- I3407BLOCKED What a set of paths affects in the plan is derived from the index: the issues whose scope covers them, what those issues serve and their incoming edges, each with its relation, and nothing is rescanned
- I3428BLOCKED An entity read carries the observation envelope repository.info already answers, plus the blob of its file, and a change to that file moves both
- I3429BLOCKED One entity reads the same on the command line, REST, MCP and the Cockpit: identity, kind, class, evidence, observation envelope and edge order
- I3430BLOCKED The IDD standing panel and the Cockpit intent page show, under each criterion, the knowledge that bears on it, each with how it is known
Acceptance criteria
- A candidate knowledge record reads proposed, a record with superseded_by reads superseded, a record with epistemics inferred reads inferred, and a tracked record with no other basis reads observed, each with a basis naming its source field
- No object reads verified from entity.show; a fixture supported only by an advisor reading stays inferred
- The class is identical across two runs over the same tree
- bin/majordomus-cli generate --check passes with no projection edited by hand
Validation
- cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib capability::builtin::entity
- bin/majordomus-cli generate --check
- majordomus plan validate
Evidence required
- entity_epistemic_class
Evidence
None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.
Timeline
- started
- —
- verified
- —
- completed
- —
Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.
Canonical record: .ai/repo/project/issues/I3427.yaml. Read it back with majordomus plan show I3427.