Repository navigation
feat: replace software-delivery with implement-tasks - #325
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
WalkthroughThe PR replaces ChangesImplement-tasks loop migration
Estimated code review effort: 4 (Complex) | ~60 minutes Sequence Diagram(s)sequenceDiagram
participant User
participant LoopRunForm
participant LoopAPI
participant implementTasksGraph
participant TaskFiles
participant Implementer
User->>LoopRunForm: Enter slug, implementer, and auto_commit
LoopRunForm->>LoopAPI: Request dry-run or run
LoopAPI->>implementTasksGraph: Resolve inputs and graph
implementTasksGraph->>TaskFiles: Import matching task files
TaskFiles->>Implementer: Provide task collection
Implementer->>Implementer: Implement and verify tasks
Implementer-->>LoopAPI: Return completed status and summary
LoopAPI-->>User: Return run details or dry-run nodes
Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
React Doctor found no new issues. 🎉 Reviewed by React Doctor for commit |
There was a problem hiding this comment.
Actionable comments posted: 4
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
internal/daemon/loop_resources_integration_test.go (1)
412-423: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winReject the removed Loop from the catalog.
This assertion only requires
implement-tasksandreview-and-fixto exist. It still passes ifsoftware-deliveryremains registered as a compatibility alias.Assert that
foundcontains exactly the two expected Loop names.Proposed change
+ if got, want := len(found), 2; got != want { + t.Fatalf("dev-cycle loops = %#v, want exactly %d bundled loops", found, want) + } for _, name := range []string{"implement-tasks", "review-and-fix"} {As per path instructions, ensure tests verify behavior outcomes, not just function calls.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@internal/daemon/loop_resources_integration_test.go` around lines 412 - 423, Update the catalog assertions in the integration test to require that found contains exactly the two expected Loop names, implement-tasks and review-and-fix, rejecting any additional entry such as software-delivery while preserving the existing metadata checks for those two Loops.Source: Path instructions
🧹 Nitpick comments (2)
web/src/systems/loops/mocks/fixture-implement-tasks.ts (1)
8-12: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winReplace the prohibited term.
Line 10 calls
cy-execute-taska “workflow”. Replace it with “capability”.Proposed change
-- cy-execute-task: the end-to-end execution workflow for this task. +- cy-execute-task: the end-to-end task execution capability.As per coding guidelines, use
capabilityas the canonical artifact name; never userecipe,workflow,procedure, orplaybook.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@web/src/systems/loops/mocks/fixture-implement-tasks.ts` around lines 8 - 12, Update the required-skills text in fixture-implement-tasks.ts to describe cy-execute-task as a “capability” instead of a “workflow,” while preserving the rest of the instructions and using “capability” as the canonical artifact term.Source: Coding guidelines
web/src/systems/loops/components/__tests__/loop-editor.test.tsx (1)
22-22: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winRename stale fixture variables after the loop migration.
Both assignments now select
quality-gate-demobut retaindelivery-based names.
web/src/systems/loops/components/__tests__/loop-editor.test.tsx#L22-L22: renamedeliveryDetailtoqualityGateDetailand update its references.web/src/systems/loops/lib/__tests__/loop-config-draft.test.ts#L18-L18: renamedeliveryto a name that identifies thequality-gate-demofixture.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@web/src/systems/loops/components/__tests__/loop-editor.test.tsx` at line 22, Rename deliveryDetail to qualityGateDetail in loop-editor.test.tsx and update all references. In loop-config-draft.test.ts, rename delivery to a name identifying the quality-gate-demo fixture and update its references.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@web/src/systems/loops/adapters/__tests__/loops-api.test.ts`:
- Around line 264-274: Update the annotation test around putLoopAnnotations to
use a node ID defined by the implement-tasks loop, such as execute_task, instead
of plan. Keep the request assertions focused on the valid annotation behavior
for that selected loop.
- Around line 418-424: Update the dry-run assertion in the loops API test to
validate each node’s depends_on relationships in addition to node IDs. Derive
the expected dependency values from the fixture graph edges and assert the
complete node/dependency structure returned by previewNodes, preserving the
expected ordering and catching removed or reversed edges.
In `@web/src/systems/loops/components/__tests__/loop-target-fields.test.tsx`:
- Around line 95-106: Update the test around LoopTargetFields to validate the
serialized loop-target state after both changes, rather than only checking the
input element’s displayed value. Parse the value from loop-target-value and
assert it contains loop_name "implement-tasks" and inputs.slug
"billing-webhooks".
In `@web/src/systems/loops/mocks/fixtures.ts`:
- Around line 324-333: The looprun_stalled fixture has a dangling
parent_generation reference because generation 4 requires generation 3. Update
qualityGateGenerations to emit a valid generation-3 record before generation 4,
preserving the existing lineage and generation-4 data.
---
Outside diff comments:
In `@internal/daemon/loop_resources_integration_test.go`:
- Around line 412-423: Update the catalog assertions in the integration test to
require that found contains exactly the two expected Loop names, implement-tasks
and review-and-fix, rejecting any additional entry such as software-delivery
while preserving the existing metadata checks for those two Loops.
---
Nitpick comments:
In `@web/src/systems/loops/components/__tests__/loop-editor.test.tsx`:
- Line 22: Rename deliveryDetail to qualityGateDetail in loop-editor.test.tsx
and update all references. In loop-config-draft.test.ts, rename delivery to a
name identifying the quality-gate-demo fixture and update its references.
In `@web/src/systems/loops/mocks/fixture-implement-tasks.ts`:
- Around line 8-12: Update the required-skills text in
fixture-implement-tasks.ts to describe cy-execute-task as a “capability” instead
of a “workflow,” while preserving the rest of the instructions and using
“capability” as the canonical artifact term.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: 4a75c3c6-2ff7-4c50-b29a-d1113606f8fc
⛔ Files ignored due to path filters (45)
MIGRATION_GUIDE.mdis excluded by!**/*.mddocs/qa/charters/CH-implement-tasks-docs-truth.mdis excluded by!**/*.mddocs/qa/charters/CH-implement-tasks-dry-run.mdis excluded by!**/*.mddocs/qa/charters/CH-implement-tasks-first-run.mdis excluded by!**/*.mddocs/qa/charters/CH-implement-tasks-import-parity.mdis excluded by!**/*.mddocs/qa/journeys/J-01-arrive-and-use-run.mdis excluded by!**/*.mddocs/qa/journeys/J-02-dry-run-preview.mdis excluded by!**/*.mddocs/qa/personas.mdis excluded by!**/*.mddocs/qa/reports/2026-08-05-implement-tasks.mdis excluded by!**/*.mddocs/qa/scenarios/ET-site-docs-examples-wave-one.mdis excluded by!**/*.mddocs/qa/scenarios/LP-001.mdis excluded by!**/*.mddocs/qa/scenarios/LP-002.mdis excluded by!**/*.mddocs/qa/scenarios/LP-003.mdis excluded by!**/*.mddocs/qa/scenarios/LP-006.mdis excluded by!**/*.mddocs/qa/scenarios/LP-007.mdis excluded by!**/*.mddocs/qa/scenarios/LP-045.mdis excluded by!**/*.mddocs/qa/scenarios/LP-web-run-attention-quarantine-routing.mdis excluded by!**/*.mddocs/qa/scenarios/LP-web-run-session-one-click.mdis excluded by!**/*.mddocs/qa/scenarios/TA-080.mdis excluded by!**/*.mddocs/qa/scenarios/TA-web-task-list-loop-subtask-nesting.mdis excluded by!**/*.mdextensions/dev-cycle/loops/implement-tasks/loop.yamlis excluded by!**/*.yamlinternal/testutil/acpmock/testdata/implement_tasks_fixture.jsonis excluded by!**/*.jsonpackages/site/content/docs/configuration/config-toml.mdxis excluded by!**/*.mdxpackages/site/content/docs/examples/implement-tasks-loop.mdxis excluded by!**/*.mdxpackages/site/content/docs/examples/index.mdxis excluded by!**/*.mdxpackages/site/content/docs/examples/meta.jsonis excluded by!**/*.jsonpackages/site/content/docs/examples/morning-briefing-job.mdxis excluded by!**/*.mdxpackages/site/content/docs/examples/review-and-fix-loop.mdxis excluded by!**/*.mdxpackages/site/content/docs/loops/catalog.mdxis excluded by!**/*.mdxpackages/site/content/docs/loops/index.mdxis excluded by!**/*.mdxpackages/site/content/docs/migration/index.mdxis excluded by!**/*.mdxpackages/ui/src/components/custom/stories/listing-page.stories.tsxis excluded by!**/*.stories.tsxpackages/ui/src/components/custom/stories/topbar.stories.tsxis excluded by!**/*.stories.tsxskills/compozy/references/loops.mdis excluded by!**/*.mdweb/src/systems/automation/components/stories/automation-delete-action.stories.tsxis excluded by!**/*.stories.tsxweb/src/systems/automation/components/stories/automation-detail-panel.stories.tsxis excluded by!**/*.stories.tsxweb/src/systems/automation/components/stories/automation-trigger-form.stories.tsxis excluded by!**/*.stories.tsxweb/src/systems/automation/components/stories/job-form/job-preview.stories.tsxis excluded by!**/*.stories.tsxweb/src/systems/automation/components/stories/trigger-form/trigger-preview.stories.tsxis excluded by!**/*.stories.tsxweb/src/systems/loops/components/stories/loop-configure.stories.tsxis excluded by!**/*.stories.tsxweb/src/systems/loops/components/stories/loop-detail.stories.tsxis excluded by!**/*.stories.tsxweb/src/systems/loops/components/stories/loop-editor.stories.tsxis excluded by!**/*.stories.tsxweb/src/systems/loops/components/stories/loop-node-inventory.stories.tsxis excluded by!**/*.stories.tsxweb/src/systems/loops/components/stories/loop-run-form.stories.tsxis excluded by!**/*.stories.tsxweb/src/systems/loops/routes/loops.stories.tsxis excluded by!**/*.stories.tsx
📒 Files selected for processing (51)
extensions/dev-cycle/embed_test.gointernal/daemon/daemon_agent_definition_e2e_integration_test.gointernal/daemon/daemon_implement_tasks_e2e_integration_test.gointernal/daemon/loop_resources_integration_test.gointernal/daemon/loop_resources_test.gointernal/daemon/loop_tool_schema_source_test.gointernal/loop/start_binding.gointernal/loop/watch_events_ledger.gointernal/session/manager_prompt_contract_test.gointernal/store/globaldb/global_db_task_test.gopackages/site/lib/__tests__/runtime-docs-truth.test.tsweb/src/hooks/routes/__tests__/loop-bindings-map.test.tsweb/src/storybook/route-story-registry.tsweb/src/systems/automation/components/__tests__/automation-catalog.test.tsxweb/src/systems/automation/components/__tests__/automation-detail-panel.test.tsxweb/src/systems/automation/components/__tests__/automation-job-form.test.tsxweb/src/systems/automation/components/__tests__/automation-trigger-form.test.tsxweb/src/systems/automation/lib/__tests__/automation-requests.test.tsweb/src/systems/loops/adapters/__tests__/loops-api.test.tsweb/src/systems/loops/components/__tests__/loop-catalog.test.tsxweb/src/systems/loops/components/__tests__/loop-configure-dialog.test.tsxweb/src/systems/loops/components/__tests__/loop-detail.test.tsxweb/src/systems/loops/components/__tests__/loop-editor.test.tsxweb/src/systems/loops/components/__tests__/loop-run-form.test.tsxweb/src/systems/loops/components/__tests__/loop-run-page.test.tsxweb/src/systems/loops/components/__tests__/loop-runs-view.test.tsxweb/src/systems/loops/components/__tests__/loop-start-bindings-panel.test.tsxweb/src/systems/loops/components/__tests__/loop-target-fields.test.tsxweb/src/systems/loops/hooks/__tests__/use-loop-actions.test.tsxweb/src/systems/loops/hooks/__tests__/use-loop-editor-state.test.tsweb/src/systems/loops/hooks/__tests__/use-loops.test.tsxweb/src/systems/loops/lib/__tests__/codec.test.tsweb/src/systems/loops/lib/__tests__/loop-catalog.test.tsweb/src/systems/loops/lib/__tests__/loop-config-draft.test.tsweb/src/systems/loops/lib/__tests__/loop-dsl.test.tsweb/src/systems/loops/lib/__tests__/loop-editor-draft.test.tsweb/src/systems/loops/lib/__tests__/loop-editor-layout.test.tsweb/src/systems/loops/lib/__tests__/loop-editor-lint.test.tsweb/src/systems/loops/lib/__tests__/loop-graph.test.tsweb/src/systems/loops/lib/__tests__/loop-runs-view.test.tsweb/src/systems/loops/lib/__tests__/loop-target.test.tsweb/src/systems/loops/mocks/fixture-editor-lifecycle.tsweb/src/systems/loops/mocks/fixture-hero-path.tsweb/src/systems/loops/mocks/fixture-implement-tasks.tsweb/src/systems/loops/mocks/fixture-run-details.tsweb/src/systems/loops/mocks/fixtures.tsweb/src/systems/loops/mocks/handlers.tsweb/src/systems/loops/mocks/index.tsweb/src/systems/os/apps/automation/__tests__/use-automation-jobs-page.test.tsxweb/src/systems/os/apps/automation/__tests__/use-automation-triggers-page.test.tsxweb/src/systems/tasks/lib/query-options.ts
💤 Files with no reviewable changes (1)
- web/src/systems/tasks/lib/query-options.ts
|
| Filename | Overview |
|---|---|
| extensions/dev-cycle/loops/implement-tasks/loop.yaml | Defines the reduced five-node Loop, but its completed-only task output contract still converts legitimate blockers into schema failures. |
| web/src/systems/tasks/lib/query-options.ts | Removes periodic task-catalog refresh without replacing the existing live-update path. |
| docs/qa/reports/2026-08-05-implement-tasks.md | Records the targeted QA run, but the required impact audit and assigned-scenario verification remain incomplete. |
| internal/testutil/acpmock/fixture_prompt_strip.go | Normalizes appended output-contract instructions for ACP fixture prompt matching. |
| packages/site/content/docs/examples/implement-tasks-loop.mdx | Documents the renamed bundled Loop and reduced public contract. |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart LR
A[slug_input] --> B[load_tasks]
B --> C[implement]
C --> D[execute_task]
D --> E[collect]
Reviews (4): Last reviewed commit: "test: stabilize browser E2E contracts" | Re-trigger Greptile
| initialPageParam: INITIAL_CURSOR, | ||
| getNextPageParam: lastPage => (lastPage.page.has_more ? lastPage.page.next_cursor : undefined), | ||
| staleTime: DEFAULT_STALE_TIME, | ||
| // The catalog has no SSE subscription; without a poll a stale status stays | ||
| // on screen for as long as the window keeps focus. | ||
| refetchInterval: DEFAULT_REFETCH_INTERVAL, | ||
| enabled, | ||
| }); | ||
| } |
There was a problem hiding this comment.
When a task changes status while its catalog remains open, stream handling marks the list query stale with refetching disabled, and this removal eliminates its periodic refresh. Status labels, grouping, progress, errors, and counts therefore remain stale until another action triggers a fetch.
Context Used: CLAUDE.md (source)
Knowledge Base Used: Web Frontend
| - **Scope:** Hard rename the bundled dev-cycle Loop from `software-delivery` to `implement-tasks`, reduce its public contract to task implementation and collection, and update Web/docs/skill projections. | ||
| - **Cadence tier:** targeted | ||
| - **Build:** `a00a9df5` + working tree · **Environment:** fresh isolated targeted lab; runtime, CLI, API, and Web required |
There was a problem hiding this comment.
Cross-surface audit is missing
This completion report omits the required Compozy Impact Audit for a runtime and public-contract change. Add the native-tool, extensibility and hooks, workspace-isolation, and official-skill checks so the durable QA record covers every required surface.
Context Used: CLAUDE.md (source)
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@internal/testutil/acpmock/fixture_test.go`:
- Around line 990-1012: Add regression subtests in the fixture prompt-stripping
tests for malformed output-contract JSON and malformed schema-retry suffixes.
Use t.Run cases that pass prompts containing invalid JSON, then assert the
complete original prompt is preserved, covering both contract-only and
retry-plus-contract variants without changing the valid-schema cases.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: 43f3b6ef-5c88-4fcd-85df-eacf54cfd1bf
📒 Files selected for processing (2)
internal/testutil/acpmock/fixture_prompt_strip.gointernal/testutil/acpmock/fixture_test.go
|
Too many files changed for review (110 files, 100 file limit). Bypass the limit by tagging |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@web/src/systems/os/hooks/use-animation-frame-latest.ts`:
- Around line 14-16: Replace the useEffect that updates onFrameRef in
use-animation-frame-latest.ts:14-16 with useLayoutEffect so the latest callback
is available before the next animation frame. In
use-window-merge-target.ts:47-52, refresh frameRef synchronously before
registering callbacks that read it from the merge target coordinator; both sites
require direct changes.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: 87073e3e-c8f6-433e-a57c-cdcf361aac90
📒 Files selected for processing (3)
web/src/systems/os/hooks/use-animation-frame-latest.tsweb/src/systems/os/hooks/use-window-merge-target.tsweb/src/systems/os/lib/window-merge-target-coordinator.ts
Simplify the bundled task execution loop to stop after implementation and remove its review, verification, and approval controls. BREAKING CHANGE: remove software-delivery; use implement-tasks without gate inputs.
Use valid annotation IDs, assert dry-run dependencies and target state, preserve complete fixture lineage, and enforce the exact bundled Loop catalog.
f8afbc1 to
f503bc5
Compare
Summary
software-deliverytoimplement-taskswith no compatibility alias.slug_input → load_tasks → implement → execute_task → collect.Why
The first bundled version should do one job clearly: implement authored task files in dependency order. The old Loop mixed implementation with a second control layer for review, command verification, and human approval. Those final controls made the contract, configuration, UI projections, and examples larger than needed for the initial release.
This is an intentional hard cut for the alpha:
software-delivery,target_branch, andverify_commandare removed rather than aliased or supported through fallback behavior.Changes
Bundled Loop contract
extensions/dev-cycle/loops/implement-tasks/loop.yaml.slug,implementer, andauto_commitinputs.review,verify, andapprovenodes and their edges.completedafter task-level verification and tracking succeed.review-and-fixbundled Loop unchanged.Runtime and fixtures
software-deliveryis only an arbitrary identifier.Web and Storybook
implement-tasks.concurrency: forbiddefinition.quality-gate-demofixture so generic review/verify/approve UI coverage does not imply those controls belong toimplement-tasks.Docs and agent guidance
software-deliveryexample and route withimplement-tasks.verify_commandbecause custom Loops may still define command-gate inputs.QA tracker
docs/qa/reports/2026-08-05-implement-tasks.md.Breaking change
Any configuration, CLI/API invocation, automation binding, or documentation link using
software-deliverymust switch toimplement-tasks.Before:
After:
There is no alias or compatibility bridge.
Verification
make gate-full— pass and CURRENT for fingerprint8e16255d709ed703039fc3cc32060fc84a537a27..cache/gate/logs/full-1786021550.log.-race.Behavior-first QA
looprun-be5c188ac1b8dafe) imported and completed a disposable task, updated tracking, reachedcollect, and terminated asdone.Donerun (looprun-a5bc71112afd8ec0).clean: true; no lab daemon, tmux server, browser, watcher, or dev server survived.See
docs/qa/reports/2026-08-05-implement-tasks.mdfor the durable report.CodeRabbit review
03af995b.CI remediation
ef338a3aupdates the ACP mock's canonical prompt normalization, with coverage in its owning suite. It does not weaken action schema validation or change production Loop behavior.4d04a5b5waits for the selector to close and recognizes the explicit subprocess failure without widening the contract to arbitrary errors. All three originally failing scenarios and the full non-nightly Web E2E suite pass locally.84ac474cisolates the production subscription to the snap overlay, preserving the same geometry and visibility while avoiding those unrelated renders.f8afbc10removes the XState transition from the frame coalescer and replaces 11 independent pointer listeners and animation-frame callbacks with one gesture-wide coordinator while preserving top-layer and occlusion semantics.Compozy Impact Audit
implement-tasks.ext__dev_cycle__import_taskswas verified through CLI/UDS and HTTP.review-and-fix, extension action IDs, hooks, registries, bridge SDKs, and MCP sidecars are unchanged.skills/compozy/references/loops.mdnow names and describesimplement-tasks.Release notes
software-deliveryLoop with the smallerimplement-taskscontract.Summary by CodeRabbit
New Features
implement-tasksworkflow for sequential implementation, verification, retries, tracking updates, and optional commits.Bug Fixes
implement-tasks.Tests