Complete Destroyer scenario and visual coverage - #17
Conversation
|
Additional wobble triage: S19 is now linked to askrjs/askr-ui#119. Public VirtualList types and implementation enforce a single fixed row height and overflow clipping, so the natural inline incident timeline cannot be represented honestly. The scenario remains an explicit finding; no overlay substitution, non-virtual fallback claim, or compatibility shim was added. Evidence link commit: 2724679. |
|
Completed S19 in 385567e against locally packed fix branches: 39-row incident virtualization, inline variable-height timeline detail, nested focus, deterministic selected-row CSV export, and object URL teardown. Also corrected S23 to run in the findings lane as its ledger already requires; it still reproduces askr #364 and no application workaround was added. Full local gates: check and production tests passed; standard Playwright 48 passed / 3 intentionally skipped. |
Summary
Closes #16.
Turns Destroyer into the complete production integration harness for the coordinated Askr patch releases while keeping routes, state, fixtures, component composition, and failure controls explicit. The application now exercises all 32 product scenarios plus core router/data/SSR/cancellation cases through natural workspace, incident, logs, metrics, settings, authentication, docs, and lifecycle flows.
The implementation includes query-aware live-log history, deterministic failure controls, normalized destructive-account confirmation, final-intent notification persistence, dense incident and operations surfaces, truthful 404/metrics/about behavior, route and teardown regressions, a pinned Linux visual census, and CI evidence retention.
Published dependencies
Destroyer installs only registry packages; there are no aliases, sibling-source links, packed tarballs, or compatibility workarounds.
@askrjs/askr0.2.4@askrjs/ui0.2.4@askrjs/themes0.2.5@askrjs/server0.2.2@askrjs/node0.2.2@askrjs/charts0.2.2@askrjs/vite0.2.2Unchanged first-party packages remain on
@askrjs/auth,@askrjs/lucide, and@askrjs/schema0.2.1. The coordinated CLI release is@askrjs/cli@0.2.3, but Destroyer does not depend on the CLI at runtime or build time.All Askr dependency ranges retain the
<0.3.0ceiling.vite-plusremains0.2.9(^0.2.8) and@types/noderemains26.3.0(~26.3.0) under the patch-only policy. This resolves #16 through the published@askrjs/vite@0.2.2peer range (^0.2.8 || ^0.3.0) without taking Vite Plus0.3.0.Compatibility and API notes
NODE_ENV=test.@askrjs/ui@0.2.4variable-height virtualization behavior is exercised by S19. Its remaining standard-suite quarantine is the separate Checkbox CSP compatibility issue below.Validation
Local final-head validation:
npm ci: 0 vulnerabilitiesnpm run check: lint, typecheck, production build, 6 test files / 34 tests passednpm run test:production: 4 passednpm run test:browser: 46 passed / 6 intentional skipsnpm run test:findings: three repetitions, 24 passed / 9 linked or intentional skips; the development finding ran three times and remained linked/skippednpm outdated --json: only the intentional@types/node26.4.0and Vite Plus0.3.0holds remainHosted final-head validation (run
33221067230):Responsiveness evidence
Causal path: each navigation disposes the active Logs or Metrics route, mounts its virtualized operations views or four chart surfaces, and reaches two browser paints.
The old maximum-only 100 ms assertion failed both
origin/mainand this branch under a one-CPU constraint and conflated shared-runner frame scheduling with application work. The final gate retains every labeled two-paint sample, bounds interactions below 200 ms, bounds a single page long task below 150 ms, and requires average total blocking time below 50 ms per action. Hosted diagnostic evidence measured 77-143 ms interactions, a 103 ms maximum long task, and 286 ms total blocking across ten actions.No production optimization, fast path, cache, scheduler state, or fallback path was introduced. Fallback trigger and behavior-parity proof are therefore not applicable; observable application behavior is unchanged. Legibility cost: none—the focused command now actually selects the test, evidence is persisted as labeled JSON, and an opt-in CPU profile is available through
DESTROYER_CPU_PROFILE=1.Intentional non-security exclusions
Review closure
The complete
origin/main...headdiff received two full review passes, followed by a focused pass over the final hydration and responsiveness remediation. The two legitimate inline findings—stale live-log cursors and mixed-case stored email deletion—were fixed through production paths with regressions, answered with evidence, and resolved. Final GitHub thread/comment/check readback is performed immediately before readiness and merge.