Skip to content

I3428 — 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

Add to EntityView the observed envelope that repository.info already carries: observed.index with observed_at and stale_after, from the index observation crate::live takes. Add the blob of the object's file from the git index, beside the last-changing commit I3314 adds. A member of a collection file names the file it is read from. Introduce no new freshness type.

BLOCKED wave 1 · p2 · implementation profile · parallel safe

Part of an-entity-says-how-it-is-known-and-what-it-affects — One entity read names how its record says it is known and when it was observed, identically on every surface, and what a change affects is derived from the same index.

Blocked. This issue cannot start until I3314, I3427, milestone:an-entity-says-how-it-is-known-and-what-it-affects are done. The status is derived from that, not declared.

Objective

Add to EntityView the observed envelope that repository.info already carries: observed.index with observed_at and stale_after, from the index observation crate::live takes. Add the blob of the object's file from the git index, beside the last-changing commit I3314 adds. A member of a collection file names the file it is read from. Introduce no new freshness type.

Why

The owner's 2026-10-19 Cognitive Fabric pack asks for last-verified time and source freshness on the shared projection (campaigns/prismatic-way-cognitive-fabric-prompt-pack/prompts/05_SURFACES.md). verification/ACCEPTANCE.md asks every surface to show the same freshness semantics.

Current state

EntityView has no observation time and no blob (apps/majordomus-cli/src/capability/builtin/entity.rs:395-435). repository.info carries observed.index with observed_at and stale_after (test/cases/545_every_answer_says_when_it_was_observed.sh:9-12). UI readings carry the age of the cache reading, not of the record (apps/majordomus-cli/src/capability/readings.rs:1-27). I3314 plans the last commit.

Desired state

Every entity read carries the time of the index observation it was answered from, in repository.info's shape, and the blob of its file. After a commit that changes the file, the next read carries a later observed_at and the new blob.

Scope

  • apps/majordomus-cli/src/capability/builtin/entity.rs
  • apps/majordomus-cli/src/live.rs
  • apps/majordomus-cli/tests/objects.rs
  • docs/generated/registry.json
  • docs/generated/registry.yaml
  • docs/generated/openapi.json
  • docs/generated/openapi.yaml
  • site/data/generated/openapi.json
  • site/data/registry/registry.json

Out of scope

  • Storing history or freshness in the index
  • A per-request stat of every object (live.rs:30-36 says why)
  • A new freshness type beside evidence::freshness and readings::Freshness
  • The observed envelope on capabilities other than entity.show

Dependencies

What waits on this

Acceptance criteria

  • entity.show of an ADR carries observed.index (observed_at, stale_after) in repository.info's shape and the blob of its file
  • After a commit that changes the file, the next read has a later observed_at and the new blob; a read with no change keeps both
  • An object with no file of its own says not applicable, never an empty value

Validation

  • cargo test --manifest-path apps/majordomus-cli/Cargo.toml --test objects
  • cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib live
  • bash test/run.sh 545_every_answer_says_when_it_was_observed
  • bin/majordomus-cli generate --check

Evidence required

  • test_entity_observed_envelope

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/I3428.yaml. Read it back with majordomus plan show I3428.

Searches the titles and descriptions of every page this site publishes.