Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGESET.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ Newest first. Each entry names the upstream range brought in.

### Fork maintenance and CI

- **#351** Record the 2026-10-23 source-pinned native release `v1.18.32-swxtch.cd3f0ce2` carrying the V2 plugin-boot gate (#350) on top of #347 for Abbe B-16.10, with its native arm64/x64 acceptance, Abbe's jail V2 egress rig passing on the unpublished arm64 candidate, focused tests, downloaded-byte verification, SaaS wake-log delivery, the Abbe handoff delivered by firstmate's relay with Abbe's acknowledgment and bump-brief citation as read-back, and committed raw evidence. The V2 project-tool gap the rig exposed is #352. See `RELEASE-CUT-4-EVIDENCE.md`. _Fork-only._
- **#349** Record the 2026-10-23 source-pinned native release `v1.18.32-swxtch.774d90c7` carrying the V2 env-config and egress default-model fix (#347) for Abbe B-16.10, with its native arm64/x64 acceptance, focused tests, downloaded-byte verification, Abbe/SaaS wake-log delivery and committed raw evidence. See `RELEASE-CUT-3-EVIDENCE.md`. _Fork-only._
- **#345** Record the 2026-10-22 source-pinned native release carrying independently configured small models (#338, #342), its new native acceptance, focused tests and downloaded-byte verification, and committed raw evidence. SaaS delivery is confirmed; the Abbe artifact handoff is delivered and durable via firstmate, while the direct task wake-log append is firstmate-owned pending with no direct Abbe receipt claimed. See `RELEASE-CUT-2-EVIDENCE.md`. _Fork-only._
- **#329** Harden the fast-suite observer (swxtchio/swx-opencode#324): use Linux procfs/ptrace with Python 3 to capture the loaded interpreter identity and kernel-expanded argv at exec stops, preserving successful launches across temporary cwd cleanup and detecting scripts replaced or symlinks repointed after execution. Preserve job-control stops until SIGCONT using seized tracing and PTRACE_LISTEN. Share position- and value-aware Bun/Node option tables between the shim and audit, refusing unclassified options so values cannot masquerade as worker modes or scripts and user-code arguments cannot masquerade as test flags. Refuse the version-dependent bare Node config-file alias while retaining attached paths. Keep the declared-help check compatible with Node 24 per-alias/optional spellings and explicit refusal of future unclassified Node options; executable regressions bind actual runtime behavior. Refuse incomplete observation, invalidate unobserved Bun tests and Node `--test` launches, and refuse Bun `--bun` delegation even when its caller ignores failure. Correct optional inspector parsing and preserve child-tool flags. Pin non-build prerequisite admission and producer-derived wrong-owner Turbo plans before execution. Qualify public execution-set claims; see `docs/fast-suite-observer.md` and PR #329 for runtime evidence. _Fork-only._
Expand Down
130 changes: 130 additions & 0 deletions RELEASE-CUT-4-EVIDENCE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
# Release-cut execution evidence: cd3f0ce2

Recorded 2026-10-23 for task `opencode-release-cut-4` and [draft PR #351](https://github.com/swxtchio/swx-opencode/pull/351). This urgent cut ships [#350](https://github.com/swxtchio/swx-opencode/pull/350), which runs a V2 turn only after its Location's plugins have booted. It sits on top of [#347](https://github.com/swxtchio/swx-opencode/pull/347). Abbe B-16.10 (swxtchio/swx-abbe#1951) needs it to restore DEV chat (swxtchio/swx-abbe#2030). Refs swxtchio/swx-opencode#338. The binary source is immutable `cd3f0ce2d5e55944df41fcf43a167f77e40c8483`; the pickup identity and ancestry record is in `plans/release-cut-4.md`. `RELEASE-CUT-4-NOTES.md` is the complete published release body. No production or release/probe tooling was changed. Raw observations are under `docs/verification/release-cut-4/`.

## Pickup decisions

The task brief was retargeted from `opencode-release-cut-2`. It named that task's branch and wake log, gave a malformed expected source SHA, and supplied no VM14 write root. The pickup stopped before any commit or remote write and reported these gaps. Firstmate's grant, in `/home/byates/fm-llmrouter/data/opencode-release-cut-4/brief.md` under "Firstmate grant", confirmed:

- branch `fm/opencode-release-cut-4` and wake log `state/opencode-release-cut-4.wake-events`;
- source `cd3f0ce2d5e55944df41fcf43a167f77e40c8483` with all carried merges as ancestors;
- VM14 write authority for `vm14-001:/home/byates/vm14-builds/opencode-release-cd3f0ce2`, covering staging, install, cache, build, transport, test and proof of this source only, lease-aware;
- that the Abbe jail rig must pass on the packaged bytes before publication.

## Native x64 (GitHub Actions)

```sh
gh workflow run opencode-arm-release-x64.yml -R swxtchio/swx-opencode --ref swxtch -f source_commit=cd3f0ce2d5e55944df41fcf43a167f77e40c8483 -f release_tag=v1.18.32-swxtch.cd3f0ce2 -f version=1.18.32-swxtch.cd3f0ce2 -f candidate=true
```

[Run 40015678366](https://github.com/swxtchio/swx-opencode/actions/runs/40015678366) succeeded. Its `release-candidate` job (120627014387) passed, and `release-proof` was skipped as intended for an unpublished candidate. The dispatch ref was `swxtch` at the release source, so the harness revision equals the source revision. Provenance records:

- `x86_64` and Bun `1.4.2`;
- the selected lockfile digest;
- catalog digest `8c13fedb…0851`;
- clean source before and after the build, with no overlays.

[Artifact 12529080055](https://github.com/swxtchio/swx-opencode/actions/runs/40015678366/artifacts/12529080055) has transport ZIP digest `c99e01a9…e632` and expires on 2026-11-06. It was downloaded with `gh run download`. Its companion passed locally, and local extraction reproduced the provenance's executable and sidecar digests.

## Native arm64 (vm14-001)

The lease README (convention v3) was read before admission. `ACTIVE` was free. Acquisition by atomic `mkdir` succeeded at 2026-10-23T19:59:44Z. `lease.json` names:

- home `/home/byates/fm-llmrouter` and task `opencode-release-cut-4`;
- owner box `vm001` and owner PID `148344`, which is this session's Claude process.

`supervise.sh` ran `arm-build.sh` under the granted root. It touched the lease heartbeat every 30 seconds while the build lived, then recorded result `0`. Both scripts are cut-3's, with only the root, source, version, task name and ancestry list changed. `arm-build.sh` first redirects HOME, XDG, the Bun/npm caches and TMPDIR beneath the root. It then:

1. clones the fork and checks out the source detached;
2. checks the Bun pin and all ancestry, #350 included;
3. runs the source's `release-probe-target.ts --candidate` with a synthetic dispatch event, which printed the expected tag, source, version and Bun `1.4.2`;
4. installs with `bun install --frozen-lockfile --os=linux --cpu=arm64`;
5. fetches and hashes the catalog, then builds with `OPENCODE_VERSION`, an absolute `MODELS_DEV_API_JSON` and `OPENCODE_BUILD_DIST`, using `build.ts --single --skip-install`;
6. packages exactly `opencode` and its sidecar, validates the companion, extracts the archive and checks `--version`;
7. runs the source's unchanged `release-probe.ts arm64` on the extracted executable.

Source status was empty before the build, after install, after the build and after the probe. The run lasted from 19:59:50Z to 20:01:12Z.

A procfs scan of the task root, matching both command line and cwd and excluding only the scan itself, returned `remaining_processes: []`. `release-lease.sh /home/byates/fm-llmrouter opencode-release-cut-4` returned `released: lease matched`, and `ACTIVE` was then absent (20:03:46Z). The transport bundle's SHA-256 is `d250d116…dcca4`, and it matched after the copy. The archive companion passed again after transport, and local extraction reproduced the executable and sidecar digests.

## Focused source tests

These ran on the task's arm64 development host (`vm001`), at the release source plus the plan-only commit, with Bun `1.4.2` after a frozen install.

- From `packages/opencode`, the focused command in `plans/small-model-verification.md` passed 59 tests, with 632 filtered out and zero failures.
- From `packages/core`, these files passed 150 tests with zero failures:
- #347's `test/config/config.test.ts`, `test/config/environment.test.ts`, `test/config/provider.test.ts` and `test/location-layer.test.ts`;
- #350's `test/session-runner.test.ts` and `test/session-runner-recorded.test.ts`.

No test was added or rewritten; these unchanged tests keep their existing roles.

## Abbe jail V2 egress rig (publication gate)

The rig is `/home/byates/fm-abbe/data/mvp-b16-10/jail-v2-egress-rig.md` (SHA-256 `73b543ef…019f` as read). It ran on `vm001` (arm64, Docker 29.8.0) against a private clone of swx-abbe at swxtchio/swx-abbe#1951's head `be3692bea1183a820c44b20f8443a826a75102a2`. The clone was kept under this worktree's ignored `logs/`, so snap Docker could read it. Its `components/orch/services/opencode-variant` is unchanged from the doc's measured head `03d7e234`.

The rig doc's build downloads the published asset, and that asset did not exist yet. `jail/Dockerfile.candidate.diff` records the one change made to `jail/Dockerfile.jail`: a `COPY` of the native-tested arm64 archive replaces the `curl` download. The Dockerfile's own digest check (`OPENCODE_ARCHIVE_SHA256=11382c4b…352f`) printed `OK`, and its `--version` check passed. `image-bytes.sha256` shows the image's `/usr/local/bin/opencode` and sidecar equal the native-tested executable and sidecar.

The probe, saved verbatim from the doc, ran as `python3 jail_v2_egress_probe.py v1-control v2 v2-named` with the doc's environment. It exited `0`, and every mode printed `RESULT: PASS`. The fake provider logged `REQ1` and `REQ2 /v1/chat/completions model=accounts/fireworks/models/deepseek-v4p1-flash stream=True` for the location-only `v2` create, for the named `swxtch-egress` create, and for the V1 control. For `774d90c7` the doc records `ModelNotSelectedError` and `ModelUnavailableError` with no provider request.

Both V2 modes resolved their wait `failed`. A diagnostic copy of the probe, which only adds the `session.next.tool.*` history events to its output (`jail_v2_tool_diag.py`, `rig-tool-diag.log`), shows why. The fake provider's `propose_netlist` call settled as `Unknown tool: propose_netlist` with `provider.executed: false`. The jail stages its advisory tools as project-local `.opencode/tools` modules, and V2's `ToolRegistry` does not register them. This lies outside the rig's success signal and is filed as [#352](https://github.com/swxtchio/swx-opencode/issues/352).

The rig ran on arm64 only. No x64 Docker host was available to this task: `vm001` and `vm14-001` are both arm64, and `vm001` has no amd64 emulation.

## Publication and read-back

Before creating the release, the following checks passed:

- the exact `swxtchio/swx-opencode` entry was confirmed in `/home/byates/fm-llmrouter/config/gh-repo-allowlist`;
- the remote tag was absent;
- `release view` reported no such release.

The release was then created with `gh-axi release create v1.18.32-swxtch.cd3f0ce2 -R swxtchio/swx-opencode --target cd3f0ce2d5e55944df41fcf43a167f77e40c8483 --latest --title v1.18.32-swxtch.cd3f0ce2 --notes-file RELEASE-CUT-4-NOTES.md`, attaching both validated archive/companion pairs.

The tag-specific and `/releases/latest` APIs both returned release `422267143` with the intended tag and name, and with:

- `target_commitish` equal to the source;
- `draft: false` and `prerelease: false`;
- the four assets, whose GitHub digests match the archives.

`git ls-remote` resolved the tag to the source. The published body is byte-identical to `RELEASE-CUT-4-NOTES.md`. All four assets were downloaded with `gh-axi release download`. Both companions passed, `cmp` found each archive identical to its native-tested candidate, and extraction reproduced both executable and sidecar digests.

## Delivery

SaaS's producer/image handoff task remains `opencode-arm-release`, recorded in `/home/byates/fm-saas/data/done-archive.md`. At 2026-10-23T20:12:18Z one verified notice line was appended with `>>` to `/home/byates/fm-saas/state/opencode-arm-release.wake-events`, taking it from 3 to 4 lines. Read-back confirmed the last line equals the notice. A supplemental `bin/fm-send.sh peer:/home/byates/fm-saas --no-reply` notification was delivered as `p1792786351-2011828-449f`, with `phase=sent`, `transport=terminal` and `disposition=delivered-no-reply`.

This task could not establish the Abbe B-16.10 recipient. `/home/byates/fm-abbe/data/backlog.md` still lists `mvp-b16-10` against swxtchio/swx-abbe#1712, but `/home/byates/fm-abbe/state/` has no `mvp-b16-10.meta` or `mvp-b16-10.wake-events`. The log cut-3 appended to is gone, and no other live Abbe task names B-16.10, #1951 or #2030. No file was created there. Two supplemental `peer:/home/byates/fm-abbe` sends were refused before typing, because the Abbe captain's composer was not provably empty (`pending`, then `unknown`). Nothing was typed and no outbox record was reserved.

The Abbe handoff was delivered by firstmate. This task reported the gap, and firstmate resolved it by relaying the notice to Abbe through its own peer channel. Its relay is archived at `/home/byates/fm-llmrouter/data/peer-mail/p1792777340-1942459-70c1-relay.md` (SHA-256 `460bc34f…d5b5`) and copied byte-for-byte to `delivery/firstmate-relay-p1792777340-1942459-70c1.md`. The relay gives:

- the tag, Latest designation, source and #350;
- both archive URLs, with a pointer to the published `.sha256` companions (it does not quote the hex digests; `delivery/notice.txt` and the release body do);
- the downloaded-byte check, and the arm64 jail rig pass in all three modes;
- the x64-rig caveat and the #352 gap.

The relay was also passed to Abbe as `/tmp/opencode/abbe-rel4.md`, which is byte-identical to the archived relay.

No Abbe task wake log was appended. Abbe's captain-level reply `p1792787150-3857348-2b5c` ruled that peer homes never write each other's runtime state. It withdrew the append plan and named two records as the handoff's read-back receipt. Copies of both are under `delivery/`:

1. **Abbe's acknowledgment, `p1792786679-2709706-0cf3`.** Its sender proof record, `/home/byates/fm-abbe/state/peer-proof/p1792786679-2709706-0cf3`, names `from_home=/home/byates/fm-abbe` and `to_home=/home/byates/fm-llmrouter`. It was created at 2026-10-23T20:18:00Z with digest `12ffce3d…59af`. The record holds metadata and a digest only. Its acknowledgment content is as relayed in firstmate's `data/opencode-release-cut-4/fix-round-1-addendum.md`; this task did not read the message body.
2. **The verbatim citation in Abbe's bump brief.** The brief is `/home/byates/fm-abbe/data/abbe-mvp-design-crew/bump-1951-cd3f0ce2.md`, for crew `abbe-mvp-design-crew`, with SHA-256 `5e9d2835…bdb5`. Line 7 cites `/tmp/opencode/abbe-rel4.md`. Lines 6 and 8 restate the tag, source and #350, and the arm64-only rig pass with x64 not rig-tested. The brief also directs Abbe to run the x64 rig on `abbe-build-001`.

The ruling's own sender proof record, `p1792787150-3857348-2b5c`, was created at 20:25:50Z. This task wrote nothing into `/home/byates/fm-abbe`.

**Disposition.** Firstmate's disposition, in `/home/byates/fm-llmrouter/data/opencode-release-cut-4/fix-round-2.md`, records the Abbe B-16.10 task wake-log append as **waived** by the Abbe captain's ruling `p1792787150-3857348-2b5c`. Abbe's acknowledgment `p1792786679-2709706-0cf3` and the bump brief's verbatim citation are the read-back.

**Relay identity.** These three files have the same SHA-256, `460bc34fb5b44e8f7b187b02ec67e23240a6856de965cce9504d609f52a5d5b5`, and `cmp` found the first two identical:

- the archived relay `/home/byates/fm-llmrouter/data/peer-mail/p1792777340-1942459-70c1-relay.md`;
- the committed copy `delivery/firstmate-relay-p1792777340-1942459-70c1.md`;
- the delivered `/tmp/opencode/abbe-rel4.md`.

The check was rerun at 2026-10-23T20:39Z.

**Producer wake-log record.** At 2026-10-23T20:39:29Z one line was appended with `>>` to this task's `/home/byates/fm-llmrouter/state/opencode-release-cut-4.wake-events`, taking it from 7 to 8 lines. Read-back confirmed that the last line equals the record. That line is retained verbatim as `delivery/producer-delivery-record.txt`, with SHA-256 `2170269b…9dbb`. It carries:

- the release URL and source;
- both archive URLs, with their SHA-256 values and checksum URLs;
- the SaaS wake-log append and the SaaS outbox ID `p1792786351-2011828-449f`;
- the Abbe relay path and its SHA-256;
- the Abbe acknowledgment `p1792786679-2709706-0cf3` and the bump-brief citation path;
- the waiver ruling `p1792787150-3857348-2b5c`.
Loading
Loading