Task ID or area
GH-C102
Technical direction
Core control-plane hardening
Intent
I want to claim an existing task
Summary
The shared production-scale coordination fixture only ever generates standing
authority: every broad, goal-bound user gate in
tests/fixtures/control_plane/coordination_production_scale_v0.json carries
decision_outcome: "approve", and the two neighbouring bands are a scoped gate
without an outcome and an exact-action approval with unblocks_todo_id. No
generated record exercises an explicitly refused decision, so every provider
conformance arm proves that approvals survive and nothing proves that a
rejection stays recorded but inactive.
The decision-scope RFC makes active a property of the recorded outcome
(decision_outcome === "approve") and keeps reject / cancel as standing
receipts that never grant authority. That invariant is covered by focused unit
tests in tests/control_plane_ts/standing_decision.test.ts, but it is absent
from the shared fixture that every provider arm reduces.
Proposed scope
In scope:
- add a bounded rejection band to the checked-in envelope
(rejected_standing_decision_count) and to the shared generator in
tests/control_plane_ts/production_scale_coordination_fixture.ts: broad,
goal-bound, global_gate user gates whose decision_outcome is "reject"
under a second decision kind, so the refusal keeps its own decision identity
and cannot merge into the approved scope;
- expose the derived expectations (
expected_inactive_standing_decision_count,
and the retained-standing count used by the archive assertion) instead of
hardcoding them;
- assert the dimension on every provider conformance arm in
tests/control_plane_ts/authority_store_conformance.ts: inactive_count and
per-entry active === (outcome === "approve");
- add one independent mutation/negative case file that proves the rejection,
not a missing record, is what keeps the scope inactive, and that dropping the
typed decision_scope removes the receipt entirely.
Out of scope:
- changing the standing-decision predicate or projection semantics;
- weakening the archive retention dimension (retained standing receipts grow by
the rejection count, so the moved-row budget is recomputed rather than
relaxed);
- NoKV, PostgreSQL, or live provider configuration changes;
- any production code change.
Intended base branch
main
Relevant files or commands
tests/fixtures/control_plane/coordination_production_scale_v0.json
tests/control_plane_ts/production_scale_coordination_fixture.ts
tests/control_plane_ts/authority_store_conformance.ts
tests/control_plane_ts/production_scale_rejected_decision.test.ts
loopx/control_plane/todos/standing_decision.ts
Validation plan
npm run test:control-plane (file, SQLite, NoKV JSON-lines, NoKV
single-envelope arms; PostgreSQL arm only with LOOPX_TEST_POSTGRES_URL)
node --test tests/control_plane_ts/production_scale_rejected_decision.test.ts
npm run typecheck:control-plane
loopx check --scan-path tests/fixtures/control_plane --scan-path tests/control_plane_ts --scan-path docs/development/testing-and-quality.md
Public/private boundary
Task ID or area
GH-C102
Technical direction
Core control-plane hardening
Intent
I want to claim an existing task
Summary
The shared production-scale coordination fixture only ever generates standing
authority: every broad, goal-bound user gate in
tests/fixtures/control_plane/coordination_production_scale_v0.jsoncarriesdecision_outcome: "approve", and the two neighbouring bands are a scoped gatewithout an outcome and an exact-action approval with
unblocks_todo_id. Nogenerated record exercises an explicitly refused decision, so every provider
conformance arm proves that approvals survive and nothing proves that a
rejection stays recorded but inactive.
The decision-scope RFC makes
activea property of the recorded outcome(
decision_outcome === "approve") and keepsreject/cancelas standingreceipts that never grant authority. That invariant is covered by focused unit
tests in
tests/control_plane_ts/standing_decision.test.ts, but it is absentfrom the shared fixture that every provider arm reduces.
Proposed scope
In scope:
(
rejected_standing_decision_count) and to the shared generator intests/control_plane_ts/production_scale_coordination_fixture.ts: broad,goal-bound,
global_gateuser gates whosedecision_outcomeis"reject"under a second decision kind, so the refusal keeps its own decision identity
and cannot merge into the approved scope;
expected_inactive_standing_decision_count,and the retained-standing count used by the archive assertion) instead of
hardcoding them;
tests/control_plane_ts/authority_store_conformance.ts:inactive_countandper-entry
active === (outcome === "approve");not a missing record, is what keeps the scope inactive, and that dropping the
typed
decision_scoperemoves the receipt entirely.Out of scope:
the rejection count, so the moved-row budget is recomputed rather than
relaxed);
Intended base branch
main
Relevant files or commands
tests/fixtures/control_plane/coordination_production_scale_v0.jsontests/control_plane_ts/production_scale_coordination_fixture.tstests/control_plane_ts/authority_store_conformance.tstests/control_plane_ts/production_scale_rejected_decision.test.tsloopx/control_plane/todos/standing_decision.tsValidation plan
npm run test:control-plane(file, SQLite, NoKV JSON-lines, NoKVsingle-envelope arms; PostgreSQL arm only with
LOOPX_TEST_POSTGRES_URL)node --test tests/control_plane_ts/production_scale_rejected_decision.test.tsnpm run typecheck:control-planeloopx check --scan-path tests/fixtures/control_plane --scan-path tests/control_plane_ts --scan-path docs/development/testing-and-quality.mdPublic/private boundary