fix: resolve all four audit hardening residuals (#567-#570)#572
Merged
Conversation
Three ScratchnodeEventsSurface tests failed on clean main with a TypeError because the api mock predated ImportRecapButton's domains.product.scratchnodeImport query, and CI never saw the red because the runtime-smoke job runs an explicit allowlist that omitted the file. The api mock is now a Proxy that degrades unknown function references to unresolved queries (the surface's honest gates render nothing) instead of crashing at property access, the convex/react mock gains the useMutation the component already imports, two scenarios cover the import affordance's published/unresolved gates, and the file joins the runtime-smoke allowlist so future drift turns CI red. Closes #567 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The submit->Stop same-slot swap meant a double-click slower than the 400ms arming window (Windows accessibility settings allow ~900ms) could still cancel the run it just created. Stop and submit are now both always rendered: Stop holds a reserved slot (visibility:hidden while idle) and submit stays at identical coordinates while streaming, merely disabled — so the second click of a double-click lands on an inert control at every interval. The arming delay remains as defense in depth. Closes #568 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
detectRequestedResponseShape recognized only title-only and bullets, so "in one sentence", "a single paragraph", and "under 50 words" silently rendered the five-section memo despite the user's explicit constraint. Three new shapes are detected, instructed (via an exhaustive responseShapeSystemInstructions switch replacing the ternary chain), and deterministically enforced in applyDeterministicResponsePolicy: first sentence extraction, prose collapse, and sentence-accumulating word budgets. Honesty survives compaction — unsupported runs carry a "Source needed" prefix or inline limitation instead of busting the user's limit. JSON/table shapes stay model-side deliberately: the memo render path is markdown prose, and a deterministic policy cannot reconstruct valid structured output from parsed memo fields. Closes #569 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The audit's mobile collapse (grid 70px 320px, chat clipped to a 70px strip) was invisible to both the CSS-source string guard and the document-overflow boolean. one-flow-regression (Tier B, per-PR) now asserts the computed grid-template-columns of .rd-shell__main resolves to one track and main#main-content stays >300px at 390x844. Reversion- proved by reinjecting a higher-specificity two-column rule: computed geometry returns exactly the audited 70px/320px shape, which the new assertions reject. Also seals the audit-residual work in the redesign-chat changelog lane and backfills the #565/#571 entries' pending merge markers. Closes #570 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
HomenShum
enabled auto-merge (squash)
July 17, 2026 19:44
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
PR size advisoryThis PR adds 512 lines of substantive change. CONTRIBUTING.md defines a soft limit of ~400 LOC. If the PR is genuinely cohesive (e.g. an architecture map, a generated migration, a deletion of a dead module), no action is needed. Otherwise consider:
This is advisory — it does not block the merge. |
✅ Dogfood Visual QA Gate: PASSED
ArtifactsDownload the Generated by Dogfood QA Gate |
|
Demo: walkthrough of the surfaces this PR changed is available as a workflow artifact ( |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Resolves every open residual from the 2026-07-16 production audit cycle in one branch, four commits:
ImportRecapButton'sdomains.product.scratchnodeImportquery (TypeError on clean main) and the runtime-smoke allowlist never ran the file. Proxy-based api mock degrades unknown refs to unresolved queries,useMutationmock added, two new gate scenarios, file added to the CI allowlist.responseShapeSystemInstructionsswitch, and deterministically enforced with honesty preserved (Source needed:within the requested shape). JSON/table deliberately stay model-side..rd-shell__mainresolves to one grid track andmain#main-content>300px.Verification
npx tsc --noEmit— 0 errorsnpx vite buildclean; new 390px test passed against the served bundle (2.5s)70px 320pxgeometry, which the new assertions rejectCloses #567, closes #568, closes #569, closes #570
🤖 Generated with Claude Code