Skip to content

Resolve farm scope for legacy result and trace reads with FIELD-only anchors #394

Description

@samovers

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions