Skip to content

fix(broker): fail closed when real namespace resolution rejects an undeclared adapter #833

Open

Description

@ViperJuice

An activated direct GitHub adapter with an undeclared generation lease can swallow a real repository's typed routing refusal. GitHubBrokerAdapter._revalidate_generation_before_effect catches every exception from repository_broker_namespace and returns whenever the lease is _UNDECLARED_GENERATION. Its comment describes synthetic non-repository fixtures, but the branch does not establish that condition.

Reproduced on September 12 against default-branch input 88833fff1cce8ab1076f3be8a1596d875ddb5f20 in a new temporary Git repository, with PHASE_LOOP_TDD_EXPECT_FABPUB=1:

  1. Derive the temporary repository's canonical container using repository_snapshot(repo).container.
  2. Create its generations/ACTIVE file containing not-a-generation\n.
  3. Calling repository_broker_namespace(repo) raises PartitionRoutingRefused.
  4. Calling GitHubBrokerAdapter(repo)._revalidate_generation_before_effect() returns None without refusing.

No monkeypatch, provider command, live authority access, or publication was used in this control. This proves the pre-effect guard bypass; it does not claim an observed unauthorized push. The actual default-branch credsep.py SHA256 matched the reproduced source: 7f81562f29d80479c4308d09de8e4c27b5d7979c24b3ecb1cc47bb6b3a3a075a.

The requested bounded repair is to fail closed on real routing/authority failures, preserve only explicitly justified fixture compatibility, and add a real temporary-repository regression proving neither push nor PR-create is reached. Preserve existing frozen tests and publication-ownership semantics.

Found while reviewing the synchronous effect-fence plan associated with agent-harness#820. This is a separate admission/namespace defect; a latch held around an already-resolved effect does not fix it. It does not authorize orphan-lease deletion, rotation, retry, sealing, or acceptance of agent-harness#789's blocked publication history.

Activity

  1. ViperJuice commented on Sep 13, 2026

    @ViperJuice
    CollaboratorAuthor

    Current-main reproduction confirms agent-harness#833 in an isolated worktree
    based on c6b9924b414769ed45bdc3ea47a8d66ec1fe52c7.

    For both a malformed generations/ACTIVE and a pointer to a nonexistent
    successor, the real resolver raises PartitionRoutingRefused; the direct
    adapter swallows it and reaches one simulated push and one simulated
    PR-create, returning effect_terminal_observed from the injected responses.
    The recorder executes neither provider command. This strengthens the original
    guard-only reproduction, not a claim of an observed unauthorized live push.
    Current credsep.py SHA256 is
    8d4909e6672740596de02ba0fd2205ccee54a44062cfdc7c2a930c4911a65140.

    The initial plain-directory control was inside a Git worktree and therefore
    resolved its parent repository; it was not a valid non-repository control.
    That result and the corrected control outside Git are both preserved.

    Local plan-only commit 6d6cfeef996b69f0768f7bab81df90295b91c3bc adds the bounded
    repair plan and native manifest registration. All 58 existing manifest entries
    are unchanged. Runtime and tests are unchanged. Fresh four-vendor native plan
    review is running with full retention and the explicit unexpired interim
    authority; no plan or source approval is claimed yet.

    Plan review bundle SHA256:
    3813e2f5cb3e82e0f0407a2d37c9b6ebbeef2923ebfedd8789c9ea2c9b77cc67.
    No public source push, PR, merge, lease cleanup, partition rotation, runtime
    deployment or service interruption. The independent agent-harness#820 scope and
    agent-harness#827 publication hold remain unchanged.

  2. ViperJuice commented on Sep 13, 2026

    @ViperJuice
    CollaboratorAuthor

    The standalone repair is implemented locally and under native verification.

    The plan at 47c82849c1676666523930f78aaba4a9a4a77968 received four usable AGREE
    verdicts: Codex/Gemini in the full r2 review, then Fable/Grok after focused
    clarification on the unchanged candidate. Both original dissents remain
    preserved. All input, transport, cleanup and retention checks passed. Fable
    completed through the native subscription TUI. The complete approved review
    was encrypted in the existing private recovery repository and independently
    restored: 269 files verified before execution.

    Formal Python 3.14 RED on unchanged input produced 29 expected assertion
    failures and 6 passing controls
    , with no collection/setup errors. All failures
    were the expected missing-refusal assertion. The original source, frozen tests,
    native logs/JUnit and temporary Git fixtures are preserved. The tests have not
    changed since that RED record.

    The repair catches only LegacyCutoverConflict and limits fixture compatibility
    to injected runners with no Git-routing overrides or ancestor repository markers.
    Other resolver errors propagate, and uncertain fixture inspection preserves the
    original conflict. All 136 focused tests now pass, including the new
    regressions, unchanged adapter tests and activated writer-fence control. The
    plan-required broader runtime suite is still running; no full-suite success is
    claimed.

    Current source SHA256:
    50663ce043d62d36be5aa4946e99e777eafb05ee07e288386bff0d56d2cbdadf.
    Frozen new-test SHA256:
    48c02d8b340ea54be5e2fd003be1d4eb1b5260a1bca68d270620cc69b21aa23f.
    Across 1,054 pre-existing runtime/test blobs, only the planned guard file changed;
    all old tests and 58 older manifest entries remain unchanged.

    The source/test repair and native executing metadata are uncommitted and
    unpushed
    on codex/v10-namespace-refusal-833-20260913. Fresh full four-vendor
    source review remains required. Public publication is still held by the
    separate agent-harness#827 ambiguity. No provider mutation, runtime deployment,
    lease removal, rotation, merge or V10 acceptance occurred.

  3. ViperJuice commented on Sep 13, 2026

    @ViperJuice
    CollaboratorAuthor

    The required broad run is terminal and failed: 5,400 passed, 53 failed, 131 skipped, 602 deselected, with 5,584 selected JUnit nodes and no collection errors. The outer diagnostic driver returned 0 while correctly reporting suite exit 1 and native validation nonzero_exit; it must not be interpreted as passing verification.

    All 35 new namespace regressions passed in this broad run. The earlier focused stage remains 136 passed. Source SHA256 50663ce043d62d36be5aa4946e99e777eafb05ee07e288386bff0d56d2cbdadf and frozen test SHA256 48c02d8b340ea54be5e2fd003be1d4eb1b5260a1bca68d270620cc69b21aa23f remain unchanged, as do the manifest and lockfile inputs. No source review, source commit or public publication has occurred.

    Targeted diagnosis on unchanged inputs:

    • 39 path-related failures pass under short real /tmp paths. My workspace TMPDIR choice conflicted with direct-/tmp safeguards, Unix socket length, same-filesystem hardlinks and lexical/canonical path expectations. The original failing setup and result remain preserved.
    • Nine environment-composition failures reproduce independently through the native verifier. They match the existing agent-harness#428 scope: missing CI build/visual dependencies, private interpreter-path redaction and inherited interpreter shims.
    • Four LEGIBLE failures match agent-harness#797 and remain with that owning lane.
    • One CONFORM failure explicitly rejects the uncommitted candidate at its existing candidate_clean assertion. No clean candidate history was created to suppress it.

    The plan's claimed CI-equivalent setup needs correction through review: CI installs additional dependencies and has explicit chronology/LEGIBLE execution posture. No full-suite rerun, exclusion, xfail or frozen-test edit was used to manufacture a green result. The verification/acceptance gate remains unmet.

    The complete failed broad log/artifact, full JUnit and all 53 traces were encrypted to the existing private recovery repository and independently restored before diagnosis (48 files, every hash verified). The 39-node passing reproduction and nine-node failing reproduction are separately retained; original temporary fixtures remain protected in place. The independent interruption-retention bug discovered while monitoring is tracked as agent-harness#840.

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