Skip to content
This repository was archived by the owner on Oct 23, 2026. It is now read-only.
This repository was archived by the owner on Oct 23, 2026. It is now read-only.

P1: restore approved carrier rebind on fresh direct-dispatch admission #402

Closed as not planned

Description

@James3014

Problem

The minimal direct-dispatch surface can prepare resumable writer admission only when the current transport session is already paired to an approved #62 carrier.

On a fresh/reconnected MCP session this creates an operability dead-end:

fresh/reconnected direct-dispatch session
  -> open_workspace
  -> work_resume_prepare
  -> "A current paired carrier is required"

The fail-closed requirement itself is correct. The defect is that the minimal direct-dispatch surface has no narrow way to rebind an already approved carrier before work_resume_prepare.

Fresh evidence — 2026-10-06

Canonical repository main:

f7c0d2d0fddf0d2ffe8caee62715159dec6541b7

Current connected Dev M5 runtime observed through agent_preflight:

  • source: ed5e425b5a58032795c0aa2127b1b14e241d08fb
  • build: devspace-1.0.7-ed5e425b

Observed current-session behavior:

  • coordination_carrier_status -> A current paired carrier is required
  • existing isolated workspace remains loaded and clean, so the failure is carrier/session binding, not workspace disappearance.

Current source boundary:

  1. DIRECT_DISPATCH_TOOL_NAMES exposes exactly the minimal worker lifecycle including work_resume_prepare, but no coordination_pair, coordination_resume, or coordination_carrier_status.
  2. work_resume_prepare accepts only workspaceId + contractPurpose.
  3. Its handler immediately calls carrierBindings.status(context); there is no optional credential rebind before that status lookup.
  4. The full coordination surface already has the P1: preserve coordination carrier continuity across MCP calls and expose recovery-safe read surfaces #378 pattern: coordination_carrier_status / coordination_lease_read accept optional carrierCredential and redeem exactly that existing carrier on a fresh MCP session.

Therefore a fresh direct-dispatch session cannot recover the positive writer-admission path using only its intentionally minimal surface, even when an approved carrier credential already exists.

Important non-bug / safety boundary

An unbound fresh session without approved carrier evidence must continue to fail closed.

This Issue must NOT:

  • auto-mint a carrier;
  • bypass Owner approval;
  • make carrier authority global;
  • weaken expiry/revocation/client/session checks;
  • re-expose the broad coordination/Core tool surface;
  • let work_resume_prepare choose repository, base, scope, goal, or authority.

The already-approved carrier remains the sole source of repository/base/scope/expiry/worktree_write authority.

Required outcome

Provide one narrow rebind path on the direct-dispatch admission route so a fresh/reconnected session can prove an existing approved carrier before resumable-work preparation.

Preferred minimal shape, if source review confirms it fits existing #378 semantics:

  • add an optional existing-carrier credential input to work_resume_prepare;
  • redeem/rebind that exact credential first;
  • then run the existing carrierBindings.status(context), worktree_write, base-SHA, workspace, lease and resumable-work checks unchanged;
  • never return the credential.

An equivalent narrow mechanism is acceptable if it preserves the 11-tool isolation intent and does not expose the broad coordination surface.

Acceptance criteria

  • already-bound same-session work_resume_prepare behavior is unchanged;
  • fresh direct-dispatch session + no credential still fails closed before any provider/file effect;
  • fresh direct-dispatch session + exact valid approved carrier can rebind and prepare resumable work;
  • invalid, stale, expired, revoked, wrong-client, or otherwise foreign carrier evidence fails closed;
  • carrier lacking worktree_write fails closed;
  • carrier base SHA mismatch against workspace HEAD still fails closed;
  • exact replay preserves the same workKey / lease rather than creating a second writer;
  • returned resumableWork remains consumable by agent_start only with effectHandle == attemptKey;
  • direct-dispatch projection remains minimal and does not expose broad coordination/Core actions;
  • deterministic regression covers reconnect/new MCP session -> approved-carrier rebind -> work_resume_prepare -> positive agent_start;
  • live connector canary proves the same fresh/reconnected flow on the deployed generation without Owner CLI fallback during the dispatch itself.

Relationship to existing Issues

This Issue is the missing bridge between #378's safe per-call rebind mechanism and #396/#328's minimal direct-dispatch admission path.

Claim ceiling

Source tests alone are insufficient. Do not claim this fixed until a real fresh/reconnected direct-dispatch connector call can rebind an already-approved carrier, prepare resumable work, and reach the positive agent_start admission path on the loaded runtime generation.

Activity

  1. github-actions commented on Oct 6, 2026

    @github-actions

    Authority: RESEARCH_OBSERVATION_ONLY / NO_ENGINEERING_AUTHORITY

    Hybrid replication capture receipt
    {
      "body_gzip_base64": "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",
      "capture_sha256": "43f2921d96e13dcebc4dbd607e6b9575dc3840e230cdc8c8a1a7e72a633d9287",
      "captured_at": "2026-10-06T15:14:20Z",
      "contract_sha256": "9c61eabee01592600bd85f2db61ed7a37d5d76f39a3eacc16b7177fd266ed021",
      "created_at": "2026-10-06T15:11:23Z",
      "default_branch": "main",
      "issue_number": 402,
      "issue_updated_at": "2026-10-06T15:11:23Z",
      "pre_implementation_revision": "f7c0d2d0fddf0d2ffe8caee62715159dec6541b7",
      "repository": "James3014/devspace",
      "schema": "nexus.hybrid_replication.capture.v1",
      "source_event_id": "actions:37485738222:1",
      "title": "P1: restore approved carrier rebind on fresh direct-dispatch admission"
    }
  2. github-actions commented on Oct 6, 2026

    @github-actions

    Authority: RESEARCH_OBSERVATION_ONLY / NO_ENGINEERING_AUTHORITY

    {
      "activation_boundary": "2026-10-05T03:00:24Z",
      "activation_state": "AUTOMATIC_CAPTURE_READY",
      "admitted_at": "2026-10-06T15:14:20Z",
      "capture_sha256": "43f2921d96e13dcebc4dbd607e6b9575dc3840e230cdc8c8a1a7e72a633d9287",
      "disposition": "ADMITTED_PRIMARY_FRESH_TASK",
      "exclusion_set_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "implementation_pr_numbers": [],
      "issue_state_at_admission": "open",
      "receipt_sha256": "34b408d14af73df52b3de1c574364a530e3b68ee23a8005cc0c7f985c78248b3",
      "schema": "nexus.hybrid_replication.admission.v1",
      "task_key": "James3014/devspace#402",
      "tracked_parent_created_at": null,
      "tracked_parent_issue_number": null
    }
  3. James3014 commented on Oct 6, 2026

    @James3014
    OwnerAuthor

    Fresh cross-repo reproducer from Nexus-new #1419

    This Issue is still the correct owner for the current blocker.

    Triggering workflow

    James3014/Nexus-new#1419 Wave 2 reached terminal source/Core integration:

    • Nexus-new PR #1493 merged
    • verified Candidate head: 2dbce63e36b44b42a2d1ac5cdb247f3c3803c144
    • verified/merged tree: e86e720e86df053b623de78ce5d2919f3c300312
    • merge/current main: 456c8cb0b69df9e03cd2cf5e07f81e82d5da2f2b
    • Nexus Core issue completion: VERIFIED
    • remaining action was bounded Mini host-runtime sync/readback only

    Fresh Dev M5 observation

    Connected Mini Dev M5:

    • build: devspace-1.0.7-ed5e425b
    • source: ed5e425b5a58032795c0aa2127b1b14e241d08fb
    • exact Nexus-new isolated worktree at merged main was opened successfully
    • workspace itself was clean/usable

    First host-control shell attempt failed before the requested readback/sync effect with:

    P0_WRITER_ADMISSION_FAILED / NEXUS_ADMISSION_REQUIRED

    Attempting the documented resumable-work preparation then failed with:

    work_resume_prepare -> A current paired carrier is required

    Fresh readback confirmed the same session boundary:

    coordination_carrier_status -> A current paired carrier is required

    No host-sync/restart/retry/deployment effect was started.

    Attribution

    This is not a Nexus-new #1419 implementation defect. The merged #1419 source/Core evidence is terminal.

    The fail-closed carrier requirement itself remains correct. The operability defect is the #402 seam: a fresh/reconnected Dev MCP session has no narrow positive path to rebind already-approved writer authority before work_resume_prepare, so an otherwise-complete cross-repo workflow stalls at host-control admission.

    This reproducer also shows the impact is not limited to delegated worker launch; it blocks bounded post-merge host runtime sync/readback needed to close an exact engineering generation.

    Fresh repository state

    Current DevSpace GitHub main observed during this reproducer:

    62452b0eeb748d8d749f06e02f96b0d28ec878c9

    PR #404 (fix: rebind approved writer authority on direct dispatch) is currently closed / unmerged, so it does not close this live blocker.

    Required claim boundary

    Do not weaken fail-closed admission, auto-mint a carrier, or broaden the direct-dispatch surface. The required closure remains:

    fresh/reconnected session
    -> prove/rebind one existing approved carrier through a narrow safe mechanism
    -> existing work_resume_prepare checks unchanged
    -> exact replay preserves work/lease identity
    -> live connector canary proves positive admission without Owner CLI fallback.

    Disposition:
    REPRODUCED_CROSS_REPO / DEV_MCP_CONTROL_PLANE_BLOCKER / #402_REMAINS_OPEN.

    AUTO_CHAIN=false.

  4. James3014 commented on Oct 6, 2026

    @James3014
    OwnerAuthor

    Source fix is merged; live runtime deployment is now the only blocker

    Fresh verification shows the #402 source repair is already integrated via merged PR #397.

    Source:

    The merged repair adds the narrow carrierCredential rebind input to work_resume_prepare, preserves fail-closed behavior when no approved credential exists, keeps the direct-dispatch surface minimal, and includes the positive fresh-session -> approved-carrier rebind -> resumableWork -> agent_start regression.

    Live runtime remains stale

    Current Mini Dev M5:

    • source: ed5e425b5a58032795c0aa2127b1b14e241d08fb
    • build: devspace-1.0.7-ed5e425b
    • server instance: ae48b299-f912-4e80-9407-cd0c54eec9af

    Current model-facing work_resume_prepare schema still does not expose carrierCredential, proving the loaded runtime has not activated the merged #397 repair.

    Cutover state

    Existing historical cutover is terminal/closed; no unresolved deployment effect owns the current generation.

    No new cutover/restart/deployment effect was started.

    Fresh Owner-approval gate

    A fresh pairing was created for the bounded live deployment/canary attempt:

    pair_16779985-4de7-47fe-b536-ffd0ca94de95

    Attempted coordination_resume returned:

    AUTHORITY_REQUIRED: Pairing pair_16779985-4de7-47fe-b536-ffd0ca94de95 is awaiting host Owner approval.

    Required local approval command reported by canonical Dev M5:

    devspace carriers approve pair_16779985-4de7-47fe-b536-ffd0ca94de95 --contract <contract.json> --confirm pair_16779985-4de7-47fe-b536-ffd0ca94de95

    This is the correct fail-closed boundary. The controller must not auto-mint or bypass that Owner authority.

    Remaining #402 closure gates

    1. Owner approves the exact bounded carrier locally.
    2. Resume the same pairing identity; do not create a replacement pairing.
    3. Build/materialize current-main DevSpace generation with merged fix: lock direct-dispatch admission regression #397.
    4. Durable cutover/restart to the exact build.
    5. Fresh/reconnected direct-dispatch live canary proves:
      • no credential => fail closed;
      • exact approved carrier rebind via work_resume_prepare(..., carrierCredential) => succeeds;
      • exact replay preserves same work/lease identity;
      • positive agent_start admission works with effectHandle == attemptKey.
    6. Only after that live generation proof close P1: restore approved carrier rebind on fresh direct-dispatch admission #402.

    Disposition:
    SOURCE_FIXED / LIVE_RUNTIME_STALE / OWNER_APPROVAL_REQUIRED_BEFORE_DEPLOYMENT.

    AUTO_CHAIN=false.

  5. james3014-nexus-agent commented on Oct 16, 2026

    @james3014-nexus-agent

    Closing as superseded — the tool surface this Issue repairs no longer exists (2026-10-16)

    Fresh check on devspace main e1caddf (2026-10-16):

    So the "fresh session cannot rebind an approved carrier before work_resume_prepare" dead end cannot occur on current main; there is nothing left to rebind. The source repair (#397) is moot rather than pending a canary.

    Disposition: SUPERSEDED_BY_SURFACE_REMOVAL_AND_C4 (#471). Reopen only if a Carrier-gated writer admission tool is reintroduced.

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

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions