Skip to content

feat: replace software-delivery with implement-tasks - #325

Merged
pedronauck merged 8 commits into
mainfrom
change-devcycle-loop
Aug 6, 2026
Merged

pedronauck merged 8 commits into
mainfrom
change-devcycle-loop

Conversation

@pedronauck

@pedronauck pedronauck commented Aug 6, 2026 •

Copy link
Copy Markdown
Member

Summary

  • Hard-renames the bundled dev-cycle Loop from software-delivery to implement-tasks with no compatibility alias.
  • Reduces the bundled graph to task loading and implementation: slug_input → load_tasks → implement → execute_task → collect.
  • Removes the bundled review, verification, and approval stages while keeping task-level validation, self-review, tracking, and optional per-task commits inside the implementation agent prompt.

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, and verify_command are removed rather than aliased or supported through fallback behavior.

Changes

Bundled Loop contract

  • Moves the embedded definition to extensions/dev-cycle/loops/implement-tasks/loop.yaml.
  • Keeps only slug, implementer, and auto_commit inputs.
  • Deletes the review, verify, and approve nodes and their edges.
  • Deletes the verification contract, stale hash fields, target branch handling, and gate-specific output states.
  • Restricts the task agent's completion status to completed after task-level verification and tracking succeed.
  • Leaves the separate review-and-fix bundled Loop unchanged.

Runtime and fixtures

  • Renames the daemon end-to-end test and ACP mock fixture.
  • Updates embedded-resource, tool-schema, catalog, and runtime tests to the new name and reduced contract.
  • Preserves generic custom-Loop test data where software-delivery is only an arbitrary identifier.
  • Keeps historical QA evidence and archived design snapshots immutable.

Web and Storybook

  • Replaces active catalog, detail, run, automation, route, and Storybook references with implement-tasks.
  • Models the bundled Loop as the exact five-node, version-0, concurrency: forbid definition.
  • Aligns dry-run nodes, resolved defaults, input provenance, generation outputs, annotations, SSE generation, and submitted run inputs with daemon behavior.
  • Adds a workspace-only quality-gate-demo fixture so generic review/verify/approve UI coverage does not imply those controls belong to implement-tasks.
  • Removes accidental polling from the task catalog query, which was exposed by the canonical Web suite during this change.

Docs and agent guidance

  • Replaces the public software-delivery example and route with implement-tasks.
  • Updates the catalog, Loop overview, configuration example, migration guide, related examples, and official Compozy skill.
  • Documents the reduced inputs and the fact that no final review/verification/approval stage is part of this bundled Loop.
  • Keeps generic DSL documentation for verify_command because custom Loops may still define command-gate inputs.

QA tracker

  • Adds four immutable charters for first run, dry-run, import parity, and docs truth.
  • Re-walks and records all affected scenarios and journeys.
  • Adds the targeted QA report at docs/qa/reports/2026-08-05-implement-tasks.md.

Breaking change

Any configuration, CLI/API invocation, automation binding, or documentation link using software-delivery must switch to implement-tasks.

Before:

[loops.inputs.software-delivery]
target_branch = "main"
verify_command = "make gate"
auto_commit = false

After:

[loops.inputs.implement-tasks]
auto_commit = false

There is no alias or compatibility bridge.

Verification

  • make gate-full — pass and CURRENT for fingerprint 8e16255d709ed703039fc3cc32060fc84a537a27.
  • Full gate log: .cache/gate/logs/full-1786021550.log.
  • Focused Web coverage: 44 tests across the MSW adapter contract, Loop codec, and automation trigger form — pass.
  • Web typecheck through Turborepo — pass.
  • All seven E2E groups affected by ACP mock prompt matching pass together under -race.
  • Full non-nightly Web Playwright suite through Turborepo — pass.
  • Strict QA evidence audit — pass.

Behavior-first QA

  • Fresh isolated lab covering runtime, CLI, HTTP/UDS, Web, and public docs.
  • Four personas and four journeys completed; eight affected scenarios passed and one unchanged canary was intentionally skipped.
  • A real Codex-backed run (looprun-be5c188ac1b8dafe) imported and completed a disposable task, updated tracking, reached collect, and terminated as done.
  • The Web start path also reached a truthful Done run (looprun-a5bc71112afd8ec0).
  • Valid and invalid task-import calls were checked through CLI/UDS and HTTP.
  • The retired Loop API and docs routes were confirmed absent.
  • No QA findings and no human verification or decision blockers.
  • Teardown evidence records clean: true; no lab daemon, tmux server, browser, watcher, or dev server survived.

See docs/qa/reports/2026-08-05-implement-tasks.md for the durable report.

CodeRabbit review

  • Round 1: addressed all four inline findings plus the additional outside-diff finding in commit 03af995b.
  • Resolved all four applicable inline threads through GitHub GraphQL after the fixes were pushed.
  • Round 2: approved with no new inline, minor, nitpick, or outside-diff findings.

CI remediation

  • The first combined E2E lane exposed a regression from base commit fix: loop run bugs #324: run-agent output-contract instructions were appended before ACP fixture matching, so existing fixtures no longer matched their original user prompts.
  • Commit ef338a3a updates 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.
  • The rerun exposed two stale browser expectations: prompt submission could race the runtime-selector close transition, and webhook failure diagnostics omitted the newer explicit ACP subprocess-exit wording.
  • Commit 4d04a5b5 waits 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.
  • Two remote runs also exposed a real E2E-023 frame-budget hotspot: frame-rate snap previews re-rendered the desktop shell and all 12 window trees. Commit 84ac474c isolates the production subscription to the snap overlay, preserving the same geometry and visibility while avoiding those unrelated renders.
  • A later remote run found a remaining 63 ms drag task in the per-window merge hit-test path. Commit f8afbc10 removes 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.
  • The 50 ms contract, event cadence, and tests remain unchanged. The 32-test canonical interaction suite passed, E2E-023 passed 10/10 locally with no drag or convergence long task, the full 135-scenario Web E2E suite passed, and the final monorepo gate passed.

Compozy Impact Audit

  • Native tools: No tool ID or schema change. The generic Loop tools continue to manage bundled Loops; catalog/name/input expectations now expose implement-tasks. ext__dev_cycle__import_tasks was verified through CLI/UDS and HTTP.
  • Extensibility and hooks: The embedded extension resource path, bundled Loop name, and config namespace change. review-and-fix, extension action IDs, hooks, registries, bridge SDKs, and MCP sidecars are unchanged.
  • Workspace data isolation: No storage model or scope change. Loop catalog, dry-run, start, run detail, SSE, and tool calls were exercised in an isolated workspace; the changed data remains workspace-scoped.
  • Official Compozy skill: skills/compozy/references/loops.md now names and describes implement-tasks.

Release notes

  • Feature / breaking: Replace the bundled software-delivery Loop with the smaller implement-tasks contract.
  • Bug fix: Stop the Web task catalog from polling after a successful query.
  • Documentation: Update Loop examples, configuration, migration guidance, QA records, and official skill references.

Summary by CodeRabbit

  • New Features

    • Added the implement-tasks workflow for sequential implementation, verification, retries, tracking updates, and optional commits.
    • Added dry-run previews with resolved inputs and planned workflow steps.
    • Improved window-snapping previews with in-layer overlay feedback.
  • Bug Fixes

    • Standardized loop and automation behavior around implement-tasks.
    • Improved task-run data handling and event payload validation.
    • Prevented unnecessary periodic task-list refreshes.
  • Tests

    • Expanded coverage for workflow execution, inputs, statuses, dry runs, and task journeys.

@vercel

vercel Bot commented Aug 6, 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 6, 2026 3:11pm

Request Review

@coderabbitai

coderabbitai Bot commented Aug 6, 2026 •

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It 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 reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

The PR replaces software-delivery with implement-tasks and quality-gate-demo fixtures. It adds task execution and dry-run coverage, updates daemon and web tests, removes task polling, centralizes merge-target handling, and normalizes prompt-contract stripping.

Changes

Implement-tasks loop migration

Layer / File(s) Summary
Loop contract and execution flow
web/src/systems/loops/mocks/*, extensions/dev-cycle/embed_test.go
Adds task import, sequential implementation, retries, completed-only output validation, prompt rendering, generation fixtures, and resolved run inputs.
Daemon registration and journeys
internal/daemon/*
Updates catalog, compilation, resource, fork, cleanup, and end-to-end tests for implement-tasks.
Web loop mocks and API coverage
web/src/systems/loops/mocks/*, web/src/systems/loops/adapters/*
Adds graph-based dry-run nodes, input origins, run inputs, quality-gate fixtures, and expanded API assertions.
Loop UI and hook coverage
web/src/systems/loops/components/*, web/src/systems/loops/hooks/*, web/src/systems/loops/lib/*
Updates catalog, editor, run form, target, lifecycle, hook, codec, and run-detail tests for the new fixtures.
Automation and supporting behavior
web/src/systems/automation/*, web/src/hooks/routes/*, internal/loop/*, web/src/systems/os/*
Updates loop targets, uses shared payload identifiers, removes task-list polling, strips valid prompt contracts, and centralizes window merge-target processing.

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
Loading

Possibly related PRs

  • compozy/compozy#326: Both PRs update loop payload handling, task polling, and prompt-contract test support.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 11.11% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main breaking change: replacing the bundled software-delivery Loop with implement-tasks.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch change-devcycle-loop

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 6, 2026 •

Copy link
Copy Markdown
Contributor

React Doctor found no new issues. 🎉

Reviewed by React Doctor for commit f8afbc1.

@coderabbitai coderabbitai Bot left a comment

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.

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 win

Reject the removed Loop from the catalog.

This assertion only requires implement-tasks and review-and-fix to exist. It still passes if software-delivery remains registered as a compatibility alias.

Assert that found contains 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 win

Replace the prohibited term.

Line 10 calls cy-execute-task a “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 capability as the canonical artifact name; never use recipe, workflow, procedure, or playbook.

🤖 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 win

Rename stale fixture variables after the loop migration.

Both assignments now select quality-gate-demo but retain delivery-based names.

  • web/src/systems/loops/components/__tests__/loop-editor.test.tsx#L22-L22: rename deliveryDetail to qualityGateDetail and update its references.
  • web/src/systems/loops/lib/__tests__/loop-config-draft.test.ts#L18-L18: rename delivery to a name that identifies the quality-gate-demo fixture.
🤖 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

📥 Commits

Reviewing files that changed from the base of the PR and between a00a9df and 0e7a074.

⛔ Files ignored due to path filters (45)
  • MIGRATION_GUIDE.md is excluded by !**/*.md
  • docs/qa/charters/CH-implement-tasks-docs-truth.md is excluded by !**/*.md
  • docs/qa/charters/CH-implement-tasks-dry-run.md is excluded by !**/*.md
  • docs/qa/charters/CH-implement-tasks-first-run.md is excluded by !**/*.md
  • docs/qa/charters/CH-implement-tasks-import-parity.md is excluded by !**/*.md
  • docs/qa/journeys/J-01-arrive-and-use-run.md is excluded by !**/*.md
  • docs/qa/journeys/J-02-dry-run-preview.md is excluded by !**/*.md
  • docs/qa/personas.md is excluded by !**/*.md
  • docs/qa/reports/2026-08-05-implement-tasks.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-site-docs-examples-wave-one.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-001.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-002.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-003.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-045.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-web-run-attention-quarantine-routing.md is excluded by !**/*.md
  • docs/qa/scenarios/LP-web-run-session-one-click.md is excluded by !**/*.md
  • docs/qa/scenarios/TA-080.md is excluded by !**/*.md
  • docs/qa/scenarios/TA-web-task-list-loop-subtask-nesting.md is excluded by !**/*.md
  • extensions/dev-cycle/loops/implement-tasks/loop.yaml is excluded by !**/*.yaml
  • internal/testutil/acpmock/testdata/implement_tasks_fixture.json is excluded by !**/*.json
  • packages/site/content/docs/configuration/config-toml.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/examples/implement-tasks-loop.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/examples/index.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/examples/meta.json is excluded by !**/*.json
  • packages/site/content/docs/examples/morning-briefing-job.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/examples/review-and-fix-loop.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/loops/catalog.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/loops/index.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/migration/index.mdx is excluded by !**/*.mdx
  • packages/ui/src/components/custom/stories/listing-page.stories.tsx is excluded by !**/*.stories.tsx
  • packages/ui/src/components/custom/stories/topbar.stories.tsx is excluded by !**/*.stories.tsx
  • skills/compozy/references/loops.md is excluded by !**/*.md
  • 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-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-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-inventory.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/routes/loops.stories.tsx is excluded by !**/*.stories.tsx
📒 Files selected for processing (51)
  • extensions/dev-cycle/embed_test.go
  • internal/daemon/daemon_agent_definition_e2e_integration_test.go
  • internal/daemon/daemon_implement_tasks_e2e_integration_test.go
  • internal/daemon/loop_resources_integration_test.go
  • internal/daemon/loop_resources_test.go
  • internal/daemon/loop_tool_schema_source_test.go
  • internal/loop/start_binding.go
  • internal/loop/watch_events_ledger.go
  • internal/session/manager_prompt_contract_test.go
  • internal/store/globaldb/global_db_task_test.go
  • packages/site/lib/__tests__/runtime-docs-truth.test.ts
  • web/src/hooks/routes/__tests__/loop-bindings-map.test.ts
  • web/src/storybook/route-story-registry.ts
  • web/src/systems/automation/components/__tests__/automation-catalog.test.tsx
  • web/src/systems/automation/components/__tests__/automation-detail-panel.test.tsx
  • web/src/systems/automation/components/__tests__/automation-job-form.test.tsx
  • web/src/systems/automation/components/__tests__/automation-trigger-form.test.tsx
  • web/src/systems/automation/lib/__tests__/automation-requests.test.ts
  • web/src/systems/loops/adapters/__tests__/loops-api.test.ts
  • web/src/systems/loops/components/__tests__/loop-catalog.test.tsx
  • web/src/systems/loops/components/__tests__/loop-configure-dialog.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-page.test.tsx
  • web/src/systems/loops/components/__tests__/loop-runs-view.test.tsx
  • web/src/systems/loops/components/__tests__/loop-start-bindings-panel.test.tsx
  • web/src/systems/loops/components/__tests__/loop-target-fields.test.tsx
  • web/src/systems/loops/hooks/__tests__/use-loop-actions.test.tsx
  • web/src/systems/loops/hooks/__tests__/use-loop-editor-state.test.ts
  • web/src/systems/loops/hooks/__tests__/use-loops.test.tsx
  • web/src/systems/loops/lib/__tests__/codec.test.ts
  • web/src/systems/loops/lib/__tests__/loop-catalog.test.ts
  • web/src/systems/loops/lib/__tests__/loop-config-draft.test.ts
  • web/src/systems/loops/lib/__tests__/loop-dsl.test.ts
  • web/src/systems/loops/lib/__tests__/loop-editor-draft.test.ts
  • web/src/systems/loops/lib/__tests__/loop-editor-layout.test.ts
  • web/src/systems/loops/lib/__tests__/loop-editor-lint.test.ts
  • web/src/systems/loops/lib/__tests__/loop-graph.test.ts
  • web/src/systems/loops/lib/__tests__/loop-runs-view.test.ts
  • web/src/systems/loops/lib/__tests__/loop-target.test.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-implement-tasks.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/os/apps/automation/__tests__/use-automation-jobs-page.test.tsx
  • web/src/systems/os/apps/automation/__tests__/use-automation-triggers-page.test.tsx
  • web/src/systems/tasks/lib/query-options.ts
💤 Files with no reviewable changes (1)
  • web/src/systems/tasks/lib/query-options.ts

Comment thread web/src/systems/loops/adapters/__tests__/loops-api.test.ts
Comment thread web/src/systems/loops/adapters/__tests__/loops-api.test.ts Outdated
Comment thread web/src/systems/loops/mocks/fixtures.ts
@greptile-apps

greptile-apps Bot commented Aug 6, 2026 •

Copy link
Copy Markdown

Greptile Summary

The PR hard-renames the bundled task-delivery Loop to implement-tasks and reduces it to task loading, serial implementation, and collection.

  • Updates the bundled Loop contract and runtime fixtures.
  • Aligns Web, Storybook, automation, documentation, and migration examples with the new name and inputs.
  • Adds targeted QA charters and a completion report for the renamed flow.

Confidence Score: 1/5

The PR does not appear safe to merge because the task catalog can remain stale, blocked implementations are misreported as schema failures, and the required completion evidence remains incomplete.

The current code still removes the task catalog’s only periodic refresh, restricts implementation results to completed even when work is blocked or verification fails, and marks the QA effort complete without the required impact audit or verification of every assigned scenario.

Files Needing Attention: web/src/systems/tasks/lib/query-options.ts, extensions/dev-cycle/loops/implement-tasks/loop.yaml, docs/qa/reports/2026-08-05-implement-tasks.md

Important Files Changed

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]
Loading

Reviews (4): Last reviewed commit: "test: stabilize browser E2E contracts" | Re-trigger Greptile

Comment on lines 49 to 54
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,
});
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Task catalog stops refreshing

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

Comment thread extensions/dev-cycle/loops/implement-tasks/loop.yaml
Comment on lines +3 to +5
- **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

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 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!

coderabbitai[bot]
coderabbitai Bot previously approved these changes Aug 6, 2026

@coderabbitai coderabbitai Bot left a comment

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.

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

📥 Commits

Reviewing files that changed from the base of the PR and between 03af995 and ef338a3.

📒 Files selected for processing (2)
  • internal/testutil/acpmock/fixture_prompt_strip.go
  • internal/testutil/acpmock/fixture_test.go

Comment thread internal/testutil/acpmock/fixture_test.go
Comment thread docs/qa/reports/2026-08-05-implement-tasks.md
@greptile-apps

greptile-apps Bot commented Aug 6, 2026 •

Copy link
Copy Markdown

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

Bypass the limit by tagging @greptile-apps to review.

@coderabbitai coderabbitai Bot left a comment

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.

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

📥 Commits

Reviewing files that changed from the base of the PR and between 84ac474 and f8afbc1.

📒 Files selected for processing (3)
  • web/src/systems/os/hooks/use-animation-frame-latest.ts
  • web/src/systems/os/hooks/use-window-merge-target.ts
  • web/src/systems/os/lib/window-merge-target-coordinator.ts

Comment thread web/src/systems/os/hooks/use-animation-frame-latest.ts Outdated
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.
@pedronauck
pedronauck force-pushed the change-devcycle-loop branch from f8afbc1 to f503bc5 Compare August 6, 2026 15:08
@pedronauck
pedronauck merged commit 561eb63 into main Aug 6, 2026
6 of 8 checks passed
@pedronauck
pedronauck deleted the change-devcycle-loop branch August 6, 2026 15:08

This branch was successfully deployed

1 active deployment
Preview — f503bc53 Deployed Aug 6, 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.

1 participant