Unreleased branch source (windowsProxyCommand, CLI gate unchanged) on a
Windows x64 test host: Windows 10 x64 (10.0.19045), PowerShell 5.1, Node
24.16.0, inbox-path Win32-OpenSSH OpenSSH_for_Windows_9.5p1, LibreSSL 3.8.2
(file version 9.5.4.1), administrator account, dedicated temporary prefix.
No network destination: the generated ProxyCommand program was a compiled
argv-dump ssh.exe that recorded GetCommandLineW, the real UCRT argv
(ucrtbase _configure_wide_argv) and its parent process, then exited, so
the real ssh.exe failed with 255 before any key exchange. -F none and
prefix-only known-hosts files were used.
- 27 of 27 cells matched the source-derived model: 3 dump paths (plain; a
directory with spaces,
',100%,(x) ^&!;,=#$,%PATH% %h %p %%; Unicode/emoji with#) × 3 hops (hop@jump,h_o.p-1@jump.example:2200,hop@[2001:db8::2]:22) × 3 targets (dummyhost, IPv62001:db8::1with-p 2222, and a quotedHostNamecontaining a space and-oProxyCommand=x). The raw command line equalled the percent-expanded value exactly; the UCRT argv equalled the intended hop argv (all hardening options,-W [host]:portas one argument,-- <hop>); the parent was the System32ssh.exeitself, so nocmd.exeran and%PATH%,^&stayed literal. OpenSSH lowercased the configuredHostNamebefore%hexpansion. ssh.cmdand UNC paths were refused withssh_jump_unsupported_ssh_path.- On the same host,
test/ssh-jump-windows.test.ts: 4/4 pass;npm run test:windows: 317 tests, 179 pass, 0 fail, 138 POSIX-only skips, including the nativessh_jump_unsupported_platformrefusal test.fs-ext-extra-prebuiltloaded afternpm ci --ignore-scripts. - Observation, not yet analysed: in this non-interactive SSH session the real
ssh.exe(evenssh -G) did not exit within 15 s when its stdin was a Node pipe or file, and exited promptly with stdin ignored (NUL). The probe therefore used ignored stdin. Windows-client SSH with pipe stdin is not covered by this record; enabling needs that analysis first. - Cleanup: the prefix was removed and no process with the prefix in its path or command line remained.
The probe ran at branch revision 9d54fa3dfbb0c50a1f9624461a43a3f02824706b
(the windowsProxyCommand code is unchanged by later comment and documentation
commits). The probe driver, the argv-dump source and host-identifier-free
results are kept out of the repository as review material, identified by
SHA-256 in the change description. A later correction makes the driver's exit
status depend on every cell, including refusal cells; it was not re-run, and
the recorded cells were all individually successful.
This is evidence for quoting only. Windows --ssh-jump stays refused: no hop
or destination connection, version other than 9.5p1, non-administrator
account, or #131 owned-process-tree cleanup (timeout, overflow, interrupt) was
exercised. Production Windows run() kills only the direct child; #131
leaves tree cleanup as an unselected preparation backend, so cleanup of a
ProxyCommand descendant is not guaranteed and blocks enabling. A stop
there remains an unknown effect with no resend.
#131 Windows tree-cleanup backend and storage guard (preparation, not selected) — source, 2026-10-20 KST
This is a source change on top of main 98074a0fb8c4aa6dbab32203fee79ac8244faf0b,
not a release. Production behaviour is unchanged on every platform. On Windows,
run() still terminates only the direct child; descendants may linger, the
child keeps its full timeout, and no new result field or signal handling was
added.
Review established a design limit for owning a process tree on Windows 10 without native code:
- Descendant ownership cannot be proven. GetProcessTimes creation/exit values are UTC wall-clock instants, not monotonic generations, and Win32_Process ParentProcessId may refer to a reused PID.
- After a clock rollback, a child of an earlier holder of a parent's PID can satisfy any creation-time ordering. Handle-holding fixes only the current identity.
- A sound boundary needs the child created inside a Job object (suspended, assigned, resumed), which Node's spawn cannot do.
The candidate backend reapWindowsTree is therefore kept unselected. It uses
held handles only, holds the visible tree before any kill, and classifies from
the post-hold snapshot only, by UTC creation-time ordering. That classifier is
provisional, not an ownership proof, and is known to be unsound under a clock
rollback. Confirmation requires a post-kill snapshot. Any observed PID swap, or
any vanished, denied or unlisted candidate, makes the result unconfirmed. Only
classifier-accepted candidates are killed. Its tests cover the algorithm and
record the rollback limit as a todo named as an unresolved design limit
(never counted as a pass or skip).
The storage guard is a read-only owner-SID/protected-DACL/reparse inspection
plus a protected private-leaf creator. It is not connected to the handoff
ledger, which still refuses Windows with handoff_storage_unsupported.
Accepting the token's default owner (an elevated administrator's
Administrators) is a weaker, group-wide boundary. Creator precheck, creation
and postcheck are not atomic. Null-DACL, parent-ACL and creator-race handling
remain unqualified while it is unconnected. Like the existing inspection code,
it resolves powershell.exe through PATH rather than a SystemRoot-pinned path.
Checkpoints. Each result belongs to the commit it was run on:
- Full local suite, macOS arm64 / Node 24.16.0, at
3dc405d:- build, test types,
npm run test:package, repository checks andgit diff --checkpassed; npm test, with the pinned Python 1.1.0 reference8ca77cf31254c8287a2593fe484bb30a7dba2727, passed with zero failures.
- build, test types,
- Mutation checks, on the
f06041dtree. Each guard was removed in turn, and every removal made its regression test fail. The eight guards are:- confirm only after a post-kill snapshot;
- doubt on an observed PID swap;
- no earlier-row inheritance for unlisted candidates;
- doubt on gone or denied candidates;
- doubt on unlisted candidates;
- reject a root after an observed exit;
- the creation-time check;
- hold the visible tree before any kill.
- Comment, wording and test-name changes only, at
534d3fb: light checks. - At the final head, the native process-tree fixture was redesigned. Light checks, the focused local files and a Windows rerun of the two new test files cover it (below).
Separately authorized isolated runs used a Windows x64 test host: Windows 10 19045, PowerShell 5.1, Node 24.16.0 x64. The account was an administrator, elevated over SSH. Each run used a dedicated temporary prefix and the host lock.
Runs on earlier heads, with the backend selected or exercised natively, found and fixed:
- a detached helper exited at once;
- PowerShell 5.1 wrapped the JSON path array;
- an elevated administrator's files are owned by Administrators;
- a Node child's job ends its descendants.
Those earlier native backend runs let the classifier terminate processes it accepted on the test host. The final head no longer runs the backend natively: its kills cannot be bounded to fixture identities, and isolated-host approval does not authorize terminating foreign processes.
At f06041d, npm run test:windows and npm run test:package passed on that
host.
Earlier fixture heads, through 534d3fb, started a PING.EXE with a 600 s
lifetime and cleaned it up by PID. A grandchild could therefore have outlived a
run. Afterwards, cleanup was checked only through process command lines
containing the prefix (and later a read-only PING.EXE listing). Those checks
showed nothing, but no actual leak was observed or ruled out beyond them.
From the final fixture onward:
- The child and grandchild have explicit lifetimes: about 25 s for the child
(
run()ends it earlier through its own handle) and about 11 s for PING. - They are never killed by PID; the test only observes PID presence until both are absent, then removes its directory last.
- Unreadable PIDs, or a PID still present or unknown, keep the evidence and fail the cleanup.
- Presence is not identity: a reused PID can look present, and an error other than ESRCH is reported as unknown.
- The mocked helper-transport test is skipped on win32, so a mock that misses can never open its fake PIDs there.
The native tests on Windows are the production baseline and the storage cases; the reruns of the two new files are in the PR.
ACLs of existing paths were not changed; the tests set a protected DACL only on
new leaves inside the prefix. The interrupt behaviour of production run() on
Windows is unchanged and untested here. The following remain unrun: the Windows
CI job (where the native tests are registered), non-admin and non-elevated
cells, arm64 and cold-boot helper latency. No live agent session or message,
policy, service or account change was made.
Source-only follow-up on the published 0.4.0 runtime; no version change.
Native selection is one exact (process.platform-process.arch, native version, source commit, platformOs, storage binding, owner inspection, artifact) table
with no version range, libc/arch fallback or cross-platform inheritance.
Selectable rows are the two historical darwin-arm64 rows. A linux-arm64 /
Codex 0.162.1 / 092d3acd… candidate pinned to the upstream
aarch64-unknown-linux-musl executable is recorded but not activated
(see "Activation decision" below); every Linux tuple is unsupported.
Head history: the live injection below ran with the candidate temporarily
selectable (local build of the later b804115 tree); b804115 and
2f3b35d committed it as a selectable row. Review round 2 found two
identity gaps, and the final head moves it to a non-selectable candidate.
Linux mechanics: owned app-server storage binding reads only that child's
/proc/<pid> (direct child, own group, all UIDs, exe inode, stable start time,
exact canonical paths, deleted descriptors refused); writer owner evidence
also requires /proc/locks to name the lsof owner as the sole exclusive
flock holder (Codex File::try_lock) without changing the generation; the
executable digest is checked within the original deadline.
Evidence on a Linux arm64 test host (kernel 7.0 aarch64, Node 24.18.0, ext4),
recorded in test/fixtures/linux-observation-native-evidence.json:
- Artifact: the user-owned standalone binary's SHA-256
071cbe8d…cabe5equals the executable extracted from upstreamrust-v0.162.1codex-aarch64-unknown-linux-musl.tar.gz(bf3ca271…) and.zst. - Schema:
codex app-server generate-json-schema --experimentalwith empty isolated HOME/CODEX_HOME produced queue/add params/response, item/started and turn/completed hashes and an 84-method notification set identical to the darwin 0.162.1 evidence. - Live injection, separately user-approved, in one new dedicated TUI thread
started by absolute path with
--sandbox read-only --ask-for-approval never(trust via a-coverride;config.tomlunchanged). No other Codex writer was live. The TUI showed an "Update available" menu with "Update now" preselected; it was dismissed with Esc and nothing was updated. - A new thread is not saved (no
threadsrow or history projection) until its first turn; a dry-run first refusedthread_not_yet_persisted. One synthetic bootstrap prompt was therefore typed (turn 1). Whether the earlier Darwin dedicated threads had such a prior turn is not recorded in their evidence. - The first send was refused before effect (
evidence_unsupported,submitted=false): the structural capability check used a version-only lookup that became ambiguous once 0.162.1 had two platform rows. It was fixed (regression test failed on the pre-fix code and passed after; it now uses a hermetic two-platform table) and exactly one approved resend of the same synthetic probe followed. - That send exited 0 with
status=queued,submitted=true,consumptionConfirmed=false, statedelivered, wait satisfied: one matching client-ID row (native item ID different), linked turn, writer generation unchanged and kernel flock holder equal to the lsof owner.handoff statusand an independenthandoff waitexited 0. ACK remainednot_requested; the model's reply was not answered or treated as ACK. Two model turns ran in total. - Cleanup: only the owned tmux session was killed; the codex PID and its
/proc/locksentries were gone, and the private prefix and ledger were removed. The native thread record and Codex's own empty lock files remain; Codex removed one earlier stale empty lock file itself at startup.
Review follow-ups (same date):
- SSH destination requests cannot select a Linux row (
sshDestination: false); a qualified linux-arm64 destination refuses required delivery before effect with zero queue calls and keeps the best-effort ordinary send. Darwin keeps its 0.4.0 destination behaviour. At2f3b35d(row selectable) a Linux-host regression showed the old code entering the row path over SSH and the fixed code refusing; at the final head no Linux row is selectable and the policy is covered by hermetic synthetic-table tests. - Executable digest and procfs binding now run in an owned worker: at the
original remaining budget the supervisor requests termination of the
worker's group and the caller refuses; actual reaping of a worker blocked in
uninterruptible kernel I/O may occur later, when the kernel returns. This is
a refusal-at-deadline guarantee, not a bound on how long a blocked kernel
call takes. The
--procfs-ownerreads run inside the already deadline-bounded writer-probe process. Canonical-pathlstatchecks remain in the caller, as on Darwin. - Retained identity: the generation still binds the lock fingerprint, lsof
pid/uid/command and
ps lstart(1-second resolution). The kernel tick start time and flock holder are checked within each probe invocation, not against the original send, and the TUI writer's executable bytes are not pinned (only the owned queue child's artifact is). PID reuse within the same second by anothercodexthat re-acquires the unchanged lock inode would not be detected. A retained Linux kernel identity needs a ledger-schema field and is a follow-up; generation compatibility was kept. - External review inputs received summaries of the native send/status/wait JSON and generation values, not the raw records; the root review audited the raw private records separately.
Activation decision (review round 2): the row is not activated because (1)
only the owned queue child's executable is digest-pinned, while the original
TUI writer is checked by lsof command/pid/uid and ps lstart, so a
different-version or gnu writer holding the lock beside a pinned musl queue
binary is not distinguished; and (2) the writer's kernel start time is not
retained across send and independent wait. Safely closing (2) needs an
optional private ledger field owned by the ledger, so both are frozen as the
follow-up design in PARITY.md rather than pushed as an unreviewed schema
change. Recorded artifact/schema/injection evidence and the procfs machinery
remain; SSH destination requests can never select a Linux row. The worker
comment now limits its hard bound to the worker's supervisor refusal;
caller-side realpath/stat/lstat stay synchronous with deadline checks
only.
Full suites at the dd21302 source checkpoint (candidate not activated): on
Darwin 27.0 arm64 / Node 24.16 the full npm test (with the pinned Python
reference) passed 400, failed 0, skipped 8 (5 Windows-only, 3 Linux-only). On
the Linux arm64 test host it passed 376, failed 0, skipped 28
(Darwin-qualified and Windows-only), with every Linux-only native case
passing; that run used only fixtures in a private prefix, with no
credentials, model turn or install change. The raw Linux log has no HEAD
marker; it is tied to the checkpoint by the executor's run record. Earlier
checkpoints' counts (b804115, 2f3b35d) are superseded.
Later documentation/comment/evidence-description commits (ffe8afc and the
following one) changed no runtime statement. At those heads only light gates
ran: npm run build, npm run test:types, the related linux-observation,
app-server and metadata-observation tests (80 pass, 0 fail, 3 skipped),
node scripts/check-repository.mjs and git diff --check. No new full-suite,
Linux-host or live-model run was performed at those heads.
Queued/delivered remain distinct from receipt ACK or work completion.
session-peer@0.4.0 is public. Registry checks confirmed latest=0.4.0 and
unchanged preview=0.1.0-preview.1. The publication source is
dde3923efe116f87f38b1639b29b889d2b832e44, merged from
PR #151. Its complete tree
matched reviewed head bfbadfa42513791899fc8d2b5441238bbe5b2c4e.
Exact-main CLI run 39076708873
and CodeQL run 39076708830
passed.
Publication workflow 39077096491
completed successfully on attempt 1 for that exact source. Its Ubuntu preparation
job passed 383 total / 355 passed / 0 failed / 28 skipped; these are the
actual platform-scoped counts, not the macOS preparation counts below. Build,
types, repository checks, reproducible package smoke, isolated installation and
removal, and npm audit passed. The uploaded artifact ID was 12117507059, with
ZIP SHA-256 b4eb62a6c68be0319d5d7013f11d11e9b438866f3a63359cc1808c91cbe61494.
The ZIP digest identifies the artifact container, not the package tarball.
The reviewed, local, Actions, staged and public session-peer-0.4.0.tgz bytes
matched. The public tarball is 321,256 bytes and contains the exact 71-file
allowlist. All 18 packaged Markdown documents matched the publication source.
The release helper validated the exact downloaded artifact rather than a later
rebuild. Package hashes are:
- SHA-256:
84adc8b50ef8f03a2c2170e3c36a97b573f28a6bcbeb7dbc965e16c3b37a57c9. - npm integrity:
sha512-mMNJ118atoflhpFTkf2+DtO7MRf7FQnPK3lKWbq/vd8Xvb5DsjUtAgydIBOcd3Xj9BCYGqM50aFhzUr4dDGHSw==.
Registry signature audit passed. Public attestation subjects matched the exact
tarball SHA-512, and the SLSA payload bound the repository, refs/heads/main,
.github/workflows/publish.yml, source dde3923efe116f87f38b1639b29b889d2b832e44,
workflow_dispatch, and run 39077096491/attempts/1. This was also verified
cryptographically with npm 11.15.0's bundled Sigstore verifier, including the
certificate/transparency material and the exact workflow identity
https://github.com/abruption/session-peer-ts/.github/workflows/publish.yml@refs/heads/main
with issuer https://token.actions.githubusercontent.com. These cryptographic
checks are distinct from merely decoding and comparing the payload. A separate
fresh isolated package installation, CLI/list check and removal passed; no user
installation was replaced.
Fresh authenticated checks confirmed no conflicting pending stage and the
Trusted Publisher's stage-only permission. The user explicitly waived this
release's separate web publish 2FA policy inspection; that policy was not
freshly audited. The protected GitHub npm environment required reviewer
abruption, disallowed administrator bypass, and allowed only main; environment
and repository Actions secret counts were both zero. The environment approval
and final npm 2FA approval were completed by the user. The approved stage was
414547b1-1b55-45dc-a0a4-9ca40407beec. OIDC staging used no token fallback or
protection bypass. Staging success was not treated as publication before registry
verification.
The annotated v0.4.0 tag object is
7aad7bc6400499fbc1c323bd62f2210b3507fc9a, peeled to the exact publication source
dde3923efe116f87f38b1639b29b889d2b832e44.
GitHub release v0.4.0
was published as the latest release. No replacement source was assigned to the
published package or tag.
Publication added no new native/model, remote-host delivery or ACK qualification.
Native observation retains the previously recorded exact Codex 0.160.1/0.162.1
and macOS arm64 scope; explicit operator_confirmed receipts on supported POSIX
ledgers remain separate from automatic ACK collection. Linux observation,
Windows observation/private storage, and authenticated automatic receipt
producer/collector bootstrap remain follow-ups #130, #131 and #132. Queue
acceptance, injection, turn completion and plain replies do not automatically
establish receipt ACK; unknown outcomes never authorize a resend.
The published TS skill remains 0.2.1 at immutable source
0f494cabd05901c03161dc91792dcf89f8e96631, with SKILL SHA-256
8c3520f95e0d6807303be96bfa06df69887ddaf76be05f1905505d0a956820c3.
The separate skill 0.3.0 candidate and finite runtime/profile review do not
publish, install or adopt a new skill pin. Skill finalization and publication
require their separate approval and exact artifact checks.
Preparation source checkpoint 2fc936fa1557fd59ce561446d5239c7030df3d56
uses locally integrated dependency tree d83635d6ed1c668fc33e42754f652c123350ddad
and the 0.4.0 version/baseline/finite skill row. These are local preparation
checkpoints, not publication or a claim that the projected dependency commit is
merged. The release PR records final merged dependency/source SHAs and its own
current-head CI/reviews. Later rebases must preserve the verified runtime/test
tree or rerun affected checks.
The dependencies were subsequently merged in authorized order with exact-head
squash binding and no protection bypass: #106 81d1aece70b414b6aef00641076bd2716f630f6e,
#107 1e788be6b02c414b3c7de5bbad37afc7e293c2ff,
#108 d645a692f8e402dd224691410fa89be502e45383,
#109 be6adb26f844e7158362a8fcd6d379fbe8d46864. Each merged tree matched its
reviewed head. Release preparation was rebased onto that final main; its tree
was unchanged before this documentation addition.
#109 CI39045571298 first failed one macOS Node22 SSH fixture with a pre-queue
app_server_owner_changed; other matrix jobs passed. Local Node24 focused and
parallel diagnostics passed, followed by official Node22.23.3 arm64 focused/full
387/382/0/5 passing checks. The local Node22 path contains spaces, so a private
test-only POSIX/JS shebang adapter preserved exact binary/filename/arguments;
this was not an unmodified CI-environment reproduction or a runtime guard change.
The initial unadapted local run failed because of those invalid fixture
shebangs and is excluded from product diagnosis. The original CI cause remains
unconfirmed. Only failed macOS22/release-gate jobs were rerun once on the same
source; attempt2 passed. Both current-head automatic reviews completed without
findings. The initial failure is not reclassified as an all-green first run.
Final main and preparation-head CI/review results are recorded in the release PR.
On macOS arm64 / Node 24.16.0, npm test (including build and type checking)
passed 389 total / 384 passed / 0 failed / 5 Windows-only skipped. The oracle
is the hash-checked isolated published Python 1.1.0 source
8ca77cf31254c8287a2593fe484bb30a7dba2727; ordinary conformance and pure validator
comparisons do not establish end-to-end runtime parity. Initial preparation
exposed two stale update-notice regex expectations, corrected before the final
passing run. npm run test:package passed reproducible archive checks, isolated
install/removal, and bash/zsh shorthand contract/lifecycle checks. Repository
structure, links/anchors and diff checks passed; npm audit reported zero
vulnerabilities. The CLI reports session-peer 0.4.0 (typescript).
The finite 0.4.0 metadata row retains the three published profiles and the exact
proposed skill 0.3.0/min0.1.0/full0.4.0/probe-help tuple. Complete Draft37 fixture
b8ff909ffc5fe1e5b22c66a5c302be8332a76038 is 20,162 raw UTF-8 bytes, SHA-256
1ae3690cb5d03777bf448cf06496fed27e4a9329deb03741d6d956a3b13c5ed4.
Default/undefined/explicit/outer-inspection and historical/future/malformed
fixtures pass. This is candidate-specific metadata/content review, not a
published skill, content authentication, execution, final whole-byte freeze or
installation-pin adoption. Public skill 0.2.1 source/hash remain unchanged.
Fresh regression evidence covers prepared recipient continuity, encrypted journal/key failures, overlapping wait operations, actual queue-process build mismatch, executable replacement, expired probes and SQLite replacement across the durable guard/final owner check. These use synthetic private homes, owned Node children, scripted/native-shaped protocol peers and actual Darwin lsof against those owned fixture descriptors. No new actual Codex/model/user-session input, remote-host delivery, automatic receipt or ACK qualification was performed. Native observation remains limited to the earlier recorded exact macOS profiles; Linux/Windows observation and automated receipt bootstrap remain #130–#132.
Read-only registry checks on this preparation date found latest=0.3.6, preview=0.1.0-preview.1, 0.4.0 absent, and previous stable integrity matching the new release baseline. No authenticated pending-stage/publisher/MFA audit, publication dispatch, environment approval, final npm approval, tag, release or fleet/global installation was performed. Historical exceptions do not carry forward. Local packaging hashes before this record/final source are not the final release artifact; the PR records exact committed-source artifact checks.
session-peer@0.3.6 is public; verified latest=0.3.6 with unchanged preview=0.1.0-preview.1. Publication source is 27fc741f7dabf075e3d6f19f48f3e71d7bdc27a6, merged from PR #148. The prepared source tree matched reviewed head 526fc9aaa53e674a9bc6882a6dd207c67c402904; exact-main CLI run 38495616148 and CodeQL run 38495616311 passed. Stage-only run 38496584629 completed with protected GitHub npm environment and final user npm approval. Stage ID was c6b468f1-6ac2-4301-80c6-03f16cb36038.
Reviewed local, retained Actions, staged and public tarballs are byte-identical. SHA-256: 510e06ea1e118ceadb4096ec2fe9e564b2832e133aa0a21614d8b12db1764181; registry integrity: sha512-8uR9/x9q2AWp/zfJox0CMgm919M7kxpAjR2vGd/ntuS2AAwQh4ohbDmAtyxLyLoEE8IPsZVEbPKHCChvIJBuoQ==. Every packaged Markdown document (18) matched the reviewed source. Registry signatures and publish/provenance attestations share the archive's exact SHA-512 subject. SLSA provenance binds repository abruption/session-peer-ts, refs/heads/main, .github/workflows/publish.yml, source 27fc741f… and run 38496584629 / attempt 1. npm audit signatures and isolated version-specific install/list/uninstall passed on macOS arm64/Node 24.16.0 / npm 11.15.0. These packaging checks do not qualify new native delivery or ACK behavior.
The annotated v0.3.6 tag object is 0b51f02e7fd19c132a550bcfac4ae795f914f0dd; its peeled source is the publication commit above. GitHub release v0.3.6 is published as Latest. This verification record is a later documentation update; the immutable npm artifact/tag continue to point to the original publication source.
The user explicitly skipped fresh Trusted Publisher mapping and web publish-MFA policy reads for this 0.3.6 publication. Neither setting is claimed as freshly audited. Ownership/pending stages, GitHub environment reviewer/main-only/no-admin-bypass/zero-secret gates were checked; protected environment and final npm approval were completed. No token fallback, settings change or protection bypass was introduced. Runtime and published skill 0.2.1 remain separately managed; Python 1.0.2 reference and preview are unchanged. SSH still requires identical TS versions on both ends. No fleet/global installation, actual native/model send/consumption/ACK test or unshipped 0.4 feature was added.
This patch starts from merged PR #146/main 602cfc09b31ce8aad23e1dd9382a2448a61143f9, whose exact-main CLI38493362484 and CodeQL38493362496 passed. Source/package/banner/current examples are 0.3.6 and its explicit finite row carries the same three skill profiles as public 0.3.5; the published skill0.2.1 source/hash and Python1.0.2 oracle remain unchanged. Draft #106–#109, #82 and #142 are excluded.
Local macOS arm64 / Node24.16.0 validation: npm test193total/188passed/0failed/5Windows-onlyskips; build/types, metadata/guidance, release baseline, repository links/anchors and diff checks passed. The archived Python oracle was verified byte-for-byte against public1.0.2 source 47c23713d0a2a3c11ebde6186afd8c43489b8b65 before conformance tests. Package smoke passed reproducible packing and isolated install/uninstall plus bash/zsh shorthand contract/lifecycle. npm audit reported0vulnerabilities. An initial scoped run had two stale expected update-banner regex failures; both were corrected before the passing final full run. Package hashes before this record was added are not final release artifacts. Exact candidate-source/retained artifact hashes and final CI/review gates are recorded in the preparation PR; this record itself is not publication evidence.
Read-only registry baseline was latest0.3.5, preview0.1.0-preview.1 and target0.3.6absent. Public0.3.5 bytes/integrity/provenance source/run matched the historical publication; those are not fresh publisher/MFA-setting audits. After npm login, pending-stage list was empty and sole maintainer was abruption. The user explicitly skipped the TrustedPublisher lookup for this0.3.6 release. The user separately skipped the fresh web package publish-MFA policy read for this 0.3.6 publication; neither skipped setting is freshly confirmed. Protected environment approval and actual final npm stage 2FA remain required. GitHub npm environment required reviewer abruption, disallowed administrator bypass, allowed main only and held zero secrets, as did repository Actions. No settings/token/protection change, native/model input, actual delivery/ACK, fleet/global install or publication occurred in these preparation checks.
Merged source 5409d0acd4b559c09920a63c5fd7f11fd10f5737 has the same tree as reviewed 6fdf9d65fb0b62cca3801a3733af07add5fb6553. Exact-main CLI38370116243 and CodeQL38370116569 passed. PR #144 automatic Code/Security reviews completed for the matching source tree. Code Review reported a P2 finding on the current unmerged README label; this correction addresses that finding across all four READMEs/guides. No Security Review finding was reported, and no extra review mention was posted. The #140 implementation is included through #144 rather than a separate #140 merge.
Artifact-document review found current, undated README/guide lines calling 0.3.5 unmerged and current skill descriptions still referring to unagreed source proposals. This document-only correction removes those lines, states implemented 0.3.5 source/profile support without claiming registry publication, and preserves historical preparation records, skill publication/pin boundaries, exact-version SSH, Python reference and runtime behavior. Corrected-source/artifact and latest exact-head checks are recorded in correction PR #145. Its initial correction source 6dd52e794c1fa2a092bf56b644a49aa01a95aa2a passed CLI38372744965 and CodeQL38372743145, then Codex review identified two additional P2 documentation findings (remaining undated candidate descriptions and this missing correction link). Those findings are corrected by the follow-up; the linked PR records its new exact source, artifact and rerun gates, while the initial run links remain historical checkpoint evidence. No staging, publication, native delivery/ACK or operations change is performed by this checkpoint.
Base main is afed4a5a8945012faf1b23d52cffecb70470a5b3, plus unmerged Draft #140, checkpoint b917769047db41dedcb4aa1367a1b89915beb000. The preparation changes candidate source/package/banner/current installation examples to 0.3.5 and makes its exact three-profile guard the compiled default. Immutable public 0.3.4 still supports only the two existing profiles; the proposed skill 0.2.1 tuple is not an agreed or published successor.
Companion exact-profile and complete-final-bytes agreement remains pending. The initial inactive-session dry-run was refused without submission. After user activation, a stable-writer dry-run passed and one review request was queued under correlation STS-035-SKILL-PROFILE-REVIEW-20261013-A; consumption, review and agreement remain unconfirmed. #139 remains open. Published skill source 8482cf644507c682915e35c85aa3384c53864906 and SHA-256 00c6fc343fdbeb8f6dc1b1ee1b730f04cef71bbfb08205a7be3559202f1d8804 remain unchanged. Python reference/parity 1.0.2, historical validation and native-effect boundaries remain intact. Draft #106–#109, #82 and #142 are excluded.
Read-only registry verification found latest=0.3.4, preview=0.1.0-preview.1, 0.3.5 absent, and the exact previous stable integrity matching the release baseline. No authenticated publication-settings audit was performed.
Local pre-commit checkpoint on macOS arm64 / Node 24.16.0 / npm 11.15.0: npm ci --ignore-scripts, npm run build, npm run test:types, npm test, npm run test:package, node scripts/check-repository.mjs, npm audit and git diff --check passed. Full tests: 191 total / 186 passed / 0 failed / 5 Windows-only skipped. Focused metadata/release/updates/integration tests passed 47/47 after correcting one notice-regex fixture from current→current to current→future. The verified Python oracle remains 47c23713d0a2a3c11ebde6186afd8c43489b8b65; its vendored compatibility fixture matches byte-for-byte. Package smoke includes reproducible packing, isolated installation/removal and bash/zsh shorthand contract/lifecycle checks. Audit found zero vulnerabilities.
Public registry read at this checkpoint confirmed latest 0.3.4, preview 0.1.0-preview.1, target 0.3.5 absent, and the pinned previous integrity/attestation metadata URL. This is not an authenticated stage/publisher/MFA audit or a new signature/provenance-content verification. Exact committed-source pack/artifact, all packaged Markdown byte comparisons and current-head CI results are recorded separately in preparation issue #143's linked PR, so local pre-commit checks are not substituted for those later gates. Windows native CI must be checked independently; skipped local tests and historical 0.3.4 Windows fixtures are not new 0.3.5 native steering/observation evidence. No live agent delivery/ACK, merge, staging, environment approval, npm 2FA, tag, publication or fleet installation was performed.
After the initial preparation, the companion conditionally accepted the profile direction at dependency #140 head b917769047db41dedcb4aa1367a1b89915beb000; it did not accept release-default validation or complete successor SKILL bytes. The follow-up adds literal compatible-result assertions for default/undefined/outer inspection of all three profiles without changing runtime code. Scoped metadata/guidance tests and build/types checks are separately rerun for this follow-up; their exact counts, source/artifact and current-head CI are recorded in PR #144. Initial 191/186/0/5 full-suite and prior artifact records remain checkpoint-specific. Full content agreement remains pending.
The earlier pending agreement statements above describe their initial preparation checkpoints. Companion Draft #35, source 9db5420b45568dd08fc43d406dbf9ad1952f7891, now provides the complete 13,930-byte skill 0.2.1 candidate, SHA-256 96d5a0d049f8a4d193703af3583b198a91079d44ae373de34e94a54e2296a4d6. Independent full-content/hash comparison and compiled guard/default/undefined/outer-inspection tests support candidate-specific design/content acceptance; see the exact review. This is a test fixture, not a published skill, approved installation pin or final joint publication freeze. Final skill wording/bytes after actual guard publication require another exact review and separate release approval. Published pin8482cf6 remains unchanged. Local scoped tests passed24/24; exact source/artifact/current-head CI and review status are recorded in PR #144. No instruction execution, live delivery/ACK, merge, staging or publication is claimed.
The approved-source prepare run 38193012263 at 1c99b39138c26a5ec08245f78f133d058bc354f0 passed tests/packaging and produced the same bytes as the local archive, SHA-256 a0026b157ca9444931243cb60416ac24ad773bd118425852650e6671a545d773. Independent packaged-document review then found stale current-description text in the skill design and PARITY: the package compiled VERSION was 0.3.4, but those paragraphs still said 0.3.3 and marked the added row as an unreleased proposal without clearly restricting it to PR #134 history.
The artifact documentation gate therefore failed. The workflow was cancelled before protected environment approval: prepare succeeded, publish was cancelled, and no npm upload or public publication occurred. The rejected archive and Actions manifest are retained for comparison; they were not edited in place. The correction describes current source/package VERSION 0.3.4 while explicitly retaining the original PR #134 checkpoint as history. Runtime logic, finite profile values, metadata/pins, release baseline and all other packaged documents are unchanged.
A new reviewed source and artifact require fresh exact-source staging approval. The earlier approved SHA and settings-read exception remain external historical records, not authority to stage changed bytes. No new publication result is claimed here.
Base main: c210ee963741f77153df10038c28e228ea7a902f, merged PR #134. Exact base main CLI 38191285491 and CodeQL 38191285293 completed successfully, including Windows Node 22/24. Draft 0.4 PR #106–#109 and experimental #82 are excluded. This is preparation, not approval to stage or publish.
Candidate source/package/banner/installation examples are 0.3.4. The registry read at this checkpoint was latest=0.3.3, preview=0.1.0-preview.1, 0.3.4 absent; previous stable integrity is the public value recorded below. This read does not establish authenticated pending stages, package MFA or Trusted Publisher settings.
Local macOS arm64, Node 24.16.0/npm 11.15.0:
npm ci --ignore-scripts,npm run build,npm run test:types: PASS.npm test: 190 total, 185 PASS, 0 FAIL, 5 Windows-only SKIP. The first preparation run had 183 PASS/2 FAIL/5 SKIP because two update-notice regexes retained the old current/latest pair. Updating those expectations to 0.3.4/0.3.5 produced the successful final run; no production logic was changed to satisfy them.- Python conformance uses the existing verified
47c23713d0a2a3c11ebde6186afd8c43489b8b65reference. The Python1.0.2 parity pin is unchanged. npm run test:package: PASS, reproducible package and isolated installation/removal, bash/zsh shorthand contract and lifecycle. No global installation.node scripts/check-repository.mjs,git diff --check: PASS.npm audit: zero vulnerabilities.
The physical Windows 24-case synthetic fixture evidence below belongs to the PR #134 correction at version 0.3.3, not to a new physical 0.3.4 installation, live queue/injection or ACK experiment. Preparation will additionally validate its exact committed artifact and current-head CI before review completion; their source/hash results belong in the PR record and are not fabricated here. Publication/environment approval/final npm2FA/tag/fleet operations are not performed by these checks.
The earlier candidate/preparation sections below are dated history, not the
current publication state. npm latest is 0.3.3, preview is
0.1.0-preview.1, and the public 0.3.3 metadata exposes integrity
sha512-5OQ7eUlR5Oy3RHFRoR3FuBkV7LT72dfjfBEbWRCY5wYP7Dz8TmN2jlRPpo2SFHPAwosFc0WIt8Iis/vyHckxRg==
and its registry attestation URL. The existing publication workflow
37907833518
completed successfully at source c0ed30273b9e9c0049df86ae3c38486a94289527.
This follow-up read checks metadata/run identity; it does not redo signature or
provenance authentication and does not publish anything.
An isolated patch checkout based on public 0.3.3 source
c0ed30273b9e9c0049df86ae3c38486a94289527 forwards the native
$LASTEXITCODE from both encoded PowerShell commands. A missing native exit
fails with 1. The strict response validator, version/host-key guards and
one-request/no-resend behavior are unchanged. A separate explicit, unreleased
0.3.4 skill matrix row is tested with validator arguments; package/compiled
runtime version stays 0.3.3.
Physical destination: Windows 10 x64 (10.0.19045), PowerShell 5.1.19041.6456, Node 24.16.0. The client was macOS arm64 / Node 24.16.0. Existing key/trust and fixed BatchMode/StrictHostKeyChecking were used, without configuration changes. All 24 SSH fixture scenarios passed:
- Six synthetic native outcomes, each tested with a legacy launcher control, explicit exit forwarding and the corrected complete local CLI: success/0, refusal/1, refusal/2, complete success/255, malformed/2 and missing stdout/0.
- Native refusal/2 now yields client exit2 with refused/submitted:false. Complete success/255 retains queued/submitted:true and the fixture queueId, with sshTransport failure, client exit1, consumptionConfirmed:false and retryAllowed:false. Malformed/missing outputs remain unknown/submitted:null.
- Nonzero exact-banner preflight (legacy/control/CLI) and mismatched-version preflight make zero request calls. Mixed ordered results through two aliases of the same destination retain success/refusal and call once per entry.
- Missing native executable with no LASTEXITCODE returns1 rather than0.
Raw legacy/forward controls produced identical decoded stdout for the six outcomes; only exit forwarding changed. Message data remained in stdin, not the encoded command or native argv. The disposable native executable emitted synthetic metadata: no actual agent session, Codex queue, model, injection or ACK was invoked. Only the owned remote test directory was written and removed; absence was independently verified. This is Windows-destination evidence, not Windows-client jump support or two-machine/native-agent qualification.
The new portable command/framing regression passed 5/5 with the existing
SSH-response CLI suite. Actual PowerShell regression coverage is also added
to the existing Windows-native contract suite; CI results belong to the PR
head. The first local full-suite attempt used the physical-harness temporary
root, whose type:module package boundary invalidated CommonJS fixture scripts
(149 passed, 36 failed, five skipped). That test-environment error was corrected
by separating the test root; it is not reported as an all-green run.
The next full run exposed two existing exact-command expectations that needed
the new exit-forwarding suffix; those expectations still assert the complete
quoted/hardened command. The final npm test passed 190 tests: 185 passed,
zero failed, five Windows-only skips, including successful build and type
checks. test:package passed reproducible packing, isolated installation and
removal, and bash/zsh shorthand contract/lifecycle checks. Repository/link and
diff checks passed, and npm audit reported zero vulnerabilities. Conformance
used the existing Python 1.0.2 reference at
47c23713d0a2a3c11ebde6186afd8c43489b8b65; the entrypoint, core and compatibility
fixture (19 files) were byte-compared with the exact upstream archive before
execution. No reference repin was made.
Initial PR CI 38187131255 passed the added real-PowerShell exit regression on
Windows Node 22 but failed the following existing SSH contract's absolute
call-count assertion: it inherited the new subtest's log entries. The fixture
now explicitly initializes that existing subtest's own SSH call log; its exact
request-count assertions are preserved. This was test isolation, not a runtime
failure or a CI rerun treated as an unchanged-head success. Final PR-head CI
results are recorded in the PR after the correction.
The user approved qualified macOS arm64 Codex observation and explicit operator confirmation as the limited 0.4.0 scope. #69/#70/#71/#72 remain together. Linux client-ID observation #130, Windows observation/private handoff storage #131 and voluntary receipt producer/authenticated collector bootstrap #132 are Future extensions, not mandatory platforms/collectors for this release. Required unsupported goals still refuse before effect; ordinary queues/manual receipts do not qualify native observation or automated receipt authentication.
The source follow-up updates four-language README/guide scope, API and PARITY without changing runtime or the frozen contract/pin bytes. Dated 0.3.3 preparation evidence is retained; installation examples and explicitly unreleased handoff sections are distinguished. SQLite may evaluate body-bearing cells internally; body/error values are not returned to JavaScript or ordinary output.
Pure-validator cross-runtime checks invoke exact published Python 1.1.0
8ca77cf31254c8287a2593fe484bb30a7dba2727 standalone and canonical handoff
module hashes, never its main/ledger/native CLI/collector. Five tests/45 data
cases passed: 19 accepted examples spanning all seven states, 12 schema/privacy/
ACK/retry negatives, four Python unsupported-observation state projections,
four Claude optional-absence/native-profile cases and six Codex native-profile
cases. Python UUID reason names remain distinct from TS. The first launch lacked
the reference environment (ENOENT), and the next run exposed an incorrect
expected Python UUID reason; both were corrected before the final pass. This is
actual pure-function comparison, not native delivery/receipt/runtime parity.
Focused ACK core/CLI checks passed 55/55 after adding wrong correlation/epoch/ generation and malformed/private-input negatives, byte-identical ledger preservation and positive/duplicate operator confirmation with no native queue. The companion guidance candidate is tracked in session-peer-skill #31. Its named session was inactive at dry-run, so no message was queued and no wake/resume was used. Existing skill metadata/immutable pin are not upgraded by this work.
The SSH handoff suite passed 14/14 on macOS arm64. Three destination-side Codex fixtures cover exact-ID injection, no injection before deadline and queue-response loss, with original preparation binding and at most one queue RPC. These use fake SSH and a scripted native peer, not a new remote/native qualification. The request budget is 15 seconds; the harness has a separate 20-second cleanup limit.
Integrated npm test (including build and type checks) passed 347 tests:
342 pass, zero fail, five Windows-only skips on macOS arm64 / Node 24.16.0.
Packaging and exact-head CI are recorded in PR #109. Tests are separate from the
earlier KR/US real ordinary queues and local native qualification. Issue checklists
and publication approval are separate gates; no merge/release/tag operation is
included here.
CI run 38110140277 at test/docs checkpoint
60895b46d8758c7427b90bc154414bd4d01487e7 failed the macOS Node 22
positive-acceptance/ledger-failure regression: it returned
app_server_owner_changed before the intended persistence failure.
The other platform jobs passed; the release gate failed, so this run is not
all green. CodeQL run 38110137845 passed with no open branch alerts.
The holder remains alive until test cleanup; no holder expiry was found.
The bounded owner probe had four extra Node starts for its fake lsof/ps tools,
in addition to the production 250ms sample interval. This is a fixture startup
burden consistent with the failure, not proof of its precise timing cause.
The fixture now uses static POSIX scripts for lsof/ps and keeps owner evidence as separate raw NUL-delimited data. PID, UID, start identity, changed-owner checks, real lock holder and cleanup are preserved. Production 800ms probe budget, 250ms recheck, refusal behavior and regression assertions are unchanged. No runtime, native qualification or platform-support change is part of this fix. The focused macOS arm64 / Node 24.16.0 delivery suite passed 16/16, including the intended persistence failure and changed-owner refusal. Follow-up full validation and exact-head CI are recorded in PR #109.
The unpublished development checkpoint e83fcffa2dbee33de0694e30b6420d83a128fc5e
was copied explicitly to fresh, private marked test prefixes on two Linux
arm64 hosts. Both ends used that candidate, rather than the public npm package
whose version label is also 0.3.3. Candidate/dependency archive SHA-256 was
aadfd3630b67d905a8f474e305f972c7bf670a99365c62dd53fa83d1e04764da;
each destination verified the hash before extraction. No global installation,
profile, service, SSH trust, native configuration or authentication change was
made. SSH used strict host-key checking, batch authentication and no control
socket. Each private destination ledger was explicitly initialized.
On the first host, Node 24.16.0 / native Codex 0.162.1, the user-authorized
existing session passed saved-thread and unique stable live-writer dry-run
checks. One best-effort correlated send exited 0 with queued,
submitted=true, an optional native queueId and handoff submitted.
Observation and automatic ACK remained unsupported; a later status query
preserved those facts. A requested voluntary reply was not yet received at
this checkpoint; no transcript or queue polling was used to infer receipt.
On the second host, Node 24.18.0 / native Codex 0.159.2, the existing saved
session was inactive and dry-run correctly refused with inactive_writer.
It was neither resumed nor queued through inactive opt-in. A separately owned
read-only test TUI in an already trusted working directory produced READY,
passed unique live-writer dry-run, and received exactly one candidate SSH
submission. The original terminal displayed its requested identification
response. An explicit operator confirmation bound to the original correlation,
ledger epoch and generation was recorded before any separate wait: confirmation
and status exited 0 with acknowledged, assurance=operator_confirmed,
late=false; a subsequent acknowledged wait exited 0 with satisfied and
performed no submission. This is operator attestation, not automated receipt
authentication or native client-ID observation. The test TUI closed and
inspectWriter then reported inactive/absent. Its native test record remains;
no existing native record was deleted.
On both hosts, required --wait-for delivered refused before effect with
evidence_unsupported, submitted=false and retry disallowed. Best-effort
results retained consumptionConfirmed=false; neither queue receipt nor
terminal response changed that field. These are real SSH/native ordinary-queue
checks, not Linux observation qualification: Linux native app-server/client-ID
projection and automatic original-sender SSH ACK bootstrap remain unsupported.
Both marked remote prefixes and their test ledgers were removed with ownership
checks, and their absence was verified. Local evidence retains only the test
results; public descriptions omit host/account paths and session identifiers.
Independent read-only review used Claude Code 2.1.296 with tools disabled and
no session persistence. The first 163,540-byte input timed out after 240 seconds
(exit 143, no response), so it supplied no review evidence. One narrower
104,671-byte retry completed in 268.508 seconds with exit 0, is_error=false
and actual model claude-opus-5-5 (first-party). Its input SHA-256 was
69169aacf2c7f02d6606aebbdb23961e2694a0845e86875f2848469ea97a1718,
unchanged before/after the call. Neither call edited files or ran tests.
The review identified two required corrections: a complete successful preparation followed by SSH failure must refuse the actual send, and a post-submission persistence failure must preserve a verified pending wait instead of losing its identifiers or inventing a terminal record. A stopped wait with the wrong process exit is also discarded without discarding separate native acceptance facts. These fixes and the earlier partial/no-EOF input deadline correction have focused regression tests; subsequent integrated test results are recorded separately. The review input predates those final corrections and is not a whole-final-commit external verification.
A subsequent internal source audit found that failed-wait normalization could
discard the original malformed/missing error before envelope validation. The
regression now rejects that handoff while retaining independently valid native
acceptance facts. The first integrated full run recorded 337 total / 331 pass /
1 failure / 5 skips: a sub-millisecond early probe cutoff attempted to commit a
timeout before its exact monotonic deadline and therefore retained pending
state. The fix waits out only that fractional tail within the existing budget;
it neither extends the deadline nor invents a persisted terminal result. The
corrected run is recorded below.
The corrected integrated macOS arm64 / Node 24.16.0 run used the exact published
Python 1.1.0 export as SESSION_PEER_PYTHON_ROOT and
PYTHONDONTWRITEBYTECODE=1: npm test (build, test:types and all test files)
passed 337 total / 332 passed / zero failed / five Windows-only skipped.
The preceding focused SSH/delivery run passed 27/27. Repository/link/anchor and
diff checks passed; npm audit reported zero vulnerabilities. These fixture
results do not widen the native/platform or actual Windows evidence above.
The first packaging invocation failed its reproducibility check because this validation document was edited between its two packs. That invocation is not a successful package check. Source/document edits were then stopped before the repeat packaging check; its result and the exact-commit artifact are reported in the PR checkpoint separately.
The apparent fanout deadline extension follows the frozen per-destination budget, rather than one aggregate invocation deadline. Each destination keeps one setup/preparation/effect/observation budget with its cleanup reserve; sequential fanout can take their sum. Independent clocks cannot measure SSH transit delay, and an unknown source result may precede a delayed destination effect. No retry is authorized. A rejected dry-run timeout example lacked the required prepared correlation and already fails option validation; it did not require a runtime change.
These are unpublished development checks on isolated, newly created test sessions. They do not establish final whole-commit/full-suite CI or authorize publication. Existing working sessions received no test message. Evidence is bounded to the tested compiled components; later integrated checks are separate.
On macOS arm64 / Node 24.16.0, native Codex 0.162.1, upstream source
092d3acd6bec3e3a14bdc7e7a2810ab628ab759d, was checked against the
version/platform/source and live evidence in
metadata-observation-native-evidence.json.
The production reader matched the original exact client message ID, original
thread and generation before/after observation, and a positively linked
completed turn. Native item ID differed from client ID; neither that turn
completion nor the queue receipt was treated as ACK. The probe returned
bounded IDs/status only, with no body or history API output. SQLite internally
projects metadata from a body-bearing cell; this is not a promise that SQLite
never accesses body bytes.
Actual CLI checks used two additional fresh test threads, one native queue
attempt per thread, with no fallback or resubmission. Both observe-send
commands exited 0 with status=queued, submitted=true,
consumptionConfirmed=false and retry disallowed. A separate delivered wait
on the first thread was satisfied with exact injection evidence; status query
exited 0. Starting that wait before manual confirmation lost provable ordering:
confirmation correctly exited 1 with receipt_order_unprovable, retaining
original delivery facts and performing no requeue.
On the second thread, the operator verified the test-only voluntary response
against the original correlation, then confirmed before starting another
wait. Confirmation and status exited 0 with state=acknowledged,
assurance=operator_confirmed, late=false; a subsequent acknowledged wait
was satisfied and exited 0. This is an explicit operator attestation, not an
automated receipt collector or model identity proof. Automated receipt
capability remains unsupported. All owned test terminals were closed. Native
home test records were retained; no existing native record was deleted.
The fixture records exact compiled component hashes, including
dist/metadata-observation.js SHA-256
4d01dae9a90f4cda3c7b45bf0c126067bff403f345d0d23bc593cc57363e0f83
and dist/handoff-ledger.js
efb46bcd1892ba9eb843a4ae603987f15ce535d942938dfe2c0e98a1343edcb9.
These identify the tested components, not a final integrated commit.
A separate test-only Claude Code 2.1.296 / Opus 5.5 session on macOS arm64 / Node 24.16.0 produced a READY response. Its launch identity, PID and fresh private working directory were checked before each submission. Native Claude assigned a non-null name; nullable names remain synthetic fixture coverage. No tools, commands, file tasks or external messages were requested.
A prepared-ID correlated send and a separate best-effort --request-ack
send each submitted exactly once and exited 0 with status=posted,
submitted=true, consumptionConfirmed=false, handoff state submitted
and retry disallowed. Each produced its own identification-marker response
in the owned terminal. Subsequent status queries retained state submitted,
injectionObserved=false and ACK not_requested/unsupported: a plain
assistant response was not promoted to machine ACK or native observation.
Required --wait-for acknowledged instead exited 1 before effect with
evidence_unsupported, status=refused, submitted=false and unsupported
ACK/wait. Its marker never appeared in the owned terminal. Zero effect is
supported by the pre-effect code/result contract and terminal check, not socket
instrumentation. The terminal closed; its PID and native registry record were
absent. Private workspace, message files and sender ledger were removed.
The tested Claude compiled dist/cli.js SHA-256 was
7195f5bd049bdba7ffbffd1d69473d9b90f9a42646851697e1df149054dc5d1f;
dist/handoff-operations.js was
99e15fbd8ad04e5f28490512b61bf0296b21d96ee787d63d1b8293e905f8665e.
This earlier build differs from the subsequent Codex build; these results
must not be presented as a single final whole-commit run. Default native CLI
authentication was used without reading, copying or recording credentials.
The actual Windows 10 x64 / Node 24.16.0 suite recorded 266 total, 155 passed, 2 failed, 109 skipped. The child failure and enclosing failure refer to one underlying fake-SSH path, not two independent runtime defects. The unsupported native-platform qualification guard selection separately passed 3/3; it does not qualify observation on Windows.
Additional strict/batch SSH diagnostics compiled the repository C# fixture.
Twelve minimal Node/PowerShell child-launch controls passed across standard
stream redirection and window settings; encoded PowerShell exit 0 also
passed. The owned test .cmd --version command instead reproduced
Win32Exception: Access is denied in Process.StartWithCreateProcess, with
both ordinary and isolated HOME/USERPROFILE, including a failure followed by
a successful exit 0 control in the same executable. General process creation
worked; the exact host cause remains unverified. A recent Defender event query
with no matches neither identifies nor excludes a security product/policy.
The real-host SSH fixture gate remains unpassed; fixture CI is distinct
and cannot erase this result. No policy, permission, service, guard or execution
bypass was applied. No real agent/native queue was invoked by these Windows
fixtures. The marked remote diagnostic directory was deleted and its absence
confirmed. No private hostnames, account paths or session identifiers are
included here. Windows native observation, SSH handoff, automated ACK,
restart/crash continuity and other native versions/platforms remain outside
these successful macOS checks.
Further controls on the same Windows 10 x64 / Node 24.16.0 host separated
launcher behavior without changing policies, permissions, services or production
guards. C#/.NET Framework launching PowerShell 5.1 -EncodedCommand reproduced
AccessDenied for both the owned .cmd wrapper and a direct Node version command.
The same PowerShell 5.1 encoded command launched by Node succeeded, as did
PowerShell 5.1 -File, direct cmd.exe /d /s /c, and the already installed
PowerShell 7 alternatives. This identifies a tested launcher-dependent difference;
it does not establish which security product or host setting caused the failure.
The test-only C# fake SSH now delegates to a fixed Node helper, preserving
PowerShell 5.1, -NoProfile -NonInteractive -EncodedCommand, the encoded request,
stdin, stdout/stderr and exit behavior. No execution-policy option or production
fallback was added. The helper's 55-second child limit remains inside the fake
SSH parent's 60-second limit; harness timeout returns 254, not native success.
An isolated copy of checkpoint e83fcffa2dbee33de0694e30b6420d83a128fc5e
with only those three test-file changes passed build/types, the Windows native
contract 9/9, and npm run test:windows: 295 total / 165 passed / zero
failed / 130 skipped. Unsupported native-platform guards separately passed
3/3. This replaces the failed fixture execution path with a validated alternate
test launcher; the original failure record above remains historical evidence.
It neither qualifies Windows native observation/ACK nor proves a real remote
agent send. The final C# fixture additionally requires the exact production
PowerShell prefix and one base64 token. Three real-host controls passed: exact
version command exits 0, a changed option is refused with exit 2, and trailing
whitespace is refused with exit 2. The C# file SHA-256 was
b7845190939d4d915c56d1d072f23f5eeac3447a9994791d0b06ea2f0f147c38.
The final guarded contract repeat and ownership-checked cleanup are reported
in the PR checkpoint. The integrated macOS arm64 / Node 24.16.0 run after these
test-file changes passed build/types and all tests: 337 total / 332 passed /
zero failed / five Windows-only skipped, using the same exact Python 1.1.0
reference export. Repository/diff checks passed and audit reported zero
vulnerabilities. No runtime source or package metadata changed in this follow-up.
Unpublished 0.4.0 development checkpoint: an isolated git archive export of
published Python 1.1.0 commit 8ca77cf31254c8287a2593fe484bb30a7dba2727
was compared with the #69 worktree at d62e813c8146e9832659654a850734fc986fd3d7.
Only the subsequent published-design identity correction was pending; it did
not change the selected list/discovery source. No user's Python checkout,
agent home or saved thread was used. Archive SHA-256:
7243c124398ec3b4cf4541881788dac955247d50949339e5f9f659bbb0d15ff9.
macOS arm64 / Node 24.16.0 / Python 3.15.0 command:
SESSION_PEER_PYTHON_ROOT=<exact-reference-export> TASK_TEMP=<private-fixtures> PYTHONDONTWRITEBYTECODE=1 node --import ./test/fixtures/isolate-env.mjs --experimental-strip-types --test test/conformance.test.ts test/discovery.test.tsResult: 21 tests, 21 passed, zero failed/cancelled/skipped, exit 0 and empty stderr. The private fixture directory was empty after test cleanup. These existing tests compare ordinary listing/discovery projections and exercise synthetic refusal paths; they do not establish full send/handoff/SSH interoperability, native model delivery or ACK. No real native queue, message, receipt, installation, policy or operation change occurred.
The subsequent candidate ordinary reference pin uses this exact release;
test/fixtures/python-reference.pin.json records its scope and selected source
hashes. compatibility-v1.json SHA-256 remains
afd5a0b37562bb6a81afa9c20628bfae0cfe4d1caf9e88db402005fc42aabcd7,
byte-identical to the historical 1.0.2 fixture. Frozen handoff design bytes and
the historical design baseline are unchanged. The earlier 0.3.x validation
records below retain their actual 1.0.2 oracle; the public npm 0.3.3 artifact
is not rewritten. Current integrated CI on the new pin is a separate gate.
After applying the candidate reference-pin changes on the #69 worktree based
on f99417b, npm run build and npm run test:types passed. The same isolated
reference export was used for the conformance/discovery/updates/handoff-contract
selection: 44 tests passed, zero failed/cancelled/skipped, exit 0. The new
source-hash pin checks executed. Update tests use fixture registries and private
caches, not the public registry or an actual installation update. The repository
metadata/link/anchor checker and git diff --check passed. These are candidate
checks before root integration/current-head CI, not a public release or broader
native/ACK validation.
Preparation #128
integrates the still-unmerged dependency heads: documentation #125
d4c91387b8c968d45a822f82b69ff9333f4ae0bf, ordinary SSH #127
8c882fab220ade044d00beb9d23bf6ecb7727bdc, and Draft skill guard #126
f10b97115830d5968ff7a0583dc470643c3cbeda, based on main
b12699e108c0857b029d4b5c72f82414eb64b21c. This is an unpublished
review candidate, not a merged release SHA or publication authorization.
The 0.4.0 handoff/app-server/observer drafts are excluded. Exact companion
successor-profile acceptance remains pending; candidate VERSION=0.3.3
exercises a proposed finite row, not published skill compatibility.
Local macOS arm64, Node 24.16.0 checks at preparation checkpoint
de0472aa6e5ac94d29f227d04dc93671b4d45646:
npm test: 183 tests, 178 passed, zero failed, five Windows-only skips. This command also rannpm run buildandnpm run test:typessuccessfully. Conformance used the existing Python 1.0.2 oracle at47c23713d0a2a3c11ebde6186afd8c43489b8b65; no reference repin.- The release, skill-metadata, updates and multi-host integration selection passed 41 tests before the full suite.
npm run test:package: reproducible package, fresh isolated installation, native dependency loading, bash/zsh shorthand contract, actual fixture version replacement (0.3.3to0.3.3-fixture.1) and removal passed.node scripts/check-repository.mjs,git diff --checkandnpm auditpassed; audit reported zero vulnerabilities.
The first candidate CI run 37886970517 failed its Windows Node 22
same-size metadata mutation fixture: the automatic timestamp change was not
observed while the file was open. The fixture now explicitly advances mtime
and asserts that metadata changed after inspection returns; fixture mutation
errors also propagate outside the reader’s conservative error handler, so
a setup/assertion failure cannot count as expected refusal. No timing sleep
is used. This tests an
observable metadata change, not an atomic snapshot or undetectable writes.
Runtime reader behavior is unchanged. After this test-only correction,
npm run build, npm run test:types and the 15 skill-metadata tests passed
locally. Corrected exact-head Windows/aggregate CI results belong in the PR;
the first failed run is not reported as all green.
The registry baseline was read as latest=0.3.2,
preview=0.1.0-preview.1, and 0.3.3 absent. Previous stable integrity matches
its public record below. Authenticated pending-stage, Trusted Publisher,
package MFA and protected-environment policy reads were not performed for
this preparation. They remain fresh pre-publication gates.
The strict SSH and bounded metadata evidence is fixture/CI evidence described in the dependency design documents. No live agent delivery, ACK, real remote SSH qualification, crash recovery or fleet update was performed here. Local Windows-only skips are not passes; candidate CI and exact post-merge main CI must be reported separately at their own exact heads. Local artifact hashes and current-head CI results are recorded in the preparation PR, without substituting them for an approved Actions publication artifact.
session-peer@0.3.2 was published at 2026-10-07 13:34:36 KST
(2026-10-07T04:34:36.456Z). Verified registry tags: latest=0.3.2,
preview=0.1.0-preview.1 unchanged. Publication source is
f335f07352c842f2f6ceb12bd2ca6274b52f69f7 (PR #112 after #111), with exact-main
CLI run 37570782974 and CodeQL run 37570783335 both successful.
Stage-only Trusted Publisher workflow 37571653938
completed prepare and publish. The approved inputs were exact source above,
version 0.3.2, mode stable-stage; protected GitHub environment approval and
separate npm 2FA approval followed. Stage ID:
2226865d-2dac-4d42-bd4e-2e1c998b9833.
- Retained Actions archive, downloaded staged tarball and public registry
tarball were byte-identical. SHA-256:
a1ded0c99765f25d0570aa8a38e2ccf0c1c4760b3e25de2b1f20f56061b90540. - Registry integrity:
sha512-VNlzBqELXLFI8uCopfEdYrfweIacHeP6dMK32/4vwQJy8fUIKC64c5WCE3IwQVeCTKGMz9mXSxhzZnXmSGMuuA==. - Public publish/SLSA attestation subject digests matched the tarball. SLSA
named the exact source above,
abruption/session-peer-ts,publish.ymland run37571653938/attempts/1. node scripts/release.mjs artifactandverifypassed against the retained Actions artifact: allowlist/version/source/hash, registry integrity/tags, attestation metadata, npm signature audit, fresh isolated installation and removal. All 16 packaged Markdown files byte-matched publication source.- Authenticated stage listing and ownership were checked. Fresh Trusted Publisher permission/package MFA settings reads requested reauthentication; the operator instructed skipping those reads. This is a recorded exception to the settings-read gate for the historical 0.3.2 release, not completion of those reads. No fresh settings confirmation is claimed. Actual OIDC staging, protected environment review and separate proof-of-presence publication are execution evidence; they do not establish the skipped permission or MFA policies. No setting was changed. Future releases require their own policy checks and approvals.
The Windows destination qualification below used published 0.3.1, not 0.3.2 live delivery. Runtime delta in 0.3.2 is VERSION only; no 0.4.0 drafts were included. #20 Windows-client jump and #23 remaining qualification/design follow-ups remain open. GitHub tag/Release and fleet upgrades are not claimed. The preparation checkpoints below describe their dated pre-publication state.
This is an unpublished patch candidate based on main
488ddddac302ba2ad0841061dc8df9187ff6a983. The public stable version is
0.3.1. The 0.4.0 handoff, app-server and observation drafts are not included.
Runtime changes in this candidate are limited to the version marker; remote
validation and deployment documentation do not enable Windows-client jump or
a deploy helper.
Local macOS arm64, Node 24.16.0 checks:
npm test: 151 tests, 146 passed, zero failed, five Windows-only skips; the command also builds the source and checks test types. Conformance used the existing Python 1.0.2 reference checkout at47c2371; no reference repin.npm run test:package: reproducible package, fresh isolated installation, native dependency loading, bash/zsh shorthand contract and A-to-B fixture update/uninstall lifecycle passed.node scripts/check-repository.mjs: metadata, four README/guide contracts, links/anchors and ignore rules passed.
These are candidate checks, not an exact-main Actions artifact or publication verification. Public npm staging and release approvals remain separate.
The dedicated-key SSH authentication, isolated installation and operator checks below used published 0.3.1, not a claimed 0.3.2 release. Destination: Windows 10 Pro x64 build 19045, PowerShell 5.1, Node 24.16.0 (ABI 137), bundled npm 11.13.0, administrator account. All installation, caches, test fixtures and child HOME/TEMP writes were confined to a newly created dedicated test prefix. The account/host was not disposable and was not a non-administrator test. Existing PATH, profiles, SSH server configuration and Python installation were preserved.
Package SHA-256:
ba8b85b03229bc99ca30d52251790d7e75b90551de924b99edce22570f7fa401.
Registry integrity and all three dependency archives matched the lockfile at
6b48092a0e42992d2d970dd2ff5cf457f62d3ff2.
Operator-side signature audit verified four registry signatures and three
attestations; the package SLSA subject digest, source SHA, repository and
publish.yml matched. Upload bytes were checked again before offline install.
- Offline installation used absolute Node/npm paths, separate empty user/global
npm configuration files, empty cache and
--ignore-scripts; installed lock integrities matched the pinned dependency set. - The self-locating
.cmdwrapper returned the exact 0.3.1 banner in staging and afterDirectory.Moveactivation. Native Windows file locking passed. - Operator CLI over SSH used
--host,--remote-platform win32and an explicit--remote-binpointing to the isolated wrapper. Both commands passed the same-version--versionpreflight before--stdio-request. Doctor returnedok:true,diagnosticCompleted:true,ready:false, exit 0; nonexistent-target send dry-runno_reachable_target,status:refused,submitted:false, exit 1. Local wrapper dry-run exit 2 is separate evidence. No actual agent message sent. - Operator checks preceded receipt publication and activation-lock release.
The private Windows storage/recovery fixture matrix returned 31 passed, zero failed, three untested. These are native storage and local-wrapper fixtures; only the primary install additionally has operator SSH evidence.
| Exercised group | Result |
|---|---|
| Absent/empty/file/foreign classification; junction and foreign owner | Expected classifications/refusals |
| Matching receipt reuse; missing receipt recovery under a fresh lock | Passed; original marker runId retained in recovery receipt |
| Corrupt/mismatched/orphan receipt; unsafe receipt DACL/junction | Refused |
| Inconsistent marker; modified manifest; existing target activation | Refused |
| Lock contention; missing owner; wrong/unconfirmed owner; explicit override | Expected refusals and explicit-only recovery |
| Ended-run break followed by fresh-lock reverify; existing receipt preservation | Passed |
| Rollback without positive caller-unused evidence | Refused |
| Confirmed rollback, failed-verification rollback, caller rollback | Passed |
| Configured-install retention refusal; verified unused install+receipt removal | Passed |
| Copied Node24 path changes identity; staging never treated as final install | Passed |
The three untested matrix cells were F6 same-path runtime enforcement, non-admin/other architectures, and a complete Node-22 installation/recovery qualification. Node22 direct smoke below is separate. These fixtures do not prove adversarial races or a production deploy helper. Final cleanup was performed only after checking harness ownership and the saved fixture inventory. The test prefix was removed; cleanup reported the existing Python launcher unchanged. A separate post-cleanup SSH read verified prefix absence and the same launcher SHA-256. Dedicated SSH authorization remains separate from runtime installation; no private key or password is included in this record.
An additional Node 22.23.3 x64 (ABI 127) direct-CLI banner and native-lock smoke passed against the same installed published package. The Node ZIP matched the HTTPS-served official SHASUMS256; no GPG-signature check was performed. This was not a second Node-22 installation/identity or recovery matrix. Windows-client jump, non-admin, other architectures and F6 runtime-identity enforcement remain outside this qualification. The earlier Linux run and its untested newer recovery rules remain historical evidence.
This dated record covers public 0.3.2, 0.3.1, 0.3.0, 0.2.1 and 0.2.0
verification; the historical 0.3.2 preparation checkpoint; historical 0.1.0
public verification; earlier candidate checks and live-agent observations. Older sections
describe their stated checkpoint rather than current feature availability.
It does not claim complete Python parity.
Python reference: v1.0.2, commit 47c23713d0a2a3c11ebde6186afd8c43489b8b65.
session-peer@0.3.1 was published at 2026-10-04T14:32:10.826Z
(23:32:10.826 KST). The public registry reports latest=0.3.1 and unchanged
preview=0.1.0-preview.1.
- Published source:
6b48092a0e42992d2d970dd2ff5cf457f62d3ff2, the #104 merge. Exact-main CI and CodeQL passed. Publication run completed prepare/publish; GitHub recordsabruptionapproving environmentnpm. - Stage ID:
5d846a99-18a7-4ec0-873e-b1b05056fb42. The authenticated stage download, retained Actions artifact, exact-source local pack and public tarball are byte-identical: 190,315 bytes, 51 files. All 16 packaged Markdown files were compared byte for byte with the published source. The source tree equals the reviewed preparation head; commit identity is the merged SHA above. - SHA-256:
ba8b85b03229bc99ca30d52251790d7e75b90551de924b99edce22570f7fa401. - Registry integrity:
sha512-iZq06dbm6NavHuPZYMIxAnzQN5ksqm66yufpppddVWUYkuaG5TJvktbUXTSX7v3BBFnuybEJekI0KSaDo3Xfbg==. - Public publish/SLSA attestation subject digests match the package SHA-512.
Provenance binds the source SHA, repository,
.github/workflows/publish.ymland run37209205194/attempts/1. Public registry metadata names GitHub Actions as Trusted Publisher andabruptionas approver. release.mjs artifactandverifypassed from the exact publication source and artifact on macOS arm64, Node 24.16.0/npm 11.15.0. Verification includes npm signature/attestation audit and a fresh public--ignore-scriptsinstall,session-peer 0.3.1 (typescript), empty isolated Claude listing and clean removal. Independent public-key/DSSE checks also passed for the subject digests and signatures; npm's audit provides the package signature/attestation trust validation.
The 0.3.1 archive includes the reliability fixes and the migration wording correction missing from 0.3.0. It retains dated preparation/public-history records; this post-publication section is a later repository record, not a same-version tarball replacement. No restaging or republication was performed.
SSH endpoints must use identical TS versions: 0.3.0 and 0.3.1 refuse each other at preflight. Existing #20/#23 and update-notice Windows validation gaps remain. Windows evidence is CI fixtures; the installation evidence above is local macOS. The 0.2.1 demo's actual ACK remains historical. No fleet upgrade or GitHub tag/ Release creation is claimed. Draft #82 remains experimental and unmerged.
Source candidate on merged main cb661ff4f323f637673d528f05992a2bb275fefc
after #103, #101, #96, #95 and #102. The local runtime and fixture checks below
ran at checkpoint 71668d112929576d22a83b2dd269cfb98d3f567a; later candidate
changes only add this dated record. See the patch contracts.
This section records preparation, not public 0.3.1 publication.
- macOS arm64, Node 24.16.0/npm 11.15.0;
npm ci --ignore-scripts, build,test:typesandnpm testpassed: 151 tests, 146 passed, 5 Windows-only skipped, 0 failed. Python conformance used the pinned 1.0.2 reference above. The full suite includestest/transport.test.ts; a Windows command is not evidence that this POSIX transport suite ran on Windows. - The inactive storage fixture starts without a writer or lock holder. Its
valid saved-thread DB reports
activity=inactive,writerLock=absentbefore and after testing. Without opt-in it refuses before the storage guard; with opt-in, dry-run validates without calling Codex and send queues exactly once. Root bare and escapedsqlite_homesettings and malformed configuration then refuse without another queue call. Nested-only root/non-root doctor tests use the normal diagnostic DB schema and do not authorize sending. - Reply-To tests cover nested URI/agent confusion with zero SSH/queue calls, and normal Claude names/Codex routes. SSH fixtures cover unnamed Claude PID targets and malformed per-host outcomes without retry. Registry tests include POSIX FIFO/race/size handling and healthy rows; UID 0 is simulated through controlled identity observations with a real held native lock, not a root login.
test:packagepassed the 51-file allowlist, reproducible packaging, clean installation/removal and Bash/zsh shorthand contract/lifecycle. Repository metadata, four-language docs/links andgit diff --checkpassed.npm auditreported 0 vulnerabilities. The exact runtime dependencysmol-toml@1.9.0is locked; it is installed as a dependency, not bundled into the allowlist.release.mjs packandartifactpassed at the checkpoint, including identical repeated pack bytes and isolated--ignore-scriptsinstall/version/list/removal. The final documentation-only candidate is repacked and compared with source in the preparation PR; its local artifact is not a future merged-main artifact.- Registry preparation baseline:
latest=0.3.0,preview=0.1.0-preview.1, 0.3.1 absent. The helper pins the public 0.3.0 integrity recorded below and retains the preview pin. No dispatch, npm stage/promotion, tag or fleet change follows from these checks.
Windows evidence for the fixes is CI fixtures. Existing Windows-client jump, remote deployment and update-notice validation gaps remain. Live-agent delivery or ACK was not exercised by these fixture tests. Publication still requires the new exact merged SHA/version/mode approval and runbook gates in RELEASING.md.
session-peer@0.3.0 was published at 2026-10-03T05:14:44.917Z
(14:14:44.917 KST). The registry reports latest=0.3.0 and unchanged
preview=0.1.0-preview.1.
- Published source:
05418b21fcdef890826325d56b07bb3dabce3bb0, the #89 merge. Its exact-main CI and CodeQL passed. The stage-only publication run completed prepare/publish; GitHub recordsabruptionapproving environmentnpm. - Stage ID:
cc0797c4-fbde-4cb0-a01b-806ff8409b39. The authenticated stage download, retained Actions artifact and public registry tarball were compared byte for byte. All were the same 184,811-byte, 51-file package. - SHA-256:
96315c907339ed7f2def7ac3a02c40b621ca385448884eb69b7d2d975771b797. - Registry integrity:
sha512-mdtikUMrGmMrdVSvPXdJcZeouTeuixOTzGwFKPhN66ATZqTohu9HKbejgOwXJe0/zrO+nt9asCAzAEhiHWDYGA==. - Public SLSA provenance matches the package SHA-512, source SHA, repository,
.github/workflows/publish.ymland run37098738865/attempts/1. - From the exact published source/artifact,
release.mjs artifactandverifypassed on macOS arm64, Node 24.16.0/npm 11.15.0. A fresh public install with--ignore-scriptsprintedsession-peer 0.3.0 (typescript), listed no Claude sessions in its isolated home, and uninstalled with its launcher removed.npm audit signaturescryptographically verified registry signatures for 3 packages and attestations for 2 packages; these are package counts.
The released archive retains a stale migration sentence in PARITY.md claiming
that multi-host aggregation is absent, although its 0.3.0 feature contract and
runtime support ordered repeated --host results. PR #91
corrected the source at f6fedfc08c0f374eec1a3b5e2e6bfd09bc98dd71.
That correction is not in the immutable public 0.3.0 archive; it will be
included when a later version is packaged. The corrected local candidate was
not the published artifact. No replacement stage or same-version republication
was executed after the public release was confirmed.
SSH still requires the same TS version on both ends: 0.2.1 and 0.3.0 refuse each other at preflight. Coordinate endpoint upgrades. #20 remains partial for Windows-client jump routing; #23's Windows deployment cell and newer Linux receipt/recovery rules remain unvalidated. Update notices' Windows refresh, failure and forged-field cells also remain unverified. Public installation evidence above is local macOS evidence; Windows evidence is CI fixtures. No fleet upgrade or GitHub tag/release is claimed by this record. The demo's actual 0.2.1 ACK remains its own historical evidence.
Candidate source: main after #79, #84, #86, #85, #75 and #83 plus the 0.3.0
preparation PR. Changes and known limitations are listed in
PARITY.md. The local checks
below ran at checkpoint ed2548cda56f369a9d46fecf8c0c4ddbff2e5e78 on base
b910cca6ba2f84d5ca6e4d5c234cafcaf3fcbd58; later commits on the preparation PR
changed documentation only. Local macOS arm64,
Node 24.16.0/npm 11.15.0, with the pinned Python reference: 121 tests, 116
passed, 5 Windows-only skipped, 0 failed; test:types, package smoke (including
the Bash/zsh shorthand contract and lifecycle), repository checker and
npm audit (0 vulnerabilities) passed. Release pack and artifact validated
the 51-file allowlist, and an isolated --ignore-scripts install of the local
tarball into a temporary prefix printed session-peer 0.3.0 (typescript) and
uninstalled cleanly. The packaged READMEs and guides were read from that tarball.
Each included PR passed the full macOS/Linux/Windows Node 22/24 matrix,
CodeQL and the release gate on its head. These are fixture results, not
live-TUI ACKs and not public release evidence. At this candidate checkpoint,
publication still required the procedure in
RELEASING.md and a dated public
record. Completed public evidence is recorded above.
The operator workflow in
docs/design/remote-deployment.md was run by
hand on a user-provided Linux host (label linux-x64-sandbox). All work was
confined to a new, dedicated test directory that was removed afterwards; the
host itself is not disposable. Host egress could not be disabled, so offline
install flags were used and nothing was downloaded on the host. This covers
the POSIX cell only. The Windows cell has not been run, so the
F5 criterion of #23 remains open. Nothing outside a single test root on the
destination was written. No agent session was contacted, and no message was
submitted.
| Item | Value |
|---|---|
| Destination | Debian 13 (trixie), Linux 6.18, x86_64, glibc 2.41, non-root account without sudo, umask 0077 |
| SSH | Server OpenSSH_10.0p2 Debian-7+deb13u4. Client OpenSSH_10.3p1 with BatchMode=yes, StrictHostKeyChecking=yes, ConnectTimeout=10, the pre-pinned host-key alias, and no control socket. No host key was accepted or edited |
| Destination Node | None on PATH. Official node-v24.21.0-linux-x64 (npm 11.19.0, ABI 137) and node-v22.23.3-linux-x64 (npm 10.9.9, ABI 127) were unpacked inside the test root |
| Operator | macOS arm64, Node 24.16.0. session-peer 0.2.1 was installed from the verified tarball into a private temporary prefix, not globally |
All of the following were verified on the operator before any upload.
session-peer-0.2.1.tgz- SHA-256
6bf3c99d12260ce2e9421909b27326f1663ce6945aa798bc90ca1e17da675e43, equal to the 0.2.1 record. - Integrity
sha512-bPjriJZf…5nw0Mg==, equal to the registry value. - SLSA provenance names commit
a9c42334da8f7faf83f0b9bb1fe52f1c695dfe8dand.github/workflows/publish.yml.
- SHA-256
- Dependencies, pinned to that commit's
package-lock.jsonfs-ext-extra-prebuilt-2.2.14.tgz: SHA-2561a2b5bf6…a712; SHA-512 matches the lockfile.nan-2.29.0.tgz: SHA-256038073cb…8af6; SHA-512 matches the lockfile.
- Registry signatures:
npm audit signaturesin a scratch offline install reported 2 verified registry signatures and 1 verified attestation. - Node tarballs (downloaded from nodejs.org): SHA-256 matched
SHASUMS256.txtfor v22.23.3 and v24.21.0. The OpenPGP signature onSHASUMS256.txtwas not verified, because nogpgwas available. - After upload: the destination's
sha256summatched for every uploaded file.
All installs used <node> <npm-cli.js> install --offline --ignore-scripts
with an empty per-run cache, an empty --userconfig and an isolated HOME.
Each added 3 packages, and the staging package-lock.json integrity values
equal the release lockfile.
| Install | Recorded Node | id16 | Manifest SHA-256 | Files |
|---|---|---|---|---|
| A | v24.21.0, ABI 137 | 3220dc6bc02772f0 |
65da80c7…f7f3f |
153 |
| B (Node path change) | v22.23.3, ABI 127, different path | d323791c5632ed2e |
5e12598a…6aea5 |
153 |
| S (swap path) | v24.21.0 at a path later swapped | 111e7af6bc1de967 |
— | 153 |
The identity JSON contained package, version, sha256, lockIntegrity,
platform:"linux", arch:"x64", libc:"glibc", nodeMajor, modules and
the Node realpath (redacted here).
| Step or case | Outcome |
|---|---|
| 2. Root trust | lstat from the account home down to the root: real directories, owned by the user, mode 700, no symlinks |
| 3. Staging | Created exclusively, mode 700; destination SHA-256 equal to the operator's |
| 5–6. Staging probe, with no final directory present | The self-locating wrapper printed session-peer 0.2.1 (typescript) under env -i PATH=/usr/bin:/bin. The native flock probe loaded from staging (Node 24 ABI 137; Node 22 ABI 127) |
| 7. Activation under lock | mkdir lock taken, target absent, fs.renameSync succeeded |
| 8. Post-activation checks | Real directory, owned, mode 700; staging gone; marker hash and name match; manifest matches; wrapper banner exact; native probe ok. The receipt was written, then the lock released |
8. Operator doctor --host --remote-bin <absolute path> --json (A, B and S) |
ok:true, diagnosticCompleted:true, implementation:"typescript", version:"0.2.1", ready:false (no agents in the isolated home). Only A ran it before its receipt and lock release (see the order deviation below) |
8. Operator send --host … --to 999999 --dry-run --json (A and B) |
ok:false, error:"no_reachable_target", status:"refused", submitted:false, exit 2. Not run for S |
| Same identity already installed | already_provisioned; this run's staging was discarded. Abbreviated: staging was created and classified without a second install |
| Foreign directory at the target | foreign (no_valid_marker). Activation refused with target_exists; retention removal refused with foreign_refused; the foreign file's SHA-256 was unchanged |
| Empty directory at the target | empty. Activation refused with target_exists |
rename(2) on this kernel |
Non-empty ENOTEMPTY; empty replaced; file ENOTDIR; symlink ENOTDIR; absent ok. This matches the ADR's stated POSIX scope |
| Python-style stub on a test-only PATH | Preflight with it as --remote-bin gave remote_version_mismatch. Its SHA-256 19b6aab2…fec0 was identical before and after all cases |
| Lock contention | A second acquire gave EEXIST (lock_held) |
| Failed activation | A staging tree altered after its manifest was written activated, then post-activation checks failed (manifest:false). It was rolled back through .failed-* and deleted; the target was absent afterwards |
| Run died after activation (no receipt) | Lock held, autoStale:false; target owned_no_receipt. Break-lock naming another run was refused. After the operator journal confirmed that the run had ended, break-lock rolled back the unreceipted target. This was the rule at that date; the current ADR instead releases the old lock and recovers under a fresh lock, which is unvalidated |
| Run died after its receipt | Break-lock kept the install (kept) and removed only the lock; the install then classified as already_provisioned |
Lock without owner.json |
held_unowned, autoStale:false. A break naming a run was refused, and a new acquire was refused. It was removed only by an explicit unowned break |
| Same-path Node major swap 24→22 (install S) | Undetected, as the ADR states: the wrapper exited 0 with the exact banner, and the native probe loaded the Node 22 binary. The harness's existing-target check still reported already_provisioned. A runtime-identity comparison (the logic proposed for launch.mjs) reported differs:["nodeMajor","modules"]. Recomputing step 2 produced a new identity (f4f323b466c56e60) |
| Rollback to a previous directory | After callers were switched back from B to A, operator doctor via A returned ok:true |
| Retention | Removing A while it was configured was refused (configured_for_caller). B was removed together with its receipt. The foreign fixture was refused |
| Cleanup | Markers and receipts were listed, then the whole test root was deleted and confirmed absent |
- Root location: the root was
<test-root>/data/session-peer-ts, which is the ADR layout withXDG_DATA_HOME=<test-root>/data. - Network: destination egress could not be disabled. Offline npm flags were used instead, and nothing was downloaded on the destination.
- Execution: the steps were driven by a test harness script, uploaded and hash-checked, and run with the recorded Node. This is not the proposed F6 helper; the identity launcher, manifest and lock exist only in that harness.
- Isolation shim: the operator
doctorandsendruns went through a test-only shim (env -i, withHOME,CLAUDE_CONFIG_DIRandSESSION_PEER_CODEX_HOMESinside the test root, andPATH=/usr/bin:/bin) in front of the install wrapper. This kept discovery from reading the account's real agent directories. Version preflight still executed the install wrapper. - Initial npm check: the first
npm --versionchecks ran with the account's realHOME. npm's user configuration was therefore readable to that process. No writes outside the test root were observed, but this was not independently verified, and the account's npm directories were deliberately not inspected. All later npm runs used the isolatedHOME, which remained empty. - Operator-check order (harness deviation): in the original execution
order of the private log, only install A ran the operator
doctorand dry-run before writing its receipt and releasing the lock, as step 8 required. B (run B3) wrote its receipt and released the lock first, and ran the operator checks afterwards. S wrote its receipt and released the lock before an operatordoctor, and had no dry-run. For B and S, step 8 is therefore only partially evidenced. Their remote activation, verification, native-lock and lock results stand as recorded. This is based on the original command order and timestamps in the private log, which is chronological and was not rearranged. - Rule version: the run used the ADR rules at the PR's fifth commit. Recovery, receipt and trust rules added later were not exercised here.
- Harness gap: the existing-target check did not recompute runtime
identity, which is why it reported
already_provisionedafter the swap. - Not covered: Windows (the F5 cell is still open), arm64, musl, macOS destinations, glibc older than 2.28, and the empty-directory race window.
session-peer@0.2.1 is public. Registry publication time is
2026-09-28T23:45:16.923Z (08:45:16 KST). Verified latest=0.2.1 and
unchanged preview=0.1.0-preview.1.
- Source:
a9c42334da8f7faf83f0b9bb1fe52f1c695dfe8d, release PR #67. - Exact-main CI: 36498904152, successful.
- Staging run: 36499231956, successful (
prepareandpublish). - Artifact:
session-peer-0.2.1.tgz; SHA-2566bf3c99d12260ce2e9421909b27326f1663ce6945aa798bc90ca1e17da675e43. - Registry integrity:
sha512-bPjriJZf7OQ5niZafwxNgMYo0DVpZldELEjp640xAfBMjBCAJatT2hPMTG9oV7xDX2ULCPUmox9+vFWc5nw0Mg==, identical to the retained artifact manifest. - SLSA provenance names source
a9c42334…and run 36499231956 attempt 1, workflow.github/workflows/publish.yml.
The user approved the exact main SHA/0.2.1/stable-stage, separately approved the
protected GitHub npm environment, and reported final npm 2FA promotion complete.
Before environment approval, the retained Actions artifact was reviewed against
the exact source: all four READMEs, the four guides, docs/api.md, PARITY,
RELEASING, VALIDATION, SECURITY and CONTRIBUTING matched byte for byte; package
version, VERSION and the packaged CLI banner were 0.2.1. After promotion,
release.mjs artifact and release.mjs verify passed registry integrity/tag/
attestation checks, npm signature audit, fresh version-specific installation and
uninstall on macOS Node 22.14.0.
Not independently recorded here: the stage ID, a byte comparison of the staged tarball, the authenticated pending-stage list and the Trusted Publisher UI; the reviewing workstation had no npm session. The registry integrity equals the retained artifact. This record adds no live-agent ACK claim. No republishing, tag deletion, GitHub release/tag creation or fleet installation was performed.
Candidate source: main after #62, #63, #64 and #66 plus the 0.2.1 preparation PR.
Changes are listed in PARITY.md.
Local macOS arm64 Node 22.14.0 with the pinned Python reference: 77 tests, 73
passed, 4 Windows-only skipped; package smoke, repository checker, npm audit
(0 vulnerabilities), release pack and artifact validation passed. Each
included fix PR passed the full macOS/Linux/Windows Node 22/24 matrix, CodeQL and
the release gate on its head. These are fixture results, not live-TUI ACKs and not
public release evidence; 0.2.1 publication requires the procedure in
RELEASING.md and a dated public record.
session-peer@0.2.0 is public. Registry publication time is
2026-09-28T04:28:39.027Z (13:28:39 KST). Verified latest=0.2.0 and
unchanged preview=0.1.0-preview.1; authenticated pending-stage list is empty.
- Source:
2107c4c9f3a2ad9deca42f4e0dd9673d2e5fb3ce, release PR #44. - Exact-main CI: 36377144969, successful.
- Staging run: 36377508658, successful; Node 24 / npm 11.15.0.
- Stage:
479ce166-c252-4f71-88d6-9a9bda4c4e92, taglatest, GitHub Actions trusted automation. - Artifact:
session-peer-0.2.0.tgz; SHA-2562def227c0e6d997b2fd292c1f7cfaec2d4330e654caf703fcb100eadafb418c2. - Registry integrity:
sha512-wXUVn2GdF3fKAjJA9cUKIiBc9YVswnfBNALo2nxhXqmpCqC7/9N+AQJct/06RAU7stbcbrfY55JQ15PPESXwHw==.
The user approved the exact main SHA/stable-stage, separately approved the
protected GitHub npm environment, and reported final npm 2FA promotion complete.
Before dispatch, the npm UI showed the Trusted Publisher mapping to this repo,
publish.yml, environment npm, with npm stage publish permission only.
GitHub required reviewer and main-only environment policy were checked.
The existing package setting permitted 2FA or bypass-enabled automation tokens;
this release did not change that setting and used OIDC staging.
Codex reviewed the retained Actions artifact against the exact source: all four
READMEs plus PARITY, RELEASING and VALIDATION matched byte for byte. The tarball
downloaded from npm staging was byte-identical to that retained artifact.
After promotion, release.mjs verify passed registry integrity/tag/attestation
checks, npm signature audit, fresh version-specific installation, version banner,
isolated empty Claude listing and uninstall on macOS Node 22.14.0. Published
provenance names the exact source SHA and run above. The npm 0.2.0 page rendered
the version-specific README and install command correctly when inspected.
This public-package check does not add a new live-agent ACK or cross-device submission claim. Platform fixture evidence remains the exact-main CI above; historical live-agent observations below retain their original versions. The immutable npm tarball contains the dated pre-publication checkpoint; this post-publication record is a later GitHub documentation update. No republishing, tag deletion, GitHub release/tag creation or fleet installation was performed.
Issue #16 adds combined Claude/Codex listing and bounded multiple-home inventory. The source feature is not present in the immutable npm 0.1.0 archive. It does not enable implicit Codex send selection or inactive queueing (#17).
test/discovery.test.ts ports the Python 1.0.2 unified-list/multi-home cases:
optional absence versus explicit missing sources, alias/source merging and
cross-home UUID identity, global ordering/archived filters, whole invalid-config
rejection, per-home/agent partial failure, pinned-home bypass, destination-side
stdio/SSH inventory and nonzero partial envelopes. Temporary SQLite files and
local socket/pipe records are isolated; listing opens no inbox connection and
leaves DB contents unchanged. Permission/canonicalization/enumeration failures
are injected deterministically on every OS, not claimed as Windows ACL evidence.
The suite runs in macOS/Linux Node 22/24 CI with the pinned Python oracle, and
in Windows x64 Node 22/24 CI with native fixtures but no Python oracle. The
Windows SSH fixture additionally executes actual PowerShell/.cmd and checks
partial listing rows while a native writer is held, with no new queue call.
Windows test files run serially so concurrent PowerShell compilation does not
consume the native inspector's fixed timeout; assertions and production deadlines
are unchanged. Separately (#65), the compiling Add-Type owner inspection now has
a 20000 ms deadline after a slow runner exceeded 8000 ms on main (CI run
36419550921, attempt 1). The compile-free creation-time probe moved from 8000 ms
to 15000 ms (#78) after CI run 36542897023 (windows-native (24)) killed it at its
8000 ms deadline (observed 8024 ms including termination; the probe's actual
completion time is unknown). 15000 ms is a mitigation margin, not proof that slow
machines or CI never exceed it. Probes run sequentially, once per probe-eligible
Claude session record (N, including stale records), so a full scan's worst-case
probe budget is roughly 15 × N seconds plus I/O and termination overhead, an
increase of 7 × N seconds over the former 8 × N; the compiling path's 20000 ms
deadline is per call, not a scan bound. A Claude dry-run scans once and returns
after selection. A real Claude send scans during selection and, only if selection
succeeds, again during revalidation, so its worst case is about 15 × (N1 + N2)
seconds for the two scans' record counts; a refusal at selection has no second scan.
Timeouts still exclude the process. Each native subtest
cleans its children even after assertion failure. Package smoke verifies unified empty discovery without executables on PATH.
These are fixture contracts, not new live-TUI ACKs. CI evidence belongs to the
issue's PR-head checks; publication requires separate release preparation.
session-peer@0.1.0 was published at 2026-09-27T11:23:51.466Z
(20:23:51 KST), according to the public registry. Its source was
0edc4f8ae05256698f591b7402e89cd3d5858eef and
run 36315310094
created npm stage e8f7941e-9ad1-4039-9132-285c900ed61d after the separate
stable-stage and protected-environment approvals. The owner then confirmed npm
2FA approval. The run itself records staging, not the later public verification.
The release-session checks recorded matching public registry integrity and
provenance metadata, npm signature audit, fresh isolated installation and
uninstallation. The 2026-09-28 KST read-only recheck downloaded the public
tarball and independently matched both hashes below against the run manifest
and registry. Registry metadata included provenance and one package signature.
At that recheck, latest was 0.1.0 and preview was 0.1.0-preview.1.
- SHA-256:
41189d771a94c14775f8ef297d887627f4ab12819856bb18efff291e03c2e269 - Integrity:
sha512-/FtILLgUpIAgqf5FsdU5/x17IGeWO3ylmm47gbSyN3hHjD40pp5gtOeAXU3zqmye/cx7PE52Pp/oLa0ZgZyDQQ==
These are package-delivery checks, not new live-TUI ACK evidence for the published build. Historical ACKs below retain their original scope.
The immutable 0.1.0 tarball contains the earlier four READMEs and validation/ release notes written before publication. Its English README still describes 0.1.0 as release source awaiting approval. That wording is stale; it does not mean the public stable package is unavailable. The later GitHub README fix PR #15 could not change an already published archive. Corrected packaged documentation requires a new version; never republish 0.1.0 to replace its README.
The npm version page returned HTTP 403 to the read-only web reader during the 2026-09-28 check, so its rendered README was not verified. The tarball contents were inspected directly. See the exact-artifact documentation review in RELEASING.md.
All three operating systems run Node 22/24. The checks differ:
| Platform | Automated scope |
|---|---|
| macOS/Linux | Full contract suite, type checks, Python reference fixtures, package smoke, release pack/artifact checks and audit. |
| Windows x64 | Build/type checks, Claude named-pipe/auth/stale-record fixtures, held/free kernel locks, writer ownership and pre-submit races, native queue outcome fixtures, PowerShell/.cmd SSH framing through a fake endpoint, package/native-load smoke and audit. |
Windows runs its native suite, not the POSIX/Python reference suite. Both Windows Node jobs are required by the aggregate release gate. The x64/Node 24 user-observed ACKs below remain separate one-shot evidence, not Windows arm64 or live Node 22 qualification. See PARITY.md for the versioned matrix.
PR #37 expands Windows
fixture coverage for #34 and adds the #33 compatibility/migration guide.
No runtime feature, package version or public npm tag changes in this work.
The initial expanded Windows x64 Node 22/24 suite and all other platform jobs
passed run 36357787318
at commit 5c84e91. Final PR-head checks must include the additional controlled
sampling races and packaged guide; use the PR's latest required release gate.
The Windows C# fixture holds actual LockFileEx locks and supplies native process PID/SID/start evidence through Restart Manager. Tests cover wrong and competing openers, lock replacement between samples, owner replacement during pre-submit revalidation, dry-run zero calls, one queue submission, inactive/ambiguous refusal, nonzero/timeout unknown outcomes without retry or stderr leakage. Sampling-race tests control the delay only; lock/process/owner inspection remains native.
The isolated ssh.exe fixture records the wire request and runs actual
PowerShell with a .cmd path containing spaces. It checks exact-version
preflight, stdin JSON, refusal/unknown handling and one native fixture queue.
It does not connect to a network or authenticate a real SSH host. Package smoke
checks the installed .cmd launcher, empty discovery, declarations, installed
native lock binary, repeat-pack hashes and uninstall. No fixture result is
real Codex queue acceptance, live-TUI ACK or Windows arm64 evidence.
The preview.1 candidate and exact merged main passed macOS/Linux Node 22/24,
native Windows Node 22/24 and the release gate. A separate gate change preserved
the existing latest: 0.1.0-preview.0 while permitting preview.1 staging.
Run 36313884100
staged the exact main commit f65d3ee99cc26ff4a267aef84e31a308d034ac80
through the stage-only OIDC Trusted Publisher. After separate environment and
npm 2FA approvals, the public registry showed preview: 0.1.0-preview.1 and
unchanged latest: 0.1.0-preview.0.
The npm stage tarball matched the retained run artifact byte for byte. Its
SHA-256 was d154beac93893b60b0695e5a6296e185beb8dbd05188ffe04befb74d29966110.
The public SHA-512 integrity and provenance metadata matched the manifest;
npm audit signatures, fresh version-specific install, CLI version and empty
Claude discovery checks, and uninstall passed. This verifies package delivery,
not a new live Claude/Codex message ACK from the published build.
The preparation updated the version handshake, package metadata, four README languages, release gates and tests. Native delivery logic was unchanged. Candidate and exact merged-main CI preceded the separately approved staging, npm 2FA approval and public checks recorded above. Those approvals did not authorize a GitHub tag or fleet installation.
After #7–#10 were merged, the versioned candidate passed the local macOS
arm64 Node 22 contract suite (23 passed, two Windows-only tests skipped),
TypeScript test type-check, package/declaration smoke test, four-README
repository checks and npm audit (zero vulnerabilities). The package smoke
test repeated packing with the same SHA-256 and verified isolated install and
uninstall. The new candidate was not sent to a live agent and was not published
by these checks. Windows Node 22/24 and macOS/Linux Node 22/24 checks were also
required on the candidate PR and exact merged main before publication.
- 14 tests pass locally on macOS arm64 / Node 22.14.0.
- Real fixture SQLite DBs, Unix inbox sockets and separate C processes holding actual advisory locks; Python is the discovery oracle, not the implementation.
- Refused inactive/ambiguous/wrong-owner cases; one native fixture queue call; native nonzero after spawn and SSH response loss remain unknown with no retry.
- Package file allowlist, same-build repeat SHA-256, clean prefix installation, empty-PATH discovery and uninstall pass. npm audit reports 0 vulnerabilities.
- CI defines macOS/Linux × Node 22/24; see the repository Actions results for those runs rather than treating this local check as their substitute.
An isolated prefix under the Windows user's Temp directory was installed from
this branch's local tarball. The existing Python CLI was not removed or
overwritten. Node 24.16.0 and npm 11.13.0 were present. Windows native
list found the live Claude inbox; Codex dry-run verified the saved thread,
kernel lock, single same-user codex.exe opener and stable start time. Mac
mini → Windows SSH preflight used an explicit Windows platform, remote .cmd
path and an already authenticated OpenSSH control socket; no host-key bypass
or new login was introduced.
One message per target was submitted from this candidate through Windows SSH.
The CLI returned Claude posted and Codex queued, with
consumptionConfirmed:false. The user separately confirmed exact response
lines in both Windows native TUIs:
- Claude:
ACK TS-WIN4-CLAUDE-20260927-A - Codex:
ACK TS-WIN4-CODEX-20260927-B
These ACKs are user-observed responses, not direct terminal-pane capture by the test runner. No retry was made. This is one-shot evidence, not a soak or all-architecture qualification. Windows x64 was tested; Windows arm64 and Node 22 remain untested in this live check. Python remains installed.
Dedicated, newly created Claude/Codex test TUIs only. The user approved trusting the two otherwise empty test folders. Agent permissions were not changed. Each route passed discovery and no-delivery dry-run before exactly one send. ACKs below were observed as separate assistant response lines in the owned live tmux panes, not copied from submitted prompts, queues or transcript files.
| Route | Native target | Submission | Actual response |
|---|---|---|---|
| Mac mini local | Claude Code 2.1.281 | posted | ACK TS186-LOCAL-CLAUDE-8fc721d0 |
| Mac mini local | Codex CLI 0.157.1 | queued | ACK TS186-LOCAL-CODEX-cb042ac9 |
| Mac mini → MacBook SSH | Claude Code 2.1.281 | posted | ACK TS186-SSH-CLAUDE-f0275ade |
| Mac mini → MacBook SSH, structured Reply-To URI as destination | Codex CLI 0.157.1 | queued | ACK TS186-SSH-CODEX-a771e96c |
Local Node: 22.14.0. Remote MacBook: 24.20.0, selected by a task-owned wrapper because its normal PATH selected unsupported Node 26. KR Linux Node 24.16.0 also passed real SSH version negotiation and empty Claude discovery. KR native agent delivery was not tested. No service was restarted or global CLI replaced.
The CLI itself still reports consumptionConfirmed:false; external ACK review
does not change that contract. This is a one-shot functional test, not a soak.
Local self-SSH was denied by the existing SSH authentication configuration; no
credentials or host-key bypass were introduced. Reverse SSH was not asserted.
Compiled module SHA-256 values matched between the local build and the isolated MacBook installation used for the SSH ACK tests:
0b708f1211330ff489b6a405e0ebb71d2b3b392acdb19c216dba18e7b23016c7 cli.js
1d8c41dfc174d950e2196c64f93b324f09befa388a5b303439c390a526ffda48 discovery.js
c3187c99c46364730e46e35ef23d8f3a37e541593b2a6f9c3945dce979e7e99c process.js
b716fed8fe6c8c04047f8485a6e3f982d6e64e5638df570b3b8c2a128f88c81e protocol.js
dd946024a61ce8721c273d47e911494c0c8facd62facd9b791a451b90cb702bf send.js
c441567e83c64c7d5735708936e9a42b68dd9ea0cdf0ef95538da7919d550496 writer.js
These hashes and real-TUI ACKs precede the public command rename to
session-peer (the npm package was then named session-peer-ts). The rename changes the
CLI version banner to session-peer 0.1.0-preview.0 (typescript) and the default
SSH executable to session-peer; it does not change native delivery logic.
Fresh package-install and SSH fixture tests cover the renamed entry point and
reject a different implementation on remote PATH before sending. The earlier
ACKs are not represented as a new live test of the renamed build.
The npm package name was subsequently changed to session-peer before a
successful publication; the GitHub repository remains session-peer-ts.
Package identity, tarball naming and publication confirmations are covered by
package/release fixtures, not claimed as new live ACK evidence.
Windows arm64, IPv6 literals, Relay/MCP/wake, full Python CLI parity and automatic reverse-route detection remain outside this evidence. Registry publication checks for preview.1 and stable 0.1.0 are recorded above separately from the historical live-agent ACKs. Future publication still requires the approvals and gates in RELEASING.md. Native dependency prebuild availability must be tested on each architecture claimed by a future release.
Source adds implicit unique-live selection, explicit inactive opt-in, sanitized resolution diagnostics and optional native queue IDs. npm 0.1.0 remains the published baseline; no release or tag operation is part of this work.
Local macOS arm64 / Node 22.14.0: 47 tests passed, 3 Windows-only tests skipped.
Fixtures cover real flock holders, implicit selection, explicit conflicts,
multiple writers, unsaved first turns, inactive opt-in, configuration truth table,
DB/inventory/lock evidence changes, zero-submit dry-run and unknown/no-retry.
The Windows suite adds equivalent selection/metadata cases to its native
LockFileEx and owner-swap tests, plus inactive flag/queue ID through PowerShell SSH.
Initial PR CI run 36368300629 passed macOS/Linux and Windows x64 on Node
22/24, including package smoke and the release gate. Latest-head results are
recorded in PR #39; a fixture result is not a recipient ACK.
No live agents, native DB writes, Python/Relay operations or real SSH destinations
were exercised. See PARITY.md for the intentional stricter missing-home policy.
Read-only doctor fixture coverage adds missing/unsupported/permission/unknown home and tool results, separate command success/readiness, truthful capabilities, Claude inbox metadata without connection, bounded TS skill compatibility, stdio framing and SSH doctor round trips. Codex executables are inspected but never run. No live sessions, user homes, inbox dispatch or delivery ACK are used. Windows CI includes the portable diagnostics suite and encoded PowerShell/.cmd SSH checks in the existing native fixture. Windows pipe advertisements remain metadata evidence, not proof of a connectable pipe. Public npm 0.1.0 is unchanged; these tests do not constitute release or publication approval.
The 0.2.0 development source adds text output, complete list/send/doctor help, positional
message compatibility and Unicode 14.0.0 exact casefold. No npm publication or
live-agent ACK is claimed. test/cli-usability.test.ts is included in the native
Windows test command and the macOS/Linux suite. It verifies output/exit codes,
partial discovery, parse-before-stdin behavior, Unicode collisions and PID
selection using isolated process/socket fixtures. Windows posting ownership is
covered by the existing native fixture suite; the new name fixture is dry-run on
Windows. Version metadata remains 0.1.0 until separate release preparation.
Separate session-peer-ts companion skill source and pinned Skills CLI 1.7.0
setup are prepared without npm publication or new skill tags. Original Python
skill content stays unchanged. Runtime examples use temporary homes/SQLite only;
Codex inactive dry-run verifies zero submission and no queue/database mutation.
The companion lifecycle test installs, replaces from a second isolated source,
lists and removes project/global copies for Codex and Claude Code, preserving a
Python skill fixture. No production agent homes are edited, and no live TUI ACK
is claimed. npm installs continue using --ignore-scripts.
Independent read-only review used Antigravity gemini-3.1-pro-high. Its concrete
clarification (absolute remote launcher paths) was verified against the CLI and
applied to the companion skill. Parent review corrected the TS retryAllowed
field name and made capability checks require affirmative supported help entries.
Real GitHub exact-commit installation was also exercised in isolated scopes;
installation commands do not depend on a moving tag.
Feature source: main b87eb39a32f8678cd93789ce81792d5f248fdfa6, following #43.
Issues #16/#17/#18/#19/#25 are implemented. This release updates the package,
lockfile, version handshake, four READMEs and stable-stage baseline to 0.2.0.
The baseline is verified public 0.1.0; preview stays at 0.1.0-preview.1. No 0.2.0
preview publication is assumed. The new workflow requires the reviewed exact
main SHA as source_sha and rejects any different runtime source SHA.
The integrated feature tree passed macOS/Linux/Windows Node 22/24 CI in run 36370904539. Release-specific local tests, retained candidate hash, packaged prose review and exact-head CI are recorded in the release PR. Local artifacts are not the later exact-main workflow artifact; staging requires its own hash review and npm 2FA approval. This dated preparation record does not assert that 0.2.0 has been publicly published or verified. Historical real-TUI ACKs do not constitute a new 0.2.0 ACK test. Companion skill source is independently pinned and managed; its repository PR/merge status is not an npm runtime dependency.