No Branch/Tag specified
main
j470b-server-mesh-rejoin
mesh-compat-382
j444b-d381-key-wins-flood
j461b-macos-utun-reader-thread
j475b-remove-host-motion
fix-reconnect-new-link
j481-d380
dev
j479-mesh-soak
fix/j476-host-facts
j475-motion-pill-split
j470-mac-node-join
root-upgrade-d376
j474-review-merge
latency-targets-120hz
nightly-suite-shards
gotatun-pin-j469
macos-utun-reader-thread
fix-flood-echo-stall
wip/j416
motion-fast-ease-out
mesh-addhost-j259
takeover-close-terminals-d368
kbd-instant-followups
fix-trust-key-double-click
nightly-suite-partial-report
appwin-icons-j207
rusqlite-slice1
swipe-content-first-d374
mesh-mtu-381
addhost-instant-open
glass-contrast-d365-mock
glass-contrast-d365
signout-followups-442
fix-startup-toast-red
research-gotatun-matrix-j317
themes-sync-j304
fix-load-flakes
fix-nix-zig-patch
fix-compute01-browser-baseline
ratchet-size-baseline-419
predict-auto-d130
revoke-coverage-d367
nightly-suite-queue-timeout
nightly-browser-suite
fix-rustsec-2026-0459
fonts-ioskeley-obel
log-retention-d375
fix-kbd-no-anim-427
fix-dev-red-specs-2
takeover-proof-305-j205
wip/j410-server-pump
ui-consistency-d372
fix-osc52-clipboard
libghostty-vt-1.0
forget-retired-host-d369
j404-merge-426
fix-setup-lock-race
fix-touch-select-426
revoke-access-report-ui
fix-predictive-echo-specs
fix-selinux-agent-exec
wip/j395-checkpoint2
wip/j395
j391-review-scratch
ui-consistency-j195-deferred-rebased
fix-rustc-paths-421
decisions-wording-341
fix-install-suite-red
fix-dev-rtt-specs
fix-pending-removal-align
fix-privileged-skip
fix-install-suite-404
review-j368
mesh-dns-j254
revoke-access-report-d356b
revoke-privilege-round5
fix-removal-confirm
review-j360
gotatun-rotation-367
deps-refresh-340
review-j354
review-J351
review-j350
addhost-takeover-d359
revoke-report-items-347
revoke-end-sessions-d362
review-j348
size-mesh-ssh-346
size-trim-337
revoke-access-diff-d356
j259-pre-rebase-b06c5a6
j305-ended-at-start-spec
addhost-sudo-consent
fix-layout-real-specs-411
fix-shell-open-411
fix-console-hosts-373
fix-shell-exit
fuzz-host-name-353
fix-host-details-410
macos-filter-j197
research-gotatun-tricks
revoke-p3-j216l
stale-state-pill
revoke-followups-j216k
revoke-progress-j216e
backup/macos01-20261106/lume/j197
backup/macos01-20261106/lume/appwin-icons-j207-stash0
backup/macos01-20261106/claude/stash-0
backup/macos01-20261106/claude/stash-1
backup/macos01-20261106/claude/J80-macos-s1
backup/macos01-20261106/claude/J80
backup/macos01-20261106/claude/J80-slice1-20261102
backup/macos01-20261106/claude/J16b-appwin-on-dev
backup/macos01-20261106/claude/appwin-launch-idle-146
backup/macos01-20261106/claude/J80-s1-run
wip/j259
trust-285-p3c
runtime-lock-j216f
mesh-ssh-p3-j175
tun-proof-p3b
trust-285-p3
terminal-polish-j271
tun-proof-p3
ssh-install-flakes-j216i
fuzz-fixes-j264
trust-285-a
trust-285-b
restart-oversized-fixture-j198
backup/macos01-20261106/lume/appwin-icons-j207
restart-bound-j216h
up-preflight-p3-j198
backup/macos01-20261106/lume/j251
up-preflight-j198
wip/up-preflight-j198-j245-p2
wip/up-preflight-j198-j245-p1
agent-fsync-offloop-j196
wip/up-preflight-j198-j245
settings-offscreen-j231
wip/up-preflight-j198-j226-inspection
wip/j103f
themes-j206
wip/up-preflight-j198-j226
flakes-j216c
backup/macos01-20261106/claude/j197
flakes-j216b
backup/macos01-20261106/claude/j197-red
wip/up-preflight-j198-review
flakes-j216
backup/macos01-20261106/claude/appwin-icons-j207
engineering-j208b
appwin-mock-j209
toast-stack-j165
engineering-j208
decisions-d351
decisions-d350
decisions-d349
appearance-presets-mock-j129
decisions-d348
docs-audit-spec
doc-coverage-baseline-raise
decisions-d347
decisions-d346b
decisions-d346
j88h-profile
ui-consistency-j195-deferred
ui-consistency-j195
engineering-practices-j194
preferred-login-ui-j166
signin-pools-263-j174
macos-node-265-s1
decisions-d345
decisions-d344
proxy-cgroup-j164
verify-quick-fuzz-329
proxy-start-io-j168
timing-flakes-j163
up-263-s1
mcp-events-j147
verify-quick-fuzz-j158
proxy-p3-j159
agent-resource-j157-detect
wip/j103d-final
remote-cancel-hang-j155
proxy-traefik-281-j62d
j149-verify-quick
proxy-traefik-281-j62b
j150-drop-unnamed
wip/j79d-red-r4
wip/j103d-d332
rootless-toast-j142
wip/j103d-head
wip/j103d
j125c-mcp
macos-build-j136
backup/macos01-20261106/claude/j136
wip/j79d-red-cli
wip/j79d-red-server
j121-link-liveness
j118c-tracer-failures
wip/j79c-head
release-desktop-j131
j124c-signed-macos
wip/j79c-red-p3
wip/j79c-red-p23
wip/j79c-red-p22
merge-j128-check
perf-deferred-j128
sidebar-toggle-260
j127-shortcut-changed-dot
j125-mcp
j118-tracer-failures
j126-account-summary
settings-sections-mock-j92
j120-pinch-lock
sidebar-292
backup/macos01-20261106/claude/j120
taste-2026-11-03
row-actions-242-215
backup/macos01-20261106/claude/stash-0-untracked
backup/macos01-20261106/claude/J80-265-s1-run
backup/macos01-20261106/claude/J80-macos-s1-20261102
j112-canvas-commands
ui-no-overshoot-scroll
fix-recovery-restart
backup/macos01-20261106/claude/stash-1-untracked
taste-2026-11-02
size-baseline-ratchet
machine-cards-structure-j108
j109-boot-copy-mockups
fix-dev-red
wip/up-263-s1
j95b-settings-rows
proxy-traefik-281
j95-option-rows
docs-human-j91
docs-keys-palette
fix-flood-1013-270-j38d
mesh-ssh-s1
mesh-ssh-s0
addhost-d291-tunnel
test-stability-load
mesh-relay-220
repro-296
shim-thp-off-24
mesh-pins-258-v2
mesh-dns
signin-d311-merged
docs-pages
ui-size-283
fix-ui-batch-specs
wip/j12b-edge-update
gate-on-arm
fix-rename-sync-293
trust-285-j60b
fix-focus-ring-clip
integ-ui-1101
edge-update-v2
signin-d311
taste-2026-11-01
layout-per-tab-250
ui-approved-splitopt-224
ui-approved-splitopt-224-on-dev
icon-text-centre-282
ui-approved-189-212-216
research-reverse-proxy
transfer-budget-320
review-mesh-pins-258-r2
sidebar-pill-259
review-mesh-relay-220
wip/j12-edge-update-v2
nix-package
status-crash-loop-237
fix-dev-test-failures
fix-fixture-socket-path
wip/mesh-relay-220-pre-dev-advance-rebase
fix-canvas-side-clip
research-head-to-head
frosted-real-256
review-mesh-pins-258
wip/mesh-relay-220-pre-final-rebase
review-layout-per-tab-250-r2
broad-suite-triage
nix-devshell
review-status-crash-loop-237-r3
wip/nix-devshell-pre-p3
taste-frosted-real
wip/code-serve-demo-2026-10-30
wip/code-serve-glass-2026-10-30
wip/code-serve-clusters-2026-10-30
wip/code-merge-release94-dev-2026-10-30
wip/rproxy-delta-scratch-2026-10-30
wip/stale-note-257-staged-2026-10-30
wip/d241-size-staged-2026-10-30
review-broad-suite-207
wip/mesh-pins-258-pre-split
wip/mesh-relay-220-pre-rebase
mesh-measure-220
plan-211-update
review-edge-autoupdate-r3
perf24-reconnect
review-stale-note-r2
release-prod-live
d241-shell-marker
review-mesh-pins-server-258
review-revocation-r3
review-setup-token-r2
review-sync-journal-r3
wip/review-mesh-pins-258-prune-review-1995fee46
frosted-scroll-256
sync-journal-r3
revocation-per-account-wip
review-tokio-asyncfd-0386
review-sync-p3s
wip/stash-8by64-stash0-2026-10-30
mesh-drag-r2
setup-token-data-wip
release-9-4
auth-busy-1013
mesh-view-overlap
sync-p3s
review-auth-busy-wake
review-readd-r8-wip
mesh-drag-bounds
audit-auth-93
app-windows-stream-start
review-authority-cap-r3
app-windows-r7-measure
readd-minimal-r6
readd-minimal-r5
app-windows-r7-soak
readd-minimal-r4
app-windows-r7
app-windows-r6
readd-minimal-r3
readd-minimal-r2
readd-minimal
merge-release8-dev
review-busy-page-liveness-r2
review-busy-page-liveness
mesh-view-trim
review-authority-read-retry-r2
review-remove-uninstall-r2
release-retry-reattach
release-retry
review-remove-uninstall
review-authority-read-retry
app-windows-ship
mesh-autoswitch-p2
mesh-ssh
mesh-relay
mesh-macos-node
screen-and-control
session-labels
review-real-logins-r5
review-real-logins-r4
review-real-logins-r3
shim-memory-r2
review-real-logins-r2
shim-memory
shadow-addhost-instant
shadow-real-logins
shadow-same-session-flood
shadow-prod-perf-fix
hosts-from-server
app-windows-real
app-windows-transport
release-prod-6w
mesh-policy-verify
quiet-close-toast
dev-merge-r4
review-mesh-agent-transport
review-app-windows-transport
settings-roundtrip
review-release-pipeline-r4
mesh-agent-transport
ended-strip-fix
review-audit-ca-update-d244
settings-rows
phone-width
signout-clear
fix-restart-tests
dev-merge-rp
signer-hardening
review-audit-ca-update
terminal-fidelity
review-audit-ca-update-wip
mesh-integrate
review-mesh-agent-transport-515d3712
review-mesh-dataplane-feec1988
mesh-dataplane
signout
research-canvas-node
wip/review-renderer-cost
wip/review-terminal-fidelity
padlock-glyph
review-release-pipeline-2e95b689
phone-polish
sidebar-polish
inbox-generic
review-mesh-dataplane-378d4055
prod-batch
ui-inbox
ui-ca-unlock
ui-machine-sections
review-mesh-dataplane-a5f744fb
tls-session-prod
session-bounds-prod
fix-dead-session
session-bounds
tls-session
palette-polish
shortcuts-d222
research-appmeta
phone-gutter
ui-centre-button
wip/ui-centre-button
wip/tls-session
review-addhost-breakit
ui-platform
renderer-cost
remote-agents
mesh-api
ssh-bootstrap
prod-hotfix2
prod-fixes
review-remote-agents
review-mesh-dataplane
session-life
research-browser
review-mesh-api
research-capture
review-mesh-api-round3
review-mesh-api-round1
gate-stability
review-gate-stability
review-relay-direct
review-mesh-api-findings
proto-sessions
font-picker
proto-addhost
proto-windows
mesh-core
latency-gate
research-bsd
research-discovery
keytray-mods
mock-core
ui-tweaks
fix-motion-sel
fix-motion
integrate2
fix-robust
t-web
t-server
vt-ghostty
fix-snap-echo
t-web-auth
review-vt2
t-agent
lane-protocol
lane-shim
lane-auth
s1-base
s1-contracts
s1-workspace
No results found.
No labels
launch-qa
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set
Reference
kayg/infraternal#211
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Backend implementation of D251: gate + structured MERGE admission before edge publication, verified quiet-window server handoff and rollback, update state/events, and host lockstep. Parent: #157; related CA handoff: #154. Backend only; UI states/copy and measured staging proof will be recorded here. No production deployment or signer Worker deployment.
Started edge-autoupdate at base/head
57b0c3ddca, from origin/dev. Parents #157 and #154 histories retrieved; reviewed release pipeline is already integrated. No origin/deploy-pipeline ref exists, but scripts/release/dev_builder.py and verified deployment are present. Scope D186/D226/D244/D250/D251, backend only. No production or Worker deployment.D251 additive contract proposal before implementation: orchestrator writes one bounded private REVIEW JSON receipt per full dev SHA, with schema=1, sha, verdict=MERGE, p0=0, p1=0 and bundle_sha256 binding the completed bundle SHA256SUMS. Builder admission separately requires exact SOURCE and GATE.sha/result=passed; no review prose or --review-clear attestation. Opt-in publication calls the existing immutable publisher, with credentials supplied only by the operator environment; this job never obtains credentials or deploys the Worker. Receipt absence/HOLD/nonzero counts/mismatch fails closed and may be retried without rebuilding. Updater will retain signed previous image and route through round-4 admission. Finding: checked-in Worker/public verifier still emit/read SHA256SUMS, while round-4 replacement requires identity-bearing MANIFEST/MANIFEST.sig; publication must require both formats from the externally deployed hardened signer rather than silently admit legacy-only releases.
Completed publish-admission steps, all pushed:
b894c660(admission module),f7263429(refusal tests),c12e2154(existing publisher adapter + round-4 metadata),fe6cb35d(builder late-review publication),9afb4efd(ordering/admission tests). Functional results: 14 admission/publication tests, 15 existing deployment tests and 5 existing release tests pass; bash -n and git diff --check pass. No signing keys, credentials, live upload or Worker deployment. Newer successful dev publication fences off late older reviews, preventing channel rewind. Quiet-window runtime and hosts are not implemented yet.Backend/UI contract for the later design pass (runtime implementation still pending):
No UI or server-state API is shipped by the publish-admission commits.
Publish admission is complete at pushed
7822f34b(including direct uploader ancestry/pinning checks, both signed formats, functional tests and operations contract). 14 admission/publication + 5 signed script fixtures pass; full native gate was preliminary and stopped before editing runtime, not claimed as final. Next additive backend contract: plugin API exposes optional server-start work under the same abort/join ownership as node/socket work; disable leaves no updater work. A generic process foreground-activity primitive coordinates input and in-progress attaches/handshakes with an exclusive handoff window; signing remains round-4 image admission. Current WebSocket input is websocket.rs:1568, attach :1446; browser handshake run_socket; remote TLS/QUIC handshakes remote_accept.rs. No existing backend Inbox store was found (only frontend Inbox models), and the existing wire Hello reports protocol version, not binary version; host upgrade must implement the reserved frozen UpgradeOffer/Accept/chunk/CheckIn/Result contract rather than pretend Hello already supplies it.Rollback finding: SQLx validates applied migration versions; adding release state as core migration 0026 would make the previous image reject the newer journal even though the tables are additive. Moved the uncommitted schema into the release plugin (src/schema.sql), installed idempotently when enabled. Core migration history remains byte-for-byte unchanged. This permits earlier verified images to start against the extra plugin-owned tables; no database restore occurs during rollback. Runtime final admission now obtains a feature-provided configuration/authority snapshot after sealed-image verification and probe, then atomically fences foreground work. Core handoff does not interpret release settings or schema.
Completed and pushed shared contracts:
fbaa7cdd(overflow-safe release ordering),e164b0fc(bounded version-bound private request + removable final-admission lease),dcbe2f52(release-owned additive schema). Earlierce1718edsupplies foreground coordination and server-start hook. Current touched-crate clippy passed for API/release/server/binary; 26 API unit + 2 routing and 14 release unit + 3 review integration tests pass, with benchmark/helper rows ignored. Two daemon lifecycle tests pass. Exact queued versions and requester session hashes are stored; final admission rechecks owner/freshness, feature enable, selected channel and current quiet duration after sealed-image verification/probe, while a writer reservation prevents settings from changing during the foreground fence. Pending runtime implementation remains uncommitted until its final focused gates pass. No production/Worker deployment or provider credentials.Host follow-up contract: move the existing release-verification implementation behind an optional release-verify feature in infraternal-plugin-api, preserving server re-exports. Reuse the same OpenSSL/SHA engines and both trust anchors; no new foundational library or cryptographic implementation. This avoids a node depending on the complete server crate or a duplicated verifier. Node upgrade control stays machine-only on the already-authenticated server connection, with exact signed version/architecture/size/hash, resumable bounded chunks, explicit downgrade and a temporary 30-second check-in watchdog. A/B image slots and public metadata are fsynced before atomic selection. No key or provider credential is introduced.
Authority audit finding at
e6a95cf4: postponed explicit handoffs cleared requested_user/requested_token_hash before requeuing. The retry then appeared locally authorized. Regression postponed_manual_request_retains_its_owner_proof_on_retry failed before the fix (0 passed, 1 failed; updater_tests.rs:300). Fix retains both original proof fields when requeuing; final admission still checks owner and session freshness. Receipts: evidence/postponed-before.log and postponed-after.log under edge-autoupdate scratch. D251.Completed retry-authority correction in
7deb11f8(pushed). Regression failed before the fix; release tests now pass (15 unit tests passed, 1 ignored; review_pool 1 passed; review_restart 2 passed, 2 ignored), formatting and touched release clippy pass. Requeued explicit requests retain the original owner proof. Full branch gate and local-update fuzz build remain running. Host lockstep and perf VM quiet-window acceptance are still outstanding.Milestone gate finding: x86 static image is 22,536,848 bytes, cap 22,204,304, delta +332,544; no cap changed. Workspace test stopped at an obsolete release skill assertion requiring unreviewed wording (75 passed, 1 failed, 1 ignored). Updating the assertion to require each declared instruction and covering all update commands. Parser sanitizer fuzz target completed 100,000 inputs without failure. Perf VM quiet-window fixture is being prepared; host lockstep is still outstanding.
Compiled update controls completed in
ef9e25dd(pushed): default quiet window 5, configured 12, two invalid bounds refused, stale selection refused, concurrent request refused, exact manual and rollback snapshots persisted.Compiled CLI receipt
Admission tests: 14 passed
Signed SOURCE/publication tests: 5 passed
Retry regression before fix: 1 failed
Release tests after retry fix
Release clippy receipt
Completed skill contract checks in
607e57d5(pushed): previously failing test now passes and checks every instruction on all seven operator paths; fmt and all-target binary clippy pass. Ephemeral SSHSIG fixture helper0176e612and interoperability test129eacf8pushed: original bytes verify and changed bytes refuse; private authority is retained only in anonymous memory and closed before transfer.Functional sanitizer receipt: 100,000 inputs, no failure
Signed engine tests
Real sealed-exec/recovery tests
Shared verifier/API tests
The sanitizer receipt is functional parser coverage, not a host performance measurement. Timing evidence remains pending the exclusive VM run.
Milestone scripts/verify fast completed with failures, not final acceptance. Both static budgets failed: x86 22,536,848 B / 22,204,304 B cap (+332,544); ARM 19,941,576 B / 19,638,744 B cap (+302,832). No budget changed. The failing skill assertion is corrected in
607e57d5; focused test and clippy pass.Full milestone gate receipt
Corrected skill test
Binary clippy
Ephemeral fixture signature interoperability
Verbatim milestone gate table:
First exclusive VM attempt reached real passkey unlock and 128 real PTYs, then failed during browser reattachment (ca_handoff_shipping_tests.rs:622). It is not a successful acceptance or listener-gap measurement. The unit and unique VM directory were removed. Adding bounded close-code diagnostics and retaining public-only signed fixture artifacts for retries.
Separate deployment-path regression: current-image metadata was looked up beside the launcher alias rather than its signed target. installed_alias_resolves_its_signed_metadata_directory failed before the fix; four signed-engine tests pass after canonicalizing metadata discovery while still authenticating /proc/self/exe bytes.
Continuation record; incomplete, not MERGE-ready. Pushed head
0ae7eae76don edge-autoupdate, clean worktree. Completed reviewed publication admission, plugin-owned server updater/schema/state/control/events, activity fencing, shared signature verifier, sealed warm handoff integration, and CLI controls. No production or Worker deployment. Hosts following the server is NOT implemented.Signed launcher-alias fix
0ae7eae7: regression failed before and four real signed-engine tests pass after; server clippy passes. Before, after, clippy. Metadata discovery follows the installed alias; actual running bytes remain authenticated through /proc/self/exe.Perf staging remains FAILED. Real passkey unlock and 128 PTYs succeeded, then attachment failed before any quiet application. No listener-gap/time-to-apply result is claimed. First run, pumped fixture attempt, latest attempt. Latest failed at update_staging_tests.rs:126. VM units/directories were torn down; lock was released. Machine receipt: infraternal-perf-test, kernel 6.12.111+deb13-amd64, 4 CPUs, MemTotal 8,069,112 kB.
Uncommitted staging work is preserved as pending-staging.patch, removed from the worktree because acceptance failed. It extends the existing shipping fixture with --updates, public-only fixture caching/--reuse, a loopback signed bucket, one-minute typing/quiet case, manual/rollback/late-exec cases and a browser pump for D265 liveness. Preserve public fixtures under scratch/public-transfer-25449ad0 if resuming before cleanup. The earlier reuse failure was readonly shared-library replacement; the patch unlinks those public copies before replacing them. Public fixture helpers 0176e612/129eacf8 are committed; no private signing material is persisted.
Remaining: resolve staging attachment failure (D265 liveness is a candidate, not proven cause); complete VM quiet/manual/rollback acceptance and measurements; implement removable host update path using shared verifier and the authenticated node transport; reduce static images below both existing caps; repair historical slice dependency ordering. Specifically
4e68641aincludes tests calling with_updates/UPDATE_NOW introduced later in 734dc14d/9dfb1d0b; move dependent tests after those prerequisites. The reviewed-edge wording fixture corrections also belong with the declaration change. Do not treat current history as passing each commit.Final scripts/verify fast is now running on the clean pushed head; its result will follow verbatim. Prior milestone failed both size caps (+332,544 B x86 and +302,832 B ARM) and the obsolete skill assertion; the assertion is fixed in
607e57d5. No size cap was raised.Stopped incomplete at pushed head
0ae7eae76d, edge-autoupdate. Final scripts/verify fast exited 1. Every reported non-size row passes; both existing static caps fail. No cap changed and no load waiver used.Full final gate transcript, verbatim
Verbatim size output:
Verbatim final gate table:
Not MERGE-ready: host lockstep remains unimplemented; VM acceptance failed before quiet application, so listener-gap/time-to-apply proof is missing; historical test slices still need prerequisite ordering repaired (details in continuation record above). The pending staging patch and failed VM receipts are attached above. Owned build targets, fuzz corpus and public fixture caches are being removed; attached evidence remains. No production/Worker deployment, no live owner fixture changes, and no issue closure.
Cleanup completed: owned target/fuzz-target directories, fuzz corpus and both public fixture caches removed; issue-attached evidence and pending patch retained. Worktree is clean. HEAD and origin/edge-autoupdate both equal
0ae7eae76d. VM runs reported unique-directory teardown, and no job-owned test server is left running. Task remains incomplete as recorded above.Resumed edge-autoupdate at head
0ae7eae76d, merge base57b0c3ddca. Continuing #211 (existing D251 edge auto-update issue), parents #157/#154. First step: cargo-bloat and dependency attribution vs merge base; unchanged D243 caps. Remaining host lockstep, historical slice prerequisite repair, perf-VM-only staging acceptance. No production or Worker deployment.Attribution inventory vs
57b0c3dd: Cargo.lock adds 0 crate versions (only existing base64/OpenSSL/SHA2/thiserror/uuid edges to plugin-api); server release_http remains the only release downloader; release_verify/release_manifest server modules now re-export the shared implementation. No new HTTP/TLS/JSON stack. Potential codegen cost: verifier moved out of the server package opt-level=s into plugin-api opt-level=3, and updater async SQL futures are retained in background, socket and CLI paths. Exact cargo-bloat static comparison is compiling, not yet a measured attribution.Historical audit confirms
4e68641atests need helpers/declarations first introduced in 9dfb1d0b/734dc14d. Final channel assertions and skill metadata checks must move with9dfb1d0b; remove the intermediate may-break assertion from9927df5a.Staging harness defect identified: pending Pump uses one last-Ack watch for every terminal stream, allowing a sibling backend Ack to overwrite a successfully received target Ack before its waiter observes it. Deterministic regression and per-stream tracking are being prepared. This establishes a harness defect, not yet the exact cause of the earlier VM receipt. VM access to the named staging host succeeds.
D17/D198/D251 host prerequisite proposal (before code): preserve Hello.version=protocol1 and all existing fields. Negotiate a release-control capability and use reserved 0xF0..0xFF only on authenticated active leg-B stream0, through generic plugin-owned control-frame plumbing; browser and parked-standby paths cannot offer or commit images. Release plugin owns all transfer/slot/watchdog logic and leaves no work when disabled or compiled out.
Freeze bounded identity/offer/accept/decline/chunk/ack/commit/check-in/result layouts in wire contract. Offer binds canonical signed MANIFEST+signature, exact version, architecture, size, digest and explicit downgrade. Manifest <=65536B, signature <=1024B, chunk <=16384B; one chunk outstanding, contiguous offsets, resume keyed by signed transfer identity; no request-selected filesystem paths. Reuse shared OpenSSL/SHA/SSHSIG verifier and existing exact-server-version payload path; never public latest or development fallback. Bound simultaneous transfer workers globally (initial bound8: chunk storage8x16384=131072B, excluding declared transport/metadata/task reserves).
Managed-layout transition must preserve original current->live installation until verification completes, then fsync inactive image+public metadata+journal before atomically selecting an A/B slot. Extend existing bootstrap/uninstall ownership validation for that safe layout. Independent old-image watchdog owns the 30s exact-image authenticated check-in deadline, survives daemon replacement, restores previous verified image on failure and exits after success/rollback; no idle watchdog remains. Exact running-image verification precedes check-in confirmation. Human host states remain those recorded earlier on this issue; result reasons are fixed public codes, not raw service logs.
The reserved byte range currently has no implementation/layout, and current managed installs use live rather than a/b; these gaps are explicitly recorded rather than treating old Hello as an existing binary-version proof. No new foundational library, provider credential or production deployment.
Paired x86_64 static cargo-bloat attribution vs merge base57b0c3dd (head0ae7eae7): .text17,153,332 ->17,372,628B (+219,296). Crate text: release44,136->157,980 (+113,844), server+36,835, std+27,283, plugin-api+17,202, SQLx+10,496, Tokio+5,730, serde_json+5,427. Signed verifier moved rather than duplicated; old verifier functions disappear, and no new crate versions/HTTP/TLS/JSON stack are added. Crate attribution includes LTO/inlining; full function grouping is attached.
Largest increases: status has two compiled futures totalling30,452B; service call group+21,101B; restart request+20,038B; updater run18,001B; check9,065B; apply8,936B. Whole stripped shipping deltas remain the prior final gate +333,184B x86 / +303,344B ARM; bloat measures code sections separately and is not substituted for the shipping size gate.
Next reduction: reuse the existing Operation boxed-future boundary for public updater/service calls so CLI, socket and background paths share one compiled implementation. Verification, persisted authority and foreground fencing remain required. No cap changed.
binary-attribution.txt
head-bloat-crates.json
base-bloat-crates.json
First reduction candidate: shared Operation boundaries cut x86 cargo-bloat .text61,184B (17,372,628->17,311,444), release plugin157,980->115,241B. Comparable GNU-stripped bloat image22,539,400->22,470,536B (-68,864), still266,232B above shipping cap. Shipping cap unchanged; bloat stripping differs from final gate recipe by section layout and is not final acceptance. Next candidate reuses existing server opt-level=s for CLI/plugin API/release orchestration only, pending VM nonregression before retention. Crypto, transport and terminal engine profiles unchanged.
Staging acknowledgement regression actual red0passed/3failed; corrected per-stream maximum actual green3passed/0failed, same3tests. Python/Bun/TS anonymous-fixture migration functional checks pass; final default-timeout gates still required. No VM acceptance yet.
Second size candidate: retain opt-level=3 for engines; apply the existing server orchestration opt-level=s to CLI, plugin API and release orchestration (D243/D251). Matched cargo-bloat .text is 15,847,060 B versus 17,372,628 B original head (-1,525,568 B). GNU-stripped candidate is 20,864,840 B, below the original x86 cap 22,204,304 B by 1,339,464 B. This is a candidate, not final gate evidence: normal shipping recipe, ARM artifact, paired perf-VM runtime comparison and final lockstep footprint remain pending. No dependency versions or crypto/HTTP implementations were added for the size cut.
Host lockstep integration review: a daemon child watchdog would inherit the service cgroup and could die with the process it must recover; interrupted transfer initially left an exclusive receiving file that blocked retries; seed copying changes selected inode before daemon replacement, so check-in must distinguish selected bytes from executing bytes. These are being corrected before admission: independent transient supervision, transaction-bound check-in, persisted signed-identity/contiguous-offset journal, and exact /proc/self/exe proof. Relevant work-in-progress modules: release/host_watchdog.rs, host_slots.rs, host_receiver.rs. No host-update acceptance or completion claim yet. Generic reserved parser regression observed red: identity request decode 0 passed/1 failed before implementation; frozen raw frame bounds and active authenticated leg-B routing now under test. ARM candidate stripped size 18,512,776 B versus old cap 19,638,744 B (-1,125,968 B); raw normal Cargo artifact still carried symbols, so final gate must independently check the shipping recipe after all feature integration.
Completed and pushed two atomic prerequisites:
5e2bf4efshares boxed release control futures (matched stripped image -68,864 B; exact isolated snapshot fmt, all-target clippy, 18 tests passed and 3 subprocess helpers ignored).bda5df77reuses anonymous ephemeral signing authority for staging/package/review fixtures (signature 1/1, packaging 1/1, default Bun review 3/3; touched TypeScript and full tracer check passed). Receipts:shared-futures-isolated-gate.log
signing-prerequisite-isolated-gate.log
staging-typescript-check-green.log
Legacy hosts lacking the newly reserved handshake capability fail closed: the existing binaries had no upgrade frames, so adoption requires installing one capable verified binary first; forward lockstep then uses the machine-only protocol. Host signed identity is verified MANIFEST plus exact running-image digest, independent of package metadata, matching the server verifier.
Staging acceptance fixture choice: use existing VM UID1000 with a fake HOME physically inside our unique /root/infraternal-bench/edge-autoupdate run; expose only that home through our short /run/user/1000/e bind mount. Start the previously inactive user manager and an absent canonical user infraternal-agent.service as our fixture; stop our unit/manager and unmount our runtime path on teardown. This preserves production managed-layout validation and independent supervisor access without changing /root permissions or existing home files.
Additive recovery contract: a host watchdog records the failed signed version on rollback; the same image stays paused until explicit release.up retry. The staging-only feature may deliberately exit during release-plugin startup for one selected verified signed image (D), after real kernel exec, so the isolated test can prove failed-startup rollback to B rather than only supervisor process isolation. Production has no such environment hook; compiled staging authority remains forbidden by check-production-trust. Existing server C proof exercises late kernel exec refusal separately. No production instance or signer Worker is deployed.
Completed/pushed prerequisites:
fabe9c36frozen F0–F8 bounded machine envelopes (11 protocol tests, all-target clippy/fmt);8d9c6ecaexisting-parser dependency edge;9be151a1generic enabled-feature machine dispatch (23 API unit + 2 routing tests, clippy/fmt). Core transport mTLS tests verify delivery only with capability negotiation and no deferred effect after a failed write.Finding/fix
ff802173: changing edge to stable retained the edge ready image, Inbox item and queued manual request. Regression failed 0/1 before the fix. The channel transaction now retires both selections before final owner/freshness validation; authority-trigger regression proves all changes roll back together. Exact isolated fmt/clippy and 20 tests passed. Existing verified image files/history/toast receipts remain retained.channel-switch-ready-red.log
channel-switch-isolated-gate.log
machine-parser-green.log
api-capability-tests.log
Contract review caught nonzero offsets encoded big-endian; sender/receiver are corrected to the existing wire §2 little-endian rule before freezing the release codec, with an independent nonzero golden vector.
Contract reconciliation proposed before the docs change: contracts/bootstrap.md is marked draft for #10 and describes binary identity inside Hello plus universal old-version upgrade support, while the existing frozen implementation has Hello.version=protocol1 and no prior reserved upgrade frames. Document the new negotiated F0 identity separately and incapable legacy peers requiring one verified bootstrap install.
Its draft failure paragraph also claims restricted read-only mode, which no current runtime implements. This D251 slice preserves the previous verified executable and live PTYs after failure, exposes Rolled back plus the failed version/reason, and pauses that exact image until explicit release.up retry. Document that implemented continuity behavior rather than claiming read-only enforcement or automatic repeated crashes. D17 and D251 stay unchanged; the new reserved handshake remains bounded/frozen and explicit signed downgrades remain mandatory. This reconciliation is limited to the draft documentation; there is no production deployment.
#211 daemon-owned CLI update slice starts on
edge-autoupdate, baseff802173e0ce593f37a8ca386684f1613782a109.Read-only findings:
release_cli.rs:136constructs a fresh service/Updater for each CLI call;updater.rs:63,143uses that process's activity clock. The private wake endpoint accepts onlyw; no live-status delegation exists. CLI status therefore cannot report the daemon's pending connections or actual quiet-window deadline (D251).updates checkalso inserts the persisted notification receipt inupdater.rs:210, then emits only on its local broadcast channel. It callsnotify, not the cross-processcommittedwake; the daemon can miss the ready notification and remain on its thirty-minute poll until another wake.Fix scope: bounded additive requests on the existing same-UID private restart control endpoint, executing the same daemon-owned ReleaseService handlers for the five update actions. Existing channel settings stay on their current path. Separate-process CLI regressions will precede implementation; no new dependency, frontend change, VM run or deployment.
Normal production x86_64 build now produces a stripped static PIE without a post-build strip step: 21,037,392 B, delta -1,166,912 B against the 22,204,304 B merge-base cap. Cargo rustc flags are opt-level=s strip=symbols with explicit package profile settings. This is a candidate with host transport included, before the live CLI-state fix; final head and ARM shipping sizes still need verification and D243 cap ratcheting. No shipping-size claim is based on the cargo-bloat image.
shipping-size-candidate.txt
Committed and pushed
6f65a3ef: explicit public trust adapter reuses canonical signed-manifest/artifact validation; normal shipping wrapper remains compiled-trust pinned. Exact staged source treea91e0b433a13d74fa4e053b12204d47f63059350.Gates (verbatim):
Touched rustfmt check passed.
Committed and pushed
476307c5: Declare host release feature and existing fixture dependency prerequisites. Gates run against the exact staged tree, not the shared dirty checkout.host-deps-slice-check.log (verbatim):
host-deps-slice-clippy.log (verbatim):
Finding / additive recovery proposal: restart.rs Replacement::exec restores pinned previous bytes only when fexecve returns an error. A successfully executed successor that exits during startup cannot answer deploy rollback IPC; the existing VM C fault proves kernel refusal only. D168/D217 classify a real crash as cold, so this job will not extend unlocked-CA custody across a process death.
Complete autonomous startup-failure rollback by reusing the installed service Restart=on-failure, release-owned persisted startup intent and existing signed-image admission. Before server startup imports authority or binds listeners, the release bootstrap must identify pending attempt versus verified actual image, restore its exact signed predecessor after a failed attempt, and let the normal updater reconcile/pause the failed version. A normal service restart must also select the persisted verified current version instead of silently returning to the original ExecStart image. Add bounded additive startup-attempt receipt/schema where needed; keep configuration, compiled trust, same-PID happy handoff and CA format unchanged. Fault proof must execute a signed image, exit after real exec, then observe autonomous previous-image startup and cold CA. Happy quiet/manual/rollback transitions must retain unlocked CA.
UI failure copy: Update failed · Restored . After a fatal startup crash: Unlock the CA to reconnect hosts. This is a crash recovery boundary, not a new CA lifetime decision. Evidence/code paths: evidence/server-postexec-recovery-audit.txt; crates/infraternal/src/restart.rs:359; crates/infraternal/src/install.rs:171.
Committed and pushed
aebdf0d4: Bound signed host offers and frozen little-endian transfer offsets; touched rustfmt check passed. Gates run against the exact staged tree, not the shared dirty checkout.host-wire-slice-tests.log (verbatim):
host-wire-slice-clippy.log (verbatim):
Perf VM staging resource wait: the first signed fixture build/upload completed, then flock -w 3600 expired without measurement_lock_acquired. Safe transcript contains only artifacts_prepared=true lock_held=false and teardown_directory_absent=true; no staging service or managed runtime started and no performance result exists. The independent 128-PTY profile comparison is still queued on the same lock. Final acceptance will use a fresh signed source build after CLI live-state/startup-recovery fixes, not the older closed-signing fixture. Source work and exact-slice gates continue. Evidence: $HOME/.cache/codex-scratch/edge-autoupdate/evidence/managed-update-proof-first.txt.
Resumed edge-autoupdate at HEAD
85f1da2ad; merge base57b0c3ddca. Preserving uncommitted host lockstep, runtime CLI/staging work and profile candidate after disk-full interruption. Prior #211/#157/#154 records retrieved. Rebuilding focused functional gates; remaining startup recovery, exact-slice commits, final size/perf-VM acceptance and historical ordering repair. No production or Worker deployment.Committed and pushed
56cb9f2f: verified resumable host A/B image storage, exact signed offers and executing-image retention (D17/D251). Exact staged tree passes fmt, touched release all-target clippy, 22 unit tests and 3 integration tests. No VM lockstep/size acceptance claim yet.host-slots-slice.log
host-slots-clippy.log
Committed and pushed
add442f6: durable host update on/off and failed-image pause (D17/D251). Exact staged tree fmt and touched release all-target clippy pass, 23 unit plus 3 integration tests pass. Runtime disable retires partial artifacts, refuses pending replacement, and explicit up clears the paused failed image.Committed and pushed
53ed219f: independent bounded host replacement supervision, transaction-bound check-in, persisted failed-version pause and preselection recovery. Exact staged tree passes fmt/all-target clippy, 28 unit plus 3 integration tests, including real transient supervision surviving launcher stop. CLI behavioral regression now reproduced at restart_update_control_tests.rs:165: active daemon foreground operation but CLI waiting_for_connections=false; fix is being gated.Committed and pushed
1b648e8f: signed host receiver and declared release status/up/down controls. Exact staged tree passes fmt/all-target clippy, 30 unit plus 3 integration tests. Rechecks installation marker, compiled signature trust, downgrade authority and deferred-reply generation before replacement. Off/on cannot revive an old prepared reply. No VM acceptance claimed.Committed and pushed
0583cc64: bounded exact-server host sender (34 unit + 3 integration tests), andc2a58883: bounded generic private-control parser/registration. Exact staged-tree fmt/all-target clippy and touched tests pass for both. CLI regression red: daemon foreground active, waiting_for_connections=false; new live routing green: shared clock, one-time ready toast, quiet/manual/rollback writes, disabled/stopped refusals. Runtime routing is still uncommitted pending its exact-slice gate.sender-exact-slice.log
local-control-exact-slice.log
live-cli-red.log
live-cli-green.log
Startup-recovery finding: runtime.rs:282 starts the plugin runtime inside build_router_core before HTTP bind at :305/:311; updater.rs reconcile therefore can mark a successor applied before listener admission succeeds. Additive D198 contract: a generic plugin server_listening notification after the real socket is bound, retained by the runtime for features enabled later. The release feature waits for this notification before reconciling applying history; tests using injected engines keep explicit readiness requirements. This keeps crash recovery feature-owned and avoids declaring healthy startup before bind. No new dependency or CA custody extension. Persisted startup selection restores only canonically verified retained images before CA import.
Committed and pushed
00f84284: server release ownership of bounded per-node senders;f8a8476e: live removable release operator handler for the five update controls. Each exact staged tree passed fmt, 34 unit + 3 integration tests and all-target clippy. Runtime CLI slice has 20 restart/control tests passing, lint correction pending. New readiness regression observed red (0 passed, 1 failed): loaded image reconciled before listener admission. Fix waits on the generic listener-ready notification before reconciliation; focused green is queued. No VM or final size acceptance yet.Completed and pushed
7c57c50a: live CLI routing (exact fmt, 20 restart/control tests, all-target binary clippy).50a12f2c: generic optional listener-ready hook (exact API gates).2b44e419: plugin-owned startup-entry schema (exact release gates).049f0d12: wait for listener readiness before success reconciliation (regression red 0/1, green; exact fmt/clippy, 35 unit + 3 integration passed). Runtime notification delivery, verified cold selection, final host wiring and staging proof remain pending.live-cli-exact-slice.log
readiness-red.log
readiness-exact-slice.log
Completed/pushed
633908ac: generic listener delivery (2 lifecycle + 9 runtime tests);afde2f20: verified cold selection/rollback planner (39 unit + 3 integration);e5545a20: existing download/verification host catalog (20 release-related server tests);e1e27385: retained-image startup adapter/readiness (22 release-related tests);f5fdc79f: sealed startup selection in CLI (78 binary tests). Each exact staged tree passed fmt and touched all-target clippy.Startup-path security regression red: unsafe release storage returned while fd0 still named a socket. Correction preserves the existing protected stdin disposal before configuration I/O and installs inherited authority only after retained trust/selection. Real subprocess regression and all binary tests green. No secret material persisted; fatal-crash recovery stays cold. VM access check succeeded with no host-key changes. VM acceptance, final size/profile proof and historical ordering repair remain pending.
listener-runtime-exact-slice.log
startup-plan-exact-slice.log
catalog-exact-slice.log
startup-engine-exact-slice.log
startup-stdin-red.log
startup-cli-exact-slice.log
Completed/pushed
570a6fd3managed A/B layout validation;57c8bac8bootstrap compatibility (three regressions red, all 50 installer tests green);16bc57faoptional host/staging feature edges;452247fbmanaged receiver + CLI registration (103 agent + 78 binary tests, fmt/clippy). No load waiver: initial legacy test ENOENT failures were missing scratch target state; external target link and two test threads pass.90d93217adds real staging updater/managed-host/failure harness: three acknowledgement regressions + 23 release-related tests + remote all-target clippy pass.c3be3851packages/streams public signed fixtures under the VM lock; functional artifact test passes.a719fea2extends local request fuzzing (codec test/check/qualified clippy pass; sanitizer running).60828e4ereconciles implemented wire/bootstrap docs with the prior issue proposal.Normal candidate x86 static production image: 21,084,496 B, SHA256 1413a2128d9c71b56fa9958d524e8a059d61b42e51699a3a869b7203e9781daa, production-trust check PASS. Existing cap 22,204,304 B, delta -1,119,808 B. Same source opt-level=3 comparison image: 22,767,504 B, SHA256 e975cdc88ec4c58cc691c567c5586c507b77d03e57f7561e32ce081302262fae. Candidate profile saves 1,683,008 B. Profile not committed yet: paired VM evidence and ARM/final-head sizes remain pending. No cap changed. Staging image rebuilt; native harness and ARM production build now running.
install-cache-red.log
install-selector-red.log
install-pending-red.log
install-exact-slice.log
host-wiring-exact-slice.log
staging-ack-tests.log
Pushed staging harness/driver (
90d93217,c3be3851), bounded local-control fuzz coverage (a719fea2), and implemented-wire/bootstrap documentation (60828e4e). The staging driver closed its in-memory signer before transferring public fixtures; run /root/infraternal-bench/edge-autoupdate/71b9 and the separate paired real-PTY profile comparison are waiting for the shared perf lock. No production access or Worker deployment. ARM static build, sanitizer fuzz run and scripts/verify iterate are running. History repair preview moves prerequisite-dependent tests to their admitting commits and preserves the final tree exactly; boundary validation is next.00969ea87repairs a pre-existing static-size test parser: scripts/test-static-size.py expected "max N" but scripts/verify.d/rust.sh prints "cap: N bytes". The existing fixture failed with TypeError before the boundary checks; after the fix both target labels pass exact-cap, +1-byte refusal, -1-byte ratchet and unsupported-target checks. This isolated parser test uses the same public x86 ELF for both labels; native ARM shipping size/linkage remains a separate final gate. Python compilation and workspace fmt pass.size-boundary-red.log
size-boundary-green.log
Normal production-trust ARM static candidate: 18,710,016 bytes; SHA-256 8934a55de0b678b7c2b8058ca504b05271b349f612dac0be4bb895122a756747. This is 928,728 bytes below dev cap 19,638,744, with no staging authority. The corresponding x86 candidate is 21,084,496 bytes (-1,119,808 vs cap). These are artifact byte counts, not build-host performance evidence. Profile adoption remains pending the queued paired VM comparisons. Checking actual edge-stamped artifact size before ratcheting the gate.
scripts/verify iterate: fmt, VT native fmt, CLI plugin compile-out, clippy and all workspace tests PASS; cargo-deny FAIL for rustls 0.23.45 advisories RUSTSEC-2026-0346/0347/0348/0349. The diagnostic names 0.23.46 as the fixed patch for all four. No advisory waiver added. Updating only the locked existing D176 library from 0.23.45 to 0.23.46; no new engine/provider/features. Direct transport fmt/clippy/tests and cargo-deny are running. Queued pre-patch fixtures will be labelled preliminary; final static artifacts and VM acceptance must include the patched graph.
iterate.log
2bf702aa: locked rustls 0.23.46, retaining D176 stack/features. Workspace fmt PASS; direct transport all-target clippy PASS; 11 transport tests PASS; cargo-deny: "advisories ok, bans ok, licenses ok, sources ok". No waiver or new engine. Final workspace gate and static artifact qualification remain.rustls-patch-gate.log
Pre-patch VM fixtures acquired the lock on infraternal-perf-test (kernel 6.12.111+deb13-amd64). Update proof FAILED before update operations: real passkey CA unlock passed, then terminal.open returned a refused result at ca_handoff_shipping_tests.rs:705. Own server unit, UID1000 manager, bind and run directory were removed. Added fixed-enum-only refusal diagnostics; a public-fixture reuse retry is building to identify the refusal without logging arbitrary reply/panic data.
Pre-patch profile probe completed: 128 real PTYs, 1000 typing samples per image, RTT 0; baseline/candidate echo p99 2.9566/2.5421 ms, ACK p99 2.6518/2.1470 ms, daemon RSS 8892/8904 KiB. Load before 2.59 1.72 1.38; after 2.54 1.77 1.41. These qualify only the pre-rustls-patch artifacts; final patched comparison and full update acceptance remain required.
managed-update-proof.txt
profile-echo-results.log
Ordering repair pushed:
2bf702aa15→b43fb891ac; final tree identical. Prerequisite-dependent updater tests plus their helper now enter with with_updates; channel TTY/skill expectations enter with their action-copy change; remote tuple destructuring enters with listener readiness. Two later correction-only commits became empty. Full old→new map attached.All four affected boundary snapshots pass workspace fmt, touched all-target clippy and tests, using fresh archive mtimes: updater/declaration 12 unit + 3 integration each; authority 14 unit + 3 integration; CLI skill 1 plus real-TTY channel test; listener 2 lifecycle + 7 runtime integration + 1 node-lifecycle unit. No lint bypass. The archived-source timestamp fixture initially reused stale Cargo output; corrected and reran every boundary before applying the repair.
AddressSanitizer local_update parser fuzz: 100,000 inputs, no failure. Production fat LTO caused unresolved sanitizer coverage symbols; disabled LTO only in the external fuzz invocation. Shipping profile unchanged. This is functional parser evidence, not a build-host performance claim.
history-map.json
history-boundary-4e68641a.log
history-boundary-9dfb1d0b.log
history-boundary-734dc14d.log
history-boundary-633908ac.log
local-control-fuzz-no-lto.log
local-control-fuzz-run.log
history-listener-runtime-tests.log
6132ee46: fixed-enum-only staging terminal refusal diagnostics pushed; fmt, remote server all-target clippy and 10 real CA handoff tests PASS. Only the profile candidate remains uncommitted pending patched VM qualification. Patched normal x86 21,083,824 B SHA-256 6eaf33b299d7b22cba16db38624b9b7aba252070c8292a6a1e3f6e8d68ea5bbf; ARM 18,710,288 B SHA-256 d2c599c6bb650ed7817668e7b15ea09a1ffc9f0ed955810f5746127a6fcf5b0e. Corresponding candidate cap fixtures pass exact, +1-byte refusal, -1-byte ratchet, unknown target; real ARM ELF used. Edge-stamped ARM matches normal ARM size.Shared perf lock has a substantial queue. Own waiting runs: /root/infraternal-bench/edge-autoupdate/8e3c (pre-patch image, updated refusal diagnostic); peb46 (six alternating patched normal baseline/candidate probes, 128 PTYs each, ACK/echo plus owned daemon/shim/shell PSS); b1a9 (fresh patched full acceptance). All wait with flock -w 3600 and own teardown. Fresh public-only signed fixture cache: $HOME/.cache/codex-scratch/edge-autoupdate/proof/public-transfer-78e88c20; reusable for harness-only retries after its signer was closed. Source/targets/evidence remain in the same edge-autoupdate worktree/scratch. Full acceptance and final scripts/verify fast remain pending; no production or Worker deployment.
terminal-diagnostic-clippy.log
terminal-diagnostic-tests.log
patched-size-boundary-tests.log
patched-staging-build-and-run.log
Publish-gate finding: patched x86 normal/default build is 21,083,824 B, but the actual pipeline recipe (INFRATERNAL_RELEASE_BUILD=1, edge-20261015T040000Z) is 21,083,888 B; production trust PASS. The exact-byte shrink guard would reject the builder if only the default artifact were ratcheted. ARM edge-stamped/default are both 18,710,288 B. This is a 64-byte identity/production-recipe difference, not growth allowance.
Proposed gate repair before implementation (PROCESS §2): make static shipping checks build the explicit D225 production recipe, preserving the supplied D226 release identity, and ratchet exact measured production ceilings. If stable/edge differ, record both exact recipe ceilings rather than adding slack or padding. Both remain >0.9 MB below the old architecture caps. Measuring stable-production variants next; D243 remains unchanged, with no waiver or automatic ceiling increase.
Author review note for break-it review: server Engine::stage/retain_current publishes verified images under updates/images/ (crates/infraternal-server/src/release_update.rs); the bounded 100-row update history does not currently collect old image directories. At the measured stable x86 recipe, each retained executable is 21,083,824 B plus small signed metadata. Manual rollback selects only previous_version/path. No image-retention rule has been added in this pass. Host managed storage is A/B, and HostCatalog retains only the running version’s two architectures plus transfer-owned temporary historical seeds. Automated edge publication frequency makes server cache retention a concrete review point; it is not covered by the binary-size ceiling.
3ee281ae9: explicit production compiler recipe pushed; regression failed before fix and now passes default/disabled/stable/edge callers for both static targets, preserving exact identity. Shell syntax, Python compilation and workspace fmt pass.Measured production recipes are now complete: stable x86 21,083,824 B; edge x86 21,083,888 B; stable/edge ARM each 18,710,288 B. Prepared exact per-channel ratchets in scripts/verify.d/rust.sh and docs/PROCESS.md; no growth allowance, padding or decision change. Both channels independently pass real-ELF exact, +1-byte refusal, -1-byte ratchet and unsupported-target checks. Their largest ceilings remain 1,120,416 B (x86) / 928,456 B (ARM) below the old architecture caps.
Working tree currently contains the compact profile plus prepared cap/table edits, pending patched VM profile qualification. Profile patch attached so the state can be resumed from this issue alone. Shared VM lock still blocks the diagnostic (8e3c), profile (peb46) and patched acceptance (b1a9) runs; waits and teardown remain active. No final acceptance or fast-gate claim.
static-recipe-red.log
static-recipe-final.log
stable-size-boundary-tests.log
edge-size-boundary-tests.log
compact-profile.patch
bc5384bapushed: compact CLI/API/release profiles. Locked VM, 128 real PTYs, 258 owned daemon/shim/shell processes, six alternating runs (3000 typing samples per variant), RTT 0. Baseline/candidate median run echo p50 0.356/0.317 ms; echo p99 1.773/1.675 ms; ACK p99 1.599/1.201 ms. Median owned process-set PSS 448,995/450,214 KiB (+1219 KiB, +0.27% at 128 PTYs); daemon RSS 9212/8952 KiB (-260 KiB). Matched normal binary cut 1,685,184 B. Load before 0.46 0.96 1.63, after 1.10 1.06 1.62. Accept the measured memory tradeoff; no claim of causal speedup from overlapping latency ranges. Fmt, touched all-target clippy, API 29 unit + 2 integration, release 27 unit + 3 integration, CLI 78 binary tests PASS.Patched pre-fix full proof failed before update operations: 128 PTYs created and managed rootless host A enrolled/reattached, then browser 1 disconnected at stream 49 during attachment (update_staging_tests.rs:213); own resources were removed. Same earlier retry failed at stream 47. No acceptance claim.
a4f955a9pushed: whole-image verification/retention/publication and host-offer hashing hand off the serving scheduler core while remaining inside the owned future. Deterministic sole-worker regression failed before fix (control could not progress), then passes with cancellation ownership; cold current-thread startup test also passes. Fmt, remote server all-target clippy and 25 release-related tests PASS. No liveness deadline change or detached verification work. Attachment causality remains to be checked on fresh VM images; adding staging-only fixed-label close diagnostics before that retry. Previous prepared size caps must be remeasured after this fix before final ratchet/fast gate.profile-patched-echo-results.log
compact-profile-gate.log
patched-update-attempt.txt
image-io-scheduler-red.log
image-io-scheduler-green.log
owned-image-io-clippy.log
owned-image-io-tests.log
6df8f104: staging-only fixed-label/count browser-close receipts; no raw frame/auth/panic logging. Strict staging remote server clippy and 4 liveness tests PASS.b4ea99b8: fixture now matches shipping server KillMode=process (install.rs:171), so the deliberate post-exec process crash can preserve PTYs. A real user-manager test failed before fix: original child exited during restart. Same test passes afterward, using pidfds for lifetime observation and cleanup; signed packaging test also passes. Reused same-UID fixture-socket PID cleanup. Fmt, staging remote all-target clippy and 10 CA handoff tests PASS.All scripts/verify iterate rows now PASS on
b4ea99b8with prepared cap/table edits (static build checks excluded as designed), including cargo-deny and TypeScript/bundle checks. Final fast remains required and not yet run. Current production x86 stable/edge measurements after owned image I/O: 21,100,176 / 21,100,240 B; ARM stable 18,726,528 B. Final ARM edge build is running. The bounded scheduler fix adds 16,352 B x86 / 16,240 B ARM versus the prior compact snapshot, with no new crate/stack or relaxed liveness deadline. Final ceilings will still drop over 0.9 MB below the original caps.Own waiting VM runs: efc3 (owned-I/O image, old fixture process-lifetime setting) and 4327 (same signed images, corrected fixture). Reusable public cache public-transfer-48b11f93 under the job scratch. Acceptance is pending; no warm/manual/rollback timing claim.
iterate-after-io.log
staging-close-diagnostic-final-clippy.log
staging-close-diagnostic-final-tests.log
staging-kill-mode-red.log
staging-kill-mode-green.log
staging-kill-mode-clippy.log
staging-kill-mode-tests.log
VM attempts efc3 and 4327: real passkey CA unlock and managed host A succeeded; both failed during browser 1 attachment at 22 streams, before any update was published. Safe server diagnostics identify browser_liveness_expired, not an updater failure. Owned image-I/O fix did not resolve this separate attach/liveness interaction. Both runs removed owned manager/runtime/directory. Receipts: process-mode, owned-I/O.
The fixture queues the next attach immediately on its ACK, which can race the reader enqueueing a control Pong. Adding an explicit successful control-probe reply fence between fixture attaches, with a deterministic WebSocket regression first. The target remains 128 simultaneous PTYs, 50 users and 10,000 inventory rows; production liveness deadlines remain unchanged. This separates the update qualification workload from burst attachment admission; the burst failure remains a break-it review finding, not a passing capacity claim.
Completed production size ratchet
bc953e4a7(pushed). Four real production builds with rustls 0.23.46 and owned image-I/O: x86 stable 21,100,176 B, edge 21,100,240 B; ARM stable/edge 18,726,528 B. Largest x86 is 1,104,064 B below the prior dev ceiling; ARM is 912,216 B below. No growth allowance: exact equality, +1 rejection, -1 requires ratchet, unsupported-target rejection pass for both channels. Production-marker admission has four passing caller-environment cases; shell syntax/fmt/diff checks pass.Hashes/recipes, builds, stable boundaries, edge boundaries, recipe admission. Runtime/PSS tradeoffs remain in the prior six-run measured profile comment. This is the size step, not completion of staging acceptance.
Completed fixture-only reply fence
2553917d8(pushed). Each attach now waits for a new successfully written control Pong before issuing the next mutation. Deterministic real WebSocket regression fails before and passes after; all four staging-driver unit tests, workspace fmt and staging remote server all-target clippy pass. Red, green, clippy.Acceptance run 7cee waits under the shared perf lock, using the unchanged public signed image 48b11f93 and current process-mode fixture. Final scripts/verify fast running on head
2553917d8. No production/server image changed by the fixture fence.Author security/lifecycle review at
2553917d8, following PROCESS §2 and the CA update audit checklist (independent review still required): structured MERGE admission binds immutable source/gate/bundle; no free-text verdict parsing. Existing SSHSIG/OpenSSL/HTTP paths reused; production ELF excludes the per-run staging authority. Same-file verified images, sealed exec admission and exact signed version checks cover server and managed hosts. Manual mutations retain and recheck fresh owner/session authority at commit and final admission. Quiet work has an atomic foreground fence; disable aborts/joins owned work. Host transfers share an eight-permit pool; disabled metadata/help do not install machine handlers. No production access, Worker deployment, credential lookup, new crypto engine or owner fixture modification.D168 cold-start lock semantics remain explicit: healthy warm updates must retain the unlocked CA; a deliberately fatal post-exec process restart recovers the previous verified image with a cold/locked CA, never a timer unlock. Parser fuzz (100,000 cases) and real protocol/exec/SQLite/passkey tests are attached in earlier steps.
Open review findings remain visible: (1) the original unpaced attachment burst expired browser liveness at 22 streams; the update qualification driver now fences attaches on written control Pongs and will not claim burst capacity; (2) server version-image retention has no garbage collector, although history is bounded and host slots are A/B. No retention policy was invented inside this job. Full fast gate and VM acceptance are still running/pending; this comment is not a completion claim.
Full scripts/verify fast completed with exit 0 on pushed head
2553917d89. Complete output, verbatim. Summary output verbatim:Final TypeScript suite output verbatim:
Static production outputs: x86 21,100,176 B and ARM 18,726,528 B, both exact caps, PT_INTERP absent, production trust PASS, key-heap checks PASS. SHA-256 exactly matches both previously attached stable artifacts. No load waiver or baseline failure exemption used. Final acceptance run 7cee remains queued under the perf lock; not reporting task completion yet.
Acceptance 7cee remains queued. Read-only perf-VM lock metadata shows one WRITE holder and five WRITE* waiters on /run/lock/perf-bench.lock (the canonical /var/lock path); holder PID 2548483 has an active timeout child. No other job was interrupted or inspected beyond lock/PID/state/working-directory metadata. Our lock wait remains -w 3600. Final fast on
2553917d8is green and attached; VM acceptance remains required.Perf run 7cee acquired the lock at load 0.30/0.98/1.82. Real passkey unlock, 128 PTYs and managed A reattach passed; browser 1 liveness expired at 20 attachments despite the control-reply fence, before publishing any update. This disproves the fixture fence as a sufficient explanation. Receipt; owned manager/runtime/directory teardown passed.
Code finding: websocket.rs tick fanout awaits AttachmentHandle::send_frame for every route. The per-route input queue has four slots; a full route can suspend browser control progress, including receiving browser Pongs. Adding a failing bounded-queue regression before changing probes to opportunistic enqueue: a saturated route may skip a Ping, never displace ordered input/credit or extend liveness without a real Pong. Existing expiry/rebind deadlines remain unchanged. This is a candidate cause to verify on the VM, not an acceptance claim. Full gate at
2553917d8remains recorded; any new head will rerun its required gates.Completed
9341764f3(pushed): opportunistic enqueue for route Ping probes only. Saturated queues retain ordered credit/input and do not block the browser fanout; no lease is renewed without a real Pong. Closed queues still fail. Failing bounded-queue regression, 31 actor regressions pass, all-target remote clippy. Workspace fmt/diff checks pass. Fresh signed staging image building; no claim yet that this resolves the at-scale expiry. Production artifacts and final full gate will be rebuilt for this new head.Completed
052509dab(pushed), fixture only: explicitly enable TCP_NODELAY before the staging pump splits its local WebSocket. Verified installed tokio-tungstenite 0.29.0 src/connect.rs:37 calls connect_async_with_config(..., false); lines 93–94 set TCP_NODELAY only when requested. This is a second concrete fixture issue, not proof that it alone caused the earlier expiry. Existing VM acceptance is the failing test before this change. Four pump tests pass, remote all-target clippy, workspace fmt/diff checks pass.Fresh image/public fixture aa300625 contains the production route-probe fix; harness contains process-mode teardown, reply fencing and TCP_NODELAY. Run 5c01 is prepared and queued under -w 3600. Production recipes are rebuilding separately with new postprobe receipt names, preserving earlier artifacts. Any passing combined run will qualify the workflow, not attribute the old failure exclusively to either change.
Post-probe production measurement: edge x86 21,100,368 B, production trust PASS, SHA-256 11a6ba477c31d5386750760d4aee06c88e07e472d15d24a9b441ecb812a65bde. The independently reproduced route-queue fix adds 128 B over the earlier unmerged candidate, still 1,103,936 B below dev’s original 22,204,304-B cap. Other three recipes are rebuilding.
Ordering repair for the final unmerged lane: move the size-ratchet commit after the late production fix and fixture commits, then record the final measured stable/edge floors there. This preserves a single downward ratchet from dev and rejects all subsequent growth; no allowance or owner exception is introduced. Preserve the old chain and post an old/new SHA map, assert the final tree differs only by the newly measured cap/table values, and force-push with an exact lease. Final fast will run on that final head. This is the already-authorized commit-ordering repair, not a production publication.
Run 5c01 failed before updates: with the route-probe fix, reply fence and TCP_NODELAY, browser 1 still expired at 21 streams. Receipt. Real passkey unlock, 128 PTYs and managed A reattach passed; owned teardown passed. The combination is not a sufficient fix for the concentrated-socket case.
Completed
ab9b88bc1(pushed), fixture distribution only: retain all 128 simultaneous routes across thirteen browser sockets (ten each, final eight), below the sixteen-socket account bound with room for managed-host checks. Same 50 users, 10,000 inventory rows, verified images and liveness deadlines. This distinguishes the updater workload from concentrated-socket admission; the 25-stream failure remains an unresolved review finding, never a capacity pass. Four tests, clippy, fmt/diff checks pass. Fresh run uses unchanged signed image aa300625 and rebuilt harness.Completed final ordering repair:
ab9b88bc1→257d9b0085, force-pushed with an exact lease. Only the final unmerged tail was reordered: route fix → probe fence → TCP_NODELAY → distributed fixture → final size ratchet. Earlier history remains unchanged. A preserved backup ref and old/new map retain the old chain. Preview tree equality passed; the final source differs from ab9 only by the measured cap/table numbers.Final production recipes: x86 stable 21,100,304 B / edge 21,100,368 B; ARM stable/edge 18,726,656 B. Largest x86 is 1,103,936 B below dev’s old ceiling; ARM 912,088 B below. No slack or growth allowance introduced. Hashes/recipes, four trust-checked builds. Stable boundaries, edge boundaries, production recipe admission all pass; fmt, shell syntax and diff checks pass.
Full scripts/verify fast running on
257d9b008. Distributed VM acceptance 413c remains queued using unchanged signed fixture aa300625. Not reporting completion until those results are recorded.VM 413c, load 1.28/1.67/2.00: real passkey unlock and managed A reattach passed, and all 128 routes attached across thirteen browsers without browser_liveness_expired. The test then failed at update_staging_tests.rs:446 (quiet_minutes expected 1), before publishing B. Receipt. Owned manager/runtime/directory teardown passed. This demonstrates the distributed attachment setup, not update acceptance or a fix for the separate 25-stream case.
Fixture finding: deploy_staging_tests.rs:114 uses UPDATE plugin_settings before first server boot. shipping_auth_fixture creates/migrates a fresh Auth database but does not insert a release plugin row; the UPDATE affects zero rows, leaving stable/five-minute production defaults. Preparing a real fresh-schema regression and an insert-or-update fixture correction. Production defaults remain unchanged. Current full gate on
257d9b008is finishing before applying the prepared test patch, to keep that transcript tied to one source tree.scripts/verify fast completed with exit 0 on pushed head
257d9b0085. Full output, verbatim. Summary output verbatim:Final TypeScript suite output verbatim:
Both production stable binaries exactly match the previously attached postprobe hashes (x86 db3fcc3dafaf2d4e55c7ced3ac7641dd9de23dcac8dc149b8abde230688c6abb; ARM 67fec187b63ddd44c31b02ffa5dcbcb1c6b296a132d00c613c10c59e3ea3ad00). No load waiver used. This is a milestone, not completion: the fresh-schema fixture correction is now being regression-tested; VM update acceptance remains outstanding. The final gate will run on the final head after acceptance.
Completed/pushed
d850828d5: fresh-fixture edge/one-minute settings are upserted before first boot. Fresh-schema red, five fixture tests green, clippy. VM 012b passed all 128 attachments and initial version/quiet assertions, then refused the check action before staging. Receipt; teardown passed.Finding: latest.rs requires SHA256SUMS.sig, absent from all five old update-feed fixtures; only MANIFEST.sig was supplied. Separately, deployment verification rejected D251’s signed SOURCE field. Completed/pushed
ba8c9d37b: accept only that optional fixed name, authenticate/parse its same bounded non-following descriptor and retain it in backups. Real SSHSIG red, 16 deployment tests green, including changed bytes, malformed signed source and symlink refusal.Completed/pushed
4f2939877: update fixtures now sign both formats over the same sorted fixed public payload list, exactly manifest header plus checksum bytes. Existing deployment-only fixture recipe is preserved. Missing-signature red, three packaging/lifetime tests green, both actual SSHSIG verifications occur after the anonymous key closes. fmt/diff checks pass. Fresh authority/image rebuilding; old closed keys are not reused. No normal Rust production changes, Worker source/deployment or credentials. The externally deployed hardened round-4 signer remains the prerequisite recorded at the start of #211. VM acceptance and final-head full gate remain outstanding.VM 82c2 verified/staged B successfully with complete signed metadata, then failed waiting for typing acknowledgement at update_staging_tests.rs:190; multiple browser_liveness_expired/probe_refused labels followed. Receipt. All 128 routes attached; owned teardown passed. Quiet apply/manual/rollback acceptance is still missing.
Reproduced a concrete storage/probe coupling with a real SQLite/Unix/WebSocket ordering test: retain the only pool lease until three server probes arrive. Existing tick auth queries park that loop and the test fails. Red. Completed/pushed
61529ed1c: pure proof frames no longer query authority storage. Data/mutations retain all checks; revocation and expiry watchers remain. D28 sliding sessions are preserved by one independently runnable owned renewal task at the existing minute-scale write cadence; abort/join on exit, no renewal timer without attachments. No lease is renewed by ordinary traffic and no liveness budget is widened.35 socket regressions pass, including revoke/pending/input/scale cases, all-target remote clippy, fmt/diff pass. Fresh signed image building. This fixes the reproduced coupling; VM causality and final footprint still require measurement.
Fresh signed fixture 6d286815 prepared from
61529ed1c, including storage-independent probes plus owned minute-scale session renewal. Perf run 95eb queued under -w 3600. Same 128 live routes / thirteen sockets, 50 users, 10,000 inventory rows and one real managed UID1000 host; complete legacy/canonical metadata and explicit edge/one-minute settings. No liveness deadline change. The candidate CLI status comparator remains the explicitly printed retained db3fcc3d artifact; actual server acceptance uses the new 6d286815 image. VM qualification and final four-recipe footprint/head gate still pending.VM 95eb progressed: B verified/staged; typing offsets 27/54/81 were acknowledged and current A remained through the configured one-minute ready window. It then timed out at offset 108 with highest ACK 81. No browser_liveness_expired labels occurred in this run. Receipt; all owned teardown passed. Quiet application/manual/rollback acceptance is not yet complete.
Fixture finding: Pump returns no credit for consumed Output/Snapshot frames after its initial 65,536-byte grant. A real WebSocket regression requiring exact same-stream credit for a 4,096-byte output and a 70,000-byte snapshot fails before the correction. Red. Adding normal consumed-byte replenishment; deadline/input assertions remain unchanged. Reusing signed server image 6d286815, rebuilding harness only.
Continuation:
ddb028fe3is pushed. Staging diagnostics are restricted to the test-trust feature and record counts/durations only. The default 128-attached-route run still fails: runtime reports four workers/four CPUs; an attach took 86,422 us and browser lease age reached 86,690 us against its 50,000 us budget. The prior run recorded simultaneous 109–156 ms probe gaps across sockets. Output credit was not exhausted (380 bytes per 10-route browser). No update acceptance claim. Both runs cleaned their owned VM manager/bind/directory.Receipts: four-worker run, simultaneous probe gaps.
1f068654adds an explicit one-attached-route functional mode while preserving all 128 live PTYs and keeping 128 routes as default. Counts are printed in receipts. Six fixture tests, three artifact tests, fmt and server clippy pass. Running that separate sequence now; it will not qualify the unresolved full-route workload.VM acceptance remains failing, including the explicit one-route mode. Run 1 closed during PTY setup; run 2 refused terminal.open 112 with the fixed public Unavailable enum; run 3 created all 128 PTYs and the real managed host, staged B, then timed out waiting for input offset 27 (seen 0). That third run has no recorded liveness-expiry close, so the concentrated-route pause alone does not explain it. All owned manager/bind/directories cleaned.
Receipts: setup close, open refusal, staged then input timeout.
ea94fdc2adds a durable-input assertion BEFORE publication/staging, preserving the same writer offset afterward. This will distinguish pre-existing input failure from an updater transition defect. Six fixture tests, fmt and touched-server clippy pass. No deadline relaxation or acceptance waiver.Previous fixture-mode gates: six tests, three packaging tests, clippy.
Partial VM acceptance, NOT a full pass: the third bounded repeat completed A→B through the one-minute quiet window after continued acknowledged input. ready_to_apply_ms=123040.914, typing_observed_until_ms=60909.224, last_input_to_apply_ms=62131.691. Workload: 50 users, 10,000 inventory rows, 128 real PTYs, ONE attached server route plus the managed-host route. The host executed B with the same daemon PID/shim PID and reattached its PTY; all 128 server shim PIDs survived and CA status remained unlocked. It then returned the server to A but failed the fixture host-A check after 30 seconds. No Update now / failed-image / final listener-gap claim yet.
Full partial-run receipt. Other preserved attempts: host-B check timeout, single-route liveness expiry. A read-only snapshot during transfer showed server B/applied while host A was verified, enabled and active_work=true: snapshot. Next fixture records durable received bytes and elapsed transfer time; its functional wait is bounded at 90 seconds. Production post-exec watchdog remains 30 seconds.
All four final production recipes pass trust inspection: x86 stable 21,111,920 B, edge 21,116,080 B; ARM both 18,738,416 B. Largest x86 is 1,088,224 B BELOW the original dev cap; ARM is 900,328 B below it. Hashes and identities. Moving the unmerged final ratchet after late correctness fixes; exact tree equality is asserted and an exact remote lease is used.
Iteration gate: 433 server tests passed, two socket lifecycle rows failed under parallel execution (one Elapsed, one action refusal). All other iterate rows passed. The five lifecycle tests pass serially. No baseline waiver or final-gate claim: iterate transcript, serial diagnostic. Final fast will run serially on the final head.
Author review on
f68060253: publish admission consumes a private structured MERGE/gate/bundle-digest record, not prose. Signer access remains external; no Worker deploy, keys or credentials. Warm handoff verifies the same pinned image and retains CA custody; cold failure recovery remains locked under D168. Activity fences cover input and open/attach handshakes. Host updates use bounded machine frames, eight shared senders, independent file offsets, A/B images, exact running-image check-in and a separate supervisor. Component-off joins/removes owned work; metadata discovery stays inert. Parser fuzz and signature/path/admission regressions are recorded earlier on this issue. No new foundational engine.Limits still requiring review: default 128-attached-route VM case fails its 50 ms route lease; no capacity-pass claim. Server image retention has no GC policy (history is bounded to 100, host slots to two); no disk bound is claimed for server images. Deployed hardened signer remains an external prerequisite. Legacy hosts need one capable verified installation.
Latest VM run passed quiet apply (61,950.723 ms from last accepted input), managed B follow (16,342.273 ms), manual rollback including host A (19,194.627 ms), Update now including host B (18,399.183 ms), and late kernel exec refusal restoring B with warm custody. Workload: 50 users / 10,000 inventory rows / 128 real PTYs / one active server route plus the managed-host route. It then timed out in the host D failed-start/watchdog assertion. Thus this is NOT full acceptance and has no final listener-gap, host-D rollback or fatal-E recovery measurement yet. A read-only public-state diagnostic is running alongside the next isolated attempt.
History repair is pushed: final measured cap follows correctness fixes; final tree equality asserted. Map, stable boundaries, edge boundaries. Current fixture: six tests, clippy. Final serial scripts/verify fast is in progress, not yet claimed.
Latest VM receipt, including failure.
New lockstep finding: the read-only VM probe shows a verified/enabled host remains A, receiving_bytes=0 and pending=false for >40 seconds after the server Update now transition to B. No image transfer is progressing. Sender::connected discards every follow error and waits only for channel.changes; a transient machine exchange failure can therefore strand an otherwise live connection indefinitely. Plan: internal transient/refusal distinction; bounded exponential backoff only after transient failures, eight existing shared admissions, no timer after successful convergence/refusal, cancellation owned by the existing plugin future. No new transport/engine/action contract. Add a failing no-new-event regression before the fix; then repeat VM acceptance and the final head gate.
Pushed
d91588426(fixture) and8bd28582f(sender). The public-state probe captured D selected/pending with its independent supervisor active; the supervisor later restored B and wrote update-failed, but the canonical daemon unit was absent/inactive. The collected transient fixture unit had disappeared; the isolated HOME unit file was outside the user manager search path. The fixture now runtime-links its owned real unit into the exclusively created manager, then starts it. No owner-home unit or existing manager is modified. Probe, full diagnostic attempt, six fixture tests.The same attempt showed a >60 s zero-byte host follow stall before a later node event finally resumed it. Sender regression with no new event failed before the fix. Transport/catalog failures now retry with 1–30 s exponential backoff; the existing eight-worker admission releases before waiting. Successful convergence, invalid ACKs and authenticated image refusal retain no retry timer. Plugin cancellation cancels retry. Red, seven green sender tests, server/release clippy.
Stopped the in-flight old-head fast gate with SIGTERM to its verified job-owned process group before static builds, because this correction changes source and artifact sizes. No final-gate claim. Fresh staging-trust image is rebuilding; normal four-recipe measurements and final head fast gate follow. All failed attempts remain evidence, not acceptance passes.
VM functional acceptance PASS on
8bd28582fstaging-trust image: 50 users, 10,000 inventory rows, 128 real server PTYs, ONE active server route plus one real managed-host route. Machine infraternal-perf-test, kernel 6.12.111+deb13-amd64; load before 0.48/0.41/0.64, after 1.25/0.86/0.76; exclusive perf lock. All 128 server shim PIDs survived.Quiet apply: ready→server B 122588.095 ms; continued typing until 60720.601 ms; last input→server B 61867.495 ms (configured quiet=60 s). CA remained unlocked. Healthy host A→B→A→B transitions retained daemon PID and PTY shim PID and reattached real PTY output. Manual rollback including host convergence 15943.028 ms; Update now including host convergence 16376.398 ms with quiet=5 min configured. Late kernel exec refusal automatically restored B with warm CA custody. Host signed-D post-exec startup refusal was observed; its independent watchdog restored B, restarted the daemon, retained the same shim PID and paused D.
Warm listener gap: observed maximum conservative bracket 882.680 ms; maximum probe interval 103.238 ms; 1603 failed TCP listener probes across the warm transitions. Fatal server post-exec E separately recovered the verified previous image in 3719.722 ms; CA correctly cold-locked under D168, all 128 shim PIDs survived. One run, not a percentile distribution. This uses an isolated already-signed fixture feed and atomic edge pointer; it does not publish an unreviewed branch through the external Worker.
Complete raw receipt and cleanup. Ancillary CLI metric in this receipt used the retained normal CLI hash 209fe269… (printed by the driver), not the new final shipping CLI; no fresh-CLI performance claim is made from it. Current shipping images are being measured separately.
The default 128-attached-route test is now rerunning against the rebuilt image with the new normal CLI. Its earlier failures remain unresolved until that result; this one-route functional pass does not waive them. No production or Worker deployment. Final head gate still pending.
Current default full-route result: FAIL on rebuilt
8bd28582fimage with runtime-linked managed unit and current normal CLI. All 128 routes attached across 13 sockets, then input offset 2 timed out; control lease expiries were recorded at 52,569–65,195 us against the 50,000 us budget, with output work around 31 ms. This remains an unresolved transport-capacity limitation; no claim that the one-route functional pass qualifies 128 attached routes, and no attribution to baseline without a matched baseline run. Raw receipt and cleanup. No production settings changed. Final shipping gate/size records will follow.Correction to the preceding full-route comment: I misread the failure location. The raw receipt explicitly has durable_input_before_stage=true; the pre-stage two-byte input WAS acknowledged. The later failure is ack.changed().await returning a closed channel at update_staging_tests.rs:245 after browser transports closed. It is not a reported offset-2 timeout. All 128 routes attached, and the recorded 50 ms lease expiries/output-work durations remain as stated. The complete full-route update acceptance still fails; the one-route full-sequence receipt is the successful functional proof.
Pushed final head
6ae065677f. The final measured ratchet now follows the runtime-unit fixture repair and transient host-follow correction; exact final-tree equality and an exact remote lease both passed. New SHAs: fixture669d0007f, retry9561d12dc, cap6ae065677. Ordering map.Four real production recipes: x86 stable 21,116,016 B, edge 21,116,080 B; ARM both 18,739,104 B. Largest x86 is 1,088,224 B below original dev cap; ARM 899,640 B below. Retry correction changed stable x86 by one 4096-B layout page, edge x86 by 0 B, ARM by 688 B. No new dependency. Full identities/hashes. Exact cap, plus-one refusal, downward-ratchet enforcement and unsupported-target refusal pass for both channels: stable, edge.
Serial iterate PASS, all Rust rows plus TypeScript and 37/0 script tests: full transcript. Final scripts/verify fast is now running on this exact head; no source changes planned. Functional VM acceptance and separate failed full-route stress receipt are linked in the preceding comments. No production/Worker deployment; no issue closure.
Final-head fast attempt 1 failed one late transport test: saturated_native_control_queue_does_not_hide_primary_terminal_output, remote_control_queue_tests.rs:216, assert live_connection.close_reason().is_none(). Server suite: 434 passed / 1 failed / 45 ignored. All other Rust rows, including both static shipping builds/linkage/production trust/exact size boundaries, passed. No green final-gate claim. Full failed attempt.
The exact same compiled test binary passes the test directly, and it passed in the complete serial iterate run. Direct rerun. Cause is not attributed to load without a matched baseline. No waiver, skipped test or source change. Full scripts/verify fast is rerunning on unchanged
6ae065677with RUST_TEST_THREADS=1.Finish / handoff for independent break-it review. Branch edge-autoupdate, base
57b0c3ddca, pushed head6ae065677f. Worktree clean; remote matches. Own build/fixture directories removed; evidence retained. Issue stays open. No production/Worker deployment.Backend publish admission, quiet updater/API/Inbox events and host lockstep are built. VM functional acceptance PASS: 50 users, 10,000 inventory rows, 128 real server PTYs, ONE active server route plus the managed-host route. Typing postpones quiet apply; warm CA custody/PTYs survive; Update now/Roll back work; late exec refusal restores B; signed host startup refusal triggers independent watchdog recovery to B with the same PTY shim and paused D. Fatal server post-exec recovery restores D and correctly cold-locks CA (D168). Full receipt. Warm listener-gap bracket max 882.680 ms, max probe interval 103.238 ms. Last input→apply 61867.495 ms for quiet=60 s. Rollback / Update now INCLUDING host convergence: 15943.028 / 16376.398 ms. One run, not percentiles.
Final production caps: x86 stable/edge 21,116,016 / 21,116,080 B; ARM both 18,739,104 B. Max x86 / ARM are 1,088,224 / 899,640 B below original dev caps. Final-gate stable binaries match measured digests and sizes. Four recipes, ordering map / exact tree equality, cleanup.
Author checklist completed: signature/path/admission, exact running image, activity/handoff ordering, retry quiescence/refusal/cancellation and eight-worker bound reviewed/tested; module role docs present; no new foundational engine. UI remains the separate pass; states/copy are earlier on this issue.
Review limits: default 128-ATTACHED-route acceptance still fails after lease expiry/channel close; the one-route pass does not waive it. Current failure. Server image retention remains unbounded (history=100, host A/B bounded). External hardened signer deployment and production edge selection remain rollout prerequisites; fixture feed is not real Worker publication. ARM runtime key-heap execution is not checked by this x86 gate. Prior intermittent control-queue gate failure is preserved above. No waiver or author MERGE verdict.
Final scripts/verify fast on this exact head: exit 0. Full verbatim transcript. Verbatim output excerpts:
Independent verification started on review-edge-autoupdate, detached target
6ae065677f; merge base with local dev8e7467c07c. Read #211 and parent #157 histories and author report. Scope includes 128-route failure, server image retention, binary size attribution and D259/D265 restart gap. Tests/evidence only; no implementation fixes, push or deployment.Review support step
a41b2634: existing signed staging driver can select route or retention regressions; production code unchanged. Existing staging_artifacts_test.py passes (receipt evidence/driver-tests.log). Full fast gate is queued on an isolated exact target-head checkout; reviewer tests will not contaminate its output. New review regressions and VM reproduction remain pending host build slots.Size/source audit checkpoint: default Cargo feature graph still contains release, remote, SSH, host-facts, mesh, relay and backup, plus both existing TLS engines (evidence/default-features.txt; cargo-tree-duplicates.txt). Normalized old server verifier vs new API verifier differs only in checksum visibility; signatures/digest logic is preserved (evidence/verifier-move.diff). Baseline
57b0c3ddalready had release strip=true and panic=unwind; final profile retains both.bc5384baachanges only CLI/API/release package opt-level to s and redundant package strip flags. Its matched author artifacts save 1,685,184 B; this is source attribution, not an independent performance remeasurement. Exact-head fast gate remains queued; signed staging build is now compiling.Review harness
cc257026adds a reconnect selector, exact-test existence check, measurement owner receipt and 20-minute test timeout inside the shared flock. Existing staging artifact tests: 3 passed. Signed staging compilation continues; exact-target fast remains queued. No runtime implementation changes or findings claimed yet.Additional review check: D155 U2/U4 still requires a pre-upgrade backup and automatic restore; D186 only supersedes channel/distribution clauses, D217 changes CA custody, and D251 does not waive backups. Runtime Updater.apply currently commits applying intent then calls engine.handoff; Engine and cold startup planner retain/select executable images only. Added review_update_refuses_handoff_without_pre_upgrade_backup (pending reproduction) and a real-SQLite diagnostic proving an earlier migration list refuses a successor core migration. Separate script deployment has backups; this is verification of the new automatic path.
EA-01 P1 confirmed; failing test committed locally in
884f92e4on review-edge-autoupdate. Locked perf VM, load 0.07/0.02/0.19: 128 real PTYs created, 52 attachment entries across thirteen planned browser sockets before the control-probe fence fails (update_staging_tests.rs:312). This is BEFORE publication and BEFORE the listener monitor starts; omitting its probe workload does not resolve the continuity failure. Output work 94,466 us; browser lease expires at age 99,782 us / budget 50,000 us. Test review_128_attached_routes_preserve_input_during_staging: 0 passed / 1 failed. Own unit/run teardown confirmed.Cause visible in websocket.rs:482/:831 and liveness.rs:46: awaited output/authority work shares the browser-control loop; a local operation can exceed the learned lease, and later Pongs cannot renew an expired lease. Exact storage vs scheduler attribution remains unmeasured. This is a continuity/capacity blocker below D170’s 200 sessions; no lost PTY bytes or update-specific causality is claimed.
full-route-vm.log
Additional qualification result, committed
bf6d9e9d: the existing native echo/flood gate fails on the locked perf VM (three real PTYs, RTT 300 ms, 100 samples/phase). Baseline echo p99 322.75 ms; same-PTY flood 350.04 ms against 334 ms; growth 27.29 ms against 16.67 ms. Other-PTY p99 308.24 ms and ACK phases pass. One run, attribution pending; currently recorded EA-02/P2, not a proven source/profile regression. No implementation changes.native-latency-vm.log
EA-03 P1 confirmed; failing test committed locally in
0a7d0d0b. With a ready local functional feed, the real downloader/signature verifier/SQLite updater prepares five releases but retains five executable images (105,760,036 B), with one selectable ready candidate and no stored current/previous in this fixture. 0 passed / 1 failed at the storage assertion. This is functional file-retention evidence, not a build-host timing/RSS benchmark. The initial VM run failed during feed preparation; a fenced VM repetition follows.release_update.rs publishes updates/images/, and updater.rs replaces ready_path without retiring superseded images. History=100 does not bound executable retention. At the final production edge size, 1000 retained images alone consume 21,116,080,000 B; filling the same state volume threatens journal writes and recovery. P1 for shipping default automatic edge preparation. No implementation changes.
retention-functional.log
EA-04 P1 confirmed; tests committed locally in
35d11662. D155 U2/U4 requires pre-upgrade backup and restore; D186 only supersedes distribution/channel clauses, and D217/D251 do not waive database recovery. Runtime updater.rs:367 commits applying intent then hands off with no backup service, destination or key. review_update_refuses_handoff_without_pre_upgrade_backup fails (0 passed / 1 failed).The real-SQLite companion passes: after additive successor core migration 26, predecessor Auth startup refuses VersionMissing(26). startup.rs selects an executable but does not restore a pre-upgrade journal. Thus a signed successor that migrates and later fails cannot be recovered by this binary-only path. Existing administrative deploy backups do not protect the automatic path. The same-source A–E fixture does not test different migration sets. No implementation changes or validation relaxation.
backup-admission.log
migration-rollback.log
EA-03 VM confirmation: after adding only an HTTP fixture readiness fence (
62605138), the storage assertion also fails on the locked perf VM at load 1.04/0.50/0.39. Five retained executable images / 105,760,036 B / one selectable ready candidate. 0 passed / 1 failed; owned run cleanup confirmed. This replaces the earlier preparation-only VM failure as the resource-retention receipt.retention-vm-fenced.log
EA-02 promoted to P1 after the mandatory native latency gate fails a second time on the locked perf VM, load 0.88/0.43/0.37. Same-PTY flood echo p99 437.05 ms and ACK p99 436.81 ms vs 334 ms; echo growth 110.00 ms vs 16.67 ms. Baseline echo p99 327.04 ms; other-PTY flood 304.19 ms. Three real PTYs, RTT 300 ms, 100 samples/phase. Test
bf6d9e9dremains the committed reproduction.This is a repeated D41/latency qualification failure, not a proven regression introduced by the orchestration profile or updater. No matched baseline attribution is claimed. The fixture body/budgets are unchanged; the repeat adds only a 110-second outer cleanup deadline, finishes normally at 92.07 seconds, and cleans its own state.
native-latency-repeat-vm.log
Review checkpoint at
f79c50c5(local review-edge-autoupdate, no push): four P1 findings recorded and receipts attached: EA-01 browser lease/capacity failure; EA-02 repeated native latency gate failure (regression attribution unproven); EA-03 unbounded server images, confirmed on VM; EA-04 missing D155 backup admission plus real SQLite migration diagnostic. Failing tests are committed in884f92e4,bf6d9e9d,0a7d0d0b,35d11662. Full scripts/verify fast on exact target6ae065677continues in an isolated gate-head checkout; current phase static builds. Healthy warm-gap measurement is being isolated from browser lease failures; its two test-file changes remain uncommitted in pending-review-tests.patch and its harness rebuild waits through build-slot. Public signed fixtures/test executable remain under edge-autoupdate-review/staging/public-transfer-c632a856; no private signer material exists there. No implementation changes, production deployment, credentials lookup or owner live fixture modification. Final verdict/complete gate still pending.EA-05 P1 confirmed; failing healthy-handoff test committed locally in
b278db99. Exclusive perf VM, load 0.35/0.85/0.78: signed manual A→B with 128 live PTYs, ZERO attached browser routes, no crash/refusal injection. All 128 shim PIDs survive and CA stays unlocked. Listener bracket 849.287 ms; max sample interval 12.889 ms; 343 failed probes. Removing both boundary intervals still gives at least 823.510 ms unavailable, exceeding the generous measured four-RTT + 50 ms allowance (92.227 ms). 0 passed / 1 failed; owned cleanup confirmed.Thus a nearly one-second restart gap is not acceptable as D259/D265/D267 reconnect qualification: listener absence alone exceeds the budget before TLS/session resume. This is a lower-bound disproof, not a full TLS percentile, and does not assess the separate client-copy screen budget. It isolates healthy update availability from the earlier browser lease failures and from the author’s aggregate 882.680 ms across multiple warm/failure transitions.
reconnect-isolated-vm.log
Final independent review: HOLD — do not merge. P0=0, P1=5, P2=0, P3=0. Target:
6ae065677f; review head:a141238906, local review-edge-autoupdate. Each finding has a committed failing test; no implementation fixes, push or deployment.EA-01: 128-route qualification stops during attachment before publication: local output work 94.466 ms exceeds the 50 ms browser lease; replies processed after expiry cannot recover the socket. This confirms a session-continuity gap, not lost PTY bytes or an updater-specific regression.
EA-02: mandatory native latency gate fails twice (same-PTY echo p99 350.04 / 437.05 ms vs 334 ms; repeat ACK 436.81 ms). Regression attribution is unproven; this is not a matched replication of the author's zero-RTT profile benchmark.
EA-03: five signed prepared candidates retain five executable files / 105,760,036 B. No image bound or capacity refusal: disk-exhaustion risk makes this P1.
EA-04: handoff proceeds without the D155 pre-upgrade backup. Real SQLite companion proves predecessor startup refuses successor migration 26; binary-only rollback cannot restore it.
EA-05: isolated healthy warm transition retains all 128 shim PIDs and CA custody but listener gap is at least 823.510 ms (849.287 ms bracket), exceeding even four RTTs + 50 ms = 92.227 ms. The reported nearly-one-second gap is not acceptable for typability. Client-screen restoration is a separate, unmeasured budget.
Size: matched author profile artifacts save 1,685,184 B; later correctness adds 32,192 B. Final edge x86 21,116,080 B is 1,088,224 B below former 22,204,304 B cap. Independent stable builds confirm x86 21,116,016 B / ARM 18,739,104 B. Features, verification and unwind tables remain; stripping predates the lane. Separate crash-symbol archives remain absent. Different embedded build timestamp/compiler path prevents a byte-for-byte reproduction claim. External hardened signer rollout remains a prerequisite.
Exact target-head
scripts/verify fast: exit 0. Verbatim gate summary:Verbatim final TypeScript summary:
Full output, including every Rust test and static/security check: verify-fast.log. Build-host durations are operational logs, not performance evidence. Native x86 key-memory check passes; ARM runtime check was not run. No load-related baseline waiver needed. Review-source fmt and targeted all-target Clippy pass.
Report: docs/verification/edge-autoupdate-review.md at
a141238906. Findings and raw receipts already attached above; external ledger updated. Reviewer checklist covers admission, storage bounds, migration recovery, continuity, reconnect, trust, size and compile-out. Raw receipts remain outside checkout; owned build/fixture scratch is being removed. Issue remains open.Review cleanup complete: detached gate checkout and owned build targets, staging executables, downloaded fixtures and functional-test state removed. Raw evidence retained outside checkout. Local review-edge-autoupdate is clean at
a14123890; no push or implementation changes. Final verdict and exact-head gate transcript are in the preceding comment.Resumed edge-autoupdate at base/head
6ae065677f, clean worktree. Read #211 and parent #157 histories and reviewa14123890. Imported review failing-test commits throughb278db991as 65ea8cc48..49351251f. Addressing EA-01..EA-05; no production or signer deployment. Existing size caps remain mandatory.EA-04 prerequisite finding at
49351251f: crates/plugins/backup/src/lib.rs:1 and Cargo.toml explicitly declare metadata-only backup actions; no backup key store, administrator wraps, snapshot or restore runtime exists (repository search for backup_key, backup.*wrap, SQLite backup and VACUUM INTO finds none). D147/D186 require a dedicated administrator-wrapped key, encrypted consistent snapshot and restore before predecessor startup. A CA-derived key or plaintext database copy would violate that contract. Adding fail-closed update admission while this runtime is absent; complete EA-04 recovery/VM acceptance remains dependent on that runtime. No claim that refusing updates implements recovery.EA-03 implementation in progress: durable selection and check-in invoke image collection; current/previous/ready and all in-flight target/recovery paths are retained; stale directories atomically rename before recursive deletion. Added 20-check-in storage assertion. Listener inheritance draft keeps TCP descriptors across same-PID exec and validates SO_ACCEPTCONN before adoption. Targeted tests/clippy are queued through build-slot; all four slots currently occupied. No new timing claims.
Build validation blocked on shared build-slot capacity: targeted Rust tests/clippy have waited since 16:02 CEST with an empty retention-gate.log. Slot receipts show slot 1 mesh-autoswitch build-probe-o.sh (16:01), slot 2 addhost-instant measure-command-future.py (15:47), slot 3 designer-version-pill serve-loop.sh (16:01), slot 4 history-audit verify fast (15:56). The dev-server loop holds a build slot for its lifetime. Orchestrator capacity management is needed; I will not stop another job or bypass the slot limit. Source work continues. Imported review reproductions are pushed at
49351251f. No implementation test or timing success claimed yet.EA-03 functional regression now passes in the worktree: image_store_remains_bounded_across_twenty_check_ins, 1 passed / 0 failed. Across 20 check-ins it asserts one initial image then exactly current+previous, at most 8,192 executable bytes (two 4,096-byte fixture images); an interrupted .retired directory is reclaimed on the next pass. This is functional storage coverage, not a timing/memory benchmark. Current/previous/ready/requested and applying target/recovery paths are protected by persisted selections. Collection also runs before another download to reclaim canceled candidates. Implementation remains uncommitted pending touched-crate Clippy/tests.
retention-functional.txt
Resumable draft while Rust validation rebuilds caches: pending-review-fixes.patch, applies over pushed
49351251fand includes new files. Contains EA-03 collection + 20-transition storage test, EA-04 default refusal without a recovery provider, EA-01 independent bounded browser control I/O + real-WebSocket fence regression, EA-05 same-PID TCP listener inheritance (browser and native fallback) + real-exec queue regression and audited descriptor duplication. No claim of final correctness, VM acceptance or passing size gate. Default refusal means automatic/manual update application remains unavailable until the missing D147/D186 backup runtime is supplied; it does not implement backup/restore. Head remains49351251f. Build/test receipts are under edge-autoupdate/evidence; targeted Clippy is active, focused tests queued, native baseline build queued through build-slot. No production/Worker deployment.Functional draft checks pass: release plugin 31 passed / 0 failed / 1 ignored, including review_update_refuses_handoff_without_pre_upgrade_backup; real exec retains a pre-exec queued TCP connection and restores CLOEXEC (1 passed); a real browser WebSocket answers ten probe cycles while application processing is fenced (1 passed); invalid inherited descriptors refuse (1 passed); CLI binary suite 78 passed / 0 failed / 1 ignored. Initial Clippy identified three local style/async issues; corrected, retry queued. Full iterate/fast and original VM review cases remain pending.
review-fixes-functional.txt
Additive later-UI copy for refusal before any swap: "Update blocked · Pre-upgrade backup unavailable". Existing API returns error="pre-upgrade backup unavailable", retains the verified ready image and records last_result.result="refused"; it must not claim that an image was applied or restored. This is a safety refusal until the absent dedicated-key backup/restore runtime is implemented, not completed EA-04 recovery.
Completed atomic guard/policy steps (pushed):
f0badae39refuses release handoff when the engine cannot prepare D147/D186 recovery;40c55055adds plugin-owned retained-path collection after durable selection/check-in and before another download. These are separate commits; the disk implementation follows. Guard semantics intentionally make application unavailable until the missing backup runtime exists. No recovery claim.Validation: workspace fmt and all-target Clippy for server/release/CLI/shim pass; release unit suite 31 passed / 0 failed / 1 ignored; CLI binary suite 78 passed / 0 failed / 1 ignored. Real exec listener regression and both native listener reservation regressions also pass on the draft integration. touched-gate.log
Completed and pushed
0e91fdaca(audited F_DUPFD_CLOEXEC ownership boundary; invalid-descriptor test passes) andb9a7cc5d7(same-PID browser/native TCP listener inheritance). Real exec regression preserves a queued connection and verifies restored CLOEXEC/ordinary shutdown port release; 1 passed. Native listener reservation regressions: 2 passed, preserving explicit operator ports and releasing failed ephemeral reservations. Workspace fmt and all touched all-target Clippy pass. touched-gate.logNo listener-gap timing qualification yet: baseline musl image is linking, candidate build and final collection/control functional check await build slots. The missing backup runtime still blocks actual update application and the full original VM acceptance sequence. No budget or size cap changed.
New EA-05 compatibility finding before further implementation:
b9a7cc5d7exports listening descriptors unconditionally in restart.rs::execute_image. The predecessor can carry the existing CA-v1 ELF note while having no listener consumer; its inherited socket would keep the port occupied and make legacy rollback bind fail. Compatibility must be independent of CA custody.Additive protocol proposal: retain CA-v1 unchanged; add a separate versioned ELF listener note using the existing bounded exact-note reader. Export the public descriptor manifest only to sealed images advertising that note. Legacy verified images use their existing close/rebind behavior, preserving rollback functionality without claiming its old listener gap meets the new target. Bind the descriptor manifest to the unchanged service PID so ambient metadata is not mistaken for handoff by a child process. No frozen host upgrade frame or CA stdin frame changes, no new engine/dependency. Add disjoint/malformed note tests and cover both note kinds in the existing fuzz target before wiring conditional export.
Completed and pushed
e1bb18149(filesystem image collection) andf2c5dd5bc(independent bounded browser-control I/O). Final focused run: 20-check-in storage regression 1 passed; browser-control fence regression 1 passed. Retention keeps exactly current+previous after check-in and reclaims interrupted tombstones; the control test answers ten real probe cycles before application work resumes. These are functional results, not build-host timing evidence. Original VM review cases and final full gate remain outstanding.Native benchmark preflight on the locked perf VM now passes: three distinct real PTYs open through the retained dev baseline; owned state and remote run were removed. No timing result collected. Candidate static build finished, but capability edits occurred during that build; it will be rebuilt from frozen source before size/performance qualification.
collection-and-control-final.log
native-preflight.log
Completed and pushed
102c8fe61: independent listener-v1 ELF capability, same-PID descriptor manifests, exported copies above standard handles, conditional export for capable images, and legacy close/rebind fallback. CA-v1 and host wire stay unchanged. Added both note kinds to the existing parser fuzzer.Validation: new note API red compile preserved; 2 exact-note mutation/truncation tests pass. Fmt and touched all-target Clippy pass. Two listener lifecycle tests cover capable adoption, legacy rebinding, closed stdin and child-PID isolation; 30 CLI restart tests pass / 1 measurement ignored. Legacy fallback is functional compatibility, not a claim that its old gap meets the new budget.
listener-compatibility-gate.log
listener-note-red.log
listener-note-green.log
Earlier candidate static x86 image was 21,164,624 B versus 21,116,016 B cap (+48,608); edits occurred during that build, so it is not final exact-source attribution. Comparing frozen
102c8fe61against review head6ae065677with cargo-bloat before reducing overhead. Caps unchanged. Backup runtime, original VM acceptance, latency A/B and final fast gate remain outstanding.Size attribution at pushed
102c8fe61versus reviewed6ae065677, matched cargo-bloat x86_64-musl release recipes (strip disabled only for attribution): .text 16,042,134 → 16,079,958 B (+37,824). Crate attribution: server +24,759 B, std +7,819 B, CLI +3,860 B, release plugin +2,034 B, shim +117 B; Tokio -26 B. No dependency additions. This is symbol attribution, not a shipping cap measurement. Testing a shared dyn Sink writer behind the existing allocation to reduce generic adapter code; still uncommitted. Actual pre-upgrade encrypted backup/restore remains absent: production apply refuses withpre-upgrade backup unavailable; the safety guard is not claimed as completion of EA04.Matched bloat attribution receipt: review-fixes-bloat-diff.txt. Both JSON reports and build logs are retained in the same scratch evidence directory. No shipping-cap pass yet. The writer gate is queued through build-slot; stopped only my own waiting fuzz-slot wrapper (PID 103401) to avoid competing with this job's shipping build. No running build or other job was stopped.
Static follow-up finding in updater.rs: post-commit image collection currently precedes notify/toast delivery. A collection I/O failure after the ready row and per-version notification receipt commit returns early, permanently losing the ready event (a retry sees ready_version and returns without a toast). Added
ready_notice_survives_post_commit_collection_failure, pending RED through build-slot. Proposed correction: deliver the durable-selection notifications before fallible post-commit collection; preserve the cleanup error and bounded retention behavior. No change to the publish or backup contract.One diagnostic A/B pair on the locked perf VM, 4 CPUs, MemTotal 8,069,112 kB, three real PTYs, RTT 300 ms, 100 samples/phase. Baseline source
8e7467c07(reviewer's dev) uses the normal shipping recipe; candidate source102c8fe61uses the matched optimized symbol-attribution recipe (strip=none), so this is NOT final shipping qualification. Same-PTY flood echo p99 baseline/candidate 339.17/358.36 ms vs 334 ms; growth 13.86/31.08 ms vs 16.67 ms. Both fail the absolute echo gate; candidate also fails the growth and ACK gates. Load before/after baseline 1.81/0.84/0.67 → 1.56/0.96/0.72, candidate 1.30/0.95/0.73 → 0.50/0.78/0.69. No noise or regression-attribution claim from one pair. Own VM directory cleaned. Full receipt + candidate hash/recipe. The >=10 interleaved final-artifact pairs remain pending; the shipping writer build has waited for a shared build slot since 18:00 local time.Ready/cleanup regression confirmed RED before the fix: 0 passed / 1 failed at
durable ready selection must wake observers(updater_tests.rs:537). Verbatim test output. The fix now delivers notifications after durable commit and before fallible collection. Selected-crate tests/clippy, the WebSocket fence regression and exact shipping size are running through build-slot (acquired after 27 minutes). No additional commit or completion claim yet.d99e4817cpushed: notify observers and emit the ready toast after durable selection, before fallible image collection. Red regression previously failed on missing observer notification; now 32 release unit tests PASS / 1 ignored, selected server/CLI/release all-target Clippy PASS, fmt PASS, real WebSocket fence test PASS. The latter also compiles/tests the uncommitted writer sharing candidate; its size and VM qualification are still pending. Verbatim focused gate. No raw evidence committed.Writer-only optimization rejected: normal production stable x86_64 shipping image is 21,166,056 B versus cap 21,116,016 B (+50,040). Matched symbol .text is 16,080,022 B, only +64 B versus before that candidate and the notification correction; no useful cut. No profile, dependency or cap changed. Size receipt. Uncommitted next candidate reuses mpsc and JoinSet<()> already present in the server, polls reader/probes within one independently owned task, preserves frame/byte bounds and cancellation/join, and handles transport echoes in the reader. Focused tests/clippy and the normal shipping build are queued through build-slot.
iteratehas not run: the failed size candidate stopped before it.Qualification-driver correction before the >=10-pair run: the single diagnostic pair did not copy
crates/infraternal/tests/profile/.zshrc(only PS1='shim-test% '). The final driver now includes the repository profile, matching the review harness, and uses the review's exception-based SIGALRM watchdog so timeouts execute the fixture's PTY cleanup. The diagnostic remains labelled non-qualification; neither diagnostic phase timed out. No product or gate test was weakened.Task/channel sharing candidate passes fmt, all-target server/CLI Clippy and the real WebSocket fence regression (including transport echoes and byte-budget release). Normal stable x86_64 image 21,156,360 B: -9,696 versus the discarded writer-only candidate, still +40,344 over the 21,116,016 B cap. No cap/profile/dependency change; not committed yet. Adding a separate ignored staging transport case that reuses the real passkey/50-user/10,000-row/128-PTY fixture and measures durable input on all 128 attached routes, without attempting an update. This isolates EA01 qualification from the missing encrypted backup provider; original review cases stay unchanged. It will also allow measured server optimization candidates if further code sharing cannot meet the cap; no unmeasured profile adoption.
138c80eabpushed: one independently owned task polls both reader and probes; reuse the already-linked byte channel and unit-output task machinery. Frame and byte bounds, ordered application delivery, cancellation and join retained. Expanded real WebSocket regression also verifies transport echoes during the application fence and released byte budget. Fmt, selected all-target Clippy and that test PASS: focused output. Normal stable x86_64 shipping artifact 21,156,360 B; still +40,344 over cap. No final size/gate pass claimed. Isolated transport harness and a server-only opt-level=z measurement are queued; no profile adoption without VM evidence, no cap increase.b734a419cpushed: separate transport-only VM case, 1,024 durable-input requests over all 128 attached routes, 110 s sampling deadline, same real passkey/50-user/10,000-row/128-PTY fixture. It reports ACK p50/p99/max and enforces the local 50 ms allowance; it does not claim glyph, fresh TLS reconnect or update-recovery coverage. Original review cases unchanged. Fresh staging builds can measure explicit server s/z overrides; reuse plus override is refused. Fmt, all-target server/CLI Clippy, five pump tests and three staging-artifact tests PASS. Focused gate. Server-only z shipping-size measurement now runs; no profile adoption or cap increase. SQLite backup/restore prototype in owned scratch is queued for real WAL/page-size/refusal tests, not wired or claimed as EA04 completion.Unadopted server-only z experiment: normal production stable x86_64 image 20,864,008 B, -292,352 versus the current s image (21,156,360 B), -252,008 versus cap (21,116,016 B). Production-trust check PASS; SHA-256 ed5971c3109eb75364bb8cd2eef4722a20d60f752a30d294aa6b56a99604b789. No dependency, terminal/transport/crypto-engine profile or cap change; Cargo.toml remains s. Artifact recipe/hash, build receipt. Fresh staging s build runs before paired VM transport qualification; profile adoption remains conditional on performance evidence. Backup primitive prototype reuses SQLx ownership and exclusive handle guards; only backup-copy and padded deserialization need the narrow existing SQLite FFI. No backup/restore integration or new library choice claimed.
Transport-only s VM run failed before server readiness; no route/ACK measurement was produced. Machine infraternal-perf-test, kernel 6.12.111+deb13-amd64, load 0.64/0.16/0.08. Safe failure location deploy_staging_tests.rs:329.
--collectremoved useful failed-unit status (observed inactive/dead with default zero exit fields). Own VM directory was removed. Verbatim receipt. A retry reuses the same signed S artifact (1a4e74b7ec2dc803e98bd3c07b6ae2a41affb74ac3aa4e940845ccc272edf1f0) and rebuilds only the harness: retain failed-unit status until owned teardown and record LoadState/Result/exit fields, without unfiltered application logs. z performance remains unqualified.Head
b734a419c. The first S-profile VM transport attempt failed before TCP readiness, so it produced no transport/performance result. Source attribution: listener_handoff::bind calls nix Backlog::new(4096); pinned libc 0.2.190 defines SOMAXCONN=128 for musl but 4096 for GNU, and nix 0.30.1 rejects values above that constant. Existing GNU lifecycle tests therefore miss the shipping-target failure. A musl build of the production listener lifecycle test is queued through build-slot to capture red before repair. Planned repair uses existing nix Backlog::MAXALLOWABLE on Linux/FreeBSD (kernel-configured limit), with MAXCONN elsewhere; no new dependency or kernel tuning. A fresh signed fixture is required after repair. D147 recovery and final VM/size gates remain incomplete.D147 recovery implementation scope, before changing the private handoff contract: snapshot via the already-pinned SQLite engine/API into bounded process memory; encrypt persisted DB + CA/config state with an independent D186 backup key (never derive it from the CA signing key). Preparation must run after the foreground fence while retaining the configuration/SQLite writer lease, not before admission. Fatal-image recovery must restore before predecessor migrations and must not depend on a key surviving in the crashed process. The current backup plugin is metadata-only; the production prepare_recovery default remains refusing. A scratch real-WAL snapshot/restore prototype is compiling; no plaintext backup/provider has been integrated or claimed complete.
Native investigation: ten alternating A/B pairs are now running under the perf VM lock with the normal-production-recipe S artifact (runtime
138c80eab; source headb734a419c) and matched baseline8e7467c07c. These are diagnostic, not final-head qualification; per-run artifacts, load and results will be retained.SQLite recovery primitive: 4 real-engine functional tests pass in owned scratch using the already-pinned sqlx 0.8.6 / libsqlite3-sys 0.30.1. WAL snapshot restores committed data in place; 8192-byte page geometry survives; malformed images leave live records intact; applying actual SQLx migration 26 makes the predecessor refuse VersionMissing(26), and restoring the snapshot permits predecessor migration/startup with earlier data. Source and immutable functional output attached below. Clippy remains running. No production provider, encryption/key custody, guardian or updater integration is claimed.
Functional output · Reproducible prototype source · Source hashes. Timings printed by the build-host test runner are operational output, not performance evidence.
EA-02 diagnostic: 10 interleaved A/B pairs complete (AB/BA alternating; 100 samples/phase, 3 real PTYs, configured RTT 300 ms, 4-vCPU perf VM, each run independently flock-locked in CPUWeight=10000 scope). Baseline
8e7467c07cvs normal-production-recipe S candidate runtime138c80eab, source headb734a419c; artifact hashes attached.Same-PTY echo p99 median: baseline 413.495 ms, candidate 413.270 ms; failures 10/10 vs 9/10 at 334 ms. Candidate lower in 6/10 pairs. Paired mean difference -0.889 ms, approximate 95% t interval [-24.710,22.932] ms. Same-PTY flood-growth median 86.750 vs 85.665 ms, failures 9/10 vs 8/10 at 16.67 ms; paired mean difference -1.016 ms, interval [-23.806,21.774] ms. ACK failures 9/10 on both.
The baseline failure is established; there is no detected candidate-specific slowdown, but this interval does not rule out a one-frame slowdown. This is neither an absolute latency pass nor final-head/size qualification. EA-02 stays open for final-artifact qualification. Machine/load and all 20 raw outputs: receipts and runner, paired summary, artifact identities. Owned remote fixture directory was removed by the runner.
Musl startup regression captured before repair: production lifecycle test returns EINVAL in bind, red receipt. Existing nix kernel-limit repair is uncommitted pending gates. SQLite prototype now passes all four functional cases and Clippy: complete prototype gate. Encrypted backup integration remains incomplete.
Committed and pushed
ed5d280b6e: optional backup/shim dependency edges to the existing SQLx/libsqlite3-sys engine, plus Tokio test support. No new package versions, active default runtime features or snapshot/provider behavior. Metadata-only dependency tree excludes SQLx and the shim crate.Focused gate through build-slot: fmt passed; shim/backup all-target Clippy -D warnings passed; shim tests 80 passed / 13 ignored / 0 failed; backup metadata test 1 passed / 0 failed. Gate output.
The kernel-limit listener repair remains uncommitted pending crate checks. Its shipping-musl regression is red before repair and 2/2 green after it, including same-PID exec, closed stdin, queued connection, legacy fallback and ignored parent manifests: red, green. SQLite primitives/provider, updated signed VM acceptance, size/profile qualification and final iterate/fast remain outstanding; updates still refuse without recovery.
Listener author-review finding (source analysis, not yet a VM claim): bind adopts only an exact local_addr match. If the configured listener address has port 0, exec repeats that configuration, cannot match the inherited actual nonzero port, and can leave the old queue without an acceptor while binding a new port. The registry needs to preserve this configuration fact and either support unambiguous adoption or refuse export before shutdown. I will add a failing functional regression before changing that behavior; no port-zero continuity claim is made. Current backlog fix has 2/2 shipping-musl lifecycle tests green; package gate is queued.
Committed and pushed
26c92a6e66: replace the rejected musl Backlog::new(4096) call with the existing kernel-limit API; no dependency or kernel-setting change. Shipping-libc lifecycle red/green receipts remain linked above.Package gate through build-slot: fmt and four-package all-target Clippy -D warnings passed; native listener tests 2 passed; update-pump helpers 5 passed; staging artifacts 3 passed; shim tests 80 passed / 13 ignored; backup metadata 1 passed. The initial WebSocket module filter selected zero tests; the corrected function filter ran websocket::transport::tests::browser_probes_continue_while_application_processing_is_fenced and passed 1/1. Primary gate, corrected fence test.
The ASan Rust handoff/parser fuzzer completed 100000 inputs without a crash (coverage 134, features 223); both capability predicates are observable through black_box. Raw functional fuzz receipt. Build-host durations/RSS in these raw logs are operational, not performance evidence. The fuzz-target source change is pending its own Clippy/commit.
The port-zero export guard has a red shipping-libc regression and a three-test green draft in scratch, not yet applied. Snapshot primitive files are unwired in the worktree and pass five real-SQLite scratch tests plus pedantic Clippy. Encrypted provider integration, fresh signed VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Before additive custody API wiring: reuse the existing CA AES-256-GCM operations in one optional plugin-api helper, then make both CA and backup consumers call it. The CA encrypted-copy wire format stays unchanged. The unwired draft seals with fresh nonces and authenticates into caller-owned storage; errors/unwinding clear partial output, with no full-buffer clearing pass on success. Four functional/pedantic checks pass against the already-built pinned library, including existing-cipher interoperability and all-field tampering. Draft source, checks. No new cipher/library is selected.
Key-administration draft: share the existing explicit administrator-generation reads; preserve the CA facade and use independent backup pending-ceremony registries around Auth::login_start/verify_passkey. Ordinary login consumption cannot authorize a key operation. Owner flags are not a substitute for membership, and proof completion must recheck live session, credential, generation and time under the writer transaction before key installation. These helpers remain unwired and do not satisfy the encrypted-provider requirement.
Proof tooling will separate public fixture preparation from measurement so a host build slot is released before waiting on the independent VM lock. The queued atomic primitive sequence will gate/commit this small tool change separately; fresh S/Z transport measurements still return before publication or application.
Recovery primitive finding: a successor that changes the database from 4096-byte to 8192-byte pages in WAL mode prevented restoration of the predecessor snapshot. The new real-engine regression failed before the fix. Restore now leaves WAL only when geometry differs, requires the mode transition to succeed before copying, and restores WAL after the copy, including a failed copy. All serving connections must already be stopped.
Exact worktree source: crates/plugins/backup/src/database.rs; test predecessor_geometry_is_restored_after_successor_changes_it in the external prototype, queued for the repository integration-test slice. Six real-engine tests and pedantic Clippy pass. These are functional results; no build-host timings are performance evidence. The encrypted production recovery provider remains incomplete.
sqlite-changed-geometry-red.log
sqlite-changed-geometry-green.log
sqlite-changed-geometry-clippy.log
D147/D186 implementation direction, before runtime/API wiring: reuse the existing AES-256-GCM engine through a shared optional sealed-bytes helper; retain CA encrypted-copy compatibility while removing its duplicate cipher invocation. The backup component owns a separate random key, encrypted per explicit current administrator generation with a backup-specific passkey derivation/ceremony domain. A retained public SHA-256 key identity prevents substituting an unrelated backup key. Copy installation still requires a fresh purpose-bound proof and serialized membership recheck; possession of encrypted metadata is never authority. Key plaintext is returned only into caller-owned protected storage.
Unwired draft crates/plugins/backup/src/key_copy.rs binds version, key identity, member, generation and derivation salt into authenticated data. Seven functional cipher/copy tests pass with strict pedantic Clippy against already-built pinned libraries, including altered bindings, wrong administrator/wrapping key, unknown fields, bounds and failure wiping. The draft is not a shipping provider.
Planned additive admission hook: checkpoint only after foreground activity is frozen and while the existing authority/configuration lease remains held; refusal releases the fence without stopping the serving runtime. A pre-admission snapshot is insufficient because later foreground mutations could otherwise be lost. Runtime recovery must finish before predecessor migrations and must remain fail-closed until encrypted DB/CA/config recovery is wired and tested. No decision or foundational engine change is proposed.
key-copy-prototype-gate.log
Resource wait: the owned build-slot wrapper (PID 1819305, queued about 21:35 local) still has not started its child at 22:51 local. Current pushed head remains
26c92a6e6. No other job was stopped, no slot configuration changed, and no priority bypass requested. The prepared gate/atomic-commit sequence remains queued; it will stop on any failure. In parallel, optional encrypted key/resource/protected-memory drafts and exact legacy CA interoperability tests have been prepared. Shipping update recovery remains fail-closed and incomplete. Need: a managed host build slot to become free; no owner decision or credential access is needed. Final fast and fresh VM acceptance have not run.Timestamp correction to the preceding resource-wait note: observed local time was 22:49, not 22:51 (about 74 minutes queued). Other status is unchanged.
Additive host-adapter contract proposed before implementation (D16/D198): the backup component needs a private HTTP ceremony endpoint because a scoped wrapping key must never enter the ordinary plugin message/recording path. Reuse the existing bounded, protected CA request intake and real passkey verifier. Declare action names/permissions once; a generic optional plugin HTTP adapter supplies namespaced routes, and the host enforces enabled-generation admission, same-origin authenticated requests, bounded concurrency/deadlines and lifecycle cancellation. Disabled components must admit no new request and retain no key, worker or registration. Metadata inspection must create neither routes with authority nor background work. No additional HTTP, crypto or database engine is proposed.
The backup-specific ceremony registry will bind the current session hash, exact administrator generation, challenge expiry and operation purpose; a fresh ordinary browser session alone will not unlock a key. An encrypted copy remains public metadata, never a substitute for that proof. This is a proposed additive API direction, not a shipped endpoint or completed recovery provider. Existing CA wire compatibility must be preserved by tests before extracting request/cipher helpers.
Backend/private-adapter refinement before implementation: keep HTTP parsing, cookies and protected page ownership in the host; use an optional private-action interface with the existing ActionDef/SocketHost and task registry. The plugin API does not gain an HTTP engine or a dependency on the PTY implementation. The real host verifier supplies opaque proof metadata; the component retains purpose/session/generation binding. Shared administrator checks live beside the existing shared session query in infraternal-plugin-api, rather than forcing backup code to depend on the server crate.
Proposed additive recovery readiness states and exact deferred UI copy (not implemented UI):
These readiness blocks must not mark an otherwise valid image as failed/ignored. Preparation must run only after the foreground fence and under the existing configuration/authority lease. An earlier snapshot could omit later input-related state. The production provider and typed readiness/wake behavior remain unfinished; the current default refusal still protects serving state.
Committed and pushed
0b1d75e09f: Refuse unidentifiable listener exports before shutdown (D128, D259).Listener-v1 cannot map a configured port of zero to its inherited nonzero port. Retain the configured address with each live listener and refuse export before shutting down the serving runtime. Guessing by IP or descriptor order could adopt a different service socket; silently rebinding would leave clients on an unserved old queue. Fixed-port same-PID and legacy lifecycle behavior remains covered, with a reserved socket fixture that avoids a release/rebind race. The shipping-libc refusal regression was red before this change and the three lifecycle tests are green afterward.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
listener-fixed-port-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
a96b60be68: Audit guarded SQLite backup and memory import (D147, D186).Expose the pinned engine online-backup API only behind sqlite-backup. SQLx handle guards exclude its workers, the backup handle finishes exactly once, and incomplete copies roll back. Bounded padded import transfers allocation ownership to SQLite and refuses persistent destinations before deserialization can detach their files. Plain file copies miss live WAL state; unchecked deserialization can replace the wrong connection storage. Six real-engine tests compile this exact worktree source, including red/green persistent-target refusal, changed WAL page geometry and predecessor migration recovery. This is a primitive, not an encrypted recovery provider.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
sqlite-backup-bridge-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
5ac74c0a67: Snapshot live WAL state and restore predecessor data in memory (D147).Freeze a read transaction before page sizing and copy with the shared SQLite backup bridge into a matching in-memory page geometry. Bound images to 64 MiB, wipe serialized snapshots on drop, check imported integrity before touching persistent data, and restore transactionally in place. A raw database-file copy can omit committed WAL pages; replacing a live database inode bypasses existing connection ownership. Hosts must drive the synchronous engine step on an owned blocking worker. The optional module adds no enabled runtime or plaintext backup files.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
backup-database-snapshot-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Recovery integration invariant identified during the D147 implementation: a manual rollback after healthy service has accepted auth changes must not revive revoked credentials, sessions or administrator generations from the pre-upgrade database. It also must retain currently valid browser authority needed for D128 session continuity. Automatic recovery of a failed image must occur before that image accepts foreground traffic.
Implementation direction: validate compatibility and the recovery plan before shutdown; preserve current security state where it is compatible with the predecessor schema, and refuse before swap when that cannot be established. Do not silently replay stale authorization rows or discard live sessions as a workaround. Add a real-engine revocation/continuity regression alongside migration recovery. The existing six SQLite tests prove engine consistency and predecessor migration restoration only; they do not yet establish this authorization invariant or full production recovery. No decision change or owner approval is requested.
Additional locked perf-VM diagnostics, separate from the earlier ten uninstrumented A/B pairs: normal baseline
8e7467c07and candidate runtime138c80eab(not final head; candidate S image remains over cap and is not a shipping result). VM: 4 CPUs, MemTotal 8069112 kB; each receipt records load; CPUWeight=10000, short separate measurement locks and owned cleanup.Instrumented proxy pair, 100 samples per phase: same-PTY echo p99 baseline/candidate 464.72/468.17 ms; from-agent proxy maximum release lag 4.752/3.709 ms, maximum send blocking 1.140/2.252 ms, queue high water 1049651/1049631 B. These counters do not give a full end-to-end attribution.
Separate first-event diagnostic pair, 100 samples × three phases × two binaries: zero ACK or echo timestamp overwrites across all 600 keystroke samples. First-event and reported p99s were identical. Same-PTY echo p99 baseline/candidate 471.636/452.074 ms; corresponding growth 143.30/125.13 ms, both failing unchanged budgets. The timestamp-overwrite hypothesis did not reproduce; no gate code or thresholds were changed. Instrumentation can perturb scheduling, so these are diagnostics, not acceptance or equivalence proof. Native P1/final artifact qualification remains open.
native-proxy-and-first-event-diagnostics.zip
Resume record at pushed head
5ac74c0a67: an unwired backup authority now binds setup/enrollment/unlock to session hash, explicit administrator generation, purpose, challenge expiry and the original weak plugin admission epoch. It rechecks proof/session authority after durable publication, transfers the existing protected allocation into process state, and never auto-generates a replacement for an existing key identity. Record encryption also binds a unique authenticated manifest index to prevent per-file ciphertext substitution.Eight component tests are prepared using real SQLite and encryption with a controlled proof source: setup/unlock/cold continuity, purpose/replay, membership revocation, credential deletion, superseded epoch, expiry during publication, non-owner explicit administrator, and re-enrollment preserving key identity. These are not yet green and do not substitute for the real host-verifier or HTTP/VM integration tests. A standalone source prototype and strict Clippy check are queued, alongside the already-queued primitive gates.
Owned queued command: build-slot python3 $HOME/.cache/codex-scratch/edge-autoupdate/resume-gated-slices.py (wrapper PID 2723400). Earlier workflow prefixes must not be rerun: they already committed exports. The current continuation begins with the captured snapshot-cancellation red/green slice, then six repository DB tests, remaining fixture/fuzz harness steps, iterate, fresh S/Z fixture preparation and optional key/interface commits. Production encrypted checkpoint storage, private HTTP routing, startup guardian/recovery, security-state continuity, full VM acceptance, final size/profile qualification and final fast remain unfinished.
Source receipt for the unwired work (no keys or credentials):
backup-authority-unwired-draft.zip
Committed and pushed
8176713d0d: Wipe serialized database images when preparation is cancelled (D147, D244).Take ownership in the existing Snapshot wipe guard immediately after serialization, before awaiting connection close. Previously cancellation or a close error dropped the unguarded SQLite allocation without wiping its database content. A real SQLite regression holds the close boundary, aborts preparation and observes both the wipe and cleared allocation before free; it failed before this correction. Guarding only successful returned images misses errors and cancellation. The controlled hook and observation exist only in library tests; successful runtime work keeps the same encryption-only ownership contract.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
snapshot-cancellation-wipe-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Pre-fix real-engine cancellation regression for the preceding wipe fix: serialized image reached the close boundary, the task was cancelled, and the wipe count was zero instead of one. The committed fix passes and observes cleared bytes before allocation release. snapshot-cancellation-red.log
Committed and pushed
f203972515: Qualify backup primitives against WAL and real migrations (D147).Add real SQLite tests for committed live WAL restoration, nondefault and successor-changed page geometry, malformed-image refusal, persistent-target deserialization refusal and actual SQLx migration-26 recovery. The predecessor first rejects the successor journal, then reopens after restoration with its earlier data. Fixtures create unique private leaves outside the checkout, own cleanup before file I/O can fail and never delete an existing leaf. The feature requirement keeps runtime dependencies out of metadata-only test builds. These tests qualify primitives, not encrypted update recovery or performance.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
backup-database-tests-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
330e6a8f3b: Keep capability predicates observable during parser fuzzing (D217).Feed both exact ELF capability predicates to black_box so optimized fuzz builds cannot discard their pure results. Ignoring the booleans permits dead-code elimination and would give misleading capability coverage. The combined CA-frame and independent note target completed 100000 ASan Rust inputs without a crash; raw receipts are attached to #211. This changes only the harness, not production parsers.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
handoff-fuzz-observability-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
b59263583f: Retain failed staging-unit state until owned teardown (D251).Eager systemd collection erased the failed signed server exit status, leaving default fields after TCP readiness timed out. Keep failed units until this fixture stops and resets them, and report only allowlisted lifecycle fields, including early MainPID-zero failure. Environment, command lines and application output remain excluded. Include CPU count, memory and the kernel accept-queue limit with locked VM receipts to make the listener and profile experiments reproducible.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
staging-startup-receipts-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
d66d735eae: Separate staging fixture builds from locked VM execution (D256).Add prepare-only to retain the existing public signed fixture cache and close its ephemeral signer before returning. Reuse plus reuse-harness then runs measurement without rebuilding. A combined build/measurement command otherwise holds a host build slot while waiting on the independent VM lock. The fixture-only smoke test rejects any attempted measurement transport and requires the explicit preparation completion marker; existing artifact tests remain green. This does not publish or apply an update.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
staging-fixture-preparation-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Private-action host refinement for D16/D168/D186/D198: the optional adapter will expose a default-deny authority preflight. The host checks the live session, declared action, original enabled epoch and adapter authority before reserving protected body pages; the component still rechecks current membership/proof at durable commit. Calls use the existing Entry.tasks registry and disable mutex, with weak original-epoch admissions rather than another lifecycle worker. Request cancellation aborts its owned task; feature disable joins it and its protected input. This is additive and does not mount a backup endpoint or enable updater recovery yet. Draft source: crates/infraternal-server/src/private_plugin_runtime{,_tests}.rs.
Resume receipt at
d66d735eae: optional custody primitives and host-dispatch drafts are attached with SHA-256 identities and the ordered gate/commit scripts. The earlier authority prototype passed 27 tests and strict pedantic Clippy; new dispatcher/intake/lifecycle tests are not yet gated. One draft review finding is corrected: sensitive body collection must run inside Entry.tasks, so disable joins stalled intake as well as proof processing. Three deterministic lifecycle tests and two real-session HTTP tests are prepared.Current managed build-slot process: 2988608 (child workflow 3071127), running resume-fixture-slices.py. It has pushed fuzz, staging diagnostics and fixture-preparation commits; scripts/verify iterate is in progress. On success it builds matched S/Z public transport fixtures, then gates and atomically pushes key primitives, shared storage, the post-fence hook and private host integration. Any mandatory failure stops that sequence for repair. Existing production prepare_recovery still refuses; recovery provider, real rollback/guardian, VM acceptance, final profile/caps and scripts/verify fast remain incomplete.
custody-host-dispatch-unwired-draft.zip
Iteration gate at
d66d735eaestopped on one non-load fixture failure: daemon::gone_tests::a_vanished_session_gets_a_final_close_and_the_channel_stays_up, crates/infraternal-agent/src/daemon_gone_tests.rs:111. UnixListener::bind returned InvalidInput: "path must be shorter than SUN_LEN". The configured HOME-cache TMPDIR plus the 24-hex suffix generates 124 bytes. No timeout waiver applies.Queued managed build-slot PID 3204691 runs fix-socket-fixture-and-resume.py: first reproduce the unchanged failing fixture, then reuse INFRATERNAL_TEST_STATE_ROOT with a private 48-bit create-new suffix (107 bytes under this job root), run targeted tests and agent Clippy, commit/push that isolated test fix, and resume the stopped iteration milestone. No latency budget or runtime transport change is proposed.
Rust summary, verbatim:
raw gate log
Unwired draft receipt at
d66d735eae: source identities and ordered gate/commit workflows are attached. Latest additions have passed rustfmt syntax/formatting only; they have not passed functional/Clippy gates and are not shipping claims.Draft engine: crates/plugins/backup/src/checkpoint{,_tests}.rs owns a protected key lease, snapshots via the existing SQLite backup API, authenticates an ordered bounded inventory, and binds each record index plus both verified image digests. Private recovered resources use protected pages. Four tests are prepared: real SQLx migration 25→26→predecessor VersionMissing(26)→encrypted restore→25 reopens; record/image substitution; authenticated malformed database refusal; inventory bounds. record_wire.rs uses a constant 33-byte encrypted envelope, and backup_record_decode / backup_inventory_decode fuzz targets are prepared. The source prototype now includes these exact modules; its expanded rerun is pending (the earlier 27-test result applies to the earlier sources only).
Backup private-action descriptor/service and real host adapters are also drafted. No constructors create storage or start polling. All lifecycle and HTTP tests remain pending. The next managed wrapper is PID 3204691, fix-socket-fixture-and-resume.py. It first reproduces the iteration gate socket-path failure, then fixes/tests/commits that fixture and resumes the stopped milestone, matched public S/Z fixture builds, and sequential primitive/interface/runtime gates. Final updater checkpoint wiring, independently supervised recovery before startup database access, verified failed-image migration acceptance, VM measurements, cap/profile qualification and final fast remain incomplete.
encrypted-checkpoint-and-custody-draft.zip
Committed and pushed
8e0be3fd23: Keep the vanished-session fixture within the Unix socket path bound (D128).The iteration gate failed before its continuity assertions because a HOME-cache TMPDIR plus a 96-bit fixture suffix produced a 124-byte rendezvous path. Reproduce that failure first, then reuse INFRATERNAL_TEST_STATE_ROOT and a 48-bit create-new suffix; this job uses a 107-byte path under its owned scratch root. Preserve collision refusal and private directory permissions. Shortening global compiler scratch paths or waiving a non-load failure would hide the fixture bug. No runtime transport or deadline changes.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
gone-fixture-short-state-root-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Additive D16/D198/D202 integration proposal for the recovery process: an optional internal CLI worker binding carries a callback supplied by the declaring plugin. The core dispatches that generic binding; it contains no backup-specific command route. The hidden backup recovery action uses its existing backup factory, with an inherited anonymous channel for all private material and no key-bearing argv/environment/files. Its callback must refuse missing/invalid channels and absent existing server state. The installed server unit already declares KillMode=process (crates/infraternal/src/install.rs:171), so an owned child can survive its server parent while restoring a failed image; the actual startup barrier/check-in protocol and real-process tests are still to be implemented. No new library, engine or production service change is proposed.
Additive private exec-resource contract proposed for D147/D168/D198/D217: the existing admission lease may own a bounded list of plugin resources. Each resource declares its exact ELF compatibility note, one INFRATERNAL_ environment name and a borrowed live descriptor. The core constructs environment values from public PID/fd integers only and verifies the note on the already signed/sealed executable before private inheritance. Lifecycle callbacks arm recovery only after serving stops, distinguish a kernel-refused candidate from a started image, and cancel only when both exec syscalls failed without running new code. Key bytes stay in anonymous channels. CLI startup integration will restore CLOEXEC before any child spawn, using the existing audited shim duplicate_inherited_descriptor; no new unsafe borrowing or transport/library is proposed. Guardian, restoration-before-database-open barrier and actual process tests remain unfinished.
Expanded unwired custody/checkpoint source prototype passed functional tests and strict pedantic Clippy. The prior read-only regression first failed because a missing administrator directory was recreated by read. Reads now use existing-only admission; an authorized publisher can repair encrypted copies under the same retained public key identity. Newly created administrator and backup root entries are synced through their parents before installation. Source hashes are attached; no production updater recovery path is enabled.
Verbatim test summary:
key-copy-readonly-red-gate.log
expanded-custody-prototype-gate.log
expanded-custody-prototype-source.json
The second iterate attempt refused a Python fixture socket manifest at 108 bytes, above SUN_LEN. The agent fixture path guard correctly rejected it. The next run uses the owned short state root ~/.cache/codex-scratch/e211 rather than the longer job root; the abrupt-stop test now passes all 24 stops. No path limit or correctness assertion was relaxed. The current third iterate attempt is still running and has reported a distinct server_setup_terminal_echo_and_resume_preserve_offsets_once failure; its final diagnostic is not yet available.
primitive-iterate-second-fixture-root-failure.log
Iteration at
8e0be3fd23: fmt, VT native fmt, CLI compile-out, Clippy and cargo-deny PASS; workspace tests FAIL. Server: 438 passed, 4 failed, 48 ignored. server_setup_terminal_echo_and_resume_preserve_offsets_once panicked in futures-util sink/unfold.rs:65 (start_send after a failed unfold emptied its state), then failed inactive/resume cleanup. startup token fixture also exceeded SUN_LEN; TMPDIR is now an owned shorter scratch directory without changing any path guard. Held terminal.open and saturated native control queue tests failed separately and remain unwaived. A deterministic real-WebSocket poisoned-writer RED and narrow cleanup fix are queued through build-slot; no release/profile/VM acceptance is claimed.primitive-iterate-third-failure.log
Resume checkpoint while build-slot is queued: new recovery-control, protected channel, parent guardian, pidfd termination and cold-start barrier sources remain UNWIRED and unqualified. The last qualified source prototype had 39 tests; the expanded prototype is queued after the deterministic browser-writer RED/GREEN. Archive includes source hashes, working diff, prototype adapters and ordered per-commit gate/push workflows. Next command: build-slot python3 ~/.cache/codex-scratch/edge-autoupdate/fix-poisoned-browser-writer.py (already queued, PID 3780013). It must reproduce the poisoned writer failure, fix cleanup, pass all four preceding failure filters, commit/push, then run the expanded prototype and iterate before building signed transport fixtures and continuing custody commits. No production updater recovery is enabled.
Contract detail: private resource variables use the reserved INFRATERNAL_PRIVATE_ prefix, always cleared by generic exec even when the declaring component is disabled. This avoids a stale same-PID fd manifest after a later manual reload. The worker waits on the pinned parent lifetime; socket EOF alone never authorizes restore, partial commands cannot extend the absolute startup deadline, and an unarmed child is cancelled/joined with only its exact marker removable. Real-process tests currently use a controlled point validator and are not database-recovery acceptance.
Still outstanding: actual point validator/restorer, backup-owned checkpoint worker/provider and CA/config capture, warm startup/key reconciliation before database/foreground accept, actual migration-26 failed-image restore, final signed VM acceptance, native pairs, normal four shipping recipes/caps, final scripts/verify fast.
recovery-integration-draft-checkpoint.zip
Recovery integration finding: crates/infraternal-server/src/plugins.rs::switch invalidates its epoch and joins tasks BEFORE waiting for the SQLite writer reservation. Therefore holding the release writer transaction alone cannot fence backup disable after a prepared resource has moved out of the backup worker. Proposed additive generic admission contract: after all cancellable preparation completes, acquire a retained commit reservation under the original entry task mutex. A concurrent disable wins before reservation (preparation cancels and its unarmed guardian is joined), or sees the committed reservation and returns a busy state until handoff/cancellation releases it. Ordinary private actions and pending intake retain their current abort/join semantics. A process shutdown can retain the admitted resource through exec without treating a newly enabled epoch as authority. This is an existing mutex/atomic lifetime fence, not a new foundational library or engine. It requires a deterministic disable-before/after-reservation race test and exact API copy before activation; no production provider is enabled yet.
Committed and pushed
7c2feea81d: Keep failed browser writes out of resume cleanup (D128).A failed async unfold sink is terminal; reusing it for best-effort close panicked before inactive/resume metadata was persisted. A real closed-WebSocket regression reproduced that panic before this fix. Drop the failed application adapter and perform bounded close writes directly through the retained serialized transport, both after handshake refusal and on established-socket cleanup. The successful frame path gains no allocation or branch, with one extra shared owner retained per connection only through cleanup. Reject swallowing application write errors or recreating the adapter for each frame. Fmt, all-target server Clippy, both real transport tests and the real passkey/setup/echo/resume test passed. The separate paused-clock terminal-open probe regression still fails and is tracked for the next atomic fix; the full iteration is not green.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
poisoned-browser-cleanup-selected-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
The cleanup commit passed its selected gate before the next independent test failed. restart_open_liveness_review::responsive_socket_survives_a_held_terminal_open_with_an_existing_attachment still fails at line 210 after FrozenSocketTime releases its watchdog; the sibling authority-pool oracle passes. The transport activation branch resets its interval to a future tick. In a paused clock, initial scheduling can consume the immediate tick before watch activation and then wait indefinitely for another tick. Next fix will schedule the first active probe immediately and keep the existing lease/deadline assertions. No load waiver is applied.
poisoned-browser-writer-red-gate.log
poisoned-browser-writer-fix-gate.log
Static fixture-path check before the queued gate: runtime.rs::temp_dir uses a 55-byte directory leaf (infraternal-server- plus UUID). Even e211/tmp would produce a 113-byte setup-token.sock path. The owned two-character scratch alias ~/.cache/codex-scratch/e2 produces 107 bytes, below SUN_LEN=108, and is now TMPDIR for the queued workflows. INFRATERNAL_TEST_STATE_ROOT remains the separate owned e211 root for the checked short daemon fixture. No limit, random UUID or assertion was relaxed; these are path lengths, not performance evidence. Both alias directories must be removed during final owned-scratch cleanup.
owned-short-tmpdir.json
Additive recovery-resource contract proposed (D147/D168/D186/D198): a generic plugin binding receives the confirmed server host resource adapter without starting work. That adapter declares a bounded set of public file targets from the existing runtime configuration, independently of an encrypted point inventory. It visits signer/configuration resources synchronously one at a time through a borrowed-byte visitor inside owned I/O; capture seals each resource before returning, with protected private storage and no plaintext aggregate or serialization. Signer material is memory-only and can never select a file target. Labels share the existing checkpoint predicate, and configuration targets are bounded absolute paths without parent traversal. Default plugin binding is inert. The backend provider remains disabled until actual CA/config capture, complete preflight, consistent database restore and guarded startup integration are qualified. This adds an adapter to existing engines, not a foundational engine choice.
Committed and pushed
c0973c400d: Send the first browser control probe when its route activates (D128, D265).Transport activation reset its interval to a future tick. Which select branch consumed the initial tick could strand a sampled route during real I/O with paused deadlines, so the held terminal-open ordering test failed after its watchdog. Reset immediately on activation, preserving the periodic interval and every liveness budget. Reject extending the lease or advancing fixture time to hide the ordering dependency. The existing paused-clock oracle passes ten times, its authority-pool sibling and real WebSocket/control-queue tests pass, and Clippy remains strict. Functional counts are ordering evidence, not latency measurements; final VM measurements remain required.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
initial-browser-probe-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Continuation on edge-autoupdate at
c0973c400d. Browser writer cleanup and first control-probe fixes are pushed (7c2feea81,c0973c400); their selected gates are attached in the preceding comments. Expanded recovery source qualification is still waiting for a managed build slot; the previous 64-test functional pass had six strict Clippy failures, now corrected but not yet requalified. No production recovery provider is installed.Following the recorded disable-ordering finding, prepared an optional release admission wrapper: it delegates receiver-owned image binding and post-fence preparation, then retains the original release activation. Disable during cancellable work refuses the final reservation; cancellation drops it. Source draft/workflow remain outside the checkout pending ordered prerequisite gates. The real host reservation test and controlled wrapper tests must pass before this wiring is committed. Final iterate, VM acceptance, native paired measurements, size recipes and fast remain outstanding.
Integration finding at
c0973c400: crates/plugins/release/src/updater.rs:534-546 immediately continues the run loop after a postponed explicit request, while apply restores that same request at lines 409-416. There is no intervening wait, so a pending attach can cause repeated handoff attempts/history rows rather than waiting for foreground completion. Source evidence: requested_kind branch + unconditional continue; existing postponed_manual_request_retains_its_owner_proof_on_retry covers proof retention but not the running loop.Required fix: add a failing running-worker test, retain the same request/proof, and wait for foreground completion or a relevant state/operator change before retrying; do not introduce an idle polling loop. Recovery readiness must likewise remain a typed waiting state rather than permanently ignoring a verified candidate or immediately retrying it. This is an additional integration finding; no runtime/performance measurement claimed.
Resumable source/workflow snapshot at
c0973c400d: recovery-integration-continuation-draft.zip. Contains 63 source/adapter/workflow files with per-file SHA-256 and explicit qualification limits; no generated build targets or production secrets. This supersedes the earlier draft snapshot.Not a completion claim: the expanded source gate is queued; production recovery/provider/startup integration, real failed migration/rollback, VM acceptance, size recipes, native paired measurements and final fast are outstanding. The ordered workflow starts with resume-recovery-prototype.py through build-slot. Do not replay completed commit prefixes; stop on a failing gate and resume after correcting it. Current draft preserves independent commits for shared custody, host dispatch, checkpoint resources and receiver admission. New uncompiled continuations add release activation reservation, a required RED running-worker test for pending-attach retry, and shared SQLite recovery preflight.
Acceptance-fixture finding at
c0973c400: crates/infraternal-server/src/release_startup.rs:44-58 calls exit(78) before Auth::new runs the core migration journal (auth/mod.rs:195-196). The existing failed-image service restart therefore cannot prove restoration after a successor commits a newer schema.Prepared a staging-trust-only fixture that reuses the real core Migrator, adds and commits version 26 plus a probe table/release-state mutation, then exits. The unchanged predecessor must return VersionMissing(26); an actual consistent snapshot restore must remove both the newer schema and mutation. A real-engine test and strict host gates are queued after the ordered recovery prerequisites. No production migration is added or compatibility check relaxed. Draft is not yet compiled; VM guardian acceptance remains outstanding.
Correction to my pending-attach retry finding: updater.rs:349-351 already calls self.activity.idle_after(Duration::ZERO).await inside apply for explicit requests. That existing wait blocks the next attempt while an attach remains active, so the unconditional continue alone does not establish the claimed attach spin. I withdrew the redundant extra wait and its planned regression before any repository change or commit. The drafted test would pass on the existing code and therefore would not supply a valid RED.
Typed backup readiness still needs an event-driven waiting path when integrated; that is a separate unfinished requirement. The release original-epoch reservation and real post-migration failure fixture remain valid independent work. The earlier attached draft archive includes the withdrawn manual-wait workflow; do not execute it. Updated ordered scripts no longer call it.
Expanded actual-source prototype passed functional tests and strict pedantic Clippy. Includes real anonymous channels, owned child cancellation, exact original-epoch default denial, filesystem barriers, protected configuration/file serialization, real SQLite/encryption and configuration capture against actual ServerConfig. Guardian point validation remains a controlled callback in its process tests, and the prototype excludes real CA capture; repository/VM qualification is still required. No production recovery provider is installed.
Verbatim test summaries:
recovery-control-barrier-prototype-gate.log
recovery-control-barrier-prototype-source.json
Draft integration refinement (not a shipped defect claim): post-fence checkpoint preparation must be cancellable when typing/attach arrives while it awaits storage. The earlier planned final interruption check prevents applying after typing, but by itself cannot release a still-awaiting automatic preparation. Prepared fix-early-preparation-input.py with a required RED pending-storage scenario in the existing single process-global admission test. It enables the existing activity notification before checking interruption, signals only the first foreground attempt against a frozen fence, races owned preparation against that event, and retains the final same-poll completion check. Ordinary accepted input gains no notification; explicit Update now semantics stay explicit. Provider cancellation must retain cleanup ownership and never detach retained-state writes.
The release reservation draft separately checks the original activation before preparation and reserves it after preparation; controlled tests now distinguish disable before work from disable during work. All remain uncompiled drafts pending the managed source gate and ordered prerequisite commits. Production prepare_recovery still refuses application.
Expanded actual-source prototype is now green: 64 passed, 0 failed; strict -D warnings -D clippy::pedantic passed. Source/gate receipts are attached in the preceding automated comment. Full scripts/verify iterate is running through the same held build slot; no final fast or VM claim.
Latest resumable snapshot: recovery-integration-64-qualified-drafts.zip. It contains 69 files with SHA-256 and explicit exclusions/uncompiled-draft status. Supersedes the earlier continuation ZIP and removes the withdrawn manual-wait change. Added draft continuations: cancellable pending automatic preparation, original release activation reservation, shared database preflight, real staging migration-26 failure, and closed host-target restore tests. The typed readiness interface is deliberately unchained pending its full consumer. Production recovery provider/startup wiring remains absent.
Continuation boundaries beyond the queued primitive commits: recovery-integration-next.txt. Records the remaining actual guardian/provider/startup wiring, typed waiting, original-epoch and authority rechecks, owned-child reaping, rollback security-state preservation, and final acceptance. No new library/engine choice or completion claim. The 64-test prototype is green; full iterate is still running.
Pre-integration D244 refinement: untracked key_copy.rs:34, key_copy.rs:124 and key_memory.rs:40 hash the master key with Sha256::digest. The pinned digest-0.10.7 CoreWrapper stores a BlockBuffer and has no clearing Drop; sha2-0.10.9 Sha256VarCore similarly has no clearing Drop. Do not rely on optimizer behavior to remove a secret-bearing ordinary digest buffer. This is not a claim about a measured shipping leak: these modules remain unwired.
Scheduled prepare-protected-key-identity.py before the next prototype/first key module gates. Reuse the already approved checked openssl:#️⃣:hash SHA-256 provider, cache only its public 32-byte commitment beside protected material, and copy that public commitment with protected leases. The pinned openssl-0.10 Hasher::drop invokes EVP_MD_CTX_free; the vendored OpenSSL SHA-256 provider uses IMPLEMENT_digest_functions and digestcommon.h:62-65 clears its context with OPENSSL_clear_free. Retain the exact existing SHA-256 wire identity, wipe caller output on digest failure, and remove the proposed unused backup sha2 dependency. Add a known public-fixture digest/bounds test; re-run all actual-source tests/pedantic Clippy and the key-module gates. No new engine, format or signing authority. Final memory audit and VM/size qualification still required.
scripts/verify iterate at
c0973c400failed one server test; 442 passed, 1 failed, 48 ignored. Failing-before-fix receipt: primitive-iterate-restart-lock-failure.log. Verbatim failure:The fixture drops Router but leaves its first Tokio runtime alive. websocket.rs:143 spawns the inventory watcher with a pool clone, so this does not model process teardown; the first test peer was also retained until test-scope exit. Prepared a fixture-only change using two separately owned current-thread runtimes, closing the first peer and dropping the first runtime before reopening the retained database. It keeps stale socket, token rotation and real enrollment assertions, and uses the configured short scratch root. Strict Clippy and 20 full restart/enrollment repetitions are queued through build-slot, followed by a full iterate rerun. No SQLite timeout increase or sleep, no host-load waiver, no production behavior change.
Committed and pushed
01fe0793e1: Isolate restart fixtures across real runtime teardown (D128, D147).The full iteration gate exposed a locked database while the setup-token fixture recreated its router. Dropping only the first Router leaves its runtime-owned inventory watcher and database pool alive, unlike real process replacement. Give each startup phase its own current-thread runtime, drop the first transport peer and runtime before opening the second, and retain the stale socket pathname for the original rotation/enrollment assertions. Move these restart fixture paths to the configured short scratch root. Increasing the SQLite busy timeout or adding a sleep would hide task ownership and make the test depend on host scheduling. The failing full-gate receipt precedes this change; fmt, strict server Clippy, twenty complete setup-token restart/enrollment passes and the existing-owner stale-socket test qualify it.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
restart-runtime-fixture-ownership-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Iteration rerun at
01fe0793epassed the repaired restart fixture; again 442 server tests passed, 1 failed, 48 ignored. Failure is the control-FIFO fixture's hardware 100 ms Output delivery assertion (remote_control_queue_tests.rs:236), with active blocked control, queued Pong, live primary and no shadow Output. Raw receipt: primitive-iterate-control-output-budget-failure.log. No host-load waiver.Applying the standing owner rule that hardware timing budgets run only on the perf VM: split one reused fixture into a mandatory functional isolation oracle (blocked Call remains unresolved while the primary delivers, bounded by a deadlock watchdog) and a separately ignored hardware case retaining exactly 100 ms. The VM case additionally measures from before Output send; no deadline, credit, transport or production behavior changes. Before committing, the queued workflow must pass strict Clippy, 20 host functional repetitions, and 20 strict budget repetitions of the exact new static test harness on the locked perf VM, with artifact/patch SHA-256, machine/load and every metric attached. Building/copying/hash verification happen outside the VM lock.
This specific control-FIFO oracle is separate from the original P1 native PTY latency finding: final >=10 interleaved baseline/candidate pairs and the full updater acceptance remain outstanding. The timing threshold will not be raised or waived.
Latest resumable snapshot at
01fe0793e: edge-recovery-continuation-01fe0793e.zip. Contains 79 files, hashes, the uncommitted FIFO test split, all ordered workflows and explicit qualification limits. Active entry is fix-native-control-budget-location.py through build-slot; it requires 20 functional + 20 strict VM passes before committing. Do not replay committed prefixes.Prepared typed readiness consumer has a mandatory failing running-worker test before changes: retain the ready version and original queued owner proof, expose public waiting state, suppress next_window while blocked, sleep on readiness/operator/state events, then retry once after unlock. The interface/consumer remain uncompiled and the production checkpoint provider remains absent.
Exact proposed backend states/copy for the later UI pass:
Proposed API waiting object: version, reason, message; next_window=null while waiting; update_ready remains version/notes link; requested public state stays kind/version only. Never expose requester hashes, image paths, key IDs or private resources in this object. Existing per-version Inbox/toast deduplication remains. These are backend contract drafts, not implemented UI or completed VM acceptance.
Rollback contract clarification from re-reading D155: “a downgrade restores the pre-upgrade backup”; D147 defines that backup as the consistent database, CA key and configuration snapshot, and D186 refines its encryption key. The earlier continuation note's suggested current-authority overlay is not an owner decision and must not replace these restore semantics. No overlay has been implemented.
Implementation must use current fresh requester authority and the original enabled scope to authorize the transition before stopping, bind both exact verified images, authenticate the complete selected point, then perform the D155 restoration. Public metadata never supplies restore authority. Restored CA material must be installed only against its restored retained issuer through the existing private parser/source boundary; no plaintext signing key file. A kernel-refused exec ran no migration and is a separate fallback path. Existing decisions remain unchanged; this job does not choose a new rollback policy.
D147/D155 configuration completeness refinement: a checkpoint must capture the encrypted CA administrator envelopes alongside the protected signer frame and retained issuer/TLS files. Otherwise a restored signer/administrator generation can disagree with its retained envelope configuration after later changes. Prepared a bounded read-only inventory extension to the existing EncryptedCopies adapter, plus three actual-filesystem tests for canonical ordering/generation, limits, aliases, shared modes, unknown files and non-repair. Configured host paths are admitted before capture; inventory labels never select restore destinations. Publication stays under the existing writer reservation, and complete point authentication must reject missing/extra labels. This is queued after private-resource host binding; not yet compiled or active in production. No plaintext signing-key persistence and no new library/engine.
At
01fe0793e, the proposed FIFO oracle split passed fmt, strict server Clippy and all 20 mandatory functional repetitions. Functional gate, exact static artifact/patch identity. Harness SHA-256 e7a3b8412002fc0fa4902d23c81142e982b469d3c4fa1f9cd589e1a76f57872e; test-only artifact, not a shipping-size result.The strict 100 ms command is submitted through NetBird SSH with flock -w 3600 /var/lock/perf-bench.lock; its transcript is still empty, so no VM timing result is claimed. The workflow must obtain 20 strict VM passes before committing this test change, then rerun iterate and continue the ordered integration. Functional isolation uses a 2 s deadlock guard while the control Call remains blocked; the unchanged 100 ms hardware requirement is kept separately on the VM and measured from before Output send. No threshold increase or load waiver.
Active managed workflow: fix-native-control-budget-location.py (host wrapper PID 516170, session 32131). No user action requested; wait for the shared measurement resource as instructed. Production recovery/provider and the original native PTY A/B acceptance remain unfinished.
Continuation at
01fe0793e: native FIFO strict test is waiting under flock -w 3600 on the perf VM; no measurement result yet. Twenty functional repetitions and targeted Clippy passed as previously attached. Recovery primitive qualification is queued through build-slot. Next managed sequence is now iterate -> ordered atomic recovery module gates; intermediate diagnostic S/Z fixture builds are preserved separately rather than delaying the missing recovery provider. Final production-recipe target/cap qualification, native A/B, real updater acceptance and final fast remain mandatory and incomplete.Independent managed actual-source qualification after protected key commitment caching, checked existing-provider hashing, joined guardian cancellation I/O and backup-only storage compile-out preparation. This overlaps only the pending remote VM resource wait, not another source mutation. Verbatim test summaries:
protected-draft-independent-qualification-gate.log
protected-draft-independent-qualification-source.json
No production recovery provider or final acceptance is claimed.
Resumable source/workflow snapshot at
01fe0793e(not a qualified production implementation): archive with per-file hashes and status.Actual-source prototype now passes 65 tests and strict Clippy; separate receipts attached in the preceding qualification comment. Added the next uncompiled broker/host-boundary draft and a real-SQLite/key-ceremony cancellation/reservation scenario. It bounds preparation to one running plus one queued request, keeps the enabled original epoch and defaults host callbacks to refusal; it does not install a functioning checkpoint provider.
Stopped only the owned local gate coordinator to free an idle host build slot. That also ended its local VM client; checked the exact owned remote waiter was gone, removed only its q6ff457c fixture directory and restarted the unchanged 20-run strict VM test independently. No VM result or timing acceptance is claimed. The recovery chain is queued via build-slot; branch mutations remain serialized. Final native pairs, signed staging acceptance, size qualification and fast remain open.
Backend/UI handoff copy clarification (UI remains out of scope). Existing committed status exposes current_version, channel, quiet_minutes, update_ready {version,notes_url,automatic}, next_window, waiting_for_connections, requested {kind,version}, previous_version, last_result, history and error. Ready Inbox item: id release-{version}; title “Update ready · {version}”; action release.update.now. One-time toast: type update_ready, same title/version/action; persisted per-version notification receipt prevents re-emission on repeat checks.
Pending recovery-consumer draft adds waiting=null or {version,reason,message}, bound to the selected requested/ready version. While waiting, next_window=null; the verified image and original owner request are retained. Exact planned reason/message pairs:
Keep controls “Update now” (release.update.now) and “Roll back” (release.rollback). Recovery waiting is retryable readiness, not a permanent rejected-image result. Disabled release remains unavailable through the existing feature boundary. No toast/Inbox/Settings UI is implemented by this backend job; recovery waiting is not yet production-wired or qualified.
Primitive milestone at
01fe0793e1: scripts/verify iterate passed through build-slot. primitive-iterate-gate.logThis is an iteration gate, not final scripts/verify fast or performance qualification. Encrypted update recovery integration, fresh signed VM acceptance, profile/cap qualification and final fast remain incomplete.
Fresh actual-source prototype after replacing secret-bearing Rust hash buffering with the existing checked provider/public commitment cache, and retaining synchronous guardian cancellation ownership while yielding the scheduler. Functional summaries, verbatim:
key-authority-prototype-rerun-gate.log
protected-key-identity-prototype-source.json
This is prototype qualification only; production recovery/provider/startup and VM acceptance remain incomplete.
Iteration source clarification: the green iterate run recorded at
01fe0793eincludes the still-uncommitted remote_control_queue_tests.rs functional/strict-VM split (patch hash 2db0c503b3810a7f6f17d37d69a628d0d622caee6e39f677ce5f412afe6e957a). Its production sources are at that head; this does not qualify the 100 ms assertion, which still requires the independent VM run. Server summary: 443 passed; 0 failed; 49 ignored. The final line is verbatim: “ITERATE gate passed. This is not the final gate: run scripts/verify fast before reporting done.” Subsequent actual-source prototype rerun again passed 65 tests and strict Clippy before manifest/module wiring. An obsolete diagnostic-fixture guard stopped the transition after the green gate; removed the stale guard and resumed module gates in the existing managed slot. No application gate threshold or production fallback changed.Committed and pushed
48b645ee90: Prepare optional shared encryption and protected backup keys (D186, D244).Reuse the pinned OpenSSL, SHA-256, serialization, zeroization and anonymous protected-page implementations already in the workspace. Keep backup encryption and protected key memory separately removable, with no default runtime. The remote CA consumer opts into the shared encryption feature in preparation for removing its duplicate cipher invocation. Adding another crypto engine or enabling database/encryption work for metadata-only backup inspection would increase size and weaken compile-out boundaries. This dependency slice does not install or unlock a backup key.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
backup-encryption-dependencies-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
f518a31134: Share authenticated encryption into caller-owned private storage (D168, D186).Provide one optional existing-engine AES-256-GCM implementation for CA and backup consumers. Fresh random nonces and nonempty purpose-bound associated data are mandatory; lengths are bounded before entering the signed C cipher API. Decryption uses caller-owned output and an unwinding guard clears every unauthenticated byte on errors or panic. Successful output clears only its unused tail. A convenience decrypt-to-Vec API would leave unauthenticated allocator copies and force protected-memory callers to copy the key again. Four functional tests cover existing-engine interoperability, altered fields, short output, unwinding and arithmetic bounds.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
shared-sealed-bytes-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
7cf4f97501: Preserve encrypted CA copy interoperability before cipher reuse (D168).Check both directions against direct existing-engine encryption and decryption, including serialized administrator copies, before changing the production cipher adapter. Validate restored public-key identity without printing seed material. A roundtrip through only the replacement implementation could pass after an accidental wire-format change and strand existing administrator copies.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
ca-copy-wire-compatibility-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
3723a17648: Reuse the shared cipher without changing CA copy bindings (D168, D186).Remove the independent CA encryption/decryption invocation and use the same optional AES-256-GCM helper as backup consumers. Preserve every existing JSON field, binding byte, nonce length and ciphertext/tag layout. Decrypt seed material directly into existing locked dump-excluded pages instead of an ordinary heap buffer. The direct legacy-engine interoperability regression and actual CA administration tests pass. Copying the cipher into the backup component would duplicate security-critical behavior and miss shared failure wiping; changing the persisted CA envelope is unnecessary.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
ca-shared-cipher-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
e50cf38ea8: Bind encrypted backup keys to administrator generations (D186).Seal the independent backup key for each explicit administrator using the shared cipher and a backup-specific authenticated domain. Bind public key identity, generation, member and derivation salt; the retained key identity is checked again against decrypted material. Decode is bounded and rejects unknown fields. Every refusal clears caller-owned output. An encrypted copy never supplies authority: runtime callers still need a fresh purpose-bound passkey proof and serialized live membership check. Reusing the CA key or a personal recovery secret conflicts with D186; accepting a self-described replacement key could orphan existing backups.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
backup-key-copy-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
c890d4d174: Bind encrypted recovery resources to verified handoff images (D147, D186).Authenticate checkpoint identity, predecessor and successor image digests and a closed resource kind for every bounded encrypted record. The caller retains plaintext ownership and uses protected pages for CA material. Refuse empty, oversized, substituted or incorrectly authenticated records with output wiping. Open-ended paths from encrypted metadata could choose arbitrary restore targets; unbound ciphertext could mix an older configuration or CA record into a different checkpoint. These primitives do not publish a checkpoint or perform a persistent restore.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
backup-resource-encryption-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
405cdee568: Keep backup keys and admitted leases in protected pages (D186, D244).Generate the independent key directly in existing anonymous locked, dump-excluded pages, and decrypt administrator copies directly into the same protected ownership. Cold state retains only a public identity and cannot unlock itself from encrypted files. A trusted fresh-proof adapter installs only the exact retained key; admitted checkpoints receive bounded protected leases without ordinary allocator copies. Disable drops process-owned material while existing admitted operations retain their own lease. Plain Vec ownership, automatic cold-start generation and CA-derived keys were rejected because they break key custody or make old backups unreachable.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
backup-key-memory-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
9c9fc463f3: Share explicit key-administrator checks across key custody (D168, D186).Move the unchanged session, credential and explicit administrator-generation queries behind one optional shared plugin-API authentication helper, alongside the existing shared session check. Keep the existing CA public functions and static error behavior through a thin adapter. The existing generation ledger remains the authority; owner flags remain bootstrap-only and no new administrator table is invented. This prepares backup key ceremonies to reuse the same serialized revocation checks instead of duplicating security SQL or treating app roles as key custody. Actual CA membership and ceremony tests plus the remote-disabled build remain green; backup runtime ceremonies are not yet wired.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
shared-key-administrator-authority-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
2566c3be33: Expose optional backup metadata decoding to parser fuzzing (D12, D186).Enable only the backup encryption metadata surface in the existing nonshipping fuzz package. Reuse the same optional crypto/serialization dependencies rather than invent a second decoder in a harness. This manifest step changes no shipping feature or runtime behavior and prepares the next bounded-copy corpus target.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
backup-parser-fuzz-dependency-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
a1cd0e59bb: Fuzz bounded backup-key copies and failed-unlock wiping (D12, D186).Feed arbitrary bytes to the actual bounded encrypted-copy decoder. Accepted records must retain canonical encrypted serialization, public key identity and derivation salt through a roundtrip. An attempted unwrap with the public corpus wrapping key must clear all caller output on refusal. Keeping only example JSON tests would miss malformed nesting, duplicate fields and length interactions. This commit adds a target; an instrumented campaign remains part of final qualification and is not claimed here.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
backup-key-copy-fuzz-target-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
99f5c8a697: Define an optional protected-input path for sensitive plugin actions (D16, D186, D198).Add an optional private-action interface using the same ActionDef and SocketHost types. The trusted host owns protected input and lifecycle admission; cookie/header parsing and the HTTP engine stay outside the plugin API. Default implementations expose no private actions and start no work. Share the existing strict key-proof JSON shape without granting authority on decode. Sending wrapping keys through ordinary plugin messages risks event/recording exposure; adding another HTTP stack or embedding the host engine in the API is unnecessary. This is an interface, not a mounted endpoint.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
private-action-interface-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
4f25538604: Reuse the strict private proof codec for CA unlock requests (D168, D186).Replace the duplicate CA JSON body decoder with the shared bounded key-proof codec while preserving the existing public UnlockRequest name and static CaError adapter. Keep protected HTTP intake, origin/session admission and purpose-bound real passkey authorization in place. The old field shape and unknown-field/identifier bounds are unchanged; decoding still grants no key custody. A separate backup request decoder would duplicate the sensitive transient-key ownership and refusal rules. Existing CA HTTP, administration and parser-harness checks remain green.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
ca-private-body-codec-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
3cf5e18165: Bridge private component proofs to the existing passkey verifier (D168, D186).Implement the optional key-proof host interface with the existing single-use real verifier. Components receive only opaque verified identity/credential/timestamps; the host retains verifier state, and components still own their exact purpose registry and final membership check. The real software-passkey regression checks replay refusal, unchanged session count and unchanged stale session freshness through this adapter. Calling ordinary login completion here would create browser authority as a side effect; inventing a component-local verifier would duplicate security-sensitive state and validation.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
private-key-proof-host-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Optional encrypted primitives and private-action interface milestone at
3cf5e18165: scripts/verify iterate passed through build-slot. encrypted-primitives-iterate-gate.logThis is an iteration gate. Production checkpoint storage, backup key ceremonies, startup recovery/guardian, fresh VM update acceptance, final size qualification and final scripts/verify fast remain incomplete.
Committed and pushed
110e2cba76: Separate native FIFO isolation from its unchanged VM timing budget (D128, D265).The full shared-host gate failed a 100 ms hardware delivery assertion despite healthy independent native lanes. Reuse exactly one real QUIC/control-saturation fixture for two oracles: mandatory functional delivery under a deadlock watchdog while the control Call stays blocked, and the original 100 ms budget on the exclusively locked perf VM. The timing case additionally measures from before Output send, preserving and strengthening its acceptance boundary. No production code, credit, transport deadlines or budget changes. Twenty host functional repetitions and twenty strict VM budget repetitions must pass before this commit. Merely increasing the old timing threshold or waiving the failed row would discard the latency requirement.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
native-control-isolation-functional-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Strict control-FIFO VM evidence for the preceding test split. Exact artifact/patch identity attached; no shipping-native or updater acceptance claim.
native-control-budget-static-harness-gate.log
control-fifo-budget-artifact.json
control-fifo-budget-vm.log
Committed and pushed
110e2cba76after 20/20 strict control-FIFO VM runs: min 0.082 ms, max 0.317 ms, unchanged 100.000 ms budget. Machine infraternal-perf-test, 4 CPUs, MemTotal 8069112 kB; VM load before 0.05/0.12/0.53, after 0.12/0.13/0.54. Exact base01fe0793e, static test harness SHA e7a3b8412002fc0fa4902d23c81142e982b469d3c4fa1f9cd589e1a76f57872e and test patch SHA 2db0c503b3810a7f6f17d37d69a628d0d622caee6e39f677ce5f412afe6e957a are in the attached receipt. This is the isolated control-FIFO oracle, not EA-02 shipping-native A/B or final updater acceptance. Those remain open; final measurements must use final artifacts.The encrypted-primitives iterate milestone also passed at production source
3cf5e1816plus that then-pending test split: 445 server tests passed, 0 failed; TypeScript 37 pass, 0 fail. Verbatim ending:The new test commit was serialized by briefly stopping only the owned module-coordinator PID, then resuming it in finally; the source index was empty before staging only the test file. The owned VM fixture was removed by its successful driver. Recovery module gates continue in the existing managed build slot. No final fast claim.
Committed and pushed
92ac89d0c1: Share owned synchronous I/O without a release-feature dependency (D198).Move the existing scheduler-yielding synchronous I/O boundary into the shared optional host API and retain the release adapter as a thin caller. Backup storage can now reuse the same cancellation ownership without depending on the release feature. A detached blocking task could outlive disable; duplicating the helper would create separate ownership rules. The multi-thread and startup/current-thread behavior is unchanged.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
shared-owned-io-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Pushed head
92ac89d0c1: shared synchronous owned I/O helper, retaining cancellation ownership and existing scheduler behavior. Targeted release image-store tests pass, including twenty check-ins. Next private-state read extraction gate found that existing fixture permissions calls inherited their trait through the moved parent import. Added an explicit PermissionsExt test import; no access check is relaxed. The 60-second managed continuation window had expired before consuming the request, so the same current-slice resume was requeued through normal build-slot. No completed module prefix is replayed.Current uncommitted source and exact resume scripts, including the full private-state file needed after its read-only slice: snapshot with hashes/status. The current source is a partial extraction, not another 65-test prototype claim. Earlier encrypted-primitives iterate is green; final provider/startup/recovery, final native A/B, caps, VM update acceptance, parser campaigns and fast remain incomplete.
Pending provider integration invariant (D155; no new rollback policy): preserve the release-authorized rollback intent beside the receiver-owned image commitments on the private, nonserialized provider path. UpdateEngine already carries this intent; draft private recovery/broker/host methods now carry it too. Do not infer it from version ordering or public request fields. A manual rollback needs two distinct authenticated points: its fresh pre-attempt snapshot restores the current image if the attempt fails, while the previous verified image must start against its own selected pre-upgrade database/CA/configuration point. Both points remain bound to the exact image pair and protected retention references. There is no revoked-authority overlay. These templates are not compiled or production-wired; actual ConfigurationLease preparation must also recheck owner freshness after awaited capture and before releasing exec resources. Current committed head remains
92ac89d0cand the private-state extraction resume is queued through normal build-slot.Gate continuation is still queued through the provided normal build-slot helper at head
92ac89d0c. The private-state extraction and explicit fixture PermissionsExt import are ready; the next operation is resume-private-state-reads.py via run-recovery-private-state.py. No gate rerun result or new commit yet. Capacity is the current execution constraint; the queued process will continue automatically when the shared orchestrator frees a slot. No priorities, slot limits or other jobs were changed. Last qualified milestone remains encrypted-primitives iterate (445 server tests and 37 TypeScript tests), plus the separately qualified/pushed strict FIFO test split. Full recovery integration and final acceptance remain open.Committed and pushed
a789b9dd4d: Share existing bounded private-state reads across custody adapters (D168, D186).Extract the existing ownership, private-mode, regular-file, no-follow/nonblocking and bounded-read checks from remote startup. Keep its public-to-the-crate wrappers and static TLS error behavior while allowing the backup host adapter to reuse the same boundary. The generic limit checks overflow and growth after stat. Copying these checks into every encrypted key store would allow divergent refusal behavior. This changes neither retained CA paths nor normal startup authority.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
shared-private-state-reads-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
023a623d76: Reuse one durable encrypted administrator-copy publisher (D168, D186).Separate validated CA-envelope binding from the existing private byte-publication mechanism. One shared helper now owns bounded reads, leaf naming, private temporary creation, file sync, atomic replacement, directory sync and owned cleanup. Preserve existing administrator filename hashes, generation checks, envelope decoding and CaError behavior. The former CA byte-writer implementation is removed rather than copied into backup storage. Backup key publication remains separately gated before runtime wiring.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
shared-encrypted-copy-publication-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
e08c516d20: Prepare removable backup key-authority runtime dependencies (D186, D198).Add a server-only feature combining the existing pinned database, protected key, private-action and event-loop facilities. Tokio is already a test dependency and workspace foundation; no engine or version is added. Keep default metadata builds inert and free of this runtime. Enabling key-authority behavior globally or making backup depend on the server crate would break compile-out or layering.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
backup-authority-dependencies-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
4257138867: Specify backup authority revocation and custody boundaries (D168, D186).Prepare eight component tests against real SQLite and AES-GCM, with a controlled proof source distinct from the real host-verifier integration. Cover setup/unlock/cold continuity, purpose and replay, role revocation, credential deletion, superseded plugin admission, proof expiry during publication, explicit non-owner administrators and re-enrollment without key rotation. The source prototype compiles these tests against the exact forthcoming module; shipping wiring follows separately. A mock verifier is not claimed as passkey or HTTP acceptance.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
backup-authority-tests-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
71fe7ed126: Bind backup key custody to fresh purpose and original plugin admission (D168, D186, D198).Implement setup, enrollment and unlock using the shared explicit administrator ledger and trusted host proof interface. Bind the exact session hash, generation, purpose, expiry and original plugin admission. Recheck membership, credential and clock under the writer reservation after durable I/O, then move the same protected key allocation into process state inside the host epoch fence. Existing identity cannot silently regenerate; canceled publication remains recoverable by a fresh unlock. Ordinary session freshness, owner flags or a newer feature epoch cannot replace the proof. This module does not mount HTTP routes or install the updater recovery provider.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
backup-key-authority-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
f448ffc3fb: Prepare recovery only after foreground admission is frozen (D128, D147).Add an optional asynchronous preparation hook to the existing owned configuration lease. Freeze foreground work under the registration check, release the registry mutex, then await preparation before returning admitted handoff ownership. Refusal or cancellation drops both leases before the serving runtime can stop. A pre-admission snapshot can omit later foreground mutations; holding a registry mutex across I/O would block lifecycle control. The default preserves existing consumers and the production updater recovery precheck still fails closed until its provider is wired. A deterministic ordering/refusal regression and existing release/control tests qualify this boundary.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
post-fence-checkpoint-admission-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
2f48feb082: Postpone automatic handoff when foreground work arrives during backup preparation (D128, D147, D251).A consistent checkpoint runs after foreground admission freezes and may await storage. Record refused input/attach attempts during that interval and recheck after preparation; automatic work then drops its leases and starts a fresh quiet window while clients retain unacknowledged input. Explicit Update now keeps its requested behavior. The regression first failed because admitted handoff was returned after simulated typing in preparation. Ordinary accepted input retains its existing fast path and no wire framing changes. A pre-backup idle check alone leaves a long preparation race.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
foreground-during-recovery-preparation-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
The prior commit gate contains the GREEN checks. Its before-fix regression receipt is attached separately: foreground-during-preparation-red-gate.log
Committed and pushed
4f57adccac: Cancel awaiting automatic preparation when input arrives (D128, D147, D251).Checking for interruption only after storage completes leaves foreground admission frozen while an automatic checkpoint awaits I/O. Wake only the interrupted frozen attempt and race its owned preparation against that event; typing or an attach then drops the unarmed attempt and reopens admission. Keep the final interruption check for a same-poll completion race, and preserve explicit Update now semantics. The first new foreground attempt signals once, with no notification added to ordinary accepted input. A pending-storage regression first fails because automatic admission never returns after input, then passes without completing storage or manually cancelling the task. Provider cancellation must retain ownership of cleanup and cannot detach retained-state writes.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
input-cancels-pending-preparation-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Required failing-before-fix pending-storage input regression receipt.
input-cancels-pending-preparation-red.log
Committed and pushed
08a249d79c: Share the bounded protected HTTP intake without another plaintext body (D168, D186).Move the existing admitted CA body collector into one host helper. Both consumers retain the same 32768-byte protected allocation, immediate transport-chunk copy, checked growth and wiping on drop. Existing real CA HTTP and chunk-bound tests qualify unchanged behavior. Duplicating the collector for each key ceremony would create separate memory and cancellation rules.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
shared-protected-intake-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Recovery integration constraint, still unimplemented: Guardian::start currently starts /proc/self/exe directly (draft recovery_guardian.rs), which does not itself move the child outside a managed server service. Before claiming automatic recovery, qualify actual parent-service group cleanup and ensure the owned guardian survives it; do not rely on a staging Python launcher alone. Reuse the existing host supervision mechanism rather than choosing another engine.
Two short-lived public-fixture functional probes on the named VM show the existing systemd-run scope launcher execs in the spawned child PID, preserves its original parent PID, and preserves both a passed public descriptor and socket stdin with SO_PEERCRED pointing to that original parent. Normalized observed outputs and limits. These were functional probes with no timing acceptance; they do not prove survival after a managed-service failure. No keys or server state were used. A real provider must still launch the exact pinned helper image without temporarily making parent descriptors inheritable or sending keys through an unverified executable path, and join/cancel only its owned child/scope.
Restore admission also must not depend on candidate-modified backup identity/configuration files after the parent exits. Validate and retain the selected authenticated point before arming, or retain an equivalent original-admission capability; current recovery_point::Authenticated::open rechecks the on-disk identity and is not yet wired to the worker. D155 full restoration and pre-migration startup ordering remain required. No new rollback or authority-overlay policy is introduced.
Committed and pushed
effbf47637: Own private plugin actions in the existing cancellation and epoch fence (D16, D168, D198).Mount declared sensitive actions through the existing HTTP/session host. Require exact origin, live cookie, declared private adapter and default-deny component authority before body polling; bound starts, concurrent protected bodies and the whole request. Keep bearer material host-side and exclude ordinary socket recording. Reuse Entry.tasks for abort/join and its mutex for weak original-epoch installation, including server feature startup. A second lifecycle loop or retained strong runtime admission would leave work behind or create cycles. Real-session HTTP tests and deterministic disable/cancellation tests qualify this boundary; backup feature registration and updater recovery are still separate.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
private-plugin-host-dispatch-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
deb254e594: Declare backup custody actions and existing-server dependencies once (D16, D186, D198).Add one descriptor for private backup setup, unlock, enrollment, locking and readiness. Declare the server role, default switch, existing-server dependency, bounded input and concise instructions without starting runtime work. A separate HTTP-only action inventory would diverge from discovery and generated labels. The scheduled node commands remain honestly unavailable; this descriptor describes server key custody for pre-upgrade recovery.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
backup-custody-descriptor-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
095e8d69ed: Reuse existing message types for backup private-route refusal (D16, D198).Make the already-pinned byte and protocol crates explicit optional dependencies of the server runtime. Ordinary plugin messages must return a bounded refusal for private key actions, while metadata-only builds retain no runtime dependency. No engine or version is added. Accepting key material in ordinary message handlers would bypass protected host intake.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
backup-private-runtime-dependencies-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
37f17d3918: Own backup key ceremonies within enabled feature activation (D168, D186, D198).Create a fresh cold key ring and purpose registry for each enabled activation, supplied by the trusted proof and encrypted-copy adapters. Create its cleanup guard before polling startup, clear only the matching activation and lock its key on drop. Route only declared private actions and refuse ordinary message calls. The service creates no storage or periodic wakeup at construction/activation. The unpolled-startup test covers duplicate activation, stale admission and cancellation; this does not yet register an updater recovery provider.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
backup-custody-service-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
a9c41dc588: Keep server backup custody behind its own removable feature (D186, D198).Connect the existing CLI backup feature to an optional server backup dependency without implicitly enabling the server role. Reuse existing protected memory, key-proof API and backup runtime; no new crate version or engine is selected. A core dependency would leave backup code compiled when disabled, while enabling server from backup metadata would violate D201. Runtime registration follows separately.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
server-backup-feature-dependencies-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
8285ce036d: Supply real server proofs and durable encrypted storage to backup custody (D168, D186, D198).Register the optional server feature with the existing real Auth verifier and shared private storage adapters. Keep catalog-only callers unable to verify proofs, in-memory fixtures unable to initialize retained state, and constructors free of filesystem work. Publish the public key identity and first encrypted administrator copy through one durable directory rename, refusing existing/corrupt stores and lost identity beside retained points. Reuse private HTTP and task ownership with or without the remote component. Five real-filesystem refusal/publication tests and existing HTTP/lifecycle checks qualify the adapters. This enables key custody only; update application remains refused pending checkpoint and recovery integration.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
server-backup-custody-adapter-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
28cf186f93: Bound encrypted recovery framing before allocating ciphertext (D147, D186).Encode encrypted records with a fixed 33-byte version/nonce/tag envelope and unchanged ciphertext bytes. Decode only complete, versioned records within the existing resource-specific bounds before allocating. Keep checkpoint/image/resource authentication in the existing AEAD context, separate from framing. JSON byte arrays would expand encrypted data and require more parsing work; a new serialization library is unnecessary. Roundtrip, truncation, unknown-version and bound tests qualify the packet boundary.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
bounded-backup-record-framing-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
34d3363ceb: Fuzz encrypted recovery framing for every bounded resource kind (D12, D147).Send arbitrary bytes to each actual resource-bounded encrypted record decoder. Accepted packets must serialize canonically and preserve nonce, tag and ciphertext through another decode. The harness grants no restore authority and does not duplicate production parsing. A runtime-instrumented campaign remains required; this commit claims only the target and its compile/lint gate.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
backup-record-parser-fuzz-target-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
3d4c17f59b: Authenticate consistent database and private resources as one recovery bundle (D147, D186).Own a protected key lease and seal the real SQLite snapshot plus bounded opaque host resources into an ordered authenticated inventory. Bind every record position and both verified image digests, reject duplicate/unsafe labels and validate the entire inventory before exposing recovery plaintext. Keep private resources in protected pages and wipe serialized database images on cancellation/drop. The real migration test applies SQLx migration 26, confirms predecessor VersionMissing(26), then decrypts/restores the bundle and reopens migration 25 with pre-upgrade data. Substitution and authenticated-malformed-database tests refuse without replacing existing state. This is the bundle engine; host publication, foreground checkpoint wiring and fatal-process recovery are not claimed.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
encrypted-consistent-checkpoint-bundle-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
987b38a9eb: Make the actual authenticated-inventory decoder available to fuzzing (D12, D147).Enable the existing optional backup server surface only in the nonshipping fuzz package so its real inventory decoder can be exercised. All database, cryptographic and event-loop dependencies already exist and remain pinned. Copying the decoder into a stand-alone harness would fail to test production validation. The target follows separately.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
backup-inventory-fuzz-dependency-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
e8b35a15ff: Fuzz bounded recovery inventories and canonical metadata roundtrips (D12, D147).Exercise the real inventory and public point-metadata decoders independently of AEAD so malformed metadata reaches its version, label, count and size checks. Accepted inventories must survive canonical serialization and another decode. Decoding carries no image, key or restoration authority; production still authenticates the encrypted inventory first. A compile/lint gate is not an instrumented campaign, which remains required for final qualification.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
backup-inventory-parser-fuzz-target-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
1d4f75af7d: Qualify immutable encrypted point publication and bounded retirement (D147, D186).Prepare the checked filesystem adapter behind test-only backup wiring until the recovery provider is ready. Publish synced ciphertext and public transition metadata through one directory rename, refuse wrong image/key selection, preserve protected point references within feature-supplied retention and atomically retire superseded or interrupted staging directories. Validate metadata without reading every retained database during collection. Three actual SQLite/filesystem tests cover bound loading/private modes, twenty updates with an older protected rollback point, interrupted encrypted writes and refusal of unsafe files before deletion. No runtime checkpoint or process recovery is enabled by this step.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
encrypted-point-filesystem-tests-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
1e388acb11: Declare inert plugin-owned internal CLI worker bindings (D16, D198).Represent a compiled internal callback without running it during metadata construction or exposing function addresses through Debug. Registry equality uses the explicit function-pointer comparator only for cloned bindings, never for authority. A feature-specific command table in the CLI would special-case the backup role; a second process transport or library is unnecessary. Private channel validation remains the callback responsibility, and this module does not register or launch any recovery process.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
internal-cli-worker-binding-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
e2cc271bf2: Keep admission scenarios sequential within the fixture length gate (D128, D147).The input-interruption scenarios grew one process-global admission test beyond its lint limit. Extract explicit and automatic phases into sequential helpers while retaining exactly one test, the same assertions and the original registry lifetime. Parallel tests would race the singleton; suppressing the lint would hide future scenario growth. Qualify this test-only change separately before the CLI dispatch feature.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
single-owner-admission-fixture-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
BLOCKED on Forgejo storage, not authentication. Local head
849476024(generic internal CLI dispatch) passed fmt, targeted Clippy, API/CLI and no-default tests, but pushing to edge-autoupdate failed verbatim:remote: error: unable to create temporary file: No space left on device
remote: fatal: failed to write object
error: remote unpack failed: unpack-objects abnormal exit
! [remote rejected] HEAD -> edge-autoupdate (unpacker error)
Last successfully pushed head:
e2cc271bf2. Forgejo operator/orchestrator needs to free storage on git.kayg.org; this job has no authorization to modify that host. No credentials inspected and no production changes. Preserve849476024and retry its push before making another commit. Recovery integration, VM acceptance, final caps/native qualification and fast remain unfinished.Push retry also failed: remote could not write object
1c70e33969because its device has no space. Local head remains849476024d; remote edge-autoupdate remainse2cc271bf. Released the idle build slot rather than holding capacity for remote storage. Preserved the atomic unpushed change as patch; its targeted gate passed before commit. No final fast or task-completion claim. Once Forgejo storage is freed, push this head first, then continue with finish-exec-resources.py, not any completed prefix. The exact resume script is run-recovery-after-dispatch-push.py; its first failed push exits without another commit. No credentials were inspected and no other host was modified.Resumed edge-autoupdate at
849476024d; merge base57b0c3ddca. Forgejo fetch and issue reads work again. Preserving the previously gated generic exec-resource contract before rebasing onto origin/devf210a4f25. Recovery runtime/startup/rollback wiring, VM acceptance, cap/native qualification and final fast remain incomplete. No merge or production deployment.Committed and pushed
6e36cef06a: Declare bounded plugin-owned private exec resources (D147, D168, D198).Allow a prepared admission lease to transfer private channels while retaining its configuration and foreground fences. Each resource declares an exact compatibility note, public environment name, borrowed live descriptor and arm/fallback/cancel callbacks. Defaults remain empty. Key material is never serializable here. Backup-specific fields in the core replacement would violate D198, and compatibility notes cannot replace signature verification. Runtime export and real-process recovery are separate steps.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
generic-exec-resource-contract-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Rebased and pushed edge-autoupdate onto origin/dev
f210a4f25; head0cab5c07b. Preserved dev transport proof-authority isolation, pinned prompt/liveness fixes, both bootstrap regressions and current caps (x86 21,422,096 B; ARM 19,594,856 B). Superseded idle-session renewal and old browser-transport patches were omitted where dev already has the later implementation. Recovery drafts restored. scripts/verify iterate is running through build-slot; no new qualification claim.Recovered saved pre-outage report: generic internal CLI callback dispatch
849476024was pushed before authentication interrupted the next slice; rebased equivalent4b65e87cd1. fmt and targeted strict Clippy passed. Test summaries verbatim:generic-internal-cli-dispatch-gate.log
Recovery registration and runtime wiring remain unfinished.
Post-rebase strict Clippy found eight test compilation errors: newer dev uses the independent shipping Browser wrapper while update_staging_tests.rs still splits a raw socket, managed_update_staging_tests.rs calls a private helper, and local_browser_fixture constructs the old tuple Unit.
rebase-browser-adapter-red.log
Uncommitted adaptation reuses the existing Browser writer/probe loop and exposes completed probe counts; removes the redundant updater reader/writer, wraps raw test peers and fixes the named Unit cleanup fields. Targeted gates pending. The first iterate transcript mixes pre-adaptation Clippy with ongoing test compilation and will not be reported as a final-head pass.
Source finding during recovery integration (not yet a reproduced end-to-end failure): websocket.rs:1609-1610 returns Err when Activity::input reports an update fence; AttachTerm similarly uses enter().ok_or(()) at :1480. local_update.rs cancels automatic preparation on the interruption, but these callers still retire the browser rather than retain its admitted frame until cancellation releases the fence. This can force a reconnect precisely when typing is supposed to postpone automatic updates. Existing API tests cover fence cancellation, not same-socket input continuity. Add a deterministic real-socket RED before changing this boundary; retain original authority, frame credit/order and fail-closed poisoning. No latency claim or production provider enablement.
Committed and pushed
c799e0a67d: Reuse the current shipping browser in updater acceptance fixtures (D128, D265).Rebasing onto dev exposed eight fixture compilation errors: its shipping browser now owns probe progress independently, while updater acceptance still split a raw socket and a local unit used its retired tuple shape. Extend that existing browser with its ordered encoded writer and completed-probe watch, then have the updater consumer return credit and observe durable ACKs through it. Remove the redundant competing reader/writer, retain original attach/probe/credit assertions and construct the named unit cleanup guard. Reverting dev liveness fixes or copying a second browser driver would lose current proof-authority guarantees. Production transport is unchanged.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
rebase-shipping-fixture-adapters-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
b4111fa7dd: Reuse the bounded ELF note reader for plugin exec compatibility (D217).Expose the existing PT_NOTE reader with a bounded exact first-party note contract. CA-v1 and listener-v1 continue using the same scanner and retain independent meanings. Reusing the parser avoids a second executable parser and duplicated size/security surface. The opened image must still pass independent release signature and immutable-image admission; this adapter supplies no authority by itself.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
generic-elf-capability-adapter-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
7ef5236f14: Carry only compatible plugin-owned descriptors through verified exec (D147, D168, D217).Validate a bounded descriptor set against both signed immutable candidate and predecessor images before shutdown. Reject unsafe or duplicate environment names, standard-stream descriptors and missing exact capability notes. Construct only public PID/fd metadata, arm after serving stops, distinguish kernel fallback and cancel before redispatch only after acknowledgements. Every refused exec restores CLOEXEC; an uncertain cancellation terminates rather than spawning children with private authority. Existing CA frames and listener adoption retain their independent paths. Tests exercise real socket flags and ELF records; this bridge does not yet register a backup guardian.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
plugin-exec-resource-host-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
f0faa651fa: Fence recovery key release and check-in to one image transition (D17, D147, D168).Define canonical fixed-size public commands separately from protected key bytes. An unarmed guardian can cancel without restoration; an armed transition releases its protected key once only to its exact admitted image and accepts healthy check-in only after resume. Kernel-refused candidates may select only the predecessor. Replayed, premature and wrong-image commands fail closed. Socket EOF is explicitly insufficient to authorize restoration, which requires the host to observe the pinned parent lifetime ending. Three state/framing tests qualify the protocol; process and database barriers remain separate.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
backup-recovery-control-protocol-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
fb9a69d4fc: Terminate a pinned update parent without looking up its PID again (D147, D217).Add one audited Linux pidfd_send_signal boundary for the already authenticated update parent. A fixed SIGKILL, null siginfo and zero flags cannot target a reused PID; the kernel validates descriptor type and signal permissions. The host must authenticate process birth before opening its lifetime descriptor and must observe its exit before any restore. Falling back to numeric-PID kill would create a reuse race. Tests kill and reap only their own spawned sleeping child and reject ordinary file descriptors; no guardian or timeout worker is started by this module.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
pinned-parent-termination-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
ae2a72adfd: Qualify the private cold-start recovery barrier (D147, D168, D217).Prepare a test-only checked filesystem barrier before runtime wiring. An owned guardian retains the existing flock primitive through restore or durable healthy completion; public metadata binds its original PID, boot UUID, process birth tick and checkpoint. Exact warm exec may continue its private check-in, while a cold process must wait and require marker removal. Drop deliberately leaves incomplete recovery visible instead of silently opening the database. Refuse replacement of an earlier point, aliased/shared files, malformed metadata and substituted completion markers. Existing pidfds handle process lifetime separately; a new lock engine or PID-only warm bypass is unnecessary. Production startup and guardian integration remain incomplete.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
recovery-startup-barrier-tests-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
ff999977da: Keep optional recovery-resource bindings separate from private actions (D198).Declare a separately removable private-resource host capability using only the existing private-action and protected-buffer dependencies. Ordinary CA private HTTP actions do not require this recovery surface or its runtime context, and metadata-only plugins remain inert. No library, version or engine is added. Enabling every recovery binding whenever private HTTP exists would retain unrelated code in feature-disabled builds.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
private-resource-visitor-feature-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
4fa20f5425: Visit bounded private recovery resources without aggregating plaintext (D147, D168, D198).Add an inert generic plugin binding for the confirmed server resource host. Separate host-selected bounded absolute file targets from opaque encrypted resource labels; signing material stays memory-only. A synchronous visitor seals one borrowed protected resource before capture proceeds, avoiding another plaintext aggregate or serialized private-key container. Construction and binding start no work. Existing hosts and plugins keep default behavior. No capture engine, host registration or updater provider is enabled by this contract step.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
private-resource-visitor-contract-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
3be2914e03: Enable the shared private-resource surface only for backup runtime (D147, D198).Have the removable backup server feature opt into the separately gated host resource interface. Keep metadata and encryption-only builds free of runtime context binding. This is a feature edge to an existing workspace interface, not a new dependency engine or a global private-HTTP capability. Actual host binding and capture follow independently.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
backup-private-resource-capability-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
24d6b2eb65: Share one opaque label predicate for recovery hosts and inventories (D147, D198).Delegate the unchanged nonempty, bounded ASCII resource-name predicate to the shared private-resource API. Host-selected target labels and authenticated inventories must agree without treating either as filesystem authority. A second predicate would let their acceptance rules drift. Existing encrypted bundle, corruption and inventory tests pass; paths remain independently bounded and admitted.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
shared-private-resource-labels-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
3fa35596cf: Gate confirmed-host resource adapters as an optional capability (D147, D198).Have the backup feature opt into the shared private-resource host capability while ordinary CA private HTTP support remains independent. Reuse the existing protected allocator and plugin interface. No host constructor, key import or background work starts from this feature edge, and disabling the feature removes the subsequent host adapter at build time. A backup-specific branch in core dispatch or globally enabling capture with every private HTTP route would break layering.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
server-private-resource-capability-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
4738f7448c: Reuse the existing protected CA frame for recovery capture (D147, D168, D217).Factor the existing unlocked-source, dump-protection and protected-frame export into one trusted snapshot function and have stdin handoff reuse it. Preserve CA-v1 encoding, secure provider allocation, transient-copy wiping and retained-issuer validation. Expose only configured public resource-directory coordinates to the optional host adapter. A second private-key serializer would duplicate sensitive copies and weaken wire compatibility. This exports no endpoint, authorization shortcut or plaintext key file; existing CA handoff and authority tests remain the gate.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
shared-protected-ca-snapshot-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
957d38a824: Qualify bounded private-resource reads and protected JSON encoding (D147, D168, D244).Prepare the host buffer helper under test-only wiring until the visitor is connected. Validate the actual opened file through the existing private-state boundary, read directly into bounded locked/dump-excluded pages and refuse growth, empty data and aliases. Encode configuration directly through the same protected allocation without another plaintext JSON Vec. Public certificates may be readable but never writable by others; that allowance cannot relax private-key permissions. Three actual file/protected-buffer tests cover bounds, aliases, mode separation and JSON compatibility. No capture or updater work is activated.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
protected-recovery-resource-tests-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
221964e268: Bind confirmed server configuration through the generic resource visitor (D147, D198, D201).Construct only public coordinates and weak signer ownership for an already initialized server, then offer the inert adapter through the shared plugin hook. Capture configuration directly into protected JSON, reuse the protected CA frame and visit each configured file once before sealing. Combined certificate/key paths use one target with the stronger private permission. Caller-selected targets remain independent of point inventory. Unsupported optional capture coordinates leave the server running with recovery unavailable rather than turning context binding into server initialization or a listener failure. Real filesystem/configuration tests cover inert construction, visitor order, permissions and deduplication; CA cryptographic export is qualified separately. The backup consumer and updater provider remain uninstalled.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
confirmed-server-resource-host-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Confirmed same-socket RED: after an admitted typed frame interrupts the checkpoint fence, the existing browser receives Close rather than its input echo/ACK. Isolated real WebSocket/SQLite test holds timer epochs stationary and observes the actual interruption event before releasing the fence. It sends a second byte range on the same connection and checks exact echoed bytes; no performance timing or real-PTY claim.
same-socket-foreground-red.log
Continuation at pushed
221964e268. Rebased onto devf210a4f25; all committed slices have their individual gates/receipts above. The new real-socket regression reproduced a protocol Close after input interrupts checkpoint preparation (RED attached above). Uncommitted activity.rs adds notification-driven input/attach admission waits and one controlled test; a strict Clippy doc-markdown finding is corrected. The behavioral socket change is not applied yet. Active queued command: build-slot python3 $HOME/.cache/codex-scratch/edge-autoupdate/resume-foreground-admission-gate.py; it resumes at the API gate, commits/pushes that slice, applies/tests the socket correction, then continues finish-ca-encrypted-snapshot.py. Do not replay completed prefixes.Untracked recovery_channel.rs now also carries independently admitted target coordinates/signer expectation and refusal tests; recovery_worker.rs initializes the existing locked provider before CA frame validation. These edits are uncompiled/unwired and must receive actual module gates before any production claim. Guardian/provider/startup integration, real migration/rollback VM acceptance, current caps/native qualification, parser campaigns and final iterate/fast remain incomplete. No merge/deploy or final acceptance.
Additive recovery wiring contract before implementation: extend compiled CLI factories with an optional inert generic lifecycle callback (Claim after hardening and before child dispatch; BeforeServer(existing data path) before the serving runtime/database). Metadata construction never runs it; disabled builds retain no callback. Reuse the existing factory composition and CliWorker action callback, without a backup string route in core dispatch. Claim private fds once into CLOEXEC ownership; repeated in-process dispatch cannot claim a consumed descriptor again. No new library/engine or server initialization.
Startup completion must follow listener binding, actual-image history reconciliation and component health before accepting user work; the existing owned plugin task/epoch lifecycle should carry any readiness wait. This is an unwired contract/implementation boundary, not a successful recovery or VM proof.
Rebased dependency attribution at
221964e26: Cargo.lock adds/removes zero package identities and zero registry packages versus current origin/devd5ebcb62e. Differences are feature/dependency edges to existing workspace engines, including the same libsqlite3-sys 0.30.1 already used by SQLx, existing OpenSSL, protocol/serialization and event-loop crates. CLI/API orchestration retains the previously reviewed size profile; no new TLS/HTTP/JSON/crypto engine was chosen. This is dependency attribution, not a final size or performance qualification.rebased-dependency-identities.json
Origin/dev advanced after the rebase only in DECISIONS/TASTE (four commits since
f210a4f25); D289–D291 read. No production code/cap changed in that advance. The final head still needs integration with the latest dev and complete qualification.Resumable continuation at pushed
221964e26, with per-file hashes and exact gate/entry status.recovery-continuation-221964e26.zip
Includes the current uncommitted patch, unwired channel/guardian/worker/fuzz sources, selected ordered workflows and integration drafts. Current entry remains resume-foreground-admission-gate.py through build-slot; do not replay earlier prefixes. Real-socket input Close is reproduced; API waits are uncommitted and awaiting their corrected lint gate. The scheduled fifty-administrator case is expected to expose the 32-target bound and needs a RED before its fix. The archive is not a production qualification; actual provider/startup/rollback, VM acceptance, caps/native/parser qualification and final fast remain unfinished.
Committed and pushed
7414cc56d1: Wake bounded foreground work when a cancelled handoff releases its fence (D128, D251).A foreground attempt must postpone automatic preparation without discarding an already bounded frame or attachment. Add event-driven admission waits using the existing notification and original atomic input/attach checks; subscribe before inspecting state to avoid a lost release. Poisoned state still refuses. Keep the disabled-feature and ordinary input fast paths unchanged, with no polling timer or detached task. A controlled input/attach scenario proves interruption, parked work, release and pending-connection exclusion; the real-socket RED is recorded separately before server integration.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
bounded-foreground-admission-wait-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
8829f8b08a: Retain typed input on its browser while automatic preparation cancels (D128, D251).The input handler returned an error after correctly interrupting an update fence, forcing a healthy browser to reconnect before its unacknowledged bytes could be retried. Retain the admitted frame in its existing bounded ordered queue until the original fence releases, then recheck foreground admission before forwarding. Attach and bounded terminal-open work use the same release notification. Existing authority and revocation guards still wrap the entire wait, while independent transport proofs remain runnable. Returning Close or widening liveness leases would hide the cancellation boundary. The isolated real-WebSocket regression fails before the fix and then proves exact first/second byte ranges and ACKs on the same connection; the full socket suite qualifies the changed authority path.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
same-socket-foreground-continuity-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
c41b9734e5: Admit recovery files at the fifty-administrator design point (D147, D170).The real encrypted-envelope inventory regression rejects fifty administrators because the original bound of 32 also includes the configured identity files. Keep a fixed bound of 64, sufficient for fifty envelopes plus five configured targets; do not use an unbounded listing or omit administrator recovery copies. Capture remains one protected resource at a time, rather than multiplying plaintext memory by the inventory count. The failing filesystem test is recorded separately and rerun in the following capture slice.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
recovery-target-capacity-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Recovery inventory RED: the real filesystem suite has 2 passed / 2 failed. The fifty-administrator fixture exceeds MAX_TARGETS=32 after reserving five configured identity files; bounded capacity is being raised to 64, with sequential protected capture unchanged. The new inventory also initially assumed hexadecimal member names, but existing EncryptedCopies uses canonical URL-safe base64 SHA-256 names; the reader now validates that existing encoding rather than changing published envelopes. Both failures and paths are in the raw log below. No runtime recovery or performance qualification is claimed.
ca-inventory-capacity-red.log
Additive recovery wiring refinement before implementation (#211, D147/D155/D168/D198): retain original host-selected destination admission in private local records separate from encrypted point inventories. A successful image check-in selects its exact predecessor point; manual rollback reuses those original destinations, never timestamp guesses or paths from the bundle. Capture a fresh point before manual rollback so a failed downgrade restores the image/database it left. Retain only records referenced by bounded local point/image retention. Full D155 database/CA/config restoration applies; no invented security-state overlay.
Claim the inherited anonymous channel before child dispatch, then authenticate the actual image and wait on the guardian barrier before any serving database opens. A memory-only key lease may be transferred once into the enabled backup activation after retained key-identity checks; a cold process remains locked. A generic optional readiness callback must complete actual image-history reconciliation and component startup before the newly bound listener accepts mutations. Signer readiness changes use its existing lock-state subscription, owned by the enabled backup future. None of these contracts authorizes a new server, a signing service deployment or a new engine. Actual runtime wiring and VM proof remain incomplete.
Committed and pushed
b0f1e2da07: Capture encrypted CA administrator envelopes with retained configuration (D147, D168, D186).A CA snapshot must preserve its encrypted administrator copies as configuration as well as the memory-only signer and retained issuer. Reuse the existing checked encrypted-copy directory, admit canonical bounded leaves before private capture and derive opaque labels from the configured paths. Keep publication serialized by the existing database writer reservation and require the complete admitted resource set during point authentication. Reading starts only during explicit capture/target admission, never construction. Copying raw signing keys to files, trusting inventory-selected paths or retaining an unbounded directory listing would violate custody or resource bounds. Four actual filesystem tests at the fifty-administrator design point cover strict bounds, canonical order/generation, alias/shared-mode/unknown-file refusal and non-repair; existing storage/capture gates remain required. Full guardian restore remains unwired.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
capture-encrypted-ca-administrator-state-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
1183b118a6: Reuse the opened-image digest for verified recovery binding (D147, D217, D226).Factor the unchanged positional bounded SHA-256 reader from manifest digest comparison. Keep metadata/length/growth/truncation checks and preserve caller seek position, while comparison still rejects mismatched signed checksums. The public helper establishes no signature or executable authority; the receiver must seal and admit its image independently. Copying another whole-image hash loop into restart or backup would duplicate I/O/security rules and increase binary size. Existing release verification tests remain the gate.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
shared-opened-image-digest-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
5891965dd4: Carry receiver-owned image commitments into handoff preparation (D147, D217).Add a separate trusted receiver path that binds the candidate and pinned predecessor commitments before the post-fence preparation hook. Keep the bounded local wire request unchanged and never deserialize these commitments from its path/version fields. Existing admission consumers retain default behavior; the recovery consumer must explicitly require a binding before snapshot publication. Reopening mutable paths to choose checkpoint identities would detach the backup from the exact sealed bytes the receiver executes. No recovery provider or private export is enabled by this API step.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
receiver-bound-image-admission-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
5917678bf2: Bind recovery to the exact sealed candidate and pinned running image (D147, D217).Pin the trusted running predecessor before post-fence preparation, compute both commitments with the shared positional digest reader and pass them through the receiver-only admission API. Export private CA frames only after admission succeeds, then retain and execute those same opened images. Reuse one constructor for manual reload and receiver-owned recovery rather than reopening the predecessor after choosing checkpoint identity. Request paths/version strings cannot substitute their own digests, and synchronous image reads retain owned I/O/scheduler behavior. Existing signature/refusal, sealed-image, real exec/recovery and no-default tests qualify the adapter; the actual backup provider remains fail-closed.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
sealed-image-pair-receiver-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
b4a1ba0a21: Enable optional release activation fencing for private recovery (D198, D251).Keep private admission behind an explicit release feature selected weakly by the server private-resource host. Removing release still removes its dependency, and standalone release builds retain their existing API. This only enables shared admission types: it installs no updater recovery provider, task or key. Unconditionally linking private key administration into every release-only build would retain unrelated machinery.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
release-final-activation-feature-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Recovery ordering finding from source: D155 restores release bookkeeping along with the database. On manual rollback B→A, restoring A's original point also restores its older A→B applying row, losing B's new rollback intent and its predecessor slot. If A then fails, restoring the fresh B point without marking that attempt entered can make startup permit A once more. Evidence: crates/plugins/release/src/startup.rs first-entry branch and updater.rs reconcile(), plus recovery_point.rs full database restoration boundary.
Implementation must regenerate only release-owned operational transition bookkeeping after the authenticated D155 restore, from public transition metadata captured in the fresh image-bound point. It must retain predecessor B on healthy rollback and mark the failed attempt entered after fatal restore so existing signature-verifying startup selects B. Current authorization/revocation tables still restore exactly per D155; no security-state overlay. The transition contains versions, image paths, kind and public clock only, never session proof/token or signing/backup key bytes. This is a source finding and additive integration contract, not a claimed acceptance result.
Committed and pushed
0dd469a52a: Retain the original release activation after recovery preparation (D147, D198, D251).A database writer reservation alone cannot exclude feature disable: the host invalidates and joins the old activation before acquiring that writer. Wrap the updater admission with its original host scope, delegate exact image binding and checkpoint preparation, then retain one final activation lease. Disable that wins during preparation makes the attempt fail and drop its owned channels; a retained attempt makes the host return Busy until exec or cancellation. Never substitute a new activation epoch. Controlled wrapper tests cover ordering, delegation, cancellation and single use; host lifecycle tests exercise actual switch serialization. Recovery checkpoint/provider installation remains separate.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
release-final-activation-reservation-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
f67787e39c: Validate the recovery database before host resources change (D147, D186).Expose the existing authenticated-image SQLite loader and integrity check as a read-only preflight, then reuse exactly that helper during transactional restore. A multi-resource host must reject malformed database bytes before it atomically replaces its first configured file. Keep deserialization, trusted-schema restrictions, page-geometry handling and in-place restore behavior unchanged. Reimplementing integrity checks in the host or validating only after file publication would diverge from the database boundary or permit partial malformed recovery. Real checkpoint tests cover a valid migrated image and an authenticated malformed image; existing database integration tests cover WAL geometry and restoration.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
preflight-recovery-database-validation-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Gate filter correction for
0dd469a52: private_plugin_runtime is the source filename, not its Rust module path; that earlier supplementary invocation selected zero host tests. The release crate gate itself passed 35 tests including its three new reservation scenarios. The correct private_calls::tests filter now exercises the real host epoch boundary; output verbatim:release-host-epoch-followup-gate.log
Committed and pushed
cd61edd15c: Remove the unused staging diagnostic after control-loop integration (D128).The rebased control loop no longer calls the old branch-only liveness diagnostic. Keeping its staging-only method makes that feature fail strict Clippy with dead code. Remove the unused getter without changing lease or proof behavior; retaining a diagnostic allowance or adding artificial calls would preserve obsolete instrumentation. The existing liveness tests and staging-feature compiler gate qualify the removal. Migration acceptance remains a separate slice.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
remove-obsolete-staging-liveness-diagnostic-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
7f078ba6b6: Make failed-image acceptance commit a real newer migration (D147, D155, D251).The public staging failure hook previously exited before core migration and could not distinguish a real database recovery from merely restarting the old image. Run the existing full core migration journal plus a staging-only version 26 that commits a probe table and mutates release state before the verified successor exits. Production migration history is unchanged and predecessor validation still rejects the newer journal. A real-engine test proves that the old migrator fails until an actual consistent snapshot restores both schema and data. Replacing the failure with a pre-migration exit or manually forging migration rows would not exercise the required recovery invariant. This test is not a claim of guardian or VM acceptance.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
staging-failed-image-migration-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
008b912b48: Specify authenticated restoration to independently selected host targets (D147, D155, D186).Authenticate the exact image-bound point and retained backup-key identity, require the complete closed resource set, validate SQLite before any retained write, then restore the existing database in place and atomically replace only independently configured file targets. Resource labels and captured JSON can never select paths. CA frames reuse the existing parser and must match the captured issuer; signing material is never written as a file. Real filesystem/database tests restore both mutated data and one configured file, and show authenticated extra resources or traversal cannot change any target. Keep this boundary test-only until the owned recovery worker/provider is installed; no production rollback is claimed.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
authenticated-host-restore-boundary-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
f9e8fa5986: Gate recovery admission interfaces independently of component metadata (D198).Declare a removable API feature that reuses the existing private-resource and socket-host dependencies. It retains no runtime implementation, signing key or backup engine. Metadata-only builds keep the existing empty default feature set; enabling recovery globally would defeat compile-out.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
optional-private-recovery-interface-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Additional input ordering finding from source (needs behavioral RED before repair): Updater::authorize retains BEGIN IMMEDIATE through checkpoint/exec. The socket currently calls authority_deadline(renew=true) before its input handler can interrupt Activity's fence. Auth::socket_activity first reads live expiry, then writes renewal when more than 60 seconds elapsed. After the default five-minute quiet period, that renewal waits behind the updater writer; therefore the input cannot reach the cancellation signal. The new same-socket regression covers a foreground fence, but not this real writer plus renewal condition. Evidence: crates/plugins/release/src/updater.rs ConfigurationLease/authorize; crates/infraternal-server/src/websocket.rs while_authorized_operation/input handler; auth/sessions.rs socket_activity.
Extend the controlled real-WebSocket fixture to a WAL database with separate reader connections, shorten its still-live session after priming the stream, hold BEGIN IMMEDIATE and the Activity fence, then require input to interrupt the fence and retain exact ACK/bytes on that socket. The repair must retain the initial live-authority read, independent expiry/revocation watchdog, no idle renewal, and normal input cost. It must not renew against a stale clock after a wait. No performance or behavioral pass is claimed for this source finding.
Committed and pushed
654740c43b: Keep recovery readiness typed across owned handoff admission (D147, D186, D198).Declare the enabled provider boundary with exact receiver-owned image commitments and owned exec resources. Keep only a weak registration outside its activation future, release the registry mutex before awaited work, and wake subscribers through the existing watch primitive without idle polling. Setup, locked keys, missing administrator copies, locked signer and disabled feature have exact bounded private protocol replies, distinct from permanent image refusal. No key bytes or arbitrary diagnostics enter this interface. Controlled registration tests qualify lifetime/refusal; production provider and event-driven updater waiting remain separate, so no successful update is claimed.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
typed-private-recovery-admission-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
202f7a1b5e: Use one bounded local handoff reply contract (D147, D251).Route receiver refusal/postponement through the shared exact-state encoder and decode responses through the same contract in the server host. Preserve existing successful and postponed bytes and generic refusal text; unsupported replies fail closed. This prepares typed backup readiness transport without parsing diagnostic prose or exposing private errors. Duplicated sender/receiver state tables would diverge as readiness grows. The provider and updater waiting loop remain unwired.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
shared-handoff-replies-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
8e010d983e: Fuzz exact local update acknowledgements alongside bounded requests (D12, D147).Extend the existing private update parser target to exercise every arbitrary response byte sequence through the exact acknowledgement decoder. Only the canonical successful response can admit handoff; encoded refusals and readiness states must remain errors. Enable the optional interface only for this fuzz dependency so its locked/setup/copy/signer/disabled cases are reachable. Reuse the current fuzz engine and request corpus rather than adding another parser or harness. This is a compile/lint gate; an instrumented seeded campaign remains required.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
fuzz-private-handoff-replies-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
a5de084090: Persist public update readiness without changing core migrations (D147, D198, D251).Add one bounded singleton table for a verified version and one closed readiness code. Keep owner/session proof, image paths, signing material and decrypted data out of public waiting state. Creation remains additive and idempotent alongside existing release-owned tables, so prior verified images still open the core journal unchanged. Reusing permanent image rejection would discard retry intent; altering the core migration journal for optional runtime state would break rollback independence.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
public-recovery-waiting-state-schema-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
d5f5f30976: Make typed recovery waiting a removable release capability (D198).Gate the readiness consumer independently of ordinary release metadata and host lockstep. Reuse the existing scoped admission and private recovery interface; this dependency step starts no worker, unlocks no key and supplies no recovery provider. Making all release-only builds retain backup coordination would defeat compile-out.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
optional-recovery-waiting-consumer-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
950e0d70a7: Wait for recovery readiness without discarding verified update intent (D147, D186, D251).Keep typed handoff errors inside the running worker while preserving the public string-error adapter. A locked/setup/missing-copy/disabled/signer wait retains the same verified image and exact owner/session proof, records only public version-bound readiness, suppresses a misleading next-window timestamp and sleeps on existing readiness/operator/state events. Consume own notifications so a waiting attempt cannot immediately retry itself. Permanent refusal still pauses an image; foreground postponement retains its existing activity wait. The running-worker regression first fails because waiting is lost, then proves one attempt while locked, preserved proof, no repeated attempts and one retry after unlock. The provider remains uninstalled, so this does not enable an update without a real checkpoint.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
event-driven-recovery-waiting-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Required failing-before-fix typed readiness worker receipt.
event-driven-recovery-waiting-red.log
Committed and pushed
1306dffcfe: Keep host recovery preparation behind the removable resource boundary (D147, D198).Extend the existing generic confirmed-host resource adapter with readiness, joined preparation and exact-process completion callbacks under the optional recovery interface. Missing implementations refuse; neither a key lease nor a public image commitment can substitute for an actual checkpoint. Metadata/private-resource builds retain no recovery implementation. Reusing this host bridge avoids another host registry, lifecycle task or backup-specific branch in the core.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
private-host-recovery-boundary-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
298c56eb70: Own bounded recovery preparation within backup activation (D147, D168, D198).Register recovery only inside the enabled owned backup future, using its existing cold key ring and original epoch. Bound work to one executing and one queued request, refuse further sends, observe receiver cancellation and join private resource cleanup before the feature reservation drops. Inspect actual key/copy readiness, pass one protected lease to the existing host adapter, then reserve the same activation only after preparation. Retain inert host coordinates without a runtime cycle; successful key changes and authority notifications wake existing readiness subscribers. One real-SQLite/cipher/ceremony scenario proves cancelled preparation drops before another request, successful resource lifetime retains the epoch and disable during preparation cannot gain a final reservation. Host callbacks remain default-refusing until the actual guardian provider is installed; this commit does not enable updates.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
backup-owned-recovery-service-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
e3cccfff2f: Declare inert process claim and existing-server preflight hooks (D198, D201, D217).Private inherited descriptors must be claimed before child dispatch, and recovery must finish before the serving runtime opens a database. Add an optional callback contract for compiled role factories with these two ordered phases. Declarations execute no callback; paths supply existing-host coordinates only and static errors cannot leak private channel data. This extends the existing plugin composition instead of adding a backup command route to core or allowing an update to initialize a server. The additive contract was recorded on #211 before implementation.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
generic-process-lifecycle-contract-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
ce684e180b: Dispatch optional factory hooks before children and server database startup (D198, D201).Run optional compiled factory callbacks after process hardening and before child/action dispatch, then before the existing server creates its serving runtime. Registry construction stays pure and generic action dispatch remains unchanged. Unconfigured server invocation still returns the existing setup instructions without running a server preflight. No factory installs a recovery callback yet; the next integration owns the private channel and restore consumer. Reusing the factory composition avoids a backup-specific branch in command dispatch or a new startup worker.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
factory-process-lifecycle-dispatch-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
c9ba05ec46: Reconcile release intent after full database restoration (D147, D155, D251).A downgrade restores old release rows along with application data. Capture only public transition metadata in the authenticated preimage, rebuild its rollback intent after restoring the target snapshot, and mark an actually failed attempt entered before releasing fatal recovery. Existing startup still re-verifies every retained executable; session proof is not copied or renewed. Without this boundary an older applying row loses the just-left image, or a restored fresh point admits the failed image again as a first entry. Real SQLite tests cover predecessor retention, normal startup selection, failed downgrade selection and unchanged restored authorization state. Runtime recovery will consume this API in its host adapter; no production recovery is claimed by this module alone.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
release-recovery-transition-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Required behavioral RED for input during the real SQLite writer reservation with session renewal due. This extends the same-socket byte/ACK test with a WAL database and separate read connections; no lease is widened. Failure occurs before the preparation interruption signal, as predicted by the source finding. The repair remains pending.
checkpoint-writer-input-red.log
Recovery continuation checkpoint at
c9ba05ec46. Selected gate/commit workflow remains active; this archive preserves unwired channel/guardian/worker sources, planned destination admission/release reconciliation and the pending real-writer input regression/repair. Source hashes and head are inside. These drafts are not VM acceptance, a working production provider or completion. Remaining integration and final qualifications are listed explicitly so work does not depend on this chat.recovery-integration-next-20261016.txt
recovery-drafts-c9ba05ec4.zip
Committed and pushed
aabd5b83be: Interrupt checkpoint preparation before a foreground session renewal waits for its writer (D128, D251).The updater already owns BEGIN IMMEDIATE before freezing foreground work. After a quiet window, sliding renewal is due and the socket used to wait for that writer before typed input could cancel preparation. Keep the initial live-authority read, signal new contiguous foreground work before renewal, and defer a blocked renewal into the existing expiry/revocation watchdog until joined preparation releases its fence. Resample live authority and clock afterward; normal input retains one authority read and one activity record. Attach/open intent uses the same ordering, while proof traffic remains non-renewing. Shared input-range validation prevents acknowledged duplicates from becoming new activity. The real-WAL same-socket regression fails before repair with renewal due and a separate held writer, then requires exact bytes/ACKs after interruption without a new connection. Native latency still requires final VM qualification.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
checkpoint-writer-input-continuity-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
e64f846a45: Specify bounded recovery metadata and protected anonymous frames (D147, D168, D217).Separate bounded public bootstrap/restore coordinates from protected key frames on an anonymous channel, with canonical fixed commands, absolute health deadlines and exact key-identity checks. A rollback selection must reverse the fresh image transition and share its key identity; no encrypted inventory chooses destinations. Same-PID descriptor claim checks creator UID/PID/type and closes the original only after CLOEXEC duplication. Tests cover bounds, unknown fields, substituted keys, target aliases, expired deadlines, ordinary/malformed invocation and descriptor inheritance defaults. Keep this module test-only until the actual startup/worker consumer is installed; the ELF recovery capability is not advertised.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
private-recovery-channel-tests-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
c2b1cdc999: Fence owned recovery work to the pinned parent lifetime (D147, D168, D217).Authenticate the anonymous stdin peer as the actual same-UID parent, pin its birth/pidfd, validate its point and hold the cold-start barrier before acknowledging preparation. A malformed frame or EOF never authorizes restore: armed recovery waits for actual parent exit, using pidfd termination only at the absolute startup deadline. Release the protected key once to the exact resumed image and acknowledge completion only after durable barrier removal. Initialize the shipping CA heap before frame import and reject ordinary stdin before any callbacks. Keep the worker test-only until its CLI/startup consumer exists; positive owned-child lifecycle tests follow in the guardian slice.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
owned-recovery-worker-tests-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Additive compile-time composition before installing recovery: introduce a server recovery integration feature requiring the existing backup/server and release/recovery-updates implementations, selected by an explicit update-recovery feature in the normal shipping CLI defaults. Minimal backup-only or release-only builds keep their independent contracts/default refusals and advertise no recovery ELF note. The Linux compiled backup factory binds its existing CliWorker action plus generic process lifecycle hook; core dispatch has no backup string route. Runtime backup disable still owns/cancels/joins the broker and any readiness watcher; no worker exists when off. This adds no dependency package, crypto/database/transport engine or signing authority. Actual provider/startup wiring, size and VM proof remain required.
Committed and pushed
fa64b8687a: Join the recovery guardian through preparation, refusal and check-in (D147, D168, D217).Own the actual worker child before the first fallible bootstrap operation. Unarmed cancellation joins and reaps it; arming is allowed only immediately before verified exec and uncertain armed destruction fails closed. Kernel fallback and final abandonment use the exact protocol fence rather than a PID/EOF guess. Confine armed tests to owned fixture processes, exercise the protected resume/bootstrap/key/PID reply and healthy check-in, and prove missing worker dispatch refuses without a marker. These real process/channel tests complement encrypted point tests; they do not install the production checkpoint provider or claim VM acceptance.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
owned-recovery-guardian-tests-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Recovery collection ordering finding (source, not runtime qualification): updater.rs reconcile() currently invokes image collect before a new guardian health check-in. If B fails before CheckIn and the guardian restores A's database, A's earlier previous image Z may already have been deleted by B's reconciliation. Evidence: crates/plugins/release/src/updater.rs reconcile/collect and the new recovery startup ordering.
Defer the host engine's image collection while a resumed guardian is incomplete. After all startup health checks and the positive CheckIn ACK, mark that process complete and invoke collection through an additive default checked_in callback on the existing local_update::HandoffAdmission registration (Scoped forwards under its original epoch; Updater reuses its existing collect implementation). No new registry or duplicate SQL/path-selection table. The backup host completion future awaits this role-owned callback before serving. Keep current/previous point references protected independently under D147 local retention; only then collect admission metadata. No signing key, executable or restoration authority comes from this callback. Actual wiring/test/VM proof remains pending.
Pre-arm validation finding from source: recovery_point::validate_resources authenticates the full closed set and CA/issuer match, but treats configured HTTPS/remote certificate and private-key resources as opaque configuration. External file replacement is not serialized by the SQLite writer, so an authenticated capture can still contain a mismatched file pair. Restoring such a point would prevent listener startup. Evidence: private_resources_host.rs sequential capture and recovery_point.rs validate_resources.
Before the actual provider can arm, validate each captured configured certificate/key pair with the existing crypto provider (including the single combined-identity target already deduplicated by Resources::file). Add an actual mismatched-pair test that authenticates successfully but refuses before any retained write. This uses existing provider/parsers, adds no library and never writes private key material outside the configured original files. It does not claim filesystem writers are coordinated by the database lock or invent restoration destinations from captured JSON. Actual runtime wiring and VM proof remain pending.
Committed and pushed
0b6e159373: Declare one-shot warm custody and post-check-in lifecycle boundaries (D147, D168, D198).Add inert optional host key-transfer/readiness subscriptions, a guarded startup-ready callback and post-check-in collection through the existing enabled handoff registration. A cold/default host transfers no key and construction starts no callback. The resumed host must match retained identity and complete actual health before allowing the existing role to collect superseded state; a fresh registry or early image deletion would lose rollback ownership. These additive contracts were recorded on #211 before implementation. Minimal API builds retain no recovery callbacks, and no runtime provider is installed by this declaration slice.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
recovery-startup-contracts-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
f62350133a: Import warm backup custody only into its original enabled activation (D168, D186, D198).An authenticated same-process resume must keep backups unlocked without creating a cold-start key file. Ask the host once for protected inherited input, independently match its retained key identity, then install under the original activation commit after I/O/hash work finishes. Default/cold hosts supply nothing. Reuse KeyMaterial itself as the private input owner and remove the duplicate broker wrapper; no plaintext aggregate or new crypto path is introduced. The real ceremony/SQLite test proves preparation alone does not unlock, rejects short/substituted input and rejects a retired epoch, alongside the existing joined broker/custody tests. The actual host channel consumer remains a separate integration step.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
memory-only-warm-backup-custody-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
c9c5780ff5: Keep update recovery an optional composition of existing server plugins (D147, D198).Declare the host integration feature from existing backup and release capabilities, including their optional private recovery interfaces. Backup-only and release-only builds remain independent; no package or foundational engine is added. The actual host consumer and normal shipping CLI opt-in follow separately, and no recovery ELF capability is advertised at this boundary. Strict combined-feature lint/process tests and both minimal compile-out checks qualify the dependency composition.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
optional-recovery-runtime-composition-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
ba2977dd91: Report actual release startup health before resumed check-in (D147, D198, D251).Publish initial listener-admitted reconciliation through the existing owned release activation and fail the promise when initialization exits or is cancelled. Reset before a new role future can observe a prior success; do not spawn a health task. Forward post-check-in collection through the original scoped admission and reuse Updater collection. Real running-worker tests require health to remain pending before listener admission and report an actual closed-database initialization failure rather than success or a hanging watch. The host startup consumer and deferred image-collection guard are installed separately, so no production update completion is claimed here.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
release-startup-health-and-checkin-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
3106eaa953: Retain canonical certificate and key associations in encrypted configuration (D147, D155).A consistent database reservation does not serialize external certificate file replacement. Retain each configured role pair as opaque canonical labels after existing path deduplication, including combined identities and roles sharing the same files. These labels select no new filesystem destination; original host targets still own every restore path. Reuse one path normalizer and do not duplicate captured private files. The existing inert-construction/capture tests now check the associations, and an added shared-role case keeps one pair for two uses. Pair cryptographic preflight is the next slice.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
configured-identity-role-associations-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
034e31cfe1: Refuse an authenticated but unusable configured TLS identity before restoration (D147, D155).Authentication alone cannot show that separately captured certificate and key files match. Validate bounded role associations against independently admitted target labels, then use the existing crypto provider to check each captured public/private pair before changing any database or file. A combined file works through the same canonical pair; no configuration JSON can add a restore path. The real encrypted-point/SQLite regression first admits a mismatched identity and fails, then refuses it without changing retained state, while separate and combined valid identities remain accepted. This boundary is still test-only until the host consumer is installed.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
configured-identity-preflight-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Required configured-identity failing-before-fix receipt.
configured-identity-preflight-red.log
Committed and pushed
f59d67a8db: Wait for the exact owned startup task before resumed health can commit (D147, D198).Track one weak server-task identity and completion flag per role, preserving the original activation epoch while awaiting optional health. Unrelated node/socket tasks cannot substitute for startup. Publish exact completion before reusing the existing lifecycle wake; JoinHandle completion alone races a future destructor, and unpolled cancellation must wake too. No field or work is added per terminal task and minimal builds retain no health tracking. Real runtime tests cover pending/successful health, disable/re-enable and a dead startup with another owned task still alive; original private-call lifecycle tests remain green. The actual resumed host consumer remains the next integration step.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
exact-server-startup-ownership-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Correction to the unwired continuation notes: the existing D147 local-backup default is seven, not ten. The ten-point wording was my draft-notes error. Source of truth: crates/plugins/backup/src/descriptor.rs DEFAULT_LOCAL_KEEP=7 (read-only setting) and checkpoint::DEFAULT_KEEP reexport. The new admission retention test uses that existing constant, so its twenty-update bound is seven local point admissions plus two image selectors. No retention decision/default was changed.
Continuation checkpoint at
f59d67a8db. Managed build-slot process 3676663 is queued (no admission gate has begun). Prepared runtime integration is attached as UNCOMPILED drafts, not acceptance evidence: ordered scripts finish-recovery-admissions.py -> finish-recovery-transition-coordinates.py -> finish-recovery-host-consumer.py -> finish-recovery-runtime.py. run-managed-continuation.py owns the gate sequence and bounded failure repair. Each logical commit gates before commit/push. Draft host tests cover real fatal SQLite/schema restore, capture while the original writer reservation is held, and twenty cancelled preparations bounding encrypted points and original admissions to D147 default SEVEN. Runtime hook draft claims before children, restores before database startup, installs rollback signer against restored issuer, waits exact startup health, then checks in and collects. No new engine/dependency is chosen.Nothing from these draft integration steps is committed or qualified yet. Final VM acceptance, final default-production size/caps, native latency qualification, final dev integration and verify fast remain outstanding.
Archive SHA256 6b82edc6c03323d91e3a6cf698a278217e382fcd3cf30811f549a05cc833ab4f
Uncompiled continuation sources and ordered gate scripts
Integration finding at
f59d67a8d: crates/infraternal-server/src/release_update.rs Engine does not override UpdateEngine::prepare_recovery, so the production engine still takes the deliberately refusing default at crates/plugins/release/src/updater.rs:55 before contacting the handoff receiver. The feature-gated host integration will supply readiness here only. Actual encrypted capture stays in receiver admission under its final writer/foreground fences after independent verification of the opened predecessor/successor; it must not be duplicated before the fence. This is uncompiled wiring work, not an acceptance claim.Integration constraint: scripts/release/staging-proof signs independently versioned A/B/C/D/E manifests around executable fixtures with the same compiled build identity. The existing Engine::current authenticates the actual /proc/self/exe bytes and signed VERSION; the compiled display/version constant is not its replacement. The unwired host draft now reuses that verified identity for capture and resumed rollback checks, rather than comparing history against a build constant. A functional capture case checks an edge manifest identity distinct from the constant. No trust exception, binary rewriting, compiler-profile change or weaker verifier was introduced. The staged runtime integration is still awaiting its managed build slot.
Execution status: managed build-slot PID 3676663 has waited approximately one hour; its only child is the scheduler sleep, so no pending source mutation or gate has begun. Slot allocation metadata ages observed: normal slots 1/2/3/4 approximately 31/72/19/20 minutes. Orchestrator scheduling capacity is the dependency; I have not bypassed the slot limit, changed priorities or touched another job. Runtime, regression and fuzz continuation sources are prepared in the job scratch directory;
f59d67a8dremains the committed/pushed head. Prepared work remains UNCOMPILED and no new acceptance or performance result is claimed.Updated continuation checkpoint at
f59d67a8db. Still queued for the managed build slot; no new source mutation or gate has begun. This archive supersedes the earlier uncompiled runtime drafts. UNCOMPILED, not acceptance evidence.Ordered scripts: finish-recovery-admissions.py -> finish-recovery-transition-coordinates.py -> finish-release-readiness-preflight.py -> finish-recovery-host-consumer.py -> finish-recovery-startup-consumer.py -> finish-recovery-runtime.py -> finish-recovery-staging-fixture.py -> finish-recovery-fuzz.py. The host snapshot module and process startup module now have separate atomic gates/commits. New module cases include unsigned entry refusal before capture, fallback preserving live state, real data/schema restoration, original-writer snapshot, signed identity distinct from a build constant, twenty cancelled preparations bounded to SEVEN points/admissions, and safe cleanup of an empty abandoned publication. Concrete-engine preflight and signer-event regressions require behavioral RED before their fixes. The runtime feature declares its existing warm-handoff compile dependency and installs actual worker/lifecycle/listener consumers before advertising the capability note. Fuzz target registration and three seeded sanitizer campaigns follow.
Runner: run-managed-continuation.py in build-slot PID 3676663; entry finish-recovery-admissions.py now pins its exact starting head. Inspect git status/head, running processes and managed receipts before resuming: NEVER replay completed mutation prefixes. On failure, use the exact nonce to resume only the incomplete gate; the wrapper releases its slot after five minutes without a repair. Each completed step commits, pushes and comments before continuing. All chains set CARGO_INCREMENTAL=0. Entry reclaims only this job incremental cache under its managed slot to prevent another disk-full incident.
Outstanding after these scripts: integrate latest origin/dev (currently docs-only since
f210a4f25), scripts/verify iterate, actual shipping-profile size/ratchet qualification, real perf-VM acceptance including 128 attached routes and managed host, native A/B qualification with fresh baseline/artifacts, final scripts/verify fast through build-slot. No merge or production deployment.Archive SHA256 7ffdcef37b218b567c753b317fd4303960449998aab6ee4ce32f67398f90d1f2
Updated uncompiled sources and ordered gate scripts
Additional reconciliation finding from code inspection (not yet a reproducing test): a full D155 manual rollback restores release_update_notifications from the older preimage. Main-path B readiness is already in the A→B preimage, but a later staged C observed while B runs can be absent there; rolling back B→A then checking C could emit its toast again. crates/plugins/release/src/schema.sql promises persistent dedup across rollback, while recovery.rs Transition currently carries only the applying intent. Application/authorization state must still restore completely; any preservation belongs exclusively to public release operational metadata. After the core recovery consumer compiles, add a real SQLite failing case and reconcile the source notifications through the release-owned boundary without a security-state overlay or downloaded path authority. No fix or acceptance claim yet.
Committed and pushed
9e00e82af5: Retain original host destinations separately from encrypted recovery inventories (D147, D155).Publish immutable local destination admission under the configured host namespace, then select its exact point only after the actual successor is healthy. Kernel fallback preserves the prior selection. A downloaded bundle can neither register a path nor select a point by timestamp. Enforce checked private unique files and validate the complete namespace before collection; retain only current/previous selectors and bounded local point admissions. Real filesystem tests cover health/fallback/refusal, alias/shared-mode/unknown-leaf refusal and twenty updates bounded to seven point records plus two selectors. This metadata boundary remains test-only until the host consumer is installed; it is not an AEAD or VM proof.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
original-host-recovery-admissions-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
42301b7c3e: Reuse validated point collection for admission retention identities (D147).Return the exact kept checkpoint IDs from the existing validate-before-retire collector, preserving the prior unit-returning API for existing callers. This lets the host retain original destination records alongside its bounded encrypted point inventory without a second scanner or full database reads. The twenty-checkpoint test checks the returned seven-point set and its protected rollback reference; unknown/aliased entries still refuse before deletion. No retention default or crypto format changes.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
retained-point-identities-after-collection-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Committed and pushed
0b5d463c78: Expose authenticated transition coordinates to the host recovery boundary (D147, D155).Provide borrowed version coordinates and rollback kind from the existing validated transition. The host can bind both encrypted points to the exact reversed image pair without duplicating the release schema or accepting a downloaded path as authority. Existing real SQLite recovery tests exercise the same decoder and restore operations; no authorization or key material is exposed.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
recovery-transition-coordinates-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Edge auto-update is not shipped because the branch still lacks an installed recovery path that can undo a failed, database-changing update. The current production engine deliberately refuses application before handoff. The earlier implementation reached staging, but independent review found five P1s; subsequent fixes and recovery primitives have not received final integrated qualification. Shared capacity has delayed that work, but removing the refusal would expose a real recovery failure.
Scope checked: detached
f59d67a8dbd56866645108d89b08cf04136868ce; localorigin/dev=190bf088d, common ancestorf210a4f25; 207 commits inorigin/dev..HEAD. Read CLAUDE.md, architecture/process, D147/D155/D186/D243/D250/D251, issue body, review verdicts and all last 40 comments; skimmed earlier history. Complete ordered SHA/file inventory. Findings below concern this pinned head, not another job's drafts or later live state.773302ce9,68179ebf3,889278f70,c3ad4b468; edge_admission.py:47. This is publication machinery, not proof the external hardened signer and production feed are enabled./proc/self/exeretention; fsync/rename publication.771160120,48fc61fc6,cbff51f01; release_update.rs:55, :387. Signed-engine and compiled-control receipts are in 46104 and 46102.0d6cfd2a4,5917678bf,4abb6ab09,8829f8b08,aabd5b83b; restart.rs:232; real-WAL red/green 54581.076cea7c5,2e9d6ffe8,ba2977dd9,f59d67a8d; updater.rs:557. This is not an installed end-to-end D155 health verdict covering HTTP, WebSocket attach, infraternal-agent reconnect, migrations and session resume. The resumed host consumer is explicitly still pending in 54715.116c4f984,d99f72129,eecdd8dad; restart.rs:498, startup.rs:48. Binary selection alone cannot undo a successor migration.131d416bf,05b9f8da5,479f9c6bd,008b912b4,c9ba05ec4,fa64b8687,034e31cfe. Focused tests pass, including real newer migration restoration and TLS mismatch refusal. Critical host modules remain test-only: lib.rs:164–186.The decisive gap is UpdateEngine::prepare_recovery at updater.rs:55: default refusal is
pre-upgrade backup unavailable. The concrete Engine implementation atrelease_update.rs:311–483never overrides it;updater.rs:419calls it before handoff. 54771 independently records this exact integration gap. Therefore this head can prepare an update, but cannot automatically apply it through the production updater.Earlier staging did demonstrate useful behavior: quiet-window postponement, warm CA/PTY survival, manual update/rollback, late exec refusal, managed-host watchdog rollback, and fatal server binary recovery. But that was an older head with 128 PTYs and only ONE active server route plus the managed-host route, using same-source versioned fixtures. Fatal server recovery cold-locked the CA. Reported maxima were 882.680 ms listener-gap bracket and 61,867.495 ms last-input→apply for a 60 s window: 51735. It did not prove autonomous recovery after a genuinely newer migration.
The independent verdict was HOLD, P0=0/P1=5, despite
verify fastpassing: route continuity, native latency, unbounded images, absent backup/restore, and healthy listener gap: 51934. Collection and listener/control fixes now exist; their final-head acceptance is still outstanding. Do not repeat all five as unfixed code defects, or describe them as cleared by review.Required before unattended application:
execreturning an error. Prevent restart loops and keep the failed candidate paused. Preserve usable CA custody through this update transaction without introducing a cold-start auto-unlock; total host/power loss retains D168 semantics.updater.rs:510currently collects during reconciliation; restoring the older DB after a later failure can then refer to an already-deleted predecessor. This is a required recovery defect, not cleanup polish: 54615. Bound points/admissions using D147's existing seven-point default while protecting image-selected recovery references.c9ba05ec4supplies the API but no host consumer. Losing B→A intent or re-admitting failed A as a first startup can break recovery; those cases stay in the first slice. Follow the corrected full-restoration contract in 54024, not the earlier speculative security-state overlay.updater.rs:149). Initial enablement is a one-time rollout task; subsequent releases must need no orchestrator deploy. This scope check did not inspect or change monitor01's live configuration.Can ship later: remote/S3/SFTP/PBS backup destinations, daily/weekly backup product workflows, disaster-recovery/bootstrap UX, additional recovery tooling, UI polish and the separate Settings/Inbox visual pass. D251's controls remain owed; this issue explicitly scopes the backend first. Keep the existing backend status/events/CLI.
TLS restoration is conditional, not blanket deferral. General identity repair/re-enrollment tooling can wait. Restoring configured TLS/private-key/issuer material that the previous monitor01 build needs to bind and reconnect cannot wait; D147/D155 already include CA/config. Existing capture covers HTTPS and remote identities (private_resources_host.rs:41). Reuse the committed validation; do not add new identity-management scope.
The newest C-ready-toast replay after a full manual rollback is a separate notification-dedup slice: 54830. It does not prevent the previous build recovering. Conversely, preserving the correct rollback image/intent and delivering readiness despite cleanup failure are functional requirements; the latter already has
d047ce838.Keep the committed backend and finish its missing recovery seam; do not restart the 207-commit history or add a general backup product. The linked inventory lists every retained SHA and file. The essential existing groups are the publication/updater/handoff/host commits above, plus
24ca44031(fail closed),ca179382c/e4dafb7f3(image collection),7f078ba6b(real migration-failure fixture), and the recovery/health commits above. Keeping already-built optional primitives does not require expanding their shipping scope.Add only these logical, individually gated commits; future SHAs do not exist yet:
backup_points.rs,recovery_channel.rs, releaserecovery.rs, plus the host admission adapter/tests.release_update.rsand its real-engine regressions. Capture remains after receiver verification/fencing, not in this early preflight.private_resources_host.rs,recovery_point.rs, guardian/worker/barrier modules and host integration tests. Cover the original writer snapshot, authenticated target restoration, cancellation and fatal migration rollback.actions.rs/server entry, original-issuer signer installation and one-shot warm custody. Claim descriptors before children and restore before any serving DB opens.lib.rs, existing plugin lifecycle/runtime, release updater and Engine. Advertise recovery compatibility only after its actual consumers exist. Retain release-only/backup-only compile-out.scripts/release/staging-proof, actual update/managed-host staging tests, migration-failure fixture, and recovery parser fuzz targets. Extend existing harnesses.The latest continuation archive contains candidate scripts for essentially these steps, explicitly UNCOMPILED. It is starting material, not finished implementation or an eight-command shipping guarantee.
Required exit gates:
scripts/verify iterate, thenscripts/verify faston the final dev integration head, attaching verbatim output; independent break-it review with no P0/P1 and review bound to the exact publishable bundle.scripts/verify.d/rust.sh:67–68; PROCESS:141). Measure after wiring; do not cite older size passes as head evidence, raise caps to fit, or adopt unqualified profile experiments. Ratchet reductions as required.Estimate: 3–5 focused engineering days; plan 4–7 working days elapsed with roughly four shared build slots and the separately locked perf VM. Allow 1–2 days for integration/regressions, 1–2 for shipping size plus staging/native qualification, and about a day for independent review/fixes/integration gates, with queue time overlapping where possible. This is a scope estimate, not a measured forecast. The recorded one-hour slot wait in 54795 makes “a few hours” unrealistic. If the existing latency P1 needs a substantive fix or recovery integration exposes new defects, add a separate measured fix slice; no safe shipping date is established until those gates clear.
This was a read-only scope assessment: no code edits, builds, pushes or deployments. No new
verify fastresult is claimed; running it would conflict with the explicit no-heavy-build job scope. Checkout remained clean atf59d67a8d.Committed and pushed
f49972c148: Defer verified candidates on missing recovery readiness instead of rejecting them (D147, D251).The concrete engine inherited the backup-refusing default even when the recovery feature was compiled. Override its preflight with the existing typed readiness provider so disabled/setup/locked states retain the same verified candidate. Actual capture remains exclusively in independently verified receiver admission under its writer and foreground fences; do not snapshot twice or export keys here. A behavioral failing test first reproduced the default Refused response, then passed as Waiting Disabled with the fix.
Gate: fmt, targeted all-target Clippy with warnings denied and selected functional tests passed. Test summaries, verbatim:
release-engine-readiness-preflight-gate.log
Build-host durations in the raw log are operational, not performance evidence. Encrypted updater recovery integration, final VM acceptance, size/profile qualification and final iterate/fast remain incomplete.
Behavioral RED for the concrete engine preflight, followed by the committed passing gate above.
release-engine-readiness-preflight-red.log
Resumed edge-autoupdate from
f49972c148. Read D295 on origin/dev=41a3a81ab and repository contracts; issue #211 and parent #157 histories retrieved. Preserved interrupted unqualified recovery drafts as local-only branch edge-autoupdate-recovery-drafts at5f39b7e0a(not pushed), then rebased shipping history onto origin/dev without conflict. The old encrypted recovery wiring is rejected for this slice. Implementing only D295: SQLite online backup, bounded update marker, previous stable restart target until health/check-in, restore before DB open, failed-update Inbox result and disk admission. Reuse existing signature verifier, online-backup bridge, owned admission and warm listener handoff; no new dependency, supervisor, certificate restoration or production deployment. Required failing-first crash/health/deadline/migration/power-loss/disk tests and locked staging/size/native/final-fast remain pending.D295 additive implementation contract: reuse release-owned admission/ExecResource hooks and the existing SQLite online-backup bridge. Finish and fsync one copy under the receiver's final writer/foreground fence, then arm a small private atomic marker immediately before exec. The marker contains validated release coordinates, backup digest, attempt phase and deadline; paths are derived under this server's image store. A distinct ELF compatibility note requires both binaries to understand recovery. The existing owned startup/serving futures enforce health/check-in and the ~120-second deadline; no detached supervisor. The stable service symlink remains the verified predecessor until successful startup/reconciliation; flip it atomically then mark committed. On any other entry with uncommitted intent, select/verify predecessor, restore the saved database before live DB opens, pause the failed image and expose “Update to X failed and was undone” in Inbox. Fsync ordering makes interrupted copies, marker publication, restore and symlink flip retryable. Keep the successful copy until a later successful update; collect only after check-in. Refuse insufficient disk plainly; do not require backup-plugin key custody. Tests will exercise interruption points and actual schema rollback, rather than test-only encrypted recovery machinery.
D295 wiring draft is in the worktree, not committed or qualified. New update_recovery.rs reuses SQLite copy_main and the existing ExecResource arm/fallback lifecycle; release_startup restores before opening the live DB, and the service installer uses updates/current. Startup health commits before image collection. Compatibility is a distinct release-only ELF note (a remote-only build must not advertise recovery). Reused the existing exact-file SHA-256 loop with a caller-supplied size bound so database copies do not inherit the executable parser's 128 MiB ceiling; no second hasher or crypto dependency. Tests drafted for actual schema rollback, WAL-only data under an existing writer reservation, deadline, interrupted copy/marker/flip, disk admission, corrupt-copy refusal and twenty-update retention. The first managed RED/green gate remains queued; no test or staging pass is claimed. Exact new copy: “Update to X failed and was undone”; disk refusal: “Not enough disk space to copy the database before updating”.
D295 continuation safety record (UNCOMPILED, not acceptance): rebased shipping HEAD
bf5547593; original rejected recovery drafts remain local-only at edge-autoupdate-recovery-drafts=5f39b7e0a. Current approved D295 changes are uncommitted while their managed gate waits. Gate scheduler PID 295541 (session 60789), queued >12 minutes; script /home/kayg/.cache/codex-scratch/edge-autoupdate/d295-gate.sh. Source currently deliberately lacks enter() failure restoration for behavioral RED; the script restores the exact approved lean fix from d295-restore-green.txt after it observes test result FAILED, then runs green/Clippy/focused tests/iterate sequentially. Do not replay the RED prefix after a completed green run; inspect logs and source first. All output is under scratch/evidence/d295-*.log. Perf-VM NetBird access checked successfully; no measurement started. Next: compilation repairs, atomic gated logical commits/push, signed staging with 128 routes + real E migration failure + managed host, production size deltas/caps, fresh native A/B qualification, final verify fast through build-slot. No production change, no signing keys or provider credentials.Uncompiled D295 sources and exact RED-to-green gate driver
D295 static self-review finding, not yet a test result: a health timer started before release_startup::prepare could repeatedly abort an expired attempt's predecessor restore. remote_server.rs now starts the owned candidate timer only after startup recovery returns. Added a virtual-time regression requiring an expired candidate marker to become inert after predecessor restoration. release_startup.rs also validates the restored live inode after recovery, rather than requiring the failed candidate's database to exist first. New tests include interrupted restore-file and WAL/SHM-removal states, a real SQLx migration journal (old migrator refuses version 2 before restoration), and explicit rollback of schema plus the existing reverse release intent. Reuses Transition::restore_rollback; no encryption or supervisor added. Managed gate PID 295541 is still queued after >23 minutes; all these sources remain UNCOMPILED and no gate, size or staging pass is claimed.
D295 behavioral RED/green through build-slot: missing restoration reproduced seven failures, including real SQLx VersionMissing(2), retained migrated data, WAL copy recovery, deadline recovery and the predecessor timer. After installing lean restore, all 14 recovery tests pass, including twenty updates retaining two images and one database copy. This is functional build-host evidence, not VM timing evidence.
RED verbatim: test result: FAILED. 7 passed; 7 failed; 0 ignored; 0 measured; 299 filtered out; finished in 6.55s
Green verbatim: test result: ok. 14 passed; 0 failed; 0 ignored; 0 measured; 299 filtered out; finished in 3.70s
RED · green
Focused all-target Clippy then stopped on a 114-line prepare function and a parser entry point after the inline test module. Extracted the single online-copy operation and moved parser/test declarations; rerun queued. No commit/push or final gate claim yet. VM acceptance, size deltas and native qualification remain pending.
Updated continuation source archive, superseding the earlier UNCOMPILED/RED draft. Restoration is now installed; the 14-test passing receipt is above. Since that receipt: extracted online-copy helper for Clippy, fixed declaration ordering, explicitly selected DELETE journaling for the standalone copy, and strengthened the twenty-update disk-byte assertion. These final deltas still await the focused rerun (queued PID 411603, session 64610). Resume helper d295-post-green-gate.sh acquires build-slot and runs only the post-green checks; NEVER replay the earlier RED mutation driver.
Current green recovery source, pending lint/integration qualification
No new shipping commit yet; rebased HEAD remains
bf5547593. No final gate, size or VM acceptance is claimed.D295 scheduling risk: the current focused/iterate driver (PID 932481, session 9620) has been queued for 16:23. Earlier admissions also waited roughly 23 and 38 minutes. These are scheduling receipts, not performance measurements. First 14 recovery tests passed; a later all-target Clippy pass and API tests passed, then added RED assertions reproduced rollback-pause loss and clean-exit restart coverage. Fixes are in the worktree; the rerun is awaiting capacity. No slot limit was bypassed and no other job was stopped. Signed staging, shipping size, native qualification, final fast and atomic commits/push remain outstanding. The 1–2 day target depends on enough build and perf-lock capacity for those remaining gates. Continuing autonomously.
Additional failing-first findings and source repairs (rerun pending):
Rollback-pause RED · Restart RED, including the two fixture-environment failures. API check passed: 39 unit tests (1 ignored) + 2 integration tests, including the bounded disk-refusal acknowledgement: receipt. Build-host runner durations are operational logs only.
Current managed gate: PID 932481 / session 9620, source-repair request path scratch/d295-repair.request. Green source has all repairs; no final acceptance or shipping commit is claimed yet.
D295 recovery is pushed through
7ef436eeb, rebased on dev41a3a81ab. Rejected drafts remain local only on edge-autoupdate-recovery-drafts (5f39b7e0a).Atomic steps:
7bde610fdshared exact-file hashing;08be619cdbounded disk-full reply;8700101f9existing SQLite backup bridge feature;3e20c0a3creverse-transition validation/pause preservation;9fe01279efinal-admission capture and check-in-before-collection;b95f4201cpersistent undone-update Inbox;a82b58f5eone-copy recovery;7ef436eebstable service restart path/health deadline. No new encryption or recovery supervisor.Current focused gates: API 39 unit + 2 integration pass (1 ignored); release 36 unit + 3 integration pass (3 ignored); recovery 14 pass; server release 26 pass (4 ignored); CLI 83 pass (1 ignored); touched crates Clippy pass. Recovery covers real SQLite migrations, WAL-only committed data, interrupted publication/restoration, disk-full refusal, explicit rollback and 20 updates (2 images + 1 copy).
Receipts: recovery, release, CLI, Clippy.
Iterate: fmt, VT fmt, CLI compile-out, Clippy, cargo-deny PASS; workspace test FAIL: 534 passed, 1 failed, 51 ignored. Only failure is responsive_socket_survives_a_held_terminal_open_with_an_existing_attachment at socket_clock.rs:87, observed-event watchdog. Detached origin/dev baseline comparison queued in the same host-load window; no waiver claimed. Staging migration assertions/parser fuzz/docs remain uncommitted pending their gates. VM acceptance, both shipping sizes/native qualification, final fast remain required; scheduling/build-slot contention threatens the 1–2 day target.
Author review at
c0f1e1ff0found two additional recovery ordering edges; tests are uncommitted and queued to fail before fixes:Pending fix source is outside the checkout at ~/.cache/codex-scratch/edge-autoupdate/d295-cancellation-{update-recovery,release-startup}.rs; apply only after the RED receipt. Build-slot queue exceeds 16 minutes. The managed driver d295-qualification.sh runs baseline comparison, RED, a bounded five-minute repair window, then GREEN/iterate, both shipping builds, current-dev baseline build, staging preparation and parser fuzzing. No new production or performance claim. Docs pushed at
c0f1e1ff0.Three additional D295 regressions reproduced before their fixes: 14 pass / 3 fail. RED receipt.
Failures: cancelled preparation deletes the previous healthy marker; oversized escaped paths publish an intent the bounded reader rejects; after a later failed update, rollback of the last healthy update refuses despite its retained database copy. Fix applied, not yet committed: publish only at final arm; preserve the previous marker on cancel/kernel refusal/abandon; consume inherited descriptors even when fallback restores no marker; bound serialized marker publication; pin/hash the private retained rollback copy independently of a later attempt’s marker. Signed image selection remains the caller’s existing verified path. No new encryption or supervisor.
Baseline comparison first rejected an unsupported feature flag (dev has no backup feature); corrected to dev’s remote feature and currently building. This harness error is not a baseline test result. Own allocated slot is sequencing that comparison before the green/iterate run. Rust qualification began after ~31 minutes queued.
Existing publication admission: 14 pass (receipt); staging artifacts: 3 pass (receipt). No new VM timing or acceptance claim.
Qualification correction: sharing a Cargo target between the detached dev checkout and this worktree reused incompatible local protocol artifacts (missing infraternal_protocol::machine). Discarded the contaminated green/iterate outputs, invalidated workspace artifacts, and assigned future baseline builds their own target-baseline directory. The earlier completed baseline socket receipt remains the comparison: exact same observed-event watchdog failure as the branch (links below).
The rebuild then stalled on the host’s shared compiler cache: 29 sccache processes and no rustc process were present. Disabled RUSTC_WRAPPER only in this job’s managed driver (same pinned compiler/flags), stopped only this job’s waiting clients, and resumed in the already allocated build slot. No shared cache daemon or other job was stopped. Current driver: ~/.cache/codex-scratch/edge-autoupdate/d295-no-cache-resume.sh. Recovery GREEN, clean iterate, sizes, VM acceptance and final fast are still pending.
dev baseline socket; branch iterate. Both fail only responsive_socket_survives_a_held_terminal_open_with_an_existing_attachment with “socket test stopped before its observed event”; baseline at socket_clock.rs:81, branch at :87. Applying the brief’s explicit baseline exception to this failure only.
Pushed
1ac528e18: transactional marker publication/fallback, bounded marker serialization, and rollback after a failed later image. All 17 real SQLite recovery tests pass (GREEN); the three failures before fixes are attached above. Clean fmt and workspace/all-target Clippy pass. Full iterate tests are running under the allocated build slot with RUSTC_WRAPPER disabled only for this job. Staging test assertions and parser fuzz harness remain uncommitted pending their dedicated gates. No VM acceptance, shipping-size or final-fast claim yet.Harness correction, no product change: the clean iterate run had 535 server passes and 3 setup-token failures from SUN_LEN. TMPDIR was the long job directory; a first shortened root still produced 111-byte paths. The exclusively created job-owned alias ~/.cache/codex-scratch/ea (marker .edge-autoupdate-owned) produces 107-byte paths. With TMPDIR set there, the workspace runtime filter passes 47 tests, 4 ignored, including all three setup-token regressions (receipt).
The unkeyed staging compile was refused by its public-authority build guard. Removed that invalid invocation; staging-proof --prepare-only will create its ephemeral in-memory fixture signer, supply only the public build key and compile the correct harness. This is not a signed-path bypass or a test pass.
Current managed driver
/.cache/codex-scratch/edge-autoupdate/d295-qualification-v3.sh; RUSTC_WRAPPER empty, INFRATERNAL_TEST_STATE_ROOT=/.cache/codex-scratch/e211, TMPDIR=~/.cache/codex-scratch/ea. Full iterate running, then shipping builds, isolated dev target-baseline build, signed staging preparation and parser fuzz. Head still pushed1ac528e18. Final fast and VM receipts remain outstanding.Clean scripts/verify iterate PASS at
1ac528e18; full transcript. Server tests: 538 passed, 0 failed, 51 ignored. All Rust gate rows pass; TypeScript/Svelte checks pass. This run needs no baseline waiver. This is not the final fast gate.Pushed
2de5e165bseparately: enable the existing release feature in the fuzz harness dependency; no new package/engine. Marker target and documentation await the instrumented run. Normal production x86_64 and ARM builds are underway, then an isolated dev baseline build and signed staging preparation.Native qualification is prespecified as 20 alternating-order interleaved A/B pairs (100 samples per phase), using fresh production-recipe artifacts against dev
41a3a81ab. This exceeds the required 10 pairs because the older diagnostic ten-pair confidence interval did not rule out a one-frame regression. Preserve all original budget failures and paired intervals; do not turn a matching baseline failure into an unqualified budget PASS. Every measurement will run under the perf-VM lock; no build-host performance evidence.Further author-review finding in
1ac528e18: manual rollback now hashes the retained copy afresh. A valid SQLite copy modified since capture would be blessed by that new hash; quick_check cannot establish the original bytes. Added failing-first real-SQLite regression a_changed_but_valid_rollback_copy_is_refused_after_a_later_failure; awaiting the active ARM build before running it in the allocated slot.Proposed narrow internal format change before implementation: retain ONE prior healthy copy coordinate (version + original SHA-256) in the existing small transaction marker while a later attempt is armed/undone. Verify against that original digest on rollback; clear the older coordinate only at successful check-in. One JSON marker, existing online copy and hasher; no additional file, encryption, supervisor or certificate recovery. Bump the unpublished update compatibility note from format 1 to 2 so incompatible predecessors refuse before exec. All staging images will be rebuilt with matching format-2 support. The generic private-resource contract and signed release format are unchanged.
Normal pre-fix x86_64 shipping artifact: 20,833,408 B vs dev cap 21,422,096 B (-588,688 B), production-trust PASS, stripped static PIE, no PT_INTERP. This artifact is NOT the final qualified head: checksum retention will be gated and both shipping artifacts rebuilt. No size ceiling raised; no optimization profile change planned. Current driver will continue through d295-integrity-slice.sh after the ARM loop, with a behavioral-RED guard before applying the prepared fix.
Pushed
09999225d: retain the original rollback checksum through a failed later attempt; one bounded coordinate in the existing marker, cleared at successful check-in. Manual rollback and offline undo share exact-file checksum admission. Compatibility note format 2; no new file, encryption or supervisor.Changed-but-valid SQLite copy reproduced before the fix (RED); all 18 recovery tests pass after it (GREEN). Full suite: 539 server passes / 0 failures / 51 ignored. The initial 117-line function Clippy failure was repaired by sharing checksum admission and factoring marker-coordinate selection; fresh workspace/all-target Clippy passes (receipt).
Fresh normal production-recipe artifacts at this head: x86_64 20,835,264 B (-586,832 vs dev cap), ARM 19,136,400 B (-458,456). Original-checksum fix cost +1,856 / +1,936 B against the prior build. Both pass production-trust checks and contain update format 2; recipe and SHA-256s attached. No cap or optimization profile raised. Final downward size ratchet will follow acceptance.
UI/backend copy remains: ready item/toast “Update ready · ”, controls “Update now” / “Roll back”; failure “Update to failed and was undone”; disk refusal “Not enough disk space to copy the database before updating”. Rollback restores the database copy from before that upgrade, so later database changes are undone (D155). Healthy handoff retains unlocked CA custody; a cold crash restart leaves it locked (D168/D295). UI work remains deferred.
Isolated dev baseline build running; signed VM acceptance, native pairs, parser fuzz and final fast remain outstanding.
Resuming D295 on edge-autoupdate. Prior head
0490aff70; rebased cleanly onto origin/dev1bcb7a87b, current headdc9e778681. Preserved the two uncommitted staging-test files. Existing 18 recovery tests and restore-before-open path will be requalified. Latest VM fixture stops on the first post-stage input acknowledgement (offset 29, last seen 2); no new acceptance or timing claim. Detailed logs stay in scratch, console reads limited to summaries. Next: isolate input continuity, complete migration/restore staging, sizes/native qualification and final fast via build-slot. No production deployment.Rebased head
dc9e77868includes dev healthy-route scheduling fix1819a23b7; retained staging images predate it and cannot qualify the rebased branch. Focused recovery suite: 18 passed / 0 failed. The first staging filter omitted remote and matched 0 tests; discarded as evidence. Corrected failing-first idle-pump test is queued through build-slot. Author review identified permanent pump using Browser::read's 15-second application-output deadline during deliberate 20-second idle intervals; dedicated virtual-clock regression is pending. Existing VM runs remain failed, no acceptance claim. Build-slot contention remains a schedule risk for the 1–2 day target.Pushed
a75761b80on edge-autoupdate after rebasing onto dev1bcb7a87b. Atomic fixture-only fix: permanent application pump no longer applies the assertion reader's 15-second output deadline during healthy quiet intervals; assertion waits remain bounded. Virtual-clock test reproduced before repair (0 pass / 1 fail), then all six pump tests pass, including acknowledgement consumption after silence. Browser loop test 1 pass; touched-server remote/all-target Clippy pass. Earlier zero-match module filter is discarded, not a green suite.resume-idle-red-remote.log
resume-fixed-pump-tests.log
resume-fixed-clippy.log
Rebased SQLite recovery suite remains 18 pass / 0 fail: resume-recovery.log
Fresh signed staging image SHA-256 4aaa212462309fe97630be1f9c492f4bbab15b30545b1eeb9d5118e0e9a62aae; full 128-route + managed-host VM acceptance is waiting for the perf lock. Ordinary-trust sizes/native qualification and final fast remain pending. No production deployment.
Pushed
7136a54ad: staging service now starts through the installed stable link with Restart=always, drops its fixture-only SQLite connection before offline restoration, and asserts failed-update Inbox copy plus removal of the successor migration and compatibility with the old migration set. Production recovery wiring is unchanged.Perf VM route-isolation run: 50 users, 10,000 nodes, 128 real PTYs / 128 attached routes. Main scenario PASS (1/1); browser-service control PASS (1/1). Typing observed until 60,879.325 ms; quiet application at 124,228.559 ms; final-input-to-apply 63,349.235 ms against configured 60 s. Rollback 3,302.803 ms; Update now 3,377.748 ms; real migrated-successor failure restored the predecessor and database in 4,723.099 ms. All 128 shim PIDs survive. Healthy swaps keep CA unlocked; cold failure restart locks it as D295/D168 require. Listener probes DISABLED in this isolation run: its zero-gap fields are not gap evidence.
The earlier combined managed-host run is retained as FAILED before staging: fourth attached route received a server-level close (frame_refused, 3 existing attachments). Not waived as noise. Combined 128-route + managed-host + listener-probe retry is underway; if it recurs, fixed-label diagnostics are prepared outside the checkout.
resume-staging-routes-vm.log
resume-staging-full-vm.log
Ordinary-trust builds, native pairs, downward size ratchet and final fast are pending. No production deployment.
Combined retry progressed past all 128 attachments and the quiet server swap, then the fixture's 90-second host convergence wait elapsed before download completion. VM progress: no receiving file at 70,005.812 ms; 7,487,488 of 20,875,773 bytes present at 80,036.953 ms. This is a fixture deadline including reconnect + verified transfer, not the production post-exec check-in deadline. Preparing a bounded 180-second functional wait so the real transfer can finish; the production thirty-second host watchdog and 120-second server health deadline stay unchanged. No throughput or final host-convergence pass is claimed yet. Earlier combined attachment refusal remains recorded. Fresh harness will rerun under the perf lock.
Perf VM listener regression PASS at pushed head
7136a54ad(same signed staging bytes as the 128-route recovery proof): 128 live PTYs, 128 surviving shim PIDs, CA unlocked, 0 refused TCP probes, observed listener-gap bracket 0.000 ms, maximum probe interval 5.313 ms, measured four-RTT + 50 ms allowance 52.290 ms. The isolated listener case has no active attached routes; combined attached-route/listener/managed-host acceptance is still pending.Rebased iterate failed only pty::child_locale_tests::spawned_login_shell_receives_selected_locale_without_other_host_variables (selected locale assertion); its package had 82 pass / 1 fail / 13 ignored. fmt, VT fmt, CLI compile-out, Clippy and cargo-deny pass. No waiver: rerun the locale regression with this job's isolated ZDOTDIR profile before the final full gate. Owner startup files are not read or changed.
resume-listener-vm.log
resume-staging-combined2-vm.log
resume-iterate.log
Production ordinary-trust builds remain running in the allocated slot; both size deltas, native pairs and final fast are outstanding.
D295 staging found an additional continuity edge after rollback: the managed host follows B in 12,825.277 ms with the same daemon/shim PIDs, then follows A's signed image, but its new terminal echo times out after the database rollback (managed_update_staging_tests.rs:464). The server database restores terminal_writers' AUTOINCREMENT state while the surviving shim keeps post-backup writer cursors. A newly allocated writer can therefore reuse an identifier already used by a different browser after the snapshot, and the shim can trim new input as a duplicate. Preparing a focused real-SQLite failing test before the repair. This is distinct from the pending 128-route acknowledgement diagnostic.
Proposed narrow internal change before implementation: keep a monotonic terminal-writer high-water mark in the EXISTING small D295 transaction marker; reserve bounded ID blocks durably before committing new writer rows, merge the watermark under the marker's publication lock, and advance SQLite's writer sequence before serving a restored database. No extra recovery file, database copy, encryption, supervisor or CA/TLS restoration. Existing signed image admission remains unchanged; bump the unpublished private recovery compatibility note if the required marker field changes. Normal typing gains no work; measure attachment effects at 128 routes on the perf VM.
The ordinary images remain x86_64 20,835,264 B and ARM 19,136,400 B, but they precede this repair. Stopped the preliminary native A/B runner by its owned PID; its partial receipts will be preserved, not claimed as final qualification. New shipping images and interleaved pairs must follow the repair. This newly exposed D128/D295 interaction threatens the 1–2 day target; keeping the fix confined to the existing marker/allocator path.
Writer reuse now reproduced behaviorally before repair: real SQLite backup/undo allocates the same ID retained by the live-terminal model (0 pass / 1 fail). resume-writer-red.log
First repaired recovery run: 24 passed / 0 failed. resume-writer-green.log
Uncommitted fix uses only the existing transaction marker: 4096-ID durable reservations, monotonic merge under the marker publication mutex, and SQLite sequence fencing before serving a restored or restarted database. Reservation precedes the writer-row commit; steady typing has no new work. No extra recovery file/copy, encryption, supervisor or CA restoration. Private unpublished update note/marker format 3; mixed formats refuse before handoff. Tests cover stale phase publication, healthy restart, retained-copy undo, invalid metadata, exhaustion and absence of an update record. Offline restore also removes an old rollback journal before the atomic database replacement.
The first Clippy pass found only function-length limits in startup and prepare; factored the existing selection step and reused the private SQLite-file checker. Fresh focused tests/Clippy plus signed format-3 staging are queued. A new perf-VM-only 128-writer WAL/NORMAL benchmark will compare direct inserts, no update record and committed-marker reservations. The 128-route durable-ack stall remains under fixed-label diagnosis; no native or final-gate pass claimed.
resume-staging-convergence-vm.log
resume-transport-vm.log
resume-locale-isolated.log
Additional bounded-disk regression reproduced before repair: after a later failed attempt is undone and the healthy predecessor checks in, its failed-attempt preimage remains beside the current binary in addition to the older healthy rollback copy. Test healthy_predecessor_checkin_keeps_only_the_retained_rollback_copy reproduced (0 pass / 1 fail). Repair reuses check-in cleanup to remove only that redundant current-image preimage after a durable undone marker; the older verified rollback copy remains.
Current focused SQLite recovery suite: 25 passed / 0 failed / 1 ignored (the new perf-only counter benchmark). Server remote+staging/all-target Clippy PASS after reusing Marker::needs_entry and the existing private SQLite-file checker plus factoring startup selection. resume-redundant-copy-red.log
resume-writer-green.log
Format-3 staging build with fixed-label input receipts is running in build-slot. Temporary receipt changes remain uncommitted and will be removed before ordinary shipping qualification. Current driver: ~/.cache/codex-scratch/edge-autoupdate/resume-writer-complete-build.sh; its writer-reuse and redundant-copy RED guards have ALREADY run and repairs are applied—do not replay that RED/apply prefix on resumption. The prior partial native receipts are preserved under evidence/pre-writer-reservation-native and are not final qualification. Next: counter overhead/rollback echo on the locked VM, pinpoint 128-route acknowledgement stall, atomically commit/push the tested slices, then new sizes/native pairs and final fast.
Head
78b313a4fpushed: public operational transition metadata can be cloned for serialized atomic marker publication. Release tests 39 passed, CLI 83 passed; touched release/CLI all-target Clippy passed. Recovery implementation and tests are still uncommitted.Format-3 staging fixture (instrumented, not final shipping qualification): full managed update scenario passed at 128 real PTYs/attached routes, 50 users and 10,000 nodes. Host follow/rollback, quiet window, typing deferral, immediate apply, startup refusal, and schema-change recovery all passed. 128 shim PIDs survived; CA remained unlocked during healthy switches. Listener: zero failed probes, bracket gap 0.000 ms, maximum probe interval 25.510 ms. Refused host startup restored in 30,550.049 ms from observed refusal; server schema-failure recovery 4,920.517 ms.
Separate transport128 still stalls. Trace follows the unmatched input through server/backend forwarding, with no backend acknowledgement. Native shim State replies can subsume cumulative InputAck; daemon currently forwards only probe Pong and discards State.written. Adding a deterministic Unix-socket regression before repair; no protocol change or timeout relaxation. Temporary server tracing has now been removed.
fmt3-managed-vm.log
fmt3-transport-vm.log
Deterministic failing-first native Unix-socket regression reproduced the transport input stall: shim InputState(2,2) legally subsumes InputAck(2), but the daemon emits only Pong. The browser's durable acknowledgement never advances while liveness remains healthy. Test terminal_probe_preserves_coalesced_input_progress_without_duplicate_acks failed at the expected cursor assertion before repair.
Patch forwards advancing cumulative State.written before Pong, also handling a parked-link relink; unchanged probes do not generate duplicate Acks. Explicit output/replay rebinds retain their mandatory acknowledgements. No wire/schema change, no expanded timeout. Daemon tests and all-target remote+release Clippy are queued; VM transport acceptance must be repeated with a new uninstrumented artifact.
resume-fence-red.log
Committed and pushed
3602d39e5: cumulative shim State progress now reaches the server before probe Pong and after parked-link reconnect. Direct shim acknowledgements and mandatory replay/rebind acknowledgements retain their existing delivery semantics; unchanged idle State probes add no duplicate acknowledgement.Failing-first regression was reproduced before repair. Final native daemon feature-enabled suite: 113 passed / 0 failed / 14 ignored. Remote+release all-target Clippy PASS; formatting PASS. These are functional checks, not VM latency qualification. New ordinary staging artifacts are next.
resume-fence-final-tests.log
resume-fence-final-clippy.log
Committed and pushed
feae8c482: format-3 recovery marker durably reserves terminal writer IDs before row commit; startup/restore floor the sequence and phase publication merges concurrent reservations. Reuses the existing marker, backup and private-file paths. Removes stale rollback journals before database reopen. No new encryption, supervisor, dependency or terminal Input writes.Per-commit gates: formatting PASS; existing real-SQLite recovery suite 18 passed / 0 failed; server remote all-target Clippy PASS. New failing-first identity regressions are being committed separately next. Logs: ~/.cache/codex-scratch/edge-autoupdate/evidence/resume-writer-module-{fmt,tests,clippy}.log. VM counter/transport and ordinary shipping sizes still pending.
Committed and pushed
c26a20b77: six real-SQLite writer identity regressions cover undo with surviving shim cursors, retained-copy rollback, healthy restart/stale phase publication, refusal before unreadable reservation commit, exhaustion, and absent/in-memory marker behavior. Failing-first original case receipt is attached above.Per-commit gates: formatting PASS; recovery suite 24 passed / 0 failed; server remote all-target Clippy PASS. Logs: ~/.cache/codex-scratch/edge-autoupdate/evidence/resume-writer-regressions-{fmt,tests,clippy}.log. Next independent step removes redundant failed-attempt preimages only after healthy predecessor check-in.
Committed and pushed
2adb68940: healthy predecessor check-in retires the redundant failed-attempt preimage after durable undo; the older healthy verified rollback copy remains. The focused regression failed before repair (receipt attached above).Per-commit gates: formatting PASS; recovery suite 25 passed / 0 failed; server remote all-target Clippy PASS. Logs: ~/.cache/codex-scratch/edge-autoupdate/evidence/resume-copy-cleanup-{fmt,tests,clippy}.log. No extra recovery process, identity restoration or encryption was introduced. Next are release-profile VM measurement and new uninstrumented staging qualification.
Committed and pushed
a3492d17d: writer-cost benchmark uses ten alternating-order waves of 128 real SQLite writers in three admission modes. The staging tool requires --release-harness for this case, records cache profile, refuses profile mismatch, and measures under the locked VM scope with CPUWeight=10000. Receipts include debug_assertions so a debug diagnostic cannot be mistaken for final qualification.Per-commit gates: formatting PASS; recovery suite 25 passed / 0 failed / 1 ignored (VM-only benchmark); server remote all-target Clippy PASS; three artifact functional tests PASS; actual debug writer-cost invocation refused with ValueError before build/VM work. No new timing result yet. Logs: ~/.cache/codex-scratch/edge-autoupdate/evidence/resume-benchmark-*.log.
Committed and pushed
3d39279a6: managed-host fixture separates functional transfer convergence from the existing post-exec watchdog, and requires observed refusal-to-restoration within 45 seconds. Shipping watchdogs stay unchanged. The earlier full format-3 VM proof observed 30.55 seconds from refusal (attached above); final uninstrumented proof is next.Per-commit gates: formatting PASS; server remote+staging-trust all-target Clippy PASS; deploy_staging::updates 6 passed / 0 failed. Logs: ~/.cache/codex-scratch/edge-autoupdate/evidence/resume-managed-{clippy,tests}.log.
Committed and pushed
b38ab871b: operational documentation now explains durable writer reservations and failed-attempt preimage retirement. Source tree is clean. Fresh release-profile signed staging preparation is running under build-slot; its queued VM driver runs transport128 first, then writer cost, managed recovery/listener acceptance and retention under the exclusive perf lock. Final ordinary sizes/native A/B and scripts/verify fast remain pending.Resume state at
b38ab871b(clean, pushed): all source repairs are committed. Do NOT rerun resume-commit-chain.sh from the beginning: its temporary test extraction steps have already been committed. Active build-slot continuation is resume-commit-chain-continue.sh, currently preparing fresh uninstrumented signed fixtures with --release-harness under resume-fence-staging. Its progress receipt is evidence/resume-commit-chain.log; success ends with Uninstrumented release-profile staging prepared.Queued lightweight drivers: resume-final-vm.py waits for that marker, then runs transport128 → writer-cost → full managed recovery/listener proof → retention under the perf lock, saving final--vm.log and driver logs. resume-final-production-wait.py then runs resume-final-production.sh through build-slot: isolated-shell iterate, ordinary production-trust x86/ARM artifacts, exact sizes/hashes. resume-final-native-wait.py starts the fixed twenty-pair AB/BA qualification only after ordinary artifacts exist and transport128 passes; native pair receipts use resume-native-pair-.log. Baseline remains detached dev
1bcb7a87b; original preliminary pre-repair receipts remain under evidence/pre-writer-reservation-native and are not final evidence.Prepared but NOT started: resume-final-cap-and-fast.sh ratchets both exact measured caps, commits/pushes, then runs scripts/verify fast on that head through build-slot. Inspect ordinary artifact measurements first. Current remaining work: inspect fresh VM acceptance, native pairs/CI, exact size deltas, cap ratchet and final fast; attach receipts and quote final gate summary verbatim; stop for independent break-it review. No merge/deploy.
Fresh uninstrumented signed staging preparation completed at source
b38ab871b. Public cache: ~/.cache/codex-scratch/edge-autoupdate/resume-fence-staging/public-transfer-9f2b6f47. Harness profile is release. Staged x86 artifact: 20,888,224 bytes, SHA256 c84cfc8f1a3f6b6ca1f48b595cd1b8bf98ccfc530722cb8b16f044df38da1844. This is a staging-trust image, not the ordinary production size result.VM transport128 is now queued/running against that exact cache. Additional exact attachment/listener review cases are queued by resume-final-review-vm.py after the main VM qualification driver; receipt evidence/resume-final-review-vm-driver.log. Ordinary-trust iterate/build is queued independently via build-slot. Worktree clean; no extra source changes from the checklist review. First-update snapshot allocation is protected by the existing BEGIN IMMEDIATE ConfigurationLease held through preparation and handoff (updater.rs and local_update::admit_inner); the WAL snapshot regression exercises that reservation.
Fresh source
b38ab871b/ public-transfer-9f2b6f47 release-profile VM qualification:Transport128 PASS: 50 users, 10,000 nodes, 128 real PTYs and attached routes, 13 browser sockets. All 1,024 durable input acknowledgements completed. p50 1.124 ms; p99 5.396 ms; maximum 33.338 ms; existing p99 budget 50 ms. The prior indefinite stall is absent after forwarding cumulative State progress. No timeout or budget was relaxed.
Writer reservation benchmark completed on the locked perf VM under CPUWeight=10000, release profile, debug_assertions=false, SQLite WAL/NORMAL. Ten alternating-order waves of 128 new writers per mode (1,280 allocations/mode):
Cost is confined to new writer admission: median per-writer increase 55.177 us and median 128-writer wave increase 31.097 ms versus direct allocation. One durable reservation covers 4,096 identities; terminal Input adds no marker writes. This cost prevents reuse of surviving shim cursors after database undo; existing-route transport remains below its budget. No separate writer-cost budget is asserted, and native latency A/B qualification remains pending.
Machine: authorized perf VM 10.69.69.208, 4 CPUs, MemTotal 8,069,112 kB. Writer-run load before 3.92/1.71/0.79, after 3.06/1.67/0.79. Full managed recovery/listener proof is running next; exact routes/reconnect cases are also queued.
final-transport-vm.log
final-writer-cost-vm.log
Fresh release-profile managed staging proof PASS at b38ab871b/public-transfer-9f2b6f47: 50 users, 10,000 nodes, 128 attached real PTYs, rootless UID1000 managed host. All 128 shim PIDs survived healthy switches and schema-failure recovery.
Quiet application was deferred by continued accepted input: ready-to-apply 123,853.265 ms, typing observed through 60,713.424 ms, last-input-to-apply 63,139.841 ms against the configured 60,000 ms quiet window. Healthy switches retained unlocked CA custody. Listener monitoring observed zero refused probes; sampled gap bracket 0.000 ms, maximum probe interval 18.925 ms (review reconnect allowance 92.2 ms).
Host followed B → A → B over the verified path. Verified host startup refusal D was restored automatically to B in 30,369.713 ms from observed refusal, with the same PTY shim. Server E made a real schema change and then stopped before check-in: stable restart restored the database before old migrations opened it, posted the exact undo Inbox item, removed the new probe table, and retained all 128 shims. Cold recovery took 4,568.190 ms; CA was locked after the cold restart as D168/D295 require.
The fixture's rollback and Update now timers include host convergence and 128-route custody verification: respectively 17,104.345 ms and 92,261.186 ms; they are end-to-end recovery figures, not pure server switch time. Update now used configured quiet_minutes=5. The queued server-only attachment and listener review cases provide separate server measurements. Retention and native A/B qualification plus ordinary sizes/final gate remain pending.
final-managed-vm.log
Fresh VM retention review PASS at b38ab871b/public-transfer-9f2b6f47: five superseding prepared versions leave one selectable ready image and one retained executable (20,888,253 bytes including the staging version suffix). The real-SQLite twenty-update test separately verifies healthy current/previous images plus one database copy; the failed-later-attempt regression verifies redundant preimage removal after predecessor check-in. Both are in the 25-test passing recovery suite.
Main VM driver completed all four cases with exit 0: transport128, release-profile writer cost, full managed recovery/listener proof, and retention. Exact review routes/reconnect cases are now running separately. Build-host iterate has passed into workspace functional tests; ordinary shipping sizes and fixed twenty-pair native qualification remain pending, followed by cap ratchet/final fast.
final-retention-vm.log
All six fresh release-profile VM cases completed with exit 0 at b38ab871b/public-transfer-9f2b6f47: transport128, writer-cost, managed recovery/listener proof, retention, exact review attachment/routes, exact review reconnect.
Exact attachment case: 128 real PTYs and attached routes. Typing deferred the configured one-minute quiet interval; last-input-to-apply 63,206.501 ms. Server-only Roll back plus custody checks: 3,006.240 ms; Update now plus custody checks: 3,100.753 ms. These omit the managed-host convergence waits included in the broader proof above.
Exact reconnect review: 128 live PTYs and surviving shims, CA unlocked, zero failed listener probes, gap bracket/lower bound 0.000 ms, maximum probe interval 5.786 ms. Its freshly calibrated four-RTT-plus-50-ms allowance was 51.155 ms (tighter than the earlier 92.2 ms review figure). This qualifies listener queue availability, not a claimed TLS handshake latency.
Build-host workspace functional tests are still running in scripts/verify iterate; ordinary production sizes and the fixed twenty-pair native comparison follow. Final fast/head/caps are still pending; no completion claim yet.
final-routes-vm.log
final-reconnect-vm.log
scripts/verify iterate PASS at
b38ab871bthrough build-slot with isolated job ZDOTDIR, RUSTC_WRAPPER unset, TRACER_TEST_PORT=4418 and all build/test state under job scratch. Rust summary verbatim:TypeScript/compiler/production bundle/protocol checks also completed. Final line verbatim:
No host-load baseline exception was needed. Ordinary production-trust x86 and ARM builds are running next; then fixed twenty-pair native A/B, exact size ratchet and final scripts/verify fast on branch head. All six fresh VM acceptance/review cases passed as recorded above.
resume-final-iterate.log
Ordinary production-trust builds PASS at source
b38ab871b(unchanged release recipe/profile/features):1bcb7a87bcomparison artifact (21,421,840 bytes).Both check-production-trust checks passed. Exact source heads, artifact SHA256 and build recipe are attached. D243/D264 require a downward ratchet with no allowance: next commit sets rust.sh and PROCESS.md to exactly 20,852,608 / 19,151,104 bytes, exercises exact/+1/shrink boundaries, and pushes. This is a numerical ratchet, with no build-profile, feature or trust changes.
The fixed twenty-pair AB/BA native comparison is starting on the locked VM from these retained ordinary binaries, 100 samples per phase, with environment/load recorded for every run. Raw files are evidence/resume-native-pair-*.log; source/binary metadata is evidence/resume-native-artifacts.json. The cap commit changes only gate/docs; final fast runs on that new head while the native measurements continue. No source changes after acceptance are planned.
resume-final-production-artifacts.json
Native qualification finding, preliminary only: first complete interleaved pair has all eight metrics with n=100 on both actual frozen dev
1bcb7a87band candidateb38ab871b. Both exceed the same-session flood budgets:This does not establish noise or pass the absolute native budgets. Continue the prespecified twenty AB/BA pairs (100 samples/phase) and report all failures plus paired deltas/95% intervals; do not discard failing runs or change budgets. Receipts: evidence/resume-native-pair-00-{baseline,candidate}.log and artifact/head metadata evidence/resume-native-artifacts.json. Production sizes already pass both caps; numerical cap commit/final fast is queued. All six separate fresh staging VM cases passed.
Committed and pushed
d22f19573: D243/D264 ceilings ratcheted to exactly 20,852,608 x86 bytes and 19,151,104 ARM bytes, in both rust.sh and PROCESS.md. No allowance, profile, feature or trust changes. Per-commit formatting, Bash syntax and boundary checks passed. Boundary output verbatim:scripts/verify fast is now running through build-slot on head
d22f19573, using the same isolated job shell/test/evidence roots as the green iterate run. Native A/B uses the retained ordinary artifacts from binary sourceb38ab871b;d22f19573changes only gate/docs, so Rust source is identical. Two complete interleaved pairs are recorded so far; final twenty-pair deltas/95% intervals and every absolute budget failure will be retained. Do not mark native qualification green from early pairs. Worktree clean; all six fresh release-profile staging/review cases already passed.Initial final scripts/verify fast at
d22f19573reproduced one functional failure: remote_client::server_path::tests::component_down_proves_tcp_fallback_when_enrolled_udp_is_unavailable, remote_server_path_tests.rs:676, Disconnected versus expected Fallback. All other Rust rows, including both exact static builds, passed. The full RED transcript is attached; it was moved to evidence/resume-final-fast-initial-red.log and is preserved.Cause in the existing TCP fixture: after sending Hello it read one frame and returned, closing the fallback connection. The additive initial terminal census completes that read immediately, so a healthy link can be closed before its registry assertion. This is not an allowed host-load waiver; repair the fixture lifecycle.
Uncommitted test-only repair consumes the initial census before signalling readiness and drains later control frames until actual peer closure. Same three-second functional deadlines; no production transport or timeout change. Queued build-slot driver resume-census-fixture-gates.sh runs the full agent remote+release suite, all-target Clippy and formatting, commits/pushes this independent fixture repair, then reruns final scripts/verify fast on the new head. Initial gate/cap script must NOT be replayed from the start (caps already committed).
Native twenty-pair qualification continues on the retained ordinary artifacts; this file is cfg(test)-only, so measured production code and all six accepted staging cases are unchanged. Native absolute same-session failures on both dev/candidate remain recorded; final paired results are pending. Current pushed head
d22f19573; worktree contains only this fixture repair.resume-final-fast-initial-red.log
Committed and pushed
c18aaf444: TCP fallback fixture consumes the initial session census before readiness and stays alive until peer closure. Production transport, timeouts and budgets are unchanged. This corrects the real fixture lifecycle behind the preserved final-gate RED, rather than treating it as host-load noise.Per-commit gates: formatting PASS; full agent remote+release suite 113 passed / 0 failed / 14 ignored; all-target remote+release Clippy PASS. Worktree clean. Final scripts/verify fast is rerunning through build-slot on
c18aaf444; evidence/resume-final-gate-head.txt records this head. All earlier static sizes/caps and six VM acceptance cases remain valid because this is cfg(test)-only code; final static artifact hashes will be checked again.Native qualification currently has four complete pairs and continues the fixed twenty-pair plan. Absolute same-session budget failures reproduce on both dev and candidate; no noise/pass claim is made before the full paired summary.
resume-census-fixture-tests.log
resume-census-fixture-clippy.log
Final scripts/verify fast PASS through build-slot on pushed head
c18aaf444. Worktree clean; no host-load baseline waiver. Rust summary verbatim:Final exit line verbatim:
TypeScript compiler, production bundle/transfer checks and protocol tests also completed successfully in the attached full transcript. Exact static caps passed at 20,852,608 x86 bytes and 19,151,104 ARM bytes. Both final static artifact hashes exactly match the ordinary binaries retained before the cfg(test)-only fixture repair, so all six staging VM cases and the ongoing native A/B artifacts remain attributable to this head. Artifact mapping is attached.
Still outstanding before handoff: finish the fixed twenty native AB/BA pairs and report all absolute budget failures plus paired deltas/95% intervals. Five valid pairs have completed so far; earlier same-session budget failures reproduce on both dev and candidate. No native noise/pass conclusion yet. Source/build work is complete, but this is not the final completion comment.
resume-final-fast.log
resume-final-gate-artifacts.json
Current state: pushed head
c18aaf444, clean tree, final scripts/verify fast PASS and both final static artifact hashes match measured ordinary binaries. All six fresh staging/review VM cases PASS; receipts and verbatim gate are attached above.Native fixed twenty-pair qualification continues. Six pairs plus baseline run 06 are recorded; run 06-candidate currently waits in flock -w 3600 before measurement (receipt exists, no ENV lock-acquired marker, zero metric rows, no result yet). This is lock contention, not a measured timeout. Do not start CPU work on another host or change the plan/budgets. Runner holds the lock only per bounded run and releases between runs.
Active orchestration: resume-final-native-wait.py → resume-run-native-pairs.py; stdout evidence/resume-final-native-driver.log, raw evidence/resume-native-pair-*.log, active owned VM run/unit metadata resume-native-active.json. On completion resume-summarize-native.py checks all forty runs have eight n=100 metrics and writes evidence/resume-native-pairs-summary.json (paired deltas/95% intervals and every absolute budget failure). Current first-pair absolute same-session failures are present on both dev and branch; no final noise/pass claim yet.
Do NOT replay cap/commit chains: caps and fixture repairs are committed, final gate is already green. Remaining: finish native comparison, attach raw bundle/summary, classify results honestly, clean owned temporary build targets/baseline, final head/gate report and stop for independent break-it review. No merge/deploy.
Native qualification completed at pushed head
c18aaf444: fixed twenty interleaved AB/BA pairs, forty ordinary production-trust runs, eight metrics/run, 100 samples/phase. No missing/partial finished runs and no discarded budget failures. Baseline is frozen dev1bcb7a87b; candidate binary sourceb38ab871bis byte-identical to the finalc18aaf444static builds (mapping attached above). Both use the same unchanged scripts, release recipe and 300 ms RTT / 30 ms jitter relay.Every paired 95% interval includes zero: no statistically detectable branch regression. Absolute same-session flood budgets fail on BOTH images in ALL twenty runs: echo budget 334 ms, isolation-growth budget 16.67 ms. The other five metrics have zero budget failures on either image. This is baseline-common behavior, not an absolute native gate PASS. The intervals do not prove equivalence and permit material same-session variation; keep that limitation in the independent review.
Intervals are paired Student-t intervals over twenty run-level differences (df=19); medians and paired means are both reported to expose skew. No budget or workload was changed. Machine/CPU/memory and before/after load are in every receipt. Across eighty load observations the 1/5/15-minute ranges were 0.04–2.60 / 0.41–1.90 / 0.66–1.64; measurement stayed on the authorized 4-CPU perf VM under the shared lock and CPUWeight=10000. Lock released between bounded runs. Native driver and strict summary exited 0; owned active-run marker is gone.
The forty raw transcripts, exact artifact/script hashes, complete arrays, paired summary and machine manifest are attached. Final scripts/verify fast is already green on
c18aaf444; all six separate fresh staging/review cases passed. Next: remove only owned temporary build targets/baseline, final head/gate report, then stop for independent break-it review. No issue closure, merge or deployment.final-native-pairs.tar.gz
resume-native-pairs-summary.json
final-native-manifest.json
Final implementation handoff — head
c18aaf4442, branch edge-autoupdate, pushed and clean. Stop here for the independent break-it review; no merge, deployment or issue closure.D295 is wired through the existing verified update path: consistent online SQLite preimage beside the predecessor; stable restart target stays on the previous verified binary until health/check-in; uncommitted attempts restore before database opening/migrations; exact undo Inbox item; bounded images/copies and disk-full refusal. Format-3 marker reservations preserve terminal writer identity across restore. Shim State progress now reaches the server before probe liveness, preventing the reproduced durable-input stall. Initial-census TCP fixture closure was corrected from a preserved failing-first gate.
Acceptance on the locked perf VM: six fresh release-profile staging/review cases exited 0, with 50 users, 10,000 nodes and 128 real PTYs/attached routes. Quiet application after last input 63,139.841 ms against a 60,000 ms test window; typing postponed it. Server-only Update now 3,100.753 ms and Roll back 3,006.240 ms including custody checks. All 128 shim PIDs survived. Healthy handoffs retained unlocked CA custody; zero refused listener probes (maximum interval 18.925 ms at full scale, 5.786 ms in the exact reconnect case, calibrated allowance 51.155 ms). Failed real migration restored before old migrations and recovered in 4,568.190 ms; cold CA stayed locked as required. Host followed B/A/B; its verified refused startup restored in 30,369.713 ms. Transport128: all 1,024 durable acknowledgements, p99 5.396 ms versus 50 ms budget. Writer-cost overhead is measured and reported above, including the 34.615 ms first durable reservation.
Ordinary production-trust sizes and exact ratcheted caps: x86 20,852,608 bytes (−569,488 versus rebased dev cap; −569,232 versus actual frozen dev artifact); ARM 19,151,104 bytes (−443,752 versus dev cap). Final static hashes match the measured ordinary binaries. Exact/+1/shrink boundary tests pass.
Native review evidence: twenty fixed interleaved AB/BA pairs, forty complete runs, eight n=100 metrics/run. Every paired 95% interval includes zero; no statistically detectable change. Absolute same-session flood budgets fail 20/20 on BOTH dev and branch; the other five metrics have zero failures on both. Do not call the absolute native gate green or claim equivalence. Full paired means, medians, intervals, failure counts and all raw runs are attached above for the independent reviewer. This is the requested baseline comparison, with the remaining common budget miss exposed rather than waived silently.
Final scripts/verify fast ran through build-slot on this exact head; no host-load exception. Rust output verbatim:
Final exit line verbatim:
TypeScript compiler, production build/transfer and protocol checks also passed; the full gate transcript is attached. Author release checklist completed: existing approved engines only; strict bounded parser/trust paths retained; private owned storage and verified descriptors; off/cancellation behavior retained; no Worker credentials/production signing keys, new encryption, independent recovery supervisor, TLS/CA restoration or UI work introduced.
Cleanup: removed four owned build targets and the detached baseline worktree; zero owned scratch worktrees remain. Retained selected evidence, ordinary image copies and public signed fixtures for review. Rejected recovery drafts remain on their separate unpushed local branch. No repository report/evidence file was added.
Gate and artifact mapping:
resume-final-fast.log
resume-final-gate-artifacts.json
Native raw data and complete comparison:
final-native-pairs.tar.gz
resume-native-pairs-summary.json
final-native-manifest.json
All six acceptance receipts, earlier RED/GREEN proofs and every completed step SHA are in the comments above. Issue remains open. Independent break-it verdict is the next step.
Independent D295 verification started. Branch review-edge-autoupdate-d295; target/base
c18aaf4442; diff base1bcb7a87b. Reviewing update/undo boundaries and prior EA-01 through EA-05. No implementation fixes, push or deployment. Exact-target scripts/verify fast started through build-slot; receipts under edge-autoupdate-review/evidence. Existing issue and parent histories retrieved; D295 narrows prior recovery requirements.Independent review validation note: the untouched
c18aaf444fast run passed formatting, plugin compile-out and Clippy, then workspace test links failed because numerous object files and dependency archives disappeared from its target/debug/deps directory (ENOENT). Target debug size dropped from multi-GB to 445 MB during compilation. This is not a confirmed source defect or an allowed test waiver; retaining the RED log and rerunning with a unique D295 target directory. No implementation or test edits have been applied yet. Perf-VM native A/B is running separately.Independent perf step at review base
c18aaf444: three fresh interleaved A/B pairs on the locked 4-vCPU VM, 100 samples/phase, unchanged 300 ms RTT relay. Same-session confirmed echo, PTY echo and isolation-growth budgets fail 3/3 on both frozen dev1bcb7a87band candidate; other five metrics have no failures. PTY echo p99 dev=[441.35,421.49,424.91] ms; branch=[443.23,347.47,470.85] ms; budget=334 ms. Audited all forty original receipts: eight n=100 metrics/run, same-session failures 20/20 on BOTH binaries. This confirms baseline-common behavior; it is not an absolute latency pass or proof of equivalence. Retained ordinary artifacts rechecked on VM: x86 20852608 B, ARM 19151104 B, hashes match the recorded artifacts. Fresh independent builds: x86 20852864 B (+256 vs cap), ARM 19151104 B; x86 section growth is rodata only (+256), with an embedded compiler-path difference. No cap changed. Raw receipts and strict audit/summary are under edge-autoupdate-review/evidence; new rollback/deadline tests await the rebuilt harness.EA-06 (P2), independent D295 review of
c18aaf444. The real-SQLite/paused-clock test models a backward wall-clock correction between arm and successor startup. After 121 seconds of process-local virtual time, the unhealthy candidate still has no deadline result: 0 passed / 1 failed. release_startup.rs:178 sleeps persisted deadline minus wall time without a maximum remaining wait, so a one-hour correction permits roughly 3720 seconds. No host clock changed; this is functional timer evidence, not a benchmark. Failing test committed locally as50013bc74on review-edge-autoupdate-d295; no implementation fix or push. Test: update_recovery::tests::review_d295_backward_clock_adjustment_does_not_extend_health_window.Resuming edge-autoupdate at
c18aaf4442(clean tree). Read #211 and parent #157 histories and D295. Local review-edge-autoupdate-d295 is50013bc74and contains only the EA-06 paused-clock regression; the five prior P1 tests/fixes are already in this branch. Revalidate those paths rather than duplicate them. Reproduce EA-06 first, bound health wait with the process monotonic timer, remove branch-added compiler profile overrides, then baseline/VM qualification and final build-slot verify fast. No production deployment or merge. Logs under ~/.cache/codex-scratch/edge-autoupdate/evidence/.Rebased the lane onto origin/dev
3b2183eaa(237 lane commits replayed); EA-06 test cherry-picked from review50013bc74as d36d6bc39. Rebase retained the newer peer capability bits, path-proof transport binding, shared SQLite writer admission and normalized static compiler driver. Skipped the old size-ratchet commitd22f19573because its artifact bytes predate this base; current dev caps remain 21,300,016 / 19,500,376 B until fresh final artifacts are measured. Removed branch-added CLI/plugin-API optimization overrides in the working tree; release profiles now match origin/dev exactly, so no unqualified profile exception is requested. Focused failing-first clock build and exact-dev comparator build are running through build-slot; no perf result yet. Full logs retained under evidence/delta-*.log.EA-06 reproduced on rebased production base: review_d295_backward_clock_adjustment_does_not_extend_health_window = 0 passed / 1 failed (574 filtered). No host clock change. The persisted wall deadline could yield a 3,720-second wait after a one-hour correction. Fix in progress caps the initial duration at the existing 120-second window; Tokio then owns a monotonic timer. No marker-format, encryption or recovery-process change.
delta-clock-red.log
EA-06 focused GREEN: 1 passed / 0 failed (574 filtered), after the preserved 0 passed / 1 failed RED. release_startup::health_deadline caps the initial duration at update_recovery::WINDOW (120 seconds), then Tokio uses its monotonic timer. Persisted deadlines still shorten the wait; committed/recovered markers retain their existing behavior. Full server, infraternal-agent, release and Clippy gates remain in progress; no final claim or push yet.
delta-clock-green.log
Committed and pushed
27c5205ae(EA-06 clock bound) and777d29562(current staging harness can build the server from an explicit comparison checkout). Rebased ontoc47a438be; its changes after production3b2183eaaare frontend-only. Comparator checkout and ordinary image are explicitly pinned/rebuilt from3b2183eaac. Three rebase composition corrections were folded into their owning commits; recorded hashes prove the tested backend sources stayed unchanged.Focused gates: format and touched all-target Clippy PASS; recovery 26 passed / 1 benchmark ignored; startup 2 passed; release engine 8 passed; listener handoff 3 passed; remote transport 93 passed / 14 ignored; infraternal-agent 132 passed / 21 ignored; release 39 unit + 3 integration passed / 3 ignored. Staging artifact Python checks: 3 passed.
Initial broad server run: 518 passed / 5 failed / 52 ignored. Three failures were SUN_LEN from the long TMPDIR; one checkpoint child required its absent state-root directory; one frozen-socket observation reached its hang bound. Created the required root, restored the short owned TMPDIR, and used two test threads. Unchanged runtime and foreground/liveness cases then pass: 52 runtime + 4 liveness tests (including every initial failure). No host-load exception or final gate pass is claimed. Initial and corrected raw logs are attached.
scripts/verify iterate is running in the managed slot, followed by ordinary static builds using dev's release profiles. Only Cargo.toml's removal of the branch-specific profile overrides remains uncommitted pending measured bytes. VM comparisons, size decision and final fast remain outstanding. No merge or deployment.
delta-clippy.log
delta-server-update_recovery__.log
delta-server-remote_.log
delta-agent-tests.log
delta-release-tests.log
delta-server-initial.log
delta-server-runtime__tests__.log
delta-server-restart_open_liveness_review__.log
Committed and pushed
b2633a6b3. The compiler-input fixture now copies the real scripts/static-cargo driver into its private root and isolates the separate artifact-metadata command. Preserved RED: fixture refused because scripts/static-cargo did not exist. GREEN: all four default/disabled/stable/edge modes use production compilation and preserve the explicit identity. Actual shipping trust, linkage, key-heap and size checks remain unchanged.First iterate stopped only in the unchanged SSH config-isolation fixture (helper start refused). Its isolated package rerun passes 2/2; the same target with the complete workspace feature graph also passes 1/1. No source change or host-load waiver was used for SSH. The initial focused command was corrected to match verify's default test targets rather than include standalone fuzz executables.
Full iterate retry and then ordinary static builds are running in the managed slot. The compiler-profile removal remains the only uncommitted change; no VM qualification or final fast result yet.
delta-static-recipe-red.log
delta-static-recipe-green.log
delta-ssh-config-isolation-retry.log
delta-ssh-workspace-retry.log
Committed and pushed
9819d8981: held-open ordering fixture now advances the configured idle SERIAL_GAP, rather than assuming the fast-route 25 ms cadence. Production's gap remains 26 ms and every response deadline is unchanged. The correlated-reply assertion while terminal creation is held still happens before clock advancement, preserving the original regression oracle.Before: second iterate reached 565 passed / 1 failed / 52 ignored; responsive_socket_survives_a_held_terminal_open_with_an_existing_attachment hit FrozenSocketTime's real-I/O hang bound. Production
3b2183eaahas the same 25 ms fixture expectation against the same 26 ms idle cadence. This is an ordering-fixture correction, not a widened production timeout or a host-load waiver.After: format PASS; all-target server Clippy PASS; 15 liveness tests PASS; all 4 held-open/checkpoint socket tests PASS. Raw outputs attached. Ordinary production static builds now run first with the branch's CLI/API profile overrides removed; full iterate retry follows. VM acceptance, profile/size qualification and final fast are still pending. No merge or deployment.
delta-pacing-clippy.log
delta-pacing-unit.log
delta-pacing-socket.log
delta-iterate-retry.log
D243 finding at
9819d8981: removing the branch CLI/API release overrides produces a normal production-trust x86 image of 22,218,144 B, +918,128 B against dev's 21,300,016 B cap. No ceiling changed; this control cannot ship. ARM's dev-profile control is still building.The permitted profile qualification is now necessary: building the original compact profile as a matched control, without modifying the active dev-profile manifest. The experiment records explicit per-package compiler overrides and artifact hashes. Next measure all three requested hot paths on the locked perf VM: keystroke echo, credited output throughput and real TCP/mTLS handshakes at 1,000 connected hosts, with interleaved A/B pairs. No claim of runtime equivalence or final size compliance yet. If a profile regression is detected, reduce the change rather than increase a cap.
delta-dev-profile-native.json
delta-profile-removal.patch
Both ordinary dev-profile controls at
9819d8981completed with production trust PASS. Profiles exactly match production3b2183eaa:These controls are not shippable; no cap changed. Artifact SHA-256s, source head, manifest digest and the pending profile-removal patch are recorded in the attached metadata. The original compact profile and two release-profile real-TLS harness controls are building separately. Ten paired A/B runs per hot-path workload on the locked perf VM will test the explicitly permitted profile exception. Full iterate with the corrected pacing fixture is also running; final fast is outstanding.
delta-production-artifacts.json
delta-trust-x86_64-unknown-linux-musl.log
delta-trust-aarch64-unknown-linux-musl.log
Head
9819d8981. The matched compact x86 control is 20,516,064 bytes: 1,702,080 bytes smaller than the dev-profile control and 783,952 bytes below the unchanged dev cap. Runtime qualification is predefined as 20 interleaved A/B pairs per phase (expanded before collecting data): keystroke echo, three output payloads, byte-verified credited output, and 1,000 real TLS host handshakes. Same source/toolchain; only the existing branch compiler overrides differ. Builds remain local; measurements will hold the perf VM lock only for each workload. No profile decision or size waiver yet. Full iterate is still running.Started ten interleaved native latency pairs on the locked perf VM: production
3b2183eaacversus head9819d8981with its committed compact profiles. This uses the already-built compact control while the matched profile harnesses compile. All absolute gate misses and all samples will be retained. This is provisional qualification: if the compiler profiles change after their separate runtime comparison, rerun against the final executable. No caps raised.Head
9819d8981iterate: server 565 passed, 1 failed, 52 ignored; failure remote_runtime::tests::standby::control_queue::saturated_native_control_queue_does_not_hide_primary_terminal_output at remote_control_queue_tests.rs:229 (live connection already closed). Isolated rerun with --features remote passed: 1 passed, 0 failed, 574 filtered; CONTROL_SATURATION active=true queued=1 native_primary_live=true shadow_output=0. Initial invocation without remote was excluded from evidence. No waiver or production behavior change; final full gate remains required. Full and focused logs retained under edge-autoupdate/evidence.delta-iterate-pacing.log
delta-control-queue-remote-rerun.log
Head
9819d8981, clean worktree. Both matched profile controls and release harnesses built. Qualification drivers are active, waiting on the shared perf VM lock between workloads (flock -w 3600), with 3/20 native runs and 1/160 profile workloads complete so far. Native pair 00: production and candidate both miss the three same-session flood budgets; candidate is slower in this single pair, so no noise/no-regression conclusion yet. Candidate signed staging executable built; release harness and ordinary ARM build are pending build slots/compilation. No local timing substituted, no budget/cap changes, no final gate claimed.Profile qualification setup finding: bench-agent-output.py stopped in client.until(shim-test) before any payload/timing row. Perf VM login shell does not consume the isolated zsh profile; verify-agent-flood.py had the same prompt dependency. Preserved the interrupted run under evidence/delta-profile-prompt-refused (including two complete echo controls, not pooled into the restarted comparison). Removed only the prompt waits: both scripts already send a split printf marker command and consume it before starting their timers. Workload sizes, credit and payload checks are unchanged. The owned queued perf-lock process was identified by its exact run command and stopped by PID; its scope/run directory were cleaned. Native production comparison continues independently. Will validate both output paths on the VM before committing this fixture correction, then restart the predefined 20 profile pairs with the corrected setup.
Restarted the predefined 20 profile pairs after fixing prompt admission (no throughput sample existed in the refused setup). Each matched pair now holds one lock for its eight sequential workloads, capped at 240 seconds, with a separate CPUWeight=10000 scope and raw receipt for each workload; releases the lock between pairs. This keeps the paired variants adjacent and avoids 160 separate lock-queue waits. Upload/build/receipt transfer remain outside the lock. Same source artifacts, n=1000 echo, 50 MiB output, 1000 TLS hosts, AB/BA alternation; all budget misses retained. Any incomplete workload stops qualification. Corrected scripts are still uncommitted until the first VM pair validates both output paths.
Committed and pushed
b0361d607d: output measurements now fence shell startup with their existing ordered marker command, without a zsh prompt dependency. RED: VM dev-profile output refused before payload at client.until(shim-test). GREEN: both dev/compact controls completed LF/CRLF/PRINTABLE 50 MiB each and the separate byte-verified credited flood; all exit 0. Both 1000-real-host TLS cases also passed. Python syntax (2 files) and git diff --check passed. First corrected pair is validation only for this fixture change; all 20 predefined profile pairs still run before the compiler-profile decision. Rust source/artifacts remain those from9819d8981.delta-profile-00-output-dev.log
delta-profile-00-output-dev.log
delta-profile-00-output-compact.log
delta-profile-00-payload-dev.log
delta-profile-00-payload-compact.log
Before a compiler-profile decision: corrected pairs 00/01 show printable output dev 55.433/56.708 MiB/s vs compact 50.456/46.241 MiB/s; this is preliminary, not a completed regression/noise claim. Original 20-pair matrix continues unchanged. Started building an attribution control with only profile.release.package.infraternal-plugin-api.opt-level restored to dev=3, leaving the CLI override; working manifest untouched. If the API override costs throughput, this control establishes whether a narrower shipping recipe fits the unchanged cap while retaining the existing API hot-path profile. No wider profile change will be accepted from size numbers alone.
Ordinary compact ARM control built at source
b0361d607(Rust source unchanged from9819d8981): 18,834,752 bytes, -665,624 vs unchanged dev cap 19,500,376; check-production-trust PASS. Artifact retained separately from staging. This is a size control only: no cap ratchet or compiler-profile approval while the runtime matrix is pending. Candidate reconnect staging is now exercising 128 real PTYs with listener probes on the locked VM.Candidate exact reconnect review case PASS on the locked perf VM, release-profile staging fixture from Rust source
9819d8981(current script-only headb0361d607). REVIEW reconnect phase=healthy_manual_apply active_routes=0 live_pty_sessions=128 surviving_shims=128 ca_unlocked=true listener_gap_bracket_ms=0.000 probe_max_interval_ms=10.922 failed_probes=0 listener_unavailable_lower_ms=0.000 four_rtt_plus_50_ms=71.703Zero refused probes; maximum probe interval 10.922 ms < calibrated allowance 71.703 ms. This establishes a sampling bound, not an exact zero gap. All 128 live PTY shims survived and the CA stayed unlocked. This isolated reconnect case has active_routes=0; full attached-route acceptance and production transport comparison remain pending. Compiler-profile decision and final production artifact qualification remain pending.
delta-candidate-reconnect-vm.log
delta-candidate-reconnect-driver.log
CLI-only x86 control built with API opt-level restored to dev=3: 20,578,592 bytes, -721,424 vs unchanged cap; production-trust PASS. API speed costs only +62,528 bytes versus compact. Starting a predefined separate 20 interleaved matched dev/CLI-only pair matrix with identical echo/output/byte-validation/1000-TLS workloads and 240-second bounded pair locks. The TLS test executable is byte-identical to the dev control because the CLI crate is not linked there; recording hashes and actual runs, plus native CLI echo/output paths. Original 20-pair compact comparison continues unchanged for a complete attribution receipt. No compiler-profile acceptance or cap change yet.
Working tree now restores the plugin API to dev default opt-level=3 and removes redundant package strip=true overrides; the CLI-only override remains provisional pending its separate 20-pair runtime qualification. CLI-only ARM build started. This conservative restoration avoids retaining an API-wide profile cost for just 62,528 bytes; original 20-pair compact attribution still completes from immutable artifacts. No recipe commit/cap change until qualification. Existing compact staging receipts stay labeled as such; final staging artifacts will be regenerated if the narrower recipe qualifies.
Qualification coverage finding: the library TLS diagnostic changes with the API profile but does not exercise the native CLI link profile; dev/CLI-only harness executables are byte-identical, as already recorded. Those samples cannot justify retaining the CLI override. Added a shared real-enrolled-client fixture by extracting the existing registry diagnostic setup, with a small real TCP/mTLS admission smoke test; fmt/clippy/tests queued. Next is a shipping-executable handshake case at 1000 active hosts, 50 users, 10000 stored nodes, 128 live PTYs, with credential allocation outside the timed region. It will use existing CA/enrollment/TLS code, no new engine or dependency, and no key material in files/logs/argv. CLI-only recipe remains uncommitted until the actual shipping path is qualified. Existing matrices continue for echo/output and API-profile attribution.
ARM CLI-only first build produced 25,426,720 bytes and file reports not stripped. readelf shows .symtab 0x29de88 and .strtab 0x3a0ec3 bytes; this is not an attributed API code increase. Restored the explicit CLI/release package strip=true settings to match the measured native control; earlier characterization as redundant was incorrect for this recipe. Unstripped artifact/build metadata preserved separately. Rebuilding ordinary ARM before any size/cap conclusion. No cap changed.
Committed and pushed
1a72c23cc3: extracted existing real enrolled-client and TCP/mTLS/Hello setup into crates/infraternal-server/src/remote_test_clients.rs; registry retirement tests reuse it. No runtime API/dependency change. Per-commit gates: cargo fmt/check PASS; all-target server Clippy with remote PASS; real two-host admission test 1 passed; retirement tests 2 passed / 1 ignored (VM-only diagnostic). Native shipping handshake diagnostic and CLI profile launcher are now wired but uncommitted, awaiting their gates and a real VM run. Cargo API speed restoration remains a separate uncommitted recipe change.Resuming edge-autoupdate (new worker) at
1a72c23cc, base origin/dev merge-basec47a438be. Previous worker's four uncommitted qualification drafts (CLI-profile launcher, native handshake diagnostic, API opt-level restoration) are kept on local unpushed branchedge-autoupdate-profile-drafts(4618441cf, untracked file in its ^3); tree clean.Partial A/B state recovered from receipts (locked perf VM, AB/BA): compact vs dev profile, 12 pairs: PRINTABLE output median 34.18 vs 41.06 MiB/s, LF 8.08 vs 8.61 MiB/s (paired 95% interval [-1.02,-0.13], slower). CLI-only vs dev, 6 pairs: PRINTABLE 40.14 vs 47.53 MiB/s. Echo/TLS medians within noise. Conclusion: the compiler-profile override is NOT shown harmless; output throughput leans slower. Per the brief it gets reverted.
Size: with dev's profiles the branch image is 22,218,144 B x86 (+918,128 over cap) / 20,322,328 B ARM (+821,952). The real code growth was hidden by the profile change. The shipping default enables
plugin-backup -> infraternal-server/backup -> backup/server (protected-key, encryption, key administration, key copies, private resources), i.e. the encrypted-recovery design that D295 rejected. Next: remove that rejected code from the shipping graph (D295 path lives underrelease, notbackup), rebuild with dev profiles, attribute what remains.Size step 1 (working tree on
1a72c23cc, dev's release profiles exactly,plugin-backupno longer enablesinfraternal-server/backup): x86 static release 21,935,904 B, +635,888 B over the 21,300,016 B cap (was +918,128 with the rejected backup custody linked). The rejected D147/D168 encrypted-custody graph accounts for 282,240 B. The D295 path (update_recovery,release_update,release_startup) sits underreleaseand stays. Build took 44.5 min at load ~33 (nice 19).Next: matched cargo-bloat crate attribution, dev
3b2183eaavs this tree (strip disabled only for attribution), running now.D243 attribution, dev
3b2183eaavs this tree (dev's release profiles exactly, backup custody unhooked), x86 musl, strip disabled only for attribution (cargo-bloat crates + nm symbols):n-nm-diff.txt
n-branch-bloat-crates.json
n-dev-bloat-crates.json
Paused on coordinator order (host load). Pushed head
698f6aee3on edge-autoupdate; tree clean; nothing of mine running.New commits this round:
389b7b0afKeep rejected backup custody out of the shipping server [295,243]:plugin-backupno longer enablesinfraternal-server/backup. x86 static with dev profiles 22,218,144 -> 21,935,904 B (-282,240).698f6aee3Restore dev's release profiles for the CLI and plugin API [243,5]: the A/B receipts do not show the override harmless (compact vs dev, 12 pairs: PRINTABLE output median 34.18 vs 41.06 MiB/s; LF paired 95% interval -1.02..-0.13 MiB/s), so it is reverted per the brief.Per-commit gates: fmt PASS; clippy -D warnings (infraternal, infraternal-server, plugin-backup, plugin-release, all targets) PASS; CLI bin tests 83 passed / 0 failed / 1 ignored; update_recovery 26 passed / 0 failed / 1 ignored.
Finding status:
9819d8981, compact profile): 0 refused probes, max probe interval 10.922 ms vs 71.703 ms allowance, 128 shims kept, CA unlocked. Re-measuring on698f6aee3is queued and was stopped by the pause (not started).3b2183eaaas well, so they predate this branch.27c5205ae(monotonic, capped at 120 s).Blocking, owner decision needed: with dev's profiles the image is +635,888 B over the x86 cap (ARM not rebuilt; earlier dev-profile control was +821,952 before the backup unhook). The attribution posted above shows the cost is spread across the decided D251 scope with no outlier; trimming cannot close +636 KB. Options for the owner: a measured cap allowance for D251 (as D298 did for logins), or a qualified narrower profile.
Not run: final
scripts/verify fast(stopped before it got a build slot; it will fail the size row as above) and the VM re-measurement. Both resume on the coordinator's word.Resume started: edge-autoupdate-r2 from
698f6aee3; merging origin/devadee19da07without rebasing. Initial merge reports 25 conflicted paths. Scope: D251 integration, measured D301 caps, update_recovery and locked perf VM handoff, persisted host version/update state and owner-present legacy SSH repair (D23/D148). No deploy; no contact with 10.69.69.125. Evidence under edge-autoupdate-resume scratch.Additive #236 contract before implementation: retain last reported infraternal-agent version and machine-update capability plus update state in admitted-host inventory; legacy capability absence yields needs_manual_update / "Needs a manual update", with unknown version rather than inference. Repair is an explicit owner-present bootstrap request bound to one existing admitted host, its mode/uid and authenticated SSH destination. It reuses add-host verification, transfer, activation and canary; it must preserve prior host/certificate/session identity on failure and never consume stored SSH secrets unattended (D23/D148). Missing saved SSH coordinates requires normal SSH setup. No new updater engine or dependency. Incremental repair size is measured separately from the D301 merge artifact. Merge finding: 25 conflicted paths; release-script fixtures pass 8/8 after preserving session binaries and SOURCE/review admission.
Integration findings (uncommitted merge): first workspace check failed because dev replaced AgentPlugin::format_human with present(Presented); release metadata/live handlers and their existing tests are adapted to that API. Dev asynchronous session-renewal and authority watchdog remain; D251 foreground admission and D295 durable writer reservations are retained. Extracted SSH ACTIVATE retains the previous A/B symlink; the newer negotiated transfer retains exclusive cache-reuse copies. Review-admission 14/14, release scripts 8/8, staging artifacts 3/3 pass. Broad Python discovery is not claimed green: three CLI modules require INFRATERNAL_BIN and must run with the compiled executable. Correction: initial merge has 26 conflicted paths, not the 25 stated in the start comment.
Initial compiler receipt: merge-check.log
release scripts, admission, staging artifacts.
Checkpoint, still working (not a finished merge): origin/edge-autoupdate-r2 now exists at
698f6aee3b. Worktree has a resolved, staged merge of origin/devadee19da07; no merge commit yet because its gates are pending. Formatting and repository artifact gate pass (829 changed paths against pre-mergec47a438be7); release-plugin default server-feature cargo check --all-targets passes. Host-side agent-feature check is next; full scripts/verify iterate is waiting for a shared build slot.Resolved merge patch against 698f6aee3; apply to that head to recover the staged tree, retaining
adee19da07as the merge parent. Release server-feature check. Merge commit message is prepared under edge-autoupdate-resume/evidence/merge-message.txt. No cap change, legacy-host implementation, static measurement or VM measurement has been claimed. No deployment or contact with 10.69.69.125.Integration checkpoint: release-plugin server + host feature type check passes; existing host off/status/reconstruction regression passes 1/1. New restored_host_update_is_presented_as_needing_attention regression failed before the presentation correction (Tone::Good vs Tone::Attention) and passes after it (1/1). RED, GREEN.
Full merge iterate is active, not green: its first compile-out/clippy attempt found two merged API mismatches (daemon.rs:733 called machine_control on the now-optional registry; plugins.rs:111 omitted the new uninstall Kernel argument). Both are corrected in the staged merge. The gate continues to collect other failures before a clean rerun. WebSocket integration also retains private owner dispatch/router hooks, shared contiguous-input admission and D295 writer reservations alongside dev authority reads. No cap or feature-completion claim.
Merge rerun remains queued through the required build-slot wrapper; the three occupied slots are verify fast (started 20:40 CEST), revocation baseline/primitive (20:31), and release build (20:24). The resolved merge tree is held fixed while its gate waits. No size-cap change or VM measurement claimed. Legacy repair drafts are outside the checkout: bind one existing identity to the live owner socket, preserve admitted authority on failure, and use the normal SSH installation transaction rather than detached setup.
Merge gate rerun 2 failed in clippy/test, with integration fixes now staged: daemon writer lint boundary; uninstall test imports/Kernel argument; five-value runtime fixture; cgroup shim discovery in the update proof; current CLI help and test scratch setup. The CLI compile-out helper also masked an earlier failing invocation, so it now propagates each failure. Gate 3 is queued. The separate-process update-control regression was RED (operational refusal incorrectly mapped to NotFound/exit 4) then GREEN (1/1) after preserving Failed/exit 1 and an accurate operator message. Server all-target check and saturated-route regression also pass. No caps/VM/completion claim yet.
merge-iterate-2.log
merge-control-red.log
merge-server-check-2.log
merge-control-green.log
Branch edge-autoupdate-r2 remains on
698f6aee3with the resolved dev merge staged. Additional focused checks now pass: server all-target with remote enabled, public CLI help 1/1, separate-process update control 1/1, saturated-route queue 1/1. Full iterate remains queued. The slot-wrapped integration-milestone script will commit/push only after iterate exits successfully, then build and retain ordinary production-trust x86/ARM artifacts before any legacy-host change, and build the pinned dev x86 comparator. No cap/performance/final-completion claim yet.Updated resume receipt while all build slots remain occupied. The attached patch includes every staged merge resolution through the remote shipping fixture adaptations. Base/parents:
698f6aee3+adee19da07. Apply to the old branch only if resuming before the eventual merge commit; do not replay it over a committed merge. Server remote/all-target and help receipts are attached. No completion claim.merge-progress.patch.gz
merge-server-remote-check-2.log
merge-help-green.log
Merge qualification: fmt, CLI compile-out and clippy now pass. Gate 4 reached 678 server tests passing / 56 ignored, with its only server failure caused by missing INFRATERNAL_TEST_STATE_ROOT. The affected checkpoint child passes with an owned root. Gate 5 exposed two additional SUN_LEN fixture failures because the supplied root was too long: runtime_lock_tests.rs:463 and user_host.rs:1423. Both affected tests pass unchanged with the shorter owned root /home/kayg/.cache/codex-scratch/eb07d. Gate 6 is queued with that root. No product assertion or timeout was weakened; no host-load waiver is being used. No cap/VM/final-completion claim yet.
merge-iterate-4.log
merge-iterate-5.log
checkpoint-owned-root.log
runtime-lock-short-root.log
pool-churn-short-root.log
Integration contract finding (D303): the old update-control tests expect exit 1 even for invalid options and an off/unreachable update service. The current private control reply only says ok=false, so the CLI cannot distinguish those cases. Proposed additive reply field: code (usage, not_allowed, unreachable, failed), carrying only fixed public categories; existing clients still read ok. Keep local transport failures distinct from a live handler's refusal, and map them to D303 exits 2/3/5/1. This is an integration correction on #211, separate from the #236 size measurement. No deployment or permission change.
Merge gate progress: every Rust row passed (fmt, native fmt, CLI compile-out, clippy, runtime helper, workspace tests, inode reuse, per-user shim, cargo-deny); server suite 679 passed / 56 ignored. TypeScript had 346 passes and two canvas reducer property-suite build failures: plugin-api owned_io uses block_in_place without declaring rt-multi-thread when built standalone. Declared that existing runtime feature on the optional Tokio dependency; the shipping named feature set is unchanged (0 additions/removals). Re-running plugin-api clippy/tests and the complete TypeScript gate before the merge commit; no failure waived.
merge-iterate-6.log
merge-feature-sets.txt
Updated resumable staged merge patch, including the standalone Tokio dependency fix. HEAD remains
698f6aee3while the follow-up gate waits for a host build slot; no legacy slice applied and no deploy.merge-progress.patch.gz
current-resume.txt
Merged origin/dev
adee19da07into edge-autoupdate-r2 without rebasing. Merge commita9c8fc03ceis pushed. All 26 conflict resolutions and their alternatives are recorded in the commit body. Full Rust gate rows passed in merge-iterate-6.log (server 679 passed, 56 ignored). After the explicit standalone runtime feature fix, fmt and plugin-api socket-host clippy/tests passed (44 unit / 2 doc tests); the complete TypeScript gate passed: canvas/UI 348, connection 105, terminal query 17, protocol 39; production bundle transfer checks passed. Static production-trust x86/ARM artifacts and the dev size comparator are now building; final verify fast still pending.merge-feature-followup.log
Merge
a9c8fc03ceordinary production-trust x86_64 static image: 22,024,736 bytes, +635,504 bytes relative to the prior 21,389,232-byte cap. This matches the D301 accepted updater scope; the actualadee19da07comparator is still pending. SHA-256 2be05cf3d490fd3f9a906901b195703085e94e043f96207860badfb6225ec1af. Production-trust check passed (fixture authority absent). Retained artifact: ~/.cache/codex-scratch/edge-autoupdate-resume/pre-legacy/infraternal-x86_64; raw receipt evidence/pre-legacy-sizes.txt. ARM build is running; no compiler profile changes.Repair integration finding: SSH lifecycle Activity tracks component shutdown (crates/plugins/ssh/src/lifecycle.rs:34), while daemon handoff uses plugin-api activity::Activity; these are separate lifetimes. The host adapter must retain the daemon foreground fence through the actual installation and rollback, including socket cancellation, and release it before an idle wizard remains open. Reusing a defaulted backend resource hook and the existing D251 wait_enter fence; no new task, timer, library or persisted secret. The same installation path protects fresh setup as well as repair. Regression coverage will hold cleanup after cancellation to prove the fence remains active.
Pure merge
a9c8fc03cestatic artifacts retained: x86_64 22,024,736 B; aarch64 20,125,160 B. Both production-trust checks passed; unchanged shipping profiles. Relative to the previous caps, +635,504 / +563,504 B; actual dev comparator remains pending. Its first build stopped because comparison/auth-tools/zig was absent. That target now shares this job’s verified pinned Zig 0.15.2; no baseline source change. Proceeding with separately gated integration/legacy slices while the comparator is scheduled before the final gate. Reclaimed 13 GB of completed incremental cache and a further 3,290,900,608 B of completed test executables from touched crates only; shipping artifacts and dependencies retained.pre-legacy-sizes.txt
baseline-static-x86.log
cache-reclaim.log
Legacy-state integration finding: remote_runtime::attach publishes node channels for temporary SSH setup routes as well as installed infraternal agents. Both a temporary route and a legacy daemon can lack MACHINE, so absence alone must not label the setup route as a legacy host. Proposing additive NodeChannel::is_provisioning() (default false), supplied from NodeBridge’s existing admitted AuthorityGuard rather than peer input. Sender and inventory skip capability/version observations for temporary routes; an outstanding bootstrap retirement intent also suppresses manual repair until setup completes. No wire change or dependency addition. This preserves unknown version during setup and avoids offering a second installation over an active one.
Pushed
35f1107db1: D303 local control refusal categories preserved. The separate-process invalid-quiet case failed first; fmt, touched-crate clippy, 2 local-control tests and 5 release-service tests passed. The source gate is green. A scratch runner edit caused a shell reader offset error after the tests, before commit; resumed from the unchanged passed source and committed/pushed manually. No check waived. A new immutable runner will build the updater-only artifacts and D301 caps, then gate each #236 slice. Full receipts will be attached by that runner.Updated resume checkpoint at pushed head
35f1107db. The immutable next runner is waiting for a host build slot; the latest implementation drafts, ownership/readiness/fence regressions and exact remaining gates are attached. Legacy slices remain unapplied until their separate gates run. No deploy.current-resume.txt
legacy-preparation-current.tar.gz
Pushed D303 local-control integration fix
35f1107db1. Separate-process invalid-quiet regression failed before the fix; fmt, touched-crate clippy and local-control/service tests passed after it. Refusals now preserve usage 2, not allowed 3, unavailable 5 and failed operation 1; old receiver replies remain generic refusals. Fixed categories only, with no storage diagnostics.test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 102 filtered out;
test result: ok. 5 passed; 0 failed; 1 ignored; 0 measured; 31 filtered out;
control-codes-red.log
control-codes-green.log
Pushed exact D301 cap ratchet
d3b5dc0b8e; unchanged shipping profiles, production trust passed. Both architectures passed exact-size validation, reject one byte above cap, and require a ratchet after shrink. This is the retained updater-only baseline for measuring #236 separately.x86_64: updater baseline 22,026,848 B; D303 integration delta from pure merge +2,112 B.
aarch64: updater baseline 20,127,592 B; D303 integration delta from pure merge +2,432 B.
control-static-sizes.txt
d301-caps.log
The first #236 migration gate stopped on a remote-only clippy configuration: infraternal-agent/src/plugins.rs kernel callbacks retain a fallible function-pointer signature with mesh compiled out, triggering unnecessary_wraps. No migration test ran or was waived. A separate correction scopes the allowance to non-mesh/non-Linux builds; queued remote-only clippy and tests precede the migration retry. D301 cap commit is pushed at
d3b5dc0b8e.Resume checkpoint: branch edge-autoupdate-r2, pushed head
d3b5dc0b8e. Mergea9c8fc03c, D303 correction35f1107db, exact updater-only caps 22,026,848 B x86_64 / 20,127,592 B aarch64. Migration 0031 is applied but uncommitted; gate first encountered a non-mesh callback lint, not a migration failure. Active immutable legacy-resume-v3.sh is waiting through the build-slot wrapper, then gates/commits that correction, schema, trusted setup scope, sender observations, durable inventory, SSH repair, server repair, UI and development-only coverage in separate steps. Each step stops before commit on a failed gate. Draft archive is continuation material, not landed code or test evidence. After that sequence, review-artifacts-v1.sh adds the docs commit, runs explicit update_recovery, builds the detached dev comparator, prepares a release warm-handoff harness, and rebuilds ordinary production-trust artifacts. VM measurements, separate #236 size review/cap ratchet, author review, final verify fast and cleanup remain. No deployment or acceptance-host contact.legacy-preparation-v3.tar.gz
Keep remote kernel callbacks lint-clean without mesh (#211)
Pushed
45367cb37b. fmt and touched-crate clippy passed.test result: ok. 149 passed; 0 failed; 20 ignored; 0 measured; 0 filtered out;
kernel-callback-gate.log
Current checkpoint: edge-autoupdate-r2 pushed head
b66e3f14d. New pushed slices:45367cb37kernel callbacks;3f1b88a2fschema;34086298dtrusted temporary-setup scope;b66e3f14dsender observations. Schema’s original filter matched zero tests; the corrected actual module passed all 6, attached separately. Scope passed 44 API cases plus the actual node bridge case. Sender passed 11. Pending inventory passed 3 observation tests and 12 inventory cases; its stale-server-target regression failed by assertion before the guard. The no-default-feature matrix then found two shared auth-fixture cfg assumptions, now corrected but not yet gated/committed.Active immutable legacy-resume-v6.sh is queued through build-slot (tool session 77738). It gates/commits the two fixture corrections first, then inventory, SSH repair, server repair, UI, request/scale coverage separately. No paused shell remains. The attached patch captures actual pending native files; do not blindly rerun source appliers. The bundle includes later prepared steps. Updated UI uses existing shared Hosts settings/fact rows with 16-group initial mounting and explicit 16-group expansion; production desktop/phone fixture covers 32 hosts and repair consent. Server repair now explicitly refuses a pending fresh setup and checks execution UID before invitation reissue.
After v6 succeeds, run review-artifacts-v1.sh through the same build-slot: docs commit, explicit update_recovery, exact detached dev static comparator, test-only dev inventory harness, candidate release warm-handoff preparation, ordinary production-trust final static builds. Then run warm handoff and paired 128-host inventory on the authorized perf VM outside the build-slot; inventory-perf-vm.py transfers only public test executables/libraries and runs both variants under one short shared lock/weighted scope. Separate #236 size delta/cap ratchet, author checklist, final verify fast, receipts and cleanup remain. No deployment or acceptance-host contact.
native-pending-v6.patch
legacy-preparation-v6.tar.gz
Pushed host-inventory milestone on edge-autoupdate-r2, head
6852b493ce.Schema
3f1b88a2fhas the corrected actual migration module: 6 passed, including v30→31 and retained 28 checksums/integrity. The original zero-test filter is explicitly invalid, not a pass.legacy-schema-tests-corrected.log
Distinguish temporary SSH setup from installed node capability (#236)
Pushed
34086298d5. fmt and touched-crate clippy passed.test result: ok. 44 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out;
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 736 filtered out;
legacy-scope-gate.log
Publish host identity and update phases from the existing sender (#236)
Pushed
b66e3f14d9. fmt and touched-crate clippy passed.test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 30 filtered out;
legacy-sender-gate.log
Keep shared auth fixtures buildable without mesh and updates (#211)
Pushed
d632949e6e. fmt and touched-crate clippy passed.test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 744 filtered out;
compileout-fixtures-gate.log
inventory-before-compileout-fix.log
Expose each host’s running version and update readiness in inventory (#236)
Pushed
6852b493ce. fmt and touched-crate clippy passed.test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 742 filtered out;
test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 733 filtered out;
legacy-inventory-gate.log
inventory-target-red.log
SSH repair is applied but uncommitted; the first intended regression stopped at a test-backend compile error, not an assertion. Its two missing proof methods are now explicit unreachable methods and legacy-resume-v7.sh is queued to capture the real assertion failure before the worker correction. Server repair, UI, request/scale coverage, docs, explicit recovery/perf measurements, separate legacy size review and final fast gate remain.
Capacity status: legacy-resume-v7.sh remains queued through build-slot after the SSH test-backend correction; no new test result is claimed. Pushed head remains
6852b493c(inventory). All three ordinary slot holders are alive; no other job was stopped and no slot count was overridden. Current holder records:Continuing to wait and keeping the prepared continuation state on the issue.
Checkpoint: pushed head
945bbc6ea(SSH repair), following inventory6852b493cand compile-out fixture correctiond632949e6. SSH fmt/clippy and all-target tests passed: 221 passing executions, 14 ignored, 29 test binaries. Cancellation fence regression failed by the expected assertion before the worker fix. Attempts now share one private cookie allocation and use fresh public reservation nonces.Server repair is applied but uncommitted. Both intended regressions reached assertions: obsolete unpublished guard removed its successor; completion accepted a concurrently removed host. Corrections applied. First clippy then found wildcard imports, function length and branch ordering; these are fixed by explicit imports, a synchronous reserve_attempt helper preserving its lock boundary, and branch reordering. Immutable legacy-resume-v8.sh is queued through build-slot (tool session 74180); it runs the server gate then commits/pushes, followed by legacy-ui-steps.sh and coverage-steps.sh. Do not replay already applied native appliers. Attached patch captures all actual pending server files.
Prepared UI now also exposes full, wrapping version/state facts in shared Hosts settings; initial 16 status groups, explicit 16-group expansion, stable keyed controls. Strict overlay check of actual app configuration plus desktop/phone spec reports zero diagnostics; actual branch/production-browser gates still pending. Browser fixture has 32 hosts and checks 16→32 expansion, original control retention, unknown version, current edge version and explicit root consent. Browser temporary profiles stay under this job’s cache, with launch/exit receipts.
After v8 succeeds, slot-wrap review-artifacts-v1.sh. It first runs the separate failing-first receiver-capability correction: receiver-free infraternal-agent builds currently advertise MACHINE unconditionally; factor the existing bit through plugin composition, preserve runtime-disabled support, run both agent feature matrices. Then docs commit, explicit update_recovery, exact dev static comparator, test-only baseline inventory harness, candidate release warm-handoff preparation and ordinary production-trust final static builds. Outside the build-slot, measure warm handoff and paired 128-host inventory on authorized VM 208, with shared lock/CPUWeight and bounded lock hold. Then review separate legacy size delta, ratchet caps only from measured justified sizes, author checklist, final verify fast verbatim and cleanup. No deploy or acceptance-host contact.
server-repair-pending-v8.patch
legacy-preparation-v8.tar.gz
Resume checkpoint: edge-autoupdate-r2 at
643a5af84d, pushed to origin. Native manual-repair commits throughb0212568aand the shared non-DOM mark-loader correction643a5af84are complete. Pending UI diff attached.The single owned build-slot wrapper PID 215909 is waiting to run legacy-resume-v11.sh. It reruns only production browsers after successful source checks (104 unit cases, typecheck, production build). Chromium desktop and WebKit phone are separate CLI invocations because Playwright rejects browserName inside describe; that prior configuration failure launched no browser. Successful UI checks commit/push and attach four screenshots, then coverage-steps.sh chains review-artifacts-v1.sh. Each slice stops on failure and commits only its own paths.
Next prepared scripts in the scratch job root: coverage-steps.sh; agent-capability-steps.sh; docs-steps.sh; review-artifacts-v1.sh; inventory-perf-vm.py. The documentation runner's embedded Python now compiles. No running shell file was edited.
After artifacts: run warm-handoff VM proof with reuse-only public fixture, then paired baseline/candidate inventory VM measurement. Review separate legacy size delta before an exact-cap commit. Run final scripts/verify fast through build-slot and attach verbatim output to both issues. Cleanup remains pending. No deployment or acceptance-host contact.
ui-pending-v11.patch
author-review.md
Resource wait at 2026-10-22T00:47:12.450083+00:00: the single edge-autoupdate-resume build-slot wrapper PID 215909 has waited 37:23 for a shared slot. It has not started the corrected browser rerun; no new gate result is claimed. The three normal slots are occupied by other jobs. The runner resumes automatically when a slot is free; no owner action requested. Head remains
643a5af84, with pending UI and remaining proofs recorded in resume-v11.Shared host free space reached 15 GB while this job remained queued. Reclaimed 8,046,137,410 bytes of this job’s incremental cache and 18 completed inactive test executables, under its Cargo cache lock. Active executable inodes were excluded. Raw evidence, source, target libraries, release artifacts and all other jobs were preserved. Free space afterward was 21 GB; later checks may relink removed test executables.
Free space fell again to 12 GB while the job remained queued. Cleared the remaining completed debug cache (21,983,287,521 bytes) under its exclusive Cargo lock, preserving the lock path, release artifacts, comparison cache, fixtures, source and all evidence. Free space afterward was 40 GB. Upcoming Rust gates must rebuild debug artifacts; this is cache loss rather than a code or test failure. Only this job’s target/debug was changed.
kayg referenced this issue2026-10-28 17:53:56 +00:00
Resumed implementation on shared build VM as agent. Branch edge-autoupdate-r2, base
643a5af84d; recovered WIPd4a1bf6eawith soft reset for atomic split. Current dev is07c5da77b. Reading prior histories before continuing. Will preserve #255 Tokio/AsyncFd, push each gated slice, and prepare public artifacts plus exact perf-test-01 commands for orchestrator execution. No perf-host or acceptance-host contact, no deployment. #236 is closed by orchestrator; this continuation records the separately requested legacy updater work without changing issue state.Recovered WIP split and pushed:
be2d93c36shared keyed/bounded Hosts panel;c87b1c651authenticated browser inventory fields;6c9fa4178explicit owner-present repair wizard/socket;749e4e526Hosts/palette integration and production browser fixture. Typecheck passes; 104 focused tests pass. Production Chromium desktop passes (32 rows, expansion 16→32, retained controls, unknown/current versions, root consent). Phone WebKit initially could not launch because pinned webkit-2311 was absent; installed that browser and will rerun separately. Receiver-free capability assertion is compiling before the correction. No timing evidence from this host.Warm proof requirement found in the existing harness: signed_deploy_fixture asserts effective UID 0 and launches a system service with BindPaths=:/run, Restart=always and KillMode=control-group; helper deployment also requires UID 0. The current harness additionally restricts fixtures to retired /root/infraternal-bench paths. I will prepare public signed images/harness and adapt the fixture path to the authorized ~/infraternal-perf tree; the orchestrator must decide whether to permit privileged systemd execution on perf-test-01. Inventory measurements require neither root nor system services. No perf host contacted.
Warm-proof requirement correction: the updater fixture uses STAGING_KILL_MODE="process" (deploy_staging_tests.rs), preserving PTY shims across handoff. My earlier note incorrectly said control-group; that applies to a different local probe, not this update proof. The required privilege is still effective UID 0 plus systemd transient-service creation and BindPaths=:/run. Normal teardown stops that exact unit and its owned shims. No UID1000 manager or runtime bind is required for the selected reconnect case; the optional managed-host proof is separate. Production WebKit phone assertions now pass; screenshots are attached to #236. Merge iterate is building the full workspace.
Current-dev integration finding: release_cli.rs auto-merged without a conflict, but dev’s installed-service resolver now returns PathBuf and D251 local_control expects &Path. Both CLI compile-out and Clippy fail E0308 at release_cli.rs:128 before correction. Added only the missing &data borrow in the main merge and updater-only comparison. No resolver, socket access rule, Tokio or AsyncFd change. Remaining iterate rows are running; the failed rows require a fresh check before the merge commit.
Merge fixture finding: workspace test setup_token_discovers_a_service_installed_through_a_versioned_binary_symlink failed its success assertion. D251 renders updates/current in the dry-run unit; dry-run intentionally does not create the restart symlink, but this test copied the unit without reproducing that installation step. Added only the missing fixture symlink (release builds), in both candidate and same-dev updater-only control. Shipping service discovery and restart behavior remain unchanged. Initial iterate passed fmt, native fmt, SSH helper/fixture/inode checks, shim process-per-user and cargo-deny; CLI compile-out, Clippy and workspace tests now rerun after the two integration corrections. #255 source comparison remains empty.
Merged dev
07c5da77b, preserving #255 Tokio 1.53.3 and exact owned AsyncFd sources (empty comparison). Merge resolutions are recorded in the commit. Fresh iterate passes all Rust rows except workspace test: 707 server cases passed, 56 ignored, one checkpoint parent failed because the invocation omitted its state-root variable. The exact parent and isolated child then both passed with the owned root restored. TypeScript full row passed. This is intermediate validation; final fast remains required.Pushed head
8ab6d783f6. No deploy or perf-host contact.merge-iterate-green.log
merge-checkpoint-green.log
merge-ts.log
Protocol integration finding, reproduced by the receiver-free remote greeting assertion after the composition correction: MACHINE CAPABILITY (infraternal-protocol/src/machine.rs:4) and dev REMOTE_PATH_BACKUP (plugin-api/src/channel.rs:54) both equal 1<<6. Native dev peers therefore falsely appear update-capable. Proposed additive correction before implementation: preserve dev transport bits 0–7 exactly and allocate MACHINE bit 8, with no bit-6 alias; retain all machine envelope bytes/limits and Hello.version=1. The task records production has no updater; pre-release branch fixtures must be rebuilt, while ordinary older hosts correctly require manual repair. Add a disjoint-capability regression and update the two protocol contracts. This avoids misclassifying a shipping dev transport capability or weakening negotiation.
Corrected Hello allocation collision: MACHINE uses bit 8; dev native path backup retains bit 6. Disjointness regression failed at overlap 64 before correction. Protocol and plugin API fmt, Clippy/all-targets and tests passed. No envelope or Hello.version change; no bit-6 alias.
Pushed head
df044123be. No deploy or perf-host contact.capability-collision-red.log
capability-collision-green.log
Receiver advertisement correction passed fmt, both all-target Clippy configurations, 151 receiver-free tests, 152 receiver-enabled tests, no-feature and release-without-remote compile checks, and runtime-disabled receiver reconstruction. Both greeting assertions failed before the composition correction, after the bit allocation collision was removed.
Pushed head
d559760b0d. No deploy or perf-host contact.receiver-isolated-red.log
daemon-receiver-bit8-red.log
receiver-green-bit8.log
Repair parser coverage passed fmt, server all-target Clippy, 16 bootstrap API tests, and the existing SSH input corpus target Clippy. Shipping named features are unchanged; test-only decoder entry point shares the existing 32 KiB socket bound.
Pushed head
2e6bdced51. No deploy or perf-host contact.request-coverage-gate.log
request-features.txt
Added ignored perf-VM-only inventory harness: 128 admitted hosts, complete snapshot/metadata bytes, changed and unchanged durable observations; SQLite WAL/Normal pool eight, runtime four workers. Fmt and server all-target Clippy pass; 12 inventory tests pass, measurement stays ignored. Ordinary release dev/candidate harnesses will use identical feature recipes; no local performance claim.
Pushed head
f4ccb9690b. No deploy or perf-host contact.inventory-harness-gate.log
Staging fixture portability passes failing-first current-root assertion, two Rust boundary tests, two Python scope/canonical escape tests, three existing artifact tests, fmt and server all-target Clippy. Explicit current base requires job/signed/run; privileged systemd proof still belongs to orchestrator.
Pushed head
6daea97a6d. No deploy or perf-host contact.staging-root-red.log
staging-root-green.log
Documented retained running identities and update states, shared Hosts/palette repair, owner/mode/UID/route checks, one-use sign-in, failure cleanup and D303 local refusal codes. Fmt and whitespace checks pass. Explicit recovery, final production browser reruns, static comparisons and final fast follow.
Pushed head
8ca9575ea7. No deploy or perf-host contact.host-docs-gate.log
Head
8ca9575ea: explicit update_recovery passes: 26 passed, 0 failed, 1 ignored. Production Chromium desktop (1280×900) and WebKit phone (390×844, DPR3) pass in separate invocations, one worker, port 44211, RTT simulation disabled. Checked Hosts/palette retained identity/state, 16→32 expansion, keyed control retention and unchecked root consent. No visual-quality judgment or timing claim; screenshots are for owner review. All logged browser PIDs 794759, 795042 and MiniBrowser 795048 are absent (ps exit 1); owned test port is closed; no browser profile remains. T3 preview blank tab used for availability check was closed. No perf host contacted.final-browser-desktop.log
final-browser-phone.log
final-browser-cleanup.txt
update-recovery-final.log
Linux Unix socket path limit=107 bytes; normal eight-character temporary suffix: 111; selected four-hex suffix: 107. The runner checks the actual encoded path before copying or launching. It creates only an unused root (0700), retries collisions and removes only that exact directory. No fixture privilege or perf host used for this calculation.
Build checkpoint at pushed head
8ca9575ea. Same-recipe dev07c5da77bcontrols complete: x86_64 21,400,400 B; aarch64 19,575,064 B. Production-trust checks pass. Wrapper/config hashes and all release profiles match across dev/updater-only/candidate. Updater-only builds now running; its source includes the same bit-8 and compiled-receiver corrections, so the later legacy delta excludes them. No cap changed yet. Warm runner also uses a short owned fixture root: the physical shim socket is 107 bytes; functional bind/connect succeeds at 107 and refuses the original 111-byte path. No perf VM contact or runtime performance claim. Candidate/staging artifacts, exact caps, final fast, archive handoff and cleanup remain.static-sizes.txt
static-recipe.json
warm-path-bound.txt
warm-path-functional.txt
author-review-current.txt
Same-recipe updater-only control on current dev
07c5da77b: x86_64 22,036,328 B versus dev 21,400,400 B = +635,928 B. Production-trust check PASS. This control isd3b5dc0b8merged with dev plus the same MACHINE bit-8/compiled-receiver corrections; legacy inventory/repair is excluded. This matches the approximately +636 KB updater scope accepted by D301. ARM control and both final candidate artifacts remain building; no cap changed and final fast remains pending.Both ordinary updater-only controls complete with production-trust PASS: x86_64 22,036,328 B (+635,928 B versus dev
07c5da77b), aarch64 20,139,648 B (+564,584 B). Same pinned static recipe/profiles; source control tree a6a1e4485b2f8de6deb79248771de192a96e0f3a. Both deltas fit the D301 updater exception. Baseline inventory harness is building next, followed by public warm fixtures and final ordinary candidate images/harness. Separate legacy delta, exact-cap commit and final fast are still pending.Release-profile warm fixtures prepared at source
8ca9575ea, prepare-only returned before remote execution. Public fixture is public-transfer-57cb3fb2; its exact ignored reconnect test lists successfully using the packaged loader/libraries. No perf proof executed. Ordinary candidate static builds now running. Dev inventory harness lists its exact measurement test; compiled server/API features exclude staging-trust and its exact compiled-authorities regression passes. The dev test binary contains the marker literal in that regression, so static-image marker scanning is unsuitable for that test executable. The archive will retain feature receipts and the verifier result.warm-handoff-prepare.log
inventory-harness-trust.txt
Ordinary production-trust x86_64 candidate at
8ca9575ea: 22,084,480 B; dev07c5da77b: 21,400,400 B; updater-only control: 22,036,328 B. Total +684,080 B = D301 updater +635,928 B + separately measured #236 legacy inventory/owner-present repair +48,152 B (below 64 KiB, above 16 KiB). Justification: authenticated retained version/capability/state, durable observation publication, owner/mode/UID/route-bound repair and existing SSH lifecycle authorization/reservation/cleanup safeguards. Same shipping dependency graph, Cargo features, profiles and compiler recipe; legacy-dependencies.diff is empty. No new polling worker or library. Do not attribute this additional cost to the updater-only exception. Existing recovery, observation, repair and production-browser gates are issue-attached; runtime scale evidence remains pending orchestrator. ARM candidate and final fast still building/pending; exact caps unchanged until both sizes are known.Pushed exact-cap commit
db7b79c6e1. Same-recipe stripped static production-trust sizes: x86_64 22,084,480 B (+684,080 against dev), aarch64 20,185,112 B (+610,048). Separate legacy inventory/repair costs: +48,152 / +45,464 B; updater-only costs: +635,928 / +564,584 B (D301). The separate legacy cost is justified by authenticated durable observations and owner/mode/UID/route-bound reuse of SSH installation/reservation/cleanup; no shipping dependency/feature/profile changes or polling task. PROCESS records all three variants, supersedes the old ceilings, and keeps the #211 trim follow-up.Fmt, Bash syntax and whitespace checks pass. Both architectures pass production trust, stripped/static linkage and exact-byte checks; +1 byte is refused and -1 byte requires a downward ratchet.
Final ordinary inventory harness is still building. Perf archive/handoff, final scripts/verify fast and cleanup remain.
final-cap-gate.log
static-sizes.txt
final-size-comparison.json
Perf handoff ready at pushed head
db7b79c6e1; final scripts/verify fast is running on that head. No runtime perf result is claimed yet. Artifact source is8ca9575ea7; the later cap commit changes only ceilings/documentation.Build host: 6by32-compute02
Archive:
/home/agent/.cache/codex-scratch/edge-autoupdate-r2/e211-proof-8ca9575ea753.tar.xzBytes: 69779616
SHA-256:
51fb06283fc8434af6733f2e6fc36ebb7244b27b25a2ef412c783609b3ea7c9cOrchestrator: copy this public archive to perf-test-01 under
/home/agent/infraternal-perf/, verify the SHA above, then extract as agent:Paired inventory command, as agent (no root):
Five adjacent alternating baseline/candidate pairs; 128 admitted records, zero connected channels; 128 snapshot samples each; candidate 128-way changed/unchanged observation bursts; metadata bytes separate from wait4 process peak RSS. Both ordinary harnesses use the same release profile/features and exclude staging-trust; source patches, feature receipts, loader/libs and machine/load capture are packaged. Each child is bounded at 120 seconds; total maximum remains below the 30-minute lock window.
Warm handoff requires the orchestrator's decision on privileged execution. The existing harness asserts effective UID 0 and creates its own transient systemd service with
BindPaths=<owned run>/r:/run,Restart=alwaysandKillMode=processso the 128 PTYs survive the handoff. The selected reconnect case uses one active stream and does not require a UID-1000 user manager. Python 3, systemd/systemd-run, procfs/cgroupfs and a working login shell are required. Agent should create the parent above before any root invocation. The fixture stays under/home/agent/infraternal-perf/e211/signed/r<4 hex>; its actual shim socket is 107 bytes. Runner checks the canonical root/path bound, uses only loopback HTTP, enforces a 1200-second harness deadline, and cleans only its own directory/bucket and services whose ExecStart is inside that exact root.If the orchestrator authorizes root/systemd, the exact command is:
Please attach both complete logs and command exit statuses to #211. All runtime timing/CPU/memory conclusions remain pending these VM runs. No perf host or acceptance host was contacted from this job; no deployment.
perf-archive.txt
MANIFEST.json
run-inventory.py.txt
run-warm.py.txt
baseline-inventory.patch.txt
updater-only.patch.txt
Final fast first attempt found eight CLI restart regressions under the runner-provided symlinked INFRATERNAL_TEST_STATE_ROOT. Protected executable checks refuse symlink ancestors; the reload test also compared the alias against canonical current_exe (e211 versus edge-autoupdate-r2/state), and the parent-escape test counted lexical depth. Two exact failing tests pass with the same compiled executable under a short, physical private root (rootless pinned-image admission and reload after inode replacement). This confirms runner configuration, not a shipping-code regression. No production check will be weakened. The corrected runner uses the owned physical ~/.cache/codex-scratch/e211r root; failed transcript will be retained, and full fast reruns on the unchanged pushed head
db7b79c6eafter this attempt exits. Perf archive/commands already on #211 remain unchanged.physical-root-probe.log
Pushed fixture-only correction
83db05b380. The first full fast run failed CLI plugin compile-out/workspace CLI tests on the runner symlink root, plus the isolated shipping recipe fixture. All other Rust rows passed. The recipe fixture omitted the merged real driver's remap helper, stubbed required inline Python and had not isolated the newly added CLI group artifact check. It now supplies the real helper/interpreter for driver snippets, records admission arguments after only the known target-remap configuration prefixes, and isolates unrelated artifact checks as before. The actual production wrapper and artifact checks are unchanged; four production-mode/version cases, fmt and whitespace pass.Full fast now reruns on this pushed head with the owned short physical root ~/.cache/codex-scratch/e211r. No production symlink checks relaxed, no test waived. The public perf archive remains valid: this commit changes only the isolated Python test, no shipping code or runtime harness. Exact archive/commands remain above; final gate and cleanup pending.
first-fast-symlink.log
static-recipe-fixture-red.log
static-recipe-fixture-green.log
Second full fast at
83db05b38: all Rust rows pass except workspace tests (server 706 passed, 3 failed, 57 ignored). The three failures are setup-token Unix sockets: runner TMPDIR plus the existing full UUID fixture name creates a 113-byte path, above Linux's 107-byte bound. All three exact tests pass with the same compiled executable using the owned physical ~/.cache/codex-scratch/e TMP root (0700, job marker); the longest setup-token path is exactly 107 bytes. The general test-state root stays physical ~/.cache/codex-scratch/e211r. No source/test change or waiver for this environment correction; the full gate is rerunning on the unchanged pushed head. Both roots are recorded for owned cleanup. Production-trust static builds/key checks and exact sizes passed in the second attempt; archive and perf commands remain valid.second-fast-long-tmp.log
compact-tmp-probes.log
Implementation handoff: pushed head
83db05b380, clean and equal to origin/edge-autoupdate-r2. Merged dev07c5da77b, preserved #255 exactly, split recovered UI/repair work into atomic commits, corrected disjoint/composed receiver capability, added parser/scale coverage and operations docs, and recorded exact size ceilings. The last commit completes only an isolated gate fixture; shipping code and public perf artifacts remain unchanged.Final
scripts/verify fastexit 0 on this head. Verbatim Rust summary and final TypeScript output below; the complete verbatim transcript is attached. No gate waiver. Earlier failed attempts remain attached with their runner path/root diagnoses.Ordinary stripped static sizes versus actual same-recipe dev: x86_64 22,084,480 B (+684,080); aarch64 20,185,112 B (+610,048). Separate legacy inventory/owner-present repair cost: +48,152 / +45,464 B; updater: +635,928 / +564,584 B (D301). Both exact caps have no allowance. Final built hashes match the public candidate images.
Explicit recovery previously passed 26 tests (1 VM-only ignored). Separate production Chromium desktop / WebKit phone functional reruns passed; screenshots are attached above for owner review. No self-assessed visual-quality claim.
Cleanup verified before deleting owned targets, comparison worktrees, private fixture roots and browser cache: no owned native executable running, browser PIDs 794759/795042/795048 absent, port 44211 closed. Public archive, expanded package, artifacts, evidence and runners retained. No deploy, issue closure, perf-host or acceptance-host contact.
Pending orchestrator: execute the exact paired inventory command and, if root/systemd is authorized, warm-handoff command already posted above. Archive
/home/agent/.cache/codex-scratch/edge-autoupdate-r2/e211-proof-8ca9575ea753.tar.xz; SHA-25651fb06283fc8434af6733f2e6fc36ebb7244b27b25a2ef412c783609b3ea7c9c. Independent code/screenshot review and runtime perf conclusions remain pending those external steps.final-fast.log
final-fast-summary.txt
final-cleanup.txt
author-review-current.txt
static-format-checks.txt
Independent review started: branch review-edge-autoupdate-r2, target/base
83db05b380, comparison dev8f88bf086. Reading decisions and issue histories, then checking update integrity, D295 recovery, warm handoff, lockstep, owner-present repair and receiver capabilities. No host contact, implementation changes or deployment. Logs under ~/.cache/codex-scratch/review-edge-autoupdate/.EAR2-01 · P1 · D295 recovery stops after candidate consumes restore headroom
Location: crates/infraternal-server/src/update_recovery.rs:343-354 (free-space admission), :531-552 (restore_copy allocates another complete database).
Scenario: admit a switch on a private 32 MiB filesystem, retain a real 4 MiB SQLite preimage, enter the candidate and write until SQLITE_FULL, then start the predecessor. Admission only checks free space; candidate writes can consume it. Offline undo needs another full copy while retaining both live and saved images, so startup is refused repeatedly until an operator frees storage. Stable binary selection does not make the server runnable with its database.
Test: update_recovery::tests::review_d295_candidate_disk_full_still_restores_the_admitted_copy. Reused valid
b1555e44fWIP test; ran in an unprivileged private mount namespace, no VM or host contact. Initial free=29,331,456 B, remaining=12,288 B, retained copy=4,210,688 B. Real SQLite error=13 (SQLITE_FULL); restore error="Not enough disk space to copy the database before updating". Result: FAILED, 0 passed / 1 failed.Commit:
217daca96on review-edge-autoupdate-r2 (pushed). No implementation fix. Raw receipt attached as disk-full-red.log.EAR2-02 · P1 · specified dev merge is absent; committed logout can lose its revocation notification
Location: crates/infraternal-server/src/auth/sessions.rs:109-119, plus target ancestry.
Scenario: block logout behind a real SQLite writer, dispatch it, release the writer and observe the session deletion commit from a second connection; cancel the Rust caller before its acknowledgement. The notification is never published, so idle live browser/bootstrap sockets are not promptly told that authority changed. The new repair flow uses this old global notification path too.
Test: auth::tests::review_edge_revocation_tests::review_r2_missing_dev_committed_logout_keeps_revocation_wake (adapted from dev logout_commit_tests.rs). Result: FAILED, 0 passed / 1 failed, exact assertion "committed logout lost its notification when the waiter was cancelled".
Target
83db05b38has merge base07c5da77bwith dev8f88bf086. git log 07c5da77b..8f88bf086 lists the reviewed #240 account-notification, cancellation-retention and source-loss fixes; these are not integrated. The brief's statement that8f88bf086is merged is not true for this target. #255 external lockfile records and AsyncFd readiness source remain identical; this finding concerns #240.Commit:
0a761350eon review-edge-autoupdate-r2. No implementation fix. Raw receipt logout-red.log attached.EAR2-03 · P2 · interrupted host selector permanently refuses subsequent updates
Location: crates/plugins/release/src/host_slots.rs:391-408 (Slots::select); host_watchdog.rs::recover_preselection does not retire current.lockstep.
Scenario: process stops after creating bin/current.lockstep but before renaming it to bin/current. The old selected binary remains usable. A newly constructed selector refuses every future update with AlreadyExists; receiver reconstruction/preselection recovery does not remove this orphan. There is no concurrent writer in the test. This leaves the host unable to return to server lockstep without manual filesystem cleanup.
Test: host_slots::tests::review_r2_interrupted_selector_does_not_permanently_stop_host_updates. Real filesystem writes and directory sync; no synthetic image executed. Result: FAILED, 0 passed / 1 failed, AlreadyExists (code 17).
Commit:
4e7352d33on review-edge-autoupdate-r2. No implementation fix.Review checkpoint at
8c14ef555on review-edge-autoupdate-r2. All four logical commits pushed. Confirmed EAR2-01 P1 (disk-full offline restore), EAR2-02 P1 (#240 dev integration/logout publication) and EAR2-03 P2 (orphaned host selector). No implementation changes.Reused prior WIP recovery checks: 5 passed / 0 failed / 1 ignored (the opt-in bounded filesystem test separately failed, as recorded). This includes four recovered interruption/pre-switch-data tests plus the existing backward-clock regression. Formatting and touched-server/release all-target Clippy pass; the recovered disk test needed only the lint-clean Cow::into_owned method reference.
Actual merge base with specified dev
8f88bf086is07c5da77b3. All external Cargo.lock package records are identical; expected workspace dependency edges differ. AsyncFd readiness, pinned compiler/linker wrappers and release profiles are identical. #255 is retained, #252 is in the actual merge base, and the later #240 integration is absent as EAR2-02 demonstrates. Source comparison receipt attached at final handoff.Rebuilding ordinary production-trust merge-base controls sequentially for both architectures, then running final scripts/verify fast on the review head. No perf host, production host or test host contacted. Current runtime performance/warm proof remains the orchestrator's external step.
Current-target runtime proof remains an orchestrator step; this review contacts no host. Shipping Rust sources at
83db05b38are identical to the prepared8ca9575eaarchive source (only docs/PROCESS.md, scripts/verify.d/rust.sh caps, and scripts/test-static-recipe.py changed).Exact warm test: auth::tests::ca_administration_tests::shipping_cli_tests::deploy_staging::review_warm_update_meets_local_reconnect_budget (128 live PTYs, one attached stream, signed manual handoff, CA remains unlocked, input/output continue, listener probes). Reuse the already prepared public archive e211-proof-8ca9575ea753.tar.xz, SHA-256 51fb06283fc8434af6733f2e6fc36ebb7244b27b25a2ef412c783609b3ea7c9c; copy/extract per the earlier #211 handoff. With the orchestrator's root/systemd authorization, exact on-VM command is:
Record exit status and attach the complete log. The archive runner owns only its transient fixture directory/services and has a bounded deadline. The earlier posted paired inventory run remains needed for #236 scale costs. These external results do not clear EAR2-01 or EAR2-02; their failing functional tests are already committed.
Independent review size baseline completed on actual merge base
07c5da77b3(against specified dev8f88bf086): ordinary production-trust stripped static x86_64=21,400,400 B, aarch64=19,575,064 B. Both production-trust checks pass. Same shipping recipe, pinned toolchain and required target directory; architectures built sequentially through build-slot. Final scripts/verify fast now runs at pushed review head8c14ef5558; deployment functional checks, formatting and CLI plugin compile-out have passed. Full transcript and fresh head size comparison will accompany final verdict. No additional findings or implementation changes.Additional current-target runtime case remains pending; no VM contacted. The previously posted reconnect case returns after the healthy handoff (update_staging_tests.rs:690-693), so it does not qualify successor failure/recovery.
Exact existing full test: auth::tests::ca_administration_tests::shipping_cli_tests::deploy_staging::signed_deploy_preserves_passkey_ca_and_live_sessions. Use the same packaged public test executable/loader/libraries and signed A-E artifacts as the prepared archive above, with test arguments
--ignored --exact auth::tests::ca_administration_tests::shipping_cli_tests::deploy_staging::signed_deploy_preserves_passkey_ca_and_live_sessions --nocapture. Keep INFRATERNAL_UPDATE_PROOF set, INFRATERNAL_STAGING_ACTIVE_STREAMS=1 (128 live PTYs retained), and unset INFRATERNAL_REVIEW_RECONNECT and INFRATERNAL_REVIEW_TRANSPORT. Retain the existing runner's owned short root, artifact environment, root/systemd isolation, deadline and cleanup; run only through perf-run.sh on the orchestrator's authorized VM.Required assertions already in this test: signed update and explicit rollback; late exec refusal returns to the preceding version with CA unlocked and unchanged shim PIDs; successor E commits staging_upgrade_probe and then stops; predecessor is selected, Inbox says the update was undone, staging_upgrade_probe is absent, predecessor migrations run successfully, all shim PIDs survive, and the CA is locked after the process crash. This last crash boundary differs from the successful D217 in-memory handoff. Source: auth/update_staging_tests.rs:782-866. With the optional managed-host fixture, the same test also exercises a host's failed check-in.
Attach full output and exit status. This is pending runtime evidence, not a new confirmed finding or a VM pass. Existing EAR2-01/02/03 remain independently reproduced.
Independent review of target
83db05b380. Review branch review-edge-autoupdate-r2, pushed head8c14ef5558. Verdict: do not merge. P0=0, P1=2, P2=1, P3=0. No implementation fixes.Confirmed findings (all have committed failing tests; earlier comments carry raw failing receipts):
217daca96.0a761350e. Actual merge base with specified dev8f88bf086is07c5da77b3; the later #240 changes are absent.4e7352d33.These line references correct the approximate ranges in the initial EAR2-01/EAR2-03 comments.
Prior WIP
b1555e44f: reused the valid bounded-filesystem failure test and four recovery checks. Focused recovery checks: 5 passed, 0 failed, 1 ignored; opt-in bounded-filesystem check explicitly run and failed separately. Review head changes only four test files (+285 lines), no shipping code.Source checks: external Cargo.lock package records, AsyncFd readiness.rs, compiler/linker wrappers and release profiles match specified dev; local workspace dependency edges differ as expected. #255 and #252 remain; #240 does not. Signed manifest/channel/version checks, explicit rollback admission, bounded download/slot paths, repair owner/host/route/UID checks, live session authorization and reservations were inspected. No additional confirmed finding in these paths. Receiver capability requires both remote and release; runtime-disabled receiver retains discoverability for truthful Off reporting.
Limits: no perf, production or test host contacted. Healthy warm-handoff/CA/D217, full successor-failure recovery, and current full-scale inventory runtime measurements remain pending the orchestrator's exact VM commands already posted above; this review does not claim a runtime performance pass. UI screenshots previously attached on #236 were not independently judged for visual quality here.
Largest contributors: prior symbol attribution on #211 (earlier updater source, not a new attribution of this head) reports updater ~62 KB, release_update ~50 KB, CLI dispatch ~41 KB, restart control ~35 KB, websocket router ~35 KB, release_startup ~29 KB, update_recovery ~26 KB, host_receiver ~20 KB, service ~18 KB, host_slots ~14 KB, host catalog ~11 KB, unwind tables ~46 KB. No new external registry package versions or release-profile changes. Fresh exact stripped totals follow below.
Fresh same-recipe production-trust stripped review-head sizes (baseline is actual merge base
07c5da77b):Both review artifacts are 88 B below the target sizes/caps stated in the brief (22,084,480 / 20,185,112 B). No shipping source change was made; cause of this small artifact difference is not isolated. Do not attribute the exact-cap refusal to target
83db05b38: this is the required gate on the test-only review head. Caps were not changed, and the gate remains failed. Both artifacts pass production trust/static linkage; x86 native protected-key memory passes; ARM protected-key runtime is not checked on this x86 build host. Growth stays within the brief's stated total envelope. The earlier issue's separate updater-only +635,928/+564,584 B and legacy +48,152/+45,464 B controls were not independently rebuilt in this review.Fresh largest ELF section growth (x86 / ARM B): .text +539,490/+463,736; .eh_frame +46,184/+49,560; .gcc_except_table +44,320/+47,684; .rodata +33,568/+26,896; .data.rel.ro +13,824/+13,936. Full per-section data and artifact hashes attached. These are direct ELF measurements, unlike the earlier module attribution above.
Final verification: scripts/verify fast exits 1. Workspace test failure is the committed EAR2-03 regression (53 passed, 1 failed, 2 ignored in release); the workspace command stops there, so EAR2-02's standalone failing receipt remains separate. Static builds fail the exact-size ratchet at -88 B on each architecture, including the boundary-fixture assertion. Other Rust rows pass. No cap changed, failed test waived, or implementation fixed.
Separate TypeScript gate: exit 0 (the top-level fast dispatcher stops after Rust failure). Focused server --features remote bootstrap tests: 69 unit passed, 0 failed, 3 ignored, plus 2 integration passed, 0 failed. This includes foreign-owner/changed-route/mode/capable-host refusal, UID mismatch, predecessor-route refusal, concurrent removal, origin/owner/unlock/consent, and retained setup logout/replay checks.
scripts/verify fast final output, verbatim (full stdout/stderr transcript attached):
Evidence:
final-fast.log
final-ts.log
baseline-build.log
source-comparison.json
final-sizes.json
reused-recovery.log
final-bootstrap.log
Failing receipts already posted: EAR2-01 disk-full, EAR2-02 committed logout, EAR2-03 selector.
Cleanup: required target directory deleted; temporary baseline worktree removed; owned short/initial fixture roots and empty SSH fallback parent removed. No owned executable remained before cleanup. Requested review worktree/branch and external logs/artifacts retained. Branch is clean and pushed; no other branch pushed, host contacted, implementation changed, deployment performed or issue closed.
Implementation fix round started on edge-autoupdate-r2, base
83db05b380; merged review-edge-autoupdate-r28c14ef5558and its committed EAR2-01/02/03 regressions. Worktree moved from the clean previous job path to ~/wt-infraternal/edge-autoupdate-fix because the requested branch was already checked out there. Read the do-not-merge verdict and evidence. Will restore #240 by carefully merging origin/dev, repair disk-full recovery and interrupted selection, rerun #240 five times, remeasure exact static ceilings and run final fast. No external host contact or deployment; runtime VM proofs remain with orchestrator.EAR2-02 merge audit: origin/dev is
8f88bf086. Conflicts are auth/tests.rs, bootstrap_api_tests.rs, docs/PROCESS.md and scripts/verify.d/rust.sh; independent tests retained from both sides, existing candidate caps retained pending fresh measurement. Review logout test changes only revocation_events() to revocation_events(&f.user), preserving the commit/cancellation assertion. All production #240 additions are present. sessions.rs, account_events.rs, committed.rs, recovery.rs, recovery_rotation.rs, webauthn.rs, source-loss tests and proof-authority code are identical to dev. Remaining auth/WebSocket differences are existing update/private-action hooks and writer reservation. No #240 production line manually resolved. Compilation and five reviewer-union repetitions are next.EAR2-01 freshly reproduced on the dev-merged tree before recovery changes, in an isolated unprivileged 32 MiB tmpfs. Initial free 29,331,456 B; remaining 12,288 B; retained preimage 4,210,688 B; SQLITE_FULL causes predecessor restore refusal (0 passed, 1 failed). The copy is valid; allocation of a third database image while keeping failed live data causes the startup failure. No shared filesystem filled and no external host contacted. #240 source audit also attached.
disk-full-red.log
dev-auth-audit.json
EAR2-02 committed and pushed in
2a4bf9f0a1: carefully merged dev8f88bf086, preserving every #240 production addition. Conflicts and their resolutions are recorded in the merge body. Five consecutive complete #240 reviewer-union repetitions pass: 52 passed, 0 failed, 1 perf-only ignored each. Includes EAR2-02 committed logout, both 256-socket/61-account isolation cases, cancelled/refused commits, restored sources, busy-store handling and shared 1013 source-loss teardown. No assertion/deadline weakened, no load exception. Fmt, whitespace and remote+mesh all-target server Clippy pass.union-sequence.log
Fresh comparison controls on exact dev
8f88bf086, same pinned static recipe and one target at a time: x86_64 21,420,592 B, aarch64 19,592,504 B; production trust and static linkage pass. These match dev records. EAR2-03 freshly reproduced before its fix: AlreadyExists (0 passed, 1 failed). The added live-writer test also fails for missing kernel exclusion before the fix; after fixture permissions were corrected it reports AlreadyExists instead of WouldBlock. Seven slot tests pass with the candidate fix. Complete recovery/release tests and all-target Clippy are running before atomic commits. #240 runner and Clippy attachments omitted by the first rejected .sh upload are also supplied below as .txt/log.baseline-build.log
selector-red.log
selector-lock-red.log
run-union.txt
merge-clippy.log
Pushed atomic fixes:
5a4bca715(EAR2-01) verifies the saved copy, reclaims failed live SQLite storage before replacement, retains preimage/armed marker across interruptions, and repairs stable selection after freeing space. Recovery suite: 30 passed, 0 failed, 2 ignored (disk case and VM-only measurement); isolated 32 MiB disk case run explicitly: 1 passed, 0 failed, same initial 29,331,456 B / remaining 12,288 B / preimage 4,210,688 B as the red run. Earlier D295 clock and retained-copy tests pass.c37f8ce75(EAR2-03) uses a kernel-released directory lock, retires only owned abandoned temporary symlinks, and refuses live writers/unexpected objects. Release suite: 56 unit passed, 0 failed, 2 ignored; integrations 1 passed plus 2 passed/2 ignored. Original review regression and new writer-exclusion/reselection/file-preservation checks pass. Both touched crates pass all-target Clippy, formatting and whitespace checks. No new dependency/feature/profile or runtime worker. Exact static measurements and final fast remain pending; no VM/runtime claim.recovery-green.log
disk-full-green.log
recovery-clippy.log
release-green.log
release-clippy.log
First repaired static measurement at
c37f8ce75: x86_64 22,100,808 B versus dev 21,420,592 B = +680,216 B (3,864 below earlier +684,080 envelope); ARM 20,204,128 B versus dev 19,592,504 B = +611,624 B (1,576 above earlier +610,048 envelope). Both production-trust/static checks pass. No cap changed. Trimming the offline EAR2-01 restore path before recording exact caps: the retained preimage and armed marker make a second temporary replacement/rename unnecessary once the failed main file is discarded; startup can repeat a partial main write safely. Keep validation before reclamation, and re-run all recovery/disk-full tests, Clippy and both pinned static builds. No dependency/profile changes or host contact.Pushed
efed7d9e0: EAR2-01 offline restoration writes the new main file directly under the armed transaction marker, retaining the validated preimage and admission barrier. No extra temporary rename or resources retained across later writer-floor awaits. Added partial-main interruption coverage. Revalidation: recovery 30 passed/0 failed/2 ignored; isolated disk-full 1 passed/0 failed; all-target server Clippy/fmt pass. First over-envelope ARM measurement is attached, not hidden or admitted by a cap change. Fresh ARM measurement is running first; both final architectures will be measured before caps/final fast. No profile/dependency change or host contact.candidate-before-trim.log
recovery-green.log
disk-full-green.log
recovery-clippy.log
Pushed
8817fe61e: shared EAR2-01 restore future via existing Operation type. ARM 20,199,808 B, +607,304 B versus dev8f88bf086, 2,744 B below the prior +610,048 envelope. Sharing saves 3,936 B versus the direct-write-only control; the first repair was 20,204,128 B. No cap changed yet. Tradeoff: one allocation during rare offline restoration, no per-session/serving-path allocation. No dependency/profile/feature changes. Validation stays intact; recovery 30/0, isolated disk-full 1/0, fmt and all-target server Clippy pass. Production trust passes. Final x86 measurement is running before exact-cap commit and final fast. No runtime performance claim or host contact.arm-shared-build.log
recovery-green.log
disk-full-green.log
recovery-clippy.log
Exact-size commit
31053e59b1is pushed to edge-autoupdate-r2. Final shipping Rust source is8817fe61e; the head changes only measured ceilings and their process documentation.Pinned production-trust static recipe, sequential targets: x86_64 22,096,232 B (+675,640 against dev
8f88bf086); aarch64 20,199,808 B (+607,304). These reduce the earlier complete growth envelope by 8,440 / 2,744 B. Both caps equal the images exactly, with no allowance. Exact, +1, -1 and unsupported-target boundary checks pass; pinned recipe checks pass. No dependency, feature or release-profile changes.Final scripts/verify fast is running on the pushed head through build-slot. Runtime VM proofs remain owed by the orchestrator; no perf or production host contacted.
final-size-comparison.json
cap-boundaries.log
static-recipe-tests.log
exact-static-gates.log
author-review.txt
Final-head gate first attempt exits 1: every Rust row passes except workspace test. Server has 752 passed / 1 failed / 59 ignored. Failure: websocket::writer_tests::authority_watchdog::cap_review_r3::sqlite_busy_timeout_recovers_detached_storm_without_unlocking, websocket_authority_tests.rs:526: pool.size() - pool.num_idle() observed 5, expected 4; the immediately preceding started-read count of 4 passed. EAR2-02 committed-logout and EAR2-03 selector reviews, plus earlier D295 reviews, pass. The separate bounded-filesystem EAR2-01 case passes.
The failing test body is identical to dev
8f88bf086. A detached-dev comparison of this test is now running through build-slot in the same shared-host window, under the #118 timeout-comparison rule; no assertion or test deadline changed. This is not yet attributed or waived. Both static gates pass exact caps, production trust and linkage; final candidate artifact copies retain the measured hashes. TypeScript is not reached when Rust fails. Full first transcript:final-fast-first.log
Detached dev
8f88bf086comparison of the exact watchdog case passes (1 passed / 0 failed, exit 0). Therefore no #118 baseline-failure waiver is claimed. The failed head run remains recorded; no assertion/deadline/code changed. A fresh full scripts/verify fast run is now started on unchanged pushed head31053e59bthrough build-slot.baseline-watchdog.log
The next full attempt exposed native Cargo target reuse between the detached-dev comparison and candidate: native builds resolved a dev infraternal-protocol artifact lacking the candidate machine module/Frame::Machine, despite both being present in candidate source. Static builds still pass and retain the exact recorded hashes. This attempt is failed, not waived. Clearing only this job target's dev-profile workspace packages (keeping registry dependency artifacts) and rebuilding the final gate on unchanged head; no repository change. Full failed transcript:
final-fast-cache-collision.log
Implementation finished and pushed: edge-autoupdate-r2, head
31053e59b1. Worktree clean; issues left open.8f88bf086in2a4bf9f0a. Merge commit records conflicted files and resolutions. Dev auth/WebSocket additions audited with no missing #240 lines; production commit-publication/account-events modules remain identical. Five reviewer-union repetitions: each 52 passed / 0 failed / 1 perf-only ignored. Final workspace server suite: 753 passed / 0 failed / 59 ignored.Pinned static images, one architecture at a time, production trust/static linkage pass. Exact caps with zero allowance: x86_64 22,096,232 B and aarch64 20,199,808 B. Against fresh dev controls: +675,640 / +607,304 B, below the previous complete envelope by 8,440 / 2,744 B. No new dependencies, features or release-profile changes. Final images preserved outside the target at ~/.cache/codex-scratch/edge-autoupdate-fix/artifacts/candidate-{x86_64,aarch64}-unknown-linux-musl; hashes attached.
Final scripts/verify fast on this head exits 0, including TypeScript. Earlier watchdog pool-count failure, passing detached-dev diagnostic, and subsequent native target-reuse failure remain recorded above. After clearing native workspace artifacts, the unchanged watchdog test and full gate pass; no assertion/deadline changed and no baseline-failure waiver claimed.
Verbatim final gate summary and final TypeScript test output (complete unedited stdout/stderr attached):
Cleanup verified: own CARGO_TARGET_DIR deleted, detached baseline worktree removed, owned short/bounded fixtures removed, no owned running executable before cleanup. Branch and origin head match. Evidence and final images retained. No perf/production host contacted or deployment performed. Runtime VM proofs remain owed by the orchestrator; this implementation handoff does not supply them.
final-fast.log
cleanup-proof.json
preserved-final-images.json
native-clean.log
final-size-comparison.json
cap-boundaries.log
static-recipe-tests.log
exact-static-gates.log
author-review.txt
Final delta review started: branch review-edge-autoupdate-r3, base/target
31053e59b1. Reviewing EAR2-01/02/03 repairs, retained review tests, dev guarantees, interruption/resource exhaustion, owner-present repair and exact D301 sizes. No implementation fixes, deployment or external host contact. VM-only cases will be recorded here for the orchestrator.EAR3-01 · P1 · crates/plugins/release/src/host_watchdog.rs:64-70 (PROGRAM)
Scenario: unhealthy host successor reaches its check-in deadline while storage is full. The watchdog claims its receipt, then writes receipt.failed before restoring bin/current. ENOSPC exits the set -e shell before selection/restart/cleanup. Unhealthy candidate stays selected; update-pending and the .rollback claim remain. Freeing storage afterward cannot resume the exited transient supervisor, and begin() refuses update-pending.
Test: scripts/release/review_update_failure_test.py::RollbackFailureReview.test_disk_or_inode_full_does_not_prevent_previous_selection. Committed and pushed immediately as
5b1390854on review-edge-autoupdate-r3. Executes the exact production PROGRAM with only sleep and systemctl stubbed; all filesystem/checksum operations are real. Private unprivileged tmpfs, no external hosts: blocks=0 / free inodes=243 -> exit 1 at printf; free blocks=2043 / inodes=0 -> exit 2 creating failure record. Both fail predecessor-selection assertion (0 passed, 1 failed).blocks inodes
New P1 in this final round: redesign needed under the owner brief. Implementation left unchanged. Remaining verification is in progress.
EAR3-02 · P2 · apps/tracer/src/stale-screen.ts:48-58 · #257 dev behavior missing
Scenario: an idle terminal is reattached at exactly its replay geometry. The target unconditionally starts the stale-screen timer and shows the note; current origin/dev
0c8639496suppresses it. Test apps/tracer/src/stale-screen-dev-review.test.ts::review r3: same-size idle replay keeps the #257 no-note guarantee: 0 passed / 1 failed; expected [], got [true]. Committed/pushed immediately as0d9c7fbc5. Functional state-machine evidence; no browser visual-quality claim.stale-screen.log
Source audit: all external Cargo.lock package records and crates/infraternal-shim/src/readiness.rs are identical to current dev. Full lockfile is not byte-identical: expected workspace dependency edges for the updater differ. #240 commit-publication/account-event/session modules are identical. Earlier named review bodies are identical except EAR2-02 changes revocation_events() to revocation_events(&f.user), and the prior D295 disk test has a closure-to-method formatting change. No assertion was removed. Literal byte-identical requirement is therefore not satisfied, although the original assertions are retained.
VM-only qualification for orchestrator (#211/#236), after a written redesign plan resolves EAR3-01. This review contacts no perf, production or test host.
Required whole-service fault matrix: interrupt download, manifest/image verification, durable image/database write, executable handoff, selector publication, service restart, listener/reconciliation health, and rollback. At each stage run process termination/power loss, block exhaustion, and inode exhaustion on an isolated bounded volume. Assert the predecessor remains signed/runnable, startup recovers without manual file deletion, and a subsequent signed offer can proceed. Local filesystem tests already disprove the universal guarantee: EAR3-01 leaves the unhealthy host image selected and a claimed pending transaction on either storage boundary. Unit state modeling cannot establish system-manager/power-loss recovery.
Managed-host proof must exercise the exact production transient PROGRAM under a real manager, including termination after receipt claim, failure-record fsync/rename, watchdog-current creation, selector rename, pending removal and service restart. After storage is freed, reconstruct the receiver and try a different signed update; record pending/claim state. The local shell reproduction stubs only deadline sleep and systemctl; it proves filesystem ordering, not actual restart behavior.
Retain the earlier pending VM-only evidence: scripts/release/staging-proof --updates --active-streams 128 --review-case routes; --review-case transport; --active-streams 1 --review-case reconnect; --review-case writer-cost; signed successor migration/startup refusal and managed-host deadline rollback. Use the existing script's documented managed-host and release-harness flags and the orchestrator's authorized isolated VM, one bounded lock hold at a time. No measurement from this shared build host is performance evidence.
For #236 additionally exercise disconnect/cancellation before credential use, after reservation and during install; replay a consumed owner proof/one-use SSH input from another socket, attempt API-key/unattended repair, and confirm that cancellation cannot mutate another attempt's reservation. Local backend/SSH tests cover ownership and cancellation; this review does not equate their success with a physical-presence or replay-security proof.
EAR3-03 · P1 · crates/infraternal-server/src/update_recovery.rs:445-448, stable():198-205
Scenario: after the admitted candidate starts and migrates, it consumes every inode while free data blocks remain. Predecessor enter() returns "Update recovery copy is unavailable" and the marker remains Armed, preventing startup and another prepare. The reclamation fix frees/reuses the live main inode but selector and phase publication still require new inodes. No external host or shared filesystem was filled.
Failing test: update_recovery::tests::inode_review::review_r3_inode_full_still_restores_and_allows_another_attempt, in update_recovery_inode_review_tests.rs. Private 32 MiB tmpfs, nr_inodes=256: available_inodes=0, available_blocks=8183; 0 passed / 1 failed. Immediately committed/pushed as
6877472c5. server-inodes.logCorrection to the earlier EAR3-01 location: the failing failure-record write is host_watchdog.rs:56, before selector restoration at :61-62; :64-70 was an inaccurate initial line reference.
Current new findings: P0=0, P1=2 (EAR3-01, EAR3-03), P2=1 (EAR3-02), P3=0. Per final-round brief: redesign needed. No implementation fix. Five #240 repetitions and final-head fast are next.
EAR3-03 location confirmed with a diagnostic interposer that logs selector syscalls without changing their results: initial current.partial symlink succeeds; after inode exhaustion the recovery symlink returns -1/errno 28. This is update_recovery.rs stable() following restore_copy(), not an inferred SQLite refusal. The original committed failing test does not depend on the interposer.
server-inodes-trace.log
source-comparison.json
stale-screen-dev.log
The #257 same-size regression passes unchanged against dev's source (1 passed / 0 failed), and fails against the target (0 passed / 1 failed). Current dev is
0c8639496; the target's merge base with it is8f88bf086. No implementation was changed. Review head and remote branch both equal6877472c51.Final review checkpoint on pushed head
6877472c51. Five independent #240 reviewer-union repetitions each pass 52/0 with one perf-only ignored. Includes EAR2-02 committed logout, 256 sockets/61 accounts, commit cancellation/refusal and source-loss 1013 handling. No deadline/assertion changed and no baseline waiver. Recovery ordinary suite 30/0, 3 ignored (the pre-existing disk/perf cases plus new explicit inode regression); EAR2-01 executed separately and passes with initial free 29,331,456 B, remaining 12,288 B and copy 4,210,688 B. The new P1 inode test was separately executed and fails as recorded. Fmt passes. Remaining agent-feature slot suite, full repair filters, final fast and fresh merge-base static comparison are pending.union-1.log
union-2.log
union-3.log
union-4.log
union-5.log
recovery.log
server-blocks.log
Review branch advanced to
9972049625and pushed. This fourth atomic commit fixes only a redundant diagnostic closure in the new EAR3-03 test after pedantic Clippy rejected it; the failing assertion/scenario and implementation are unchanged. Workspace Clippy then passes in the full gate. Full workspace tests are now running. The earlier dedicated Clippy failure is retained in the external review-clippy.log; no implementation finding is attributed to it.First full-gate workspace run: server 750 passed / 3 failed / 60 ignored. All failures are setup-token socket construction (runtime.rs:1222,1326,1398), reporting "path must be shorter than SUN_LEN". Our chosen TMPDIR ended in /r3: that gives 108-byte setup socket paths. An atomically-created owned single-character scratch root gives 107 bytes. All three cases pass unchanged there: 3 passed / 0 failed. This is a corrected invocation, not a code fix or a #118 load waiver. Full transcript remains retained; the final head gate will use the corrected root.
setup-short-root.log
Review head
db301eb844adds bounded-filesystem guards to both explicit resource fixtures before any filler is written. Guarded host inode case still fails at predecessor selection; no implementation changed.Supplemental checks at review head
db301eb844: release with agent feature passes 56 unit tests plus 3 integrations (EAR2-03 passes); full repair backend/API filters 10/0; SSH repair 2/0. Guarded inode-full reproduction still fails 0/1, with 0 available inodes and 8,183 available blocks. No implementation change.First complete fast gate exits 1: three setup Unix socket path-length failures (unchanged tests pass under corrected root), and static review-head sizes 22,096,384 / 20,199,896 B, exceeding pinned caps by 152 / 88 B. The transcript is retained. Fresh merge-base and untouched target images are being built to distinguish review branch artifacts from target
31053e59b; final-head gate remains pending.repair-full.log
release-agent.log
ssh-repair.log
server-inodes-head.log
final-fast.log
EAR3-04 · P3 · scripts/verify.d/rust.sh:68–69. The untouched target
31053e59bx86 static image measures 22,096,384 B, versus exact declared cap 22,096,232 B (+152 B), so static builds fails. Review branch produces the same size. Reproduction committed immediately as6c64054c6and pushed only review-edge-autoupdate-r3: scripts/release/review_update_size_test.py::DeclaredImageSizeReview.test_x86_image_matches_declared_size. ARM untouched measurement pending (review-head ARM is 20,199,896 B versus 20,199,808 B). This remains inside D301 growth envelope; no cap changed. Counts now 0 P0 / 2 P1 / 1 P2 / 1 P3; verdict remains redesign needed.Fresh merge-base x86 succeeds after removing only this job's CLI package artifacts: 21,420,592 B. Initial comparison link reused build-script output for a newer update-note.ld absent in the older source; both failed and clean retry transcripts retained.
size-review-first.log
baseline-static.log
baseline-static-retry.log
Final delta review: redesign needed. Target
31053e59b; review head6c64054c62. Counts: 0 P0, 2 P1, 1 P2, 1 P3. No implementation changes, deployment or external-host contact.EAR3-01, P1 — crates/plugins/release/src/host_watchdog.rs:56. Block-full or inode-full storage prevents the failure record before selector restoration. The watchdog exits with the unhealthy candidate selected, update-pending present and rollback receipt claimed. Failing test: scripts/release/review_update_failure_test.py::RollbackFailureReview.test_disk_or_inode_full_does_not_prevent_previous_selection. Exact production shell body, only sleep/systemctl stubbed; bounded private tmpfs.
EAR3-02, P2 — apps/tracer/src/stale-screen.ts:48–58. Same-size idle replay starts a stale note timer; current dev preserves no-note behavior (#257). Failing test: apps/tracer/src/stale-screen-dev-review.test.ts, “review r3: same-size idle replay keeps the #257 no-note guarantee”. Same test passes against dev source.
EAR3-03, P1 — crates/infraternal-server/src/update_recovery.rs:445–448 (stable). With zero free inodes, recovery restores the database but cannot create updates/current.partial. Predecessor startup fails and the marker remains Armed. Failing test: update_recovery::tests::inode_review::review_r3_inode_full_still_restores_and_allows_another_attempt. Bounded private 32MiB/256-inode tmpfs.
EAR3-04, P3 — scripts/verify.d/rust.sh:68–69. Untouched target static images differ from their exact pinned caps. Failing tests: scripts/release/review_update_size_test.py::DeclaredImageSizeReview.test_x86_image_matches_declared_size and test_arm_image_matches_declared_size. The final static gate independently checks the same real artifacts. No cap changed.
Earlier EAR2-01/02 pass. Five #240 union repetitions each pass 52 tests, 0 failed, 1 perf-only ignored. Recovery ordinary suite: 30 passed, 0 failed, 3 ignored; earlier block-full review test executed explicitly and passes. Literal byte identity is not fully met: logout adapts revocation_events() to revocation_events(&f.user), D295 disk fixture replaces a closure with a method call and updates ignore wording, and the interruption test adds cases; prior assertions are preserved. Source comparison receipt records exact exceptions.
Compared against origin/dev
0c8639496b: external Cargo.lock dependency records and relevant AsyncFd/readiness callers are identical. Full lockfile differs in workspace dependency edges; it is not byte-identical. #252 status source is identical; setup test has selector fixture integration. #240 production account/session/commit publication code is identical. #257 is not intact, as EAR3-02 demonstrates.The first complete gate invocation used a fixture root one byte too long for three Unix sockets; all three unchanged tests pass with the corrected root. The first transcript is retained. An earlier review-test diagnostic hit Clippy's redundant-closure lint, corrected in a separate test-only commit. Neither is an implementation finding. The final-head gate below uses the corrected root.
Whole-service interruption/power-loss and resource-exhaustion matrix at download, verify, write, swap, selector, restart, health and rollback remains VM-only; exact scenarios are already posted above for the orchestrator. Local boundary tests disprove the universal recovery requirement. Local #236 owner/origin/reservation/SSH checks do not establish physical owner presence or full replay security; VM scenarios remain listed above.
Untouched target images: x86 22,096,384 B, ARM 20,199,896 B, respectively +152/+88 B over exact declared caps. They are byte-identical to the review-head images (SHA-256 receipt attached). Fresh x86 merge-base
8f88bf086image: 21,420,592 B; growth +675,792 B versus accepted +684,080 B envelope, leaving 8,288 B. ARM growth +607,392 B against the recorded 19,592,504 B baseline and +610,048 B envelope, leaving 2,656 B; ARM baseline was not freshly rebuilt. Both exact-size tests fail; no cap changed. Initial baseline linking reused stale CLI build-script output naming an absent newer linker script; a clean CLI-package retry succeeds, with both transcripts retained.Final-head server suite: 752 passed / 1 failed / 60 ignored. The failure is the existing websocket::writer_tests::authority_watchdog::cap_review_r3::sqlite_busy_timeout_recovers_detached_storm_without_unlocking assertion (observed pooled reads 5, expected 4). A direct isolated target rerun passes 1/0. This remains a failed final gate, without a baseline waiver. Detached dev comparison results follow.
Detached dev
0c8639496passes five isolated repetitions of the concurrency test (1/0 each). This did not reproduce the full-gate failure and is not a waiver or a claim of a new branch regression. Tracer check initially could not resolve missing local type dependencies; after bun install --frozen-lockfile, bun run check exits 0. No tracked dependency file changed.Supplemental host suite: 56 passed / 0 failed / 2 ignored plus 3 passing integrations; EAR2-03 passes. Repair backend/API filters: 10/0. SSH repair: 2/0. New guarded inode test: 0 passed / 1 failed.
Final scripts/verify fast on head
6c64054c62, verbatim summary (full output attached):head-fast.log
busy-isolated.log
last-check-sequence.log
dev-busy-1.log
dev-busy-2.log
dev-busy-3.log
dev-busy-4.log
dev-busy-5.log
tracer-check.log
tracer-check-installed.log
size-review.log
static-comparison.json
target-x86_64-unknown-linux-musl.log
target-aarch64-unknown-linux-musl.log
repair-full.log
release-agent.log
ssh-repair.log
server-inodes-head.log
final-fast.log
Cleanup: no executable from the job target remained running before deletion. Job target and detached baseline/target/dev comparison worktrees removed; owned short fixture root removed. Review worktree, pushed review branch and external evidence retained. The earlier unmarked short fixture directory is retained rather than deleting a path without an ownership marker.
Plan job started on plan-211-update from origin/dev
0c8639496. Research only: read #211/#236 histories, D251/D295/D217/D301/D23/D148, review branches and calternal PR #765; then write docs/plans/211-edge-update.md. No product code, deployment or edits to existing branches. Will compare durable known-good selection with reserve-only recovery and state explicit memory/storage limits.Research findings for the redesign: rollback must not be a write transaction. At
31053e59b, host_watchdog.rs persists a failure receipt and creates a selector before restart (EAR3-01); server update_recovery.rs restores data then creates current.partial/publishes a marker (EAR3-03). Keeping current on A until B passes health removes those rollback dependencies. A restricted read-only startup is still required; retained signed bytes alone do not make today's startup allocation-free. Atomic rename/preallocated inodes do not guarantee metadata/fsync success under ENOSPC, and no updater can guarantee execution under unrestricted global OOM.Comparison: calternal PR #765's initial one-pointer trial design is useful, but its subsequent final review rejects stopping healthy recovery when a reserve cannot refill. Apply that lesson: storage pressure blocks the next update, never healthy recovered service. The draft also distinguishes D301's updater +635,928 B from #236 legacy repair +48,152 B = +684,080 B, and includes all EA-01..06/EAR2-01..03/EAR3-01..04 findings. Owner decisions are proposals; DECISIONS.md is unchanged.
Design document committed and pushed: plan-211-update @
39f9a149b3, based on dev0c8639496. Only docs/plans/211-edge-update.md changed. Three A4 pages at 10pt prose / 9pt tables: print check.Coverage checks: 13/13 named independent review findings, 13 interruption rows with separate block-full/inode-full columns, memory limits, preserved D295 historical-state manual rollback (distinct from calternal), #236 owner-present repair, source/line counts, binary-size provenance and four owner questions. Whitespace and repository artifact gate pass. Full scripts/verify fast is running through the shared build-slot wrapper; no final-gate pass or VM proof claimed yet. Read-only startup, WAL preservation and owner answers are implementation prerequisites, not shipped behavior.
Size-comparison refinement pushed at
7cc5334b29: the four reference modules total 1,521 physical lines including inline test tails, but 1,297 before those tails (702+200+95+300). The plan now compares the proposed 600–900 core-line budget against the latter and explicitly requires counting plugin adapters separately; total reduction is unproved. Updated three-page print check: https://git.kayg.org/attachments/67f7929b-1403-49e9-8326-ffe5f759179a . Full fast gate remains in progress; no product changes.Final document pushed at
c9c1877e92. Follow-upc94a043dfpreserves failed-image pause by inferring abandoned prepared attempts without requiring a rollback receipt;c9c1877e9condenses prose back to three pages. Final A4 print check (10pt prose, 9pt tables): https://git.kayg.org/attachments/319d2060-19fa-4c24-8e41-6095abd86274 . Earlier print attachments are superseded.Only docs/plans/211-edge-update.md differs from dev; whitespace/artifact checks pass. Full fast is now executing native lifecycle tests after passing fmt, CLI compile-out and Clippy. VM proofs are specified, not executed. Final gate output and cleanup follow separately.
Gate update at
c9c1877e92: first scripts/verify fast completed; all rows passed except workspace test replay_size_review, whose fixture rejected a 108-byte AF_UNIX socket path. No source edits. With a short owned scratch root, the same real-binary raw and snapshot replay checks both pass. Full gate rerun now uses that root. Static binaries matched exact caps: x86_64 21,431,472 B; ARM 19,605,896 B.First gate transcript · Corrected replay invocation
Research plan finished and pushed:
plan-211-update@c9c1877e9233f93afbeec7a7d3630c927b447ae1, based onorigin/dev@0c8639496b376362b27689122583c53ade4a4668. Onlydocs/plans/211-edge-update.mdchanged; three printed pages, 13 reviewer findings and 13 interruption rows with disk/inode outcomes.Recommendation: retain immutable known-good binary/database A throughout B’s trial, commit one prepared pointer only after real health, and make fallback startup read-only without mandatory persistent writes. Keep D217 handoff and #236 owner-present repair safeguards; shrink before extending D301. The document explicitly limits the guarantee to available execution resources and records four owner questions. It proposes, but does not run, the orchestrator’s VM proofs. No product code or existing branches changed.
Design source · Three-page print · Complete final gate output
Final
scripts/verify fastpassed after correcting the invocation’s AF_UNIX fixture path; the first failed invocation and corrected targeted check are recorded above on #211. Static sizes: x86_64 21,431,472 B and ARM 19,605,896 B, exact current-dev caps. No performance claim from this build host. Final gate summary/output verbatim:Implementation started on edge-update-v2 from origin/dev 2fb412d01b (fresh worktree; exact base from git rev-parse recorded below). Approved 2026-10-30 design: plan-211-update
c9c1877e9, owner accepts D301 overrun; root is allowed on build/QA VMs where needed. Preserve known-good selection through health, one prepared pointer commit, no mandatory recovery writes, read-only fallback, host lockstep and owner-present repair. Reference reuse will be selected deliberately from31053e59b, never a branch merge. No perf host contact or deployment; VM-only proof commands/artifacts will be handed to the orchestrator. Repository is public; no credentials will be posted.2fb412d01dStorage slice committed as
7b464a597: private complete-generation metadata, kernel-owned preparation and one prepared-pointer rename. Restart reads only current; ENOSPC/EDQUOT/EIO before rename, after rename and at parent fsync reconcile actual selection without a flip-back write. Seven new tests pass; release suite 14 passed/1 measurement ignored, existing integration checks 3 passed/2 subprocess helpers ignored; touched release Clippy and fmt pass. No runtime availability claim: watchdog, read-only serving, signed/handoff/host integration and full failure-table coverage remain outstanding. Auth/websocket/replay remain identical to task-base dev. No prior review assertion has been declared obsolete.SQLite storage slice committed as
73d19309f(preceded by process-lock regression3d1aea6a3). Reused only reference copy_main/RAII finish code; excluded encrypted deserialization. Optional feature uses the already-pinned libsqlite3-sys 0.30.1 engine. Added guarded PERSIST_WAL and NO_CKPT_ON_CLOSE controls. Three actual-SQLite tests pass: online-copy isolation; committed WAL after close; committed WAL after abrupt child exit. Three repeated read-only opens with main/WAL/SHM 0400 and directory 0500 create no files and leave every byte unchanged. Eight generation tests, existing release tests, touched shim/release Clippy and fmt pass. This proves the primitive, not full read-only runtime startup or power-cut recovery. Auth/websocket/replay and dev dependency versions remain unchanged. Runtime/watchdog/host integration and remaining review/failure-table coverage are still pending.Shared verification slice committed/pushed as
b8ec50323: copied reference31053e59brelease verifier and bounded digest helper deliberately, with server re-exports and the original tests moved intact. API tests: 36 passed/1 ignored plus 2 integration passed; server release filter: 27 passed/4 ignored. Feature-off API check and API/server all-target Clippy/fmt pass. No production auth, websocket, replay or dependency version changed. Generation/SQLite primitives remain unconnected to runtime; the supervised trial, read-only core, transfer/host integration, #236 repair, full failure table and VM acceptance are still outstanding. Porting the independent EAR2-02/EAR3-02 dev preservation regressions next; no prior assertion is marked obsolete.Independent dev-preservation regressions are committed/pushed at
4177bdab2(migration-journal isolation at3fdacaeb5). EAR2-02 cancelled-logout and EAR3-02 same-size idle replay assertions pass; production auth/websocket/replay are unchanged. The #240 account-revocation union passed 5/5: each run has 35 distinct passing tests, 43 executions across account_events, per_account_revocation, review_account_scope, logout_commit, review_edge_revocation_tests, and review_r2; only the existing publication measurement remains ignored. All external Cargo.lock records match task-base dev exactly. Tracer TypeScript check passes after installing its unchanged frozen dependencies. Exact pinned static baseline/head measurements are running serially on 6by32-compute02; full fast gate follows. The runtime/host redesign remains incomplete; this is not a MERGE-ready updater or #236 repair implementation.Runtime integration constraint: current dev runtime.rs open_database uses SqliteSynchronous::Normal (line 778 in this worktree). The pinned SQLite engine explicitly documents WAL NORMAL as syncing before checkpoint, while FULL syncs after each commit (libsqlite3-sys 0.30.1 sqlite3.c:60689-60705). PERSIST_WAL/NO_CKPT_ON_CLOSE preserve sidecars; they do not strengthen commit durability. The new primitive tests use the engine's default FULL setting and prove read-only crash reads, not current production power-cut durability. The plan's acknowledged committed-B WAL assertions therefore still need explicit runtime durability/admission integration and the orchestrator's power-cut/performance proof; do not infer them from the primitive checks. No production synchronous setting or performance profile has been changed by this branch.
Resuming implementation on edge-update-v2 at
4177bdab29, based on dev2fb412d01d. Existing commits are foundational primitives and dev regression guards only; runtime update/recovery/lockstep/repair integration is not complete or merge-ready. The #240 reviewer union passed all five repetitions (35 unique tests / 43 executions per repetition). Sequential pinned baseline/head static builds are in progress. Continuing the approvedc9c1877e9plan and original review triggers; no perf VM contact or VM proof runs.Startup binding implementation detail for the approved fixed current/generations format: retain the existing public MANIFEST, MANIFEST.sig and signed VERSION names beside each generation executable. Preflight will verify both the selected exact image descriptor and /proc/self/exe against the same signed architecture artifact, signed version and launch.json version before exposing its pinned state directory. It must perform reads only and must never select current.prepared. This is a preflight primitive; runtime boot adoption, read-only serving and supervised health remain separate unfinished integration.
Two foundational admission gaps reproduced before fixes: exhausted_writer_reservation_cannot_admit_a_trial failed (0 passed, 1 failed) because generation::Owner::prepare accepted writer_floor=2147483647; candidate_without_signed_metadata_cannot_be_prepared failed (0 passed, 1 failed) because publication synced image/DB/config but did not require the signed launch files. Preparation now refuses exhausted reservations and persists MANIFEST/MANIFEST.sig/VERSION with the launch set. Signed preflight functional tests: 4 passed, 0 failed (selected and actual image binding, version mismatch, candidate cold-entry refusal, unsafe metadata). Full touched-crate gates remain pending the sequential size build. These checks are primitives, not runtime startup/health acceptance.
Pushed portable-fixtures checkpoint
7845bc030aon edge-update-v2. Formatting, touched-crate all-target Clippy and relevant functional tests passed immediately before this commit; launch-parser also passed the new harness compile check. Exhaustion fixtures remain VM-only and were not run here. Runtime update/recovery/lockstep/repair integration remains incomplete; this is not merge-ready. Full branch-head scripts/verify fast is still required.Pushed writer-floor checkpoint
7dadfe720don edge-update-v2. Formatting, touched-crate all-target Clippy and relevant functional tests passed immediately before this commit; launch-parser also passed the new harness compile check. Exhaustion fixtures remain VM-only and were not run here. Runtime update/recovery/lockstep/repair integration remains incomplete; this is not merge-ready. Full branch-head scripts/verify fast is still required.Correction to the automatic checkpoint comments for
7845bc030and7dadfe720: their formatting, touched-crate Clippy and relevant functional tests passed. The sentence about launch-parser compile validation was premature template text; that separate parser checkpoint has not run yet. These two commits do not add the parser target. Its actual compile result will be recorded when reached.Pushed signed-startup checkpoint
d7e3413c44on edge-update-v2. Formatting, touched-crate all-target Clippy and relevant functional tests passed immediately before this commit; launch-parser also passed the new harness compile check. Exhaustion fixtures remain VM-only and were not run here. Runtime update/recovery/lockstep/repair integration remains incomplete; this is not merge-ready. Full branch-head scripts/verify fast is still required.Pushed launch-parser checkpoint
2b77f504b5on edge-update-v2. Formatting, touched-crate all-target Clippy and relevant functional tests passed immediately before this commit; launch-parser also passed the new harness compile check. Exhaustion fixtures remain VM-only and were not run here. Runtime update/recovery/lockstep/repair integration remains incomplete; this is not merge-ready. Full branch-head scripts/verify fast is still required.Pushed exhaustion-regressions checkpoint
6b4cab3dc9on edge-update-v2. Formatting, touched-crate all-target Clippy and relevant functional tests passed immediately before this commit. Exhaustion fixtures remain VM-only and were not run here. Runtime update/recovery/lockstep/repair integration remains incomplete; this is not merge-ready. Full branch-head scripts/verify fast is still required.Resuming implementation on edge-update-v2 at
35b2234b7b; original dev base2fb412d01d. The approved runtime updater remains incomplete: the current commits provide generation/SQLite/verifier primitives and retained dev regressions. Running the branch-head fast gate before further integration. No perf VM contact or execution.Correction to earlier checkpoint template: the premature parser-compilation claim also applies to
d7e3413c4, as well as7845bc030and7dadfe720. The actual parser check passed before2b77f504b; later recorded checks are valid.Next approved reuse slice: retain only 31053e59b's activity.rs foreground/quiet-window coordinator, then port its two checkpoint-input continuity triggers onto dev's current socket fixture. Production websocket changes will be limited to handshake/attach/open/input foreground fencing required by plan invariant 2. Dev's while_authorized_operation account cursor, source-loss handling, renewal and replay logic will remain intact; the retained typed frame will stay inside that existing guard and recheck authority after cancellation. No old websocket file or branch merge. The new hooks compile out with the release feature. The first run of the retained socket tests will precede these hooks to verify their ordering failure.
This remains incomplete updater work; no runtime or VM acceptance claim.
Checkpoint verified: edge-update-v2 head
35b2234b7b.scripts/verify fastexited 0. The complete unmodified transcript is attached below; Rust summary and final protocol-test output are quoted verbatim. No baseline exceptions were needed.verify-fast.log
Static images reproduced 21,443,728 / 19,614,152 B exactly (x86_64 / ARM; production trust, PT_INTERP absent). This is an incomplete foundation checkpoint, not an implemented updater or acceptance of runtime watchdog, read-only service, host lockstep or #236 repair. Continuing the approved foreground integration next.
Orchestrator-only storage primitive archive from clean head
35b2234b7b. SHA256c7796db4738bf2945a2219a6be25fcea5d56fd1afb08a850fd92cb9ab8891970. No VM contact or execution by this job.After copying the archive to a disposable perf working directory, extract it there and run:
The root command creates private 32 MiB/256-inode ext4 and tmpfs mounts and fills blocks/inodes separately, retaining fillers through repeated selection and immutable A reads. It runs only the two ignored storage primitive tests, not integrated daemon recovery.
SCOPE.txtnames the missing runtime/watchdog/reboot/power-cut/lockstep/repair acceptance. This is not the full failure-table archive; the required root warm-handoff proof is also not yet packaged.Compile-out passed. The parser completed 10,000 bounded functional inputs with no failure; this was an uninstrumented run, with explicit missing sanitizer/coverage warnings, and is not coverage or performance evidence. Its remote-only dependency combination emitted the six already known dead-code warnings; the full fast gate was warning-clean under its checked feature set.
Correction to the preceding storage-archive comment: the upload was rejected with HTTP 422, so that comment did not attach an archive. The public /api/v1/settings/attachment response permits .gz/.tgz but not .zst (max_size 2048 MiB). The archive is 38,903,341 B; the rejected extension is the cause. Repacking the same fixture bytes as .tar.gz and will post the downloadable archive, new SHA256 and corrected extraction command. Do not use the preceding .tar.zst command as a completed handoff. This does not affect the successful fast-gate log attachment.
Corrected downloadable archive: the permitted .tar.gz upload succeeded. Its executable/library bytes are identical to the rejected .zst archive; the archive SHA and extraction command below supersede the earlier comment.
storage-primitives-35b2234b7b79.tar.gz
package-gates.log
Orchestrator-only storage primitive archive from clean head
35b2234b7b. SHA256df54a4876e27ae565fb6d41462961c5b3092a73785ab9cbaed5b106216edff77. No VM contact or execution by this job.After copying the archive to a disposable perf working directory, extract it there and run:
The root command creates private 32 MiB/256-inode ext4 and tmpfs mounts and fills blocks/inodes separately, retaining fillers through repeated selection and immutable A reads. It runs only the two ignored storage primitive tests, not integrated daemon recovery.
SCOPE.txtnames the missing runtime/watchdog/reboot/power-cut/lockstep/repair acceptance. This is not the full failure-table archive; the required root warm-handoff proof is also not yet packaged.Compile-out passed. The parser completed 10,000 bounded functional inputs with no failure; this was an uninstrumented run, with explicit missing sanitizer/coverage warnings, and is not coverage or performance evidence. Its remote-only dependency combination emitted the six already known dead-code warnings; the full fast gate was warning-clean under its checked feature set.
Resuming edge-update-v2 from base
2fb412d01d; current pushed head942fdceaa. Retained only the approved foreground coordinator from31053e59b, behind socket-host. No production websocket hooks yet. Per-slice cargo fmt --all --check, API clippy (socket-host,release-verify) with -D warnings and API library tests exited 0: 41 passed; 0 failed; 2 ignored. Runtime generation startup/watchdog/read-only integration, host lockstep/repair and full failure-table proof remain incomplete. Next: reproduce held-checkpoint foreground input failure before hooks. Previous full fast gate applies only to35b2234b7.Foreground integration red evidence at
942fdceaa: the retained plain-input test failed withinput crossed the held foreground fence; the WAL/session-renewal case failed withcheckpoint renewal closed the original browser. The original hook revision then passed both tests and server all-target clippy. A revision reusing the existing decoded frame (no duplicate parse per keystroke), plus a preservation test for logout while the frame is retained, is queued for verification. Dev while_authorized_operation/account publication/source-loss/renewal machinery is unchanged. These are functional ordering checks, not perf-VM latency evidence. Runtime startup/watchdog/read-only and host lockstep/repair remain incomplete.Default-feature server-suite finding: 423 passed; 2 failed; 25 ignored. Both failures are review_subscription_refusal::{oversized_refusal_cannot_reinstall_a_queued_mesh_subscription,review_oversized_replacement_ends_the_previous_mesh_subscription}, line 179: actual
plugin unavailable, expectedmesh unavailable. Reproduced the identical pair on untouched dev2fb412d01and this branch in one build slot: each targeted run has 1 passed; 2 failed. This is an error-text assertion, not a timeout/load exception, and is not being counted as green. The test file and production subscription code are unchanged. Next run uses shipping remote features (as the full workspace gate does); no unrelated production behavior or assertions are changed. Foreground tests themselves passed all 3, and server all-target clippy passed.subscription-baseline-default.log
subscription-branch-default.log
foreground-server-suite.log
Continuing edge-update-v2 at
942fdceaac(base dev2fb412d01d). Foreground socket hooks remain uncommitted while their broad gate runs. All three targeted tests passed, including cancellation by committed logout while input waits behind the checkpoint fence. The hooks classify the existing decoded frame once; while_authorized_operation remains byte-identical to base dev.The standalone server remote feature enables host remote without host mesh and hits two unchanged unnecessary_wraps lints in infraternal-agent/src/plugins.rs:123/133. The gate is now using remote,infraternal-agent/mesh to match shipping host capabilities; clippy passed and the full server suite is running. The previously reported pair of default-feature subscription assertion failures remains a reproduced dev-baseline finding, not a passing gate.
Next slice: real-SQLite read-only auth tests before runtime integration. The branch is still an incomplete generation foundation; no integrated updater or failure-table acceptance is claimed.
Foreground socket slice pushed:
e3f0d1330(D251, #211). The existing decoded frame waits within dev's account-scoped authorization watchdog until preparation cancels and joins; a fresh deadline check follows fence release. Handshake/attach/open lifetimes use the retained coordinator. The shared sequence bounds preserve dev's input admission and prevent acknowledged replay postponing updates. No prior review test is obsolete in this slice.Shipping-feature server clippy and fmt passed. Full server suite:
The duration is a functional gate transcript, not a performance claim. Both previously reported default-feature subscription assertions pass with shipping features. The five #240 repetitions are still running. Read-only auth acceptance tests have now been added as a separate uncommitted red slice; generation runtime/watchdog/failure-table/repair work remains incomplete.
foreground-server-remote-suite.log
checkpoint-single-decode.log
Foreground preservation gate finished with exit 0. All five #240 reviewer-union repetitions passed (45 passed across six filters in each repetition; one intentionally ignored measurement). Server no-default-feature compile-out also passed. This validates pushed socket slice
e3f0d1330; later read-only work will require fresh preservation checks. The full fast gate still applies only to foundation head35b2234b7, not this head.socket-240-summary.txt
Read-only auth red evidence, on pushed socket head
e3f0d1330plus the explicit constructor seam and new acceptance tests: opening initialized SQLite under PRAGMA query_only=ON fails with SQLite code 8 (attempt to write a readonly database). The exact constructor test reports 0 passed, 1 failed. HTTP identity/mutation and pending-cookie checks independently fail at that same constructor step.The shared build slot is queued. The already compiled exact single tests ran directly under the shared rules' single-unit-test exception, without a build or suite bypass. Full server auth/clippy gates remain slot-wrapped. Proposed implementation now skips migrations only on explicit read-only admission, validates the complete checksum journal with bounded SELECTs, reads sessions without sliding/deletion and refuses HTTP mutations before handlers. Normal migration and committed logout publication remain in their existing paths. This is an uncommitted slice, not production fallback or completed runtime recovery.
readonly-auth-single-red.log
Build capacity checkpoint: the slot-wrapped read-only auth gate has been queued since 09:35:21 UTC; at 10:00:56 UTC its log is still empty. No second heavy command was started, and no shared lock/process was changed. The already compiled single-test red evidence is attached above. Foreground socket slice
e3f0d1330is pushed and its five #240 repetitions passed; the auth changes remain uncommitted pending their gate. Runtime tests and the #236 route-binding reuse audit were prepared while waiting. Continuing to wait for the existing build-slot wrapper; this is not a test failure or a completed slice.Required integration oracles beyond the current primitives (#211):
These are implementation requirements/proposed test oracles, not implemented or proven behavior.
Auth slice pushed:
22a9b107c. Explicit read-only auth validates the complete bounded migration journal without a migration writer, reads live or restricted pending sessions without sliding/deleting rows, skips background renewal and refuses HTTP mutations without Set-Cookie. Normal origin checks, migration ordering, normal session statements, committed logout publication and live-expiry reads remain in their existing paths. No prior review test is obsolete.Per-slice gate exited 0: fmt, shipping-feature server all-target clippy with -D warnings, five new read-only tests, broader auth suite, server compile-out.
Durations above are functional transcripts, not performance evidence. The full fast gate remains at the earlier foundation head and will be rerun after integration. This constructor alone is not production fallback: physically read-only runtime admission, sockets, watchdog, lockstep and #236 repair remain incomplete. Next: actual router restart with frozen main DB versus committed latest-WAL state, with unchanged file names/bytes.
readonly-auth-gates.log
readonly-auth-suite.log
Continuing implementation on edge-update-v2, base dev
2fb412d01d, pushed head22a9b107c. Current slice: physical read-only HTTP/router startup over frozen predecessor and persistent committed WAL. The fallback constructor is not yet wired to production generation startup; socket/plugin admission, watchdog/health/commit and #236 repair remain outstanding. One broad gate is queued through build-slot; the new single-unit regression is being compiled under the shared single-test exception. No external host contact or deployment.Read-only storage/router slice pushed at
2fca4ec1b. The physical regression first failed on normal startup with SQLITE_READONLY (code 8). The explicit constructor now reads initialized frozen-main or committed latest-WAL state without migrations, chmod/create, setup tokens, connection recovery or optional workers. Three restarts in each mode preserve every filename and byte and the directory permissions. No prior review test is obsolete.Per-slice gate exited 0: fmt, shipping-feature server all-target clippy (-D warnings), physical regression, runtime filter and server compile-out:
Durations are functional gate transcripts, not performance evidence. One earlier clippy invocation rejected the lifecycle test's length; the explicit test-local lint allowance was added and the complete per-slice gate rerun. Existing pinned SQLite/WAL support is enabled through the release feature; no dependency versions changed. Full fast, current-head sizes and automatic generation admission remain outstanding. The plugin admission regression is now red independently (unsupported feature remained enabled); socket/plugin integration and the watchdog/lockstep/repair work remain incomplete.
readonly-runtime-single-red.log
readonly-runtime-recheck.log
readonly-runtime-suite.log
Continuous-owner reuse audit (#211, plan invariant 1): generation::Owner currently stores nix::fcntl::Flock. The pinned nix 0.30 source fcntl.rs:1041-1046 implements Drop by explicitly calling flock(fd, LOCK_UN). A duplicated or SCM_RIGHTS-transferred descriptor shares that open file description, so merely retaining a duplicate in the watchdog does not preserve exclusivity when the service drops its Flock guard. Before runtime transfer integration, add a real descriptor-lifetime regression (duplicate held lock; drop original owner; reject a competing acquisition until the last duplicate closes) and use close-only lock ownership. No transfer is currently implemented; this is a source-backed integration requirement, not a proven runtime failure or completed fix.
Read-only feature admission pushed in two logical steps:
418f58ed0(default-off Plugin capability and inventory opt-in),c931cf504(runtime discovery, stored-switch filtering, switch/node refusal). The real-SQLite regression first failed because an unsupported feature remained enabled. Recovery now keeps the inventory reader only when its stored setting permits, preserves every stored switch, rejects switches before a writer wait and refuses node observers/authority-change callbacks. Core uses the generic capability, not plugin names. No prior review test is obsolete.Per-slice fmt and API/remote/server all-target clippy (-D warnings) passed. API: 41 passed, 0 failed, 2 ignored. Inventory: 4 remote + 23 server passed, 0 failed, 2 server measurements ignored. Server plugin lifecycle: 9 passed, 0 failed. Server no-default and release-only compile-out plus remote compile-out passed. Two earlier standalone remote invocations omitted its existing test-support and host/runtime features; the successful combined invocation matches the shipping dependency graph. No production feature/dependency change was made to satisfy those test-only compilation requirements.
The next physical socket test is red at the absent /v1/ws route (404); socket integration remains uncommitted while its broader gate runs. Full fast, final sizes and generation/watchdog/lockstep/repair integration remain outstanding.
readonly-plugins-single-red.log
readonly-plugins-shipping-gates.log
readonly-plugins-api-suite.log
readonly-plugins-inventory-suite.log
readonly-plugins-server-suite.log
Continuing edge-update-v2 at
c931cf5049, task base dev2fb412d01d. Read-only socket gate exited 0: 679 server tests passed, 0 failed, 52 existing measurements ignored; physical six-restart HTTP/socket fixture passed, fmt/clippy and both server compile-out checks passed. Five fresh #240 reviewer-union repetitions and the release crate gate are now queued serially through build-slot before committing the pending slices.Retained-state regression now reproduces the previously recorded missing integrity binding: candidate_launch_retains_predecessor_database_and_configuration_digests failed because launch.json lacked a retained database digest. Proposed implementation stores the checkpointed predecessor database/config digests in its successor launch metadata; selected mutable data is not permanently checksummed. Preparation and commit recheck the frozen predecessor; historical selection verifies that binding without writes and rejects nonempty WAL. Current tests additionally check changed retained files and failed B->C preparation preserving B->A. These changes remain uncommitted pending their broader gate. Production generation admission, watchdog transfer, lockstep, #236 repair and final acceptance remain incomplete. No VM proof or final fast-gate claim.
Read-only socket slice committed and pushed at
03511ac2b. Recovery uses the shared authenticated socket/parser and plugin dispatcher, ephemeral non-resumable Welcome, no metadata cleanup/renewal/inventory writer, read-action admission and stream-scoped terminal refusal. Physical HTTP/socket regression: 3 frozen-main + 3 latest-WAL restarts preserve all filenames, bytes and permissions. No prior review test is obsolete.Per-slice gate exited 0: fmt, shipping-feature all-target clippy (-D warnings), physical regression, full server library suite and no-default/release-only compile-out.
Durations above are functional transcripts only. Full fast, exact final sizes, automatic generation admission, watchdog, lockstep and #236 repair are still outstanding. The next release-crate gate caught a test's underscore-field access; the ownership descriptor now has an explicit duplication accessor and the complete release gate/five #240 repetitions are being rerun. No final acceptance claim.
readonly-sockets-single-red.log
readonly-sockets-recheck.log
readonly-sockets-server-suite.log
Two prerequisite slices committed/pushed:
8d34e1554fixes installation lock lifetime;6ef607371binds retained predecessor database/configuration bytes. The old Flock drop explicitly unlocked a still-duplicated descriptor (red regression); close-only File ownership now refuses competitors until the last duplicate closes. The new snapshot regression also first failed at absent launch metadata. Preparation/commit and historical selection verify retained digests and reject nonempty WAL. Mutable selected B edits remain valid; failed B->C preparation preserves B->A state and binding. Neither slice is production watchdog/manual-rollback integration. No prior review test is obsolete.Per-slice fmt, release all-target clippy (-D warnings), full release tests and compile-out exited 0:
Functional transcripts only. The subsequent #240 run passed two complete repetitions; a third compiled listener source while it was being edited and failed on a misplaced field, so it does not satisfy five complete repetitions. The field was corrected and the new listener gate is running; five fresh repetitions will follow settled edits. Full fast/final sizes and the core integration requirements remain outstanding.
lock-descriptor-single-red.log
lock-descriptor-single-green.log
retained-binding-single-red.log
retained-binding-single-green.log
lock-descriptor-release-suite.log
Listener handoff reuse committed/pushed deliberately from
31053e59b:df4ec4ec2descriptor boundary,4b77d253findependent listener-v1 note parser,084f581e6listener owners/server runtime,31c23dce5CLI import/export and capability advertisement. No branch merge or old transaction/copy-back protocol was imported. Existing sealed exec and private CA stdin handoff remain; legacy signed predecessors without listener-v1 close/rebind.Real exec tests preserve queued connections after serving-owner teardown, closed stdin and CLOEXEC; reject ephemeral exports and parent manifests inherited by children. Gate exited 0: fmt; shim/server/CLI all-target clippy (-D warnings); descriptor 2/0; listener 3/0; capability 2/0; remote runtime 51/0 (4 measurements ignored); combined runtime 61/0 (4 ignored); CLI restart 28/0 (1 helper ignored); CLI remote server 6/0; server no-default/release-only compile-out.
No prior review test is obsolete. Functional transcripts, not latency evidence. A local-only exact-head warm-handoff archive is building for the orchestrator; no VM proof runs here. Production generation admission, independent watchdog/health/commit, host lockstep, #236 owner-present repair, full failure table and final gates/sizes remain unfinished.
listener-gates.log
listener-remote-runtime-suite.log
listener-restart-suite.log
listener-cli-remote-suite.log
Orchestrator VM-only warm-handoff proof is ready at exact source
31c23dce59(listener import/export head). Built locally; no VM execution or remote host contact.Archive: warm-handoff-31c23dce5971.tar.gz, 194,926,033 bytes.
SHA-256: 7e943c4890a0a4ff978d003a8fb1345b9a1d2bc830b5fd4d41731edc1a100a1b.
On the disposable perf VM, after copying the archive:
The root driver runs exactly auth::tests::ca_administration_tests::shipping_cli_tests::deploy_staging::signed_deploy_preserves_passkey_ca_and_live_sessions with a 20-minute hang bound, records host/kernel/load/source, and cleans only its own root fixture and units whose ExecStart names that fixture. A per-run public staging authority is included; no private signing material is packaged. Shipping trust is not changed. This establishes only whatever the existing signed-deploy warm-handoff test proves when run: it is not the full generation/watchdog/storage failure table, 128-attached-route latency qualification, host lockstep or #236 repair proof. Later source changes require refreshed final-head proof archives.
warm-handoff-31c23dce5971.tar.gz
package-warm-proof.log
Cancellable SQLite backup primitive committed/pushed at
ea50c1f49. The new entry point checks cancellation between 64-page batches and finishes/rolls back the engine backup before returning its exclusive SQLx guards; existing all-pages API retained. The real-engine regression cancels an incomplete 2 MiB copy, verifies unchanged A and rolled-back B, writes to A, then finishes a fresh copy without stale locks. The initial red compile identified the missing entry point. No prior review test is obsolete. Blocking-owner/control-I/O integration is still required before this is production preparation.Per-slice fmt, shim all-target clippy (-D warnings), 5 SQLite tests (1 subprocess helper ignored), and shim compile-out passed. Five fresh complete #240 reviewer-union repetitions now pass on the settled source (six filters per repetition), after the earlier two-pass run was invalidated by source edits. The normal authorization watchdog function remains byte-identical to task-base dev.
Functional transcripts only. Full fast and current-head production-trust sizes have not yet been rerun. No generation-runtime/watchdog/lockstep/repair completion claim. The separate warm archive and exact root VM commands were posted above.
cancellable-backup-single-red.log
cancellable-backup-single-green.log
cancellable-backup-suite.log
cancellable-backup-gates.log
Resuming edge-update-v2 at
ea50c1f493; task base dev2fb412d01d. Continuing the blocking SQLite copy owner and cancellation coverage. Production generation coordination/watchdog, lockstep and #236 remain unfinished; no complete-updater claim. No perf VM contact.Pushed blocking-copy owner
01388458don edge-update-v2. Both dedicated SQLx connections and all caller-supplied fences live on the blocking owner through SQLite completion and awaited connection closes, including dropped handles/polled wait futures. Successful completion returns the still-held fences.Real SQLite + Unix-stream ordering tests: 3 passed; existing checkpoint/browser input tests: 3 passed. fmt, server all-target clippy, no-default/release-only checks passed. Gate output:
Blocking SQLite copy owner gates: PASS.blocking-copy-single-red.log
blocking-copy-gates.log
This slice is not production coordinator/watchdog integration. No review test declared obsolete; full updater, #236 and final exact-head fast/size qualification remain outstanding.
Pushed schema slice
5cfbcca61on edge-update-v2 (base dev2fb412d01). Migration 0031 adds the exact consumed invitation → minted certificate binding required by the approved #211/#236 plan. Historical consumed tokens remain unknown; no inferred backfill. 0001–0030 are unchanged. Repair remains unwired.Red: SQLite reports no such column. Green: all 6 migration checks pass, including upgraded histories, old checksum retention, 32-byte blob constraints and refusal of unconsumed bindings; migration compatibility and 7 read-only checks pass. fmt and all-target server clippy pass.
Invitation certificate schema gates: PASS.invitation-certificate-schema-red.log
invitation-certificate-schema-gates.log
Pushed
a07b03746on edge-update-v2. Redemption now binds consumed invitation digest to the exact signer-produced certificate atomically with certificate insertion. Authorized reissue clears the previous binding; insertion failure rolls consumption back; predecessor certificates remain valid. This is a prerequisite for route-bound owner-present repair, not completed repair.Focused real-SQLite regression went red with missing fingerprint and now passes. Full server library:
688 passed; 0 failed; 52 ignored; fmt, all-target clippy and no-default/release-only checks pass.Invitation certificate writer gates: PASS. No prior review test obsolete.invitation-certificate-writer-red.log
invitation-certificate-writer-gates.log
invitation-writer-server-suite.log
Pushed
823d5d152on edge-update-v2. Added a single public-ledger read matching exact reserved digest + host + consumed certificate, with live certificate/host checks. It rejects an unrelated predecessor, renewal, stale token after reissue and unknown historical consumption while retaining prior public authority. This grants no repair authority; actual route/status and owner/origin/UID/reservation checks still require production coordinator wiring.4 binding tests + 3 authority tests pass; fmt, all-target clippy and compile-outs pass. The first remote-review filter selected zero tests; corrected to independent_review: 3 real transport tests pass, 1 measurement ignored.
Exact invitation certificate proof gates: PASS. No prior review test obsolete.invitation-certificate-proof-red.log
invitation-certificate-proof-gates.log
invitation-proof-remote-review.log
Pushed
800910486on edge-update-v2. Reused audited bounded SCM_RIGHTS transport under generic descriptor names, keeping existing PTY aliases and checks. A real child process receives the held directory lock, original owner closes, child transfers it back and exits; competing lock acquisition stays refused until the returned descriptor closes. This proves descriptor lifetime only; production watchdog and private transaction/image/sender authority remain unfinished.Production shim clippy/fmt pass; process transfer 1 pass / 1 helper ignored; preserved PTY tests 3 pass; SQLite 5 pass / 1 helper ignored; shim no-default and server release-only checks pass.
Cross-process directory-lock descriptor transfer gates: PASS.Extra opt-in process-per-user all-target clippy fails in terminal.rs/user_host.rs. Both sources are byte-identical to task-base dev; reproduced the same errors on detached dev with process-per-user. Dev lacks the new sqlite-backup feature, so the reproduction uses its available process-per-user feature. These research failures are not claimed green and were not edited. Full shipping nix graph already enables uio; release-only feature now enables that existing facility explicitly. No new crate/helper binary, no obsolete review test.
generation-lock-transfer-red.log
descriptor-transfer-gates.log
descriptor-transfer-dev-research-clippy.log
descriptor-transfer-research-clippy.log
VM-only watchdog transport probe ready for the orchestrator. Source checkpoint
800910486; this archive contains a syntax-checked Python capability probe, not shipping updater acceptance. It has not been run on the build host or any VM by this job. Production integration must not rely on its systemd descriptor/cgroup assumption until the VM result is known.watchdog-transport-800910486.tar.gz: 4121 bytes; SHA256 9ac5dfc5ccd5bc53d229ba58d91cf636282b7c8a9bcff2eb50d4045b8f395cfd
watchdog-transport-800910486.tar.gz
On a disposable systemd QA/perf VM, from the directory containing the downloaded archive:
The controller creates two uniquely named 60-second transient services and its own UUID fixture under
/root/infraternal-bench/edge-update-transport. It transfers a held directory lock to the watchdog throughsystemd-run --pipe, stops the candidate's entire cgroup including its watchdog launcher client, proves the independent watchdog/socket/lock remain alive, transfers the lock back, stops the watchdog and proves acquisition stays refused until the last returned descriptor closes. Cleanup verifies only its own units inactive/failed or absent and reports their names/fixture if cleanup fails. Return all output and exit status on #211. This measures no performance and proves no health, generation startup or rollback behavior.The separate shipping warm-handoff request remains waiting on the orchestrator (exact head
31c23dce59; SHA256 7e943c4890a0a4ff978d003a8fb1345b9a1d2bc830b5fd4d41731edc1a100a1b):It is an intermediate existing warm-continuity proof, not complete generation-table/#236 acceptance. Final-head archives will still need refreshing after integration.
Resuming edge-update-v2 at
8009104868, task-base dev2fb412d01d. Existing serial dev/checkpoint static measurement remains running; no source edits during the build. Next slice is durable SQLite writer-floor reservation needed before generation trial/manual rollback. Production generation coordinator/watchdog, host lockstep and #236 repair remain incomplete. No perf VM contact or complete-updater claim.Pushed exact-cap checkpoint
dce807ec0. Clean source800910486, pinned serial production-trust builds on 6by32-compute02: x86 21,467,400 / ARM 19,642,912 bytes. Same-recipe task-base dev2fb412d01: 21,431,472 / 19,605,896; deltas +35,928 / +37,016. Exact caps and PROCESS now match both artifacts under the accepted D301 exception. Both exact-size reviewer tests and exact/one-byte-over/downward-ratchet boundary checks pass; fmt and shell syntax pass. Dependency versions/profiles unchanged.This is unfinished generation ownership/certificate-binding work, not complete updater cost, trim evidence, or acceptance. Runtime/watchdog, host lockstep, #236 and final-head fast/VM proofs remain outstanding. Continuing durable writer reservation next. Attachment endpoint refused the .tsv extension (HTTP 422); the identical measurement table is attached as .txt.
owner-checkpoint-sizes.txt
owner-checkpoint-static.log
owner-checkpoint-size-boundaries.log
Pushed
6585e7b8bon edge-update-v2. Real SQLite writer-floor reservations now commit before reply with FULL WAL and a top-level BEGIN IMMEDIATE; no per-writer marker I/O. Historical rollback copies advance above deleted current writer IDs while retaining the original snapshot unchanged. Invalid/duplicate/regressed sequence state, nested transactions, exhausted space and physical read-only storage refuse admission. Normal auth/websocket/replay sources were not edited in this slice. Production coordinator and writable startup integration are still absent.Red: no ID interval was durably reserved before trial. Green: 10 writer tests pass, including abrupt process exit and concurrent reservations; 20 generation and 8 read-only tests pass; fmt/clippy and no-default/release-only checks pass. First clippy run caught one items-after-statements import in the new test fixture; moved it to module scope without weakening lints.
Durable generation writer-floor gates: PASS. Marker-specific obsolete fixtures and retained nonreuse/refusal invariants are named in the commit. No independent review or interruption-table oracle is obsolete.Five #240 reviewer union repetitions and the full fast milestone gate are now running at this exact head; no full gate claim yet. No perf VM contact.
writer-floor-red.log
writer-floor-green.log
writer-floor-gates.log
Follow-up finding before integration: the new borrowed-connection reservation at
6585e7b8bused SQLx 0.8.6 custom begin_with. Existing plugin-api/storage.rs documents its acknowledged-BEGIN -> lock_handle await gap. A real cancellation regression now reproduces it at poll 4: Err(InvalidSavePointStatement) on the next reservation. The reservation APIs have no production callers yet. Correcting with the normal writer path pattern: refuse nesting, create an ordinary RAII transaction, then acquire the writer lock with UPDATE before sequence reads. No normal writer-path edit. Green verification is running; no fix claim yet.The five #240 unions at
6585e7b8bpassed: each has six filters, 45 executions, 37 distinct passing tests. Dev authorization watchdog, websocket input/transport and stale-screen implementation are byte-identical. I intentionally interrupted the incomplete fast gate by stopping only my build-slot scope run-p1572418-i9958216.scope; its script/cargo processes are gone. The attached partial gate is not a PASS receipt. Full fast will be rerun after the cancellation correction. No source edits occurred during the gate.writer-floor-cancellation-red.log
writer-240-6585e7b8b.tar.gz
writer-milestone-fast-interrupted.log
Pushed cancellation correction
c66e24296on edge-update-v2. Ordinary RAII BEGIN plus the existing writer-locking UPDATE pattern replaces custom begin_with, and the nesting check follows awaited connection work so a dropped owner's queued rollback settles first. No per-writer hot-path or normal auth/websocket/replay edit.The same cancellation oracle that failed at poll 4 now passes all 24 cuts. Writer suite: 11 pass / 1 private helper ignored; generation: 20 pass / 2 VM-only ignored; read-only: 8 pass. fmt, both touched-crate clippy runs and no-default/release-only compile-outs pass.
Durable generation writer-floor gates: PASS. The intermediate early depth check also failed the unchanged oracle because rollback is queued; that transcript is attached. No test weakened or review oracle obsolete.Full fast and five account-revocation unions are restarted at
c66e24296; no current full-gate claim yet. Production coordinator, startup admission, watchdog, host lockstep, #236 and failure-table integration remain unfinished.writer-floor-cancellation-green.log
writer-floor-cancellation-queued-rollback.log
writer-floor-cancellation-gates.log
Resuming implementation on edge-update-v2 at
c66e242963, from task-base dev2fb412d01d. Five account-revocation reviewer unions and dev preservation assertions have finished; the exact-head full fast gate remains running. No source edits while it runs. Next production integration boundary is generation-only writable storage admission before any state/configuration/CA initialization, retaining physical read-only fallback. Adoption must keep the original live A database authoritative: a stale copied adoption snapshot cannot replace acknowledged A writes. Updater/watchdog, host lockstep and owner-present repair remain unfinished. No perf VM contact or deployment.Adoption implementation choice for the approved frozen-original-A contract (D295/#211): the initial generation must bind A's original private state directory rather than select a copied database while legacy A keeps serving. Proposed additive local launch field
original_staterecords the absolute canonical original directory plus its device/inode; only an initial generation with no predecessor may use it. Successors always use their own physical state copies. Preflight pins the original directory by descriptor, refuses replaced/aliased/shared state, and validates signed metadata before any state opens. Generation boot configuration remains in its metadata directory; no fake database, writable hardlink, shared migration, or external-directory deletion. This prevents adoption from losing ACKed writes between selector installation and first trial. No frozen wire contract, library, engine, or legacy CLI behavior changes. The coordinator must establish FULL WAL and keep the old init owner until fixed-path installation succeeds; the locator alone does not prove that integration.Refinement before implementation: do not persist st_dev in the original-state locator. Linux may renumber mount devices across reboot, so that would refuse a valid boot. Bind the canonical absolute path and existing directory inode, then retain its open descriptor for the process lifetime. Refuse symlink paths, inode replacement, shared directories and aliased database files. No implementation yet; the earlier exact-head full gate remains running.
Exact-head
c66e242963#240 reviewer union: all five repetitions pass, each with 45 successful executions / 37 distinct tests across six filters. The dev authorization watchdog body, websocket input/transport files and stale-screen implementation remain byte-identical to task-base2fb412d01. Full fast remains running; this is not a complete task/final gate claim.writer-240-c66e24296.tar.gz
Pushed exact-size correction
1143d49c8on edge-update-v2. Cleanc66e24296pinned serial static builds: x86 21,467,400 bytes (unchanged), ARM 19,643,296 (+384 versus stale checkpoint cap). Against reproduced dev2fb412d01: +35,928 / +37,400 bytes. Both production-trust/linkage/metadata checks pass. Runtime key memory passes on x86; ARM execution is pending. Exact caps, independent reviewer assertion and PROCESS table now match under the accepted D301 exception. Both image assertions and exact/one-byte-over/downward-ratchet checks pass. No dependency/profile changes or obsolete reviewer oracle.Full fast at
c66e24296exited 1 solely on the stale ARM cap; the full unmodified transcript is attached. Rust summary, verbatim:Server library: 702 pass / 53 ignored. Five #240 repetitions each passed 45 executions / 37 distinct tests; dev preservation assertions pass. This is not a passing full gate or task completion. Corrected branch-head fast and substantial production integration remain outstanding. Removed only this job's now-idle 13 GB incremental cache; target is back to 55 GB. No VM contact.
x86 SHA256 cf38f663d2d8cdbc224c8102498670166bfb40ca0394896cdd293b14ca5a74ad
ARM SHA256 7c62899153d4fd615640a9c42cbae73c0d62226fb0579bb5afd544757624bf59
writer-c66e24296-fast-size-failure.log
writer-checkpoint-size-red.log
writer-checkpoint-size-green.log
Pushed preflight ordering correction
63acaca30e. Store.selected opened database/configuration descriptors before its signed-image validator; the approved plan requires authentication first, even before metadata-only state opens. The new regression fails on the old order and passes for both missing-state cases after the fix. Private image checks still run first; incomplete state remains refused.Release-plugin library: 28 pass / 3 ignored. fmt, all-target clippy, no-default compile-out and diff checks pass. No prior review oracle obsolete. This is a startup primitive correction; runtime startup/adoption/watchdog/host lockstep/#236 remain unfinished, and corrected-head full fast is still pending.
startup-order-red.log
startup-order-green.log
Pushed
aec3550bd4: pinned generation state paths now end in /. so existing O_NOFOLLOW private-directory admission sees the held directory, including after its original pathname is renamed. The same regression fails with NotADirectory before the fix and reads the exact snapshot afterward. No relaxed file checks or ordinary-path fallback.Release-plugin library: 29 pass / 3 ignored; fmt, all-target clippy, no-default compile-out and diff checks pass. First clippy run caught expect() in the fixture; replaced with its module's permitted unwrap(), with unchanged assertion and lints. No prior oracle obsolete. Runtime integration and final-head fast remain outstanding.
pinned-state-root-red.log
pinned-state-root-green.log
pinned-state-root-clippy-first.log
Pushed
99ae5dcd11: initial generation manifests can pin A's original live private state directory instead of a stale adoption copy. Initial-only canonical path + inode; no persisted device number. Successors require their own private state. Selection/preflight create no state files; publication syncs existing main/WAL/SHM and parent. Retained digests bind original DB + generation boot config, and signed preflight retains independent descriptors.Seven added checks cover post-adoption acknowledged WAL, separate candidate schema/data changes with A unchanged, root/path refusals, retained integrity and signed descriptor lifetime. Original parser/adoption test is red before support. Existing preflight regressions caught an internal FD path missing /. during implementation; corrected it without changing those tests.
Release plugin: 36 pass / 3 ignored; server generation: 23 pass / 1 private helper ignored; read-only: 8 pass. fmt, release/server all-target clippy, compile-outs and parser target pass. Parser target emits the same six narrow-graph dead-code warnings as prior package-gates.log. No prior review oracle obsolete. This is state-format support, not completed init adoption, updater or acceptance: existing-pool FULL admission, boot/config/CA isolation, fixed init, watchdog, host lockstep, #236 and corrected-head full fast remain outstanding. No VM contact.
adoption-original-red.log
adoption-original-first-green.log
adoption-original-pinned-path-first.log
adoption-original-parser-gates.log
adoption-original-server-gates.log
Continuing edge-update-v2 at pushed head
99ae5dcd11, task-base dev2fb412d01d. Approved plan reread. Next slice proves runtime replacement connections retain FULL generation WAL without changing legacy NORMAL close behavior; existing-pool upgrade/coordinator remains separate. Final full fast is still outstanding (prior run failed stale ARM cap); no task-completion claim, deployment or VM contact.Runtime connection admission finding (#211): open_database creates legacy NORMAL workers without the generation persistent-WAL/no-close-checkpoint controls. Setting future SQLx connect options to FULL does not install those controls: the real replacement-connection regression fails with “FULL replacement removed committed WAL on close”. The legacy explicit-close control passes. With the FULL-only after_connect hook, both pass, including three physically read-only reopen cycles with byte-identical main/WAL/SHM and latest acknowledged data. Initial fixture used pool-return shutdown and its legacy close assertion was nondeterministic; explicit awaited connection close isolates the engine lifetime and yields the intended red/green. Full server gates are running. No existing-pool upgrade, init adoption or complete updater claim.
Resuming edge-update-v2 at pushed head
7cc1a3cba9(worktree clean); task base dev2fb412d01d. origin/dev is now63d8a03dc; the four new commits touch only DECISIONS.md and docs/PROCESS.md, so product code and binary inputs are unchanged. The branch will take origin/dev before the final size and gate runs.The previous run stopped at a usage limit after
7cc1a3cba("Retain committed WAL on every FULL runtime replacement connection"). Its red/green logs are runtime-wal-* (comment above). Server library: 704 passed / 53 ignored at that commit.Reconstructed state against plan
c9c1877e9:Continuing in that order. No deployment and no perf-host contact.
Integration design for the remaining runtime steps. Every choice stays inside plan
c9c1877e9. No new dependency, engine or wire contract. The boot format below becomes frozen once committed.Progress on edge-update-v2. Pushed:
bc46682e3store: trial selection, owner import, read-only abandoned inference, retention bound (EA-03). Release generation filter: 36 passed / 2 VM-only ignored.34ff9b6bfserver runtime: FULL generation storage with the launch floor as the writability probe; trial gate holding HTTP and host QUIC/TCP accepts until commit; read-only serving. Server library: 707 passed / 0 failed / 53 ignored.979c96334shim pidfd_send_signal wrapper (3 tests).a9063bcf2verify_signed / selected_digest (release library 43 passed / 3 ignored).19b66242aCLI: frozen__generation-server <root>boot, phase P staging on a restart request, phase D after drain (checkpoint, online backup, digest, one pointer, armed watchdog),__generation-trial,__generation-watchdog(scope under init, pidfd, monotonic 120 s). CLI binary: 121 passed / 1 ignored; no-default: 37 passed.Finding fixed inside
19b66242a: the B database created by SQLx got the umask mode, so publication's private-file check would have refused every real trial. B's file is now created 0600 first.Every gate above ran on this host; logs are in the job's evidence directory. Next: an end-to-end proof with staging-signed static images and a supervising init loop (adopt, healthy update, failed trial, full storage), then the updater/rollback/history, host lockstep, #236 wiring, the relay kit and the final gates. No deployment and no perf-host contact.
Paused for handover on owner request. Head
fd1892201a(WIP, pushed to edge-update-v2). Nothing is running: no builds, tests or proof units; the temporary user units are removed (before/after diff empty) and no generation processes remain.Done this run (gated commits):
bc46682e3(trial selection, owner import, abandoned inference, retention bound),34ff9b6bf(FULL generation storage, trial accept gate, read-only serving),979c96334(pidfd signal),a9063bcf2(verify_signed / selected_digest),19b66242a(boot/trial/watchdog entries, phases P and D).WIP
fd1892201(not slice-gated):server init --updates-diradoption and generation unit (Restart=always); restart control under the installation root; watchdog launched from the selected generation's image path (the fix found end to end); scripts/release/generation-proof.End-to-end with a staging-signed static build under a real user systemd unit:
Next: fix owner-busy and gate this slice; then the updater (download/resume, quiet window, version pause, status/update/rollback/history API), the manual rollback transaction, host lockstep, #236 repair wiring, storage/inode-full rows in a root container, the relay kit, the failure-table mapping, sizes/caps, verify fast, and taking origin/dev (docs only).
J12 implementation resumed on edge-update-v2, base
fd1892201a. Read common brief, architecture/process, accepted planc9c1877e9and D243/D251/D295. Recreated missing local worktree. First: reproduce and fix owner-busy directory-open bug in its own commit; then continue remaining plan. Build/test on claude@infraternal-dev-01-compute01, root only for disposable systemd e2e with cleanup. Cold build; no completion or deployment claim.J12 finding: reproduced owner-busy on compute01 at scripts/release/generation-proof:281: IsADirectoryError from open(directory, rb). Local fix uses os.open(O_RDONLY|O_DIRECTORY|O_CLOEXEC) and os.close. Initial scripts/verify fast stopped before compilation because the rsynced directory had no Git metadata (artifact gate requires merge-base). While establishing metadata, compute01 SSH became unreachable: No route to host. No passing gate/e2e or product completion is claimed; investigating connectivity.
J12: owner confirms compute01 is down and awaiting restart; retaining all x86 static/systemd work there. Reread the new mandatory build-slot rules; future heavy VM commands use ~/infraternal-ops/build-slot. Architecture-neutral release-plugin acceptance compilation is running on dev-02-std through build-slot (-j3, nice 10). The directory lock/release probe for the script fix passes there; this is not the real-systemd 7/7 proof. New updater acceptance tests cover exact abandoned-version pause across restart, explicit exact-version retry, verified readiness/toast deduplication, no private paths, and disabled-feature refusal. No new gate/size/completion claim.
J12 updater core: initial 5 SQLite acceptance tests pass on ARM (abandoned exact-version pause across writable restart, explicit exact-version retry once, verification refusal, ready-toast dedup/private-path exclusion, disabled-feature refusal). Retained release-version ordering test was red with missing newer(), then passed after deliberate reuse of the
31053e59bhelper; no engine/dependency choice. Release all-target Clippy passed after limiting unused-helper allowance to the build-script grammar module. Added the next tests for failure notice before rediscovery and health-vs-handoff acknowledgement; they are queued through build-slot. Compute01 is back; the initial-slice full fast gate is queued there, and a staging ARM build is queued for real systemd proof. Core remains unwired; no task completion/size/7-of-7 claim.J12 continuation: isolated first commit
d78a6ca58pushed on edge-update-v2 (basefd1892201). The generation-proof owner-busy case used buffered open on a directory and never reached systemd recovery. Replaced it with an O_DIRECTORY/O_CLOEXEC raw descriptor and matched os.close calls; no product behavior changed.VM probe on dev-02-std, verbatim:
The full real-systemd seven-case run is queued through the build-slot wrapper. First root-run attempt refused claude-owned fixture files before installing any unit; the retry uses root-owned signed public bundles. No 7/7 claim yet. Compute01 recovered; cold scripts/verify fast is still running through build-slot, with the Nix repair log ending DONE.
J12 writable update state/request slice pushed at
615ce4a60. This is not automatic-update completion: runtime engine, background lifecycle and host wiring remain pending. The schema is plugin-owned optional maintenance; read-only recovery and boot selection never require it. Exact abandoned-version pauses survive collection/restart, readiness is verified before notices, and actual engine selection (not a handoff acknowledgement) completes history. Requests and settings recheck current owner/passkey freshness at commit; historical rollback discloses loss of later sign-in/access changes.ARM gate through build-slot: 43 unit tests, 11 new updater acceptance tests, 1 pool integration and 2 restart integrations passed; 5 pre-existing subprocess/measurement helpers ignored. All-target Clippy with -D warnings and no-default-features check passed. Receipt: dev-02-std:~/.cache/j12-edge-update-evidence/updater-suite-3.log (
UPDATER_SUITE_EXIT=0).Next rollback test failed as expected with missing copy_historical_database (ROLLBACK_RED_EXIT=101). Implementing an immutable historical source copied into a new supervised generation, retaining the entry generation as fallback and current writer-ID reservations. No cap or production setting changed. Real-systemd proof remains queued.
J12 systemd proof on ARM (cua+sudo, build-slot) reached 6/7 after moving public signed fixtures under /root/.cache. The loader correctly refuses a world-writable ancestor (/var/tmp); this was fixture placement, not a trust-policy change. Actual outcomes: adoption pass; healthy commit pass (0 failed 10 ms HTTP polls, retained database unchanged); candidate exit pass; stalled trial restored selected generation after 122.3 s; watchdog death pass; repeated recovery pass.
The final case exposed a second fixture bug after
d78a6ca58: owner-busy tried to acquire the healthy service's lifetime installation lock, correctly receiving EAGAIN before exercising recovery. The corrected fixture first stops the unit, acquires the competing owner, then starts it. A fresh all-seven run is active; no 7/7 claim yet.Rollback preparation pushed as
660ac45e3. Five real SQLite/generation tests pass, including a new immutable historical authorization/data test and real-watchdog fresh-generation rollback commit. CLI all-target Clippy -D warnings passes (ROLLBACK_SUITE_EXIT=0). Rollback controls still need runtime wiring.Current lifecycle/worker verification encountered shared ARM block exhaustion: /dev/vda3 246G, 236G used, 42M available, 100%; inodes only 10% used. Compiler exited; removed only this job's 2.4G target/debug/incremental and retried through build-slot with CARGO_INCREMENTAL=0. Other jobs untouched.
Initial compute01 fast gate (inherited source plus isolated script fix) reported cli_review::ctrl_c_in_json_mode_ends_with_an_interrupted_envelope_and_exit_130: "still running after SIGINT". Gate continues; attribution is pending an unmodified origin/dev control. This is not a passing final gate.
J12 real-systemd generation proof: 7/7 pass on infraternal-dev-02-std (aarch64), cua+sudo through the mandatory build-slot wrapper. This is the staging artifact proof, not final branch-head qualification: concrete updater engine/host wiring remains pending. Public fixture image SHA256:
083643bc5ba9f800f577223bb2d4684b589215e57c28b5102f6d1dd4ba948df2. Corrected owner fixture pushed as4a123a0b1. All throwaway units, proof processes and /root/.cache/j12-generation-proof files removed; post-run systemctl/unit-file/process checks found none.Verbatim e2e output:
Lifecycle and worker slices pushed as
492e82764/6bc1ee6d0. Three lifecycle tests and 14 updater acceptance tests pass (plus the release package existing 43 unit/3 integration tests). Both packages pass all-target Clippy -D warnings and no-default-features checks. Background engine wiring remains incomplete; no completion or size claim.J12 continuation at
4a123a0b1on edge-update-v2. Preserved the two pending admission regression files from the handoff. Implementing final receiver-side owner/settings rechecks and an enabled-epoch lease: disable must wait for a transition already admitted by the receiver; re-enable must never revive a stale scope. Prior real-systemd staging proof remains 7/7 (comment 70954); this is not final-head qualification. compute01 is reachable and all new heavy work uses build-slot. Stopped only the obsolete J12 initial-source fast gate after its recorded SIGINT-test failure; the unmodified-dev attribution probe is queued. Current admission suite is queued on compute01. ARM free space fell to 1.6 GB; moved current validation back to compute01 without touching other jobs.J12 admission slice pushed as
5062fd29con edge-update-v2. Final receiver admission now binds the original requester proof and rechecks owner, unlocked/unexpired/fresh passkey session, feature enablement, channel and quiet-window settings after preparation. The configuration permit and enabled-epoch lease survive worker cancellation; disable waits for already-admitted work and an old scope stays invalid after re-enable. Regression coverage includes erased requester proof (must not become a local-owner request).VM gate through build-slot on dev-02-std: 43 release unit + 16 updater acceptance + 3 existing integration tests and 3 server lifecycle tests pass; all-target Clippy -D warnings and no-default-features checks pass for both packages. Receipt: ~/.cache/j12-edge-update-evidence/admission-green{,-2}.log; ADMISSION_SUITE_EXIT=0. This is a slice gate, not final scripts/verify fast or final-head systemd qualification. Concrete generation receiver/download integration remains local WIP.
compute01 static/SIGINT attribution work remains assigned there. Its slots were busy; ARM storage recovered to 37 GB. The first ARM lock listing hid root-owned slot paths, so the neutral check queued briefly before receiving slot 3/3.
J12 watchdog child ownership fix pushed as
bb3fc44bb. Reproduced a real unjoined child after abandoning preparation: waitpid returned Ok(Exited(...)), rather than ECHILD. Retain a kill-and-join guard through unarmed/armed ownership; successful exec still leaves the same-PID successor responsible for reaping.Gate on dev-02-std through build-slot: 11 watchdog tests and 5 generation-update tests pass (including real health commit and historical rollback); CLI all-target Clippy -D warnings passes. WATCHDOG_SUITE_EXIT=0; receipt ~/.cache/j12-edge-update-evidence/watchdog-child-green.log.
Two further readiness regressions are RED: discovery stages again with a queued exact request; a request arriving during staging replaces its ready B notice with C. Added pre-I/O and publication-transaction busy checks; package gate pending. Its first retry could not start because shared /tmp was full before nix develop (No space left on device); removed only J12 obsolete ARM static/release target outputs (~983 MB), and retried. Shared volume had independently recovered to 25 GB by cleanup. Final fast/static, complete automatic/manual/host wiring and final-head systemd qualification remain unfinished.
J12 exact-request readiness fix pushed as
47ff4d3c8. Both RED triggers now pass: an already queued exact request prevents discovery I/O, and a request arriving during staging is rechecked in the publication transaction so readiness/notice stays on its requested image. No configuration writer permit is held over network I/O.Completed gate through build-slot on dev-02-std: 43 release unit + 18 updater acceptance + 3 existing integration tests pass; all-target Clippy -D warnings passes. REQUEST_SUITE_EXIT=0; receipt ~/.cache/j12-edge-update-evidence/exact-request-green-2.log. Download cache bounds and actual engine/event/host integration remain pending; these passing state tests do not establish those guarantees. Concrete signed-image/generation receiver integration is now syncing to the ARM worktree for its first compile/tests, with the reference owned-I/O helper and scheduler/cancellation tests retained. Final fast/static and final-head systemd gates remain owed.
J12 continuation on edge-update-v2 at
47ff4d3c8. Concrete generation-engine integration compiles on dev-02-std through build-slot; 20 CLI generation/watchdog tests and both owned-I/O scheduler/cancellation tests pass.Five new RED regressions reproduced in generation-engine-red.log: the image store retains 3 images where the bound is 2 after repeated check-ins; collection accepts an unsafe alias; collection failure does not refuse new staging; a current release.updates subscription receives no initial state; a quiet-window edit during preparation returns permanent settings refusal rather than postponement. The successor manual-request discovery regression already passes. Reused the reference rename-before-unlink collector and subscription lifecycle; added collection admission and window-only postponement. Full package/Clippy/feature gate is queued, with no GREEN claim yet.
compute01 is reachable. Complete-reference
31053e59bproduction static builds are queued through build-slot there, x86 then ARM, using the pinned recipe and identical explicit release identity edge-20261031T000000Z. Final implementation comparison, final scripts/verify fast and final-head real-systemd 7/7 remain owed. No caps changed.J12 staging-kit slices pushed on edge-update-v2 through
7064bd087:c4ae5ed06: generation-proof signing now requires a complete source revision and signs SOURCE with every fixture image. dev-02-std real Ed25519 verification:signed source bundle proof: 3/3 pass.a8bff3339/7064bd087: staging-proof uses plain SSH to claude@infraternal-perf-01-backup01, uploads public artifacts before perf-run --root, retains installed wrapper snapshots on failures, and cleans only the unique run root. Each Cargo preparation command uses build-slot on the build VM. Removed the obsolete private lock/retired root target and corrected inner receipt labels.VM checks: all three generated shell layers pass sh -n; Python syntax and the existing real signature/checksum staging_artifacts_test.py pass. This repairs the kit launcher; it does not establish perf acceptance or port the missing reviewer transport/latency/retention/reconnect cases. Full signed live-session proof remains owed. No measurement has been run on the shared build hosts.
Rust integration GREEN gate has waited for an ARM slot since 18:22 UTC (23:52 IST); complete-reference static builds remain queued on compute01. Neither has produced a result, and no final fast/size claim is made.
J12 matched complete-reference sizes finished on compute01 via build-slot, source
31053e59b, production trust, unchanged pinned static recipe, explicit release identity edge-20261031T000000Z: x86_64 22,096,448 bytes (SHA256 f4a35bb86ad6214b8447dcde111d7753f12848e6e37494c580afd802e9fcbd41); aarch64 20,200,024 bytes (SHA256 aaaa570fa4ba1814fcff3f6102238b92c7dddf803b3d38b82966af3655c28117). REFERENCE_SIZE_EXIT=0. Preserved binaries and size-reference.log in compute01:~/.cache/j12-edge-update-evidence/reference/ and parent; deleted the temporary reference target. Interim implementation comparison is now queued using the same identity/recipe and the job's single target; it is not final-head sizing.All 19 restart tests pass after moving only this job's target under its private cache ancestor; no validation was weakened. Remaining integration Clippy/feature check caught two adapter lint issues; corrected and rerun queued. Historical rollback bookkeeping and retry-history bounds have regression tests queued after that check. Further local assertions cover the actual historical trial copy and retained directory aliases. Final fast/systemd qualification and remaining host/resource/perf-kit work are still owed; no completion or cap change.
J12 three gated slices pushed on edge-update-v2:
e6c965c46owns synchronous image I/O while yielding serving workers (scheduler/cancellation 2/2);609ad6ecfpreserves exact intent when only the quiet window changes;3556e569ddelivers authenticated release.updates state, one ready toast and subscription withdrawal. Primitives gate: API 2, signed images 4, server lifecycle 3, release 43 unit/22 acceptance/3 integrations, CLI generation 20, restart 19; all-target Clippy and no-default checks pass (GENERATION_ENGINE_GREEN_REST_EXIT=0). These are slice gates, not final fast/systemd qualification.Four subsequent regressions were reproduced before fixes: historical rollback advertises the old forward applying row as automatic; 105 explicit retries retain 105 rows; a retained image alias bypasses the collector's type check; real copied rollback trial retains B applying instead of A rollback applying/B applied. RED exit=101 in each case. Implemented trial-copy-only bookkeeping, history pruning after reconciliation, and alias checking before the keep exemption. Full follow-up green gate queued on ARM via build-slot; runtime engine/image integration and those fixes remain uncommitted until it passes. Receipt: generation-engine-green-rest-3.log. No current authority is overlaid onto restored historical users/sessions/settings.
J12 integration and rollback fixes are gated and pushed at
819b99b69. HISTORY_INTEGRATION_GREEN_EXIT=0 on ARM through build-slot: owned-I/O 2, signed image/collection 4, release 43 unit + 24 updater acceptance + 3 integrations, CLI generation 20, all-target Clippy -D warnings and no-default checks. Four preserved RED triggers now pass, including the actual copied historical rollback trial and 105 explicit retries bounded to 100 history rows. The restored historical users/sessions/settings are not overlaid with current authority.Plan-target finding (not waived): provisional physical core accounting at
819b99b69totals 2,568 lines including comments/blanks, before separate optional updater/image/socket adapters and before host integration. Modules: generation 581; startup 152; generation_state 101; CLI boot 507; update preparation 494; watchdog 368 (fixture helper excluded); runtime 146; writer reservation 112; copy owner 107. This exceeds the plan's 600–900 replacement-core target and even its 1,297-line reference accounting. The roles differ, so this is explicit inclusive accounting, not a claimed like-for-like reduction. core-line-accounting.json is saved with evidence. No target was silently relaxed.Matched implementation size build is queued on compute01 against exact committed
819b99b69with the reference recipe/identity. Prior pre-history interim queue was stopped before acquiring a slot and superseded; size-implementation-819b99b69.log is authoritative. Staging-only origin regression is queued on ARM so automatic discovery can use disposable signed fixtures while shipping images keep the production origin. Host lockstep/repair, failure-table VM coverage, remaining perf kit drivers, final fast and final-head systemd proof remain unfinished.J12 resumes edge-update-v2 at
06a82e7fb. compute01 is reachable; mandatory build-slot remains in force. Prior fixes and 7/7 staging proof are already recorded. Continuing from the committed automatic/rollback qualification runner and pending protocol/host-metadata tests, preserving the handoff edits. Complete-reference size receipts exist; implementation sizing is still queued. Final fast, final-head systemd qualification, host lockstep, resource failure coverage and perf acceptance remain owed.J12 host-wire foundations pushed at
eb4ecf8c3(30f7f7af3protocol bounds;eb4ecf8c3strict metadata). ARM build-slot gate: protocol 12 tests, host metadata 4 tests, both all-target Clippy -D warnings, release no-default check and staging CLI build pass (HOST_CODEC_GREEN_EXIT=0, PROOF_BUILD_EXIT=0). Runtime host transport is still pending.New real-systemd updater proof on dev-02-std passes 2/2: real automatic discovery through the generation receiver, and root-queued historical rollback through a fresh generation. Both verify selected AND executing image identity; rollback restores the historical marker and discards the later committed marker. This local-owner fixture does not prove browser-owner admission. Initial installation refusal came from cp -a preserving claude ownership inside the root fixture; corrected only fixture ownership. No trust check weakened. The separate seven-case rerun is queued; production static sizing at
06a82e7fbis running on compute01 through build-slot. No final fast or completion claim.J12 current staging binary systemd qualification is 7/7 pass on dev-02-std via cua+sudo/build-slot, source
eb4ecf8c3. Healthy handoff reports 0 failed 10 ms probes and unchanged retained database; stopped candidate recovery 122.5 s; competing owner read-only service 130.4 s; three repeated recoveries pass. This supplements the new automatic/historical rollback proof (2/2), rather than replacing admission/resource/perf acceptance. Corrected invocation uses /bin/true for the exiting fixture: it passes --version then exits during trial. The first /bin/false invocation refused at preflight and is retained as a failed receipt.Cleanup verified: no infraternal-gp units/unit files, no process argv referencing the unique fixture root; removed /root/.cache/j12-current.
Interim matched x86 image at
06a82e7fb: 22,021,640 B, SHA256 89b6c98a73d97fa16db705bd1de638523800ac3389a5cf6981ccfdf0649455ea. Complete reference31053e59b: 22,096,448 B => -74,808 B. ARM is building; host runtime is still incomplete, so this is not final sizing. No caps changed.Verbatim seven-case output:
J12 transport foundation pushed at
2c9301f046. The real-mTLS identity exchange first failed with UnexpectedEof; it now passes with reply-owned effects. Unnegotiated machine frames remain refused before feature dispatch. One exchange remains fenced through its reply write; session-only dispatch stays inert. Concrete host receiver/sender and capability advertisement are still pending.ARM gates via build-slot: 8 mTLS daemon tests + 10 worker tests pass; remote+mesh all-target Clippy -D warnings and infraternal-agent/CLI no-default checks pass (MACHINE_TRANSPORT_GREEN_EXIT=0). Full infraternal-agent library with remote,mesh and three test threads:
The first broad invocation failed three AF_UNIX fixtures because their default paths exceeded SUN_LEN; the corrected invocation uses the existing INFRATERNAL_TEST_STATE_ROOT short-root support, with no product/test weakening. Receipts: ARM ~/.cache/j12-edge-update-evidence/machine-transport-{red-2,green-2,full-short}.log. Local continuation ledger: ~/.cache/codex-scratch/j12/continuation.md. Current next RED tests exercise the server actor on ledger-admitted real mTLS, including cancelled-request fencing. The matched ARM size build is still running on compute01; final fast/resource/perf/host acceptance remains unfinished.
J12 continuation at pushed
2c9301f04. Matched interim production images at06a82e7fbcompleted on compute01 through build-slot: x86_64 22,021,640 B vs complete reference 22,096,448 B (−74,808 B); aarch64 20,150,168 B vs 20,200,024 B (−49,856 B). Identical edge-20261031T000000Z identity/pinned recipe/production trust. These precede host runtime completion and are not final acceptance sizes. IMPLEMENTATION_SIZE_EXIT=0; receipts and binaries preserved in compute01 ~/.cache/j12-edge-update-evidence/. No caps changed.Server actor WIP adds installed-authority machine exchange and real-mTLS round-trip/cancelled-waiter/provisioning refusal tests. Its gate is queued through build-slot on compute01 (server-machine-green.log). ARM job target removed to relieve shared disk pressure; further builds use compute01 and one target. No active root proof units/files remain; prior systemd 7/7 + automatic/rollback 2/2 evidence is retained. Final fast, complete host/resource/perf work and final-head sizing remain owed.
J12 crash-safety snapshots pushed on edge-update-v2 through
b328e1ff3; these are explicitly WIP, not gated completion commits.54b8ceb9cadds the server actor/NodeChannel installed-authority exchange with real-mTLS cancelled-flight and scope regressions.0ccc9c9ecretains the accepted reference's bounded exact-server sender and 11 regression cases; concrete catalog/receiver integration remains pending.b328e1ff3prepares a disposable ext4 systemd runtime storage proof (256 MiB/256 inodes, original A and committed B, blocks/inodes independently, three restarts with fillers, WAL/selected/executing identity checks and capacity-restored update). Both Python drivers pass syntax compilation on compute01; the new runtime proof has not executed.The actor/bridge gate has been waiting for a mandatory build slot since 20:05 UTC; sender checks follow it sequentially under the same wrapper. Active parent PID2912540; compute01 ~/.cache/j12-edge-update-evidence/server-machine-green-2.log. No slot bypass, control-host build or final fast claim. Formatting/gate results will replace these provisional statuses. Prior final-head-independent systemd 7/7 and automatic/rollback 2/2 receipts remain as previously quoted; full host/resource/perf acceptance and final sizes remain owed.
J12 partial actor gate on compute01 completed: new real-mTLS machine tests 3/3; broad remote-runtime suite 54 passed, 0 failed, 4 ignored; bridge provisioning/no-authority/local scope test 1/1. The command then failed dependency Clippy at the unchanged remote-only inspect_kernel_state/retire_kernel_state unnecessary_wraps cases already observed earlier. Server mesh does not enable infraternal-agent/mesh; the retry uses the shipping feature union and adds a remote-without-SSH tests compile check. Gate PID3251079 is queued through build-slot; server-machine-green-3.log. No GREEN or final-fast claim yet.
New ext4 runtime proof failed BEFORE exhaustion, so it establishes no full-disk guarantee. Its external system-Python SQLite writer close removed WAL/SHM while the Rust server was live; a diagnostic reproduced WAL 1,186,592 B/SHM 32,768 B while the writer was open, then absent sidecars on close. The first run also recorded a service SIGBUS. This is being treated as an invalid fixture boundary pending qualification, not silently weakening the nonempty-WAL oracle. The draft now uses a test-only helper linked to the pinned engine with the same persistent-WAL/no-close-checkpoint controls; compile/run still owed. Logs: local evidence/generation-storage-proof-fixture-red.log and storage-debug-python-close.log. ARM cleanup verified no proof units/unit files/mounts/processes; unique root fixture removed, no owned coredump file found.
A tests-first retention check is queued after sender validation: abandoned image staging currently contains filenames excluded from the metadata-only collector allowlist. The test retains strict type/mode/owner/nlink/UUID/active-lock controls and will be observed before any collector change.
J12 crash-safety snapshots are pushed through
a6b59fe8don edge-update-v2 (48419a25afeature-safe fixtures,f1d1621e7pinned-WAL proof helper,a6b59fe8dtwo queued regressions). These remain WIP, not gated completion. Current compute01 wrapper PID3387163 (parent3387160), server-machine-green-4.log, queued through build-slot. A shell quoting error stopped the previous retry after the expected remote-without-SSH RED; wrapper fixed locally, transferred and bash -n checked on the VM. No source mutation while a build is running.Investigation update to the prior WAL fixture finding: there may be a product cause, not merely an external-engine fixture mismatch. Store::selected reads generation completeness by opening/closing the live SQLite inode outside SQLite's VFS. POSIX closes can release every process record lock for that inode; this could let another SQLite process treat a still-live database as last-close and remove sidecars. A targeted regression now observes the kernel SQLite lock from a separate Python fcntl process before/after selection inspection, without opening another SQLite engine. It is queued before any product change. Do not consider the pinned helper a waiver of this possible lock-loss defect. The original SIGBUS and WAL-close diagnostics remain preserved. ARM root systemd cleanup is complete and no ARM commands remain active.
J12 resumed at
a6b59fe8dafter rereading the updated brief/accepted plan. Compute01 is reachable; the existing build-slot gate PID3387163 is still queued (server-machine-green-4.log), with no VM source changes during the gate. Added a queued live-original-adoption lock diagnostic alongside the existing selection/SHM regressions.A short rootless kernel probe on compute01 confirms the mechanism independently of the product build: both the SQLite main-file shared lock and SHM byte-128 lifetime lock block a separate process before a raw open/fsync/close, and become obtainable afterwards. Receipt ~/.cache/j12-edge-update-evidence/sqlite-close-lock-proof.log. This confirms the POSIX close hazard; product regressions are still pending, so it is not a passing product gate. Production initial adoption is in the separate installer process; selection/admission occur in the serving process. The fix/review must preserve that distinction and SQLite FULL durability, rather than masking the original WAL/SIGBUS evidence with a new fixture.
J12 crash-safety snapshots are pushed through
025a980d7:7082d4250makes post-exhaustion recovery progress to a distinct signed version (four-bundle public signature check 4/4 and driver syntax pass on compute01);5f4e3020dprepares metadata-only live SQLite checks and directory-name durability;5ea902402prepares exact abandoned-image collection;025a980d7preserves the original-state publication diagnostic. These remain explicitly WIP, awaiting product RED/GREEN results. The fixes have NOT been copied into the queued baseline gate, so it will still exercise the original failure paths. Current compute01 gate PID3387163 remains waiting for a mandatory build slot (about25minutes), server-machine-green-4.log. No slot bypass or local build/test. Final fast, exact-head e2e, full storage/host/perf acceptance and final sizes remain owed.J12 actor/sender slice gates completed on compute01 after ~41 minutes queued. Actor: real-mTLS machine tests 3/3; broad remote runtime 54 passed, 0 failed, 4 ignored; both bridge scope tests pass, including installed authority ending at revocation. API no-default, production-union server all-target Clippy, server no-default and remote-without-SSH tests compile all pass: SERVER_MACHINE_GREEN_EXIT=0. Sender: 11 passed, 0 failed; all-target release Clippy and no-default pass: HOST_SENDER_GREEN_EXIT=0. Retrieved formatter outputs; bridge formatting pushed in
ac0a8c7e8. These validate the actor/sender slices, not the newer unexecuted storage fixes or completed host wiring.The abandoned-image regression then failed at its intended assertion: “dead image owners must not leak unbounded candidate payloads” (IMAGE_STAGING_RED_EXIT=101). This confirms the collector filename gap. The prepared exact-name allowlist fix remains local/pushed WIP and has not contaminated the baseline run. Pinned storage helper compilation and live SQLite lock regressions now follow in server-machine-green-4.log under the same slot. Receipt will be copied locally when the gate ends; final fast/e2e/sizes remain pending.
J12 baseline RED run completed and receipt is local evidence/server-machine-green-4.log. Intended failures observed: abandoned image staging; selection inspection releases the live SQLite process lock; admission releases SHM byte-128 lifetime lock (observer obtains it, Some(0) vs expected Some(2)); same-process original-state publication releases the database lock; positive host-catalog admission remains unconnected. The pinned storage helper builds and is Clippy-clean (STORAGE_FIXTURE_BUILD_EXIT=0). The runtime RED also printed an unrelated embedded libtest --fd refusal; the lock assertion itself failed as intended.
Publication distinction: production adoption is in the separate installer process; candidate publication occurs after the serving engine drains/closes. The updated qualification performs actual adoption in a child installer while the parent holds SQLite DB/SHM locks, and checks both locks before/after. It retains database/sidecar content syncs and documents the no-live-SQLite-handles precondition on the publishing process. It does not bypass durability or claim in-process publication is safe. Runtime storage tests now use the existing unavailable-daemon fixture instead of spawning a library test executable as the CLI.
Prepared GREEN also applies the already-pushed metadata-only live checks/collector allowlist, adds external SQLite writer-close/WAL-read assertions, and fills the test-only catalog verifier through the existing signed-manifest engine. Compute01 queued gate PID3964597, ~/.cache/j12-edge-update-evidence/storage-locks-catalog-green.{sh,log}. No GREEN claim yet; actual host catalog/receiver wiring, real storage systemd proof and final gates/sizes remain unfinished.
J12 continuation at edge-update-v2@99f126e67. Compute01 is reachable; existing storage-locks-catalog-green gate PID3964597 remains queued through the mandatory build-slot wrapper. Re-read the current common brief and accepted
c9c1877e9plan. Preserving its immutable source snapshot; next work is concrete bounded running-server host catalog, host receiver/lifecycle integration, runtime storage qualification, perf kit and exact-head size/fast evidence. No completion claim and no caps changed.J12 crash-safety checkpoint: pushed test-only inventory observation regressions and a refusing adapter on edge-update-v2. They cover transfer receipt vs running identity, convergence retention and revoked-host late-write refusal; no production host observation writes are enabled. Appended expected-RED run to the existing compute01 slot-owned gate after its storage/proof tasks. PID3964597 still queued (~22 minutes), compute01 reachable with 95 GB free; no slot bypass. Head and exact gate receipts will follow once executed. Final fast, host integration, storage/perf and final sizes remain owed.
J12 resource update: compute01 wrapper PID3964597 has waited ~45 minutes for build-slot; its log still contains only the initial “all 4 slots busy” message. Slot ownership has turned over (earlier holder processes ended; current lslocks reports four new active owners), so SSH/store/disk are not the blocker. The wrapper retries slots every 15 s without FIFO ordering. No slot bypass or competing duplicate runner launched. Pushed head923e83261 remains clean and test-only; no new GREEN/final gate claims. Existing source snapshots and expected-RED inventory extension are retained in ~/.cache/j12-edge-update-evidence/storage-locks-catalog-green.sh.
J12 checkpoint: pushed an additional test-only host catalog boundary case (unsafe version/architecture must cause zero filesystem/network acquisition). The positive runtime catalog/lifetime test and inventory observation RED tests remain queued after storage qualification. Compute01 wrapper3964597 now ~73min waiting for build-slot; no new product RED/GREEN or final-fast result. ARM fallback checked read-only: only33GBfree, so no second cold target started. Existing compute target retained; no root units or deployments. Branch remains WIP, with full host/storage/perf/size acceptance owed.
J12 blocked handoff at pushed
edge-update-v2@99415e9c4(clean worktree), not completion. This continuation added two explicitly test-only WIP slices:923e83261honest inventory identity/convergence/revocation tests against refusing adapters, and99415e9c4malformed host-catalog identifiers refusing acquisition side effects.The inherited compute01 gate never acquired a slot after 4751 s (~79 min). Confirmed wrapper3964597 had only its sleep child, then stopped that waiter and verified
QUEUED_WAITER_STOPPED=1. No owned background build/server/root fixture remains. At least15 compute01 waiters were observed; the wrapper has no FIFO ordering. ARM fallback has33GBfree, so no second cold target was started. No slot bypass, deployment, dependency/profile/cap change or new production host behavior.Queued gate output verbatim (this is NOT a passing product gate):
No new GREEN,
scripts/verify fast, exact-head e2e or final D243 result. Previously recorded7/7 systemd +2/2 automatic/rollback evidence remains historical; full host catalog/receiver/lifecycle, real storage proof, failure/perf kit and final sizes remain unfinished.Resume command on compute01:
The pending script, source snapshots, appended catalog/inventory RED cases and the ONE target are preserved on compute01. It has not mutated the VM checkout yet. Formatted GREEN archives precede newer local catalog/lib test additions: merge formatting carefully rather than overwriting them. Local recovery ledger:
/home/kayg/.cache/codex-scratch/j12/continuation.md; queue receipt:evidence/storage-locks-catalog-queue-stopped.log.J12 resumed from71958 at edge-update-v2@99415e9c4. Rebasing onto owner-assigned origin/dev4ac9a0429, then resuming storage/host RED-GREEN qualification with worktree nix develop and the new FIFO build-slot wrapper. Queued work will remain pending until its turn. No new gate claim; final fast, systemd, host/storage and D243 results remain owed.
J12 rebased cleanly onto origin/dev4ac9a0429 and pushed
edge-update-v2@516d743497be62b9382f589982114841135b4220with an exact lease. Compute01 source matches that head; worktreenix developis used. Resumed FIFO gate PID786532 advanced from position8 to2; it remains queued and will not be stopped for waiting. One existing target; disk recovered to188GBfree. Reordered the pending script to observe catalog/inventory RED immediately after focused storage/helper qualification, restoring those inputs before broad GREEN checks. Source/inputs remain immutable during actual build. No new GREEN/finalfast/systemd/size claim yet. Recovery ledger updated with livePID, script order and cautions about older formatter archives.J12 continuation at edge-update-v2@516d743497be62b9382f589982114841135b4220 (rebased onto assigned dev4ac9a0429). Recovered the completed FIFO run: storage selection/adoption/runtime lock regressions and CLI generation21/21 pass; catalog/runtime and inventory RED cases fail as intended against refusing adapters. Broad gate then stopped on three test-only Clippy errors (similar_names and two unreadable_literal). Prepared those repairs plus the in-progress catalog/inventory implementations; next FIFO run is resume-storage-host-green.log on compute01, using worktree nix develop and the one retained target. No final fast/systemd/size/completion claim.
J12 crash-safety snapshots pushed through
d68955a337:ca73a7985fixes the three strict test lint errors;02db57119wires the bounded exact-running-version host catalog/sender and authenticated inventory observations, with migration0032;d68955a33keeps inventory readable without schema writes when read-only recovery precedes those columns. These are WIP pending qualification. The FIFO runner1243823 has advanced from position9 to8 (resume-storage-host-green.log), remains queued and will not be stopped for waiting. Its phases retain separate immutable source snapshots, then focused/broad gates, production host feature checks and signed staging artifacts for systemd proofs. One target: ~/.cache/j12-edge-update-evidence/target. No root units/mounts/jobs active; no new final-fast, exact-head systemd or D243 result. Host receiver/delayed-selection watchdog and remaining full acceptance/perf coverage remain unfinished.J12 first FIFO run acquired slot 4 after 31 minutes and completed functional qualification: release unit 57 passed / 3 ignored; updater integration 24/24; host wire 4/4; catalog 4/4; inventory observations 3/3; generation runtime 3/3 (read-only and WAL/lock preservation included); CLI generation 21/21. Release all-target Clippy passed. Server all-target Clippy then stopped on current-toolchain duplicate_mod: both signing-fixture consumers loaded the same support file. No final native/full-fast claim. Receipt: compute01 ~/.cache/j12-edge-update-evidence/resume-storage-host-green.log. That run has ended; no leftover build from it.
Pushed snapshots through
b4b347dcc1:22e22d382adds the scoped 128-row inventory perf kit;2849e79b3releases cached host payloads when a release worker retires, including an unpolled worker, while retaining per-transfer ownership;b4b347dccshares the existing signing fixture at crate scope instead of suppressing duplicate_mod. These new production/retirement/perf changes still await qualification.Current compute01 FIFO runner 1663637 is queued at position 14, resume-qualified.log, with one retained target. Source is the exact pushed
b4b347dccsnapshot; nix develop is from the worktree. It will not be stopped for waiting. The runner permits at most 3 native attempts and a bounded 5-minute repair interval only after a compiler/test command has ended, so a small gate repair need not requeue an entire job. Native GREEN waits briefly for formatter output to be committed and synchronized before signed static staging artifacts are built. Root systemd work has not started. Final fast, exact-head 7/7, storage/perf/host receiver and final D243 measurements remain owed; no caps changed.J12 continuation: edge-update-v2 remains pushed/clean at
b4b347dcc1, rebased onto assigned dev4ac9a0429. Owned compute01 FIFO1663637 is still queued (now position6, ~25min); it has not been stopped. One target remains ~/.cache/j12-edge-update-evidence/target; log resume-qualified.log.Prepared next failing-first host adapter slice outside the checkout: reuse the generation owner/prepared-pointer/commit protocol with an explicit file-backed host store entry. Hosts retain private identity.json plus boot configuration; no fabricated SQLite database or flip-before-health legacy watchdog. Three regressions require unchanged selection until commit, retained credential mutation refusal, and writable credential alias refusal. Only a refusing open_host adapter exists in that draft; no production host wiring or GREEN claim. The queued runner will run this expected-RED slice after its native qualification and signed static proof artifact build, restoring the qualified source afterward. Existing server startup format remains unchanged.
Root systemd/storage work has not started. Final fast, exact-head7/7, host receiver/adoption/lifecycle, full failure/perf coverage and matched final sizes remain outstanding. Current branch caps/dependencies/profiles are unchanged.
J12 FIFO1663637 acquired compute01 slot3 after ~53min; it was never stopped for waiting. New host state regressions produced the intended RED (not compiler errors): 12passed/5failed, all five failures because the refusing adapter still requires infraternal.sqlite. Covered trial/commit, retained credential mutation, hard-link refusal, original live credential adoption, and signed executing-image preflight; oversized credentials already refuse. Raw log: ~/.cache/j12-edge-update-evidence/resume-qualified.log.
Baseline functional qualification has passed release57/3ignored, updater25/25, hostwire4/4, catalog5/5, observation5/5, inventory7/1ignored, generation runtime3/3. CLI, all-target Clippy and compile-out checks are still running; this is not a final native/fast PASS.
After inspecting RED, implemented the next local file-backed host generation adapter and uploaded its immutable five-file source archive for the post-native phase. It reuses the installation lock/prepared-pointer/health commit machinery, binds identity.json plus configuration (8KiB identity bound), and performs no host SQLite creation. Existing server serialized fields/startup format and WAL checks remain. This new adapter is still awaiting GREEN; it is not receiver/lifecycle wiring. The runner restores baseline source before native compilation, and extracts the green source only after native commands end. It will rebuild proof harnesses before signing current source artifacts. No root proof has started, no caps changed. One target retained as before. Final fast, actual host receiver/adoption/check-in, broader failure/perf acceptance and final D243 remain outstanding.
Pushed gated host state adapter
bdfe33dd5d, preceded by separate formatting commit8e1bfe53e. RED-to-GREEN is recorded in resume-qualified.log: five intended missing-SQLite failures became six passing host cases (including oversized credentials). The adapter uses the existing delayed-pointer commit protocol with identity.json/configuration, preserving the live original identity during adoption and rejecting post-preparation changes and shared writable inodes. Signed preflight still authenticates the executing image before state opens. This is a storage adapter, not completed host receiver/adoption/lifecycle integration.Follow-up gate passed release63/3ignored, updater25/25, hostwire4/4, CLI generation21/21, release/CLI all-target Clippy, no-default and release-only compilation, fmt, and rebuilt proof harnesses. Marker verbatim:
Baseline native qualification also passed the server all-target lint and catalog/inventory/runtime suites described above. Compile-out checks emit existing warnings; no full-fast or final size claim.
Compute01 source/metadata now exactly match pushed
bdfe33dd5(clean), and the same held FIFO slot is building signed static proof artifacts with SOURCE bound to that SHA. Private signing material remains on compute01. Native inventory kit preparation follows without another build. No root proof is active yet. Next compile boundary: expose shared generation storage to host-only release builds without server SQLx/socket runtime dependencies; expected RED runs after artifacts. Final fast, exact-head systemd results, receiver/lifecycle, complete failure/perf acceptance and matched final D243 remain pending.J12 continuation recovered existing work at
bdfe33dd5(rebased onto assigned dev4ac9a0429). Host-only feature split is qualified and pushed as26b79e67a: host-only tests/Clippy, default release suites/all-target Clippy, no-default and dependency-tree boundary pass on compute01. Markers verbatim:Root systemd/storage runner2417169 remains FIFO queued at position13; it will remain queued until execution. Signed proof bundles bind
bdfe33dd5; results will be historical to that SHA, not final head acceptance. Root log /root/.cache/j12-systemd-resume.log. Native log ~/.cache/j12-edge-update-evidence/resume-qualified.log; one target ~/.cache/j12-edge-update-evidence/target. Continuing host receiver/lifecycle integration; final full-fast, exact final head proofs, complete failure/perf acceptance and D243 remain owed. No cap/profile/dependency changes.J12 128-host inventory kit executed on the pinned perf VM through perf-run (cpus1–3,6GiB cap; quiet snapshots preserved). Exact packaged harness from
bdfe33dd5; this measures durable inventory rows/observations, NOT128 infraternal agent daemons or terminal/handoff continuity.Verbatim measurement:
Harness SHA, machine/load and before/after receipts are attached. The runner removed its per-run database directory; no benchmark process remains. Full warm/failure/performance acceptance is still owed. Root systemd FIFO2417169 and receiver RED/GREEN FIFO2504101 remain queued; neither will be stopped for waiting. Receiver regression source is outside the VM checkout until its slot begins. Final fast and D243 remain owed; no caps changed.
J12 crash-safety checkpoint pushed as
ac93ace80bon edge-update-v2. This is test-only WIP: seven generation::download acquisition regressions plus a refusing adapter, not a completed receiver. It will be replaced by a gated implementation after observing RED. Existing signed root proof artifacts still bindbdfe33dd5; qualified host feature split remains26b79e67a.Compute01 root systemd/storage FIFO2417169/waiter2417180 is now position3; receiver RED/GREEN FIFO2504101 is position6. Both remain queued and will not be stopped for waiting. No root units/mounts are installed yet. Native checkout remains the qualified26b79e67a snapshot until the receiver script acquires its slot and applies its immutable RED archive. One retained target ~/.cache/j12-edge-update-evidence/target. Logs: /root/.cache/j12-systemd-resume.log and ~/.cache/j12-edge-update-evidence/receiver-red-green.log.
Local recovery ledger ~/.cache/codex-scratch/j12/continuation.md; design-only host lifecycle notes host-integration-notes.md and unexecuted worker-retirement regression draft plugin-shutdown-red-tests.rs live beside it. No production host receiver/adoption/check-in/lifecycle claims, final fast or D243 result. Inventory perf receipts are on the preceding issue comment, scoped to rows/observations rather than running host daemons. Continuing the authorized plan without a completion handoff.
J12 resumed on edge-update-v2 at
ac93ace80b(rebased onto assigned dev4ac9a0429). compute01 FIFO receiver gate now reports HOST_DOWNLOAD_GREEN_EXIT=0. The subsequent shutdown regression reproduced 2/2 failures before implementation; new implementation passes 12 plugin-control and 55 remote-client tests (8 ignored), with Clippy repairs pending. This is not final qualification.Systemd proof at
bdfe33dd5reports generation supervision 7/7, automatic/historical rollback 2/2, and both 32MiB/256-inode primitives passing. Real 256MiB ext4 storage startup fails: block filler leaves two 1KiB fragments, and zero-inode startup changes WAL bytes before any read-only fixture read. A separate diagnostic confirms WAL changed during startup, not the reader. Fixing early capacity admission before writable startup and the filler tail; keeping the strict zero-capacity and unchanged-WAL oracles. No final fast/size claim.Logs on compute01: ~/.cache/j12-edge-update-evidence/receiver-qualified-retry-2.log; root /root/.cache/j12-systemd-resume.log and j12-storage-diagnostic.log. Diagnostic own units/mounts/files were cleaned; original proof cache retained temporarily for rerun. Full host lifecycle/check-in/version following and final perf/size/fast remain outstanding.
J12 resumed on edge-update-v2 at
ac93ace80b(rebased onto assigned dev4ac9a0429). compute01 FIFO receiver gate now reports HOST_DOWNLOAD_GREEN_EXIT=0. The subsequent shutdown regression reproduced 2/2 failures before implementation; new implementation passes 12 plugin-control and 55 remote-client tests (8 ignored), with Clippy repairs pending. This is not final qualification.Systemd proof at
bdfe33dd5reports generation supervision 7/7, automatic/historical rollback 2/2, and both 32MiB/256-inode primitives passing. Real 256MiB ext4 storage startup fails: block filler leaves two 1KiB fragments, and zero-inode startup changes WAL bytes before any read-only fixture read. A separate diagnostic confirms WAL changed during startup, not the reader. Fixing early capacity admission before writable startup and the filler tail; keeping the strict zero-capacity and unchanged-WAL oracles. No final fast/size claim.Logs on compute01: ~/.cache/j12-edge-update-evidence/receiver-qualified-retry-2.log; root /root/.cache/j12-systemd-resume.log and j12-storage-diagnostic.log. Diagnostic own units/mounts/files were cleaned; original proof cache retained temporarily for rerun. Full host lifecycle/check-in/version following and final perf/size/fast remain outstanding.
J12 checkpoint: edge-update-v2 pushed through
eaa85d22ab. Qualified slices:6198311c3signed bounded host download/resume; host/default release tests and Clippy, HOST_DOWNLOAD_GREEN_EXIT=0.7912efce2synchronous plugin retirement; 12 control + 55 remote-client tests (8 ignored), remote/mesh Clippy, no-default and formatting, PLUGIN_SHUTDOWN_GREEN_EXIT=0. Full handoff consumer remains unfinished.eaa85d22aearly read-only capacity admission and true block-fragment exhaustion; release70/0/3ignored and CLI generation20/0, Clippy and formatting pass, STORAGE_ADMISSION_NATIVE_EXIT=0. Signed x86 staging image rebuilt at this exact source: SYSTEMD_ARTIFACTS_BUILD_EXIT=0, sha256 97a00894d7135141ae428b2af83de9880bb0db84fb0ccd96221b9b4c9940eef9. Root real-systemd/storage qualification launched via build-slot; result pending.Sender still has an obsolete unverified-image seeding path; new failing-first regression requires owner-present adoption/manual-update inventory, without requesting payload or offering a seed. Native RED queued after static build ended. No active compiler source mutation. Full host lifecycle/check-in/version-follow, acceptance/perf/browser, final D243 matched sizes and scripts/verify fast remain outstanding. No cap/profile changes.
Control execution tool host restarted twice; recovered by inspecting state rather than duplicating runs. VM J12 checkout lacks origin: sync from existing VM repository by explicit object SHA (latest SHA verified against local
eaa85d22a); nix develop remains in the J12 checkout. One target retained at /home/claude/.cache/j12-edge-update-evidence/target. Latest receipts: storage-admission-artifact-build.log, owner-adoption-red-driver.log; root j12-systemd-storage-admission.log.J12 resumed after the control-host interruption. edge-update-v2 rebased and pushed at
a9832afddonto origin/devf4b61cd6c3. Historical J12 cap conflicts preserve current-dev gate values; owner removal of D243 approval thresholds acknowledged, measured deltas still required.Completed before interruption: exact
eaa85d22asigned proof passes systemd 7/7, automatic/historical rollback 2/2, bounded 32MiB/256-inode primitives 2/2, and real ext4 blocks/inodes against original A and committed B 4/4. Every storage case preserves retained DB/config and acknowledged WAL edits across three restarts with fillers, then updates after capacity returns. Root cleanup verified: no proof units/mounts/processes/fixture directories and task root build-slot shim removed. Raw receipt: local evidence/systemd-storage-eaa85d22a.log. Initial longer scratch root gave a 110-byte setup-token socket pathname; the same signed image passes with an 85-byte path under /root/.cache/j12-gp2. No product oracle weakened.Owner-adoption sender slice was qualified/pushed as
598929808before rebase (nowa9832afdd): unverified images report needs_manual_update without any payload/seed offer; release tests/Clippy/compile-out pass.The interrupted checkpoint scripts/verify fast completed and FAILed: J12 hosted skill test expected obsolete "unreviewed" wording; default x86/ARM sizes were 22,163,112 / 20,270,520 B above old branch ceilings. Fixing the skill regression against the actual current safety instructions; CLI package gate queued on the new dev base through build-slot. No baseline-failure exemption claimed. Final matched D243 control and final fast still owed.
Remaining: managed-host receiver registration, controlled lifecycle/owner adoption and authenticated delayed check-in/version following; complete failure/perf/browser acceptance and final exact-head gates. One compute01 target retained at /home/claude/.cache/j12-edge-update-evidence/target. No own old background gates remain; new cli-skill-green.log is the current queued gate.
J12 resume: edge-update-v2 remains based on origin/dev
f4b61cd6c3; qualified CLI regression fix is pushed asfb2d9aa2cc. Current controlled remote-runtime regressions reproduced RED (2 failed, Unsupported/no registration), then GREEN remote-client 57 passed/8 ignored and plugin-control 12 passed. Clippy identified one unused compatibility helper; fixed locally, qualification retry queued through FIFO build-slot and left waiting. This boundary retains the runtime lock after canceling transports and joining synchronous plugin retirement; caller still must join dedicated-runtime blocking work before sealed exec. Production host lifecycle/version-follow is not yet wired.Existing exact
eaa85d22asystemd/storage 7/7 +2/2 +2/2 +4/4 and cleanup receipt remain historical, not final head evidence. Final fast, matched D243 sizes and remaining host/perf/failure acceptance remain owed. Current own queue log: /home/claude/.cache/j12-edge-update-evidence/controlled-retry.log; one retained target /home/claude/.cache/j12-edge-update-evidence/target. Continuing implementation; no pending queue canceled and no completion claim.J12 crash-safety snapshot: wip/j12-edge-update-v2@db340b4f60 preserves unqualified local continuation; qualified edge-update-v2 remains
fb2d9aa2c. The controlled runtime retry is still in compute01 FIFO queue (last reported position7), /home/claude/.cache/j12-edge-update-evidence/controlled-retry.log; it will not be canceled for waiting. First implementation already passed57 remote-client +12 control tests; retry corrects a dead-code Clippy error. One target remains /home/claude/.cache/j12-edge-update-evidence/target.Draft next slices: host machine dispatcher uses signed bounded Receiving, never seeds unadopted hosts, refuses paused versions and invalidated settings epochs, and leaves handoff delivery inert until reply write. Seven dispatcher regressions are written but not yet executed. Activity can compile without SQLx, the CLI server feature activation is explicit, and standalone terminal open/attach/input fences are drafted. Staging kit now drafts reuse of CARGO_TARGET_DIR without debug-profile overrides. These drafts are NOT production host adoption/check-in/lifecycle integration or passing acceptance. No final fast/size claim; historical root systemd/storage receipt remains on72277. Continuing while the mandatory queue waits.
J12 resumed on edge-update-v2 at
1f234086f(based on assigned origin/devf4b61cd6c). Prior controlled runtime gate completed: CONTROLLED_RUNTIME_GREEN_EXIT=0, remote-client 57 passed/8 ignored, plugin-control 12 passed, Clippy and no-default check green. Continuing from local preserved continuation: regression for retained runtime ownership on refused exec, then managed host lifecycle wiring. Historical systemd/storage proofs remain historical; final head fast, systemd, perf acceptance and matched D243 measurements are still owed. One compute01 target retained at /home/claude/.cache/j12-edge-update-evidence/target. No active old J12 gate found.J12 checkpoint pushed
9f294de05on edge-update-v2. Atomic qualified slices:a6fd1819dextracts standalone activity feature without SQLx;9f294de05adds signed bounded host dispatcher, owner-adoption refusal, paused-version/downgrade checks, setting-epoch invalidation, and writer-owned COMMIT delivery. This is the receiver adapter, not complete process owner/adoption/version-follow wiring. compute01 via build-slot: host release 56 passed; host all-target Clippy; activity 4 passed; remote-only CLI check and normal host dependency-tree boundary pass.Broader host-enabled daemon suite failed 154 passed/1 failed/20 ignored at immediate post-drop runtime lock probe. Concurrent fork/exec suites can briefly inherit CLOEXEC descriptors; the same existing generation-watchdog tests already use a bounded release probe. Keeping strict held-lock assertions, adding bounded eventual-release check and explicit refused-exec resume regression. FIFO runner 4114570 (child wrapper queued) remains waiting, not stopped; log ~/.cache/j12-edge-update-evidence/host-resume-retry.log. It sequentially qualifies resume, host-enabled suite, then new host-generation preparation RED. New inheritance/preparation drafts remain unqualified. One target retained at ~/.cache/j12-edge-update-evidence/target. No root units/mounts active. Final exact-head systemd/fast/perf/D243 still owed.
J12 crash-safety checkpoint pushed edge-update-v2@d2e90cba0 (UNQUALIFIED WIP; preceding qualified head9f294de05). Retained-runtime resume regression observed expected RED (unsupported adapter,1 failed), then GREEN3 functional controlled-runtime cases. Clippy refused the newly used _guard field name; renamed it to guard without suppression. Current retry231890 remains FIFO queued (~12min, now fourth), not canceled; log ~/.cache/j12-edge-update-evidence/host-qualified-retry.log. It sequentially reruns resume + broad host-enabled suite, then host preparation, descriptor import, metadata and trial-callback RED/GREEN phases. Every new feature still has a refusing adapter until its intended assertion failure is observed; no production host lifecycle claim.
Review finding for upcoming wiring: terminal activity alone cannot fence all candidate node callbacks; e.g. preferred_server lazily restores Mesh state. Generic runtime admission must defer ordinary/control callbacks, route restoration and observation callbacks until durable private check-in, while leaving the release machine check-in available. New failing-first tests cover that boundary. Runtime lock duplicates must keep CLOEXEC until all process-spawning workers join; final exec alone enables inheritance. Drafts are preserved in the WIP, not declared GREEN.
No root units/mounts/proofs active. One target remains /home/claude/.cache/j12-edge-update-evidence/target. Local recovery ledger ~/.cache/codex-scratch/j12/continuation.md describes the queued immutable sources, flags and all outstanding work. Final full fast, exact-head7/7/storage, complete host/adoption/version follow, full failure/perf acceptance and D243 measurements still owed. WIP will be split into gated atomic commits before finish.
J12 continued from pushed edge-update-v2@d2e90cba0 (qualified predecessor9f294de05), based on assigned origin/dev
f4b61cd6c. Re-read the common brief, accepted plan and issue notes. Existing compute01 FIFO231890 is still waiting and remains intact; no build/source mutation while a compiler owns the checkout. Continuing signed host preparation, runtime descriptor handoff and candidate callback admission before lifecycle integration. Historical systemd/storage receipts are not final-head acceptance; no completion claim. One target remains ~/.cache/j12-edge-update-evidence/target; gate log host-qualified-retry.log. D243 caps remain removed, final matched deltas still owed.J12 qualified slices pushed through adef69265:12ec43e79 retained-runtime resume,
c8286a948standalone terminal activity/input fences,81cfe04b5 retained-target proof packaging,a49ddf7f9 signed private host-generation preparation,adef69265 runtime descriptor transfer. compute01 FIFO231890 acquired and remains active. Observed failing adapters before implementation. Gates: retained3; daemon156 then158 passed/20ignored; host-only release59; default release81/3ignored; corresponding Clippy/fmt and packaging regression passed. These are boundaries, not complete production host lifecycle.Harness finding: archive extraction preserved old mtimes and Cargo selected zero new tests; rejected that RED, changed new-phase extraction to refresh mtimes, and reran to the intended 2pass/1fail preparation assertion. CLI metadata then observed descriptor/command/presenter RED and positive GREEN tests; host-only Clippy found existing Mesh cleanup functions unnecessarily fallible without Mesh. Selecting existing Kernel::NONE in that build and retrying, rather than suppressing lint. Next generic candidate callback gate remains refusing stub until RED.
Owner-adoption investigation: daemon is non-dumpable, so a same-UID installer cannot reliably authenticate /proc/PEER/exe. Proposed generic same-UID local-only action boundary lets runtime verify its own executing image; remote public/private dispatch must exclude that surface. Ruling/remaining plan recorded in local continuation ledger. Full host lifecycle, final exact-head systemd/fast/perf/failure and matched D243 remain owed. No root units/mounts active; one retained target remains ~/.cache/j12-edge-update-evidence/target.
J12 crash-safety push: edge-update-v2@e952d6f26 is explicitly UNQUALIFIED WIP for the generic candidate callback gate; qualified predecessor199ab3dd5. Metadata slice199ab3dd5 passed descriptor/CLI/presenter regressions, host-only and default all-target CLI Clippy, compile-out/no-SQLx tree and formatting. Earlier qualified boundary commits are on72464.
FIFO629795 is still queued (now second, ~23min); log ~/.cache/j12-edge-update-evidence/runtime-owner-continuation.log. Kept it waiting, no own queued run canceled. Previous FIFO231890 completed all qualified phases, then exited on a test-fixture compile error (temporary static action-array lifetime), which is corrected in queued source. That error was not treated as valid RED.
Queued phases: runtime-gate RED/GREEN, local-only owner API RED/GREEN, real socket writer-owned owner effects RED/GREEN, release.down transfer-lock cleanup RED/GREEN. GREEN implementations for these remain absent until intended assertions fail. New disable regression uses an actual Receiving directory lock: current ordering calls lifecycle cleanup while still owning its own transfer. Future host drain copies credentials only after all runtime workers join, avoiding a canceled input attempt leaving a prospective pointer and false failed-version pause. Detailed ledger ~/.cache/codex-scratch/j12/continuation.md; scripts/sources same scratch and VM evidence directory. One target ~/.cache/j12-edge-update-evidence/target retained. No root units/mounts active; full lifecycle and final fast/systemd/perf/size acceptance still owed. WIP will be split with an exact lease.
Resuming J12 on edge-update-v2 at
e952d6f26(qualified predecessor199ab3dd5), based on devf4b61cd6c. Existing compute01 FIFO wrapper 629795 is still queued and will be left waiting. Continuing callback admission/local owner dispatch/host cleanup RED→GREEN slices before production host lifecycle integration. Retained target: /home/claude/.cache/j12-edge-update-evidence/target; log: runtime-owner-continuation.log in the same evidence directory. Final current-head systemd, verify fast and matched D243 deltas remain owed.J12 crash checkpoint edge-update-v2@f58a0d053 replaces earlier callback-stub WIP
e952d6f26; still UNQUALIFIED, predecessor199ab3dd5 is qualified. compute01 FIFO629795 acquired, observed intended callback RED3/3, then activity41 and socket-host44 passed (1ignored). Strict Clippy caught2newtest assert_is_empty lints; corrected, queued retry PID1033805 (runtime-owner-retry.log), currently~18min wait. Not canceled. One retained target ~/.cache/j12-edge-update-evidence/target. Retry chains local-only owner API/presentation, actual local socket writer effects, transfer-lock disable cleanup, and newly prepared immutable host boot configuration/signed original-image adoption regressions. These later GREEN implementations are absent until RED. All phase scripts/test drafts and current ledger in ~/.cache/codex-scratch/j12 locally /VM evidence directory. Production host lifecycle/readonly/30scheckin/watchdog/adoptedbootstraprepair remain unwired. Final exact-head systemd7/7, fast, matchedD243 and fullperf/failureacceptance still owed; historical receipts are not final acceptance. No root units/mounts/processes active.J12 checkpoint: no source changes since pushed WIPf58a0d053 /qualified199ab3dd5. compute01 FIFO1033805 remains live, now FIRST, ~47min waiting (log runtime-owner-retry.log). Four slots still have live builds/tests;52GBfree, so no disk admission block. No queued work canceled or duplicated. While waiting, prepared additional failing-first node readonly admission/terminal refusal and existing readonly runtime-lock cases after the previously recorded phases. Their GREEN code remains absent until valid assertion RED. Prepared one-target matched static-size runner (paired-static-sizes.sh; NOT RUN) instead of old second-target reference script. Ledger/test drafts/scripts in ~/.cache/codex-scratch/j12, mirrored phase inputs oncompute01 ~/.cache/j12-edge-update-evidence. No new qualification/final acceptance claim; production host lifecycle and final exact-head systemd/fast/sizes/perf still owed.
J12 resumed from pushed edge-update-v2@8098ec52b, based on origin/dev
f4b61cd6c. Local owner API is qualified; socket writer-owned effects currently have a failed lost-peer oracle (160 pass/1 fail/20 ignored). Investigating explicit kernel peer shutdown before releasing the blocked handler; no final acceptance claim. Prior FIFO ended, no pending old J12 jobs found. Continuing host lifecycle integration and outstanding exact-head systemd/fast/perf/matched D243 gates. One target retained at /home/claude/.cache/j12-edge-update-evidence/target.J12 crash-safety checkpoint: edge-update-v2@d57401c48 is UNQUALIFIED WIP for local socket writer-owned effects; qualified predecessor8098ec52b. Current compute01 FIFO PID1837190 remains live, now fifth after ~27min; not canceled or duplicated. Log ~/.cache/j12-edge-update-evidence/local-worker-retry.log. Previous broad socket run160 passed/1 failed/20 ignored: lost-peer test expected close after drop while parallel fork/exec can transiently retain a duplicate; retry explicitly shuts down both kernel directions before releasing its blocked callback. No GREEN claim yet.
While queued, repaired a future publication-fence test draft whose assertions were inserted into the wrong test, added immutable boot-coordinate rejection tests, read-only callback/registration refusal cases, and a real read-only Service startup regression (no plugins.sock, no credential allocation, existing read-only exclusive lifetime lock). Those later phases remain RED drafts with no GREEN implementations until observed assertion failures. Phase scripts/test inputs are in local ~/.cache/codex-scratch/j12 and compute01 evidence directory; latest ledger continuation.md and final-acceptance-checklist.md. Current FIFO chains disable/boot/adopt/read-only/publication/service phases once it acquires. One target remains /home/claude/.cache/j12-edge-update-evidence/target. No root units/mounts/proofs active. Complete host lifecycle and final exact-head systemd7/7, fast, matchedD243 and full perf/failure acceptance remain owed. WIP will be split before finish.
J12 qualified socket slice pushed as
d4179c052on edge-update-v2 (replaces unqualifiedd57401c48WIP with an exact lease). Full host-enabled daemon suite161 passed/0failed/20ignored, strict all-target Clippy and formatting pass, LOCAL_WORKER_GREEN_EXIT=0. Same-UID local writer preserves AfterReply until the complete reply write; remote local-only invocation refuses; lost-peer effects remain inert even with a duplicated peer descriptor. Historical old lost-peer test passes alone1/1 but failed in concurrent suite; explicit kernel shutdown removes its transient fork/exec ownership ambiguity.Next real transfer-lock regression observed expected RED at release.down self-held Receiving lock; moving transfer drop before lifecycle.set_enabled passes60/60 host release tests. Clippy caught new test expect_used, corrected to allowed unwrap; retry PID2439838 now FIFO queued6 (host-disable-retry.log), not canceled. Following phase scripts now retain their acquired slot and await a corrected immutable GREEN archive after a qualification refusal rather than losing the slot for a lint repair. Future boot/adoption/read-only/publication/service regressions remain unqualified drafts; full host lifecycle and exact-head final gates still owed. No root jobs; one retained target /home/claude/.cache/j12-edge-update-evidence/target. Current source and scripts preserved locally and on compute01 evidence path.
J12 crash-safety checkpoint edge-update-v2@1b29acdf3 is UNQUALIFIED WIP for transfer-drop-before-disable cleanup; qualified predecessord4179c052. The new regression observed expected self-held directory-lock RED, then60/60 host tests passed; only its expect_used test lint needed correction. Native qualification retry PID2439838 remains FIFO queued, now FIRST after ~30min (host-disable-retry.log). Not canceled; four slots have live build/test trees. No completion claim.
While waiting, pruned only J12's unused incremental/example build artifacts, preserving native dependencies/tests and the one retained target; VM free space recovered above admission threshold. Future immutable drafts/scripts cover boot coordinates, signed original-image adoption, node read-only callbacks/late registration, existing-only runtime lock, certificate publication freeze, read-only Service allocation, and local-only adoption dispatch. No GREEN implementations for those before actual RED. Phase qualification failures now await corrected archives within the acquired slot. Pending-download ownership and host watchdog scope/deadline/renewal audits are recorded in ~/.cache/codex-scratch/j12/host-integration-notes.md; current ledger continuation.md. Local adoption tests are appended after service recovery in the queued chain.
Proof scope clarification: original dispatch asks for the perf-VM kit; accepted plan labels whole-VM power cuts/reboots "Orchestrator, VM only". Package those isolated-VM cases, do not reboot/power-cut a shared build host. Exact-head assigned systemd/storage proof, fast, matchedD243 and actual performed/perf-kit-unrun distinction still required. Production host lifecycle remains unwired; current historical systemd receipts are not final. No root units/mounts active. One target /home/claude/.cache/j12-edge-update-evidence/target remains.
J12 resumed from pushed edge-update-v2@1b29acdf3, qualified predecessor
d4179c052, assigned devf4b61cd6c. Re-read common brief/current notes and accepted plan. Existing compute01 FIFO PID2439838 remains live and untouched; host-disable-retry.log still waiting. Continuing local preparation while preserving immutable phase inputs and the one target /home/claude/.cache/j12-edge-update-evidence/target. No root units/mounts active. Production host lifecycle and final exact-head systemd/fast/matched D243 acceptance remain outstanding; no completion claim.J12 qualified disable slice
e37570afdpushed (replaces WIP1b29acdf3 with exact lease). compute01 FIFO2439838 acquired: host release 60 passed/0failed, strict all-target Clippy and formatting passed; HOST_DISABLE_GREEN_EXIT=0. The next host boot test phase failed before assertions because its standalone remote test feature set omitted test-support and Tokio rt-multi-thread. Corrected the phase commands and idempotent module registration; new FIFO2903358 /host-boot-retry.log queued, not canceled. No boot RED/GREEN claim yet; future production host lifecycle and final fast/systemd/sizes remain owed. No root units/mounts active; one target unchanged.J12 checkpoint edge-update-v2@4b92ec1a6 qualified the offline perf-kit packager (remote unit RED missing helper → GREEN archive roundtrip/tamper-before-perf-run; measured=false). The next pushed WIP preserves an UNQUALIFIED standalone remote-test repair plus a restored generation perf fixture; these will be split after native qualification. Test repair addresses the actual agent-only compile failures (Tokio rt-multi-thread and cfg(test) history helpers). Perf fixture reuses old route pumps, keeps 128 routes attached, starts signed A via the fixed generation entry, and covers quiet update/rollback/failure/retention; it has NOT compiled/run yet.
FIFO2903358 remains live, now position11, ~25min waiting, host-boot-retry.log. No cancellation/duplicate run. It chains boot/adoption/read-only/publication/service/local-adoption qualification, then the drafted perf-fixture compile gate. Production host lifecycle and final exact-head fast/systemd7/7/matched D243 remain owed. One target unchanged; no root units/mounts active. Local continuation and phase archives preserved under ~/.cache/codex-scratch/j12 and VM ~/.cache/j12-edge-update-evidence.
J12b resumed in isolated control worktree /home/kayg/Developer/Worktrees/infraternal-j12b, branch j12b-edge-update, from pushed edge-update-v2@1d534607c. Current origin/dev base target
a26615c50e. Read common brief and issue history; no production or signer deployment. Plan (estimate 4 hours active implementation plus mandatory build-slot/gate queue time): (1) rebase and inventory qualified vs refusing adapters; (2) complete existing approved host boot/adoption/lifecycle path with failing-first checks, reusing generation storage/watchdog/runtime; (3) wire existing version source if its backend status/check is in approved reporting scope; (4) VM detached build-slot focused/full-fast and exact-head proof/size evidence; atomic commits and own-branch push; (5) remove owned targets and finish with verbatim gate. No new infrastructure. Existing old boot run ended at expected RED, no pending PID found. Will stop/report before exceeding 2x estimate. Existing historical evidence is not final-head acceptance.J12b inventory finding: pushed continuation has receiver and server sender/catalog boundaries, but crates/infraternal/src/remote.rs still calls run_with_installation without RuntimeControl, so production host lifecycle registration/adoption/trial remains unwired. Boot-coordinate/adoption qualification is necessary before that wiring. Version reporting/check IS in scope: existing release.updates.get/check + release.updates events and remote.host.list.agent_version can feed #216 without new endpoints or layout. Added production-source wire-shape regressions; implementation awaits observed RED. Initial rebased host_boot filter accidentally ran against the pre-test VM copy (0 tests); rejected that result and corrected immutable source transfer. Corrected RED/GREEN chain is FIFO queued as PID2054155, log /home/claude/.cache/j12b-evidence/boot.log; source RED PID2136113. One inherited target moved, not duplicated: /home/claude/worktrees/j12b/target. Current branch rebased head
a92dd3ee3. No lifecycle/UI completion or final-gate claim.J12b crash-safety snapshot pushed j12b-edge-update@70210192b (WIP, based on dev
a26615c50). It preserves boot-coordinate implementation, adoption/read-only refusing adapters and production version source work; these will be split after qualification. Version source observed RED 0pass/4fail, then GREEN 29pass/0fail across the version module. Explicit source RED queue was retired because this is a 265ms light unit check (run on compute01); no Rust build-slot bypass. Native FIFO2054155 remains queued, now ~13min, log /home/claude/.cache/j12b-evidence/boot.log. Immutable native phases observe assertion RED before implementation; boot/adoption/read-only/recovery-lock qualification then UI typecheck/production-build alignment/captures are chained in the same slot. ARM currently has only13GBfree, below the25GB floor, so no extra target was created there. One target /home/claude/worktrees/j12b/target. No root services/mounts or deployment. Production host lifecycle, final fast, exact-head systemd/storage, matched sizes and performed-vs-unrun proof evidence remain owed.J12b qualified and pushed two atomic slices on j12b-edge-update:
6db2a1859binds immutable boot metadata to original bootstrap coordinates;bee16db0fauthenticates original-image adoption while retaining the live identity directory and legacy boot owner. Actual RED→GREEN receipts in /home/claude/.cache/j12b-evidence: boot 1pass/3fail → remote library 100pass/14ignored, strict Clippy/fmt; adoption 1pass/1fail → host-only release 62pass/0fail, strict Clippy/fmt. These are prerequisites, not complete lifecycle or final acceptance.Version adapter disposal regression observed 4pass/1fail (late check returned unknown after view disposal), then all version module tests 30pass/0fail after the fix. Typecheck and production-browser captures still pending. Initial extra disposal attempt accidentally used the original stub source restored by the boot snapshot; rejected that result and reran against the implemented source before fixing.
One qualification script error sent the unchanged read-only stub archive after a local Python syntax failure. The VM correctly failed 4 recovery assertions; no GREEN was claimed. Corrected implementation is queued as compute01 PID2452917, node-retry.log (same evidence directory); it chains existing-lock recovery, allocation-free service startup, local-only adoption, boot/uninstall compatibility, renewal publication fence, initial host lifecycle regression, then UI checks. No duplicate active run. The original PID2054155 has exited.
Production host lifecycle remains unwired. Preparing the concrete owner around the existing receiver/store/watchdog, with durable enable/disable and attempt-specific retry. No new updater engine/framework. No root services or mounts. One retained target: /home/claude/worktrees/j12b/target. ARM has 24GB free, still below the mandatory25GB admission floor; no second target created. Full fast, exact-head systemd/storage, matched sizes and performed-versus-unrun proof evidence remain owed.
J12b continuation from qualified j12b-edge-update@541c0aa71. compute01 FIFO2663368 is still live, now first in queue after about14min; no duplicate native run and no pending run abandoned. Service recovery RED/GREEN remains pending; subsequent local-adoption, generation-unit, publication-fence and concrete lifecycle phases are staged, not qualified.
Review findings before production wiring: generation credentials must use Selected.state_directory() while uninstall/runtime ownership retains the original bootstrap Context; read-only transport must advertise no persistent renewal callback; host watchdog must use its own fixed entry and choose system/user scope from the installation UID. Added failing-first cleanup regressions: a live Receiving owner prevents deletion; unknown entries remain untouched; legacy uninstall preserves unrelated updates data while adopted uninstall removes generation credentials. These are not new infrastructure.
One target remains /home/claude/worktrees/j12b/target. Logs/evidence remain /home/claude/.cache/j12b-evidence. No final fast, production lifecycle, screenshots or exact-head proof claim yet.
J12b qualified UI wiring pushed as
f3ea0d589. The production source now reads release.updates.get/check and paginated account-scoped remote.host.list concurrently, subscribes after discovery, keeps unknown host versions unknown, and disposes listeners/late facts without timers. Existing interfaces and UI are reused.ARM64 VM through build-slot: bun run check passed; version unit tests30 passed/0failed; production-build version browser suite15 passed in2.5m, including ±0.5px alignment and44px touch-target assertions. Captures below are the existing mock-backed browser scenarios, NOT a real-backend integration claim. Desktop PNG is2× device scale; phone is3×. Independent visual approval remains owed. Full log: dev-02 ~/.cache/j12b-evidence/ui.log; captures: ui/version-pill. Native FIFO2663368 is still queued first on compute01; no final fast/production host lifecycle claim.
J12b continuation: qualified head
86f0e95d4on j12b-edge-update, based on deva26615c50. Read-only renewal qualification passed 176 daemon tests plus strict Clippy/fmt (201ecac85). Local-only bounded signed-offer adoption observed expected discovery RED, then 64/64 host-release tests and strict Clippy/fmt; fixed one declaration-order lint before committing. Remote action authorization still excludes adoption.The existing slot owner PID2663368 remains active; no duplicate run. Boot-command/uninstall compatibility has now observed RED 0passed/2failed, GREEN implementation sent for qualification. Following phases are credential publication fence, exclusive partial cleanup, and concrete production lifecycle wiring. One retained target /home/claude/worktrees/j12b/target; logs /home/claude/.cache/j12b-evidence/service-retry.log and per-phase RED logs. No production deployment or root units/mounts. Full fast/exact-head acceptance remain outstanding.
J12b qualified/pushed
56956068d(fixed generation boot/uninstall ownership),44a8edc93(foreground-fenced credential publication),7f41f8d3f(exclusive checked transfer cleanup). Boot: RED0/2 → remote103pass/14ignored, strict Clippy/fmt. Credential publication: RED0/1 → remote identity13pass/0fail, binary Clippy/fmt. Cleanup: RED0/1 → host release65pass/0fail, strict Clippy/fmt. Correction: 44a8edc93's commit text says12 remote tests; actual receipt is13.Additional real-process regression observed RED: dropping an armed handoff guard before exec closed its channel and stopped the still-selected process. Guard cleanup now sends the existing explicit ABORT frame before descriptor release; abrupt kernel channel shutdown retains the original candidate-stop oracle. First host-only GREEN run69pass/1fail caught that old fixture using ordinary guard drop instead of abrupt channel loss; corrected it to shutdown both socket directions, preserving that failure trigger. Retrying in the same acquired slot, no duplicate build.
Minimal host build also exposed descriptor transfer compiled only via SQLite/research features. A narrow feature now exposes the existing audited helper without adding server storage. Host lifecycle is wired in the unqualified draft, not claimed complete. All receipts remain compute01 ~/.cache/j12b-evidence; one target ~/worktrees/j12b/target. Exact-head full fast/systemd/storage/static and offline perf-kit remain owed. No production deployment/root units/mounts.
J12b qualification update:
db14d1552onj12b-edge-updatewires the concrete host daemon lifecycle to the existing signed receiver/store/watchdog and runtime activity fences. Minimal host binary: 70 passed; default host binary: 128 passed, 1 ignored; both strict all-target Clippy configurations and fmt passed on compute01 under the retained build-slot lease. Raw receipt:/home/claude/.cache/j12b-evidence/service-retry.log(HOST_GREEN_EXIT=0). No real host upgrade is claimed by these unit/transport receipts.The inherited staging generation harness needed missing browser pump helpers and current-dev fixture patterns restored. Actual RED: idle quiet window timed out and the control-probe watch closed (1 passed, 2 failed). The fix is qualifying independently before commit. No production transport change is included in that slice.
Current dev advanced to
65d9861914e8cd4a734d533d64ed1f4ea5c34119; I will rebase there before the final exact-head fast gate. Remaining work: final gate, matched static size receipts, systemd/storage/updater functional receipts, offline perf kits, cleanup. No perf VM contact or deployment.Final-gate finding on rebased
6ef72af939c4a604fcb03cc4bc619d3c979c00d1: the workspace feature union enablesplaceholders, exposing a missing global release declaration whenhost-updatessupplies the local CLI plugin. Existing regressioncli::actions::release_tests::server_commands_bind_release_without_losing_hosted_skillsfails atactions.rs:756,hosted release action(127 passed, 1 failed, 1 ignored). Focused default-binary qualification had not enabled that union. Receipt:verify-fast-6ef72af939c4a604fcb03cc4bc619d3c979c00d1.logon compute01.Fix prepared: retain executable host commands and append the existing metadata-only global declarations when placeholders are requested. No action routing or authorization changes. The running gate is allowed to finish its remaining rows before a corrected exact-head rerun.
Second full-gate finding:
plugin_control::recovery_tests::recovery_service_uses_existing_read_only_lock_without_local_socket_allocationreached its real terminal-refusal probe, thenUnixListener::bindrefused the long target-relativebase/sessions/sessions/<UUID>.sockpath withpath must be shorter than SUN_LEN(176 passed, 1 failed, 21 ignored).a76a29befshortens only the fixture's private base/runtime folder names; the real rendezvous, lifetime-lock/no-write checks and real listener remain intact.The preceding CLI failure occurs in the gate's explicit
--features placeholdersbinary configuration, not an incidental workspace feature union.8a47961c8preserves the existing global metadata declarations alongside executable host actions. Both fixes await the corrected exact-head fast rerun after the current run finishes; they are not claimed GREEN yet.First rebased full fast run completed: exit 1. Static x86 and ARM production builds, trust/linkage/key-memory checks passed. Formatting reported three inherited test files whose formatted copies had not been committed; formatting-only
54e730f2afixes them separately from the two behavioral fixture/discovery fixes. The full failed receipt is attached asverify-fast-6ef72af939c4a604fcb03cc4bc619d3c979c00d1.log.Corrected exact-head full fast now running on
54e730f2afe61113f5fe6ec501d1c2a997b18910in the same acquired compute01 build slot. No-default-feature tests: 37 passed. The raw log will also be scanned for inner failures: the existingrust_check_cli_plugin_compile_outfunction continued after the placeholder test failure and its final successful command made that row say PASS. That reporting defect is recorded here; it is not used to claim the failed inner assertion passed. Scope remains #211, without a verification-framework refactor.Matched production sizes will reuse the successful exact-head gate binaries and rebuild only dev
65d9861914e8cd4a734d533d64ed1f4ea5c34119under the same recipe. Functional systemd/storage/updater proofs and offline kits follow; no perf VM contact, deployment or whole-VM interruption.Corrected-head fast finding on
54e730f2a: CLI discovery and the read-only runtime/socket regression now pass. The workspace then reached mesh fixtures and found a real migration-number collision: shipped/current-dev0031_terminal_startup_hints.sqland the unshipped #211 invitation-certificate migration both used 31. Ten mesh fixtures failed withUNIQUE constraint failed: _sqlx_migrations.version; raw receipt remainsverify-fast-54e730f2afe61113f5fe6ec501d1c2a997b18910.log.Fix pushed as
7d8ea8959df9b123aa33cdbc2ef9cca448e71904: preserve all shipped migration bytes/numbers; move the two unshipped #211 migrations to 32 (invitation certificate) and 33 (update observations). Update the existing contiguous-chain oracle and extend deployed checksum/ownership preservation to schema 31. No live database migration or production access occurred. The current fast run is finishing its static rows before another exact-head full run; no GREEN claim yet.Third exact-head fast progress: all ten mesh setup failures are fixed; the deployed-history checksum/ownership regression now passes through shipped schema 31. The complete server suite then exposed an inherited checkpoint fixture assumption:
checkpoint_fixture(true)unwrapped absentINFRATERNAL_TEST_STATE_ROOTbefore creating its WAL database. Its child and parent renewal regression failed before the intended ordering assertions.Fix
398ffaab9466504fd43e14d0a453adb7a7ee80c1supplies an OS temporary-root fallback while retaining the private UUID directory, on-disk WAL database, real writer fence, ordering checks and cleanup. No production behavior or test oracle is removed. The current run is still finishing remaining server cases; all new findings are being collected before the next complete exact-head run.Estimate update: another 60–90 minutes for the corrected full gate, matched sizes, disposable systemd/storage/updater receipts, offline kit packaging and cleanup. The original four-hour estimate is likely to be exceeded because the full gate first reached inherited integration/fixture defects. Scope is unchanged and remains below the eight-active-hour stop/report bound. No extra infrastructure, perf VM access, production access or deployment.
The complete server library run on
7d8ea8959finished 738 passed, 2 failed, 55 ignored. Two remaining fixtures, both now fixed on branch:398ffaab9: ordinary checkpoint/WAL writer test child had noINFRATERNAL_TEST_STATE_ROOT; private temporary-root fallback retains the actual writer-fence trigger.acd7b780c97242787b28076bbc8a690fdd9d3625: the retained hostname/canvas upgrade oracle still expected 31 applied migrations. Require 33 and explicit versions 32/33, retaining the original 28 checksums, hostname behavior and canvas data assertions; update its printed receipt accordingly.Fresh contiguous schema and deployed-history preservation (including schema 31) already pass. The current full run is finishing static rows; the next exact-head gate includes both remaining fixture corrections. No additional production behavior changed in these two commits.
Full server run on
acd7b780c: 739 passed, 1 failed, 55 ignored. All checkpoint cases and the historical hostname/canvas migration now pass. Remaining failure: the detached-authority SQLite storm observedstarted=4butpool.size()-pool.num_idle()=5, atwebsocket_authority_tests.rs:525.fa875f0b3733ef997b6299d55478b90173b4286bdrains SQLx's asynchronous initialization connection returns before placing the exclusive lock and enabling the storm observations. The original four-started/four-non-idle assertions, held lock, permit counts and busy-timeout cleanup oracle remain intact. This changes only fixture ordering; no production authority path changes. The complete failed receipt is attached asverify-fast-acd7b780c97242787b28076bbc8a690fdd9d3625.log.The exact-head full fast rerun is starting on
fa875f0b3in the same acquired slot. No pending phase is being abandoned; functional VM proofs and offline kits still follow a clean gate.J12b exact-head fast gate passed on compute01 inside the retained build-slot. Head
fa875f0b3733ef997b6299d55478b90173b4286b, base65d9861914e8cd4a734d533d64ed1f4ea5c34119. Raw output attached asverify-fast-fa875f0b3733ef997b6299d55478b90173b4286b.log(asset 30779, 537611 bytes). Scanned the complete log: no failed test/error/fmt markers.Verbatim Rust gate output:
Verbatim final output:
Paired static size controls and disposable server generation/storage/updater proofs are still running sequentially in the same lease. Offline perf artifacts will be prepared only; no perf VM or production contact. Enrolled-host signed-upgrade E2E and the full resource/power-cut matrix remain unqualified.
J12b exact-head
scripts/verify fast, full verbatim output. Headfa875f0b3733ef997b6299d55478b90173b4286b. Exit status 0. Raw file also attached (asset 30779).complete fast gate output
J12b matched production static size receipt, exact head
fa875f0b3733ef997b6299d55478b90173b4286bversus dev65d9861914e8cd4a734d533d64ed1f4ea5c34119. Both controls built sequentially in the same acquired compute01 slot, same pinned recipe/profile/default release identity and target, with release stamps and staging key unset. Both architectures passed production-trust checks and had no PT_INTERP.PAIRED_STATIC_SIZES_EXIT=0. These are whole-branch costs, not attributed helper costs or runtime performance measurements. Raw receipts and image hashes will be attached with the functional proof log. VM worktree restored to exact head before the staging build.J12b qualification blocker on compute01, head
fa875f0b3733ef997b6299d55478b90173b4286b: each of the exact-head systemd, bounded-storage and updater proof runners was refused before execution bysudo -n:sudo: a password is required.sudo -n -lis refused too; current uid is claude/1500. This is NOT a failing product assertion and NOT a passed proof. No root unit/mount was created by these invocations. Noninteractive approved root execution is needed from the orchestrator for the existing disposable runners. No credentials requested in chat, no privilege workaround attempted.Exact-head fast is already green and quoted in full above; matched static controls passed. The same acquired lease is preparing the signed public offline perf kits. I will preserve the three refusal receipts, finish the kit validation, release the lease and delete only J12b target unless the orchestrator supplies an approved root path during packaging. Existing historical systemd results do not qualify this final head.
J12b implementation handoff. Branch
j12b-edge-update, pushed headfa875f0b3733ef997b6299d55478b90173b4286b; rebased base65d9861914e8cd4a734d533d64ed1f4ea5c34119. Control and VM source worktrees are clean. No deployment, signer deployment, perf VM contact, shared-machine reboot or power cut.Implemented the remaining host lifecycle integration and recovery/publication/adoption fences, connected the version pill/Updates row to authenticated backend calls/events/paginated inventory, and repaired inherited/current-dev integration regressions with observed failing tests first. Atomic commits and slice receipts are recorded above. No new foundational engine selected.
Exact-head
scripts/verify fast: EXIT 0. Full 537611-byte output is quoted verbatim in the preceding complete-gate comment and attached: https://git.kayg.org/attachments/a2362ca4-98dd-42dd-901e-dd596b822802 . Every Rust gate row PASS; server library 740 passed/0 failed/55 ignored. Final verbatim output:Matched same-machine, recipe/profile/release-identity production static controls against the rebased dev:
Both production trust checks passed; neither image has PT_INTERP. Whole-branch costs, no per-helper attribution or runtime performance claim.
Evidence index attached as
EVIDENCE.json(30790), raw paired-build/proof/kit log attached (30791). Seven exact-head offline kits passed hash/script validation: updates, transport128, reconnect, retention, deploy, latency, inventory. On compute01:/home/claude/.cache/j12b-evidence/perf-<case>-fa875f0b3733ef997b6299d55478b90173b4286b.measurements_performed=false; inventory measures128 durable rows/observations, not128 running daemons. Signed system proof bundles, staging image and pinned storage fixture remain in the same evidence directory outside the deleted target.Qualification is incomplete: all three exact-head systemd/storage/updater runners were refused before execution with
sudo: a password is required. Zero cases counted as passed.PROOFS_EXIT=1/J12B_FINAL_RUN_EXIT=1preserve that blocker. Approved root execution is required for those existing runners. Enrolled-host signed-upgrade E2E, perf measurements, full power-cut/reboot/resource-refusal matrix and independent visual review also remain pending. Earlier UI production-browser tests passed15/15 with attached desktop/phone screenshots, but use mock protocol replies and are not real backend E2E evidence.How to test:
Cleanup: acquired build lease and runner exited; own compute01 target deleted and ARM Rust target absent; no remaining own build/test/browser process or bounded mount. Evidence retained outside checkout. Issue remains open for qualification and independent review.
J12b lean qualification follow-up, unchanged head
fa875f0b37. Plan/estimate:60–90 minutes plus build-slot queue. (1) Cross-build signed ARM proof image and static pinned-engine/32MiB exhaustion harnesses on compute01, since dev-02 has only29GB free; transfer public artifacts to cua on dev-02. (2) Through dev-02 shared build-slot, run existing disposable systemd7/storage4/updater2 plus the two existing32MiB/256-inode exhaustion regressions under approved root; inspect and quote exact owned-unit/mount/process cleanup. No whole-machine reboot/power cut. (3) Rebuild same-recipe x86 head/base retaining symbols, attribute section/symbol delta by crate/feature, report inexpensive reduction candidates only. Enrolled-host E2E and perf skipped as requested. No product changes, gate not rerun unless code changes. One compute01 target; delete it at finish.J12b follow-up checkpoint: compute01 acquired slot and ARM image is at final optimized link; unchanged head
fa875f0b37. dev-02 free space has dropped from29GB to23GB, below mandatory25GB build-slot floor, before our artifacts are transferred. No Rust target is being created there. Root proof queue may wait for other jobs cleanup; not bypassing the floor or removing others files. Resource runner uses only disposable service cgroups for candidate OOM/process refusal/descriptor admission; existing bounded32MiB tests prepared. One compute target ~/worktrees/j12b/target. Enrolled-host E2E/perf skipped as requested.J12b qualification checkpoint, unchanged
fa875f0b37. ARM static staging image and both harnesses built successfully on compute01 and transferred to cua/dev-02. Local public fixtures signed there; temporary private signing key deleted. Root proof coordinator PID1376164 now queues first with a claude-owned slot lease. Earlier root waiter1349264 was live but its ticket was absent: peers' kill-0 stale check cannot see another UID's process; stopped only our waiter and retained shared tool unchanged. Scratch coordinator keeps FIFO/slot ownership as claude and executes only this job's proof command as root. No product/infrastructure changes.Compute01 same acquired lease continues paired x86 symbol-retaining attribution builds. One target ~/worktrees/j12b/target. Dev-02 recovered above floor (>50GB), no target there. Raw logs: compute01 ~/.cache/j12b-evidence/qualification-build.log; dev-02/cua ~/.cache/j12b-qualification/root-qualification-retry.log. No root case completed yet. Enrolled-host E2E/perf remain skipped.
J12b size attribution, report only; unchanged head
fa875f0b37versus dev65d9861914e8cd4a734d533d64ed1f4ea5c34119. Raw attribution JSON attached30797; demangled nm listings, sections and module JSON archive30798. Pinned production recipe/LTO/optimization retained, only strip=none for symbol ownership. Re-stripped symbol builds measure22,536,872/21,647,848 B, delta889,024; actual production pair22,534,600/21,642,416 B, delta892,184. Probe-vs-production delta difference3,160 B; ownership totals below are approximate LTO attribution, not independent feature ablation.Actual production sections account for +713792 B .text, +128388 B unwind/exception tables, +33568 B .rodata, +16256 B writable/relocated data, +180 B net remaining file layout. This sums to892184 B; .bss is not charged as file bytes. No panic/LTO/profile change proposed.
Largest application module deltas: release generation+71942, CLI generation_update+63791, release updater+58190, CLI generation_cli+56065, server remote_runtime+47184, CLI restart+37646, daemon+32851, release_http+29491, host_update+26763, remote uninstall+24427. Names/closure renumbering and cross-crate generic inlining prevent treating these as additive causal feature costs.
Cheap-cut candidates, unmeasured and not implemented: first inspect the duplicated generic host daemon channel loop (real Socket and ControlChannel specializations) and extract the new transport-independent control/lifecycle work into shared non-generic functions. Its daemon module is+32851 B, so this is a plausible small cut, not an892KB solution or a savings promise. Then inspect repeated generation/boot configuration serialization and CLI rendering in the +232422 B CLI and +183795 B release plugin; share existing helpers where equivalent while preserving ownership/signature/durability invariants. I found no duplicate new third-party package/version to remove: Cargo.lock adds dependency edges to existing libraries only. Source inspection also rules out dropping a second plaintext release HTTP transport from production: that branch is already test/staging-only. New async HTTP streaming/control paths are real functionality, not evidence of a redundant engine. No reduction work performed.
J12b root qualification finding, unchanged
fa875f0b37, ARM/dev-02 disposable ext4. Storage is NOT qualified:installation not writable; serving read-only error_kind=StorageFull, followed byread-only generation serving stopped error=auth initialization failed; systemd restarted42 times within the retained90s observation. This reached the real full-volume recovery trigger, unlike the earlier setup timeout. P1 qualification blocker pending diagnosis.read-only recovery created or removed installation files. Need diagnostic path diff before deciding whether a surviving pre-stop child or read-only startup caused it; no oracle weakened.All32MiB/256-inode storage-primitive regressions passed in the first root attempt. Systemd adoption/healthy/candidate-exit/watchdog-death/owner-busy/repeated-recovery passed; stalled case timed out during setup before its trigger and will be retried unchanged. Updater and scoped resource cases still running. Full raw receipts will be attached after final cleanup. No product code changed or performance claim made; enrolled-host E2E/perf skipped.
J12b follow-up handoff: NOT READY FOR REVIEW. Head remains
fa875f0b3733ef997b6299d55478b90173b4286b, branchj12b-edge-update. No product code changed, no reduction work, no new gate run. Prior exact-head fast output remains quoted verbatim above and attached https://git.kayg.org/attachments/a2362ca4-98dd-42dd-901e-dd596b822802 . Both source worktrees clean.Root qualification on dev-02 as cua/root, through a claude-owned shared build-slot lease:
created=[] removed=['d/release-check-21b08061-f6a1-4674-bad0-bd48d692231f']. WAL/database bytes and pinned-engine marker checks pass, but read-only startup deletes abandoned staging. Source path: plugins::compiled_with_mode(read_only) still constructs release_latest::plugin/service; VerifiedLookup::new calls cleanup_abandoned_staging unconditionally (crates/plugins/release/src/latest.rs:95). This is the remaining P1 no-write violation; no fix made in this report-only qualification follow-up.Enrolled-host E2E/perf skipped as requested. Whole-machine reboot/power-cut and complete fsync-boundary matrix skipped on this shared VM under the disposable-units/paths constraint.
Qualification JSON: https://git.kayg.org/attachments/c769dc7a-7b06-476b-a90f-a45c1bffad6e . Raw attempts, diagnostics and cleanup: https://git.kayg.org/attachments/d7e0f1fd-f40c-462a-93e6-754b7419ba76 . Root fixtures/signing key removed; no pending runner/lease. Retained public proof artifacts and receipts are in cua's ~/.cache/j12b-qualification; compute logs/symbol artifacts remain ~/.cache/j12b-evidence/qualification.
Verbatim final cleanup:
Separate target verification, verbatim:
Size attribution table and cheap-cut discussion are in the preceding size report; JSON https://git.kayg.org/attachments/6a54f514-571a-41d7-8492-1167619979e9 ; raw nm/section/module evidence https://git.kayg.org/attachments/7930899e-f2ce-4c21-8eb8-2760e72bb6ee . Production x86 delta892184 B; text713792, unwind128388, rodata33568, other16436. Symbol ownership is approximate: symbol-retaining pair re-strips to a889024 B delta,3160 B different from production. Main text contributions: CLI232422, release183795, server96073, host daemon58677, plugin API38175, remote26293, others74509. No newly duplicated dependency version found; modest non-generic channel/control extraction and equivalent serialization/rendering reuse are candidates only, savings unmeasured. No profile, panic mode, dependency or source change made.