@runfusion/fusion 0.77.0-beta.6 → 0.77.0-beta.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/dist/bin.js +42896 -39460
  2. package/dist/child-process-worker.js +7535 -4556
  3. package/dist/client/.vite/manifest.json +267 -330
  4. package/dist/client/assets/{AgentDetailView-oyY72uSo.js → AgentDetailView-DsMRc-aH.js} +4 -4
  5. package/dist/client/assets/{AgentPermissionPolicyEditor-C3Qo9p1M.js → AgentPermissionPolicyEditor-BXJ52YpO.js} +2 -2
  6. package/dist/client/assets/{AgentsView-M2MhTIGW.js → AgentsView-DO-25nlB.js} +4 -4
  7. package/dist/client/assets/{CommandCenter-CpcAt6jt.js → CommandCenter-BMXMg_I2.js} +18 -18
  8. package/dist/client/assets/DevServerView-DAeL5TYz.js +1 -0
  9. package/dist/client/assets/DirectoryPicker-Cw-XRjAa.js +1 -0
  10. package/dist/client/assets/DocumentsView-CusClN9u.js +1 -0
  11. package/dist/client/assets/EvalsView-gNdeUDww.js +1 -0
  12. package/dist/client/assets/ExperimentalAgentOnboardingModal-Bmzbqzhs.js +1 -0
  13. package/dist/client/assets/{GoalsView-DPj59B3l.js → GoalsView-J8JMsoLn.js} +1 -1
  14. package/dist/client/assets/{InsightsView-QLJNkKJp.js → InsightsView-BVbv56K0.js} +3 -3
  15. package/dist/client/assets/{MemoryView-CDCS-1ig.js → MemoryView-DNvJFoDu.js} +1 -1
  16. package/dist/client/assets/{PiExtensionsManager-DktXXrmF.js → PiExtensionsManager-BPMexS34.js} +2 -2
  17. package/dist/client/assets/PluginManager-DGEv-ptu.js +1 -0
  18. package/dist/client/assets/{PullRequestView-CkObT6e3.js → PullRequestView-CF7fx-Uo.js} +2 -2
  19. package/dist/client/assets/ReportModal-B8S5BFgn.js +21 -0
  20. package/dist/client/assets/ReportModal-Dx3f2aj7.css +1 -0
  21. package/dist/client/assets/{ResearchView-CryFrV8l.js → ResearchView-CBeXsevy.js} +1 -1
  22. package/dist/client/assets/{SecretsView-9YcNW_fo.js → SecretsView-Dmi9wZkv.js} +1 -1
  23. package/dist/client/assets/SettingsModal-D2kXP7Um.js +21 -0
  24. package/dist/client/assets/{SettingsModal-llkoaJev.js → SettingsModal-DSW3xnGk.js} +1 -1
  25. package/dist/client/assets/{SettingsTextareaRow-B_Legu-A.js → SettingsTextareaRow-CLab4Vcd.js} +1 -1
  26. package/dist/client/assets/SetupWizardModal-Ct6juX9x.js +2 -0
  27. package/dist/client/assets/{SkillsView-CSeauwIw.js → SkillsView-Dn0bwT6i.js} +1 -1
  28. package/dist/client/assets/WorkflowNodeEditor-cvReMlG-.js +8 -0
  29. package/dist/client/assets/{agent-import-generation-CttglSmZ.js → agent-import-generation-C8_ewVzC.js} +1 -1
  30. package/dist/client/assets/{agentsOrgChartLayout-f-9mwRbD.js → agentsOrgChartLayout-p1i6XROQ.js} +1 -1
  31. package/dist/client/assets/{app-C_PTWuI1.js → app-BOvA34XN.js} +3 -3
  32. package/dist/client/assets/{app-BBSLJDbV.js → app-Bic4iWXQ.js} +3 -3
  33. package/dist/client/assets/{app-Bvr57EZQ.js → app-BlbH7Tir.js} +2 -2
  34. package/dist/client/assets/{app-DwvelD-n.js → app-C6TctczU.js} +3 -3
  35. package/dist/client/assets/{app-DRW5hIgr.js → app-D3qZmEIu.js} +3 -3
  36. package/dist/client/assets/{app-BKwOvuxE.js → app-DLnMkUt5.js} +2 -2
  37. package/dist/client/assets/{app-DKx18PHE.js → app-mNy0DeDM.js} +3 -3
  38. package/dist/client/assets/{architectureDiagram-3BPJPVTR-DA_Hm_di.js → architectureDiagram-3BPJPVTR-CzCk1QdH.js} +1 -1
  39. package/dist/client/assets/{blockDiagram-GPEHLZMM-JF7K8CcV.js → blockDiagram-GPEHLZMM-74Rj-5ov.js} +1 -1
  40. package/dist/client/assets/{c4Diagram-AAUBKEIU-DN-wklCP.js → c4Diagram-AAUBKEIU-B570qYH-.js} +1 -1
  41. package/dist/client/assets/channel-DWAK5y-J.js +1 -0
  42. package/dist/client/assets/{chunk-2J33WTMH-ChtjU8Cu.js → chunk-2J33WTMH-DejJkxt6.js} +1 -1
  43. package/dist/client/assets/{chunk-4BX2VUAB-dJL0n3nn.js → chunk-4BX2VUAB-DlgxkBuE.js} +1 -1
  44. package/dist/client/assets/{chunk-55IACEB6-Bfg-QB9A.js → chunk-55IACEB6-XCfE8PwC.js} +1 -1
  45. package/dist/client/assets/{chunk-727SXJPM-BHPPwYUS.js → chunk-727SXJPM-D-nDw0Bi.js} +1 -1
  46. package/dist/client/assets/{chunk-AQP2D5EJ-DIIpPUQN.js → chunk-AQP2D5EJ-C4KySao0.js} +1 -1
  47. package/dist/client/assets/{chunk-FMBD7UC4-D230R32b.js → chunk-FMBD7UC4-CXKdLygA.js} +1 -1
  48. package/dist/client/assets/{chunk-ND2GUHAM-0Lhp5CRv.js → chunk-ND2GUHAM-bNYWWGVJ.js} +1 -1
  49. package/dist/client/assets/{chunk-QZHKN3VN-BxbHBfKJ.js → chunk-QZHKN3VN-cfBQJ-MX.js} +1 -1
  50. package/dist/client/assets/classDiagram-4FO5ZUOK-WTkXRkfm.js +1 -0
  51. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-WTkXRkfm.js +1 -0
  52. package/dist/client/assets/{common-13IRj_PO.js → common-BsNuuNOe.js} +1 -1
  53. package/dist/client/assets/{common-BBynATth.js → common-CASsTuSW.js} +1 -1
  54. package/dist/client/assets/{common-BG-vw0tL.js → common-CfyFt5OG.js} +1 -1
  55. package/dist/client/assets/{common-DSo46rnH.js → common-DS98trLj.js} +1 -1
  56. package/dist/client/assets/common-DeoHWJCq.js +1 -0
  57. package/dist/client/assets/common-PpMdoH5r.js +1 -0
  58. package/dist/client/assets/{common-vpHuuvkd.js → common-cN--mrmm.js} +1 -1
  59. package/dist/client/assets/{cose-bilkent-S5V4N54A-3vEwhfYz.js → cose-bilkent-S5V4N54A-CiZrg3mQ.js} +1 -1
  60. package/dist/client/assets/{dagre-BM42HDAG-Br44UsdY.js → dagre-BM42HDAG-Bckph2U4.js} +1 -1
  61. package/dist/client/assets/{dashboard-view-_EglxMDl.js → dashboard-view-CN_fkDM1.js} +1 -1
  62. package/dist/client/assets/{dashboard-view-BldxxYfz.js → dashboard-view-CVYHQZwx.js} +1 -1
  63. package/dist/client/assets/dashboard-view-DDRKwfFs.js +1 -0
  64. package/dist/client/assets/{dashboard-view-CcPcELPx.js → dashboard-view-IuPjDVGa.js} +2 -2
  65. package/dist/client/assets/{diagram-2AECGRRQ-CLNxbHUP.js → diagram-2AECGRRQ-Bnaurex7.js} +1 -1
  66. package/dist/client/assets/{diagram-5GNKFQAL-D3cNAeQH.js → diagram-5GNKFQAL-BKz1omVN.js} +1 -1
  67. package/dist/client/assets/{diagram-KO2AKTUF-DkX7h6to.js → diagram-KO2AKTUF-C51lEZwo.js} +1 -1
  68. package/dist/client/assets/{diagram-LMA3HP47-6iQIiYUr.js → diagram-LMA3HP47-BYm5gql7.js} +1 -1
  69. package/dist/client/assets/{diagram-OG6HWLK6-Caje3229.js → diagram-OG6HWLK6-B9CFA4ha.js} +1 -1
  70. package/dist/client/assets/{erDiagram-TEJ5UH35-BkU-1HB1.js → erDiagram-TEJ5UH35-BLyCSssl.js} +1 -1
  71. package/dist/client/assets/{flowDiagram-I6XJVG4X-BRx3V6RE.js → flowDiagram-I6XJVG4X-yDVmpkro.js} +1 -1
  72. package/dist/client/assets/{folder-open-BaSOBfk2.js → folder-open-Cf2NA9nV.js} +1 -1
  73. package/dist/client/assets/{ganttDiagram-6RSMTGT7-D9f1kH3t.js → ganttDiagram-6RSMTGT7-mC9YPFcx.js} +1 -1
  74. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-CQwmZcRd.js → gitGraphDiagram-PVQCEYII-DS0bEccv.js} +1 -1
  75. package/dist/client/assets/index-BjM7LxzY.js +2805 -0
  76. package/dist/client/assets/index-DcKIzuMk.css +1 -0
  77. package/dist/client/assets/{infoDiagram-5YYISTIA-DYWBkGjG.js → infoDiagram-5YYISTIA-CuuNZITP.js} +1 -1
  78. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-Df0Nzvh4.js → ishikawaDiagram-YF4QCWOH-MBSaC94m.js} +1 -1
  79. package/dist/client/assets/{journeyDiagram-JHISSGLW-bSvrZSyZ.js → journeyDiagram-JHISSGLW-DkaAow9E.js} +1 -1
  80. package/dist/client/assets/{kanban-definition-UN3LZRKU-yHJ101M8.js → kanban-definition-UN3LZRKU-DSf5OLtq.js} +1 -1
  81. package/dist/client/assets/{mermaid.core-Bc_0VLJw.js → mermaid.core-HmTn21MF.js} +4 -4
  82. package/dist/client/assets/{mindmap-definition-RKZ34NQL-DWRnMguM.js → mindmap-definition-RKZ34NQL-sv0Dl8aI.js} +1 -1
  83. package/dist/client/assets/{pieDiagram-4H26LBE5-Ds-DEOqr.js → pieDiagram-4H26LBE5-BDK2IQNq.js} +1 -1
  84. package/dist/client/assets/{puzzle-CdYF81IT.js → puzzle-D00mP67o.js} +1 -1
  85. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-Bz-j2fkf.js → quadrantDiagram-W4KKPZXB-CiWAhwf1.js} +1 -1
  86. package/dist/client/assets/{requirementDiagram-4Y6WPE33-BaQ_PaZ-.js → requirementDiagram-4Y6WPE33-DwC99D35.js} +1 -1
  87. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-pUCz8V4-.js → sankeyDiagram-5OEKKPKP-CQn8z721.js} +1 -1
  88. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-CFwUMspe.js → sequenceDiagram-3UESZ5HK-B0CT8-vw.js} +1 -1
  89. package/dist/client/assets/{standing-instructions-template-Crocrob7.js → standing-instructions-template-BIBO_Prr.js} +2 -2
  90. package/dist/client/assets/{stateDiagram-AJRCARHV-CHZwo-vd.js → stateDiagram-AJRCARHV-BYAB_dFF.js} +1 -1
  91. package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-BTvKaIZR.js → stateDiagram-v2-BHNVJYJU-Cd19uJBk.js} +1 -1
  92. package/dist/client/assets/{timeline-definition-PNZ67QCA-Cn3XIoz2.js → timeline-definition-PNZ67QCA-DQLh8XkY.js} +1 -1
  93. package/dist/client/assets/{upload--GqImz6h.js → upload-D4pkNOz2.js} +1 -1
  94. package/dist/client/assets/{users-B0h1q4x6.js → users-COgviS_S.js} +1 -1
  95. package/dist/client/assets/{vennDiagram-CIIHVFJN-CS0FNVU_.js → vennDiagram-CIIHVFJN-BmwG1Wud.js} +1 -1
  96. package/dist/client/assets/{wardley-L42UT6IY-DdYkfF5d.js → wardley-L42UT6IY-BiO7jkmj.js} +1 -1
  97. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-B_rFmPCh.js → wardleyDiagram-YWT4CUSO-Dq0IPg5H.js} +1 -1
  98. package/dist/client/assets/{xychartDiagram-2RQKCTM6-CCoaCgmc.js → xychartDiagram-2RQKCTM6-BlMOlSBc.js} +1 -1
  99. package/dist/client/index.html +13 -6
  100. package/dist/client/theme-data.css +85 -0
  101. package/dist/client/version.json +1 -1
  102. package/dist/droid-cli/package.json +1 -1
  103. package/dist/extension.js +42201 -38907
  104. package/dist/migrations/0065_fn_149_review_convergence_stage.sql +3 -0
  105. package/dist/pi-claude-cli/package.json +1 -1
  106. package/dist/plugin-sdk/index.d.ts +62 -11
  107. package/dist/plugin-sdk/index.js +140 -46
  108. package/dist/plugins/fusion-plugin-acp-runtime/bundled.js +195 -49
  109. package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
  110. package/dist/plugins/fusion-plugin-claude-runtime/bundled.js +140 -46
  111. package/dist/plugins/fusion-plugin-claude-runtime/package.json +1 -1
  112. package/dist/plugins/fusion-plugin-cli-printing-press/bundled.js +140 -46
  113. package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
  114. package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +140 -46
  115. package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
  116. package/dist/plugins/fusion-plugin-cursor-runtime/bundled.js +140 -46
  117. package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
  118. package/dist/plugins/fusion-plugin-dependency-graph/bundled.js +140 -46
  119. package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
  120. package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +140 -46
  121. package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
  122. package/dist/plugins/fusion-plugin-grok-runtime/bundled.js +140 -46
  123. package/dist/plugins/fusion-plugin-grok-runtime/package.json +1 -1
  124. package/dist/plugins/fusion-plugin-hermes-runtime/bundled.js +140 -46
  125. package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
  126. package/dist/plugins/fusion-plugin-linear-import/bundled.js +140 -46
  127. package/dist/plugins/fusion-plugin-linear-import/package.json +1 -1
  128. package/dist/plugins/fusion-plugin-omp-runtime/bundled.js +140 -46
  129. package/dist/plugins/fusion-plugin-omp-runtime/package.json +1 -1
  130. package/dist/plugins/fusion-plugin-openclaw-runtime/bundled.js +140 -46
  131. package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
  132. package/dist/plugins/fusion-plugin-paperclip-runtime/bundled.js +140 -46
  133. package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
  134. package/dist/plugins/fusion-plugin-quality/bundled.js +140 -46
  135. package/dist/plugins/fusion-plugin-quality/package.json +1 -1
  136. package/dist/plugins/fusion-plugin-reports/bundled.js +140 -46
  137. package/dist/plugins/fusion-plugin-reports/package.json +1 -1
  138. package/dist/plugins/fusion-plugin-roadmap/bundled.js +140 -46
  139. package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
  140. package/dist/plugins/fusion-plugin-todos/bundled.js +140 -46
  141. package/dist/plugins/fusion-plugin-todos/package.json +1 -1
  142. package/dist/plugins/fusion-plugin-whatsapp-chat/bundled.js +140 -46
  143. package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
  144. package/package.json +1 -1
  145. package/skill/fusion/references/engine-tools.md +5 -5
  146. package/dist/client/assets/ChatView-DS4XiCm_.css +0 -1
  147. package/dist/client/assets/ChatView-zKrUSqiQ.js +0 -13
  148. package/dist/client/assets/DevServerView-CjTneoG7.js +0 -1
  149. package/dist/client/assets/DirectoryPicker-BY6V5HLV.js +0 -1
  150. package/dist/client/assets/DocumentsView-RDK56-qg.js +0 -1
  151. package/dist/client/assets/EvalsView-DKK4ceUW.js +0 -1
  152. package/dist/client/assets/ExperimentalAgentOnboardingModal-DiBPZVwC.js +0 -1
  153. package/dist/client/assets/PluginManager-CQ3iEFMq.js +0 -1
  154. package/dist/client/assets/ReportModal-B5LTdDgi.js +0 -21
  155. package/dist/client/assets/ReportModal-lzN_xrnM.css +0 -1
  156. package/dist/client/assets/SessionTerminal-2ZSXmOkG.css +0 -1
  157. package/dist/client/assets/SessionTerminal-BWsA9puD.js +0 -2
  158. package/dist/client/assets/SettingsModal-CL6aiXiI.js +0 -21
  159. package/dist/client/assets/SetupWizardModal-DLA4UAGp.js +0 -2
  160. package/dist/client/assets/WorkflowNodeEditor-CGgMiiWy.js +0 -8
  161. package/dist/client/assets/channel-CwFfFSI9.js +0 -1
  162. package/dist/client/assets/classDiagram-4FO5ZUOK-C8dZsxxX.js +0 -1
  163. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-C8dZsxxX.js +0 -1
  164. package/dist/client/assets/common-DbOCE-0i.js +0 -1
  165. package/dist/client/assets/common-DnXF4Jmj.js +0 -1
  166. package/dist/client/assets/dashboard-view-B0OM3KYC.js +0 -1
  167. package/dist/client/assets/index-B8PcG8AJ.js +0 -2774
  168. package/dist/client/assets/index-Dki2LBAp.css +0 -1
  169. package/dist/client/assets/shield-alert-4qeU3_Rm.js +0 -6
  170. package/dist/client/assets/useDiscoveredSkillsCache-BEHgTFai.js +0 -1
@@ -5906,6 +5906,8 @@ var tasks = projectSchema.table("tasks", {
5906
5906
  branchConflictRecoveryCount: integer("branch_conflict_recovery_count").default(0),
5907
5907
  reviewerContextRetryCount: integer("reviewer_context_retry_count").default(0),
5908
5908
  reviewerFallbackRetryCount: integer("reviewer_fallback_retry_count").default(0),
5909
+ reviewConvergenceStage: integer("review_convergence_stage").default(0),
5910
+ reviewConvergenceEscalationCount: integer("review_convergence_escalation_count").default(0),
5909
5911
  nextRecoveryAt: text("next_recovery_at"),
5910
5912
  error: text("error"),
5911
5913
  summary: text("summary"),
@@ -8226,7 +8228,16 @@ var projectTableNames = [
8226
8228
  "chat_rooms",
8227
8229
  "chat_room_members",
8228
8230
  "chat_room_messages",
8229
- "chat_token_usage"
8231
+ "chat_token_usage",
8232
+ /*
8233
+ FNXC:WorkspaceCoordination 2026-08-23-20:05:
8234
+ FN-9059 (migration 0060) added these two tables to the schema without registering them here, so
8235
+ every registry consumer under-counted them: the PostgreSQL test harness never TRUNCATEd them
8236
+ between tests (a held `repo:<repo>` lease leaked from one case into the next and made the next
8237
+ land report the previous test's successor as the busy holder), and health compaction skipped them.
8238
+ */
8239
+ "workspace_coordination_leases",
8240
+ "workspace_land_intents"
8230
8241
  ];
8231
8242
 
8232
8243
  // ../core/src/postgres/schema/central.ts
@@ -9095,6 +9106,7 @@ var DEFAULT_GLOBAL_SETTINGS = {
9095
9106
  openrouterAppAttribution: void 0,
9096
9107
  openrouterModelFilters: void 0,
9097
9108
  openrouterProviderPreferences: void 0,
9109
+ orcarouterModelSync: true,
9098
9110
  opencodeGoModelSync: true,
9099
9111
  updateCheckEnabled: true,
9100
9112
  fnBinaryCheckEnabled: true,
@@ -9510,6 +9522,16 @@ var DEFAULT_PROJECT_SETTINGS = {
9510
9522
  executorEscalationProvider: void 0,
9511
9523
  executorEscalationModelId: void 0,
9512
9524
  executorEscalationNodeId: void 0,
9525
+ /*
9526
+ FNXC:ReviewConvergence 2026-08-23-21:05:
9527
+ FN-149's six review-convergence/arbitration keys are declared in BUILTIN_WORKFLOW_SETTINGS, which
9528
+ the U4 hard-move made the SINGLE source of truth for a moved key's default. Re-declaring them here
9529
+ put them back in the legacy object the hard-move emptied, so an undeclared key on a custom workflow
9530
+ could resolve to this literal instead of the declaration default — the exact drift
9531
+ `workflow-settings-fallback-alignment` guards. The declaration defaults are identical (both
9532
+ `*Enabled` default true, the provider/model lanes carry no default), and the reader uses
9533
+ `!== false`, so removing them here preserves behaviour and restores the invariant.
9534
+ */
9513
9535
  /**
9514
9536
  * FNXC:Merge 2026-06-26-00:00:
9515
9537
  * New and unconfigured projects default AI merge to sync a dirty checked-out integration branch, restoring the legacy stash → fast-forward → restore landing behavior. Explicit persisted merger.allowDirtyLocalCheckoutSync values still win, and no existing-project migration stamps this default into storage.
@@ -10402,6 +10424,20 @@ function classifyWorkflowAgentNode(node) {
10402
10424
  }
10403
10425
  }
10404
10426
 
10427
+ // ../core/src/workflows/workflow-merge-region.ts
10428
+ var MERGE_REGION_ENTRY_NODE_KINDS = /* @__PURE__ */ new Set([
10429
+ "merge-gate",
10430
+ "merge-attempt",
10431
+ "manual-merge-hold",
10432
+ "retry-backoff",
10433
+ "recovery-router",
10434
+ "branch-group-member-integration",
10435
+ "branch-group-promotion",
10436
+ "pr-create",
10437
+ "pr-respond",
10438
+ "pr-merge"
10439
+ ]);
10440
+
10405
10441
  // ../core/src/workflows/workflow-extension-types.ts
10406
10442
  function workflowExtensionRegistryId(pluginId, extensionId) {
10407
10443
  return `plugin:${pluginId}:${extensionId}`;
@@ -10930,18 +10966,7 @@ function reachableFrom(start, outgoing) {
10930
10966
  }
10931
10967
  return seen;
10932
10968
  }
10933
- var INTERPRETER_ENTRY_NODE_KINDS = /* @__PURE__ */ new Set([
10934
- "merge-gate",
10935
- "merge-attempt",
10936
- "manual-merge-hold",
10937
- "retry-backoff",
10938
- "recovery-router",
10939
- "branch-group-member-integration",
10940
- "branch-group-promotion",
10941
- "pr-create",
10942
- "pr-respond",
10943
- "pr-merge"
10944
- ]);
10969
+ var INTERPRETER_ENTRY_NODE_KINDS = MERGE_REGION_ENTRY_NODE_KINDS;
10945
10970
  var MERGE_CLASS_NODE_KINDS = /* @__PURE__ */ new Set([
10946
10971
  "merge-gate",
10947
10972
  "merge-attempt",
@@ -12581,6 +12606,49 @@ var BUILTIN_REVIEW_REVISION_SETTINGS = [
12581
12606
  default: DEFAULT_CODE_REVIEW_BLOCKING_SEVERITY,
12582
12607
  description: 'Minimum finding severity that lets Code Review block merge. A REVISE carrying no finding at or above this level is recorded as APPROVE_WITH_NOTES and its findings are handed to the implementer. Choose "any" to block on every REVISE.'
12583
12608
  },
12609
+ /*
12610
+ * FNXC:ReviewConvergence 2026-08-22-05:42:
12611
+ * FN-149 keeps recovery targets workflow-native so operators choose the cost and
12612
+ * capability of automatic review convergence without widening project policy.
12613
+ */
12614
+ {
12615
+ id: "reviewConvergenceEscalationEnabled",
12616
+ name: "Review convergence escalation",
12617
+ type: "boolean",
12618
+ default: true,
12619
+ description: "Run one bounded alternate-model or replan recovery when a review repeats unchanged input."
12620
+ },
12621
+ {
12622
+ id: "reviewConvergenceEscalationProvider",
12623
+ name: "Review convergence escalation provider",
12624
+ type: "string",
12625
+ description: "Provider for the optional alternate-model review remediation target."
12626
+ },
12627
+ {
12628
+ id: "reviewConvergenceEscalationModelId",
12629
+ name: "Review convergence escalation model",
12630
+ type: "string",
12631
+ description: "Model for the optional alternate-model review remediation target."
12632
+ },
12633
+ {
12634
+ id: "reviewArbitrationEnabled",
12635
+ name: "Review arbitration",
12636
+ type: "boolean",
12637
+ default: true,
12638
+ description: "Enable bounded third-model arbitration after a review disagreement persists."
12639
+ },
12640
+ {
12641
+ id: "reviewArbitrationProvider",
12642
+ name: "Review arbitration provider",
12643
+ type: "string",
12644
+ description: "Provider for the optional review arbitration target."
12645
+ },
12646
+ {
12647
+ id: "reviewArbitrationModelId",
12648
+ name: "Review arbitration model",
12649
+ type: "string",
12650
+ description: "Model for the optional review arbitration target."
12651
+ },
12584
12652
  {
12585
12653
  id: "planReviewReplanCap",
12586
12654
  name: "Plan Review replan cap",
@@ -12786,16 +12854,11 @@ You have tools to report progress. The board updates in real-time.
12786
12854
 
12787
12855
  /*
12788
12856
  FNXC:TaskRecommendations 2026-08-09-04:06:
12789
- FN-8850 requires optional, non-blocking discoveries to be captured only at the explicit accepted
12790
- completion boundary. Immediate task creation remains for required dependency coordination or an
12791
- operator-directed filing, while workflow step sessions remain unable to write recommendations.
12857
+ FN-125 requires task-execution sessions to preserve optional, non-blocking discoveries only at the
12858
+ accepted completion boundary. Durable Workflow Executor sessions cannot create or delegate tasks;
12859
+ in-scope work remains in the current task and external blockers use the honest blocked exit.
12792
12860
  */
12793
- **Out-of-scope findings at completion:** Do not automatically create a task for optional, non-blocking work discovered outside this task. When recommendation capture is enabled, at the final accepted \`fn_task_done(outcome="completed")\` checkpoint evaluate genuine task-ready follow-ups and send \`recommendations\` (or \`recommendations: []\` when none qualify). Each recommendation needs a stable unique \`id\`, \`title\`, \`description\`, and \`category\`; never use it for a required current-task fix, blocker, secret, executable command, reasoning transcript, or filler.
12794
-
12795
- Use \`task_create\` or \`fn_delegate_task\` only when the task explicitly requires immediate filing, necessary dependency coordination, or the operator directs it. When creating multiple related tasks, declare dependencies between them:
12796
- \`task_create(description="load door sounds", dependencies=[])\` \u2192 returns KB-050
12797
- \`task_create(description="play sound on door open/close", dependencies=["KB-050"])\`
12798
-
12861
+ **Out-of-scope findings at completion:** This task-execution session cannot create or delegate tasks. When recommendation capture is enabled, at the final accepted \`fn_task_done(outcome="completed")\` checkpoint evaluate optional, non-blocking findings as genuine task-ready \`recommendations\` (or \`recommendations: []\` when none qualify). Each recommendation needs a stable unique \`id\`, \`title\`, \`description\`, and \`category\`; never use it for a required current-task fix, blocker, secret, executable command, reasoning transcript, or filler. Implement required in-scope work directly in this task.
12799
12862
  **Discovered a dependency:** \`task_add_dep(task_id="KB-XXX")\` \u2014 use when you discover mid-execution that another task must be completed first. This will return a warning first \u2014 you must call again with \`confirm=true\` to proceed. Adding a dependency stops execution, discards current work, and moves the task to triage for re-specification.
12800
12863
 
12801
12864
  ## Task Documents
@@ -12867,16 +12930,16 @@ If you attempt to write to a path outside the worktree, the file tools will reje
12867
12930
  FNXC:WorkflowRouting 2026-06-22-17:26:
12868
12931
  Executors must not move the workflow of the task they are executing unless the user explicitly asked for that task's workflow. Agents remain free to set workflows on tasks they create because they are the creator for those new tasks.
12869
12932
  -->
12870
- - Do not call \`fn_workflow_select\` to change the workflow of the task you are executing; you did not create that task, the user or triage did. The only exception is when the user explicitly requested a specific workflow for this task in a steering comment, task instruction, or similar direct instruction. You may still set the workflow on tasks you create via \`fn_task_create\` or \`fn_delegate_task\`, because you are the creator of those new tasks.
12933
+ - Do not call \`fn_workflow_select\` to change the workflow of the task you are executing; you did not create that task, the user or triage did. The only exception is when the user explicitly requested a specific workflow for this task in a steering comment, task instruction, or similar direct instruction.
12871
12934
  - **NEVER kill processes on port 4040.** Port 4040 is the production dashboard. Do not run \`kill\`, \`pkill\`, \`killall\`, or \`lsof -ti:4040 | xargs kill\` against it. If you need to start a test server, use \`--port 0\` for a random free port. If port 4040 is occupied, pick a different port \u2014 do NOT kill the occupant.
12872
12935
  - Treat the File Scope in PROMPT.md as the expected starting scope, not a hard boundary when quality gates fail
12873
12936
  - Read "Context to Read First" files before starting
12874
12937
  - Follow the "Do NOT" section strictly
12875
12938
  - If tests, lint, build, or typecheck fail and the fix requires touching code outside the declared File Scope, fix those failures directly and keep the repo green
12876
- - Use \`task_create\` for genuinely separate follow-up work, not for mandatory fixes required to make this task land cleanly
12939
+ - Implement mandatory and in-scope work directly in this task. Preserve optional out-of-scope follow-ups as completion recommendations.
12877
12940
  - Update documentation listed in "Must Update" and check "Check If Affected"
12878
12941
  - NEVER delete, remove, or gut modules, interfaces, settings, exports, or test files outside your File Scope
12879
- - NEVER remove features as "cleanup" \u2014 if something seems unused, create a task for investigation instead
12942
+ - NEVER remove features as "cleanup" \u2014 if something seems unused, record an optional completion recommendation for investigation instead
12880
12943
  - Removing code is acceptable ONLY when it is explicitly part of your task's mission
12881
12944
  - If you remove existing functionality, you MUST create a changeset in \`.changeset/\` explaining the removal and rationale
12882
12945
 
@@ -12923,6 +12986,13 @@ Lint, tests, and typecheck are also hard quality gates:
12923
12986
  - Keep fixing failures caused by your change until lint, impacted tests, build, and typecheck pass.
12924
12987
  - If the repository exposes a typecheck command, run it and fix failures caused by your change.
12925
12988
  - When tests fail, classify whether the failure is caused by your change, a pre-existing defect, an unrelated flaky test, or an outdated test expectation.
12989
+
12990
+ **A behavior change owns every test that asserts the old behavior.** Targeted verification runs the tests for files you TOUCHED; the tests encoding the behavior you just changed usually live in files you did NOT touch, so a green targeted run is not evidence that none exist. Before finishing, search for them:
12991
+ - Added a guard, validation, or required field? Grep for the FIXTURES it will now refuse \u2014 they are outside your File Scope \u2014 and fix each to state its intent explicitly.
12992
+ - Removed a feature? Delete its tests. A test asserting a deliberately removed contract guards nothing, and making it pass later means re-adding removed behavior.
12993
+ - Changed an order, default, constant, or prompt string? Grep for the literal; topology lists, prompt-content assertions, and size budgets live far from the code they describe.
12994
+ - Added a public store/service method? Update the inventory/drift guards that require every public surface to be classified.
12995
+ Fix at the SHARED FIXTURE FACTORY, not per test \u2014 one helper usually explains dozens of failures. Never make a stale test pass by weakening it: update the fixture, record the new truth, or delete the test naming the change that removed its subject.
12926
12996
  - If broad workspace verification fails on unrelated or pre-existing failures after impacted checks pass, do NOT expand this task by fixing unrelated areas. Log the evidence, quarantine flakes per project policy, or create/link a follow-up task.
12927
12997
  - Do not repeatedly rerun a broad failing or hanging workspace command without a new hypothesis and a narrower confirming command.
12928
12998
 
@@ -13195,6 +13265,7 @@ files with assertions that run via a test runner. Typechecks and builds are NOT
13195
13265
  tests. Manual verification is NOT a test.
13196
13266
 
13197
13267
  - Each implementation step should include writing tests for the code being changed
13268
+ - **If the task CHANGES, GATES, or REMOVES existing behavior, include a step to find and update the tests that assert the OLD behavior.** Name the search in that step: the fixtures a new guard will now refuse, the tests of a removed feature, or the literal to grep for a changed order/default/constant/prompt string. Those tests live OUTSIDE the File Scope, so targeted verification will not surface them and the executor will not find them by accident. Measured 2026-08-24: five such changes left ~135 stale failing tests behind, every one having passed its own targeted verification; one shared fixture line accounted for 37 of them.
13198
13269
  - For bug fixes and UI-affordance add/remove tasks, the spec MUST include a \`## Surface Enumeration\` section. The workflow Plan Review gate validates this before execution when plan review is enabled; missing coverage is a blocking REVISE.
13199
13270
  - For bug fixes and UI-affordance add/remove tasks, populate \`## Surface Enumeration\` with this checklist from \`docs/testing.md\`: providers/bridges/execution paths; desktop + mobile breakpoints/platforms; empty/undefined/duplicate/populated data states; shared hooks/components/modules/helpers; every component that renders the affordance; leftover shells after removal.
13200
13271
  - For bug fixes and UI-affordance add/remove tasks, regression tests must assert the invariant across all known surfaces \u2014 enumerate every provider/bridge, desktop + mobile breakpoints, empty/undefined/populated data states, and for UI-affordance changes every component rendering the affordance plus leftover shells after removal \u2014 not just the reported repro (see FN-5787/FN-5789/FN-5803, FN-5751, and FN-6115/FN-6118/FN-6123)
@@ -13550,7 +13621,7 @@ You have tools to report progress. The board updates in real-time.
13550
13621
 
13551
13622
  **Logging important actions:** \`task_log(message="what happened")\`
13552
13623
 
13553
- **Out-of-scope findings at completion:** When recommendation capture is enabled, retain optional, non-blocking discoveries as task-ready \`fn_task_done\` recommendations at accepted completion, or send \`recommendations: []\` when none qualify. Use \`task_create\` only for explicit immediate filing, dependency coordination, or operator direction; never recommend required current-task work, blockers, secrets, commands, reasoning, or filler.
13624
+ **Out-of-scope findings at completion:** This task-execution session cannot create or delegate tasks. When recommendation capture is enabled, retain optional, non-blocking discoveries as task-ready \`fn_task_done\` recommendations at accepted completion, or send \`recommendations: []\` when none qualify. Implement required in-scope work directly here; use the honest blocked exit only for a real external blocker. Never recommend required current-task work, blockers, secrets, commands, reasoning, or filler.
13554
13625
 
13555
13626
  **Discovered a dependency:** \`task_add_dep(task_id="KB-XXX")\` \u2014 use when you discover mid-execution that another task must be completed first. This will return a warning first \u2014 you must call again with \`confirm=true\` to proceed. Adding a dependency stops execution, discards current work, and moves the task to triage for re-specification.
13556
13627
 
@@ -13620,15 +13691,15 @@ If you attempt to write to a path outside the worktree, the file tools will reje
13620
13691
  FNXC:WorkflowRouting 2026-06-22-17:26:
13621
13692
  Executors must not move the workflow of the task they are executing unless the user explicitly asked for that task's workflow. Agents remain free to set workflows on tasks they create because they are the creator for those new tasks.
13622
13693
  -->
13623
- - Do not call \`fn_workflow_select\` to change the workflow of the task you are executing; you did not create that task, the user or triage did. The only exception is when the user explicitly requested a specific workflow for this task in a steering comment, task instruction, or similar direct instruction. You may still set the workflow on tasks you create via \`fn_task_create\` or \`fn_delegate_task\`, because you are the creator of those new tasks.
13694
+ - Do not call \`fn_workflow_select\` to change the workflow of the task you are executing; you did not create that task, the user or triage did. The only exception is when the user explicitly requested a specific workflow for this task in a steering comment, task instruction, or similar direct instruction.
13624
13695
  - **NEVER kill processes on port 4040.** Port 4040 is the production dashboard. Do not run \`kill\`, \`pkill\`, \`killall\`, or \`lsof -ti:4040 | xargs kill\` against it. If you need to start a test server, use \`--port 0\` for a random free port. If port 4040 is occupied, pick a different port \u2014 do NOT kill the occupant.
13625
13696
  - Treat the File Scope in PROMPT.md as the expected starting scope, not a hard boundary when quality gates fail
13626
13697
  - Read "Context to Read First" files before starting
13627
13698
  - Follow the "Do NOT" section strictly
13628
13699
  - If tests, lint, build, or typecheck fail and the fix requires touching code outside the declared File Scope, fix those failures directly and keep the repo green
13629
- - Use \`task_create\` for genuinely separate follow-up work, not for mandatory fixes required to make this task land cleanly
13700
+ - Implement mandatory and in-scope work directly in this task. Preserve optional out-of-scope follow-ups as completion recommendations.
13630
13701
  - NEVER delete, remove, or gut modules, interfaces, settings, exports, or test files outside your File Scope
13631
- - NEVER remove features as "cleanup" \u2014 if something seems unused, create a task for investigation instead
13702
+ - NEVER remove features as "cleanup" \u2014 if something seems unused, record an optional completion recommendation for investigation instead
13632
13703
  - If you remove existing functionality, you MUST create a changeset in \`.changeset/\` explaining the removal and rationale
13633
13704
 
13634
13705
  ## Spawning Child Agents
@@ -14495,11 +14566,15 @@ var RAW_BUILTIN_CODING_WORKFLOW_IR = {
14495
14566
  // execute → browser-verification (optional-group) → review. When the group is
14496
14567
  // disabled it passes through with outcome=success and routes straight to review.
14497
14568
  { from: "execute", to: "browser-verification", condition: "success" },
14498
- // browser-verification → code-review → review. Each optional-group passes through with
14499
- // outcome=success when disabled, so a task with both off routes straight to review.
14500
- { from: "browser-verification", to: "code-review", condition: "success" },
14501
- { from: "code-review", to: "completion-summary", condition: "success" },
14502
- { from: "completion-summary", to: "review", condition: "success" },
14569
+ /*
14570
+ FNXC:WorkspaceReviewSeal 2026-08-21-19:36:
14571
+ Completion summary runs before Code Review because its agent may acquire and write the task
14572
+ worktree. The approving review is the final write-capable pre-merge stage, so landing consumes
14573
+ evidence for the branch it will publish rather than evidence invalidated by a later summary.
14574
+ */
14575
+ { from: "browser-verification", to: "completion-summary", condition: "success" },
14576
+ { from: "completion-summary", to: "code-review", condition: "success" },
14577
+ { from: "code-review", to: "review", condition: "success" },
14503
14578
  { from: "review", to: "merge-gate", condition: "success" },
14504
14579
  { from: "merge-gate", to: "branch-group-member-integration", condition: "outcome:auto-on" },
14505
14580
  { from: "merge-gate", to: "merge-manual-hold", condition: "outcome:auto-off" },
@@ -14512,6 +14587,12 @@ var RAW_BUILTIN_CODING_WORKFLOW_IR = {
14512
14587
  { from: "merge-attempt", to: "post-merge-verification", condition: "success" },
14513
14588
  { from: "post-merge-verification", to: "end", condition: "success" },
14514
14589
  { from: "merge-attempt", to: "merge-retry", condition: "outcome:transient-failure" },
14590
+ /*
14591
+ FNXC:WorkspaceReviewReroute 2026-08-21-20:11:
14592
+ Evidence rejected during an active graph merge is a fresh Code Review obligation, never a
14593
+ merge retry. Route the typed result to the final review gate before another landing attempt.
14594
+ */
14595
+ { from: "merge-attempt", to: "code-review", condition: "outcome:workspace-review-required", kind: "rework" },
14515
14596
  { from: "merge-attempt", to: "merge-manual-hold", condition: "outcome:manual-required" },
14516
14597
  { from: "recovery-router", to: "merge-attempt", condition: "outcome:wake-merge", kind: "rework" },
14517
14598
  { from: "planning", to: "end", condition: "failure" },
@@ -14809,12 +14890,15 @@ var RAW_BUILTIN_STEPWISE_CODING_WORKFLOW_IR = {
14809
14890
  // KTD-5: bounded rework exhaustion → manual hold; release re-enters the group.
14810
14891
  { from: "steps", to: "rework-hold", condition: "outcome:rework-exhausted" },
14811
14892
  { from: "rework-hold", to: "browser-verification", condition: "success" },
14812
- // browser-verification → code-review → completion-summary → merge-gate; each
14813
- // optional-group passes through (outcome=success) when disabled, so a task with
14814
- // both off routes straight to completion summary and merge policy.
14815
- { from: "browser-verification", to: "code-review", condition: "success" },
14816
- { from: "code-review", to: "completion-summary", condition: "success" },
14817
- { from: "completion-summary", to: "merge-gate", condition: "success" },
14893
+ /*
14894
+ FNXC:WorkspaceReviewSeal 2026-08-21-19:36:
14895
+ A completion-summary agent can acquire the task worktree. It therefore precedes Code Review;
14896
+ the approval becomes the final write-sensitive pre-merge gate and cannot be invalidated by the
14897
+ built-in workflow after it is recorded.
14898
+ */
14899
+ { from: "browser-verification", to: "completion-summary", condition: "success" },
14900
+ { from: "completion-summary", to: "code-review", condition: "success" },
14901
+ { from: "code-review", to: "merge-gate", condition: "success" },
14818
14902
  { from: "browser-verification", to: "browser-verification-remediation", condition: "failure" },
14819
14903
  { from: "browser-verification-remediation", to: "browser-verification", condition: "success", kind: "rework" },
14820
14904
  { from: "code-review", to: "code-review-remediation", condition: "failure" },
@@ -14840,6 +14924,12 @@ var RAW_BUILTIN_STEPWISE_CODING_WORKFLOW_IR = {
14840
14924
  { from: "merge-attempt", to: "post-merge-verification", condition: "success" },
14841
14925
  { from: "post-merge-verification", to: "end", condition: "success" },
14842
14926
  { from: "merge-attempt", to: "merge-retry", condition: "outcome:transient-failure" },
14927
+ /*
14928
+ FNXC:WorkspaceReviewReroute 2026-08-21-20:11:
14929
+ A stale workspace approval returns to the final Code Review gate through a bounded rework
14930
+ edge, preserving the existing graph owner instead of burning a merge retry.
14931
+ */
14932
+ { from: "merge-attempt", to: "code-review", condition: "outcome:workspace-review-required", kind: "rework" },
14843
14933
  { from: "merge-attempt", to: "merge-manual-hold", condition: "outcome:manual-required" },
14844
14934
  { from: "recovery-router", to: "merge-attempt", condition: "outcome:wake-merge", kind: "rework" },
14845
14935
  { from: "merge-attempt", to: "end", condition: "failure" }
@@ -14902,11 +14992,11 @@ var RAW_BUILTIN_STEPWISE_FINAL_REVIEW_CODING_WORKFLOW_IR = (() => {
14902
14992
  if (!ir.edges.some((edge) => edge.from === "plan-replan" && edge.to === "plan-review" && edge.condition === "success")) {
14903
14993
  ir.edges.push({ from: "plan-replan", to: "plan-review", condition: "success", kind: "rework" });
14904
14994
  }
14905
- if (!ir.edges.some((edge) => edge.from === "code-review" && edge.to === "completion-summary" && edge.condition === "success")) {
14906
- ir.edges.push({ from: "code-review", to: "completion-summary", condition: "success" });
14995
+ if (!ir.edges.some((edge) => edge.from === "completion-summary" && edge.to === "code-review" && edge.condition === "success")) {
14996
+ ir.edges.push({ from: "completion-summary", to: "code-review", condition: "success" });
14907
14997
  }
14908
- if (!ir.edges.some((edge) => edge.from === "completion-summary" && edge.to === "merge-gate" && edge.condition === "success")) {
14909
- ir.edges.push({ from: "completion-summary", to: "merge-gate", condition: "success" });
14998
+ if (!ir.edges.some((edge) => edge.from === "code-review" && edge.to === "merge-gate" && edge.condition === "success")) {
14999
+ ir.edges.push({ from: "code-review", to: "merge-gate", condition: "success" });
14910
15000
  }
14911
15001
  return ir;
14912
15002
  })();
@@ -14986,8 +15076,8 @@ var RAW_BUILTIN_CODING_IDEAS_WORKFLOW_IR = (() => {
14986
15076
  ]);
14987
15077
  v2.nodes = v2.nodes.filter((node) => !removedNodeIds.has(node.id));
14988
15078
  v2.edges = v2.edges.filter((edge) => !removedNodeIds.has(edge.from) && !removedNodeIds.has(edge.to));
14989
- if (!v2.edges.some((edge) => edge.from === "steps" && edge.to === "code-review")) {
14990
- v2.edges.push({ from: "steps", to: "code-review", condition: "success" });
15079
+ if (!v2.edges.some((edge) => edge.from === "steps" && edge.to === "completion-summary")) {
15080
+ v2.edges.push({ from: "steps", to: "completion-summary", condition: "success" });
14991
15081
  }
14992
15082
  if (!v2.edges.some((edge) => edge.from === "merge-attempt" && edge.to === "end" && edge.condition === "success")) {
14993
15083
  v2.edges.push({ from: "merge-attempt", to: "end", condition: "success" });
@@ -15574,10 +15664,12 @@ function linear(spec) {
15574
15664
  ...hasBrowserVerification ? [browserVerificationRemediationNode("in-progress")] : [],
15575
15665
  ...hasCodeReview ? [codeReviewRemediationNode("in-progress")] : []
15576
15666
  ] : [];
15667
+ const noOpTerminalNode = hasPlanReview ? { id: "plan-review-no-op", kind: "gate", column: "todo", config: { workflowAction: "plan-review-no-op" } } : void 0;
15577
15668
  const nodes2 = [
15578
15669
  { id: "start", kind: "start" },
15579
15670
  ...workflowNodes,
15580
15671
  ...remediationNodes,
15672
+ ...noOpTerminalNode ? [noOpTerminalNode] : [],
15581
15673
  { id: "end", kind: "end" }
15582
15674
  ];
15583
15675
  const edges = [];
@@ -15593,6 +15685,8 @@ function linear(spec) {
15593
15685
  }
15594
15686
  if (hasPlanReview) {
15595
15687
  edges.push({ from: "plan-replan", to: "plan-review", condition: "success", kind: "rework" });
15688
+ edges.push({ from: "plan-review", to: "plan-review-no-op", condition: "outcome:close-no-op" });
15689
+ edges.push({ from: "plan-review-no-op", to: "end", condition: "success" });
15596
15690
  }
15597
15691
  if (hasBrowserVerification) {
15598
15692
  edges.push({
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/reports",
3
- "version": "0.1.55-beta.6",
3
+ "version": "0.1.55-beta.8",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {