@runfusion/fusion 0.78.0-beta.3 → 0.78.0-beta.4

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 (165) hide show
  1. package/dist/bin.js +4076 -4950
  2. package/dist/child-process-worker.js +3064 -3550
  3. package/dist/client/.vite/manifest.json +259 -259
  4. package/dist/client/assets/{AgentDetailView-DAtUBPar.js → AgentDetailView-BVDrAj1Y.js} +3 -3
  5. package/dist/client/assets/AgentDetailView-DaSEdzYy.css +1 -0
  6. package/dist/client/assets/{AgentPermissionPolicyEditor-Cth5Qyvz.js → AgentPermissionPolicyEditor--11QLSt_.js} +1 -1
  7. package/dist/client/assets/{AgentsView-D6odi29-.js → AgentsView-D3mLjE0-.js} +4 -4
  8. package/dist/client/assets/{CommandCenter-DUlZFMvJ.js → CommandCenter-CPy2a26y.js} +1 -1
  9. package/dist/client/assets/{DevServerView-GD1-vwId.js → DevServerView-CWHhisoR.js} +1 -1
  10. package/dist/client/assets/{DirectoryPicker-De3Q7_zu.js → DirectoryPicker-DMd9MEtq.js} +1 -1
  11. package/dist/client/assets/DocumentsView-YeYy6DJV.js +1 -0
  12. package/dist/client/assets/{EvalsView-CYfclysr.js → EvalsView-DfvYGoX4.js} +1 -1
  13. package/dist/client/assets/{ExperimentalAgentOnboardingModal-B1dQuReY.js → ExperimentalAgentOnboardingModal-CFjRfBUk.js} +1 -1
  14. package/dist/client/assets/{GoalsView-BHxjegdt.js → GoalsView-DdlI85_-.js} +1 -1
  15. package/dist/client/assets/InsightsView-Du2UKeQE.js +11 -0
  16. package/dist/client/assets/{MemoryView-O8vfqipX.js → MemoryView-DeSuPKc7.js} +1 -1
  17. package/dist/client/assets/{PatchnodeView-WM5ZlnTS.js → PatchnodeView-Ow5ErHE3.js} +1 -1
  18. package/dist/client/assets/{PiExtensionsManager-BrTit_vk.js → PiExtensionsManager-D65p_Z4a.js} +1 -1
  19. package/dist/client/assets/{PluginManager-DBUm9Q30.js → PluginManager-BruzVBGM.js} +1 -1
  20. package/dist/client/assets/{PullRequestView-DW9EqNT3.js → PullRequestView-BTzsKxrq.js} +1 -1
  21. package/dist/client/assets/{ReportModal-Cv7Lxy1u.js → ReportModal-YpkrGp21.js} +2 -2
  22. package/dist/client/assets/ResearchView-D0oWTBMk.js +2 -0
  23. package/dist/client/assets/{SecretsView-C2K-n5_X.js → SecretsView-B6ZH6O1O.js} +1 -1
  24. package/dist/client/assets/{SettingsModal-Crpg0GmF.js → SettingsModal-CN4NVtbD.js} +1 -1
  25. package/dist/client/assets/SettingsModal-CmPRFol7.css +1 -0
  26. package/dist/client/assets/SettingsModal-CwUcFHcw.js +21 -0
  27. package/dist/client/assets/{SettingsTextareaRow-B7FIDTtF.js → SettingsTextareaRow-B_iNwevV.js} +1 -1
  28. package/dist/client/assets/{SetupWizardModal-CBWFrde9.js → SetupWizardModal-BSAtv8xH.js} +2 -2
  29. package/dist/client/assets/{SkillsView-B1l4qkYj.js → SkillsView-DhhiUAPO.js} +1 -1
  30. package/dist/client/assets/{WorkflowNodeEditor-e122mQ0Z.js → WorkflowNodeEditor-YeZ_DH3a.js} +1 -1
  31. package/dist/client/assets/{agent-import-generation-CX_NVRPC.js → agent-import-generation-BPFU14s8.js} +1 -1
  32. package/dist/client/assets/{agentsOrgChartLayout-BAhAecHd.js → agentsOrgChartLayout-CWqQ9XMW.js} +1 -1
  33. package/dist/client/assets/app-BVuhE-pB.js +3 -0
  34. package/dist/client/assets/app-BVz53oEh.js +9 -0
  35. package/dist/client/assets/app-BfzM5z-d.js +9 -0
  36. package/dist/client/assets/app-BgtLSw3s.js +9 -0
  37. package/dist/client/assets/app-BpjF_vWi.js +9 -0
  38. package/dist/client/assets/app-Cjqb3Hrq.js +3 -0
  39. package/dist/client/assets/app-CoyPSunU.js +9 -0
  40. package/dist/client/assets/{architectureDiagram-3BPJPVTR-BOmFDW7M.js → architectureDiagram-3BPJPVTR-DX2xxWsB.js} +1 -1
  41. package/dist/client/assets/{blockDiagram-GPEHLZMM-D7CnZ9-e.js → blockDiagram-GPEHLZMM-tVB-pLpH.js} +1 -1
  42. package/dist/client/assets/{c4Diagram-AAUBKEIU-CQZw8PeP.js → c4Diagram-AAUBKEIU-BEV-l4nl.js} +1 -1
  43. package/dist/client/assets/channel-BoqUD_yo.js +1 -0
  44. package/dist/client/assets/{chunk-2J33WTMH-DBS2o2AZ.js → chunk-2J33WTMH-DduonyQt.js} +1 -1
  45. package/dist/client/assets/{chunk-4BX2VUAB-CFKEnTmJ.js → chunk-4BX2VUAB-BPCXybBl.js} +1 -1
  46. package/dist/client/assets/{chunk-55IACEB6-DpjYRScs.js → chunk-55IACEB6-ByqbaUCB.js} +1 -1
  47. package/dist/client/assets/{chunk-727SXJPM-Db7lQvPG.js → chunk-727SXJPM-DdtczHe_.js} +1 -1
  48. package/dist/client/assets/{chunk-AQP2D5EJ-rSGEvDdj.js → chunk-AQP2D5EJ-V5pHkNOZ.js} +1 -1
  49. package/dist/client/assets/{chunk-FMBD7UC4-Cdi9zNME.js → chunk-FMBD7UC4-i0P_U91V.js} +1 -1
  50. package/dist/client/assets/{chunk-ND2GUHAM-D_3BQZ27.js → chunk-ND2GUHAM-BWdXSws9.js} +1 -1
  51. package/dist/client/assets/{chunk-QZHKN3VN-DnVoTnz9.js → chunk-QZHKN3VN-C7vpw2O4.js} +1 -1
  52. package/dist/client/assets/classDiagram-4FO5ZUOK-5Yk5cF5o.js +1 -0
  53. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-5Yk5cF5o.js +1 -0
  54. package/dist/client/assets/{cose-bilkent-S5V4N54A-HQFw9frh.js → cose-bilkent-S5V4N54A-C_OJmqvv.js} +1 -1
  55. package/dist/client/assets/{dagre-BM42HDAG-BdHp0sc2.js → dagre-BM42HDAG-DlxhXtcR.js} +1 -1
  56. package/dist/client/assets/{dashboard-view-C3vvo4zP.js → dashboard-view-C_aj9Avl.js} +2 -2
  57. package/dist/client/assets/{dashboard-view-mWhkEiwE.js → dashboard-view-CtFwciFc.js} +1 -1
  58. package/dist/client/assets/dashboard-view-Cy2aXOHq.js +1 -0
  59. package/dist/client/assets/{dashboard-view-DaqL1Ufr.js → dashboard-view-ZNgeI6tK.js} +1 -1
  60. package/dist/client/assets/{diagram-2AECGRRQ-BDu9AETT.js → diagram-2AECGRRQ-B5OQ5SjT.js} +1 -1
  61. package/dist/client/assets/{diagram-5GNKFQAL-2qzqfWTz.js → diagram-5GNKFQAL-OnHyeSDX.js} +1 -1
  62. package/dist/client/assets/{diagram-KO2AKTUF-DYa-tplS.js → diagram-KO2AKTUF-BESRlk6K.js} +1 -1
  63. package/dist/client/assets/{diagram-LMA3HP47-ChwcQccK.js → diagram-LMA3HP47-jc5KVOgo.js} +1 -1
  64. package/dist/client/assets/{diagram-OG6HWLK6-DoGKft5E.js → diagram-OG6HWLK6-CbvV1B1C.js} +1 -1
  65. package/dist/client/assets/{erDiagram-TEJ5UH35-5dsSgUXk.js → erDiagram-TEJ5UH35-CU4gukmG.js} +1 -1
  66. package/dist/client/assets/{flowDiagram-I6XJVG4X-BOHB4RzL.js → flowDiagram-I6XJVG4X-Dq9UKge4.js} +1 -1
  67. package/dist/client/assets/{folder-open-BQcY8jvq.js → folder-open-CF9O-sX4.js} +1 -1
  68. package/dist/client/assets/{ganttDiagram-6RSMTGT7-BD3aivUG.js → ganttDiagram-6RSMTGT7-BWA_00UM.js} +1 -1
  69. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-HBZEAECF.js → gitGraphDiagram-PVQCEYII-DKdPzNtQ.js} +1 -1
  70. package/dist/client/assets/index-CiVIbypZ.js +2949 -0
  71. package/dist/client/assets/index-Duxgoh_Y.css +1 -0
  72. package/dist/client/assets/{infoDiagram-5YYISTIA-d7hsqM0V.js → infoDiagram-5YYISTIA-BvusFnLt.js} +1 -1
  73. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-k4Dnhc_y.js → ishikawaDiagram-YF4QCWOH-NLucC59B.js} +1 -1
  74. package/dist/client/assets/{journeyDiagram-JHISSGLW-Dh3yqZPQ.js → journeyDiagram-JHISSGLW-OMF0ZqP2.js} +1 -1
  75. package/dist/client/assets/{kanban-definition-UN3LZRKU-BYqpe7Ju.js → kanban-definition-UN3LZRKU-DcIw1Gei.js} +1 -1
  76. package/dist/client/assets/{mermaid.core-D5Ccw5tQ.js → mermaid.core-BXdGnca4.js} +4 -4
  77. package/dist/client/assets/{mindmap-definition-RKZ34NQL-D64P3Mc4.js → mindmap-definition-RKZ34NQL-CJdZ2giE.js} +1 -1
  78. package/dist/client/assets/{pieDiagram-4H26LBE5-CtMfKnlZ.js → pieDiagram-4H26LBE5-CIS3IXyQ.js} +1 -1
  79. package/dist/client/assets/{puzzle-D4y4g-nb.js → puzzle-DLP4jrVO.js} +1 -1
  80. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-B5gSMr9M.js → quadrantDiagram-W4KKPZXB-CyXg_FqY.js} +1 -1
  81. package/dist/client/assets/{requirementDiagram-4Y6WPE33-DKtBfWDi.js → requirementDiagram-4Y6WPE33-Cl5zZfEW.js} +1 -1
  82. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-BcWeBcNk.js → sankeyDiagram-5OEKKPKP-RPvS_KDe.js} +1 -1
  83. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-Crp7Mc0M.js → sequenceDiagram-3UESZ5HK-mqxbDVma.js} +1 -1
  84. package/dist/client/assets/{standing-instructions-template-lD5Vcanq.js → standing-instructions-template-oByMjuf9.js} +1 -1
  85. package/dist/client/assets/{stateDiagram-AJRCARHV-CA5FEPYe.js → stateDiagram-AJRCARHV-BMThgwA0.js} +1 -1
  86. package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-Bo75sO6t.js → stateDiagram-v2-BHNVJYJU-BQQVmi0s.js} +1 -1
  87. package/dist/client/assets/{timeline-definition-PNZ67QCA-Dmr4NeTD.js → timeline-definition-PNZ67QCA-DxRT4zz3.js} +1 -1
  88. package/dist/client/assets/{upload-CzJ1o8Px.js → upload-C1hBXwxT.js} +1 -1
  89. package/dist/client/assets/{users-BMnytPKO.js → users-CUTsjdYo.js} +1 -1
  90. package/dist/client/assets/{vennDiagram-CIIHVFJN-DfbBSNgT.js → vennDiagram-CIIHVFJN-CplrXnmO.js} +1 -1
  91. package/dist/client/assets/{wardley-L42UT6IY-Wxq1L5VU.js → wardley-L42UT6IY-DN3nUl9Y.js} +1 -1
  92. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-D6HnIS8j.js → wardleyDiagram-YWT4CUSO-C0hUcS3e.js} +1 -1
  93. package/dist/client/assets/{xychartDiagram-2RQKCTM6-5MfFlu30.js → xychartDiagram-2RQKCTM6-CDB05pHe.js} +1 -1
  94. package/dist/client/index.html +2 -2
  95. package/dist/client/version.json +1 -1
  96. package/dist/droid-cli/package.json +1 -1
  97. package/dist/extension.js +3278 -3998
  98. package/dist/pi-claude-cli/package.json +1 -1
  99. package/dist/plugin-sdk/index.d.ts +104 -125
  100. package/dist/plugin-sdk/index.js +35 -93
  101. package/dist/plugins/fusion-plugin-acp-runtime/bundled.js +35 -93
  102. package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
  103. package/dist/plugins/fusion-plugin-claude-runtime/bundled.js +35 -93
  104. package/dist/plugins/fusion-plugin-claude-runtime/package.json +1 -1
  105. package/dist/plugins/fusion-plugin-cli-printing-press/bundled.js +35 -93
  106. package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
  107. package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +35 -93
  108. package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
  109. package/dist/plugins/fusion-plugin-cursor-runtime/bundled.js +35 -93
  110. package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
  111. package/dist/plugins/fusion-plugin-dependency-graph/bundled.js +35 -93
  112. package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
  113. package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +35 -93
  114. package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
  115. package/dist/plugins/fusion-plugin-grok-runtime/bundled.js +35 -93
  116. package/dist/plugins/fusion-plugin-grok-runtime/package.json +1 -1
  117. package/dist/plugins/fusion-plugin-hermes-runtime/bundled.js +35 -93
  118. package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
  119. package/dist/plugins/fusion-plugin-linear-import/bundled.js +35 -93
  120. package/dist/plugins/fusion-plugin-linear-import/package.json +1 -1
  121. package/dist/plugins/fusion-plugin-omp-runtime/bundled.js +35 -93
  122. package/dist/plugins/fusion-plugin-omp-runtime/package.json +1 -1
  123. package/dist/plugins/fusion-plugin-openclaw-runtime/bundled.js +35 -93
  124. package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
  125. package/dist/plugins/fusion-plugin-paperclip-runtime/bundled.js +35 -93
  126. package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
  127. package/dist/plugins/fusion-plugin-quality/bundled.js +35 -93
  128. package/dist/plugins/fusion-plugin-quality/package.json +1 -1
  129. package/dist/plugins/fusion-plugin-reports/bundled.js +35 -93
  130. package/dist/plugins/fusion-plugin-reports/package.json +1 -1
  131. package/dist/plugins/fusion-plugin-roadmap/bundled.js +35 -93
  132. package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
  133. package/dist/plugins/fusion-plugin-todos/bundled.js +35 -93
  134. package/dist/plugins/fusion-plugin-todos/package.json +1 -1
  135. package/dist/plugins/fusion-plugin-whatsapp-chat/bundled.js +35 -93
  136. package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
  137. package/package.json +1 -1
  138. package/skill/fusion/SKILL.md +1 -1
  139. package/skill/fusion/references/best-practices.md +2 -2
  140. package/skill/fusion/references/cli-commands.md +0 -2
  141. package/skill/fusion/references/engine-tools.md +2 -2
  142. package/skill/fusion/references/extension-tools.md +1 -18
  143. package/skill/fusion/references/fusion-capabilities.md +1 -4
  144. package/skill/fusion/references/task-structure.md +1 -1
  145. package/skill/fusion/workflows/task-lifecycle.md +5 -9
  146. package/skill/fusion/workflows/task-management.md +1 -3
  147. package/dist/client/assets/AgentDetailView-DPoh46Ym.css +0 -1
  148. package/dist/client/assets/DocumentsView-BMYBV8DV.js +0 -1
  149. package/dist/client/assets/InsightsView-DK0EP68R.js +0 -11
  150. package/dist/client/assets/ResearchView-DDGbBXlh.js +0 -2
  151. package/dist/client/assets/SettingsModal-C7npF9nB.js +0 -21
  152. package/dist/client/assets/SettingsModal-Crai1dEI.css +0 -1
  153. package/dist/client/assets/app-BO1iuWOt.js +0 -13
  154. package/dist/client/assets/app-BRFfR55q.js +0 -5
  155. package/dist/client/assets/app-BW03hpJV.js +0 -13
  156. package/dist/client/assets/app-B_skBURN.js +0 -13
  157. package/dist/client/assets/app-C0JL4IcI.js +0 -13
  158. package/dist/client/assets/app-C5uZ_9kI.js +0 -13
  159. package/dist/client/assets/app-DxFiSzSJ.js +0 -5
  160. package/dist/client/assets/channel-Drj7VQBu.js +0 -1
  161. package/dist/client/assets/classDiagram-4FO5ZUOK-DGxwjUYU.js +0 -1
  162. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-DGxwjUYU.js +0 -1
  163. package/dist/client/assets/dashboard-view-CoxDPI4m.js +0 -1
  164. package/dist/client/assets/index-26HUNwwJ.css +0 -1
  165. package/dist/client/assets/index-QU8sENvc.js +0 -2959
@@ -9166,6 +9166,11 @@ var DEFAULT_GLOBAL_SETTINGS = {
9166
9166
  */
9167
9167
  quickAddSubmitOnEnter: true,
9168
9168
  /*
9169
+ FNXC:ChatComposer 2026-09-06-01:54:
9170
+ Le comportement automatique des trois composeurs insère une nouvelle ligne pour un pointeur tactile primaire et conserve l’envoi par Entrée avec une souris, y compris dans une fenêtre étroite. Cette préférence d’opérateur reste globale et ne s’applique qu’à Entrée sans Cmd/Ctrl ni Shift, après l’autocomplétion, Shift et la garde IME propre au Chat de tâche.
9171
+ */
9172
+ chatSubmitOnEnter: "auto",
9173
+ /*
9169
9174
  FNXC:ChatSnippets 2026-09-03-15:56:
9170
9175
  Keep the optional global key present but undefined so scope-key derivation remains complete without sharing a mutable default array. readChatSnippets supplies a fresh effective empty list.
9171
9176
  */
@@ -9757,15 +9762,7 @@ var DEFAULT_PROJECT_SETTINGS = {
9757
9762
  // maxPostReviewFixes MOVED to workflow settings (U4).
9758
9763
  // Run maintenance (including WAL checkpointing) every 5 minutes by default.
9759
9764
  maintenanceIntervalMs: 3e5,
9760
- autoArchiveDoneTasksEnabled: true,
9761
- autoArchiveDoneAfterMs: 48 * 60 * 60 * 1e3,
9762
- doneAutoArchiveDays: 0,
9763
- // FNXC:DuplicateIntake 2026-07-07-00:00 (FN-7658): default OFF — operators
9764
- // decide via the near-duplicate flag/UI instead of tasks silently vanishing
9765
- // into `archived` during intake. Set true to restore the pre-FN-7658 behavior.
9766
- autoArchiveDuplicateTasksEnabled: false,
9767
9765
  triageDuplicateResolution: "prompt",
9768
- archiveAgentLogMode: "compact",
9769
9766
  autoUpdatePrStatus: false,
9770
9767
  githubCommentOnDone: false,
9771
9768
  githubCommentTemplate: void 0,
@@ -9860,6 +9857,7 @@ var DEFAULT_PROJECT_SETTINGS = {
9860
9857
  prTitlePromptInstructions: void 0,
9861
9858
  prDescriptionPromptInstructions: void 0,
9862
9859
  scripts: void 0,
9860
+ scriptMetadata: void 0,
9863
9861
  setupScript: void 0,
9864
9862
  insightExtractionEnabled: false,
9865
9863
  insightExtractionSchedule: "0 2 * * *",
@@ -10085,8 +10083,6 @@ var AGENT_PERMISSIONS = [
10085
10083
  // Merge completed task branches
10086
10084
  "tasks:delete",
10087
10085
  // Delete tasks
10088
- "tasks:archive",
10089
- // Archive/unarchive tasks
10090
10086
  "agents:create",
10091
10087
  // Create new agents
10092
10088
  "agents:update",
@@ -10326,8 +10322,13 @@ function completionSummaryNode(column) {
10326
10322
  // ../core/src/missions/mission-types.ts
10327
10323
  var VALIDATION_INFLIGHT_STALE_MAX_AGE_MS = 6 * 60 * 60 * 1e3;
10328
10324
 
10325
+ // ../core/src/types.ts
10326
+ var RETIRED_BUILTIN_WORKFLOW_SUCCESSORS = /* @__PURE__ */ new Map([
10327
+ ["builtin:coding-ideas", "builtin:coding-ideas-v2"]
10328
+ ]);
10329
+
10329
10330
  // ../core/src/workflows/trait-types.ts
10330
- var RESTRICTED_TRAIT_FLAGS = ["complete", "archived"];
10331
+ var RESTRICTED_TRAIT_FLAGS = ["complete"];
10331
10332
  function traitHookKey(traitId, hookKind) {
10332
10333
  return `${traitId}::${hookKind}`;
10333
10334
  }
@@ -10527,15 +10528,6 @@ var TraitRegistry = class {
10527
10528
  message: `Column '${column.id}' is both a completion column and an intake column`
10528
10529
  });
10529
10530
  }
10530
- if (flags.archived && flags.countsTowardWip) {
10531
- violations.push({
10532
- code: "archived-with-wip",
10533
- severity: "error",
10534
- columnId: column.id,
10535
- traitIds: this.traitIdsWithFlags(knownDefs, ["archived", "countsTowardWip"]),
10536
- message: `Column '${column.id}' is archived but counts toward WIP \u2014 archived cards must not hold capacity`
10537
- });
10538
- }
10539
10531
  if (flags.intake) intakeColumnCount += 1;
10540
10532
  }
10541
10533
  if (intakeColumnCount > 1) {
@@ -10718,13 +10710,6 @@ var BUILTIN_TRAIT_DEFINITIONS = [
10718
10710
  builtin: true,
10719
10711
  flags: { complete: true }
10720
10712
  },
10721
- {
10722
- id: "archived",
10723
- name: "Archived",
10724
- description: "Hidden from board; global semantics. Restricted flag.",
10725
- builtin: true,
10726
- flags: { archived: true, hiddenFromBoard: true }
10727
- },
10728
10713
  {
10729
10714
  id: "merge-blocker",
10730
10715
  name: "Merge blocker",
@@ -11018,8 +11003,7 @@ var DEFAULT_WORKFLOW_COLUMN_IDS = [
11018
11003
  "todo",
11019
11004
  "in-progress",
11020
11005
  "in-review",
11021
- "done",
11022
- "archived"
11006
+ "done"
11023
11007
  ];
11024
11008
  function defaultColumnForNode(node) {
11025
11009
  const seam = node.config?.seam;
@@ -13169,7 +13153,7 @@ Write a lean, executable PROMPT.md quickly. Preserve safety gates, but skip heav
13169
13153
  - Preserve required safety sections for bugs, workflow routing, forensic tasks, and decision-only work.
13170
13154
 
13171
13155
  ## Duplicate check
13172
- Before writing a spec, call \`fn_task_list\` for active work, then call \`fn_task_search\` with \`includeDone: false\` and \`includeArchived: false\` for 2-4 targeted keyword phrases from the title/description, such as file paths, symptoms, and symbols. Do not search completed or archived work for duplicate candidates. When an active match is a duplicate, do not write a spec \u2014 but still write PROMPT.md, with its entire contents being the single line \`DUPLICATE: {existing-task-id}\` and nothing else. That file is how the duplicate is recorded; announcing it only in your reply leaves no plan behind and re-plans the task in a loop.
13156
+ Before writing a spec, call \`fn_task_list\` for active work, then call \`fn_task_search\` with \`includeDone: false\` for 2-4 targeted keyword phrases from the title/description, such as file paths, symptoms, and symbols. Do not search completed work for duplicate candidates. When an active match is a duplicate, do not write a spec \u2014 but still write PROMPT.md, with its entire contents being the single line \`DUPLICATE: {existing-task-id}\` and nothing else. That file is how the duplicate is recorded; announcing it only in your reply leaves no plan behind and re-plans the task in a loop.
13173
13157
 
13174
13158
  ## Required PROMPT.md shape
13175
13159
  Write PROMPT.md with Original Description, What This Delivers, Before \u2192 After Transformation, Mission, Dependencies, Context to Read First, File Scope, Steps, Documentation Requirements, Completion Criteria, Git Commit Convention, and Do NOT. Put \`## Original Description\` immediately after the title/\`Created\`/\`Size\` metadata with the operator's original task description copied **verbatim** (do not paraphrase). Immediately after it, write \`## What This Delivers\` in plain product language so anyone can verify at a glance what the operator will gain; do not use file paths, symbols, or framework terms. Put \`## Before \u2192 After Transformation\` next, before \`## Mission\`, with concise Before/After bullets: current state, target state, why it satisfies the user's request at a glance. In \`## Steps\`, every executable heading MUST use \`### Step N: <name>\` (e.g. \`### Step 0: Preflight\`), numbered 0-based from \`### Step 0:\` through \`### Step N-1:\` with no gaps. Do not write bare \`### Preflight\` / \`### Implementation\` headings, and do not add review-level, triage subtask, or proactive subtask headings.
@@ -13454,8 +13438,8 @@ Verified facts about this codebase's storage \u2014 cite these correctly so Plan
13454
13438
  - New Postgres migrations must be **registered explicitly** in \`packages/core/src/postgres/schema-applier.ts\` (version constant + bookkeeping check); a \`.sql\` file dropped in the migrations dir that is not wired there silently never runs.
13455
13439
 
13456
13440
  ## Duplicate check
13457
- Before writing a spec, first call \`fn_task_list\` to see active tasks, then call \`fn_task_search\` with \`includeDone: false\` and \`includeArchived: false\` for 2-4 distinct keyword phrases from the task title and description (for example file paths, error symptoms, and symbol names).
13458
- Do not search completed or archived work for duplicate candidates.
13441
+ Before writing a spec, first call \`fn_task_list\` to see active tasks, then call \`fn_task_search\` with \`includeDone: false\` for 2-4 distinct keyword phrases from the task title and description (for example file paths, error symptoms, and symbol names).
13442
+ Do not search completed work for duplicate candidates.
13459
13443
  If an actionable task already covers the same work (even if worded differently), do not write a spec.
13460
13444
  Instead you MUST still write PROMPT.md, with its ENTIRE contents being this one line and nothing else:
13461
13445
  \`DUPLICATE: {existing-task-id}\`
@@ -14611,8 +14595,7 @@ var RAW_BUILTIN_CODING_WORKFLOW_IR = {
14611
14595
  name: "In review",
14612
14596
  traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
14613
14597
  },
14614
- { id: "done", name: "Done", traits: [{ trait: "complete" }] },
14615
- { id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
14598
+ { id: "done", name: "Done", traits: [{ trait: "complete" }] }
14616
14599
  ],
14617
14600
  nodes: [
14618
14601
  { id: "start", kind: "start", column: "triage" },
@@ -14817,8 +14800,7 @@ var RAW_BUILTIN_STEPWISE_CODING_WORKFLOW_IR = {
14817
14800
  name: "In review",
14818
14801
  traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
14819
14802
  },
14820
- { id: "done", name: "Done", traits: [{ trait: "complete" }] },
14821
- { id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
14803
+ { id: "done", name: "Done", traits: [{ trait: "complete" }] }
14822
14804
  ],
14823
14805
  // KTD-12: PROMPT.md is the planning-produced step-source artifact this workflow
14824
14806
  // parses into task steps.
@@ -15169,8 +15151,7 @@ var CODING_IDEAS_COLUMNS = [
15169
15151
  name: "In review",
15170
15152
  traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
15171
15153
  },
15172
- { id: "done", name: "Done", traits: [{ trait: "complete" }] },
15173
- { id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
15154
+ { id: "done", name: "Done", traits: [{ trait: "complete" }] }
15174
15155
  ];
15175
15156
  var RAW_BUILTIN_CODING_IDEAS_WORKFLOW_IR = (() => {
15176
15157
  const ir = JSON.parse(JSON.stringify(BUILTIN_STEPWISE_FINAL_REVIEW_CODING_WORKFLOW_IR));
@@ -15445,8 +15426,7 @@ var RAW_BUILTIN_LEAD_GENERATION_WORKFLOW_IR = {
15445
15426
  { trait: "stall-detection", config: { timeoutMs: 864e5, action: "notify" } }
15446
15427
  ]
15447
15428
  },
15448
- { id: "converted", name: "Converted", traits: [{ trait: "complete" }] },
15449
- { id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
15429
+ { id: "converted", name: "Converted", traits: [{ trait: "complete" }] }
15450
15430
  ],
15451
15431
  fields: [
15452
15432
  { id: "company", name: "Company", type: "string", render: { placement: "card", widget: "input" } },
@@ -15576,8 +15556,7 @@ var RAW_BUILTIN_MARKETING_WORKFLOW_IR = {
15576
15556
  name: "Editorial review",
15577
15557
  traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
15578
15558
  },
15579
- { id: "published", name: "Published", traits: [{ trait: "complete" }] },
15580
- { id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
15559
+ { id: "published", name: "Published", traits: [{ trait: "complete" }] }
15581
15560
  ],
15582
15561
  nodes: [
15583
15562
  { id: "start", kind: "start", column: "ideation" },
@@ -15680,8 +15659,7 @@ var RAW_BUILTIN_PR_WORKFLOW_IR = {
15680
15659
  // move (no PR knowledge in the substrate).
15681
15660
  traits: [{ trait: "merge-blocker" }, { trait: "stall-detection" }]
15682
15661
  },
15683
- { id: "done", name: "Done", traits: [{ trait: "complete" }] },
15684
- { id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
15662
+ { id: "done", name: "Done", traits: [{ trait: "complete" }] }
15685
15663
  ],
15686
15664
  nodes: [
15687
15665
  { id: "start", kind: "start", column: "triage" },
@@ -15784,6 +15762,9 @@ var BUILTIN_WORKFLOW_ID_PREFIX = "builtin:";
15784
15762
  function isBuiltinWorkflowId(id) {
15785
15763
  return id.startsWith(BUILTIN_WORKFLOW_ID_PREFIX);
15786
15764
  }
15765
+ function resolveRetiredBuiltinWorkflowId(id) {
15766
+ return RETIRED_BUILTIN_WORKFLOW_SUCCESSORS.get(id) ?? id;
15767
+ }
15787
15768
  function ceCodeReviewOptionalGroupNode(column) {
15788
15769
  return {
15789
15770
  id: "code-review",
@@ -16046,7 +16027,7 @@ function withPostMergeVerificationNode(nodes2) {
16046
16027
  var BUILTIN_WORKFLOWS = [
16047
16028
  {
16048
16029
  id: "builtin:coding",
16049
- name: "Coding",
16030
+ name: "Coding (Auto)",
16050
16031
  description: "Default coding pipeline: plan steps, execute them one at a time, then run the optional final code review and merge.",
16051
16032
  kind: "workflow",
16052
16033
  ir: BUILTIN_STEPWISE_FINAL_REVIEW_CODING_WORKFLOW_IR,
@@ -16078,44 +16059,6 @@ var BUILTIN_WORKFLOWS = [
16078
16059
  createdAt: BUILTIN_TS,
16079
16060
  updatedAt: BUILTIN_TS
16080
16061
  },
16081
- /*
16082
- * FNXC:CodingIdeasWorkflow 2026-07-04-09:40:
16083
- * The Coding (Ideas) variant adds a manual "Ideas" intake in front of the default stepwise pipeline. New cards land in "ideas" (autoTriage off) and are not planned until an operator promotes them into the merged "todo" planner column; from there the graph is identical to the default Coding workflow.
16084
- */
16085
- {
16086
- id: "builtin:coding-ideas",
16087
- name: "Coding (Ideas)",
16088
- description: "Capture-first coding pipeline: park ideas in a manual intake, then plan, execute per step, run the optional final code review, and merge.",
16089
- kind: "workflow",
16090
- ir: BUILTIN_CODING_IDEAS_WORKFLOW_IR,
16091
- layout: {
16092
- start: { x: 60, y: 160 },
16093
- plan: { x: 230, y: 160 },
16094
- "plan-review": { x: 400, y: 160 },
16095
- "plan-replan": { x: 400, y: 320 },
16096
- "plan-review-no-op": { x: 570, y: 320 },
16097
- parse: { x: 570, y: 160 },
16098
- steps: { x: 740, y: 160 },
16099
- /* U8: the pending-review park is an exit, not a stage — placed off the main line. */
16100
- "review-pending-handoff": { x: 740, y: 320 },
16101
- "browser-verification": { x: 910, y: 160 },
16102
- "browser-verification-remediation": { x: 910, y: 320 },
16103
- "code-review": { x: 1080, y: 160 },
16104
- "code-review-remediation": { x: 1080, y: 320 },
16105
- "completion-summary": { x: 1250, y: 160 },
16106
- "merge-gate": { x: 1420, y: 160 },
16107
- "branch-group-member-integration": { x: 1590, y: 80 },
16108
- "branch-group-promotion": { x: 1760, y: 80 },
16109
- "merge-attempt": { x: 1930, y: 160 },
16110
- "merge-retry": { x: 2100, y: 80 },
16111
- "recovery-router": { x: 2100, y: 240 },
16112
- "merge-manual-hold": { x: 1590, y: 240 },
16113
- "post-merge-verification": { x: 2270, y: 160 },
16114
- end: { x: 2440, y: 160 }
16115
- },
16116
- createdAt: BUILTIN_TS,
16117
- updatedAt: BUILTIN_TS
16118
- },
16119
16062
  /*
16120
16063
  * FNXC:CodingIdeasV2Workflow 2026-08-26-05:56:
16121
16064
  * Same Ideas board as builtin:coding-ideas, with one rule: in-review NEVER writes code.
@@ -16129,7 +16072,7 @@ var BUILTIN_WORKFLOWS = [
16129
16072
  */
16130
16073
  {
16131
16074
  id: "builtin:coding-ideas-v2",
16132
- name: "Coding (Ideas) V2",
16075
+ name: "Coding (Ideas)",
16133
16076
  description: "Capture-first coding pipeline with a read-only review lane: park ideas in a manual intake, plan, implement and test per step, then review, document, and merge.",
16134
16077
  kind: "workflow",
16135
16078
  ir: BUILTIN_CODING_IDEAS_V2_WORKFLOW_IR,
@@ -16525,7 +16468,7 @@ var BUILTIN_WORKFLOWS = [
16525
16468
  ];
16526
16469
  var BUILTIN_BY_ID = new Map(BUILTIN_WORKFLOWS.map((wf) => [wf.id, wf]));
16527
16470
  function getBuiltinWorkflow(id) {
16528
- return BUILTIN_BY_ID.get(id);
16471
+ return BUILTIN_BY_ID.get(resolveRetiredBuiltinWorkflowId(id));
16529
16472
  }
16530
16473
  var DEFAULT_WORKFLOW_ID = "builtin:coding";
16531
16474
  function resolveDefaultWorkflowIr() {
@@ -16575,7 +16518,8 @@ function defaultCodingWorkflowIr() {
16575
16518
  return resolveDefaultWorkflowIr();
16576
16519
  }
16577
16520
  var inflightSelectionReads = /* @__PURE__ */ new WeakMap();
16578
- async function resolveWorkflowIrById(store, workflowId, irCache) {
16521
+ async function resolveWorkflowIrById(store, requestedWorkflowId, irCache) {
16522
+ const workflowId = resolveRetiredBuiltinWorkflowId(requestedWorkflowId);
16579
16523
  let projectId;
16580
16524
  try {
16581
16525
  projectId = store.getWorkflowSettingsProjectId?.();
@@ -16670,8 +16614,7 @@ var LIFECYCLE_ROLE_FLAGS = {
16670
16614
  hold: "hold",
16671
16615
  wip: "countsTowardWip",
16672
16616
  review: "mergeOrchestration",
16673
- complete: "complete",
16674
- archived: "archived"
16617
+ complete: "complete"
16675
16618
  };
16676
16619
  function resolveLifecycleColumns(ir) {
16677
16620
  const columns = columnsOf(ir);
@@ -16684,8 +16627,7 @@ function resolveLifecycleColumns(ir) {
16684
16627
  hold: first(LIFECYCLE_ROLE_FLAGS.hold),
16685
16628
  wip: first(LIFECYCLE_ROLE_FLAGS.wip),
16686
16629
  review: first(LIFECYCLE_ROLE_FLAGS.review),
16687
- complete: first(LIFECYCLE_ROLE_FLAGS.complete),
16688
- archived: first(LIFECYCLE_ROLE_FLAGS.archived)
16630
+ complete: first(LIFECYCLE_ROLE_FLAGS.complete)
16689
16631
  };
16690
16632
  }
16691
16633
  async function resolveTaskLifecycleColumns(store, taskId, cache, selectionCache) {
@@ -16704,7 +16646,7 @@ var ROLE_DEFAULT_PERMISSIONS = {
16704
16646
  executor: ["tasks:execute", "agents:view", "messages:read", "messages:send"],
16705
16647
  reviewer: ["tasks:review", "agents:view", "messages:read", "messages:send"],
16706
16648
  merger: ["tasks:merge", "agents:view", "messages:read"],
16707
- scheduler: ["tasks:assign", "tasks:create", "tasks:archive", "agents:view", "automations:manage", "missions:manage", "messages:read"],
16649
+ scheduler: ["tasks:assign", "tasks:create", "agents:view", "automations:manage", "missions:manage", "messages:read"],
16708
16650
  engineer: ["tasks:execute", "tasks:review", "agents:view", "messages:read", "messages:send"],
16709
16651
  custom: []
16710
16652
  };
@@ -18613,7 +18555,7 @@ var AgentStore = class _AgentStore extends EventEmitter {
18613
18555
  *
18614
18556
  * Guards:
18615
18557
  * - task must exist and not be paused
18616
- * - task must not be in terminal columns (done/archived)
18558
+ * - task must not be in its workflow's Complete column
18617
18559
  * - task must not already be assigned to another agent
18618
18560
  * - task checkout must be unheld or already held by this agent
18619
18561
  *
@@ -18650,7 +18592,7 @@ var AgentStore = class _AgentStore extends EventEmitter {
18650
18592
  return { ok: false, reason: bindVerdict.reason, task };
18651
18593
  }
18652
18594
  const claimLifecycle = await resolveTaskLifecycleColumns(this.taskStore, taskId);
18653
- if (task.column === (claimLifecycle?.complete ?? "done") || task.column === (claimLifecycle?.archived ?? "archived")) {
18595
+ if (task.column === (claimLifecycle?.complete ?? "done")) {
18654
18596
  return { ok: false, reason: "terminal", task };
18655
18597
  }
18656
18598
  if (task.assignedAgentId && task.assignedAgentId !== agentId) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/linear-import",
3
- "version": "0.1.19-beta.3",
3
+ "version": "0.1.19-beta.4",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -9166,6 +9166,11 @@ var DEFAULT_GLOBAL_SETTINGS = {
9166
9166
  */
9167
9167
  quickAddSubmitOnEnter: true,
9168
9168
  /*
9169
+ FNXC:ChatComposer 2026-09-06-01:54:
9170
+ Le comportement automatique des trois composeurs insère une nouvelle ligne pour un pointeur tactile primaire et conserve l’envoi par Entrée avec une souris, y compris dans une fenêtre étroite. Cette préférence d’opérateur reste globale et ne s’applique qu’à Entrée sans Cmd/Ctrl ni Shift, après l’autocomplétion, Shift et la garde IME propre au Chat de tâche.
9171
+ */
9172
+ chatSubmitOnEnter: "auto",
9173
+ /*
9169
9174
  FNXC:ChatSnippets 2026-09-03-15:56:
9170
9175
  Keep the optional global key present but undefined so scope-key derivation remains complete without sharing a mutable default array. readChatSnippets supplies a fresh effective empty list.
9171
9176
  */
@@ -9757,15 +9762,7 @@ var DEFAULT_PROJECT_SETTINGS = {
9757
9762
  // maxPostReviewFixes MOVED to workflow settings (U4).
9758
9763
  // Run maintenance (including WAL checkpointing) every 5 minutes by default.
9759
9764
  maintenanceIntervalMs: 3e5,
9760
- autoArchiveDoneTasksEnabled: true,
9761
- autoArchiveDoneAfterMs: 48 * 60 * 60 * 1e3,
9762
- doneAutoArchiveDays: 0,
9763
- // FNXC:DuplicateIntake 2026-07-07-00:00 (FN-7658): default OFF — operators
9764
- // decide via the near-duplicate flag/UI instead of tasks silently vanishing
9765
- // into `archived` during intake. Set true to restore the pre-FN-7658 behavior.
9766
- autoArchiveDuplicateTasksEnabled: false,
9767
9765
  triageDuplicateResolution: "prompt",
9768
- archiveAgentLogMode: "compact",
9769
9766
  autoUpdatePrStatus: false,
9770
9767
  githubCommentOnDone: false,
9771
9768
  githubCommentTemplate: void 0,
@@ -9860,6 +9857,7 @@ var DEFAULT_PROJECT_SETTINGS = {
9860
9857
  prTitlePromptInstructions: void 0,
9861
9858
  prDescriptionPromptInstructions: void 0,
9862
9859
  scripts: void 0,
9860
+ scriptMetadata: void 0,
9863
9861
  setupScript: void 0,
9864
9862
  insightExtractionEnabled: false,
9865
9863
  insightExtractionSchedule: "0 2 * * *",
@@ -10085,8 +10083,6 @@ var AGENT_PERMISSIONS = [
10085
10083
  // Merge completed task branches
10086
10084
  "tasks:delete",
10087
10085
  // Delete tasks
10088
- "tasks:archive",
10089
- // Archive/unarchive tasks
10090
10086
  "agents:create",
10091
10087
  // Create new agents
10092
10088
  "agents:update",
@@ -10334,8 +10330,13 @@ function redactSecrets(text2) {
10334
10330
  // ../core/src/missions/mission-types.ts
10335
10331
  var VALIDATION_INFLIGHT_STALE_MAX_AGE_MS = 6 * 60 * 60 * 1e3;
10336
10332
 
10333
+ // ../core/src/types.ts
10334
+ var RETIRED_BUILTIN_WORKFLOW_SUCCESSORS = /* @__PURE__ */ new Map([
10335
+ ["builtin:coding-ideas", "builtin:coding-ideas-v2"]
10336
+ ]);
10337
+
10337
10338
  // ../core/src/workflows/trait-types.ts
10338
- var RESTRICTED_TRAIT_FLAGS = ["complete", "archived"];
10339
+ var RESTRICTED_TRAIT_FLAGS = ["complete"];
10339
10340
  function traitHookKey(traitId, hookKind) {
10340
10341
  return `${traitId}::${hookKind}`;
10341
10342
  }
@@ -10535,15 +10536,6 @@ var TraitRegistry = class {
10535
10536
  message: `Column '${column.id}' is both a completion column and an intake column`
10536
10537
  });
10537
10538
  }
10538
- if (flags.archived && flags.countsTowardWip) {
10539
- violations.push({
10540
- code: "archived-with-wip",
10541
- severity: "error",
10542
- columnId: column.id,
10543
- traitIds: this.traitIdsWithFlags(knownDefs, ["archived", "countsTowardWip"]),
10544
- message: `Column '${column.id}' is archived but counts toward WIP \u2014 archived cards must not hold capacity`
10545
- });
10546
- }
10547
10539
  if (flags.intake) intakeColumnCount += 1;
10548
10540
  }
10549
10541
  if (intakeColumnCount > 1) {
@@ -10726,13 +10718,6 @@ var BUILTIN_TRAIT_DEFINITIONS = [
10726
10718
  builtin: true,
10727
10719
  flags: { complete: true }
10728
10720
  },
10729
- {
10730
- id: "archived",
10731
- name: "Archived",
10732
- description: "Hidden from board; global semantics. Restricted flag.",
10733
- builtin: true,
10734
- flags: { archived: true, hiddenFromBoard: true }
10735
- },
10736
10721
  {
10737
10722
  id: "merge-blocker",
10738
10723
  name: "Merge blocker",
@@ -11026,8 +11011,7 @@ var DEFAULT_WORKFLOW_COLUMN_IDS = [
11026
11011
  "todo",
11027
11012
  "in-progress",
11028
11013
  "in-review",
11029
- "done",
11030
- "archived"
11014
+ "done"
11031
11015
  ];
11032
11016
  function defaultColumnForNode(node) {
11033
11017
  const seam = node.config?.seam;
@@ -13177,7 +13161,7 @@ Write a lean, executable PROMPT.md quickly. Preserve safety gates, but skip heav
13177
13161
  - Preserve required safety sections for bugs, workflow routing, forensic tasks, and decision-only work.
13178
13162
 
13179
13163
  ## Duplicate check
13180
- Before writing a spec, call \`fn_task_list\` for active work, then call \`fn_task_search\` with \`includeDone: false\` and \`includeArchived: false\` for 2-4 targeted keyword phrases from the title/description, such as file paths, symptoms, and symbols. Do not search completed or archived work for duplicate candidates. When an active match is a duplicate, do not write a spec \u2014 but still write PROMPT.md, with its entire contents being the single line \`DUPLICATE: {existing-task-id}\` and nothing else. That file is how the duplicate is recorded; announcing it only in your reply leaves no plan behind and re-plans the task in a loop.
13164
+ Before writing a spec, call \`fn_task_list\` for active work, then call \`fn_task_search\` with \`includeDone: false\` for 2-4 targeted keyword phrases from the title/description, such as file paths, symptoms, and symbols. Do not search completed work for duplicate candidates. When an active match is a duplicate, do not write a spec \u2014 but still write PROMPT.md, with its entire contents being the single line \`DUPLICATE: {existing-task-id}\` and nothing else. That file is how the duplicate is recorded; announcing it only in your reply leaves no plan behind and re-plans the task in a loop.
13181
13165
 
13182
13166
  ## Required PROMPT.md shape
13183
13167
  Write PROMPT.md with Original Description, What This Delivers, Before \u2192 After Transformation, Mission, Dependencies, Context to Read First, File Scope, Steps, Documentation Requirements, Completion Criteria, Git Commit Convention, and Do NOT. Put \`## Original Description\` immediately after the title/\`Created\`/\`Size\` metadata with the operator's original task description copied **verbatim** (do not paraphrase). Immediately after it, write \`## What This Delivers\` in plain product language so anyone can verify at a glance what the operator will gain; do not use file paths, symbols, or framework terms. Put \`## Before \u2192 After Transformation\` next, before \`## Mission\`, with concise Before/After bullets: current state, target state, why it satisfies the user's request at a glance. In \`## Steps\`, every executable heading MUST use \`### Step N: <name>\` (e.g. \`### Step 0: Preflight\`), numbered 0-based from \`### Step 0:\` through \`### Step N-1:\` with no gaps. Do not write bare \`### Preflight\` / \`### Implementation\` headings, and do not add review-level, triage subtask, or proactive subtask headings.
@@ -13462,8 +13446,8 @@ Verified facts about this codebase's storage \u2014 cite these correctly so Plan
13462
13446
  - New Postgres migrations must be **registered explicitly** in \`packages/core/src/postgres/schema-applier.ts\` (version constant + bookkeeping check); a \`.sql\` file dropped in the migrations dir that is not wired there silently never runs.
13463
13447
 
13464
13448
  ## Duplicate check
13465
- Before writing a spec, first call \`fn_task_list\` to see active tasks, then call \`fn_task_search\` with \`includeDone: false\` and \`includeArchived: false\` for 2-4 distinct keyword phrases from the task title and description (for example file paths, error symptoms, and symbol names).
13466
- Do not search completed or archived work for duplicate candidates.
13449
+ Before writing a spec, first call \`fn_task_list\` to see active tasks, then call \`fn_task_search\` with \`includeDone: false\` for 2-4 distinct keyword phrases from the task title and description (for example file paths, error symptoms, and symbol names).
13450
+ Do not search completed work for duplicate candidates.
13467
13451
  If an actionable task already covers the same work (even if worded differently), do not write a spec.
13468
13452
  Instead you MUST still write PROMPT.md, with its ENTIRE contents being this one line and nothing else:
13469
13453
  \`DUPLICATE: {existing-task-id}\`
@@ -14619,8 +14603,7 @@ var RAW_BUILTIN_CODING_WORKFLOW_IR = {
14619
14603
  name: "In review",
14620
14604
  traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
14621
14605
  },
14622
- { id: "done", name: "Done", traits: [{ trait: "complete" }] },
14623
- { id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
14606
+ { id: "done", name: "Done", traits: [{ trait: "complete" }] }
14624
14607
  ],
14625
14608
  nodes: [
14626
14609
  { id: "start", kind: "start", column: "triage" },
@@ -14825,8 +14808,7 @@ var RAW_BUILTIN_STEPWISE_CODING_WORKFLOW_IR = {
14825
14808
  name: "In review",
14826
14809
  traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
14827
14810
  },
14828
- { id: "done", name: "Done", traits: [{ trait: "complete" }] },
14829
- { id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
14811
+ { id: "done", name: "Done", traits: [{ trait: "complete" }] }
14830
14812
  ],
14831
14813
  // KTD-12: PROMPT.md is the planning-produced step-source artifact this workflow
14832
14814
  // parses into task steps.
@@ -15177,8 +15159,7 @@ var CODING_IDEAS_COLUMNS = [
15177
15159
  name: "In review",
15178
15160
  traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
15179
15161
  },
15180
- { id: "done", name: "Done", traits: [{ trait: "complete" }] },
15181
- { id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
15162
+ { id: "done", name: "Done", traits: [{ trait: "complete" }] }
15182
15163
  ];
15183
15164
  var RAW_BUILTIN_CODING_IDEAS_WORKFLOW_IR = (() => {
15184
15165
  const ir = JSON.parse(JSON.stringify(BUILTIN_STEPWISE_FINAL_REVIEW_CODING_WORKFLOW_IR));
@@ -15453,8 +15434,7 @@ var RAW_BUILTIN_LEAD_GENERATION_WORKFLOW_IR = {
15453
15434
  { trait: "stall-detection", config: { timeoutMs: 864e5, action: "notify" } }
15454
15435
  ]
15455
15436
  },
15456
- { id: "converted", name: "Converted", traits: [{ trait: "complete" }] },
15457
- { id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
15437
+ { id: "converted", name: "Converted", traits: [{ trait: "complete" }] }
15458
15438
  ],
15459
15439
  fields: [
15460
15440
  { id: "company", name: "Company", type: "string", render: { placement: "card", widget: "input" } },
@@ -15584,8 +15564,7 @@ var RAW_BUILTIN_MARKETING_WORKFLOW_IR = {
15584
15564
  name: "Editorial review",
15585
15565
  traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
15586
15566
  },
15587
- { id: "published", name: "Published", traits: [{ trait: "complete" }] },
15588
- { id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
15567
+ { id: "published", name: "Published", traits: [{ trait: "complete" }] }
15589
15568
  ],
15590
15569
  nodes: [
15591
15570
  { id: "start", kind: "start", column: "ideation" },
@@ -15688,8 +15667,7 @@ var RAW_BUILTIN_PR_WORKFLOW_IR = {
15688
15667
  // move (no PR knowledge in the substrate).
15689
15668
  traits: [{ trait: "merge-blocker" }, { trait: "stall-detection" }]
15690
15669
  },
15691
- { id: "done", name: "Done", traits: [{ trait: "complete" }] },
15692
- { id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
15670
+ { id: "done", name: "Done", traits: [{ trait: "complete" }] }
15693
15671
  ],
15694
15672
  nodes: [
15695
15673
  { id: "start", kind: "start", column: "triage" },
@@ -15792,6 +15770,9 @@ var BUILTIN_WORKFLOW_ID_PREFIX = "builtin:";
15792
15770
  function isBuiltinWorkflowId(id) {
15793
15771
  return id.startsWith(BUILTIN_WORKFLOW_ID_PREFIX);
15794
15772
  }
15773
+ function resolveRetiredBuiltinWorkflowId(id) {
15774
+ return RETIRED_BUILTIN_WORKFLOW_SUCCESSORS.get(id) ?? id;
15775
+ }
15795
15776
  function ceCodeReviewOptionalGroupNode(column) {
15796
15777
  return {
15797
15778
  id: "code-review",
@@ -16054,7 +16035,7 @@ function withPostMergeVerificationNode(nodes2) {
16054
16035
  var BUILTIN_WORKFLOWS = [
16055
16036
  {
16056
16037
  id: "builtin:coding",
16057
- name: "Coding",
16038
+ name: "Coding (Auto)",
16058
16039
  description: "Default coding pipeline: plan steps, execute them one at a time, then run the optional final code review and merge.",
16059
16040
  kind: "workflow",
16060
16041
  ir: BUILTIN_STEPWISE_FINAL_REVIEW_CODING_WORKFLOW_IR,
@@ -16086,44 +16067,6 @@ var BUILTIN_WORKFLOWS = [
16086
16067
  createdAt: BUILTIN_TS,
16087
16068
  updatedAt: BUILTIN_TS
16088
16069
  },
16089
- /*
16090
- * FNXC:CodingIdeasWorkflow 2026-07-04-09:40:
16091
- * The Coding (Ideas) variant adds a manual "Ideas" intake in front of the default stepwise pipeline. New cards land in "ideas" (autoTriage off) and are not planned until an operator promotes them into the merged "todo" planner column; from there the graph is identical to the default Coding workflow.
16092
- */
16093
- {
16094
- id: "builtin:coding-ideas",
16095
- name: "Coding (Ideas)",
16096
- description: "Capture-first coding pipeline: park ideas in a manual intake, then plan, execute per step, run the optional final code review, and merge.",
16097
- kind: "workflow",
16098
- ir: BUILTIN_CODING_IDEAS_WORKFLOW_IR,
16099
- layout: {
16100
- start: { x: 60, y: 160 },
16101
- plan: { x: 230, y: 160 },
16102
- "plan-review": { x: 400, y: 160 },
16103
- "plan-replan": { x: 400, y: 320 },
16104
- "plan-review-no-op": { x: 570, y: 320 },
16105
- parse: { x: 570, y: 160 },
16106
- steps: { x: 740, y: 160 },
16107
- /* U8: the pending-review park is an exit, not a stage — placed off the main line. */
16108
- "review-pending-handoff": { x: 740, y: 320 },
16109
- "browser-verification": { x: 910, y: 160 },
16110
- "browser-verification-remediation": { x: 910, y: 320 },
16111
- "code-review": { x: 1080, y: 160 },
16112
- "code-review-remediation": { x: 1080, y: 320 },
16113
- "completion-summary": { x: 1250, y: 160 },
16114
- "merge-gate": { x: 1420, y: 160 },
16115
- "branch-group-member-integration": { x: 1590, y: 80 },
16116
- "branch-group-promotion": { x: 1760, y: 80 },
16117
- "merge-attempt": { x: 1930, y: 160 },
16118
- "merge-retry": { x: 2100, y: 80 },
16119
- "recovery-router": { x: 2100, y: 240 },
16120
- "merge-manual-hold": { x: 1590, y: 240 },
16121
- "post-merge-verification": { x: 2270, y: 160 },
16122
- end: { x: 2440, y: 160 }
16123
- },
16124
- createdAt: BUILTIN_TS,
16125
- updatedAt: BUILTIN_TS
16126
- },
16127
16070
  /*
16128
16071
  * FNXC:CodingIdeasV2Workflow 2026-08-26-05:56:
16129
16072
  * Same Ideas board as builtin:coding-ideas, with one rule: in-review NEVER writes code.
@@ -16137,7 +16080,7 @@ var BUILTIN_WORKFLOWS = [
16137
16080
  */
16138
16081
  {
16139
16082
  id: "builtin:coding-ideas-v2",
16140
- name: "Coding (Ideas) V2",
16083
+ name: "Coding (Ideas)",
16141
16084
  description: "Capture-first coding pipeline with a read-only review lane: park ideas in a manual intake, plan, implement and test per step, then review, document, and merge.",
16142
16085
  kind: "workflow",
16143
16086
  ir: BUILTIN_CODING_IDEAS_V2_WORKFLOW_IR,
@@ -16533,7 +16476,7 @@ var BUILTIN_WORKFLOWS = [
16533
16476
  ];
16534
16477
  var BUILTIN_BY_ID = new Map(BUILTIN_WORKFLOWS.map((wf) => [wf.id, wf]));
16535
16478
  function getBuiltinWorkflow(id) {
16536
- return BUILTIN_BY_ID.get(id);
16479
+ return BUILTIN_BY_ID.get(resolveRetiredBuiltinWorkflowId(id));
16537
16480
  }
16538
16481
  var DEFAULT_WORKFLOW_ID = "builtin:coding";
16539
16482
  function resolveDefaultWorkflowIr() {
@@ -16583,7 +16526,8 @@ function defaultCodingWorkflowIr() {
16583
16526
  return resolveDefaultWorkflowIr();
16584
16527
  }
16585
16528
  var inflightSelectionReads = /* @__PURE__ */ new WeakMap();
16586
- async function resolveWorkflowIrById(store, workflowId, irCache) {
16529
+ async function resolveWorkflowIrById(store, requestedWorkflowId, irCache) {
16530
+ const workflowId = resolveRetiredBuiltinWorkflowId(requestedWorkflowId);
16587
16531
  let projectId;
16588
16532
  try {
16589
16533
  projectId = store.getWorkflowSettingsProjectId?.();
@@ -16678,8 +16622,7 @@ var LIFECYCLE_ROLE_FLAGS = {
16678
16622
  hold: "hold",
16679
16623
  wip: "countsTowardWip",
16680
16624
  review: "mergeOrchestration",
16681
- complete: "complete",
16682
- archived: "archived"
16625
+ complete: "complete"
16683
16626
  };
16684
16627
  function resolveLifecycleColumns(ir) {
16685
16628
  const columns = columnsOf(ir);
@@ -16692,8 +16635,7 @@ function resolveLifecycleColumns(ir) {
16692
16635
  hold: first(LIFECYCLE_ROLE_FLAGS.hold),
16693
16636
  wip: first(LIFECYCLE_ROLE_FLAGS.wip),
16694
16637
  review: first(LIFECYCLE_ROLE_FLAGS.review),
16695
- complete: first(LIFECYCLE_ROLE_FLAGS.complete),
16696
- archived: first(LIFECYCLE_ROLE_FLAGS.archived)
16638
+ complete: first(LIFECYCLE_ROLE_FLAGS.complete)
16697
16639
  };
16698
16640
  }
16699
16641
  async function resolveTaskLifecycleColumns(store, taskId, cache, selectionCache) {
@@ -16712,7 +16654,7 @@ var ROLE_DEFAULT_PERMISSIONS = {
16712
16654
  executor: ["tasks:execute", "agents:view", "messages:read", "messages:send"],
16713
16655
  reviewer: ["tasks:review", "agents:view", "messages:read", "messages:send"],
16714
16656
  merger: ["tasks:merge", "agents:view", "messages:read"],
16715
- scheduler: ["tasks:assign", "tasks:create", "tasks:archive", "agents:view", "automations:manage", "missions:manage", "messages:read"],
16657
+ scheduler: ["tasks:assign", "tasks:create", "agents:view", "automations:manage", "missions:manage", "messages:read"],
16716
16658
  engineer: ["tasks:execute", "tasks:review", "agents:view", "messages:read", "messages:send"],
16717
16659
  custom: []
16718
16660
  };
@@ -18621,7 +18563,7 @@ var AgentStore = class _AgentStore extends EventEmitter {
18621
18563
  *
18622
18564
  * Guards:
18623
18565
  * - task must exist and not be paused
18624
- * - task must not be in terminal columns (done/archived)
18566
+ * - task must not be in its workflow's Complete column
18625
18567
  * - task must not already be assigned to another agent
18626
18568
  * - task checkout must be unheld or already held by this agent
18627
18569
  *
@@ -18658,7 +18600,7 @@ var AgentStore = class _AgentStore extends EventEmitter {
18658
18600
  return { ok: false, reason: bindVerdict.reason, task };
18659
18601
  }
18660
18602
  const claimLifecycle = await resolveTaskLifecycleColumns(this.taskStore, taskId);
18661
- if (task.column === (claimLifecycle?.complete ?? "done") || task.column === (claimLifecycle?.archived ?? "archived")) {
18603
+ if (task.column === (claimLifecycle?.complete ?? "done")) {
18662
18604
  return { ok: false, reason: "terminal", task };
18663
18605
  }
18664
18606
  if (task.assignedAgentId && task.assignedAgentId !== agentId) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/omp-runtime",
3
- "version": "0.1.12-beta.3",
3
+ "version": "0.1.12-beta.4",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {