Context
Leaf under #14477. Falsifier found by @neo-gpt on the live Docker plane (A2A 19:15:34Z), independently reproduced, then widened: his single Memory Core witness is one of four overclaiming instances — three digest-only trackers and one GitHub Workflow tracker that observes gitHead contextually but excludes it from verdict authority.
Live latest-open sweep at 2026-08-01T19:22:35Z, 12 latest open issues: no equivalent. A2A claim sweep over the last 8 messages: @neo-kimi-iris holds #16289 / #16292 (CI classifier, digest seams) — different scope, no collision.
The Problem
Every MCP HealthService publishes a freshness verdict whose prose claims source identity without a status-driving source field. Three trackers never observe source; GitHub Workflow reads gitHead through rootDir but deliberately excludes it from statusFields, so its source observation cannot support a positive verdict.
Memory Core, live:
"runtimeFreshness": {
"status" : "current",
"stale" : {"configDigest": false, "openApiDigest": false},
"details": ["Runtime source/config identity matches the current checkout."]
}It does not match. Same file, same line:
container: record.set('properties', properties);
host(dev): record.set({properties});MailboxService.mjs:290 — PR #16272 merged 16:07:07Z against a container started 13:45:18.647Z. The loaded source predates the fix by 2h22m while the envelope reports current.
This is not a runtime drop-out. The mismatch is static and visible at construction:
files : [configDigest, openApiDigest]
statusFields : ['configDigest', 'openApiDigest']
identityLabel: 'source/config identity'
There is no status-driving source field in any of the four configurations. Three never look; GitHub Workflow looks contextually but never lets that field decide status. The verdict is therefore structurally incapable of supporting a positive source claim.
All four services, swept:
| service |
identityLabel |
status-driving fields |
contextual fields |
| memory-core |
source/config identity |
configDigest, openApiDigest |
— |
| knowledge-base |
source/config identity |
configDigest, openApiDigest |
— |
| neural-link |
source/config identity |
configDigest, openApiDigest |
— |
| github-workflow |
source/schema identity |
openApiDigest only |
gitHead |
The initial sweep searched only sourceRevision / gitRevision / headSha / revision and missed the real rootDir → gitHead path. Exact-head review later proved GitHub Workflow observes gitHead contextually; observation is not verdict authority.
Why this outranks an absent signal. A missing freshness check sends an operator to look. A current verdict stops them looking. Earlier today three peers were positioned to re-open their own already-merged fixes as new defects while every instrument agreed they were current — container healthy, services responding, runtimeFreshness: current. This is a false negative on a staleness detector, the class that suppresses investigation rather than merely failing to prompt it.
The Architectural Reality
ai/mcp/server/shared/services/RuntimeFreshnessService.mjs:310-320 — the shared verdict builder. identityLabel is free text, interpolated into both the current and stale details, with no relationship to fieldKeys.
ai/mcp/server/shared/services/RuntimeFreshnessService.mjs:31-41 — compareIdentityField returns null for uncomparable fields, so comparableFields is already a computed subset. The label is the only part that does not narrow.
ai/services/{memory-core,knowledge-base,neural-link,github-workflow}/HealthService.mjs — the four createTracker call sites, each supplying the overclaiming label.
- Sibling honesty precedent, same file:
unavailableSummary is already field-accurate ('config digest and OpenAPI digest'). The contract knows how to be narrow; only identityLabel escaped it.
The Fix
(Prescription.)
- Narrow the four labels to what is measured. Drop the unbacked
source/ from all four. This removes the false negative immediately and is the whole user-visible defect.
- Make recurrence mechanical.
createTracker validates the label against a small dimension vocabulary (source, config, schema) and throws at construction when the label names a dimension with no status-driving input. source requires gitHead in the effective statusFields; rootDir alone is contextual. Boot-time and loud, rather than silently wrong in a health response.
Property to keep: the guard must fail at construction, not at report time. A freshness surface that degrades to a runtime warning is the same class of defect this ticket is about.
Contract Ledger Matrix
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback |
Docs |
Evidence |
runtimeFreshness.details prose |
RuntimeFreshnessService |
names only measured dimensions |
— |
JSDoc on identityLabel |
live healthcheck shows no unbacked dimension |
createTracker label validation |
this ticket |
throws when the label claims a dimension absent from effective status-driving inputs |
unknown vocabulary word ⇒ ignored, never a false throw |
in-code |
spec: mixed-authority and overclaiming configs throw; honest config constructs |
No wire-format change: status, stale, and field names are untouched. Only the details string narrows.
Decision Record impact
none. Corrects reporting to match an existing contract; changes no authority.
Acceptance Criteria
Out of Scope
- Adding source-revision verdict authority. Real and desirable, but a separate leaf: the three digest-only services need a revision source that works inside a container with no
.git; GitHub Workflow would need an explicit decision to promote contextual gitHead into statusFields. This ticket makes the report honest about what decides its verdict; it does not extend verdict authority.
- The deployment repair.
D#15758 owns the apply transaction. This epic owns reporting freshness honestly, not achieving it.
#15825. Stays closed; the symptom is the undeployed fix, not a defect in the fix.
Avoided Traps
- Fixing only Memory Core. It is where the witness landed, not the population. All four services carry it; scoping to the reported instance would leave three live false negatives.
- Deriving the label mechanically from field keys. Tempting, but it would lose the readable phrasing the sibling
unavailableSummary demonstrates is valuable. Validate the free text instead of replacing it.
- Warning instead of throwing. A freshness contract that reports its own violation at runtime is the defect, restated one layer up.
- Treating this as prose. The label is load-bearing: it is the sentence an operator reads to decide whether to investigate.
Related
#14477 — parent epic (runtime freshness and restart control)
#15825 / PR #16272 — the undeployed fix that produced the witness
D#15758 — the apply-transaction contract that owns achieving freshness
Origin Session ID: 56105163-6e66-44b6-8c6f-9e81bc1be08c
Retrieval Hint: query_raw_memories("runtimeFreshness current false negative identityLabel unmeasured source"), or ai/mcp/server/shared/services/RuntimeFreshnessService.mjs:310.
Context
Leaf under
#14477. Falsifier found by @neo-gpt on the live Docker plane (A2A 19:15:34Z), independently reproduced, then widened: his single Memory Core witness is one of four overclaiming instances — three digest-only trackers and one GitHub Workflow tracker that observesgitHeadcontextually but excludes it from verdict authority.Live latest-open sweep at 2026-08-01T19:22:35Z, 12 latest open issues: no equivalent. A2A claim sweep over the last 8 messages:
@neo-kimi-irisholds#16289/#16292(CI classifier, digest seams) — different scope, no collision.The Problem
Every MCP
HealthServicepublishes a freshness verdict whose prose claims source identity without a status-driving source field. Three trackers never observe source; GitHub Workflow readsgitHeadthroughrootDirbut deliberately excludes it fromstatusFields, so its source observation cannot support a positive verdict.Memory Core, live:
"runtimeFreshness": { "status" : "current", "stale" : {"configDigest": false, "openApiDigest": false}, "details": ["Runtime source/config identity matches the current checkout."] }It does not match. Same file, same line:
container: record.set('properties', properties); host(dev): record.set({properties});MailboxService.mjs:290— PR #16272 merged16:07:07Zagainst a container started13:45:18.647Z. The loaded source predates the fix by 2h22m while the envelope reportscurrent.This is not a runtime drop-out. The mismatch is static and visible at construction:
files : [configDigest, openApiDigest] // what it compares statusFields : ['configDigest', 'openApiDigest'] // what decides status identityLabel: 'source/config identity' // what it CLAIMSThere is no status-driving source field in any of the four configurations. Three never look; GitHub Workflow looks contextually but never lets that field decide
status. The verdict is therefore structurally incapable of supporting a positive source claim.All four services, swept:
identityLabelsource/config identityconfigDigest,openApiDigestsource/config identityconfigDigest,openApiDigestsource/config identityconfigDigest,openApiDigestsource/schema identityopenApiDigestonlygitHeadThe initial sweep searched only
sourceRevision/gitRevision/headSha/revisionand missed the realrootDir→gitHeadpath. Exact-head review later proved GitHub Workflow observesgitHeadcontextually; observation is not verdict authority.Why this outranks an absent signal. A missing freshness check sends an operator to look. A
currentverdict stops them looking. Earlier today three peers were positioned to re-open their own already-merged fixes as new defects while every instrument agreed they were current — container healthy, services responding,runtimeFreshness: current. This is a false negative on a staleness detector, the class that suppresses investigation rather than merely failing to prompt it.The Architectural Reality
ai/mcp/server/shared/services/RuntimeFreshnessService.mjs:310-320— the shared verdict builder.identityLabelis free text, interpolated into both thecurrentandstaledetails, with no relationship tofieldKeys.ai/mcp/server/shared/services/RuntimeFreshnessService.mjs:31-41—compareIdentityFieldreturnsnullfor uncomparable fields, socomparableFieldsis already a computed subset. The label is the only part that does not narrow.ai/services/{memory-core,knowledge-base,neural-link,github-workflow}/HealthService.mjs— the fourcreateTrackercall sites, each supplying the overclaiming label.unavailableSummaryis already field-accurate ('config digest and OpenAPI digest'). The contract knows how to be narrow; onlyidentityLabelescaped it.The Fix
(Prescription.)
source/from all four. This removes the false negative immediately and is the whole user-visible defect.createTrackervalidates the label against a small dimension vocabulary (source,config,schema) and throws at construction when the label names a dimension with no status-driving input.sourcerequiresgitHeadin the effectivestatusFields;rootDiralone is contextual. Boot-time and loud, rather than silently wrong in a health response.Property to keep: the guard must fail at construction, not at report time. A freshness surface that degrades to a runtime warning is the same class of defect this ticket is about.
Contract Ledger Matrix
runtimeFreshness.detailsproseRuntimeFreshnessServiceidentityLabelcreateTrackerlabel validationNo wire-format change:
status,stale, and field names are untouched. Only thedetailsstring narrows.Decision Record impact
none. Corrects reporting to match an existing contract; changes no authority.Acceptance Criteria
identityLabelin the repo names a dimension the same tracker does not make verdict-authoritative.createTrackerthrows at construction when a label claims a dimension absent from effective status-driving inputs, with a message naming the dimension, configured files, andstatusFields.status/stale/ field names are unchanged — verified by an existing-shape assertion.Out of Scope
.git; GitHub Workflow would need an explicit decision to promote contextualgitHeadintostatusFields. This ticket makes the report honest about what decides its verdict; it does not extend verdict authority.D#15758owns the apply transaction. This epic owns reporting freshness honestly, not achieving it.#15825. Stays closed; the symptom is the undeployed fix, not a defect in the fix.Avoided Traps
unavailableSummarydemonstrates is valuable. Validate the free text instead of replacing it.Related
#14477— parent epic (runtime freshness and restart control)#15825/ PR #16272 — the undeployed fix that produced the witnessD#15758— the apply-transaction contract that owns achieving freshnessOrigin Session ID:
56105163-6e66-44b6-8c6f-9e81bc1be08cRetrieval Hint:
query_raw_memories("runtimeFreshness current false negative identityLabel unmeasured source"), orai/mcp/server/shared/services/RuntimeFreshnessService.mjs:310.