The selected foundation is OpenCode v1.18.34 at
aec0b9a6d8898f68f923aaf08b7306d931fd9d76. Codex scripts and reports are historical,
not an alternative implicitly selected by the editor.
On Linux amd64, with Python 3 and bubblewrap already installed:
python3 -B scripts/build_opencode_runtime.py
python3 -B scripts/build_opencode_runtime.py --executeThe first command only previews the work. The second downloads the pinned Bun
build tool, exact upstream source and frozen-lockfile dependencies inside ignored
build/opencode-runtime/. Dependency lifecycle scripts are disabled; compilation
runs without network access or access to the owner's files and credentials.
No tool is installed globally. An interrupted, unfinished build can be resumed
with --execute --resume; a finished report is not overwritten.
The tested headless build occupies about 3.1 GB. Its embedded web UI is intentionally
absent; reusing upstream web/mobile/desktop clients remains separate work. The
operator-owned build-report.json records the binary and source hashes. Supply
a separately provisioned, owner-controlled Node executable to the launcher;
the build script does not download Node or a model.
Set user-level, machine-scoped settings, not repository settings:
{
"volparossaCode.privateSocket": "/absolute/owned-private/compute.sock",
"volparossaCode.openCodeRuntime": {
"version": 1,
"opencode": "/absolute/prepared/opencode",
"opencodeSha256": "<actual executable SHA-256>",
"buildReport": "/absolute/prepared/BUILD_REPORT.json",
"node": "/absolute/prepared/node",
"nodeSha256": "<actual Node executable SHA-256>"
}
}Use canonical owner-controlled inputs, not group/other-writable files. The build report binds the upstream revision, lockfile, local patch, executable hash and runtime version. It is an operator-owned build record, not independent release authorization or evidence of model behavior. The launcher downloads nothing.
The core socket must be same-owner mode 0600 in a mode-0700 directory. The
owner-selected executor must advertise one of the exact supported conversation
profiles below; the editor does not choose an arbitrary model or download one.
Python 3, bubblewrap and system runtime libraries must already be available.
No existing OpenCode/Codex profile is modified.
An optional user-level volparossaCode.ownerVerification plan adds an
owner-selected check after each completed coding turn. Each invocation requires
separate approval; an actual failed check can continue the same session within
the original task budget. See editor setup and check limitations.
qwen3-0.6b-v1: the unchanged default; native templateqwen3-tools-nonthinking-v1, model context 32,768 tokens.qwen3-4b-instruct-2507-v1: the explicit larger profile; native templateqwen3-tools-instruct-2507-v1, model context 262,144 tokens.
Both profiles keep the same bounded conversation allowance: at most 12,288 prompt tokens, 1,024 new tokens, 4,096 output bytes and a 524,288-byte request envelope. The larger model context does not enlarge the admitted prompt or authorize silent truncation. The core remains responsible for exact token validation and resource admission. Model quality and useful execution still require real-model evidence.
Before starting OpenCode, the owner validates the complete core capability reply,
including template, limits, private-local scope and negotiated greedy_v1 policy.
That one model identity binds the native catalog, all agent roles, provider,
task/session checks and trial receipt. Each provider request checks the core again;
a different profile or incompatible result is refused, not silently substituted.
The existing version-1 ready bridge without a model identity is interpreted only
as its historical fixed 0.6B profile, never as 4B. Current owners report the actual
validated identity explicitly. Socket and orchestration tests cover these bindings;
they are not evidence of successful 4B coding or confidential peer execution.
Editor scope and approvals -> bounded stdio bridge
-> disposable Linux namespace owner
-> authenticated OpenCode HTTP/SSE sessions
-> authenticated loopback Chat Completions provider
-> same-owner core conversation IPC -> current private-local executor
OpenCode HTTP and the model provider stay inside the disposable network namespace.
Only the selected project is writable as /workspace; configuration and session
state are temporary. Host routes, DNS and firewall remain unchanged. Upstream
permissions are defense in depth, not the OS sandbox.
The configured build, general and read-only explore agents use a compact
prompt for the current Qwen single-tool conversation interface. Each tool turn
must propose one offered call, then wait for its correlated result. This replaces
the pinned upstream default prompt, which explicitly requests parallel tool calls
that this core interface cannot represent. Workspace/approval permissions,
read/edit/test requirements and core-owned scheduling are unchanged. This prompt
alignment does not itself prove that the model can complete a coding task.
Supported message/tool history and call identities are preserved. Unsupported
inputs fail rather than being silently shortened or stripped. The provider waits
for core cleanup before returning SDK-compatible SSE or JSON; this is not
token-by-token model streaming. Exhaustion remains length, not successful stop.
Cleanup-confirmed invalid/truncated output or an unmet tool choice returns a
terminal HTTP 422, so the pinned SDK and OpenCode do not blindly regenerate that
unusable turn. Busy/execution/transport availability and uncertain cleanup remain
separate failures; this change does not make an incomplete answer usable.
An already reported, known terminal task failure is separate from runtime cleanup:
the task still fails, while a confirmed session/provider/process shutdown can
succeed. Unknown/protocol errors and any unconfirmed cleanup still fail closed.
The provider also counts cleanup for a correlated, admitted task ending with
the core's terminal execution_failed or cancelled response, or a valid result
that races local cancellation. These remain failed requests, not model results.
The receipt is retained per rejection inside the checked transport; an error code
alone, admission alone, a cancellation acknowledgement or a disconnect cannot
establish cleanup. This prevents a later native retry from turning a safely
reaped failed attempt into a false runtime-cleanup mismatch.
Cancellation reaches the core and owned session tree. Cleanup uncertainty remains
an error even when text was generated.
Only correlated one-shot bash/edit requests can be approved. Inspect proposed changes and relevant tests: a completed native turn is not task-correctness proof. Cancellation does not roll back existing edits. Background subagent mode is not enabled until its extended lifecycle is supported.
Generated configuration enables only volparossa, disables sharing, auto-updates,
default/external plugins, LSP downloads and repository configuration, and inherits
no owner credentials. Upstream flags alone do not prevent background dependency
installation: the recorded opencode-no-runtime-installs.patch disables the config
loader's install when VOLPAROSSA_NO_RUNTIME_INSTALLS=1. Outer network isolation
remains mandatory; the launcher requires the patch in the build report.
The public core broker currently performs signed-public-dataset text inference,
not private conversation/tool turns. It must not receive private OpenCode history
disguised as public content. The implemented volparossa_delegate_public tool
delegates an exact owner-authorized public snapshot through that broker and returns
the original result, tool-call ID and core task ID. It does not invent an execution
receipt or treat provider selection as proof that a peer executed anything.
To enable this development path, set volparossaCode.publicSocket in user settings
to a separately started, same-owner public-serve endpoint and run OpenCode Task
with Enrolled Public Work. This currently depends on core branch
feature/browser-cooperative-compute, inspected at
610866b8770b63719ec1f4b4ce6abb6a83a596ef (PR #178); it is not an interface supplied
by the current main branch. The private conversation service is still needed for
OpenCode's planning turns.
The editor captures and displays the exact public question (at most 512 UTF-8 bytes), selected excerpt (at most 4096 bytes) and supported license for explicit rights confirmation. It does not rescan the project. Only a single-use proxy socket enters the runtime namespace; the raw public service socket and its general submission authority stay outside. The tool takes no model-supplied content arguments. Private planning, tool history and other files do not become public because the tool is enabled. Public disclosure cannot be reversed by cancelling a task. Cancellation is propagated to the actual core task and cleanup is awaited; incomplete results remain incomplete.
Run OpenCode Task with Enrolled Public Source connects the same native agent loop to the code-proposal service. It captures the complete saved source file in the selected workspace, displays its exact bytes and public question, and asks for sharing-rights consent before starting OpenCode. This uses the v6 code task, not the document-summary enrollment of Enrolled Public Work. The two service purposes remain checked and are not silently substituted.
The agent can invoke its existing argumentless volparossa_delegate_public tool
once to receive the original source-bound replacement proposal. Core still
chooses the executor; the agent may inspect the result and propose local edits
under the existing one-shot approvals and owner-selected verification loop.
Private planning history, verification output and other files are not exported.
The private conversation service is still needed for planning. The new editor
wiring is not yet proof of a complete real-model OpenCode/peer coding loop or
protected private network execution.
Propose a Replacement for a Public Source File is a separate owner command, not a private-history fallback. It captures the complete saved selected file (at most 4096 UTF-8 bytes) and a public task (at most 512 bytes), shows their exact contents and asks for license/sharing-rights consent. Use an explicitly configured code-proposal public service; an ordinary document service and a private conversation service are not interchangeable with it. The core selects and accounts for the actual peer; the application does not add a scheduler.
The additive public_code_proposal operation requests single_file_replacement_v1.
Its original worker output is checked against the selected source hash, task
receipt, model identity, report hash, dataset bindings, EOS and cleanup. The same
opaque snapshot and result contract also pass through the existing native
volparossa_delegate_public proxy, whose model-facing arguments stay empty.
For the direct owner command, no local planning model is needed to rewrite or
reinterpret the peer's candidate.
Only the exact raw complete replacement is eligible for a separate local edit approval. Markdown fences are not extracted; partial output is not repaired or called complete. The owner rechecks the original source hash and pinned local file identity after approval, rejects symlinks and hardlinks, and replaces only that selected file. Other files and the original test files are not supplied to the peer or changed by this operation. An optional user-configured verifier uses the existing separate one-shot local, read-only/no-network check; its output is not automatically shared with peers. A passed check is not general correctness.
Focused checks use real Unix framing and owner filesystem operations with explicit synthetic core/worker reports. They are contract evidence, not real model quality, live peer execution or a completed distributed coding workflow. No private remote-execution protection, automatic publication of private code or complete multi-file coding capability is claimed by this first public contract.
The additive disposable-guest driver scripts/smoke_public_code_proposal.cjs
prepares an explicitly public copy of the unchanged ORIGINAL and TEST
fixture from the existing inference trial. Only the selected source and question
are submitted to the real external code-proposal service; the original tests
remain local. No local planner, supplied model answer or scripted model tool
sequence is used. The driver requires the initial three tests to fail, a
source-bound complete peer proposal, separate fixture-owner edit approval, the
existing approved read-only check and the same independent immutable tests to
pass. It records hashes and closed results, not source text or model output.
Its parent must independently establish peer execution, route provenance and
guest cleanup; the driver receipt alone does not prove them.
Capture its committed sources and the already available pinned Node executable
with scripts/pack_opencode_cooperation.py --public-code-proposal --execute and
the explicit --code-revision, --node and fresh workspace --output inputs.
That separate public-code-proposal-inputs bundle contains no OpenCode binary,
build report or local model. The historical cooperation bundle and private
inference trial retain their original contracts. Preparing this driver or
passing its inert contract tests is not a successful live coding trial.
opencode-public-code.yml is the separate manual hosted entry for that proof.
It records its own workflow commit separately from the immutable public driver
commit and the reviewed core fixture. It reuses the core-owned real overlay/VM
runner and final acceptance checks; it does not run a local planning model or
start the private OpenCode inference trial. Only pinned source/runtime inputs
and closed receipts are staged or exported. Like the private trial, dispatch
requires the workflow to be registered on the default branch first; the actual
run must select the reviewed integration commit, not substitute main.
The first actual public trial, run 37213737334, failed overall. Its original
receipts show real Qwen0.6B peer execution, a complete raw replacement, the
owner-approved single-file edit and passing unchanged local tests. The parent
route-evidence gate rejected application traffic to an unselected provider:
its capture combined provider discovery with task execution, and its generic
control-path mapping did not distinguish the two discovery contacts from the
single selected executor. Those packet counts alone cannot retrospectively prove
that all unselected traffic was discovery. Cleanup completed with zero owned
objects and matching before/after guest network hashes; the failed run remains
failed, not a complete route/privacy proof.
The reviewed core fixture now separates those phases with a bounded, byte-exact Unix control observer. It holds the genuine discovery response while the parent checks TCP teardown and drains the discovery capture, then releases that same response into a separate task capture. Physical discovery contacts and the selected executor have separate bindings; task traffic to an unselected provider is still rejected. The immutable driver, real model, question, original tests, deadlines and success criteria remain unchanged. Passing fixture/socket checks is not yet evidence that this revised live trial passes.
The next public trial 37216555196
failed before Connect or model submission: its 60-second discovery barrier never
observed all eight required advertisements. The last of 552 valid queries lacked
relay0/5 and both exits. Cleanup passed, but the retained snapshot does not explain
the missing advertisements. The follow-up core
1297f8f1a5d163d802efd066c51a950b95588fa5 diagnostic retains only fixed
role-presence/status/event summaries from existing cleanup captures, not raw
identities, endpoints or logs. It does not relax discovery or route requirements.
The public trial 37218917021
on workflow 693516f8 / core 1297f8f1 also failed, but did observe all
eight advertisements after 215 queries. It stopped at
CUSTODY_CAPTURE_UNAVAILABLE before the owner driver or model task: the original
capture guard allowed document discovery, not the new explicit code-proposal
scenario. Core 81f5f9de3fa25e430357ca7b6b457522b2193063 adds only that missing
capture scope under agent-jobs, with actual-shell allow/deny regression checks.
The public CI pin advances to that reviewed fixture; the private 4B pin stays at
1297f8f1, and immutable public driver f27576eb, model, original tests, privacy
checks and deadlines remain unchanged. Network cleanup reports zero objects and
equal guest-root hashes. This fixes a reproduced instrumentation mismatch, not
the earlier unexplained inventory failure or a proven live coding result.
Original ZIP SHA-256: 2b415caf44bc7e98b6eb40d1a6d00e66a57ba21f3f42e33b68a9885f923b76d8;
job 111485066863 log SHA-256: a7358305bc82d419b39d576d9bc55d175d4e0e99e3e7d1c087c12fb69c2cf2d0.
The subsequent public trial 37220221345
on workflow 423c5e2f / core 81f5f9de failed overall at
CODE_PROPOSAL_OBSERVER_STOP_FAILED. Its original driver and worker-observer
receipts show actual Qwen0.6B peer execution, EOS, a raw 31-byte replacement,
the owner-approved edit and passing unchanged original tests plus the independent
check. Both captured phases separately pass the original path validators; the
final control receipt and complete evidence join were not reached. The exact
fixture stop allowlist omitted the newly introduced control observer and refused
it before invoking a service stop. The new public-only pin
2a1b4ad347b7d9f12a6a4c2beee40ff8706bd477 admits that exact unit only in the
explicit code-proposal scope, retaining service-state, zero-PID and empty-cgroup
checks. Targeted shell/socket contracts pass; this is not a replacement live
pass, native OpenCode planner proof or private offload. The private 4B pin and
immutable driver remain unchanged. Original ZIP SHA-256:
6459dc4ef5351558f6818cf552b507f57d1b98ccd05148282e27d9ee765ef458;
job 111488876530 log SHA-256:
9b0f259e574f7e9399d6751adcb3c7d5130ab36d6725fe3045b6f2ebbdaf10d9.
The original public trial 37221727043,
attempt 1, passes the complete bounded public acceptance. It binds workflow
Code 54af18cc5d30a880e3be298192af150daf01b805 (tree
eef18e2ce8c135e6daab29dbc80fbbd086f85d5a), core
2a1b4ad347b7d9f12a6a4c2beee40ff8706bd477 (tree
cb999c2ae1419407211e97ba05366d9c6a4301ab) and unchanged public driver
f27576ebd7e7ded2f1319186f34df87f48e970d7. All eight expected relay/exit
advertisements were observed after 235 inventory queries. The real Qwen0.6B
worker on relay4 returned its
original EOS-complete 31-byte replacement after 12 tokens. The fixture's
original tests failed before the edit; the separately approved edit/check and
unchanged original tests plus independent check then passed. No local planner
or output repair supplied the answer.
The separate discovery and task captures pass their original provider/path and privacy validators. The final byte-preserving control receipt joins all eight exchanges with zero active requests; all private cleanup flags pass, no owned network objects remain and guest network snapshots match. This is a public owner-helper/peer/model result, not evidence of native editor operation, a complete OpenCode planning loop, general coding quality or confidential private offload. Earlier runs retain their original failed outcomes.
Original artifact ZIP SHA-256:
8a17e92c2bc4148093651a020cf0a2daaf46b2e14fcad74a4e4343024de02d11;
job 111493248899 log SHA-256:
0dbc4650b89ba5d6bb8a3474f886ff4016feb1a0042d88b52c9e5391776fee26.
Remote conversation execution needs a suitable typed task family; confidential execution additionally requires actual protection against the executing host.
Local subagents, TLS, split prompts, peer signatures and immune labels do not prove that protection. Reuse upstream clients through the common provider, but do not claim additional platforms tested here. The target remains cooperative network execution and shared improvement, not a permanently local-only product.
Focused fixtures cover HTTP/Unix framing, tool identity, cancellation, public snapshot enrollment, editor consent, child-session scope, late approvals, process failure and cleanup. Python checks cover the builder and namespace proxy mount. Model and OpenCode server responses in the unit fixtures are synthetic.
The separate native smoke uses the actual source-built OpenCode process, production launcher, HTTP/SSE client and Chat Completions adapter, with only the core/model responses simulated. It observes one approved command creating a disposable file, correlated tool-result history on the next turn, final output and session/process cleanup. It creates no real inference or peer-execution claim. Run explicitly with an existing Node executable:
/absolute/node tests/real_opencode_smoke.cjs --execute \
--node /absolute/node \
--build-report /absolute/build/opencode-runtime/build-report.jsonIts native-smoke-report.json is written beside the build record and is not
overwritten. The 2026-10-02 trial used Node v24.19.0 and the OpenCode binary with
SHA-256 86b944fd0a279c7a24f7396e55aec0cca39685f5d32496a26941cec8ee2cc0bf.
The actual-runtime terminal-error regression also passes: both invalid_output
and wire_truncated produce exactly one coding submission, no regeneration, no
tool approvals or project changes, and confirmed session/process cleanup. Core
outputs are deliberately synthetic; this does not explain the older VM03 failure
or prove real model-driven editing. Run without downloading a model:
/absolute/node tests/real_opencode_provider_errors.cjs --execute \
--node /absolute/node \
--build-report /absolute/build/opencode-runtime/build-report.json \
--report /absolute/build/opencode-runtime/native-errors-terminal.jsonThe native cooperative smoke also passes with this actual runtime. Both complete
and incomplete answers traverse the trusted custom tool, single-use owner proxy
and public-core adapter. The next actual OpenCode model request contains the
original result and call IDs; a private sentinel is absent from public requests.
An approved sandbox check confirms that the limited proxy exists and the raw
public core socket is unavailable. Model and public-core replies remain simulated:
the report explicitly records model_inference: false and peer_execution: false.
/absolute/node tests/real_opencode_cooperative_smoke.cjs --execute \
--node /absolute/node \
--build-report /absolute/build/opencode-runtime/build-report.jsonIts native-cooperative-smoke-report.json is separate from the local-tool report.
Neither report may be relabelled as real inference or immune-policy proof.
Actual model-driven coding, native editor UI operation, confidential peer
execution and full immune supervision remain unproved.
scripts/smoke_opencode_cooperation.cjs uses the production OpenCode runtime and
enrolled proxy against an externally supplied public-serve endpoint, rather
than generating public-core replies. It runs only as vpci or volparossa inside
the explicitly identified disposable KVM guest. The launcher supports the exact
volparossa service account home by creating an empty namespace directory; it
does not expose the account's host files.
/absolute/node scripts/smoke_opencode_cooperation.cjs --execute --yes \
--node /absolute/node --build-report /absolute/runtime/build-report.json \
--public-socket /absolute/owner/public.sock \
--snapshot /absolute/owner/public-snapshot.json --snapshot-sha256 EXACT_SHA256 \
--project-parent /absolute/owner/new-projects --output /absolute/owner/new-report.jsonThe hash-bound JSON snapshot contains question, context, license,
public_content: true and rights_confirmed: true. Only the private planning
turns are synthetic, to exercise exactly one native delegation without claiming
model-driven planning. Success requires a complete original result naming at
least two execution providers, an unchanged tool-result round trip and confirmed
runtime/task cleanup. The report contains bounded status, IDs and hashes, not
the submitted text or answer. The parent topology must independently join these
to the real workers, retained receipts, protected traffic and VM cleanup. The
driver and its eight focused checks are not a completed live-peer proof.
The core's agent-cooperative-code disposable topology consumes an explicit
offline bundle rather than fetching or executing an unreviewed editor runtime.
Capture committed Code files and an already source-built OpenCode runtime:
python3 -B scripts/pack_opencode_cooperation.py --execute \
--code-revision b3a4cfe79158d24e1dd61dcb56d37123f9d3d55c \
--node /absolute/prepared/node \
--build-report /absolute/build/opencode-runtime/build-report.json \
--output /absolute/code-worktree/build/opencode-cooperative-inputs-01The manifest binds all 25 source/runtime/license files by hash, size and mode.
The packer reads source blobs at the selected commit, not uncommitted changes,
and verifies the existing source-build record and pinned Node distribution. It
does not download or launch anything. Pass this new directory and the reported
manifest SHA-256 to the core VM runner with --code-bundle and
--code-manifest-sha256. Bundle capture and transfer are input preparation,
not proof of real model execution, peer success or private-task confidentiality.
OpenCode's temperature:0 now requests the core's explicitly negotiated
greedy_v1 policy. The adapter first sends conversation_capabilities with
generation_policy_version:1, requires the advertised policy, and binds the
result's generation_policy to the submitted input. Missing capability or
missing/conflicting result evidence is an error, not a sampled fallback.
An older ordinary conversation client can still use its unchanged handshake;
omitting the policy retains the core's previous profile behavior.
This corrects a real contract mismatch: the earlier adapter accepted zero
temperature while the Qwen worker used its default sampled 0.7/0.8/20 profile.
The fixed worker passes do_sample:false,num_beams:1; model, token budgets,
tool permissions, task and independent success checks remain unchanged.
Protocol/backend-double checks verify the wiring, not model quality. The earlier
run 37066003771
remains failed: one completed native read, then an assistant stop, without an edit
or passing independent check. The mismatch is not a proven explanation for that
stop, and greedy generation does not guarantee a completed coding task.
scripts/smoke_opencode_inference.py prepares one explicit disposable Debian 13
KVM trial; it does not install or run the model on the development host. Its
pack mode captures each Code source/runtime file by hash and the exact core
archive selected by its explicit model profile. The default Qwen3-0.6B profile
retains core 845cc84d0d0b766ab1c5227231dbf6c8eaeb8cc3; the separate
qwen3-4b-instruct-2507-v1 candidate binds core
1297f8f1a5d163d802efd066c51a950b95588fa5. This includes the bounded
provisioning-timeout recovery from core 3aa0e2d0 and existing closed worker
diagnostics. The previous 37209881216 attempt remains failed before model
execution. Trial 37217032474
on the previous core f25352df completed the pinned 4B provisioning and returned one actual model result,
but the native task failed at invalid_output after 152,995 ms. No tools, edits
or checks ran; the original source remained unchanged. Runtime/guest cleanup and
normalized host routes/DNS checks passed, while raw host-route bytes differed.
The raw model text and rejection subtype were not retained; neither a precise
parse cause nor useful model-guided coding is established by this result.
The new core accepts the pinned native template's assistant preface followed by
one complete tagged tool proposal, while retaining strict JSON, offered-tool,
EOS, resource and owner-approval checks. This is a demonstrated adapter
compatibility fix, not a proven explanation of that failed result. Its opt-in
closed diagnostics distinguish rejection categories without retaining private
model text; repeated validation observations do not count as extra executions.
The subsequent native 4B trial 37218791500
on Code 693516f8c5f3b7bab10fe83a6462f955af5a8c3e and core 1297f8f1
failed. Pinned provisioning completed; three attempts reached generation
begin after about 20 seconds but exceeded the unchanged 600-second execution
budget. Their confirmed-cleanup execution_failed replies became HTTP 503,
which the pinned OpenCode runtime retried. The overall 40-minute task deadline
cancelled a fourth attempt. No completed model response, EOS, tool, edit or
passing check was observed. The retained observations do not distinguish first
forward computation from later decoding and do not establish the stall's cause.
Private/runtime/guest and QEMU/scratch cleanup passed; normalized host routes
and DNS matched, while raw route bytes differed. This does not become a pass
because the separate public owner-command trial succeeded.
Original artifact ZIP SHA-256:
56ef70bf28c08458b78ad61539495bcfdf45d990fd9563f366dac65652a768c2;
job 111484703730 log SHA-256:
dbef2bd19983b4c84a3fe5bdf413ea0863984c472c88348b6f09b4923278f8b2.
A dirty source capture is labelled as such, not attributed to an unchanged Git HEAD. The guest provisions only that pinned profile using the existing guarded core provisioner.
python3 -B scripts/smoke_opencode_inference.py
python3 -B scripts/smoke_opencode_inference.py pack \
--core /absolute/core-at-required-revision \
--node /absolute/prepared/node \
--output /absolute/code-worktree/build/opencode-inference-inputs-01.tar.gz
python3 -B scripts/smoke_opencode_inference.py execute --yes \
--core /absolute/core-at-required-revision \
--tools /absolute/verified-workspace-vm-tools \
--image /absolute/pinned/debian-13-genericcloud-amd64-20260826-2582.qcow2 \
--bundle /absolute/code-worktree/build/opencode-inference-inputs-01.tar.gz \
--output /absolute/code-worktree/build/opencode-inference-vm-01Inputs must already exist and match their pins; output paths must be new. The
runner prints a no-execution preview without a mode. Actual execution requires
usable KVM, no other QEMU instance and at least 8 GiB of currently available host
memory. It owns a 6 GiB/two-vCPU headless guest in a bounded no-swap user cgroup;
it never closes the owner's applications or changes host routing/DNS/firewall.
The explicit 4B profile instead requires at least 14 GiB available host memory,
uses a 12 GiB/two-vCPU guest with a 13 GiB no-swap cgroup, and reserves a
40 GiB virtual disk with a 20 GiB provisioning budget. Select the same
--model-profile qwen3-4b-instruct-2507-v1 for both pack and execute;
the larger profile does not replace the default or relax the coding task.
The actual runtime/model must read and edit a disposable Python project and run its existing tests. A separate sandbox independently checks the result using unchanged tests; a generated success message alone is not success. Only bounded read/test commands and edits to the selected fixture can be approved. The reports separate task execution, model provenance and guest/resource cleanup. Four JavaScript and five Python driver checks pass; these checks and a successfully packed source bundle are not evidence that the real-model trial passes.
The completed opencode-inference-vm-03 attempt provisioned the real Qwen model
and observed five supervised worker results, but did not complete a native coding
turn, edit or test. Its original task error was obscured by a subsequent
cleanup_unconfirmed label; the guest units and QEMU were nevertheless stopped,
private state removed and host route/DNS snapshots unchanged. The current driver
preserves the first closed task-error category separately from session and runtime
cleanup failures, plus bounded provider result/error counters. It exports no raw
prompt, code, model answer or exception text. This diagnostic correction does not
turn the original failed trial into a pass.
The subsequent opencode-inference-vm-04 trial used Code
11a7063f178a3094c0d6f2d1052894f1fef8dc4a and the same exact core revision. The real
Qwen worker reached an EOS-complete, non-truncated output that failed the strict
conversation decoder: one submitted turn, invalid_output, no retry and no
approved edit or test. The original opencode_task_incomplete error remained
visible; runtime cleanup was confirmed, guest processes/private state and QEMU
scratch were removed, and observed host routes/DNS were unchanged. The retained
closed diagnostics do not identify the malformed output shape; raw output was
not exported. The parallel-prompt conflict above is a verified integration issue,
not a proven explanation of this particular failure. Its correction still
requires a new real-model trial; VM04 remains failed.
The owner-verification trial
37076283235
on Code 40d89016c3e0155f054026c5553b5e8224b9cf9f and core
845cc84d0d0b766ab1c5227231dbf6c8eaeb8cc3 also failed. Three actual owner
checks and two same-session continuations ran, but only one native read completed;
no edit or test command was requested, the fixture was unchanged and the final
independent check failed. Five core requests produced one execution failure and
four results: one function call and three assistant responses. The report did not
export model text, so it does not establish why the model stopped without editing.
That original report also marks runtime cleanup unconfirmed: its provider counted
only the four successful-result cleanups, not the first admitted terminal
execution failure. The transport accounting correction above preserves that
failure while retaining its actual cleanup receipt. Socket/provider regressions
exercise the correction; they do not retroactively change the failed trial or
prove coding success. Guest private state and owned units were removed, QEMU was
joined and its scratch removed; the outer host route/DNS comparison was false,
so this run is not evidence of unchanged host state. Original artifact ZIP SHA-256:
9ac899f449239debc07817df803216891639836c03e3b8533e71e315399eccf9.
The first explicit 4B trial
37204436941,
on Code 0295710c6e93bcdf989f5b1527f4ffde746ab16e and core
39bfc0d14bd45563957c8a41e8183592e7ee7a73, failed during model provisioning.
The guest compiled the real core but never confirmed model installation or
started a coding task. Its closed report retains only model-provision /
stage_failed, not the failing provisioning operation; neither model quality
nor coding completion can be inferred from this attempt. Guest private state
and owned processes were cleaned up, QEMU was joined and its scratch removed.
The guest network snapshot matched, but the outer CI host's IPv6-route hash
changed; this is not proof of unchanged outer host state. Original artifact ZIP
SHA-256: 41e48432b0b36f409517895b3fbf47b0832d222c369187a797fdd9e77539ad98.
Subsequent trials retain closed provisioning diagnostics: the substage, process and HTTP status, fixed failure categories, and pin-validated ordered download starts—not completed downloads. Raw logs, URLs and error text stay private and are removed during cleanup. This does not establish the original failure's cause or change any resource limit, coding task or success condition.
The next original 4B trial 37205549602,
on Code 5a3cc386eaeda892b99947ac9476840d5d32c143 and the same core, confirms
the exact model/runtime provisioning, but still fails the coding task. After
2,400,233 ms there are five provider submissions, four cleanup-confirmed execution
failures, zero completed model responses and no read/edit/test operations. Three
closed service events are deadlines, one is unclassified and the last is owner
cancellation. The low observed core-memory peak and absence of OOM do not prove
that weights loaded or generation began; the failed run retained no worker-stage
or pause-state observations. The fixture is unchanged. Private state, owned
processes, VM scratch and QEMU are cleaned up, and both guest and outer-host
routes/DNS comparisons pass. Original ZIP SHA-256:
5d448d5ee42402d91d5428b1abb2c104b4f0067f8f7b505e76a2f118fcdc1537;
original job-log SHA-256:
29b0ccf0deb8272d905a4b5ce7f000901c5966af93a5e51bb6cbd0e70975c9ea.
This is successful provisioning, not a working 4B coding loop.
The current 4B candidate adds closed failure-state observations from the core: the last validated worker stage and its begin/complete state, capacity decision and pressure, issued versus acknowledged owner controls, and observed peak RSS. This distinguishes an owner-gate pause from model loading or generation without exporting prompts, code, model output, paths or request IDs. A stage entry is not successful execution, and these observations do not retrospectively explain the previous failure. Worker/task deadlines, resources and acceptance remain unchanged.
New host observations retain all three raw hashes and separately compare the
IPv6 route multiset excluding only the kernel's reference-count column. Every
other field and duplicate remains significant; IPv4-route and resolv.conf
bytes must still match exactly. Unknown formats fail the observation without
skipping VM/scratch cleanup. This checks only the proc-visible routes and DNS
file, not all host networking or firewall state; it cannot retrospectively
explain the earlier hash changes. The column definition comes from the
Linux IPv6 route emitter.
The manual opencode-inference.yml workflow adds an explicit GitHub-hosted
Ubuntu 24.04 host-tool profile for that same trial. It requires the dispatched
Code SHA, a clean checkout, the fixed core revision and newly verified runtime
inputs. The guest task is unchanged: actual OpenCode/core/Qwen must request
approved tool work, edit the disposable project and run its check. It is not
a mocked provider or a private-peer execution proof.
The workflow checks KVM and effective user-cgroup limits before source-building OpenCode. Its default retains the 8 GiB admission threshold, 6 GiB/two-vCPU guest, 7 GiB cgroup, disabled swap and disposable cleanup. The explicit 4B choice uses the separate source and resource profile described above. Only on the ephemeral CI host, official packages and narrowly scoped KVM ACL/AppArmor changes are permitted; the owned changes must be restored. Only closed provenance/result/cleanup receipts are exported. The existing pinned Debian workspace-tool path is unchanged. Focused offline contracts and shell/syntax checks pass; hosted admission has been exercised, but actual coding completion remains unproved.
For pre-merge testing, the identical manual workflow file must first exist on
the default branch. Dispatch it on feature/opencode-integration, supplying
that exact reviewed commit as expected_code_sha; dispatching an unprepared
main branch cannot pass the source guard and must not install tools or launch
a guest. There is no automatic inference run on push or pull request.