Skip to content

feat: fuzz route contracts across runtimes - #1797

Merged
kang-heewon merged 1 commit into
trunkfrom
feat/1489-contract-fuzzing
Aug 9, 2026
Merged

feat: fuzz route contracts across runtimes#1797
kang-heewon merged 1 commit into
trunkfrom
feat/1489-contract-fuzzing

Conversation

@kang-heewon

@kang-heewon kang-heewon commented Aug 9, 2026

Copy link
Copy Markdown
Member

Outcome

  • Adds deterministic, profile-bounded contract fuzzing from ContractGraph/Zod metadata for valid and invalid requests.
  • Validates declared success and RFC 7807 Problem unions, blocks raw 500s and canary reflection, and persists minimal replayable fast-check failures.
  • Compares status, response kind, stable headers, trace propagation, and declared lifecycle capabilities across Node, Lambda, and Cloudflare Workers.
  • Gives generated SaaS apps an executable Node/Lambda contract fuzz and parity gate through the production bootstrap.

Reviewer context

  • Replay metadata uses the independent croco.contract-test-failure.v1 artifact; the existing croco.test-evidence/v1 contract remains unchanged.
  • Runtime lifecycle parity is capability-manifest-aware and compares every target pair, including equal-support groups.
  • The Workers integration exercises the preset public raw-Hono adapter because runtime-mode worker construction currently requires an abort signal before routing.

Verification

  • pnpm check โ€” passed (24/25 applicable repository gates).
  • Pre-push full monorepo tests โ€” 236/236 tasks passed across 120 packages.
  • Pre-push full monorepo typecheck โ€” 235/235 tasks passed across 120 packages.
  • pnpm docs:api:check โ€” generated API docs match.
  • CROCO_GENERATED_SMOKE_CASES=goal-saas-api pnpm create-croco-app:smoke โ€” contract verification, build, tests, demo flow, and failure drill passed.
  • pnpm --dir packages/testing test โ€” 201 tests passed.
  • pnpm --dir packages/create-croco-app test โ€” 143 tests passed.
  • Package lint, strict contract typecheck, static misuse, Problem registry, public API, docs triggers, package manifests, and git diff --check passed.

Review gates

  1. Requirements mapping confirmed deterministic profiles, supported-schema failure behavior, replay artifacts, response invariants, runtime parity, and generated-app coverage.
  2. Adversarial correctness/security review resolved duplicate runtimes, transport-generation hangs, schema-mislabeled custom cases, lossy artifacts, canary transport, and all-pairs lifecycle comparison; final verdict: APPROVE.
  3. Regression review verified focused, package, generated-app, docs, repository, and full pre-push gates with a clean worktree.

Residual risk

  • Unsupported or transport-unrepresentable schema combinations fail explicitly with a stable Problem instead of silently degrading generation.

Fixes #1489

Summary by CodeRabbit

  • ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ

    • ๊ณ„์•ฝ ๊ธฐ๋ฐ˜ ํผ์ง•๊ณผ ๋Ÿฐํƒ€์ž„ ์ฐจ๋ถ„ ๊ฒ€์ฆ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ์‹คํŒจ ๋ฐ˜๋ก€, ์žฌํ˜„ ๋ช…๋ น ๋ฐ ์ฆ๊ฑฐ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • Node, Lambda, Cloudflare Workers ํ™˜๊ฒฝ์˜ ์‘๋‹ตยทํ—ค๋”ยท์ถ”์ ยท์ˆ˜๋ช…์ฃผ๊ธฐ๋ฅผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.
    • ์ƒ์„ฑ ์•ฑ์—์„œ ์ถ”๊ฐ€ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ž‘์—… ์ƒํƒœ ์ฟผ๋ฆฌ์™€ ์„ฑ๊ณต ์‘๋‹ต ์ƒํƒœ ์ฝ”๋“œ ๊ฒ€์ฆ์„ ๊ฐ•ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฌธ์„œ

    • ๊ณ„์•ฝ ํ…Œ์ŠคํŠธ API, ๋Ÿฐํƒ€์ž„ ๊ธฐ๋Šฅ, ๋ฌธ์ œ ์ฝ”๋“œ ๋ฐ ๋ณต๊ตฌ ์ง€์นจ์„ ๋ฌธ์„œํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฒ„๊ทธ ์ˆ˜์ •

    • ๋ผ์šฐํŠธ์˜ ์„ ์–ธ๋œ ์„ฑ๊ณต HTTP ์ƒํƒœ ์ฝ”๋“œ๊ฐ€ ์ •ํ™•ํžˆ ๋ณด์กด๋ฉ๋‹ˆ๋‹ค.

@coderabbitai

coderabbitai Bot commented Aug 9, 2026

Copy link
Copy Markdown

Review Change Stack

๐Ÿ“ Walkthrough

Walkthrough

ContractGraph ๊ธฐ๋ฐ˜ ๊ณ„์•ฝ ํผ์ง•๊ณผ ๋Ÿฐํƒ€์ž„ ์ฐจ๋ถ„ ๊ฒ€์ฆ API๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‹คํŒจ ์•„ํ‹ฐํŒฉํŠธ, lifecycle capability, ์ƒ์„ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์Šค๋ชจํฌ ํ…Œ์ŠคํŠธ, ๋ผ์šฐํŠธ ์„ฑ๊ณต ์ƒํƒœ์™€ ๊ด€๋ จ Problem ๋ฌธ์„œ๋„ ๊ฐฑ์‹ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Changes

๊ณ„์•ฝ ํ…Œ์ŠคํŠธ ๊ธฐ๋Šฅ

Layer / File(s) Summary
๊ณ„์•ฝ ํผ์ง• ์—”์ง„
packages/testing/src/libs/contract-testing.ts, packages/testing/src/tests/ContractTesting.spec.ts, packages/testing/README.md
์ง€์› Zod ์Šคํ‚ค๋งˆ์—์„œ ์œ ํšจยท๋ฌดํšจ ์ž…๋ ฅ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์‘๋‹ต ๊ณ„์•ฝ, Problem, canary ๋น„๋…ธ์ถœ, canonical serialization, ์‹คํŒจ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
๋Ÿฐํƒ€์ž„ ์ฐจ๋ถ„ ๊ฒ€์ฆ
packages/testing/src/libs/contract-testing.ts, packages/testing/src/tests/ContractRuntimeDifferentialIntegration.spec.ts
Node, Lambda, Cloudflare Workers์˜ ์‘๋‹ต, ํ—ค๋”, trace propagation ๋ฐ lifecycle ๊ฒฐ๊ณผ๋ฅผ capability manifest์™€ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.
์ƒ์„ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ†ตํ•ฉ
packages/create-croco-app/templates/*, packages/create-croco-app/src/tests/templates-build.spec.ts
์ƒ์„ฑ ํ…œํ”Œ๋ฆฟ์— ์ถ”๊ฐ€ ๋ฏธ๋“ค์›จ์–ด, ์—„๊ฒฉํ•œ ์ž‘์—… ์ƒํƒœ ๊ฒ€์ฆ, ๊ณ„์•ฝ ํผ์ง•๊ณผ Node/Lambda ์ฐจ๋ถ„ ์Šค๋ชจํฌ ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
๋ผ์šฐํŠธ ์„ฑ๊ณต ์ƒํƒœ ๊ณ„์•ฝ
packages/protocols-core/src/libs/*, packages/protocols-core/src/tests/extractRouteIR.spec.ts, packages/docs/src/content/docs/api/protocols-core/src/interfaces/RouteIR.md
RouteIR.successStatus๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋ผ์šฐํŠธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์˜ ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ๋ณด์กดํ•˜๊ณ  ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ 200์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๊ณต๊ฐœ API ๋ฐ ๋ฌธ์„œ ๋ฐ˜์˜
packages/testing/src/index.ts, public-api-surface.snapshot.json, packages/docs/src/content/docs/api/testing/*, docs/problem-code-registry.json, scripts/problem-registry.mts
๊ณ„์•ฝ ํ…Œ์ŠคํŠธ API์™€ ํƒ€์ž…์„ ๊ณต๊ฐœํ•ฉ๋‹ˆ๋‹ค. ๋„ค ๊ฐ€์ง€ contract testing Problem ์ฝ”๋“œ์™€ API ์ฐธ์กฐ ๋ฌธ์„œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

Estimated code review effort: 5 (Critical) | ~120 minutes

Possibly related PRs

  • croco-dev/framework#1008: ContractGraph ๊ณ„์•ฝ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉฐ, ์ด ๋ณ€๊ฒฝ์˜ ํผ์ง• ๊ธฐ๋Šฅ์ด ํ•ด๋‹น ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • croco-dev/framework#1051: ์ƒ์„ฑ REST ํ…œํ”Œ๋ฆฟ์˜ ๊ณ„์•ฝ ๊ฒ€์ฆ๊ณผ ์ด ๋ณ€๊ฒฝ์˜ ์Šคํ‚ค๋งˆยทํผ์ง• ๊ฒ€์ฆ์ด ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
  • croco-dev/framework#1559: production bootstrap๊ณผ Node/Lambda adapter ๊ฒฝ๋กœ๋ฅผ ์ด ๋ณ€๊ฒฝ์˜ ๋Ÿฐํƒ€์ž„ ๊ฒ€์ฆ ์ฝ”๋“œ๊ฐ€ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๐Ÿšฅ Pre-merge checks | โœ… 4 | โŒ 1

โŒ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage โš ๏ธ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
โœ… Passed checks (4 passed)
Check name Status Explanation
Description Check โœ… Passed Check skipped - CodeRabbitโ€™s high-level summary is enabled.
Title check โœ… Passed ์ œ๋ชฉ์ด ๊ฒฐ์ •์  ๋ผ์šฐํŠธ ๊ณ„์•ฝ ํผ์ง•๊ณผ ๋Ÿฐํƒ€์ž„ ๊ฐ„ ์ฐจ๋ถ„ ๊ฒ€์ฆ์ด๋ผ๋Š” ์ฃผ์š” ๋ณ€๊ฒฝ์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
Linked Issues check โœ… Passed ๊ณ„์•ฝ ํผ์ง•, ์‹คํŒจ ์•„ํ‹ฐํŒฉํŠธ, ๋Ÿฐํƒ€์ž„ ์ฐจ๋ถ„ ๊ฒ€์ฆ, capability ์ฒ˜๋ฆฌ, ์ƒ์„ฑ ์•ฑ ์Šค๋ชจํฌ ํ…Œ์ŠคํŠธ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ถฉ์กฑํ•ฉ๋‹ˆ๋‹ค.
Out of Scope Changes check โœ… Passed ๋ฌธ์„œ, ๋ฌธ์ œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ, ์ƒ์„ฑ ์•ฑ, ์›Œํฌํ”Œ๋กœ ๋ณ€๊ฒฝ์€ ๊ณ„์•ฝ ํ…Œ์ŠคํŠธ ๊ธฐ๋Šฅ๊ณผ ๋ฆด๋ฆฌ์Šค ๊ฒ€์ฆ ๋ฒ”์œ„์— ์ง์ ‘ ๊ด€๋ จ๋ฉ๋‹ˆ๋‹ค.
โœจ Finishing Touches ๐Ÿ’ก 1
๐Ÿ“ Generate docstrings ๐Ÿ’ก
  • Create stacked PR
  • Commit on current branch
๐Ÿงช Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/1489-contract-fuzzing

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

โค๏ธ Share

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

๐Ÿ’ก Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b04ab6421f

โ„น๏ธ 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".

Comment thread packages/testing/src/libs/contract-testing.ts
@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown

๐Ÿ“Š Benchmark Results

โœ… All benchmarks passed

Benchmark p75 Threshold Baseline vs Baseline Status Notes
CrocoApp constructor 45.1ฮผs 30.0ms 8.2ฮผs +451.1% โŒ -
CrocoApp lambdaHandler (10 controllers) 2.2ms 50.0ms 258.4ฮผs +752.3% โŒ -
Lambda cold-start simulation 1.8ms 80.0ms 418.1ฮผs +332.6% โŒ -
Lambda cold-start with headers 1.6ms 80.0ms 369.7ฮผs +344.5% โŒ -
Lambda cold-start with binary body 1.5ms 80.0ms 339.1ฮผs +354.8% โŒ -
Lambda cold-start with query params 1.5ms 80.0ms 301.3ฮผs +407.1% โŒ -
Lambda cold-start with authorizer context 1.5ms 80.0ms 299.8ฮผs +407.6% โŒ -
Lambda cold-start realistic scenario 1.5ms 80.0ms 299.2ฮผs +410.9% โŒ -
EventBusConfig.start (10 handlers) 1.7ฮผs 10.0ms 1.4ฮผs +16.7% โœ… -
EventPublisher.publishNow single event 1.9ฮผs 2.0ms 1.7ฮผs +14.9% โœ… -
DefaultHandlerResolver.resolve ร— 10 0.1ฮผs 5.0ms 0.1ฮผs -11.2% โœ… -
Container.get singleton (cold) 89.5ฮผs 5.0ms 70.3ฮผs +27.4% โŒ -
Container.register ร— 50 components 3.4ms 10.0ms 3.2ms +4.5% โœ… -
Container.validate (50 components) 3.8ms 20.0ms 3.4ms +13.2% โœ… -
Container.get singleton (warm) 1.7ฮผs 500.0ฮผs 1.6ฮผs +2.4% โœ… -
TelemetryRuntime.init (lambda preset) 12.6ฮผs 200.0ms 1.1ms -98.9% โœ… -
lambdaPreset config creation 1.5ฮผs 2.0ms 1.4ฮผs +4.3% โœ… -

Updated: 2026-08-09T22:20:32.566Z ยท Commit: e35a6dd

@kang-heewon
kang-heewon force-pushed the feat/1489-contract-fuzzing branch from b04ab64 to be5641f Compare August 9, 2026 10:09
@kang-heewon
kang-heewon force-pushed the feat/1489-contract-fuzzing branch 7 times, most recently from 91f0d70 to 8d83510 Compare August 9, 2026 19:28

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 20

Caution

Some comments are outside the diff and canโ€™t be posted inline due to platform limitations.

โš ๏ธ Outside diff range comments (1)
packages/testing/src/tests/ConformanceContract.spec.ts (1)

68-85: ๐Ÿ“ Maintainability & Code Quality | ๐ŸŸก Minor | โšก Quick win

์ •๋ ฌ๋œ helper ๋ชฉ๋ก์„ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค.

PUBLIC_CONFORMANCE_HELPER_EXPORTS๋Š” ์•ŒํŒŒ๋ฒณ ์ˆœ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. createContractCaseArbitrary๋Š” createAuthProviderConformanceSuite ์•„๋ž˜๋กœ, createFileContractFailureSink๋Š” createDrizzleProviderConformanceSuite ์•„๋ž˜๋กœ ๋‚ด๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค. test order assertion์ด ์—†๋”๋ผ๋„ ๋ชฉ๋ก ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•ด ๊ฐ€๋…์„ฑ์„ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค.

๐Ÿค– Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/testing/src/tests/ConformanceContract.spec.ts` around lines 68 - 85,
์ •๋ ฌ๋œ helper ๋ชฉ๋ก์„ ์œ ์ง€ํ•˜๋„๋ก PUBLIC_CONFORMANCE_HELPER_EXPORTS๋ฅผ ์ˆ˜์ •ํ•˜์‹ญ์‹œ์˜ค.
createContractCaseArbitrary๋ฅผ createAuthProviderConformanceSuite ๋’ค๋กœ ์ด๋™ํ•˜๊ณ ,
createFileContractFailureSink๋ฅผ createDrizzleProviderConformanceSuite ๋’ค๋กœ ์ด๋™ํ•ด ์ „์ฒด
๋ชฉ๋ก์ด ์•ŒํŒŒ๋ฒณ ์ˆœ์„œ๊ฐ€ ๋˜๊ฒŒ ํ•˜์‹ญ์‹œ์˜ค.
๐Ÿค– Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/create-croco-app/src/tests/templates-build.spec.ts`:
- Around line 888-897: ํ…œํ”Œ๋ฆฟ์˜ devDependencies ๊ฒ€์ฆ์— ContractFuzz.spec.ts๊ฐ€ ์‚ฌ์šฉํ•˜๋Š”
`@croco/protocols-core` ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”. templates-build.spec.ts์˜ ๊ธฐ์กด devDependencies ๊ฒ€์ฆ
๋ธ”๋ก(๋ผ์ธ 858 ๋ถ€๊ทผ)์—์„œ package.json.hbs์— ํ•ด๋‹น ํ•ญ๋ชฉ์ด ์œ ์ง€๋˜๋Š”์ง€ ํ™•์ธํ•˜๋„๋ก ์—…๋ฐ์ดํŠธํ•˜๊ณ , ๊ธฐ์กด
ContractFuzz.spec.ts ๋‚ด์šฉ ๊ฒ€์ฆ์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜์„ธ์š”.

In
`@packages/create-croco-app/templates/ai-saas/apps/api-server/package.json.hbs`:
- Line 51: Remove the unused `@croco/protocols-core` entry from the ai-saas
templateโ€™s devDependencies in package.json.hbs, since the template does not use
buildContractGraph, runContractFuzz, or runContractRuntimeDifferential. Do not
add a replacement dependency unless implementing the contract fuzzing smoke test
as part of this change.

In
`@packages/create-croco-app/templates/saas/apps/api-server/src/tests/ContractFuzz.spec.ts`:
- Line 77: Update the assertion in ContractFuzz so numRuns is derived from the
pr entry in CONTRACT_TEST_PROFILES instead of using the hardcoded value 32.
Preserve the existing status and runtime expectations.
- Line 41: Replace the runtime-only keys in runtimeEvidence with per-request
correlation keys: assign each request a unique header value, have the middleware
store evidence under that value, and update observe() to retrieve and remove the
matching entry after the response. Ensure concurrent requests cannot read or
overwrite another requestโ€™s evidence while preserving the existing node/lambda
runtime handling.
- Around line 43-44: Reset the global DI Container before each test in the
generated contract verification suite, using a beforeEach hook alongside the
describe block containing the fuzzing/parity test. Ensure each test starts with
a fresh Container so createCrocoAppโ€™s LOGGER_TOKEN and EntitlementManager
registrations do not accumulate across generated app specs.
- Around line 250-257: Replace the generic Error thrown by
runtimeEvidenceMiddleware when runtime context is missing or unsupported with
the appropriate RFC 7807 Problem subclass, preserving the existing validation
behavior. Also update the Error throws at the referenced request-path-adjacent
symbols around the other two failure sites to use Problem subclasses, while
leaving out-of-request assertion handling unchanged unless required by the same
guideline.
- Around line 258-268: Update the middleware around the lifecycle evidence setup
so runtime.shutdown() is performed only for the dedicated lifecycle-observation
request, not every fuzzing request; keep the shared kernel usable across
subsequent requests. Ensure the work registered through runtime.waitUntil() is
fully drained before calling runtime.flush(), using the adapterโ€™s existing
completion behavior rather than relying on microtask ordering, while preserving
the evidence flags.
- Around line 58-65: Update the fuzzCases mapping around
createContractCaseArbitrary so invalid cases retain their generated query input
instead of replacing it with the fixed status value. Only merge required
overrides without discarding generated fields, while preserving the traceparent
header injection for all cases.

In
`@packages/docs/src/content/docs/api/testing/src/classes/ContractRuntimeMismatchProblem.md`:
- Line 8: Update the JSDoc for ContractRuntimeMismatchProblem,
ContractTestingProblem, and UnsupportedContractGenerationProblem to describe
each as a concrete Problem subclass rather than a base abstract error class.
Regenerate and validate the API documentation so all three Markdown TypeDoc
outputs match the corrected source JSDoc:
packages/docs/src/content/docs/api/testing/src/classes/ContractRuntimeMismatchProblem.md:8,
packages/docs/src/content/docs/api/testing/src/classes/ContractTestingProblem.md:8,
and
packages/docs/src/content/docs/api/testing/src/classes/UnsupportedContractGenerationProblem.md:8.

In
`@packages/docs/src/content/docs/api/testing/src/type-aliases/RunContractFuzzOptions.md`:
- Around line 36-38: Update the runContractFuzz implementation to validate
options.numRuns as a positive integer and cap it at the active
profileConfiguration.numRuns maximum before passing it to fc.check. For invalid
or over-limit values, throw the established RFC 7807 Problem subclass, then
regenerate the TypeDoc output with pnpm docs:api:check so
RunContractFuzzOptions.md reflects the source contract.
- Around line 42-44: Update the TypeScript source for RunContractFuzzOptions so
seed and path form a discriminated union, requiring seed whenever path is
provided and preserving the independent seed-only/default case. Do not edit the
generated API markdown directly; update the source definition and regenerate or
adjust the documentation checks accordingly.

In `@packages/docs/src/content/docs/en/reference/problem-recovery-cookbook.md`:
- Around line 9842-9854: Separate the recovery guidance by Problem code in
packages/docs/src/content/docs/en/reference/problem-recovery-cookbook.md:9842-9854,
replacing the generic validation cause and action with guidance for unsupported
schema shapes that directs users to supported types or caller-owned arbitrary
values. Apply corresponding distinct guidance at 9860-9876 for counterexample or
shrink reproduction invariant failures, directing investigation of the runner,
route classification, and executor; at 9878-9894, address mismatches among
runtime observations, capability manifests, and trace propagation by directing
comparison of the relevant runtime contracts.

In `@packages/testing/package.json`:
- Around line 69-71: Move zod from dependencies to peerDependencies in the
package configuration for `@croco/testing`, preserving the existing ^3.23.8
version range. Ensure the package no longer installs a separate zod instance
while keeping zod available to contract-testing.ts and generated templates
through the consumerโ€™s dependency.

In `@packages/testing/src/libs/contract-testing.ts`:
- Around line 459-468: Update the lifecycle pair comparison in the containing
contract-testing function to replace the silent continues for missing targets or
observations with the same ContractRuntimeMismatchProblem failure handling used
in the existing lines 471-475 path. Ensure each target is validated before
accessing its runtime, including checking left before left.runtime, and do not
allow missing lifecycle inputs to reach the passed result.
- Around line 836-852: Replace stableSerialize usage in assertCanaryAbsent with
a dedicated containsSecret traversal that detects the secret in strings, symbol
descriptions, and property keys, prevents infinite recursion with a Set, and
continues through class instances or unsupported prototypes without throwing.
Add a regression test in ContractTesting.spec.ts covering a class-instance span
with no canary leak and preserving the existing failure behavior when the secret
is present.
- Around line 704-710: Validate that the union options collected in the
ZodUnion/ZodDiscriminatedUnion branch are non-empty before calling fc.oneof.
When no options are available, throw the established
UnsupportedContractGenerationProblem with a diagnostic message identifying the
schema path, instead of invoking fc.oneof without arguments; preserve the
existing mapping for valid options.
- Line 512: Register the diagnostic code testing/contract-execution-failed in
docs/problem-code-registry.json, matching the format and metadata used by the
existing contract-testing diagnostic codes. Keep the code value consistent with
the fallback in the problemCode assignment.
- Around line 315-325: Extend RouteIR and ContractGraphRoute with a
successStatus field, and propagate it through contract extraction using
route.routeContract?.statusCode or the route metadataโ€™s success status. Update
assertContractObservation to validate the observed 2xx status against this
configured successStatus instead of always requiring 200, preserving the
existing schema validation behavior.

In `@packages/testing/src/tests/ContractRuntimeDifferentialIntegration.spec.ts`:
- Around line 149-153: Move the Container.reset() call from afterEach into a
beforeEach hook so every test starts with a clean DI container before createApp
initializes it. Keep the existing server cleanup and runtimeEvidence clearing in
afterEach, and preserve test-instance initialization behavior.

In `@packages/testing/src/tests/ContractTesting.spec.ts`:
- Around line 388-396: In the targeted replay environment test, replace manual
process.env backup, mutation, and restoration around runContractFuzz with
Vitestโ€™s vi.stubEnv and vi.unstubAllEnvs APIs. Import vi from vitest, stub each
CROCO_CONTRACT_* variable, and use vi.unstubAllEnvs in finally; remove the
previous snapshot and manual cleanup logic.

---

Outside diff comments:
In `@packages/testing/src/tests/ConformanceContract.spec.ts`:
- Around line 68-85: ์ •๋ ฌ๋œ helper ๋ชฉ๋ก์„ ์œ ์ง€ํ•˜๋„๋ก PUBLIC_CONFORMANCE_HELPER_EXPORTS๋ฅผ
์ˆ˜์ •ํ•˜์‹ญ์‹œ์˜ค. createContractCaseArbitrary๋ฅผ createAuthProviderConformanceSuite ๋’ค๋กœ ์ด๋™ํ•˜๊ณ ,
createFileContractFailureSink๋ฅผ createDrizzleProviderConformanceSuite ๋’ค๋กœ ์ด๋™ํ•ด ์ „์ฒด
๋ชฉ๋ก์ด ์•ŒํŒŒ๋ฒณ ์ˆœ์„œ๊ฐ€ ๋˜๊ฒŒ ํ•˜์‹ญ์‹œ์˜ค.
๐Ÿช„ Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

โ„น๏ธ Review info
โš™๏ธ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 3c7b1300-5123-4cd5-963f-2910796376fe

๐Ÿ“ฅ Commits

Reviewing files that changed from the base of the PR and between 5312e2b and 8d83510.

โ›” Files ignored due to path filters (2)
  • packages/problems-core/src/generated/problem-code-registry.ts is excluded by !**/generated/**
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
๐Ÿ“’ Files selected for processing (47)
  • .changeset/bounded-contract-fuzzing.md
  • docs/problem-code-registry.json
  • packages/create-croco-app/src/tests/templates-build.spec.ts
  • packages/create-croco-app/templates/ai-saas/apps/api-server/package.json.hbs
  • packages/create-croco-app/templates/ai-saas/apps/api-server/src/app.ts.hbs
  • packages/create-croco-app/templates/saas/apps/api-server/package.json.hbs
  • packages/create-croco-app/templates/saas/apps/api-server/src/app.ts
  • packages/create-croco-app/templates/saas/apps/api-server/src/controllers/schemas.ts
  • packages/create-croco-app/templates/saas/apps/api-server/src/tests/ContractFuzz.spec.ts
  • packages/docs/src/content/docs/api/problems-core/src/classes/Problem.md
  • packages/docs/src/content/docs/api/problems-core/src/variables/CROCO_PROBLEM_CODE_REGISTRY.md
  • packages/docs/src/content/docs/api/testing/src/classes/ContractInvariantProblem.md
  • packages/docs/src/content/docs/api/testing/src/classes/ContractRuntimeMismatchProblem.md
  • packages/docs/src/content/docs/api/testing/src/classes/ContractTestingProblem.md
  • packages/docs/src/content/docs/api/testing/src/classes/UnsupportedContractGenerationProblem.md
  • packages/docs/src/content/docs/api/testing/src/functions/assertContractObservation.md
  • packages/docs/src/content/docs/api/testing/src/functions/createContractCaseArbitrary.md
  • packages/docs/src/content/docs/api/testing/src/functions/createFileContractFailureSink.md
  • packages/docs/src/content/docs/api/testing/src/functions/runContractFuzz.md
  • packages/docs/src/content/docs/api/testing/src/functions/runContractRuntimeDifferential.md
  • packages/docs/src/content/docs/api/testing/src/interfaces/ContractFailureSink.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/ContractExecutionObservation.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/ContractExecutor.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/ContractFailureArtifact.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/ContractFuzzReport.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/ContractGeneratedCase.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/ContractLifecycleObservation.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/ContractLifecycleOutcome.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/ContractRequestInput.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/ContractRuntimeDifferentialOptions.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/ContractRuntimeDifferentialReport.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/ContractRuntimeLifecycleCapability.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/ContractRuntimeTarget.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/ContractTestProfile.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/RunContractFuzzOptions.md
  • packages/docs/src/content/docs/api/testing/src/variables/CONTRACT_RUNTIME_LIFECYCLE_CAPABILITIES.md
  • packages/docs/src/content/docs/api/testing/src/variables/CONTRACT_TEST_PROFILES.md
  • packages/docs/src/content/docs/api/testing/src/variables/CONTRACT_TEST_SUPPORTED_ZOD_TYPES.md
  • packages/docs/src/content/docs/en/reference/problem-recovery-cookbook.md
  • packages/testing/README.md
  • packages/testing/package.json
  • packages/testing/src/index.ts
  • packages/testing/src/libs/contract-testing.ts
  • packages/testing/src/tests/ConformanceContract.spec.ts
  • packages/testing/src/tests/ContractRuntimeDifferentialIntegration.spec.ts
  • packages/testing/src/tests/ContractTesting.spec.ts
  • public-api-surface.snapshot.json

Comment thread packages/create-croco-app/src/tests/templates-build.spec.ts
Comment thread packages/create-croco-app/templates/ai-saas/apps/api-server/package.json.hbs Outdated
Comment thread packages/testing/src/libs/contract-testing.ts Outdated
Comment thread packages/testing/src/libs/contract-testing.ts
Comment thread packages/testing/src/libs/contract-testing.ts
Comment thread packages/testing/src/tests/ContractTesting.spec.ts Outdated
@kang-heewon
kang-heewon force-pushed the feat/1489-contract-fuzzing branch from 8d83510 to 52e42c8 Compare August 9, 2026 20:38
@kang-heewon

Copy link
Copy Markdown
Member Author

@coderabbitai resolve

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7

โ™ป๏ธ Duplicate comments (1)
packages/create-croco-app/templates/saas/apps/api-server/src/tests/ContractFuzz.spec.ts (1)

296-309: ๐Ÿฉบ Stability & Availability | ๐ŸŸ  Major | โšก Quick win

waitUntil ์ž‘์—…์˜ ์™„๋ฃŒ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๊ธฐ๋‹ค๋ฆฌ์‹ญ์‹œ์˜ค.

๋ผ์ธ 298์€ setTimeout(..., 0) ๊ธฐ๋ฐ˜ Promise๋ฅผ runtime.waitUntil์— ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. ๋ผ์ธ 306์€ ๊ณง๋ฐ”๋กœ await runtime.flush()๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. setTimeout์€ macrotask์ด๋ฏ€๋กœ flush()์˜ await๋งŒ์œผ๋กœ๋Š” ์™„๋ฃŒ๊ฐ€ ๋ณด์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ผ์ธ 223์€ lambda ๊ฒฝ๋กœ์—์„œ evidence.waitUntilWorkCompleted๊ฐ€ false์ด๋ฉด failed("work-incomplete")๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. normalizeLifecycleOutcome์€ failed ์ƒํƒœ์—์„œ ContractRuntimeMismatchProblem์„ ๋˜์ง‘๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ ๋ฃจํ”„ ํƒ€์ด๋ฐ์— ๋”ฐ๋ผ ํ…Œ์ŠคํŠธ๊ฐ€ ๋น„๊ฒฐ์ •์ ์œผ๋กœ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

๋“ฑ๋กํ•œ Promise๋ฅผ ์ง€์—ญ ๋ณ€์ˆ˜๋กœ ๋ณด๊ด€ํ•˜๊ณ , flush() ํ˜ธ์ถœ ์ „์— ๊ทธ Promise๋ฅผ awaitํ•˜์‹ญ์‹œ์˜ค.

๐Ÿค– Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@packages/create-croco-app/templates/saas/apps/api-server/src/tests/ContractFuzz.spec.ts`
around lines 296 - 309, Update the lifecycle handling around the
runtime.waitUntil call to store the registered completion Promise in a local
variable, await that Promise before calling runtime.flush(), then preserve the
existing evidence updates and shutdown observation.
๐Ÿค– Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/problem-code-registry.json`:
- Around line 15515-15544: Problem ์ƒ์„ฑ ๋กœ์ง์—์„œ testing/contract-invariant-failed ๋ฐ
testing/contract-runtime-mismatch๋ฅผ operator-only/error ์ •์ฑ…์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์„ธ์š”. ๋‘ code์˜
extensions์—๋Š” route classification, executor/runtime observations, shrink path,
operations, trace evidence๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ extensions๋ฅผ ๋น„๊ณต๊ฐœ ์ฒ˜๋ฆฌํ•˜๊ณ  Detail๋งŒ ๋…ธ์ถœ๋˜๋„๋ก ์ƒ์„ฑ ์‹œ
์ „๋‹ฌ ๋˜๋Š” redaction ์ฒ˜๋ฆฌ๋ฅผ ์ ์šฉํ•˜์„ธ์š”. Problem Registry์˜ code๋ณ„ redaction ์ •์ฑ…๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ•จ๊ป˜ ํ™•์ธํ•˜์„ธ์š”.

In `@packages/create-croco-app/src/tests/templates-build.spec.ts`:
- Around line 895-939: Update the ContractFuzz.spec.ts assertions in the
relevant template-build test to pass all required patterns through a single
checkFileContains call for that file. Replace the whitespace-sensitive
beforeEach and setTimeout regular expressions with format-independent patterns
that validate the key symbols and behavior without depending on generated line
breaks or indentation, while preserving the existing positive and negative
checks.

In `@packages/protocols-core/src/tests/extractRouteIR.spec.ts`:
- Around line 83-96: Extend the test around extractRouteIR to verify the legacy
default: before assigning first.statusCode = 201, assert that an unset
statusCode produces successStatus 200, while retaining the existing 201
assertion.
- Line 91: Replace the manual TypeError guard in the extractRouteIR test with a
Vitest assertion that verifies metadata[0] is defined before it is used, so
missing route metadata fails through the test assertion mechanism.

In `@packages/testing/src/libs/contract-testing.ts`:
- Around line 647-671: In injectCanaryHeader, simplify the mergedInput flow by
constructing the final returned input once and use that same object for
classification validation and return. Remove the duplicate
assertGeneratedCaseClassification call there, since runContractFuzz already
performs this check; preserve the conditional headers behavior and
transportHeaders in the returned ContractGeneratedCase.

In `@packages/testing/src/tests/ContractRuntimeDifferentialIntegration.spec.ts`:
- Around line 74-77: ๋ชจ๋“  ๊ณ„์•ฝ ํ…Œ์ŠคํŠธ์˜ ์ผ๋ฐ˜ Error throw๋ฅผ RFC 7807 Problem ํ•˜์œ„ํด๋ž˜์Šค๋กœ ๊ต์ฒดํ•˜์‹ญ์‹œ์˜ค.
packages/testing/src/tests/ContractRuntimeDifferentialIntegration.spec.ts์˜ ๋Ÿฐํƒ€์ž„
์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์„œ๋“œ(74-77)์™€ ๋™์ผ ํŒŒ์ผ์˜ 194, 328, 439ํ–‰ Error๋„ ์ ์ ˆํ•œ Problem ํ•˜์œ„ํด๋ž˜์Šค๋กœ ๋ณ€๊ฒฝํ•˜์‹ญ์‹œ์˜ค.
packages/create-croco-app/templates/saas/apps/api-server/src/tests/ContractFuzz.spec.ts
419-427ํ–‰์—์„œ๋Š” ์ด๋ฏธ ์ž„ํฌํŠธ๋œ SaasDemoSmokeProblem์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

In `@packages/testing/src/tests/ContractTesting.spec.ts`:
- Around line 529-537: Update the it.each test declaration for the structurally
lossy JSON counterexamples to include a case-name interpolation placeholder, and
provide distinct labels for the non-enumerable property, symbol key, and cyclic
reference inputs so failures identify the specific scenario.

---

Duplicate comments:
In
`@packages/create-croco-app/templates/saas/apps/api-server/src/tests/ContractFuzz.spec.ts`:
- Around line 296-309: Update the lifecycle handling around the
runtime.waitUntil call to store the registered completion Promise in a local
variable, await that Promise before calling runtime.flush(), then preserve the
existing evidence updates and shutdown observation.
๐Ÿช„ Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

โ„น๏ธ Review info
โš™๏ธ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: a066b673-e8e9-46cd-88a8-cff9a9e2eebc

๐Ÿ“ฅ Commits

Reviewing files that changed from the base of the PR and between 8d83510 and 52e42c8.

โ›” Files ignored due to path filters (1)
  • packages/problems-core/src/generated/problem-code-registry.ts is excluded by !**/generated/**
๐Ÿ“’ Files selected for processing (23)
  • .changeset/bounded-contract-fuzzing.md
  • docs/problem-code-registry.json
  • packages/create-croco-app/src/tests/templates-build.spec.ts
  • packages/create-croco-app/templates/saas/apps/api-server/src/tests/ContractFuzz.spec.ts
  • packages/docs/src/content/docs/api/problems-core/src/variables/CROCO_PROBLEM_CODE_REGISTRY.md
  • packages/docs/src/content/docs/api/protocols-core/src/interfaces/RouteIR.md
  • packages/docs/src/content/docs/api/testing/src/classes/ContractInvariantProblem.md
  • packages/docs/src/content/docs/api/testing/src/classes/ContractRuntimeMismatchProblem.md
  • packages/docs/src/content/docs/api/testing/src/classes/ContractTestingProblem.md
  • packages/docs/src/content/docs/api/testing/src/classes/UnsupportedContractGenerationProblem.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/ContractReplayOptions.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/RunContractFuzzOptions.md
  • packages/docs/src/content/docs/en/reference/problem-recovery-cookbook.md
  • packages/protocols-core/src/libs/RouteIR.ts
  • packages/protocols-core/src/libs/extractRouteIR.ts
  • packages/protocols-core/src/tests/extractRouteIR.spec.ts
  • packages/testing/src/index.ts
  • packages/testing/src/libs/contract-testing.ts
  • packages/testing/src/tests/ConformanceContract.spec.ts
  • packages/testing/src/tests/ContractRuntimeDifferentialIntegration.spec.ts
  • packages/testing/src/tests/ContractTesting.spec.ts
  • public-api-surface.snapshot.json
  • scripts/problem-registry.mts

Comment thread docs/problem-code-registry.json
Comment thread packages/create-croco-app/src/tests/templates-build.spec.ts
Comment thread packages/protocols-core/src/tests/extractRouteIR.spec.ts
Comment thread packages/protocols-core/src/tests/extractRouteIR.spec.ts
Comment thread packages/testing/src/libs/contract-testing.ts
Comment thread packages/testing/src/tests/ContractTesting.spec.ts
@coderabbitai

coderabbitai Bot commented Aug 9, 2026

Copy link
Copy Markdown
โœ… Action performed

Comments resolved and changes approved.

@kang-heewon
kang-heewon force-pushed the feat/1489-contract-fuzzing branch from 52e42c8 to 0f305f1 Compare August 9, 2026 22:10

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and canโ€™t be posted inline due to platform limitations.

โš ๏ธ Outside diff range comments (1)
public-api-surface.snapshot.json (1)

8169-8173: ๐ŸŽฏ Functional Correctness | ๐ŸŸก Minor | โšก Quick win

๊ณ„์•ฝ ํ…Œ์ŠคํŠธ PR scope์—์„œ notifications-react-email ๋ณ€๊ฒฝ์„ ๋ถ„๋ฆฌํ•˜์„ธ์š”.

@croco/notifications-react-email, EmailContent, ReactEmailRenderProblem, renderReactEmail์€ ๊ณ„์•ฝ ํผ์ง•/๋Ÿฐํƒ€์ž„ ์ฐจ๋ถ„ ๊ฒ€์ฆ๊ณผ ์ง์ ‘ ์—ฐ๊ด€๋˜์ง€ ์•Š์•„ ๋ณด์ž…๋‹ˆ๋‹ค. @croco/engagement-core์˜ EmailContent ์ˆ˜์ถœ๊ณผ ์ƒˆ ํŒจํ‚ค์ง€ ์ถ”๊ฐ€๋งŒ public-api-surface.snapshot.json ๋ณ€๊ฒฝ์„ ์ผ์œผ์ผฐ๋‹ค๋ฉด ๋ณ„๋„ PR๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด PR scope๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿค– Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@public-api-surface.snapshot.json` around lines 8169 - 8173, Remove the
notifications-react-email-related API snapshot changes from this PR, including
`@croco/notifications-react-email`, EmailContent, ReactEmailRenderProblem, and
renderReactEmail; retain only the `@croco/engagement-core` EmailContent export and
the new package addition required by the contract-test scope.
๐Ÿค– Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@public-api-surface.snapshot.json`:
- Around line 8169-8173: Remove the notifications-react-email-related API
snapshot changes from this PR, including `@croco/notifications-react-email`,
EmailContent, ReactEmailRenderProblem, and renderReactEmail; retain only the
`@croco/engagement-core` EmailContent export and the new package addition required
by the contract-test scope.

โ„น๏ธ Review info
โš™๏ธ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 937c1adc-9f09-4e31-b936-1524aba33b4d

๐Ÿ“ฅ Commits

Reviewing files that changed from the base of the PR and between 52e42c8 and 0f305f1.

โ›” Files ignored due to path filters (2)
  • packages/problems-core/src/generated/problem-code-registry.ts is excluded by !**/generated/**
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
๐Ÿ“’ Files selected for processing (7)
  • .github/workflows/pr-review-companion.yml
  • docs/problem-code-registry.json
  • packages/docs/src/content/docs/api/problems-core/src/classes/Problem.md
  • packages/docs/src/content/docs/api/problems-core/src/variables/CROCO_PROBLEM_CODE_REGISTRY.md
  • packages/docs/src/content/docs/en/reference/problem-recovery-cookbook.md
  • public-api-surface.snapshot.json
  • scripts/problem-registry.mts

@kang-heewon
kang-heewon merged commit cb61f2e into trunk Aug 9, 2026
12 checks passed
@kang-heewon
kang-heewon deleted the feat/1489-contract-fuzzing branch August 9, 2026 23:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[testing] Add contract-guided fuzzing and cross-runtime differential suites

1 participant