@runfusion/fusion 0.78.0-beta.2 → 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 +5142 -5151
  2. package/dist/child-process-worker.js +3720 -3649
  3. package/dist/client/.vite/manifest.json +262 -262
  4. package/dist/client/assets/{AgentDetailView-4tEdPTG2.js → AgentDetailView-BVDrAj1Y.js} +3 -3
  5. package/dist/client/assets/AgentDetailView-DaSEdzYy.css +1 -0
  6. package/dist/client/assets/{AgentPermissionPolicyEditor-DIGxjQFE.js → AgentPermissionPolicyEditor--11QLSt_.js} +1 -1
  7. package/dist/client/assets/{AgentsView-BXFYQAPe.js → AgentsView-D3mLjE0-.js} +4 -4
  8. package/dist/client/assets/{CommandCenter-vknNrxBN.js → CommandCenter-CPy2a26y.js} +1 -1
  9. package/dist/client/assets/{DevServerView-COFb49kW.js → DevServerView-CWHhisoR.js} +1 -1
  10. package/dist/client/assets/{DirectoryPicker-C-wYRUc5.js → DirectoryPicker-DMd9MEtq.js} +1 -1
  11. package/dist/client/assets/DocumentsView-YeYy6DJV.js +1 -0
  12. package/dist/client/assets/{EvalsView-BcOgXvPe.js → EvalsView-DfvYGoX4.js} +1 -1
  13. package/dist/client/assets/{ExperimentalAgentOnboardingModal-B0zF29ER.js → ExperimentalAgentOnboardingModal-CFjRfBUk.js} +1 -1
  14. package/dist/client/assets/{GoalsView--Cj2se_t.js → GoalsView-DdlI85_-.js} +1 -1
  15. package/dist/client/assets/InsightsView-Du2UKeQE.js +11 -0
  16. package/dist/client/assets/{MemoryView-Ca0Y2fYg.js → MemoryView-DeSuPKc7.js} +1 -1
  17. package/dist/client/assets/{PatchnodeView--E259o36.js → PatchnodeView-Ow5ErHE3.js} +1 -1
  18. package/dist/client/assets/{PiExtensionsManager-DKKLn5YE.js → PiExtensionsManager-D65p_Z4a.js} +1 -1
  19. package/dist/client/assets/{PluginManager-e0Rnv7RI.js → PluginManager-BruzVBGM.js} +1 -1
  20. package/dist/client/assets/{PullRequestView-BFe77u-d.js → PullRequestView-BTzsKxrq.js} +1 -1
  21. package/dist/client/assets/{ReportModal-DvyDEj8D.js → ReportModal-YpkrGp21.js} +2 -2
  22. package/dist/client/assets/ResearchView-D0oWTBMk.js +2 -0
  23. package/dist/client/assets/{SecretsView-DTrrJEt9.js → SecretsView-B6ZH6O1O.js} +1 -1
  24. package/dist/client/assets/{SettingsModal-DnTX4rMK.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-y3gQ4u_G.js → SettingsTextareaRow-B_iNwevV.js} +1 -1
  28. package/dist/client/assets/{SetupWizardModal-ClAbtrU0.js → SetupWizardModal-BSAtv8xH.js} +2 -2
  29. package/dist/client/assets/{SkillsView-BpEJE16a.js → SkillsView-DhhiUAPO.js} +1 -1
  30. package/dist/client/assets/{WorkflowNodeEditor-CSbhpY5K.js → WorkflowNodeEditor-YeZ_DH3a.js} +1 -1
  31. package/dist/client/assets/{agent-import-generation-BT0ZBGQA.js → agent-import-generation-BPFU14s8.js} +1 -1
  32. package/dist/client/assets/{agentsOrgChartLayout-C_tkb_Pq.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-BfPYqDRS.js → architectureDiagram-3BPJPVTR-DX2xxWsB.js} +1 -1
  41. package/dist/client/assets/{blockDiagram-GPEHLZMM-BEcaGTmc.js → blockDiagram-GPEHLZMM-tVB-pLpH.js} +1 -1
  42. package/dist/client/assets/{c4Diagram-AAUBKEIU-BX1xrinF.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-OksyoE_c.js → chunk-2J33WTMH-DduonyQt.js} +1 -1
  45. package/dist/client/assets/{chunk-4BX2VUAB-C5ivKrB5.js → chunk-4BX2VUAB-BPCXybBl.js} +1 -1
  46. package/dist/client/assets/{chunk-55IACEB6-C7vkVq-W.js → chunk-55IACEB6-ByqbaUCB.js} +1 -1
  47. package/dist/client/assets/{chunk-727SXJPM-c-khhz21.js → chunk-727SXJPM-DdtczHe_.js} +1 -1
  48. package/dist/client/assets/{chunk-AQP2D5EJ-DwxYJXXQ.js → chunk-AQP2D5EJ-V5pHkNOZ.js} +1 -1
  49. package/dist/client/assets/{chunk-FMBD7UC4-BKhdu4up.js → chunk-FMBD7UC4-i0P_U91V.js} +1 -1
  50. package/dist/client/assets/{chunk-ND2GUHAM-okVZM2p2.js → chunk-ND2GUHAM-BWdXSws9.js} +1 -1
  51. package/dist/client/assets/{chunk-QZHKN3VN-DDso7rM3.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-CNT9ltBk.js → cose-bilkent-S5V4N54A-C_OJmqvv.js} +1 -1
  55. package/dist/client/assets/{dagre-BM42HDAG-C5a30-g5.js → dagre-BM42HDAG-DlxhXtcR.js} +1 -1
  56. package/dist/client/assets/{dashboard-view-Brqe-SVE.js → dashboard-view-C_aj9Avl.js} +2 -2
  57. package/dist/client/assets/{dashboard-view-DyAQ_agZ.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-WFOf0Kpl.js → dashboard-view-ZNgeI6tK.js} +1 -1
  60. package/dist/client/assets/{diagram-2AECGRRQ-DG7EyUNe.js → diagram-2AECGRRQ-B5OQ5SjT.js} +1 -1
  61. package/dist/client/assets/{diagram-5GNKFQAL-DE7lhEna.js → diagram-5GNKFQAL-OnHyeSDX.js} +1 -1
  62. package/dist/client/assets/{diagram-KO2AKTUF-DFtJNqNF.js → diagram-KO2AKTUF-BESRlk6K.js} +1 -1
  63. package/dist/client/assets/{diagram-LMA3HP47-DUAuxZQD.js → diagram-LMA3HP47-jc5KVOgo.js} +1 -1
  64. package/dist/client/assets/{diagram-OG6HWLK6-DCKETcWy.js → diagram-OG6HWLK6-CbvV1B1C.js} +1 -1
  65. package/dist/client/assets/{erDiagram-TEJ5UH35-pa0blyAD.js → erDiagram-TEJ5UH35-CU4gukmG.js} +1 -1
  66. package/dist/client/assets/{flowDiagram-I6XJVG4X-D7Veqs1W.js → flowDiagram-I6XJVG4X-Dq9UKge4.js} +1 -1
  67. package/dist/client/assets/{folder-open-CojKP0zy.js → folder-open-CF9O-sX4.js} +1 -1
  68. package/dist/client/assets/{ganttDiagram-6RSMTGT7-CsqBMy2D.js → ganttDiagram-6RSMTGT7-BWA_00UM.js} +1 -1
  69. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-BRrVKZJo.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-o2GEmmb2.js → infoDiagram-5YYISTIA-BvusFnLt.js} +1 -1
  73. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-k1p6nWtj.js → ishikawaDiagram-YF4QCWOH-NLucC59B.js} +1 -1
  74. package/dist/client/assets/{journeyDiagram-JHISSGLW-B43V37S0.js → journeyDiagram-JHISSGLW-OMF0ZqP2.js} +1 -1
  75. package/dist/client/assets/{kanban-definition-UN3LZRKU-HRMYyAQB.js → kanban-definition-UN3LZRKU-DcIw1Gei.js} +1 -1
  76. package/dist/client/assets/{mermaid.core-6vt3zKxL.js → mermaid.core-BXdGnca4.js} +4 -4
  77. package/dist/client/assets/{mindmap-definition-RKZ34NQL-D3VJuvfj.js → mindmap-definition-RKZ34NQL-CJdZ2giE.js} +1 -1
  78. package/dist/client/assets/{pieDiagram-4H26LBE5-D0RjFhk9.js → pieDiagram-4H26LBE5-CIS3IXyQ.js} +1 -1
  79. package/dist/client/assets/{puzzle-D3dJEsTf.js → puzzle-DLP4jrVO.js} +1 -1
  80. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-DHaEqU3Q.js → quadrantDiagram-W4KKPZXB-CyXg_FqY.js} +1 -1
  81. package/dist/client/assets/{requirementDiagram-4Y6WPE33-DnfFCRP0.js → requirementDiagram-4Y6WPE33-Cl5zZfEW.js} +1 -1
  82. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-D6GCuiqV.js → sankeyDiagram-5OEKKPKP-RPvS_KDe.js} +1 -1
  83. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-DaGYYzxS.js → sequenceDiagram-3UESZ5HK-mqxbDVma.js} +1 -1
  84. package/dist/client/assets/{standing-instructions-template-CN8Kp4Hq.js → standing-instructions-template-oByMjuf9.js} +1 -1
  85. package/dist/client/assets/{stateDiagram-AJRCARHV-ek4Wb8ai.js → stateDiagram-AJRCARHV-BMThgwA0.js} +1 -1
  86. package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-EPn8Vq7v.js → stateDiagram-v2-BHNVJYJU-BQQVmi0s.js} +1 -1
  87. package/dist/client/assets/{timeline-definition-PNZ67QCA-CyAwCbnE.js → timeline-definition-PNZ67QCA-DxRT4zz3.js} +1 -1
  88. package/dist/client/assets/{upload-BhpNL3xI.js → upload-C1hBXwxT.js} +1 -1
  89. package/dist/client/assets/{users-Bka1cIkR.js → users-CUTsjdYo.js} +1 -1
  90. package/dist/client/assets/{vennDiagram-CIIHVFJN-Bd8-8r3a.js → vennDiagram-CIIHVFJN-CplrXnmO.js} +1 -1
  91. package/dist/client/assets/{wardley-L42UT6IY-nNvWflNF.js → wardley-L42UT6IY-DN3nUl9Y.js} +1 -1
  92. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-Dy7XrvPx.js → wardleyDiagram-YWT4CUSO-C0hUcS3e.js} +1 -1
  93. package/dist/client/assets/{xychartDiagram-2RQKCTM6-38VTptR4.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 +4041 -4181
  98. package/dist/pi-claude-cli/package.json +1 -1
  99. package/dist/plugin-sdk/index.d.ts +108 -101
  100. package/dist/plugin-sdk/index.js +37 -95
  101. package/dist/plugins/fusion-plugin-acp-runtime/bundled.js +37 -95
  102. package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
  103. package/dist/plugins/fusion-plugin-claude-runtime/bundled.js +37 -95
  104. package/dist/plugins/fusion-plugin-claude-runtime/package.json +1 -1
  105. package/dist/plugins/fusion-plugin-cli-printing-press/bundled.js +37 -95
  106. package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
  107. package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +37 -95
  108. package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
  109. package/dist/plugins/fusion-plugin-cursor-runtime/bundled.js +37 -95
  110. package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
  111. package/dist/plugins/fusion-plugin-dependency-graph/bundled.js +37 -95
  112. package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
  113. package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +37 -95
  114. package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
  115. package/dist/plugins/fusion-plugin-grok-runtime/bundled.js +37 -95
  116. package/dist/plugins/fusion-plugin-grok-runtime/package.json +1 -1
  117. package/dist/plugins/fusion-plugin-hermes-runtime/bundled.js +37 -95
  118. package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
  119. package/dist/plugins/fusion-plugin-linear-import/bundled.js +37 -95
  120. package/dist/plugins/fusion-plugin-linear-import/package.json +1 -1
  121. package/dist/plugins/fusion-plugin-omp-runtime/bundled.js +37 -95
  122. package/dist/plugins/fusion-plugin-omp-runtime/package.json +1 -1
  123. package/dist/plugins/fusion-plugin-openclaw-runtime/bundled.js +37 -95
  124. package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
  125. package/dist/plugins/fusion-plugin-paperclip-runtime/bundled.js +37 -95
  126. package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
  127. package/dist/plugins/fusion-plugin-quality/bundled.js +37 -95
  128. package/dist/plugins/fusion-plugin-quality/package.json +1 -1
  129. package/dist/plugins/fusion-plugin-reports/bundled.js +37 -95
  130. package/dist/plugins/fusion-plugin-reports/package.json +1 -1
  131. package/dist/plugins/fusion-plugin-roadmap/bundled.js +37 -95
  132. package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
  133. package/dist/plugins/fusion-plugin-todos/bundled.js +37 -95
  134. package/dist/plugins/fusion-plugin-todos/package.json +1 -1
  135. package/dist/plugins/fusion-plugin-whatsapp-chat/bundled.js +37 -95
  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-B-uzhK3C.js +0 -1
  149. package/dist/client/assets/InsightsView-qMoM8oFe.js +0 -11
  150. package/dist/client/assets/ResearchView-DROedGZR.js +0 -2
  151. package/dist/client/assets/SettingsModal-CSbSmwxZ.js +0 -21
  152. package/dist/client/assets/SettingsModal-Crai1dEI.css +0 -1
  153. package/dist/client/assets/app-B0hINWeH.js +0 -5
  154. package/dist/client/assets/app-BSxI9vvS.js +0 -13
  155. package/dist/client/assets/app-BeDYumHl.js +0 -13
  156. package/dist/client/assets/app-C8jogXBu.js +0 -13
  157. package/dist/client/assets/app-C8kudFlj.js +0 -13
  158. package/dist/client/assets/app-DZ5j1n3j.js +0 -5
  159. package/dist/client/assets/app-hEhR2PdL.js +0 -13
  160. package/dist/client/assets/channel-BjDq20V4.js +0 -1
  161. package/dist/client/assets/classDiagram-4FO5ZUOK-B114c_Fi.js +0 -1
  162. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-B114c_Fi.js +0 -1
  163. package/dist/client/assets/dashboard-view-DxpkE7dL.js +0 -1
  164. package/dist/client/assets/index-Cv_ouAgx.js +0 -2959
  165. package/dist/client/assets/index-Dliz9s5K.css +0 -1
@@ -9169,6 +9169,11 @@ var DEFAULT_GLOBAL_SETTINGS = {
9169
9169
  */
9170
9170
  quickAddSubmitOnEnter: true,
9171
9171
  /*
9172
+ FNXC:ChatComposer 2026-09-06-01:54:
9173
+ 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.
9174
+ */
9175
+ chatSubmitOnEnter: "auto",
9176
+ /*
9172
9177
  FNXC:ChatSnippets 2026-09-03-15:56:
9173
9178
  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.
9174
9179
  */
@@ -9760,15 +9765,7 @@ var DEFAULT_PROJECT_SETTINGS = {
9760
9765
  // maxPostReviewFixes MOVED to workflow settings (U4).
9761
9766
  // Run maintenance (including WAL checkpointing) every 5 minutes by default.
9762
9767
  maintenanceIntervalMs: 3e5,
9763
- autoArchiveDoneTasksEnabled: true,
9764
- autoArchiveDoneAfterMs: 48 * 60 * 60 * 1e3,
9765
- doneAutoArchiveDays: 0,
9766
- // FNXC:DuplicateIntake 2026-07-07-00:00 (FN-7658): default OFF — operators
9767
- // decide via the near-duplicate flag/UI instead of tasks silently vanishing
9768
- // into `archived` during intake. Set true to restore the pre-FN-7658 behavior.
9769
- autoArchiveDuplicateTasksEnabled: false,
9770
9768
  triageDuplicateResolution: "prompt",
9771
- archiveAgentLogMode: "compact",
9772
9769
  autoUpdatePrStatus: false,
9773
9770
  githubCommentOnDone: false,
9774
9771
  githubCommentTemplate: void 0,
@@ -9863,6 +9860,7 @@ var DEFAULT_PROJECT_SETTINGS = {
9863
9860
  prTitlePromptInstructions: void 0,
9864
9861
  prDescriptionPromptInstructions: void 0,
9865
9862
  scripts: void 0,
9863
+ scriptMetadata: void 0,
9866
9864
  setupScript: void 0,
9867
9865
  insightExtractionEnabled: false,
9868
9866
  insightExtractionSchedule: "0 2 * * *",
@@ -10088,8 +10086,6 @@ var AGENT_PERMISSIONS = [
10088
10086
  // Merge completed task branches
10089
10087
  "tasks:delete",
10090
10088
  // Delete tasks
10091
- "tasks:archive",
10092
- // Archive/unarchive tasks
10093
10089
  "agents:create",
10094
10090
  // Create new agents
10095
10091
  "agents:update",
@@ -10329,8 +10325,13 @@ function completionSummaryNode(column) {
10329
10325
  // ../core/src/missions/mission-types.ts
10330
10326
  var VALIDATION_INFLIGHT_STALE_MAX_AGE_MS = 6 * 60 * 60 * 1e3;
10331
10327
 
10328
+ // ../core/src/types.ts
10329
+ var RETIRED_BUILTIN_WORKFLOW_SUCCESSORS = /* @__PURE__ */ new Map([
10330
+ ["builtin:coding-ideas", "builtin:coding-ideas-v2"]
10331
+ ]);
10332
+
10332
10333
  // ../core/src/workflows/trait-types.ts
10333
- var RESTRICTED_TRAIT_FLAGS = ["complete", "archived"];
10334
+ var RESTRICTED_TRAIT_FLAGS = ["complete"];
10334
10335
  function traitHookKey(traitId, hookKind) {
10335
10336
  return `${traitId}::${hookKind}`;
10336
10337
  }
@@ -10530,15 +10531,6 @@ var TraitRegistry = class {
10530
10531
  message: `Column '${column.id}' is both a completion column and an intake column`
10531
10532
  });
10532
10533
  }
10533
- if (flags.archived && flags.countsTowardWip) {
10534
- violations.push({
10535
- code: "archived-with-wip",
10536
- severity: "error",
10537
- columnId: column.id,
10538
- traitIds: this.traitIdsWithFlags(knownDefs, ["archived", "countsTowardWip"]),
10539
- message: `Column '${column.id}' is archived but counts toward WIP \u2014 archived cards must not hold capacity`
10540
- });
10541
- }
10542
10534
  if (flags.intake) intakeColumnCount += 1;
10543
10535
  }
10544
10536
  if (intakeColumnCount > 1) {
@@ -10721,13 +10713,6 @@ var BUILTIN_TRAIT_DEFINITIONS = [
10721
10713
  builtin: true,
10722
10714
  flags: { complete: true }
10723
10715
  },
10724
- {
10725
- id: "archived",
10726
- name: "Archived",
10727
- description: "Hidden from board; global semantics. Restricted flag.",
10728
- builtin: true,
10729
- flags: { archived: true, hiddenFromBoard: true }
10730
- },
10731
10716
  {
10732
10717
  id: "merge-blocker",
10733
10718
  name: "Merge blocker",
@@ -11021,8 +11006,7 @@ var DEFAULT_WORKFLOW_COLUMN_IDS = [
11021
11006
  "todo",
11022
11007
  "in-progress",
11023
11008
  "in-review",
11024
- "done",
11025
- "archived"
11009
+ "done"
11026
11010
  ];
11027
11011
  function defaultColumnForNode(node) {
11028
11012
  const seam = node.config?.seam;
@@ -13172,7 +13156,7 @@ Write a lean, executable PROMPT.md quickly. Preserve safety gates, but skip heav
13172
13156
  - Preserve required safety sections for bugs, workflow routing, forensic tasks, and decision-only work.
13173
13157
 
13174
13158
  ## Duplicate check
13175
- 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.
13159
+ 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.
13176
13160
 
13177
13161
  ## Required PROMPT.md shape
13178
13162
  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.
@@ -13457,8 +13441,8 @@ Verified facts about this codebase's storage \u2014 cite these correctly so Plan
13457
13441
  - 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.
13458
13442
 
13459
13443
  ## Duplicate check
13460
- 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).
13461
- Do not search completed or archived work for duplicate candidates.
13444
+ 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).
13445
+ Do not search completed work for duplicate candidates.
13462
13446
  If an actionable task already covers the same work (even if worded differently), do not write a spec.
13463
13447
  Instead you MUST still write PROMPT.md, with its ENTIRE contents being this one line and nothing else:
13464
13448
  \`DUPLICATE: {existing-task-id}\`
@@ -14614,8 +14598,7 @@ var RAW_BUILTIN_CODING_WORKFLOW_IR = {
14614
14598
  name: "In review",
14615
14599
  traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
14616
14600
  },
14617
- { id: "done", name: "Done", traits: [{ trait: "complete" }] },
14618
- { id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
14601
+ { id: "done", name: "Done", traits: [{ trait: "complete" }] }
14619
14602
  ],
14620
14603
  nodes: [
14621
14604
  { id: "start", kind: "start", column: "triage" },
@@ -14820,8 +14803,7 @@ var RAW_BUILTIN_STEPWISE_CODING_WORKFLOW_IR = {
14820
14803
  name: "In review",
14821
14804
  traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
14822
14805
  },
14823
- { id: "done", name: "Done", traits: [{ trait: "complete" }] },
14824
- { id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
14806
+ { id: "done", name: "Done", traits: [{ trait: "complete" }] }
14825
14807
  ],
14826
14808
  // KTD-12: PROMPT.md is the planning-produced step-source artifact this workflow
14827
14809
  // parses into task steps.
@@ -15172,8 +15154,7 @@ var CODING_IDEAS_COLUMNS = [
15172
15154
  name: "In review",
15173
15155
  traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
15174
15156
  },
15175
- { id: "done", name: "Done", traits: [{ trait: "complete" }] },
15176
- { id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
15157
+ { id: "done", name: "Done", traits: [{ trait: "complete" }] }
15177
15158
  ];
15178
15159
  var RAW_BUILTIN_CODING_IDEAS_WORKFLOW_IR = (() => {
15179
15160
  const ir = JSON.parse(JSON.stringify(BUILTIN_STEPWISE_FINAL_REVIEW_CODING_WORKFLOW_IR));
@@ -15448,8 +15429,7 @@ var RAW_BUILTIN_LEAD_GENERATION_WORKFLOW_IR = {
15448
15429
  { trait: "stall-detection", config: { timeoutMs: 864e5, action: "notify" } }
15449
15430
  ]
15450
15431
  },
15451
- { id: "converted", name: "Converted", traits: [{ trait: "complete" }] },
15452
- { id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
15432
+ { id: "converted", name: "Converted", traits: [{ trait: "complete" }] }
15453
15433
  ],
15454
15434
  fields: [
15455
15435
  { id: "company", name: "Company", type: "string", render: { placement: "card", widget: "input" } },
@@ -15579,8 +15559,7 @@ var RAW_BUILTIN_MARKETING_WORKFLOW_IR = {
15579
15559
  name: "Editorial review",
15580
15560
  traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
15581
15561
  },
15582
- { id: "published", name: "Published", traits: [{ trait: "complete" }] },
15583
- { id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
15562
+ { id: "published", name: "Published", traits: [{ trait: "complete" }] }
15584
15563
  ],
15585
15564
  nodes: [
15586
15565
  { id: "start", kind: "start", column: "ideation" },
@@ -15683,8 +15662,7 @@ var RAW_BUILTIN_PR_WORKFLOW_IR = {
15683
15662
  // move (no PR knowledge in the substrate).
15684
15663
  traits: [{ trait: "merge-blocker" }, { trait: "stall-detection" }]
15685
15664
  },
15686
- { id: "done", name: "Done", traits: [{ trait: "complete" }] },
15687
- { id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
15665
+ { id: "done", name: "Done", traits: [{ trait: "complete" }] }
15688
15666
  ],
15689
15667
  nodes: [
15690
15668
  { id: "start", kind: "start", column: "triage" },
@@ -15787,6 +15765,9 @@ var BUILTIN_WORKFLOW_ID_PREFIX = "builtin:";
15787
15765
  function isBuiltinWorkflowId(id) {
15788
15766
  return id.startsWith(BUILTIN_WORKFLOW_ID_PREFIX);
15789
15767
  }
15768
+ function resolveRetiredBuiltinWorkflowId(id) {
15769
+ return RETIRED_BUILTIN_WORKFLOW_SUCCESSORS.get(id) ?? id;
15770
+ }
15790
15771
  function ceCodeReviewOptionalGroupNode(column) {
15791
15772
  return {
15792
15773
  id: "code-review",
@@ -16049,7 +16030,7 @@ function withPostMergeVerificationNode(nodes2) {
16049
16030
  var BUILTIN_WORKFLOWS = [
16050
16031
  {
16051
16032
  id: "builtin:coding",
16052
- name: "Coding",
16033
+ name: "Coding (Auto)",
16053
16034
  description: "Default coding pipeline: plan steps, execute them one at a time, then run the optional final code review and merge.",
16054
16035
  kind: "workflow",
16055
16036
  ir: BUILTIN_STEPWISE_FINAL_REVIEW_CODING_WORKFLOW_IR,
@@ -16081,44 +16062,6 @@ var BUILTIN_WORKFLOWS = [
16081
16062
  createdAt: BUILTIN_TS,
16082
16063
  updatedAt: BUILTIN_TS
16083
16064
  },
16084
- /*
16085
- * FNXC:CodingIdeasWorkflow 2026-07-04-09:40:
16086
- * 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.
16087
- */
16088
- {
16089
- id: "builtin:coding-ideas",
16090
- name: "Coding (Ideas)",
16091
- description: "Capture-first coding pipeline: park ideas in a manual intake, then plan, execute per step, run the optional final code review, and merge.",
16092
- kind: "workflow",
16093
- ir: BUILTIN_CODING_IDEAS_WORKFLOW_IR,
16094
- layout: {
16095
- start: { x: 60, y: 160 },
16096
- plan: { x: 230, y: 160 },
16097
- "plan-review": { x: 400, y: 160 },
16098
- "plan-replan": { x: 400, y: 320 },
16099
- "plan-review-no-op": { x: 570, y: 320 },
16100
- parse: { x: 570, y: 160 },
16101
- steps: { x: 740, y: 160 },
16102
- /* U8: the pending-review park is an exit, not a stage — placed off the main line. */
16103
- "review-pending-handoff": { x: 740, y: 320 },
16104
- "browser-verification": { x: 910, y: 160 },
16105
- "browser-verification-remediation": { x: 910, y: 320 },
16106
- "code-review": { x: 1080, y: 160 },
16107
- "code-review-remediation": { x: 1080, y: 320 },
16108
- "completion-summary": { x: 1250, y: 160 },
16109
- "merge-gate": { x: 1420, y: 160 },
16110
- "branch-group-member-integration": { x: 1590, y: 80 },
16111
- "branch-group-promotion": { x: 1760, y: 80 },
16112
- "merge-attempt": { x: 1930, y: 160 },
16113
- "merge-retry": { x: 2100, y: 80 },
16114
- "recovery-router": { x: 2100, y: 240 },
16115
- "merge-manual-hold": { x: 1590, y: 240 },
16116
- "post-merge-verification": { x: 2270, y: 160 },
16117
- end: { x: 2440, y: 160 }
16118
- },
16119
- createdAt: BUILTIN_TS,
16120
- updatedAt: BUILTIN_TS
16121
- },
16122
16065
  /*
16123
16066
  * FNXC:CodingIdeasV2Workflow 2026-08-26-05:56:
16124
16067
  * Same Ideas board as builtin:coding-ideas, with one rule: in-review NEVER writes code.
@@ -16132,7 +16075,7 @@ var BUILTIN_WORKFLOWS = [
16132
16075
  */
16133
16076
  {
16134
16077
  id: "builtin:coding-ideas-v2",
16135
- name: "Coding (Ideas) V2",
16078
+ name: "Coding (Ideas)",
16136
16079
  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.",
16137
16080
  kind: "workflow",
16138
16081
  ir: BUILTIN_CODING_IDEAS_V2_WORKFLOW_IR,
@@ -16528,7 +16471,7 @@ var BUILTIN_WORKFLOWS = [
16528
16471
  ];
16529
16472
  var BUILTIN_BY_ID = new Map(BUILTIN_WORKFLOWS.map((wf) => [wf.id, wf]));
16530
16473
  function getBuiltinWorkflow(id) {
16531
- return BUILTIN_BY_ID.get(id);
16474
+ return BUILTIN_BY_ID.get(resolveRetiredBuiltinWorkflowId(id));
16532
16475
  }
16533
16476
  var DEFAULT_WORKFLOW_ID = "builtin:coding";
16534
16477
  function resolveDefaultWorkflowIr() {
@@ -16578,7 +16521,8 @@ function defaultCodingWorkflowIr() {
16578
16521
  return resolveDefaultWorkflowIr();
16579
16522
  }
16580
16523
  var inflightSelectionReads = /* @__PURE__ */ new WeakMap();
16581
- async function resolveWorkflowIrById(store, workflowId, irCache) {
16524
+ async function resolveWorkflowIrById(store, requestedWorkflowId, irCache) {
16525
+ const workflowId = resolveRetiredBuiltinWorkflowId(requestedWorkflowId);
16582
16526
  let projectId;
16583
16527
  try {
16584
16528
  projectId = store.getWorkflowSettingsProjectId?.();
@@ -16673,8 +16617,7 @@ var LIFECYCLE_ROLE_FLAGS = {
16673
16617
  hold: "hold",
16674
16618
  wip: "countsTowardWip",
16675
16619
  review: "mergeOrchestration",
16676
- complete: "complete",
16677
- archived: "archived"
16620
+ complete: "complete"
16678
16621
  };
16679
16622
  function resolveLifecycleColumns(ir) {
16680
16623
  const columns = columnsOf(ir);
@@ -16687,13 +16630,12 @@ function resolveLifecycleColumns(ir) {
16687
16630
  hold: first(LIFECYCLE_ROLE_FLAGS.hold),
16688
16631
  wip: first(LIFECYCLE_ROLE_FLAGS.wip),
16689
16632
  review: first(LIFECYCLE_ROLE_FLAGS.review),
16690
- complete: first(LIFECYCLE_ROLE_FLAGS.complete),
16691
- archived: first(LIFECYCLE_ROLE_FLAGS.archived)
16633
+ complete: first(LIFECYCLE_ROLE_FLAGS.complete)
16692
16634
  };
16693
16635
  }
16694
- async function resolveTaskLifecycleColumns(store, taskId, cache) {
16636
+ async function resolveTaskLifecycleColumns(store, taskId, cache, selectionCache) {
16695
16637
  try {
16696
- const ir = await resolveWorkflowIrForTask(store, taskId, cache);
16638
+ const ir = await resolveWorkflowIrForTask(store, taskId, cache, selectionCache);
16697
16639
  return resolveLifecycleColumns(ir);
16698
16640
  } catch {
16699
16641
  return void 0;
@@ -16707,7 +16649,7 @@ var ROLE_DEFAULT_PERMISSIONS = {
16707
16649
  executor: ["tasks:execute", "agents:view", "messages:read", "messages:send"],
16708
16650
  reviewer: ["tasks:review", "agents:view", "messages:read", "messages:send"],
16709
16651
  merger: ["tasks:merge", "agents:view", "messages:read"],
16710
- scheduler: ["tasks:assign", "tasks:create", "tasks:archive", "agents:view", "automations:manage", "missions:manage", "messages:read"],
16652
+ scheduler: ["tasks:assign", "tasks:create", "agents:view", "automations:manage", "missions:manage", "messages:read"],
16711
16653
  engineer: ["tasks:execute", "tasks:review", "agents:view", "messages:read", "messages:send"],
16712
16654
  custom: []
16713
16655
  };
@@ -18616,7 +18558,7 @@ var AgentStore = class _AgentStore extends EventEmitter {
18616
18558
  *
18617
18559
  * Guards:
18618
18560
  * - task must exist and not be paused
18619
- * - task must not be in terminal columns (done/archived)
18561
+ * - task must not be in its workflow's Complete column
18620
18562
  * - task must not already be assigned to another agent
18621
18563
  * - task checkout must be unheld or already held by this agent
18622
18564
  *
@@ -18653,7 +18595,7 @@ var AgentStore = class _AgentStore extends EventEmitter {
18653
18595
  return { ok: false, reason: bindVerdict.reason, task };
18654
18596
  }
18655
18597
  const claimLifecycle = await resolveTaskLifecycleColumns(this.taskStore, taskId);
18656
- if (task.column === (claimLifecycle?.complete ?? "done") || task.column === (claimLifecycle?.archived ?? "archived")) {
18598
+ if (task.column === (claimLifecycle?.complete ?? "done")) {
18657
18599
  return { ok: false, reason: "terminal", task };
18658
18600
  }
18659
18601
  if (task.assignedAgentId && task.assignedAgentId !== agentId) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/quality",
3
- "version": "0.1.12-beta.2",
3
+ "version": "0.1.12-beta.4",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -9286,6 +9286,11 @@ var DEFAULT_GLOBAL_SETTINGS = {
9286
9286
  */
9287
9287
  quickAddSubmitOnEnter: true,
9288
9288
  /*
9289
+ FNXC:ChatComposer 2026-09-06-01:54:
9290
+ 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.
9291
+ */
9292
+ chatSubmitOnEnter: "auto",
9293
+ /*
9289
9294
  FNXC:ChatSnippets 2026-09-03-15:56:
9290
9295
  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.
9291
9296
  */
@@ -9877,15 +9882,7 @@ var DEFAULT_PROJECT_SETTINGS = {
9877
9882
  // maxPostReviewFixes MOVED to workflow settings (U4).
9878
9883
  // Run maintenance (including WAL checkpointing) every 5 minutes by default.
9879
9884
  maintenanceIntervalMs: 3e5,
9880
- autoArchiveDoneTasksEnabled: true,
9881
- autoArchiveDoneAfterMs: 48 * 60 * 60 * 1e3,
9882
- doneAutoArchiveDays: 0,
9883
- // FNXC:DuplicateIntake 2026-07-07-00:00 (FN-7658): default OFF — operators
9884
- // decide via the near-duplicate flag/UI instead of tasks silently vanishing
9885
- // into `archived` during intake. Set true to restore the pre-FN-7658 behavior.
9886
- autoArchiveDuplicateTasksEnabled: false,
9887
9885
  triageDuplicateResolution: "prompt",
9888
- archiveAgentLogMode: "compact",
9889
9886
  autoUpdatePrStatus: false,
9890
9887
  githubCommentOnDone: false,
9891
9888
  githubCommentTemplate: void 0,
@@ -9980,6 +9977,7 @@ var DEFAULT_PROJECT_SETTINGS = {
9980
9977
  prTitlePromptInstructions: void 0,
9981
9978
  prDescriptionPromptInstructions: void 0,
9982
9979
  scripts: void 0,
9980
+ scriptMetadata: void 0,
9983
9981
  setupScript: void 0,
9984
9982
  insightExtractionEnabled: false,
9985
9983
  insightExtractionSchedule: "0 2 * * *",
@@ -10205,8 +10203,6 @@ var AGENT_PERMISSIONS = [
10205
10203
  // Merge completed task branches
10206
10204
  "tasks:delete",
10207
10205
  // Delete tasks
10208
- "tasks:archive",
10209
- // Archive/unarchive tasks
10210
10206
  "agents:create",
10211
10207
  // Create new agents
10212
10208
  "agents:update",
@@ -10446,8 +10442,13 @@ function completionSummaryNode(column) {
10446
10442
  // ../core/src/missions/mission-types.ts
10447
10443
  var VALIDATION_INFLIGHT_STALE_MAX_AGE_MS = 6 * 60 * 60 * 1e3;
10448
10444
 
10445
+ // ../core/src/types.ts
10446
+ var RETIRED_BUILTIN_WORKFLOW_SUCCESSORS = /* @__PURE__ */ new Map([
10447
+ ["builtin:coding-ideas", "builtin:coding-ideas-v2"]
10448
+ ]);
10449
+
10449
10450
  // ../core/src/workflows/trait-types.ts
10450
- var RESTRICTED_TRAIT_FLAGS = ["complete", "archived"];
10451
+ var RESTRICTED_TRAIT_FLAGS = ["complete"];
10451
10452
  function traitHookKey(traitId, hookKind) {
10452
10453
  return `${traitId}::${hookKind}`;
10453
10454
  }
@@ -10647,15 +10648,6 @@ var TraitRegistry = class {
10647
10648
  message: `Column '${column.id}' is both a completion column and an intake column`
10648
10649
  });
10649
10650
  }
10650
- if (flags.archived && flags.countsTowardWip) {
10651
- violations.push({
10652
- code: "archived-with-wip",
10653
- severity: "error",
10654
- columnId: column.id,
10655
- traitIds: this.traitIdsWithFlags(knownDefs, ["archived", "countsTowardWip"]),
10656
- message: `Column '${column.id}' is archived but counts toward WIP \u2014 archived cards must not hold capacity`
10657
- });
10658
- }
10659
10651
  if (flags.intake) intakeColumnCount += 1;
10660
10652
  }
10661
10653
  if (intakeColumnCount > 1) {
@@ -10838,13 +10830,6 @@ var BUILTIN_TRAIT_DEFINITIONS = [
10838
10830
  builtin: true,
10839
10831
  flags: { complete: true }
10840
10832
  },
10841
- {
10842
- id: "archived",
10843
- name: "Archived",
10844
- description: "Hidden from board; global semantics. Restricted flag.",
10845
- builtin: true,
10846
- flags: { archived: true, hiddenFromBoard: true }
10847
- },
10848
10833
  {
10849
10834
  id: "merge-blocker",
10850
10835
  name: "Merge blocker",
@@ -11138,8 +11123,7 @@ var DEFAULT_WORKFLOW_COLUMN_IDS = [
11138
11123
  "todo",
11139
11124
  "in-progress",
11140
11125
  "in-review",
11141
- "done",
11142
- "archived"
11126
+ "done"
11143
11127
  ];
11144
11128
  function defaultColumnForNode(node) {
11145
11129
  const seam = node.config?.seam;
@@ -13289,7 +13273,7 @@ Write a lean, executable PROMPT.md quickly. Preserve safety gates, but skip heav
13289
13273
  - Preserve required safety sections for bugs, workflow routing, forensic tasks, and decision-only work.
13290
13274
 
13291
13275
  ## Duplicate check
13292
- 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.
13276
+ 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.
13293
13277
 
13294
13278
  ## Required PROMPT.md shape
13295
13279
  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.
@@ -13574,8 +13558,8 @@ Verified facts about this codebase's storage \u2014 cite these correctly so Plan
13574
13558
  - 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.
13575
13559
 
13576
13560
  ## Duplicate check
13577
- 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).
13578
- Do not search completed or archived work for duplicate candidates.
13561
+ 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).
13562
+ Do not search completed work for duplicate candidates.
13579
13563
  If an actionable task already covers the same work (even if worded differently), do not write a spec.
13580
13564
  Instead you MUST still write PROMPT.md, with its ENTIRE contents being this one line and nothing else:
13581
13565
  \`DUPLICATE: {existing-task-id}\`
@@ -14731,8 +14715,7 @@ var RAW_BUILTIN_CODING_WORKFLOW_IR = {
14731
14715
  name: "In review",
14732
14716
  traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
14733
14717
  },
14734
- { id: "done", name: "Done", traits: [{ trait: "complete" }] },
14735
- { id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
14718
+ { id: "done", name: "Done", traits: [{ trait: "complete" }] }
14736
14719
  ],
14737
14720
  nodes: [
14738
14721
  { id: "start", kind: "start", column: "triage" },
@@ -14937,8 +14920,7 @@ var RAW_BUILTIN_STEPWISE_CODING_WORKFLOW_IR = {
14937
14920
  name: "In review",
14938
14921
  traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
14939
14922
  },
14940
- { id: "done", name: "Done", traits: [{ trait: "complete" }] },
14941
- { id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
14923
+ { id: "done", name: "Done", traits: [{ trait: "complete" }] }
14942
14924
  ],
14943
14925
  // KTD-12: PROMPT.md is the planning-produced step-source artifact this workflow
14944
14926
  // parses into task steps.
@@ -15289,8 +15271,7 @@ var CODING_IDEAS_COLUMNS = [
15289
15271
  name: "In review",
15290
15272
  traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
15291
15273
  },
15292
- { id: "done", name: "Done", traits: [{ trait: "complete" }] },
15293
- { id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
15274
+ { id: "done", name: "Done", traits: [{ trait: "complete" }] }
15294
15275
  ];
15295
15276
  var RAW_BUILTIN_CODING_IDEAS_WORKFLOW_IR = (() => {
15296
15277
  const ir = JSON.parse(JSON.stringify(BUILTIN_STEPWISE_FINAL_REVIEW_CODING_WORKFLOW_IR));
@@ -15565,8 +15546,7 @@ var RAW_BUILTIN_LEAD_GENERATION_WORKFLOW_IR = {
15565
15546
  { trait: "stall-detection", config: { timeoutMs: 864e5, action: "notify" } }
15566
15547
  ]
15567
15548
  },
15568
- { id: "converted", name: "Converted", traits: [{ trait: "complete" }] },
15569
- { id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
15549
+ { id: "converted", name: "Converted", traits: [{ trait: "complete" }] }
15570
15550
  ],
15571
15551
  fields: [
15572
15552
  { id: "company", name: "Company", type: "string", render: { placement: "card", widget: "input" } },
@@ -15696,8 +15676,7 @@ var RAW_BUILTIN_MARKETING_WORKFLOW_IR = {
15696
15676
  name: "Editorial review",
15697
15677
  traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
15698
15678
  },
15699
- { id: "published", name: "Published", traits: [{ trait: "complete" }] },
15700
- { id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
15679
+ { id: "published", name: "Published", traits: [{ trait: "complete" }] }
15701
15680
  ],
15702
15681
  nodes: [
15703
15682
  { id: "start", kind: "start", column: "ideation" },
@@ -15800,8 +15779,7 @@ var RAW_BUILTIN_PR_WORKFLOW_IR = {
15800
15779
  // move (no PR knowledge in the substrate).
15801
15780
  traits: [{ trait: "merge-blocker" }, { trait: "stall-detection" }]
15802
15781
  },
15803
- { id: "done", name: "Done", traits: [{ trait: "complete" }] },
15804
- { id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
15782
+ { id: "done", name: "Done", traits: [{ trait: "complete" }] }
15805
15783
  ],
15806
15784
  nodes: [
15807
15785
  { id: "start", kind: "start", column: "triage" },
@@ -15904,6 +15882,9 @@ var BUILTIN_WORKFLOW_ID_PREFIX = "builtin:";
15904
15882
  function isBuiltinWorkflowId(id) {
15905
15883
  return id.startsWith(BUILTIN_WORKFLOW_ID_PREFIX);
15906
15884
  }
15885
+ function resolveRetiredBuiltinWorkflowId(id) {
15886
+ return RETIRED_BUILTIN_WORKFLOW_SUCCESSORS.get(id) ?? id;
15887
+ }
15907
15888
  function ceCodeReviewOptionalGroupNode(column) {
15908
15889
  return {
15909
15890
  id: "code-review",
@@ -16166,7 +16147,7 @@ function withPostMergeVerificationNode(nodes2) {
16166
16147
  var BUILTIN_WORKFLOWS = [
16167
16148
  {
16168
16149
  id: "builtin:coding",
16169
- name: "Coding",
16150
+ name: "Coding (Auto)",
16170
16151
  description: "Default coding pipeline: plan steps, execute them one at a time, then run the optional final code review and merge.",
16171
16152
  kind: "workflow",
16172
16153
  ir: BUILTIN_STEPWISE_FINAL_REVIEW_CODING_WORKFLOW_IR,
@@ -16198,44 +16179,6 @@ var BUILTIN_WORKFLOWS = [
16198
16179
  createdAt: BUILTIN_TS,
16199
16180
  updatedAt: BUILTIN_TS
16200
16181
  },
16201
- /*
16202
- * FNXC:CodingIdeasWorkflow 2026-07-04-09:40:
16203
- * 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.
16204
- */
16205
- {
16206
- id: "builtin:coding-ideas",
16207
- name: "Coding (Ideas)",
16208
- description: "Capture-first coding pipeline: park ideas in a manual intake, then plan, execute per step, run the optional final code review, and merge.",
16209
- kind: "workflow",
16210
- ir: BUILTIN_CODING_IDEAS_WORKFLOW_IR,
16211
- layout: {
16212
- start: { x: 60, y: 160 },
16213
- plan: { x: 230, y: 160 },
16214
- "plan-review": { x: 400, y: 160 },
16215
- "plan-replan": { x: 400, y: 320 },
16216
- "plan-review-no-op": { x: 570, y: 320 },
16217
- parse: { x: 570, y: 160 },
16218
- steps: { x: 740, y: 160 },
16219
- /* U8: the pending-review park is an exit, not a stage — placed off the main line. */
16220
- "review-pending-handoff": { x: 740, y: 320 },
16221
- "browser-verification": { x: 910, y: 160 },
16222
- "browser-verification-remediation": { x: 910, y: 320 },
16223
- "code-review": { x: 1080, y: 160 },
16224
- "code-review-remediation": { x: 1080, y: 320 },
16225
- "completion-summary": { x: 1250, y: 160 },
16226
- "merge-gate": { x: 1420, y: 160 },
16227
- "branch-group-member-integration": { x: 1590, y: 80 },
16228
- "branch-group-promotion": { x: 1760, y: 80 },
16229
- "merge-attempt": { x: 1930, y: 160 },
16230
- "merge-retry": { x: 2100, y: 80 },
16231
- "recovery-router": { x: 2100, y: 240 },
16232
- "merge-manual-hold": { x: 1590, y: 240 },
16233
- "post-merge-verification": { x: 2270, y: 160 },
16234
- end: { x: 2440, y: 160 }
16235
- },
16236
- createdAt: BUILTIN_TS,
16237
- updatedAt: BUILTIN_TS
16238
- },
16239
16182
  /*
16240
16183
  * FNXC:CodingIdeasV2Workflow 2026-08-26-05:56:
16241
16184
  * Same Ideas board as builtin:coding-ideas, with one rule: in-review NEVER writes code.
@@ -16249,7 +16192,7 @@ var BUILTIN_WORKFLOWS = [
16249
16192
  */
16250
16193
  {
16251
16194
  id: "builtin:coding-ideas-v2",
16252
- name: "Coding (Ideas) V2",
16195
+ name: "Coding (Ideas)",
16253
16196
  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.",
16254
16197
  kind: "workflow",
16255
16198
  ir: BUILTIN_CODING_IDEAS_V2_WORKFLOW_IR,
@@ -16645,7 +16588,7 @@ var BUILTIN_WORKFLOWS = [
16645
16588
  ];
16646
16589
  var BUILTIN_BY_ID = new Map(BUILTIN_WORKFLOWS.map((wf) => [wf.id, wf]));
16647
16590
  function getBuiltinWorkflow(id) {
16648
- return BUILTIN_BY_ID.get(id);
16591
+ return BUILTIN_BY_ID.get(resolveRetiredBuiltinWorkflowId(id));
16649
16592
  }
16650
16593
  var DEFAULT_WORKFLOW_ID = "builtin:coding";
16651
16594
  function resolveDefaultWorkflowIr() {
@@ -16695,7 +16638,8 @@ function defaultCodingWorkflowIr() {
16695
16638
  return resolveDefaultWorkflowIr();
16696
16639
  }
16697
16640
  var inflightSelectionReads = /* @__PURE__ */ new WeakMap();
16698
- async function resolveWorkflowIrById(store, workflowId, irCache) {
16641
+ async function resolveWorkflowIrById(store, requestedWorkflowId, irCache) {
16642
+ const workflowId = resolveRetiredBuiltinWorkflowId(requestedWorkflowId);
16699
16643
  let projectId;
16700
16644
  try {
16701
16645
  projectId = store.getWorkflowSettingsProjectId?.();
@@ -16790,8 +16734,7 @@ var LIFECYCLE_ROLE_FLAGS = {
16790
16734
  hold: "hold",
16791
16735
  wip: "countsTowardWip",
16792
16736
  review: "mergeOrchestration",
16793
- complete: "complete",
16794
- archived: "archived"
16737
+ complete: "complete"
16795
16738
  };
16796
16739
  function resolveLifecycleColumns(ir) {
16797
16740
  const columns = columnsOf(ir);
@@ -16804,13 +16747,12 @@ function resolveLifecycleColumns(ir) {
16804
16747
  hold: first(LIFECYCLE_ROLE_FLAGS.hold),
16805
16748
  wip: first(LIFECYCLE_ROLE_FLAGS.wip),
16806
16749
  review: first(LIFECYCLE_ROLE_FLAGS.review),
16807
- complete: first(LIFECYCLE_ROLE_FLAGS.complete),
16808
- archived: first(LIFECYCLE_ROLE_FLAGS.archived)
16750
+ complete: first(LIFECYCLE_ROLE_FLAGS.complete)
16809
16751
  };
16810
16752
  }
16811
- async function resolveTaskLifecycleColumns(store, taskId, cache) {
16753
+ async function resolveTaskLifecycleColumns(store, taskId, cache, selectionCache) {
16812
16754
  try {
16813
- const ir = await resolveWorkflowIrForTask(store, taskId, cache);
16755
+ const ir = await resolveWorkflowIrForTask(store, taskId, cache, selectionCache);
16814
16756
  return resolveLifecycleColumns(ir);
16815
16757
  } catch {
16816
16758
  return void 0;
@@ -16824,7 +16766,7 @@ var ROLE_DEFAULT_PERMISSIONS = {
16824
16766
  executor: ["tasks:execute", "agents:view", "messages:read", "messages:send"],
16825
16767
  reviewer: ["tasks:review", "agents:view", "messages:read", "messages:send"],
16826
16768
  merger: ["tasks:merge", "agents:view", "messages:read"],
16827
- scheduler: ["tasks:assign", "tasks:create", "tasks:archive", "agents:view", "automations:manage", "missions:manage", "messages:read"],
16769
+ scheduler: ["tasks:assign", "tasks:create", "agents:view", "automations:manage", "missions:manage", "messages:read"],
16828
16770
  engineer: ["tasks:execute", "tasks:review", "agents:view", "messages:read", "messages:send"],
16829
16771
  custom: []
16830
16772
  };
@@ -18733,7 +18675,7 @@ var AgentStore = class _AgentStore extends EventEmitter {
18733
18675
  *
18734
18676
  * Guards:
18735
18677
  * - task must exist and not be paused
18736
- * - task must not be in terminal columns (done/archived)
18678
+ * - task must not be in its workflow's Complete column
18737
18679
  * - task must not already be assigned to another agent
18738
18680
  * - task checkout must be unheld or already held by this agent
18739
18681
  *
@@ -18770,7 +18712,7 @@ var AgentStore = class _AgentStore extends EventEmitter {
18770
18712
  return { ok: false, reason: bindVerdict.reason, task };
18771
18713
  }
18772
18714
  const claimLifecycle = await resolveTaskLifecycleColumns(this.taskStore, taskId);
18773
- if (task.column === (claimLifecycle?.complete ?? "done") || task.column === (claimLifecycle?.archived ?? "archived")) {
18715
+ if (task.column === (claimLifecycle?.complete ?? "done")) {
18774
18716
  return { ok: false, reason: "terminal", task };
18775
18717
  }
18776
18718
  if (task.assignedAgentId && task.assignedAgentId !== agentId) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/reports",
3
- "version": "0.1.56-beta.2",
3
+ "version": "0.1.56-beta.4",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {