@runfusion/fusion 0.77.0-beta.6 → 0.77.0-beta.7
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 +42309 -39335
- package/dist/child-process-worker.js +7394 -4875
- package/dist/client/.vite/manifest.json +267 -330
- package/dist/client/assets/{AgentDetailView-oyY72uSo.js → AgentDetailView-C1eh_vXv.js} +4 -4
- package/dist/client/assets/{AgentPermissionPolicyEditor-C3Qo9p1M.js → AgentPermissionPolicyEditor-CeKsO1LR.js} +2 -2
- package/dist/client/assets/{AgentsView-M2MhTIGW.js → AgentsView-BNe2ABOc.js} +4 -4
- package/dist/client/assets/{CommandCenter-CpcAt6jt.js → CommandCenter-BuREM-G1.js} +18 -18
- package/dist/client/assets/DevServerView-D0i1b-QO.js +1 -0
- package/dist/client/assets/DirectoryPicker-VOx91hQt.js +1 -0
- package/dist/client/assets/DocumentsView-CO5W_WVb.js +1 -0
- package/dist/client/assets/EvalsView-BqSINSrZ.js +1 -0
- package/dist/client/assets/ExperimentalAgentOnboardingModal-DEcFgONi.js +1 -0
- package/dist/client/assets/{GoalsView-DPj59B3l.js → GoalsView-DZ57wXmJ.js} +1 -1
- package/dist/client/assets/{InsightsView-QLJNkKJp.js → InsightsView-DSWfXG7Q.js} +3 -3
- package/dist/client/assets/{MemoryView-CDCS-1ig.js → MemoryView-BEX10uhl.js} +1 -1
- package/dist/client/assets/{PiExtensionsManager-DktXXrmF.js → PiExtensionsManager-DcAmXXoR.js} +2 -2
- package/dist/client/assets/PluginManager-BU0omQUv.js +1 -0
- package/dist/client/assets/{PullRequestView-CkObT6e3.js → PullRequestView-B-JL_8Kk.js} +2 -2
- package/dist/client/assets/{ReportModal-B5LTdDgi.js → ReportModal-DxggF_RH.js} +5 -5
- package/dist/client/assets/{ResearchView-CryFrV8l.js → ResearchView-CnwTXfQO.js} +1 -1
- package/dist/client/assets/{SecretsView-9YcNW_fo.js → SecretsView-BDvzsLFz.js} +1 -1
- package/dist/client/assets/SettingsModal-801eFQ9u.js +21 -0
- package/dist/client/assets/{SettingsModal-llkoaJev.js → SettingsModal-BZHeQ3ED.js} +1 -1
- package/dist/client/assets/{SettingsTextareaRow-B_Legu-A.js → SettingsTextareaRow-B0rTuelr.js} +1 -1
- package/dist/client/assets/SetupWizardModal-CoExPwIn.js +2 -0
- package/dist/client/assets/{SkillsView-CSeauwIw.js → SkillsView-WVP25LPj.js} +1 -1
- package/dist/client/assets/WorkflowNodeEditor-pCMyKcnS.js +8 -0
- package/dist/client/assets/{agent-import-generation-CttglSmZ.js → agent-import-generation-M_hKtjgN.js} +1 -1
- package/dist/client/assets/{agentsOrgChartLayout-f-9mwRbD.js → agentsOrgChartLayout-DjvIMhFD.js} +1 -1
- package/dist/client/assets/{app-C_PTWuI1.js → app-BOvA34XN.js} +3 -3
- package/dist/client/assets/{app-BBSLJDbV.js → app-Bic4iWXQ.js} +3 -3
- package/dist/client/assets/{app-Bvr57EZQ.js → app-BlbH7Tir.js} +2 -2
- package/dist/client/assets/{app-DwvelD-n.js → app-C6TctczU.js} +3 -3
- package/dist/client/assets/{app-DRW5hIgr.js → app-D3qZmEIu.js} +3 -3
- package/dist/client/assets/{app-BKwOvuxE.js → app-DLnMkUt5.js} +2 -2
- package/dist/client/assets/{app-DKx18PHE.js → app-mNy0DeDM.js} +3 -3
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-DA_Hm_di.js → architectureDiagram-3BPJPVTR-CkzEm8i9.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-JF7K8CcV.js → blockDiagram-GPEHLZMM-Dc-dUMjY.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-DN-wklCP.js → c4Diagram-AAUBKEIU-DnYjsrR0.js} +1 -1
- package/dist/client/assets/channel-CxQ40s_U.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-ChtjU8Cu.js → chunk-2J33WTMH-0E1GEFEr.js} +1 -1
- package/dist/client/assets/{chunk-4BX2VUAB-dJL0n3nn.js → chunk-4BX2VUAB-Dj5oZd51.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-Bfg-QB9A.js → chunk-55IACEB6-DfNT0s8E.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-BHPPwYUS.js → chunk-727SXJPM-BnFjhiIQ.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-DIIpPUQN.js → chunk-AQP2D5EJ-DR84wSqR.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-D230R32b.js → chunk-FMBD7UC4-IjByNOrR.js} +1 -1
- package/dist/client/assets/{chunk-ND2GUHAM-0Lhp5CRv.js → chunk-ND2GUHAM-By0q_jZm.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-BxbHBfKJ.js → chunk-QZHKN3VN-BELcl3N5.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-C2ARdiRL.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-C2ARdiRL.js +1 -0
- package/dist/client/assets/{common-13IRj_PO.js → common-BsNuuNOe.js} +1 -1
- package/dist/client/assets/{common-BBynATth.js → common-CASsTuSW.js} +1 -1
- package/dist/client/assets/{common-BG-vw0tL.js → common-CfyFt5OG.js} +1 -1
- package/dist/client/assets/{common-DSo46rnH.js → common-DS98trLj.js} +1 -1
- package/dist/client/assets/common-DeoHWJCq.js +1 -0
- package/dist/client/assets/common-PpMdoH5r.js +1 -0
- package/dist/client/assets/{common-vpHuuvkd.js → common-cN--mrmm.js} +1 -1
- package/dist/client/assets/{cose-bilkent-S5V4N54A-3vEwhfYz.js → cose-bilkent-S5V4N54A-D4cCw9-_.js} +1 -1
- package/dist/client/assets/{dagre-BM42HDAG-Br44UsdY.js → dagre-BM42HDAG-JJp5dVeY.js} +1 -1
- package/dist/client/assets/dashboard-view-6zPJm9zC.js +1 -0
- package/dist/client/assets/{dashboard-view-_EglxMDl.js → dashboard-view-Bl9CPhxE.js} +1 -1
- package/dist/client/assets/{dashboard-view-BldxxYfz.js → dashboard-view-C5Nt8cvY.js} +1 -1
- package/dist/client/assets/{dashboard-view-CcPcELPx.js → dashboard-view-MAC_LHDX.js} +2 -2
- package/dist/client/assets/{diagram-2AECGRRQ-CLNxbHUP.js → diagram-2AECGRRQ-D4L7j_t_.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-D3cNAeQH.js → diagram-5GNKFQAL-VAGFaXqG.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-DkX7h6to.js → diagram-KO2AKTUF-hqXSggfW.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-6iQIiYUr.js → diagram-LMA3HP47-B3eAIuy8.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-Caje3229.js → diagram-OG6HWLK6-BGufp0RK.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-BkU-1HB1.js → erDiagram-TEJ5UH35-DplXdx8w.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-BRx3V6RE.js → flowDiagram-I6XJVG4X-C1Ms2bko.js} +1 -1
- package/dist/client/assets/{folder-open-BaSOBfk2.js → folder-open-nMraSDXu.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-D9f1kH3t.js → ganttDiagram-6RSMTGT7-DVgxMtXb.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-CQwmZcRd.js → gitGraphDiagram-PVQCEYII-DH2_n0J8.js} +1 -1
- package/dist/client/assets/index-BJc-A7eB.css +1 -0
- package/dist/client/assets/index-CBFPgFTp.js +2787 -0
- package/dist/client/assets/{infoDiagram-5YYISTIA-DYWBkGjG.js → infoDiagram-5YYISTIA-DmZdWVcU.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-Df0Nzvh4.js → ishikawaDiagram-YF4QCWOH-DsEIHSXr.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-bSvrZSyZ.js → journeyDiagram-JHISSGLW-CsfIWmu1.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-yHJ101M8.js → kanban-definition-UN3LZRKU-CQKqeZvc.js} +1 -1
- package/dist/client/assets/{mermaid.core-Bc_0VLJw.js → mermaid.core-DkC_dr4-.js} +4 -4
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-DWRnMguM.js → mindmap-definition-RKZ34NQL-RnmE-NUe.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-Ds-DEOqr.js → pieDiagram-4H26LBE5-DPu6FPc4.js} +1 -1
- package/dist/client/assets/{puzzle-CdYF81IT.js → puzzle-DwhHOf32.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-Bz-j2fkf.js → quadrantDiagram-W4KKPZXB-CYbypO2p.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-BaQ_PaZ-.js → requirementDiagram-4Y6WPE33-DFk1vK_N.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-pUCz8V4-.js → sankeyDiagram-5OEKKPKP-CkUY1Zzu.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-CFwUMspe.js → sequenceDiagram-3UESZ5HK-CFivaLOO.js} +1 -1
- package/dist/client/assets/{standing-instructions-template-Crocrob7.js → standing-instructions-template-BbqKGAC1.js} +2 -2
- package/dist/client/assets/{stateDiagram-AJRCARHV-CHZwo-vd.js → stateDiagram-AJRCARHV-BPeD5PwG.js} +1 -1
- package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-BTvKaIZR.js → stateDiagram-v2-BHNVJYJU-DduiCPMb.js} +1 -1
- package/dist/client/assets/{timeline-definition-PNZ67QCA-Cn3XIoz2.js → timeline-definition-PNZ67QCA-CGUNNVro.js} +1 -1
- package/dist/client/assets/{upload--GqImz6h.js → upload-BS96H1o7.js} +1 -1
- package/dist/client/assets/{users-B0h1q4x6.js → users--irrWoyU.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN-CS0FNVU_.js → vennDiagram-CIIHVFJN-CybTaJJH.js} +1 -1
- package/dist/client/assets/{wardley-L42UT6IY-DdYkfF5d.js → wardley-L42UT6IY-DSxaSCGi.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-B_rFmPCh.js → wardleyDiagram-YWT4CUSO-YFb0AxNt.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-CCoaCgmc.js → xychartDiagram-2RQKCTM6-Cv6zlMJC.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 +23565 -20733
- package/dist/migrations/0065_fn_149_review_convergence_stage.sql +3 -0
- package/dist/pi-claude-cli/package.json +1 -1
- package/dist/plugin-sdk/index.d.ts +57 -10
- package/dist/plugin-sdk/index.js +103 -33
- package/dist/plugins/fusion-plugin-acp-runtime/bundled.js +158 -36
- package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-claude-runtime/bundled.js +103 -33
- package/dist/plugins/fusion-plugin-claude-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-cli-printing-press/bundled.js +103 -33
- package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
- package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +103 -33
- package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
- package/dist/plugins/fusion-plugin-cursor-runtime/bundled.js +103 -33
- package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-dependency-graph/bundled.js +103 -33
- package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
- package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +103 -33
- package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-grok-runtime/bundled.js +103 -33
- package/dist/plugins/fusion-plugin-grok-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-hermes-runtime/bundled.js +103 -33
- package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-linear-import/bundled.js +103 -33
- package/dist/plugins/fusion-plugin-linear-import/package.json +1 -1
- package/dist/plugins/fusion-plugin-omp-runtime/bundled.js +103 -33
- package/dist/plugins/fusion-plugin-omp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-openclaw-runtime/bundled.js +103 -33
- package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-paperclip-runtime/bundled.js +103 -33
- package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-quality/bundled.js +103 -33
- package/dist/plugins/fusion-plugin-quality/package.json +1 -1
- package/dist/plugins/fusion-plugin-reports/bundled.js +103 -33
- package/dist/plugins/fusion-plugin-reports/package.json +1 -1
- package/dist/plugins/fusion-plugin-roadmap/bundled.js +103 -33
- package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
- package/dist/plugins/fusion-plugin-todos/bundled.js +103 -33
- package/dist/plugins/fusion-plugin-todos/package.json +1 -1
- package/dist/plugins/fusion-plugin-whatsapp-chat/bundled.js +103 -33
- package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
- package/package.json +1 -1
- package/skill/fusion/references/engine-tools.md +5 -5
- package/dist/client/assets/ChatView-DS4XiCm_.css +0 -1
- package/dist/client/assets/ChatView-zKrUSqiQ.js +0 -13
- package/dist/client/assets/DevServerView-CjTneoG7.js +0 -1
- package/dist/client/assets/DirectoryPicker-BY6V5HLV.js +0 -1
- package/dist/client/assets/DocumentsView-RDK56-qg.js +0 -1
- package/dist/client/assets/EvalsView-DKK4ceUW.js +0 -1
- package/dist/client/assets/ExperimentalAgentOnboardingModal-DiBPZVwC.js +0 -1
- package/dist/client/assets/PluginManager-CQ3iEFMq.js +0 -1
- package/dist/client/assets/SessionTerminal-2ZSXmOkG.css +0 -1
- package/dist/client/assets/SessionTerminal-BWsA9puD.js +0 -2
- package/dist/client/assets/SettingsModal-CL6aiXiI.js +0 -21
- package/dist/client/assets/SetupWizardModal-DLA4UAGp.js +0 -2
- package/dist/client/assets/WorkflowNodeEditor-CGgMiiWy.js +0 -8
- package/dist/client/assets/channel-CwFfFSI9.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-C8dZsxxX.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-C8dZsxxX.js +0 -1
- package/dist/client/assets/common-DbOCE-0i.js +0 -1
- package/dist/client/assets/common-DnXF4Jmj.js +0 -1
- package/dist/client/assets/dashboard-view-B0OM3KYC.js +0 -1
- package/dist/client/assets/index-B8PcG8AJ.js +0 -2774
- package/dist/client/assets/index-Dki2LBAp.css +0 -1
- package/dist/client/assets/shield-alert-4qeU3_Rm.js +0 -6
- package/dist/client/assets/useDiscoveredSkillsCache-BEHgTFai.js +0 -1
|
@@ -5881,6 +5881,8 @@ var tasks = projectSchema.table("tasks", {
|
|
|
5881
5881
|
branchConflictRecoveryCount: integer("branch_conflict_recovery_count").default(0),
|
|
5882
5882
|
reviewerContextRetryCount: integer("reviewer_context_retry_count").default(0),
|
|
5883
5883
|
reviewerFallbackRetryCount: integer("reviewer_fallback_retry_count").default(0),
|
|
5884
|
+
reviewConvergenceStage: integer("review_convergence_stage").default(0),
|
|
5885
|
+
reviewConvergenceEscalationCount: integer("review_convergence_escalation_count").default(0),
|
|
5884
5886
|
nextRecoveryAt: text("next_recovery_at"),
|
|
5885
5887
|
error: text("error"),
|
|
5886
5888
|
summary: text("summary"),
|
|
@@ -8978,6 +8980,7 @@ var DEFAULT_GLOBAL_SETTINGS = {
|
|
|
8978
8980
|
openrouterAppAttribution: void 0,
|
|
8979
8981
|
openrouterModelFilters: void 0,
|
|
8980
8982
|
openrouterProviderPreferences: void 0,
|
|
8983
|
+
orcarouterModelSync: true,
|
|
8981
8984
|
opencodeGoModelSync: true,
|
|
8982
8985
|
updateCheckEnabled: true,
|
|
8983
8986
|
fnBinaryCheckEnabled: true,
|
|
@@ -9393,6 +9396,12 @@ var DEFAULT_PROJECT_SETTINGS = {
|
|
|
9393
9396
|
executorEscalationProvider: void 0,
|
|
9394
9397
|
executorEscalationModelId: void 0,
|
|
9395
9398
|
executorEscalationNodeId: void 0,
|
|
9399
|
+
reviewConvergenceEscalationEnabled: true,
|
|
9400
|
+
reviewConvergenceEscalationProvider: void 0,
|
|
9401
|
+
reviewConvergenceEscalationModelId: void 0,
|
|
9402
|
+
reviewArbitrationEnabled: true,
|
|
9403
|
+
reviewArbitrationProvider: void 0,
|
|
9404
|
+
reviewArbitrationModelId: void 0,
|
|
9396
9405
|
/**
|
|
9397
9406
|
* FNXC:Merge 2026-06-26-00:00:
|
|
9398
9407
|
* New and unconfigured projects default AI merge to sync a dirty checked-out integration branch, restoring the legacy stash → fast-forward → restore landing behavior. Explicit persisted merger.allowDirtyLocalCheckoutSync values still win, and no existing-project migration stamps this default into storage.
|
|
@@ -12464,6 +12473,49 @@ var BUILTIN_REVIEW_REVISION_SETTINGS = [
|
|
|
12464
12473
|
default: DEFAULT_CODE_REVIEW_BLOCKING_SEVERITY,
|
|
12465
12474
|
description: 'Minimum finding severity that lets Code Review block merge. A REVISE carrying no finding at or above this level is recorded as APPROVE_WITH_NOTES and its findings are handed to the implementer. Choose "any" to block on every REVISE.'
|
|
12466
12475
|
},
|
|
12476
|
+
/*
|
|
12477
|
+
* FNXC:ReviewConvergence 2026-08-22-05:42:
|
|
12478
|
+
* FN-149 keeps recovery targets workflow-native so operators choose the cost and
|
|
12479
|
+
* capability of automatic review convergence without widening project policy.
|
|
12480
|
+
*/
|
|
12481
|
+
{
|
|
12482
|
+
id: "reviewConvergenceEscalationEnabled",
|
|
12483
|
+
name: "Review convergence escalation",
|
|
12484
|
+
type: "boolean",
|
|
12485
|
+
default: true,
|
|
12486
|
+
description: "Run one bounded alternate-model or replan recovery when a review repeats unchanged input."
|
|
12487
|
+
},
|
|
12488
|
+
{
|
|
12489
|
+
id: "reviewConvergenceEscalationProvider",
|
|
12490
|
+
name: "Review convergence escalation provider",
|
|
12491
|
+
type: "string",
|
|
12492
|
+
description: "Provider for the optional alternate-model review remediation target."
|
|
12493
|
+
},
|
|
12494
|
+
{
|
|
12495
|
+
id: "reviewConvergenceEscalationModelId",
|
|
12496
|
+
name: "Review convergence escalation model",
|
|
12497
|
+
type: "string",
|
|
12498
|
+
description: "Model for the optional alternate-model review remediation target."
|
|
12499
|
+
},
|
|
12500
|
+
{
|
|
12501
|
+
id: "reviewArbitrationEnabled",
|
|
12502
|
+
name: "Review arbitration",
|
|
12503
|
+
type: "boolean",
|
|
12504
|
+
default: true,
|
|
12505
|
+
description: "Enable bounded third-model arbitration after a review disagreement persists."
|
|
12506
|
+
},
|
|
12507
|
+
{
|
|
12508
|
+
id: "reviewArbitrationProvider",
|
|
12509
|
+
name: "Review arbitration provider",
|
|
12510
|
+
type: "string",
|
|
12511
|
+
description: "Provider for the optional review arbitration target."
|
|
12512
|
+
},
|
|
12513
|
+
{
|
|
12514
|
+
id: "reviewArbitrationModelId",
|
|
12515
|
+
name: "Review arbitration model",
|
|
12516
|
+
type: "string",
|
|
12517
|
+
description: "Model for the optional review arbitration target."
|
|
12518
|
+
},
|
|
12467
12519
|
{
|
|
12468
12520
|
id: "planReviewReplanCap",
|
|
12469
12521
|
name: "Plan Review replan cap",
|
|
@@ -12669,16 +12721,11 @@ You have tools to report progress. The board updates in real-time.
|
|
|
12669
12721
|
|
|
12670
12722
|
/*
|
|
12671
12723
|
FNXC:TaskRecommendations 2026-08-09-04:06:
|
|
12672
|
-
FN-
|
|
12673
|
-
completion boundary.
|
|
12674
|
-
|
|
12724
|
+
FN-125 requires task-execution sessions to preserve optional, non-blocking discoveries only at the
|
|
12725
|
+
accepted completion boundary. Durable Workflow Executor sessions cannot create or delegate tasks;
|
|
12726
|
+
in-scope work remains in the current task and external blockers use the honest blocked exit.
|
|
12675
12727
|
*/
|
|
12676
|
-
**Out-of-scope findings at completion:**
|
|
12677
|
-
|
|
12678
|
-
Use \`task_create\` or \`fn_delegate_task\` only when the task explicitly requires immediate filing, necessary dependency coordination, or the operator directs it. When creating multiple related tasks, declare dependencies between them:
|
|
12679
|
-
\`task_create(description="load door sounds", dependencies=[])\` \u2192 returns KB-050
|
|
12680
|
-
\`task_create(description="play sound on door open/close", dependencies=["KB-050"])\`
|
|
12681
|
-
|
|
12728
|
+
**Out-of-scope findings at completion:** This task-execution session cannot create or delegate tasks. When recommendation capture is enabled, at the final accepted \`fn_task_done(outcome="completed")\` checkpoint evaluate optional, non-blocking findings as genuine task-ready \`recommendations\` (or \`recommendations: []\` when none qualify). Each recommendation needs a stable unique \`id\`, \`title\`, \`description\`, and \`category\`; never use it for a required current-task fix, blocker, secret, executable command, reasoning transcript, or filler. Implement required in-scope work directly in this task.
|
|
12682
12729
|
**Discovered a dependency:** \`task_add_dep(task_id="KB-XXX")\` \u2014 use when you discover mid-execution that another task must be completed first. This will return a warning first \u2014 you must call again with \`confirm=true\` to proceed. Adding a dependency stops execution, discards current work, and moves the task to triage for re-specification.
|
|
12683
12730
|
|
|
12684
12731
|
## Task Documents
|
|
@@ -12750,16 +12797,16 @@ If you attempt to write to a path outside the worktree, the file tools will reje
|
|
|
12750
12797
|
FNXC:WorkflowRouting 2026-06-22-17:26:
|
|
12751
12798
|
Executors must not move the workflow of the task they are executing unless the user explicitly asked for that task's workflow. Agents remain free to set workflows on tasks they create because they are the creator for those new tasks.
|
|
12752
12799
|
-->
|
|
12753
|
-
- Do not call \`fn_workflow_select\` to change the workflow of the task you are executing; you did not create that task, the user or triage did. The only exception is when the user explicitly requested a specific workflow for this task in a steering comment, task instruction, or similar direct instruction.
|
|
12800
|
+
- Do not call \`fn_workflow_select\` to change the workflow of the task you are executing; you did not create that task, the user or triage did. The only exception is when the user explicitly requested a specific workflow for this task in a steering comment, task instruction, or similar direct instruction.
|
|
12754
12801
|
- **NEVER kill processes on port 4040.** Port 4040 is the production dashboard. Do not run \`kill\`, \`pkill\`, \`killall\`, or \`lsof -ti:4040 | xargs kill\` against it. If you need to start a test server, use \`--port 0\` for a random free port. If port 4040 is occupied, pick a different port \u2014 do NOT kill the occupant.
|
|
12755
12802
|
- Treat the File Scope in PROMPT.md as the expected starting scope, not a hard boundary when quality gates fail
|
|
12756
12803
|
- Read "Context to Read First" files before starting
|
|
12757
12804
|
- Follow the "Do NOT" section strictly
|
|
12758
12805
|
- If tests, lint, build, or typecheck fail and the fix requires touching code outside the declared File Scope, fix those failures directly and keep the repo green
|
|
12759
|
-
-
|
|
12806
|
+
- Implement mandatory and in-scope work directly in this task. Preserve optional out-of-scope follow-ups as completion recommendations.
|
|
12760
12807
|
- Update documentation listed in "Must Update" and check "Check If Affected"
|
|
12761
12808
|
- NEVER delete, remove, or gut modules, interfaces, settings, exports, or test files outside your File Scope
|
|
12762
|
-
- NEVER remove features as "cleanup" \u2014 if something seems unused,
|
|
12809
|
+
- NEVER remove features as "cleanup" \u2014 if something seems unused, record an optional completion recommendation for investigation instead
|
|
12763
12810
|
- Removing code is acceptable ONLY when it is explicitly part of your task's mission
|
|
12764
12811
|
- If you remove existing functionality, you MUST create a changeset in \`.changeset/\` explaining the removal and rationale
|
|
12765
12812
|
|
|
@@ -13433,7 +13480,7 @@ You have tools to report progress. The board updates in real-time.
|
|
|
13433
13480
|
|
|
13434
13481
|
**Logging important actions:** \`task_log(message="what happened")\`
|
|
13435
13482
|
|
|
13436
|
-
**Out-of-scope findings at completion:** When recommendation capture is enabled, retain optional, non-blocking discoveries as task-ready \`fn_task_done\` recommendations at accepted completion, or send \`recommendations: []\` when none qualify.
|
|
13483
|
+
**Out-of-scope findings at completion:** This task-execution session cannot create or delegate tasks. When recommendation capture is enabled, retain optional, non-blocking discoveries as task-ready \`fn_task_done\` recommendations at accepted completion, or send \`recommendations: []\` when none qualify. Implement required in-scope work directly here; use the honest blocked exit only for a real external blocker. Never recommend required current-task work, blockers, secrets, commands, reasoning, or filler.
|
|
13437
13484
|
|
|
13438
13485
|
**Discovered a dependency:** \`task_add_dep(task_id="KB-XXX")\` \u2014 use when you discover mid-execution that another task must be completed first. This will return a warning first \u2014 you must call again with \`confirm=true\` to proceed. Adding a dependency stops execution, discards current work, and moves the task to triage for re-specification.
|
|
13439
13486
|
|
|
@@ -13503,15 +13550,15 @@ If you attempt to write to a path outside the worktree, the file tools will reje
|
|
|
13503
13550
|
FNXC:WorkflowRouting 2026-06-22-17:26:
|
|
13504
13551
|
Executors must not move the workflow of the task they are executing unless the user explicitly asked for that task's workflow. Agents remain free to set workflows on tasks they create because they are the creator for those new tasks.
|
|
13505
13552
|
-->
|
|
13506
|
-
- Do not call \`fn_workflow_select\` to change the workflow of the task you are executing; you did not create that task, the user or triage did. The only exception is when the user explicitly requested a specific workflow for this task in a steering comment, task instruction, or similar direct instruction.
|
|
13553
|
+
- Do not call \`fn_workflow_select\` to change the workflow of the task you are executing; you did not create that task, the user or triage did. The only exception is when the user explicitly requested a specific workflow for this task in a steering comment, task instruction, or similar direct instruction.
|
|
13507
13554
|
- **NEVER kill processes on port 4040.** Port 4040 is the production dashboard. Do not run \`kill\`, \`pkill\`, \`killall\`, or \`lsof -ti:4040 | xargs kill\` against it. If you need to start a test server, use \`--port 0\` for a random free port. If port 4040 is occupied, pick a different port \u2014 do NOT kill the occupant.
|
|
13508
13555
|
- Treat the File Scope in PROMPT.md as the expected starting scope, not a hard boundary when quality gates fail
|
|
13509
13556
|
- Read "Context to Read First" files before starting
|
|
13510
13557
|
- Follow the "Do NOT" section strictly
|
|
13511
13558
|
- If tests, lint, build, or typecheck fail and the fix requires touching code outside the declared File Scope, fix those failures directly and keep the repo green
|
|
13512
|
-
-
|
|
13559
|
+
- Implement mandatory and in-scope work directly in this task. Preserve optional out-of-scope follow-ups as completion recommendations.
|
|
13513
13560
|
- NEVER delete, remove, or gut modules, interfaces, settings, exports, or test files outside your File Scope
|
|
13514
|
-
- NEVER remove features as "cleanup" \u2014 if something seems unused,
|
|
13561
|
+
- NEVER remove features as "cleanup" \u2014 if something seems unused, record an optional completion recommendation for investigation instead
|
|
13515
13562
|
- If you remove existing functionality, you MUST create a changeset in \`.changeset/\` explaining the removal and rationale
|
|
13516
13563
|
|
|
13517
13564
|
## Spawning Child Agents
|
|
@@ -14378,11 +14425,15 @@ var RAW_BUILTIN_CODING_WORKFLOW_IR = {
|
|
|
14378
14425
|
// execute → browser-verification (optional-group) → review. When the group is
|
|
14379
14426
|
// disabled it passes through with outcome=success and routes straight to review.
|
|
14380
14427
|
{ from: "execute", to: "browser-verification", condition: "success" },
|
|
14381
|
-
|
|
14382
|
-
|
|
14383
|
-
|
|
14384
|
-
|
|
14385
|
-
|
|
14428
|
+
/*
|
|
14429
|
+
FNXC:WorkspaceReviewSeal 2026-08-21-19:36:
|
|
14430
|
+
Completion summary runs before Code Review because its agent may acquire and write the task
|
|
14431
|
+
worktree. The approving review is the final write-capable pre-merge stage, so landing consumes
|
|
14432
|
+
evidence for the branch it will publish rather than evidence invalidated by a later summary.
|
|
14433
|
+
*/
|
|
14434
|
+
{ from: "browser-verification", to: "completion-summary", condition: "success" },
|
|
14435
|
+
{ from: "completion-summary", to: "code-review", condition: "success" },
|
|
14436
|
+
{ from: "code-review", to: "review", condition: "success" },
|
|
14386
14437
|
{ from: "review", to: "merge-gate", condition: "success" },
|
|
14387
14438
|
{ from: "merge-gate", to: "branch-group-member-integration", condition: "outcome:auto-on" },
|
|
14388
14439
|
{ from: "merge-gate", to: "merge-manual-hold", condition: "outcome:auto-off" },
|
|
@@ -14395,6 +14446,12 @@ var RAW_BUILTIN_CODING_WORKFLOW_IR = {
|
|
|
14395
14446
|
{ from: "merge-attempt", to: "post-merge-verification", condition: "success" },
|
|
14396
14447
|
{ from: "post-merge-verification", to: "end", condition: "success" },
|
|
14397
14448
|
{ from: "merge-attempt", to: "merge-retry", condition: "outcome:transient-failure" },
|
|
14449
|
+
/*
|
|
14450
|
+
FNXC:WorkspaceReviewReroute 2026-08-21-20:11:
|
|
14451
|
+
Evidence rejected during an active graph merge is a fresh Code Review obligation, never a
|
|
14452
|
+
merge retry. Route the typed result to the final review gate before another landing attempt.
|
|
14453
|
+
*/
|
|
14454
|
+
{ from: "merge-attempt", to: "code-review", condition: "outcome:workspace-review-required", kind: "rework" },
|
|
14398
14455
|
{ from: "merge-attempt", to: "merge-manual-hold", condition: "outcome:manual-required" },
|
|
14399
14456
|
{ from: "recovery-router", to: "merge-attempt", condition: "outcome:wake-merge", kind: "rework" },
|
|
14400
14457
|
{ from: "planning", to: "end", condition: "failure" },
|
|
@@ -14692,12 +14749,15 @@ var RAW_BUILTIN_STEPWISE_CODING_WORKFLOW_IR = {
|
|
|
14692
14749
|
// KTD-5: bounded rework exhaustion → manual hold; release re-enters the group.
|
|
14693
14750
|
{ from: "steps", to: "rework-hold", condition: "outcome:rework-exhausted" },
|
|
14694
14751
|
{ from: "rework-hold", to: "browser-verification", condition: "success" },
|
|
14695
|
-
|
|
14696
|
-
|
|
14697
|
-
|
|
14698
|
-
|
|
14699
|
-
|
|
14700
|
-
|
|
14752
|
+
/*
|
|
14753
|
+
FNXC:WorkspaceReviewSeal 2026-08-21-19:36:
|
|
14754
|
+
A completion-summary agent can acquire the task worktree. It therefore precedes Code Review;
|
|
14755
|
+
the approval becomes the final write-sensitive pre-merge gate and cannot be invalidated by the
|
|
14756
|
+
built-in workflow after it is recorded.
|
|
14757
|
+
*/
|
|
14758
|
+
{ from: "browser-verification", to: "completion-summary", condition: "success" },
|
|
14759
|
+
{ from: "completion-summary", to: "code-review", condition: "success" },
|
|
14760
|
+
{ from: "code-review", to: "merge-gate", condition: "success" },
|
|
14701
14761
|
{ from: "browser-verification", to: "browser-verification-remediation", condition: "failure" },
|
|
14702
14762
|
{ from: "browser-verification-remediation", to: "browser-verification", condition: "success", kind: "rework" },
|
|
14703
14763
|
{ from: "code-review", to: "code-review-remediation", condition: "failure" },
|
|
@@ -14723,6 +14783,12 @@ var RAW_BUILTIN_STEPWISE_CODING_WORKFLOW_IR = {
|
|
|
14723
14783
|
{ from: "merge-attempt", to: "post-merge-verification", condition: "success" },
|
|
14724
14784
|
{ from: "post-merge-verification", to: "end", condition: "success" },
|
|
14725
14785
|
{ from: "merge-attempt", to: "merge-retry", condition: "outcome:transient-failure" },
|
|
14786
|
+
/*
|
|
14787
|
+
FNXC:WorkspaceReviewReroute 2026-08-21-20:11:
|
|
14788
|
+
A stale workspace approval returns to the final Code Review gate through a bounded rework
|
|
14789
|
+
edge, preserving the existing graph owner instead of burning a merge retry.
|
|
14790
|
+
*/
|
|
14791
|
+
{ from: "merge-attempt", to: "code-review", condition: "outcome:workspace-review-required", kind: "rework" },
|
|
14726
14792
|
{ from: "merge-attempt", to: "merge-manual-hold", condition: "outcome:manual-required" },
|
|
14727
14793
|
{ from: "recovery-router", to: "merge-attempt", condition: "outcome:wake-merge", kind: "rework" },
|
|
14728
14794
|
{ from: "merge-attempt", to: "end", condition: "failure" }
|
|
@@ -14785,11 +14851,11 @@ var RAW_BUILTIN_STEPWISE_FINAL_REVIEW_CODING_WORKFLOW_IR = (() => {
|
|
|
14785
14851
|
if (!ir.edges.some((edge) => edge.from === "plan-replan" && edge.to === "plan-review" && edge.condition === "success")) {
|
|
14786
14852
|
ir.edges.push({ from: "plan-replan", to: "plan-review", condition: "success", kind: "rework" });
|
|
14787
14853
|
}
|
|
14788
|
-
if (!ir.edges.some((edge) => edge.from === "
|
|
14789
|
-
ir.edges.push({ from: "
|
|
14854
|
+
if (!ir.edges.some((edge) => edge.from === "completion-summary" && edge.to === "code-review" && edge.condition === "success")) {
|
|
14855
|
+
ir.edges.push({ from: "completion-summary", to: "code-review", condition: "success" });
|
|
14790
14856
|
}
|
|
14791
|
-
if (!ir.edges.some((edge) => edge.from === "
|
|
14792
|
-
ir.edges.push({ from: "
|
|
14857
|
+
if (!ir.edges.some((edge) => edge.from === "code-review" && edge.to === "merge-gate" && edge.condition === "success")) {
|
|
14858
|
+
ir.edges.push({ from: "code-review", to: "merge-gate", condition: "success" });
|
|
14793
14859
|
}
|
|
14794
14860
|
return ir;
|
|
14795
14861
|
})();
|
|
@@ -14869,8 +14935,8 @@ var RAW_BUILTIN_CODING_IDEAS_WORKFLOW_IR = (() => {
|
|
|
14869
14935
|
]);
|
|
14870
14936
|
v2.nodes = v2.nodes.filter((node) => !removedNodeIds.has(node.id));
|
|
14871
14937
|
v2.edges = v2.edges.filter((edge) => !removedNodeIds.has(edge.from) && !removedNodeIds.has(edge.to));
|
|
14872
|
-
if (!v2.edges.some((edge) => edge.from === "steps" && edge.to === "
|
|
14873
|
-
v2.edges.push({ from: "steps", to: "
|
|
14938
|
+
if (!v2.edges.some((edge) => edge.from === "steps" && edge.to === "completion-summary")) {
|
|
14939
|
+
v2.edges.push({ from: "steps", to: "completion-summary", condition: "success" });
|
|
14874
14940
|
}
|
|
14875
14941
|
if (!v2.edges.some((edge) => edge.from === "merge-attempt" && edge.to === "end" && edge.condition === "success")) {
|
|
14876
14942
|
v2.edges.push({ from: "merge-attempt", to: "end", condition: "success" });
|
|
@@ -15457,10 +15523,12 @@ function linear(spec) {
|
|
|
15457
15523
|
...hasBrowserVerification ? [browserVerificationRemediationNode("in-progress")] : [],
|
|
15458
15524
|
...hasCodeReview ? [codeReviewRemediationNode("in-progress")] : []
|
|
15459
15525
|
] : [];
|
|
15526
|
+
const noOpTerminalNode = hasPlanReview ? { id: "plan-review-no-op", kind: "gate", column: "todo", config: { workflowAction: "plan-review-no-op" } } : void 0;
|
|
15460
15527
|
const nodes2 = [
|
|
15461
15528
|
{ id: "start", kind: "start" },
|
|
15462
15529
|
...workflowNodes,
|
|
15463
15530
|
...remediationNodes,
|
|
15531
|
+
...noOpTerminalNode ? [noOpTerminalNode] : [],
|
|
15464
15532
|
{ id: "end", kind: "end" }
|
|
15465
15533
|
];
|
|
15466
15534
|
const edges = [];
|
|
@@ -15476,6 +15544,8 @@ function linear(spec) {
|
|
|
15476
15544
|
}
|
|
15477
15545
|
if (hasPlanReview) {
|
|
15478
15546
|
edges.push({ from: "plan-replan", to: "plan-review", condition: "success", kind: "rework" });
|
|
15547
|
+
edges.push({ from: "plan-review", to: "plan-review-no-op", condition: "outcome:close-no-op" });
|
|
15548
|
+
edges.push({ from: "plan-review-no-op", to: "end", condition: "success" });
|
|
15479
15549
|
}
|
|
15480
15550
|
if (hasBrowserVerification) {
|
|
15481
15551
|
edges.push({
|
|
@@ -5906,6 +5906,8 @@ var tasks = projectSchema.table("tasks", {
|
|
|
5906
5906
|
branchConflictRecoveryCount: integer("branch_conflict_recovery_count").default(0),
|
|
5907
5907
|
reviewerContextRetryCount: integer("reviewer_context_retry_count").default(0),
|
|
5908
5908
|
reviewerFallbackRetryCount: integer("reviewer_fallback_retry_count").default(0),
|
|
5909
|
+
reviewConvergenceStage: integer("review_convergence_stage").default(0),
|
|
5910
|
+
reviewConvergenceEscalationCount: integer("review_convergence_escalation_count").default(0),
|
|
5909
5911
|
nextRecoveryAt: text("next_recovery_at"),
|
|
5910
5912
|
error: text("error"),
|
|
5911
5913
|
summary: text("summary"),
|
|
@@ -9095,6 +9097,7 @@ var DEFAULT_GLOBAL_SETTINGS = {
|
|
|
9095
9097
|
openrouterAppAttribution: void 0,
|
|
9096
9098
|
openrouterModelFilters: void 0,
|
|
9097
9099
|
openrouterProviderPreferences: void 0,
|
|
9100
|
+
orcarouterModelSync: true,
|
|
9098
9101
|
opencodeGoModelSync: true,
|
|
9099
9102
|
updateCheckEnabled: true,
|
|
9100
9103
|
fnBinaryCheckEnabled: true,
|
|
@@ -9510,6 +9513,12 @@ var DEFAULT_PROJECT_SETTINGS = {
|
|
|
9510
9513
|
executorEscalationProvider: void 0,
|
|
9511
9514
|
executorEscalationModelId: void 0,
|
|
9512
9515
|
executorEscalationNodeId: void 0,
|
|
9516
|
+
reviewConvergenceEscalationEnabled: true,
|
|
9517
|
+
reviewConvergenceEscalationProvider: void 0,
|
|
9518
|
+
reviewConvergenceEscalationModelId: void 0,
|
|
9519
|
+
reviewArbitrationEnabled: true,
|
|
9520
|
+
reviewArbitrationProvider: void 0,
|
|
9521
|
+
reviewArbitrationModelId: void 0,
|
|
9513
9522
|
/**
|
|
9514
9523
|
* FNXC:Merge 2026-06-26-00:00:
|
|
9515
9524
|
* New and unconfigured projects default AI merge to sync a dirty checked-out integration branch, restoring the legacy stash → fast-forward → restore landing behavior. Explicit persisted merger.allowDirtyLocalCheckoutSync values still win, and no existing-project migration stamps this default into storage.
|
|
@@ -12581,6 +12590,49 @@ var BUILTIN_REVIEW_REVISION_SETTINGS = [
|
|
|
12581
12590
|
default: DEFAULT_CODE_REVIEW_BLOCKING_SEVERITY,
|
|
12582
12591
|
description: 'Minimum finding severity that lets Code Review block merge. A REVISE carrying no finding at or above this level is recorded as APPROVE_WITH_NOTES and its findings are handed to the implementer. Choose "any" to block on every REVISE.'
|
|
12583
12592
|
},
|
|
12593
|
+
/*
|
|
12594
|
+
* FNXC:ReviewConvergence 2026-08-22-05:42:
|
|
12595
|
+
* FN-149 keeps recovery targets workflow-native so operators choose the cost and
|
|
12596
|
+
* capability of automatic review convergence without widening project policy.
|
|
12597
|
+
*/
|
|
12598
|
+
{
|
|
12599
|
+
id: "reviewConvergenceEscalationEnabled",
|
|
12600
|
+
name: "Review convergence escalation",
|
|
12601
|
+
type: "boolean",
|
|
12602
|
+
default: true,
|
|
12603
|
+
description: "Run one bounded alternate-model or replan recovery when a review repeats unchanged input."
|
|
12604
|
+
},
|
|
12605
|
+
{
|
|
12606
|
+
id: "reviewConvergenceEscalationProvider",
|
|
12607
|
+
name: "Review convergence escalation provider",
|
|
12608
|
+
type: "string",
|
|
12609
|
+
description: "Provider for the optional alternate-model review remediation target."
|
|
12610
|
+
},
|
|
12611
|
+
{
|
|
12612
|
+
id: "reviewConvergenceEscalationModelId",
|
|
12613
|
+
name: "Review convergence escalation model",
|
|
12614
|
+
type: "string",
|
|
12615
|
+
description: "Model for the optional alternate-model review remediation target."
|
|
12616
|
+
},
|
|
12617
|
+
{
|
|
12618
|
+
id: "reviewArbitrationEnabled",
|
|
12619
|
+
name: "Review arbitration",
|
|
12620
|
+
type: "boolean",
|
|
12621
|
+
default: true,
|
|
12622
|
+
description: "Enable bounded third-model arbitration after a review disagreement persists."
|
|
12623
|
+
},
|
|
12624
|
+
{
|
|
12625
|
+
id: "reviewArbitrationProvider",
|
|
12626
|
+
name: "Review arbitration provider",
|
|
12627
|
+
type: "string",
|
|
12628
|
+
description: "Provider for the optional review arbitration target."
|
|
12629
|
+
},
|
|
12630
|
+
{
|
|
12631
|
+
id: "reviewArbitrationModelId",
|
|
12632
|
+
name: "Review arbitration model",
|
|
12633
|
+
type: "string",
|
|
12634
|
+
description: "Model for the optional review arbitration target."
|
|
12635
|
+
},
|
|
12584
12636
|
{
|
|
12585
12637
|
id: "planReviewReplanCap",
|
|
12586
12638
|
name: "Plan Review replan cap",
|
|
@@ -12786,16 +12838,11 @@ You have tools to report progress. The board updates in real-time.
|
|
|
12786
12838
|
|
|
12787
12839
|
/*
|
|
12788
12840
|
FNXC:TaskRecommendations 2026-08-09-04:06:
|
|
12789
|
-
FN-
|
|
12790
|
-
completion boundary.
|
|
12791
|
-
|
|
12841
|
+
FN-125 requires task-execution sessions to preserve optional, non-blocking discoveries only at the
|
|
12842
|
+
accepted completion boundary. Durable Workflow Executor sessions cannot create or delegate tasks;
|
|
12843
|
+
in-scope work remains in the current task and external blockers use the honest blocked exit.
|
|
12792
12844
|
*/
|
|
12793
|
-
**Out-of-scope findings at completion:**
|
|
12794
|
-
|
|
12795
|
-
Use \`task_create\` or \`fn_delegate_task\` only when the task explicitly requires immediate filing, necessary dependency coordination, or the operator directs it. When creating multiple related tasks, declare dependencies between them:
|
|
12796
|
-
\`task_create(description="load door sounds", dependencies=[])\` \u2192 returns KB-050
|
|
12797
|
-
\`task_create(description="play sound on door open/close", dependencies=["KB-050"])\`
|
|
12798
|
-
|
|
12845
|
+
**Out-of-scope findings at completion:** This task-execution session cannot create or delegate tasks. When recommendation capture is enabled, at the final accepted \`fn_task_done(outcome="completed")\` checkpoint evaluate optional, non-blocking findings as genuine task-ready \`recommendations\` (or \`recommendations: []\` when none qualify). Each recommendation needs a stable unique \`id\`, \`title\`, \`description\`, and \`category\`; never use it for a required current-task fix, blocker, secret, executable command, reasoning transcript, or filler. Implement required in-scope work directly in this task.
|
|
12799
12846
|
**Discovered a dependency:** \`task_add_dep(task_id="KB-XXX")\` \u2014 use when you discover mid-execution that another task must be completed first. This will return a warning first \u2014 you must call again with \`confirm=true\` to proceed. Adding a dependency stops execution, discards current work, and moves the task to triage for re-specification.
|
|
12800
12847
|
|
|
12801
12848
|
## Task Documents
|
|
@@ -12867,16 +12914,16 @@ If you attempt to write to a path outside the worktree, the file tools will reje
|
|
|
12867
12914
|
FNXC:WorkflowRouting 2026-06-22-17:26:
|
|
12868
12915
|
Executors must not move the workflow of the task they are executing unless the user explicitly asked for that task's workflow. Agents remain free to set workflows on tasks they create because they are the creator for those new tasks.
|
|
12869
12916
|
-->
|
|
12870
|
-
- Do not call \`fn_workflow_select\` to change the workflow of the task you are executing; you did not create that task, the user or triage did. The only exception is when the user explicitly requested a specific workflow for this task in a steering comment, task instruction, or similar direct instruction.
|
|
12917
|
+
- Do not call \`fn_workflow_select\` to change the workflow of the task you are executing; you did not create that task, the user or triage did. The only exception is when the user explicitly requested a specific workflow for this task in a steering comment, task instruction, or similar direct instruction.
|
|
12871
12918
|
- **NEVER kill processes on port 4040.** Port 4040 is the production dashboard. Do not run \`kill\`, \`pkill\`, \`killall\`, or \`lsof -ti:4040 | xargs kill\` against it. If you need to start a test server, use \`--port 0\` for a random free port. If port 4040 is occupied, pick a different port \u2014 do NOT kill the occupant.
|
|
12872
12919
|
- Treat the File Scope in PROMPT.md as the expected starting scope, not a hard boundary when quality gates fail
|
|
12873
12920
|
- Read "Context to Read First" files before starting
|
|
12874
12921
|
- Follow the "Do NOT" section strictly
|
|
12875
12922
|
- If tests, lint, build, or typecheck fail and the fix requires touching code outside the declared File Scope, fix those failures directly and keep the repo green
|
|
12876
|
-
-
|
|
12923
|
+
- Implement mandatory and in-scope work directly in this task. Preserve optional out-of-scope follow-ups as completion recommendations.
|
|
12877
12924
|
- Update documentation listed in "Must Update" and check "Check If Affected"
|
|
12878
12925
|
- NEVER delete, remove, or gut modules, interfaces, settings, exports, or test files outside your File Scope
|
|
12879
|
-
- NEVER remove features as "cleanup" \u2014 if something seems unused,
|
|
12926
|
+
- NEVER remove features as "cleanup" \u2014 if something seems unused, record an optional completion recommendation for investigation instead
|
|
12880
12927
|
- Removing code is acceptable ONLY when it is explicitly part of your task's mission
|
|
12881
12928
|
- If you remove existing functionality, you MUST create a changeset in \`.changeset/\` explaining the removal and rationale
|
|
12882
12929
|
|
|
@@ -13550,7 +13597,7 @@ You have tools to report progress. The board updates in real-time.
|
|
|
13550
13597
|
|
|
13551
13598
|
**Logging important actions:** \`task_log(message="what happened")\`
|
|
13552
13599
|
|
|
13553
|
-
**Out-of-scope findings at completion:** When recommendation capture is enabled, retain optional, non-blocking discoveries as task-ready \`fn_task_done\` recommendations at accepted completion, or send \`recommendations: []\` when none qualify.
|
|
13600
|
+
**Out-of-scope findings at completion:** This task-execution session cannot create or delegate tasks. When recommendation capture is enabled, retain optional, non-blocking discoveries as task-ready \`fn_task_done\` recommendations at accepted completion, or send \`recommendations: []\` when none qualify. Implement required in-scope work directly here; use the honest blocked exit only for a real external blocker. Never recommend required current-task work, blockers, secrets, commands, reasoning, or filler.
|
|
13554
13601
|
|
|
13555
13602
|
**Discovered a dependency:** \`task_add_dep(task_id="KB-XXX")\` \u2014 use when you discover mid-execution that another task must be completed first. This will return a warning first \u2014 you must call again with \`confirm=true\` to proceed. Adding a dependency stops execution, discards current work, and moves the task to triage for re-specification.
|
|
13556
13603
|
|
|
@@ -13620,15 +13667,15 @@ If you attempt to write to a path outside the worktree, the file tools will reje
|
|
|
13620
13667
|
FNXC:WorkflowRouting 2026-06-22-17:26:
|
|
13621
13668
|
Executors must not move the workflow of the task they are executing unless the user explicitly asked for that task's workflow. Agents remain free to set workflows on tasks they create because they are the creator for those new tasks.
|
|
13622
13669
|
-->
|
|
13623
|
-
- Do not call \`fn_workflow_select\` to change the workflow of the task you are executing; you did not create that task, the user or triage did. The only exception is when the user explicitly requested a specific workflow for this task in a steering comment, task instruction, or similar direct instruction.
|
|
13670
|
+
- Do not call \`fn_workflow_select\` to change the workflow of the task you are executing; you did not create that task, the user or triage did. The only exception is when the user explicitly requested a specific workflow for this task in a steering comment, task instruction, or similar direct instruction.
|
|
13624
13671
|
- **NEVER kill processes on port 4040.** Port 4040 is the production dashboard. Do not run \`kill\`, \`pkill\`, \`killall\`, or \`lsof -ti:4040 | xargs kill\` against it. If you need to start a test server, use \`--port 0\` for a random free port. If port 4040 is occupied, pick a different port \u2014 do NOT kill the occupant.
|
|
13625
13672
|
- Treat the File Scope in PROMPT.md as the expected starting scope, not a hard boundary when quality gates fail
|
|
13626
13673
|
- Read "Context to Read First" files before starting
|
|
13627
13674
|
- Follow the "Do NOT" section strictly
|
|
13628
13675
|
- If tests, lint, build, or typecheck fail and the fix requires touching code outside the declared File Scope, fix those failures directly and keep the repo green
|
|
13629
|
-
-
|
|
13676
|
+
- Implement mandatory and in-scope work directly in this task. Preserve optional out-of-scope follow-ups as completion recommendations.
|
|
13630
13677
|
- NEVER delete, remove, or gut modules, interfaces, settings, exports, or test files outside your File Scope
|
|
13631
|
-
- NEVER remove features as "cleanup" \u2014 if something seems unused,
|
|
13678
|
+
- NEVER remove features as "cleanup" \u2014 if something seems unused, record an optional completion recommendation for investigation instead
|
|
13632
13679
|
- If you remove existing functionality, you MUST create a changeset in \`.changeset/\` explaining the removal and rationale
|
|
13633
13680
|
|
|
13634
13681
|
## Spawning Child Agents
|
|
@@ -14495,11 +14542,15 @@ var RAW_BUILTIN_CODING_WORKFLOW_IR = {
|
|
|
14495
14542
|
// execute → browser-verification (optional-group) → review. When the group is
|
|
14496
14543
|
// disabled it passes through with outcome=success and routes straight to review.
|
|
14497
14544
|
{ from: "execute", to: "browser-verification", condition: "success" },
|
|
14498
|
-
|
|
14499
|
-
|
|
14500
|
-
|
|
14501
|
-
|
|
14502
|
-
|
|
14545
|
+
/*
|
|
14546
|
+
FNXC:WorkspaceReviewSeal 2026-08-21-19:36:
|
|
14547
|
+
Completion summary runs before Code Review because its agent may acquire and write the task
|
|
14548
|
+
worktree. The approving review is the final write-capable pre-merge stage, so landing consumes
|
|
14549
|
+
evidence for the branch it will publish rather than evidence invalidated by a later summary.
|
|
14550
|
+
*/
|
|
14551
|
+
{ from: "browser-verification", to: "completion-summary", condition: "success" },
|
|
14552
|
+
{ from: "completion-summary", to: "code-review", condition: "success" },
|
|
14553
|
+
{ from: "code-review", to: "review", condition: "success" },
|
|
14503
14554
|
{ from: "review", to: "merge-gate", condition: "success" },
|
|
14504
14555
|
{ from: "merge-gate", to: "branch-group-member-integration", condition: "outcome:auto-on" },
|
|
14505
14556
|
{ from: "merge-gate", to: "merge-manual-hold", condition: "outcome:auto-off" },
|
|
@@ -14512,6 +14563,12 @@ var RAW_BUILTIN_CODING_WORKFLOW_IR = {
|
|
|
14512
14563
|
{ from: "merge-attempt", to: "post-merge-verification", condition: "success" },
|
|
14513
14564
|
{ from: "post-merge-verification", to: "end", condition: "success" },
|
|
14514
14565
|
{ from: "merge-attempt", to: "merge-retry", condition: "outcome:transient-failure" },
|
|
14566
|
+
/*
|
|
14567
|
+
FNXC:WorkspaceReviewReroute 2026-08-21-20:11:
|
|
14568
|
+
Evidence rejected during an active graph merge is a fresh Code Review obligation, never a
|
|
14569
|
+
merge retry. Route the typed result to the final review gate before another landing attempt.
|
|
14570
|
+
*/
|
|
14571
|
+
{ from: "merge-attempt", to: "code-review", condition: "outcome:workspace-review-required", kind: "rework" },
|
|
14515
14572
|
{ from: "merge-attempt", to: "merge-manual-hold", condition: "outcome:manual-required" },
|
|
14516
14573
|
{ from: "recovery-router", to: "merge-attempt", condition: "outcome:wake-merge", kind: "rework" },
|
|
14517
14574
|
{ from: "planning", to: "end", condition: "failure" },
|
|
@@ -14809,12 +14866,15 @@ var RAW_BUILTIN_STEPWISE_CODING_WORKFLOW_IR = {
|
|
|
14809
14866
|
// KTD-5: bounded rework exhaustion → manual hold; release re-enters the group.
|
|
14810
14867
|
{ from: "steps", to: "rework-hold", condition: "outcome:rework-exhausted" },
|
|
14811
14868
|
{ from: "rework-hold", to: "browser-verification", condition: "success" },
|
|
14812
|
-
|
|
14813
|
-
|
|
14814
|
-
|
|
14815
|
-
|
|
14816
|
-
|
|
14817
|
-
|
|
14869
|
+
/*
|
|
14870
|
+
FNXC:WorkspaceReviewSeal 2026-08-21-19:36:
|
|
14871
|
+
A completion-summary agent can acquire the task worktree. It therefore precedes Code Review;
|
|
14872
|
+
the approval becomes the final write-sensitive pre-merge gate and cannot be invalidated by the
|
|
14873
|
+
built-in workflow after it is recorded.
|
|
14874
|
+
*/
|
|
14875
|
+
{ from: "browser-verification", to: "completion-summary", condition: "success" },
|
|
14876
|
+
{ from: "completion-summary", to: "code-review", condition: "success" },
|
|
14877
|
+
{ from: "code-review", to: "merge-gate", condition: "success" },
|
|
14818
14878
|
{ from: "browser-verification", to: "browser-verification-remediation", condition: "failure" },
|
|
14819
14879
|
{ from: "browser-verification-remediation", to: "browser-verification", condition: "success", kind: "rework" },
|
|
14820
14880
|
{ from: "code-review", to: "code-review-remediation", condition: "failure" },
|
|
@@ -14840,6 +14900,12 @@ var RAW_BUILTIN_STEPWISE_CODING_WORKFLOW_IR = {
|
|
|
14840
14900
|
{ from: "merge-attempt", to: "post-merge-verification", condition: "success" },
|
|
14841
14901
|
{ from: "post-merge-verification", to: "end", condition: "success" },
|
|
14842
14902
|
{ from: "merge-attempt", to: "merge-retry", condition: "outcome:transient-failure" },
|
|
14903
|
+
/*
|
|
14904
|
+
FNXC:WorkspaceReviewReroute 2026-08-21-20:11:
|
|
14905
|
+
A stale workspace approval returns to the final Code Review gate through a bounded rework
|
|
14906
|
+
edge, preserving the existing graph owner instead of burning a merge retry.
|
|
14907
|
+
*/
|
|
14908
|
+
{ from: "merge-attempt", to: "code-review", condition: "outcome:workspace-review-required", kind: "rework" },
|
|
14843
14909
|
{ from: "merge-attempt", to: "merge-manual-hold", condition: "outcome:manual-required" },
|
|
14844
14910
|
{ from: "recovery-router", to: "merge-attempt", condition: "outcome:wake-merge", kind: "rework" },
|
|
14845
14911
|
{ from: "merge-attempt", to: "end", condition: "failure" }
|
|
@@ -14902,11 +14968,11 @@ var RAW_BUILTIN_STEPWISE_FINAL_REVIEW_CODING_WORKFLOW_IR = (() => {
|
|
|
14902
14968
|
if (!ir.edges.some((edge) => edge.from === "plan-replan" && edge.to === "plan-review" && edge.condition === "success")) {
|
|
14903
14969
|
ir.edges.push({ from: "plan-replan", to: "plan-review", condition: "success", kind: "rework" });
|
|
14904
14970
|
}
|
|
14905
|
-
if (!ir.edges.some((edge) => edge.from === "
|
|
14906
|
-
ir.edges.push({ from: "
|
|
14971
|
+
if (!ir.edges.some((edge) => edge.from === "completion-summary" && edge.to === "code-review" && edge.condition === "success")) {
|
|
14972
|
+
ir.edges.push({ from: "completion-summary", to: "code-review", condition: "success" });
|
|
14907
14973
|
}
|
|
14908
|
-
if (!ir.edges.some((edge) => edge.from === "
|
|
14909
|
-
ir.edges.push({ from: "
|
|
14974
|
+
if (!ir.edges.some((edge) => edge.from === "code-review" && edge.to === "merge-gate" && edge.condition === "success")) {
|
|
14975
|
+
ir.edges.push({ from: "code-review", to: "merge-gate", condition: "success" });
|
|
14910
14976
|
}
|
|
14911
14977
|
return ir;
|
|
14912
14978
|
})();
|
|
@@ -14986,8 +15052,8 @@ var RAW_BUILTIN_CODING_IDEAS_WORKFLOW_IR = (() => {
|
|
|
14986
15052
|
]);
|
|
14987
15053
|
v2.nodes = v2.nodes.filter((node) => !removedNodeIds.has(node.id));
|
|
14988
15054
|
v2.edges = v2.edges.filter((edge) => !removedNodeIds.has(edge.from) && !removedNodeIds.has(edge.to));
|
|
14989
|
-
if (!v2.edges.some((edge) => edge.from === "steps" && edge.to === "
|
|
14990
|
-
v2.edges.push({ from: "steps", to: "
|
|
15055
|
+
if (!v2.edges.some((edge) => edge.from === "steps" && edge.to === "completion-summary")) {
|
|
15056
|
+
v2.edges.push({ from: "steps", to: "completion-summary", condition: "success" });
|
|
14991
15057
|
}
|
|
14992
15058
|
if (!v2.edges.some((edge) => edge.from === "merge-attempt" && edge.to === "end" && edge.condition === "success")) {
|
|
14993
15059
|
v2.edges.push({ from: "merge-attempt", to: "end", condition: "success" });
|
|
@@ -15574,10 +15640,12 @@ function linear(spec) {
|
|
|
15574
15640
|
...hasBrowserVerification ? [browserVerificationRemediationNode("in-progress")] : [],
|
|
15575
15641
|
...hasCodeReview ? [codeReviewRemediationNode("in-progress")] : []
|
|
15576
15642
|
] : [];
|
|
15643
|
+
const noOpTerminalNode = hasPlanReview ? { id: "plan-review-no-op", kind: "gate", column: "todo", config: { workflowAction: "plan-review-no-op" } } : void 0;
|
|
15577
15644
|
const nodes2 = [
|
|
15578
15645
|
{ id: "start", kind: "start" },
|
|
15579
15646
|
...workflowNodes,
|
|
15580
15647
|
...remediationNodes,
|
|
15648
|
+
...noOpTerminalNode ? [noOpTerminalNode] : [],
|
|
15581
15649
|
{ id: "end", kind: "end" }
|
|
15582
15650
|
];
|
|
15583
15651
|
const edges = [];
|
|
@@ -15593,6 +15661,8 @@ function linear(spec) {
|
|
|
15593
15661
|
}
|
|
15594
15662
|
if (hasPlanReview) {
|
|
15595
15663
|
edges.push({ from: "plan-replan", to: "plan-review", condition: "success", kind: "rework" });
|
|
15664
|
+
edges.push({ from: "plan-review", to: "plan-review-no-op", condition: "outcome:close-no-op" });
|
|
15665
|
+
edges.push({ from: "plan-review-no-op", to: "end", condition: "success" });
|
|
15596
15666
|
}
|
|
15597
15667
|
if (hasBrowserVerification) {
|
|
15598
15668
|
edges.push({
|