Filing door: class ① — a finding under the data-leak exception. Its reach is NOT MEASURED, so the first step is the reachability measurement, before any fix is shaped.
Source: the contract review of PR #21436 (#21207 exit two), section ③. It was filed by the domain:cli seat, session_01VvcEokUG1tvVxkceYfR5XB. ⛔ Classes, doors and roles only. No request, field path, value or seeding recipe appears here.
The class
The stored-metadata-body family (#21120, #21207) closes every door that serves, copies or evaluates a stored body, or a content hash over it. Each door either projects the body through the shared credential redactor or serves the hash in keyed form. Two in-process reader contexts are outside every enumeration so far:
- An action or automation body's object API. The sandbox resolves
ctx.api.object(...) to the engine's scoped object facade (packages/runtime/src/sandbox/body-runner.ts, buildSandboxApi).
- An action handler's engine handle.
ctx.engine.find calls the engine's find directly (packages/runtime/src/action-execution.ts, the handler context's find).
By source reading, neither applies the family's body projection or the keyed serve. The system-object guard in the same file covers MCP-invoked actions only.
Who could reach it: an administrator who authors an action or automation body. That is the same role the family already refuses cleartext to at its other doors. The class is the same as #21207's exit one, body and hash alike.
What is owed first
- Measure reach: does either context, as composed by
os serve, return a stored body or a stored content hash unprojected? Record the answer with a control: the same read through a family door returns the projected or keyed form.
- If reach is measured: route by where the fix lands. Is the projection applied at the engine's read of the family's objects, or at each reader context? That choice belongs to triage and the owning seat; this card does not pre-judge it.
- If neither context reaches unprojected content: close as not planned, with the measurement on the card.
Dedupe
Three repo-scoped searches, open and closed together:
- "automation sandbox ctx.api.object or action handler ctx.engine.find reads stored metadata body without projection": 2 hits;
- "stored metadata body credential sys_metadata read through action body or flow sandbox engine facade redaction": 19 hits;
- "body-runner action-execution system object guard sys_metadata engine read": 8 hits.
None covers these two contexts. Nearest:
Dedupe words: sandbox object API stored metadata body; action handler engine find sys_metadata; engine-only reader outside body projection; keyed content hash in-process reader.
Filing door: class ① — a
findingunder the data-leak exception. Its reach is NOT MEASURED, so the first step is the reachability measurement, before any fix is shaped.Source: the contract review of PR #21436 (#21207 exit two), section ③. It was filed by the
domain:cliseat,session_01VvcEokUG1tvVxkceYfR5XB. ⛔ Classes, doors and roles only. No request, field path, value or seeding recipe appears here.The class
The stored-metadata-body family (#21120, #21207) closes every door that serves, copies or evaluates a stored body, or a content hash over it. Each door either projects the body through the shared credential redactor or serves the hash in keyed form. Two in-process reader contexts are outside every enumeration so far:
ctx.api.object(...)to the engine's scoped object facade (packages/runtime/src/sandbox/body-runner.ts,buildSandboxApi).ctx.engine.findcalls the engine'sfinddirectly (packages/runtime/src/action-execution.ts, the handler context'sfind).By source reading, neither applies the family's body projection or the keyed serve. The system-object guard in the same file covers MCP-invoked actions only.
Who could reach it: an administrator who authors an action or automation body. That is the same role the family already refuses cleartext to at its other doors. The class is the same as #21207's exit one, body and hash alike.
What is owed first
os serve, return a stored body or a stored content hash unprojected? Record the answer with a control: the same read through a family door returns the projected or keyed form.Dedupe
Three repo-scoped searches, open and closed together:
None covers these two contexts. Nearest:
ctx.api.object().update()against a nonexistent id answers 400 (or worse) instead of 404, while the protocol and callData paths both gate correctly #7867 (action-bodyctx.api; unrelated defects, both closed).Dedupe words: sandbox object API stored metadata body; action handler engine find sys_metadata; engine-only reader outside body projection; keyed content hash in-process reader.