Skip to content

feat: boot production apps in isolated test kernels - #1559

Merged
kang-heewon merged 2 commits into
trunkfrom
fix/1482-production-parity-test-kernel
Jul 27, 2026
Merged

feat: boot production apps in isolated test kernels#1559
kang-heewon merged 2 commits into
trunkfrom
fix/1482-production-parity-test-kernel

Conversation

@kang-heewon

@kang-heewon kang-heewon commented Jul 25, 2026

Copy link
Copy Markdown
Member

Outcome

@croco/testing can now boot the exact production application definition in a runner-neutral TestKernel, exercise real Node or Lambda handler paths without opening a public port, and report machine-readable application, adapter, and validation fidelity.

Each kernel owns isolated DI instances, event configuration, request state, behavioral evidence, scoped shutdown hooks, and test transaction evidence. Production validation remains enabled unless a caller explicitly records an override, production transaction providers are not replaced, and concurrent disposal coalesces into one in-flight-aware cleanup with stable Problem aggregation.

The existing createTestingApp() path remains compatible and now reports isolated fidelity. The generated SaaS application verifies its exact production bootstrap through the kernel. Public contracts, generated API docs, Problem registry, snapshots, and changesets are synchronized.

Fixes #1482

Verification

  • @croco/framework-context, @croco/events-core, @croco/transports-http, and @croco/testing — 38/38 focused test tasks and 38/38 focused typecheck tasks
  • @croco/testing — 102 tests, including 14 TestKernel acceptance tests
  • pnpm public-api:check — 111 package snapshots match
  • pnpm problem-registry:check — 459 codes from 459 discoveries
  • pnpm static-misuse:check — all rules passed
  • pnpm package-manifests:check — 111 manifests normalized
  • pnpm changeset-required:check -- --base origin/trunk --head HEAD — all affected packages covered
  • pnpm check — 21/22 applicable repository gates passed; one not applicable
  • pnpm docs:api:check — 112/112 tasks; 3,662 pages; generated docs match
  • Generated SaaS smoke — manifest, runtime, contracts, doctor, typecheck, build, tests, demo, and failure drill passed
  • Pre-push workspace tests — 226/226 tasks
  • Pre-push workspace typecheck — 225/225 tasks

Review gates

  • Correctness and regression: PASS — acceptance coverage exercises production bootstrap identity, Node and Lambda adapters, validation policy, isolated concurrent kernels, in-flight disposal, exactly-once cleanup, and aggregated cleanup failures.
  • API, security, compatibility, and release: PASS — public types expose fidelity and stable Problems; existing testing helpers remain compatible; production transaction providers are preserved; snapshots, docs, registry, and changesets agree.
  • Maintainability and minimality: PASS — production handler construction is shared with listen(), isolation is scoped through framework primitives, and generated application coverage uses the same public kernel contract.
  • Independent adversarial review: APPROVE with no remaining findings after three review gates.

Residual risk

Applications that deliberately skip production bootstrap validation must opt into that behavior explicitly in the kernel; the resulting reduced validation fidelity remains visible in the kernel contract.

Summary by CodeRabbit

  • 새 기능

    • 프로덕션 애플리케이션을 격리된 테스트 커널에서 실행하고 HTTP 요청 결과와 실행 증거를 확인할 수 있습니다.
    • Node 및 Lambda 요청을 실제 핸들러 경로로 테스트할 수 있으며, 네트워크 포트를 열지 않습니다.
    • 비동기 DI 스코프 격리와 스코프별 정리·종료 처리를 지원합니다.
    • 부트스트랩 검증 정책과 정리 실패를 명확한 문제 정보로 제공합니다.
  • 문서

    • 테스트 커널, 격리 수준, 요청 도우미 및 새로운 API 문서를 추가했습니다.
    • 문제 코드 레지스트리와 복구 안내를 최신화했습니다.
  • 테스트

    • 프로덕션 부트스트랩, 동시성 격리, Lambda 동작 및 정리 실패 검증을 확대했습니다.

@coderabbitai

coderabbitai Bot commented Jul 25, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@kang-heewon, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 59 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: c6a04495-3916-45e6-9775-8da9f04ad945

📥 Commits

Reviewing files that changed from the base of the PR and between 0d4720d and 2641fee.

📒 Files selected for processing (3)
  • .changeset/production-parity-test-kernel.md
  • docs/problem-code-registry.json
  • packages/create-croco-app/templates/saas/apps/api-server/src/tests/SaasDemo.spec.ts
📝 Walkthrough

Walkthrough

프로덕션 부트스트랩을 격리된 스코프에서 실행하는 TestKernel과 Node·Lambda 요청 어댑터가 추가되었습니다. DI·이벤트·종료 상태가 커널별로 분리되고, fidelity·evidence·cleanup 실패가 공개 API와 문서·테스트에 반영되었습니다.

Changes

프로덕션 패리티 테스트 커널

Layer / File(s) Summary
스코프 런타임과 종료 수명주기
packages/framework-context/..., packages/events-core/...
ContainerScope와 스코프별 DI·이벤트·shutdown 상태가 추가되고, 종료 훅 실패가 ShutdownHookExecutionProblem으로 집계됩니다.
TestKernel 부트스트랩과 요청 경로
packages/testing/src/libs/TestKernel.ts, packages/transports-http/..., packages/testing/src/tests/...
프로덕션 애플리케이션 또는 Node·Lambda 어댑터를 실제 핸들러 경로로 실행하고 요청 evidence와 cleanup 결과를 기록합니다.
공개 계약과 사용 지침
packages/testing/src/index.ts, packages/testing/README.md, packages/framework-context/README.md, packages/docs/api/testing/...
fidelity, validation policy, request, disposal 및 스코프 API가 공개되고 사용 문서와 생성 API 문서가 추가되었습니다.

문서 및 레지스트리 갱신

Layer / File(s) Summary
문제 코드와 공개 API 메타데이터
docs/problem-code-registry.json, packages/docs/src/content/docs/en/reference/problem-recovery-cookbook.md, public-api-surface.snapshot.json
새 framework-context·testing 문제 코드와 공개 API 엔트리 및 소스 라인 메타데이터가 반영되었습니다.
API 문서 레이아웃 정리
packages/docs/src/content/docs/api/cache-core/..., packages/docs/src/content/docs/api/membership-*/..., packages/docs/src/content/docs/api/metrics-core/..., packages/docs/src/content/docs/api/pagination-core/...
기존 API 문서의 구분선, 수식 표기, 예제 인용부호와 섹션 레이아웃이 갱신되었습니다.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related issues

Possibly related PRs

  • croco-dev/framework#819 — 동일한 SaasDemo.spec.ts를 수정하며 생성 앱의 테스트 경로와 직접 연결됩니다.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목이 프로덕션 앱을 격리된 테스트 커널에서 부팅한다는 핵심 변경을 잘 요약합니다.
Linked Issues check ✅ Passed TestKernel, fidelity 구분, 실제 부트스트랩/Node·Lambda 경로, 격리, disposal, 회귀 테스트, 문서·스냅샷 반영이 요건과 맞습니다.
Out of Scope Changes check ✅ Passed 변경 내용은 테스트 커널과 관련된 공개 API, 문서, 스냅샷, 변경셋 동기화 범위에 머물러 보입니다.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/1482-production-parity-test-kernel

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.

@github-actions

github-actions Bot commented Jul 25, 2026

Copy link
Copy Markdown

📊 Benchmark Results

✅ All benchmarks passed

Benchmark p75 Threshold Baseline vs Baseline Status Notes
CrocoApp constructor 9.2μs 30.0ms 8.2μs +12.9% -
CrocoApp lambdaHandler (10 controllers) 280.2μs 50.0ms 258.4μs +8.4% -
Lambda cold-start simulation 428.5μs 80.0ms 418.1μs +2.5% -
Lambda cold-start with headers 392.7μs 80.0ms 369.7μs +6.2% -
Lambda cold-start with binary body 367.9μs 80.0ms 339.1μs +8.5% -
Lambda cold-start with query params 320.5μs 80.0ms 301.3μs +6.4% -
Lambda cold-start with authorizer context 319.4μs 80.0ms 299.8μs +6.5% -
Lambda cold-start realistic scenario 315.5μs 80.0ms 299.2μs +5.4% -
EventBusConfig.start (10 handlers) 1.6μs 10.0ms 1.4μs +9.1% -
EventPublisher.publishNow single event 1.9μs 2.0ms 1.7μs +10.2% -
DefaultHandlerResolver.resolve × 10 0.1μs 5.0ms 0.1μs -11.2% -
Container.get singleton (cold) 79.2μs 5.0ms 70.3μs +12.7% -
Container.register × 50 components 3.4ms 10.0ms 3.2ms +4.2% -
Container.validate (50 components) 3.8ms 20.0ms 3.4ms +13.4% -
Container.get singleton (warm) 1.6μs 500.0μs 1.6μs +0.7% -
TelemetryRuntime.init (lambda preset) 2.3μs 200.0ms 1.1ms -99.8% -
lambdaPreset config creation 1.5μs 2.0ms 1.4μs +5.7% -

Updated: 2026-07-27T07:48:32.967Z · Commit: 7c8eaf6

@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: 10

Caution

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

⚠️ Outside diff range comments (1)
packages/framework-context/src/libs/Container.ts (1)

334-359: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

스코프 내 register()가 여전히 전역 상태를 변조합니다.

activeScope.components에만 메타데이터를 넣지만 componentRegistrationOrder, componentSourceLocations, clearConstructorLabelTokenIdentities()는 전역 맵을 수정합니다. 동시에 실행되는 두 커널이 동일 이름 컴포넌트를 등록하면 토큰 identity/등록 순서가 서로 간섭하고, 스코프 dispose 후에도 전역에 잔존합니다. PR 목표인 "커널 간 DI 격리"와 어긋납니다.

스코프 활성 시 등록 순서·소스 로케이션·token identity도 스코프 상태에 저장하도록 분리하는 것을 검토하세요.

🤖 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/framework-context/src/libs/Container.ts` around lines 334 - 359,
Update Container.register so that when activeScope exists, registration order,
source location, and constructor-label token identities are stored and resolved
through that scope’s state rather than mutating global
componentRegistrationOrder, componentSourceLocations, or
clearConstructorLabelTokenIdentities. Preserve the existing global behavior only
when no scope is active, and ensure scoped data is discarded with the 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.

Inline comments:
In
`@packages/create-croco-app/templates/saas/apps/api-server/src/tests/SaasDemo.spec.ts`:
- Around line 26-44: Update the test around createTestKernel and createCrocoApp
to guarantee kernel disposal when any assertion fails, using await using or a
try/finally block. Add a concise comment explaining that validation: { di: "off"
} reflects the template’s createCrocoApp configuration and therefore produces
overridden validation fidelity.

In `@packages/docs/src/content/docs/api/testing/src/classes/TestKernel.md`:
- Around line 48-50: TestKernel 문서의 cleanupOperations 타입 표기를 단일 함수 반환 타입이 아닌
cleanup callback 배열로 명확히 수정하세요. 실제 구현에 맞춰 각 콜백이 void 또는 Promise<void>를 반환하고 전체
컬렉션이 readonly가 되도록 `readonly (() => Promise<void> | void)[]` 또는 동등한
ReadonlyArray 표기를 생성하게 하세요.
- Around line 160-184: Update the generated documentation for TestKernel.run so
its asynchronous and synchronous overloads use distinct headings instead of both
being titled “Call Signature.” Prefer configuring the documentation generator to
distinguish overload signatures; otherwise assign clear async and sync titles
while preserving both overload descriptions.

In `@packages/framework-context/src/libs/ShutdownManager.ts`:
- Around line 117-135: Update shutdown’s timeout handling around hookExecution
and Promise.race so failures collected before a timeout are not discarded when
options.throwOnHookError is true. When the timeout wins, preserve the
ShutdownTimeoutProblem while incorporating the recorded hook failures into the
propagated error or aggregate; keep existing behavior unchanged when no hook
failures were collected.

In `@packages/testing/src/index.ts`:
- Around line 30-43: Export the TestKernelBootstrapResult type declaration in
TestKernel.ts and re-export it from the package index alongside
TestKernelOptions and the other public TestKernel symbols. Update the public API
snapshot to include this newly exposed type.

In `@packages/testing/src/libs/TestKernel.ts`:
- Around line 256-260: Update assertActive in TestKernel to throw a dedicated
problem for accessing a disposed kernel instead of reusing
TestKernelDisposalProblem. Register the new testing/test-kernel-disposed problem
and synchronize its snapshots and documentation so the rendered message
describes reuse after disposal rather than failed cleanup.
- Around line 340-385: Extract the duplicated shutdown and disposal sequence
from disposeOnce and the bootstrap-failure catch path into a shared helper such
as runCleanupSequence(scope, cleanups), returning collected cleanup errors.
Preserve the existing order—shutdown, registered cleanup operations, EventBus
scope disposal, ShutdownManager scope disposal, then scope disposal—and update
both callers to use the helper while retaining their current error propagation
behavior.
- Line 274: Update the options type used by TestKernel so fidelity and adapter
form a discriminated union: application fidelity must not accept an adapter,
while adapter fidelity may accept the supported adapter values. Ensure the
runtime selection around the fidelity/adapter logic cannot silently ignore an
adapter and that invalid combinations fail at compile time.
- Around line 394-434: Update toRequest so Request inputs receive the same
query, JSON/body, and header handling as string or URL inputs, or explicitly
reject unsupported options; do not pass TestingRequestOptions directly to new
Request as RequestInit. Reuse the existing request-construction logic or extract
a shared helper used by both this implementation and the matching testing.ts
helper to keep Request-instance behavior consistent.

In `@packages/testing/src/tests/TestKernel.spec.ts`:
- Around line 326-351: Add a regression test in TestKernel.spec.ts covering both
post-disposal access and the await using cleanup path. Use Symbol.asyncDispose
through await using, then assert kernelRef.get and kernelRef.http.get reject
with TestKernelDisposalProblem after the scope exits.

---

Outside diff comments:
In `@packages/framework-context/src/libs/Container.ts`:
- Around line 334-359: Update Container.register so that when activeScope
exists, registration order, source location, and constructor-label token
identities are stored and resolved through that scope’s state rather than
mutating global componentRegistrationOrder, componentSourceLocations, or
clearConstructorLabelTokenIdentities. Preserve the existing global behavior only
when no scope is active, and ensure scoped data is discarded with the scope.
🪄 Autofix (Beta)

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: 3af8f9e0-969c-4bd2-9287-ffbc986b692b

📥 Commits

Reviewing files that changed from the base of the PR and between 6069742 and 0d4720d.

⛔ Files ignored due to path filters (1)
  • packages/problems-core/src/generated/problem-code-registry.ts is excluded by !**/generated/**
📒 Files selected for processing (72)
  • .changeset/production-parity-test-kernel.md
  • docs/problem-code-registry.json
  • packages/create-croco-app/templates/saas/apps/api-server/src/tests/SaasDemo.spec.ts
  • packages/docs/src/content/docs/api/cache-core/src/classes/Cache.md
  • packages/docs/src/content/docs/api/cache-core/src/classes/CacheStore.md
  • packages/docs/src/content/docs/api/cache-core/src/classes/DistributedCacheStore.md
  • packages/docs/src/content/docs/api/cache-core/src/classes/InMemoryCacheStore.md
  • packages/docs/src/content/docs/api/cache-core/src/classes/InvalidCacheTtlProblem.md
  • packages/docs/src/content/docs/api/cache-core/src/type-aliases/CacheWarmupEntry.md
  • packages/docs/src/content/docs/api/events-core/src/classes/EventBusConfig.md
  • packages/docs/src/content/docs/api/framework-context/src/classes/Container.md
  • packages/docs/src/content/docs/api/framework-context/src/classes/ContainerScope.md
  • packages/docs/src/content/docs/api/framework-context/src/classes/ShutdownHookExecutionProblem.md
  • packages/docs/src/content/docs/api/framework-context/src/classes/ShutdownManager.md
  • packages/docs/src/content/docs/api/framework-context/src/type-aliases/ShutdownOptions.md
  • packages/docs/src/content/docs/api/membership-core/src/classes/InMemoryMembershipStore.md
  • packages/docs/src/content/docs/api/membership-core/src/classes/MembershipOwnerGuard.md
  • packages/docs/src/content/docs/api/membership-core/src/classes/MembershipService.md
  • packages/docs/src/content/docs/api/membership-core/src/classes/MembershipStore.md
  • packages/docs/src/content/docs/api/membership-core/src/type-aliases/MembershipOwnershipTransferInput.md
  • packages/docs/src/content/docs/api/membership-drizzle/src/classes/DrizzleMembershipStore.md
  • packages/docs/src/content/docs/api/metrics-core/src/classes/CarryingCapacitySimulationProblem.md
  • packages/docs/src/content/docs/api/metrics-core/src/classes/CarryingCapacityTenantRequiredProblem.md
  • packages/docs/src/content/docs/api/metrics-core/src/classes/GrossMarginRequiredProblem.md
  • packages/docs/src/content/docs/api/metrics-core/src/classes/InvalidRetentionMovementProblem.md
  • packages/docs/src/content/docs/api/metrics-core/src/classes/MetricsEngine.md
  • packages/docs/src/content/docs/api/metrics-core/src/classes/MixedCurrencyMRRProblem.md
  • packages/docs/src/content/docs/api/metrics-core/src/classes/RetentionCalculator.md
  • packages/docs/src/content/docs/api/metrics-core/src/classes/RetentionMetricsUnavailableProblem.md
  • packages/docs/src/content/docs/api/metrics-core/src/type-aliases/RetentionMetrics.md
  • packages/docs/src/content/docs/api/pagination-core/src/classes/InvalidPaginationDirectionProblem.md
  • 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/CrocoTestingApp.md
  • packages/docs/src/content/docs/api/testing/src/classes/TestKernel.md
  • packages/docs/src/content/docs/api/testing/src/classes/TestKernelDisposalProblem.md
  • packages/docs/src/content/docs/api/testing/src/classes/TestKernelHttp.md
  • packages/docs/src/content/docs/api/testing/src/classes/TestKernelValidationProblem.md
  • packages/docs/src/content/docs/api/testing/src/functions/createTestKernel.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/IsolatedTestingFidelity.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/TestKernelBootFidelity.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/TestKernelBootstrapContext.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/TestKernelEvidence.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/TestKernelFidelity.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/TestKernelOptions.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/TestKernelRuntime.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/TestKernelValidationFidelity.md
  • packages/docs/src/content/docs/api/transports-http/src/classes/CrocoApp.md
  • packages/docs/src/content/docs/api/transports-http/src/type-aliases/BootstrapValidationPolicy.md
  • packages/docs/src/content/docs/api/transports-http/src/type-aliases/NodeRequestHandler.md
  • packages/docs/src/content/docs/en/reference/problem-recovery-cookbook.md
  • packages/events-core/src/libs/EventBusConfig.ts
  • packages/framework-context/README.md
  • packages/framework-context/src/index.ts
  • packages/framework-context/src/libs/Container.test.ts
  • packages/framework-context/src/libs/Container.ts
  • packages/framework-context/src/libs/ShutdownManager.ts
  • packages/framework-context/src/libs/problems/ShutdownProblems.ts
  • packages/testing/README.md
  • packages/testing/src/index.ts
  • packages/testing/src/libs/TestKernel.ts
  • packages/testing/src/libs/testing.ts
  • packages/testing/src/tests/TestKernel.spec.ts
  • packages/testing/src/tests/testing.spec.ts
  • packages/transports-http/src/index.ts
  • packages/transports-http/src/libs/CrocoApp.ts
  • packages/transports-http/src/libs/types.ts
  • public-api-surface.snapshot.json
  • scripts/public-api-surface.mts
  • scripts/static-misuse-empty-catch-allowlist.json
  • scripts/static-misuse-raw-error-allowlist.json
  • tsconfig/contract-strict.baseline.json

Comment thread packages/docs/src/content/docs/api/testing/src/classes/TestKernel.md Outdated
Comment thread packages/framework-context/src/libs/ShutdownManager.ts
Comment thread packages/testing/src/index.ts
Comment thread packages/testing/src/libs/TestKernel.ts
Comment thread packages/testing/src/libs/TestKernel.ts
Comment thread packages/testing/src/libs/TestKernel.ts
Comment thread packages/testing/src/libs/TestKernel.ts
Comment thread packages/testing/src/tests/TestKernel.spec.ts
@kang-heewon

Copy link
Copy Markdown
Member Author

The outside-diff Container isolation finding is fixed in ca1a211. Scope state now owns component registration order, source locations, explicit source locations, and token identity maps; reset/dispose clears them without mutating root state. The concurrent-scope regression registers same-named services in two scopes and proves independent deterministic IDs and source evidence. pnpm test --filter=@croco/framework-context --filter=@croco/testing passed (38/38 tasks), and the full pre-push suite passed (226 test tasks, 225 typecheck tasks).

@kang-heewon

Copy link
Copy Markdown
Member Author

@coderabbitai resolve

@coderabbitai

coderabbitai Bot commented Jul 25, 2026

Copy link
Copy Markdown
✅ Action performed

Comments resolved and changes approved.

@kang-heewon
kang-heewon force-pushed the fix/1482-production-parity-test-kernel branch 6 times, most recently from dc1e4c4 to 03ef264 Compare July 26, 2026 04:41
@kang-heewon
kang-heewon force-pushed the fix/1482-production-parity-test-kernel branch from 03ef264 to 2641fee Compare July 27, 2026 07:39
@kang-heewon
kang-heewon merged commit efb33f9 into trunk Jul 27, 2026
9 checks passed
@kang-heewon
kang-heewon deleted the fix/1482-production-parity-test-kernel branch July 27, 2026 08:46
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] Introduce a production-parity TestKernel with explicit fidelity

1 participant