Skip to content

Expose attach-negotiated daemon session capability proof #17

Closed

Description

@rynfar

Purpose

Expose a public, generation-scoped proof of attach-negotiated daemon client capabilities. This is required before Comet can use correlated_prompt_lifecycle_v1, and it should repair Pylon's current server-offer shortcut at the same shared SDK seam.

Coordination:

Current gap at 7238ac8cff25962ada9ffe4530b7d4d1cddc1b47

  • DaemonClient.supportsServerCapability("correlated_prompt_lifecycle_v1") proves only the daemon_hello offer.
  • DaemonAgentConnection.attach() conditionally advertises the matching client capability.
  • DaemonAttachResult.client.capabilities contains the daemon-established attach-side set, but the public connection does not expose it.
  • DaemonAgentConnection.supportsCorrelatedPromptLifecycle() currently delegates to the server offer.
  • Pylon computes correlatedPromptLifecycleAvailable from the same offer before attach.

A server offer is not a negotiated intersection. Method presence, package version, ignored options, or a successful attach without validating its returned client capability are not substitutes.

Proposed contract

  • Add frozen public-root PRIME_AGENT_SDK_FEATURES token negotiated_daemon_session_capabilities_v1.
  • Add public DaemonAgentConnection.supportsNegotiatedCapability(capability: DaemonClientCapability): boolean.
  • Return true only after the current attached generation has:
    1. the matching validated server offer;
    2. the capability in the exact attach/reattach request; and
    3. the same capability in the validated DaemonAttachResult.client.capabilities for this connection/client/generation.
  • Return false before attach, during invalidation/replacement, after dispose, and after any failed or ambiguous reattach until the new generation is proved.
  • Reject malformed, duplicate-conflicting, unsupported, wrong-client, or wrong-generation attach capability data rather than treating it as proof.
  • Keep supportsCorrelatedPromptLifecycle() as server-offer evidence because the SDK currently uses it before attach to construct the advertised capability list. Document that it is not a negotiated proof; consumers must use the new accessor after attach. Do not make the pre-attach method false or negotiation would never start.
  • Commit the negotiated set only after attach identity and snapshot validation succeeds, not merely when the raw attach response arrives.
  • Return a boolean only. Do not expose client IDs, session IDs, paths, raw attach results, or mutable capability collections.

The exact public name is proposed for review. If a different generic accessor is chosen, it must preserve these semantics and the frozen feature token.

Compatibility

  • Protocol v7 foundation behavior stays compatible.
  • Stock Prime and older fork artifacts omit the new SDK token/accessor and remain detectable before prompt construction.
  • Existing attach capability lists and server offers do not become mandatory globally.
  • Pylon must enable correlated lifecycle only from the post-attach proof. Its ordinary-prompt fallback may remain Pylon-local.
  • Comet will fail its prompt feature gate and cleanly close the fresh owned session when proof is unavailable. It will not fall back to an uncorrelated prompt.

Deterministic tests

  • token exported and public root frozen;
  • offer without attach request/response proof => false;
  • method/options presence without token => incompatible consumer gate;
  • attach request plus missing/invalid/wrong-client response capability => fail/false;
  • exact offer + advertised + echoed capability after successful attach => true;
  • attach failure/cancellation, dispose, replacement, reattach failure, and stale old-generation result => false;
  • reattach can re-establish proof only for the new exact generation;
  • concurrent event-before-attach-response cannot use correlated behavior early;
  • stock/current compatibility matrix;
  • no native client/session identity appears in public errors or logs.

Upstream overlap decision

Current upstream/main@a903d4b6768f484bd6d459b7b0aa7dee38e461e2 has no correlated prompt lifecycle or negotiated-capability accessor. Decision: retain this small fork-boundary proof and record the evidence in .pylon/features.yaml and .pylon/upstream-review.md.

Merge bar

Update the fork ownership ledgers, run exact stock/current compatibility tests, build a reproducibly hashed artifact, and review the Prime/Pylon/Comet consumer assumptions together. No consumer may infer this proof from versions, method presence, server offers, or attach success alone.

Activity

  1. rynfar commented on Aug 30, 2026

    @rynfar
    Author

    Consumer issues are now explicit:

    Merge order is Prime #17 API/artifact, Pylon PrimeIntellect-ai#190 compatibility update, then Comet #7. The existing supportsCorrelatedPromptLifecycle() must remain offer evidence for pre-attach request construction; only the new accessor is the post-attach proof.

  2. rynfar commented on Aug 30, 2026

    @rynfar
    Author

    Claimed for implementation.

    • branch feat/negotiated-session-capabilities
    • isolated worktree /Users/rynfar/.prime/worktrees/prime-negotiated-session-capabilities
    • base origin/pylon@7238ac8cff25962ada9ffe4530b7d4d1cddc1b47
    • decision: retain the fork-boundary proof; upstream has no equivalent

    Declared owned files before edits:

    • packages/coding-agent/src/modes/agent-connection/daemon-agent-connection.ts
    • packages/coding-agent/src/modes/agent-connection/types.ts only if the public interface needs the accessor
    • focused agent-connection tests
    • packages/coding-agent/src/sdk-features.ts and public export tests
    • .pylon/features.yaml
    • .pylon/upstream-review.md
    • focused docs only if required by review

    No Pylon or Comet consumer code is owned by this branch. I will not push or open a PR until exact-head tests and independent P0/P1 reviews approve.

  3. rynfar commented on Aug 30, 2026

    @rynfar
    Author

    Pre-commit security review found that the proof also needs a transport-generation and shared-client invalidation seam. I am expanding the declared owned area before edits to include:

    • packages/coding-agent/src/modes/daemon/daemon-client.ts
    • its focused tests

    Reason: resetTransportForReconnect() can replace the physical socket without notifying connection close listeners, and multiple logical DaemonAgentConnections may share one DaemonClient. The proof must bind to the physical transport generation and fail closed when another same-session logical attachment mutates or detaches the shared server state. This remains within Prime #17; no wire capability or consumer code is added.

  4. rynfar commented on Aug 30, 2026

    @rynfar
    Author

    Ownership update after exact-head review findings.

    The repair remains isolated on feat/negotiated-session-capabilities / /Users/rynfar/.prime/worktrees/prime-negotiated-session-capabilities. The exact owned candidate scope is now:

    • .pylon/features.yaml
    • .pylon/upstream-review.md
    • packages/coding-agent/.changes/negotiated-daemon-capability-proof.md
    • packages/coding-agent/docs/agent-connection.md
    • packages/coding-agent/docs/sdk.md
    • packages/coding-agent/src/modes/agent-connection/daemon-agent-connection.ts
    • packages/coding-agent/src/modes/daemon/daemon-client.ts
    • packages/coding-agent/src/sdk-features.ts
    • packages/coding-agent/test/agent-connection-daemon.test.ts
    • packages/coding-agent/test/daemon-client.test.ts

    The first committed candidate 7c68a7ab4 is retired after exact review withheld approval. The active repair adds synchronous pending invalidation, permanent fail-closed admission, attach-proof fencing for correlated runtime frames, negotiated rather than offered resync shaping, docs, and the required changelog fragment. No Pylon or Comet consumer code is owned here. I will freeze a new commit only after renewed local validation, then require new exact-head P0/P1 approvals before push/PR.

  5. rynfar commented on Aug 30, 2026

    @rynfar
    Author

    New frozen local candidate after the first exact-head review repairs:

    • HEAD a0233b09cb18d6b0ec53e0f1514144f0564e2223
    • tree 779b5fabe8e0e637c485ee2e6db86d881df2df2b
    • base 7238ac8cff25962ada9ffe4530b7d4d1cddc1b47
    • exact receipt SHA-256 b3e6d4716efcfea6897edfdb24179675955e0e578dfd248e94fdf72454233943
    • cumulative patch SHA-256 c84858519b6c8cf9715feb180babadde7f9fc709a3929a6a2e3a9905a812f3c3

    Renewed validation at this exact head:

    • focused daemon connection/client tests: 183/183 passed
    • root build: passed (live generated model catalog restored afterward)
    • npm run check: passed
    • clean real supervisor process suite: 13 passed, 8 fixture-gated skips
    • git diff --check: passed

    This candidate adds the review-requested same-stack invalidation, permanent fail-closed admission/proof fence, bounded correlated runtime-frame hold/release/discard behavior, committed-echo resync shaping, shared-client retained-shaping invalidation, SDK docs, and changelog fragment. Three independent exact-head reviews are in progress. The branch remains unpushed and no PR will open until every P0/P1 gate approves.

  6. rynfar commented on Aug 30, 2026

    @rynfar
    Author

    Third frozen exact candidate (local; not pushed)

    The two blockers on retired a0233b09 are repaired in a new clean candidate:

    • commit: 6a4e19f974390e2051010461bd28a609420ffdf3
    • tree: 9a4138f13a4164f0c164bfa31bfd683567749704
    • base: 7238ac8cff25962ada9ffe4530b7d4d1cddc1b47
    • cumulative patch SHA-256: e914158d80a2fca5d2d8ad99d900bd6c26740a3272f9476a6b2089daff4beb4f
    • repair-commit patch SHA-256: a3c33f9f631b14f6d747b891499f15e2207a6cda6867227a09262357d6c56021
    • validation receipt SHA-256: 2c1cf52037ac2995e7faf108397548b2f32f98a61800af6485c3d70ef9ec65b2

    7c68a7ab4 and a0233b09 remain retired and withheld.

    Repairs

    • Every same-connection attach/reattach admission now captures a synchronous monotonic token. Queued or active older operations must retain the exact token through retry and final commit, so B cannot publish while later C is pending.
    • Pre-proof correlated runtime retention is bounded by both 128 frames and 256 KiB cumulative conservative structural weight. Accounting is iterative, does not stringify/copy payloads, and rejects unsafe, cyclic, individually oversized, or cumulatively oversized values before retention.
    • Queue and weight reset together on publish, discard, invalidation, failure, transport loss, and disposal. Overflow clears all retained frames and emits only the fixed payload-free fail-close error.
    • Replacement lifecycle shaping is rechecked after its async query against the exact invalidation revision and shared owner; a concurrent shared-client capability mutation strips stale shaping.
    • Explicit DaemonClient.close() is terminal owner disposal: later connect() rejects and a live connection emits one fixed close instead of invoking recovery.

    Exact-tree validation

    • focused connection/client suites: 190/190 passed;
    • root build: passed; generated catalog restored; clean tree;
    • root check, installer render, browser smoke, typecheck, and git diff --check: passed;
    • stock 0.8.1 ↔ rebuilt-current real runtime adoption: 2/2 passed (installed 0.8.1 launcher SHA-256 c5dffcd16a401551986023134fbc05457775e1eeed618a5a6ae0d0cee1772d5f);
    • six isolated real-process files: 79/79 passed;
    • real supervisor suite: 13 passed, 8 fixture-gated skips;
    • rebuilt namespace: frozen [bounded_daemon_ingress_v1, negotiated_daemon_session_capabilities_v1] plus accessor;
    • stock 0.8.1 namespace: no registry token and no accessor.

    Fresh exact-head API, security/resource, and test/repro reviews are running. I will not push or open a PR unless all P0/P1 gates approve this exact head without modification.

  7. rynfar commented on Aug 30, 2026

    @rynfar
    Author

    Candidate 6a4e19f97 retired

    Exact-head test review found a same-connection replacement race before approval:

    1. an active-A session_replaced handler waits in getPromptLifecyclesFor();
    2. the same connection reattaches and commits target B with valid proof;
    3. the old A query resumes;
    4. the candidate strips stale lifecycle shaping but still commits A state/messages and route identity;
    5. proof can remain true for B while later commands route through stale A identity.

    The second-connection stale-shaping test did not cover this same-connection proof/route divergence. 6a4e19f97 is withheld and will not be pushed. The next candidate will discard the entire old handler when its exact same-connection attachment admission, epoch, transport, or route identity changes, while still allowing a peer-only shared-client capability overwrite to commit unshaped A state. A deterministic gated A-query → committed B-reattach test will prove the route and proof stay aligned.

  8. rynfar commented on Aug 30, 2026

    @rynfar
    Author

    Fourth frozen exact candidate (local; not pushed)

    The accepted blockers on retired 6a4e19f97 are repaired in a new clean candidate:

    • commit: 192d9be71eb04375f181bad53ab8f746ca9053a7
    • tree: 916c18de386830f11b635cb1d08644b853f2a5b1
    • base: 7238ac8cff25962ada9ffe4530b7d4d1cddc1b47
    • cumulative patch SHA-256: 0a3ca5e16bb4d52e29a5a8dd0e7c7b99632f0207bc93efab34a400e8b15bdbe3
    • repair-commit patch SHA-256: 46ddfe0a0bf0efc7dac558e5cfd281f8374ede84af23529d22ecacd073fe0682
    • validation receipt SHA-256: 436f520eb728a2c612c5c18138b886d97a94ac61631645f7510c84b1f7dddc0f

    All three earlier candidates remain retired and withheld.

    Additional repairs

    • A nonchunked replacement query captures the exact same-connection admission, attachment epoch, active route, transport generation, terminal/update, and disposal state. If any changes while lifecycle recovery is awaited, the entire old handler is discarded. It cannot commit stale A state after B reattach. A peer-only shared-client overwrite may still commit A's unshaped replacement because A's route did not change.
    • The first explicit DaemonClient.close() transition now notifies listeners even when a prior natural transport loss already removed the socket. Repeated close stays idempotent and later connect stays rejected.
    • Normal and update recovery loops wake on owner close and check terminal state before and after every restart/connect/reconnect/list/attach/snapshot await. An already-running callback is not cancellable, but its result is discarded. No later recovery work or connected event can publish.
    • Owner close produces one fixed public connection error with no raw socket/log path. Natural-loss plus socketless owner-close tests cover both ordinary and update recovery.
    • The public close lifecycle is now included in the release fragment as well as SDK docs and governance ledger.

    Exact-tree validation

    • focused connection/client suites: 195/195 passed;
    • root build, root check, installer render, browser smoke, typecheck, and cumulative git diff --check: passed;
    • stock 0.8.1 ↔ rebuilt-current runtime adoption: 2/2 passed;
    • six isolated real-process files: 79/79 passed;
    • real supervisor suite: 13 passed, 8 fixture-gated skips;
    • current namespace exposes the frozen token/accessor; installed stock 0.8.1 exposes neither;
    • exact worktree is clean.

    Fresh API, security/resource, and test/repro review is running against this exact head. It remains local and unpushed pending unanimous P0/P1 approval.

  9. rynfar commented on Aug 30, 2026

    @rynfar
    Author

    Candidate 192d9be71 retired

    API and test review independently confirmed a chunked-replacement fence P1:

    1. A receives session_replaced { snapshotFollows: true } but no snapshot begin/chunks.
    2. The same connection reattaches or reconnects and commits B with valid proof.
    3. pendingChunkedReplacement still owns the dispatch fence.
    4. Every non-snapshot B frame is queued before active-route filtering, including session_closed.
    5. B proof can remain true after B closes, and the stale queued-message list is unbounded.

    192d9be71 is WITHHELD and will not be pushed. The repair will synchronously retire/discard the old header and queued frames on attachment admission and physical transport loss, before any new proof can publish. Deterministic header-only A → B reattach and A → socket recovery tests will require B runtime events and close invalidation to flow immediately.

  10. rynfar commented on Aug 30, 2026

    @rynfar
    Author

    Fifth frozen exact candidate (local; not pushed)

    The stale chunked-replacement blocker on retired 192d9be71 is repaired:

    • commit: 63c946d3064b2b262bb0ed727da9d5b363cf3daf
    • tree: f4ff15eb6067dd62a6b3670ceb28705c0bb1ae81
    • base: 7238ac8cff25962ada9ffe4530b7d4d1cddc1b47
    • cumulative patch SHA-256: 2992dc6707698732f6d176819193234b02176f5efbbdf8e39dd74d5da0836482
    • repair-commit patch SHA-256: e6d0d95ecda43945591907940bf5df7af3da98b48b0aed34436382f30a1d02e4
    • validation receipt SHA-256: 06e713064fd17211583cb690f3971a2563fedbb73d89824947a43fe20925ff35

    All four earlier candidates remain retired and withheld.

    Additional repair

    • Same-connection attach/reattach admission synchronously retires an old chunked-replacement header and its queued frames before promise-tail scheduling.
    • Attachment-epoch changes, physical transport loss, disposal/fail-close, and a matching session_closed also retire the old fence.
    • A begun old assembly is rejected and removed. A delayed old snapshot begin/chunk/end is ignored until a fresh attachment commits, so it cannot race a gated B reattach.
    • Chunked-replacement queued frames now have independent 128-frame and 256 KiB cumulative structural-weight limits. Overflow drops the fence and emits the fixed payload-free fail-close error.
    • Peer-only shared-client attachment does not retire another logical connection's route-local fence; its frames remain bounded and lifecycle shaping remains proof-gated.

    New deterministic coverage

    • header-only A fence → gated B reattach;
    • delayed old A begin/end while B response is pending;
    • old A queued event discard and fresh B event delivery;
    • B session_closed immediately invalidates B proof;
    • header-only A fence → physical reconnect and fresh event route;
    • matching A close bypasses/retires its own fence;
    • cumulative chunk-fence memory overflow below the count cap, with no payload canary leak.

    Exact-tree validation

    • focused connection/client suites: 199/199 passed;
    • build/check/typecheck/installer/browser/diff: passed;
    • stock 0.8.1 ↔ rebuilt current: 2/2 passed;
    • six process files: 79/79 passed;
    • real supervisor suite: 13 passed, 8 fixture-gated skips;
    • namespace stock/current gates passed; worktree clean.

    Fresh exact-head API, security/resource, and test/repro review is running. The candidate remains local and unpushed pending unanimous P0/P1 approval.

  11. rynfar commented on Aug 30, 2026

    @rynfar
    Author

    Candidate 63c946d30 retired

    API review found one remaining delayed-transfer P1. The retirement mode ignored a delayed old session_snapshot_begin, but a pre-begin session_snapshot_failed { purpose: "replacement" } with a fresh ID could still create an assembly and start internal A snapshot recovery. That internal A attach becomes a newer admission and can supersede the already-admitted gated B reattach.

    63c946d30 is WITHHELD and will not be pushed. The next candidate will:

    • ignore an unsolicited failed snapshot ID while retired-transfer discard mode is active;
    • still admit a before-begin failure that belongs to the exact current requesting/receiving attach attempt;
    • bind that admitted failure to the request attempt so it fails that attempt instead of starting unrelated runtime recovery;
    • extend the deterministic header-only A → gated B test with delayed pre-begin A failure and prove no internal A attach occurs.
  12. rynfar commented on Aug 30, 2026

    @rynfar
    Author

    Sixth frozen exact candidate (local; not pushed)

    The delayed failure-before-begin blocker on retired 63c946d30 is repaired:

    • commit: a62f1dd01b363531f7a2768f702901b911fd6228
    • tree: 3ddcef77d306bf934a84e9638f699d06249ef7a4
    • base: 7238ac8cff25962ada9ffe4530b7d4d1cddc1b47
    • cumulative patch SHA-256: 223f60510341d174397bb7b087525367211be8e77732a6458f040d3583f6e5af
    • repair-commit patch SHA-256: 510c09dd74204023c74e0a210f7d760f2adffdab9a57f713c51ebc732a8dd864
    • validation receipt SHA-256: bd6b5dab53d84ff3e2beeb04ee64389079374b61d21c032d545135943fbafba0

    All five earlier candidates remain retired and withheld.

    Additional repair

    • In retired-transfer discard mode, a fresh-ID session_snapshot_failed is ignored unless it belongs to the exact current requesting/receiving attach attempt.
    • A legitimate failure-before-begin for the current attempt creates an assembly bound to that request attempt. It fails/retries that attempt rather than starting unrelated runtime replacement recovery.
    • The gated A-header → B-reattach regression now injects delayed A begin/end and delayed fresh-ID A failure. It proves no internal A attach is admitted, then B alone commits, proves, receives runtime events, and closes.
    • A separate current-attempt failure-before-begin test proves normal retry and cleanup with no runtime snapshot attempt.

    Exact-tree validation

    • focused connection/client suites: 200/200 passed;
    • build/check/typecheck/installer/browser/diff: passed;
    • stock 0.8.1 ↔ rebuilt current: 2/2 passed;
    • six process files: 79/79 passed;
    • supervisor suite: 13 passed, 8 fixture-gated skips;
    • namespace gates passed; worktree clean.

    One inherited nonblocker remains explicit: aggregate runtime snapshot-attempt IDs and attach assembly/chunk storage retain the pre-existing snapshot-transfer behavior. Consumers still block arbitrary saved-session attach pending a cumulative snapshot budget; this candidate adds no broader saved-session acceptance.

    Fresh exact-head API, security/resource, and test/repro review is running. The candidate remains local and unpushed pending unanimous P0/P1 approval.

  13. rynfar commented on Aug 30, 2026

    @rynfar
    Author

    Candidate a62f1dd01 retired

    The final exact-head reviewer found the general form of the delayed failure race. Even without a retired chunked-replacement header, a gated same-connection B admission leaves route identity temporarily at A. A fresh explicit-purpose A session_snapshot_failed with no current A request attempt could start runtime A recovery, create a newer admission, and supersede B.

    a62f1dd01 is WITHHELD and will not be pushed. The next candidate will add one synchronous latest-admission-in-flight fence for every attach/reattach. While it is active, unsolicited snapshot begin/failure frames are ignored unless bound to the exact current requesting/receiving attempt. Coverage will include no-header A resync failure during gated B admission, in addition to the retired-header cases.

  14. rynfar commented on Aug 30, 2026

    @rynfar
    Author

    Seventh frozen exact candidate (local; not pushed)

    All six earlier candidates are retired. A new clean candidate incorporates the general same-connection admission fence plus replay, terminal/update tail, bounded tombstone, and socket-first close-order repairs:

    • commit: d6ca9b1a314e0ae362b4067d64ed5dfad420dea7
    • tree: f629b3d9d1672ca0ee9ed86ec6d7e9ebf8b60ae7
    • base: 7238ac8cff25962ada9ffe4530b7d4d1cddc1b47
    • cumulative patch SHA-256: b09a94e7c90d1c3455a11d824c410d9872adab87e248b8300ed4f5cde707b8a0
    • repair-commit patch SHA-256: 6718413661fd2817a728d70c0edb07ab11ead2fbe7ef803d0204ce5f9cfcb87d
    • exact validation receipt SHA-256: 3c998cc3372c70acf3e1277b277624078f59d50ed91712a54047fe578a6ccd3f

    Additional closed races

    • Every attach/reattach admission synchronously fences all outstanding snapshot state, including headerless transfers, before entering the shared mutation tail.
    • Snapshot request attempts carry the exact admission revision. Only the exact current request may reuse a retired ID through a new begin, and request-bound transfers resolve only to that waiter before descriptor validation; they cannot publish an old runtime resync.
    • A failure-before-begin requires an existing assembly, exact active request, or current route-local replacement fence. Explicit purpose alone cannot start unrelated recovery.
    • Retired same-route IDs remain tombstoned after commit and across duplicate terminal frames. The 129th distinct live-transport tombstone permanently fails closed with the fixed payload-free reconciliation error instead of evicting an older ID.
    • Terminal and update session close synchronously retire all ordinary snapshot tails before close/restoration publication.
    • Socket close classifies update before cleanup and brackets dead-transport retirement. Old socket assemblies are rejected without per-snapshot attach recovery, leaving one authoritative owner: update restore, normal reconnect, shutdown, or explicit owner close.

    Validation

    • focused connection/client suites: 211/211 passed;
    • independent copied adversarial mutations: 7/7 passed before freeze;
    • root build, npm run check, commit hook, YAML, and cumulative diff check: passed;
    • pinned stock/current adoption: 2/2 passed;
    • six isolated process files: 79/79 passed;
    • supervisor process suite: 13 passed, 8 fixture-gated skips;
    • current/stock namespace probes passed; exact worktree is clean.

    The inherited aggregate snapshot-attempt ID/assembly/chunk storage caveat remains separately recorded. This candidate neither expands arbitrary saved-session attach nor removes the consumer-side cumulative-budget block.

    Fresh exact-head API, security/resource, and test/reproduction reviews are running. The branch remains local and unpushed pending unanimous P0/P1 approval.

  15. rynfar commented on Aug 30, 2026

    @rynfar
    Author

    Candidate d6ca9b1a3 retired

    The exact test reviewer found a message-first close-order gap at the full tombstone budget. dispatchDaemonMessage() retired a matching pending chunked replacement before handleDaemonMessage() marked terminal/update ownership. The retirement's new ID therefore triggered generic permanent fail-close at capacity, and the same message then emitted the authoritative close, producing two terminal events.

    d6ca9b1a3 is WITHHELD and will not be pushed. The next candidate will classify a matching session_closed synchronously before pending-fence retirement and will add full-budget message-first killed, shutdown, and update coverage with exactly one authoritative lifecycle outcome.

  16. rynfar commented on Aug 30, 2026

    @rynfar
    Author

    Eighth frozen exact candidate (local; not pushed)

    All seven earlier candidates are retired. The new clean head closes the full-budget message-first pending-fence ordering, duplicate lifecycle ownership, and direct post-close publication gaps:

    • commit: c27e1b6ea329aabe19ec70f768bcbf37c79a6bef
    • tree: 45af0b9ce0199c3be5bffdde9c787eec06f82dd8
    • base: 7238ac8cff25962ada9ffe4530b7d4d1cddc1b47
    • cumulative patch SHA-256: f90ba348f023e64394526f4b72856201c842630c19a3073d12889a007628ed89
    • repair-commit patch SHA-256: 120f4d048a0cfbc56b5ac2ddfd676b5425723966fec8fb5b50cd624de16f946a
    • exact validation receipt SHA-256: 9980023b70a6d70bf146bd077dcbe97209819a20443df05f0f032de1015b14ba

    Additional repair

    • A matching message-first session_closed uses a short retirement-only bracket before a pending chunk fence can touch the full tombstone budget.
    • The handler atomically grants one first terminal or update owner. Duplicate and contradictory close frames still retire residual state but cannot emit or reconnect twice.
    • Full-budget pending-replacement killed, shutdown, and update paths now have exactly one authoritative lifecycle result.
    • Direct session_replaced and session_resynced frames use the complete lifecycle fence after exact target-invalidation checks. They cannot publish after terminal close, during update recovery, during disposal, or from old A while inline/streamed B admission is pending.
    • Target-B invalidation during reattach still fails closed before the suppression guard.

    Validation

    • focused connection/client suites: 219/219 passed;
    • requested pre-freeze adversarial mutations: passed; exact repair bytes approved with no P0/P1;
    • root build, npm run check, commit hook, YAML, and cumulative diff check: passed;
    • pinned stock/current adoption: 2/2 passed;
    • six isolated process files: 79/79 passed;
    • supervisor process suite: 13 passed, 8 fixture-gated skips;
    • namespace probes passed; exact worktree clean.

    The inherited aggregate snapshot-attempt ID/assembly/chunk storage caveat remains separately recorded. Arbitrary saved-session attach remains consumer-blocked pending its cumulative snapshot budget.

    Fresh exact-head API, security/resource, and test/reproduction reviews are running. This head remains local and unpushed pending unanimous P0/P1 approval.

  17. rynfar commented on Aug 30, 2026

    @rynfar
    Author

    Exact-head review gate passed: ready for hosted CI

    The unchanged eighth candidate has unanimous independent approval:

    • exact commit: c27e1b6ea329aabe19ec70f768bcbf37c79a6bef
    • exact tree: 45af0b9ce0199c3be5bffdde9c787eec06f82dd8
    • cumulative patch SHA-256: f90ba348f023e64394526f4b72856201c842630c19a3073d12889a007628ed89
    • repair patch SHA-256: 120f4d048a0cfbc56b5ac2ddfd676b5425723966fec8fb5b50cd624de16f946a
    • validation receipt SHA-256: 9980023b70a6d70bf146bd077dcbe97209819a20443df05f0f032de1015b14ba

    Formal results:

    • API/contract: APPROVE, no P0/P1;
    • security/resource: APPROVE, no P0/P1;
    • exact test/reproduction: APPROVE, no P0/P1/P2.

    The worktree is clean and the exact identities were rechecked immediately before push. All seven earlier candidates remain retired. The branch may now be pushed and a PR opened for trusted hosted CI. Merge remains gated on green exact-SHA CI and unchanged review scope.

  18. rynfar commented on Aug 30, 2026

    @rynfar
    Author

    Candidate c27e1b6ea3 retired after hosted CI

    PR #18's trusted exact-SHA run 33310987448 passed build/check, agent-core, AI, TUI, kernel, runtime Python, coding-agent shards 2/3 and 3/3, and process smoke. Shard 1/3 failed two ENG-4656 tests because its cast ResumeDaemonClient fixture did not implement the newly required concrete getTransportGeneration() method. After that first error, local reproduction also showed that the same fake returned a stale fixed client ID/capability list rather than the exact attach request echo now required by the negotiated-proof contract.

    This is a deterministic test-fixture gap, not a production failure, but the exact reviewed head is retired and will not merge.

    The dirty test-only repair:

    • supplies one stable fake transport generation;
    • echoes each attach/reattach request's exact clientId and capabilities;
    • updates the governance ledger with the hosted result.

    Local validation now passes ENG-4656 3/3, focused proof suites 219/219, and complete shard 1/3 1,466/1,466, plus npm run check and diff check. The dirty combined patch SHA-256 is 019a3fe952660303e1e69449d0a5c9479b521f5ecb993093576ce65c69bafb69. Independent pre-freeze review is running before a replacement commit is created.

  19. rynfar commented on Aug 30, 2026

    @rynfar
    Author

    Ninth frozen exact candidate (local replacement after hosted fixture failure)

    Candidate c27e1b6ea3 is retired. The replacement changes only the incomplete ENG-4656 cast fake and governance evidence; production source bytes are identical to the previously approved candidate.

    • commit: d3323e38d7f3d93416819c7f509c67540c14dbcc
    • tree: a07b06e3882d51ede94c4335ac5c6ae81a08b645
    • base: 7238ac8cff25962ada9ffe4530b7d4d1cddc1b47
    • cumulative patch SHA-256: 124ee0fefcdd85c42cf557ab12f5c3cf25573a079d5af411b5f753a5095a4e90
    • fixture/ledger repair patch SHA-256: 019a3fe952660303e1e69449d0a5c9479b521f5ecb993093576ce65c69bafb69
    • validation receipt SHA-256: 9b574b0e4dd9f4bffd84194257d6a8eca6615380670f82b3407e26eb938257fb
    • production diff SHA-256: d59b9f4e265398cccfb25835e29628b40208dfd273b159b8146f654e2174aa10 (byte-identical to retired candidate c27e1b6ea3)

    The fixture now supplies one stable generation for its single non-reconnecting fake transport and returns the exact attach/reattach request's client ID and capabilities. It does not add a production fallback or claim an optional server capability.

    Renewed validation:

    • ENG-4656: 3/3 passed;
    • focused connection/client: 219/219 passed;
    • clean CI-like coding-agent shard 1/3: 1,466 passed, 24 skipped;
    • npm run check, commit hook, cumulative diff check, YAML parse: passed;
    • every other hosted job on the identical production bytes had passed in run 33310987448.

    Two independent pre-freeze reviews approved the exact repair bytes with no P0/P1/P2. Fresh exact-head API, security/resource, and test/reproduction reviews are running. The replacement remains local and unpushed until all three approve.

  20. rynfar commented on Aug 30, 2026

    @rynfar
    Author

    Replacement exact-head review gate passed

    The clean hosted-CI repair candidate has unanimous exact-head approval:

    • commit: d3323e38d7f3d93416819c7f509c67540c14dbcc
    • tree: a07b06e3882d51ede94c4335ac5c6ae81a08b645
    • cumulative patch SHA-256: 124ee0fefcdd85c42cf557ab12f5c3cf25573a079d5af411b5f753a5095a4e90
    • fixture/ledger repair SHA-256: 019a3fe952660303e1e69449d0a5c9479b521f5ecb993093576ce65c69bafb69
    • receipt SHA-256: 9b574b0e4dd9f4bffd84194257d6a8eca6615380670f82b3407e26eb938257fb

    API/contract, security/resource, and exact test/reproduction reviews all APPROVE with no P0/P1; the exact test review also found no P2. Production source bytes remain identical to the previously approved candidate. The branch may be updated for a new trusted hosted run; merge remains gated on every required check passing the new exact SHA.

  21. rynfar commented on Aug 30, 2026

    @rynfar
    Author

    Merged artifact approved for downstream consumers

    Prime #17 merged as 91e13b6798343995291ccca6f523fba81ff96cd6 with tree a07b06e3882d51ede94c4335ac5c6ae81a08b645, exactly matching the reviewed candidate tree.

    Reproducible public artifact:

    • prime-agent-0.8.1.tgz
    • SHA-256: c46497e2870618bb2caa9d59d161fc5abfad27472eec7deff39cfb1380ebe70c
    • size: 9846977 bytes
    • receipt SHA-256: d19206b34b87e001ba5964fecd48e154d78c5d5032901faad0f92dd3fff432b8

    Both independent artifact reviewers approved with no P0/P1/P2. Two additional repacks reproduced all four package hashes exactly. The isolated install matches the public archive 1,436/1,436 files and exports the frozen negotiated_daemon_session_capabilities_v1 token, supportsNegotiatedCapability, and getTransportGeneration.

    This artifact is the pinned input for pylon-code/pylon#190. It supersedes the earlier d6065af7... artifact, which remains suitable only for the pre-proof Comet session-owner milestone.

  22. rynfar commented on Aug 30, 2026

    @rynfar
    Author

    Downstream Pylon consumer PR is open: pylon-code/pylon#191

    It consumes the merged post-attach proof API from Prime #18 and is frozen at exact reviewed head f34744ac774b0570c0608ccc8def509d3ae88ece. Hosted exact-SHA CI is running.

  23. rynfar commented on Aug 30, 2026

    @rynfar
    Author

    Downstream proof consumer pylon-code/pylon#191 merged as 879d3692bfbabefe6aae26417100f035bf759ef1 after all exact-SHA hosted checks passed.

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