Open
opened 2026-10-10 02:36:01 +00:00 by kayg
·
96 comments
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#148
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?
Owner (2026-10-10): "add the frame meter under a Settings → Feedback section so you get direct results from production".
The frame meter (#116) exists only in preview builds and reports to the preview server's
POST /__perf, so production sends nothing. Plan:feedbackplugin (D198). It addsPOST /feedback/framesto the server. Requests must come from a signed-in session with a matching Origin. Bodies are capped and each session is rate-limited. Reports are appended to<data>/feedback/frames.jsonl, rotated at a size cap. A CLI actioninfraternal feedback framesreads them (D202).Started: branch feedback-frames, base
e704e5b8. Reviewed all comments on #148 and parent #116; continuing the backend lane described in #148.Finding: the current production-meter request is an envelope, not a top-level incident array:
apps/tracer/src/perf-hud.on-demand.ts:359serializes{v,sid,page,session,suppressed,incidents:[...]}. The endpoint will accept that envelope and extract its incident objects alongside the specified array and single-object forms; it will not persist the client session id or other envelope metadata.Started (designer, Claude). Branch feedback-ui, worktree .worktrees/feedback-ui, base
e704e5b8. Plan: meter ships in production as the on-demand chunk (left-out filter dropped for perf-hud), Settings → Feedback with two switches (Send frame reports, Show frame meter; per device, off by default), production posts to /feedback/frames by build flavour (preview keeps /__perf), 401/403/404 stop sending for the session, 429 backs off to the next hour. Not touching the feedback-frames worktree.Review finding:
PluginRuntime::switchcould mark feedback disabled, then be cancelled while awaiting plugin tasks beforeon_disabledran, leaving the dedicated writer alive. The switch now starts an owned cleanup task that joins aborted plugin workers and calls the hook even if the initiating request is cancelled (crates/infraternal-server/src/plugins.rs). The HTTP disable test now submits one report before switching off and verifies the writer drains before the route becomes 404 (crates/infraternal-server/src/feedback_http_tests.rs).Size finding: a clean
e704e5b8x86_64-unknown-linux-musl release build is 16,435,312 bytes ($HOME/.cache/codex-scratch/feedback-frames/baseline-target/x86_64-unknown-linux-musl/release/infraternal; static-pie, stripped). The configured fast-gate threshold is 16,142,672 + 262,144 = 16,404,816 bytes, so the base is already 30,496 bytes over before Feedback. Final size will be compared to this measured binary; no budget workaround is planned.Step complete: commit
1d660b7cadds the removable default-on Feedback plugin, declared actions, bounded parser/rate limiter/writer, and durable host lifecycle cleanup. Focused evidence: plugin tests 9 passed; HTTP integration tests 6 passed; CLI test 1 passed;cargo check -p infraternal-server --no-default-featurespassed;cargo check --manifest-path fuzz/Cargo.toml --bin feedback_bodypassed. Full fast gate remains scheduled for the final tree.Step complete: commit
62123c79mountsPOST /feedback/frameswith the server's existing session cookie check, configured Origin validation, bounded request body, shared runtime plugin switch, and real SQLite-backed integration coverage. Focused HTTP tests: 6 passed, including 401/403/413/429, reverse-proxy Origin, disable/drain-to-404, 50 parallel complete lines, and User-Agent truncation.Step complete: commit
ea06a416addsinfraternal feedback frameswith pretty and JSON output,--since,--limit, and--data. The focused CLI test passed (1 passed), and the reader tests cover receipt-age filtering and newest-record limiting across the rotated pair.Added the Feedback body parser libFuzzer target and harness instructions. Commit:
26abea08. Evidence:cargo check --manifest-path fuzz/Cargo.toml --bin feedback_bodypassed; the target invokes the production bounded parser and has no storage/auth fixtures.Designer finish (Claude), head
471ebe6eon branch feedback-ui, basee704e5b8. Commits:b2afd782(shared switch ring under the keyboard rule),503d5b06(meter ships in production as on-demand chunk; send/readout switches; /feedback/frames by build flavour, 401/403/404 stop, 429 to next hour),f8e28429(Settings → Feedback section and renderToggles),7234de71(spec; playwright env flavour),471ebe6e(captures). Gates: tsc clean; unit tests 52/52; build ok; transfer-budget ok, meter chunk 6,710 B gzip / 6,029 B brotli vs 20 KiB / 18 KiB. Production Playwright run: 7/7 passed (switches persist, no chunk while off, Send-on posts stall to /feedback/frames, Send-off not posted, 404 stops, 429 pauses, captures). Idle, one 5 s sample on a loaded host: off 90.7 ms task, Send on 113.9 ms. Not done: coarse-pointer 44 px row not verified in emulation (rows read 32 px). Not pushed or deployed.Documented the route contract and #34 private-data layout. Commit:
7f358e08. Evidence: paths, per-file 8 MiB cap, two-file retention, directory mode 0700 and file mode 0600 are stated in contracts/plugin.md and docs/ARCHITECTURE.md.Committed the real-server PTY and idle process-tree benchmark harness. Commit:
b3b67ecd. Evidence:python3 -m py_compile scripts/bench-feedback-frames.pypassed; the measured workload uses ten sessions at 120 requests/hour and samples PTY echo every 50 ms. Runtime numbers will follow after execution.Finding from the first
scripts/verify fastattempt: clippy stopped incrates/plugins/feedback/src/frames.rs:394-395withneedless_pass_by_valuefor the writer Receiver andmanual_let_elsefor file-open handling. The writer now consumes the channel receiver iterator (channel closure still shuts it down) and useslet-else. Evidence:cargo clippy -p infraternal-plugin-feedback --all-targets -- -D warningspassed;cargo fmt --all --checkandgit diff --checkpassed. The interrupted gate is being rerun after this correction.Second
scripts/verify fastattempt reached clippy and found four diagnostics:manual_let_elseatfeedback_http.rs:58and:73, plusused_underscore_bindingatplugins.rs:321andif_not_elseatplugins.rs:322. I converted both handler matches to let-else and reordered the role-switch branch while preserving the spawned cleanup task and its write-lock ownership. The run was interrupted after the failing clippy stage; it is not a completed gate result.Committed strict-clippy cleanup as
dd242743. Evidence before commit:cargo clippy -p infraternal-server --all-targets -- -D warningspassed; frame-route suite passed 6/6; plugin-host lifecycle review passed 7/7;cargo fmt --all --checkandgit diff --checkpassed. The durable-disable test confirms queued writes drain before the route returns 404.Third
scripts/verify fastattempt passed server and plugin clippy, then reported two CLI clippy diagnostics:needless_pass_by_valueonFramesArgsatcrates/infraternal/src/feedback_cli.rs:44, andduration_suboptimal_unitsforDuration::from_secs(1800)at:116. The run was stopped after clippy; I am changing the helper to borrow its options and expressing the test durations in minutes/hours.Committed the CLI clippy fix as
4b3f4988. Evidence:cargo clippy -p infraternal --all-targets -- -D warningspassed,cargo test -p infraternal feedback_clipassed 1/1, andcargo fmt --all --checkplusgit diff --checkpassed.The fourth fast-gate attempt reached
agent_review; five tests passed, whileinitial_attach_requires_explicit_credit_before_replayfailed in test setup before assertions becausescripts/verify-agent-attach-credit.pycould not createtarget/ac1192120(FileNotFoundError, missing parenttarget/). Rust build outputs are redirected to the required scratch target, so the repository-local fixture parent was absent. I will rerun after creating only that test-state parent; build artifacts remain under$HOME/.cache/codex-scratch/feedback-frames/target.Static size finding (D205): current
x86_64-unknown-linux-muslbinary is 16,643,408 bytes; thee704e5b8baseline measured 16,435,312 bytes, a +208,096-byte feature delta. The configured cap is 16,404,816 bytes (16,142,672 + 262,144): baseline was already 30,496 bytes over, current is 238,592 bytes over. No external dependency was added; the growth is the Feedback parser/storage/reader and plugin host integration. Per D205, I am reporting the justified size failure without changing the budget.Benchmark finding: the first weighted run started the real server, opened the authenticated PTY, and completed the first 10-session report batch (POST p50 12.73 ms, p99 14.63 ms), then raised
TimeoutErrorinTerminal.echoatscripts/bench-feedback-frames.py:258while awaiting a PTY frame with a fixed 2-second deadline. No echo percentile was produced. I am repeating a short run to determine whether this is host delay or a broken echo path before adjusting the harness.Short weighted reproduction completed without timeout: 10 authenticated posts accepted; 56 real PTY echo samples, p50 0.19 ms and p99 138.17 ms versus the 350 ms budget; POST p50 10.03 ms and p99 13.45 ms. The first run timeout did not recur. Starting the full 120-second load and 30-second idle measurement.
The full 120-second benchmark again timed out at the first 2-second echo read after the first 10-session report batch; the 3-second smoke run passed with 56 samples. Root cause in the harness:
Terminal.openwaits for__FEEDBACK_READY__, but the shell prints that marker before launchingcat, so the marker does not prove the echo reader is ready. I am adding an explicit warm-up echo probe before starting timed load; the probe will be reported separately and excluded from the steady-state percentile.Added a separate PTY echo readiness probe after the shell prints its marker and before timed sampling. It reports startup readiness latency independently and is excluded from the steady-state percentile. Evidence from the weighted short run: warm-up 1.59 ms; 10 posts accepted; 57 steady-state echoes, p50 0.19 ms/p99 120.26 ms (350 ms budget); POST p99 10.06 ms.
Correction to my prior benchmark diagnosis: the warm-up probe passed in 1.39 ms, but the full 120-second run still timed out on a measured echo after its first report batch. The marker-before-cat race was not sufficient to explain the failure. The 3-second run still passes (57 samples, p99 120.26 ms). I am instrumenting timeout context and running a 31-second case to isolate the duration-dependent behavior.
Instrumented 31-second run: warm-up passed (2.53 ms), 10 initial posts completed, 380 PTY echoes were received, then the next echo timed out at elapsed 21.52 s; load was (3.28, 5.54, 9.29). Code comparison found the production terminal calls
Connection.sampleRoundTrip()during typing and emits a control Ping at most once per 2 seconds (apps/tracer/src/terminal.ts:889,apps/tracer/src/connection.ts:231-249); the harness had omitted these pings. I am adding this production client behavior and will rerun the short and full cases.The browser-style control Ping did not resolve the stall. A weighted 31-second rerun passed the 1.58 ms warm-up and first 10 posts, then timed out after 398 echoes at elapsed 22.56 s (load 6.46/6.27/8.83). The harness’s
Terminal.consumecurrently ignores non-Output stream frames; I am inspecting close/ack frames at the stall before making further changes.Root cause of the ~22-second PTY stall: diagnostics showed
output_offset=1,048,576(exactly the one-MiB attach credit),input_offset=458,acked_input=458, and no Close frame. The harness consumed output without returning credit, unlike the production browser andscripts/agent_fixture.py; output stopped when its credit was exhausted. I am adding bounded 64-KiB output-credit refunds and settingZDOTDIRto the repository’s empty test profile to control shell startup.Resolved the benchmark stall by returning consumed Output/Snapshot credit in 64-KiB batches and using the repository test shell profile. Weighted 31-second validation passed: warm-up 7.96 ms; two batches, 20/20 posts accepted at 120 requests/session/hour; 562 PTY echo samples, p50 3.71 ms/p99 16.70 ms versus the 350 ms budget; POST p50 5.00 ms/p99 13.91 ms.
The corrected weighted 120-second PTY benchmark passed with 40 posts (10 sessions, 120 requests/session/hour): 2,337 echo samples, p50 0.21 ms/p99 3.13 ms against 350 ms; POST p50 6.42 ms/p99 13.44 ms. Idle window: 30.02 s, 0.00 ms process-tree CPU at proc tick resolution, 1 scheduler activation, 2 processes/19 threads; x86_64, 8 cores, load 11.91/9.66/9.41. Commit:
95ea9e41.Implementation is complete at
95ea9e4131.scripts/verify fastfinal gate output:The static-size finding is the only failing gate row. The release binary is 16,643,408 bytes, +208,096 bytes against the dev baseline build (16,435,312 bytes); this is a justified feature increase under D205. No dependency was added.
cargo check -p infraternal-server --no-default-features:Focused suites: feedback plugin 9/9, HTTP route 6/6, plugin-host lifecycle 7/7, CLI 1/1; fuzz target compiled. Clippy passed for feedback, server and CLI crates.
Weighted benchmark on infraternal-dev (x86_64, 8 cores; initial load average 13.26/8.76/9.13): 10 sessions each posted every 30 seconds (120 requests/hour/session), 40 posts over 120 seconds. Across 2,337 PTY echoes, p99 was 3.13 ms against the 350 ms budget. Feedback POST p99 was 13.44 ms. With feedback enabled, the server process tree used 0.00 CPU ms over 30.02 idle seconds (one scheduler activation; /proc CPU accounting has 100 ms tick resolution).
Independent review of
95ea9e41: HOLD.Fix round 2 started (Sol).
Round 2 start: branch feedback-frames, base
95ea9e4131. Read CLAUDE.md, DECISIONS.md, ARCHITECTURE, PROCESS and every comment on #148 and parent #116. Fixing P1/P2 and listed P3 findings with failing regressions first; no deployment. Only feedback_http.rs calls PluginRuntime::admit in server routes, so the client-I/O lease audit has one callsite.P1 reproduced: stalled_body_does_not_block_disable_or_other_switches failed on
95ea9e41because set_enabled exceeded 500 ms while the body was pending (p1-red.log). Route audit: rg '.admit(' finds only feedback_http.rs. Fixed auth-before-body ordering, 5-second timeout -> 408, and admission only around synchronous submit; admit itself rechecks enabled. Focused route tests now 9/9 pass, including stalled body + Feedback disable + Mesh disable, immediate unauthenticated rejection, and authenticated 408. Full fast gate running before commit.P2/P3 regressions on original storage code: 9 passed, 5 failed. A 33-level incident was accepted; bad complete JSONL aborted reading; reopening a partial tail concatenated the next record; a second session bypassed its user's incident budget; the 1025th tracked session was refused; a feedback directory symlink was followed. Evidence: frames.rs unit tests in p2-red.log. Proposed additive contract clarification before changes: max incident container depth 32; reader skips/counts invalid or partial history lines; JSON list adds invalid_lines; per-user incident limit 600/hour alongside the existing session limits; at limiter capacity evict stalest entries; file/directory opens refuse symlinks. Existing successful response and record schemas remain unchanged.
D205 size investigation: cargo tree -d confirms Feedback adds no new versioned dependency. Native release cargo bloat attributes 36.8 KiB to Feedback itself, with further route/CLI code and specialized queue machinery. Feedback is the only std::sync::mpsc user in crates/: its fixed-capacity queue still links array, list (unbounded), and zero-capacity rendezvous receive/disconnect implementations (bloat-symbols-before.log). I will measure reusing the already-required Tokio bounded mpsc channel with blocking_recv on the existing dedicated writer thread; queue capacity and synchronous try_send/backpressure stay unchanged. Also measuring ASCII-only key lowercasing (the code already excludes non-ASCII characters before lowercasing).
D205 measured candidate (same
95ea9e41native GNU release, stripped): before 17,285,688 B; existing Tokio bounded queue + ASCII lowercasing 17,259,416 B; -26,272 B. Bloat std text drops 985.0 KiB -> 973.3 KiB; essential plugin storage/route/CLI code remains. Weighted 31-second local runs (8 cores): candidate load 13.40/14.18/16.36, 569 echoes p99 19.06 ms, POST p99 7.33 ms; original load 10.25/14.18/16.03, 581 echoes p99 13.73 ms, POST p99 12.01 ms. Both accepted 20/20 reports at 10 sessions × 120/hour and passed the existing 350 ms PTY gate. Different host load and one pair do not establish a PTY speed improvement. Final musl sizes and full 120-second benchmark will be recorded after fixes.Step complete:
84526a35fixes P1. All 10 route regressions pass in the workspace gate. Musl size 16,643,792 B (+384 B over95ea9e41). Fast output (verbatim):D205-only size failure is reported without changing the budget; all other rows passed. Format and diff checks also passed before commit.
P2 fast-gate finding: auth::tests::socket_tests::review_liveness::review_mesh_watch_reports_liveness_expiry_without_another_edit failed at review_liveness.rs:83, received type="error" rather than "resync" (initial_live=true current_live=false revision=0 expiry_event_received=true). Server suite: 148 passed, 1 failed, 12 ignored, 221.32 s. No Mesh/auth code changed in this step. Starting a detached dev baseline at
7e8545c4under this job's scratch root, rerunning the server suite in the same host-load window (9.26/11.35/13.48) per #118; not treating it as unrelated until baseline evidence is available.The detached dev baseline (
7e8545c4) passed review_mesh_watch_reports_liveness_expiry_without_another_edit in its full server suite under load 10.84/14.11/14.38. No baseline waiver is claimed. Rerunning the unchanged P2 scripts/verify fast tree and requiring the test row to pass before commit. The first P2 static build is 16,644,912 B (+1,120 B over the P1 commit); only the allowed D205 size overage remains in the static row.Dev comparison finished: 139 passed, 0 failed, 12 ignored, 314.61 s; liveness expiry passed. First unchanged P2 rerun aborted before Rust rows: latency proxy reported p50=427.81 ms p99=430.38 ms for configured 300 ms RTT while the baseline suite was still active. No threshold or profile changed and no waiver claimed. Baseline has ended; restarting scripts/verify fast unchanged.
Second unchanged P2 fast retry stopped at the initial RTT self-test: p50=332.05 ms p99=367.74 ms (maximum 360 ms), host load now 19.83/15.73/14.96. Running verify in the brief's prescribed local CPUWeight=10000 scope so its RTT benchmark receives that scheduling weight. Configured RTT/jitter, all thresholds, tests and source remain unchanged; no failure waiver used.
Weighted P2 retry passed the RTT measurement (297.22/310.52 ms) and the previous Mesh liveness case. It failed only expired_handshake_releases_user_permits at auth/socket_tests.rs:206: the test did not receive 503 one simulated millisecond before the handshake deadline. Server suite 148 passed / 1 failed / 12 ignored, 202.82 s; other fast rows pass except D205 size. This is another #118 auth-socket timing case; running that exact test on the detached dev baseline in the same weighted load window before applying any exception.
Exact dev handshake comparison passed: 1 passed, 0 failed, 150 filtered out, 0.94 s, weighted scope, load 16.78/16.23/15.82. No timing failure is waived. Rerunning the complete fast gate with RUST_TEST_THREADS=1 to reduce concurrent fixture contention; every test remains enabled and each test's own concurrent clients/tasks, production deadlines and performance thresholds are unchanged. RTT measurement remains in CPUWeight=10000 as required. This changes harness scheduling only, not source or budgets.
P2 gate retries: serialized server suite 148 passed/1 failed (membership-edit liveness resync), but the exact dev-baseline test passed four times, so no #118 waiver. Two-worker suite 148 passed/1 failed: auth/socket_tests/scale.rs:143, missing bounded list continuation, load 18.60/18.92/16.41. Comparing that exact test on detached dev
7e8545c4and retrying unchanged source under CPUWeight=10000; no timeouts or thresholds were changed. Parser/history focused tests remain 11/11 passing. Other fast rows pass except the reported D205 static-size overage.Completed history/parser fix
7b403d7b86: 32-level incident validation in the existing walk; bad/partial lines skipped and counted; restart separates a partial tail before appending. Plugin tests 11/11. Full fast test row now PASS; no host-load waiver used. Stripped x86_64 musl 16,644,912 bytes (+1,120 from P1; no new dependencies). Static size remains the disclosed D205 overage. Gate output verbatim:CLI regression reproduced on
7b403d7b: actual feedback frames --json returned no invalid_lines field (Null instead of 2) for one valid record, one malformed complete line and a partial tail. After wiring read_reports_with_diagnostics, the executable test passes in 0.01 s: count=1, invalid_lines=2, and pretty output says Invalid history lines skipped: 2. Full fast gate running before this CLI-only commit.Host-load comparison for the CLI-only gate: expired_handshake_releases_user_permits failed at auth/socket_tests.rs:206. Immediately ran the already-built detached dev baseline test executable (dev
7e8545c4; cargo build/test provenance in the previous baseline comments; distinct 190cdbbadc6cede6 executable versus worktree 1ddb41e8a9d36921). The exact baseline test FAILED on the first attempt at the same assertion, 0 passed/1 failed in 0.94 s. This qualifies for the authorized #118 exception if it remains the only failing test. All changes are confined to feedback_cli.rs and its executable regression. Baseline output verbatim:Completed CLI history diagnostics
a88b870367. Executable regression passed (1 valid, 2 skipped). x86_64 musl 16,644,976 bytes, +64. Only test failure was expired_handshake_releases_user_permits; detached dev failed the exact same assertion in the same window, as recorded above (#118 exception). All other tests and non-size rows passed. No gate thresholds changed. Fast output verbatim:Focused route test initially failed to compile because the shared target reused the older dev-baseline plugin-api artifact: feedback/src/lib.rs:69 said on_disabled was not a trait member, despite current plugin-api/src/lib.rs:150 declaring it. Cleared only infraternal-plugin-api artifacts (122.2 MiB) and rebuilt current source; no code change. Future baseline comparisons use the captured dev test executable, separate from current builds, to avoid Cargo fingerprint collisions between worktrees. The workspace gates compiled the current API successfully; this affected the later focused build before its regression could run.
Route regressions reproduced against
a88b8703: 10 passed/2 failed in 6.28 s. A valid frame beacon changed sessions.expires, and the 121st unknown-cookie lookup still returned 401 instead of 429. Added a generic read-only live/unlocked session identity query and reused auth::http::ingress before its lookup. Unknown-cookie traffic spends the existing fixed browser partition; beacons never slide expiry. No admission lease is held across auth or client I/O. Focused tests and full gate running before commit.Completed passive admission fix fd970db3e63e38968b4ba4d89e26afe6b2b9cc27. Route tests 12/12 in 5.17 s; full server suite 151 passed/0 failed/12 ignored in 258.15 s. Fast correctness rows PASS without a load waiver. Stripped x86_64 musl 16652272 bytes; no new dependencies. Disabled route skips authentication and starts no work. Output verbatim:
Quota fix focused tests: 14 passed/0 failed, allocation diagnostic ignored for its separate release run. Earlier failing regressions showed a second cookie could accept another incident after the user sent 600, and identity 1025 got RateLimited. Now the same account gets accepted=0/dropped=1 across cookies; another account still gets accepted=1. Session and user maps both remain at 1024 and evict the least recently used entry. Existing keys reuse their account String allocation; session expiry pruning is preserved. Full fast gate running before commit.
Fresh quota gate found clippy::result_large_err in feedback_http.rs:109 (Response error variant >=128 bytes); the preceding route gate had reported clippy PASS. Correcting the route helper to return a small (StatusCode, static message) error and construct the HTTP response once at the boundary, preserving status/body/Retry-After. Quota changes are saved separately and temporarily restored out of the tree so the route commit can be amended and freshly gated without mixing logical changes. Cleared server artifacts to force a fresh check. No lint allowance or gate threshold change. Quota tests had passed 14/14; static size with quotas was 16,658,672 bytes (+6,400).
Corrected route: fresh workspace clippy passed in 20.28 s after replacing the large Response error with a status/message tuple (no allowance). Full fast is running; host load reached 41.40/34.62/27.42 on 8 cores and several existing socket tests report >60 s. Thresholds unchanged. Quota changes remain saved separately until this route commit is amended. No load generators, remote hosts or deployments used.
Full corrected gate stalled in serialized socket tests: process 3642967 had 20 threads, all in futex/epoll waits, with no CPU progress after >20 minutes. The pending lifecycle test passed independently on detached dev (1.25 s) and current code (1.06 s), so no #118 waiver. Stopped only this job's verification scope and reran full scripts/verify fast with RUST_TEST_THREADS=1, CPUWeight=10000 and TRACER_TEST_PORT=4348. All tests and their internal concurrent tasks remain enabled; no deadlines, sources or thresholds changed. Fresh clippy had passed. Both isolated test outputs are retained until final evidence is recorded.
Route commit amended to
519603fe7f, superseding fd970db3. Small status/message errors preserve HTTP output without allocating a Response in the identity helper. Fresh clippy PASS; full serial-harness server suite 151 passed/0 failed/12 ignored in 265.59 s; every correctness row PASS, no waiver. Stripped x86_64 musl 16650992 bytes. Quota changes were kept out of this commit. Fast output verbatim:Completed quota/eviction fix
50772568eb. Functional tests 14 passed; release allocation test 1 passed in 0.18 s. At 50 identities with full budgets: accounted payload 542,740 B; RSS baseline 3,376 KiB, observed 3,916 KiB (+540 KiB). At cap 1024: payload 11,245,482 B; RSS 14,508 KiB. Payload excludes allocator/control overhead, RSS includes harness and retained allocator pages; synthetic user-N key capacities are reported separately. host=infraternal-dev arch=x86_64 cores=8 load=26.17 41.85 38.01 27/10205 176619Stripped x86_64 musl 16,657,392 bytes (+6,400). All correctness rows PASS, no waiver. Gate output verbatim:
Allocation output verbatim:
Completed dependency-only preparation
264fc02606: feedback declares the existing Unix nix dependency; Cargo.lock adds one edge, no version or feature additions. All correctness gate rows PASS. Stripped x86_64 musl 16657392 bytes. Output verbatim:Storage regressions failed first: 14 passed/3 failed in 0.04 s. Existing WriterFile::open followed both feedback directory and current-file symlinks. After replacing the feedback pathname during rotation, frames.1.jsonl in the unrelated target directory was deleted (NotFound at frames.rs:980). The fix opens a verified directory descriptor with O_DIRECTORY|O_NOFOLLOW, opens regular files relative to it with O_NOFOLLOW|O_NONBLOCK|O_CLOEXEC, applies permissions to handles, and rotates with descriptor-relative unlinkat/renameat. Reader uses the same helper; missing history remains empty. Focused tests, fresh clippy and full fast gate running.
Completed verified-handle storage fix
279c3450dc. All 17 plugin tests passed in 0.08 s, including both symlink refusals and directory replacement during rotation. Reader and writer share PrivateDirectory; permissions use handles and rotation stays relative to the opened descriptor. All correctness fast rows PASS. Stripped x86_64 musl 16,658,512 bytes (delta +1,120 from dependency preparation). Output verbatim:Actual CLI regression failed first: corrupt-history output passed, terminal/directional-control output failed (1 passed/1 failed in 0.02 s). Added JSON post-format escaping for DEL/C1, U+061C, U+200E/F, U+2028–202E and U+2066–206F, including legacy directional formatting controls. Unicode elsewhere remains readable; decoded JSON values must round-trip exactly. No new dependencies, schema change or lossy replacement. Focused executable tests, fresh clippy and full fast gate running before commit.
Completed JSON control escaping
4466f8e85c. Executable regressions 2/2 in 0.01 s: corrupt-history diagnostics and exact control-string round trip. Fresh clippy and every correctness fast row PASS, no waiver. Stripped x86_64 musl 16,659,664 bytes (delta +1,152). Escapes change encoded output only, preserving decoded incident values. Output verbatim:Completed size optimization
8f26d13b5a. Reused Tokio bounded mpsc with blocking receive on the dedicated thread and ASCII-only metadata key lowercase; capacity/nonblocking submission/graceful drain unchanged. Plugin tests 17/17; fresh clippy and every correctness fast row PASS. Stripped musl before optimization 16,659,664 B, after 16,633,232 B: -26,432 B. Whole round-two change set is -10,176 B versus original95ea9e41(16,643,408 B), despite the security fixes. Versus measured pre-Feedbacke704e5b8(16,435,312 B), feature commit-set growth is now 197,920 B instead of 208,096 B. The static gate ceiling stays 16,404,816 B; no size workaround. Native prototype and cargo-bloat evidence already recorded above; final report-load benchmark follows. Output verbatim:Final release benchmark at
8f26d13b, local infraternal-dev under CPUWeight=10000, x86_64/8 cores. Ten authenticated report sessions at 120 requests/hour each, 120 seconds: 40/40 posts, 2354 real PTY echoes, p99 0.35 ms (350 ms budget); POST p99 7.58 ms. Idle 30.07 s: 0 CPU ms, 0 scheduler activations, 2 processes/19 threads. Initial load 2.43/2.90/3.08. This is absolute budget evidence, not a causal speedup claim against differently loaded earlier runs. Output verbatim:Scale benchmark at
8f26d13b: same harness with only SESSION_COUNT changed 10→50 in a scratch copy. CPUWeight=10000, local infraternal-dev x86_64/8 cores, initial load 2.40/2.32/2.77. 120 s at 120 requests/hour/session: 200/200 reports, 2342 real PTY echoes, p99 0.45 ms (350 ms budget); POST p99 32.43 ms. Idle 30.33 s: 0 CPU ms, 0 scheduler activations, 2 processes/19 threads. One active PTY and fifty authenticated report sessions share one account; separate-account limiter memory was measured above. No concurrent own build or load generator. Output verbatim:Parser fuzz verification at
8f26d13b: address-sanitized feedback_body completed 10,000 runs without a crash (nightly-2026-10-01, CPUWeight=10000). Seven seeds exercised depths 32/33/127, malformed tails, incident size, metadata redaction and Unicode. Final cov=703, ft=2083, corpus=179/81 KiB, RSS=86 MiB, execution=1 s after build. Initial inherited release LTO failed sanitizer linking with undefined coverage symbols; harness-only CARGO_PROFILE_RELEASE_LTO=false resolved it. Production settings unchanged.Additive contracts/plugin.md §10 update and docs/verification/feedback-round2.md now record the hardened behavior and evidence. Final fast gate running; no push/deploy.
Final docs gate first attempt hit existing agent_daemon::real_binary_preserves_input_and_output_across_24_abrupt_stops (11.87 s): terminal command queue full during abrupt-stop replay. This is outside #118 exceptions and is NOT waived. No executable changes since the preceding passing Rust rows; rerunning full gate. Host load at start of follow-up checks: 21.76/22.31/25.22. Exact failure:
---- real_binary_preserves_input_and_output_across_24_abrupt_stops stdout ----
thread 'real_binary_preserves_input_and_output_across_24_abrupt_stops' (2691213) panicked at crates/infraternal/tests/agent_daemon.rs:18:5:
real-binary daemon oracle failed:
idle infraternal agent: 0 scheduled slices over 2.200 s (0.000/min); RSS=13792 KiB
idle attached infraternal agent: 0 scheduled slices over 2.201 s; idle session shim: 0 over 2.202 s
real terminal.open/type/output and terminal.exited status=7: PASS
restart oracle stalled: iteration=1, position=before-forward, payload=470784, observed=0, received=470784, input sent=470844, input acked=470827, output cursor=471004, proxy alive=True, proxy threshold=None, proxy phase={'input': 'read', 'output': 'read'}
Traceback (most recent call last):
File "/home/kayg/Developer/infraternal/.worktrees/feedback-frames/scripts/verify-agent.py", line 214, in
run(args.binary.resolve(), fixture_state('tb'), args.functional, args.seed)
~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/kayg/Developer/infraternal/.worktrees/feedback-frames/scripts/verify-agent.py", line 113, in run
client.process()
~~~~~~~~~~~~~~^^
File "/home/kayg/Developer/infraternal/.worktrees/feedback-frames/scripts/agent_fixture.py", line 278, in process
raise AssertionError((kind, body))
AssertionError: (15, b'\x01\x00terminal command queue full; reattach and replay unacknowledged input')
note: run with
RUST_BACKTRACE=1environment variable to display a backtracefailures:
real_binary_preserves_input_and_output_across_24_abrupt_stops
test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 11.87s
error: test failed, to rerun pass
-p infraternal --test agent_daemonFinished round 2 on feedback-frames at
0635c9bfa8(10 atomic commits since95ea9e41). All listed P1/P2/P3 findings fixed; tests failed before the corresponding fixes. Documentation step0635c9bfupdates contracts/plugin.md §10 and adds docs/verification/feedback-round2.md with evidence, reviewer checklist and per-commit sizes. No push/deploy; issue remains open.Final scripts/verify fast under CPUWeight=10000, TRACER_TEST_PORT=4348, RUST_TEST_THREADS=1 (verbatim summary):
Static row's exact failure:
All correctness rows PASS. Final first attempt's unrelated daemon queue-full failure was not waived; complete rerun passed. Existing ceiling retained, justified size excess reported per D205; fast stops before aarch64/TypeScript.
cargo check -p infraternal-server --no-default-features:
Route/plugin/actual CLI gates, verbatim:
Parser fuzz: 10000 address-sanitized runs, no crash (nightly-2026-10-01; harness-only release LTO=false to avoid coverage linker failure). cov=703, ft=2083, corpus=179/81 KiB, RSS=86 MiB.
Final real PTY at code head
8f26d13b, infraternal-dev x86_64/8 cores, CPUWeight=10000, 120 s load + 30 s idle:Limiter allocation: 50 identities accounted 542740 B, RSS +540 KiB; 1024 identities accounted 11245482 B, total process RSS 14508 KiB. Excludes allocator/map overhead and whole-plugin queue memory; full conditions in evidence doc.
D205: original round-one 16643408 B -> final 16633232 B (-10176); optimization commit alone -26432 B. Pre-Feedback 16435312 B -> total feature delta 197920 B (formerly 208096). Stripped static PIE, no PT_INTERP. cargo bloat identifies duplicate channel machinery; existing Tokio channel and ASCII normalization reused. cargo tree -d adds only Feedback's edge beneath existing nix 0.30.1, no new duplicated versions. Scratch build and baseline cleanup follows; no source changes remain.
Independent verification started: branch review-feedback-frames, detached target
0635c9bfa8, merge base with deve704e5b893. Read all 68 comments on #148 and parent #116 plus contracts and round-two report. Delta verification of prior repairs and remaining boundary/lifecycle cases; no implementation fixes, push or deployment.Independent review findings, committed locally on review-feedback-frames at
a95610ed63(no implementation fixes):321a709c.Both are P2: no unauthorized data read/write demonstrated; the cancelled switch never acknowledges success. P0=0, P1=0 so far. Seeded ASan parser fuzz: 10000 runs, no crash, cov=838, ft=2614, RSS=101 MiB. Head gate and latency remeasurement still running/pending. Logs under $HOME/.cache/codex-scratch/feedback-frames-review/; findings appended to the requested findings.md.
Verification scheduling note: the first fast run at target head compiled its tests before reviewer additions, but a concurrent focused build replaced the same plugin_host_review executable before the runner reached it. Consequently that run included FF-R1 (7 passed/1 failed); it is not clean head evidence. The two reviewer source changes are temporarily removed for a complete unchanged-head rerun and will be restored only after the gate finishes. Head server unit tests were 151 passed/12 ignored; reviewer clippy passed. No implementation fixes, thresholds or test filters changed.
Clean-head gate retry failed in vt_reconnect during its second terminal-open fixture: terminal open refused (first wrapped recovery fixture passed). The preceding initial run passed this test. This is not a #118 exception and is not waived. Static compilation was still active; waiting for own builds to end, then rerunning the exact test and the full unchanged-head gate. Logs: feedback-frames-review/reconnect-failed.{stdout,stderr}.log. No P0/P1 finding attributed without reproduction evidence.
Independent performance attempts: stripped target binary is exactly 16633232 B, static PIE/no PT_INTERP, matching author. Two 10-session 120-second runs ended after three 30-second report batches: first with protocol Close 1011, second WebSocket EOF. A 50-session run accepted 150 reports in three batches, then WebSocket EOF at 68.46 s /1192 prior echoes (load 17.23/14.79/17.02), far before credit exhaustion: output_offset=1428, input_offset=1243, acked_input=1242. No own builds ran alongside these benchmarks. Initial loads: 10 sessions 7.90/15.76/19.02 and 6.67/12.87/17.39; 50 sessions 16.00/13.79/16.89. No complete percentile or idle result produced, so the author’s 120-second/30-second claims remain unverified in this loaded-host review; no Feedback-specific regression attributed. The existing websocket authority read deadline is 25 ms; thresholds unchanged. Logs retained. Scratch-only wrapper roots XDG_RUNTIME_DIR at the process working directory to avoid a 113-byte Unix socket path; workload/timing unchanged. Exact native reconnect retry passed (18.28 s); full unchanged-head fast rerun now running with no concurrent own builds.
FF-R3 P3 confirmed and committed as
44c15028: the measurement harness stops its server group and deletes runtime files but retains its independently launched session shim (scripts/bench-feedback-frames.py:638-648). review_feedback_benchmark_releases_its_session_shim fails after a successful one-second real workload: 10 reports accepted, 18 PTY echoes, p99=11.97 ms, REVIEW_RETAINED_SHIMS=1 (1.94 s test). The regression subsequently terminates only UUID/cwd-matched fixture shims; three prior review-owned shims were also stopped. This is benchmark ownership, not a product-session persistence defect. Final changed-test workspace clippy PASS (1.89 s). Clean target-head full fast gate: fmt, VT fmt, clippy, test, cargo-deny PASS; static builds FAIL solely at 16633232 B vs 16404816 B (D205). Server suite 151 passed/12 ignored in 236.13 s; no #118 waiver used. Final evidence document and verdict follow.Independent verification finished: MERGE (no P0/P1) / verdict: merge. Counts: P0=0, P1=0, P2=2, P3=1. P2/P3 regressions are retained for fix-forward under the owner rule.
Target
0635c9bfa8; merge basee704e5b893. Local review-feedback-frames head8fce817dc0, clean. No implementation fixes, push or deployment.321a709c: advertised feedback.frames.list remote Call gets no refusal/result; 0 replies after 500 ms, pending slot retained.a95610ed: cancelled disable drains real writer, then live=false / stored=true / restored=true; regression fails in 0.07 s.44c15028: successful real benchmark retains one session shim; regression fails in 1.94 s, then terminates only its own fixture shim.8fce817d: docs/verification/feedback-independent-review.md. All findings appended to the requested review job findings.md. Changed-test workspace clippy and format PASS.Clean target-head scripts/verify fast, verbatim (reviewer additions removed for the entire run and restored afterward; local CPUWeight=10000, TRACER_TEST_PORT=4397, RUST_TEST_THREADS=1):
Exact static failure:
Every correctness row PASS; 151 server tests passed /12 ignored in 236.13 s, plugin 17 passed /1 ignored, CLI 2 passed. No #118 waiver. An earlier native reconnect failure was not waived; exact retry passed in 18.28 s and the final complete gate passed. The initial concurrently overwritten reviewer executable run is excluded from target-head evidence. D205-only size overage remains; aarch64/TypeScript were not reached by fast.
Optional build: cargo check -p infraternal-server --no-default-features PASS:
ASan seeded parser fuzz: 10000 runs, no crash, cov=838, ft=2614, RSS=101 MiB. Limiter accounted payload: 542740 B at 50 identities /11245482 B at 1024; debug RSS 3912 KiB baseline, 4960/15552 KiB at those scales. Binary independently matches author: 16633232 B, static PIE/stripped/no PT_INTERP. No new third-party lockfile version.
Full-duration latency/idle claims remain unverified: two 10-session runs ended after 30 accepted POSTs; 50-session run accepted 150 POSTs, then EOF at 68.46 s /1192 echoes, load 17.23/14.79/17.02, with credit available. No own builds alongside, no thresholds changed, no Feedback-specific cause established. Failed logs retained; not presented as passing percentiles. Three review-owned shims from these runs were stopped; post-cleanup scan finds zero remaining.
Logs retained under $HOME/.cache/codex-scratch/feedback-frames-review/. Review build targets/fuzz target and generated corpus are being removed; issues remain open.
Round 3 started: feedback-frames at
0635c9bfa8. Read repository contract, process, all 75 comments on #148 and parent #116, and independent review. Cherry-picking the three retained failing regressions first, then fixing FF-R1/R2/R3 separately and rerunning full-duration latency locally under CPUWeight=10000. Push after each commit per brief; no deployment. D206 is supplied by the brief; this worktree DECISIONS.md ends at D112 and will not be changed.Retained review tests cherry-picked and pushed individually:
bd308435(FF-R1),4f5a4df7(FF-R2),a2c45560(FF-R3). No test weakened or deleted. Source tracing confirms FeedbackPlugin::run drops replies and discards all requests; PluginRuntime::switch owns only cleanup, leaving persist_setting in the cancelled caller; benchmark finally stops only the server process group before deleting rendezvous files. Reproducing all three with an isolated scratch target. Initial build lacked make; rerun supplies pinned Zig, make and perl through nix shell.All three retained regressions reproduced at
a2c45560: FF-R1 delivered=0 after 0.50 s; FF-R2 live=false/stored=true/restored=true, drained_records=1 in 0.02 s; FF-R3 successful 1 s workload, 10 posts/17 echoes, then REVIEW_RETAINED_SHIMS=1 (1.69 s test). Logs red.log and red-actions-lifecycle.log. Reusing existing infraternal-protocol for typed Feedback refusals; dependency preparation adds one first-party edge, no versions. Read D205/D206/D170 from dev:DECISIONS.md without modifying the older worktree decision file.Dependency preparation committed/pushed:
146619607d. Existing first-party codec edge only; stripped musl binary remains 16633232 B (delta 0 vs0635c9bf). Server 151 passed/12 ignored in 281.73 s. Fast test row stops at the retained FF-R3 regression (not weakened); FF-R1/FF-R2 independently reproduced above. No load waiver. Fast output verbatim:FF-R1 focused plugin-host suite passes 8/8 (0.51 s). Real authenticated production socket evidence: calls=24, results=24, refusals=24, duplicates=0, pending capacity=9, no private history read. First R1 fast test attempt failed existing agent_daemon::real_binary_preserves_input_and_output_across_24_abrupt_stops during client.open setup: terminal open refused, in 9.62 s (r1-fast.log). This is outside #118 and is not waived. Rerunning unchanged full gate after its static build ends; no timeouts/budgets changed.
FF-R1 committed/pushed:
1cba3b5046. Typed refusals for both socket actions, no remote private history read or Origin bypass. Plugin host 8/8; real socket 24 calls/24 refusals/0 duplicates, beyond pending capacity 9. Unchanged fast retry: server 151 passed/12 ignored in 270.81 s; only pending FF-R3 fails (1.50 s), no load waiver. Stripped musl 16635728 B, +2496 vs0635c9bf. Fast output verbatim:FF-R2 fast correctness evidence: server 151 passed/12 ignored in 309.87 s; only the pending FF-R3 test is red. Focused cancellation now live=false/stored=false/restored=false with one drained record (0.11 s), settings failure/reopen 3/3, plugin host 8/8. Static measurement pending. Before documentation changes: additive contract clarification will state that started switches own persistence/rollback through caller cancellation, and socket calls receive typed refusals for host-local history/HTTP-only reports. No schema, permission, Origin rule, wire format or deadline changes; this implements the approved D206 fix-forward brief.
FF-R2 committed/pushed:
3fe4a3a3c8. Complete owned apply-then-persist transition keeps switch/admission locks through save or rollback; owner/fresh checks unchanged. Cancellation: live=false/stored=false/restored=false, drained_records=1; settings 3/3, host 8/8. Fast server 151 passed/12 ignored in 309.87 s, only pending FF-R3 test fails, no waiver. Static musl 16636144 B, +416 from R1/+2912 vs0635c9bf. Output verbatim:FF-R3 additional red/green evidence: forced failure after two real PTY warm-ups retained 2 shims before fix; now opened_sessions=2/retained_shims=0 (release binary, load 16.88/19.88/19.85). Original retained review test now passes in 1.98 s with REVIEW_RETAINED_SHIMS=0. Initial reuse attempt failed because review absolute socket paths are 175 B (> Linux 108 B); cleanup now runs synchronously from fixture cwd using 56-byte relative rendezvous paths. Reuses scripts/agent_fixture.py cleanup, retires sessions before deleting sockets, restores cwd, and standalone runs own unique runtime roots. No product session semantics changed. Full fast gate starts next.
FF-R3 committed/pushed:
dbc734bea5. Reused rendezvous-authenticated cleanup; success test retains 0 shims, forced failure with 2 real PTYs retains 0. Relative socket paths measure 58 B (correcting prior comment's 56 B); review absolute paths were 175 B. Unique runtime roots, cwd restored, no product session changes. Full fast: all three retained regressions and earlier tests PASS; server 151 passed/12 ignored in 302.78 s. No load waiver. Static 16636144 B, +2912 vs0635c9bf, 231328 B over unchanged ceiling. Output verbatim:Full-duration measurements follow after optional-feature check; no own builds will run alongside.
Full 10-session release measurement completed at
dbc734be: 120 s, 40/40 reports, 2113 echoes, p99 32.35 ms (350 ms budget), POST p99 27.23 ms; 30.00 s idle CPU=0 ms/activations=0/processes=2/threads=19. Initial load 27.96/25.57/24.61 on infraternal-dev x86_64/8 cores, CPUWeight=10000, no own concurrent build. Optional-feature removal cargo check passed in 1m06s. First 50-session attempt accepted 150 reports in 3 batches, then WebSocket EOF before completion; no complete percentile/idle result. Initial load 14.94/20.39/22.76, sampled after failure 37.54/27.99/25.24. Logs latency-10.log/latency-50.log; no thresholds/deadlines changed, no cause attributed without evidence. Fixture-owned runtime process scan finds 0 remaining. Retrying unchanged 50-session workload.Full-duration latency completed at
dbc734beon infraternal-dev, x86_64/8 cores, local CPUWeight=10000, no own concurrent builds or load generator. Each run: 120 s, 120 reports/session/hour, one active real PTY, then 30 s idle. Ten sessions: 40/40 POSTs, 2113 echoes, echo p99 32.35 ms, POST p99 27.23 ms, load 27.96/25.57/24.61. Fifty-session unchanged retry: 200/200 POSTs, 2232 echoes, echo p99 13.13 ms, POST p99 23.79 ms, load 18.87/24.54/24.23. Both below existing 350 ms budget. Idle CPU 0 ms at 10 ms tick resolution; activations 0/1 respectively, 2 processes/19 threads. These are absolute loaded-host results, not a causal speedup or confirmation of prior low-load percentiles. Failed first 50-session attempt remains recorded above. Exact records:Round 3 finished: feedback-frames head
8d232f1933, base0635c9bfa8. Eight atomic commits pushed individually; no merge/deploy. FF-R1/R2/R3 fixed, all retained review tests unchanged (byte-for-byte diff against review-feedback-frames passed). Evidence and reviewer checklist: docs/verification/feedback-round3.md; additive contract clarification: contracts/plugin.md.Final scripts/verify fast: CPUWeight=10000, TRACER_TEST_PORT=4389, RUST_TEST_THREADS=1. Server 151 passed/12 ignored in 384.69 s; all earlier correctness suites and all three review regressions pass. No #118 waiver. Output verbatim:
Static failure, verbatim:
Stripped static PIE; +2912 B vs
0635c9bf(16633232 B), 231328 B over unchanged ceiling, disclosed per D205. Fast stops before aarch64/TypeScript; neither claimed verified. Optional-feature removal passes (1m06s), benchmark Python compile and diff checks pass.Completed loaded-host release measurements at
dbc734be, infraternal-dev x86_64/8 cores, local CPUWeight=10000, no own concurrent builds, 120 s + 30 s idle: 10 sessions load 27.96/25.57/24.61, 40/40 reports, 2113 echoes, echo p99 32.35 ms, POST p99 27.23 ms; 50 sessions load 18.87/24.54/24.23, 200/200 reports, 2232 echoes, echo p99 13.13 ms, POST p99 23.79 ms. Both below 350 ms harness budget; idle CPU 0 ms at 10 ms tick resolution, activations 0/1, 2 processes/19 threads. Failed first 50-session EOF and initial daemon/cleanup failures remain recorded; no thresholds changed or unsupported cause attributed. Successful and forced-failure cleanup retain zero fixture shims. Scratch cleanup follows; issue remains open.Cleanup at final head
8d232f1933: job-specific Cargo target removed 73302 files/12.6 GiB; generated worktree fixture target also removed. Scan finds 0 remaining fixture-owned infraternal processes. HEAD equals origin/feedback-frames and git status is clean. Durable evidence remains in docs/verification/feedback-round3.md and issue comments; remaining scratch logs/helpers are being deleted.Cleanup correction/completion: Cargo declined to remove the worktree fixture target because CACHEDIR.TAG was absent; the preceding cleanup note overstated that step. Verified producers in snapshot_fidelity.rs, mouse.rs, session_resize.rs, vt_credit.rs and vt_reconnect.rs, then removed only the 27 generated .vt/.log/Rust-cache files and their empty directories. Both the 12.6 GiB job build target and remaining job scratch logs/helpers are removed; no fixture processes remain. HEAD/origin remain
8d232f1933, working tree clean. No source changes or gates after the final documentation commit.Delta verification started: review-feedback-frames at
8d232f19, previously reviewed base0635c9bf, merge base with deve704e5b8. Prior review archived locally as review-feedback-frames-prior-8fce817d. All three prior failing tests already cherry-picked by target (bd308435,4f5a4df7,a2c45560); rerunning unchanged. Read #148/#116 comments, project rules, touched contract and author report. No implementation fixes, push or deploy.Delta-review gate first attempt: fmt and clippy pass, but unchanged agent_review::retained_unwritten_input_survives_interleaved_ack_restart fails with AssertionError (Close: terminal shim disconnected), 5 passed/1 failed in 41.08 s. Host load previously 48.04/40.36/32.74 on 8 cores. This is outside #118 exceptions and is not waived. Exact test and full unchanged gate will be retried; no Feedback-specific cause established. Evidence fast.log under feedback-frames-review scratch. Static build still running; no benchmark run concurrently.
Delta review retained findings resolved at
8d232f19: FF-R1 unchanged refusal regression PASS, plugin host 8/8 in 2.04 s; FF-R2 unchanged cancellation/restart regression PASS in 0.03 s, live/stored/restored=false and one drained record; FF-R3 unchanged real benchmark cleanup regression PASS in 2.75 s, retained shims=0. Test files match previous review byte-for-byte. No new confirmed delta finding. First gate replay failure exact retry passes in 4.55 s; full unchanged gate retry running, no waiver. Evidence logs: host.log/lifecycle.log/cleanup.log/agent-retry.log under feedback-frames-review scratch.First replay exact retry PASS in 4.55 s. Full unchanged gate retry: server 151 passed/12 ignored in 324.34 s, then feedback_benchmark_review failed before its real PTY warm-up (REVIEW_WORKLOAD_COMPLETED=false, retained shims=0), 1.01 s; the exact test passed separately earlier in 2.75 s. No waiver or cleanup finding inferred from an incomplete warm-up. Retaining both outputs. Full gate retry now uses the test's supported INFRATERNAL_BIN override pointing to the stripped target-head release binary, no source/deadline/threshold changes. Independent size matches: 16636144 B, +2912 vs
0635c9bf, 231328 above unchanged ceiling (D205).Additional target-head release probes passed: real authenticated socket 24 alternating feedback.frames.list/report calls -> 24 matching typed refusals, zero duplicates, beyond pending capacity 9. Injected failure after two real PTY warm-ups (2.70/1.32 ms) -> retained shims=0. Load 16.85/25.95/30.51, x86_64/8 cores, CPUWeight=10000. Behavior probes only, not latency percentile evidence. First scratch wrapper startup failed due absolute Unix socket path length; relative run/data matches the retained test's adapter and passed. Evidence probes-retry.log; no implementation change.
Independent delta review finished: MERGE (no P0/P1) / verdict: merge.
Open confirmed findings P0=0, P1=0, P2=0, P3=0. FF-R1/R2/R3 all resolved; retained tests unchanged and pass. Target
8d232f19, reviewed delta 0635c9bf..8d232f19, merge basee704e5b8. Local review-feedback-frames evidence headef93a93dd8; docs/verification/feedback-delta-independent-review.md. No implementation changes, push/deploy, or issue closure.Evidence: plugin host 8/8; cancellation live/stored/restored=false with one drained record; benchmark retained shims=0. Extra release probes: 24 alternating socket calls/24 typed refusals/0 duplicates, forced failure after two real PTYs/0 retained shims. Runtime process scan 0. Final full fast: server 151 passed/12 ignored in 340.19 s; every correctness row PASS, no #118 waiver. First replay failure exact retry passed; second gate fixture warm-up failed before PTY open; both retained and not waived. Final gate uses supported release INFRATERNAL_BIN override for benchmark fixture.
scripts/verify fast at unchanged target head, CPUWeight=10000, TRACER_TEST_PORT=4498, RUST_TEST_THREADS=1, verbatim:
Static failure, verbatim:
Size independently matches author: +2912 B vs reviewed base, unchanged ceiling exceeded by 231328 B, disclosed under D205. Fast stops before aarch64/TypeScript; neither claimed verified.
Performance remains independently unverified: sequential 120s + 30s idle release attempts, no own concurrent builds/tests, x86_64/8 cores. Ten sessions: initial load 36.39/31.06/30.33, 10 accepted reports then Close 1011. Fifty: load 35.02/30.74/30.24, 50 accepted reports then WebSocket EOF. No complete echo percentile/idle result, thresholds unchanged, no Feedback-specific cause established. Similar interruptions recorded in prior review/author attempt; not reported as passing latency evidence.
Resolved findings appended to job findings.md; logs retained under feedback-frames-review scratch. Generated build targets/fixture caches removed after review. Evidence-only commit does not change tested executable code.
kayg referenced this issue2026-10-28 17:53:56 +00:00