feat: multi-domain console vNext (workbench, self-hosted review, Kubernetes/Terraform replay) - #48
Merged
Merged
Conversation
…sole-vnext # Conflicts: # tsconfig.json
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ca1d53149e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Merging origin/main (#47) renamed ScenarioDefinition.bundle to .input and scenario.title to .label, and split fixtures out as nullable. Update the public reviews/analyze route, ReviewWorkbenchShell, and the durable review store test to the new shape. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…narios reorg Merging origin/main pulled in scenarios/index.ts's unified registry, which resolves every domain (network, terraform, kubernetes) through scenarios/domains.ts at module scope. Any importer — including app/page.tsx's Network workbench — therefore pulled in @changesafe/domain-terraform and @changesafe/domain-kubernetes too, violating the per-route bundle boundary enforced by tests/unit/workbench-performance-boundaries.test.ts. Add scenarios/network.ts as a self-contained, network-only scenario registry (no dependency on scenarios/domains.ts), have scenarios/index.ts compose SCENARIOS from it instead of duplicating the definitions, and repoint the Network route's browser-reachable consumers (ReviewWorkbenchShell, features/domains/network/examples) at it directly. Update the remaining test files for the renamed ScenarioDefinition fields (.bundle -> .input, .title -> .label) and the hardcoded pre-reorg fixture paths in packages/server/tests/reviews.test.ts. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
8 tasks
wonkwonlee
added a commit
that referenced
this pull request
Jul 31, 2026
…vel depth (#51) * feat: multi-domain console vNext (workbench, self-hosted review, Kubernetes/Terraform replay) (#48) * feat: add app review contract schemas * fix: validate contract version mismatches * test: pin network regression baseline * test: probe blocked simulation directly * test: guard core domain presentation boundaries * feat(ui): add semantic design tokens * feat(ui): add static review workbench shell * test: guard design token regex captures * fix(ui): ground static shell in replay fixture * feat(ui): expose public replay workbench route * test(ui): baseline workbench responsive semantics * feat(ui): disclose workbench runtime variants * fix(ui): distinguish queue review-record storage * test(e2e): baseline public workbench * test(e2e): harden workbench static boundary * test(e2e): intercept workbench data requests * test(e2e): add workbench visual baseline * test(e2e): make workbench baseline portable * test(e2e): add platform-specific workbench baselines * feat: add v1 domain review transport contracts * fix: enforce review risk and replay fallback contracts * feat: add closed domain runtime registry * fix: compose immutable session capabilities * fix: source durability from transport capability * feat: add pure review workflow controller * fix: correlate review controller attempts * fix: bind review input identity at initialization * feat: add v1 review analyze API contracts * feat: add registry-backed review analyze route * feat: add review controller React hook * fix: bind hook results to active attempts * refactor: lazily load domain runtimes * feat: complete review controller lifecycle * fix: bind receipts to active review workflow * fix: bind receipt identity provenance * feat: expose review hook lifecycle actions * fix: validate review rebind before abort * feat: add public replay review transport * refactor: isolate review API contracts * feat: add network review examples * feat: compose network review receipts * feat: publish network policy version in examples * fix: bind receipts to session policy version * fix: version review policy binding contract * feat: add network workflow compatibility facade * fix: bind legacy analyses to review session * fix: bind replay responses to requested fixture * fix: bind replay provenance to requested fixture * test: reject authored synthetic fixture substitution * feat: make network workbench replay interactive * fix: improve workbench replay accessibility * fix: mark review canvas busy during replay * test: prove network review parity * test: bind parity provenance to fixtures * test: prove workbench replay provenance * test: make workbench route assertion order-insensitive * feat: add Terraform replay examples * feat: resolve Terraform public replay * fix: bundle Terraform replay context safely * feat: add Terraform public replay workbench * test: prove Terraform replay parity * fix: keep public replay decision-free * fix: preserve legacy network review lifecycle * test: distinguish durable review hook sessions * feat: add Kubernetes replay examples * test: prove Kubernetes replay derivation * fix: isolate Kubernetes YAML parser boundary * fix: isolate kubernetes offline metadata * feat: resolve Kubernetes public replays * fix: load Kubernetes runtime through offline boundary * feat: add Kubernetes public replay workbench * fix: match Kubernetes selectors against pod labels * test: prove Kubernetes public replay parity * feat: add durable review proof contracts * fix: bind durable intake and receipt proofs * fix: verify durable records before persistence * feat: add durable review record store * fix: harden durable review store integrity * fix: block durable review replace conflicts * fix: guard explicit durable review sequence replacement * fix: migrate durable review conflict trigger * feat: split pending durable review resolution * feat: split durable review pending records * fix: bind durable resolution to parent at database boundary * feat: add authenticated durable review endpoints * fix: scope durable review intake provenance * fix: isolate durable review owner identities * fix: migrate ownerless durable review schema * fix: quarantine ownerless review migrations * fix: preserve exact durable review migrations * feat: resolve durable reviews server-side * fix: serialize durable receipt issuance * fix: harden durable decision claim lifecycle * feat: expose durable receipt proof * fix: verify durable recovery authorship * fix: expose corrupted receipt proof evidence * feat: add authenticated self-hosted workbench * fix: harden self-hosted workbench state * feat: expose domain policy coverage * feat: document future domain capability boundary * fix: validate runtime policy coverage metadata * feat: add accessible network topology tables * fix: enforce client telemetry privacy * fix: close client telemetry bypasses * feat: harden public workbench accessibility * fix: meet WCAG contrast for muted text * fix: harden large workbench evidence * fix: close public workbench review gaps * test: close domain route family gaps * test: enforce public client bundle budgets * fix: harden public client bundle verification * fix: scan every emitted client chunk * fix: guard self-hosted client dependencies * feat: cut over to vnext network workbench * docs: align operator guidance with vnext workbench * chore: remove retired live rate limiter * docs: correct vnext release references * refactor: retire legacy local review authority * build: refresh shipped CLI bundle * test: keep Action self-test fixtures available * docs: refresh public bundle baselines * chore: complete multidomain console ultragoal * Create 2026-07-29-multidomain-console-vnext-g001.md * fix: adapt vNext scenario consumers to the reorganized scenarios API Merging origin/main (#47) renamed ScenarioDefinition.bundle to .input and scenario.title to .label, and split fixtures out as nullable. Update the public reviews/analyze route, ReviewWorkbenchShell, and the durable review store test to the new shape. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix: restore the Network route's domain bundle boundary after the scenarios reorg Merging origin/main pulled in scenarios/index.ts's unified registry, which resolves every domain (network, terraform, kubernetes) through scenarios/domains.ts at module scope. Any importer — including app/page.tsx's Network workbench — therefore pulled in @changesafe/domain-terraform and @changesafe/domain-kubernetes too, violating the per-route bundle boundary enforced by tests/unit/workbench-performance-boundaries.test.ts. Add scenarios/network.ts as a self-contained, network-only scenario registry (no dependency on scenarios/domains.ts), have scenarios/index.ts compose SCENARIOS from it instead of duplicating the definitions, and repoint the Network route's browser-reachable consumers (ReviewWorkbenchShell, features/domains/network/examples) at it directly. Update the remaining test files for the renamed ScenarioDefinition fields (.bundle -> .input, .title -> .label) and the hardcoded pre-reorg fixture paths in packages/server/tests/reviews.test.ts. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix: restore multidomain workbench navigation * docs: design spec for scenario corpus expansion (Terraform + Kubernetes parity) Plans 12 new scenarios to bring Terraform and Kubernetes coverage up to Network's existing risk-level and policy-surface depth. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * docs: implementation plan for scenario corpus expansion Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * feat(scenarios): wire terraform context field through the scenario harness * feat(scenarios): add scenario-n-stateless-replace (terraform, MEDIUM) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * feat(scenarios): add scenario-o-stateful-replace-backed-up (terraform, MEDIUM) * feat(scenarios): add scenario-p-injected-pr-context (terraform, CRITICAL, adversarial) * feat(scenarios): add scenario-t-blast-radius-drift (terraform, HIGH) * feat(scenarios): add scenario-u-unrecorded-prior-state (terraform, CRITICAL, adversarial) * feat(scenarios): add scenario-q-safe-scale-up (kubernetes, LOW) * feat(scenarios): add scenario-r-partial-replica-reduction (kubernetes, MEDIUM) * feat(scenarios): add scenario-s-privileged-injection (kubernetes, CRITICAL, adversarial) * feat(scenarios): add scenario-v-protected-config-change (kubernetes, CRITICAL) * feat(scenarios): add scenario-w-mutable-image-tag (kubernetes, HIGH) * feat(scenarios): add scenario-x-missing-verification (kubernetes, MEDIUM) * feat(scenarios): add scenario-y-rollback-does-not-restore (kubernetes, CRITICAL, adversarial) * fix(scenarios): tighten scenario-y teaches narrative to lead with rollback gap * fix(cli): wire terraform context field through scenario check checkOne called domain.parseInput with only the raw incident JSON, so the terraform domain's context (used for UNTRUSTED_INSTRUCTION detection) was always dropped on the CLI path even though the test-harness registry already forwarded it, letting scenario-p-injected-pr-context silently pass CI's corpus-check job with the wrong verdict. * docs(scenarios): document terraform context field, polish scenario-o narrative Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix: address PR 51 review feedback --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
wonkwonlee
added a commit
that referenced
this pull request
Jul 31, 2026
* feat: multi-domain console vNext (workbench, self-hosted review, Kubernetes/Terraform replay) (#48) * feat: add app review contract schemas * fix: validate contract version mismatches * test: pin network regression baseline * test: probe blocked simulation directly * test: guard core domain presentation boundaries * feat(ui): add semantic design tokens * feat(ui): add static review workbench shell * test: guard design token regex captures * fix(ui): ground static shell in replay fixture * feat(ui): expose public replay workbench route * test(ui): baseline workbench responsive semantics * feat(ui): disclose workbench runtime variants * fix(ui): distinguish queue review-record storage * test(e2e): baseline public workbench * test(e2e): harden workbench static boundary * test(e2e): intercept workbench data requests * test(e2e): add workbench visual baseline * test(e2e): make workbench baseline portable * test(e2e): add platform-specific workbench baselines * feat: add v1 domain review transport contracts * fix: enforce review risk and replay fallback contracts * feat: add closed domain runtime registry * fix: compose immutable session capabilities * fix: source durability from transport capability * feat: add pure review workflow controller * fix: correlate review controller attempts * fix: bind review input identity at initialization * feat: add v1 review analyze API contracts * feat: add registry-backed review analyze route * feat: add review controller React hook * fix: bind hook results to active attempts * refactor: lazily load domain runtimes * feat: complete review controller lifecycle * fix: bind receipts to active review workflow * fix: bind receipt identity provenance * feat: expose review hook lifecycle actions * fix: validate review rebind before abort * feat: add public replay review transport * refactor: isolate review API contracts * feat: add network review examples * feat: compose network review receipts * feat: publish network policy version in examples * fix: bind receipts to session policy version * fix: version review policy binding contract * feat: add network workflow compatibility facade * fix: bind legacy analyses to review session * fix: bind replay responses to requested fixture * fix: bind replay provenance to requested fixture * test: reject authored synthetic fixture substitution * feat: make network workbench replay interactive * fix: improve workbench replay accessibility * fix: mark review canvas busy during replay * test: prove network review parity * test: bind parity provenance to fixtures * test: prove workbench replay provenance * test: make workbench route assertion order-insensitive * feat: add Terraform replay examples * feat: resolve Terraform public replay * fix: bundle Terraform replay context safely * feat: add Terraform public replay workbench * test: prove Terraform replay parity * fix: keep public replay decision-free * fix: preserve legacy network review lifecycle * test: distinguish durable review hook sessions * feat: add Kubernetes replay examples * test: prove Kubernetes replay derivation * fix: isolate Kubernetes YAML parser boundary * fix: isolate kubernetes offline metadata * feat: resolve Kubernetes public replays * fix: load Kubernetes runtime through offline boundary * feat: add Kubernetes public replay workbench * fix: match Kubernetes selectors against pod labels * test: prove Kubernetes public replay parity * feat: add durable review proof contracts * fix: bind durable intake and receipt proofs * fix: verify durable records before persistence * feat: add durable review record store * fix: harden durable review store integrity * fix: block durable review replace conflicts * fix: guard explicit durable review sequence replacement * fix: migrate durable review conflict trigger * feat: split pending durable review resolution * feat: split durable review pending records * fix: bind durable resolution to parent at database boundary * feat: add authenticated durable review endpoints * fix: scope durable review intake provenance * fix: isolate durable review owner identities * fix: migrate ownerless durable review schema * fix: quarantine ownerless review migrations * fix: preserve exact durable review migrations * feat: resolve durable reviews server-side * fix: serialize durable receipt issuance * fix: harden durable decision claim lifecycle * feat: expose durable receipt proof * fix: verify durable recovery authorship * fix: expose corrupted receipt proof evidence * feat: add authenticated self-hosted workbench * fix: harden self-hosted workbench state * feat: expose domain policy coverage * feat: document future domain capability boundary * fix: validate runtime policy coverage metadata * feat: add accessible network topology tables * fix: enforce client telemetry privacy * fix: close client telemetry bypasses * feat: harden public workbench accessibility * fix: meet WCAG contrast for muted text * fix: harden large workbench evidence * fix: close public workbench review gaps * test: close domain route family gaps * test: enforce public client bundle budgets * fix: harden public client bundle verification * fix: scan every emitted client chunk * fix: guard self-hosted client dependencies * feat: cut over to vnext network workbench * docs: align operator guidance with vnext workbench * chore: remove retired live rate limiter * docs: correct vnext release references * refactor: retire legacy local review authority * build: refresh shipped CLI bundle * test: keep Action self-test fixtures available * docs: refresh public bundle baselines * chore: complete multidomain console ultragoal * Create 2026-07-29-multidomain-console-vnext-g001.md * fix: adapt vNext scenario consumers to the reorganized scenarios API Merging origin/main (#47) renamed ScenarioDefinition.bundle to .input and scenario.title to .label, and split fixtures out as nullable. Update the public reviews/analyze route, ReviewWorkbenchShell, and the durable review store test to the new shape. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix: restore the Network route's domain bundle boundary after the scenarios reorg Merging origin/main pulled in scenarios/index.ts's unified registry, which resolves every domain (network, terraform, kubernetes) through scenarios/domains.ts at module scope. Any importer — including app/page.tsx's Network workbench — therefore pulled in @changesafe/domain-terraform and @changesafe/domain-kubernetes too, violating the per-route bundle boundary enforced by tests/unit/workbench-performance-boundaries.test.ts. Add scenarios/network.ts as a self-contained, network-only scenario registry (no dependency on scenarios/domains.ts), have scenarios/index.ts compose SCENARIOS from it instead of duplicating the definitions, and repoint the Network route's browser-reachable consumers (ReviewWorkbenchShell, features/domains/network/examples) at it directly. Update the remaining test files for the renamed ScenarioDefinition fields (.bundle -> .input, .title -> .label) and the hardcoded pre-reorg fixture paths in packages/server/tests/reviews.test.ts. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix: restore multidomain workbench navigation * docs: design spec for scenario corpus expansion (Terraform + Kubernetes parity) Plans 12 new scenarios to bring Terraform and Kubernetes coverage up to Network's existing risk-level and policy-surface depth. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * docs: implementation plan for scenario corpus expansion Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * feat(scenarios): wire terraform context field through the scenario harness * feat(scenarios): add scenario-n-stateless-replace (terraform, MEDIUM) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * feat(scenarios): add scenario-o-stateful-replace-backed-up (terraform, MEDIUM) * feat(scenarios): add scenario-p-injected-pr-context (terraform, CRITICAL, adversarial) * feat(scenarios): add scenario-t-blast-radius-drift (terraform, HIGH) * feat(scenarios): add scenario-u-unrecorded-prior-state (terraform, CRITICAL, adversarial) * feat(scenarios): add scenario-q-safe-scale-up (kubernetes, LOW) * feat(scenarios): add scenario-r-partial-replica-reduction (kubernetes, MEDIUM) * feat(scenarios): add scenario-s-privileged-injection (kubernetes, CRITICAL, adversarial) * feat(scenarios): add scenario-v-protected-config-change (kubernetes, CRITICAL) * feat(scenarios): add scenario-w-mutable-image-tag (kubernetes, HIGH) * feat(scenarios): add scenario-x-missing-verification (kubernetes, MEDIUM) * feat(scenarios): add scenario-y-rollback-does-not-restore (kubernetes, CRITICAL, adversarial) * fix(scenarios): tighten scenario-y teaches narrative to lead with rollback gap * fix(cli): wire terraform context field through scenario check checkOne called domain.parseInput with only the raw incident JSON, so the terraform domain's context (used for UNTRUSTED_INSTRUCTION detection) was always dropped on the CLI path even though the test-harness registry already forwarded it, letting scenario-p-injected-pr-context silently pass CI's corpus-check job with the wrong verdict. * docs(scenarios): document terraform context field, polish scenario-o narrative Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * docs: design spec for portfolio case studies document Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * docs: implementation plan for portfolio case studies document Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * docs: add portfolio case studies document * docs: address PR 52 review feedback * docs: target terraform scenario checks --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
wonkwonlee
added a commit
that referenced
this pull request
Jul 31, 2026
* feat: multi-domain console vNext (workbench, self-hosted review, Kubernetes/Terraform replay) (#48) * feat: add app review contract schemas * fix: validate contract version mismatches * test: pin network regression baseline * test: probe blocked simulation directly * test: guard core domain presentation boundaries * feat(ui): add semantic design tokens * feat(ui): add static review workbench shell * test: guard design token regex captures * fix(ui): ground static shell in replay fixture * feat(ui): expose public replay workbench route * test(ui): baseline workbench responsive semantics * feat(ui): disclose workbench runtime variants * fix(ui): distinguish queue review-record storage * test(e2e): baseline public workbench * test(e2e): harden workbench static boundary * test(e2e): intercept workbench data requests * test(e2e): add workbench visual baseline * test(e2e): make workbench baseline portable * test(e2e): add platform-specific workbench baselines * feat: add v1 domain review transport contracts * fix: enforce review risk and replay fallback contracts * feat: add closed domain runtime registry * fix: compose immutable session capabilities * fix: source durability from transport capability * feat: add pure review workflow controller * fix: correlate review controller attempts * fix: bind review input identity at initialization * feat: add v1 review analyze API contracts * feat: add registry-backed review analyze route * feat: add review controller React hook * fix: bind hook results to active attempts * refactor: lazily load domain runtimes * feat: complete review controller lifecycle * fix: bind receipts to active review workflow * fix: bind receipt identity provenance * feat: expose review hook lifecycle actions * fix: validate review rebind before abort * feat: add public replay review transport * refactor: isolate review API contracts * feat: add network review examples * feat: compose network review receipts * feat: publish network policy version in examples * fix: bind receipts to session policy version * fix: version review policy binding contract * feat: add network workflow compatibility facade * fix: bind legacy analyses to review session * fix: bind replay responses to requested fixture * fix: bind replay provenance to requested fixture * test: reject authored synthetic fixture substitution * feat: make network workbench replay interactive * fix: improve workbench replay accessibility * fix: mark review canvas busy during replay * test: prove network review parity * test: bind parity provenance to fixtures * test: prove workbench replay provenance * test: make workbench route assertion order-insensitive * feat: add Terraform replay examples * feat: resolve Terraform public replay * fix: bundle Terraform replay context safely * feat: add Terraform public replay workbench * test: prove Terraform replay parity * fix: keep public replay decision-free * fix: preserve legacy network review lifecycle * test: distinguish durable review hook sessions * feat: add Kubernetes replay examples * test: prove Kubernetes replay derivation * fix: isolate Kubernetes YAML parser boundary * fix: isolate kubernetes offline metadata * feat: resolve Kubernetes public replays * fix: load Kubernetes runtime through offline boundary * feat: add Kubernetes public replay workbench * fix: match Kubernetes selectors against pod labels * test: prove Kubernetes public replay parity * feat: add durable review proof contracts * fix: bind durable intake and receipt proofs * fix: verify durable records before persistence * feat: add durable review record store * fix: harden durable review store integrity * fix: block durable review replace conflicts * fix: guard explicit durable review sequence replacement * fix: migrate durable review conflict trigger * feat: split pending durable review resolution * feat: split durable review pending records * fix: bind durable resolution to parent at database boundary * feat: add authenticated durable review endpoints * fix: scope durable review intake provenance * fix: isolate durable review owner identities * fix: migrate ownerless durable review schema * fix: quarantine ownerless review migrations * fix: preserve exact durable review migrations * feat: resolve durable reviews server-side * fix: serialize durable receipt issuance * fix: harden durable decision claim lifecycle * feat: expose durable receipt proof * fix: verify durable recovery authorship * fix: expose corrupted receipt proof evidence * feat: add authenticated self-hosted workbench * fix: harden self-hosted workbench state * feat: expose domain policy coverage * feat: document future domain capability boundary * fix: validate runtime policy coverage metadata * feat: add accessible network topology tables * fix: enforce client telemetry privacy * fix: close client telemetry bypasses * feat: harden public workbench accessibility * fix: meet WCAG contrast for muted text * fix: harden large workbench evidence * fix: close public workbench review gaps * test: close domain route family gaps * test: enforce public client bundle budgets * fix: harden public client bundle verification * fix: scan every emitted client chunk * fix: guard self-hosted client dependencies * feat: cut over to vnext network workbench * docs: align operator guidance with vnext workbench * chore: remove retired live rate limiter * docs: correct vnext release references * refactor: retire legacy local review authority * build: refresh shipped CLI bundle * test: keep Action self-test fixtures available * docs: refresh public bundle baselines * chore: complete multidomain console ultragoal * Create 2026-07-29-multidomain-console-vnext-g001.md * fix: adapt vNext scenario consumers to the reorganized scenarios API Merging origin/main (#47) renamed ScenarioDefinition.bundle to .input and scenario.title to .label, and split fixtures out as nullable. Update the public reviews/analyze route, ReviewWorkbenchShell, and the durable review store test to the new shape. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix: restore the Network route's domain bundle boundary after the scenarios reorg Merging origin/main pulled in scenarios/index.ts's unified registry, which resolves every domain (network, terraform, kubernetes) through scenarios/domains.ts at module scope. Any importer — including app/page.tsx's Network workbench — therefore pulled in @changesafe/domain-terraform and @changesafe/domain-kubernetes too, violating the per-route bundle boundary enforced by tests/unit/workbench-performance-boundaries.test.ts. Add scenarios/network.ts as a self-contained, network-only scenario registry (no dependency on scenarios/domains.ts), have scenarios/index.ts compose SCENARIOS from it instead of duplicating the definitions, and repoint the Network route's browser-reachable consumers (ReviewWorkbenchShell, features/domains/network/examples) at it directly. Update the remaining test files for the renamed ScenarioDefinition fields (.bundle -> .input, .title -> .label) and the hardcoded pre-reorg fixture paths in packages/server/tests/reviews.test.ts. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix: restore multidomain workbench navigation * docs: design spec for scenario corpus expansion (Terraform + Kubernetes parity) Plans 12 new scenarios to bring Terraform and Kubernetes coverage up to Network's existing risk-level and policy-surface depth. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * docs: implementation plan for scenario corpus expansion Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * feat(scenarios): wire terraform context field through the scenario harness * feat(scenarios): add scenario-n-stateless-replace (terraform, MEDIUM) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * feat(scenarios): add scenario-o-stateful-replace-backed-up (terraform, MEDIUM) * feat(scenarios): add scenario-p-injected-pr-context (terraform, CRITICAL, adversarial) * feat(scenarios): add scenario-t-blast-radius-drift (terraform, HIGH) * feat(scenarios): add scenario-u-unrecorded-prior-state (terraform, CRITICAL, adversarial) * feat(scenarios): add scenario-q-safe-scale-up (kubernetes, LOW) * feat(scenarios): add scenario-r-partial-replica-reduction (kubernetes, MEDIUM) * feat(scenarios): add scenario-s-privileged-injection (kubernetes, CRITICAL, adversarial) * feat(scenarios): add scenario-v-protected-config-change (kubernetes, CRITICAL) * feat(scenarios): add scenario-w-mutable-image-tag (kubernetes, HIGH) * feat(scenarios): add scenario-x-missing-verification (kubernetes, MEDIUM) * feat(scenarios): add scenario-y-rollback-does-not-restore (kubernetes, CRITICAL, adversarial) * fix(scenarios): tighten scenario-y teaches narrative to lead with rollback gap * fix(cli): wire terraform context field through scenario check checkOne called domain.parseInput with only the raw incident JSON, so the terraform domain's context (used for UNTRUSTED_INSTRUCTION detection) was always dropped on the CLI path even though the test-harness registry already forwarded it, letting scenario-p-injected-pr-context silently pass CI's corpus-check job with the wrong verdict. * docs(scenarios): document terraform context field, polish scenario-o narrative Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * docs: design spec for portfolio case studies document Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * docs: implementation plan for portfolio case studies document Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * docs: add portfolio case studies document * docs: design spec for workbench case-study deep links Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * docs: resolve terraform fixture-registry, contract-version, and Suspense questions Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * docs: implementation plan for workbench case-study deep links Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * feat(workbench): add caseStudy field to review example descriptor * feat(workbench): add scenario-p-injected-pr-context as a terraform public-replay fixture * chore(cli): rebuild bundled CLI to pick up caseStudy schema field Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * feat(workbench): add useScenarioDeepLink hook, cover components/ in vitest vitest.config.ts's test.include had no glob for components/**, so the new hook's unit test (and any future component-colocated test) would silently never run under `npm test`. Add components/**/*.test.ts alongside the existing tests/unit, tests/integration, and packages/*/tests entries. * feat(workbench): add CaseStudyBadge component * feat(workbench): wire scenario deep links and case-study badges into the Network workbench * feat(workbench): wire scenario deep links and case-study badges into the Terraform workbench * feat(workbench): wire scenario deep links into the Kubernetes workbench for consistency * test(e2e): cover the four case-study deep links and fallback behavior * fix(workbench): stop useScenarioDeepLink from triggering an RSC fetch per click useSearchParams() forces the Network/Terraform/Kubernetes workbench pages into dynamic rendering, so router.replace() in setScenarioInUrl was issuing a real GET fetch for the route's RSC payload on every scenario selection, even though the URL update is purely cosmetic (making the selection copy-able) and nothing server-rendered depends on it. This broke the three "no data requests" e2e assertions in workbench.spec.ts, terraform-workbench.spec.ts, and kubernetes-workbench.spec.ts. Swap router.replace() for window.history.replaceState(): the address bar still updates and the link is still shareable/deep-linkable, but no network round trip or re-render is triggered. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * docs: add live deep links to the four case studies * fix(workbench): stop bailing all three public routes to client-side rendering useSearchParams() inside a Suspense boundary was making Next.js discard the prerendered subtree at build time (BAILOUT_TO_CLIENT_SIDE_RENDERING), so /, /workbench/terraform, and /workbench/kubernetes shipped empty HTML. Drop next/navigation entirely from the deep-link path: useScenarioDeepLink now exposes a plain readInitialScenarioId(availableIds) that reads window.location.search from the shells' existing mount effect (client-only, no SSR interaction), and setScenarioInUrl is wrapped in useCallback and preserves window.location.hash. Remove the now-unneeded Suspense wrappers from the three page.tsx files and the 7 next/navigation mocks that were masking this in unit tests (they stubbed useSearchParams to return null, which happens to make renderToStaticMarkup render the full tree — a rendering mode production no longer produces). Verified: npm run build followed by grep -c BAILOUT_TO_CLIENT_SIDE_RENDERING on all three route HTML files now returns 0, and "Review canvas" is present in index.html again. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * test(e2e): cover the URL-write path and Kubernetes deep-linking Two gaps the SSR fix's verification surfaced: no test exercised setScenarioInUrl actually writing to the address bar (only reads via ?scenario= were covered), and the Kubernetes workbench had zero deep-link coverage. Add one round-trip test (click a non-default scenario, assert the URL updates, reload, assert it's still pre-selected) and one Kubernetes deep-link test against a real fixture id from features/domains/kubernetes/fixtures.ts. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * chore(workbench): relocate deep-link hook test and clarify relative doc links Move the useScenarioDeepLink unit test from beside its source (components/hooks/) to tests/unit/, matching this repo's existing convention of keeping all tests under tests/, and revert the vitest.config.ts include-glob addition that only existed for the old location. Also clarify in docs/CASE_STUDIES.md that the "Try it live" paths are relative to wherever the app is running, not a hosted domain. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix: make case study deep links clickable as Markdown links - Convert 'Try it live' URLs from inline code (backticks) to actual Markdown links - Addresses Codex review feedback: make the advertised deep links clickable when viewing rendered Markdown - All four case study links now render as proper hyperlinks Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
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
124 commits ahead of
main. This branch previously carried PR #43 (docs-only, merged); this PR covers the full vNext implementation that has accumulated since.Test plan
🤖 Generated with Claude Code