Skip to content

iter47 issue-873 device-endpoint-direct-runtime-dispatch: typed facade + 删 callback auto-create + registration admission#876

Merged
loning merged 3 commits into
auto-refact-devfrom
refactor/iter47-cluster-001-device-endpoint-direct-runtime-dispatch
May 23, 2026
Merged

iter47 issue-873 device-endpoint-direct-runtime-dispatch: typed facade + 删 callback auto-create + registration admission#876
loning merged 3 commits into
auto-refact-devfrom
refactor/iter47-cluster-001-device-endpoint-direct-runtime-dispatch

Conversation

@loning
Copy link
Copy Markdown
Contributor

@loning loning commented May 23, 2026

摘要

iter47 issue-873 cluster-001-device-endpoint-direct-runtime-dispatch(high,top-layering + command-skeleton + runtime-dispatch-separation + default-resource-semantics)。

  • Old:Device HTTP endpoint 注入 IActorRuntime / IActorDispatchPort,resolve/create household-{scopeId} actor,手动构造 EventEnvelope,直接 dispatch。API 层承担业务编排,资源 ownership 不明,callback 缺失时 silent auto-create。
  • New:Endpoint 仅 HTTP parse + HMAC verify + 调 typed command facade + 返回 accepted/error receipt。Callback admission via DeviceRegistrationGAgent(第一权威 actor),未注册 → return error 不 auto-create。HouseholdEntity 作为 callback target 复用(无新 actor)。

Phase 9 共识来源

META_JUDGE_DONE:consensus:delete:delete callback-time household auto-create; require device registration admission and route all device commands through a typed facade/command skeleton

改动范围

14 files (+629/-95):

  • DeviceCommandFacades.cs(新):typed facade(IDeviceCallbackCommandService + IDeviceRegistrationCommandService)+ target resolver + envelope factory + receipt factory(参考 ChannelRegistrationCommandFacade pattern)
  • DeviceEventEndpoints.cs:删 IActorRuntime / IActorDispatchPort 注入,改 typed command facade only
  • DeviceRegistrationGAgent.cs:扩展 admission events
  • device_registration.proto:typed events 扩展
  • DeviceServiceCollectionExtensions.cs:注册新 facade
  • 测试:DeviceCommandFacadeTests + Support / DeviceEventEndpointsTests / DeviceRegistrationGAgentTests 等覆盖

本地验证:dotnet build aevatar.slnx --nologo ✅ · architecture_guards.sh ✅ · ChannelRuntime.Tests 811/811 ✅(本 PR scope)。Note:slnx 全量 test 有 pre-existing scripting/GAgentService 失败不在本 PR scope。

Closes #873

📢 cc 原作者: @eanzhao @loning

🤖 Auto-loop / codex-refactor-loop iter47

⟦AI:AUTO-LOOP⟧

…typed facade,删 callback auto-create + registration admission

按 issue #873 Phase 9 r1 consensus(meta-judge: delete framing):

1. DeviceEventEndpoints: 删 IActorRuntime/IActorDispatchPort 注入,改用 typed command facade(IDeviceCallbackCommandService/IDeviceRegistrationCommandService)
2. DeviceCommandFacades.cs(新): typed facade + target resolver + envelope factory + receipt factory + DefaultCommandDispatchService(参考 ChannelRegistrationCommandFacade pattern)
3. 删 callback-time household auto-create: callback 要求 DeviceRegistrationGAgent admission 先行;未注册 → return error 不 auto-create
4. DeviceRegistrationGAgent 作为第一权威 actor(admission)
5. HouseholdEntity 作为 callback target 复用(不引入新 actor type)
6. register/delete 一并 lift 到 facade pattern(scope_extend)
7. device_registration.proto 适配 typed events
8. 测试: DeviceCommandFacadeTests +DeviceCommandFacadeTestSupport / DeviceEventEndpointsTests 更新 / DeviceRegistrationGAgentTests / RegistrationQueryPortTests / ServiceCollectionExtensionsTests

Note: 完整 slnx test 有 pre-existing scripting/GAgentService 失败(不在本 PR scope);本 PR 仅含 Device 改动,本地 ChannelRuntime.Tests 811/811 pass。

不引入新 device callback actor type。

Closes #873

⟦AI:AUTO-LOOP⟧
@loning
Copy link
Copy Markdown
Contributor Author

loning commented May 23, 2026

🤖 Phase 8 Reviewer — tests (round r1)

Verdict: comment

Findings

  1. Non-blocking test gap: DeviceEventEndpoints does not directly cover the new callback facade error-to-HTTP mapping.

    The facade unit tests cover RegistrationNotFound, RegistrationNotAdmitted, and successful dispatch, and the source-regression test proves the endpoint no longer owns runtime/dispatch/envelope construction. However, DeviceEventEndpointsTests still only exercises helper methods plus the source guard; it never invokes the mapped callback endpoint/handler with a fake IDeviceCallbackCommandService. That leaves the PR prompt's "未注册 return error path" covered at facade level, but not at the HTTP adapter level where the externally visible 404/409/202 mapping was changed.

    Suggested coverage: add endpoint-level tests for POST /api/device-events/{registrationId} with HMAC skipped and a stub callback command service:

    • query port returns no registration -> 404 Registration not found
    • registration exists but facade returns RegistrationNotFound -> 404
    • registration exists but facade returns RegistrationNotAdmitted -> 409
    • target unavailable -> 409
    • success -> 202 with actor_id, command_id, correlation_id, and registration_id

Coverage Notes

  • DeviceCommandFacadeTests.RegisterAsync_WhenStoreActorIsMissing_ShouldCreateStoreActorAndDispatchTypedEnvelope covers typed registration facade dispatch, store actor creation through the resolver, packed DeviceRegisterCommand, concrete dispatch target, and honest accepted receipt ids.
  • DeviceCommandFacadeTests.DispatchCallbackAsync_WhenRegistrationMissing_ShouldReturnAdmissionErrorAndNotDispatch covers missing registration admission and asserts no actor creation or dispatch.
  • DeviceCommandFacadeTests.DispatchCallbackAsync_WhenRegistrationHasNoTarget_ShouldReturnAdmissionErrorAndNotCreateHousehold covers targetless registration admission failure and explicitly rejects callback-time household creation.
  • DeviceCommandFacadeTests.DispatchCallbackAsync_WhenTargetExists_ShouldDispatchInboundAndReturnAcceptedReceipt covers callback target resolver success, existing target lookup, packed DeviceInbound, command/correlation id propagation, dispatch, and receipt fields.
  • DeviceEventEndpointsTests.DeviceEventEndpoints_ShouldNotOwnActorRuntimeDispatchOrEnvelopeConstruction guards the deletion boundary for IActorRuntime, IActorDispatchPort, new EventEnvelope, Any.Pack, EnvelopeRouteSemantics, and CreateAsync<HouseholdEntity> in DeviceEventEndpoints.
  • ServiceCollectionExtensionsTests.AddDeviceRegistration_RegistersDeviceCommandFacades covers DI registration of the new facade/skeleton services.
  • Registration model propagation is covered in DeviceRegistrationGAgentTests and RegistrationQueryPortTests; the projector mapping was updated, but I did not find a direct projector test for DeviceEventTargetActorId.
  • No new [Skip], Skip =, Task.Delay, Thread.Sleep, WaitUntilAsync, manual category trait, or polling allowlist change was introduced by the diff.

Verification

  • dotnet test test/Aevatar.GAgents.ChannelRuntime.Tests/Aevatar.GAgents.ChannelRuntime.Tests.csproj --nologo --filter "FullyQualifiedName~DeviceCommandFacadeTests|FullyQualifiedName~DeviceEventEndpointsTests|FullyQualifiedName~DeviceRegistrationGAgentTests|FullyQualifiedName~RegistrationQueryPortTests|FullyQualifiedName~ServiceCollectionExtensionsTests" — passed, 33 tests, 0 skipped.
  • bash tools/ci/test_stability_guards.sh — passed.
  • bash tools/ci/projection_state_version_guard.sh — passed.
  • bash tools/ci/projection_state_mirror_current_state_guard.sh — passed.
  • bash tools/ci/architecture_guards.sh — passed; playground asset drift guard skipped because pnpm is not installed.
  • git diff --check origin/auto-refact-dev...origin/refactor/iter47-cluster-001-device-endpoint-direct-runtime-dispatch — passed.

Review limitation: .refactor-loop/runs/implement-issue873-device-endpoint-direct-runtime-dispatch.md was not present in this checkout or on the PR branch, so I reviewed against the PR diff, .refactor-loop/runs/meta-judge-issue873-r1.md, and the issue-873 solver notes.

SENTINEL:PHASE8_REVIEW:PR-876:tests:round-r1

REVIEW_DONE:876:tests:comment

⟦AI:AUTO-LOOP⟧

@loning
Copy link
Copy Markdown
Contributor Author

loning commented May 23, 2026

Phase 8 Reviewer - architect (round r1)

PR: #876
HEAD: 318b8a7f90ad80c2153a91e8de5ac597e6e0ea2e
Base diff reviewed: origin/auto-refact-dev...origin/refactor/iter47-cluster-001-device-endpoint-direct-runtime-dispatch

Verdict: approve

Inputs

  • Meta-judge: .refactor-loop/runs/meta-judge-issue873-r1.md
  • Implement summary requested by prompt was not present locally or on the PR branch: .refactor-loop/runs/implement-issue873-device-endpoint-direct-runtime-dispatch.md

Scope checked

  • DeviceEventEndpoints no longer injects IActorRuntime or IActorDispatchPort.
  • Endpoint code no longer constructs EventEnvelope, calls Any.Pack, or chooses EnvelopeRouteSemantics.
  • Registration and callback writes enter through typed command facade/skeleton components.
  • Callback admission reads DeviceRegistrationGAgent's projected registration fact first, rejects missing/tombstoned/targetless registrations, and does not auto-create HouseholdEntity.
  • Callback target is the explicit device_event_target_actor_id persisted by DeviceRegistrationGAgent; no new callback actor type is introduced.
  • Diff does not change CLAUDE.md, AGENTS.md, docs, or NyxID relay surface files.

Evidence

  • agents/Aevatar.GAgents.Device/DeviceEventEndpoints.cs: handler signatures now depend on IDeviceRegistrationQueryPort, IDeviceCallbackCommandService, and DeviceRegistrationCommandFacade; removed runtime/dispatch parameters and removed GetOrCreateRegistrationActorAsync plus DispatchToHouseholdAsync.
  • agents/Aevatar.GAgents.Device/DeviceCommandFacades.cs: DeviceRegistrationCommandFacade wraps ICommandDispatchService<DeviceRegisterCommand,...> and ICommandDispatchService<DeviceUnregisterCommand,...>; DeviceCallbackCommandFacade wraps ICommandDispatchService<DeviceCallbackDispatchCommand,...>. Runtime lookup and envelope construction are behind target resolvers/envelope factories, matching the existing command skeleton pattern.
  • DeviceCallbackCommandTargetResolver reads IDeviceRegistrationQueryPort.GetAsync(registrationId) first and returns typed errors for RegistrationNotFound, RegistrationNotAdmitted, and TargetActorUnavailable; it only calls IActorRuntime.GetAsync(registration.DeviceEventTargetActorId) and never calls CreateAsync<HouseholdEntity>.
  • agents/Aevatar.GAgents.Device/protos/device_registration.proto: device_event_target_actor_id is modeled as a typed field on DeviceRegistrationEntry, DeviceRegisterCommand, and DeviceRegistrationDocument; projector/query port carry it through.
  • DeviceRegistrationGAgent.HandleRegister persists the target actor id into the authoritative registration entry before callbacks can be admitted.
  • Diff grep confirms no active device endpoint references to IActorRuntime, IActorDispatchPort, new EventEnvelope, Any.Pack, EnvelopeRouteSemantics, or CreateAsync<HouseholdEntity>.
  • git diff --name-only lists only device package and channel-runtime test files; no CLAUDE.md, AGENTS.md, docs, or NyxID relay files are changed.

Verification

  • dotnet test test/Aevatar.GAgents.ChannelRuntime.Tests/Aevatar.GAgents.ChannelRuntime.Tests.csproj --no-restore --nologo --filter "DeviceCommandFacadeTests|DeviceEventEndpointsTests|DeviceRegistrationGAgentTests|RegistrationQueryPortTests|ServiceCollectionExtensionsTests" at PR head: passed, 33 tests.
  • bash tools/ci/test_stability_guards.sh at PR head: passed.
  • bash tools/ci/architecture_guards.sh at PR head: passed.

REVIEW_DONE:876:architect:approve

⟦AI:AUTO-LOOP⟧

@loning
Copy link
Copy Markdown
Contributor Author

loning commented May 23, 2026

🤖 Phase 8 Reviewer — quality (round r1)

Verdict

REVIEW_DONE:876:quality:comment

Scope

Reviewed Inputs

  • git diff origin/auto-refact-dev...origin/refactor/iter47-cluster-001-device-endpoint-direct-runtime-dispatch
  • .refactor-loop/runs/meta-judge-issue873-r1.md
  • PR metadata/comments via gh pr view 876

Review limitation: .refactor-loop/runs/implement-issue873-device-endpoint-direct-runtime-dispatch.md was requested but is not present in this checkout or on the PR branch, so I reviewed against the diff, meta-judge, and issue-873 solver context.

Finding

Comment: remove the now-unused Household dependency from the device package

The PR correctly deletes callback-time HouseholdEntity auto-create and moves callback target resolution behind DeviceCallbackCommandTargetResolver, which now only uses the explicit DeviceEventTargetActorId readmodel field plus IActorRuntime.GetAsync. However, the old direct household dependency was not fully cleaned up:

  • agents/Aevatar.GAgents.Device/DeviceEventEndpoints.cs:4 still has using Aevatar.GAgents.Household;
  • agents/Aevatar.GAgents.Device/DeviceCommandFacades.cs:3 still has using Aevatar.GAgents.Household;
  • agents/Aevatar.GAgents.Device/Aevatar.GAgents.Device.csproj:27 still references ..\Aevatar.GAgents.Household\Aevatar.GAgents.Household.csproj

git grep on the PR branch shows no remaining production HouseholdEntity or Household type usage inside agents/Aevatar.GAgents.Device; only those two unused imports and the project reference remain. This is not a behavioral blocker, but it weakens the "delete callback auto-create" cleanup by leaving an unnecessary compile-time coupling to the concrete household package.

Suggested cleanup: remove the two unused using Aevatar.GAgents.Household; lines and drop the Aevatar.GAgents.Household project reference from Aevatar.GAgents.Device.csproj.

Quality Notes

  • DeviceCommandFacades.cs naming is clear enough for this codebase. It mirrors the existing channel command facade/skeleton pattern and groups the endpoint-facing DeviceRegistrationCommandFacade, DeviceCallbackCommandFacade, target resolvers, envelope factories, and receipt factories in one cohesive file.
  • The endpoint runtime/dispatch deletion is otherwise complete: DeviceEventEndpoints no longer injects IActorRuntime/IActorDispatchPort, constructs EventEnvelope, calls Any.Pack, chooses EnvelopeRouteSemantics, or calls CreateAsync<HouseholdEntity>. The old GetOrCreateRegistrationActorAsync and DispatchToHouseholdAsync helpers are gone.
  • Callback auto-create is removed at the actual dispatch boundary: DeviceCallbackCommandTargetResolver rejects missing/tombstoned/targetless registrations, calls only GetAsync for the explicit target actor, and returns TargetActorUnavailable instead of creating a household actor.
  • Refactor comments are complete for the touched orchestration boundaries. The comments consistently describe the old endpoint-owned runtime/envelope dispatch pattern and the new typed facade/skeleton boundary with no callback-time auto-create.

Checks

  • gh pr view 876 --json number,headRefOid,headRefName,baseRefName,url,title,state: confirmed PR head is 318b8a7f90ad80c2153a91e8de5ac597e6e0ea2e.
  • git diff --check origin/auto-refact-dev...origin/refactor/iter47-cluster-001-device-endpoint-direct-runtime-dispatch: passed.
  • git grep over agents/Aevatar.GAgents.Device confirmed the only remaining Household references are the unused imports and project reference listed above.

SENTINEL:PHASE8_REVIEW:PR-876:quality:round-r1

⟦AI:AUTO-LOOP⟧

@loning
Copy link
Copy Markdown
Contributor Author

loning commented May 23, 2026

📊 codex 进展 review-pr876-architect-r1 (⏳ 进行中; 已跑 10 min)

diff --git a/.refactor-loop/runs/review-pr876-architect-r1.sentinel b/.refactor-loop/runs/review-pr876-architect-r1.sentinel
new file mode 100644
index 0000000000000000000000000000000000000000..554adb2e555dcf26445ebed79d882bd2c89a3460
--- /dev/null
+++ b/.refactor-loop/runs/review-pr876-architect-r1.sentinel
@@ -0,0 +1,3 @@
+REVIEW_DONE:876:architect:approve
+POSTED:https://github.com/aevatarAI/aevatar/pull/876#issuecomment-4524583389
+⟦AI:AUTO-LOOP⟧

tokens used
104,922
Architect review completed: approve.

Artifact: `.refactor-loop/runs/review-pr876-architect-r1.md`  
Sentinel: `.refactor-loop/runs/review-pr876-architect-r1.sentinel`  
GitHub posted: https://github.com/aevatarAI/aevatar/pull/876#issuecomment-4524583389

Marker: `REVIEW_DONE:876:architect:approve`

Verification on PR head passed:
- Targeted device/channel-runtime tests: 33 passed
- `bash tools/ci/test_stability_guards.sh`
- `bash tools/ci/architecture_guards.sh`

自动更新每 10 分钟;edit-in-place 不堆评论;codex 完成后此 comment 自动删除(per Auric "完成后删掉就好了 否则太占空间")。
🤖 controller progress reporter

@loning
Copy link
Copy Markdown
Contributor Author

loning commented May 23, 2026

📊 codex 进展 review-pr876-quality-r1 (⏳ 进行中; 已跑 10 min)

+- Callback auto-create is removed at the actual dispatch boundary: `DeviceCallbackCommandTargetResolver` rejects missing/tombstoned/targetless registrations, calls only `GetAsync` for the explicit target actor, and returns `TargetActorUnavailable` instead of creating a household actor.
+- Refactor comments are complete for the touched orchestration boundaries. The comments consistently describe the old endpoint-owned runtime/envelope dispatch pattern and the new typed facade/skeleton boundary with no callback-time auto-create.
+
+## Checks
+
+- `gh pr view 876 --json number,headRefOid,headRefName,baseRefName,url,title,state`: confirmed PR head is `318b8a7f90ad80c2153a91e8de5ac597e6e0ea2e`.
+- `git diff --check origin/auto-refact-dev...origin/refactor/iter47-cluster-001-device-endpoint-direct-runtime-dispatch`: passed.
+- `git grep` over `agents/Aevatar.GAgents.Device` confirmed the only remaining `Household` references are the unused imports and project reference listed above.
+
+POSTED: https://github.com/aevatarAI/aevatar/pull/876#issuecomment-4524607721
+
+SENTINEL:PHASE8_REVIEW:PR-876:quality:round-r1
+
+⟦AI:AUTO-LOOP⟧

tokens used
126,758
Done. Posted quality review comment on PR #876:

https://github.com/aevatarAI/aevatar/pull/876#issuecomment-4524607721

Artifact written to `.refactor-loop/runs/review-pr876-quality-r1.md`.

Verdict: `comment` for one cleanup issue: remove now-unused `Aevatar.GAgents.Household` imports and project reference from the device package after deleting callback-time `HouseholdEntity` auto-create.

自动更新每 10 分钟;edit-in-place 不堆评论;codex 完成后此 comment 自动删除(per Auric "完成后删掉就好了 否则太占空间")。
🤖 controller progress reporter

@loning
Copy link
Copy Markdown
Contributor Author

loning commented May 23, 2026

📊 codex 进展 review-pr876-tests-r1 (⏳ 进行中; 已跑 10 min)

+- `bash tools/ci/projection_state_version_guard.sh` — passed.
+- `bash tools/ci/projection_state_mirror_current_state_guard.sh` — passed.
+- `bash tools/ci/architecture_guards.sh` — passed; playground asset drift guard skipped because `pnpm` is not installed.
+- `git diff --check origin/auto-refact-dev...origin/refactor/iter47-cluster-001-device-endpoint-direct-runtime-dispatch` — passed.
+
+Review limitation: `.refactor-loop/runs/implement-issue873-device-endpoint-direct-runtime-dispatch.md` was not present in this checkout or on the PR branch, so I reviewed against the PR diff, `.refactor-loop/runs/meta-judge-issue873-r1.md`, and the issue-873 solver notes.
+
+SENTINEL:PHASE8_REVIEW:PR-876:tests:round-r1
+
+REVIEW_DONE:876:tests:comment
+
+POSTED:https://github.com/aevatarAI/aevatar/pull/876#issuecomment-4524583269
+
+⟦AI:AUTO-LOOP⟧

tokens used
89,677
Completed PR #876 tests review.

Artifact: `.refactor-loop/runs/review-pr876-tests-r1.md`  
Verdict: `comment`  
Marker: `REVIEW_DONE:876:tests:comment`  
Sentinel: `SENTINEL:PHASE8_REVIEW:PR-876:tests:round-r1`  
Posted: https://github.com/aevatarAI/aevatar/pull/876#issuecomment-4524583269

自动更新每 10 分钟;edit-in-place 不堆评论;codex 完成后此 comment 自动删除(per Auric "完成后删掉就好了 否则太占空间")。
🤖 controller progress reporter

@loning
Copy link
Copy Markdown
Contributor Author

loning commented May 23, 2026

Phase 8 Reviewer - omnibus (round r2)

Verdict: approve

Reviewed current PR head 7102fc45a4340b2a45b731571fd58995f4ceabd4 after it picked up the latest auto-refact-dev updates, including the #890 fix and subsequent base merges. The PR diff against current base remains the same 14 device/channel-runtime test files.

Architect

  • r1 architect approve still holds.
  • DeviceEventEndpoints no longer owns IActorRuntime, IActorDispatchPort, EventEnvelope, Any.Pack, or route semantics.
  • Register/delete/callback paths now enter typed command facade/skeleton services.
  • Callback admission reads DeviceRegistrationGAgent's projected registration fact first and rejects missing/tombstoned/targetless/unavailable targets; it does not callback-time create HouseholdEntity.
  • device_event_target_actor_id is a typed proto/readmodel field and is carried through GAgent state, projector, and query port.

Tests

  • r1 test comment remains a real but non-blocking coverage gap: endpoint-level HTTP adapter tests for the new 404/409/202 callback facade mapping were not added.
  • The behavior itself is covered at facade level, and the endpoint source shows the mapping is straightforward and uses the typed DeviceCallbackCommandStartError result. Acceptable for this PR because local targeted tests and CI pass.

Quality

  • r1 quality comment remains a real cleanup gap: the device package still has unused Aevatar.GAgents.Household imports and the old Household project reference.
  • This is compile-time coupling/dead cleanup debt, not a runtime regression in callback admission/dispatch behavior. Acceptable as non-blocking because the endpoint no longer creates or directly dispatches to HouseholdEntity.

Verification

On current head 7102fc45a4340b2a45b731571fd58995f4ceabd4:

  • dotnet test test/Aevatar.GAgents.ChannelRuntime.Tests/Aevatar.GAgents.ChannelRuntime.Tests.csproj --nologo --filter "FullyQualifiedName~DeviceCommandFacadeTests|FullyQualifiedName~DeviceEventEndpointsTests|FullyQualifiedName~DeviceRegistrationGAgentTests|FullyQualifiedName~RegistrationQueryPortTests|FullyQualifiedName~ServiceCollectionExtensionsTests" - passed, 33 tests, 0 skipped.
  • git diff --check origin/auto-refact-dev...origin/refactor/iter47-cluster-001-device-endpoint-direct-runtime-dispatch - passed.
  • bash tools/ci/test_stability_guards.sh - passed.
  • bash tools/ci/query_projection_priming_guard.sh - passed.

Previously on r2-reviewed head a37c2c3c89202727e2af94e389a82e2a69a0ddcf, also passed:

  • bash tools/ci/projection_state_version_guard.sh
  • bash tools/ci/projection_state_mirror_current_state_guard.sh
  • bash tools/ci/projection_route_mapping_guard.sh
  • bash tools/ci/workflow_binding_boundary_guard.sh
  • bash tools/ci/architecture_guards.sh; playground asset drift guard skipped because pnpm is not installed.

Note: gh pr review --approve could not create a formal GitHub approval because the authenticated account is the PR author (Review Can not approve your own pull request). This omnibus comment is the r2 approval record.

REVIEW_DONE:876:omnibus:approve

⟦AI:AUTO-LOOP⟧

@codecov
Copy link
Copy Markdown

codecov Bot commented May 23, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 82.83%. Comparing base (9763437) to head (7102fc4).
⚠️ Report is 1 commits behind head on auto-refact-dev.

@@               Coverage Diff                @@
##           auto-refact-dev     #876   +/-   ##
================================================
  Coverage            82.83%   82.83%           
================================================
  Files                  998      998           
  Lines                63092    63092           
  Branches              8161     8161           
================================================
  Hits                 52261    52261           
  Misses                7304     7304           
  Partials              3527     3527           
Flag Coverage Δ
ci 82.83% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@loning loning merged commit d206e9b into auto-refact-dev May 23, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant