Skip to content

[Task]: carry a recorded decision rejection in the shared production-scale coordination fixture (GH-C102) #4541

Description

@superwesleyhys-ux

Task ID or area

GH-C102 (state / tests) — shared production-scale coordination fixture

Technical direction

Core control-plane hardening

Intent

I want to claim an existing task

Summary

The shared production-scale coordination fixture
(tests/fixtures/control_plane/coordination_production_scale_v0.json plus
tests/control_plane_ts/production_scale_coordination_fixture.ts) currently
only generates approvals. Every broad, goal-bound user gate that qualifies
as a standing decision receipt carries decision_outcome: "approve". Nothing in
the envelope produces an explicitly rejected decision, so no provider
conformance arm ever has to prove that a refusal stays recorded without becoming
active authority.

The accepted decision-scope/standing-authority contract makes that distinction
load-bearing: projectStandingDecisions keeps a rejected gate as a
standing_decision_receipt_v0 entry with active: false, counts it under
inactive_count, retains it during archive exactly like an approval, and never
lets it raise active_count (only decision_outcome === "approve" does).
tests/control_plane_ts/standing_decision.test.ts covers the pure projection,
but the shared multi-provider fixture does not carry the shape.

This slice adds that one invariant to the shared fixture and runs it through
every affected provider conformance arm.

Proposed scope

In scope:

  • envelope: a bounded rejected_standing_decision_count band of broad,
    goal-bound, global_gate user gates whose decision_outcome is "reject",
    scoped under a second decision kind so the refusal keeps its own decision
    identity and does not merge into the approved scope;
  • shared generator: expose expected_inactive_standing_decision_count, extend
    expected_standing_user_decision_count (archive-retained standing receipts
    now include refusals), and derive expected_user_archive_count from the
    retained count instead of a fixed - 5 shortcut;
  • provider conformance: assert inactive_count and per-entry
    active === (outcome === "approve") in
    tests/control_plane_ts/authority_store_conformance.ts, so file, SQLite,
    NoKV JSON-lines, NoKV single-envelope, and PostgreSQL arms all run the
    dimension;
  • one independent mutation/negative assertion: a rejection is a receipt, only an
    explicit approval activates the scope, and dropping the typed
    decision_scope leaves no standing entry at all.

Out of scope:

  • changing the standing-decision predicate or projection semantics;
  • weakening any existing dimension: the archive retention count grows because
    refusals are genuinely retained, and the moved-row budget is recomputed rather
    than relaxed;
  • new providers, live provider runs, or production code changes.

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
  • loopx/control_plane/todos/standing_decision.ts
  • npm run test:control-plane
  • loopx check --scan-path tests/fixtures/control_plane --scan-path tests/control_plane_ts --scan-path docs/development/testing-and-quality.md

Validation plan

  • npm run test:control-plane
  • npm run typecheck:control-plane
  • python3 -m pytest -q tests/control_plane/test_todo_semantic_kernel.py tests/control_plane/test_coordination_runtime_shadow_adapter.py
  • 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

  • This issue does not include private benchmark traces, verifier output, credentials, internal document links, raw agent sessions, or local runtime state.
  • I will not run or duplicate maintainer-owned benchmark cases unless a maintainer explicitly splits out a public task.

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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions