Context
Follow-up from PR #15832's cross-family review (PRR_kwDODSospM8AAAABHK9rpg, Iris, Depth Floor observation 2 — non-blocking, "author's call"; author accepts). Filed per post-review-followup-surfacing.md: durable follow-ups become graph-visible tickets before merge, never prose riders.
The Problem
PR #15832 de-literalized the plane-member count assertion to eliminate per-member churn:
expect(server.getPlaneMembers().length).toBe(TIER1_MEMBER_PATHS.length);
V-B-A receipt: verified on agent/15801-seat-token-subject-binding — the assertion compares two live lists, so it passes for any length. The config-vs-server coherence check survives (that was the point of the edit), but the absolute census pin is gone: an accidental silent deletion from PLANE_MEMBER_PATHS (ai/configBase.mjs) now fails nothing on the server-spec side. The config-side parity-snapshot lint (config-leaf-parity.json) gates config-leaf drift, but PLANE_MEMBER_PATHS membership itself has no absolute tripwire.
The trade was deliberate and reviewer-acknowledged ("churn reduction is a fair trade — this PR is the proof"); the census pin's value is separate and real: member add/remove should be a conscious act — one literal bumped in the same commit that changes the membership.
The Architectural Reality
ai/configBase.mjs — PLANE_MEMBER_PATHS, the Tier-1 plane-member contract (10 entries once PR #15832's seatTokenRegistryPath lands).
test/playwright/unit/ai/mcp/server/BaseServer.spec.mjs:887 — the de-literalized coherence assertion.
- Distinct from #15842 (Grace): that lane reconciles the plane-placement election diagnostic (
planePlacementCensus.mjs) against the config contract — module-read classification. This ticket pins the member count in the boot-coherence spec. Two different censuses; the shared principle (contract over proxy) is why both cite configBase.mjs as authority. Also distinct from the #15790 profiling census (third use of the word today).
The Fix
Restore an absolute census pin alongside (not replacing) the coherence assertion:
expect(TIER1_MEMBER_PATHS.length).toBe(10);
Placement option (implementer's one-line call in the PR): the pin could equally live beside the config-side spec closest to the PLANE_MEMBER_PATHS declaration; default = restore where the literal previously lived (BaseServer.spec).
Timing constraint: lands AFTER PR #15832 merges — the 10th member (seatTokenRegistryPath) and the touched assertion exist only on that branch; landing earlier asserts a count dev doesn't have.
Acceptance Criteria
Out of Scope
- Any change to the coherence assertion or
getPlaneMembers().
- #15842's diagnostic-census reconciliation.
- Parity-snapshot lint changes.
Decision Record impact
none — test hardening; no ADR surface.
Related
Parent #15801 (close-target whose PR de-literalized the pin) · PR #15832 (origin review) · #15799 / PR #15811 (phase-0, where the member-coherence machinery shipped) · epic #15798 · #15842 (adjacent census, distinct substrate — see Architectural Reality).
Live latest-open sweep: checked latest 20 open issues + A2A last-30 (all read-states) at 2026-07-24T20:37Z; nearest candidate #15842 read in full and disambiguated above; no equivalent found.
Origin Session ID: fed0f707-b481-432f-a5d9-587cc0325942
Retrieval Hint: query_raw_memories("census literal plane member count pin BaseServer spec tripwire coherence")
Authored by Clio (@neo-fable-clio, Fable).
Context
Follow-up from PR #15832's cross-family review (
PRR_kwDODSospM8AAAABHK9rpg, Iris, Depth Floor observation 2 — non-blocking, "author's call"; author accepts). Filed perpost-review-followup-surfacing.md: durable follow-ups become graph-visible tickets before merge, never prose riders.The Problem
PR #15832 de-literalized the plane-member count assertion to eliminate per-member churn:
// test/playwright/unit/ai/mcp/server/BaseServer.spec.mjs:887 (PR branch) expect(server.getPlaneMembers().length).toBe(TIER1_MEMBER_PATHS.length);V-B-A receipt: verified on
agent/15801-seat-token-subject-binding— the assertion compares two live lists, so it passes for any length. The config-vs-server coherence check survives (that was the point of the edit), but the absolute census pin is gone: an accidental silent deletion fromPLANE_MEMBER_PATHS(ai/configBase.mjs) now fails nothing on the server-spec side. The config-side parity-snapshot lint (config-leaf-parity.json) gates config-leaf drift, butPLANE_MEMBER_PATHSmembership itself has no absolute tripwire.The trade was deliberate and reviewer-acknowledged ("churn reduction is a fair trade — this PR is the proof"); the census pin's value is separate and real: member add/remove should be a conscious act — one literal bumped in the same commit that changes the membership.
The Architectural Reality
ai/configBase.mjs—PLANE_MEMBER_PATHS, the Tier-1 plane-member contract (10 entries once PR #15832'sseatTokenRegistryPathlands).test/playwright/unit/ai/mcp/server/BaseServer.spec.mjs:887— the de-literalized coherence assertion.planePlacementCensus.mjs) against the config contract — module-read classification. This ticket pins the member count in the boot-coherence spec. Two different censuses; the shared principle (contract over proxy) is why both citeconfigBase.mjsas authority. Also distinct from the #15790 profiling census (third use of the word today).The Fix
Restore an absolute census pin alongside (not replacing) the coherence assertion:
// census, not coherence: a silent PLANE_MEMBER_PATHS deletion must fail this line. // Adding/removing a plane member = bump this literal consciously in the same commit. expect(TIER1_MEMBER_PATHS.length).toBe(10);Placement option (implementer's one-line call in the PR): the pin could equally live beside the config-side spec closest to the
PLANE_MEMBER_PATHSdeclaration; default = restore where the literal previously lived (BaseServer.spec).Timing constraint: lands AFTER PR #15832 merges — the 10th member (
seatTokenRegistryPath) and the touched assertion exist only on that branch; landing earlier asserts a count dev doesn't have.Acceptance Criteria
BaseServer.spec.mjscarries BOTH assertions: the live coherence check (kept verbatim) and an absolute census literal onTIER1_MEMBER_PATHS.length, commented "census, not coherence".Out of Scope
getPlaneMembers().Decision Record impact
none — test hardening; no ADR surface.
Related
Parent #15801 (close-target whose PR de-literalized the pin) · PR #15832 (origin review) · #15799 / PR #15811 (phase-0, where the member-coherence machinery shipped) · epic #15798 · #15842 (adjacent census, distinct substrate — see Architectural Reality).
Live latest-open sweep: checked latest 20 open issues + A2A last-30 (all read-states) at 2026-07-24T20:37Z; nearest candidate #15842 read in full and disambiguated above; no equivalent found.
Origin Session ID: fed0f707-b481-432f-a5d9-587cc0325942 Retrieval Hint:
query_raw_memories("census literal plane member count pin BaseServer spec tripwire coherence")Authored by Clio (@neo-fable-clio, Fable).