Parent: #179. Related output-authorization work: #177. Discovered as F1 in PR #393 review 5209450131; separate from Delivery #389's documentation-only reader guide.
Outcome and primary boundary
An authorized legacy farm reader can retrieve a commit result and its promotion trace for a valid FIELD-only submission using a durable, unambiguous farm association. Missing or ambiguous association and insufficient read authority continue to fail closed. Primary boundary: farm resolution for legacy record-read authorization.
Demonstrated problem
At f804beb626c7026f6d25373caa9c427c1c5fc25c, kernel/legacy_m1/api.py::_read_farm_scopes resolves FARM-typed scopes from the record or recursively through semanticEventRef/requestId. Nonempty explicit FIELD-only targetScopes are preserved as the event/request scopes. They provide no FARM entry to that reader, which returns 403 PERMISSION_REDACTED for the result and trace before a normal farm-read authority evaluation, even when the submitting farmer has the needed farm grant. A retained sufficiency case has a FARM anchor and can be readable directly. Omitted/empty raw targetScopes take the normalizer's FARM default and are not this counterexample.
The reviewer measured FIELD-only operation and observation result/trace reads as 403; FARM+FIELD operation reads succeeded. Their environment was PostgreSQL16.13/CPython3.12.3 and is not the repository's pinned runtime evidence. The source path is confirmed locally; independent pinned disposable-fixture verification is in progress for PR #393. No production route is opened by that evidence.
Falsifiable acceptance criteria for future implementation
- Identify the accepted durable source of a result/trace's farm; do not infer authority from a caller-asserted farm or field identifier alone.
- With a valid FIELD-only stored submission and the existing farm-read grant, authorized GET of the result and trace succeeds and returns the original immutable records.
- The same records remain unreadable to an unrelated farm or unauthorized principal. Missing, ambiguous or inconsistent durable association fails closed.
- Existing FARM and FARM+FIELD reads, immutable event anchors, claim/replay semantics and production closure are preserved.
- Prove the allowed and refused paths with fictional fixtures and isolated disposable databases under the required interpreter/database/dependency profile.
Scope and approval posture
This issue records a separate future Delivery, not implementation permission. Read authorization is an authority boundary and requires its own risk-shaped design, review, decision and exact same-task approval before changes. Resolve overlap/dependency with #177 in that design; do not widen #393 or transfer its routine documentation classification.
Non-goals: new grants or sharing rules, weakening failed resolution, broader output-authorization overhaul, acceptance changes, stored-event rewrites, new production endpoints, deployment, or restarting the audit. No implementation PR is open for this issue.
Next: prepare a bounded design for this read-resolution capability when authorized; #393 may describe the existing limitation without implementing this repair.
Parent: #179. Related output-authorization work: #177. Discovered as F1 in PR #393 review 5209450131; separate from Delivery #389's documentation-only reader guide.
Outcome and primary boundary
An authorized legacy farm reader can retrieve a commit result and its promotion trace for a valid FIELD-only submission using a durable, unambiguous farm association. Missing or ambiguous association and insufficient read authority continue to fail closed. Primary boundary: farm resolution for legacy record-read authorization.
Demonstrated problem
At
f804beb626c7026f6d25373caa9c427c1c5fc25c,kernel/legacy_m1/api.py::_read_farm_scopesresolves FARM-typed scopes from the record or recursively through semanticEventRef/requestId. Nonempty explicit FIELD-only targetScopes are preserved as the event/request scopes. They provide no FARM entry to that reader, which returns 403 PERMISSION_REDACTED for the result and trace before a normal farm-read authority evaluation, even when the submitting farmer has the needed farm grant. A retained sufficiency case has a FARM anchor and can be readable directly. Omitted/empty raw targetScopes take the normalizer's FARM default and are not this counterexample.The reviewer measured FIELD-only operation and observation result/trace reads as 403; FARM+FIELD operation reads succeeded. Their environment was PostgreSQL16.13/CPython3.12.3 and is not the repository's pinned runtime evidence. The source path is confirmed locally; independent pinned disposable-fixture verification is in progress for PR #393. No production route is opened by that evidence.
Falsifiable acceptance criteria for future implementation
Scope and approval posture
This issue records a separate future Delivery, not implementation permission. Read authorization is an authority boundary and requires its own risk-shaped design, review, decision and exact same-task approval before changes. Resolve overlap/dependency with #177 in that design; do not widen #393 or transfer its routine documentation classification.
Non-goals: new grants or sharing rules, weakening failed resolution, broader output-authorization overhaul, acceptance changes, stored-event rewrites, new production endpoints, deployment, or restarting the audit. No implementation PR is open for this issue.
Next: prepare a bounded design for this read-resolution capability when authorized; #393 may describe the existing limitation without implementing this repair.