Skip to content

fix: preserve automation reliability across Hermes rebase#312

Merged
pedronauck merged 8 commits into
mainfrom
qa-fixes
Jul 15, 2026
Merged

fix: preserve automation reliability across Hermes rebase#312
pedronauck merged 8 commits into
mainfrom
qa-fixes

Conversation

@pedronauck

@pedronauck pedronauck commented Jul 14, 2026

Copy link
Copy Markdown
Member

Summary

  • Rebases the Automation reliability work onto the Hermes Bridge and ACP diagnostic-attribution architecture without dropping either branch's contracts.
  • Hardens session deletion/recovery, Task settlement and Loop wake publication, typed Automation Loop targets, and cross-process ACP mock attribution.
  • Co-ships generated contracts, Web workflows, public documentation, and truthful QA evidence for the combined runtime.

Changes

Runtime and persistence

  • Preserves Hermes Bridge migration 00002_schema.sql byte-for-byte and appends Automation's session-owned permission/token cascades as global migration 00003_schema.sql.
  • Serializes workspace removal against session-start reservations and keeps staged filesystem deletion aligned with durable catalog cleanup.
  • Reconciles recovered session creation profiles and identities before Task-role recovery, while failing closed on genuine identity drift.
  • Negotiates every explicit preferred model through ACP and adopts ACP's current model only for native-default sessions.
  • Publishes committed Task settlement, parent rollup, Loop wake, and terminal hooks in the required order even when one post-commit publication fails.

ACP and deterministic diagnostics

  • Carries typed prompt and judge metadata through ACP events, transcript projection, fixtures, and the cross-process acpmock driver.
  • Routes concurrent diagnostics by role, gate, criterion, attempt, and correlation identity instead of occurrence order or prompt substrings.
  • Splits ACP process, prompt, metadata, and bounded-buffer responsibilities into focused files below the production size cap.

Automation and Web workflows

  • Keeps target_kind authoritative and preserves Loop workspace identity, static inputs, and trigger input mappings through create, edit, clone, request, dispatch, and history paths.
  • Uses one authoritative Job Loop workspace across draft, form, validation, and request projection.
  • Exercises typed Job/Trigger deletion confirmation, explicit workspace switching, and independent browser network contexts for multi-page SSE recovery tests.
  • Extracts Loop editor state transitions into a focused hook owner without changing its public API.

Contracts, documentation, and QA

  • Regenerates OpenAPI and the native-tool catalog from the combined contracts.
  • Documents Agent-or-Loop Automation targets, workspace/input validation, full native-tool/HTTP/UDS coverage, and the CLI's narrower Agent-target authoring flags.
  • Reconciles the living QA report and affected scenario trackers with the final rebased behavior and clean teardown evidence.
  • Makes the sandbox E2E gate wait on the durable blocked-sandbox denial and side-effect evidence instead of transient fixture-authored progress text.
  • Keeps the Vercel site build independent of Go/Mage while CI Preflight, site validation, and make verify continue to own codegen integrity.

Data and migration

  • Hermes Bridge owns immutable global migration v2.
  • Automation owns the append-only global migration v3 for session-owned permission_log and token_stats cascades.
  • Declarative schema, Atlas history, sqlc output, fresh/reopen/previous-head checks, and targeted delete coverage remain aligned.

AGH Impact Audit

  • Native tools: existing IDs and risk semantics remain stable. The session list type filter, Automation Agent-or-Loop request schemas, generated descriptors, native catalog, API/UDS fallbacks, and contract tests are co-shipped.
  • Extensibility and hooks: typed ACP judge metadata crosses subprocess fixtures; Task settlement hooks preserve post-commit ordering; Automation Loop targets retain registry-backed workspace identity. Hermes bridge SDK/config lifecycle and bridge delivery contracts are unchanged by the rebase remediation.
  • Workspace data isolation: session catalog/delete paths remain workspace-scoped; workspace removal is serialized against session starts; Automation Loop targets validate global/workspace ownership; Task settlement and Loop wake retain the owning workspace_id across stores, events, API, Web caches, and SSE.
  • Official AGH skill: the bundled references document session filtering/removal, workspace reconciliation, Task parent settlement, and the public native-tool behavior shipped by the branch.

Release Notes

Bug Fixes

  • Preserve Automation, Hermes Bridge, and ACP diagnostic contracts through the main-branch rebase.
  • Keep session history deletion, restart identity recovery, workspace pruning, and explicit provider-model selection durable.
  • Settle Task hierarchies and dependent Loop wakes after commit without cancellation suppressing terminal publication.
  • Preserve typed Automation Loop targets and destructive-confirmation workflows across runtime and Web surfaces.

Documentation

  • Reconcile post-rebase QA evidence and document the complete Agent-or-Loop Automation target contract.
  • Normalize QA records so the complete branch diff passes whitespace validation.

QA

Final Status: automated gates and four independent runtime controls pass; provider-backed judge/Clear and consumer-saas-growth acceptance remain blocked by the Claude account session limit.

Coverage: 7 planned QA sessions settled — 4 Pass and 3 Blocked by the same typed external provider boundary. Session durability/deletion, missing-workspace pruning, Task parent rollup/Loop wake, and Automation Loop targets passed.

Issues: zero new confirmed product regressions in the completed controls; one external provider blocker and one multi-page SSE architecture follow-up.

Peer review: complete post-E2E round 4 and focused lint-remediation round 5 both returned SHIP with zero blockers. Accepted follow-ups are auxiliary Task-read recovery eligibility, a shared settlement-publication deadline, and the per-page HTTP/1.1 SSE connection budget.

Blocked / needs human: rerun the real-provider judge lifecycle, active Clear control, and full consumer-saas-growth playbook after the Claude session limit resets. Synthetic output cannot promote those controls.

Teardown: the isolated QA manifest records clean: true, no surviving daemon, browser, watcher, or tmux process, and a released daemon port.

Full report: 2026-07-14-consumer-saas-growth.md

Test plan

  • make verify — fresh complete monorepo gate after the final build-graph correction, explicit exit code 0
  • Vercel-like site production build with Go absent from PATH — 4/4 tasks and 1,608 generated pages
  • make test-e2e-runtime — complete daemon/runtime harness
  • make test-e2e-web — 75/75, zero unexpected, flaky, or skipped tests after the CI remediation
  • Focused blocked-sandbox E2E scenario — 5/5 repetitions
  • bunx turbo run lint typecheck test --filter=./packages/site — 50 files, 247 tests
  • Focused Go race suites for ACP, session, observer, Task, daemon, transcript, migration, and Automation owners
  • Focused Web Turbo lane — lint, typecheck, and 3,509 tests
  • Peer-review rounds 4 and 5 — SHIP, zero blockers
  • git diff --check origin/main...HEAD
  • Clean isolated QA teardown

Review order

  1. Global migration v3, session deletion, workspace removal, and restart recovery.
  2. ACP metadata/acpmock routing and Task settlement/publication ordering.
  3. Automation target projection, generated contracts, and Web request/form behavior.
  4. E2E specifications, public docs, and final QA evidence.

@vercel

vercel Bot commented Jul 14, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
agh-site Ready Ready Preview, Comment Jul 14, 2026 11:47pm

Request Review

@coderabbitai

coderabbitai Bot commented Jul 14, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 439 files, which is 139 over the limit of 300.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 30cbb853-ad76-465f-bb6a-0f23ec701750

📥 Commits

Reviewing files that changed from the base of the PR and between 4504cfa and 8fc8497.

⛔ Files ignored due to path filters (139)
  • docs/qa/bugs/BUG-20260713-automation-delete-no-confirmation.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-background-session-indicator-title.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-cross-workspace-session-return-hangs.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-cursor-agent-mode-unavailable.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-cursor-model-startup-contract.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-custom-loop-delete-missing.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-first-prompt-optimistic-stuck.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-goal-clear-generic-failure.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-goal-errors-expose-reason-code.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-goal-judge-unavailable.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-goal-judge-unconstrained-leaks-session.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-loop-automation-shown-as-agent.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-loop-automation-start-mismatch-late.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-loop-contract-goal-not-editable.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-loop-failure-hidden.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-loop-fork-internal-error.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-loop-preview-ignores-config.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-loop-watch-poll-error-stuck.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-missing-workspace-persists.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-needs-attention-recovery-hidden.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-new-session-modal-lingers.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-onboarding-stale-workspace-draft.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-parent-task-rollup-missing.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-session-user-message-reorders-or-disappears.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-stop-generation-local-stuck.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-stopped-session-goal-clear-fails.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-task-approval-duplicates-open-run.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-task-owner-cannot-clear.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-task-role-dispatch-repeats.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-task-role-session-never-starts.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-task-template-clears-draft.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-use-as-goal-inert.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260713-workspace-trigger-loop-submit-inert.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260714-session-delete-history-fk.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260714-task-create-waits-for-worker-session.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260714-task-named-events-stale.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260714-terminal-task-run-reported-orphan.md is excluded by !**/*.md
  • docs/qa/charters/CH-automation-crud-loop-target.md is excluded by !**/*.md
  • docs/qa/charters/CH-background-session-switch.md is excluded by !**/*.md
  • docs/qa/charters/CH-consumer-saas-growth-runtime.md is excluded by !**/*.md
  • docs/qa/charters/CH-cursor-agent-mode.md is excluded by !**/*.md
  • docs/qa/charters/CH-judge-session-attribution.md is excluded by !**/*.md
  • docs/qa/charters/CH-loop-goal-delete.md is excluded by !**/*.md
  • docs/qa/charters/CH-new-session-latency-title.md is excluded by !**/*.md
  • docs/qa/charters/CH-prune-missing-workspace.md is excluded by !**/*.md
  • docs/qa/charters/CH-session-message-delete-integrity.md is excluded by !**/*.md
  • docs/qa/charters/CH-task-template-draft.md is excluded by !**/*.md
  • docs/qa/charters/CH-task-tree-loop-rollup.md is excluded by !**/*.md
  • docs/qa/charters/CH-use-response-as-goal.md is excluded by !**/*.md
  • docs/qa/journeys/J-06-fork-and-edit.md is excluded by !**/*.md
  • docs/qa/journeys/J-complete-task-tree.md is excluded by !**/*.md
  • docs/qa/journeys/J-prune-missing-workspace.md is excluded by !**/*.md
  • docs/qa/reports/2026-07-13-automation-features.md is excluded by !**/*.md
  • docs/qa/reports/2026-07-14-consumer-saas-growth.md is excluded by !**/*.md
  • docs/qa/scenarios/GL-001.md is excluded by !**/*.md
  • docs/qa/scenarios/GL-003.md is excluded by !**/*.md
  • docs/qa/scenarios/GL-004.md is excluded by !**/*.md
  • docs/qa/scenarios/GL-005.md is excluded by !**/*.md
  • docs/qa/scenarios/GL-006.md is excluded by !**/*.md
  • docs/qa/scenarios/GL-008.md is excluded by !**/*.md
  • docs/qa/scenarios/GL-019.md is excluded by !**/*.md
  • docs/qa/scenarios/GL-judge-session-contract.md is excluded by !**/*.md
  • docs/qa/scenarios/GL-use-response-as-goal.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-006.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-007.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-017.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-021.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-024.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-action-failure-detail.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-delete-custom-loop.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-task-rollup-wakes-loop.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-toggle-loop-goal.md is excluded by !**/*.md
  • docs/qa/scenarios/RT-004.md is excluded by !**/*.md
  • docs/qa/scenarios/RT-011.md is excluded by !**/*.md
  • docs/qa/scenarios/RT-012.md is excluded by !**/*.md
  • docs/qa/scenarios/RT-cursor-agent-mode.md is excluded by !**/*.md
  • docs/qa/scenarios/RT-missing-workspace-pruned.md is excluded by !**/*.md
  • docs/qa/scenarios/RT-new-session-fast-feedback.md is excluded by !**/*.md
  • docs/qa/scenarios/RT-session-auto-title.md is excluded by !**/*.md
  • docs/qa/scenarios/RT-session-delete-owned-history.md is excluded by !**/*.md
  • docs/qa/scenarios/RT-session-message-reload.md is excluded by !**/*.md
  • docs/qa/scenarios/RT-workspace-active-session-badge.md is excluded by !**/*.md
  • docs/qa/scenarios/TA-004.md is excluded by !**/*.md
  • docs/qa/scenarios/TA-016.md is excluded by !**/*.md
  • docs/qa/scenarios/TA-033.md is excluded by !**/*.md
  • docs/qa/scenarios/TA-041.md is excluded by !**/*.md
  • docs/qa/scenarios/TA-069.md is excluded by !**/*.md
  • docs/qa/scenarios/TA-automation-crud-loop-target.md is excluded by !**/*.md
  • docs/qa/scenarios/TA-parent-rollup-completion.md is excluded by !**/*.md
  • docs/qa/scenarios/TA-task-create-async-activation.md is excluded by !**/*.md
  • docs/qa/scenarios/TA-task-role-session-activation.md is excluded by !**/*.md
  • docs/qa/scenarios/TA-task-template-preserves-draft.md is excluded by !**/*.md
  • docs/qa/scenarios/TA-terminal-run-inspect.md is excluded by !**/*.md
  • internal/store/globaldb/schema/migrations/atlas.sum is excluded by !**/*.sum, !**/*.sum
  • internal/testutil/acpmock/testdata/bridge_ingress_fixture.json is excluded by !**/*.json
  • internal/testutil/acpmock/testdata/browser_skills_context_fixture.json is excluded by !**/*.json
  • internal/testutil/acpmock/testdata/goal_command_fixture.json is excluded by !**/*.json
  • internal/testutil/acpmock/testdata/memory_recall_fixture.json is excluded by !**/*.json
  • internal/testutil/acpmock/testdata/network_collaboration_fixture.json is excluded by !**/*.json
  • internal/tools/builtin/testdata/native-tool-catalog.json is excluded by !**/*.json
  • openapi/agh.json is excluded by !**/*.json
  • packages/site/content/runtime/cli-reference/session/list.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/core/automation/index.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/core/automation/jobs.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/core/automation/triggers.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/core/autonomy/task-runs-and-leases.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/core/loops/configure.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/core/sessions/index.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/core/sessions/lifecycle.mdx is excluded by !**/*.mdx
  • skills/agh/references/native-tools.md is excluded by !**/*.md
  • skills/agh/references/runtime-operations.md is excluded by !**/*.md
  • skills/agh/references/tasks-and-orchestration.md is excluded by !**/*.md
  • turbo.json is excluded by !**/*.json
  • web/e2e/__tests__/dashboard.spec.ts is excluded by !web/e2e/**
  • web/e2e/__tests__/jobs-hardening.spec.ts is excluded by !web/e2e/**
  • web/e2e/__tests__/sandbox.spec.ts is excluded by !web/e2e/**
  • web/e2e/__tests__/tasks-hardening.spec.ts is excluded by !web/e2e/**
  • web/e2e/__tests__/triggers-hardening.spec.ts is excluded by !web/e2e/**
  • web/e2e/fixtures/__tests__/selectors.test.ts is excluded by !**/fixtures/**, !web/e2e/**
  • web/e2e/fixtures/selectors.ts is excluded by !**/fixtures/**, !web/e2e/**
  • web/src/generated/agh-openapi.d.ts is excluded by !**/generated/**, !**/generated/**, !**/*.d.ts
  • web/src/systems/automation/components/stories/automation-delete-action.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/automation/components/stories/automation-detail-panel.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/automation/components/stories/automation-job-form.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/automation/components/stories/automation-trigger-form.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/automation/components/stories/job-form/job-preview.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/automation/components/stories/trigger-form/trigger-preview.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/loops/components/stories/loop-configure.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/loops/components/stories/loop-delete-action.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/loops/components/stories/loop-detail.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/loops/components/stories/loop-run-form.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/loops/components/stories/loop-run-page.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/onboarding/components/stories/onboarding-steps.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/runtime/components/stories/app-sidebar.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/session/components/assistant-ui/stories/session-thread.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/session/components/stories/session-create-dialog.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/tasks/components/stories/task-editor-modal.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/tasks/components/stories/task-run-detail.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/tasks/components/stories/tasks-detail-header.stories.tsx is excluded by !**/*.stories.tsx
📒 Files selected for processing (439)
  • extensions/dev-cycle/import_tasks.go
  • extensions/dev-cycle/import_tasks_parser.go
  • extensions/dev-cycle/provider_test.go
  • extensions/dev-cycle/rpc.go
  • extensions/dev-cycle/runtime.go
  • internal/acp/agent_event.go
  • internal/acp/agent_event_tool.go
  • internal/acp/agent_process.go
  • internal/acp/agent_process_prompt.go
  • internal/acp/client.go
  • internal/acp/client_test.go
  • internal/acp/config_options.go
  • internal/acp/handlers.go
  • internal/acp/handlers_session_state.go
  • internal/acp/handlers_test.go
  • internal/acp/locked_buffer.go
  • internal/acp/process_config_state.go
  • internal/acp/prompt_judge_meta.go
  • internal/acp/prompt_meta.go
  • internal/acp/request_contract_test.go
  • internal/acp/session_config_negotiation.go
  • internal/acp/start.go
  • internal/acp/start_process.go
  • internal/acp/start_session.go
  • internal/acp/types.go
  • internal/api/contract/contract.go
  • internal/api/contract/contract_test.go
  • internal/api/contract/loops.go
  • internal/api/contract/prompt.go
  • internal/api/contract/session_catalog.go
  • internal/api/core/conversions_acp_observations.go
  • internal/api/core/errors.go
  • internal/api/core/errors_test.go
  • internal/api/core/handler_edge_cases_test.go
  • internal/api/core/interfaces.go
  • internal/api/core/loops_test.go
  • internal/api/core/memory_workspace_test.go
  • internal/api/core/session_catalog.go
  • internal/api/core/session_catalog_interfaces.go
  • internal/api/core/session_catalog_stream.go
  • internal/api/core/session_manager_stub_test.go
  • internal/api/core/test_helpers_test.go
  • internal/api/core/workspaces.go
  • internal/api/httpapi/handlers_error_test.go
  • internal/api/httpapi/handlers_test.go
  • internal/api/httpapi/prompt.go
  • internal/api/httpapi/session_routes.go
  • internal/api/spec/loop_schemas.go
  • internal/api/spec/loops_test.go
  • internal/api/spec/session_catalog.go
  • internal/api/spec/spec.go
  • internal/api/spec/spec_test.go
  • internal/api/testutil/session_stub.go
  • internal/api/udsapi/handlers_test.go
  • internal/api/udsapi/prompt.go
  • internal/api/udsapi/session_routes.go
  • internal/automation/resource_test.go
  • internal/automation/trigger.go
  • internal/automation/trigger_registration.go
  • internal/cli/client_test.go
  • internal/cli/session_catalog_client.go
  • internal/cli/session_list.go
  • internal/cli/session_test.go
  • internal/codegen/storeschema/atlas.go
  • internal/codegen/storeschema/atlas_test.go
  • internal/daemon/boot.go
  • internal/daemon/boot_components.go
  • internal/daemon/daemon.go
  • internal/daemon/daemon_test.go
  • internal/daemon/loop_action_failure.go
  • internal/daemon/loop_action_failure_test.go
  • internal/daemon/loop_action_registry_boot.go
  • internal/daemon/loop_action_runtime.go
  • internal/daemon/loop_api_fork.go
  • internal/daemon/loop_api_publish.go
  • internal/daemon/loop_api_runs.go
  • internal/daemon/loop_api_runs_test.go
  • internal/daemon/loop_api_service.go
  • internal/daemon/loop_goal_command_definition.go
  • internal/daemon/loop_goal_command_e2e_integration_test.go
  • internal/daemon/loop_goal_command_start.go
  • internal/daemon/loop_goal_command_test.go
  • internal/daemon/loop_goal_executor.go
  • internal/daemon/loop_goal_executor_test.go
  • internal/daemon/loop_goal_stop.go
  • internal/daemon/loop_judge_execution.go
  • internal/daemon/loop_resources_test.go
  • internal/daemon/loop_runtime_adapters.go
  • internal/daemon/loop_runtime_adapters_test.go
  • internal/daemon/model_catalog_test.go
  • internal/daemon/native_session_list.go
  • internal/daemon/native_tools_test.go
  • internal/daemon/scheduler_runtime_test.go
  • internal/daemon/session_manager_deps.go
  • internal/daemon/session_manager_factory.go
  • internal/daemon/task_role_prompt.go
  • internal/daemon/task_role_runtime.go
  • internal/daemon/task_role_runtime_test.go
  • internal/daemon/task_role_sessions.go
  • internal/daemon/task_runtime.go
  • internal/daemon/task_runtime_boot.go
  • internal/daemon/task_runtime_boot_roles.go
  • internal/daemon/task_runtime_recovery.go
  • internal/extension/tool_runtime.go
  • internal/extension/tool_runtime_test.go
  • internal/loop/action_failure.go
  • internal/loop/action_schema.go
  • internal/loop/coordinator_failure.go
  • internal/loop/coordinator_watch.go
  • internal/loop/gate/evaluator_judge_human.go
  • internal/loop/gate/evaluator_test.go
  • internal/loop/gate/judge.go
  • internal/loop/gate/types.go
  • internal/loop/goal/control_revoked.go
  • internal/loop/goal/executor.go
  • internal/loop/goal/executor_test.go
  • internal/loop/goal/recovery.go
  • internal/loop/goal/result.go
  • internal/loop/goal/route.go
  • internal/loop/goal/types_judge.go
  • internal/loop/goal_stop.go
  • internal/loop/service.go
  • internal/loop/service_control.go
  • internal/loop/service_goal_cleanup.go
  • internal/loop/service_inline_clear.go
  • internal/loop/service_options.go
  • internal/loop/service_start.go
  • internal/loop/service_test.go
  • internal/loop/service_types.go
  • internal/memory/catalog_migration_test.go
  • internal/modelcatalog/authoritative_provider_models.go
  • internal/modelcatalog/hardcut_residue_test.go
  • internal/modelcatalog/service.go
  • internal/modelcatalog/service_test.go
  • internal/modelcatalog/sources.go
  • internal/modelcatalog/sources_test.go
  • internal/modelcatalog/types.go
  • internal/observe/reconcile.go
  • internal/observe/reconcile_test.go
  • internal/session/catalog_page.go
  • internal/session/manager.go
  • internal/session/manager_busy_input.go
  • internal/session/manager_busy_input_test.go
  • internal/session/manager_create_prepare.go
  • internal/session/manager_delete.go
  • internal/session/manager_delete_staging.go
  • internal/session/manager_delete_test.go
  • internal/session/manager_durable_event.go
  • internal/session/manager_finalization.go
  • internal/session/manager_goal_commands.go
  • internal/session/manager_goal_snapshot_event.go
  • internal/session/manager_helpers.go
  • internal/session/manager_hooks_test.go
  • internal/session/manager_input_dispatch.go
  • internal/session/manager_integration_test.go
  • internal/session/manager_lifecycle.go
  • internal/session/manager_managed_input_submit.go
  • internal/session/manager_options.go
  • internal/session/manager_prompt.go
  • internal/session/manager_prompt_input_event.go
  • internal/session/manager_prompt_submit.go
  • internal/session/manager_start.go
  • internal/session/manager_start_env.go
  • internal/session/manager_stop_finalization.go
  • internal/session/manager_test.go
  • internal/session/manager_transition.go
  • internal/session/manager_transition_test.go
  • internal/session/manager_types.go
  • internal/session/query.go
  • internal/session/query_test.go
  • internal/session/runtime_model_preflight.go
  • internal/session/session.go
  • internal/session/session_catalog_stream.go
  • internal/session/session_process_state.go
  • internal/session/session_stream_broadcast_test.go
  • internal/session/session_title.go
  • internal/session/stop_reason.go
  • internal/session/synthetic_prompt.go
  • internal/session/tool_gateway.go
  • internal/session/tool_gateway_test.go
  • internal/session/transcript_test.go
  • internal/store/globaldb/global_db_bridge_delivery_test.go
  • internal/store/globaldb/global_db_goal_stop.go
  • internal/store/globaldb/global_db_goal_turn_runtime_integration_test.go
  • internal/store/globaldb/global_db_loop_events.go
  • internal/store/globaldb/global_db_session_delete.go
  • internal/store/globaldb/global_db_session_index_test.go
  • internal/store/globaldb/global_db_session_page.go
  • internal/store/globaldb/global_db_session_test.go
  • internal/store/globaldb/global_db_task_claim_complete.go
  • internal/store/globaldb/global_db_task_claim_lease.go
  • internal/store/globaldb/global_db_task_claim_test.go
  • internal/store/globaldb/global_db_task_coordinator.go
  • internal/store/globaldb/global_db_task_coordinator_failure.go
  • internal/store/globaldb/global_db_task_coordinator_runtime.go
  • internal/store/globaldb/global_db_task_coordinator_settlement.go
  • internal/store/globaldb/global_db_task_event_tx_test.go
  • internal/store/globaldb/global_db_task_parent_rollup.go
  • internal/store/globaldb/global_db_task_runs.go
  • internal/store/globaldb/global_db_test.go
  • internal/store/globaldb/queries/global_small.sql
  • internal/store/globaldb/schema/definitions/20_sessions.sql
  • internal/store/globaldb/schema/definitions/21_permissions.sql
  • internal/store/globaldb/schema/migrations/00003_schema.sql
  • internal/store/globaldb/sqlcgen/global_small.sql.go
  • internal/store/migrate_streams_test.go
  • internal/store/session_catalog_page.go
  • internal/store/store.go
  • internal/task/completion_settlement.go
  • internal/task/completion_settlement_publication.go
  • internal/task/coordinator.go
  • internal/task/coordinator_failure.go
  • internal/task/diagnostics.go
  • internal/task/hooks.go
  • internal/task/hooks_integration_test.go
  • internal/task/hooks_test.go
  • internal/task/inspect_test.go
  • internal/task/interfaces.go
  • internal/task/interfaces_integration_test.go
  • internal/task/lease_manager.go
  • internal/task/lease_test.go
  • internal/task/manager_coordinator_run.go
  • internal/task/manager_coordinator_run_publication.go
  • internal/task/manager_integration_test.go
  • internal/task/manager_run_completion.go
  • internal/task/manager_task_execution.go
  • internal/task/manager_test.go
  • internal/testutil/acpmock/cmd/acpmock-driver/main.go
  • internal/testutil/acpmock/cmd/acpmock-driver/main_test.go
  • internal/testutil/acpmock/driver_test.go
  • internal/testutil/acpmock/fixture.go
  • internal/testutil/acpmock/fixture_prompt_meta.go
  • internal/testutil/acpmock/fixture_test.go
  • internal/testutil/acpmock/fixture_types.go
  • internal/testutil/e2e/runtime_harness_integration_test.go
  • internal/tools/builtin/builtin_test.go
  • internal/tools/builtin/sessions.go
  • internal/tools/errors.go
  • internal/tools/operator_failure.go
  • internal/transcript/agent_event_codec.go
  • internal/transcript/canonical_payload.go
  • internal/transcript/redaction.go
  • internal/transcript/transcript.go
  • internal/transcript/transcript_test.go
  • internal/transcript/ui_input_messages.go
  • internal/transcript/ui_messages.go
  • internal/workspace/resolver.go
  • internal/workspace/resolver_crud.go
  • internal/workspace/resolver_integration_test.go
  • internal/workspace/resolver_reconcile.go
  • internal/workspace/resolver_test.go
  • internal/workspace/unregister_preparation.go
  • web/src/components/assistant-ui/__tests__/session-thread.test.tsx
  • web/src/components/assistant-ui/hooks/use-session-composer-state.ts
  • web/src/components/assistant-ui/message-actions.logic.ts
  • web/src/components/assistant-ui/message-actions.tsx
  • web/src/components/assistant-ui/session-composer.tsx
  • web/src/components/assistant-ui/session-thread.tsx
  • web/src/hooks/routes/__tests__/use-app-layout.test.tsx
  • web/src/hooks/routes/__tests__/use-home-page.test.tsx
  • web/src/hooks/routes/__tests__/use-loop-detail.test.tsx
  • web/src/hooks/routes/__tests__/use-session-workspace-guard.test.tsx
  • web/src/hooks/routes/__tests__/use-task-detail-page.test.tsx
  • web/src/hooks/routes/__tests__/use-task-run-page.test.tsx
  • web/src/hooks/routes/use-app-layout.ts
  • web/src/hooks/routes/use-automation-jobs-page.ts
  • web/src/hooks/routes/use-automation-page-base.ts
  • web/src/hooks/routes/use-automation-triggers-page.ts
  • web/src/hooks/routes/use-home-page.ts
  • web/src/hooks/routes/use-loop-detail.ts
  • web/src/hooks/routes/use-loop-run-page.ts
  • web/src/hooks/routes/use-session-topbar-slot.tsx
  • web/src/hooks/routes/use-session-workspace-guard.ts
  • web/src/hooks/routes/use-task-create-route-state.ts
  • web/src/hooks/routes/use-task-detail-page.ts
  • web/src/hooks/routes/use-task-run-page.ts
  • web/src/routes/__tests__/-_app.test.tsx
  • web/src/routes/_app/-agent-session-route-loader.ts
  • web/src/routes/_app/-app-preload.ts
  • web/src/routes/_app/-app-shell.tsx
  • web/src/routes/_app/-loops-preload.ts
  • web/src/routes/_app/-route-preload.ts
  • web/src/routes/_app/__tests__/-agent-session-return.router.integration.test.tsx
  • web/src/routes/_app/__tests__/-agents.$name.sessions.$id.test.tsx
  • web/src/routes/_app/__tests__/-app-shell.test.tsx
  • web/src/routes/_app/__tests__/-jobs-triggers.create.e2e.test.tsx
  • web/src/routes/_app/__tests__/-jobs-triggers.integration.test.tsx
  • web/src/routes/_app/__tests__/-route-preloading.integration.test.tsx
  • web/src/routes/_app/__tests__/-tasks.new.e2e.test.tsx
  • web/src/routes/_app/agents.$name.sessions.$id.tsx
  • web/src/routes/_app/loop-runs.$runId.tsx
  • web/src/routes/_app/loops.$name.configure.tsx
  • web/src/routes/_app/loops.$name.run.tsx
  • web/src/routes/_app/loops.$name.tsx
  • web/src/routes/_app/tasks.$id.runs.$runId.tsx
  • web/src/systems/agent/components/agent-heartbeat-ops.tsx
  • web/src/systems/agent/components/agent-overview-tab.tsx
  • web/src/systems/agent/components/agent-sessions-list.tsx
  • web/src/systems/agent/hooks/__tests__/use-agent-sessions.test.tsx
  • web/src/systems/automation/components/__tests__/automation-detail-panel.test.tsx
  • web/src/systems/automation/components/__tests__/automation-editor-dialog.test.tsx
  • web/src/systems/automation/components/__tests__/automation-job-form.test.tsx
  • web/src/systems/automation/components/__tests__/automation-list-panel.test.tsx
  • web/src/systems/automation/components/__tests__/automation-run-history.test.tsx
  • web/src/systems/automation/components/__tests__/automation-trigger-form.test.tsx
  • web/src/systems/automation/components/automation-delete-action.tsx
  • web/src/systems/automation/components/automation-detail-panel.tsx
  • web/src/systems/automation/components/automation-detail-sections.tsx
  • web/src/systems/automation/components/automation-editor-dialog.tsx
  • web/src/systems/automation/components/automation-job-form.tsx
  • web/src/systems/automation/components/automation-list-panel.tsx
  • web/src/systems/automation/components/automation-request-payload.tsx
  • web/src/systems/automation/components/automation-run-history.tsx
  • web/src/systems/automation/components/automation-target-details.tsx
  • web/src/systems/automation/components/automation-trigger-form.tsx
  • web/src/systems/automation/components/job-form/preview/job-preview.tsx
  • web/src/systems/automation/components/job-form/preview/payload-card.tsx
  • web/src/systems/automation/components/job-form/preview/run-digest-card.tsx
  • web/src/systems/automation/components/job-form/preview/summary-card.tsx
  • web/src/systems/automation/components/trigger-form/preview/trigger-preview.tsx
  • web/src/systems/automation/components/trigger-form/target-step.tsx
  • web/src/systems/automation/hooks/use-automation-job-form.ts
  • web/src/systems/automation/hooks/use-automation-trigger-form.ts
  • web/src/systems/automation/index.ts
  • web/src/systems/automation/lib/__tests__/automation-drafts.test.ts
  • web/src/systems/automation/lib/__tests__/automation-requests.test.ts
  • web/src/systems/automation/lib/automation-drafts.ts
  • web/src/systems/automation/lib/automation-requests.ts
  • web/src/systems/automation/lib/automation-target.ts
  • web/src/systems/automation/lib/job-preview.ts
  • web/src/systems/automation/lib/trigger-preview.ts
  • web/src/systems/loops/adapters/__tests__/loops-api.test.ts
  • web/src/systems/loops/adapters/loops-config-api.ts
  • web/src/systems/loops/components/__tests__/loop-configure-sheet.test.tsx
  • web/src/systems/loops/components/__tests__/loop-detail.test.tsx
  • web/src/systems/loops/components/__tests__/loop-editor.test.tsx
  • web/src/systems/loops/components/__tests__/loop-run-form.test.tsx
  • web/src/systems/loops/components/__tests__/loop-run-overrides.test.tsx
  • web/src/systems/loops/components/__tests__/loop-run-page.test.tsx
  • web/src/systems/loops/components/__tests__/loop-target-fields.test.tsx
  • web/src/systems/loops/components/configure/loop-configure-limits.tsx
  • web/src/systems/loops/components/configure/loop-configure-sheet.tsx
  • web/src/systems/loops/components/detail/loop-delete-action.tsx
  • web/src/systems/loops/components/detail/loop-detail.tsx
  • web/src/systems/loops/components/detail/loop-limits-panel.tsx
  • web/src/systems/loops/components/editor/loop-editor-contract.tsx
  • web/src/systems/loops/components/editor/loop-editor-inspector.tsx
  • web/src/systems/loops/components/editor/loop-editor-toolbar.tsx
  • web/src/systems/loops/components/editor/loop-editor.tsx
  • web/src/systems/loops/components/run-form/loop-run-form.tsx
  • web/src/systems/loops/components/run-form/loop-run-overrides.tsx
  • web/src/systems/loops/components/run-form/loop-run-preview.tsx
  • web/src/systems/loops/components/run-page/loop-failure-detail.tsx
  • web/src/systems/loops/components/run-page/loop-node-failure-detail.tsx
  • web/src/systems/loops/components/run-page/loop-node-row.tsx
  • web/src/systems/loops/components/target/loop-target-fields.tsx
  • web/src/systems/loops/hooks/__tests__/use-loop-actions.test.tsx
  • web/src/systems/loops/hooks/__tests__/use-loop-stream.test.tsx
  • web/src/systems/loops/hooks/use-loop-actions.ts
  • web/src/systems/loops/hooks/use-loop-configure.ts
  • web/src/systems/loops/hooks/use-loop-editor-state.ts
  • web/src/systems/loops/hooks/use-loop-editor.ts
  • web/src/systems/loops/hooks/use-loop-run-form.ts
  • web/src/systems/loops/hooks/use-loop-stream.ts
  • web/src/systems/loops/hooks/use-loop-target-catalog.ts
  • web/src/systems/loops/hooks/use-loops.ts
  • web/src/systems/loops/index.ts
  • web/src/systems/loops/lib/__tests__/loop-config-draft.test.ts
  • web/src/systems/loops/lib/__tests__/loop-events.test.ts
  • web/src/systems/loops/lib/__tests__/loop-limits.test.ts
  • web/src/systems/loops/lib/__tests__/loop-overrides.test.ts
  • web/src/systems/loops/lib/action-failure.ts
  • web/src/systems/loops/lib/loop-config-draft.ts
  • web/src/systems/loops/lib/loop-editor-definition.ts
  • web/src/systems/loops/lib/loop-effective-config.ts
  • web/src/systems/loops/lib/loop-events.ts
  • web/src/systems/loops/lib/loop-limits.ts
  • web/src/systems/loops/lib/loop-overrides.ts
  • web/src/systems/loops/lib/loop-target-availability.ts
  • web/src/systems/loops/lib/loop-timeline.ts
  • web/src/systems/loops/mocks/fixtures.ts
  • web/src/systems/loops/mocks/handlers.ts
  • web/src/systems/loops/types.ts
  • web/src/systems/network/hooks/__tests__/use-network-channel-actions.test.tsx
  • web/src/systems/network/hooks/use-network-channel-actions.ts
  • web/src/systems/network/hooks/use-send-network-message.ts
  • web/src/systems/onboarding/components/step-workspaces.tsx
  • web/src/systems/onboarding/hooks/__tests__/use-onboarding-workspaces.test.tsx
  • web/src/systems/onboarding/hooks/use-onboarding-workspaces.ts
  • web/src/systems/runtime/components/__tests__/app-sidebar.test.tsx
  • web/src/systems/runtime/components/app-sidebar.tsx
  • web/src/systems/session/components/__tests__/session-chat-runtime-provider.test.tsx
  • web/src/systems/session/components/__tests__/session-create-dialog.test.tsx
  • web/src/systems/session/components/goal/session-goal-command-error-notice.tsx
  • web/src/systems/session/components/session-create-dialog.tsx
  • web/src/systems/session/hooks/__tests__/use-session-actions.test.tsx
  • web/src/systems/session/hooks/__tests__/use-session-catalog-streams.test.tsx
  • web/src/systems/session/hooks/__tests__/use-session-create-dialog.test.tsx
  • web/src/systems/session/hooks/__tests__/use-workspace-session-activity.test.ts
  • web/src/systems/session/hooks/use-session-actions.ts
  • web/src/systems/session/hooks/use-session-catalog-streams.ts
  • web/src/systems/session/hooks/use-session-chat-runtime.ts
  • web/src/systems/session/hooks/use-session-create-dialog.ts
  • web/src/systems/session/hooks/use-session-live-tail.ts
  • web/src/systems/session/hooks/use-workspace-session-activity.ts
  • web/src/systems/session/index.ts
  • web/src/systems/session/lib/__tests__/session-goal-chat-transport.test.ts
  • web/src/systems/session/lib/query-keys.ts
  • web/src/systems/session/lib/session-display-title.ts
  • web/src/systems/session/lib/session-goal-chat-transport.ts
  • web/src/systems/session/lib/session-list-query.ts
  • web/src/systems/session/lib/session-model-selection.ts
  • web/src/systems/session/lib/session-query-invalidation.ts
  • web/src/systems/session/lib/session-return-navigation.ts
  • web/src/systems/session/lib/session-thread-read-model.ts
  • web/src/systems/session/stores/session-store.ts
  • web/src/systems/session/types.ts
  • web/src/systems/tasks/adapters/__tests__/tasks-api.test.ts
  • web/src/systems/tasks/adapters/task-run-api.ts
  • web/src/systems/tasks/adapters/tasks-api.ts
  • web/src/systems/tasks/components/__tests__/task-run-detail-header.test.tsx
  • web/src/systems/tasks/components/__tests__/tasks-detail-header.test.tsx
  • web/src/systems/tasks/components/task-run-detail-header.tsx
  • web/src/systems/tasks/components/tasks-detail-header-sections.tsx
  • web/src/systems/tasks/components/use-tasks-create-modal-form.ts
  • web/src/systems/tasks/hooks/__tests__/use-task-actions.test.tsx
  • web/src/systems/tasks/hooks/__tests__/use-task-stream.test.tsx
  • web/src/systems/tasks/hooks/task-query-invalidation.ts
  • web/src/systems/tasks/hooks/use-task-actions.ts
  • web/src/systems/tasks/hooks/use-task-run-recovery.ts
  • web/src/systems/tasks/hooks/use-task-stream.ts
  • web/src/systems/tasks/index.ts
  • web/src/systems/tasks/lib/__tests__/task-editor.test.ts
  • web/src/systems/tasks/lib/__tests__/task-formatters.test.ts
  • web/src/systems/tasks/lib/task-editor.ts
  • web/src/systems/tasks/lib/task-formatters.ts
  • web/src/systems/tasks/lib/task-run-recovery.ts
  • web/src/systems/tasks/types.ts
  • web/src/test/route-options.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch qa-fixes

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

@github-actions

github-actions Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

React Doctor found 4 new issues in 4 files · 3 errors & 1 warning · score 83 / 100 (Needs work) · 0 fixed · vs main

Errors

1 warning

src/systems/loops/lib/action-failure.ts

  • ⚠️ L3 Zod 3 schema API breaks in Zod 4 zod-v4-no-deprecated-schema-apis

Reviewed by React Doctor for commit 8fc8497. See inline comments for fixes.

@pedronauck pedronauck changed the title fix: harden automation and session lifecycle reliability fix: preserve automation reliability across Hermes rebase Jul 14, 2026
@@ -101,11 +106,9 @@ export function useAutomationTriggersPage(
}

triggerSubmitInFlightRef.current = true;
setSubmitError(null);
try {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

React Doctor · react-hooks-js/todo (error)

This component misses React Compiler's automatic memoization & re-renders more than it should. Rewrite the flagged code so the compiler can optimize it.

Fix → Todo: (BuildHIR::lowerStatement) Handle TryStatement with a finalizer ('finally') clause

Docs

const draft = resolveTaskCreateDraft(draftState, templateId, draftKey, createDraftWorkspaceId);

useEffect(() => {
setDraftState(current => {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

React Doctor · react-hooks-js/set-state-in-effect (error)

This component misses React Compiler's automatic memoization & re-renders more than it should: Calling setState synchronously within an effect can trigger cascading renders. Rewrite the flagged code so the compiler can optimize it.

Fix → Effects are intended to synchronize state between React and external systems such as manually updating the DOM, state management libraries, or other platform APIs. In general, the body of an effect should do one or both of the following:

  • Update external systems with the latest state from React.
  • Subscribe for updates from some external system, calling setState in a callback function when external state changes.

Calling setState synchronously within an effect body causes cascading renders that can hurt performance, and is not recommended. (https://react.dev/learn/you-might-not-need-an-effect).

Docs

submissionRef.current = true;
setIsSubmitting(true);
setError(null);
try {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

React Doctor · react-hooks-js/todo (error)

This component misses React Compiler's automatic memoization & re-renders more than it should. Rewrite the flagged code so the compiler can optimize it.

Fix → Todo: (BuildHIR::lowerStatement) Handle TryStatement with a finalizer ('finally') clause

Docs

@@ -0,0 +1,23 @@
import { z } from "zod";

const loopActionFailureSchema = z

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

React Doctor · react-doctor/zod-v4-no-deprecated-schema-apis (warning)

This Zod 3 schema API changed in Zod 4, so this schema can fail after the upgrade.

Fix → Switch to the Zod 4 versions: top-level factories like z.enum(), object helpers like z.strictObject(), the new z.function({ input, output }) form, and explicit key/value schemas for z.record().

Docs

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.

1 participant