Skip to content

RUFU-018: Land pnpm env fix + no-commits dep-sync skip - #2438

Closed
ischindl wants to merge 27 commits into
Runfusion:mainfrom
ischindl:land/rufu-018-picks-v2
Closed

RUFU-018: Land pnpm env fix + no-commits dep-sync skip#2438
ischindl wants to merge 27 commits into
Runfusion:mainfrom
ischindl:land/rufu-018-picks-v2

Conversation

@ischindl

@ischindl ischindl commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

Manually landing RUFU-018 commits (bypassing broken AI merge pipeline).

4 commits:

  • feat(RUFU-018): complete Step 1 — add noCommitsExpected to LandRepoContext and skip dep sync
  • feat(RUFU-018): complete Step 2 — add corepack/pnpm env passthrough in installWorktreeDependencies
  • test(RUFU-018): complete Step 3 — add no-commits dep-sync skip tests
  • test(RUFU-018): complete Step 4 — add env passthrough tests

Closes RUFU-018

Summary by CodeRabbit

  • New Features

    • Added CLI support for additional project-scoped integration/merge/push/review/handoff settings (including integrationBranch and mergeIntegrationWorktree).
    • Added an operator tool to resume stuck workflow steps with a required audit reason.
    • No-commit tasks can now finalize as clean no-ops without running dependency sync.
  • Bug Fixes

    • Improved recovery from context/token limit overflows by compacting session context before retry.
    • Improved database migration resilience by isolating failures per-table.
  • Documentation

    • Expanded CLI settings and workflow tool documentation, plus an access workaround decision record.

@coderabbitai

coderabbitai Bot commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The release expands project-scoped CLI settings, adds workflow-step recovery, hardens PostgreSQL migration paths, updates no-commit merge handling, forwards dependency-install environments, and routes context-overflow recovery through direct session compaction.

Changes

CLI and release surface

Layer / File(s) Summary
CLI settings and release documentation
.changeset/*, docs/cli-reference.md, docs/integration-branch-cli-setting.md, docs/infra/*, packages/cli/src/commands/settings.ts, packages/cli/src/commands/__tests__/settings.test.ts, package.json
Project merge, integration, push, and handoff settings are added to typed allowlists, display groups, documentation, and regression tests; release and landing metadata are updated.
Workflow tool and dashboard wiring
packages/cli/src/extension.ts, packages/cli/skill/fusion/*, packages/cli/src/__tests__/extension.test.ts, packages/cli/src/commands/dashboard.ts
The operator resume tool is registered and documented, and dashboard startup warms task stores for non-current projects.

Core workflow and PostgreSQL reliability

Layer / File(s) Summary
Workflow-step resume state and persistence
packages/core/src/store.ts, packages/core/src/task-merge.ts, packages/core/src/types/workflow-steps.ts, packages/core/src/index.ts, packages/core/src/__tests__/*
Pending workflow steps can be selected, marked failed with resume metadata, persisted, audited, and exposed through the core API.
PostgreSQL schema and migration recovery
packages/core/src/postgres/plugin-schema-hook.ts, packages/core/src/postgres/sqlite-migrator.ts, packages/core/src/postgres/startup-factory.ts, packages/core/src/postgres/embedded-lifecycle.ts
First-boot DDL guards, per-table migration savepoints, and migration diagnostics are updated.

Engine merge and runtime behavior

Layer / File(s) Summary
No-commit merge orchestration
packages/engine/src/merger-ai.ts, packages/engine/src/__tests__/merger-ai*.test.ts
No-commit tasks detect empty or missing branches, skip dependency synchronization where applicable, and retain normal processing for real changes.
Dependency environment and token overflow recovery
packages/engine/src/merge-dependency-sync.ts, packages/engine/src/pi.ts, packages/engine/src/__tests__/*
Dependency installation forwards selected environment variables, and exact context-overflow errors proceed directly to session compaction.

Estimated code review effort: 5 (Critical) | ~90+ minutes

Possibly related PRs

Suggested reviewers: gsxdsm

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% 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
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main changes: pnpm env passthrough and skipping dependency sync for no-commit tasks.
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.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

@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: 11

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/core/src/postgres/sqlite-migrator.ts (1)

891-930: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

The post-copy phase runs outside any savepoint, so the "UPDATE always succeeds" claim does not hold.

Only migrateTable is savepoint-wrapped. The same try also covers buildMigrationPlan (Line 769) and migrateLegacyProjectPluginRowsOnSession (Line 891). If either throws, there is no savepoint to roll back to, the transaction stays aborted, and both the finally block's SET session_replication_role = origin and the status UPDATE at Line 923 fail with "current transaction is aborted" — the failure mode this change set out to eliminate. The UPDATE's own throw then masks copyError. The Line 901 log also attributes every error in this catch to "plugin migration" even when planning failed.

Wrap the plugin/post-copy work in its own savepoint (and roll back to it on error) so the abort state is always cleared before the status write, and soften the comment/log accordingly.

🛡️ Proposed fix
     if (!dryRun) {
+      await migrationDb.execute(sql`SAVEPOINT migration_post_copy`);
+    }
+    try {
       for (const source of sources) {
         if (source.pgSchema !== PROJECT_SCHEMA) continue;
         const projectPath = source.projectPath ?? options.projectPath;
         if (sqliteTableExists(source.sqlitePath, "plugins") && !projectPath) {
           throw new Error(`projectPath is required to migrate legacy plugin state from ${source.sqlitePath}`);
         }
         if (projectPath) {
           await migrateLegacyProjectPluginRowsOnSession(
             migrationDb,
             source.sqlitePath,
             projectPath,
           );
         }
       }
+      if (!dryRun) {
+        await migrationDb.execute(sql`RELEASE SAVEPOINT migration_post_copy`);
+      }
+    } catch (error) {
+      if (!dryRun) {
+        await migrationDb
+          .execute(sql`ROLLBACK TO SAVEPOINT migration_post_copy`)
+          .catch(() => undefined);
+      }
+      throw error;
     }
   } catch (error) {
     copyError = error;
-    log.warn(
-      `Post-copy phase (plugin migration) failed: ${getErrorMessage(error)}`,
-    );
+    log.warn(`Migration copy phase failed: ${getErrorMessage(error)}`);
   } finally {

And soften the comment at Lines 917-922:

       /*
       FNXC:PostgresMigration 2026-07-18-10:30:
-      The transaction abort state was cleared by ROLLBACK TO SAVEPOINT above,
-      so this UPDATE always succeeds. The original error (not "current transaction
-      is aborted") is recorded, preserving diagnostic information.
+      Every failing phase above rolls back to its own savepoint, so the
+      transaction abort state is cleared before this UPDATE runs and the
+      original error (not "current transaction is aborted") is recorded.
       */
🤖 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 `@packages/core/src/postgres/sqlite-migrator.ts` around lines 891 - 930, Wrap
the entire post-copy phase, including buildMigrationPlan and
migrateLegacyProjectPluginRowsOnSession, in its own savepoint and roll back to
it when the phase fails before re-enabling foreign-key enforcement. Update the
catch log to describe post-copy/planning failures rather than only plugin
migration, and soften the comment before the failed-status UPDATE to avoid
claiming it always succeeds; preserve copyError so the original failure is
rethrown without being masked.
🧹 Nitpick comments (5)
packages/core/src/task-merge.ts (1)

326-347: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick win

Remove or wire the unused pre-merge helper.

findPendingPreMergeStep is only exercised by merge-bypass tests, while resumeWorkflowStep still requires an explicit stepId and does not use it. Either connect it as the fallback when no stepId is supplied, or drop the export along with its tests.

🤖 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 `@packages/core/src/task-merge.ts` around lines 326 - 347, The exported
findPendingPreMergeStep helper is unused by production code. Wire it into
resumeWorkflowStep as the fallback step lookup when stepId is omitted,
preserving explicit stepId behavior; otherwise remove the helper and its
merge-bypass tests.
packages/engine/src/pi.ts (1)

467-500: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Extract the duplicated overflow-detection/logging block into a shared helper.

Both promptWithFallback copies independently parse MAX_TOKENS_OVERFLOW_EXACT_PATTERN and log the same warning — the duplication is explicitly acknowledged in the comments as intentional (the createFnAgent-attached copy is the only reachable one for session-created agents). A small shared helper (e.g. logProviderOverflowIfMatched(errorMessage: string): void) next to the regex constant would let a future tweak to the log format or pattern happen once instead of twice.

♻️ Proposed helper extraction
+function logProviderOverflowIfMatched(errorMessage: string): void {
+  const overflowMatch = MAX_TOKENS_OVERFLOW_EXACT_PATTERN.exec(errorMessage);
+  if (overflowMatch) {
+    const maxContext = Number(overflowMatch[1]);
+    const requestedOutput = Number(overflowMatch[2]);
+    const actualInput = Number(overflowMatch[3]);
+    piLog.warn(
+      `promptWithFallback: provider overflow (ctx=${maxContext}, ` +
+      `input=${actualInput}, requested=${requestedOutput}) — ` +
+      `proceeding to session compaction`,
+    );
+  }
+}

Then call logProviderOverflowIfMatched(errorMessage); at both sites instead of the inline block.

Also applies to: 2700-2723

🤖 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 `@packages/engine/src/pi.ts` around lines 467 - 500, Extract the duplicated
MAX_TOKENS_OVERFLOW_EXACT_PATTERN parsing and warning logic from both
promptWithFallback copies into a shared
logProviderOverflowIfMatched(errorMessage: string) helper near the regex
constant. Replace each inline overflowMatch block with a call to this helper,
preserving the existing warning details and behavior.
packages/engine/src/__tests__/max-tokens-overflow-recovery.test.ts (2)

70-102: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

"Safety calculation" tests cover a feature this PR removes from production.

Per the pi.ts changes in this same PR, the reduced-max_tokens-retry path (and its MAX_TOKENS_OVERFLOW_SAFETY_MARGIN-based safe-token calculation) was removed because session.prompt() ignores maxTokens — recovery now goes directly to session compaction. This describe("safety calculation", ...) block still asserts the old formula's arithmetic even though nothing in production calls it anymore, which risks confusing future readers into thinking that retry path still exists.

🤖 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 `@packages/engine/src/__tests__/max-tokens-overflow-recovery.test.ts` around
lines 70 - 102, Remove the entire “safety calculation” describe block from
max-tokens-overflow-recovery.test.ts, including its safeMaxTokens arithmetic
tests and references to MAX_TOKENS_OVERFLOW_SAFETY_MARGIN. Keep tests for the
current direct session-compaction recovery behavior unchanged.

10-41: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Test asserts against a copy-pasted regex, not the real production constant.

MAX_TOKENS_OVERFLOW_EXACT_PATTERN is locally re-declared here as a "mirror" because it isn't exported from pi.ts. If the production pattern is later tweaked (or accidentally broken), this suite won't catch it since it only tests its own duplicate copy. Exporting the constant from pi.ts and importing it here would make this an actual regression test instead of a documentation-by-duplication test.

🤖 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 `@packages/engine/src/__tests__/max-tokens-overflow-recovery.test.ts` around
lines 10 - 41, Export the production overflow regex constant from pi.ts, then
remove the locally duplicated MAX_TOKENS_OVERFLOW_EXACT_PATTERN in
max-tokens-overflow-recovery.test.ts and import the exported symbol instead.
Keep the existing pattern-matching assertions unchanged so they exercise the
real production pattern.
packages/engine/src/merger-ai.ts (1)

1175-1231: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Another copy of the "demote to todo with preserved progress" boilerplate.

This new branch-missing no-commits lane (store.updateTask + logEntry + audit.database + moveTask + return) duplicates the same ~30-line pattern already repeated for the ai-empty-merge step-evidence guard, the no-landed-proof guard, and the executor-veto guard later in this function, plus the workspace equivalent in landWorkspaceTask. Worth extracting a small shared helper (e.g. demoteToTodoWithReason(store, audit, taskId, reason, metadata, lane)) so future guards don't keep re-copying this block.

🤖 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 `@packages/engine/src/merger-ai.ts` around lines 1175 - 1231, Extract the
repeated demotion workflow from the no-commits branch in the finalize flow into
a shared helper, such as demoteToTodoWithReason, that performs updateTask,
logEntry, audit.database, moveTask with preserved progress, and returns the
standard result. Reuse this helper in the ai-empty-merge, no-landed-proof,
executor-veto, and landWorkspaceTask guards, preserving each guard’s reason,
metadata, lane, and return semantics.
🤖 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 `@docs/infra/push-access-blocker-decision.md`:
- Around line 86-92: Update the landing recipe’s feature-branch setup and
cleanup to use git worktree add and git worktree remove instead of git checkout
-b in the primary checkout. Ensure the primary checkout remains on main and
adjust the related commands around the documented feature-branch workflow
consistently.
- Around line 13-17: Specify a language on the fenced shell transcript by
changing its opening fence to use console or text, preserving the existing
command output unchanged.

In `@docs/integration-branch-cli-setting.md`:
- Around line 8-18: Add language identifiers to every fenced code block in
docs/integration-branch-cli-setting.md, using text for output or value-list
blocks and bash for CLI command examples, including the additional section
around the referenced later lines.

In `@packages/cli/src/commands/dashboard.ts`:
- Around line 2184-2206: Update the detached store-warmup task around startAll()
and the visible async IIFE so it waits or retries until each project engine is
ready before calling getEngine(), counts only projects whose stores were
actually passed to setHostTaskStore(), and reports that count. Retain the warmup
promise and cancel or await it during engine teardown so it cannot repopulate
the cache after disposal.

In `@packages/cli/src/commands/settings.ts`:
- Around line 46-51: Replace the NOTE header in
packages/cli/src/commands/settings.ts lines 46-51 with an FNXC:<area>
yyyy-MM-dd-hh:mm header while preserving the requirePrApproval policy. In
packages/cli/src/commands/__tests__/settings.test.ts lines 111-121, prefix the
baseBranch and moved-setting policy blocks with FNXC headers; in lines 179-186,
prefix the deprecated-alias policy block with an FNXC header. Use the required
area-and-timestamp convention for each header.

In `@packages/cli/src/extension.ts`:
- Around line 1988-2042: The fn_workflow_step_resume tool lacks operator
authorization and accepts unstructured audit prose. In
packages/cli/src/extension.ts lines 1988-2042, require a host-supplied
privileged/operator capability before calling store.resumeWorkflowStep and pass
only permitted structured audit metadata instead of params.reason; in
packages/cli/skill/fusion/SKILL.md line 31 and
packages/cli/skill/fusion/references/fusion-capabilities.md line 34, remove the
tool from agent-facing catalogs; in
packages/cli/skill/fusion/references/extension-tools.md lines 308-316, document
the authorized entrypoint and structured audit fields without describing a
free-text reason.

In `@packages/core/src/postgres/plugin-schema-hook.ts`:
- Around line 581-601: The even_realities_seen_tasks reconciliation currently
runs only during table creation; keep only CREATE TABLE inside its guard, and
move the index, RLS settings, fusion_project_isolation policy, trigger
attachment, and fusion_runtime grant outside it with appropriate idempotent
guards. In packages/core/src/postgres/plugin-schema-hook.ts lines 581-601,
update the surrounding hook accordingly. Also move CREATE INDEX IF NOT EXISTS
idxWhatsAppDedupeRetention out of the whatsapp_chat_dedupe creation branch at
packages/core/src/postgres/plugin-schema-hook.ts lines 535-537 so existing
tables receive the index.

In `@packages/core/src/postgres/startup-factory.ts`:
- Around line 412-433: Delete the duplicate wrapper declaration of
bootSchemaBackendOnce that recursively calls itself, leaving the existing
recovery logic in bootSchemaBackend unchanged. Update the remaining
bootSchemaBackendOnce options type to include "globalSettingsDir", since its
implementation accesses options.globalSettingsDir.
- Around line 473-480: Update the FNXC comment above
resolveEmbeddedMaxConnections in the startup configuration to describe the
actual platform-aware defaults and embeddedPostgresMaxConnections override,
removing the stale claim that the ceiling is raised to 250. Keep the documented
values and behavior aligned with resolveEmbeddedMaxConnections.

In `@packages/core/src/store.ts`:
- Around line 1447-1457: The FNXC comment lacks the identifiers needed to
describe the escape hatch accurately. Restore the original symbol names in the
prose for the permanently stuck status, the target transition status, the
clearing command pair, and the related registration comments, while preserving
the existing FNXC prefix, timestamp, access restrictions, audit requirement, and
concise wording.
- Around line 1483-1497: Update resumeWorkflowStep’s target lookup to restrict
matches to results in the pre-merge phase, using the same phase criterion as
findPendingPreMergeStep. Ensure post-merge results are not resumable, while
preserving the existing not-found and pending-status validation for eligible
pre-merge steps.

---

Outside diff comments:
In `@packages/core/src/postgres/sqlite-migrator.ts`:
- Around line 891-930: Wrap the entire post-copy phase, including
buildMigrationPlan and migrateLegacyProjectPluginRowsOnSession, in its own
savepoint and roll back to it when the phase fails before re-enabling
foreign-key enforcement. Update the catch log to describe post-copy/planning
failures rather than only plugin migration, and soften the comment before the
failed-status UPDATE to avoid claiming it always succeeds; preserve copyError so
the original failure is rethrown without being masked.

---

Nitpick comments:
In `@packages/core/src/task-merge.ts`:
- Around line 326-347: The exported findPendingPreMergeStep helper is unused by
production code. Wire it into resumeWorkflowStep as the fallback step lookup
when stepId is omitted, preserving explicit stepId behavior; otherwise remove
the helper and its merge-bypass tests.

In `@packages/engine/src/__tests__/max-tokens-overflow-recovery.test.ts`:
- Around line 70-102: Remove the entire “safety calculation” describe block from
max-tokens-overflow-recovery.test.ts, including its safeMaxTokens arithmetic
tests and references to MAX_TOKENS_OVERFLOW_SAFETY_MARGIN. Keep tests for the
current direct session-compaction recovery behavior unchanged.
- Around line 10-41: Export the production overflow regex constant from pi.ts,
then remove the locally duplicated MAX_TOKENS_OVERFLOW_EXACT_PATTERN in
max-tokens-overflow-recovery.test.ts and import the exported symbol instead.
Keep the existing pattern-matching assertions unchanged so they exercise the
real production pattern.

In `@packages/engine/src/merger-ai.ts`:
- Around line 1175-1231: Extract the repeated demotion workflow from the
no-commits branch in the finalize flow into a shared helper, such as
demoteToTodoWithReason, that performs updateTask, logEntry, audit.database,
moveTask with preserved progress, and returns the standard result. Reuse this
helper in the ai-empty-merge, no-landed-proof, executor-veto, and
landWorkspaceTask guards, preserving each guard’s reason, metadata, lane, and
return semantics.

In `@packages/engine/src/pi.ts`:
- Around line 467-500: Extract the duplicated MAX_TOKENS_OVERFLOW_EXACT_PATTERN
parsing and warning logic from both promptWithFallback copies into a shared
logProviderOverflowIfMatched(errorMessage: string) helper near the regex
constant. Replace each inline overflowMatch block with a call to this helper,
preserving the existing warning details and behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7ef28c6f-8fc1-4868-9c60-85138bc7318b

📥 Commits

Reviewing files that changed from the base of the PR and between 0056d75 and 2ec487a.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (381)
  • .changeset/FN-8357-quality-verification-videos.md
  • .changeset/FN-8399-migration-status-dashboard.md
  • .changeset/FN-8436-planning-no-reconnecting-hint.md
  • .changeset/aiwo-039-integration-branch-cli-setting.md
  • .changeset/aiwo-040-merge-settings-whitelist.md
  • .changeset/aiwo-041-merge-integration-worktree-cli-setting.md
  • .changeset/beta-notes-scoped-per-beta.md
  • .changeset/beta-stable-release-channels.md
  • .changeset/binary-release-bidi-windows-channel.md
  • .changeset/board-header-active-chrome-count.md
  • .changeset/bump-pi-0-81-1.md
  • .changeset/calm-review-recovery.md
  • .changeset/calm-tasks-reuse-parent-intent.md
  • .changeset/ce-turn-admission-json-parse.md
  • .changeset/chat-codebase-accuracy-guidance.md
  • .changeset/chat-jump-to-latest-active-transform.md
  • .changeset/clear-orphaned-pending-step-results.md
  • .changeset/cross-parent-diagnostic-file-path-claims.md
  • .changeset/cutover-delete-fn-review-step.md
  • .changeset/dashboard-custom-columns.md
  • .changeset/dynamic-plugin-route-dispatch.md
  • .changeset/embedded-pg-crash-recovery-2411.md
  • .changeset/embedded-postgres-connection-cap.md
  • .changeset/exempt-task-prompt-write-approval.md
  • .changeset/fix-builtin-workflow-lifecycle.md
  • .changeset/fix-chat-freeform-task-create.md
  • .changeset/fix-chat-mailbox-nul-byte-sanitize.md
  • .changeset/fix-claude-usage-login-timeout.md
  • .changeset/fix-codex-weekly-usage-label.md
  • .changeset/fix-completion-summary-contract.md
  • .changeset/fix-extension-taskstore-postmaster-port.md
  • .changeset/fix-fn-8064-proactive-step-chat.md
  • .changeset/fix-github-discussions-force-mode.md
  • .changeset/fix-max-tokens-overflow-recovery-direct-compaction.md
  • .changeset/fix-mobile-planning-start.md
  • .changeset/fix-no-merge-workflow-completion.md
  • .changeset/fix-no-selection-default-workflow-drift.md
  • .changeset/fix-parallel-step-completion-order.md
  • .changeset/fix-planning-ai-start.md
  • .changeset/fix-planning-complete-reopen.md
  • .changeset/fix-planning-mobile-selection-comment.md
  • .changeset/fix-planning-refinement-action.md
  • .changeset/fix-planning-session-timers.md
  • .changeset/fix-planning-stop-resume.md
  • .changeset/fix-planning-task-creation-handoff.md
  • .changeset/fix-pooled-worktree-ownership.md
  • .changeset/fix-postgres-activity-lifecycle.md
  • .changeset/fix-postgres-startup-migration-deadlock.md
  • .changeset/fix-settings-beta-update-check.md
  • .changeset/fix-task-card-overseer-cache.md
  • .changeset/fix-task-done-summary-prose.md
  • .changeset/fix-triage-prompt-writer-tools.md
  • .changeset/fix-windows-update-ce-assets.md
  • .changeset/fix-zh-cn-roadmap-duplicate.md
  • .changeset/fn-8255-card-eye-inherited-default-oversight.md
  • .changeset/fn-8258-pg-quarantine.md
  • .changeset/fn-8260-planning-truncated-completion.md
  • .changeset/fn-8262-omp-model-routing.md
  • .changeset/fn-8263-session-advisor-detail-eye.md
  • .changeset/fn-8265-task-follow-up-policy.md
  • .changeset/fn-8269-fff-tokens.md
  • .changeset/fn-8273-mission-auto-merge.md
  • .changeset/fn-8275-mission-merge-summary.md
  • .changeset/fn-8276-unify-board-magnetism.md
  • .changeset/fn-8277-agentic-reports.md
  • .changeset/fn-8282-config-versioning.md
  • .changeset/fn-8283-org-bundle.md
  • .changeset/fn-8286-review-artifacts.md
  • .changeset/fn-8287-task-detail-button-sizes.md
  • .changeset/fn-8288-native-structure-preview.md
  • .changeset/fn-8289-feature-video.md
  • .changeset/fn-8291-chat-native-structure-inline-preview.md
  • .changeset/fn-8292-mail-native-structure-embeds.md
  • .changeset/fn-8293-mail-drag-compose-chat.md
  • .changeset/fn-8294-mission-engine-tools.md
  • .changeset/fn-8295-ideation-diverge-converge.md
  • .changeset/fn-8296-feature.md
  • .changeset/fn-8297-research-mission-bridge.md
  • .changeset/fn-8301-pwa-auth-recovery.md
  • .changeset/fn-8304-issue-form-translation.md
  • .changeset/fn-8306-mission-symbol-scheduler-admission.md
  • .changeset/fn-8307-heartbeat-mission-guard.md
  • .changeset/fn-8308-report-discussions.md
  • .changeset/fn-8309-report-capture.md
  • .changeset/fn-8310-public-roadmap-dedupe.md
  • .changeset/fn-8311-report-context.md
  • .changeset/fn-8317-report-context.md
  • .changeset/fn-8324-card-cost-promote.md
  • .changeset/fn-8326-roadmap-report-dedup.md
  • .changeset/fn-8327-discussion-fallback.md
  • .changeset/fn-8331-planning-interview.md
  • .changeset/fn-8332-planning-reload-resume.md
  • .changeset/fn-8339-chat-scroll-follow.md
  • .changeset/fn-8341-deepening-checkpoint-removal.md
  • .changeset/fn-8341-planning-reactive-backend.md
  • .changeset/fn-8344-planner-chat-scroll-follow.md
  • .changeset/fn-8345-workflow-live-log-scroll.md
  • .changeset/fn-8346-live-tail-scroll-follow.md
  • .changeset/fn-8350-config-versions-settings.md
  • .changeset/fn-8351-org-portability-team-tab.md
  • .changeset/fn-8352-ideation-top-level-view.md
  • .changeset/fn-8355-mobile-model-dropdown-scroll.md
  • .changeset/fn-8356-stale-duplicate-decision.md
  • .changeset/fn-8358-roadmap-item-native-structure-preview.md
  • .changeset/fn-8364-session-token-deltas.md
  • .changeset/fn-8369-github-import-dedup.md
  • .changeset/fn-8372-html2canvas.md
  • .changeset/fn-8395-settings-autosave.md
  • .changeset/fn-8396-task-detail-tablet-icon-size.md
  • .changeset/fn-8397-chat-pin-separation-and-edit-save.md
  • .changeset/fn-8398-compound-engineering-nav.md
  • .changeset/fn-8400-planning-mode-ui.md
  • .changeset/fn-8400-worktree-recovery.md
  • .changeset/fn-8401-same-agent-intake.md
  • .changeset/fn-8406-report-home-zindex.md
  • .changeset/fn-8409-chat-coding-tools.md
  • .changeset/fn-8411-configversions-i18n.md
  • .changeset/fn-8413-pi-claude-cli-acp-sdk-dep.md
  • .changeset/fn-8414-mission-interview-thinking-level-bind.md
  • .changeset/fn-8415-report-file-activity-trace-scrub.md
  • .changeset/fn-8418-whatsapp-settings-pairing.md
  • .changeset/fn-8419-rekey-partition-merge.md
  • .changeset/fn-8420-planning-mode-user-validation.md
  • .changeset/fn-8421-task-detail-tablet-control-heights.md
  • .changeset/fn-8422-mcp-bridge.md
  • .changeset/fn-8423-duplicate-agent-badge.md
  • .changeset/fn-8424-cli-chat-reply-routing.md
  • .changeset/fn-8425-cli-chat-conversation.md
  • .changeset/fn-8426-planning-mobile-tablet-layout.md
  • .changeset/fn-8426-question-tool-wait.md
  • .changeset/fn-8427-planning-mobile-session-list-nav.md
  • .changeset/fn-8430-tui-log-timestamps.md
  • .changeset/fn-8431-report-menu-background.md
  • .changeset/fn-8432-planning-tablet-mobile-plan-layout.md
  • .changeset/fn-8434-running-plan-content.md
  • .changeset/fn-8437-planning-leave-return-restore.md
  • .changeset/fn-8438-running-plan-generate-refine.md
  • .changeset/fn-8439-planning-prompt-triage-template.md
  • .changeset/fn-8440-persist-duplicate-decision.md
  • .changeset/fn-8441-separate-plan-from-prompt.md
  • .changeset/fn-8442-planning-sequential-qa.md
  • .changeset/fn-8443-chat-plugin-skill-paths.md
  • .changeset/fn-8444-planning-time-cost.md
  • .changeset/fn-8445-planning-compact-switcher-top.md
  • .changeset/fn-8446-oauth-relogin-dismiss-sticky.md
  • .changeset/fn-8448-github-import-back-to-issue-list.md
  • .changeset/fn-8449-planning-history-thinking.md
  • .changeset/fn-8452-update-unknown-flags.md
  • .changeset/fn-8453-unified-concurrency.md
  • .changeset/fn-8454-aurora-theme.md
  • .changeset/fn-8455-calm-theme.md
  • .changeset/fn-8456-dawn-theme.md
  • .changeset/fn-8461-skill-load-warning.md
  • .changeset/fn-8462-legacy-adoption-drained-marker.md
  • .changeset/fn-8463-file-scope-root-extensions.md
  • .changeset/fn-8464-baseline-cwd.md
  • .changeset/fn-8465-legacy-skill-toggle-path-match.md
  • .changeset/fn-8466-skill-path-read-boundary.md
  • .changeset/fn-8467-plugin-enable-state-consistency.md
  • .changeset/fn-8468-plugin-single-onload.md
  • .changeset/fn-8469-workflow-definition-id-allocator.md
  • .changeset/fn-8471-theme-filter.md
  • .changeset/fn-8472-ideas-column-indicator.md
  • .changeset/fn-8474-tablet-task-popup-gutter.md
  • .changeset/fn-8475-planning-status-badge.md
  • .changeset/fn-8476-coding-ideas-move.md
  • .changeset/fn-8477-planning-model-marker.md
  • .changeset/fn-8480-remove-column-header-descriptions.md
  • .changeset/fn-8481-ideas-github-tracking.md
  • .changeset/fn-8482-merging-badge.md
  • .changeset/fn-8489-mobile-column-settle.md
  • .changeset/fn-8490-step-execute-skill.md
  • .changeset/fn-8492-mobile-task-footer-single-row.md
  • .changeset/fn-8493-revising-status-badge.md
  • .changeset/fn-8494-replan-active-glow.md
  • .changeset/fn-8496-mobile-column-settle-residual.md
  • .changeset/fn-8498-quick-add-start-menu.md
  • .changeset/fn-8499-macos-postgres-libicu.md
  • .changeset/fn-8500-xiaomi-provider-icon.md
  • .changeset/fn-8501-mobile-footer-alignment.md
  • .changeset/fn-8502-chat-quick-add-attachments.md
  • .changeset/fn-8503-unbounded-code-review-retries.md
  • .changeset/fn-8504-chat-reentry-state.md
  • .changeset/fn-8505-task-wedge-notifications.md
  • .changeset/fn-8509-coding-ideas-start-todo.md
  • .changeset/fn-8520-runtime-sidebar.md
  • .changeset/fn-8521-separate-plugin-install-toggle.md
  • .changeset/fn-8522-windows-embedded-postgres-recovery.md
  • .changeset/fn-8523-skip-completed-sqlite-rescan.md
  • .changeset/fn-8526-workflow-column-descriptions.md
  • .changeset/fn-8527-themed-stats-link.md
  • .changeset/fn-8529-planning-comments.md
  • .changeset/fn-8533-mobile-planning-comments.md
  • .changeset/fn-8534-planning-workflow-model.md
  • .changeset/fn-8536-planning-retry.md
  • .changeset/fn-8537-mobile-planning-actions.md
  • .changeset/fn-8538-planning-prompt.md
  • .changeset/fn-8539-option-driven-planning.md
  • .changeset/fn-8540-mission-show-hierarchy.md
  • .changeset/fn-8541-validator-diagnostics.md
  • .changeset/fn-8542-feature-validation-scope.md
  • .changeset/fn-8543-bounded-fix-lineage.md
  • .changeset/fn-8544-mission-autonomy-audit.md
  • .changeset/fn-8545-mission-admission.md
  • .changeset/fn-8546-ideation-candidate-ids.md
  • .changeset/fn-8547-local-provider-onboarding.md
  • .changeset/fn-8548-mobile-github-import-actions.md
  • .changeset/fn-8551-agent-heartbeat-controls.md
  • .changeset/fn-8552-heartbeat-disabled-option.md
  • .changeset/fn-991-archived-mission-reconciliation.md
  • .changeset/fn-windows-embedded-pg-connection-default.md
  • .changeset/fx-004-task-document-cas.md
  • .changeset/fx-005-archived-document-publication.md
  • .changeset/github-report-screenshot-embed.md
  • .changeset/grok-fallback-no-preempt.md
  • .changeset/grok-process-lifecycle-owner.md
  • .changeset/guard-empty-implementation-plans.md
  • .changeset/improve-planning-refinement-menu.md
  • .changeset/improve-sequential-planning-workspace.md
  • .changeset/install-agent-browser-windows.md
  • .changeset/ir-driven-lifecycle-cutover.md
  • .changeset/isolate-provider-rate-limit-pauses.md
  • .changeset/kb-002-push-after-merge-stranded.md
  • .changeset/legacy-adoption-and-ir-pin.md
  • .changeset/legacy-adoption-live-status-stomp.md
  • .changeset/live-gate-running-count.md
  • .changeset/mcp-bootstrap-resilience.md
  • .changeset/merge-review-blockers-survive-rebuilds.md
  • .changeset/mobile-board-pointercancel-settle.md
  • .changeset/omp-process-lifecycle-owner.md
  • .changeset/ordered-step-starts.md
  • .changeset/orphaned-pending-rewrite-to-failed.md
  • .changeset/plan-review-missing-artifact.md
  • .changeset/plan-review-root-lease-cleanup.md
  • .changeset/planning-deleted-task-recreate.md
  • .changeset/planning-initial-plan-one-shot.md
  • .changeset/planning-initial-plan-refresh.md
  • .changeset/planning-multi-task-per-plan.md
  • .changeset/planning-provider-error-no-hang.md
  • .changeset/planning-regenerate-question-on-refine.md
  • .changeset/planning-session-complete-after-task-create.md
  • .changeset/planning-session-loading-state.md
  • .changeset/planning-stop-pending-initial-turn.md
  • .changeset/planning-thinking-all-steps.md
  • .changeset/planning-turn-admission.md
  • .changeset/planning-turn-sync.md
  • .changeset/planning-validated-plan-never-dead-end.md
  • .changeset/plugin-mcp-servers.md
  • .changeset/polish-planning-markdown-review.md
  • .changeset/postgres-health-false-corruption.md
  • .changeset/pre.json
  • .changeset/preserve-needs-replan-adoption.md
  • .changeset/prevent-cross-parent-diagnostic-duplicates.md
  • .changeset/project-switch-modal-reset.md
  • .changeset/project-workflow-model-lanes.md
  • .changeset/quickentry-agent-outside-click.md
  • .changeset/quiet-tasks-stop-before-todo.md
  • .changeset/quiet-triage-recovery.md
  • .changeset/read-sqlite-migration-health.md
  • .changeset/report-screenshot-artifacts.md
  • .changeset/respect-user-paused-dispatch.md
  • .changeset/restore-mission-validation-recovery.md
  • .changeset/retry-returned-planning-streams.md
  • .changeset/safe-test-database.md
  • .changeset/single-flight-anthropic-refresh.md
  • .changeset/single-github-progress-update.md
  • .changeset/six-column-merge-boundary.md
  • .changeset/step-narration-one-based.md
  • .changeset/sync-heartbeat-locale-parity.md
  • .changeset/task-card-popup-deep-tabs.md
  • .changeset/task-chat-new-command-guard.md
  • .changeset/task-stats-provenance-section.md
  • .changeset/task-verification-status-placement.md
  • .changeset/terminal-autostart-server-platform.md
  • .changeset/terminal-manual-start-and-single-paste.md
  • .changeset/theme-token-contract.md
  • .changeset/tidy-planning-questions.md
  • .changeset/track-task-planning-lineage.md
  • .changeset/truthful-workflow-lifecycle.md
  • .changeset/uncap-planning-refinement-categories.md
  • .changeset/use-planning-session-back.md
  • .changeset/workflow-review-followups.md
  • CHANGELOG-archive.md
  • CHANGELOG.md
  • docs/cli-reference.md
  • docs/infra/push-access-blocker-decision.md
  • docs/integration-branch-cli-setting.md
  • package.json
  • packages/cli-alias/CHANGELOG.md
  • packages/cli-alias/package.json
  • packages/cli/CHANGELOG.md
  • packages/cli/package.json
  • packages/cli/skill/fusion/SKILL.md
  • packages/cli/skill/fusion/references/extension-tools.md
  • packages/cli/skill/fusion/references/fusion-capabilities.md
  • packages/cli/src/__tests__/extension.test.ts
  • packages/cli/src/commands/__tests__/settings.test.ts
  • packages/cli/src/commands/dashboard.ts
  • packages/cli/src/commands/settings.ts
  • packages/cli/src/extension.ts
  • packages/core/CHANGELOG.md
  • packages/core/package.json
  • packages/core/src/__tests__/store-resume-step.test.ts
  • packages/core/src/__tests__/task-merge-bypass.test.ts
  • packages/core/src/index.ts
  • packages/core/src/postgres/embedded-lifecycle.ts
  • packages/core/src/postgres/plugin-schema-hook.ts
  • packages/core/src/postgres/sqlite-migrator.ts
  • packages/core/src/postgres/startup-factory.ts
  • packages/core/src/store.ts
  • packages/core/src/task-merge.ts
  • packages/core/src/types/workflow-steps.ts
  • packages/dashboard/CHANGELOG.md
  • packages/dashboard/package.json
  • packages/desktop/CHANGELOG.md
  • packages/desktop/package.json
  • packages/droid-cli/CHANGELOG.md
  • packages/droid-cli/package.json
  • packages/engine/CHANGELOG.md
  • packages/engine/package.json
  • packages/engine/src/__tests__/max-tokens-overflow-recovery.test.ts
  • packages/engine/src/__tests__/merge-dependency-sync-lockfile-heal.test.ts
  • packages/engine/src/__tests__/merger-ai-no-commits-deps-skip.test.ts
  • packages/engine/src/__tests__/merger-ai.test.ts
  • packages/engine/src/merge-dependency-sync.ts
  • packages/engine/src/merger-ai.ts
  • packages/engine/src/pi.ts
  • packages/i18n/CHANGELOG.md
  • packages/i18n/package.json
  • packages/mobile/CHANGELOG.md
  • packages/mobile/package.json
  • packages/pi-claude-cli/CHANGELOG.md
  • packages/pi-claude-cli/package.json
  • packages/plugin-sdk/CHANGELOG.md
  • packages/plugin-sdk/package.json
  • plugins/examples/fusion-plugin-auto-label/CHANGELOG.md
  • plugins/examples/fusion-plugin-auto-label/package.json
  • plugins/examples/fusion-plugin-ci-status/CHANGELOG.md
  • plugins/examples/fusion-plugin-ci-status/package.json
  • plugins/examples/fusion-plugin-notification/CHANGELOG.md
  • plugins/examples/fusion-plugin-notification/package.json
  • plugins/examples/fusion-plugin-settings-demo/CHANGELOG.md
  • plugins/examples/fusion-plugin-settings-demo/package.json
  • plugins/fusion-plugin-acp-runtime/CHANGELOG.md
  • plugins/fusion-plugin-acp-runtime/package.json
  • plugins/fusion-plugin-agent-browser/CHANGELOG.md
  • plugins/fusion-plugin-agent-browser/package.json
  • plugins/fusion-plugin-claude-runtime/CHANGELOG.md
  • plugins/fusion-plugin-claude-runtime/package.json
  • plugins/fusion-plugin-cli-printing-press/CHANGELOG.md
  • plugins/fusion-plugin-cli-printing-press/package.json
  • plugins/fusion-plugin-compound-engineering/CHANGELOG.md
  • plugins/fusion-plugin-compound-engineering/package.json
  • plugins/fusion-plugin-cursor-runtime/CHANGELOG.md
  • plugins/fusion-plugin-cursor-runtime/package.json
  • plugins/fusion-plugin-dependency-graph/CHANGELOG.md
  • plugins/fusion-plugin-dependency-graph/package.json
  • plugins/fusion-plugin-droid-runtime/CHANGELOG.md
  • plugins/fusion-plugin-droid-runtime/package.json
  • plugins/fusion-plugin-even-realities-glasses/CHANGELOG.md
  • plugins/fusion-plugin-even-realities-glasses/package.json
  • plugins/fusion-plugin-grok-runtime/CHANGELOG.md
  • plugins/fusion-plugin-grok-runtime/package.json
  • plugins/fusion-plugin-hermes-runtime/CHANGELOG.md
  • plugins/fusion-plugin-hermes-runtime/package.json
  • plugins/fusion-plugin-linear-import/CHANGELOG.md
  • plugins/fusion-plugin-linear-import/package.json
  • plugins/fusion-plugin-omp-runtime/CHANGELOG.md
  • plugins/fusion-plugin-omp-runtime/package.json
  • plugins/fusion-plugin-openclaw-runtime/CHANGELOG.md
  • plugins/fusion-plugin-openclaw-runtime/package.json
  • plugins/fusion-plugin-paperclip-runtime/CHANGELOG.md
  • plugins/fusion-plugin-paperclip-runtime/package.json
  • plugins/fusion-plugin-quality/CHANGELOG.md
  • plugins/fusion-plugin-quality/package.json
  • plugins/fusion-plugin-reports/CHANGELOG.md
  • plugins/fusion-plugin-reports/package.json
  • plugins/fusion-plugin-roadmap/CHANGELOG.md
  • plugins/fusion-plugin-roadmap/package.json
  • plugins/fusion-plugin-whatsapp-chat/CHANGELOG.md
  • plugins/fusion-plugin-whatsapp-chat/package.json
💤 Files with no reviewable changes (278)
  • .changeset/beta-stable-release-channels.md
  • .changeset/clear-orphaned-pending-step-results.md
  • .changeset/fix-postgres-activity-lifecycle.md
  • .changeset/fix-task-card-overseer-cache.md
  • .changeset/fn-8283-org-bundle.md
  • .changeset/fn-8293-mail-drag-compose-chat.md
  • .changeset/fn-8306-mission-symbol-scheduler-admission.md
  • .changeset/fn-8310-public-roadmap-dedupe.md
  • .changeset/fn-8341-deepening-checkpoint-removal.md
  • .changeset/fn-8350-config-versions-settings.md
  • .changeset/fn-8372-html2canvas.md
  • .changeset/fn-8397-chat-pin-separation-and-edit-save.md
  • .changeset/fn-8400-planning-mode-ui.md
  • .changeset/fn-8409-chat-coding-tools.md
  • .changeset/fn-8413-pi-claude-cli-acp-sdk-dep.md
  • .changeset/fn-8432-planning-tablet-mobile-plan-layout.md
  • .changeset/fn-8439-planning-prompt-triage-template.md
  • .changeset/fn-8440-persist-duplicate-decision.md
  • .changeset/fn-8441-separate-plan-from-prompt.md
  • .changeset/fn-8446-oauth-relogin-dismiss-sticky.md
  • .changeset/fn-8449-planning-history-thinking.md
  • .changeset/fn-8456-dawn-theme.md
  • .changeset/fn-8471-theme-filter.md
  • .changeset/fn-8475-planning-status-badge.md
  • .changeset/fn-8496-mobile-column-settle-residual.md
  • .changeset/fn-8509-coding-ideas-start-todo.md
  • .changeset/fn-8529-planning-comments.md
  • .changeset/fn-8536-planning-retry.md
  • .changeset/fn-8538-planning-prompt.md
  • .changeset/fn-8541-validator-diagnostics.md
  • .changeset/fn-8542-feature-validation-scope.md
  • .changeset/fn-8545-mission-admission.md
  • .changeset/fn-991-archived-mission-reconciliation.md
  • .changeset/github-report-screenshot-embed.md
  • .changeset/plugin-mcp-servers.md
  • .changeset/polish-planning-markdown-review.md
  • .changeset/quickentry-agent-outside-click.md
  • .changeset/fn-8504-chat-reentry-state.md
  • .changeset/fn-8422-mcp-bridge.md
  • .changeset/FN-8357-quality-verification-videos.md
  • .changeset/FN-8399-migration-status-dashboard.md
  • .changeset/board-header-active-chrome-count.md
  • .changeset/cutover-delete-fn-review-step.md
  • .changeset/fix-mobile-planning-start.md
  • .changeset/fix-planning-task-creation-handoff.md
  • .changeset/fix-planning-session-timers.md
  • .changeset/fix-chat-mailbox-nul-byte-sanitize.md
  • .changeset/fix-no-merge-workflow-completion.md
  • .changeset/fix-github-discussions-force-mode.md
  • .changeset/fix-parallel-step-completion-order.md
  • .changeset/fn-8258-pg-quarantine.md
  • .changeset/fn-8255-card-eye-inherited-default-oversight.md
  • .changeset/fn-8275-mission-merge-summary.md
  • .changeset/fix-task-done-summary-prose.md
  • .changeset/fn-8269-fff-tokens.md
  • .changeset/fn-8276-unify-board-magnetism.md
  • .changeset/fn-8273-mission-auto-merge.md
  • .changeset/fn-8265-task-follow-up-policy.md
  • .changeset/fn-8294-mission-engine-tools.md
  • .changeset/fn-8288-native-structure-preview.md
  • .changeset/fn-8289-feature-video.md
  • .changeset/fn-8296-feature.md
  • .changeset/fn-8307-heartbeat-mission-guard.md
  • .changeset/fn-8308-report-discussions.md
  • .changeset/fn-8311-report-context.md
  • .changeset/fn-8326-roadmap-report-dedup.md
  • .changeset/fn-8332-planning-reload-resume.md
  • .changeset/fn-8339-chat-scroll-follow.md
  • .changeset/fn-8341-planning-reactive-backend.md
  • .changeset/fn-8344-planner-chat-scroll-follow.md
  • .changeset/fn-8356-stale-duplicate-decision.md
  • .changeset/fn-8395-settings-autosave.md
  • .changeset/fn-8398-compound-engineering-nav.md
  • .changeset/fn-8401-same-agent-intake.md
  • .changeset/fn-8415-report-file-activity-trace-scrub.md
  • .changeset/fn-8423-duplicate-agent-badge.md
  • .changeset/fn-8430-tui-log-timestamps.md
  • .changeset/fn-8434-running-plan-content.md
  • .changeset/fn-8438-running-plan-generate-refine.md
  • .changeset/fn-8442-planning-sequential-qa.md
  • .changeset/fn-8454-aurora-theme.md
  • .changeset/fn-8464-baseline-cwd.md
  • .changeset/fn-8499-macos-postgres-libicu.md
  • .changeset/fn-8501-mobile-footer-alignment.md
  • .changeset/fn-8503-unbounded-code-review-retries.md
  • .changeset/fn-8522-windows-embedded-postgres-recovery.md
  • .changeset/fn-8534-planning-workflow-model.md
  • .changeset/fn-8537-mobile-planning-actions.md
  • .changeset/fn-8539-option-driven-planning.md
  • .changeset/fn-8543-bounded-fix-lineage.md
  • .changeset/fn-8544-mission-autonomy-audit.md
  • .changeset/fn-8547-local-provider-onboarding.md
  • .changeset/fn-windows-embedded-pg-connection-default.md
  • .changeset/fx-005-archived-document-publication.md
  • .changeset/guard-empty-implementation-plans.md
  • .changeset/improve-sequential-planning-workspace.md
  • .changeset/ir-driven-lifecycle-cutover.md
  • .changeset/plan-review-missing-artifact.md
  • .changeset/planning-thinking-all-steps.md
  • .changeset/postgres-health-false-corruption.md
  • .changeset/safe-test-database.md
  • .changeset/single-github-progress-update.md
  • .changeset/fix-zh-cn-roadmap-duplicate.md
  • .changeset/uncap-planning-refinement-categories.md
  • .changeset/isolate-provider-rate-limit-pauses.md
  • .changeset/fn-8396-task-detail-tablet-icon-size.md
  • .changeset/fn-8448-github-import-back-to-issue-list.md
  • .changeset/planning-deleted-task-recreate.md
  • .changeset/fn-8482-merging-badge.md
  • .changeset/task-verification-status-placement.md
  • .changeset/planning-turn-admission.md
  • .changeset/fn-8502-chat-quick-add-attachments.md
  • .changeset/fn-8468-plugin-single-onload.md
  • .changeset/fx-004-task-document-cas.md
  • .changeset/calm-review-recovery.md
  • .changeset/fn-8520-runtime-sidebar.md
  • .changeset/fn-8455-calm-theme.md
  • .changeset/fn-8462-legacy-adoption-drained-marker.md
  • .changeset/quiet-tasks-stop-before-todo.md
  • .changeset/planning-turn-sync.md
  • .changeset/fn-8292-mail-native-structure-embeds.md
  • .changeset/fn-8477-planning-model-marker.md
  • .changeset/fn-8421-task-detail-tablet-control-heights.md
  • .changeset/fn-8480-remove-column-header-descriptions.md
  • .changeset/fn-8465-legacy-skill-toggle-path-match.md
  • .changeset/fn-8551-agent-heartbeat-controls.md
  • .changeset/fn-8494-replan-active-glow.md
  • .changeset/fn-8352-ideation-top-level-view.md
  • .changeset/respect-user-paused-dispatch.md
  • .changeset/planning-validated-plan-never-dead-end.md
  • .changeset/fn-8426-planning-mobile-tablet-layout.md
  • .changeset/fn-8425-cli-chat-conversation.md
  • .changeset/fn-8419-rekey-partition-merge.md
  • .changeset/fn-8452-update-unknown-flags.md
  • .changeset/quiet-triage-recovery.md
  • .changeset/kb-002-push-after-merge-stranded.md
  • .changeset/fn-8263-session-advisor-detail-eye.md
  • .changeset/prevent-cross-parent-diagnostic-duplicates.md
  • .changeset/fn-8426-question-tool-wait.md
  • .changeset/terminal-manual-start-and-single-paste.md
  • .changeset/fn-8331-planning-interview.md
  • .changeset/fn-8309-report-capture.md
  • .changeset/fn-8548-mobile-github-import-actions.md
  • .changeset/omp-process-lifecycle-owner.md
  • .changeset/beta-notes-scoped-per-beta.md
  • .changeset/fix-claude-usage-login-timeout.md
  • .changeset/fn-8369-github-import-dedup.md
  • .changeset/fn-8500-xiaomi-provider-icon.md
  • .changeset/report-screenshot-artifacts.md
  • .changeset/embedded-postgres-connection-cap.md
  • .changeset/fn-8467-plugin-enable-state-consistency.md
  • .changeset/ordered-step-starts.md
  • .changeset/terminal-autostart-server-platform.md
  • .changeset/fn-8492-mobile-task-footer-single-row.md
  • .changeset/read-sqlite-migration-health.md
  • .changeset/calm-tasks-reuse-parent-intent.md
  • .changeset/fn-8505-task-wedge-notifications.md
  • .changeset/task-card-popup-deep-tabs.md
  • .changeset/plan-review-root-lease-cleanup.md
  • .changeset/fn-8523-skip-completed-sqlite-rescan.md
  • .changeset/sync-heartbeat-locale-parity.md
  • .changeset/fn-8489-mobile-column-settle.md
  • .changeset/fn-8400-worktree-recovery.md
  • .changeset/track-task-planning-lineage.md
  • .changeset/planning-session-complete-after-task-create.md
  • .changeset/preserve-needs-replan-adoption.md
  • .changeset/six-column-merge-boundary.md
  • .changeset/fn-8540-mission-show-hierarchy.md
  • .changeset/fn-8526-workflow-column-descriptions.md
  • .changeset/fn-8498-quick-add-start-menu.md
  • .changeset/task-stats-provenance-section.md
  • .changeset/fn-8317-report-context.md
  • .changeset/fn-8527-themed-stats-link.md
  • .changeset/fn-8472-ideas-column-indicator.md
  • .changeset/project-switch-modal-reset.md
  • .changeset/binary-release-bidi-windows-channel.md
  • .changeset/bump-pi-0-81-1.md
  • .changeset/chat-codebase-accuracy-guidance.md
  • .changeset/dashboard-custom-columns.md
  • .changeset/chat-jump-to-latest-active-transform.md
  • .changeset/fix-codex-weekly-usage-label.md
  • .changeset/fix-planning-ai-start.md
  • .changeset/fix-postgres-startup-migration-deadlock.md
  • .changeset/fix-planning-refinement-action.md
  • .changeset/fn-8260-planning-truncated-completion.md
  • .changeset/fix-planning-complete-reopen.md
  • .changeset/fix-windows-update-ce-assets.md
  • .changeset/fn-8282-config-versioning.md
  • .changeset/fn-8287-task-detail-button-sizes.md
  • .changeset/fix-triage-prompt-writer-tools.md
  • .changeset/fn-8286-review-artifacts.md
  • .changeset/fn-8277-agentic-reports.md
  • .changeset/fn-8291-chat-native-structure-inline-preview.md
  • .changeset/fn-8295-ideation-diverge-converge.md
  • .changeset/fn-8301-pwa-auth-recovery.md
  • .changeset/fn-8324-card-cost-promote.md
  • .changeset/fn-8327-discussion-fallback.md
  • .changeset/fn-8355-mobile-model-dropdown-scroll.md
  • .changeset/fn-8411-configversions-i18n.md
  • .changeset/fn-8414-mission-interview-thinking-level-bind.md
  • .changeset/fn-8424-cli-chat-reply-routing.md
  • .changeset/fn-8444-planning-time-cost.md
  • .changeset/fn-8461-skill-load-warning.md
  • .changeset/fn-8481-ideas-github-tracking.md
  • .changeset/fn-8490-step-execute-skill.md
  • .changeset/fn-8546-ideation-candidate-ids.md
  • .changeset/grok-fallback-no-preempt.md
  • .changeset/legacy-adoption-and-ir-pin.md
  • .changeset/legacy-adoption-live-status-stomp.md
  • .changeset/planning-initial-plan-one-shot.md
  • .changeset/planning-stop-pending-initial-turn.md
  • .changeset/improve-planning-refinement-menu.md
  • .changeset/planning-session-loading-state.md
  • .changeset/orphaned-pending-rewrite-to-failed.md
  • .changeset/grok-process-lifecycle-owner.md
  • .changeset/live-gate-running-count.md
  • .changeset/mcp-bootstrap-resilience.md
  • .changeset/fn-8552-heartbeat-disabled-option.md
  • .changeset/pre.json
  • .changeset/truthful-workflow-lifecycle.md
  • .changeset/planning-regenerate-question-on-refine.md
  • .changeset/fix-planning-stop-resume.md
  • .changeset/fix-fn-8064-proactive-step-chat.md
  • .changeset/merge-review-blockers-survive-rebuilds.md
  • .changeset/fix-chat-freeform-task-create.md
  • .changeset/project-workflow-model-lanes.md
  • .changeset/fn-8474-tablet-task-popup-gutter.md
  • .changeset/fn-8427-planning-mobile-session-list-nav.md
  • .changeset/step-narration-one-based.md
  • .changeset/mobile-board-pointercancel-settle.md
  • .changeset/fn-8297-research-mission-bridge.md
  • .changeset/fn-8476-coding-ideas-move.md
  • .changeset/restore-mission-validation-recovery.md
  • .changeset/fix-settings-beta-update-check.md
  • .changeset/planning-multi-task-per-plan.md
  • .changeset/fix-completion-summary-contract.md
  • .changeset/fn-8443-chat-plugin-skill-paths.md
  • .changeset/fix-no-selection-default-workflow-drift.md
  • .changeset/fn-8346-live-tail-scroll-follow.md
  • .changeset/fn-8364-session-token-deltas.md
  • .changeset/ce-turn-admission-json-parse.md
  • .changeset/planning-initial-plan-refresh.md
  • .changeset/fn-8453-unified-concurrency.md
  • .changeset/exempt-task-prompt-write-approval.md
  • .changeset/fn-8358-roadmap-item-native-structure-preview.md
  • .changeset/retry-returned-planning-streams.md
  • .changeset/fn-8351-org-portability-team-tab.md
  • .changeset/FN-8436-planning-no-reconnecting-hint.md
  • .changeset/workflow-review-followups.md
  • .changeset/fix-extension-taskstore-postmaster-port.md
  • .changeset/fn-8262-omp-model-routing.md
  • .changeset/fn-8418-whatsapp-settings-pairing.md
  • .changeset/fix-pooled-worktree-ownership.md
  • .changeset/fn-8445-planning-compact-switcher-top.md
  • .changeset/fn-8406-report-home-zindex.md
  • .changeset/fn-8533-mobile-planning-comments.md
  • .changeset/fn-8463-file-scope-root-extensions.md
  • .changeset/fn-8420-planning-mode-user-validation.md
  • .changeset/fn-8521-separate-plugin-install-toggle.md
  • .changeset/tidy-planning-questions.md
  • .changeset/fn-8431-report-menu-background.md
  • .changeset/planning-provider-error-no-hang.md
  • .changeset/single-flight-anthropic-refresh.md
  • .changeset/fn-8345-workflow-live-log-scroll.md
  • .changeset/fn-8469-workflow-definition-id-allocator.md
  • .changeset/dynamic-plugin-route-dispatch.md
  • .changeset/embedded-pg-crash-recovery-2411.md
  • .changeset/fn-8437-planning-leave-return-restore.md
  • .changeset/install-agent-browser-windows.md
  • .changeset/task-chat-new-command-guard.md
  • .changeset/fn-8304-issue-form-translation.md
  • .changeset/fn-8466-skill-path-read-boundary.md
  • .changeset/fn-8493-revising-status-badge.md
  • .changeset/use-planning-session-back.md
  • .changeset/cross-parent-diagnostic-file-path-claims.md
  • .changeset/theme-token-contract.md
  • .changeset/fix-builtin-workflow-lifecycle.md
  • .changeset/fix-planning-mobile-selection-comment.md

Comment thread docs/infra/push-access-blocker-decision.md Outdated
Comment thread docs/infra/push-access-blocker-decision.md Outdated
Comment thread docs/integration-branch-cli-setting.md Outdated
Comment on lines +2184 to +2206
void (async () => {
try {
const projects = await centralCoreForEngine.listProjects();
// Skip cwd — its store is already injected at line 928.
const nonCwd = projects.filter((p) => p.path !== cwd);
for (const p of nonCwd) {
try {
const engine = engineManager.getEngine(p.id);
if (!engine) continue;
setHostTaskStore(p.path, engine.getTaskStore());
} catch (err) {
const msg = err instanceof Error ? err.message : String(err);
logSink.warn(`Failed to warm extension store for ${p.name} (${p.path}): ${msg}`, "extension");
}
}
if (nonCwd.length > 0) {
logSink.log(`Warmed extension host stores for ${nonCwd.length} project(s)`, "extension");
}
} catch (err) {
const msg = err instanceof Error ? err.message : String(err);
logSink.warn(`Failed to list projects for store warmup: ${msg}`, "extension");
}
})();

@coderabbitai coderabbitai Bot Jul 25, 2026

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.

🩺 Stability & Availability | 🟠 Major | 🏗️ Heavy lift

Do not race cache warmup with engine startup and shutdown.

startAll() is non-blocking, so getEngine() can be undefined during this one-shot loop; those projects are never warmed, yet the log reports all projects. The detached task can also reinsert a store after disposal clears the cache. Await/retry engine readiness, count actual warmed stores, and track/cancel the promise during teardown.

🤖 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 `@packages/cli/src/commands/dashboard.ts` around lines 2184 - 2206, Update the
detached store-warmup task around startAll() and the visible async IIFE so it
waits or retries until each project engine is ready before calling getEngine(),
counts only projects whose stores were actually passed to setHostTaskStore(),
and reports that count. Retain the warmup promise and cancel or await it during
engine teardown so it cannot repopulate the cache after disposal.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Still valid; not patched this cycle (fix-action cap). Required change in packages/cli/src/commands/dashboard.ts ~2181–2210:

  1. Do not one-shot getEngine() while startAll() is in flight — either await engineManager.ensureEngine(p.id) (or a short readiness retry) per project before setHostTaskStore, or gate the loop on engines already present in getAllEngines().
  2. Count only projects that successfully call setHostTaskStore and log that count (not nonCwd.length).
  3. Hold the warmup promise on a local var; in the dispose path, set a cancelled flag and await/ignore the promise before engineManager.stopAll() / cache clear so a late completion cannot reinsert a disposed store.

Correctness for non-cwd extension tools still depends on the engine's store; racing past a missing engine leaves those projects cold until first tool access falls through to createTaskStoreForBackend.

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.

@gsxdsm, acknowledged. The race remains unresolved in this PR and the follow-up should implement all three safeguards you listed: engine readiness, accurate successful-warmup accounting, and teardown coordination that prevents late cache repopulation.

Would you like me to open a GitHub follow-up issue with these acceptance criteria and links back to this PR discussion?

Comment thread packages/cli/src/commands/settings.ts Outdated
Comment on lines +581 to +601
CREATE INDEX IF NOT EXISTS "idxEvenRealitiesSeenTasksProjectUpdated"
ON project.even_realities_seen_tasks(project_id, updated_at, task_id);
ALTER TABLE project.even_realities_seen_tasks ENABLE ROW LEVEL SECURITY;
ALTER TABLE project.even_realities_seen_tasks FORCE ROW LEVEL SECURITY;
DROP POLICY IF EXISTS fusion_project_isolation ON project.even_realities_seen_tasks;
CREATE POLICY fusion_project_isolation ON project.even_realities_seen_tasks
USING (current_setting('fusion.project_bypass', true) = 'on' OR project_id = current_setting('fusion.project_id', true))
WITH CHECK (current_setting('fusion.project_bypass', true) = 'on' OR project_id = current_setting('fusion.project_id', true));
DO $even_realities_runtime$
BEGIN
IF to_regprocedure('project.fusion_assign_project_id()') IS NOT NULL THEN
DROP TRIGGER IF EXISTS fusion_assign_project_id ON project.even_realities_seen_tasks;
CREATE TRIGGER fusion_assign_project_id
BEFORE INSERT OR UPDATE OF project_id ON project.even_realities_seen_tasks
FOR EACH ROW EXECUTE FUNCTION project.fusion_assign_project_id();
END IF;
IF EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'fusion_runtime') THEN
GRANT SELECT, INSERT, UPDATE, DELETE ON project.even_realities_seen_tasks TO fusion_runtime;
END IF;
END
$even_realities_runtime$;

@coderabbitai coderabbitai Bot Jul 25, 2026

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.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Idempotent reconciliation statements were folded into one-shot first-boot guards. In the two hooks that have no out-of-guard convergence pass (no ensureProjectIndexes, no readiness/upgrade block), statements that are safe and cheap to re-run every boot now live inside IF to_regclass(...) IS NULL, so any database whose table already exists never receives them. The lock contention this PR targets comes from CREATE TABLE / ADD COLUMN, not from CREATE INDEX IF NOT EXISTS, ENABLE ROW LEVEL SECURITY, or GRANT on already-correct objects.

  • packages/core/src/postgres/plugin-schema-hook.ts#L581-L601: keep only CREATE TABLE inside the even_realities_seen_tasks guard; move the index, ENABLE/FORCE ROW LEVEL SECURITY, fusion_project_isolation policy, trigger attach, and GRANT ... TO fusion_runtime back outside it (individually guarded on pg_class.relrowsecurity / pg_policies / pg_trigger as needed).
  • packages/core/src/postgres/plugin-schema-hook.ts#L535-L537: move CREATE INDEX IF NOT EXISTS "idxWhatsAppDedupeRetention" out of the whatsapp_chat_dedupe creation branch so existing tables missing the index still acquire it.
📍 Affects 1 file
  • packages/core/src/postgres/plugin-schema-hook.ts#L581-L601 (this comment)
  • packages/core/src/postgres/plugin-schema-hook.ts#L535-L537
🤖 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 `@packages/core/src/postgres/plugin-schema-hook.ts` around lines 581 - 601, The
even_realities_seen_tasks reconciliation currently runs only during table
creation; keep only CREATE TABLE inside its guard, and move the index, RLS
settings, fusion_project_isolation policy, trigger attachment, and
fusion_runtime grant outside it with appropriate idempotent guards. In
packages/core/src/postgres/plugin-schema-hook.ts lines 581-601, update the
surrounding hook accordingly. Also move CREATE INDEX IF NOT EXISTS
idxWhatsAppDedupeRetention out of the whatsapp_chat_dedupe creation branch at
packages/core/src/postgres/plugin-schema-hook.ts lines 535-537 so existing
tables receive the index.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Still valid; not patched this cycle (fix-action cap).

In plugin-schema-hook.ts:

  • even_realities_seen_tasks: keep only CREATE TABLE inside the to_regclass(...) IS NULL first-boot guard. Move CREATE INDEX IF NOT EXISTS, ENABLE/FORCE ROW LEVEL SECURITY, fusion_project_isolation policy, trigger attach, and GRANT … TO fusion_runtime outside that guard (each with its own idempotent guard: index IF NOT EXISTS, pg_class.relrowsecurity, pg_policies, pg_trigger as needed) so already-created tables still converge.
  • whatsapp_chat_dedupe: move CREATE INDEX IF NOT EXISTS \"idxWhatsAppDedupeRetention\" out of the table-creation branch so existing tables missing the index still acquire it.

Lock contention fix should stay on CREATE TABLE/ADD COLUMN; cheap idempotent DDL must remain boot-recurring.

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.

@gsxdsm, acknowledged. I’ll leave this finding unresolved for the follow-up: existing plugin tables must continue to converge their index, RLS/policy, trigger, and runtime-grant state on later boots, while only lock-heavy table/column creation remains first-boot guarded.

Would you like me to open a GitHub issue with the two required fixes and acceptance criteria?


✏️ Learnings added
Learnt from: gsxdsm
Repo: Runfusion/Fusion PR: 2438
File: packages/core/src/postgres/plugin-schema-hook.ts:581-601
Timestamp: 2026-07-26T14:21:52.648Z
Learning: In `packages/core/src/postgres/plugin-schema-hook.ts`, plugin schema hooks must keep cheap, idempotent reconciliation—such as `CREATE INDEX IF NOT EXISTS`, RLS/policy enforcement, trigger attachment, and runtime grants—recurring on boot for existing tables. First-boot `to_regclass(...) IS NULL` guards should contain only lock-heavy table creation (and similarly `ADD COLUMN` checks), so existing schemas can converge after partial or legacy initialization.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

Comment thread packages/core/src/postgres/startup-factory.ts
Comment thread packages/core/src/postgres/startup-factory.ts Outdated
Comment thread packages/core/src/store.ts
Comment thread packages/core/src/store.ts
@gsxdsm

gsxdsm commented Jul 26, 2026

Copy link
Copy Markdown
Collaborator

PR cleanup status (gsxdsm / pr-cleanup agent)

Conflicts with main: resolved via rebase onto current origin/main (main is 0.74.0-beta.3). Skipped obsolete chore(release): v0.73.0 — releasing is operator-only and main is already past 0.73.0.

Review fixes prepared at 5addb3b57054523a186e3a0adb7c97899ef5a3b2 on recovery branch pr-cleanup/2438-rebase:

  • Critical: removed recursive duplicate bootSchemaBackendOnce (infinite stack on boot) and restored globalSettingsDir signature; aligned max_connections FNXC with resolveEmbeddedMaxConnections
  • store: restored StepResume FNXC identifiers; restricted resumeWorkflowStep to pre-merge phase
  • docs/settings: FNXC whitelist headers, MD040 fence languages, worktree-isolated landing recipe
  • Dropped accidental root @fusion-plugin-examples/claude-runtime dependency

Blocked: cannot git push --force-with-lease to ischindl/Fusion:land/rufu-018-picks-v2 (account has pull-only on the fork). Author/maintainer with fork write access should:

git fetch origin pr-cleanup/2438-rebase
git push --force-with-lease ischindl-fork origin/pr-cleanup/2438-rebase:land/rufu-018-picks-v2

Or reset the fork branch to that tip. Until the PR head advances, GitHub still reports CONFLICTING against the pre-rebase tip.

@ischindl
ischindl force-pushed the land/rufu-018-picks-v2 branch from 2ec487a to 5addb3b Compare July 26, 2026 14:35
ischindl pushed a commit to ischindl/Fusion that referenced this pull request Jul 26, 2026
- Drop recursive duplicate bootSchemaBackendOnce (critical boot hang)
  and restore globalSettingsDir signature; align max_connections FNXC
  with resolveEmbeddedMaxConnections platform defaults
- Restore StepResume FNXC identifiers; restrict resumeWorkflowStep to
  pre-merge phase (match findPendingPreMergeStep)
- FNXC headers for settings CLI whitelist policy; MD040 fence languages;
  landing recipe uses isolated worktrees
- Drop accidental root @fusion-plugin-examples/claude-runtime dep
- Skip obsolete chore(release): v0.73.0 (main is already 0.74.0-beta.x)
@greptile-apps

greptile-apps Bot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR expands CLI settings and workflow recovery controls while changing merge, dependency-installation, context-recovery, and PostgreSQL initialization behavior.

  • Adds no-commit merge finalization and dependency-sync skipping, including Corepack/pnpm environment forwarding.
  • Adds an operator-facing workflow-step resume tool and corresponding store mutation.
  • Adds several project merge and handoff settings to the CLI.
  • Changes context-overflow recovery to compact sessions directly.
  • Reworks plugin-schema and embedded-PostgreSQL initialization behavior.

Confidence Score: 2/5

This PR is not safe to merge until no-commit finalization honors failed executor signals and workflow-step resume is restricted to authorized operators.

The two previously reported failures remain reachable: both no-commit early-return paths finalize before the executor veto, and the new step-resume handler remains exposed as an unclassified extension mutation that can rewrite a pending review result.

Files Needing Attention: packages/engine/src/merger-ai.ts; packages/cli/src/extension.ts; packages/engine/src/gating-classifications.ts

Important Files Changed

Filename Overview
packages/engine/src/merger-ai.ts Adds no-commit dependency-sync skipping and early no-op finalization, but the previously reported executor-failure veto bypass remains.
packages/cli/src/extension.ts Registers workflow-step resume, but the previously reported operator-authorization boundary remains unenforced for agent extension callers.
packages/core/src/store.ts Adds the audited pending-to-failed workflow-step mutation used by the new resume tool.
packages/core/src/postgres/plugin-schema-hook.ts Reworks bundled plugin table initialization to avoid repeated table DDL on startup.
packages/engine/src/merge-dependency-sync.ts Extends dependency installation with Corepack and pnpm environment passthrough.
packages/cli/src/commands/settings.ts Whitelists and parses additional project-scoped merge and handoff settings.
packages/engine/src/pi.ts Simplifies context-limit recovery to compact session history before retrying.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
  A[No-commit task enters AI merge] --> B{Branch missing or zero net diff?}
  B -- Yes --> C[Check workflow-step completion]
  C --> D[Finalize task early]
  B -- No --> E[Run normal landOneRepo path]
  E --> F[Empty-land guards]
  F --> G[Failed-executor veto]
  G --> H[Finalize or demote]
Loading

Reviews (2): Last reviewed commit: "fix: address PR #2438 review after rebas..." | Re-trigger Greptile

ischindl and others added 24 commits July 26, 2026 16:54
Co-authored-by: Fusion <noreply@runfusion.ai>
…add changeset

Co-authored-by: Fusion <noreply@runfusion.ai>
…s/mergeStrategy/directMergeCommitStrategy/mergeAdvanceAutoSync/owningNodeHandoffPolicy to CLI whitelist

Co-authored-by: Fusion <noreply@runfusion.ai>
…rePrApproval exclusion

Co-authored-by: Fusion <noreply@runfusion.ai>
… changeset for merge settings whitelist

Co-authored-by: Fusion <noreply@runfusion.ai>
…R decision

Co-authored-by: Fusion <noreply@runfusion.ai>
Co-authored-by: Fusion <noreply@runfusion.ai>
…tings set and cwd-main rejection

Co-authored-by: Fusion <noreply@runfusion.ai>
…ix and add changeset

Co-authored-by: Fusion <noreply@runfusion.ai>
…Worktree support

Co-authored-by: Fusion <noreply@runfusion.ai>
Adds a noCommitsExpected guard to the branch-missing check in runAiMerge
(packages/engine/src/merger-ai.ts). When the task has noCommitsExpected: true,
the branch is missing, and the task was executed, route through
evaluateNoCommitsNoOpFinalize instead of throwing 'work appears lost'.

If all steps are done, finalize as a no-op. If steps are incomplete/skipped,
demote to todo with progress preserved. Non-no-commits tasks still throw
unchanged.

Co-authored-by: Fusion <noreply@runfusion.ai>
Fusion-Task-Id: RUFU-011
… index

The function read lines[4] (Unix socket directory path, e.g. '/tmp')
instead of lines[3] (TCP port number) from postmaster.pid. This caused
isAlreadyRunning() to always return null, making every extension tool
call (fn_task_retry, fn_task_create, etc.) attempt to start a second
embedded PostgreSQL instance instead of joining the running one.

Root cause cascade:
1. setHostTaskStore IS called by dashboard (line 928) for its cwd
2. Extension tools for a different project (ds/devops) get a cache miss
3. getStore() calls createTaskStoreForBackend()
4. BootSchemaBackend creates EmbeddedPostgresLifecycle
5. isAlreadyRunning() calls readPortFromPostmasterPid() -> returns null
6. startInternal() tries pg.start() -> fails (lock collision)
7. Second isAlreadyRunning() call also returns null -> error thrown
8. 30-second timeout fires -> 'TaskStore boot timed out'

Includes complementary max_connections=250 fix from previous worktree
session (embedded PG pool sizing).

Co-authored-by: Fusion <noreply@runfusion.ai>
…kStores

FNXC:ExtensionHostStoreWarmup 2026-07-18-19:20:
Pre-populate setHostTaskStore for all registered projects from already-
running ProjectEngine TaskStores, so extension API tools (fn_task_archive,
fn_task_update, fn_agent_show) find a cached store and never fall through
to createTaskStoreForBackend which times out creating a second pool.

Uses each engine's existing TaskStore directly via engine.getTaskStore()
instead of creating a new backend connection — no PG boot overhead, no
schema advisory lock contention, no connection pool exhaustion.
…ntext and skip dep sync

Co-authored-by: Fusion <noreply@runfusion.ai>
Fusion-Task-Id: RUFU-018
…n installWorktreeDependencies

Co-authored-by: Fusion <noreply@runfusion.ai>
Fusion-Task-Id: RUFU-018
Co-authored-by: Fusion <noreply@runfusion.ai>
Fusion-Task-Id: RUFU-018
Co-authored-by: Fusion <noreply@runfusion.ai>
Fusion-Task-Id: RUFU-018
Co-authored-by: Fusion <noreply@runfusion.ai>
…n_workflow_step_resume tool

- Add resumeWorkflowStep method to TaskStore (packages/core/src/store.ts)
- Add fn_workflow_step_resume to review_gate_bypass tool permission list (packages/core/src/types.ts)
- Register fn_workflow_step_resume MCP tool in extension.ts (packages/cli/src/extension.ts)
- Add store-level test suite for resumeWorkflowStep (store-resume-step.test.ts)
- Add fn_workflow_step_resume to expected tools in CLI extension test

Co-authored-by: Fusion <noreply@runfusion.ai>
- Add resumedBy, resumedAt, resumeReason, resumedFromStatus fields to
  WorkflowStepResult for the fn_workflow_step_resume tool's audit trail
- Fixes TS2353 error in resumeWorkflowStep method

Co-authored-by: Fusion <noreply@runfusion.ai>
…tant

Co-authored-by: Fusion <noreply@runfusion.ai>
…caded dead code

Co-authored-by: Fusion <noreply@runfusion.ai>
ischindl and others added 3 commits July 26, 2026 16:54
Add an early empty-diff guard that short-circuits the merger clean room setup
for no-commits tasks whose branch has only synthetic merge commits (zero net
changes vs integration branch), preventing unnecessary pnpm install and build.

- Add early git diff --stat check before landOneRepo when noCommitsExpected is true
- Add evaluateNoCommitsNoOpFinalize guard for incomplete steps fallthrough
- Add regression test suite covering zero-diff, real-changes, incomplete-steps,
  and commit-expected edge cases
- Add fn_workflow_step_resume tool to skill documentation
- Fix embedded cluster bootstrap retry on non-UTF-8 OS-locale encoding
- Update pnpm-lock.yaml with latest dependency resolutions

Files changed:
 packages/cli/skill/fusion/SKILL.md                 |   2 +-
 .../cli/skill/fusion/references/extension-tools.md |  10 +
 .../skill/fusion/references/fusion-capabilities.md |   1 +
 packages/core/src/postgres/startup-factory.ts      |  18 ++
 packages/engine/src/__tests__/merger-ai.test.ts    | 220 ++++++++++++++++++---
 packages/engine/src/merger-ai.ts                   |  36 ++++
 pnpm-lock.yaml                                     | 185 ++++++++++++++++-
 7 files changed, 437 insertions(+), 35 deletions(-)

Fusion-Task-Id: RUFU-015
Fusion-Task-Lineage: 9155c391-fd89-4791-9550-25e05acca94d
Co-authored-by: Fusion <noreply@runfusion.ai>
- Drop recursive duplicate bootSchemaBackendOnce (critical boot hang)
  and restore globalSettingsDir signature; align max_connections FNXC
  with resolveEmbeddedMaxConnections platform defaults
- Restore StepResume FNXC identifiers; restrict resumeWorkflowStep to
  pre-merge phase (match findPendingPreMergeStep)
- FNXC headers for settings CLI whitelist policy; MD040 fence languages;
  landing recipe uses isolated worktrees
- Drop accidental root @fusion-plugin-examples/claude-runtime dep
- Skip obsolete chore(release): v0.73.0 (main is already 0.74.0-beta.x)
@ischindl
ischindl force-pushed the land/rufu-018-picks-v2 branch from 5addb3b to d1ad1b1 Compare July 26, 2026 14:54
@ischindl

Copy link
Copy Markdown
Contributor Author

I apologize for huge PR, this is Fusion's proactive self healing work :)

This is description from my AI agent

Here's the breakdown of all commits currently in PR #2438 (vs clean origin/main), organized into logical topic branches:

  1. topic/rufu-011-no-commits-guard (1 commit)

    Audit tasks with zero code changes got stuck in in-review because the merge pipeline expected a git merge operation but there was nothing to merge — infinite retry loop.

    Fix: If task.noCommitsExpected === true and all steps are done, finalize without merge.

  2. topic/rufu-018-pnpm-env (4 commits)

    AI merge pipeline's clean-room worktree failed with pnpm: command not found because COREPACK_HOME and PNPM_HOME environment variables weren't forwarded to child processes. For no-commits tasks, the dependency install shouldn't even run.

    Fix: Forward corepack/pnpm env vars to child processes; skip dependency sync entirely when noCommitsExpected === true. This is PR RUFU-018: pnpm env passthrough + no-commits dep-sync skip #2437.

  3. topic/rufu-015-empty-diff (1 commit)

    When a no-commits task incidentally had a git branch (created by worktree hydration), the RUFU-011 no-commits guard didn't activate because the branch existed — even though it contained zero file changes.

    Fix: Check git diff --stat — if the branch has no net diff vs integration branch, finalize as no-op without entering the clean-room build.

  4. topic/stas-032-resume-step (3 commits)

    A stuck pending workflow step (e.g., code-review prompt node that never received a verdict callback) was unrecoverable — no tool could unblock it.

    Fix: New fn_workflow_step_resume operator tool that transitions the step to failed, enabling the existing fn_task_bypass_review escape hatch.

  5. topic/stas-035-cleanup (3 commits)

    Dead code in pi.ts from the overflow recovery development: retryWithCompactedPromptMemory(), retryWithCompactedPromptSections(), and MAX_TOKENS_OVERFLOW_SAFETY_MARGIN constant were never called anywhere.

    Fix: Remove unused symbols. Linter tolerated them silently.

  6. topic/postgres-fixes (3 commits)

    readPortFromPostmasterPid had an off-by-one line index — wrong port. Plugin DDL deadlocked during migrations. Plus the max_tokens overflow recovery in promptWithFallback(): when a provider returns HTTP 400 with exact token counts, compact the session and retry instead of crashing.

    Fix: Correct port parsing, fix DDL migration locking, add session compaction fallback on token overflow errors.

  7. topic/aiwo-cli-settings-whitelist (10 commits)

    fn config set rejected valid merge settings (integrationBranch, pushAfterMerge, mergeStrategy, directMergeCommitStrategy, etc.) with "unknown setting" because they were missing from the CLI whitelist.

    Fix: Add ~10 missing merge/workflow settings keys to the CLI whitelist + documentation + changesets.

Dependency map:

#3 depends on #1 (both touch merger-ai.ts)
#5 depends on #6 (both touch pi.ts)
#2, #4, #7 are independent

PR #2437 = topic #2 only (clean, minimal). PR #2438 = topics #1–7 combined.

@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.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/engine/src/merge-dependency-sync.ts (1)

176-191: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Do not pass env separately for these variables.

resolveEnv is a copy of process.env, and this loop only reassigns values that already exist, so omitted values remain omitted. Since the default child_process.exec environment is process.env when env is not provided, this does not make pnpm resolvable when the engine process itself lacks those env vars; default or source the needed corepack/pnpm paths instead.

🤖 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 `@packages/engine/src/merge-dependency-sync.ts` around lines 176 - 191, Update
the environment setup used by runInstall so it does not separately pass
PNPM_ENV_VARS through a copied process.env. Ensure the required Corepack/pnpm
paths are resolved or sourced with appropriate defaults when absent from the
engine process, while preserving the existing cwd, encoding, buffer, and timeout
options.
🧹 Nitpick comments (2)
packages/engine/src/__tests__/merger-ai-no-commits-deps-skip.test.ts (2)

137-167: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Duplicate test case.

"skips installWorktreeDependencies entirely when noCommitsExpected: true" (137-167) and "lands successfully with noCommitsExpected: true and actual changes" (232-260) exercise the identical fixture, ctx, and assertions (not.toHaveBeenCalled() + outcome === "landed"). Both spin up a real git repo/worktree via landOneRepo, so this duplication adds real (non-mocked) execution time for no additional coverage.

Consider removing one of the two.

Also applies to: 232-260

🤖 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 `@packages/engine/src/__tests__/merger-ai-no-commits-deps-skip.test.ts` around
lines 137 - 167, Remove one of the duplicate noCommitsExpected test cases,
keeping a single test that uses landOneRepo with actual changes and verifies
installWorktreeDependencies is not called and the result outcome is "landed".

57-82: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

withChanges: false branch is never exercised.

createRepoFixture supports a docs-only (withChanges: false) branch, but every call site in this file passes true. Either add a test exercising the no-code-change fixture, or drop the unused parameter/branch.

🤖 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 `@packages/engine/src/__tests__/merger-ai-no-commits-deps-skip.test.ts` around
lines 57 - 82, The createRepoFixture no-code-change path is unused because all
callers pass true. Update the tests to exercise createRepoFixture(false) with an
assertion for the docs-only behavior, or remove the withChanges parameter and
its false branch if that scenario is not needed.
🤖 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.

Outside diff comments:
In `@packages/engine/src/merge-dependency-sync.ts`:
- Around line 176-191: Update the environment setup used by runInstall so it
does not separately pass PNPM_ENV_VARS through a copied process.env. Ensure the
required Corepack/pnpm paths are resolved or sourced with appropriate defaults
when absent from the engine process, while preserving the existing cwd,
encoding, buffer, and timeout options.

---

Nitpick comments:
In `@packages/engine/src/__tests__/merger-ai-no-commits-deps-skip.test.ts`:
- Around line 137-167: Remove one of the duplicate noCommitsExpected test cases,
keeping a single test that uses landOneRepo with actual changes and verifies
installWorktreeDependencies is not called and the result outcome is "landed".
- Around line 57-82: The createRepoFixture no-code-change path is unused because
all callers pass true. Update the tests to exercise createRepoFixture(false)
with an assertion for the docs-only behavior, or remove the withChanges
parameter and its false branch if that scenario is not needed.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 486d1c7a-1a6c-4dfa-9999-60328da30300

📥 Commits

Reviewing files that changed from the base of the PR and between 5addb3b and d1ad1b1.

📒 Files selected for processing (33)
  • .changeset/aiwo-039-integration-branch-cli-setting.md
  • .changeset/aiwo-040-merge-settings-whitelist.md
  • .changeset/aiwo-041-merge-integration-worktree-cli-setting.md
  • .changeset/fix-max-tokens-overflow-recovery-direct-compaction.md
  • docs/cli-reference.md
  • docs/infra/push-access-blocker-decision.md
  • docs/integration-branch-cli-setting.md
  • package.json
  • packages/cli/skill/fusion/SKILL.md
  • packages/cli/skill/fusion/references/extension-tools.md
  • packages/cli/skill/fusion/references/fusion-capabilities.md
  • packages/cli/src/__tests__/extension.test.ts
  • packages/cli/src/commands/__tests__/settings.test.ts
  • packages/cli/src/commands/dashboard.ts
  • packages/cli/src/commands/settings.ts
  • packages/cli/src/extension.ts
  • packages/core/src/__tests__/store-resume-step.test.ts
  • packages/core/src/__tests__/task-merge-bypass.test.ts
  • packages/core/src/index.ts
  • packages/core/src/postgres/embedded-lifecycle.ts
  • packages/core/src/postgres/plugin-schema-hook.ts
  • packages/core/src/postgres/sqlite-migrator.ts
  • packages/core/src/postgres/startup-factory.ts
  • packages/core/src/store.ts
  • packages/core/src/task-merge.ts
  • packages/core/src/types/workflow-steps.ts
  • packages/engine/src/__tests__/max-tokens-overflow-recovery.test.ts
  • packages/engine/src/__tests__/merge-dependency-sync-lockfile-heal.test.ts
  • packages/engine/src/__tests__/merger-ai-no-commits-deps-skip.test.ts
  • packages/engine/src/__tests__/merger-ai.test.ts
  • packages/engine/src/merge-dependency-sync.ts
  • packages/engine/src/merger-ai.ts
  • packages/engine/src/pi.ts
🚧 Files skipped from review as they are similar to previous changes (26)
  • .changeset/aiwo-039-integration-branch-cli-setting.md
  • packages/core/src/task-merge.ts
  • packages/core/src/index.ts
  • packages/cli/src/tests/extension.test.ts
  • .changeset/fix-max-tokens-overflow-recovery-direct-compaction.md
  • .changeset/aiwo-040-merge-settings-whitelist.md
  • .changeset/aiwo-041-merge-integration-worktree-cli-setting.md
  • packages/cli/skill/fusion/references/fusion-capabilities.md
  • packages/core/src/types/workflow-steps.ts
  • packages/cli/skill/fusion/references/extension-tools.md
  • packages/core/src/postgres/embedded-lifecycle.ts
  • packages/engine/src/tests/max-tokens-overflow-recovery.test.ts
  • docs/infra/push-access-blocker-decision.md
  • packages/core/src/tests/task-merge-bypass.test.ts
  • packages/core/src/tests/store-resume-step.test.ts
  • packages/core/src/store.ts
  • packages/cli/src/commands/dashboard.ts
  • docs/cli-reference.md
  • docs/integration-branch-cli-setting.md
  • packages/cli/src/commands/settings.ts
  • packages/core/src/postgres/plugin-schema-hook.ts
  • packages/cli/src/commands/tests/settings.test.ts
  • packages/engine/src/tests/merge-dependency-sync-lockfile-heal.test.ts
  • packages/engine/src/tests/merger-ai.test.ts
  • packages/engine/src/merger-ai.ts
  • packages/core/src/postgres/sqlite-migrator.ts

@gsxdsm

gsxdsm commented Jul 27, 2026

Copy link
Copy Markdown
Collaborator

Going to hold this for now. Doing a big refsctor in this area then will re apply

@gsxdsm

gsxdsm commented Jul 31, 2026

Copy link
Copy Markdown
Collaborator

Superseded by #2501 (same change, clean landing; this one is DIRTY with a failing check). Closing in favor of it.

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.

2 participants