@runfusion/fusion 0.78.0-beta.3 → 0.78.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.js +4076 -4950
- package/dist/child-process-worker.js +3064 -3550
- package/dist/client/.vite/manifest.json +259 -259
- package/dist/client/assets/{AgentDetailView-DAtUBPar.js → AgentDetailView-BVDrAj1Y.js} +3 -3
- package/dist/client/assets/AgentDetailView-DaSEdzYy.css +1 -0
- package/dist/client/assets/{AgentPermissionPolicyEditor-Cth5Qyvz.js → AgentPermissionPolicyEditor--11QLSt_.js} +1 -1
- package/dist/client/assets/{AgentsView-D6odi29-.js → AgentsView-D3mLjE0-.js} +4 -4
- package/dist/client/assets/{CommandCenter-DUlZFMvJ.js → CommandCenter-CPy2a26y.js} +1 -1
- package/dist/client/assets/{DevServerView-GD1-vwId.js → DevServerView-CWHhisoR.js} +1 -1
- package/dist/client/assets/{DirectoryPicker-De3Q7_zu.js → DirectoryPicker-DMd9MEtq.js} +1 -1
- package/dist/client/assets/DocumentsView-YeYy6DJV.js +1 -0
- package/dist/client/assets/{EvalsView-CYfclysr.js → EvalsView-DfvYGoX4.js} +1 -1
- package/dist/client/assets/{ExperimentalAgentOnboardingModal-B1dQuReY.js → ExperimentalAgentOnboardingModal-CFjRfBUk.js} +1 -1
- package/dist/client/assets/{GoalsView-BHxjegdt.js → GoalsView-DdlI85_-.js} +1 -1
- package/dist/client/assets/InsightsView-Du2UKeQE.js +11 -0
- package/dist/client/assets/{MemoryView-O8vfqipX.js → MemoryView-DeSuPKc7.js} +1 -1
- package/dist/client/assets/{PatchnodeView-WM5ZlnTS.js → PatchnodeView-Ow5ErHE3.js} +1 -1
- package/dist/client/assets/{PiExtensionsManager-BrTit_vk.js → PiExtensionsManager-D65p_Z4a.js} +1 -1
- package/dist/client/assets/{PluginManager-DBUm9Q30.js → PluginManager-BruzVBGM.js} +1 -1
- package/dist/client/assets/{PullRequestView-DW9EqNT3.js → PullRequestView-BTzsKxrq.js} +1 -1
- package/dist/client/assets/{ReportModal-Cv7Lxy1u.js → ReportModal-YpkrGp21.js} +2 -2
- package/dist/client/assets/ResearchView-D0oWTBMk.js +2 -0
- package/dist/client/assets/{SecretsView-C2K-n5_X.js → SecretsView-B6ZH6O1O.js} +1 -1
- package/dist/client/assets/{SettingsModal-Crpg0GmF.js → SettingsModal-CN4NVtbD.js} +1 -1
- package/dist/client/assets/SettingsModal-CmPRFol7.css +1 -0
- package/dist/client/assets/SettingsModal-CwUcFHcw.js +21 -0
- package/dist/client/assets/{SettingsTextareaRow-B7FIDTtF.js → SettingsTextareaRow-B_iNwevV.js} +1 -1
- package/dist/client/assets/{SetupWizardModal-CBWFrde9.js → SetupWizardModal-BSAtv8xH.js} +2 -2
- package/dist/client/assets/{SkillsView-B1l4qkYj.js → SkillsView-DhhiUAPO.js} +1 -1
- package/dist/client/assets/{WorkflowNodeEditor-e122mQ0Z.js → WorkflowNodeEditor-YeZ_DH3a.js} +1 -1
- package/dist/client/assets/{agent-import-generation-CX_NVRPC.js → agent-import-generation-BPFU14s8.js} +1 -1
- package/dist/client/assets/{agentsOrgChartLayout-BAhAecHd.js → agentsOrgChartLayout-CWqQ9XMW.js} +1 -1
- package/dist/client/assets/app-BVuhE-pB.js +3 -0
- package/dist/client/assets/app-BVz53oEh.js +9 -0
- package/dist/client/assets/app-BfzM5z-d.js +9 -0
- package/dist/client/assets/app-BgtLSw3s.js +9 -0
- package/dist/client/assets/app-BpjF_vWi.js +9 -0
- package/dist/client/assets/app-Cjqb3Hrq.js +3 -0
- package/dist/client/assets/app-CoyPSunU.js +9 -0
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-BOmFDW7M.js → architectureDiagram-3BPJPVTR-DX2xxWsB.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-D7CnZ9-e.js → blockDiagram-GPEHLZMM-tVB-pLpH.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-CQZw8PeP.js → c4Diagram-AAUBKEIU-BEV-l4nl.js} +1 -1
- package/dist/client/assets/channel-BoqUD_yo.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-DBS2o2AZ.js → chunk-2J33WTMH-DduonyQt.js} +1 -1
- package/dist/client/assets/{chunk-4BX2VUAB-CFKEnTmJ.js → chunk-4BX2VUAB-BPCXybBl.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-DpjYRScs.js → chunk-55IACEB6-ByqbaUCB.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-Db7lQvPG.js → chunk-727SXJPM-DdtczHe_.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-rSGEvDdj.js → chunk-AQP2D5EJ-V5pHkNOZ.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-Cdi9zNME.js → chunk-FMBD7UC4-i0P_U91V.js} +1 -1
- package/dist/client/assets/{chunk-ND2GUHAM-D_3BQZ27.js → chunk-ND2GUHAM-BWdXSws9.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-DnVoTnz9.js → chunk-QZHKN3VN-C7vpw2O4.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-5Yk5cF5o.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-5Yk5cF5o.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-HQFw9frh.js → cose-bilkent-S5V4N54A-C_OJmqvv.js} +1 -1
- package/dist/client/assets/{dagre-BM42HDAG-BdHp0sc2.js → dagre-BM42HDAG-DlxhXtcR.js} +1 -1
- package/dist/client/assets/{dashboard-view-C3vvo4zP.js → dashboard-view-C_aj9Avl.js} +2 -2
- package/dist/client/assets/{dashboard-view-mWhkEiwE.js → dashboard-view-CtFwciFc.js} +1 -1
- package/dist/client/assets/dashboard-view-Cy2aXOHq.js +1 -0
- package/dist/client/assets/{dashboard-view-DaqL1Ufr.js → dashboard-view-ZNgeI6tK.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-BDu9AETT.js → diagram-2AECGRRQ-B5OQ5SjT.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-2qzqfWTz.js → diagram-5GNKFQAL-OnHyeSDX.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-DYa-tplS.js → diagram-KO2AKTUF-BESRlk6K.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-ChwcQccK.js → diagram-LMA3HP47-jc5KVOgo.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-DoGKft5E.js → diagram-OG6HWLK6-CbvV1B1C.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-5dsSgUXk.js → erDiagram-TEJ5UH35-CU4gukmG.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-BOHB4RzL.js → flowDiagram-I6XJVG4X-Dq9UKge4.js} +1 -1
- package/dist/client/assets/{folder-open-BQcY8jvq.js → folder-open-CF9O-sX4.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-BD3aivUG.js → ganttDiagram-6RSMTGT7-BWA_00UM.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-HBZEAECF.js → gitGraphDiagram-PVQCEYII-DKdPzNtQ.js} +1 -1
- package/dist/client/assets/index-CiVIbypZ.js +2949 -0
- package/dist/client/assets/index-Duxgoh_Y.css +1 -0
- package/dist/client/assets/{infoDiagram-5YYISTIA-d7hsqM0V.js → infoDiagram-5YYISTIA-BvusFnLt.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-k4Dnhc_y.js → ishikawaDiagram-YF4QCWOH-NLucC59B.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-Dh3yqZPQ.js → journeyDiagram-JHISSGLW-OMF0ZqP2.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-BYqpe7Ju.js → kanban-definition-UN3LZRKU-DcIw1Gei.js} +1 -1
- package/dist/client/assets/{mermaid.core-D5Ccw5tQ.js → mermaid.core-BXdGnca4.js} +4 -4
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-D64P3Mc4.js → mindmap-definition-RKZ34NQL-CJdZ2giE.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-CtMfKnlZ.js → pieDiagram-4H26LBE5-CIS3IXyQ.js} +1 -1
- package/dist/client/assets/{puzzle-D4y4g-nb.js → puzzle-DLP4jrVO.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-B5gSMr9M.js → quadrantDiagram-W4KKPZXB-CyXg_FqY.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-DKtBfWDi.js → requirementDiagram-4Y6WPE33-Cl5zZfEW.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-BcWeBcNk.js → sankeyDiagram-5OEKKPKP-RPvS_KDe.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-Crp7Mc0M.js → sequenceDiagram-3UESZ5HK-mqxbDVma.js} +1 -1
- package/dist/client/assets/{standing-instructions-template-lD5Vcanq.js → standing-instructions-template-oByMjuf9.js} +1 -1
- package/dist/client/assets/{stateDiagram-AJRCARHV-CA5FEPYe.js → stateDiagram-AJRCARHV-BMThgwA0.js} +1 -1
- package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-Bo75sO6t.js → stateDiagram-v2-BHNVJYJU-BQQVmi0s.js} +1 -1
- package/dist/client/assets/{timeline-definition-PNZ67QCA-Dmr4NeTD.js → timeline-definition-PNZ67QCA-DxRT4zz3.js} +1 -1
- package/dist/client/assets/{upload-CzJ1o8Px.js → upload-C1hBXwxT.js} +1 -1
- package/dist/client/assets/{users-BMnytPKO.js → users-CUTsjdYo.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN-DfbBSNgT.js → vennDiagram-CIIHVFJN-CplrXnmO.js} +1 -1
- package/dist/client/assets/{wardley-L42UT6IY-Wxq1L5VU.js → wardley-L42UT6IY-DN3nUl9Y.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-D6HnIS8j.js → wardleyDiagram-YWT4CUSO-C0hUcS3e.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-5MfFlu30.js → xychartDiagram-2RQKCTM6-CDB05pHe.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 +3278 -3998
- package/dist/pi-claude-cli/package.json +1 -1
- package/dist/plugin-sdk/index.d.ts +104 -125
- package/dist/plugin-sdk/index.js +35 -93
- package/dist/plugins/fusion-plugin-acp-runtime/bundled.js +35 -93
- package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-claude-runtime/bundled.js +35 -93
- package/dist/plugins/fusion-plugin-claude-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-cli-printing-press/bundled.js +35 -93
- package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
- package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +35 -93
- package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
- package/dist/plugins/fusion-plugin-cursor-runtime/bundled.js +35 -93
- package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-dependency-graph/bundled.js +35 -93
- package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
- package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +35 -93
- package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-grok-runtime/bundled.js +35 -93
- package/dist/plugins/fusion-plugin-grok-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-hermes-runtime/bundled.js +35 -93
- package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-linear-import/bundled.js +35 -93
- package/dist/plugins/fusion-plugin-linear-import/package.json +1 -1
- package/dist/plugins/fusion-plugin-omp-runtime/bundled.js +35 -93
- package/dist/plugins/fusion-plugin-omp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-openclaw-runtime/bundled.js +35 -93
- package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-paperclip-runtime/bundled.js +35 -93
- package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-quality/bundled.js +35 -93
- package/dist/plugins/fusion-plugin-quality/package.json +1 -1
- package/dist/plugins/fusion-plugin-reports/bundled.js +35 -93
- package/dist/plugins/fusion-plugin-reports/package.json +1 -1
- package/dist/plugins/fusion-plugin-roadmap/bundled.js +35 -93
- package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
- package/dist/plugins/fusion-plugin-todos/bundled.js +35 -93
- package/dist/plugins/fusion-plugin-todos/package.json +1 -1
- package/dist/plugins/fusion-plugin-whatsapp-chat/bundled.js +35 -93
- package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
- package/package.json +1 -1
- package/skill/fusion/SKILL.md +1 -1
- package/skill/fusion/references/best-practices.md +2 -2
- package/skill/fusion/references/cli-commands.md +0 -2
- package/skill/fusion/references/engine-tools.md +2 -2
- package/skill/fusion/references/extension-tools.md +1 -18
- package/skill/fusion/references/fusion-capabilities.md +1 -4
- package/skill/fusion/references/task-structure.md +1 -1
- package/skill/fusion/workflows/task-lifecycle.md +5 -9
- package/skill/fusion/workflows/task-management.md +1 -3
- package/dist/client/assets/AgentDetailView-DPoh46Ym.css +0 -1
- package/dist/client/assets/DocumentsView-BMYBV8DV.js +0 -1
- package/dist/client/assets/InsightsView-DK0EP68R.js +0 -11
- package/dist/client/assets/ResearchView-DDGbBXlh.js +0 -2
- package/dist/client/assets/SettingsModal-C7npF9nB.js +0 -21
- package/dist/client/assets/SettingsModal-Crai1dEI.css +0 -1
- package/dist/client/assets/app-BO1iuWOt.js +0 -13
- package/dist/client/assets/app-BRFfR55q.js +0 -5
- package/dist/client/assets/app-BW03hpJV.js +0 -13
- package/dist/client/assets/app-B_skBURN.js +0 -13
- package/dist/client/assets/app-C0JL4IcI.js +0 -13
- package/dist/client/assets/app-C5uZ_9kI.js +0 -13
- package/dist/client/assets/app-DxFiSzSJ.js +0 -5
- package/dist/client/assets/channel-Drj7VQBu.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-DGxwjUYU.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-DGxwjUYU.js +0 -1
- package/dist/client/assets/dashboard-view-CoxDPI4m.js +0 -1
- package/dist/client/assets/index-26HUNwwJ.css +0 -1
- package/dist/client/assets/index-QU8sENvc.js +0 -2959
|
@@ -9166,6 +9166,11 @@ var DEFAULT_GLOBAL_SETTINGS = {
|
|
|
9166
9166
|
*/
|
|
9167
9167
|
quickAddSubmitOnEnter: true,
|
|
9168
9168
|
/*
|
|
9169
|
+
FNXC:ChatComposer 2026-09-06-01:54:
|
|
9170
|
+
Le comportement automatique des trois composeurs insère une nouvelle ligne pour un pointeur tactile primaire et conserve l’envoi par Entrée avec une souris, y compris dans une fenêtre étroite. Cette préférence d’opérateur reste globale et ne s’applique qu’à Entrée sans Cmd/Ctrl ni Shift, après l’autocomplétion, Shift et la garde IME propre au Chat de tâche.
|
|
9171
|
+
*/
|
|
9172
|
+
chatSubmitOnEnter: "auto",
|
|
9173
|
+
/*
|
|
9169
9174
|
FNXC:ChatSnippets 2026-09-03-15:56:
|
|
9170
9175
|
Keep the optional global key present but undefined so scope-key derivation remains complete without sharing a mutable default array. readChatSnippets supplies a fresh effective empty list.
|
|
9171
9176
|
*/
|
|
@@ -9757,15 +9762,7 @@ var DEFAULT_PROJECT_SETTINGS = {
|
|
|
9757
9762
|
// maxPostReviewFixes MOVED to workflow settings (U4).
|
|
9758
9763
|
// Run maintenance (including WAL checkpointing) every 5 minutes by default.
|
|
9759
9764
|
maintenanceIntervalMs: 3e5,
|
|
9760
|
-
autoArchiveDoneTasksEnabled: true,
|
|
9761
|
-
autoArchiveDoneAfterMs: 48 * 60 * 60 * 1e3,
|
|
9762
|
-
doneAutoArchiveDays: 0,
|
|
9763
|
-
// FNXC:DuplicateIntake 2026-07-07-00:00 (FN-7658): default OFF — operators
|
|
9764
|
-
// decide via the near-duplicate flag/UI instead of tasks silently vanishing
|
|
9765
|
-
// into `archived` during intake. Set true to restore the pre-FN-7658 behavior.
|
|
9766
|
-
autoArchiveDuplicateTasksEnabled: false,
|
|
9767
9765
|
triageDuplicateResolution: "prompt",
|
|
9768
|
-
archiveAgentLogMode: "compact",
|
|
9769
9766
|
autoUpdatePrStatus: false,
|
|
9770
9767
|
githubCommentOnDone: false,
|
|
9771
9768
|
githubCommentTemplate: void 0,
|
|
@@ -9860,6 +9857,7 @@ var DEFAULT_PROJECT_SETTINGS = {
|
|
|
9860
9857
|
prTitlePromptInstructions: void 0,
|
|
9861
9858
|
prDescriptionPromptInstructions: void 0,
|
|
9862
9859
|
scripts: void 0,
|
|
9860
|
+
scriptMetadata: void 0,
|
|
9863
9861
|
setupScript: void 0,
|
|
9864
9862
|
insightExtractionEnabled: false,
|
|
9865
9863
|
insightExtractionSchedule: "0 2 * * *",
|
|
@@ -10085,8 +10083,6 @@ var AGENT_PERMISSIONS = [
|
|
|
10085
10083
|
// Merge completed task branches
|
|
10086
10084
|
"tasks:delete",
|
|
10087
10085
|
// Delete tasks
|
|
10088
|
-
"tasks:archive",
|
|
10089
|
-
// Archive/unarchive tasks
|
|
10090
10086
|
"agents:create",
|
|
10091
10087
|
// Create new agents
|
|
10092
10088
|
"agents:update",
|
|
@@ -10326,8 +10322,13 @@ function completionSummaryNode(column) {
|
|
|
10326
10322
|
// ../core/src/missions/mission-types.ts
|
|
10327
10323
|
var VALIDATION_INFLIGHT_STALE_MAX_AGE_MS = 6 * 60 * 60 * 1e3;
|
|
10328
10324
|
|
|
10325
|
+
// ../core/src/types.ts
|
|
10326
|
+
var RETIRED_BUILTIN_WORKFLOW_SUCCESSORS = /* @__PURE__ */ new Map([
|
|
10327
|
+
["builtin:coding-ideas", "builtin:coding-ideas-v2"]
|
|
10328
|
+
]);
|
|
10329
|
+
|
|
10329
10330
|
// ../core/src/workflows/trait-types.ts
|
|
10330
|
-
var RESTRICTED_TRAIT_FLAGS = ["complete"
|
|
10331
|
+
var RESTRICTED_TRAIT_FLAGS = ["complete"];
|
|
10331
10332
|
function traitHookKey(traitId, hookKind) {
|
|
10332
10333
|
return `${traitId}::${hookKind}`;
|
|
10333
10334
|
}
|
|
@@ -10527,15 +10528,6 @@ var TraitRegistry = class {
|
|
|
10527
10528
|
message: `Column '${column.id}' is both a completion column and an intake column`
|
|
10528
10529
|
});
|
|
10529
10530
|
}
|
|
10530
|
-
if (flags.archived && flags.countsTowardWip) {
|
|
10531
|
-
violations.push({
|
|
10532
|
-
code: "archived-with-wip",
|
|
10533
|
-
severity: "error",
|
|
10534
|
-
columnId: column.id,
|
|
10535
|
-
traitIds: this.traitIdsWithFlags(knownDefs, ["archived", "countsTowardWip"]),
|
|
10536
|
-
message: `Column '${column.id}' is archived but counts toward WIP \u2014 archived cards must not hold capacity`
|
|
10537
|
-
});
|
|
10538
|
-
}
|
|
10539
10531
|
if (flags.intake) intakeColumnCount += 1;
|
|
10540
10532
|
}
|
|
10541
10533
|
if (intakeColumnCount > 1) {
|
|
@@ -10718,13 +10710,6 @@ var BUILTIN_TRAIT_DEFINITIONS = [
|
|
|
10718
10710
|
builtin: true,
|
|
10719
10711
|
flags: { complete: true }
|
|
10720
10712
|
},
|
|
10721
|
-
{
|
|
10722
|
-
id: "archived",
|
|
10723
|
-
name: "Archived",
|
|
10724
|
-
description: "Hidden from board; global semantics. Restricted flag.",
|
|
10725
|
-
builtin: true,
|
|
10726
|
-
flags: { archived: true, hiddenFromBoard: true }
|
|
10727
|
-
},
|
|
10728
10713
|
{
|
|
10729
10714
|
id: "merge-blocker",
|
|
10730
10715
|
name: "Merge blocker",
|
|
@@ -11018,8 +11003,7 @@ var DEFAULT_WORKFLOW_COLUMN_IDS = [
|
|
|
11018
11003
|
"todo",
|
|
11019
11004
|
"in-progress",
|
|
11020
11005
|
"in-review",
|
|
11021
|
-
"done"
|
|
11022
|
-
"archived"
|
|
11006
|
+
"done"
|
|
11023
11007
|
];
|
|
11024
11008
|
function defaultColumnForNode(node) {
|
|
11025
11009
|
const seam = node.config?.seam;
|
|
@@ -13169,7 +13153,7 @@ Write a lean, executable PROMPT.md quickly. Preserve safety gates, but skip heav
|
|
|
13169
13153
|
- Preserve required safety sections for bugs, workflow routing, forensic tasks, and decision-only work.
|
|
13170
13154
|
|
|
13171
13155
|
## Duplicate check
|
|
13172
|
-
Before writing a spec, call \`fn_task_list\` for active work, then call \`fn_task_search\` with \`includeDone: false\`
|
|
13156
|
+
Before writing a spec, call \`fn_task_list\` for active work, then call \`fn_task_search\` with \`includeDone: false\` for 2-4 targeted keyword phrases from the title/description, such as file paths, symptoms, and symbols. Do not search completed work for duplicate candidates. When an active match is a duplicate, do not write a spec \u2014 but still write PROMPT.md, with its entire contents being the single line \`DUPLICATE: {existing-task-id}\` and nothing else. That file is how the duplicate is recorded; announcing it only in your reply leaves no plan behind and re-plans the task in a loop.
|
|
13173
13157
|
|
|
13174
13158
|
## Required PROMPT.md shape
|
|
13175
13159
|
Write PROMPT.md with Original Description, What This Delivers, Before \u2192 After Transformation, Mission, Dependencies, Context to Read First, File Scope, Steps, Documentation Requirements, Completion Criteria, Git Commit Convention, and Do NOT. Put \`## Original Description\` immediately after the title/\`Created\`/\`Size\` metadata with the operator's original task description copied **verbatim** (do not paraphrase). Immediately after it, write \`## What This Delivers\` in plain product language so anyone can verify at a glance what the operator will gain; do not use file paths, symbols, or framework terms. Put \`## Before \u2192 After Transformation\` next, before \`## Mission\`, with concise Before/After bullets: current state, target state, why it satisfies the user's request at a glance. In \`## Steps\`, every executable heading MUST use \`### Step N: <name>\` (e.g. \`### Step 0: Preflight\`), numbered 0-based from \`### Step 0:\` through \`### Step N-1:\` with no gaps. Do not write bare \`### Preflight\` / \`### Implementation\` headings, and do not add review-level, triage subtask, or proactive subtask headings.
|
|
@@ -13454,8 +13438,8 @@ Verified facts about this codebase's storage \u2014 cite these correctly so Plan
|
|
|
13454
13438
|
- New Postgres migrations must be **registered explicitly** in \`packages/core/src/postgres/schema-applier.ts\` (version constant + bookkeeping check); a \`.sql\` file dropped in the migrations dir that is not wired there silently never runs.
|
|
13455
13439
|
|
|
13456
13440
|
## Duplicate check
|
|
13457
|
-
Before writing a spec, first call \`fn_task_list\` to see active tasks, then call \`fn_task_search\` with \`includeDone: false\`
|
|
13458
|
-
Do not search completed
|
|
13441
|
+
Before writing a spec, first call \`fn_task_list\` to see active tasks, then call \`fn_task_search\` with \`includeDone: false\` for 2-4 distinct keyword phrases from the task title and description (for example file paths, error symptoms, and symbol names).
|
|
13442
|
+
Do not search completed work for duplicate candidates.
|
|
13459
13443
|
If an actionable task already covers the same work (even if worded differently), do not write a spec.
|
|
13460
13444
|
Instead you MUST still write PROMPT.md, with its ENTIRE contents being this one line and nothing else:
|
|
13461
13445
|
\`DUPLICATE: {existing-task-id}\`
|
|
@@ -14611,8 +14595,7 @@ var RAW_BUILTIN_CODING_WORKFLOW_IR = {
|
|
|
14611
14595
|
name: "In review",
|
|
14612
14596
|
traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
|
|
14613
14597
|
},
|
|
14614
|
-
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
14615
|
-
{ id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
|
|
14598
|
+
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
14616
14599
|
],
|
|
14617
14600
|
nodes: [
|
|
14618
14601
|
{ id: "start", kind: "start", column: "triage" },
|
|
@@ -14817,8 +14800,7 @@ var RAW_BUILTIN_STEPWISE_CODING_WORKFLOW_IR = {
|
|
|
14817
14800
|
name: "In review",
|
|
14818
14801
|
traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
|
|
14819
14802
|
},
|
|
14820
|
-
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
14821
|
-
{ id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
|
|
14803
|
+
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
14822
14804
|
],
|
|
14823
14805
|
// KTD-12: PROMPT.md is the planning-produced step-source artifact this workflow
|
|
14824
14806
|
// parses into task steps.
|
|
@@ -15169,8 +15151,7 @@ var CODING_IDEAS_COLUMNS = [
|
|
|
15169
15151
|
name: "In review",
|
|
15170
15152
|
traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
|
|
15171
15153
|
},
|
|
15172
|
-
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
15173
|
-
{ id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
|
|
15154
|
+
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
15174
15155
|
];
|
|
15175
15156
|
var RAW_BUILTIN_CODING_IDEAS_WORKFLOW_IR = (() => {
|
|
15176
15157
|
const ir = JSON.parse(JSON.stringify(BUILTIN_STEPWISE_FINAL_REVIEW_CODING_WORKFLOW_IR));
|
|
@@ -15445,8 +15426,7 @@ var RAW_BUILTIN_LEAD_GENERATION_WORKFLOW_IR = {
|
|
|
15445
15426
|
{ trait: "stall-detection", config: { timeoutMs: 864e5, action: "notify" } }
|
|
15446
15427
|
]
|
|
15447
15428
|
},
|
|
15448
|
-
{ id: "converted", name: "Converted", traits: [{ trait: "complete" }] }
|
|
15449
|
-
{ id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
|
|
15429
|
+
{ id: "converted", name: "Converted", traits: [{ trait: "complete" }] }
|
|
15450
15430
|
],
|
|
15451
15431
|
fields: [
|
|
15452
15432
|
{ id: "company", name: "Company", type: "string", render: { placement: "card", widget: "input" } },
|
|
@@ -15576,8 +15556,7 @@ var RAW_BUILTIN_MARKETING_WORKFLOW_IR = {
|
|
|
15576
15556
|
name: "Editorial review",
|
|
15577
15557
|
traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
|
|
15578
15558
|
},
|
|
15579
|
-
{ id: "published", name: "Published", traits: [{ trait: "complete" }] }
|
|
15580
|
-
{ id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
|
|
15559
|
+
{ id: "published", name: "Published", traits: [{ trait: "complete" }] }
|
|
15581
15560
|
],
|
|
15582
15561
|
nodes: [
|
|
15583
15562
|
{ id: "start", kind: "start", column: "ideation" },
|
|
@@ -15680,8 +15659,7 @@ var RAW_BUILTIN_PR_WORKFLOW_IR = {
|
|
|
15680
15659
|
// move (no PR knowledge in the substrate).
|
|
15681
15660
|
traits: [{ trait: "merge-blocker" }, { trait: "stall-detection" }]
|
|
15682
15661
|
},
|
|
15683
|
-
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
15684
|
-
{ id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
|
|
15662
|
+
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
15685
15663
|
],
|
|
15686
15664
|
nodes: [
|
|
15687
15665
|
{ id: "start", kind: "start", column: "triage" },
|
|
@@ -15784,6 +15762,9 @@ var BUILTIN_WORKFLOW_ID_PREFIX = "builtin:";
|
|
|
15784
15762
|
function isBuiltinWorkflowId(id) {
|
|
15785
15763
|
return id.startsWith(BUILTIN_WORKFLOW_ID_PREFIX);
|
|
15786
15764
|
}
|
|
15765
|
+
function resolveRetiredBuiltinWorkflowId(id) {
|
|
15766
|
+
return RETIRED_BUILTIN_WORKFLOW_SUCCESSORS.get(id) ?? id;
|
|
15767
|
+
}
|
|
15787
15768
|
function ceCodeReviewOptionalGroupNode(column) {
|
|
15788
15769
|
return {
|
|
15789
15770
|
id: "code-review",
|
|
@@ -16046,7 +16027,7 @@ function withPostMergeVerificationNode(nodes2) {
|
|
|
16046
16027
|
var BUILTIN_WORKFLOWS = [
|
|
16047
16028
|
{
|
|
16048
16029
|
id: "builtin:coding",
|
|
16049
|
-
name: "Coding",
|
|
16030
|
+
name: "Coding (Auto)",
|
|
16050
16031
|
description: "Default coding pipeline: plan steps, execute them one at a time, then run the optional final code review and merge.",
|
|
16051
16032
|
kind: "workflow",
|
|
16052
16033
|
ir: BUILTIN_STEPWISE_FINAL_REVIEW_CODING_WORKFLOW_IR,
|
|
@@ -16078,44 +16059,6 @@ var BUILTIN_WORKFLOWS = [
|
|
|
16078
16059
|
createdAt: BUILTIN_TS,
|
|
16079
16060
|
updatedAt: BUILTIN_TS
|
|
16080
16061
|
},
|
|
16081
|
-
/*
|
|
16082
|
-
* FNXC:CodingIdeasWorkflow 2026-07-04-09:40:
|
|
16083
|
-
* The Coding (Ideas) variant adds a manual "Ideas" intake in front of the default stepwise pipeline. New cards land in "ideas" (autoTriage off) and are not planned until an operator promotes them into the merged "todo" planner column; from there the graph is identical to the default Coding workflow.
|
|
16084
|
-
*/
|
|
16085
|
-
{
|
|
16086
|
-
id: "builtin:coding-ideas",
|
|
16087
|
-
name: "Coding (Ideas)",
|
|
16088
|
-
description: "Capture-first coding pipeline: park ideas in a manual intake, then plan, execute per step, run the optional final code review, and merge.",
|
|
16089
|
-
kind: "workflow",
|
|
16090
|
-
ir: BUILTIN_CODING_IDEAS_WORKFLOW_IR,
|
|
16091
|
-
layout: {
|
|
16092
|
-
start: { x: 60, y: 160 },
|
|
16093
|
-
plan: { x: 230, y: 160 },
|
|
16094
|
-
"plan-review": { x: 400, y: 160 },
|
|
16095
|
-
"plan-replan": { x: 400, y: 320 },
|
|
16096
|
-
"plan-review-no-op": { x: 570, y: 320 },
|
|
16097
|
-
parse: { x: 570, y: 160 },
|
|
16098
|
-
steps: { x: 740, y: 160 },
|
|
16099
|
-
/* U8: the pending-review park is an exit, not a stage — placed off the main line. */
|
|
16100
|
-
"review-pending-handoff": { x: 740, y: 320 },
|
|
16101
|
-
"browser-verification": { x: 910, y: 160 },
|
|
16102
|
-
"browser-verification-remediation": { x: 910, y: 320 },
|
|
16103
|
-
"code-review": { x: 1080, y: 160 },
|
|
16104
|
-
"code-review-remediation": { x: 1080, y: 320 },
|
|
16105
|
-
"completion-summary": { x: 1250, y: 160 },
|
|
16106
|
-
"merge-gate": { x: 1420, y: 160 },
|
|
16107
|
-
"branch-group-member-integration": { x: 1590, y: 80 },
|
|
16108
|
-
"branch-group-promotion": { x: 1760, y: 80 },
|
|
16109
|
-
"merge-attempt": { x: 1930, y: 160 },
|
|
16110
|
-
"merge-retry": { x: 2100, y: 80 },
|
|
16111
|
-
"recovery-router": { x: 2100, y: 240 },
|
|
16112
|
-
"merge-manual-hold": { x: 1590, y: 240 },
|
|
16113
|
-
"post-merge-verification": { x: 2270, y: 160 },
|
|
16114
|
-
end: { x: 2440, y: 160 }
|
|
16115
|
-
},
|
|
16116
|
-
createdAt: BUILTIN_TS,
|
|
16117
|
-
updatedAt: BUILTIN_TS
|
|
16118
|
-
},
|
|
16119
16062
|
/*
|
|
16120
16063
|
* FNXC:CodingIdeasV2Workflow 2026-08-26-05:56:
|
|
16121
16064
|
* Same Ideas board as builtin:coding-ideas, with one rule: in-review NEVER writes code.
|
|
@@ -16129,7 +16072,7 @@ var BUILTIN_WORKFLOWS = [
|
|
|
16129
16072
|
*/
|
|
16130
16073
|
{
|
|
16131
16074
|
id: "builtin:coding-ideas-v2",
|
|
16132
|
-
name: "Coding (Ideas)
|
|
16075
|
+
name: "Coding (Ideas)",
|
|
16133
16076
|
description: "Capture-first coding pipeline with a read-only review lane: park ideas in a manual intake, plan, implement and test per step, then review, document, and merge.",
|
|
16134
16077
|
kind: "workflow",
|
|
16135
16078
|
ir: BUILTIN_CODING_IDEAS_V2_WORKFLOW_IR,
|
|
@@ -16525,7 +16468,7 @@ var BUILTIN_WORKFLOWS = [
|
|
|
16525
16468
|
];
|
|
16526
16469
|
var BUILTIN_BY_ID = new Map(BUILTIN_WORKFLOWS.map((wf) => [wf.id, wf]));
|
|
16527
16470
|
function getBuiltinWorkflow(id) {
|
|
16528
|
-
return BUILTIN_BY_ID.get(id);
|
|
16471
|
+
return BUILTIN_BY_ID.get(resolveRetiredBuiltinWorkflowId(id));
|
|
16529
16472
|
}
|
|
16530
16473
|
var DEFAULT_WORKFLOW_ID = "builtin:coding";
|
|
16531
16474
|
function resolveDefaultWorkflowIr() {
|
|
@@ -16575,7 +16518,8 @@ function defaultCodingWorkflowIr() {
|
|
|
16575
16518
|
return resolveDefaultWorkflowIr();
|
|
16576
16519
|
}
|
|
16577
16520
|
var inflightSelectionReads = /* @__PURE__ */ new WeakMap();
|
|
16578
|
-
async function resolveWorkflowIrById(store,
|
|
16521
|
+
async function resolveWorkflowIrById(store, requestedWorkflowId, irCache) {
|
|
16522
|
+
const workflowId = resolveRetiredBuiltinWorkflowId(requestedWorkflowId);
|
|
16579
16523
|
let projectId;
|
|
16580
16524
|
try {
|
|
16581
16525
|
projectId = store.getWorkflowSettingsProjectId?.();
|
|
@@ -16670,8 +16614,7 @@ var LIFECYCLE_ROLE_FLAGS = {
|
|
|
16670
16614
|
hold: "hold",
|
|
16671
16615
|
wip: "countsTowardWip",
|
|
16672
16616
|
review: "mergeOrchestration",
|
|
16673
|
-
complete: "complete"
|
|
16674
|
-
archived: "archived"
|
|
16617
|
+
complete: "complete"
|
|
16675
16618
|
};
|
|
16676
16619
|
function resolveLifecycleColumns(ir) {
|
|
16677
16620
|
const columns = columnsOf(ir);
|
|
@@ -16684,8 +16627,7 @@ function resolveLifecycleColumns(ir) {
|
|
|
16684
16627
|
hold: first(LIFECYCLE_ROLE_FLAGS.hold),
|
|
16685
16628
|
wip: first(LIFECYCLE_ROLE_FLAGS.wip),
|
|
16686
16629
|
review: first(LIFECYCLE_ROLE_FLAGS.review),
|
|
16687
|
-
complete: first(LIFECYCLE_ROLE_FLAGS.complete)
|
|
16688
|
-
archived: first(LIFECYCLE_ROLE_FLAGS.archived)
|
|
16630
|
+
complete: first(LIFECYCLE_ROLE_FLAGS.complete)
|
|
16689
16631
|
};
|
|
16690
16632
|
}
|
|
16691
16633
|
async function resolveTaskLifecycleColumns(store, taskId, cache, selectionCache) {
|
|
@@ -16704,7 +16646,7 @@ var ROLE_DEFAULT_PERMISSIONS = {
|
|
|
16704
16646
|
executor: ["tasks:execute", "agents:view", "messages:read", "messages:send"],
|
|
16705
16647
|
reviewer: ["tasks:review", "agents:view", "messages:read", "messages:send"],
|
|
16706
16648
|
merger: ["tasks:merge", "agents:view", "messages:read"],
|
|
16707
|
-
scheduler: ["tasks:assign", "tasks:create", "
|
|
16649
|
+
scheduler: ["tasks:assign", "tasks:create", "agents:view", "automations:manage", "missions:manage", "messages:read"],
|
|
16708
16650
|
engineer: ["tasks:execute", "tasks:review", "agents:view", "messages:read", "messages:send"],
|
|
16709
16651
|
custom: []
|
|
16710
16652
|
};
|
|
@@ -18613,7 +18555,7 @@ var AgentStore = class _AgentStore extends EventEmitter {
|
|
|
18613
18555
|
*
|
|
18614
18556
|
* Guards:
|
|
18615
18557
|
* - task must exist and not be paused
|
|
18616
|
-
* - task must not be in
|
|
18558
|
+
* - task must not be in its workflow's Complete column
|
|
18617
18559
|
* - task must not already be assigned to another agent
|
|
18618
18560
|
* - task checkout must be unheld or already held by this agent
|
|
18619
18561
|
*
|
|
@@ -18650,7 +18592,7 @@ var AgentStore = class _AgentStore extends EventEmitter {
|
|
|
18650
18592
|
return { ok: false, reason: bindVerdict.reason, task };
|
|
18651
18593
|
}
|
|
18652
18594
|
const claimLifecycle = await resolveTaskLifecycleColumns(this.taskStore, taskId);
|
|
18653
|
-
if (task.column === (claimLifecycle?.complete ?? "done")
|
|
18595
|
+
if (task.column === (claimLifecycle?.complete ?? "done")) {
|
|
18654
18596
|
return { ok: false, reason: "terminal", task };
|
|
18655
18597
|
}
|
|
18656
18598
|
if (task.assignedAgentId && task.assignedAgentId !== agentId) {
|
|
@@ -9166,6 +9166,11 @@ var DEFAULT_GLOBAL_SETTINGS = {
|
|
|
9166
9166
|
*/
|
|
9167
9167
|
quickAddSubmitOnEnter: true,
|
|
9168
9168
|
/*
|
|
9169
|
+
FNXC:ChatComposer 2026-09-06-01:54:
|
|
9170
|
+
Le comportement automatique des trois composeurs insère une nouvelle ligne pour un pointeur tactile primaire et conserve l’envoi par Entrée avec une souris, y compris dans une fenêtre étroite. Cette préférence d’opérateur reste globale et ne s’applique qu’à Entrée sans Cmd/Ctrl ni Shift, après l’autocomplétion, Shift et la garde IME propre au Chat de tâche.
|
|
9171
|
+
*/
|
|
9172
|
+
chatSubmitOnEnter: "auto",
|
|
9173
|
+
/*
|
|
9169
9174
|
FNXC:ChatSnippets 2026-09-03-15:56:
|
|
9170
9175
|
Keep the optional global key present but undefined so scope-key derivation remains complete without sharing a mutable default array. readChatSnippets supplies a fresh effective empty list.
|
|
9171
9176
|
*/
|
|
@@ -9757,15 +9762,7 @@ var DEFAULT_PROJECT_SETTINGS = {
|
|
|
9757
9762
|
// maxPostReviewFixes MOVED to workflow settings (U4).
|
|
9758
9763
|
// Run maintenance (including WAL checkpointing) every 5 minutes by default.
|
|
9759
9764
|
maintenanceIntervalMs: 3e5,
|
|
9760
|
-
autoArchiveDoneTasksEnabled: true,
|
|
9761
|
-
autoArchiveDoneAfterMs: 48 * 60 * 60 * 1e3,
|
|
9762
|
-
doneAutoArchiveDays: 0,
|
|
9763
|
-
// FNXC:DuplicateIntake 2026-07-07-00:00 (FN-7658): default OFF — operators
|
|
9764
|
-
// decide via the near-duplicate flag/UI instead of tasks silently vanishing
|
|
9765
|
-
// into `archived` during intake. Set true to restore the pre-FN-7658 behavior.
|
|
9766
|
-
autoArchiveDuplicateTasksEnabled: false,
|
|
9767
9765
|
triageDuplicateResolution: "prompt",
|
|
9768
|
-
archiveAgentLogMode: "compact",
|
|
9769
9766
|
autoUpdatePrStatus: false,
|
|
9770
9767
|
githubCommentOnDone: false,
|
|
9771
9768
|
githubCommentTemplate: void 0,
|
|
@@ -9860,6 +9857,7 @@ var DEFAULT_PROJECT_SETTINGS = {
|
|
|
9860
9857
|
prTitlePromptInstructions: void 0,
|
|
9861
9858
|
prDescriptionPromptInstructions: void 0,
|
|
9862
9859
|
scripts: void 0,
|
|
9860
|
+
scriptMetadata: void 0,
|
|
9863
9861
|
setupScript: void 0,
|
|
9864
9862
|
insightExtractionEnabled: false,
|
|
9865
9863
|
insightExtractionSchedule: "0 2 * * *",
|
|
@@ -10085,8 +10083,6 @@ var AGENT_PERMISSIONS = [
|
|
|
10085
10083
|
// Merge completed task branches
|
|
10086
10084
|
"tasks:delete",
|
|
10087
10085
|
// Delete tasks
|
|
10088
|
-
"tasks:archive",
|
|
10089
|
-
// Archive/unarchive tasks
|
|
10090
10086
|
"agents:create",
|
|
10091
10087
|
// Create new agents
|
|
10092
10088
|
"agents:update",
|
|
@@ -10326,8 +10322,13 @@ function completionSummaryNode(column) {
|
|
|
10326
10322
|
// ../core/src/missions/mission-types.ts
|
|
10327
10323
|
var VALIDATION_INFLIGHT_STALE_MAX_AGE_MS = 6 * 60 * 60 * 1e3;
|
|
10328
10324
|
|
|
10325
|
+
// ../core/src/types.ts
|
|
10326
|
+
var RETIRED_BUILTIN_WORKFLOW_SUCCESSORS = /* @__PURE__ */ new Map([
|
|
10327
|
+
["builtin:coding-ideas", "builtin:coding-ideas-v2"]
|
|
10328
|
+
]);
|
|
10329
|
+
|
|
10329
10330
|
// ../core/src/workflows/trait-types.ts
|
|
10330
|
-
var RESTRICTED_TRAIT_FLAGS = ["complete"
|
|
10331
|
+
var RESTRICTED_TRAIT_FLAGS = ["complete"];
|
|
10331
10332
|
function traitHookKey(traitId, hookKind) {
|
|
10332
10333
|
return `${traitId}::${hookKind}`;
|
|
10333
10334
|
}
|
|
@@ -10527,15 +10528,6 @@ var TraitRegistry = class {
|
|
|
10527
10528
|
message: `Column '${column.id}' is both a completion column and an intake column`
|
|
10528
10529
|
});
|
|
10529
10530
|
}
|
|
10530
|
-
if (flags.archived && flags.countsTowardWip) {
|
|
10531
|
-
violations.push({
|
|
10532
|
-
code: "archived-with-wip",
|
|
10533
|
-
severity: "error",
|
|
10534
|
-
columnId: column.id,
|
|
10535
|
-
traitIds: this.traitIdsWithFlags(knownDefs, ["archived", "countsTowardWip"]),
|
|
10536
|
-
message: `Column '${column.id}' is archived but counts toward WIP \u2014 archived cards must not hold capacity`
|
|
10537
|
-
});
|
|
10538
|
-
}
|
|
10539
10531
|
if (flags.intake) intakeColumnCount += 1;
|
|
10540
10532
|
}
|
|
10541
10533
|
if (intakeColumnCount > 1) {
|
|
@@ -10718,13 +10710,6 @@ var BUILTIN_TRAIT_DEFINITIONS = [
|
|
|
10718
10710
|
builtin: true,
|
|
10719
10711
|
flags: { complete: true }
|
|
10720
10712
|
},
|
|
10721
|
-
{
|
|
10722
|
-
id: "archived",
|
|
10723
|
-
name: "Archived",
|
|
10724
|
-
description: "Hidden from board; global semantics. Restricted flag.",
|
|
10725
|
-
builtin: true,
|
|
10726
|
-
flags: { archived: true, hiddenFromBoard: true }
|
|
10727
|
-
},
|
|
10728
10713
|
{
|
|
10729
10714
|
id: "merge-blocker",
|
|
10730
10715
|
name: "Merge blocker",
|
|
@@ -11018,8 +11003,7 @@ var DEFAULT_WORKFLOW_COLUMN_IDS = [
|
|
|
11018
11003
|
"todo",
|
|
11019
11004
|
"in-progress",
|
|
11020
11005
|
"in-review",
|
|
11021
|
-
"done"
|
|
11022
|
-
"archived"
|
|
11006
|
+
"done"
|
|
11023
11007
|
];
|
|
11024
11008
|
function defaultColumnForNode(node) {
|
|
11025
11009
|
const seam = node.config?.seam;
|
|
@@ -13169,7 +13153,7 @@ Write a lean, executable PROMPT.md quickly. Preserve safety gates, but skip heav
|
|
|
13169
13153
|
- Preserve required safety sections for bugs, workflow routing, forensic tasks, and decision-only work.
|
|
13170
13154
|
|
|
13171
13155
|
## Duplicate check
|
|
13172
|
-
Before writing a spec, call \`fn_task_list\` for active work, then call \`fn_task_search\` with \`includeDone: false\`
|
|
13156
|
+
Before writing a spec, call \`fn_task_list\` for active work, then call \`fn_task_search\` with \`includeDone: false\` for 2-4 targeted keyword phrases from the title/description, such as file paths, symptoms, and symbols. Do not search completed work for duplicate candidates. When an active match is a duplicate, do not write a spec \u2014 but still write PROMPT.md, with its entire contents being the single line \`DUPLICATE: {existing-task-id}\` and nothing else. That file is how the duplicate is recorded; announcing it only in your reply leaves no plan behind and re-plans the task in a loop.
|
|
13173
13157
|
|
|
13174
13158
|
## Required PROMPT.md shape
|
|
13175
13159
|
Write PROMPT.md with Original Description, What This Delivers, Before \u2192 After Transformation, Mission, Dependencies, Context to Read First, File Scope, Steps, Documentation Requirements, Completion Criteria, Git Commit Convention, and Do NOT. Put \`## Original Description\` immediately after the title/\`Created\`/\`Size\` metadata with the operator's original task description copied **verbatim** (do not paraphrase). Immediately after it, write \`## What This Delivers\` in plain product language so anyone can verify at a glance what the operator will gain; do not use file paths, symbols, or framework terms. Put \`## Before \u2192 After Transformation\` next, before \`## Mission\`, with concise Before/After bullets: current state, target state, why it satisfies the user's request at a glance. In \`## Steps\`, every executable heading MUST use \`### Step N: <name>\` (e.g. \`### Step 0: Preflight\`), numbered 0-based from \`### Step 0:\` through \`### Step N-1:\` with no gaps. Do not write bare \`### Preflight\` / \`### Implementation\` headings, and do not add review-level, triage subtask, or proactive subtask headings.
|
|
@@ -13454,8 +13438,8 @@ Verified facts about this codebase's storage \u2014 cite these correctly so Plan
|
|
|
13454
13438
|
- New Postgres migrations must be **registered explicitly** in \`packages/core/src/postgres/schema-applier.ts\` (version constant + bookkeeping check); a \`.sql\` file dropped in the migrations dir that is not wired there silently never runs.
|
|
13455
13439
|
|
|
13456
13440
|
## Duplicate check
|
|
13457
|
-
Before writing a spec, first call \`fn_task_list\` to see active tasks, then call \`fn_task_search\` with \`includeDone: false\`
|
|
13458
|
-
Do not search completed
|
|
13441
|
+
Before writing a spec, first call \`fn_task_list\` to see active tasks, then call \`fn_task_search\` with \`includeDone: false\` for 2-4 distinct keyword phrases from the task title and description (for example file paths, error symptoms, and symbol names).
|
|
13442
|
+
Do not search completed work for duplicate candidates.
|
|
13459
13443
|
If an actionable task already covers the same work (even if worded differently), do not write a spec.
|
|
13460
13444
|
Instead you MUST still write PROMPT.md, with its ENTIRE contents being this one line and nothing else:
|
|
13461
13445
|
\`DUPLICATE: {existing-task-id}\`
|
|
@@ -14611,8 +14595,7 @@ var RAW_BUILTIN_CODING_WORKFLOW_IR = {
|
|
|
14611
14595
|
name: "In review",
|
|
14612
14596
|
traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
|
|
14613
14597
|
},
|
|
14614
|
-
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
14615
|
-
{ id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
|
|
14598
|
+
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
14616
14599
|
],
|
|
14617
14600
|
nodes: [
|
|
14618
14601
|
{ id: "start", kind: "start", column: "triage" },
|
|
@@ -14817,8 +14800,7 @@ var RAW_BUILTIN_STEPWISE_CODING_WORKFLOW_IR = {
|
|
|
14817
14800
|
name: "In review",
|
|
14818
14801
|
traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
|
|
14819
14802
|
},
|
|
14820
|
-
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
14821
|
-
{ id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
|
|
14803
|
+
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
14822
14804
|
],
|
|
14823
14805
|
// KTD-12: PROMPT.md is the planning-produced step-source artifact this workflow
|
|
14824
14806
|
// parses into task steps.
|
|
@@ -15169,8 +15151,7 @@ var CODING_IDEAS_COLUMNS = [
|
|
|
15169
15151
|
name: "In review",
|
|
15170
15152
|
traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
|
|
15171
15153
|
},
|
|
15172
|
-
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
15173
|
-
{ id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
|
|
15154
|
+
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
15174
15155
|
];
|
|
15175
15156
|
var RAW_BUILTIN_CODING_IDEAS_WORKFLOW_IR = (() => {
|
|
15176
15157
|
const ir = JSON.parse(JSON.stringify(BUILTIN_STEPWISE_FINAL_REVIEW_CODING_WORKFLOW_IR));
|
|
@@ -15445,8 +15426,7 @@ var RAW_BUILTIN_LEAD_GENERATION_WORKFLOW_IR = {
|
|
|
15445
15426
|
{ trait: "stall-detection", config: { timeoutMs: 864e5, action: "notify" } }
|
|
15446
15427
|
]
|
|
15447
15428
|
},
|
|
15448
|
-
{ id: "converted", name: "Converted", traits: [{ trait: "complete" }] }
|
|
15449
|
-
{ id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
|
|
15429
|
+
{ id: "converted", name: "Converted", traits: [{ trait: "complete" }] }
|
|
15450
15430
|
],
|
|
15451
15431
|
fields: [
|
|
15452
15432
|
{ id: "company", name: "Company", type: "string", render: { placement: "card", widget: "input" } },
|
|
@@ -15576,8 +15556,7 @@ var RAW_BUILTIN_MARKETING_WORKFLOW_IR = {
|
|
|
15576
15556
|
name: "Editorial review",
|
|
15577
15557
|
traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
|
|
15578
15558
|
},
|
|
15579
|
-
{ id: "published", name: "Published", traits: [{ trait: "complete" }] }
|
|
15580
|
-
{ id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
|
|
15559
|
+
{ id: "published", name: "Published", traits: [{ trait: "complete" }] }
|
|
15581
15560
|
],
|
|
15582
15561
|
nodes: [
|
|
15583
15562
|
{ id: "start", kind: "start", column: "ideation" },
|
|
@@ -15680,8 +15659,7 @@ var RAW_BUILTIN_PR_WORKFLOW_IR = {
|
|
|
15680
15659
|
// move (no PR knowledge in the substrate).
|
|
15681
15660
|
traits: [{ trait: "merge-blocker" }, { trait: "stall-detection" }]
|
|
15682
15661
|
},
|
|
15683
|
-
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
15684
|
-
{ id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
|
|
15662
|
+
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
15685
15663
|
],
|
|
15686
15664
|
nodes: [
|
|
15687
15665
|
{ id: "start", kind: "start", column: "triage" },
|
|
@@ -15784,6 +15762,9 @@ var BUILTIN_WORKFLOW_ID_PREFIX = "builtin:";
|
|
|
15784
15762
|
function isBuiltinWorkflowId(id) {
|
|
15785
15763
|
return id.startsWith(BUILTIN_WORKFLOW_ID_PREFIX);
|
|
15786
15764
|
}
|
|
15765
|
+
function resolveRetiredBuiltinWorkflowId(id) {
|
|
15766
|
+
return RETIRED_BUILTIN_WORKFLOW_SUCCESSORS.get(id) ?? id;
|
|
15767
|
+
}
|
|
15787
15768
|
function ceCodeReviewOptionalGroupNode(column) {
|
|
15788
15769
|
return {
|
|
15789
15770
|
id: "code-review",
|
|
@@ -16046,7 +16027,7 @@ function withPostMergeVerificationNode(nodes2) {
|
|
|
16046
16027
|
var BUILTIN_WORKFLOWS = [
|
|
16047
16028
|
{
|
|
16048
16029
|
id: "builtin:coding",
|
|
16049
|
-
name: "Coding",
|
|
16030
|
+
name: "Coding (Auto)",
|
|
16050
16031
|
description: "Default coding pipeline: plan steps, execute them one at a time, then run the optional final code review and merge.",
|
|
16051
16032
|
kind: "workflow",
|
|
16052
16033
|
ir: BUILTIN_STEPWISE_FINAL_REVIEW_CODING_WORKFLOW_IR,
|
|
@@ -16078,44 +16059,6 @@ var BUILTIN_WORKFLOWS = [
|
|
|
16078
16059
|
createdAt: BUILTIN_TS,
|
|
16079
16060
|
updatedAt: BUILTIN_TS
|
|
16080
16061
|
},
|
|
16081
|
-
/*
|
|
16082
|
-
* FNXC:CodingIdeasWorkflow 2026-07-04-09:40:
|
|
16083
|
-
* The Coding (Ideas) variant adds a manual "Ideas" intake in front of the default stepwise pipeline. New cards land in "ideas" (autoTriage off) and are not planned until an operator promotes them into the merged "todo" planner column; from there the graph is identical to the default Coding workflow.
|
|
16084
|
-
*/
|
|
16085
|
-
{
|
|
16086
|
-
id: "builtin:coding-ideas",
|
|
16087
|
-
name: "Coding (Ideas)",
|
|
16088
|
-
description: "Capture-first coding pipeline: park ideas in a manual intake, then plan, execute per step, run the optional final code review, and merge.",
|
|
16089
|
-
kind: "workflow",
|
|
16090
|
-
ir: BUILTIN_CODING_IDEAS_WORKFLOW_IR,
|
|
16091
|
-
layout: {
|
|
16092
|
-
start: { x: 60, y: 160 },
|
|
16093
|
-
plan: { x: 230, y: 160 },
|
|
16094
|
-
"plan-review": { x: 400, y: 160 },
|
|
16095
|
-
"plan-replan": { x: 400, y: 320 },
|
|
16096
|
-
"plan-review-no-op": { x: 570, y: 320 },
|
|
16097
|
-
parse: { x: 570, y: 160 },
|
|
16098
|
-
steps: { x: 740, y: 160 },
|
|
16099
|
-
/* U8: the pending-review park is an exit, not a stage — placed off the main line. */
|
|
16100
|
-
"review-pending-handoff": { x: 740, y: 320 },
|
|
16101
|
-
"browser-verification": { x: 910, y: 160 },
|
|
16102
|
-
"browser-verification-remediation": { x: 910, y: 320 },
|
|
16103
|
-
"code-review": { x: 1080, y: 160 },
|
|
16104
|
-
"code-review-remediation": { x: 1080, y: 320 },
|
|
16105
|
-
"completion-summary": { x: 1250, y: 160 },
|
|
16106
|
-
"merge-gate": { x: 1420, y: 160 },
|
|
16107
|
-
"branch-group-member-integration": { x: 1590, y: 80 },
|
|
16108
|
-
"branch-group-promotion": { x: 1760, y: 80 },
|
|
16109
|
-
"merge-attempt": { x: 1930, y: 160 },
|
|
16110
|
-
"merge-retry": { x: 2100, y: 80 },
|
|
16111
|
-
"recovery-router": { x: 2100, y: 240 },
|
|
16112
|
-
"merge-manual-hold": { x: 1590, y: 240 },
|
|
16113
|
-
"post-merge-verification": { x: 2270, y: 160 },
|
|
16114
|
-
end: { x: 2440, y: 160 }
|
|
16115
|
-
},
|
|
16116
|
-
createdAt: BUILTIN_TS,
|
|
16117
|
-
updatedAt: BUILTIN_TS
|
|
16118
|
-
},
|
|
16119
16062
|
/*
|
|
16120
16063
|
* FNXC:CodingIdeasV2Workflow 2026-08-26-05:56:
|
|
16121
16064
|
* Same Ideas board as builtin:coding-ideas, with one rule: in-review NEVER writes code.
|
|
@@ -16129,7 +16072,7 @@ var BUILTIN_WORKFLOWS = [
|
|
|
16129
16072
|
*/
|
|
16130
16073
|
{
|
|
16131
16074
|
id: "builtin:coding-ideas-v2",
|
|
16132
|
-
name: "Coding (Ideas)
|
|
16075
|
+
name: "Coding (Ideas)",
|
|
16133
16076
|
description: "Capture-first coding pipeline with a read-only review lane: park ideas in a manual intake, plan, implement and test per step, then review, document, and merge.",
|
|
16134
16077
|
kind: "workflow",
|
|
16135
16078
|
ir: BUILTIN_CODING_IDEAS_V2_WORKFLOW_IR,
|
|
@@ -16525,7 +16468,7 @@ var BUILTIN_WORKFLOWS = [
|
|
|
16525
16468
|
];
|
|
16526
16469
|
var BUILTIN_BY_ID = new Map(BUILTIN_WORKFLOWS.map((wf) => [wf.id, wf]));
|
|
16527
16470
|
function getBuiltinWorkflow(id) {
|
|
16528
|
-
return BUILTIN_BY_ID.get(id);
|
|
16471
|
+
return BUILTIN_BY_ID.get(resolveRetiredBuiltinWorkflowId(id));
|
|
16529
16472
|
}
|
|
16530
16473
|
var DEFAULT_WORKFLOW_ID = "builtin:coding";
|
|
16531
16474
|
function resolveDefaultWorkflowIr() {
|
|
@@ -16575,7 +16518,8 @@ function defaultCodingWorkflowIr() {
|
|
|
16575
16518
|
return resolveDefaultWorkflowIr();
|
|
16576
16519
|
}
|
|
16577
16520
|
var inflightSelectionReads = /* @__PURE__ */ new WeakMap();
|
|
16578
|
-
async function resolveWorkflowIrById(store,
|
|
16521
|
+
async function resolveWorkflowIrById(store, requestedWorkflowId, irCache) {
|
|
16522
|
+
const workflowId = resolveRetiredBuiltinWorkflowId(requestedWorkflowId);
|
|
16579
16523
|
let projectId;
|
|
16580
16524
|
try {
|
|
16581
16525
|
projectId = store.getWorkflowSettingsProjectId?.();
|
|
@@ -16670,8 +16614,7 @@ var LIFECYCLE_ROLE_FLAGS = {
|
|
|
16670
16614
|
hold: "hold",
|
|
16671
16615
|
wip: "countsTowardWip",
|
|
16672
16616
|
review: "mergeOrchestration",
|
|
16673
|
-
complete: "complete"
|
|
16674
|
-
archived: "archived"
|
|
16617
|
+
complete: "complete"
|
|
16675
16618
|
};
|
|
16676
16619
|
function resolveLifecycleColumns(ir) {
|
|
16677
16620
|
const columns = columnsOf(ir);
|
|
@@ -16684,8 +16627,7 @@ function resolveLifecycleColumns(ir) {
|
|
|
16684
16627
|
hold: first(LIFECYCLE_ROLE_FLAGS.hold),
|
|
16685
16628
|
wip: first(LIFECYCLE_ROLE_FLAGS.wip),
|
|
16686
16629
|
review: first(LIFECYCLE_ROLE_FLAGS.review),
|
|
16687
|
-
complete: first(LIFECYCLE_ROLE_FLAGS.complete)
|
|
16688
|
-
archived: first(LIFECYCLE_ROLE_FLAGS.archived)
|
|
16630
|
+
complete: first(LIFECYCLE_ROLE_FLAGS.complete)
|
|
16689
16631
|
};
|
|
16690
16632
|
}
|
|
16691
16633
|
async function resolveTaskLifecycleColumns(store, taskId, cache, selectionCache) {
|
|
@@ -16704,7 +16646,7 @@ var ROLE_DEFAULT_PERMISSIONS = {
|
|
|
16704
16646
|
executor: ["tasks:execute", "agents:view", "messages:read", "messages:send"],
|
|
16705
16647
|
reviewer: ["tasks:review", "agents:view", "messages:read", "messages:send"],
|
|
16706
16648
|
merger: ["tasks:merge", "agents:view", "messages:read"],
|
|
16707
|
-
scheduler: ["tasks:assign", "tasks:create", "
|
|
16649
|
+
scheduler: ["tasks:assign", "tasks:create", "agents:view", "automations:manage", "missions:manage", "messages:read"],
|
|
16708
16650
|
engineer: ["tasks:execute", "tasks:review", "agents:view", "messages:read", "messages:send"],
|
|
16709
16651
|
custom: []
|
|
16710
16652
|
};
|
|
@@ -18613,7 +18555,7 @@ var AgentStore = class _AgentStore extends EventEmitter {
|
|
|
18613
18555
|
*
|
|
18614
18556
|
* Guards:
|
|
18615
18557
|
* - task must exist and not be paused
|
|
18616
|
-
* - task must not be in
|
|
18558
|
+
* - task must not be in its workflow's Complete column
|
|
18617
18559
|
* - task must not already be assigned to another agent
|
|
18618
18560
|
* - task checkout must be unheld or already held by this agent
|
|
18619
18561
|
*
|
|
@@ -18650,7 +18592,7 @@ var AgentStore = class _AgentStore extends EventEmitter {
|
|
|
18650
18592
|
return { ok: false, reason: bindVerdict.reason, task };
|
|
18651
18593
|
}
|
|
18652
18594
|
const claimLifecycle = await resolveTaskLifecycleColumns(this.taskStore, taskId);
|
|
18653
|
-
if (task.column === (claimLifecycle?.complete ?? "done")
|
|
18595
|
+
if (task.column === (claimLifecycle?.complete ?? "done")) {
|
|
18654
18596
|
return { ok: false, reason: "terminal", task };
|
|
18655
18597
|
}
|
|
18656
18598
|
if (task.assignedAgentId && task.assignedAgentId !== agentId) {
|