---
name: legacy-arm-that-skips-the-seam-skips-its-gates
description: "A legacy code path that calls the low-level API directly does not merely lose the new features — it loses every GATE the seam enforces, and the filed issue will name only the narrowest face."
metadata: 
  node_type: memory
  type: feedback
  originSessionId: c4bdac5d-1a80-4752-8954-99d14618d308
  modified: 2026-08-19T06:17:50.474Z
---

releases#185 was filed as "the positional `access allow` spelling drops `--surfaces`" — read-derived,
one face. The runtime repro found three, and the third was the one nobody predicted: the arm matched
`node: Some(..)` with a `..` and called `AccessStore::allow` DIRECTLY, so it never reached
`apply_mutation` — and with it neither the `--admit-node` acknowledgment NOR the grant-nodes policy.
Measured as a three-arm differential under ONE authority: the flag spelling REFUSED an unacknowledged
owner agent, and the positional spelling then wrote the WIDER rule for that same agent at exit 0.
**A gate a respelling steps around is not a gate**, and the bypassing spelling was two words shorter.

**Why:** the filed symptom is whatever the reader could see from the source. A `..` in a match arm is
invisible discard — it names nothing it swallows — so the issue can only report the flag the reader
happened to look for. The far bigger fact is structural and one level up: *which seam this path does
not cross*. That is never in the filing because it is an absence.

**How to apply:** when a defect is "this arm ignores its input", do not stop at the input. Ask what
the OTHER spelling of the same verb routes through, and diff the two paths' seams — the answer is a
list of enforcement the legacy arm is not subject to. Then measure it as a differential under ONE
authority with the gate as the only variable (refused / accepted-with-flag / legacy-accepted), and
declare the widened scope to your gater BEFORE fixing, so it reads as declared rather than as drift.
Fix at the seam: routing the arm through it closes every face at once, where refusing the flag
coexistence would have closed the narrow one and left the bypass — and its remedy text would have
pointed the operator AT the bypassing spelling. Same lesson as [[declare-site-is-not-enforce-site]]
and the T2 chokepoint ruling; kin [[refute-a-bypass-by-visibility-not-by-audit]].

⚠ The authority precondition is its own trap: `SPT_AGENT_ID` alone classifies as LocalUserCli —
`classify_local_origin` resolves the id to a REAL PERCH RECORD and falls back to the machine's user
when it cannot. My first attempt at the bypass arm ran as a same-node user (which is node-sovereign
and never sees the gate), got a clean "no refusal", and refuted itself. Seed the perch, or the
security arm is vacuous while looking green. Kin [[verify-the-subject-not-just-the-measurement]].
