Skip to content

Add stale-derived-status: freshness dates the cell, not the root - #110

Merged
Silentpartnercoding merged 1 commit into
mainfrom
agent/stale-derived-status-fixture
Aug 19, 2026
Merged

Add stale-derived-status: freshness dates the cell, not the root#110
Silentpartnercoding merged 1 commit into
mainfrom
agent/stale-derived-status-fixture

Conversation

@Silentpartnercoding

Copy link
Copy Markdown
Owner

The profile already carries two cases where agreeing evidence is worth less than it looks:

  • copied-consensus — about count
  • incomplete-search — about coverage

This is the third in that family, and it is about recency.

The case

A memory cell asserts a current state. Its only recorded time is lifecycle.observed_at, which says when the cell was written. One of its claims is a restatement whose derived_from points at an older observation.

The roots collapse correctly — the profile already handles that. But nothing in the document dates the observation the restatement rests on, so a consumer reading a fresh-looking cell about a current state cannot tell whether the underlying observation is minutes or months old.

It contradicts a claim the README already made

Point 4 read, without qualification:

"Freshness, nonce, and revocation fields make replay and stale evidence visible to the consumer."

They do — for the cell. They do not for a derived claim's root. The wording is now qualified and points at the fixture. A profile that overstates one of its own invariants is worse than one that names the boundary, and this is exactly the kind of overstatement the profile exists to catch elsewhere.

The assertion is deliberately about absence

assert all("observed_at" not in claim for claim in stale["claims"]), (
    "a claim-level observation time would let a consumer age the root; "
    "its absence is what this case reports"
)

A claim-level timestamp would resolve this case. That it does not exist is the finding. Asserting it here means adding one later becomes a visible change to this file rather than a silent improvement nobody notices.

Provenance

This case was not invented. It is a defect that occurred: a status record asserting "not yet sent" was read and reported as current when the underlying state had changed hours earlier. The cell was honest, the roots were traceable, and the consumer still could not age it.

Standard library only. 5 examples, 8 adversarial cases still rejected.

🤖 Generated with Claude Code

The profile already carries two cases where agreeing evidence is worth less
than it looks: copied-consensus is about count, incomplete-search is about
coverage. This is the third in that family, and it is about recency.

A memory cell asserts a current state. Its only recorded time is
lifecycle.observed_at, which says when the cell was written. One of its claims
is a restatement whose derived_from points at an older observation. The roots
collapse correctly -- the profile already handles that -- but nothing in the
document dates the observation the restatement rests on, so a consumer reading
a fresh-looking cell about a current state cannot tell whether the underlying
observation is minutes or months old.

This contradicts something the README already claimed. Point 4 read "Freshness,
nonce, and revocation fields make replay and stale evidence visible to the
consumer", without qualification. They do, for the cell. They do not for a
derived claim's root. The wording is now qualified and points at the fixture,
because a profile that overstates one of its own invariants is worse than one
that names the boundary.

The validator assertion is deliberately an assertion of absence: no claim
carries an observation time. A claim-level timestamp would resolve this case,
and that it does not exist is the finding. Asserting it here means adding one
becomes a visible change to this file rather than a silent improvement.

Standard library only. 5 examples, 8 adversarial cases still rejected.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@Silentpartnercoding
Silentpartnercoding merged commit acbae63 into main Aug 19, 2026
6 checks passed
@Silentpartnercoding
Silentpartnercoding deleted the agent/stale-derived-status-fixture branch August 19, 2026 18:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant