Mockup: recovery sign-in and replace recovery words (round 1) #83
Open
opened 2026-10-07 13:49:03 +00:00 by kayg
·
33 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#83
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?
Recovery flow mockup, round 1 (#45, D151-D153, D162): sign in with recovery key, replace recovery words from a signed-in device, card spacing. In-product prototype on branch proto-recovery, preview at http://10.69.69.125:47381/?mock=1&proto=recovery. Orchestrator reviews before the owner sees it.
Started recovery flow mockup round 1 on proto-recovery at base
2786430c9b. Read #83/#45 history, CLAUDE.md, decisions, architecture/process and the recovery contract; continuing the existing in-product mock preview.Finding: mobile-recovery:contracts/keywrap.md § Existing phrase-hash migration explicitly sends legacy words once (lines 385–404), while the #45 defensive review found that can expose the old DEK. The latest #45 fix direction removes phrase admission and rotates locally from a signed-in device (D162, comments 78–79). This mock follows the task's hard rule: no entered or generated words are sent to the test double.
Resumed recovery mockup after reading all #83/#45 comments, the current repo contract, main decisions 23/104-108/151-153/162 and mobile-recovery keywrap contract. Branch proto-recovery at base
2786430c9b; worktree is clean. Carrying forward the prior finding: D151's legacy phrase exception conflicts with this mock's on-device-only rule; no recovery words will be sent to the mock test double.Baseline capture complete at unchanged head
2786430c9b. Production-build onboarding/sign-in browser flow: 1 passed in 38.8 s on TRACER_TEST_PORT=4783; 12 screenshots at 393x852 and 1440x900, including returning sign-in. Recovery words/setup token were masked. Screenshots are in apps/tracer/test-results/onboarding-setup-recovery--906cd--match-the-browser-contract/.Continuation run 2 started on proto-recovery at base
2786430c9b. Read every #83/#45 comment plus CLAUDE.md, DECISIONS.md, architecture/process, the Apple motion references and mobile-recovery keywrap contract. Prior work is baseline-only; implementing the approved in-product mock now with recovery words confined to browser memory.Finding at 6bd8f4c: scripts/verify fast on TRACER_TEST_PORT=4783 failed during the pinned VT native build before tests. Zig received HttpConnectionClosing fetching zigimg (archive) and uucode (git); the build script reported . Retrying after this run exits; no source change made.
Finding at 6bd8f4c: scripts/verify fast on TRACER_TEST_PORT=4783 failed during the pinned VT native build before tests. Zig received HttpConnectionClosing fetching zigimg (archive) and uucode (git); the build script reported pinned libghostty-vt build failed. Retrying after this run exits; no source change made.
Step 1 source committed as
9bb196e. Initial fast gate completed with fmt, VT native fmt, tests (71 server tests plus all other suites), cargo-deny and both static builds passing; clippy failed with exit 101 after the recorded Zig HttpConnectionClosing on pinned VT downloads. Static binaries: x86_64 16,121,168 bytes; aarch64 13,539,528 bytes; both lacked PT_INTERP. Rerunning the exact corrected commit now that VT inputs are cached.Step complete: shared text download feedback helper committed as
b7ed6ab485. It reuses the existing tick confirmation for browser-local word downloads (D103, D160). bun run check PASS; bun run build PASS.Step complete: mock registration deadline check committed as
cedbc570b1. It accepts an empty body only, returns a visual result after the stored 24-hour deadline, and retains no credential or key material (D25, D162).Finding: 2/3 recovery browser scenarios passed. The replacement scenario's harness read fixture words after entering the confirmation screen, where the list is intentionally absent; its locator hit the 180 s test timeout. The UI had saved words and rendered the confirmation heading. Fixing the harness to retain requested words before the screen transition.
Finding: added a regression first; an unauthenticated POST to /__mock/recovery/cancel returned 200 and cancelled a pending request. Reproducer is apps/tracer/test/recovery-prototype.spec.ts:108; Playwright expected 401 and received 200. Restricting cancellation to the signed-in mock account view.
Step complete: signed-in cancellation enforcement committed as
760c83dafa. The mock now requires the preview auth cookie and same-origin request; the regression scenario passes, including anonymous 401 and account cancellation.Step complete: shared tooltip/tick/count-up refinements committed as
b3a7a71d83. Tooltip labels now use the 13 px floor and --font-ui; check/build passed. The recovery flow and toolbar reuse those shared primitives (D103, D160).UI step complete: recovery and replacement flows committed as
0856a29c7d. The production-build recovery browser suite passed 3/3 in 58.3 s; the client posts empty recovery bodies and the mock alone holds the deadline/cancel state.Capture manifest for the committed recovery prototype browser suite. There are 68 captures: 17 UI state groups in ink and paper, each at 393x852 and 1440x900. The attached browser artifact also contains manifest.txt.
capture file | flow step | theme | viewport
signin-ink-iphone-393x852.png | sign in and empty message/loading rows | ink | 393x852
signin-ink-desktop-1440x900.png | sign in and empty message/loading rows | ink | 1440x900
recovery-entry-invalid-ink-iphone-393x852.png | recovery key entry with inline per-word validation | ink | 393x852
recovery-entry-invalid-ink-desktop-1440x900.png | recovery key entry with inline per-word validation | ink | 1440x900
recovery-entry-valid-ink-iphone-393x852.png | 24-word recovery key accepted locally | ink | 393x852
recovery-entry-valid-ink-desktop-1440x900.png | 24-word recovery key accepted locally | ink | 1440x900
recovery-wait-ink-iphone-393x852.png | honest 24-hour wait and next step | ink | 393x852
recovery-wait-ink-desktop-1440x900.png | honest 24-hour wait and next step | ink | 1440x900
recovery-register-ink-iphone-393x852.png | final step to register a new passkey | ink | 393x852
recovery-register-ink-desktop-1440x900.png | final step to register a new passkey | ink | 1440x900
recovery-done-ink-iphone-393x852.png | recovery complete | ink | 393x852
recovery-done-ink-desktop-1440x900.png | recovery complete | ink | 1440x900
signin-paper-iphone-393x852.png | sign in and empty message/loading rows | paper | 393x852
signin-paper-desktop-1440x900.png | sign in and empty message/loading rows | paper | 1440x900
recovery-entry-invalid-paper-iphone-393x852.png | recovery key entry with inline per-word validation | paper | 393x852
recovery-entry-invalid-paper-desktop-1440x900.png | recovery key entry with inline per-word validation | paper | 1440x900
recovery-entry-valid-paper-iphone-393x852.png | 24-word recovery key accepted locally | paper | 393x852
recovery-entry-valid-paper-desktop-1440x900.png | 24-word recovery key accepted locally | paper | 1440x900
recovery-wait-paper-iphone-393x852.png | honest 24-hour wait and next step | paper | 393x852
recovery-wait-paper-desktop-1440x900.png | honest 24-hour wait and next step | paper | 1440x900
recovery-register-paper-iphone-393x852.png | final step to register a new passkey | paper | 393x852
recovery-register-paper-desktop-1440x900.png | final step to register a new passkey | paper | 1440x900
recovery-done-paper-iphone-393x852.png | recovery complete | paper | 393x852
recovery-done-paper-desktop-1440x900.png | recovery complete | paper | 1440x900
cancel-wait-ink-iphone-393x852.png | recovery request before second-device cancellation | ink | 393x852
cancel-wait-ink-desktop-1440x900.png | recovery request before second-device cancellation | ink | 1440x900
account-cancel-pending-ink-iphone-393x852.png | signed-in account view with pending recovery | ink | 393x852
account-cancel-pending-ink-desktop-1440x900.png | signed-in account view with pending recovery | ink | 1440x900
account-cancelled-ink-iphone-393x852.png | cancellation confirmed on signed-in device | ink | 393x852
account-cancelled-ink-desktop-1440x900.png | cancellation confirmed on signed-in device | ink | 1440x900
recovery-cancelled-ink-iphone-393x852.png | recovery device observes signed-in cancellation | ink | 393x852
recovery-cancelled-ink-desktop-1440x900.png | recovery device observes signed-in cancellation | ink | 1440x900
cancel-wait-paper-iphone-393x852.png | recovery request before second-device cancellation | paper | 393x852
cancel-wait-paper-desktop-1440x900.png | recovery request before second-device cancellation | paper | 1440x900
account-cancel-pending-paper-iphone-393x852.png | signed-in account view with pending recovery | paper | 393x852
account-cancel-pending-paper-desktop-1440x900.png | signed-in account view with pending recovery | paper | 1440x900
account-cancelled-paper-iphone-393x852.png | cancellation confirmed on signed-in device | paper | 393x852
account-cancelled-paper-desktop-1440x900.png | cancellation confirmed on signed-in device | paper | 1440x900
recovery-cancelled-paper-iphone-393x852.png | recovery device observes signed-in cancellation | paper | 393x852
recovery-cancelled-paper-desktop-1440x900.png | recovery device observes signed-in cancellation | paper | 1440x900
account-old-format-ink-iphone-393x852.png | signed-in account with older recovery words | ink | 393x852
account-old-format-ink-desktop-1440x900.png | signed-in account with older recovery words | ink | 1440x900
replace-reason-ink-iphone-393x852.png | plain-language reason to replace older words | ink | 393x852
replace-reason-ink-desktop-1440x900.png | plain-language reason to replace older words | ink | 1440x900
replace-new-words-ink-iphone-393x852.png | new words shown with copy and save actions | ink | 393x852
replace-new-words-ink-desktop-1440x900.png | new words shown with copy and save actions | ink | 1440x900
replace-words-saved-ink-iphone-393x852.png | new recovery words saved on device | ink | 393x852
replace-words-saved-ink-desktop-1440x900.png | new recovery words saved on device | ink | 1440x900
replace-confirm-ink-iphone-393x852.png | confirm requested recovery words | ink | 393x852
replace-confirm-ink-desktop-1440x900.png | confirm requested recovery words | ink | 1440x900
replace-confirmed-ink-iphone-393x852.png | requested words match | ink | 393x852
replace-confirmed-ink-desktop-1440x900.png | requested words match | ink | 1440x900
replace-done-ink-iphone-393x852.png | recovery words replacement complete | ink | 393x852
replace-done-ink-desktop-1440x900.png | recovery words replacement complete | ink | 1440x900
account-old-format-paper-iphone-393x852.png | signed-in account with older recovery words | paper | 393x852
account-old-format-paper-desktop-1440x900.png | signed-in account with older recovery words | paper | 1440x900
replace-reason-paper-iphone-393x852.png | plain-language reason to replace older words | paper | 393x852
replace-reason-paper-desktop-1440x900.png | plain-language reason to replace older words | paper | 1440x900
replace-new-words-paper-iphone-393x852.png | new words shown with copy and save actions | paper | 393x852
replace-new-words-paper-desktop-1440x900.png | new words shown with copy and save actions | paper | 1440x900
replace-words-saved-paper-iphone-393x852.png | new recovery words saved on device | paper | 393x852
replace-words-saved-paper-desktop-1440x900.png | new recovery words saved on device | paper | 1440x900
replace-confirm-paper-iphone-393x852.png | confirm requested recovery words | paper | 393x852
replace-confirm-paper-desktop-1440x900.png | confirm requested recovery words | paper | 1440x900
replace-confirmed-paper-iphone-393x852.png | requested words match | paper | 393x852
replace-confirmed-paper-desktop-1440x900.png | requested words match | paper | 1440x900
replace-done-paper-iphone-393x852.png | recovery words replacement complete | paper | 393x852
replace-done-paper-desktop-1440x900.png | recovery words replacement complete | paper | 1440x900
Step complete:
4373821806adds the recovery prototype browser coverage and produces 68 captures (393×852 and 1440×900, ink and paper) across 17 flow states. TRACER_TEST_PORT=4783 bun x playwright test recovery-prototype.spec.ts: 3 passed in 58.3s. Manifest: apps/tracer/test-results/proto-recovery/manifest.txt.Finding: the final fast run's Rust workspace test failed once at high concurrent load: panicked at crates/infraternal-server/src/auth/tests.rs:1505 with (workspace test finished in 158.88s; 70 passed, 1 failed, 6 ignored). Three worktrees were running fast gates concurrently. I will rerun the case and final gate after the other runs finish to classify it.
Finding: the final fast run Rust workspace test failed once at high concurrent load:
auth::tests::socket_tests::incomplete_rfc_message_still_loses_authority_on_revocationpanicked at crates/infraternal-server/src/auth/tests.rs:1505 withserver closed websocket unexpectedly(workspace test finished in 158.88s; 70 passed, 1 failed, 6 ignored). Three worktrees were running fast gates concurrently. I will rerun the case and final gate after the other runs finish to classify it.Finding: the first targeted rerun did not execute tests because plain cargo lacked make while rebuilding vendored OpenSSL. Retrying with the documented nix shell nixpkgs#gnumake nixpkgs#perl; no source changes.
Finding update: the isolated server test passed in the documented Nix shell after the test binary and vendored OpenSSL were rebuilt: 1 passed, 76 filtered out, 2.47s. This supports a load-sensitive failure in the earlier concurrent workspace run; no Rust changes.
Finding: the serialized full fast rerun still failed one existing auth timing test under concurrent system builds:
review3_backend_reply_has_a_deadline, assertion at crates/infraternal-server/src/auth/review3_tests.rs:619 (server workspace: 70 passed, 1 failed, 6 ignored, 171.32s). The earlier WebSocket test passed on this run. No Rust changes; rerunning after concurrent gates finish.Finding update: during the failed serialized rerun, host load rose to 28.67/22.83/18.27 on 8 CPUs while multiple verify fast runs and pinned VT release builds remained active. The 60-second auth backend timing assertion is outside this branch diff.
Correction to the load diagnosis: two isolated runs of
review3_backend_reply_has_a_deadlinealso failed while competing gates were active. The package-only binary failed its Frame::Result assertion at review3_tests.rs:619 in 4.29s; the workspace binary closed the websocket during read_welcome at auth/tests.rs:1505 in 3.20s. This shows nondeterministic early fixture behavior, not only a 60-second scheduling delay. No Rust file or dependency changed on proto-recovery.Finding update: a third isolated run using the workspace test binary failed the same backend deadline assertion at review3_tests.rs:619 in 9.13s (0 passed, 76 filtered). The unchanged auth test remains the only failing workspace case; retrying full fast on the final head after active gates clear.
Finished recovery mockup on final head
4373821806.Command:
TRACER_TEST_PORT=4783 RUST_TEST_THREADS=1 scripts/verify fast, run in transient CPUWeight=10000 scoperun-p634696-i9022468.scope.Captured output follows verbatim:
Starting recovery mockup round 2 on proto-recovery at base
7174d6bf6f, current head4373821806. Read #83 and #45 history plus the repo contract. Reworking entry validation, viewport sheet layout, countdowns, secondary action contrast, and typography/badge state; captures and gates use TRACER_TEST_PORT=4783. No source edits yet.Step 1 complete at
3728fe4: removed the 4-column per-word grid and replaced it with one status line; an invalid entry names its position and word, while a valid phrase reports 24 of 24 recognised. The regression failed first with the old generic message, then the production capture spec passed 3/3 in 1.2m on TRACER_TEST_PORT=4783. The capture test continues to keep the phrase in the textarea only.Step 2 complete at
e56b830: the account sheet now has a viewport-bounded card, safe-area padding, a contained scrolling body, and a pinned action footer. The 24-word list stays two columns. The red test found no footer; the production browser spec now passes 3/3 in 1.8m, with layout checks at 393x852 and 1440x900 and a pinned-header/footer scroll check at 375x667.Step 3 complete at
b8e0d24: the TEST DOUBLE badge is hidden while the account sheet is open and restored after close. The pre-fix browser assertion failed because the badge remained visible; the production capture spec now passes 3/3 in 1.4m with hidden checks across all sheet captures and a post-close restoration check.Step 4 complete at
48d5219: recovery and account countdowns now show days, hours/minutes, or seconds only below one minute. The old entry timer wrapped and rendered at 27.51px in the 393px capture; the new 28px/600 tabular line stays within 375px. The focused production browser spec passes 3/3 in 1.1m, including the 24-hour, 23h59m, and final-minute states at 375px and the phone/desktop captures.Step 5 complete at
4cef938: every recovery secondary action now uses the shared ui-button primitive with an outline, foreground text, and a visibly muted disabled state. The red browser assertion found that the old control was missing ui-button; the production spec passes 3/3 in 1.0m with both themes checked for >=4.5:1 contrast and disabled-state distinction.Finding: this worktree's packages/ui/styles.css lacks the shared ui-popover token block present in windows round-six commit
2a11360. Recovery classes alone therefore computed no key/value token values (failing assertion at 393 px). I am adding the shared token block before wiring the recovery surfaces.kayg referenced this issue2026-10-28 17:53:56 +00:00