@runfusion/fusion 0.77.0-beta.4 → 0.77.0-beta.5

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 (161) hide show
  1. package/dist/bin.js +4051 -4144
  2. package/dist/child-process-worker.js +2681 -1719
  3. package/dist/client/.vite/manifest.json +261 -261
  4. package/dist/client/assets/{AgentDetailView-CH6GtXl9.js → AgentDetailView-CSK_Rnlk.js} +1 -1
  5. package/dist/client/assets/{AgentPermissionPolicyEditor-YTEpMhUx.js → AgentPermissionPolicyEditor-kG44Adcm.js} +1 -1
  6. package/dist/client/assets/{AgentsView-XOHHDo4a.js → AgentsView-ClKwKWnU.js} +3 -3
  7. package/dist/client/assets/ChatView-DoOqgkPX.js +13 -0
  8. package/dist/client/assets/{CommandCenter-BsH-R15f.js → CommandCenter-CJxvPbgn.js} +1 -1
  9. package/dist/client/assets/{DevServerView-CKOa-lkc.js → DevServerView-C4nyLONX.js} +1 -1
  10. package/dist/client/assets/{DirectoryPicker-DHUYTE-j.js → DirectoryPicker-BIvXWIB5.js} +1 -1
  11. package/dist/client/assets/{DocumentsView-BPzrxeP-.js → DocumentsView-DH_aZysM.js} +1 -1
  12. package/dist/client/assets/{EvalsView-DojCiv47.js → EvalsView-klRK-GJQ.js} +1 -1
  13. package/dist/client/assets/{ExperimentalAgentOnboardingModal-DuurZ8qe.js → ExperimentalAgentOnboardingModal-CgBmukIm.js} +1 -1
  14. package/dist/client/assets/{GoalsView-DDWPXcG1.js → GoalsView-ysh3X2x6.js} +1 -1
  15. package/dist/client/assets/{InsightsView-CgkMOD1A.js → InsightsView-BbMjCu7J.js} +1 -1
  16. package/dist/client/assets/{MemoryView-Cj49_z7O.js → MemoryView-B3IgA8Bx.js} +1 -1
  17. package/dist/client/assets/{PiExtensionsManager-B_rRJiOd.js → PiExtensionsManager-CZlIw7C3.js} +1 -1
  18. package/dist/client/assets/{PluginManager-Dxwi88oY.js → PluginManager-vy0YZ2Nx.js} +1 -1
  19. package/dist/client/assets/{PullRequestView-z-5v2hQT.js → PullRequestView-DhhsJV8I.js} +1 -1
  20. package/dist/client/assets/{ReportModal-DmOPEYWp.js → ReportModal-CQMn4i1y.js} +1 -1
  21. package/dist/client/assets/{ResearchView-D90Jbzbx.js → ResearchView-CVwfs4l3.js} +1 -1
  22. package/dist/client/assets/{SecretsView-CSyjZl5L.js → SecretsView-CrJfHle9.js} +1 -1
  23. package/dist/client/assets/{SessionTerminal-Bwb8nGmU.js → SessionTerminal-BRI8W1-G.js} +1 -1
  24. package/dist/client/assets/{SettingsModal-CJof1Ett.js → SettingsModal-B6U5Umru.js} +1 -1
  25. package/dist/client/assets/SettingsModal-h1A_aFqD.js +21 -0
  26. package/dist/client/assets/{SettingsTextareaRow-BYchnHfW.js → SettingsTextareaRow-O7-u9uMC.js} +1 -1
  27. package/dist/client/assets/{SetupWizardModal-NqV-erVf.js → SetupWizardModal-nXfJp8cA.js} +2 -2
  28. package/dist/client/assets/{SkillsView-BUrkIJ-p.js → SkillsView-CoWAjvWU.js} +1 -1
  29. package/dist/client/assets/{WorkflowNodeEditor-DcPk2A1Z.js → WorkflowNodeEditor-BFMM3RF_.js} +2 -2
  30. package/dist/client/assets/{agent-import-generation-X16OLfrL.js → agent-import-generation-BqDmtTur.js} +1 -1
  31. package/dist/client/assets/{agentsOrgChartLayout-BhPIXckU.js → agentsOrgChartLayout-C4cLqlV6.js} +1 -1
  32. package/dist/client/assets/app-BBSLJDbV.js +13 -0
  33. package/dist/client/assets/app-BKwOvuxE.js +5 -0
  34. package/dist/client/assets/app-Bvr57EZQ.js +5 -0
  35. package/dist/client/assets/app-C_PTWuI1.js +13 -0
  36. package/dist/client/assets/app-DKx18PHE.js +13 -0
  37. package/dist/client/assets/app-DRW5hIgr.js +13 -0
  38. package/dist/client/assets/app-DwvelD-n.js +13 -0
  39. package/dist/client/assets/{architectureDiagram-3BPJPVTR-WArMtdqy.js → architectureDiagram-3BPJPVTR-CdxcwdRe.js} +1 -1
  40. package/dist/client/assets/{blockDiagram-GPEHLZMM-emScogdV.js → blockDiagram-GPEHLZMM-CfQrRfHR.js} +1 -1
  41. package/dist/client/assets/{c4Diagram-AAUBKEIU-CBY7-E0T.js → c4Diagram-AAUBKEIU-Cx7-2SOm.js} +1 -1
  42. package/dist/client/assets/channel-B4WN1jC_.js +1 -0
  43. package/dist/client/assets/{chunk-2J33WTMH-Bcai1sOm.js → chunk-2J33WTMH-D8jvgP3M.js} +1 -1
  44. package/dist/client/assets/{chunk-4BX2VUAB-hjiKRusj.js → chunk-4BX2VUAB-B5tBx_s_.js} +1 -1
  45. package/dist/client/assets/{chunk-55IACEB6-DpO9nIb0.js → chunk-55IACEB6-C-F-HQ5Z.js} +1 -1
  46. package/dist/client/assets/{chunk-727SXJPM-B9JanA0o.js → chunk-727SXJPM-BP8Ln-8C.js} +1 -1
  47. package/dist/client/assets/{chunk-AQP2D5EJ-D6zdnEUE.js → chunk-AQP2D5EJ-DMnTmRmn.js} +1 -1
  48. package/dist/client/assets/{chunk-FMBD7UC4-CRkrJ51d.js → chunk-FMBD7UC4-D_YdfnNc.js} +1 -1
  49. package/dist/client/assets/{chunk-ND2GUHAM-BLQsKt7a.js → chunk-ND2GUHAM-CULXyuXq.js} +1 -1
  50. package/dist/client/assets/{chunk-QZHKN3VN-MCOlJ723.js → chunk-QZHKN3VN-CT1BWEJL.js} +1 -1
  51. package/dist/client/assets/classDiagram-4FO5ZUOK-CKE8RSOv.js +1 -0
  52. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-CKE8RSOv.js +1 -0
  53. package/dist/client/assets/{cose-bilkent-S5V4N54A-Cv1XmKKG.js → cose-bilkent-S5V4N54A-M-3DXa6e.js} +1 -1
  54. package/dist/client/assets/{dagre-BM42HDAG-flnNS_RW.js → dagre-BM42HDAG-Bsiqvroz.js} +1 -1
  55. package/dist/client/assets/{dashboard-view-CrV-rL9Q.js → dashboard-view-BEBh_Ei5.js} +1 -1
  56. package/dist/client/assets/{dashboard-view-Dz7kqcJc.js → dashboard-view-Bo_gFjdO.js} +1 -1
  57. package/dist/client/assets/{dashboard-view-CC1aH-lp.js → dashboard-view-CnFFG3cW.js} +1 -1
  58. package/dist/client/assets/{dashboard-view-DEAYb_TZ.js → dashboard-view-DAHn20ph.js} +1 -1
  59. package/dist/client/assets/{diagram-2AECGRRQ-Z3S7b_6_.js → diagram-2AECGRRQ-CZiHoXo5.js} +1 -1
  60. package/dist/client/assets/{diagram-5GNKFQAL-BAZHdMFq.js → diagram-5GNKFQAL-BoJVz4Or.js} +1 -1
  61. package/dist/client/assets/{diagram-KO2AKTUF-C2y3S8F0.js → diagram-KO2AKTUF-DivGQuAL.js} +1 -1
  62. package/dist/client/assets/{diagram-LMA3HP47-Bfz0_IvT.js → diagram-LMA3HP47-DkMK7OJp.js} +1 -1
  63. package/dist/client/assets/{diagram-OG6HWLK6-BBmSQsTI.js → diagram-OG6HWLK6-DFFvRcpW.js} +1 -1
  64. package/dist/client/assets/{erDiagram-TEJ5UH35-DnpdQi66.js → erDiagram-TEJ5UH35--217vrom.js} +1 -1
  65. package/dist/client/assets/{flowDiagram-I6XJVG4X-IybTR_zf.js → flowDiagram-I6XJVG4X-CQgWO3xf.js} +1 -1
  66. package/dist/client/assets/{folder-open-Dntm63x4.js → folder-open-DR6cRcNR.js} +1 -1
  67. package/dist/client/assets/{ganttDiagram-6RSMTGT7-DEQOe2E9.js → ganttDiagram-6RSMTGT7-BjDMUrS3.js} +1 -1
  68. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-BOKc-h63.js → gitGraphDiagram-PVQCEYII-gKUcDnln.js} +1 -1
  69. package/dist/client/assets/index-Dki2LBAp.css +1 -0
  70. package/dist/client/assets/index-oxnX59eO.js +2774 -0
  71. package/dist/client/assets/{infoDiagram-5YYISTIA-LqaYIdbj.js → infoDiagram-5YYISTIA-BA91T8S5.js} +1 -1
  72. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-a8qd512s.js → ishikawaDiagram-YF4QCWOH-0BY5xe-c.js} +1 -1
  73. package/dist/client/assets/{journeyDiagram-JHISSGLW-BgoNyeiy.js → journeyDiagram-JHISSGLW-B_OwenbQ.js} +1 -1
  74. package/dist/client/assets/{kanban-definition-UN3LZRKU-Bqwow7D3.js → kanban-definition-UN3LZRKU-GLabUTKp.js} +1 -1
  75. package/dist/client/assets/{mermaid.core-B2zD934i.js → mermaid.core-BXo4rxYI.js} +4 -4
  76. package/dist/client/assets/{mindmap-definition-RKZ34NQL-CCTOigWu.js → mindmap-definition-RKZ34NQL-DZl6LPoE.js} +1 -1
  77. package/dist/client/assets/{pieDiagram-4H26LBE5-Bq5DtXKR.js → pieDiagram-4H26LBE5-DtHq-4py.js} +1 -1
  78. package/dist/client/assets/{puzzle-VhTPiCit.js → puzzle-OVm-I1L4.js} +1 -1
  79. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-CGMP3nUx.js → quadrantDiagram-W4KKPZXB-BdjXhd5d.js} +1 -1
  80. package/dist/client/assets/{requirementDiagram-4Y6WPE33-Ckeu_szu.js → requirementDiagram-4Y6WPE33-BoFVjELN.js} +1 -1
  81. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-SWbBDD4d.js → sankeyDiagram-5OEKKPKP-B0qyJh-P.js} +1 -1
  82. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-CiJrmL_G.js → sequenceDiagram-3UESZ5HK-ByY62Eqp.js} +1 -1
  83. package/dist/client/assets/{shield-alert-BBDlP6A5.js → shield-alert-CDy69fl7.js} +1 -1
  84. package/dist/client/assets/{standing-instructions-template-viu_kgDX.js → standing-instructions-template-BsnnRlwm.js} +1 -1
  85. package/dist/client/assets/{stateDiagram-AJRCARHV-DTCzK5Gt.js → stateDiagram-AJRCARHV-CwJ-_Phi.js} +1 -1
  86. package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-BIGAwFTT.js → stateDiagram-v2-BHNVJYJU-Cfvhq8mV.js} +1 -1
  87. package/dist/client/assets/{timeline-definition-PNZ67QCA-BQZEFEug.js → timeline-definition-PNZ67QCA-Co8VfGN9.js} +1 -1
  88. package/dist/client/assets/{upload-D5w3Ehwp.js → upload-CkqDbEeE.js} +1 -1
  89. package/dist/client/assets/{useDiscoveredSkillsCache-D6zMSIaS.js → useDiscoveredSkillsCache-BHUasRiZ.js} +1 -1
  90. package/dist/client/assets/{users-Bohihi_o.js → users-B8DkpbXD.js} +1 -1
  91. package/dist/client/assets/{vennDiagram-CIIHVFJN-DnHguEv8.js → vennDiagram-CIIHVFJN-XSJteQrL.js} +1 -1
  92. package/dist/client/assets/{wardley-L42UT6IY-BOqYltGN.js → wardley-L42UT6IY-Btc0FRfF.js} +1 -1
  93. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-Re0Ery2M.js → wardleyDiagram-YWT4CUSO--IcDNmrf.js} +1 -1
  94. package/dist/client/assets/{xychartDiagram-2RQKCTM6-CnVq21b2.js → xychartDiagram-2RQKCTM6-CZW93G6X.js} +1 -1
  95. package/dist/client/index.html +2 -2
  96. package/dist/client/version.json +1 -1
  97. package/dist/droid-cli/package.json +1 -1
  98. package/dist/extension.js +3085 -2130
  99. package/dist/migrations/0000_initial.sql +3 -0
  100. package/dist/migrations/0061_fn_066_activity_log_task_id_index.sql +7 -0
  101. package/dist/migrations/0062_remove_task_subtask_splitting.sql +2 -0
  102. package/dist/migrations/0063_fn_090_ai_merge_review_reconciliation.sql +2 -0
  103. package/dist/migrations/0064_fn_094_task_repository_scope.sql +2 -0
  104. package/dist/pi-claude-cli/package.json +1 -1
  105. package/dist/plugin-sdk/index.d.ts +276 -186
  106. package/dist/plugin-sdk/index.js +35 -104
  107. package/dist/plugins/fusion-plugin-acp-runtime/bundled.js +35 -104
  108. package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
  109. package/dist/plugins/fusion-plugin-claude-runtime/bundled.js +35 -104
  110. package/dist/plugins/fusion-plugin-claude-runtime/package.json +1 -1
  111. package/dist/plugins/fusion-plugin-cli-printing-press/bundled.js +35 -104
  112. package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
  113. package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +35 -104
  114. package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
  115. package/dist/plugins/fusion-plugin-cursor-runtime/bundled.js +35 -104
  116. package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
  117. package/dist/plugins/fusion-plugin-dependency-graph/bundled.js +35 -104
  118. package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
  119. package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +35 -104
  120. package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
  121. package/dist/plugins/fusion-plugin-grok-runtime/bundled.js +35 -104
  122. package/dist/plugins/fusion-plugin-grok-runtime/package.json +1 -1
  123. package/dist/plugins/fusion-plugin-hermes-runtime/bundled.js +35 -104
  124. package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
  125. package/dist/plugins/fusion-plugin-linear-import/bundled.js +35 -104
  126. package/dist/plugins/fusion-plugin-linear-import/package.json +1 -1
  127. package/dist/plugins/fusion-plugin-omp-runtime/bundled.js +35 -104
  128. package/dist/plugins/fusion-plugin-omp-runtime/package.json +1 -1
  129. package/dist/plugins/fusion-plugin-openclaw-runtime/bundled.js +35 -104
  130. package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
  131. package/dist/plugins/fusion-plugin-paperclip-runtime/bundled.js +35 -104
  132. package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
  133. package/dist/plugins/fusion-plugin-quality/bundled.js +35 -104
  134. package/dist/plugins/fusion-plugin-quality/package.json +1 -1
  135. package/dist/plugins/fusion-plugin-reports/bundled.js +35 -104
  136. package/dist/plugins/fusion-plugin-reports/package.json +1 -1
  137. package/dist/plugins/fusion-plugin-roadmap/bundled.js +35 -104
  138. package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
  139. package/dist/plugins/fusion-plugin-todos/bundled.js +35 -104
  140. package/dist/plugins/fusion-plugin-todos/package.json +1 -1
  141. package/dist/plugins/fusion-plugin-whatsapp-chat/bundled.js +35 -104
  142. package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
  143. package/package.json +1 -1
  144. package/skill/fusion/references/extension-tools.md +2 -1
  145. package/skill/fusion/references/fusion-capabilities.md +1 -1
  146. package/skill/fusion/references/task-structure.md +1 -1
  147. package/skill/fusion/workflows/specifications.md +2 -2
  148. package/dist/client/assets/ChatView-gH7QX3TI.js +0 -13
  149. package/dist/client/assets/SettingsModal-BAzmMjr9.js +0 -21
  150. package/dist/client/assets/app-B-TfWH9b.js +0 -5
  151. package/dist/client/assets/app-B2RDV_-t.js +0 -13
  152. package/dist/client/assets/app-CDo0mF2S.js +0 -5
  153. package/dist/client/assets/app-Cc18kAQS.js +0 -13
  154. package/dist/client/assets/app-DFF79EUn.js +0 -13
  155. package/dist/client/assets/app-DSeFHxgj.js +0 -13
  156. package/dist/client/assets/app-Ducr0y6r.js +0 -13
  157. package/dist/client/assets/channel-CP2ySYs0.js +0 -1
  158. package/dist/client/assets/classDiagram-4FO5ZUOK-DKkOBtzM.js +0 -1
  159. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-DKkOBtzM.js +0 -1
  160. package/dist/client/assets/index-DXpztECA.css +0 -1
  161. package/dist/client/assets/index-I32FijPT.js +0 -2821
@@ -5838,6 +5838,7 @@ var tasks = projectSchema.table("tasks", {
5838
5838
  mergerModelId: text("merger_model_id"),
5839
5839
  mergerThinkingLevel: text("merger_thinking_level"),
5840
5840
  mergeRetries: integer("merge_retries"),
5841
+ aiMergeReviewReconciliation: text("ai_merge_review_reconciliation"),
5841
5842
  workflowStepRetries: integer("workflow_step_retries"),
5842
5843
  resumeLimboCount: integer("resume_limbo_count").default(0),
5843
5844
  graphResumeRetryCount: integer("graph_resume_retry_count").default(0),
@@ -5960,7 +5961,8 @@ var tasks = projectSchema.table("tasks", {
5960
5961
  sourceIssueClosedAt: text("source_issue_closed_at"),
5961
5962
  mergeDetails: jsonb("merge_details"),
5962
5963
  workspaceWorktrees: jsonb("workspace_worktrees"),
5963
- breakIntoSubtasks: integer("break_into_subtasks").default(0),
5964
+ // FNXC:RepositoryScope 2026-08-20-23:07: explicit task intent must survive PostgreSQL reads independently of acquired worktrees.
5965
+ repositoryScope: jsonb("repository_scope"),
5964
5966
  noCommitsExpected: integer("no_commits_expected").default(0),
5965
5967
  enabledWorkflowSteps: jsonb("enabled_workflow_steps").default([]),
5966
5968
  modifiedFiles: jsonb("modified_files").default([]),
@@ -8280,7 +8282,8 @@ var centralActivityLog = centralSchema.table("central_activity_log", {
8280
8282
  foreignKey({ columns: [t.projectId], foreignColumns: [projects.id] }).onDelete("cascade"),
8281
8283
  index("idxActivityLogTimestamp").on(t.timestamp),
8282
8284
  index("idxActivityLogType").on(t.type),
8283
- index("idxActivityLogProjectId").on(t.projectId)
8285
+ index("idxActivityLogProjectId").on(t.projectId),
8286
+ index("idxCentralActivityLogTaskIdTimestamp").on(t.taskId, t.timestamp)
8284
8287
  ]);
8285
8288
  var centralSettings = centralSchema.table("central_settings", {
8286
8289
  id: integer("id").primaryKey(),
@@ -8988,6 +8991,15 @@ var DEFAULT_GLOBAL_SETTINGS = {
8988
8991
  opt in before Fusion replaces its own binary and bounces the process under them.
8989
8992
  */
8990
8993
  autoUpdateAndRestart: false,
8994
+ /*
8995
+ FNXC:UpdateAutomation 2026-08-21-02:17:
8996
+ Fresh installations require separate opt-ins for unattended installation and
8997
+ restart. The legacy combined switch remains false and is only a fallback for
8998
+ older persisted settings.
8999
+ */
9000
+ /* FNXC:UpdateAutomation 2026-08-21-02:48: Keep these schema keys unset because defaults merge into effective settings and `undefined` is distinct from explicit false. */
9001
+ autoUpdateEnabled: void 0,
9002
+ autoRestartAfterUpdate: void 0,
8991
9003
  autoReloadOnVersionChange: true,
8992
9004
  githubTrackingDefaultRepo: void 0,
8993
9005
  reportRoadmapDedupeEnabled: void 0,
@@ -8998,6 +9010,13 @@ var DEFAULT_GLOBAL_SETTINGS = {
8998
9010
  gitlabApiBaseUrl: void 0,
8999
9011
  gitlabAuthToken: void 0,
9000
9012
  gitlabAuthTokenType: void 0,
9013
+ jiraEnabled: void 0,
9014
+ jiraBaseUrl: void 0,
9015
+ jiraApiBaseUrl: void 0,
9016
+ jiraAuthEmail: void 0,
9017
+ jiraAuthTokenSecretKey: void 0,
9018
+ jiraAuthTokenSecretScope: void 0,
9019
+ jiraBranchNameTemplate: void 0,
9001
9020
  modelOnboardingComplete: void 0,
9002
9021
  useClaudeCli: void 0,
9003
9022
  useDroidCli: void 0,
@@ -9488,6 +9507,13 @@ var DEFAULT_PROJECT_SETTINGS = {
9488
9507
  gitlabApiBaseUrl: void 0,
9489
9508
  gitlabAuthToken: void 0,
9490
9509
  gitlabAuthTokenType: void 0,
9510
+ jiraEnabled: void 0,
9511
+ jiraBaseUrl: void 0,
9512
+ jiraApiBaseUrl: void 0,
9513
+ jiraAuthEmail: void 0,
9514
+ jiraAuthTokenSecretKey: void 0,
9515
+ jiraAuthTokenSecretScope: void 0,
9516
+ jiraBranchNameTemplate: void 0,
9491
9517
  gitlabCommentOnDone: false,
9492
9518
  gitlabCommentTemplate: void 0,
9493
9519
  gitlabCloseSourceIssueOnDone: false,
@@ -12284,17 +12310,6 @@ var BUILTIN_MOVED_WORKFLOW_SETTINGS = [
12284
12310
  }
12285
12311
  ];
12286
12312
  var BUILTIN_TRIAGE_POLICY_SETTINGS = [
12287
- {
12288
- id: "triageProactiveSubtaskSplittingEnabled",
12289
- name: "Triage proactive subtask splitting",
12290
- type: "boolean",
12291
- default: true,
12292
- /*
12293
- * FNXC:TriagePolicy 2026-07-04-00:00:
12294
- * Operators need a workflow/project policy switch that disables automatic large-task splitting without weakening explicit `breakIntoSubtasks: true` requests. Keep the default enabled to preserve existing triage behavior for workflows that have no stored override.
12295
- */
12296
- description: "Enable automatic large-task splitting guidance during triage. Turn off to split only when breakIntoSubtasks is explicitly requested."
12297
- },
12298
12313
  {
12299
12314
  id: "triageSizeSmallMaxHours",
12300
12315
  name: "Triage size S max hours",
@@ -12316,48 +12331,6 @@ var BUILTIN_TRIAGE_POLICY_SETTINGS = [
12316
12331
  default: 8,
12317
12332
  description: "Upper hour boundary for Size L triage guidance; larger work should split as XL."
12318
12333
  },
12319
- {
12320
- id: "triageSubtaskStepThreshold",
12321
- name: "Triage subtask step threshold",
12322
- type: "number",
12323
- default: 7,
12324
- description: "Implementation-step count above which triage should consider splitting an M/L task."
12325
- },
12326
- {
12327
- id: "triageSubtaskLargeStepSignal",
12328
- name: "Triage large-step signal",
12329
- type: "number",
12330
- default: 9,
12331
- description: "Planned step count that is a broad-scope decomposition signal for Size L tasks."
12332
- },
12333
- {
12334
- id: "triageSubtaskAdditiveStepSignal",
12335
- name: "Triage additive step signal",
12336
- type: "number",
12337
- default: 12,
12338
- description: "Implementation-step count that independently signals possible partitioning."
12339
- },
12340
- {
12341
- id: "triageSubtaskPackageThreshold",
12342
- name: "Triage package/module threshold",
12343
- type: "number",
12344
- default: 3,
12345
- description: "Distinct package/module count above which triage should consider splitting coherent M/L work."
12346
- },
12347
- {
12348
- id: "triageSubtaskFileScopeThreshold",
12349
- name: "Triage file-scope threshold",
12350
- type: "number",
12351
- default: 20,
12352
- description: "File Scope entry count that signals broad work likely needing partitioning."
12353
- },
12354
- {
12355
- id: "triageSubtaskRemediationBatchThreshold",
12356
- name: "Triage remediation batch threshold",
12357
- type: "number",
12358
- default: 30,
12359
- description: "Quantified remediation batch size that strongly signals subsystem partitioning."
12360
- },
12361
12334
  {
12362
12335
  id: "triageNoCommitsDecisionVerbs",
12363
12336
  name: "Triage no-commits decision verbs",
@@ -13142,20 +13115,12 @@ When you plan to list a task in the \`## Dependencies\` section, first call \`fn
13142
13115
  Use what you learn \u2014 file scope, APIs, patterns, completion criteria \u2014 to make the new spec accurate: reference the right paths, avoid conflicting assumptions, and describe what the dependency must deliver before this task starts.
13143
13116
  If the dependency task has no PROMPT.md yet (not yet specified), note that in the Dependencies section.
13144
13117
 
13145
- ## Triage subtask breakdown
13146
- When the task includes \`breakIntoSubtasks: true\`, first decide whether it should be split.
13147
-
13148
- - Split only when the work is meaningfully decomposable into 2-5 independently executable child tasks.
13149
- - If splitting: use the \`fn_task_create\` tool to create child tasks in triage, include clear descriptions and dependencies between them, then stop. Do NOT write a PROMPT.md for the parent task.
13150
- - **CRITICAL \u2014 subtask dependencies:** the parent task is deleted once all subtasks are created. \`dependencies\` on a new subtask may ONLY reference sibling subtasks you have created earlier in this same split (or unrelated existing tasks). **Never depend on the parent task's id.** If a child conceptually "waits for the parent's remaining work", create a sibling subtask that does that work and depend on the sibling instead. The \`fn_task_create\` tool will reject parent-id dependencies with an error.
13151
- - If not splitting: proceed with a normal PROMPT.md specification.
13152
-
13153
- ## Proactive Subtask Breakdown for M/L Tasks
13118
+ ## One-task planning
13154
13119
  <!--
13155
- FNXC:TriagePolicy 2026-07-04-00:00:
13156
- Workflow policy can disable proactive oversized-task splitting for operators who want triage to keep large tasks whole by default. Explicit user-requested \`breakIntoSubtasks: true\` remains governed by the mandatory breakdown section above and must not be weakened by this toggle.
13120
+ FNXC:TriagePlanning 2026-08-20-17:42:
13121
+ Complexity never authorizes replacing a requested task with child tasks. Preserve the original task ID, dependencies, and documents; write one complete, detailed PROMPT.md with focused steps, realistic scope, risks, and quality gates.
13157
13122
  -->
13158
- {{triageProactiveSubtaskSplittingEnabled}}
13123
+ Create independent follow-up tasks only when they are genuinely separate work, never as an automatic decomposition of the task being planned.
13159
13124
 
13160
13125
  ## Triage tools
13161
13126
  You have these extra tools during triage:
@@ -13214,7 +13179,7 @@ This bullet is the planning-side half of the artifact-pipeline contract; keep it
13214
13179
  -->
13215
13180
  - For tasks with a visible UI surface or whose deliverable is visual/media (wireframes, mockups, designs, diagrams, screenshots, screen recordings, HTML prototypes, PDF exports), include an explicit step or checkbox instructing the executor to save each deliverable to disk and register it via \`fn_artifact_register\` (images via \`type="image", path=...\`; recordings via \`type="video", path=...\`; HTML mockups via \`type="document", mimeType="text/html"\` for live gallery previews; PDFs via \`type="document", mimeType="application/pdf", path=...\`) so it appears in the dashboard Artifacts gallery
13216
13181
  - Include a "Do NOT" section with project-appropriate guardrails
13217
- - Size assessment: S (<{{triageSizeSmallMaxHours}}h), M ({{triageSizeSmallMaxHours}}-{{triageSizeMediumMaxHours}}h), L ({{triageSizeMediumMaxHours}}-{{triageSizeLargeMaxHours}}h). Split if XL ({{triageSizeLargeMaxHours}}h+)
13182
+ - Size assessment: S (<{{triageSizeSmallMaxHours}}h), M ({{triageSizeSmallMaxHours}}-{{triageSizeMediumMaxHours}}h), L ({{triageSizeMediumMaxHours}}-{{triageSizeLargeMaxHours}}h+). Keep every requested task as one detailed plan regardless of size.
13218
13183
  - Review level scoring: Blast radius (0-2), Pattern novelty (0-2), Security (0-2), Reversibility (0-2)
13219
13184
  - 0-1 \u2192 Level 0, 2-3 \u2192 Level 1, 4-5 \u2192 Level 2, 6-8 \u2192 Level 3
13220
13185
 
@@ -13229,11 +13194,11 @@ FNXC:WorkflowRouting 2026-06-22-17:24:
13229
13194
  Standard triage must not infer workflow changes from task type. Agents preserve the project default unless the user names or explicitly requests a workflow, or the agent created the task; no-commit decisions use the header marker without automatic workflow selection.
13230
13195
  -->
13231
13196
  ## Workflow Routing
13232
- - Keep the project default workflow (\`{{triageDefaultWorkflowId}}\`) unless the user explicitly requested a specific workflow for this task or subtask, or you created that task yourself.
13197
+ - Keep the project default workflow (\`{{triageDefaultWorkflowId}}\`) unless the user explicitly requested a specific workflow for this task, or you created that task yourself.
13233
13198
  - Do NOT call \`fn_workflow_select\` or pass \`workflow_id\` to \`fn_task_create\` just because a task looks like investigation, audit, research, operational routing/coordination, decision-only work, or standard coding work.
13234
13199
  - When you create a task via \`fn_task_create\` or \`fn_delegate_task\`, you may select that created task's workflow with \`workflow_id\` at create time or \`fn_workflow_select\` afterward; do not move a task you did not create unless the user asked.
13235
13200
  - For decision-only tasks ({{triageNoCommitsDecisionVerbs}}) or other no-code tasks, set \`**No commits expected:** true\` in the PROMPT.md header when the no-commits criteria above are met; this is a header marker only and does not select \`{{triageDecisionOnlyWorkflowId}}\` or any custom investigation workflow by itself.
13236
- - If the user explicitly asks for a workflow, call \`fn_workflow_list\` to discover valid IDs, then use \`fn_workflow_select\` to set the workflow on the current task or pass \`workflow_id\` to \`fn_task_create\` when creating a requested subtask.
13201
+ - If the user explicitly asks for a workflow, call \`fn_workflow_list\` to discover valid IDs, then use \`fn_workflow_select\` to set the workflow on the current task or pass \`workflow_id\` to \`fn_task_create\` when creating requested independent work.
13237
13202
 
13238
13203
  ## Plan Review
13239
13204
 
@@ -13380,45 +13345,12 @@ Concrete examples:
13380
13345
  - **Documentation completeness:** [Must Update / Check If Affected sections present?]
13381
13346
  - **Dangling task-document references:** [No \`.fusion/tasks/<id>/<file>\` path is cited in Context, Steps, or File Scope unless the file exists or is explicitly created as a \`(new)\` artifact in this spec. References to nonexistent task-local artifacts are a blocking REVISE.]
13382
13347
  - **Sizing & review level:** [Size and review level appropriate for the work?]
13383
- - **Subtask breakdown:** [Only flag genuinely oversized specs (12+ implementation steps, OR 5+ truly independent deliverables that could ship separately). Do NOT flag a coherent vertical change just because it touches multiple packages. When borderline, prefer leaving the task whole.]
13384
13348
  - **User comment coverage:** [Were all user comments addressed? Every user comment must be reflected in the spec \u2014 missing coverage is a blocking REVISE]
13385
13349
 
13386
13350
  ### Suggestions
13387
13351
  - [Optional improvements, not blocking]
13388
13352
  \`\`\`
13389
13353
 
13390
- ## Spec Review \u2014 Undersplit Task Detection
13391
-
13392
- When reviewing specs, assess whether the task should have been broken into subtasks. The bar for splitting is high \u2014 most tasks should remain whole. Coordination overhead (worktrees, dependency wiring, merge sequencing) is real, so splitting must clearly pay for itself.
13393
-
13394
- **Default position:** do NOT flag undersplit. Reach for it only when the spec is genuinely oversized.
13395
-
13396
- **Flag as REVISE only when ALL of the following are true:**
13397
- - The spec has 12+ implementation steps, OR contains 5+ clearly independent deliverables that could be shipped separately by different people
13398
- - The deliverables are NOT a coherent vertical change (a single feature touching core + dashboard + tests is coherent \u2014 do not split it)
13399
- - Splitting would produce children that each have \u22654 steps and a clearly distinct scope
13400
-
13401
- If the spec is borderline (under those thresholds, or arguable), put your splitting suggestion in the **Suggestions** section instead of REVISE \u2014 the planner can take it or leave it.
13402
-
13403
- **How to flag an undersplit task (only when the criteria above are met):**
13404
- Say explicitly: "This task should be broken into subtasks because [specific reason]."
13405
- Recommend the number of child tasks (2-5) and what each should cover.
13406
- Instruct the planner to:
13407
- 1. Use the \`fn_task_create\` tool to create 2\u20135 child tasks from the oversized spec
13408
- 2. Do NOT write a parent PROMPT.md \u2014 the parent will be closed automatically after children are created
13409
- (Not write a parent PROMPT.md is also unacceptable.)
13410
- 3. Make each child cover one coherent deliverable with clear scope boundaries
13411
-
13412
- Example REVISE feedback for a genuinely oversized task:
13413
- "This task has 14 steps and contains 4 independent deliverables (engine integration, dashboard UI, CLI command, migration tooling) that could ship separately. Use fn_task_create to split into: (1) engine logic, (2) dashboard UI, (3) CLI integration, (4) migration tooling. Do not write a parent PROMPT."
13414
-
13415
- **Do NOT flag if ANY of these apply:**
13416
- - The spec has 11 or fewer implementation steps
13417
- - Steps are sequential and tightly coupled (e.g., a pipeline where each step depends on the previous)
13418
- - The task is a vertical change touching multiple packages for one coherent feature (typical in this monorepo)
13419
- - The task is a bug fix, regardless of how many files it touches
13420
- - Splitting would create coordination overhead that exceeds the benefit
13421
-
13422
13354
  ## Plan Granularity
13423
13355
 
13424
13356
  When reviewing plans, assess whether the approach achieves the step's OUTCOMES \u2014
@@ -13720,7 +13652,6 @@ submissions to a high bar for correctness, security, and maintainability.
13720
13652
  - **Surface enumeration:** [For bug-fix specs, is \`## Surface Enumeration\` present and does it enumerate the relevant providers/bridges/execution paths, desktop + mobile breakpoints/platforms, empty/undefined/duplicate/populated states, and shared hooks/components/modules/helpers? Missing or incomplete coverage is a blocking REVISE.]
13721
13653
  - **Documentation completeness:** [Must Update / Check If Affected sections present?]
13722
13654
  - **Sizing & review level:** [Size and review level appropriate for the work?]
13723
- - **Subtask breakdown:** [Were complex tasks appropriately split into 2-5 child tasks?]
13724
13655
  - **User comment coverage:** [Were all user comments addressed? Every user comment must be reflected in the spec \u2014 missing coverage is a blocking REVISE]
13725
13656
  - **Security considerations:** [Are security-sensitive areas identified and addressed?]
13726
13657
  - **Edge case coverage:** [Does the spec account for failure modes and boundary conditions?]
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/quality",
3
- "version": "0.1.11-beta.4",
3
+ "version": "0.1.11-beta.5",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -5863,6 +5863,7 @@ var tasks = projectSchema.table("tasks", {
5863
5863
  mergerModelId: text("merger_model_id"),
5864
5864
  mergerThinkingLevel: text("merger_thinking_level"),
5865
5865
  mergeRetries: integer("merge_retries"),
5866
+ aiMergeReviewReconciliation: text("ai_merge_review_reconciliation"),
5866
5867
  workflowStepRetries: integer("workflow_step_retries"),
5867
5868
  resumeLimboCount: integer("resume_limbo_count").default(0),
5868
5869
  graphResumeRetryCount: integer("graph_resume_retry_count").default(0),
@@ -5985,7 +5986,8 @@ var tasks = projectSchema.table("tasks", {
5985
5986
  sourceIssueClosedAt: text("source_issue_closed_at"),
5986
5987
  mergeDetails: jsonb("merge_details"),
5987
5988
  workspaceWorktrees: jsonb("workspace_worktrees"),
5988
- breakIntoSubtasks: integer("break_into_subtasks").default(0),
5989
+ // FNXC:RepositoryScope 2026-08-20-23:07: explicit task intent must survive PostgreSQL reads independently of acquired worktrees.
5990
+ repositoryScope: jsonb("repository_scope"),
5989
5991
  noCommitsExpected: integer("no_commits_expected").default(0),
5990
5992
  enabledWorkflowSteps: jsonb("enabled_workflow_steps").default([]),
5991
5993
  modifiedFiles: jsonb("modified_files").default([]),
@@ -8327,7 +8329,8 @@ var centralActivityLog = centralSchema.table("central_activity_log", {
8327
8329
  foreignKey({ columns: [t.projectId], foreignColumns: [projects.id] }).onDelete("cascade"),
8328
8330
  index("idxActivityLogTimestamp").on(t.timestamp),
8329
8331
  index("idxActivityLogType").on(t.type),
8330
- index("idxActivityLogProjectId").on(t.projectId)
8332
+ index("idxActivityLogProjectId").on(t.projectId),
8333
+ index("idxCentralActivityLogTaskIdTimestamp").on(t.taskId, t.timestamp)
8331
8334
  ]);
8332
8335
  var centralSettings = centralSchema.table("central_settings", {
8333
8336
  id: integer("id").primaryKey(),
@@ -9105,6 +9108,15 @@ var DEFAULT_GLOBAL_SETTINGS = {
9105
9108
  opt in before Fusion replaces its own binary and bounces the process under them.
9106
9109
  */
9107
9110
  autoUpdateAndRestart: false,
9111
+ /*
9112
+ FNXC:UpdateAutomation 2026-08-21-02:17:
9113
+ Fresh installations require separate opt-ins for unattended installation and
9114
+ restart. The legacy combined switch remains false and is only a fallback for
9115
+ older persisted settings.
9116
+ */
9117
+ /* FNXC:UpdateAutomation 2026-08-21-02:48: Keep these schema keys unset because defaults merge into effective settings and `undefined` is distinct from explicit false. */
9118
+ autoUpdateEnabled: void 0,
9119
+ autoRestartAfterUpdate: void 0,
9108
9120
  autoReloadOnVersionChange: true,
9109
9121
  githubTrackingDefaultRepo: void 0,
9110
9122
  reportRoadmapDedupeEnabled: void 0,
@@ -9115,6 +9127,13 @@ var DEFAULT_GLOBAL_SETTINGS = {
9115
9127
  gitlabApiBaseUrl: void 0,
9116
9128
  gitlabAuthToken: void 0,
9117
9129
  gitlabAuthTokenType: void 0,
9130
+ jiraEnabled: void 0,
9131
+ jiraBaseUrl: void 0,
9132
+ jiraApiBaseUrl: void 0,
9133
+ jiraAuthEmail: void 0,
9134
+ jiraAuthTokenSecretKey: void 0,
9135
+ jiraAuthTokenSecretScope: void 0,
9136
+ jiraBranchNameTemplate: void 0,
9118
9137
  modelOnboardingComplete: void 0,
9119
9138
  useClaudeCli: void 0,
9120
9139
  useDroidCli: void 0,
@@ -9605,6 +9624,13 @@ var DEFAULT_PROJECT_SETTINGS = {
9605
9624
  gitlabApiBaseUrl: void 0,
9606
9625
  gitlabAuthToken: void 0,
9607
9626
  gitlabAuthTokenType: void 0,
9627
+ jiraEnabled: void 0,
9628
+ jiraBaseUrl: void 0,
9629
+ jiraApiBaseUrl: void 0,
9630
+ jiraAuthEmail: void 0,
9631
+ jiraAuthTokenSecretKey: void 0,
9632
+ jiraAuthTokenSecretScope: void 0,
9633
+ jiraBranchNameTemplate: void 0,
9608
9634
  gitlabCommentOnDone: false,
9609
9635
  gitlabCommentTemplate: void 0,
9610
9636
  gitlabCloseSourceIssueOnDone: false,
@@ -12401,17 +12427,6 @@ var BUILTIN_MOVED_WORKFLOW_SETTINGS = [
12401
12427
  }
12402
12428
  ];
12403
12429
  var BUILTIN_TRIAGE_POLICY_SETTINGS = [
12404
- {
12405
- id: "triageProactiveSubtaskSplittingEnabled",
12406
- name: "Triage proactive subtask splitting",
12407
- type: "boolean",
12408
- default: true,
12409
- /*
12410
- * FNXC:TriagePolicy 2026-07-04-00:00:
12411
- * Operators need a workflow/project policy switch that disables automatic large-task splitting without weakening explicit `breakIntoSubtasks: true` requests. Keep the default enabled to preserve existing triage behavior for workflows that have no stored override.
12412
- */
12413
- description: "Enable automatic large-task splitting guidance during triage. Turn off to split only when breakIntoSubtasks is explicitly requested."
12414
- },
12415
12430
  {
12416
12431
  id: "triageSizeSmallMaxHours",
12417
12432
  name: "Triage size S max hours",
@@ -12433,48 +12448,6 @@ var BUILTIN_TRIAGE_POLICY_SETTINGS = [
12433
12448
  default: 8,
12434
12449
  description: "Upper hour boundary for Size L triage guidance; larger work should split as XL."
12435
12450
  },
12436
- {
12437
- id: "triageSubtaskStepThreshold",
12438
- name: "Triage subtask step threshold",
12439
- type: "number",
12440
- default: 7,
12441
- description: "Implementation-step count above which triage should consider splitting an M/L task."
12442
- },
12443
- {
12444
- id: "triageSubtaskLargeStepSignal",
12445
- name: "Triage large-step signal",
12446
- type: "number",
12447
- default: 9,
12448
- description: "Planned step count that is a broad-scope decomposition signal for Size L tasks."
12449
- },
12450
- {
12451
- id: "triageSubtaskAdditiveStepSignal",
12452
- name: "Triage additive step signal",
12453
- type: "number",
12454
- default: 12,
12455
- description: "Implementation-step count that independently signals possible partitioning."
12456
- },
12457
- {
12458
- id: "triageSubtaskPackageThreshold",
12459
- name: "Triage package/module threshold",
12460
- type: "number",
12461
- default: 3,
12462
- description: "Distinct package/module count above which triage should consider splitting coherent M/L work."
12463
- },
12464
- {
12465
- id: "triageSubtaskFileScopeThreshold",
12466
- name: "Triage file-scope threshold",
12467
- type: "number",
12468
- default: 20,
12469
- description: "File Scope entry count that signals broad work likely needing partitioning."
12470
- },
12471
- {
12472
- id: "triageSubtaskRemediationBatchThreshold",
12473
- name: "Triage remediation batch threshold",
12474
- type: "number",
12475
- default: 30,
12476
- description: "Quantified remediation batch size that strongly signals subsystem partitioning."
12477
- },
12478
12451
  {
12479
12452
  id: "triageNoCommitsDecisionVerbs",
12480
12453
  name: "Triage no-commits decision verbs",
@@ -13259,20 +13232,12 @@ When you plan to list a task in the \`## Dependencies\` section, first call \`fn
13259
13232
  Use what you learn \u2014 file scope, APIs, patterns, completion criteria \u2014 to make the new spec accurate: reference the right paths, avoid conflicting assumptions, and describe what the dependency must deliver before this task starts.
13260
13233
  If the dependency task has no PROMPT.md yet (not yet specified), note that in the Dependencies section.
13261
13234
 
13262
- ## Triage subtask breakdown
13263
- When the task includes \`breakIntoSubtasks: true\`, first decide whether it should be split.
13264
-
13265
- - Split only when the work is meaningfully decomposable into 2-5 independently executable child tasks.
13266
- - If splitting: use the \`fn_task_create\` tool to create child tasks in triage, include clear descriptions and dependencies between them, then stop. Do NOT write a PROMPT.md for the parent task.
13267
- - **CRITICAL \u2014 subtask dependencies:** the parent task is deleted once all subtasks are created. \`dependencies\` on a new subtask may ONLY reference sibling subtasks you have created earlier in this same split (or unrelated existing tasks). **Never depend on the parent task's id.** If a child conceptually "waits for the parent's remaining work", create a sibling subtask that does that work and depend on the sibling instead. The \`fn_task_create\` tool will reject parent-id dependencies with an error.
13268
- - If not splitting: proceed with a normal PROMPT.md specification.
13269
-
13270
- ## Proactive Subtask Breakdown for M/L Tasks
13235
+ ## One-task planning
13271
13236
  <!--
13272
- FNXC:TriagePolicy 2026-07-04-00:00:
13273
- Workflow policy can disable proactive oversized-task splitting for operators who want triage to keep large tasks whole by default. Explicit user-requested \`breakIntoSubtasks: true\` remains governed by the mandatory breakdown section above and must not be weakened by this toggle.
13237
+ FNXC:TriagePlanning 2026-08-20-17:42:
13238
+ Complexity never authorizes replacing a requested task with child tasks. Preserve the original task ID, dependencies, and documents; write one complete, detailed PROMPT.md with focused steps, realistic scope, risks, and quality gates.
13274
13239
  -->
13275
- {{triageProactiveSubtaskSplittingEnabled}}
13240
+ Create independent follow-up tasks only when they are genuinely separate work, never as an automatic decomposition of the task being planned.
13276
13241
 
13277
13242
  ## Triage tools
13278
13243
  You have these extra tools during triage:
@@ -13331,7 +13296,7 @@ This bullet is the planning-side half of the artifact-pipeline contract; keep it
13331
13296
  -->
13332
13297
  - For tasks with a visible UI surface or whose deliverable is visual/media (wireframes, mockups, designs, diagrams, screenshots, screen recordings, HTML prototypes, PDF exports), include an explicit step or checkbox instructing the executor to save each deliverable to disk and register it via \`fn_artifact_register\` (images via \`type="image", path=...\`; recordings via \`type="video", path=...\`; HTML mockups via \`type="document", mimeType="text/html"\` for live gallery previews; PDFs via \`type="document", mimeType="application/pdf", path=...\`) so it appears in the dashboard Artifacts gallery
13333
13298
  - Include a "Do NOT" section with project-appropriate guardrails
13334
- - Size assessment: S (<{{triageSizeSmallMaxHours}}h), M ({{triageSizeSmallMaxHours}}-{{triageSizeMediumMaxHours}}h), L ({{triageSizeMediumMaxHours}}-{{triageSizeLargeMaxHours}}h). Split if XL ({{triageSizeLargeMaxHours}}h+)
13299
+ - Size assessment: S (<{{triageSizeSmallMaxHours}}h), M ({{triageSizeSmallMaxHours}}-{{triageSizeMediumMaxHours}}h), L ({{triageSizeMediumMaxHours}}-{{triageSizeLargeMaxHours}}h+). Keep every requested task as one detailed plan regardless of size.
13335
13300
  - Review level scoring: Blast radius (0-2), Pattern novelty (0-2), Security (0-2), Reversibility (0-2)
13336
13301
  - 0-1 \u2192 Level 0, 2-3 \u2192 Level 1, 4-5 \u2192 Level 2, 6-8 \u2192 Level 3
13337
13302
 
@@ -13346,11 +13311,11 @@ FNXC:WorkflowRouting 2026-06-22-17:24:
13346
13311
  Standard triage must not infer workflow changes from task type. Agents preserve the project default unless the user names or explicitly requests a workflow, or the agent created the task; no-commit decisions use the header marker without automatic workflow selection.
13347
13312
  -->
13348
13313
  ## Workflow Routing
13349
- - Keep the project default workflow (\`{{triageDefaultWorkflowId}}\`) unless the user explicitly requested a specific workflow for this task or subtask, or you created that task yourself.
13314
+ - Keep the project default workflow (\`{{triageDefaultWorkflowId}}\`) unless the user explicitly requested a specific workflow for this task, or you created that task yourself.
13350
13315
  - Do NOT call \`fn_workflow_select\` or pass \`workflow_id\` to \`fn_task_create\` just because a task looks like investigation, audit, research, operational routing/coordination, decision-only work, or standard coding work.
13351
13316
  - When you create a task via \`fn_task_create\` or \`fn_delegate_task\`, you may select that created task's workflow with \`workflow_id\` at create time or \`fn_workflow_select\` afterward; do not move a task you did not create unless the user asked.
13352
13317
  - For decision-only tasks ({{triageNoCommitsDecisionVerbs}}) or other no-code tasks, set \`**No commits expected:** true\` in the PROMPT.md header when the no-commits criteria above are met; this is a header marker only and does not select \`{{triageDecisionOnlyWorkflowId}}\` or any custom investigation workflow by itself.
13353
- - If the user explicitly asks for a workflow, call \`fn_workflow_list\` to discover valid IDs, then use \`fn_workflow_select\` to set the workflow on the current task or pass \`workflow_id\` to \`fn_task_create\` when creating a requested subtask.
13318
+ - If the user explicitly asks for a workflow, call \`fn_workflow_list\` to discover valid IDs, then use \`fn_workflow_select\` to set the workflow on the current task or pass \`workflow_id\` to \`fn_task_create\` when creating requested independent work.
13354
13319
 
13355
13320
  ## Plan Review
13356
13321
 
@@ -13497,45 +13462,12 @@ Concrete examples:
13497
13462
  - **Documentation completeness:** [Must Update / Check If Affected sections present?]
13498
13463
  - **Dangling task-document references:** [No \`.fusion/tasks/<id>/<file>\` path is cited in Context, Steps, or File Scope unless the file exists or is explicitly created as a \`(new)\` artifact in this spec. References to nonexistent task-local artifacts are a blocking REVISE.]
13499
13464
  - **Sizing & review level:** [Size and review level appropriate for the work?]
13500
- - **Subtask breakdown:** [Only flag genuinely oversized specs (12+ implementation steps, OR 5+ truly independent deliverables that could ship separately). Do NOT flag a coherent vertical change just because it touches multiple packages. When borderline, prefer leaving the task whole.]
13501
13465
  - **User comment coverage:** [Were all user comments addressed? Every user comment must be reflected in the spec \u2014 missing coverage is a blocking REVISE]
13502
13466
 
13503
13467
  ### Suggestions
13504
13468
  - [Optional improvements, not blocking]
13505
13469
  \`\`\`
13506
13470
 
13507
- ## Spec Review \u2014 Undersplit Task Detection
13508
-
13509
- When reviewing specs, assess whether the task should have been broken into subtasks. The bar for splitting is high \u2014 most tasks should remain whole. Coordination overhead (worktrees, dependency wiring, merge sequencing) is real, so splitting must clearly pay for itself.
13510
-
13511
- **Default position:** do NOT flag undersplit. Reach for it only when the spec is genuinely oversized.
13512
-
13513
- **Flag as REVISE only when ALL of the following are true:**
13514
- - The spec has 12+ implementation steps, OR contains 5+ clearly independent deliverables that could be shipped separately by different people
13515
- - The deliverables are NOT a coherent vertical change (a single feature touching core + dashboard + tests is coherent \u2014 do not split it)
13516
- - Splitting would produce children that each have \u22654 steps and a clearly distinct scope
13517
-
13518
- If the spec is borderline (under those thresholds, or arguable), put your splitting suggestion in the **Suggestions** section instead of REVISE \u2014 the planner can take it or leave it.
13519
-
13520
- **How to flag an undersplit task (only when the criteria above are met):**
13521
- Say explicitly: "This task should be broken into subtasks because [specific reason]."
13522
- Recommend the number of child tasks (2-5) and what each should cover.
13523
- Instruct the planner to:
13524
- 1. Use the \`fn_task_create\` tool to create 2\u20135 child tasks from the oversized spec
13525
- 2. Do NOT write a parent PROMPT.md \u2014 the parent will be closed automatically after children are created
13526
- (Not write a parent PROMPT.md is also unacceptable.)
13527
- 3. Make each child cover one coherent deliverable with clear scope boundaries
13528
-
13529
- Example REVISE feedback for a genuinely oversized task:
13530
- "This task has 14 steps and contains 4 independent deliverables (engine integration, dashboard UI, CLI command, migration tooling) that could ship separately. Use fn_task_create to split into: (1) engine logic, (2) dashboard UI, (3) CLI integration, (4) migration tooling. Do not write a parent PROMPT."
13531
-
13532
- **Do NOT flag if ANY of these apply:**
13533
- - The spec has 11 or fewer implementation steps
13534
- - Steps are sequential and tightly coupled (e.g., a pipeline where each step depends on the previous)
13535
- - The task is a vertical change touching multiple packages for one coherent feature (typical in this monorepo)
13536
- - The task is a bug fix, regardless of how many files it touches
13537
- - Splitting would create coordination overhead that exceeds the benefit
13538
-
13539
13471
  ## Plan Granularity
13540
13472
 
13541
13473
  When reviewing plans, assess whether the approach achieves the step's OUTCOMES \u2014
@@ -13837,7 +13769,6 @@ submissions to a high bar for correctness, security, and maintainability.
13837
13769
  - **Surface enumeration:** [For bug-fix specs, is \`## Surface Enumeration\` present and does it enumerate the relevant providers/bridges/execution paths, desktop + mobile breakpoints/platforms, empty/undefined/duplicate/populated states, and shared hooks/components/modules/helpers? Missing or incomplete coverage is a blocking REVISE.]
13838
13770
  - **Documentation completeness:** [Must Update / Check If Affected sections present?]
13839
13771
  - **Sizing & review level:** [Size and review level appropriate for the work?]
13840
- - **Subtask breakdown:** [Were complex tasks appropriately split into 2-5 child tasks?]
13841
13772
  - **User comment coverage:** [Were all user comments addressed? Every user comment must be reflected in the spec \u2014 missing coverage is a blocking REVISE]
13842
13773
  - **Security considerations:** [Are security-sensitive areas identified and addressed?]
13843
13774
  - **Edge case coverage:** [Does the spec account for failure modes and boundary conditions?]
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/reports",
3
- "version": "0.1.55-beta.4",
3
+ "version": "0.1.55-beta.5",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {