Skip to content

feat: add complete Loop node lifecycle - #305

Merged
pedronauck merged 1 commit into
mainfrom
feature/loop-node-lifecycle-final
Aug 4, 2026
Merged

pedronauck merged 1 commit into
mainfrom
feature/loop-node-lifecycle-final

Conversation

@pedronauck

Copy link
Copy Markdown
Member

Summary

This PR completes the Loop node lifecycle and failure contract as one landing change. It gives Loop authors a declarative failure vocabulary, gives operators durable repair controls, and gives agents equivalent structured interfaces across HTTP, UDS, CLI, native tools, and MCP-projected Host API methods.

The implementation consolidates the previously reviewed stacked changes into one commit on top of the current main, incorporates the remediation from the earlier review rounds, and includes the externalized Loop-output hydration work from #286. Marco Aurélio (magoamz) is credited as a co-author on the commit.

Fixes #285.
Supersedes #286.

Why

The existing Loop engine owned the outer goal/act/verify lifecycle but did not have a complete contract for failure inside one node. A transient transport failure could escalate an entire generation, expensive agent work could restart instead of continue, waits and sick dependencies could become invisible, and operators lacked precise controls for pause, repair, resume, quarantine, requeue, cooperative cancellation, and immediate kill.

This change makes those states explicit, durable, observable, and repairable without requiring the Web UI. The undeclared default remains safe: failures escalate to generation repair rather than disappearing silently.

What changes

Failure classification and planning

  • Adds a closed failure-class model for transport, payload-declared, quality rejection, authoring, cancellation, attempt timeout, budget exhaustion, and target-unavailable failures.
  • Detects failure declared inside successful-looking payloads and preserves sanitized remediation hints.
  • Applies one fixed precedence chain across node families: automatic retry → error route → effects → generation repair.
  • Supports explicit error routes or explicit absorption (allow_fail), with forward-only and mutually exclusive authoring rules.
  • Keeps expensive nodes safe: agents and sub-loops never blind-retry from family defaults; an authored retry continues from the latest progress checkpoint when available.
  • Adds attempt-scoped timeouts and total deadlines only when authored. There is still no default wall-clock death.

Durable lifecycle state

  • Persists attempts, retry timing, epoch fences, controls, waits, admission claims, effect deliveries, quarantine context, attention state, and cancel provenance.
  • Uses the existing scheduler cycle for retry, deadline, wait, and escalation due-times; no second timer service is introduced.
  • Uses a per-cell epoch as the stale-work fence so superseded retries and timers are dropped deterministically.
  • Adds durable waits for time, condition, or event input, including validated resume payloads, ahead-arrival policy, optional expiry, escalation, and routing.
  • Adds node pause/resume, reset/immediate resume modes, quarantine/requeue, and a cooperative cancel state machine.
  • Splits run and node cancel from immediate kill; the former drains safely, while the latter closes immediately and suppresses node-trigger effects.

Long-running supervision and recovery

  • Removes the hidden elapsed-time kill path for Loop-bound sessions.
  • Defines liveness from real evidence: streamed activity, in-flight work, and transport/process state.
  • Flags prolonged silence for attention without killing work.
  • Resumes confirmed-dead agent work from the latest checkpoint, bounded by a progress-reset streak and protected against cancel/death races.
  • Keeps paused, waiting, awaiting-approval, and quarantined cells out of false stall/no-progress calculations.

Target health, quarantine, and watch admission

  • Adds a Loop-specific target breaker keyed by workspace, family, and target; only transport-class failures count against it.
  • Fails open-target attempts quickly with target_unavailable while independent lanes continue.
  • Redirects repeated same-node failure from run death to node quarantine with complete sanitized repair context.
  • Adds durable watch-event admission claims: one stable event identity produces one run, while redelivery produces visible suppression.
  • Makes event_key mandatory for extension watch sources and rejects invalid identity before a run starts.

Effects and lifecycle events

  • Adds node and terminal on_* effects for structured event emission and normal tool invocation.
  • Writes effects into a same-transaction outbox and drains them after commit with deterministic delivery IDs.
  • Keeps delivery fail-open, observe-only, workspace-bound, and at-least-once; individual effect failures cannot rewrite Loop state.
  • Extends lifecycle event and hook payloads with classification, disposition, attempt, target, provenance, and delivery identity.

Authoring and configuration

  • Extends compozy.loop/v1 with retry backoff/non-retryable rules, deadlines, payload result contracts, error policies, effects, wait nodes, expiry policy, and on_parent_close.
  • Adds blocking lint rules for invalid routes, retry family violations, impossible timing, malformed effects/waits, and watch sources without stable identity.
  • Adds warnings for dead error routes, unknown effect tools, unhandled wait expiry, high predicate cost, and risky agent retry caps.
  • Adds validated lifecycle defaults under loops.defaults.delivery, loops.defaults.watch, and daemon-global loops.breaker.
  • Makes supported scalar configuration paths manageable through the existing config CLI/tool surface and exposes effective values and sources through Loop inspection.

Operator and agent surfaces

  • Adds HTTP and UDS routes for run cancel/kill, node pause/resume/cancel/kill/requeue, and lifecycle inventories.
  • Adds CLI verbs:
    • compozy loop cancel|kill --run-id ...
    • compozy loop node pause|resume|cancel|kill|requeue ...
    • compozy loop nodes --state waiting|quarantined|attention|retrying ...
  • Adds native tools:
    • compozy__loop_cancel
    • compozy__loop_kill
    • compozy__loop_node_pause
    • compozy__loop_node_resume
    • compozy__loop_node_cancel
    • compozy__loop_node_kill
    • compozy__loop_node_requeue
    • compozy__loop_nodes
  • Extends compozy__loop_status with node lifecycle state and marks kill tools as destructive.
  • Publishes the canonical session-input list/replace/cancel/promote Host API methods through compozy mcp serve; they remain outside the native compozy__* registry.
  • Updates generated OpenAPI contracts and the Go and TypeScript SDKs.

Web, documentation, and official skill

  • Adds truthful run-story rows and controls for retrying, waiting, paused, quarantined, attention, cancel, kill, requeue, and effect outcomes.
  • Adds waiting/quarantine/attention inventories, attempt timing, repair context, confirmation flows, and correct parked-progress accounting.
  • Adds Loop editor authoring for the lifecycle grammar and lint feedback.
  • Completes the Loop catalog → run form → detail hero path and covers empty, filtered, terminal, and recovery states.
  • Adds the Loop failure-handling documentation and updates DSL, grammar, configuration, running, extension, and generated CLI references.
  • Updates the built-in Compozy skill so agents can discover and operate every shipped lifecycle state and verb.

Externalized Loop output hydration

Persistence and migrations

Three append-only Goose migrations land after the current main schema:

  • 00045_schema.sql: lifecycle tables and columns, effect delivery identity, Loop target kind, retry/control/wait/admission state, run cancel fields, and row-preserving rebuilds.
  • 00046_schema.sql: partial due-time index for retry scanning.
  • 00047_schema.sql: admission-claim expiry backfill and expiry index.

The migrations preserve existing rows. There is no compatibility reader, dual schema, fallback column, or boot-time repair path.

Intentional hard cuts

  • Deletes the old Loop stop route, CLI verb, native tool, and bindings; callers must choose cancel or kill.
  • Deletes elapsed-time/no-progress kill behavior for Loop-bound sessions.
  • Replaces same-node run termination with node quarantine.
  • Replaces magic-string dependency blocking with classified causes.
  • Requires stable event_key identity from watch-source extensions.
  • Does not add legacy aliases or migration fallbacks; this is a greenfield-alpha contract change.

Safety invariants

  • One classification result drives retry, breaker accounting, routing, effects, and repair context.
  • Every attempt, retry, route, absorption, resume, and requeue still counts against Loop caps and budgets.
  • Coordinator completion or explicit CAS-backed service verbs remain the only state writers.
  • State and effect rows commit before events or side effects become observable.
  • Kill never silently replaces cooperative cancel.
  • Parked states suspend elapsed clocks but never token accounting.
  • Wait resume and watch admission are atomic and idempotent.
  • Quarantine degrades one dependency lane; it does not terminate independent work.
  • All causes, hints, wait payloads, effect context, and quarantine data cross one sanitization boundary before persistence or exposure.

Verification

The final branch-wide gate passed on the exact committed tree:

  • Full-gate fingerprint: 37d2a0de948011aaaada3aadace1326e6f413a2e
  • Codegen, generated CLI references, migration checks, installer check, and 500-line source cap: pass
  • Bun formatting/lint: pass with zero warnings
  • Bun typecheck: 7/7 tasks
  • Bun tests: 7/7 tasks
  • Web build: 4/4 tasks
  • Go formatting and lint: pass with zero issues
  • Go test suite: 19,546 passed; 1 helper-process test intentionally skipped
  • Go SDK tests and Go build: pass
  • Package boundaries: pass
  • Visual contract: all 17 named matrix rows passed with zero unresolved structural divergence
  • Targeted public MCP QA: official Go MCP SDK discovered and called all four session-input tools against a real workspace-bound session; the native registry contained 238 tools and zero compozy_host__ IDs
  • QA evidence audit: PASS, 0 blockers, 0 warnings; isolated lab teardown clean

Review history

Risk and rollout

  • This is a large cross-surface change, but it lands as one coherent contract and one commit so schema, runtime, API, clients, UI, and docs cannot drift independently.
  • The highest-risk paths are coordinator concurrency, stale due-time work, cancel/death races, migration equivalence, and externalized output hydration. They have focused race, SQLite integration, runtime E2E, and public-interface coverage in addition to the full gate.
  • New defaults are conservative: no default timeout, no default agent/sub-loop retry, fail-open effects, bounded mechanical retry, and visible attention rather than automatic kill.
  • No feature flag is required; the migration and hard-cut surfaces define the new alpha contract atomically.

Compozy Impact Audit

  • Native tools: adds eight lifecycle tools, removes compozy__loop_stop, extends compozy__loop_status, refreshes descriptors/schema digests/risk flags, and covers capability/availability decisions. Session-input Host API methods are intentionally MCP-projected without becoming native tool IDs.
  • Extensibility and hooks: watch sources now require stable event_key; existing extension/MCP/native tools can be effect targets under normal workspace policy; lifecycle hooks receive additive failure/disposition context; no new extension kind, bundle kind, bridge kind, registry kind, or MCP sidecar kind is introduced.
  • Workspace data isolation: lifecycle state is run/node scoped under the owning workspace. Workspace identity is propagated through HTTP, UDS, CLI, native-tool bindings, MCP façade binding, stores, events, caches, inventories, and effect dispatch. Cross-workspace list/read/mutation is rejected by the existing workspace authority and covered by contract/integration tests.
  • Official Compozy skill: updates skills/compozy/references/loops.md with lifecycle grammar, failure precedence, CLI/native-tool paths, inventories, state transitions, and repair guidance.

Implement the complete Loop node lifecycle across runtime, persistence, APIs, CLI, native tools, web UI, SDKs, documentation, and QA coverage. Incorporate and extend the externalized Loop output hydration fix from PR #286.

Co-authored-by: Marco Aurélio <[email protected]>
@vercel

vercel Bot commented Aug 4, 2026 •

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
compozy-site Ready Ready Preview Aug 4, 2026 5:24am

Request Review

@greptile-apps

greptile-apps Bot commented Aug 4, 2026

Copy link
Copy Markdown

Too many files changed for review. (720 files found, 100 file limit)

@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 587 files, which is 287 over the limit of 300.

To get a review, reduce the PR to 300 files or fewer by splitting it into smaller PRs or changing its base branch.

Usage-priced reviews support at most 300 files.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 89e0efb2-572f-448a-b5a7-9fe11df0d403

📥 Commits

Reviewing files that changed from the base of the PR and between b19490a and d36fe4e.

⛔ Files ignored due to path filters (133)
  • RELEASE_BODY.md is excluded by !**/*.md
  • RELEASE_NOTES.md is excluded by !**/*.md
  • docs/_memory/glossary.md is excluded by !**/*.md
  • docs/qa/automation-backlog/all-run-status-seeds.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260802-initial-wait-fails-run.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260802-loop-lifecycle-config-unsupported.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260802-node-kill-leaves-run-live.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260802-parked-node-cancel-stalls.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260803-agent-workspace-id-disagrees.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260803-cross-origin-coordinator-duplicate.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260803-disabled-extension-blocks-wait-resume.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260803-error-route-fallback-blocked.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260803-loop-boot-active-coordinator-lease.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260803-wait-event-rejected-too-late.md is excluded by !**/*.md
  • docs/qa/charters/CH-003.md is excluded by !**/*.md
  • docs/qa/charters/CH-004.md is excluded by !**/*.md
  • docs/qa/charters/CH-011.md is excluded by !**/*.md
  • docs/qa/charters/CH-022.md is excluded by !**/*.md
  • docs/qa/charters/CH-023.md is excluded by !**/*.md
  • docs/qa/charters/CH-024.md is excluded by !**/*.md
  • docs/qa/charters/CH-026.md is excluded by !**/*.md
  • docs/qa/charters/CH-agent-loop-lifecycle-native.md is excluded by !**/*.md
  • docs/qa/charters/CH-agent-loop-lifecycle-parity.md is excluded by !**/*.md
  • docs/qa/charters/CH-approver-loop-wait.md is excluded by !**/*.md
  • docs/qa/charters/CH-author-loop-failure-contract.md is excluded by !**/*.md
  • docs/qa/charters/CH-loop-death-resume.md is excluded by !**/*.md
  • docs/qa/charters/CH-loop-lifecycle-config-cli.md is excluded by !**/*.md
  • docs/qa/charters/CH-loop-quarantine-repair.md is excluded by !**/*.md
  • docs/qa/charters/CH-loop-run-cancel-control.md is excluded by !**/*.md
  • docs/qa/charters/CH-operator-lifecycle-ui.md is excluded by !**/*.md
  • docs/qa/charters/CH-operator-loop-recovery.md is excluded by !**/*.md
  • docs/qa/charters/CH-runaway-work-bounded.md is excluded by !**/*.md
  • docs/qa/journeys/J-03-observe-and-approve.md is excluded by !**/*.md
  • docs/qa/journeys/J-04-operator-pause-resume.md is excluded by !**/*.md
  • docs/qa/journeys/J-07-agent-operated-run.md is excluded by !**/*.md
  • docs/qa/journeys/J-16-watch-events-wake.md is excluded by !**/*.md
  • docs/qa/journeys/J-bound-runaway-work.md is excluded by !**/*.md
  • docs/qa/journeys/J-recover-loop-node-failure.md is excluded by !**/*.md
  • docs/qa/journeys/J-resume-dead-loop-node.md is excluded by !**/*.md
  • docs/qa/journeys/J-tune-loop-lifecycle-defaults.md is excluded by !**/*.md
  • docs/qa/personas.md is excluded by !**/*.md
  • docs/qa/reports/2026-08-02-loop-lifecycle-config.md is excluded by !**/*.md
  • docs/qa/reports/2026-08-02-loop-node-lifecycle-task07.md is excluded by !**/*.md
  • docs/qa/reports/2026-08-03-loop-node-lifecycle-plan.md is excluded by !**/*.md
  • docs/qa/reports/2026-08-03-loop-node-lifecycle-task08.md is excluded by !**/*.md
  • docs/qa/reports/2026-08-03-loop-node-lifecycle.md is excluded by !**/*.md
  • docs/qa/reports/2026-08-04-loop-lifecycle-mcp-inputs.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-session-input-mcp-projection.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-016.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-026.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-040.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-041.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-042.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-044.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-047.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-048.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-049.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-050.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-agent-operates-lifecycle-via-native-tools.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-approval-link-journey.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-cancel-vs-kill.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-catalog-runform-walk.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-crash-death-resume.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-days-long-node-no-clock.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-duplicate-event-suppressed.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-durable-wait-restart.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-editor-authoring-walk.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-error-route-fallback.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-live-pause-repair-resume.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-live-run-survives-extension-disable.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-loop-lifecycle-config-cli.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-loop-run-deep-link.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-on-error-notification-with-context.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-operator-lifecycle-ui.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-quarantine-diagnose-requeue.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-run-detail-story-redesign.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-sick-target-degrades-one-lane.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-terminal-outcome-notification.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-transient-blip-heals.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-unannotated-escalation.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-wait-event-catalog-validation.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-waiting-inventory-escalation.md is excluded by !**/*.md
  • docs/qa/scenarios/TA-070.md is excluded by !**/*.md
  • docs/qa/scenarios/TA-076.md is excluded by !**/*.md
  • docs/qa/scenarios/TA-084.md is excluded by !**/*.md
  • docs/qa/scenarios/TA-action-run-liveness.md is excluded by !**/*.md
  • docs/qa/scenarios/TA-loop-failure-breaker.md is excluded by !**/*.md
  • internal/store/globaldb/schema/migrations/atlas.sum is excluded by !**/*.sum, !**/*.sum
  • internal/testutil/acpmock/testdata/loop_node_lifecycle_fixture.json is excluded by !**/*.json
  • internal/tools/builtin/testdata/native-tool-catalog.json is excluded by !**/*.json
  • openapi/compozy.json is excluded by !**/*.json
  • packages/site/content/docs/automation/jobs.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/cli/loop/cancel.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/cli/loop/index.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/cli/loop/kill.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/cli/loop/meta.json is excluded by !**/*.json
  • packages/site/content/docs/cli/loop/node/cancel.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/cli/loop/node/index.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/cli/loop/node/kill.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/cli/loop/node/meta.json is excluded by !**/*.json
  • packages/site/content/docs/cli/loop/node/pause.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/cli/loop/node/requeue.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/cli/loop/node/resume.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/cli/loop/nodes.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/configuration/config-toml.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/loops/catalog.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/loops/configure.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/loops/dsl-reference.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/loops/extensions.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/loops/failure-handling.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/loops/guardrails.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/loops/index.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/loops/meta.json is excluded by !**/*.json
  • packages/site/content/docs/loops/reference-grammar.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/loops/running.mdx is excluded by !**/*.mdx
  • packages/ui/src/components/stories/confirm-dialog.stories.tsx is excluded by !**/*.stories.tsx
  • sdk/typescript/src/generated/contracts.ts is excluded by !**/generated/**, !**/generated/**
  • skills/compozy/references/extension-authoring.md is excluded by !**/*.md
  • skills/compozy/references/loops.md is excluded by !**/*.md
  • skills/compozy/references/tasks-and-orchestration.md is excluded by !**/*.md
  • web/e2e/__tests__/loops.spec.ts is excluded by !web/e2e/**
  • web/e2e/__tests__/os-shell.spec.ts is excluded by !web/e2e/**
  • web/src/generated/compozy-openapi.d.ts is excluded by !**/generated/**, !**/generated/**, !**/*.d.ts
  • web/src/generated/loop-enums.ts is excluded by !**/generated/**, !**/generated/**
  • web/src/systems/loops/components/stories/loop-catalog.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-editor.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/loops/components/stories/loop-node-controls.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/loops/components/stories/loop-node-inventory.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/loops/components/stories/loop-quarantine-sheet.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/loops/components/stories/loop-status-pill.stories.tsx is excluded by !**/*.stories.tsx
📒 Files selected for processing (587)
  • internal/acp/handlers.go
  • internal/acp/handlers_session_state.go
  • internal/api/contract/contract_test.go
  • internal/api/contract/generic_error_payload.go
  • internal/api/contract/loop_enums.go
  • internal/api/contract/loop_lifecycle.go
  • internal/api/contract/loop_nodes.go
  • internal/api/contract/loop_runs.go
  • internal/api/contract/loops.go
  • internal/api/core/agent_create.go
  • internal/api/core/agent_definition_resolution.go
  • internal/api/core/errors_diagnostic_payload.go
  • internal/api/core/errors_test.go
  • internal/api/core/handlers_agents.go
  • internal/api/core/handlers_test.go
  • internal/api/core/loop_interfaces.go
  • internal/api/core/loops.go
  • internal/api/core/loops_nodes.go
  • internal/api/core/loops_test.go
  • internal/api/core/session_input.go
  • internal/api/httpapi/handlers_test.go
  • internal/api/httpapi/loops_routes.go
  • internal/api/spec/loop_schemas.go
  • internal/api/spec/loops.go
  • internal/api/spec/loops_nodes.go
  • internal/api/spec/loops_test.go
  • internal/api/spec/schema_customizers.go
  • internal/api/spec/schema_enum_registry.go
  • internal/api/udsapi/handlers_test.go
  • internal/api/udsapi/loops_routes.go
  • internal/automation/dispatch_loop.go
  • internal/automation/dispatch_test.go
  • internal/cli/bridge_verify.go
  • internal/cli/client_loops.go
  • internal/cli/client_test.go
  • internal/cli/config.go
  • internal/cli/config_path_classification.go
  • internal/cli/config_roles.go
  • internal/cli/config_test.go
  • internal/cli/config_value_parse.go
  • internal/cli/helpers_test.go
  • internal/cli/loop.go
  • internal/cli/loop_client.go
  • internal/cli/loop_inspect_output.go
  • internal/cli/loop_node.go
  • internal/cli/loop_nodes.go
  • internal/cli/loop_runs.go
  • internal/cli/loop_support.go
  • internal/cli/loop_test.go
  • internal/cli/marketplace.go
  • internal/cli/mcp_serve_test.go
  • internal/cli/network_channel_output.go
  • internal/cli/network_delivery_output.go
  • internal/cli/observe.go
  • internal/cli/output_labels.go
  • internal/cli/session_input.go
  • internal/cli/session_input_output.go
  • internal/cli/session_prompt_events.go
  • internal/cli/session_prompt_output.go
  • internal/cli/session_test.go
  • internal/cli/status.go
  • internal/cli/task_output_core.go
  • internal/cli/task_output_notifications_reviews.go
  • internal/config/config.go
  • internal/config/loop_autopause.go
  • internal/config/loop_lifecycle.go
  • internal/config/loops.go
  • internal/config/loops_test.go
  • internal/config/merge_loops.go
  • internal/config/merge_task.go
  • internal/config/task_orchestration.go
  • internal/config/task_orchestration_test.go
  • internal/config/task_orchestration_validation.go
  • internal/config/tool_surface.go
  • internal/config/tool_surface_coercion.go
  • internal/config/tool_surface_loops.go
  • internal/config/tool_surface_task.go
  • internal/config/tool_surface_test.go
  • internal/config/tool_surface_types.go
  • internal/daemon/automation_loop_starter.go
  • internal/daemon/automation_loop_starter_test.go
  • internal/daemon/boot.go
  • internal/daemon/boot_components.go
  • internal/daemon/boot_dead_entity.go
  • internal/daemon/boot_publish.go
  • internal/daemon/daemon.go
  • internal/daemon/daemon_mock_agents_integration_test.go
  • internal/daemon/daemon_review_and_fix_e2e_integration_test.go
  • internal/daemon/daemon_shutdown_runtime.go
  • internal/daemon/daemon_shutdown_targets.go
  • internal/daemon/daemon_test.go
  • internal/daemon/loop_action_checkpoint.go
  • internal/daemon/loop_action_death_resume.go
  • internal/daemon/loop_action_failure.go
  • internal/daemon/loop_action_failure_test.go
  • internal/daemon/loop_action_liveness.go
  • internal/daemon/loop_action_liveness_integration_helpers_test.go
  • internal/daemon/loop_action_liveness_policy.go
  • internal/daemon/loop_action_policy.go
  • internal/daemon/loop_action_runtime.go
  • internal/daemon/loop_api_contract.go
  • internal/daemon/loop_api_nodes.go
  • internal/daemon/loop_api_payloads_test.go
  • internal/daemon/loop_api_run_history.go
  • internal/daemon/loop_api_runs.go
  • internal/daemon/loop_api_runs_test.go
  • internal/daemon/loop_api_service.go
  • internal/daemon/loop_defaults.go
  • internal/daemon/loop_defaults_test.go
  • internal/daemon/loop_effect_relay.go
  • internal/daemon/loop_effect_relay_boot.go
  • internal/daemon/loop_effect_relay_test.go
  • internal/daemon/loop_goal_command_definition.go
  • internal/daemon/loop_goal_executor_test.go
  • internal/daemon/loop_goal_managed_runtime_integration_test.go
  • internal/daemon/loop_hook_observer.go
  • internal/daemon/loop_hook_observer_test.go
  • internal/daemon/loop_managed_binding.go
  • internal/daemon/loop_node_lifecycle_e2e_integration_test.go
  • internal/daemon/loop_parent_close_postcommit.go
  • internal/daemon/loop_target_health.go
  • internal/daemon/loop_target_health_test.go
  • internal/daemon/loop_watch_events_doorbell.go
  • internal/daemon/loop_watch_events_observer.go
  • internal/daemon/loop_watch_events_observer_index.go
  • internal/daemon/loop_watch_events_observer_test.go
  • internal/daemon/loop_watch_events_payloads.go
  • internal/daemon/native_create_tools.go
  • internal/daemon/native_create_tools_test.go
  • internal/daemon/native_hook_helpers.go
  • internal/daemon/native_loop_lifecycle_support.go
  • internal/daemon/native_loop_lifecycle_tools.go
  • internal/daemon/native_loop_tools.go
  • internal/daemon/native_loop_tools_support.go
  • internal/daemon/native_loop_tools_test.go
  • internal/daemon/native_tools_test.go
  • internal/daemon/scheduler_loop_coordinator.go
  • internal/daemon/scheduler_loop_due_scan.go
  • internal/daemon/scheduler_loop_retry_timer.go
  • internal/daemon/scheduler_runtime.go
  • internal/daemon/scheduler_runtime_test.go
  • internal/daemon/scheduler_task_source_types.go
  • internal/daemon/settings_runtime_applier.go
  • internal/daemon/task_runtime_boot.go
  • internal/daemon/task_runtime_boot_roles.go
  • internal/daemon/task_runtime_test.go
  • internal/deadentity/service_test.go
  • internal/extension/host_api_methods.go
  • internal/extension/host_api_sessions.go
  • internal/extension/host_api_test.go
  • internal/extension/scaffold_templates/loop-watch-source-go/main.go
  • internal/extension/watch_source.go
  • internal/extension/watch_source_test.go
  • internal/hooks/payloads_task_loop.go
  • internal/loop/action_failure.go
  • internal/loop/action_internal_test.go
  • internal/loop/action_repair_feedback.go
  • internal/loop/action_retry_feedback.go
  • internal/loop/action_runagent.go
  • internal/loop/action_runtime_helpers.go
  • internal/loop/action_schema.go
  • internal/loop/action_test.go
  • internal/loop/action_types.go
  • internal/loop/action_usage.go
  • internal/loop/admission_claim.go
  • internal/loop/api_types.go
  • internal/loop/cancel_control.go
  • internal/loop/cancellation.go
  • internal/loop/compiler.go
  • internal/loop/compiler_test.go
  • internal/loop/config.go
  • internal/loop/constants.go
  • internal/loop/control_eval_context.go
  • internal/loop/control_file_import.go
  • internal/loop/control_gate.go
  • internal/loop/control_input.go
  • internal/loop/control_namespace.go
  • internal/loop/control_namespace_history.go
  • internal/loop/control_namespace_history_test.go
  • internal/loop/control_namespace_test.go
  • internal/loop/control_plan.go
  • internal/loop/control_plan_branch.go
  • internal/loop/control_plan_finish.go
  • internal/loop/control_readiness.go
  • internal/loop/control_tasks.go
  • internal/loop/control_topology.go
  • internal/loop/coordinator.go
  • internal/loop/coordinator_action.go
  • internal/loop/coordinator_action_liveness.go
  • internal/loop/coordinator_action_metadata.go
  • internal/loop/coordinator_autopause.go
  • internal/loop/coordinator_cancellation.go
  • internal/loop/coordinator_control_test.go
  • internal/loop/coordinator_effects.go
  • internal/loop/coordinator_error_routes.go
  • internal/loop/coordinator_gate_wait.go
  • internal/loop/coordinator_generation.go
  • internal/loop/coordinator_generation_idle.go
  • internal/loop/coordinator_generation_reattempt.go
  • internal/loop/coordinator_generation_succession.go
  • internal/loop/coordinator_goal_control.go
  • internal/loop/coordinator_goal_control_test.go
  • internal/loop/coordinator_history.go
  • internal/loop/coordinator_lifecycle.go
  • internal/loop/coordinator_lifecycle_test.go
  • internal/loop/coordinator_metadata.go
  • internal/loop/coordinator_options.go
  • internal/loop/coordinator_outputs.go
  • internal/loop/coordinator_pause.go
  • internal/loop/coordinator_quarantine.go
  • internal/loop/coordinator_requeue.go
  • internal/loop/coordinator_retry.go
  • internal/loop/coordinator_retry_test.go
  • internal/loop/coordinator_snapshot_test.go
  • internal/loop/coordinator_succession.go
  • internal/loop/coordinator_target_health.go
  • internal/loop/coordinator_terminal_helpers.go
  • internal/loop/coordinator_test.go
  • internal/loop/coordinator_wait.go
  • internal/loop/coordinator_wait_route.go
  • internal/loop/coordinator_watch.go
  • internal/loop/coordinator_watch_events.go
  • internal/loop/coordinator_watch_test.go
  • internal/loop/death_resume.go
  • internal/loop/dsl/codec_test.go
  • internal/loop/dsl/contract.go
  • internal/loop/dsl/effects.go
  • internal/loop/dsl/graph.go
  • internal/loop/dsl/lifecycle.go
  • internal/loop/dsl/node_params.go
  • internal/loop/dsl/refs/condition.go
  • internal/loop/dsl/refs/diagnostics.go
  • internal/loop/dsl/refs/namespace.go
  • internal/loop/dsl/refs/refs_test.go
  • internal/loop/dsl/types_nodes.go
  • internal/loop/dsl/types_test.go
  • internal/loop/dsl/wait.go
  • internal/loop/effect_context.go
  • internal/loop/effect_outbox.go
  • internal/loop/effects_dispatch.go
  • internal/loop/effects_dispatch_test.go
  • internal/loop/errors.go
  • internal/loop/executed_definition_snapshot.go
  • internal/loop/executed_definition_validation.go
  • internal/loop/executed_definition_watch.go
  • internal/loop/failure_class.go
  • internal/loop/failure_classify.go
  • internal/loop/failure_classify_test.go
  • internal/loop/failure_repair.go
  • internal/loop/failure_repair_test.go
  • internal/loop/failure_result_contract.go
  • internal/loop/failure_result_contract_test.go
  • internal/loop/fanout_materialization.go
  • internal/loop/generation_intent.go
  • internal/loop/generation_output_runtime.go
  • internal/loop/generation_snapshot.go
  • internal/loop/generation_snapshot_attempts.go
  • internal/loop/generation_snapshot_controls.go
  • internal/loop/generation_snapshot_intent_collections.go
  • internal/loop/generation_snapshot_intents.go
  • internal/loop/generation_snapshot_test.go
  • internal/loop/goal/types_binding.go
  • internal/loop/goal_cancellation.go
  • internal/loop/lifecycle_config.go
  • internal/loop/linter.go
  • internal/loop/linter_contract.go
  • internal/loop/linter_effects.go
  • internal/loop/linter_lifecycle.go
  • internal/loop/linter_references.go
  • internal/loop/linter_test.go
  • internal/loop/linter_wait.go
  • internal/loop/linter_watch_events.go
  • internal/loop/node_attempt.go
  • internal/loop/node_control.go
  • internal/loop/node_control_mutation.go
  • internal/loop/node_inventory.go
  • internal/loop/node_liveness.go
  • internal/loop/node_pause.go
  • internal/loop/node_requeue.go
  • internal/loop/node_wait.go
  • internal/loop/node_waits.go
  • internal/loop/output_ref.go
  • internal/loop/parent_close.go
  • internal/loop/predicate_policy.go
  • internal/loop/predicate_policy_test.go
  • internal/loop/quarantine.go
  • internal/loop/retry_due.go
  • internal/loop/run_network_state.go
  • internal/loop/service.go
  • internal/loop/service_cancellation.go
  • internal/loop/service_control.go
  • internal/loop/service_node_pause.go
  • internal/loop/service_node_requeue.go
  • internal/loop/service_options.go
  • internal/loop/service_pinned_definition.go
  • internal/loop/service_start.go
  • internal/loop/service_test.go
  • internal/loop/service_types.go
  • internal/loop/target_health.go
  • internal/loop/target_health_test.go
  • internal/loop/types.go
  • internal/loop/wait_due.go
  • internal/loop/watch/adapter.go
  • internal/loop/watch/adapter_test.go
  • internal/loop/watch/event_key.go
  • internal/loop/watch/output.go
  • internal/loop/watch/types.go
  • internal/loop/watch_events_constraints.go
  • internal/loop/watch_events_contract.go
  • internal/loop/watch_events_ledger.go
  • internal/loop/watch_events_registry_phase_a.go
  • internal/mcp/serve_projection_decisions.go
  • internal/session/inputqueue/mutation.go
  • internal/session/manager_busy_input.go
  • internal/session/manager_busy_input_activation.go
  • internal/session/manager_busy_input_test.go
  • internal/session/manager_managed_input_submit.go
  • internal/session/manager_managed_input_terminal.go
  • internal/session/manager_pending_input.go
  • internal/session/manager_prompt_admission.go
  • internal/session/manager_prompt_submit.go
  • internal/session/manager_test.go
  • internal/session/session_supervision.go
  • internal/store/globaldb/global_db_goal_binding_activation_cleanup.go
  • internal/store/globaldb/global_db_goal_binding_activation_owner.go
  • internal/store/globaldb/global_db_goal_binding_cleanup.go
  • internal/store/globaldb/global_db_goal_binding_integration_test.go
  • internal/store/globaldb/global_db_goal_binding_transitions.go
  • internal/store/globaldb/global_db_goal_checkpoint_integration_test.go
  • internal/store/globaldb/global_db_goal_reentry.go
  • internal/store/globaldb/global_db_goal_reentry_helpers.go
  • internal/store/globaldb/global_db_goal_reentry_test.go
  • internal/store/globaldb/global_db_goal_session_cleanup.go
  • internal/store/globaldb/global_db_goal_stop.go
  • internal/store/globaldb/global_db_goal_stop_checkpoints.go
  • internal/store/globaldb/global_db_goal_turn_runtime_integration_test.go
  • internal/store/globaldb/global_db_loop.go
  • internal/store/globaldb/global_db_loop_admission_claims.go
  • internal/store/globaldb/global_db_loop_approval_wait.go
  • internal/store/globaldb/global_db_loop_cancel.go
  • internal/store/globaldb/global_db_loop_cancel_finalize.go
  • internal/store/globaldb/global_db_loop_cancel_live.go
  • internal/store/globaldb/global_db_loop_cancel_sessions.go
  • internal/store/globaldb/global_db_loop_cancel_wake.go
  • internal/store/globaldb/global_db_loop_control.go
  • internal/store/globaldb/global_db_loop_coordinator_seed.go
  • internal/store/globaldb/global_db_loop_death_resume.go
  • internal/store/globaldb/global_db_loop_effect_outbox.go
  • internal/store/globaldb/global_db_loop_events.go
  • internal/store/globaldb/global_db_loop_inline.go
  • internal/store/globaldb/global_db_loop_lifecycle_errors.go
  • internal/store/globaldb/global_db_loop_node_attempts.go
  • internal/store/globaldb/global_db_loop_node_controls.go
  • internal/store/globaldb/global_db_loop_node_inventory.go
  • internal/store/globaldb/global_db_loop_node_inventory_details.go
  • internal/store/globaldb/global_db_loop_node_liveness.go
  • internal/store/globaldb/global_db_loop_node_pause.go
  • internal/store/globaldb/global_db_loop_node_pause_effects.go
  • internal/store/globaldb/global_db_loop_node_requeue.go
  • internal/store/globaldb/global_db_loop_node_terminal.go
  • internal/store/globaldb/global_db_loop_node_waits.go
  • internal/store/globaldb/global_db_loop_normalize.go
  • internal/store/globaldb/global_db_loop_outputs.go
  • internal/store/globaldb/global_db_loop_parked_clock.go
  • internal/store/globaldb/global_db_loop_pinning.go
  • internal/store/globaldb/global_db_loop_retry_due.go
  • internal/store/globaldb/global_db_loop_scan.go
  • internal/store/globaldb/global_db_loop_schema_integration_test.go
  • internal/store/globaldb/global_db_loop_test.go
  • internal/store/globaldb/global_db_loop_transition.go
  • internal/store/globaldb/global_db_loop_wait_due.go
  • internal/store/globaldb/global_db_loop_wait_escalation.go
  • internal/store/globaldb/global_db_loop_wait_escalation_apply.go
  • internal/store/globaldb/global_db_loop_wait_events.go
  • internal/store/globaldb/global_db_loop_wait_expiry_route.go
  • internal/store/globaldb/global_db_loop_wait_resume.go
  • internal/store/globaldb/global_db_network_work_mutation.go
  • internal/store/globaldb/global_db_session_input_queue_mutation.go
  • internal/store/globaldb/global_db_session_input_queue_test.go
  • internal/store/globaldb/global_db_task_claim.go
  • internal/store/globaldb/global_db_task_claim_complete.go
  • internal/store/globaldb/global_db_task_claim_helpers.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_boundaries.go
  • internal/store/globaldb/global_db_task_coordinator_budget.go
  • internal/store/globaldb/global_db_task_coordinator_cancellation.go
  • internal/store/globaldb/global_db_task_coordinator_effects.go
  • internal/store/globaldb/global_db_task_coordinator_intents.go
  • internal/store/globaldb/global_db_task_coordinator_mutations.go
  • internal/store/globaldb/global_db_task_coordinator_parent_close.go
  • internal/store/globaldb/global_db_task_coordinator_progress.go
  • internal/store/globaldb/global_db_task_coordinator_runtime.go
  • internal/store/globaldb/global_db_watch_events_loop.go
  • internal/store/globaldb/loop_sqlc_mapping.go
  • internal/store/globaldb/queries/loop_core.sql
  • internal/store/globaldb/queries/loop_lifecycle.sql
  • internal/store/globaldb/queries/loop_runtime.sql
  • internal/store/globaldb/queries/task_claim.sql
  • internal/store/globaldb/schema/definitions/41_reliability.sql
  • internal/store/globaldb/schema/definitions/50_loops.sql
  • internal/store/globaldb/schema/migrations/00045_schema.sql
  • internal/store/globaldb/schema/migrations/00046_schema.sql
  • internal/store/globaldb/schema/migrations/00047_schema.sql
  • internal/store/globaldb/sqlcgen/loop_core.sql.go
  • internal/store/globaldb/sqlcgen/loop_lifecycle.sql.go
  • internal/store/globaldb/sqlcgen/loop_runtime.sql.go
  • internal/store/globaldb/sqlcgen/models.go
  • internal/store/globaldb/sqlcgen/task_claim.sql.go
  • internal/store/types_dead_entity.go
  • internal/task/coordinator.go
  • internal/task/coordinator_boundary_specs.go
  • internal/task/coordinator_timer.go
  • internal/task/manager.go
  • internal/task/manager_constructor.go
  • internal/task/manager_coordinator_run.go
  • internal/task/manager_test.go
  • internal/toolmeta/native_entries.go
  • internal/toolmeta/registry_test.go
  • internal/tools/builtin/builtin_test.go
  • internal/tools/builtin/descriptors.go
  • internal/tools/builtin/loops.go
  • internal/tools/builtin/loops_lifecycle_schemas.go
  • internal/tools/builtin/loops_output_schemas.go
  • internal/tools/builtin/mcp.go
  • internal/tools/builtin/sessions.go
  • internal/tools/builtin/tasks.go
  • internal/tools/builtin/window_manager.go
  • internal/tools/builtin_ids.go
  • internal/tools/reason.go
  • packages/ui/src/components/__tests__/confirm-dialog.test.tsx
  • packages/ui/src/components/custom/confirm-dialog.tsx
  • sdk/go/contracts/types_011_gen.go
  • sdk/go/extension_test.go
  • sdk/go/types.go
  • sdk/go/watch_source.go
  • sdk/typescript/src/__tests__/extension.test.ts
  • sdk/typescript/src/watch-source.ts
  • web/src/systems/loops/adapters/__tests__/loops-api.test.ts
  • web/src/systems/loops/adapters/loop-nodes-api.ts
  • web/src/systems/loops/adapters/loops-api-errors.ts
  • web/src/systems/loops/adapters/loops-api.ts
  • web/src/systems/loops/adapters/loops-runs-api.ts
  • web/src/systems/loops/components/__tests__/loop-catalog.test.tsx
  • web/src/systems/loops/components/__tests__/loop-detail.test.tsx
  • web/src/systems/loops/components/__tests__/loop-editor-field.test.tsx
  • web/src/systems/loops/components/__tests__/loop-editor.test.tsx
  • web/src/systems/loops/components/__tests__/loop-linter-dock.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-start-bindings-panel.test.tsx
  • web/src/systems/loops/components/catalog/loop-catalog-card.tsx
  • web/src/systems/loops/components/catalog/loop-catalog-filters.tsx
  • web/src/systems/loops/components/catalog/loop-catalog-lede.tsx
  • web/src/systems/loops/components/catalog/loop-catalog-row.tsx
  • web/src/systems/loops/components/catalog/loop-catalog.tsx
  • web/src/systems/loops/components/detail/loop-contract-panel.tsx
  • web/src/systems/loops/components/detail/loop-declared-inputs.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/detail/loop-recent-runs.tsx
  • web/src/systems/loops/components/detail/loop-reliability-panel.tsx
  • web/src/systems/loops/components/detail/loop-start-bindings-panel.tsx
  • web/src/systems/loops/components/detail/loop-stats-panel.tsx
  • web/src/systems/loops/components/detail/loop-versions-panel.tsx
  • web/src/systems/loops/components/editor/loop-editor-canvas.tsx
  • web/src/systems/loops/components/editor/loop-editor-contract-terminals.tsx
  • web/src/systems/loops/components/editor/loop-editor-contract.tsx
  • web/src/systems/loops/components/editor/loop-editor-effects.tsx
  • web/src/systems/loops/components/editor/loop-editor-field-effects.tsx
  • web/src/systems/loops/components/editor/loop-editor-field.tsx
  • web/src/systems/loops/components/editor/loop-editor-inspector.tsx
  • web/src/systems/loops/components/editor/loop-editor-json-field.tsx
  • web/src/systems/loops/components/editor/loop-editor-publish-rejected-strip.tsx
  • web/src/systems/loops/components/editor/loop-editor-sidebar.tsx
  • web/src/systems/loops/components/editor/loop-editor-source-strip.tsx
  • web/src/systems/loops/components/editor/loop-editor-toolbar.tsx
  • web/src/systems/loops/components/editor/loop-editor-wait-mode.tsx
  • web/src/systems/loops/components/editor/loop-editor.tsx
  • web/src/systems/loops/components/editor/loop-linter-dock.tsx
  • web/src/systems/loops/components/loop-page-lede.tsx
  • web/src/systems/loops/components/loop-rail-section.tsx
  • web/src/systems/loops/components/run-form/loop-run-active-notice.tsx
  • web/src/systems/loops/components/run-form/loop-run-after-start.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-form/loop-run-ways-to-start.tsx
  • web/src/systems/loops/components/run-page/loop-node-control-dialog.tsx
  • web/src/systems/loops/components/run-page/loop-node-control-menu.tsx
  • web/src/systems/loops/components/run-page/loop-node-row-actions.tsx
  • web/src/systems/loops/components/run-page/loop-quarantine-sheet.tsx
  • web/src/systems/loops/components/run-page/loop-run-control-dialog.tsx
  • web/src/systems/loops/components/run-page/loop-run-controls.tsx
  • web/src/systems/loops/components/run-page/loop-run-now-card.tsx
  • web/src/systems/loops/components/run-page/loop-run-outcome-card.tsx
  • web/src/systems/loops/components/run-page/loop-run-overflow-menu.tsx
  • web/src/systems/loops/components/run-page/loop-run-page-body.tsx
  • web/src/systems/loops/components/run-page/loop-run-parked-panels.tsx
  • web/src/systems/loops/components/run-page/loop-run-progress-panel.tsx
  • web/src/systems/loops/components/run-page/loop-run-story-timeline.tsx
  • web/src/systems/loops/components/run-page/loop-run-waits-rail.tsx
  • web/src/systems/loops/components/runs/loop-node-inventory-view.tsx
  • web/src/systems/loops/components/stories/loop-run-lifecycle-fixtures.ts
  • web/src/systems/loops/components/stories/loop-run-page-fixtures.ts
  • web/src/systems/loops/components/stories/loop-run-scenario-props.ts
  • web/src/systems/loops/components/stories/loop-run-scenario-types.ts
  • web/src/systems/loops/components/stories/loops-story-shell.tsx
  • web/src/systems/loops/hooks/__tests__/use-loop-actions.test.tsx
  • web/src/systems/loops/hooks/__tests__/use-loops.test.tsx
  • web/src/systems/loops/hooks/loop-editor-store-contracts.ts
  • web/src/systems/loops/hooks/loop-editor-store-draft.ts
  • web/src/systems/loops/hooks/loop-editor-store-publish.ts
  • web/src/systems/loops/hooks/use-loop-actions.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-fork.ts
  • web/src/systems/loops/hooks/use-loop-node-actions.ts
  • web/src/systems/loops/hooks/use-loop-node-inventory.ts
  • web/src/systems/loops/index.ts
  • web/src/systems/loops/lib/__tests__/loop-catalog.test.ts
  • web/src/systems/loops/lib/__tests__/loop-editor-draft.test.ts
  • web/src/systems/loops/lib/__tests__/loop-editor-lint.test.ts
  • web/src/systems/loops/lib/__tests__/loop-events.test.ts
  • web/src/systems/loops/lib/__tests__/loop-formatters.test.ts
  • web/src/systems/loops/lib/__tests__/loop-list-filters.test.ts
  • web/src/systems/loops/lib/__tests__/loop-node-inventory.test.ts
  • web/src/systems/loops/lib/__tests__/loop-node-schema.test.ts
  • web/src/systems/loops/lib/__tests__/loop-reliability.test.ts
  • web/src/systems/loops/lib/__tests__/loop-run-progress.test.ts
  • web/src/systems/loops/lib/__tests__/loop-run-story.test.ts
  • web/src/systems/loops/lib/__tests__/loop-runs-view.test.ts
  • web/src/systems/loops/lib/loop-catalog-presentation.ts
  • web/src/systems/loops/lib/loop-catalog.ts
  • web/src/systems/loops/lib/loop-contract-terminal-fields.ts
  • web/src/systems/loops/lib/loop-editor-definition.ts
  • web/src/systems/loops/lib/loop-editor-draft.ts
  • web/src/systems/loops/lib/loop-editor-lint.ts
  • web/src/systems/loops/lib/loop-events.ts
  • web/src/systems/loops/lib/loop-formatters.ts
  • web/src/systems/loops/lib/loop-generation-presentation.ts
  • web/src/systems/loops/lib/loop-graph.ts
  • web/src/systems/loops/lib/loop-list-filters.ts
  • web/src/systems/loops/lib/loop-node-controls.ts
  • web/src/systems/loops/lib/loop-node-fields.ts
  • web/src/systems/loops/lib/loop-node-inventory.ts
  • web/src/systems/loops/lib/loop-node-lifecycle-fields.ts
  • web/src/systems/loops/lib/loop-node-lifecycle.ts
  • web/src/systems/loops/lib/loop-node-now-view.ts
  • web/src/systems/loops/lib/loop-node-schema-types.ts
  • web/src/systems/loops/lib/loop-node-schema.ts
  • web/src/systems/loops/lib/loop-node-verb-copy.ts
  • web/src/systems/loops/lib/loop-node-wait-fields.ts
  • web/src/systems/loops/lib/loop-overrides.ts
  • web/src/systems/loops/lib/loop-palette.ts
  • web/src/systems/loops/lib/loop-quarantine-entry.ts
  • web/src/systems/loops/lib/loop-reliability.ts
  • web/src/systems/loops/lib/loop-run-page-view.ts
  • web/src/systems/loops/lib/loop-run-progress.ts
  • web/src/systems/loops/lib/loop-run-story-lifecycle-rows.ts
  • web/src/systems/loops/lib/loop-run-story-types.ts
  • web/src/systems/loops/lib/loop-run-story.ts
  • web/src/systems/loops/lib/loop-runs-view.ts
  • web/src/systems/loops/lib/loop-start-kinds.ts
  • web/src/systems/loops/lib/query-keys.ts
  • web/src/systems/loops/lib/query-options.ts
  • web/src/systems/loops/mocks/fixture-editor-lifecycle.ts
  • web/src/systems/loops/mocks/fixture-hero-path.ts
  • web/src/systems/loops/mocks/fixture-run-details.ts
  • web/src/systems/loops/mocks/fixtures.ts
  • web/src/systems/loops/mocks/handlers.ts
  • web/src/systems/loops/mocks/index.ts
  • web/src/systems/loops/mocks/lint-definition.ts
  • web/src/systems/loops/testing/loop-node-lifecycle-fixture.ts
  • web/src/systems/loops/types.ts
  • web/src/systems/os/apps/loops/__tests__/loop-runs-location.test.tsx
  • web/src/systems/os/apps/loops/loop-run-detail-location.tsx
  • web/src/systems/os/apps/loops/loop-run-form-location.tsx
  • web/src/systems/os/apps/loops/loop-runs-location.tsx
  • web/src/systems/os/apps/loops/loops-catalog-location.tsx
  • web/src/systems/os/apps/loops/use-loop-node-controls.ts
  • web/src/systems/os/apps/loops/use-loop-run-form-page.ts
  • web/src/systems/os/apps/loops/use-loop-run-page.ts
  • web/src/systems/os/apps/loops/use-loop-runs-route.ts
  • web/src/systems/os/apps/loops/use-loops-catalog.ts
  • web/src/systems/os/index.ts

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


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

❤️ Share

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

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

React Doctor found 1 new issue in 1 file · 1 error · score 84 / 100 (Needs work) · 0 fixed · vs main

Errors

Reviewed by React Doctor for commit d36fe4e. See inline comments for fixes.

loadedCount={inventory.loadedCount}
loopFilter={search.nodes_loop ?? ""}
loopOptions={loopOptions}
nowMs={Date.now()}

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/purity (error)

This component misses React Compiler's automatic memoization & re-renders more than it should: Cannot call impure function during render. Rewrite the flagged code so the compiler can optimize it.

Fix → Date.now is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component happens to re-render. (https://react.dev/reference/rules/components-and-hooks-must-be-pure#components-and-hooks-must-be-idempotent).

Docs

This branch was successfully deployed

1 active deployment
Preview — d36fe4e5 Deployed Aug 4, 2026 by vercel[bot]
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.

Loop fan-out breaks when a node's output exceeds the 16 KB inline limit

1 participant