@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.
- package/dist/bin.js +4051 -4144
- package/dist/child-process-worker.js +2681 -1719
- package/dist/client/.vite/manifest.json +261 -261
- package/dist/client/assets/{AgentDetailView-CH6GtXl9.js → AgentDetailView-CSK_Rnlk.js} +1 -1
- package/dist/client/assets/{AgentPermissionPolicyEditor-YTEpMhUx.js → AgentPermissionPolicyEditor-kG44Adcm.js} +1 -1
- package/dist/client/assets/{AgentsView-XOHHDo4a.js → AgentsView-ClKwKWnU.js} +3 -3
- package/dist/client/assets/ChatView-DoOqgkPX.js +13 -0
- package/dist/client/assets/{CommandCenter-BsH-R15f.js → CommandCenter-CJxvPbgn.js} +1 -1
- package/dist/client/assets/{DevServerView-CKOa-lkc.js → DevServerView-C4nyLONX.js} +1 -1
- package/dist/client/assets/{DirectoryPicker-DHUYTE-j.js → DirectoryPicker-BIvXWIB5.js} +1 -1
- package/dist/client/assets/{DocumentsView-BPzrxeP-.js → DocumentsView-DH_aZysM.js} +1 -1
- package/dist/client/assets/{EvalsView-DojCiv47.js → EvalsView-klRK-GJQ.js} +1 -1
- package/dist/client/assets/{ExperimentalAgentOnboardingModal-DuurZ8qe.js → ExperimentalAgentOnboardingModal-CgBmukIm.js} +1 -1
- package/dist/client/assets/{GoalsView-DDWPXcG1.js → GoalsView-ysh3X2x6.js} +1 -1
- package/dist/client/assets/{InsightsView-CgkMOD1A.js → InsightsView-BbMjCu7J.js} +1 -1
- package/dist/client/assets/{MemoryView-Cj49_z7O.js → MemoryView-B3IgA8Bx.js} +1 -1
- package/dist/client/assets/{PiExtensionsManager-B_rRJiOd.js → PiExtensionsManager-CZlIw7C3.js} +1 -1
- package/dist/client/assets/{PluginManager-Dxwi88oY.js → PluginManager-vy0YZ2Nx.js} +1 -1
- package/dist/client/assets/{PullRequestView-z-5v2hQT.js → PullRequestView-DhhsJV8I.js} +1 -1
- package/dist/client/assets/{ReportModal-DmOPEYWp.js → ReportModal-CQMn4i1y.js} +1 -1
- package/dist/client/assets/{ResearchView-D90Jbzbx.js → ResearchView-CVwfs4l3.js} +1 -1
- package/dist/client/assets/{SecretsView-CSyjZl5L.js → SecretsView-CrJfHle9.js} +1 -1
- package/dist/client/assets/{SessionTerminal-Bwb8nGmU.js → SessionTerminal-BRI8W1-G.js} +1 -1
- package/dist/client/assets/{SettingsModal-CJof1Ett.js → SettingsModal-B6U5Umru.js} +1 -1
- package/dist/client/assets/SettingsModal-h1A_aFqD.js +21 -0
- package/dist/client/assets/{SettingsTextareaRow-BYchnHfW.js → SettingsTextareaRow-O7-u9uMC.js} +1 -1
- package/dist/client/assets/{SetupWizardModal-NqV-erVf.js → SetupWizardModal-nXfJp8cA.js} +2 -2
- package/dist/client/assets/{SkillsView-BUrkIJ-p.js → SkillsView-CoWAjvWU.js} +1 -1
- package/dist/client/assets/{WorkflowNodeEditor-DcPk2A1Z.js → WorkflowNodeEditor-BFMM3RF_.js} +2 -2
- package/dist/client/assets/{agent-import-generation-X16OLfrL.js → agent-import-generation-BqDmtTur.js} +1 -1
- package/dist/client/assets/{agentsOrgChartLayout-BhPIXckU.js → agentsOrgChartLayout-C4cLqlV6.js} +1 -1
- package/dist/client/assets/app-BBSLJDbV.js +13 -0
- package/dist/client/assets/app-BKwOvuxE.js +5 -0
- package/dist/client/assets/app-Bvr57EZQ.js +5 -0
- package/dist/client/assets/app-C_PTWuI1.js +13 -0
- package/dist/client/assets/app-DKx18PHE.js +13 -0
- package/dist/client/assets/app-DRW5hIgr.js +13 -0
- package/dist/client/assets/app-DwvelD-n.js +13 -0
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-WArMtdqy.js → architectureDiagram-3BPJPVTR-CdxcwdRe.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-emScogdV.js → blockDiagram-GPEHLZMM-CfQrRfHR.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-CBY7-E0T.js → c4Diagram-AAUBKEIU-Cx7-2SOm.js} +1 -1
- package/dist/client/assets/channel-B4WN1jC_.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-Bcai1sOm.js → chunk-2J33WTMH-D8jvgP3M.js} +1 -1
- package/dist/client/assets/{chunk-4BX2VUAB-hjiKRusj.js → chunk-4BX2VUAB-B5tBx_s_.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-DpO9nIb0.js → chunk-55IACEB6-C-F-HQ5Z.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-B9JanA0o.js → chunk-727SXJPM-BP8Ln-8C.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-D6zdnEUE.js → chunk-AQP2D5EJ-DMnTmRmn.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-CRkrJ51d.js → chunk-FMBD7UC4-D_YdfnNc.js} +1 -1
- package/dist/client/assets/{chunk-ND2GUHAM-BLQsKt7a.js → chunk-ND2GUHAM-CULXyuXq.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-MCOlJ723.js → chunk-QZHKN3VN-CT1BWEJL.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-CKE8RSOv.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-CKE8RSOv.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-Cv1XmKKG.js → cose-bilkent-S5V4N54A-M-3DXa6e.js} +1 -1
- package/dist/client/assets/{dagre-BM42HDAG-flnNS_RW.js → dagre-BM42HDAG-Bsiqvroz.js} +1 -1
- package/dist/client/assets/{dashboard-view-CrV-rL9Q.js → dashboard-view-BEBh_Ei5.js} +1 -1
- package/dist/client/assets/{dashboard-view-Dz7kqcJc.js → dashboard-view-Bo_gFjdO.js} +1 -1
- package/dist/client/assets/{dashboard-view-CC1aH-lp.js → dashboard-view-CnFFG3cW.js} +1 -1
- package/dist/client/assets/{dashboard-view-DEAYb_TZ.js → dashboard-view-DAHn20ph.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-Z3S7b_6_.js → diagram-2AECGRRQ-CZiHoXo5.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-BAZHdMFq.js → diagram-5GNKFQAL-BoJVz4Or.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-C2y3S8F0.js → diagram-KO2AKTUF-DivGQuAL.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-Bfz0_IvT.js → diagram-LMA3HP47-DkMK7OJp.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-BBmSQsTI.js → diagram-OG6HWLK6-DFFvRcpW.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-DnpdQi66.js → erDiagram-TEJ5UH35--217vrom.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-IybTR_zf.js → flowDiagram-I6XJVG4X-CQgWO3xf.js} +1 -1
- package/dist/client/assets/{folder-open-Dntm63x4.js → folder-open-DR6cRcNR.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-DEQOe2E9.js → ganttDiagram-6RSMTGT7-BjDMUrS3.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-BOKc-h63.js → gitGraphDiagram-PVQCEYII-gKUcDnln.js} +1 -1
- package/dist/client/assets/index-Dki2LBAp.css +1 -0
- package/dist/client/assets/index-oxnX59eO.js +2774 -0
- package/dist/client/assets/{infoDiagram-5YYISTIA-LqaYIdbj.js → infoDiagram-5YYISTIA-BA91T8S5.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-a8qd512s.js → ishikawaDiagram-YF4QCWOH-0BY5xe-c.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-BgoNyeiy.js → journeyDiagram-JHISSGLW-B_OwenbQ.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-Bqwow7D3.js → kanban-definition-UN3LZRKU-GLabUTKp.js} +1 -1
- package/dist/client/assets/{mermaid.core-B2zD934i.js → mermaid.core-BXo4rxYI.js} +4 -4
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-CCTOigWu.js → mindmap-definition-RKZ34NQL-DZl6LPoE.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-Bq5DtXKR.js → pieDiagram-4H26LBE5-DtHq-4py.js} +1 -1
- package/dist/client/assets/{puzzle-VhTPiCit.js → puzzle-OVm-I1L4.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-CGMP3nUx.js → quadrantDiagram-W4KKPZXB-BdjXhd5d.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-Ckeu_szu.js → requirementDiagram-4Y6WPE33-BoFVjELN.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-SWbBDD4d.js → sankeyDiagram-5OEKKPKP-B0qyJh-P.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-CiJrmL_G.js → sequenceDiagram-3UESZ5HK-ByY62Eqp.js} +1 -1
- package/dist/client/assets/{shield-alert-BBDlP6A5.js → shield-alert-CDy69fl7.js} +1 -1
- package/dist/client/assets/{standing-instructions-template-viu_kgDX.js → standing-instructions-template-BsnnRlwm.js} +1 -1
- package/dist/client/assets/{stateDiagram-AJRCARHV-DTCzK5Gt.js → stateDiagram-AJRCARHV-CwJ-_Phi.js} +1 -1
- package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-BIGAwFTT.js → stateDiagram-v2-BHNVJYJU-Cfvhq8mV.js} +1 -1
- package/dist/client/assets/{timeline-definition-PNZ67QCA-BQZEFEug.js → timeline-definition-PNZ67QCA-Co8VfGN9.js} +1 -1
- package/dist/client/assets/{upload-D5w3Ehwp.js → upload-CkqDbEeE.js} +1 -1
- package/dist/client/assets/{useDiscoveredSkillsCache-D6zMSIaS.js → useDiscoveredSkillsCache-BHUasRiZ.js} +1 -1
- package/dist/client/assets/{users-Bohihi_o.js → users-B8DkpbXD.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN-DnHguEv8.js → vennDiagram-CIIHVFJN-XSJteQrL.js} +1 -1
- package/dist/client/assets/{wardley-L42UT6IY-BOqYltGN.js → wardley-L42UT6IY-Btc0FRfF.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-Re0Ery2M.js → wardleyDiagram-YWT4CUSO--IcDNmrf.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-CnVq21b2.js → xychartDiagram-2RQKCTM6-CZW93G6X.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/client/version.json +1 -1
- package/dist/droid-cli/package.json +1 -1
- package/dist/extension.js +3085 -2130
- package/dist/migrations/0000_initial.sql +3 -0
- package/dist/migrations/0061_fn_066_activity_log_task_id_index.sql +7 -0
- package/dist/migrations/0062_remove_task_subtask_splitting.sql +2 -0
- package/dist/migrations/0063_fn_090_ai_merge_review_reconciliation.sql +2 -0
- package/dist/migrations/0064_fn_094_task_repository_scope.sql +2 -0
- package/dist/pi-claude-cli/package.json +1 -1
- package/dist/plugin-sdk/index.d.ts +276 -186
- package/dist/plugin-sdk/index.js +35 -104
- package/dist/plugins/fusion-plugin-acp-runtime/bundled.js +35 -104
- package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-claude-runtime/bundled.js +35 -104
- package/dist/plugins/fusion-plugin-claude-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-cli-printing-press/bundled.js +35 -104
- package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
- package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +35 -104
- package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
- package/dist/plugins/fusion-plugin-cursor-runtime/bundled.js +35 -104
- package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-dependency-graph/bundled.js +35 -104
- package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
- package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +35 -104
- package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-grok-runtime/bundled.js +35 -104
- package/dist/plugins/fusion-plugin-grok-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-hermes-runtime/bundled.js +35 -104
- package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-linear-import/bundled.js +35 -104
- package/dist/plugins/fusion-plugin-linear-import/package.json +1 -1
- package/dist/plugins/fusion-plugin-omp-runtime/bundled.js +35 -104
- package/dist/plugins/fusion-plugin-omp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-openclaw-runtime/bundled.js +35 -104
- package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-paperclip-runtime/bundled.js +35 -104
- package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-quality/bundled.js +35 -104
- package/dist/plugins/fusion-plugin-quality/package.json +1 -1
- package/dist/plugins/fusion-plugin-reports/bundled.js +35 -104
- package/dist/plugins/fusion-plugin-reports/package.json +1 -1
- package/dist/plugins/fusion-plugin-roadmap/bundled.js +35 -104
- package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
- package/dist/plugins/fusion-plugin-todos/bundled.js +35 -104
- package/dist/plugins/fusion-plugin-todos/package.json +1 -1
- package/dist/plugins/fusion-plugin-whatsapp-chat/bundled.js +35 -104
- package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
- package/package.json +1 -1
- package/skill/fusion/references/extension-tools.md +2 -1
- package/skill/fusion/references/fusion-capabilities.md +1 -1
- package/skill/fusion/references/task-structure.md +1 -1
- package/skill/fusion/workflows/specifications.md +2 -2
- package/dist/client/assets/ChatView-gH7QX3TI.js +0 -13
- package/dist/client/assets/SettingsModal-BAzmMjr9.js +0 -21
- package/dist/client/assets/app-B-TfWH9b.js +0 -5
- package/dist/client/assets/app-B2RDV_-t.js +0 -13
- package/dist/client/assets/app-CDo0mF2S.js +0 -5
- package/dist/client/assets/app-Cc18kAQS.js +0 -13
- package/dist/client/assets/app-DFF79EUn.js +0 -13
- package/dist/client/assets/app-DSeFHxgj.js +0 -13
- package/dist/client/assets/app-Ducr0y6r.js +0 -13
- package/dist/client/assets/channel-CP2ySYs0.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-DKkOBtzM.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-DKkOBtzM.js +0 -1
- package/dist/client/assets/index-DXpztECA.css +0 -1
- package/dist/client/assets/index-I32FijPT.js +0 -2821
|
@@ -5835,6 +5835,7 @@ var tasks = projectSchema.table("tasks", {
|
|
|
5835
5835
|
mergerModelId: text("merger_model_id"),
|
|
5836
5836
|
mergerThinkingLevel: text("merger_thinking_level"),
|
|
5837
5837
|
mergeRetries: integer("merge_retries"),
|
|
5838
|
+
aiMergeReviewReconciliation: text("ai_merge_review_reconciliation"),
|
|
5838
5839
|
workflowStepRetries: integer("workflow_step_retries"),
|
|
5839
5840
|
resumeLimboCount: integer("resume_limbo_count").default(0),
|
|
5840
5841
|
graphResumeRetryCount: integer("graph_resume_retry_count").default(0),
|
|
@@ -5957,7 +5958,8 @@ var tasks = projectSchema.table("tasks", {
|
|
|
5957
5958
|
sourceIssueClosedAt: text("source_issue_closed_at"),
|
|
5958
5959
|
mergeDetails: jsonb("merge_details"),
|
|
5959
5960
|
workspaceWorktrees: jsonb("workspace_worktrees"),
|
|
5960
|
-
|
|
5961
|
+
// FNXC:RepositoryScope 2026-08-20-23:07: explicit task intent must survive PostgreSQL reads independently of acquired worktrees.
|
|
5962
|
+
repositoryScope: jsonb("repository_scope"),
|
|
5961
5963
|
noCommitsExpected: integer("no_commits_expected").default(0),
|
|
5962
5964
|
enabledWorkflowSteps: jsonb("enabled_workflow_steps").default([]),
|
|
5963
5965
|
modifiedFiles: jsonb("modified_files").default([]),
|
|
@@ -8277,7 +8279,8 @@ var centralActivityLog = centralSchema.table("central_activity_log", {
|
|
|
8277
8279
|
foreignKey({ columns: [t.projectId], foreignColumns: [projects.id] }).onDelete("cascade"),
|
|
8278
8280
|
index("idxActivityLogTimestamp").on(t.timestamp),
|
|
8279
8281
|
index("idxActivityLogType").on(t.type),
|
|
8280
|
-
index("idxActivityLogProjectId").on(t.projectId)
|
|
8282
|
+
index("idxActivityLogProjectId").on(t.projectId),
|
|
8283
|
+
index("idxCentralActivityLogTaskIdTimestamp").on(t.taskId, t.timestamp)
|
|
8281
8284
|
]);
|
|
8282
8285
|
var centralSettings = centralSchema.table("central_settings", {
|
|
8283
8286
|
id: integer("id").primaryKey(),
|
|
@@ -8985,6 +8988,15 @@ var DEFAULT_GLOBAL_SETTINGS = {
|
|
|
8985
8988
|
opt in before Fusion replaces its own binary and bounces the process under them.
|
|
8986
8989
|
*/
|
|
8987
8990
|
autoUpdateAndRestart: false,
|
|
8991
|
+
/*
|
|
8992
|
+
FNXC:UpdateAutomation 2026-08-21-02:17:
|
|
8993
|
+
Fresh installations require separate opt-ins for unattended installation and
|
|
8994
|
+
restart. The legacy combined switch remains false and is only a fallback for
|
|
8995
|
+
older persisted settings.
|
|
8996
|
+
*/
|
|
8997
|
+
/* 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. */
|
|
8998
|
+
autoUpdateEnabled: void 0,
|
|
8999
|
+
autoRestartAfterUpdate: void 0,
|
|
8988
9000
|
autoReloadOnVersionChange: true,
|
|
8989
9001
|
githubTrackingDefaultRepo: void 0,
|
|
8990
9002
|
reportRoadmapDedupeEnabled: void 0,
|
|
@@ -8995,6 +9007,13 @@ var DEFAULT_GLOBAL_SETTINGS = {
|
|
|
8995
9007
|
gitlabApiBaseUrl: void 0,
|
|
8996
9008
|
gitlabAuthToken: void 0,
|
|
8997
9009
|
gitlabAuthTokenType: void 0,
|
|
9010
|
+
jiraEnabled: void 0,
|
|
9011
|
+
jiraBaseUrl: void 0,
|
|
9012
|
+
jiraApiBaseUrl: void 0,
|
|
9013
|
+
jiraAuthEmail: void 0,
|
|
9014
|
+
jiraAuthTokenSecretKey: void 0,
|
|
9015
|
+
jiraAuthTokenSecretScope: void 0,
|
|
9016
|
+
jiraBranchNameTemplate: void 0,
|
|
8998
9017
|
modelOnboardingComplete: void 0,
|
|
8999
9018
|
useClaudeCli: void 0,
|
|
9000
9019
|
useDroidCli: void 0,
|
|
@@ -9485,6 +9504,13 @@ var DEFAULT_PROJECT_SETTINGS = {
|
|
|
9485
9504
|
gitlabApiBaseUrl: void 0,
|
|
9486
9505
|
gitlabAuthToken: void 0,
|
|
9487
9506
|
gitlabAuthTokenType: void 0,
|
|
9507
|
+
jiraEnabled: void 0,
|
|
9508
|
+
jiraBaseUrl: void 0,
|
|
9509
|
+
jiraApiBaseUrl: void 0,
|
|
9510
|
+
jiraAuthEmail: void 0,
|
|
9511
|
+
jiraAuthTokenSecretKey: void 0,
|
|
9512
|
+
jiraAuthTokenSecretScope: void 0,
|
|
9513
|
+
jiraBranchNameTemplate: void 0,
|
|
9488
9514
|
gitlabCommentOnDone: false,
|
|
9489
9515
|
gitlabCommentTemplate: void 0,
|
|
9490
9516
|
gitlabCloseSourceIssueOnDone: false,
|
|
@@ -12281,17 +12307,6 @@ var BUILTIN_MOVED_WORKFLOW_SETTINGS = [
|
|
|
12281
12307
|
}
|
|
12282
12308
|
];
|
|
12283
12309
|
var BUILTIN_TRIAGE_POLICY_SETTINGS = [
|
|
12284
|
-
{
|
|
12285
|
-
id: "triageProactiveSubtaskSplittingEnabled",
|
|
12286
|
-
name: "Triage proactive subtask splitting",
|
|
12287
|
-
type: "boolean",
|
|
12288
|
-
default: true,
|
|
12289
|
-
/*
|
|
12290
|
-
* FNXC:TriagePolicy 2026-07-04-00:00:
|
|
12291
|
-
* 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.
|
|
12292
|
-
*/
|
|
12293
|
-
description: "Enable automatic large-task splitting guidance during triage. Turn off to split only when breakIntoSubtasks is explicitly requested."
|
|
12294
|
-
},
|
|
12295
12310
|
{
|
|
12296
12311
|
id: "triageSizeSmallMaxHours",
|
|
12297
12312
|
name: "Triage size S max hours",
|
|
@@ -12313,48 +12328,6 @@ var BUILTIN_TRIAGE_POLICY_SETTINGS = [
|
|
|
12313
12328
|
default: 8,
|
|
12314
12329
|
description: "Upper hour boundary for Size L triage guidance; larger work should split as XL."
|
|
12315
12330
|
},
|
|
12316
|
-
{
|
|
12317
|
-
id: "triageSubtaskStepThreshold",
|
|
12318
|
-
name: "Triage subtask step threshold",
|
|
12319
|
-
type: "number",
|
|
12320
|
-
default: 7,
|
|
12321
|
-
description: "Implementation-step count above which triage should consider splitting an M/L task."
|
|
12322
|
-
},
|
|
12323
|
-
{
|
|
12324
|
-
id: "triageSubtaskLargeStepSignal",
|
|
12325
|
-
name: "Triage large-step signal",
|
|
12326
|
-
type: "number",
|
|
12327
|
-
default: 9,
|
|
12328
|
-
description: "Planned step count that is a broad-scope decomposition signal for Size L tasks."
|
|
12329
|
-
},
|
|
12330
|
-
{
|
|
12331
|
-
id: "triageSubtaskAdditiveStepSignal",
|
|
12332
|
-
name: "Triage additive step signal",
|
|
12333
|
-
type: "number",
|
|
12334
|
-
default: 12,
|
|
12335
|
-
description: "Implementation-step count that independently signals possible partitioning."
|
|
12336
|
-
},
|
|
12337
|
-
{
|
|
12338
|
-
id: "triageSubtaskPackageThreshold",
|
|
12339
|
-
name: "Triage package/module threshold",
|
|
12340
|
-
type: "number",
|
|
12341
|
-
default: 3,
|
|
12342
|
-
description: "Distinct package/module count above which triage should consider splitting coherent M/L work."
|
|
12343
|
-
},
|
|
12344
|
-
{
|
|
12345
|
-
id: "triageSubtaskFileScopeThreshold",
|
|
12346
|
-
name: "Triage file-scope threshold",
|
|
12347
|
-
type: "number",
|
|
12348
|
-
default: 20,
|
|
12349
|
-
description: "File Scope entry count that signals broad work likely needing partitioning."
|
|
12350
|
-
},
|
|
12351
|
-
{
|
|
12352
|
-
id: "triageSubtaskRemediationBatchThreshold",
|
|
12353
|
-
name: "Triage remediation batch threshold",
|
|
12354
|
-
type: "number",
|
|
12355
|
-
default: 30,
|
|
12356
|
-
description: "Quantified remediation batch size that strongly signals subsystem partitioning."
|
|
12357
|
-
},
|
|
12358
12331
|
{
|
|
12359
12332
|
id: "triageNoCommitsDecisionVerbs",
|
|
12360
12333
|
name: "Triage no-commits decision verbs",
|
|
@@ -13139,20 +13112,12 @@ When you plan to list a task in the \`## Dependencies\` section, first call \`fn
|
|
|
13139
13112
|
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.
|
|
13140
13113
|
If the dependency task has no PROMPT.md yet (not yet specified), note that in the Dependencies section.
|
|
13141
13114
|
|
|
13142
|
-
##
|
|
13143
|
-
When the task includes \`breakIntoSubtasks: true\`, first decide whether it should be split.
|
|
13144
|
-
|
|
13145
|
-
- Split only when the work is meaningfully decomposable into 2-5 independently executable child tasks.
|
|
13146
|
-
- 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.
|
|
13147
|
-
- **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.
|
|
13148
|
-
- If not splitting: proceed with a normal PROMPT.md specification.
|
|
13149
|
-
|
|
13150
|
-
## Proactive Subtask Breakdown for M/L Tasks
|
|
13115
|
+
## One-task planning
|
|
13151
13116
|
<!--
|
|
13152
|
-
FNXC:
|
|
13153
|
-
|
|
13117
|
+
FNXC:TriagePlanning 2026-08-20-17:42:
|
|
13118
|
+
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.
|
|
13154
13119
|
-->
|
|
13155
|
-
|
|
13120
|
+
Create independent follow-up tasks only when they are genuinely separate work, never as an automatic decomposition of the task being planned.
|
|
13156
13121
|
|
|
13157
13122
|
## Triage tools
|
|
13158
13123
|
You have these extra tools during triage:
|
|
@@ -13211,7 +13176,7 @@ This bullet is the planning-side half of the artifact-pipeline contract; keep it
|
|
|
13211
13176
|
-->
|
|
13212
13177
|
- 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
|
|
13213
13178
|
- Include a "Do NOT" section with project-appropriate guardrails
|
|
13214
|
-
- Size assessment: S (<{{triageSizeSmallMaxHours}}h), M ({{triageSizeSmallMaxHours}}-{{triageSizeMediumMaxHours}}h), L ({{triageSizeMediumMaxHours}}-{{triageSizeLargeMaxHours}}h).
|
|
13179
|
+
- Size assessment: S (<{{triageSizeSmallMaxHours}}h), M ({{triageSizeSmallMaxHours}}-{{triageSizeMediumMaxHours}}h), L ({{triageSizeMediumMaxHours}}-{{triageSizeLargeMaxHours}}h+). Keep every requested task as one detailed plan regardless of size.
|
|
13215
13180
|
- Review level scoring: Blast radius (0-2), Pattern novelty (0-2), Security (0-2), Reversibility (0-2)
|
|
13216
13181
|
- 0-1 \u2192 Level 0, 2-3 \u2192 Level 1, 4-5 \u2192 Level 2, 6-8 \u2192 Level 3
|
|
13217
13182
|
|
|
@@ -13226,11 +13191,11 @@ FNXC:WorkflowRouting 2026-06-22-17:24:
|
|
|
13226
13191
|
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.
|
|
13227
13192
|
-->
|
|
13228
13193
|
## Workflow Routing
|
|
13229
|
-
- Keep the project default workflow (\`{{triageDefaultWorkflowId}}\`) unless the user explicitly requested a specific workflow for this task
|
|
13194
|
+
- Keep the project default workflow (\`{{triageDefaultWorkflowId}}\`) unless the user explicitly requested a specific workflow for this task, or you created that task yourself.
|
|
13230
13195
|
- 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.
|
|
13231
13196
|
- 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.
|
|
13232
13197
|
- 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.
|
|
13233
|
-
- 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
|
|
13198
|
+
- 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.
|
|
13234
13199
|
|
|
13235
13200
|
## Plan Review
|
|
13236
13201
|
|
|
@@ -13377,45 +13342,12 @@ Concrete examples:
|
|
|
13377
13342
|
- **Documentation completeness:** [Must Update / Check If Affected sections present?]
|
|
13378
13343
|
- **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.]
|
|
13379
13344
|
- **Sizing & review level:** [Size and review level appropriate for the work?]
|
|
13380
|
-
- **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.]
|
|
13381
13345
|
- **User comment coverage:** [Were all user comments addressed? Every user comment must be reflected in the spec \u2014 missing coverage is a blocking REVISE]
|
|
13382
13346
|
|
|
13383
13347
|
### Suggestions
|
|
13384
13348
|
- [Optional improvements, not blocking]
|
|
13385
13349
|
\`\`\`
|
|
13386
13350
|
|
|
13387
|
-
## Spec Review \u2014 Undersplit Task Detection
|
|
13388
|
-
|
|
13389
|
-
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.
|
|
13390
|
-
|
|
13391
|
-
**Default position:** do NOT flag undersplit. Reach for it only when the spec is genuinely oversized.
|
|
13392
|
-
|
|
13393
|
-
**Flag as REVISE only when ALL of the following are true:**
|
|
13394
|
-
- The spec has 12+ implementation steps, OR contains 5+ clearly independent deliverables that could be shipped separately by different people
|
|
13395
|
-
- The deliverables are NOT a coherent vertical change (a single feature touching core + dashboard + tests is coherent \u2014 do not split it)
|
|
13396
|
-
- Splitting would produce children that each have \u22654 steps and a clearly distinct scope
|
|
13397
|
-
|
|
13398
|
-
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.
|
|
13399
|
-
|
|
13400
|
-
**How to flag an undersplit task (only when the criteria above are met):**
|
|
13401
|
-
Say explicitly: "This task should be broken into subtasks because [specific reason]."
|
|
13402
|
-
Recommend the number of child tasks (2-5) and what each should cover.
|
|
13403
|
-
Instruct the planner to:
|
|
13404
|
-
1. Use the \`fn_task_create\` tool to create 2\u20135 child tasks from the oversized spec
|
|
13405
|
-
2. Do NOT write a parent PROMPT.md \u2014 the parent will be closed automatically after children are created
|
|
13406
|
-
(Not write a parent PROMPT.md is also unacceptable.)
|
|
13407
|
-
3. Make each child cover one coherent deliverable with clear scope boundaries
|
|
13408
|
-
|
|
13409
|
-
Example REVISE feedback for a genuinely oversized task:
|
|
13410
|
-
"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."
|
|
13411
|
-
|
|
13412
|
-
**Do NOT flag if ANY of these apply:**
|
|
13413
|
-
- The spec has 11 or fewer implementation steps
|
|
13414
|
-
- Steps are sequential and tightly coupled (e.g., a pipeline where each step depends on the previous)
|
|
13415
|
-
- The task is a vertical change touching multiple packages for one coherent feature (typical in this monorepo)
|
|
13416
|
-
- The task is a bug fix, regardless of how many files it touches
|
|
13417
|
-
- Splitting would create coordination overhead that exceeds the benefit
|
|
13418
|
-
|
|
13419
13351
|
## Plan Granularity
|
|
13420
13352
|
|
|
13421
13353
|
When reviewing plans, assess whether the approach achieves the step's OUTCOMES \u2014
|
|
@@ -13717,7 +13649,6 @@ submissions to a high bar for correctness, security, and maintainability.
|
|
|
13717
13649
|
- **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.]
|
|
13718
13650
|
- **Documentation completeness:** [Must Update / Check If Affected sections present?]
|
|
13719
13651
|
- **Sizing & review level:** [Size and review level appropriate for the work?]
|
|
13720
|
-
- **Subtask breakdown:** [Were complex tasks appropriately split into 2-5 child tasks?]
|
|
13721
13652
|
- **User comment coverage:** [Were all user comments addressed? Every user comment must be reflected in the spec \u2014 missing coverage is a blocking REVISE]
|
|
13722
13653
|
- **Security considerations:** [Are security-sensitive areas identified and addressed?]
|
|
13723
13654
|
- **Edge case coverage:** [Does the spec account for failure modes and boundary conditions?]
|
|
@@ -5835,6 +5835,7 @@ var tasks = projectSchema.table("tasks", {
|
|
|
5835
5835
|
mergerModelId: text("merger_model_id"),
|
|
5836
5836
|
mergerThinkingLevel: text("merger_thinking_level"),
|
|
5837
5837
|
mergeRetries: integer("merge_retries"),
|
|
5838
|
+
aiMergeReviewReconciliation: text("ai_merge_review_reconciliation"),
|
|
5838
5839
|
workflowStepRetries: integer("workflow_step_retries"),
|
|
5839
5840
|
resumeLimboCount: integer("resume_limbo_count").default(0),
|
|
5840
5841
|
graphResumeRetryCount: integer("graph_resume_retry_count").default(0),
|
|
@@ -5957,7 +5958,8 @@ var tasks = projectSchema.table("tasks", {
|
|
|
5957
5958
|
sourceIssueClosedAt: text("source_issue_closed_at"),
|
|
5958
5959
|
mergeDetails: jsonb("merge_details"),
|
|
5959
5960
|
workspaceWorktrees: jsonb("workspace_worktrees"),
|
|
5960
|
-
|
|
5961
|
+
// FNXC:RepositoryScope 2026-08-20-23:07: explicit task intent must survive PostgreSQL reads independently of acquired worktrees.
|
|
5962
|
+
repositoryScope: jsonb("repository_scope"),
|
|
5961
5963
|
noCommitsExpected: integer("no_commits_expected").default(0),
|
|
5962
5964
|
enabledWorkflowSteps: jsonb("enabled_workflow_steps").default([]),
|
|
5963
5965
|
modifiedFiles: jsonb("modified_files").default([]),
|
|
@@ -8277,7 +8279,8 @@ var centralActivityLog = centralSchema.table("central_activity_log", {
|
|
|
8277
8279
|
foreignKey({ columns: [t.projectId], foreignColumns: [projects.id] }).onDelete("cascade"),
|
|
8278
8280
|
index("idxActivityLogTimestamp").on(t.timestamp),
|
|
8279
8281
|
index("idxActivityLogType").on(t.type),
|
|
8280
|
-
index("idxActivityLogProjectId").on(t.projectId)
|
|
8282
|
+
index("idxActivityLogProjectId").on(t.projectId),
|
|
8283
|
+
index("idxCentralActivityLogTaskIdTimestamp").on(t.taskId, t.timestamp)
|
|
8281
8284
|
]);
|
|
8282
8285
|
var centralSettings = centralSchema.table("central_settings", {
|
|
8283
8286
|
id: integer("id").primaryKey(),
|
|
@@ -8985,6 +8988,15 @@ var DEFAULT_GLOBAL_SETTINGS = {
|
|
|
8985
8988
|
opt in before Fusion replaces its own binary and bounces the process under them.
|
|
8986
8989
|
*/
|
|
8987
8990
|
autoUpdateAndRestart: false,
|
|
8991
|
+
/*
|
|
8992
|
+
FNXC:UpdateAutomation 2026-08-21-02:17:
|
|
8993
|
+
Fresh installations require separate opt-ins for unattended installation and
|
|
8994
|
+
restart. The legacy combined switch remains false and is only a fallback for
|
|
8995
|
+
older persisted settings.
|
|
8996
|
+
*/
|
|
8997
|
+
/* 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. */
|
|
8998
|
+
autoUpdateEnabled: void 0,
|
|
8999
|
+
autoRestartAfterUpdate: void 0,
|
|
8988
9000
|
autoReloadOnVersionChange: true,
|
|
8989
9001
|
githubTrackingDefaultRepo: void 0,
|
|
8990
9002
|
reportRoadmapDedupeEnabled: void 0,
|
|
@@ -8995,6 +9007,13 @@ var DEFAULT_GLOBAL_SETTINGS = {
|
|
|
8995
9007
|
gitlabApiBaseUrl: void 0,
|
|
8996
9008
|
gitlabAuthToken: void 0,
|
|
8997
9009
|
gitlabAuthTokenType: void 0,
|
|
9010
|
+
jiraEnabled: void 0,
|
|
9011
|
+
jiraBaseUrl: void 0,
|
|
9012
|
+
jiraApiBaseUrl: void 0,
|
|
9013
|
+
jiraAuthEmail: void 0,
|
|
9014
|
+
jiraAuthTokenSecretKey: void 0,
|
|
9015
|
+
jiraAuthTokenSecretScope: void 0,
|
|
9016
|
+
jiraBranchNameTemplate: void 0,
|
|
8998
9017
|
modelOnboardingComplete: void 0,
|
|
8999
9018
|
useClaudeCli: void 0,
|
|
9000
9019
|
useDroidCli: void 0,
|
|
@@ -9485,6 +9504,13 @@ var DEFAULT_PROJECT_SETTINGS = {
|
|
|
9485
9504
|
gitlabApiBaseUrl: void 0,
|
|
9486
9505
|
gitlabAuthToken: void 0,
|
|
9487
9506
|
gitlabAuthTokenType: void 0,
|
|
9507
|
+
jiraEnabled: void 0,
|
|
9508
|
+
jiraBaseUrl: void 0,
|
|
9509
|
+
jiraApiBaseUrl: void 0,
|
|
9510
|
+
jiraAuthEmail: void 0,
|
|
9511
|
+
jiraAuthTokenSecretKey: void 0,
|
|
9512
|
+
jiraAuthTokenSecretScope: void 0,
|
|
9513
|
+
jiraBranchNameTemplate: void 0,
|
|
9488
9514
|
gitlabCommentOnDone: false,
|
|
9489
9515
|
gitlabCommentTemplate: void 0,
|
|
9490
9516
|
gitlabCloseSourceIssueOnDone: false,
|
|
@@ -12281,17 +12307,6 @@ var BUILTIN_MOVED_WORKFLOW_SETTINGS = [
|
|
|
12281
12307
|
}
|
|
12282
12308
|
];
|
|
12283
12309
|
var BUILTIN_TRIAGE_POLICY_SETTINGS = [
|
|
12284
|
-
{
|
|
12285
|
-
id: "triageProactiveSubtaskSplittingEnabled",
|
|
12286
|
-
name: "Triage proactive subtask splitting",
|
|
12287
|
-
type: "boolean",
|
|
12288
|
-
default: true,
|
|
12289
|
-
/*
|
|
12290
|
-
* FNXC:TriagePolicy 2026-07-04-00:00:
|
|
12291
|
-
* 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.
|
|
12292
|
-
*/
|
|
12293
|
-
description: "Enable automatic large-task splitting guidance during triage. Turn off to split only when breakIntoSubtasks is explicitly requested."
|
|
12294
|
-
},
|
|
12295
12310
|
{
|
|
12296
12311
|
id: "triageSizeSmallMaxHours",
|
|
12297
12312
|
name: "Triage size S max hours",
|
|
@@ -12313,48 +12328,6 @@ var BUILTIN_TRIAGE_POLICY_SETTINGS = [
|
|
|
12313
12328
|
default: 8,
|
|
12314
12329
|
description: "Upper hour boundary for Size L triage guidance; larger work should split as XL."
|
|
12315
12330
|
},
|
|
12316
|
-
{
|
|
12317
|
-
id: "triageSubtaskStepThreshold",
|
|
12318
|
-
name: "Triage subtask step threshold",
|
|
12319
|
-
type: "number",
|
|
12320
|
-
default: 7,
|
|
12321
|
-
description: "Implementation-step count above which triage should consider splitting an M/L task."
|
|
12322
|
-
},
|
|
12323
|
-
{
|
|
12324
|
-
id: "triageSubtaskLargeStepSignal",
|
|
12325
|
-
name: "Triage large-step signal",
|
|
12326
|
-
type: "number",
|
|
12327
|
-
default: 9,
|
|
12328
|
-
description: "Planned step count that is a broad-scope decomposition signal for Size L tasks."
|
|
12329
|
-
},
|
|
12330
|
-
{
|
|
12331
|
-
id: "triageSubtaskAdditiveStepSignal",
|
|
12332
|
-
name: "Triage additive step signal",
|
|
12333
|
-
type: "number",
|
|
12334
|
-
default: 12,
|
|
12335
|
-
description: "Implementation-step count that independently signals possible partitioning."
|
|
12336
|
-
},
|
|
12337
|
-
{
|
|
12338
|
-
id: "triageSubtaskPackageThreshold",
|
|
12339
|
-
name: "Triage package/module threshold",
|
|
12340
|
-
type: "number",
|
|
12341
|
-
default: 3,
|
|
12342
|
-
description: "Distinct package/module count above which triage should consider splitting coherent M/L work."
|
|
12343
|
-
},
|
|
12344
|
-
{
|
|
12345
|
-
id: "triageSubtaskFileScopeThreshold",
|
|
12346
|
-
name: "Triage file-scope threshold",
|
|
12347
|
-
type: "number",
|
|
12348
|
-
default: 20,
|
|
12349
|
-
description: "File Scope entry count that signals broad work likely needing partitioning."
|
|
12350
|
-
},
|
|
12351
|
-
{
|
|
12352
|
-
id: "triageSubtaskRemediationBatchThreshold",
|
|
12353
|
-
name: "Triage remediation batch threshold",
|
|
12354
|
-
type: "number",
|
|
12355
|
-
default: 30,
|
|
12356
|
-
description: "Quantified remediation batch size that strongly signals subsystem partitioning."
|
|
12357
|
-
},
|
|
12358
12331
|
{
|
|
12359
12332
|
id: "triageNoCommitsDecisionVerbs",
|
|
12360
12333
|
name: "Triage no-commits decision verbs",
|
|
@@ -13139,20 +13112,12 @@ When you plan to list a task in the \`## Dependencies\` section, first call \`fn
|
|
|
13139
13112
|
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.
|
|
13140
13113
|
If the dependency task has no PROMPT.md yet (not yet specified), note that in the Dependencies section.
|
|
13141
13114
|
|
|
13142
|
-
##
|
|
13143
|
-
When the task includes \`breakIntoSubtasks: true\`, first decide whether it should be split.
|
|
13144
|
-
|
|
13145
|
-
- Split only when the work is meaningfully decomposable into 2-5 independently executable child tasks.
|
|
13146
|
-
- 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.
|
|
13147
|
-
- **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.
|
|
13148
|
-
- If not splitting: proceed with a normal PROMPT.md specification.
|
|
13149
|
-
|
|
13150
|
-
## Proactive Subtask Breakdown for M/L Tasks
|
|
13115
|
+
## One-task planning
|
|
13151
13116
|
<!--
|
|
13152
|
-
FNXC:
|
|
13153
|
-
|
|
13117
|
+
FNXC:TriagePlanning 2026-08-20-17:42:
|
|
13118
|
+
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.
|
|
13154
13119
|
-->
|
|
13155
|
-
|
|
13120
|
+
Create independent follow-up tasks only when they are genuinely separate work, never as an automatic decomposition of the task being planned.
|
|
13156
13121
|
|
|
13157
13122
|
## Triage tools
|
|
13158
13123
|
You have these extra tools during triage:
|
|
@@ -13211,7 +13176,7 @@ This bullet is the planning-side half of the artifact-pipeline contract; keep it
|
|
|
13211
13176
|
-->
|
|
13212
13177
|
- 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
|
|
13213
13178
|
- Include a "Do NOT" section with project-appropriate guardrails
|
|
13214
|
-
- Size assessment: S (<{{triageSizeSmallMaxHours}}h), M ({{triageSizeSmallMaxHours}}-{{triageSizeMediumMaxHours}}h), L ({{triageSizeMediumMaxHours}}-{{triageSizeLargeMaxHours}}h).
|
|
13179
|
+
- Size assessment: S (<{{triageSizeSmallMaxHours}}h), M ({{triageSizeSmallMaxHours}}-{{triageSizeMediumMaxHours}}h), L ({{triageSizeMediumMaxHours}}-{{triageSizeLargeMaxHours}}h+). Keep every requested task as one detailed plan regardless of size.
|
|
13215
13180
|
- Review level scoring: Blast radius (0-2), Pattern novelty (0-2), Security (0-2), Reversibility (0-2)
|
|
13216
13181
|
- 0-1 \u2192 Level 0, 2-3 \u2192 Level 1, 4-5 \u2192 Level 2, 6-8 \u2192 Level 3
|
|
13217
13182
|
|
|
@@ -13226,11 +13191,11 @@ FNXC:WorkflowRouting 2026-06-22-17:24:
|
|
|
13226
13191
|
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.
|
|
13227
13192
|
-->
|
|
13228
13193
|
## Workflow Routing
|
|
13229
|
-
- Keep the project default workflow (\`{{triageDefaultWorkflowId}}\`) unless the user explicitly requested a specific workflow for this task
|
|
13194
|
+
- Keep the project default workflow (\`{{triageDefaultWorkflowId}}\`) unless the user explicitly requested a specific workflow for this task, or you created that task yourself.
|
|
13230
13195
|
- 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.
|
|
13231
13196
|
- 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.
|
|
13232
13197
|
- 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.
|
|
13233
|
-
- 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
|
|
13198
|
+
- 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.
|
|
13234
13199
|
|
|
13235
13200
|
## Plan Review
|
|
13236
13201
|
|
|
@@ -13377,45 +13342,12 @@ Concrete examples:
|
|
|
13377
13342
|
- **Documentation completeness:** [Must Update / Check If Affected sections present?]
|
|
13378
13343
|
- **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.]
|
|
13379
13344
|
- **Sizing & review level:** [Size and review level appropriate for the work?]
|
|
13380
|
-
- **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.]
|
|
13381
13345
|
- **User comment coverage:** [Were all user comments addressed? Every user comment must be reflected in the spec \u2014 missing coverage is a blocking REVISE]
|
|
13382
13346
|
|
|
13383
13347
|
### Suggestions
|
|
13384
13348
|
- [Optional improvements, not blocking]
|
|
13385
13349
|
\`\`\`
|
|
13386
13350
|
|
|
13387
|
-
## Spec Review \u2014 Undersplit Task Detection
|
|
13388
|
-
|
|
13389
|
-
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.
|
|
13390
|
-
|
|
13391
|
-
**Default position:** do NOT flag undersplit. Reach for it only when the spec is genuinely oversized.
|
|
13392
|
-
|
|
13393
|
-
**Flag as REVISE only when ALL of the following are true:**
|
|
13394
|
-
- The spec has 12+ implementation steps, OR contains 5+ clearly independent deliverables that could be shipped separately by different people
|
|
13395
|
-
- The deliverables are NOT a coherent vertical change (a single feature touching core + dashboard + tests is coherent \u2014 do not split it)
|
|
13396
|
-
- Splitting would produce children that each have \u22654 steps and a clearly distinct scope
|
|
13397
|
-
|
|
13398
|
-
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.
|
|
13399
|
-
|
|
13400
|
-
**How to flag an undersplit task (only when the criteria above are met):**
|
|
13401
|
-
Say explicitly: "This task should be broken into subtasks because [specific reason]."
|
|
13402
|
-
Recommend the number of child tasks (2-5) and what each should cover.
|
|
13403
|
-
Instruct the planner to:
|
|
13404
|
-
1. Use the \`fn_task_create\` tool to create 2\u20135 child tasks from the oversized spec
|
|
13405
|
-
2. Do NOT write a parent PROMPT.md \u2014 the parent will be closed automatically after children are created
|
|
13406
|
-
(Not write a parent PROMPT.md is also unacceptable.)
|
|
13407
|
-
3. Make each child cover one coherent deliverable with clear scope boundaries
|
|
13408
|
-
|
|
13409
|
-
Example REVISE feedback for a genuinely oversized task:
|
|
13410
|
-
"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."
|
|
13411
|
-
|
|
13412
|
-
**Do NOT flag if ANY of these apply:**
|
|
13413
|
-
- The spec has 11 or fewer implementation steps
|
|
13414
|
-
- Steps are sequential and tightly coupled (e.g., a pipeline where each step depends on the previous)
|
|
13415
|
-
- The task is a vertical change touching multiple packages for one coherent feature (typical in this monorepo)
|
|
13416
|
-
- The task is a bug fix, regardless of how many files it touches
|
|
13417
|
-
- Splitting would create coordination overhead that exceeds the benefit
|
|
13418
|
-
|
|
13419
13351
|
## Plan Granularity
|
|
13420
13352
|
|
|
13421
13353
|
When reviewing plans, assess whether the approach achieves the step's OUTCOMES \u2014
|
|
@@ -13717,7 +13649,6 @@ submissions to a high bar for correctness, security, and maintainability.
|
|
|
13717
13649
|
- **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.]
|
|
13718
13650
|
- **Documentation completeness:** [Must Update / Check If Affected sections present?]
|
|
13719
13651
|
- **Sizing & review level:** [Size and review level appropriate for the work?]
|
|
13720
|
-
- **Subtask breakdown:** [Were complex tasks appropriately split into 2-5 child tasks?]
|
|
13721
13652
|
- **User comment coverage:** [Were all user comments addressed? Every user comment must be reflected in the spec \u2014 missing coverage is a blocking REVISE]
|
|
13722
13653
|
- **Security considerations:** [Are security-sensitive areas identified and addressed?]
|
|
13723
13654
|
- **Edge case coverage:** [Does the spec account for failure modes and boundary conditions?]
|