Repository navigation
fix: remaining untested qa - #279
Conversation
|
Too many files changed for review. ( |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
React Doctor found no new issues. 🎉 Reviewed by React Doctor for commit |
WalkthroughThe pull request updates API serialization and stream terminalization, adds automation loop-target support and stricter CLI validation, revises marketplace and documentation metadata and styling, improves UI accessibility states, and hardens gate and lint tooling. ChangesAPI and runtime behavior
Automation and CLI
Marketplace and site
Tooling and UI
Estimated code review effort: 5 (Critical) | ~120 minutes 🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (3 passed)
✨ Finishing Touches 💡 2📝 Generate docstrings 💡
⚔️ Resolve merge conflicts 💡
🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
Actionable comments posted: 4
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
internal/api/contract/diagnostics_test.go (1)
40-46: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick winCover all fields in the round-trip assertion.
Title,Message, andEvidenceare populated but never compared after unmarshalling, so regressions in those serialized fields still pass. Add assertions for them, using a deep comparison forEvidence.As per path instructions, tests must verify behavior outcomes and fail when the covered contract changes.
🤖 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 `@internal/api/contract/diagnostics_test.go` around lines 40 - 46, Add Title and Message comparisons to the round-trip assertion in the diagnostics test, and compare Evidence using deep equality rather than pointer or shallow comparison. Keep the existing field checks intact so every populated diagnostic field is validated after unmarshalling.Source: Path instructions
🧹 Nitpick comments (2)
web/src/systems/network/components/shell/__tests__/network-head-status.test.tsx (1)
5-10: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winUse the configured
@/*alias for the new import.Import
networkStatusFixturethrough@/systems/network/mocks/fixturesinstead of a relativeweb/srcpath.As per coding guidelines, imports resolving to
web/srcshould use the@/*alias where applicable.Proposed fix
-import { networkStatusFixture } from "../../../mocks/fixtures"; +import { networkStatusFixture } from "`@/systems/network/mocks/fixtures`";🤖 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 `@web/src/systems/network/components/shell/__tests__/network-head-status.test.tsx` around lines 5 - 10, Update the networkStatusFixture import in network-head-status.test.tsx to use the configured `@/systems/network/mocks/fixtures` alias instead of the relative path, leaving the other imports unchanged.Source: Coding guidelines
internal/cli/automation_test.go (1)
180-244: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick winAdd coverage for the Network-flags-only validation branch.
automationLoopTargetOptionsPresent(internal/cli/automation_loop_target_flags.go) also treats Network participation flags as "Loop target options," so passing--network/--network-channel*without--loop(or combined with--agent) should trigger validation errors. This branch isn't covered by the current table.✅ Suggested additional table case
{ name: "Should require a Loop workspace for global automation", args: []string{"--loop", "release"}, want: "--loop-workspace is required for a global Loop target", }, + { + name: "Should require --loop when only Network flags are set", + args: []string{"--network", "live"}, + want: "--loop is required when Loop target flags are set", + }, }🤖 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 `@internal/cli/automation_test.go` around lines 180 - 244, Add invalidJobs coverage for Network participation flags handled by automationLoopTargetOptionsPresent: include a case using --network and/or --network-channel* without --loop, asserting the Loop-required validation error, and a case combining those flags with --agent, asserting the agent/loop exclusivity error. Keep the existing assertion that createAutomationJob is not called.
🤖 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 `@internal/api/core/prompt_stream_test.go`:
- Around line 212-247: The prompt stream tests only cover unresolved tool calls;
add a completed-tool case in the relevant test suite that emits a tool call, its
real tool result, and a done event, then assert the resulting frames contain
exactly one tool-output-available frame for that tool. Keep the assertion
focused on the completed path and terminal output behavior, using the existing
prompt stream helpers and symbols such as NewPromptStreamEncoder and
mustEmitPromptEvent.
In `@internal/cli/loop_support.go`:
- Around line 132-141: Document the Web/Docs Impact analysis for the YAML
validation changes in the loop configuration parsing flow around decoder.Decode.
Check the affected web/ surfaces and packages/site documentation, stating why
they are unchanged or identifying the required updates; do not alter the parsing
behavior.
In `@internal/cli/loop_test.go`:
- Around line 364-365: Update the error validation in the executeRootCommand
test to use the suite’s ErrorContains-style assertion for the “unknown_field”
message. Remove the manual err nil/string containment condition while preserving
the existing rejection expectation and test context.
In `@scripts/gate_test.go`:
- Around line 1-11: Add the repository’s integration-test build tag to
scripts/gate_test.go, using the same tag syntax and placement as other
integration tests. Keep the existing imports and test implementation unchanged
so make verify includes this subprocess-based test when integration tests are
enabled.
---
Outside diff comments:
In `@internal/api/contract/diagnostics_test.go`:
- Around line 40-46: Add Title and Message comparisons to the round-trip
assertion in the diagnostics test, and compare Evidence using deep equality
rather than pointer or shallow comparison. Keep the existing field checks intact
so every populated diagnostic field is validated after unmarshalling.
---
Nitpick comments:
In `@internal/cli/automation_test.go`:
- Around line 180-244: Add invalidJobs coverage for Network participation flags
handled by automationLoopTargetOptionsPresent: include a case using --network
and/or --network-channel* without --loop, asserting the Loop-required validation
error, and a case combining those flags with --agent, asserting the agent/loop
exclusivity error. Keep the existing assertion that createAutomationJob is not
called.
In
`@web/src/systems/network/components/shell/__tests__/network-head-status.test.tsx`:
- Around line 5-10: Update the networkStatusFixture import in
network-head-status.test.tsx to use the configured
`@/systems/network/mocks/fixtures` alias instead of the relative path, leaving the
other imports unchanged.
🪄 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: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: ab962418-6888-497c-a988-61589de3ba8c
⛔ Files ignored due to path filters (447)
.agents/skills/cy-create-tasks/SKILL.mdis excluded by!**/*.md,!.agents/**.agents/skills/cy-create-tasks/references/task-context-schema.mdis excluded by!**/*.md,!.agents/**.agents/skills/cy-create-tasks/references/task-template.mdis excluded by!**/*.md,!.agents/**.compozy/config.tomlis excluded by!**/*.toml,!.compozy/**DESIGN.mdis excluded by!**/*.mddocs/qa/bugs/BUG-20260729-doctor-log-tail-evidence.mdis excluded by!**/*.mddocs/qa/bugs/BUG-20260729-explorer-active-home-schema.mdis excluded by!**/*.mddocs/qa/bugs/BUG-20260729-heartbeat-status-stale-eligibility.mdis excluded by!**/*.mddocs/qa/bugs/BUG-20260729-heartbeat-wake-rollback-stale-policy.mdis excluded by!**/*.mddocs/qa/bugs/BUG-20260729-loop-sidecar-lifecycle.mdis excluded by!**/*.mddocs/qa/bugs/BUG-20260729-marketplace-file-cursor-fence.mdis excluded by!**/*.mddocs/qa/bugs/BUG-20260729-marketplace-json-parity.mdis excluded by!**/*.mddocs/qa/bugs/BUG-20260729-mcp-manual-exchange-timeout.mdis excluded by!**/*.mddocs/qa/bugs/BUG-20260729-overview-json-parity.mdis excluded by!**/*.mddocs/qa/bugs/BUG-20260729-provider-model-pricing-roundtrip.mdis excluded by!**/*.mddocs/qa/bugs/BUG-20260729-provider-model-validation-status.mdis excluded by!**/*.mddocs/qa/bugs/BUG-20260729-session-attach-openapi-ttl.mdis excluded by!**/*.mddocs/qa/bugs/BUG-20260730-goal-outbox-config-rejected.mdis excluded by!**/*.mddocs/qa/bugs/BUG-20260730-idle-interrupt-false-success.mdis excluded by!**/*.mddocs/qa/bugs/BUG-20260730-loop-automation-target-cli.mdis excluded by!**/*.mddocs/qa/bugs/BUG-20260730-loop-config-unknown-fields.mdis excluded by!**/*.mddocs/qa/bugs/BUG-20260730-memory-reset-wrong-status.mdis excluded by!**/*.mddocs/qa/bugs/BUG-20260730-network-zero-counters-omitted.mdis excluded by!**/*.mddocs/qa/bugs/BUG-20260730-repository-config-hardcut.mdis excluded by!**/*.mddocs/qa/bugs/BUG-20260730-resultless-tool-call-running.mdis excluded by!**/*.mddocs/qa/bugs/BUG-20260730-runtime-selector-escape-stale.mdis excluded by!**/*.mddocs/qa/charters/CH-automation-manual-trigger.mdis excluded by!**/*.mddocs/qa/charters/CH-nested-skill-groups.mdis excluded by!**/*.mddocs/qa/charters/CH-provider-settings-model-delta.mdis excluded by!**/*.mddocs/qa/charters/CH-session-calm-transcript.mdis excluded by!**/*.mddocs/qa/charters/CH-session-goal-strip.mdis excluded by!**/*.mddocs/qa/charters/CH-session-permission-dock.mdis excluded by!**/*.mddocs/qa/charters/CH-site-docs-search-context.mdis excluded by!**/*.mddocs/qa/reports/2026-07-28-untested-full.mdis excluded by!**/*.mddocs/qa/scenarios/ET-001.mdis excluded by!**/*.mddocs/qa/scenarios/ET-012.mdis excluded by!**/*.mddocs/qa/scenarios/ET-013.mdis excluded by!**/*.mddocs/qa/scenarios/ET-016.mdis excluded by!**/*.mddocs/qa/scenarios/ET-017.mdis excluded by!**/*.mddocs/qa/scenarios/ET-019.mdis excluded by!**/*.mddocs/qa/scenarios/ET-046.mdis excluded by!**/*.mddocs/qa/scenarios/ET-050.mdis excluded by!**/*.mddocs/qa/scenarios/ET-api-marketplace-namespace.mdis excluded by!**/*.mddocs/qa/scenarios/ET-api-mcp-catalog-install.mdis excluded by!**/*.mddocs/qa/scenarios/ET-api-mcp-oauth-endpoints.mdis excluded by!**/*.mddocs/qa/scenarios/ET-cli-extension-sideload-policy-block.mdis excluded by!**/*.mddocs/qa/scenarios/ET-cli-marketplace-info.mdis excluded by!**/*.mddocs/qa/scenarios/ET-cli-marketplace-search.mdis excluded by!**/*.mddocs/qa/scenarios/ET-cli-mcp-auth-manual-exchange.mdis excluded by!**/*.mddocs/qa/scenarios/ET-cli-mcp-authorize.mdis excluded by!**/*.mddocs/qa/scenarios/ET-cli-mcp-install.mdis excluded by!**/*.mddocs/qa/scenarios/ET-cli-tool-invoke-structural-handles.mdis excluded by!**/*.mddocs/qa/scenarios/ET-compozy-extension-contract-identity.mdis excluded by!**/*.mddocs/qa/scenarios/ET-compozy-public-brand-navigation.mdis excluded by!**/*.mddocs/qa/scenarios/ET-ext-curated-digest-verify.mdis excluded by!**/*.mddocs/qa/scenarios/ET-extension-dev-reload-loop.mdis excluded by!**/*.mddocs/qa/scenarios/ET-extension-passive-update-discovery.mdis excluded by!**/*.mddocs/qa/scenarios/ET-layout-editor-drag-rebalance.mdis excluded by!**/*.mddocs/qa/scenarios/ET-layout-editor-gaps-follow-canvas.mdis excluded by!**/*.mddocs/qa/scenarios/ET-layout-editor-group-overlap-refused.mdis excluded by!**/*.mddocs/qa/scenarios/ET-layout-editor-load-saved-layout.mdis excluded by!**/*.mddocs/qa/scenarios/ET-layout-editor-shortcut-recorder.mdis excluded by!**/*.mddocs/qa/scenarios/ET-layout-editor-split-orientation.mdis excluded by!**/*.mddocs/qa/scenarios/ET-layout-editor-split-weights.mdis excluded by!**/*.mddocs/qa/scenarios/ET-marketplace-kill-switch.mdis excluded by!**/*.mddocs/qa/scenarios/ET-model-source-five-rate-pricing.mdis excluded by!**/*.mddocs/qa/scenarios/ET-native-tool-approval-grants.mdis excluded by!**/*.mddocs/qa/scenarios/ET-native-workspace-scope-isolation.mdis excluded by!**/*.mddocs/qa/scenarios/ET-nested-skill-groups.mdis excluded by!**/*.mddocs/qa/scenarios/ET-site-docs-search-context.mdis excluded by!**/*.mddocs/qa/scenarios/ET-skill-activation-gates.mdis excluded by!**/*.mddocs/qa/scenarios/ET-tool-result-artifact-recovery.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-agent-detail-tab-parity.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-bundle-activation-detail.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-bundle-preview-activate.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-catalog-navigation.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-command-palette-shortcuts.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-desktop-shell-lifecycle.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-dock-default-window-size.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-dock-magnification.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-ext-policy-block.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-extension-detail.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-extensions-manage.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-inter-opsz-medium-510.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-jobs-triggers-catalog.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-loop-editor-node-truncate.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-loop-editor-sidebar-tabs.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-loop-editor-topbar.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-marketplace-installed-management.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-marketplace-kind-navigation.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-marketplace-mcp-authorize-installed.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-marketplace-remove-scope-return.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-mcp-authorize-manual.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-mcp-authorize.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-mcp-guided-install.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-mcp-remote-editor.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-mcp-status-matrix.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-menubar-menu-set.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-page-content-gutter.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-route-chrome-topbar.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-runtime-selector-minimal-slider.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-session-cross-workspace-confirm.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-session-deep-link-isolation.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-session-goal-strip.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-session-inspector-toggle.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-session-permission-dock.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-session-thread-full-bleed.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-session-transcript-calm-grammar.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-sessions-catalog-modal.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-settings-extensions-policy.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-settings-hooks.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-tasks-mode-url.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-ui-resilience.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-vault-opendesign-listing.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-vault-overwrite-confirmation.mdis excluded by!**/*.mddocs/qa/scenarios/ET-web-window-routing-lifecycle.mdis excluded by!**/*.mddocs/qa/scenarios/ET-window-manager-drop-swap.mdis excluded by!**/*.mddocs/qa/scenarios/ET-window-manager-hooks-resources.mdis excluded by!**/*.mddocs/qa/scenarios/ET-window-manager-layout-gestures.mdis excluded by!**/*.mddocs/qa/scenarios/ET-window-manager-layout-recovery.mdis excluded by!**/*.mddocs/qa/scenarios/ET-window-manager-multi-client.mdis excluded by!**/*.mddocs/qa/scenarios/ET-window-manager-public-parity.mdis excluded by!**/*.mddocs/qa/scenarios/ET-workspace-access-mode-matrix.mdis excluded by!**/*.mddocs/qa/scenarios/ET-workspace-access-prompt-outcomes.mdis excluded by!**/*.mddocs/qa/scenarios/ET-workspace-host-api-mcp.mdis excluded by!**/*.mddocs/qa/scenarios/GL-001.mdis excluded by!**/*.mddocs/qa/scenarios/GL-003.mdis excluded by!**/*.mddocs/qa/scenarios/GL-005.mdis excluded by!**/*.mddocs/qa/scenarios/GL-006.mdis excluded by!**/*.mddocs/qa/scenarios/GL-008.mdis excluded by!**/*.mddocs/qa/scenarios/GL-019.mdis excluded by!**/*.mddocs/qa/scenarios/GL-028.mdis excluded by!**/*.mddocs/qa/scenarios/GL-036.mdis excluded by!**/*.mddocs/qa/scenarios/GL-judge-session-contract.mdis excluded by!**/*.mddocs/qa/scenarios/GL-use-response-as-goal.mdis excluded by!**/*.mddocs/qa/scenarios/LP-001.mdis excluded by!**/*.mddocs/qa/scenarios/LP-002.mdis excluded by!**/*.mddocs/qa/scenarios/LP-003.mdis excluded by!**/*.mddocs/qa/scenarios/LP-005.mdis excluded by!**/*.mddocs/qa/scenarios/LP-006.mdis excluded by!**/*.mddocs/qa/scenarios/LP-008.mdis excluded by!**/*.mddocs/qa/scenarios/LP-009.mdis excluded by!**/*.mddocs/qa/scenarios/LP-014.mdis excluded by!**/*.mddocs/qa/scenarios/LP-016.mdis excluded by!**/*.mddocs/qa/scenarios/LP-017.mdis excluded by!**/*.mddocs/qa/scenarios/LP-018.mdis excluded by!**/*.mddocs/qa/scenarios/LP-019.mdis excluded by!**/*.mddocs/qa/scenarios/LP-020.mdis excluded by!**/*.mddocs/qa/scenarios/LP-021.mdis excluded by!**/*.mddocs/qa/scenarios/LP-022.mdis excluded by!**/*.mddocs/qa/scenarios/LP-023.mdis excluded by!**/*.mddocs/qa/scenarios/LP-024.mdis excluded by!**/*.mddocs/qa/scenarios/LP-025.mdis excluded by!**/*.mddocs/qa/scenarios/LP-026.mdis excluded by!**/*.mddocs/qa/scenarios/LP-027.mdis excluded by!**/*.mddocs/qa/scenarios/LP-028.mdis excluded by!**/*.mddocs/qa/scenarios/LP-029.mdis excluded by!**/*.mddocs/qa/scenarios/LP-030.mdis excluded by!**/*.mddocs/qa/scenarios/LP-033.mdis excluded by!**/*.mddocs/qa/scenarios/LP-034.mdis excluded by!**/*.mddocs/qa/scenarios/LP-035.mdis excluded by!**/*.mddocs/qa/scenarios/LP-036.mdis excluded by!**/*.mddocs/qa/scenarios/LP-040.mdis excluded by!**/*.mddocs/qa/scenarios/LP-041.mdis excluded by!**/*.mddocs/qa/scenarios/LP-042.mdis excluded by!**/*.mddocs/qa/scenarios/LP-043.mdis excluded by!**/*.mddocs/qa/scenarios/LP-044.mdis excluded by!**/*.mddocs/qa/scenarios/LP-045.mdis excluded by!**/*.mddocs/qa/scenarios/LP-046.mdis excluded by!**/*.mddocs/qa/scenarios/LP-047.mdis excluded by!**/*.mddocs/qa/scenarios/LP-048.mdis excluded by!**/*.mddocs/qa/scenarios/LP-049.mdis excluded by!**/*.mddocs/qa/scenarios/LP-050.mdis excluded by!**/*.mddocs/qa/scenarios/LP-action-failure-detail.mdis excluded by!**/*.mddocs/qa/scenarios/LP-delete-custom-loop.mdis excluded by!**/*.mddocs/qa/scenarios/LP-run-detail-story-redesign.mdis excluded by!**/*.mddocs/qa/scenarios/LP-task-rollup-wakes-loop.mdis excluded by!**/*.mddocs/qa/scenarios/LP-toggle-loop-goal.mdis excluded by!**/*.mddocs/qa/scenarios/LP-web-loop-configure-modal.mdis excluded by!**/*.mddocs/qa/scenarios/MS-001.mdis excluded by!**/*.mddocs/qa/scenarios/MS-006.mdis excluded by!**/*.mddocs/qa/scenarios/MS-008.mdis excluded by!**/*.mddocs/qa/scenarios/MS-009.mdis excluded by!**/*.mddocs/qa/scenarios/MS-011.mdis excluded by!**/*.mddocs/qa/scenarios/MS-015.mdis excluded by!**/*.mddocs/qa/scenarios/MS-016.mdis excluded by!**/*.mddocs/qa/scenarios/MS-025.mdis excluded by!**/*.mddocs/qa/scenarios/MS-027.mdis excluded by!**/*.mddocs/qa/scenarios/MS-028.mdis excluded by!**/*.mddocs/qa/scenarios/MS-029.mdis excluded by!**/*.mddocs/qa/scenarios/MS-030.mdis excluded by!**/*.mddocs/qa/scenarios/MS-035.mdis excluded by!**/*.mddocs/qa/scenarios/MS-036.mdis excluded by!**/*.mddocs/qa/scenarios/MS-037.mdis excluded by!**/*.mddocs/qa/scenarios/MS-038.mdis excluded by!**/*.mddocs/qa/scenarios/MS-040.mdis excluded by!**/*.mddocs/qa/scenarios/MS-041.mdis excluded by!**/*.mddocs/qa/scenarios/MS-049.mdis excluded by!**/*.mddocs/qa/scenarios/MS-056.mdis excluded by!**/*.mddocs/qa/scenarios/MS-058.mdis excluded by!**/*.mddocs/qa/scenarios/MS-059.mdis excluded by!**/*.mddocs/qa/scenarios/MS-atomic-memory-batch.mdis excluded by!**/*.mddocs/qa/scenarios/MS-background-role-fallback.mdis excluded by!**/*.mddocs/qa/scenarios/MS-background-role-routing.mdis excluded by!**/*.mddocs/qa/scenarios/MS-configure-window-manager.mdis excluded by!**/*.mddocs/qa/scenarios/MS-daemon-memory-reporting.mdis excluded by!**/*.mddocs/qa/scenarios/MS-layout-editor-clear-selection.mdis excluded by!**/*.mddocs/qa/scenarios/MS-layout-profile-cli-roundtrip.mdis excluded by!**/*.mddocs/qa/scenarios/MS-marketplace-catalog-live-config.mdis excluded by!**/*.mddocs/qa/scenarios/MS-provider-detail-modal.mdis excluded by!**/*.mddocs/qa/scenarios/MS-provider-settings-model-delta-roundtrip.mdis excluded by!**/*.mddocs/qa/scenarios/MS-settings-roles-panel.mdis excluded by!**/*.mddocs/qa/scenarios/MS-web-bridge-create-secret-slots.mdis excluded by!**/*.mddocs/qa/scenarios/MS-web-bridge-edit-delivery-fold.mdis excluded by!**/*.mddocs/qa/scenarios/MS-web-entity-modal-shell.mdis excluded by!**/*.mddocs/qa/scenarios/MS-web-knowledge-edit-immutable-identity.mdis excluded by!**/*.mddocs/qa/scenarios/MS-web-mcp-editor-simple-advanced.mdis excluded by!**/*.mddocs/qa/scenarios/MS-web-modal-help-tips.mdis excluded by!**/*.mddocs/qa/scenarios/MS-web-provider-auth-gate.mdis excluded by!**/*.mddocs/qa/scenarios/MS-web-sandbox-profile-advanced.mdis excluded by!**/*.mddocs/qa/scenarios/MS-web-session-simple-advanced-launch.mdis excluded by!**/*.mddocs/qa/scenarios/MS-web-settings-providers-redesign.mdis excluded by!**/*.mddocs/qa/scenarios/MS-web-settings-takeover-redesign.mdis excluded by!**/*.mddocs/qa/scenarios/MS-web-task-editor-window-modal.mdis excluded by!**/*.mddocs/qa/scenarios/MS-web-workspace-add-directory-browser.mdis excluded by!**/*.mddocs/qa/scenarios/MS-workspace-checkpoint-continuity.mdis excluded by!**/*.mddocs/qa/scenarios/MS-workspace-resolution-provenance.mdis excluded by!**/*.mddocs/qa/scenarios/NB-001.mdis excluded by!**/*.mddocs/qa/scenarios/NB-002.mdis excluded by!**/*.mddocs/qa/scenarios/NB-003.mdis excluded by!**/*.mddocs/qa/scenarios/NB-004.mdis excluded by!**/*.mddocs/qa/scenarios/NB-005.mdis excluded by!**/*.mddocs/qa/scenarios/NB-006.mdis excluded by!**/*.mddocs/qa/scenarios/NB-007.mdis excluded by!**/*.mddocs/qa/scenarios/NB-008.mdis excluded by!**/*.mddocs/qa/scenarios/NB-009.mdis excluded by!**/*.mddocs/qa/scenarios/NB-010.mdis excluded by!**/*.mddocs/qa/scenarios/NB-011.mdis excluded by!**/*.mddocs/qa/scenarios/NB-012.mdis excluded by!**/*.mddocs/qa/scenarios/NB-013.mdis excluded by!**/*.mddocs/qa/scenarios/NB-014.mdis excluded by!**/*.mddocs/qa/scenarios/NB-015.mdis excluded by!**/*.mddocs/qa/scenarios/NB-016.mdis excluded by!**/*.mddocs/qa/scenarios/NB-017.mdis excluded by!**/*.mddocs/qa/scenarios/NB-019.mdis excluded by!**/*.mddocs/qa/scenarios/NB-020.mdis excluded by!**/*.mddocs/qa/scenarios/NB-027.mdis excluded by!**/*.mddocs/qa/scenarios/NB-031.mdis excluded by!**/*.mddocs/qa/scenarios/NB-032.mdis excluded by!**/*.mddocs/qa/scenarios/NB-037.mdis excluded by!**/*.mddocs/qa/scenarios/NB-039.mdis excluded by!**/*.mddocs/qa/scenarios/NB-045.mdis excluded by!**/*.mddocs/qa/scenarios/NB-047.mdis excluded by!**/*.mddocs/qa/scenarios/NB-agent-manages-participation.mdis excluded by!**/*.mddocs/qa/scenarios/NB-bridge-edit-reply.mdis excluded by!**/*.mddocs/qa/scenarios/NB-bridge-overload-recovery.mdis excluded by!**/*.mddocs/qa/scenarios/NB-bridge-provider-setup.mdis excluded by!**/*.mddocs/qa/scenarios/NB-bridge-restart-recovery.mdis excluded by!**/*.mddocs/qa/scenarios/NB-bridge-tool-progress.mdis excluded by!**/*.mddocs/qa/scenarios/NB-coordination-invitation-future-runs.mdis excluded by!**/*.mddocs/qa/scenarios/NB-indeterminate-bridge-delivery.mdis excluded by!**/*.mddocs/qa/scenarios/NB-long-bridge-replies.mdis excluded by!**/*.mddocs/qa/scenarios/NB-network-availability-toggle.mdis excluded by!**/*.mddocs/qa/scenarios/NB-network-empties-onboarding-settings.mdis excluded by!**/*.mddocs/qa/scenarios/NB-network-live-config-lifecycle.mdis excluded by!**/*.mddocs/qa/scenarios/NB-participation-controls-serialize.mdis excluded by!**/*.mddocs/qa/scenarios/NB-provider-progress-rendering.mdis excluded by!**/*.mddocs/qa/scenarios/NB-run-bounded-live-collaboration.mdis excluded by!**/*.mddocs/qa/scenarios/NB-run-conversation-bounds-usage.mdis excluded by!**/*.mddocs/qa/scenarios/NB-web-bridge-setup.mdis excluded by!**/*.mddocs/qa/scenarios/NB-web-channel-fanout-policy.mdis excluded by!**/*.mddocs/qa/scenarios/NB-web-network-head-trail.mdis excluded by!**/*.mddocs/qa/scenarios/REL-beta-channel-contract.mdis excluded by!**/*.mddocs/qa/scenarios/REL-beta-installer-provenance.mdis excluded by!**/*.mddocs/qa/scenarios/REL-beta-self-update.mdis excluded by!**/*.mddocs/qa/scenarios/REL-release-candidate-plan.mdis excluded by!**/*.mddocs/qa/scenarios/REL-stable-changelog-hard-cut.mdis excluded by!**/*.mddocs/qa/scenarios/RT-002.mdis excluded by!**/*.mddocs/qa/scenarios/RT-004.mdis excluded by!**/*.mddocs/qa/scenarios/RT-008.mdis excluded by!**/*.mddocs/qa/scenarios/RT-010.mdis excluded by!**/*.mddocs/qa/scenarios/RT-013.mdis excluded by!**/*.mddocs/qa/scenarios/RT-015.mdis excluded by!**/*.mddocs/qa/scenarios/RT-017.mdis excluded by!**/*.mddocs/qa/scenarios/RT-018.mdis excluded by!**/*.mddocs/qa/scenarios/RT-019.mdis excluded by!**/*.mddocs/qa/scenarios/RT-021.mdis excluded by!**/*.mddocs/qa/scenarios/RT-028.mdis excluded by!**/*.mddocs/qa/scenarios/RT-030.mdis excluded by!**/*.mddocs/qa/scenarios/RT-032.mdis excluded by!**/*.mddocs/qa/scenarios/RT-037.mdis excluded by!**/*.mddocs/qa/scenarios/RT-039.mdis excluded by!**/*.mddocs/qa/scenarios/RT-041.mdis excluded by!**/*.mddocs/qa/scenarios/RT-043.mdis excluded by!**/*.mddocs/qa/scenarios/RT-044.mdis excluded by!**/*.mddocs/qa/scenarios/RT-045.mdis excluded by!**/*.mddocs/qa/scenarios/RT-046.mdis excluded by!**/*.mddocs/qa/scenarios/RT-047.mdis excluded by!**/*.mddocs/qa/scenarios/RT-048.mdis excluded by!**/*.mddocs/qa/scenarios/RT-051.mdis excluded by!**/*.mddocs/qa/scenarios/RT-052.mdis excluded by!**/*.mddocs/qa/scenarios/RT-055.mdis excluded by!**/*.mddocs/qa/scenarios/RT-056.mdis excluded by!**/*.mddocs/qa/scenarios/RT-058.mdis excluded by!**/*.mddocs/qa/scenarios/RT-059.mdis excluded by!**/*.mddocs/qa/scenarios/RT-061.mdis excluded by!**/*.mddocs/qa/scenarios/RT-063.mdis excluded by!**/*.mddocs/qa/scenarios/RT-064.mdis excluded by!**/*.mddocs/qa/scenarios/RT-066.mdis excluded by!**/*.mddocs/qa/scenarios/RT-067.mdis excluded by!**/*.mddocs/qa/scenarios/RT-068.mdis excluded by!**/*.mddocs/qa/scenarios/RT-069.mdis excluded by!**/*.mddocs/qa/scenarios/RT-071.mdis excluded by!**/*.mddocs/qa/scenarios/RT-072.mdis excluded by!**/*.mddocs/qa/scenarios/RT-074.mdis excluded by!**/*.mddocs/qa/scenarios/RT-075.mdis excluded by!**/*.mddocs/qa/scenarios/RT-077.mdis excluded by!**/*.mddocs/qa/scenarios/RT-078.mdis excluded by!**/*.mddocs/qa/scenarios/RT-079.mdis excluded by!**/*.mddocs/qa/scenarios/RT-080.mdis excluded by!**/*.mddocs/qa/scenarios/RT-083.mdis excluded by!**/*.mddocs/qa/scenarios/RT-agent-detail-runtime-live-edit.mdis excluded by!**/*.mddocs/qa/scenarios/RT-compozy-global-database.mdis excluded by!**/*.mddocs/qa/scenarios/RT-cursor-agent-mode.mdis excluded by!**/*.mddocs/qa/scenarios/RT-daemon-drain-admission.mdis excluded by!**/*.mddocs/qa/scenarios/RT-desktop-pager-overview.mdis excluded by!**/*.mddocs/qa/scenarios/RT-dev-bootstrap-ready.mdis excluded by!**/*.mddocs/qa/scenarios/RT-home-approve-from-dashboard.mdis excluded by!**/*.mddocs/qa/scenarios/RT-mcp-dead-recovery.mdis excluded by!**/*.mddocs/qa/scenarios/RT-migrate-memory-stream-when-disabled.mdis excluded by!**/*.mddocs/qa/scenarios/RT-new-session-fast-feedback.mdis excluded by!**/*.mddocs/qa/scenarios/RT-observe-overview-cli.mdis excluded by!**/*.mddocs/qa/scenarios/RT-onboarding-setup-panel-over-shell.mdis excluded by!**/*.mddocs/qa/scenarios/RT-preserve-corrupt-database-family.mdis excluded by!**/*.mddocs/qa/scenarios/RT-pressure-context-compaction.mdis excluded by!**/*.mddocs/qa/scenarios/RT-refuse-ahead-database.mdis excluded by!**/*.mddocs/qa/scenarios/RT-refuse-cross-stream-legacy-marker.mdis excluded by!**/*.mddocs/qa/scenarios/RT-refuse-legacy-cli-open.mdis excluded by!**/*.mddocs/qa/scenarios/RT-refuse-legacy-database.mdis excluded by!**/*.mddocs/qa/scenarios/RT-refuse-legacy-session-database.mdis excluded by!**/*.mddocs/qa/scenarios/RT-reserved-builtin-agent-names.mdis excluded by!**/*.mddocs/qa/scenarios/RT-secret-redaction-boundary.mdis excluded by!**/*.mddocs/qa/scenarios/RT-session-clarification-roundtrip.mdis excluded by!**/*.mddocs/qa/scenarios/RT-session-context-rebuild.mdis excluded by!**/*.mddocs/qa/scenarios/RT-session-cost-provenance.mdis excluded by!**/*.mddocs/qa/scenarios/RT-session-cwd-resume.mdis excluded by!**/*.mddocs/qa/scenarios/RT-session-delete-owned-history.mdis excluded by!**/*.mddocs/qa/scenarios/RT-session-lifecycle-affordances.mdis excluded by!**/*.mddocs/qa/scenarios/RT-subprocess-health-escalation.mdis excluded by!**/*.mddocs/qa/scenarios/RT-workspace-active-session-badge.mdis excluded by!**/*.mddocs/qa/scenarios/SITE-changelog-release-receipts.mdis excluded by!**/*.mddocs/qa/scenarios/SITE-resource-mutation-boundary.mdis excluded by!**/*.mddocs/qa/scenarios/TA-001.mdis excluded by!**/*.mddocs/qa/scenarios/TA-002.mdis excluded by!**/*.mddocs/qa/scenarios/TA-003.mdis excluded by!**/*.mddocs/qa/scenarios/TA-004.mdis excluded by!**/*.mddocs/qa/scenarios/TA-017.mdis excluded by!**/*.mddocs/qa/scenarios/TA-018.mdis excluded by!**/*.mddocs/qa/scenarios/TA-019.mdis excluded by!**/*.mddocs/qa/scenarios/TA-022.mdis excluded by!**/*.mddocs/qa/scenarios/TA-023.mdis excluded by!**/*.mddocs/qa/scenarios/TA-024.mdis excluded by!**/*.mddocs/qa/scenarios/TA-027.mdis excluded by!**/*.mddocs/qa/scenarios/TA-033.mdis excluded by!**/*.mddocs/qa/scenarios/TA-039.mdis excluded by!**/*.mddocs/qa/scenarios/TA-040.mdis excluded by!**/*.mddocs/qa/scenarios/TA-044.mdis excluded by!**/*.mddocs/qa/scenarios/TA-047.mdis excluded by!**/*.mddocs/qa/scenarios/TA-050.mdis excluded by!**/*.mddocs/qa/scenarios/TA-052.mdis excluded by!**/*.mddocs/qa/scenarios/TA-053.mdis excluded by!**/*.mddocs/qa/scenarios/TA-054.mdis excluded by!**/*.mddocs/qa/scenarios/TA-055.mdis excluded by!**/*.mddocs/qa/scenarios/TA-056.mdis excluded by!**/*.mddocs/qa/scenarios/TA-061.mdis excluded by!**/*.mddocs/qa/scenarios/TA-062.mdis excluded by!**/*.mddocs/qa/scenarios/TA-063.mdis excluded by!**/*.mddocs/qa/scenarios/TA-064.mdis excluded by!**/*.mddocs/qa/scenarios/TA-065.mdis excluded by!**/*.mddocs/qa/scenarios/TA-066.mdis excluded by!**/*.mddocs/qa/scenarios/TA-068.mdis excluded by!**/*.mddocs/qa/scenarios/TA-069.mdis excluded by!**/*.mddocs/qa/scenarios/TA-070.mdis excluded by!**/*.mddocs/qa/scenarios/TA-071.mdis excluded by!**/*.mddocs/qa/scenarios/TA-075.mdis excluded by!**/*.mddocs/qa/scenarios/TA-077.mdis excluded by!**/*.mddocs/qa/scenarios/TA-078.mdis excluded by!**/*.mddocs/qa/scenarios/TA-079.mdis excluded by!**/*.mddocs/qa/scenarios/TA-080.mdis excluded by!**/*.mddocs/qa/scenarios/TA-081.mdis excluded by!**/*.mddocs/qa/scenarios/TA-082.mdis excluded by!**/*.mddocs/qa/scenarios/TA-083.mdis excluded by!**/*.mddocs/qa/scenarios/TA-084.mdis excluded by!**/*.mddocs/qa/scenarios/TA-085.mdis excluded by!**/*.mddocs/qa/scenarios/TA-086.mdis excluded by!**/*.mddocs/qa/scenarios/TA-087.mdis excluded by!**/*.mddocs/qa/scenarios/TA-088.mdis excluded by!**/*.mddocs/qa/scenarios/TA-089.mdis excluded by!**/*.mddocs/qa/scenarios/TA-090.mdis excluded by!**/*.mddocs/qa/scenarios/TA-091.mdis excluded by!**/*.mddocs/qa/scenarios/TA-092.mdis excluded by!**/*.mddocs/qa/scenarios/TA-093.mdis excluded by!**/*.mddocs/qa/scenarios/TA-094.mdis excluded by!**/*.mddocs/qa/scenarios/TA-095.mdis excluded by!**/*.mddocs/qa/scenarios/TA-096.mdis excluded by!**/*.mddocs/qa/scenarios/TA-097.mdis excluded by!**/*.mddocs/qa/scenarios/TA-098.mdis excluded by!**/*.mddocs/qa/scenarios/TA-099.mdis excluded by!**/*.mddocs/qa/scenarios/TA-100.mdis excluded by!**/*.mddocs/qa/scenarios/TA-101.mdis excluded by!**/*.mddocs/qa/scenarios/TA-102.mdis excluded by!**/*.mddocs/qa/scenarios/TA-103.mdis excluded by!**/*.mddocs/qa/scenarios/TA-104.mdis excluded by!**/*.mddocs/qa/scenarios/TA-105.mdis excluded by!**/*.mddocs/qa/scenarios/TA-106.mdis excluded by!**/*.mddocs/qa/scenarios/TA-107.mdis excluded by!**/*.mddocs/qa/scenarios/TA-action-run-liveness.mdis excluded by!**/*.mddocs/qa/scenarios/TA-automation-crud-loop-target.mdis excluded by!**/*.mddocs/qa/scenarios/TA-automation-suggestions.mdis excluded by!**/*.mddocs/qa/scenarios/TA-daemon-lifecycle-command-guard.mdis excluded by!**/*.mddocs/qa/scenarios/TA-exact-claim-single-owner.mdis excluded by!**/*.mddocs/qa/scenarios/TA-lease-recovery-attempt-budget.mdis excluded by!**/*.mddocs/qa/scenarios/TA-loop-failure-breaker.mdis excluded by!**/*.mddocs/qa/scenarios/TA-parent-rollup-completion.mdis excluded by!**/*.mddocs/qa/scenarios/TA-schedule-catchup-overlap.mdis excluded by!**/*.mddocs/qa/scenarios/TA-task-create-async-activation.mdis excluded by!**/*.mddocs/qa/scenarios/TA-task-role-session-activation.mdis excluded by!**/*.mddocs/qa/scenarios/TA-task-run-cost-provenance.mdis excluded by!**/*.mddocs/qa/scenarios/TA-task-template-preserves-draft.mdis excluded by!**/*.mddocs/qa/scenarios/TA-task-wake-dedup.mdis excluded by!**/*.mddocs/qa/scenarios/TA-terminal-run-inspect.mdis excluded by!**/*.mddocs/qa/scenarios/TA-web-automation-preview-toggle.mdis excluded by!**/*.mddocs/qa/scenarios/TA-web-task-detail-redesign.mdis excluded by!**/*.mddocs/qa/scenarios/TA-web-task-run-detail-redesign.mdis excluded by!**/*.mddocs/qa/scenarios/TA-workspace-run-capacity.mdis excluded by!**/*.mdextensions/dev-cycle/skills/cy-create-tasks/SKILL.mdis excluded by!**/*.mdextensions/dev-cycle/skills/cy-create-tasks/references/task-context-schema.mdis excluded by!**/*.mdextensions/dev-cycle/skills/cy-create-tasks/references/task-template.mdis excluded by!**/*.mdopenapi/compozy.jsonis excluded by!**/*.jsonpackages/site/content/docs/automation/index.mdxis excluded by!**/*.mdxpackages/site/content/docs/automation/jobs.mdxis excluded by!**/*.mdxpackages/site/content/docs/automation/triggers.mdxis excluded by!**/*.mdxpackages/site/content/docs/cli/automation/jobs/create.mdxis excluded by!**/*.mdxpackages/site/content/docs/cli/automation/triggers/create.mdxis excluded by!**/*.mdxsdk/typescript/src/generated/contracts.tsis excluded by!**/generated/**,!**/generated/**skills/compozy/references/capabilities-and-bundles.mdis excluded by!**/*.mdweb/src/generated/compozy-openapi.d.tsis excluded by!**/generated/**,!**/generated/**,!**/*.d.ts
📒 Files selected for processing (74)
internal/api/contract/diagnostics_test.gointernal/api/contract/network_payloads.gointernal/api/core/handlers_observability.gointernal/api/core/memory_dream_handlers.gointernal/api/core/memory_workspace_test.gointernal/api/core/network_status_conversion.gointernal/api/core/network_test.gointernal/api/core/prompt_stream.gointernal/api/core/prompt_stream_blocks.gointernal/api/core/prompt_stream_emit.gointernal/api/core/prompt_stream_test.gointernal/api/spec/registry_memory.gointernal/cli/automation.gointernal/cli/automation_job_create.gointernal/cli/automation_list_commands.gointernal/cli/automation_loop_target_flags.gointernal/cli/automation_request.gointernal/cli/automation_root_command.gointernal/cli/automation_test.gointernal/cli/automation_trigger_commands.gointernal/cli/bundle_output.gointernal/cli/config_loops.gointernal/cli/config_test.gointernal/cli/doc_test.gointernal/cli/docpost/docpost_enrichment.gointernal/cli/loop.gointernal/cli/loop_support.gointernal/cli/loop_test.gointernal/cli/mcp_auth_test.gointernal/cli/memory_test.gointernal/cli/network_message_commands.gointernal/cli/network_test.gointernal/session/manager_busy_input.gointernal/session/manager_busy_input_test.gomagefiles/deps_lint.gomagefiles/deps_lint_test.gopackages/site/app/__tests__/global.test.tspackages/site/app/docs/[[...slug]]/page.tsxpackages/site/app/global.csspackages/site/app/marketplace/bridges/page.tsxpackages/site/app/marketplace/bundled/dev-cycle/page.tsxpackages/site/app/marketplace/page.tsxpackages/site/app/styles/docs-api.csspackages/site/app/styles/docs.csspackages/site/app/styles/site-graphics.csspackages/site/components/docs/page-actions/view-options.tsxpackages/site/components/marketplace/marketplace-bridge-grid.tsxpackages/site/components/marketplace/marketplace-entry-detail.tsxpackages/site/components/marketplace/marketplace-kind-meta.tspackages/site/components/site/sidebar-section-label.tsxpackages/site/lib/__tests__/docs-discovery.test.tspackages/site/lib/__tests__/docs-route-metadata.test.tspackages/site/lib/__tests__/marketplace-catalog.test.tsxpackages/site/lib/__tests__/public-route-metadata.test.tspackages/site/lib/__tests__/public-search-index.test.tspackages/site/lib/__tests__/section-layouts.test.tsxpackages/site/lib/marketplace-bridges.tspackages/site/lib/marketplace-bundled.tspackages/site/lib/marketplace-catalog.tspackages/site/lib/marketplace-copy.tspackages/site/lib/public-search-index.tspackages/site/next.config.mjspackages/ui/src/components/__tests__/popover.test.tsxpackages/ui/src/components/custom/catalog-card.tsxpackages/ui/src/components/popover.tsxscripts/gate.shscripts/gate_test.goscripts/sync-design-md.mjssdk/go/contracts/types_013_gen.gosdk/go/contracts/types_014_gen.goweb/src/systems/network/components/shell/__tests__/network-head-status.test.tsxweb/src/systems/network/mocks/fixtures.tsweb/src/systems/session/components/__tests__/tool-call-card.test.tsxweb/src/systems/session/lib/message-parts.ts
💤 Files with no reviewable changes (4)
- packages/ui/src/components/custom/catalog-card.tsx
- packages/site/components/marketplace/marketplace-bridge-grid.tsx
- packages/site/app/tests/global.test.ts
- packages/site/lib/tests/section-layouts.test.tsx
| decoder := yaml.NewDecoder(bytes.NewReader(body)) | ||
| decoder.KnownFields(true) | ||
| if err := decoder.Decode(&cfg); err != nil { | ||
| return looppkg.LoopConfig{}, fmt.Errorf("cli: parse loop config file: %w", err) | ||
| } | ||
| if err := decoder.Decode(&struct{}{}); err == nil { | ||
| return looppkg.LoopConfig{}, errors.New("cli: parse loop config file: expected one document") | ||
| } else if !errors.Is(err, io.EOF) { | ||
| return looppkg.LoopConfig{}, fmt.Errorf("cli: parse loop config file: expected one document: %w", err) | ||
| } |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win
Add the required Web/Docs Impact analysis.
This changes the public CLI configuration contract by rejecting unknown fields and multi-document YAML before mutation. Document the checked web/ and packages/site surfaces, including why they are unchanged or the required documentation updates. As per coding guidelines, “Every backend task must include a Web/Docs Impact analysis covering affected web/ surfaces and packages/site documentation.”
🤖 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 `@internal/cli/loop_support.go` around lines 132 - 141, Document the Web/Docs
Impact analysis for the YAML validation changes in the loop configuration
parsing flow around decoder.Decode. Check the affected web/ surfaces and
packages/site documentation, stating why they are unchanged or identifying the
required updates; do not alter the parsing behavior.
Source: Coding guidelines
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 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 `@internal/api/contract/diagnostics_test.go`:
- Line 5: Update the Evidence comparison in the affected diagnostics test to use
normalized JSON semantics instead of reflect.DeepEqual: marshal both Evidence
values, compare their marshaled representations, and preserve the test’s
existing failure behavior if marshaling fails.
In `@internal/api/core/prompt_stream_test.go`:
- Around line 249-287: Strengthen the completed tool-call test around encoder
behavior in the “Should emit exactly one terminal output for a completed tool
call” case by inspecting the emitted terminal frame payload, not only
promptFrameSignatures. Assert that the tool-output-available frame contains the
expected completed result text, “tests passed,” while preserving the existing
single-terminal-frame and finish-order assertions.
🪄 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: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: 2fc2f975-6b43-46fc-85e2-e935bc61ca3f
📒 Files selected for processing (8)
internal/api/contract/diagnostics_test.gointernal/api/core/prompt_stream_test.gointernal/cli/automation_test.gointernal/cli/helpers_test.gointernal/cli/loop_support.gointernal/cli/loop_test.goscripts/gate_integration_test.goweb/src/systems/network/components/shell/__tests__/network-head-status.test.tsx
🚧 Files skipped from review as they are similar to previous changes (3)
- internal/cli/loop_test.go
- internal/cli/loop_support.go
- internal/cli/automation_test.go
| @@ -2,6 +2,7 @@ package contract_test | |||
|
|
|||
| import ( | |||
| "encoding/json" | |||
| "reflect" | |||
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win
Compare Evidence using JSON semantics.
json.Unmarshal can convert numbers inside map[string]any to float64 and distinguish empty from nil maps, so reflect.DeepEqual may reject a valid JSON round trip. Marshal both evidence values and compare the normalized JSON instead.
Proposed fix
- "reflect"
+ "bytes"
+ expectedEvidence, err := json.Marshal(item.Evidence)
+ if err != nil {
+ t.Fatalf("json.Marshal(item.Evidence) error = %v", err)
+ }
+ actualEvidence, err := json.Marshal(decoded.Evidence)
+ if err != nil {
+ t.Fatalf("json.Marshal(decoded.Evidence) error = %v", err)
+ }
+
if decoded.ID != item.ID ||
...
- !reflect.DeepEqual(decoded.Evidence, item.Evidence) {
+ !bytes.Equal(actualEvidence, expectedEvidence) {Also applies to: 45-50
🤖 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 `@internal/api/contract/diagnostics_test.go` at line 5, Update the Evidence
comparison in the affected diagnostics test to use normalized JSON semantics
instead of reflect.DeepEqual: marshal both Evidence values, compare their
marshaled representations, and preserve the test’s existing failure behavior if
marshaling fails.
| t.Run("Should emit exactly one terminal output for a completed tool call", func(t *testing.T) { | ||
| t.Parallel() | ||
|
|
||
| writer := &bufferFlusher{} | ||
| encoder := core.NewPromptStreamEncoder(func() time.Time { | ||
| return time.Date(2026, 7, 30, 9, 1, 0, 0, time.UTC) | ||
| }) | ||
| mustEmitPromptEvent(t, encoder, writer, acp.AgentEvent{ | ||
| Type: acp.EventTypeToolCall, | ||
| TurnID: "turn-completed", | ||
| ToolCallID: "tool-completed", | ||
| Title: "exec", | ||
| Raw: json.RawMessage(`{"tool_input":{"command":"make test"}}`), | ||
| }) | ||
| mustEmitPromptEvent(t, encoder, writer, acp.AgentEvent{ | ||
| Type: acp.EventTypeToolResult, | ||
| TurnID: "turn-completed", | ||
| ToolCallID: "tool-completed", | ||
| Title: "exec", | ||
| Text: "tests passed", | ||
| Raw: json.RawMessage(`{"result":{"exit_code":0,"output":"ok"}}`), | ||
| }) | ||
| mustEmitPromptEvent(t, encoder, writer, acp.AgentEvent{ | ||
| Type: acp.EventTypeDone, | ||
| TurnID: "turn-completed", | ||
| PromptStopReason: acp.PromptStopReasonEndTurn, | ||
| }) | ||
|
|
||
| terminal := make([]string, 0, 2) | ||
| for _, signature := range promptFrameSignatures(t, writer.String()) { | ||
| if signature == "finish" || strings.HasPrefix(signature, "tool-output-available:") { | ||
| terminal = append(terminal, signature) | ||
| } | ||
| } | ||
| want := []string{"tool-output-available:tool-completed", "finish"} | ||
| if !reflect.DeepEqual(terminal, want) { | ||
| t.Fatalf("terminal frame signatures = %#v, want %#v", terminal, want) | ||
| } | ||
| }) |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Assert the completed tool result payload.
This test verifies only the terminal frame type and tool ID. Because promptFrameSignatures discards payloads, it would still pass if the completed result were empty or replaced with the unresolved-tool error. Parse the completed frame or assert that its payload contains the expected "tests passed" result.
As per path instructions, Go tests must assert response bodies where applicable and verify behavior outcomes.
🤖 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 `@internal/api/core/prompt_stream_test.go` around lines 249 - 287, Strengthen
the completed tool-call test around encoder behavior in the “Should emit exactly
one terminal output for a completed tool call” case by inspecting the emitted
terminal frame payload, not only promptFrameSignatures. Assert that the
tool-output-available frame contains the expected completed result text, “tests
passed,” while preserving the existing single-terminal-frame and finish-order
assertions.
Source: Path instructions
Summary by CodeRabbit
New Features
Bug Fixes
Style