@runfusion/fusion 0.77.0-beta.6 → 0.77.0-beta.8
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 +42896 -39460
- package/dist/child-process-worker.js +7535 -4556
- package/dist/client/.vite/manifest.json +267 -330
- package/dist/client/assets/{AgentDetailView-oyY72uSo.js → AgentDetailView-DsMRc-aH.js} +4 -4
- package/dist/client/assets/{AgentPermissionPolicyEditor-C3Qo9p1M.js → AgentPermissionPolicyEditor-BXJ52YpO.js} +2 -2
- package/dist/client/assets/{AgentsView-M2MhTIGW.js → AgentsView-DO-25nlB.js} +4 -4
- package/dist/client/assets/{CommandCenter-CpcAt6jt.js → CommandCenter-BMXMg_I2.js} +18 -18
- package/dist/client/assets/DevServerView-DAeL5TYz.js +1 -0
- package/dist/client/assets/DirectoryPicker-Cw-XRjAa.js +1 -0
- package/dist/client/assets/DocumentsView-CusClN9u.js +1 -0
- package/dist/client/assets/EvalsView-gNdeUDww.js +1 -0
- package/dist/client/assets/ExperimentalAgentOnboardingModal-Bmzbqzhs.js +1 -0
- package/dist/client/assets/{GoalsView-DPj59B3l.js → GoalsView-J8JMsoLn.js} +1 -1
- package/dist/client/assets/{InsightsView-QLJNkKJp.js → InsightsView-BVbv56K0.js} +3 -3
- package/dist/client/assets/{MemoryView-CDCS-1ig.js → MemoryView-DNvJFoDu.js} +1 -1
- package/dist/client/assets/{PiExtensionsManager-DktXXrmF.js → PiExtensionsManager-BPMexS34.js} +2 -2
- package/dist/client/assets/PluginManager-DGEv-ptu.js +1 -0
- package/dist/client/assets/{PullRequestView-CkObT6e3.js → PullRequestView-CF7fx-Uo.js} +2 -2
- package/dist/client/assets/ReportModal-B8S5BFgn.js +21 -0
- package/dist/client/assets/ReportModal-Dx3f2aj7.css +1 -0
- package/dist/client/assets/{ResearchView-CryFrV8l.js → ResearchView-CBeXsevy.js} +1 -1
- package/dist/client/assets/{SecretsView-9YcNW_fo.js → SecretsView-Dmi9wZkv.js} +1 -1
- package/dist/client/assets/SettingsModal-D2kXP7Um.js +21 -0
- package/dist/client/assets/{SettingsModal-llkoaJev.js → SettingsModal-DSW3xnGk.js} +1 -1
- package/dist/client/assets/{SettingsTextareaRow-B_Legu-A.js → SettingsTextareaRow-CLab4Vcd.js} +1 -1
- package/dist/client/assets/SetupWizardModal-Ct6juX9x.js +2 -0
- package/dist/client/assets/{SkillsView-CSeauwIw.js → SkillsView-Dn0bwT6i.js} +1 -1
- package/dist/client/assets/WorkflowNodeEditor-cvReMlG-.js +8 -0
- package/dist/client/assets/{agent-import-generation-CttglSmZ.js → agent-import-generation-C8_ewVzC.js} +1 -1
- package/dist/client/assets/{agentsOrgChartLayout-f-9mwRbD.js → agentsOrgChartLayout-p1i6XROQ.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-CzCk1QdH.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-JF7K8CcV.js → blockDiagram-GPEHLZMM-74Rj-5ov.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-DN-wklCP.js → c4Diagram-AAUBKEIU-B570qYH-.js} +1 -1
- package/dist/client/assets/channel-DWAK5y-J.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-ChtjU8Cu.js → chunk-2J33WTMH-DejJkxt6.js} +1 -1
- package/dist/client/assets/{chunk-4BX2VUAB-dJL0n3nn.js → chunk-4BX2VUAB-DlgxkBuE.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-Bfg-QB9A.js → chunk-55IACEB6-XCfE8PwC.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-BHPPwYUS.js → chunk-727SXJPM-D-nDw0Bi.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-DIIpPUQN.js → chunk-AQP2D5EJ-C4KySao0.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-D230R32b.js → chunk-FMBD7UC4-CXKdLygA.js} +1 -1
- package/dist/client/assets/{chunk-ND2GUHAM-0Lhp5CRv.js → chunk-ND2GUHAM-bNYWWGVJ.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-BxbHBfKJ.js → chunk-QZHKN3VN-cfBQJ-MX.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-WTkXRkfm.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-WTkXRkfm.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-CiZrg3mQ.js} +1 -1
- package/dist/client/assets/{dagre-BM42HDAG-Br44UsdY.js → dagre-BM42HDAG-Bckph2U4.js} +1 -1
- package/dist/client/assets/{dashboard-view-_EglxMDl.js → dashboard-view-CN_fkDM1.js} +1 -1
- package/dist/client/assets/{dashboard-view-BldxxYfz.js → dashboard-view-CVYHQZwx.js} +1 -1
- package/dist/client/assets/dashboard-view-DDRKwfFs.js +1 -0
- package/dist/client/assets/{dashboard-view-CcPcELPx.js → dashboard-view-IuPjDVGa.js} +2 -2
- package/dist/client/assets/{diagram-2AECGRRQ-CLNxbHUP.js → diagram-2AECGRRQ-Bnaurex7.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-D3cNAeQH.js → diagram-5GNKFQAL-BKz1omVN.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-DkX7h6to.js → diagram-KO2AKTUF-C51lEZwo.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-6iQIiYUr.js → diagram-LMA3HP47-BYm5gql7.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-Caje3229.js → diagram-OG6HWLK6-B9CFA4ha.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-BkU-1HB1.js → erDiagram-TEJ5UH35-BLyCSssl.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-BRx3V6RE.js → flowDiagram-I6XJVG4X-yDVmpkro.js} +1 -1
- package/dist/client/assets/{folder-open-BaSOBfk2.js → folder-open-Cf2NA9nV.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-D9f1kH3t.js → ganttDiagram-6RSMTGT7-mC9YPFcx.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-CQwmZcRd.js → gitGraphDiagram-PVQCEYII-DS0bEccv.js} +1 -1
- package/dist/client/assets/index-BjM7LxzY.js +2805 -0
- package/dist/client/assets/index-DcKIzuMk.css +1 -0
- package/dist/client/assets/{infoDiagram-5YYISTIA-DYWBkGjG.js → infoDiagram-5YYISTIA-CuuNZITP.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-Df0Nzvh4.js → ishikawaDiagram-YF4QCWOH-MBSaC94m.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-bSvrZSyZ.js → journeyDiagram-JHISSGLW-DkaAow9E.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-yHJ101M8.js → kanban-definition-UN3LZRKU-DSf5OLtq.js} +1 -1
- package/dist/client/assets/{mermaid.core-Bc_0VLJw.js → mermaid.core-HmTn21MF.js} +4 -4
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-DWRnMguM.js → mindmap-definition-RKZ34NQL-sv0Dl8aI.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-Ds-DEOqr.js → pieDiagram-4H26LBE5-BDK2IQNq.js} +1 -1
- package/dist/client/assets/{puzzle-CdYF81IT.js → puzzle-D00mP67o.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-Bz-j2fkf.js → quadrantDiagram-W4KKPZXB-CiWAhwf1.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-BaQ_PaZ-.js → requirementDiagram-4Y6WPE33-DwC99D35.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-pUCz8V4-.js → sankeyDiagram-5OEKKPKP-CQn8z721.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-CFwUMspe.js → sequenceDiagram-3UESZ5HK-B0CT8-vw.js} +1 -1
- package/dist/client/assets/{standing-instructions-template-Crocrob7.js → standing-instructions-template-BIBO_Prr.js} +2 -2
- package/dist/client/assets/{stateDiagram-AJRCARHV-CHZwo-vd.js → stateDiagram-AJRCARHV-BYAB_dFF.js} +1 -1
- package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-BTvKaIZR.js → stateDiagram-v2-BHNVJYJU-Cd19uJBk.js} +1 -1
- package/dist/client/assets/{timeline-definition-PNZ67QCA-Cn3XIoz2.js → timeline-definition-PNZ67QCA-DQLh8XkY.js} +1 -1
- package/dist/client/assets/{upload--GqImz6h.js → upload-D4pkNOz2.js} +1 -1
- package/dist/client/assets/{users-B0h1q4x6.js → users-COgviS_S.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN-CS0FNVU_.js → vennDiagram-CIIHVFJN-BmwG1Wud.js} +1 -1
- package/dist/client/assets/{wardley-L42UT6IY-DdYkfF5d.js → wardley-L42UT6IY-BiO7jkmj.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-B_rFmPCh.js → wardleyDiagram-YWT4CUSO-Dq0IPg5H.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-CCoaCgmc.js → xychartDiagram-2RQKCTM6-BlMOlSBc.js} +1 -1
- package/dist/client/index.html +13 -6
- package/dist/client/theme-data.css +85 -0
- package/dist/client/version.json +1 -1
- package/dist/droid-cli/package.json +1 -1
- package/dist/extension.js +42201 -38907
- 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 +62 -11
- package/dist/plugin-sdk/index.js +140 -46
- package/dist/plugins/fusion-plugin-acp-runtime/bundled.js +195 -49
- package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-claude-runtime/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-claude-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-cli-printing-press/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
- package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
- package/dist/plugins/fusion-plugin-cursor-runtime/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-dependency-graph/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
- package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-grok-runtime/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-grok-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-hermes-runtime/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-linear-import/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-linear-import/package.json +1 -1
- package/dist/plugins/fusion-plugin-omp-runtime/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-omp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-openclaw-runtime/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-paperclip-runtime/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-quality/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-quality/package.json +1 -1
- package/dist/plugins/fusion-plugin-reports/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-reports/package.json +1 -1
- package/dist/plugins/fusion-plugin-roadmap/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
- package/dist/plugins/fusion-plugin-todos/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-todos/package.json +1 -1
- package/dist/plugins/fusion-plugin-whatsapp-chat/bundled.js +140 -46
- 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/ReportModal-B5LTdDgi.js +0 -21
- package/dist/client/assets/ReportModal-lzN_xrnM.css +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"),
|
|
@@ -8201,7 +8203,16 @@ var projectTableNames = [
|
|
|
8201
8203
|
"chat_rooms",
|
|
8202
8204
|
"chat_room_members",
|
|
8203
8205
|
"chat_room_messages",
|
|
8204
|
-
"chat_token_usage"
|
|
8206
|
+
"chat_token_usage",
|
|
8207
|
+
/*
|
|
8208
|
+
FNXC:WorkspaceCoordination 2026-08-23-20:05:
|
|
8209
|
+
FN-9059 (migration 0060) added these two tables to the schema without registering them here, so
|
|
8210
|
+
every registry consumer under-counted them: the PostgreSQL test harness never TRUNCATEd them
|
|
8211
|
+
between tests (a held `repo:<repo>` lease leaked from one case into the next and made the next
|
|
8212
|
+
land report the previous test's successor as the busy holder), and health compaction skipped them.
|
|
8213
|
+
*/
|
|
8214
|
+
"workspace_coordination_leases",
|
|
8215
|
+
"workspace_land_intents"
|
|
8205
8216
|
];
|
|
8206
8217
|
|
|
8207
8218
|
// ../core/src/postgres/schema/central.ts
|
|
@@ -8978,6 +8989,7 @@ var DEFAULT_GLOBAL_SETTINGS = {
|
|
|
8978
8989
|
openrouterAppAttribution: void 0,
|
|
8979
8990
|
openrouterModelFilters: void 0,
|
|
8980
8991
|
openrouterProviderPreferences: void 0,
|
|
8992
|
+
orcarouterModelSync: true,
|
|
8981
8993
|
opencodeGoModelSync: true,
|
|
8982
8994
|
updateCheckEnabled: true,
|
|
8983
8995
|
fnBinaryCheckEnabled: true,
|
|
@@ -9393,6 +9405,16 @@ var DEFAULT_PROJECT_SETTINGS = {
|
|
|
9393
9405
|
executorEscalationProvider: void 0,
|
|
9394
9406
|
executorEscalationModelId: void 0,
|
|
9395
9407
|
executorEscalationNodeId: void 0,
|
|
9408
|
+
/*
|
|
9409
|
+
FNXC:ReviewConvergence 2026-08-23-21:05:
|
|
9410
|
+
FN-149's six review-convergence/arbitration keys are declared in BUILTIN_WORKFLOW_SETTINGS, which
|
|
9411
|
+
the U4 hard-move made the SINGLE source of truth for a moved key's default. Re-declaring them here
|
|
9412
|
+
put them back in the legacy object the hard-move emptied, so an undeclared key on a custom workflow
|
|
9413
|
+
could resolve to this literal instead of the declaration default — the exact drift
|
|
9414
|
+
`workflow-settings-fallback-alignment` guards. The declaration defaults are identical (both
|
|
9415
|
+
`*Enabled` default true, the provider/model lanes carry no default), and the reader uses
|
|
9416
|
+
`!== false`, so removing them here preserves behaviour and restores the invariant.
|
|
9417
|
+
*/
|
|
9396
9418
|
/**
|
|
9397
9419
|
* FNXC:Merge 2026-06-26-00:00:
|
|
9398
9420
|
* 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.
|
|
@@ -10285,6 +10307,20 @@ function classifyWorkflowAgentNode(node) {
|
|
|
10285
10307
|
}
|
|
10286
10308
|
}
|
|
10287
10309
|
|
|
10310
|
+
// ../core/src/workflows/workflow-merge-region.ts
|
|
10311
|
+
var MERGE_REGION_ENTRY_NODE_KINDS = /* @__PURE__ */ new Set([
|
|
10312
|
+
"merge-gate",
|
|
10313
|
+
"merge-attempt",
|
|
10314
|
+
"manual-merge-hold",
|
|
10315
|
+
"retry-backoff",
|
|
10316
|
+
"recovery-router",
|
|
10317
|
+
"branch-group-member-integration",
|
|
10318
|
+
"branch-group-promotion",
|
|
10319
|
+
"pr-create",
|
|
10320
|
+
"pr-respond",
|
|
10321
|
+
"pr-merge"
|
|
10322
|
+
]);
|
|
10323
|
+
|
|
10288
10324
|
// ../core/src/workflows/workflow-extension-types.ts
|
|
10289
10325
|
function workflowExtensionRegistryId(pluginId, extensionId) {
|
|
10290
10326
|
return `plugin:${pluginId}:${extensionId}`;
|
|
@@ -10813,18 +10849,7 @@ function reachableFrom(start, outgoing) {
|
|
|
10813
10849
|
}
|
|
10814
10850
|
return seen;
|
|
10815
10851
|
}
|
|
10816
|
-
var INTERPRETER_ENTRY_NODE_KINDS =
|
|
10817
|
-
"merge-gate",
|
|
10818
|
-
"merge-attempt",
|
|
10819
|
-
"manual-merge-hold",
|
|
10820
|
-
"retry-backoff",
|
|
10821
|
-
"recovery-router",
|
|
10822
|
-
"branch-group-member-integration",
|
|
10823
|
-
"branch-group-promotion",
|
|
10824
|
-
"pr-create",
|
|
10825
|
-
"pr-respond",
|
|
10826
|
-
"pr-merge"
|
|
10827
|
-
]);
|
|
10852
|
+
var INTERPRETER_ENTRY_NODE_KINDS = MERGE_REGION_ENTRY_NODE_KINDS;
|
|
10828
10853
|
var MERGE_CLASS_NODE_KINDS = /* @__PURE__ */ new Set([
|
|
10829
10854
|
"merge-gate",
|
|
10830
10855
|
"merge-attempt",
|
|
@@ -12464,6 +12489,49 @@ var BUILTIN_REVIEW_REVISION_SETTINGS = [
|
|
|
12464
12489
|
default: DEFAULT_CODE_REVIEW_BLOCKING_SEVERITY,
|
|
12465
12490
|
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
12491
|
},
|
|
12492
|
+
/*
|
|
12493
|
+
* FNXC:ReviewConvergence 2026-08-22-05:42:
|
|
12494
|
+
* FN-149 keeps recovery targets workflow-native so operators choose the cost and
|
|
12495
|
+
* capability of automatic review convergence without widening project policy.
|
|
12496
|
+
*/
|
|
12497
|
+
{
|
|
12498
|
+
id: "reviewConvergenceEscalationEnabled",
|
|
12499
|
+
name: "Review convergence escalation",
|
|
12500
|
+
type: "boolean",
|
|
12501
|
+
default: true,
|
|
12502
|
+
description: "Run one bounded alternate-model or replan recovery when a review repeats unchanged input."
|
|
12503
|
+
},
|
|
12504
|
+
{
|
|
12505
|
+
id: "reviewConvergenceEscalationProvider",
|
|
12506
|
+
name: "Review convergence escalation provider",
|
|
12507
|
+
type: "string",
|
|
12508
|
+
description: "Provider for the optional alternate-model review remediation target."
|
|
12509
|
+
},
|
|
12510
|
+
{
|
|
12511
|
+
id: "reviewConvergenceEscalationModelId",
|
|
12512
|
+
name: "Review convergence escalation model",
|
|
12513
|
+
type: "string",
|
|
12514
|
+
description: "Model for the optional alternate-model review remediation target."
|
|
12515
|
+
},
|
|
12516
|
+
{
|
|
12517
|
+
id: "reviewArbitrationEnabled",
|
|
12518
|
+
name: "Review arbitration",
|
|
12519
|
+
type: "boolean",
|
|
12520
|
+
default: true,
|
|
12521
|
+
description: "Enable bounded third-model arbitration after a review disagreement persists."
|
|
12522
|
+
},
|
|
12523
|
+
{
|
|
12524
|
+
id: "reviewArbitrationProvider",
|
|
12525
|
+
name: "Review arbitration provider",
|
|
12526
|
+
type: "string",
|
|
12527
|
+
description: "Provider for the optional review arbitration target."
|
|
12528
|
+
},
|
|
12529
|
+
{
|
|
12530
|
+
id: "reviewArbitrationModelId",
|
|
12531
|
+
name: "Review arbitration model",
|
|
12532
|
+
type: "string",
|
|
12533
|
+
description: "Model for the optional review arbitration target."
|
|
12534
|
+
},
|
|
12467
12535
|
{
|
|
12468
12536
|
id: "planReviewReplanCap",
|
|
12469
12537
|
name: "Plan Review replan cap",
|
|
@@ -12669,16 +12737,11 @@ You have tools to report progress. The board updates in real-time.
|
|
|
12669
12737
|
|
|
12670
12738
|
/*
|
|
12671
12739
|
FNXC:TaskRecommendations 2026-08-09-04:06:
|
|
12672
|
-
FN-
|
|
12673
|
-
completion boundary.
|
|
12674
|
-
|
|
12740
|
+
FN-125 requires task-execution sessions to preserve optional, non-blocking discoveries only at the
|
|
12741
|
+
accepted completion boundary. Durable Workflow Executor sessions cannot create or delegate tasks;
|
|
12742
|
+
in-scope work remains in the current task and external blockers use the honest blocked exit.
|
|
12675
12743
|
*/
|
|
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
|
-
|
|
12744
|
+
**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
12745
|
**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
12746
|
|
|
12684
12747
|
## Task Documents
|
|
@@ -12750,16 +12813,16 @@ If you attempt to write to a path outside the worktree, the file tools will reje
|
|
|
12750
12813
|
FNXC:WorkflowRouting 2026-06-22-17:26:
|
|
12751
12814
|
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
12815
|
-->
|
|
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.
|
|
12816
|
+
- 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
12817
|
- **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
12818
|
- Treat the File Scope in PROMPT.md as the expected starting scope, not a hard boundary when quality gates fail
|
|
12756
12819
|
- Read "Context to Read First" files before starting
|
|
12757
12820
|
- Follow the "Do NOT" section strictly
|
|
12758
12821
|
- 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
|
-
-
|
|
12822
|
+
- Implement mandatory and in-scope work directly in this task. Preserve optional out-of-scope follow-ups as completion recommendations.
|
|
12760
12823
|
- Update documentation listed in "Must Update" and check "Check If Affected"
|
|
12761
12824
|
- 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,
|
|
12825
|
+
- NEVER remove features as "cleanup" \u2014 if something seems unused, record an optional completion recommendation for investigation instead
|
|
12763
12826
|
- Removing code is acceptable ONLY when it is explicitly part of your task's mission
|
|
12764
12827
|
- If you remove existing functionality, you MUST create a changeset in \`.changeset/\` explaining the removal and rationale
|
|
12765
12828
|
|
|
@@ -12806,6 +12869,13 @@ Lint, tests, and typecheck are also hard quality gates:
|
|
|
12806
12869
|
- Keep fixing failures caused by your change until lint, impacted tests, build, and typecheck pass.
|
|
12807
12870
|
- If the repository exposes a typecheck command, run it and fix failures caused by your change.
|
|
12808
12871
|
- When tests fail, classify whether the failure is caused by your change, a pre-existing defect, an unrelated flaky test, or an outdated test expectation.
|
|
12872
|
+
|
|
12873
|
+
**A behavior change owns every test that asserts the old behavior.** Targeted verification runs the tests for files you TOUCHED; the tests encoding the behavior you just changed usually live in files you did NOT touch, so a green targeted run is not evidence that none exist. Before finishing, search for them:
|
|
12874
|
+
- Added a guard, validation, or required field? Grep for the FIXTURES it will now refuse \u2014 they are outside your File Scope \u2014 and fix each to state its intent explicitly.
|
|
12875
|
+
- Removed a feature? Delete its tests. A test asserting a deliberately removed contract guards nothing, and making it pass later means re-adding removed behavior.
|
|
12876
|
+
- Changed an order, default, constant, or prompt string? Grep for the literal; topology lists, prompt-content assertions, and size budgets live far from the code they describe.
|
|
12877
|
+
- Added a public store/service method? Update the inventory/drift guards that require every public surface to be classified.
|
|
12878
|
+
Fix at the SHARED FIXTURE FACTORY, not per test \u2014 one helper usually explains dozens of failures. Never make a stale test pass by weakening it: update the fixture, record the new truth, or delete the test naming the change that removed its subject.
|
|
12809
12879
|
- If broad workspace verification fails on unrelated or pre-existing failures after impacted checks pass, do NOT expand this task by fixing unrelated areas. Log the evidence, quarantine flakes per project policy, or create/link a follow-up task.
|
|
12810
12880
|
- Do not repeatedly rerun a broad failing or hanging workspace command without a new hypothesis and a narrower confirming command.
|
|
12811
12881
|
|
|
@@ -13078,6 +13148,7 @@ files with assertions that run via a test runner. Typechecks and builds are NOT
|
|
|
13078
13148
|
tests. Manual verification is NOT a test.
|
|
13079
13149
|
|
|
13080
13150
|
- Each implementation step should include writing tests for the code being changed
|
|
13151
|
+
- **If the task CHANGES, GATES, or REMOVES existing behavior, include a step to find and update the tests that assert the OLD behavior.** Name the search in that step: the fixtures a new guard will now refuse, the tests of a removed feature, or the literal to grep for a changed order/default/constant/prompt string. Those tests live OUTSIDE the File Scope, so targeted verification will not surface them and the executor will not find them by accident. Measured 2026-08-24: five such changes left ~135 stale failing tests behind, every one having passed its own targeted verification; one shared fixture line accounted for 37 of them.
|
|
13081
13152
|
- For bug fixes and UI-affordance add/remove tasks, the spec MUST include a \`## Surface Enumeration\` section. The workflow Plan Review gate validates this before execution when plan review is enabled; missing coverage is a blocking REVISE.
|
|
13082
13153
|
- For bug fixes and UI-affordance add/remove tasks, populate \`## Surface Enumeration\` with this checklist from \`docs/testing.md\`: providers/bridges/execution paths; desktop + mobile breakpoints/platforms; empty/undefined/duplicate/populated data states; shared hooks/components/modules/helpers; every component that renders the affordance; leftover shells after removal.
|
|
13083
13154
|
- For bug fixes and UI-affordance add/remove tasks, regression tests must assert the invariant across all known surfaces \u2014 enumerate every provider/bridge, desktop + mobile breakpoints, empty/undefined/populated data states, and for UI-affordance changes every component rendering the affordance plus leftover shells after removal \u2014 not just the reported repro (see FN-5787/FN-5789/FN-5803, FN-5751, and FN-6115/FN-6118/FN-6123)
|
|
@@ -13433,7 +13504,7 @@ You have tools to report progress. The board updates in real-time.
|
|
|
13433
13504
|
|
|
13434
13505
|
**Logging important actions:** \`task_log(message="what happened")\`
|
|
13435
13506
|
|
|
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.
|
|
13507
|
+
**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
13508
|
|
|
13438
13509
|
**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
13510
|
|
|
@@ -13503,15 +13574,15 @@ If you attempt to write to a path outside the worktree, the file tools will reje
|
|
|
13503
13574
|
FNXC:WorkflowRouting 2026-06-22-17:26:
|
|
13504
13575
|
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
13576
|
-->
|
|
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.
|
|
13577
|
+
- 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
13578
|
- **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
13579
|
- Treat the File Scope in PROMPT.md as the expected starting scope, not a hard boundary when quality gates fail
|
|
13509
13580
|
- Read "Context to Read First" files before starting
|
|
13510
13581
|
- Follow the "Do NOT" section strictly
|
|
13511
13582
|
- 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
|
-
-
|
|
13583
|
+
- Implement mandatory and in-scope work directly in this task. Preserve optional out-of-scope follow-ups as completion recommendations.
|
|
13513
13584
|
- 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,
|
|
13585
|
+
- NEVER remove features as "cleanup" \u2014 if something seems unused, record an optional completion recommendation for investigation instead
|
|
13515
13586
|
- If you remove existing functionality, you MUST create a changeset in \`.changeset/\` explaining the removal and rationale
|
|
13516
13587
|
|
|
13517
13588
|
## Spawning Child Agents
|
|
@@ -14378,11 +14449,15 @@ var RAW_BUILTIN_CODING_WORKFLOW_IR = {
|
|
|
14378
14449
|
// execute → browser-verification (optional-group) → review. When the group is
|
|
14379
14450
|
// disabled it passes through with outcome=success and routes straight to review.
|
|
14380
14451
|
{ from: "execute", to: "browser-verification", condition: "success" },
|
|
14381
|
-
|
|
14382
|
-
|
|
14383
|
-
|
|
14384
|
-
|
|
14385
|
-
|
|
14452
|
+
/*
|
|
14453
|
+
FNXC:WorkspaceReviewSeal 2026-08-21-19:36:
|
|
14454
|
+
Completion summary runs before Code Review because its agent may acquire and write the task
|
|
14455
|
+
worktree. The approving review is the final write-capable pre-merge stage, so landing consumes
|
|
14456
|
+
evidence for the branch it will publish rather than evidence invalidated by a later summary.
|
|
14457
|
+
*/
|
|
14458
|
+
{ from: "browser-verification", to: "completion-summary", condition: "success" },
|
|
14459
|
+
{ from: "completion-summary", to: "code-review", condition: "success" },
|
|
14460
|
+
{ from: "code-review", to: "review", condition: "success" },
|
|
14386
14461
|
{ from: "review", to: "merge-gate", condition: "success" },
|
|
14387
14462
|
{ from: "merge-gate", to: "branch-group-member-integration", condition: "outcome:auto-on" },
|
|
14388
14463
|
{ from: "merge-gate", to: "merge-manual-hold", condition: "outcome:auto-off" },
|
|
@@ -14395,6 +14470,12 @@ var RAW_BUILTIN_CODING_WORKFLOW_IR = {
|
|
|
14395
14470
|
{ from: "merge-attempt", to: "post-merge-verification", condition: "success" },
|
|
14396
14471
|
{ from: "post-merge-verification", to: "end", condition: "success" },
|
|
14397
14472
|
{ from: "merge-attempt", to: "merge-retry", condition: "outcome:transient-failure" },
|
|
14473
|
+
/*
|
|
14474
|
+
FNXC:WorkspaceReviewReroute 2026-08-21-20:11:
|
|
14475
|
+
Evidence rejected during an active graph merge is a fresh Code Review obligation, never a
|
|
14476
|
+
merge retry. Route the typed result to the final review gate before another landing attempt.
|
|
14477
|
+
*/
|
|
14478
|
+
{ from: "merge-attempt", to: "code-review", condition: "outcome:workspace-review-required", kind: "rework" },
|
|
14398
14479
|
{ from: "merge-attempt", to: "merge-manual-hold", condition: "outcome:manual-required" },
|
|
14399
14480
|
{ from: "recovery-router", to: "merge-attempt", condition: "outcome:wake-merge", kind: "rework" },
|
|
14400
14481
|
{ from: "planning", to: "end", condition: "failure" },
|
|
@@ -14692,12 +14773,15 @@ var RAW_BUILTIN_STEPWISE_CODING_WORKFLOW_IR = {
|
|
|
14692
14773
|
// KTD-5: bounded rework exhaustion → manual hold; release re-enters the group.
|
|
14693
14774
|
{ from: "steps", to: "rework-hold", condition: "outcome:rework-exhausted" },
|
|
14694
14775
|
{ from: "rework-hold", to: "browser-verification", condition: "success" },
|
|
14695
|
-
|
|
14696
|
-
|
|
14697
|
-
|
|
14698
|
-
|
|
14699
|
-
|
|
14700
|
-
|
|
14776
|
+
/*
|
|
14777
|
+
FNXC:WorkspaceReviewSeal 2026-08-21-19:36:
|
|
14778
|
+
A completion-summary agent can acquire the task worktree. It therefore precedes Code Review;
|
|
14779
|
+
the approval becomes the final write-sensitive pre-merge gate and cannot be invalidated by the
|
|
14780
|
+
built-in workflow after it is recorded.
|
|
14781
|
+
*/
|
|
14782
|
+
{ from: "browser-verification", to: "completion-summary", condition: "success" },
|
|
14783
|
+
{ from: "completion-summary", to: "code-review", condition: "success" },
|
|
14784
|
+
{ from: "code-review", to: "merge-gate", condition: "success" },
|
|
14701
14785
|
{ from: "browser-verification", to: "browser-verification-remediation", condition: "failure" },
|
|
14702
14786
|
{ from: "browser-verification-remediation", to: "browser-verification", condition: "success", kind: "rework" },
|
|
14703
14787
|
{ from: "code-review", to: "code-review-remediation", condition: "failure" },
|
|
@@ -14723,6 +14807,12 @@ var RAW_BUILTIN_STEPWISE_CODING_WORKFLOW_IR = {
|
|
|
14723
14807
|
{ from: "merge-attempt", to: "post-merge-verification", condition: "success" },
|
|
14724
14808
|
{ from: "post-merge-verification", to: "end", condition: "success" },
|
|
14725
14809
|
{ from: "merge-attempt", to: "merge-retry", condition: "outcome:transient-failure" },
|
|
14810
|
+
/*
|
|
14811
|
+
FNXC:WorkspaceReviewReroute 2026-08-21-20:11:
|
|
14812
|
+
A stale workspace approval returns to the final Code Review gate through a bounded rework
|
|
14813
|
+
edge, preserving the existing graph owner instead of burning a merge retry.
|
|
14814
|
+
*/
|
|
14815
|
+
{ from: "merge-attempt", to: "code-review", condition: "outcome:workspace-review-required", kind: "rework" },
|
|
14726
14816
|
{ from: "merge-attempt", to: "merge-manual-hold", condition: "outcome:manual-required" },
|
|
14727
14817
|
{ from: "recovery-router", to: "merge-attempt", condition: "outcome:wake-merge", kind: "rework" },
|
|
14728
14818
|
{ from: "merge-attempt", to: "end", condition: "failure" }
|
|
@@ -14785,11 +14875,11 @@ var RAW_BUILTIN_STEPWISE_FINAL_REVIEW_CODING_WORKFLOW_IR = (() => {
|
|
|
14785
14875
|
if (!ir.edges.some((edge) => edge.from === "plan-replan" && edge.to === "plan-review" && edge.condition === "success")) {
|
|
14786
14876
|
ir.edges.push({ from: "plan-replan", to: "plan-review", condition: "success", kind: "rework" });
|
|
14787
14877
|
}
|
|
14788
|
-
if (!ir.edges.some((edge) => edge.from === "
|
|
14789
|
-
ir.edges.push({ from: "
|
|
14878
|
+
if (!ir.edges.some((edge) => edge.from === "completion-summary" && edge.to === "code-review" && edge.condition === "success")) {
|
|
14879
|
+
ir.edges.push({ from: "completion-summary", to: "code-review", condition: "success" });
|
|
14790
14880
|
}
|
|
14791
|
-
if (!ir.edges.some((edge) => edge.from === "
|
|
14792
|
-
ir.edges.push({ from: "
|
|
14881
|
+
if (!ir.edges.some((edge) => edge.from === "code-review" && edge.to === "merge-gate" && edge.condition === "success")) {
|
|
14882
|
+
ir.edges.push({ from: "code-review", to: "merge-gate", condition: "success" });
|
|
14793
14883
|
}
|
|
14794
14884
|
return ir;
|
|
14795
14885
|
})();
|
|
@@ -14869,8 +14959,8 @@ var RAW_BUILTIN_CODING_IDEAS_WORKFLOW_IR = (() => {
|
|
|
14869
14959
|
]);
|
|
14870
14960
|
v2.nodes = v2.nodes.filter((node) => !removedNodeIds.has(node.id));
|
|
14871
14961
|
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: "
|
|
14962
|
+
if (!v2.edges.some((edge) => edge.from === "steps" && edge.to === "completion-summary")) {
|
|
14963
|
+
v2.edges.push({ from: "steps", to: "completion-summary", condition: "success" });
|
|
14874
14964
|
}
|
|
14875
14965
|
if (!v2.edges.some((edge) => edge.from === "merge-attempt" && edge.to === "end" && edge.condition === "success")) {
|
|
14876
14966
|
v2.edges.push({ from: "merge-attempt", to: "end", condition: "success" });
|
|
@@ -15457,10 +15547,12 @@ function linear(spec) {
|
|
|
15457
15547
|
...hasBrowserVerification ? [browserVerificationRemediationNode("in-progress")] : [],
|
|
15458
15548
|
...hasCodeReview ? [codeReviewRemediationNode("in-progress")] : []
|
|
15459
15549
|
] : [];
|
|
15550
|
+
const noOpTerminalNode = hasPlanReview ? { id: "plan-review-no-op", kind: "gate", column: "todo", config: { workflowAction: "plan-review-no-op" } } : void 0;
|
|
15460
15551
|
const nodes2 = [
|
|
15461
15552
|
{ id: "start", kind: "start" },
|
|
15462
15553
|
...workflowNodes,
|
|
15463
15554
|
...remediationNodes,
|
|
15555
|
+
...noOpTerminalNode ? [noOpTerminalNode] : [],
|
|
15464
15556
|
{ id: "end", kind: "end" }
|
|
15465
15557
|
];
|
|
15466
15558
|
const edges = [];
|
|
@@ -15476,6 +15568,8 @@ function linear(spec) {
|
|
|
15476
15568
|
}
|
|
15477
15569
|
if (hasPlanReview) {
|
|
15478
15570
|
edges.push({ from: "plan-replan", to: "plan-review", condition: "success", kind: "rework" });
|
|
15571
|
+
edges.push({ from: "plan-review", to: "plan-review-no-op", condition: "outcome:close-no-op" });
|
|
15572
|
+
edges.push({ from: "plan-review-no-op", to: "end", condition: "success" });
|
|
15479
15573
|
}
|
|
15480
15574
|
if (hasBrowserVerification) {
|
|
15481
15575
|
edges.push({
|