@runfusion/fusion 0.77.0-beta.7 → 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.
Files changed (136) hide show
  1. package/dist/bin.js +548 -86
  2. package/dist/child-process-worker.js +546 -86
  3. package/dist/client/.vite/manifest.json +249 -249
  4. package/dist/client/assets/{AgentDetailView-C1eh_vXv.js → AgentDetailView-DsMRc-aH.js} +1 -1
  5. package/dist/client/assets/{AgentPermissionPolicyEditor-CeKsO1LR.js → AgentPermissionPolicyEditor-BXJ52YpO.js} +1 -1
  6. package/dist/client/assets/{AgentsView-BNe2ABOc.js → AgentsView-DO-25nlB.js} +3 -3
  7. package/dist/client/assets/{CommandCenter-BuREM-G1.js → CommandCenter-BMXMg_I2.js} +1 -1
  8. package/dist/client/assets/{DevServerView-D0i1b-QO.js → DevServerView-DAeL5TYz.js} +1 -1
  9. package/dist/client/assets/{DirectoryPicker-VOx91hQt.js → DirectoryPicker-Cw-XRjAa.js} +1 -1
  10. package/dist/client/assets/{DocumentsView-CO5W_WVb.js → DocumentsView-CusClN9u.js} +1 -1
  11. package/dist/client/assets/{EvalsView-BqSINSrZ.js → EvalsView-gNdeUDww.js} +1 -1
  12. package/dist/client/assets/{ExperimentalAgentOnboardingModal-DEcFgONi.js → ExperimentalAgentOnboardingModal-Bmzbqzhs.js} +1 -1
  13. package/dist/client/assets/{GoalsView-DZ57wXmJ.js → GoalsView-J8JMsoLn.js} +1 -1
  14. package/dist/client/assets/{InsightsView-DSWfXG7Q.js → InsightsView-BVbv56K0.js} +1 -1
  15. package/dist/client/assets/{MemoryView-BEX10uhl.js → MemoryView-DNvJFoDu.js} +1 -1
  16. package/dist/client/assets/{PiExtensionsManager-DcAmXXoR.js → PiExtensionsManager-BPMexS34.js} +1 -1
  17. package/dist/client/assets/{PluginManager-BU0omQUv.js → PluginManager-DGEv-ptu.js} +1 -1
  18. package/dist/client/assets/{PullRequestView-B-JL_8Kk.js → PullRequestView-CF7fx-Uo.js} +1 -1
  19. package/dist/client/assets/ReportModal-B8S5BFgn.js +21 -0
  20. package/dist/client/assets/ReportModal-Dx3f2aj7.css +1 -0
  21. package/dist/client/assets/{ResearchView-CnwTXfQO.js → ResearchView-CBeXsevy.js} +1 -1
  22. package/dist/client/assets/{SecretsView-BDvzsLFz.js → SecretsView-Dmi9wZkv.js} +1 -1
  23. package/dist/client/assets/{SettingsModal-801eFQ9u.js → SettingsModal-D2kXP7Um.js} +3 -3
  24. package/dist/client/assets/{SettingsModal-BZHeQ3ED.js → SettingsModal-DSW3xnGk.js} +1 -1
  25. package/dist/client/assets/{SettingsTextareaRow-B0rTuelr.js → SettingsTextareaRow-CLab4Vcd.js} +1 -1
  26. package/dist/client/assets/{SetupWizardModal-CoExPwIn.js → SetupWizardModal-Ct6juX9x.js} +2 -2
  27. package/dist/client/assets/{SkillsView-WVP25LPj.js → SkillsView-Dn0bwT6i.js} +1 -1
  28. package/dist/client/assets/{WorkflowNodeEditor-pCMyKcnS.js → WorkflowNodeEditor-cvReMlG-.js} +1 -1
  29. package/dist/client/assets/{agent-import-generation-M_hKtjgN.js → agent-import-generation-C8_ewVzC.js} +1 -1
  30. package/dist/client/assets/{agentsOrgChartLayout-DjvIMhFD.js → agentsOrgChartLayout-p1i6XROQ.js} +1 -1
  31. package/dist/client/assets/{architectureDiagram-3BPJPVTR-CkzEm8i9.js → architectureDiagram-3BPJPVTR-CzCk1QdH.js} +1 -1
  32. package/dist/client/assets/{blockDiagram-GPEHLZMM-Dc-dUMjY.js → blockDiagram-GPEHLZMM-74Rj-5ov.js} +1 -1
  33. package/dist/client/assets/{c4Diagram-AAUBKEIU-DnYjsrR0.js → c4Diagram-AAUBKEIU-B570qYH-.js} +1 -1
  34. package/dist/client/assets/channel-DWAK5y-J.js +1 -0
  35. package/dist/client/assets/{chunk-2J33WTMH-0E1GEFEr.js → chunk-2J33WTMH-DejJkxt6.js} +1 -1
  36. package/dist/client/assets/{chunk-4BX2VUAB-Dj5oZd51.js → chunk-4BX2VUAB-DlgxkBuE.js} +1 -1
  37. package/dist/client/assets/{chunk-55IACEB6-DfNT0s8E.js → chunk-55IACEB6-XCfE8PwC.js} +1 -1
  38. package/dist/client/assets/{chunk-727SXJPM-BnFjhiIQ.js → chunk-727SXJPM-D-nDw0Bi.js} +1 -1
  39. package/dist/client/assets/{chunk-AQP2D5EJ-DR84wSqR.js → chunk-AQP2D5EJ-C4KySao0.js} +1 -1
  40. package/dist/client/assets/{chunk-FMBD7UC4-IjByNOrR.js → chunk-FMBD7UC4-CXKdLygA.js} +1 -1
  41. package/dist/client/assets/{chunk-ND2GUHAM-By0q_jZm.js → chunk-ND2GUHAM-bNYWWGVJ.js} +1 -1
  42. package/dist/client/assets/{chunk-QZHKN3VN-BELcl3N5.js → chunk-QZHKN3VN-cfBQJ-MX.js} +1 -1
  43. package/dist/client/assets/classDiagram-4FO5ZUOK-WTkXRkfm.js +1 -0
  44. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-WTkXRkfm.js +1 -0
  45. package/dist/client/assets/{cose-bilkent-S5V4N54A-D4cCw9-_.js → cose-bilkent-S5V4N54A-CiZrg3mQ.js} +1 -1
  46. package/dist/client/assets/{dagre-BM42HDAG-JJp5dVeY.js → dagre-BM42HDAG-Bckph2U4.js} +1 -1
  47. package/dist/client/assets/{dashboard-view-Bl9CPhxE.js → dashboard-view-CN_fkDM1.js} +1 -1
  48. package/dist/client/assets/{dashboard-view-C5Nt8cvY.js → dashboard-view-CVYHQZwx.js} +1 -1
  49. package/dist/client/assets/{dashboard-view-6zPJm9zC.js → dashboard-view-DDRKwfFs.js} +1 -1
  50. package/dist/client/assets/{dashboard-view-MAC_LHDX.js → dashboard-view-IuPjDVGa.js} +1 -1
  51. package/dist/client/assets/{diagram-2AECGRRQ-D4L7j_t_.js → diagram-2AECGRRQ-Bnaurex7.js} +1 -1
  52. package/dist/client/assets/{diagram-5GNKFQAL-VAGFaXqG.js → diagram-5GNKFQAL-BKz1omVN.js} +1 -1
  53. package/dist/client/assets/{diagram-KO2AKTUF-hqXSggfW.js → diagram-KO2AKTUF-C51lEZwo.js} +1 -1
  54. package/dist/client/assets/{diagram-LMA3HP47-B3eAIuy8.js → diagram-LMA3HP47-BYm5gql7.js} +1 -1
  55. package/dist/client/assets/{diagram-OG6HWLK6-BGufp0RK.js → diagram-OG6HWLK6-B9CFA4ha.js} +1 -1
  56. package/dist/client/assets/{erDiagram-TEJ5UH35-DplXdx8w.js → erDiagram-TEJ5UH35-BLyCSssl.js} +1 -1
  57. package/dist/client/assets/{flowDiagram-I6XJVG4X-C1Ms2bko.js → flowDiagram-I6XJVG4X-yDVmpkro.js} +1 -1
  58. package/dist/client/assets/{folder-open-nMraSDXu.js → folder-open-Cf2NA9nV.js} +1 -1
  59. package/dist/client/assets/{ganttDiagram-6RSMTGT7-DVgxMtXb.js → ganttDiagram-6RSMTGT7-mC9YPFcx.js} +1 -1
  60. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-DH2_n0J8.js → gitGraphDiagram-PVQCEYII-DS0bEccv.js} +1 -1
  61. package/dist/client/assets/index-BjM7LxzY.js +2805 -0
  62. package/dist/client/assets/index-DcKIzuMk.css +1 -0
  63. package/dist/client/assets/{infoDiagram-5YYISTIA-DmZdWVcU.js → infoDiagram-5YYISTIA-CuuNZITP.js} +1 -1
  64. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-DsEIHSXr.js → ishikawaDiagram-YF4QCWOH-MBSaC94m.js} +1 -1
  65. package/dist/client/assets/{journeyDiagram-JHISSGLW-CsfIWmu1.js → journeyDiagram-JHISSGLW-DkaAow9E.js} +1 -1
  66. package/dist/client/assets/{kanban-definition-UN3LZRKU-CQKqeZvc.js → kanban-definition-UN3LZRKU-DSf5OLtq.js} +1 -1
  67. package/dist/client/assets/{mermaid.core-DkC_dr4-.js → mermaid.core-HmTn21MF.js} +4 -4
  68. package/dist/client/assets/{mindmap-definition-RKZ34NQL-RnmE-NUe.js → mindmap-definition-RKZ34NQL-sv0Dl8aI.js} +1 -1
  69. package/dist/client/assets/{pieDiagram-4H26LBE5-DPu6FPc4.js → pieDiagram-4H26LBE5-BDK2IQNq.js} +1 -1
  70. package/dist/client/assets/{puzzle-DwhHOf32.js → puzzle-D00mP67o.js} +1 -1
  71. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-CYbypO2p.js → quadrantDiagram-W4KKPZXB-CiWAhwf1.js} +1 -1
  72. package/dist/client/assets/{requirementDiagram-4Y6WPE33-DFk1vK_N.js → requirementDiagram-4Y6WPE33-DwC99D35.js} +1 -1
  73. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-CkUY1Zzu.js → sankeyDiagram-5OEKKPKP-CQn8z721.js} +1 -1
  74. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-CFivaLOO.js → sequenceDiagram-3UESZ5HK-B0CT8-vw.js} +1 -1
  75. package/dist/client/assets/{standing-instructions-template-BbqKGAC1.js → standing-instructions-template-BIBO_Prr.js} +1 -1
  76. package/dist/client/assets/{stateDiagram-AJRCARHV-BPeD5PwG.js → stateDiagram-AJRCARHV-BYAB_dFF.js} +1 -1
  77. package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-DduiCPMb.js → stateDiagram-v2-BHNVJYJU-Cd19uJBk.js} +1 -1
  78. package/dist/client/assets/{timeline-definition-PNZ67QCA-CGUNNVro.js → timeline-definition-PNZ67QCA-DQLh8XkY.js} +1 -1
  79. package/dist/client/assets/{upload-BS96H1o7.js → upload-D4pkNOz2.js} +1 -1
  80. package/dist/client/assets/{users--irrWoyU.js → users-COgviS_S.js} +1 -1
  81. package/dist/client/assets/{vennDiagram-CIIHVFJN-CybTaJJH.js → vennDiagram-CIIHVFJN-BmwG1Wud.js} +1 -1
  82. package/dist/client/assets/{wardley-L42UT6IY-DSxaSCGi.js → wardley-L42UT6IY-BiO7jkmj.js} +1 -1
  83. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-YFb0AxNt.js → wardleyDiagram-YWT4CUSO-Dq0IPg5H.js} +1 -1
  84. package/dist/client/assets/{xychartDiagram-2RQKCTM6-Cv6zlMJC.js → xychartDiagram-2RQKCTM6-BlMOlSBc.js} +1 -1
  85. package/dist/client/index.html +13 -6
  86. package/dist/client/theme-data.css +85 -0
  87. package/dist/client/version.json +1 -1
  88. package/dist/droid-cli/package.json +1 -1
  89. package/dist/extension.js +548 -86
  90. package/dist/pi-claude-cli/package.json +1 -1
  91. package/dist/plugin-sdk/index.d.ts +5 -1
  92. package/dist/plugin-sdk/index.js +43 -19
  93. package/dist/plugins/fusion-plugin-acp-runtime/bundled.js +43 -19
  94. package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
  95. package/dist/plugins/fusion-plugin-claude-runtime/bundled.js +43 -19
  96. package/dist/plugins/fusion-plugin-claude-runtime/package.json +1 -1
  97. package/dist/plugins/fusion-plugin-cli-printing-press/bundled.js +43 -19
  98. package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
  99. package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +43 -19
  100. package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
  101. package/dist/plugins/fusion-plugin-cursor-runtime/bundled.js +43 -19
  102. package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
  103. package/dist/plugins/fusion-plugin-dependency-graph/bundled.js +43 -19
  104. package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
  105. package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +43 -19
  106. package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
  107. package/dist/plugins/fusion-plugin-grok-runtime/bundled.js +43 -19
  108. package/dist/plugins/fusion-plugin-grok-runtime/package.json +1 -1
  109. package/dist/plugins/fusion-plugin-hermes-runtime/bundled.js +43 -19
  110. package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
  111. package/dist/plugins/fusion-plugin-linear-import/bundled.js +43 -19
  112. package/dist/plugins/fusion-plugin-linear-import/package.json +1 -1
  113. package/dist/plugins/fusion-plugin-omp-runtime/bundled.js +43 -19
  114. package/dist/plugins/fusion-plugin-omp-runtime/package.json +1 -1
  115. package/dist/plugins/fusion-plugin-openclaw-runtime/bundled.js +43 -19
  116. package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
  117. package/dist/plugins/fusion-plugin-paperclip-runtime/bundled.js +43 -19
  118. package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
  119. package/dist/plugins/fusion-plugin-quality/bundled.js +43 -19
  120. package/dist/plugins/fusion-plugin-quality/package.json +1 -1
  121. package/dist/plugins/fusion-plugin-reports/bundled.js +43 -19
  122. package/dist/plugins/fusion-plugin-reports/package.json +1 -1
  123. package/dist/plugins/fusion-plugin-roadmap/bundled.js +43 -19
  124. package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
  125. package/dist/plugins/fusion-plugin-todos/bundled.js +43 -19
  126. package/dist/plugins/fusion-plugin-todos/package.json +1 -1
  127. package/dist/plugins/fusion-plugin-whatsapp-chat/bundled.js +43 -19
  128. package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
  129. package/package.json +1 -1
  130. package/dist/client/assets/ReportModal-DxggF_RH.js +0 -21
  131. package/dist/client/assets/ReportModal-lzN_xrnM.css +0 -1
  132. package/dist/client/assets/channel-CxQ40s_U.js +0 -1
  133. package/dist/client/assets/classDiagram-4FO5ZUOK-C2ARdiRL.js +0 -1
  134. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-C2ARdiRL.js +0 -1
  135. package/dist/client/assets/index-BJc-A7eB.css +0 -1
  136. package/dist/client/assets/index-CBFPgFTp.js +0 -2787
@@ -8203,7 +8203,16 @@ var projectTableNames = [
8203
8203
  "chat_rooms",
8204
8204
  "chat_room_members",
8205
8205
  "chat_room_messages",
8206
- "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"
8207
8216
  ];
8208
8217
 
8209
8218
  // ../core/src/postgres/schema/central.ts
@@ -9396,12 +9405,16 @@ var DEFAULT_PROJECT_SETTINGS = {
9396
9405
  executorEscalationProvider: void 0,
9397
9406
  executorEscalationModelId: void 0,
9398
9407
  executorEscalationNodeId: void 0,
9399
- reviewConvergenceEscalationEnabled: true,
9400
- reviewConvergenceEscalationProvider: void 0,
9401
- reviewConvergenceEscalationModelId: void 0,
9402
- reviewArbitrationEnabled: true,
9403
- reviewArbitrationProvider: void 0,
9404
- reviewArbitrationModelId: void 0,
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
+ */
9405
9418
  /**
9406
9419
  * FNXC:Merge 2026-06-26-00:00:
9407
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.
@@ -10294,6 +10307,20 @@ function classifyWorkflowAgentNode(node) {
10294
10307
  }
10295
10308
  }
10296
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
+
10297
10324
  // ../core/src/workflows/workflow-extension-types.ts
10298
10325
  function workflowExtensionRegistryId(pluginId, extensionId) {
10299
10326
  return `plugin:${pluginId}:${extensionId}`;
@@ -10822,18 +10849,7 @@ function reachableFrom(start, outgoing) {
10822
10849
  }
10823
10850
  return seen;
10824
10851
  }
10825
- var INTERPRETER_ENTRY_NODE_KINDS = /* @__PURE__ */ new Set([
10826
- "merge-gate",
10827
- "merge-attempt",
10828
- "manual-merge-hold",
10829
- "retry-backoff",
10830
- "recovery-router",
10831
- "branch-group-member-integration",
10832
- "branch-group-promotion",
10833
- "pr-create",
10834
- "pr-respond",
10835
- "pr-merge"
10836
- ]);
10852
+ var INTERPRETER_ENTRY_NODE_KINDS = MERGE_REGION_ENTRY_NODE_KINDS;
10837
10853
  var MERGE_CLASS_NODE_KINDS = /* @__PURE__ */ new Set([
10838
10854
  "merge-gate",
10839
10855
  "merge-attempt",
@@ -12853,6 +12869,13 @@ Lint, tests, and typecheck are also hard quality gates:
12853
12869
  - Keep fixing failures caused by your change until lint, impacted tests, build, and typecheck pass.
12854
12870
  - If the repository exposes a typecheck command, run it and fix failures caused by your change.
12855
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.
12856
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.
12857
12880
  - Do not repeatedly rerun a broad failing or hanging workspace command without a new hypothesis and a narrower confirming command.
12858
12881
 
@@ -13125,6 +13148,7 @@ files with assertions that run via a test runner. Typechecks and builds are NOT
13125
13148
  tests. Manual verification is NOT a test.
13126
13149
 
13127
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.
13128
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.
13129
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.
13130
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)
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/cursor-runtime",
3
- "version": "0.1.55-beta.7",
3
+ "version": "0.1.55-beta.8",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -8200,7 +8200,16 @@ var projectTableNames = [
8200
8200
  "chat_rooms",
8201
8201
  "chat_room_members",
8202
8202
  "chat_room_messages",
8203
- "chat_token_usage"
8203
+ "chat_token_usage",
8204
+ /*
8205
+ FNXC:WorkspaceCoordination 2026-08-23-20:05:
8206
+ FN-9059 (migration 0060) added these two tables to the schema without registering them here, so
8207
+ every registry consumer under-counted them: the PostgreSQL test harness never TRUNCATEd them
8208
+ between tests (a held `repo:<repo>` lease leaked from one case into the next and made the next
8209
+ land report the previous test's successor as the busy holder), and health compaction skipped them.
8210
+ */
8211
+ "workspace_coordination_leases",
8212
+ "workspace_land_intents"
8204
8213
  ];
8205
8214
 
8206
8215
  // ../core/src/postgres/schema/central.ts
@@ -9393,12 +9402,16 @@ var DEFAULT_PROJECT_SETTINGS = {
9393
9402
  executorEscalationProvider: void 0,
9394
9403
  executorEscalationModelId: void 0,
9395
9404
  executorEscalationNodeId: void 0,
9396
- reviewConvergenceEscalationEnabled: true,
9397
- reviewConvergenceEscalationProvider: void 0,
9398
- reviewConvergenceEscalationModelId: void 0,
9399
- reviewArbitrationEnabled: true,
9400
- reviewArbitrationProvider: void 0,
9401
- reviewArbitrationModelId: void 0,
9405
+ /*
9406
+ FNXC:ReviewConvergence 2026-08-23-21:05:
9407
+ FN-149's six review-convergence/arbitration keys are declared in BUILTIN_WORKFLOW_SETTINGS, which
9408
+ the U4 hard-move made the SINGLE source of truth for a moved key's default. Re-declaring them here
9409
+ put them back in the legacy object the hard-move emptied, so an undeclared key on a custom workflow
9410
+ could resolve to this literal instead of the declaration default — the exact drift
9411
+ `workflow-settings-fallback-alignment` guards. The declaration defaults are identical (both
9412
+ `*Enabled` default true, the provider/model lanes carry no default), and the reader uses
9413
+ `!== false`, so removing them here preserves behaviour and restores the invariant.
9414
+ */
9402
9415
  /**
9403
9416
  * FNXC:Merge 2026-06-26-00:00:
9404
9417
  * 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.
@@ -10291,6 +10304,20 @@ function classifyWorkflowAgentNode(node) {
10291
10304
  }
10292
10305
  }
10293
10306
 
10307
+ // ../core/src/workflows/workflow-merge-region.ts
10308
+ var MERGE_REGION_ENTRY_NODE_KINDS = /* @__PURE__ */ new Set([
10309
+ "merge-gate",
10310
+ "merge-attempt",
10311
+ "manual-merge-hold",
10312
+ "retry-backoff",
10313
+ "recovery-router",
10314
+ "branch-group-member-integration",
10315
+ "branch-group-promotion",
10316
+ "pr-create",
10317
+ "pr-respond",
10318
+ "pr-merge"
10319
+ ]);
10320
+
10294
10321
  // ../core/src/workflows/workflow-extension-types.ts
10295
10322
  function workflowExtensionRegistryId(pluginId, extensionId) {
10296
10323
  return `plugin:${pluginId}:${extensionId}`;
@@ -10819,18 +10846,7 @@ function reachableFrom(start, outgoing) {
10819
10846
  }
10820
10847
  return seen;
10821
10848
  }
10822
- var INTERPRETER_ENTRY_NODE_KINDS = /* @__PURE__ */ new Set([
10823
- "merge-gate",
10824
- "merge-attempt",
10825
- "manual-merge-hold",
10826
- "retry-backoff",
10827
- "recovery-router",
10828
- "branch-group-member-integration",
10829
- "branch-group-promotion",
10830
- "pr-create",
10831
- "pr-respond",
10832
- "pr-merge"
10833
- ]);
10849
+ var INTERPRETER_ENTRY_NODE_KINDS = MERGE_REGION_ENTRY_NODE_KINDS;
10834
10850
  var MERGE_CLASS_NODE_KINDS = /* @__PURE__ */ new Set([
10835
10851
  "merge-gate",
10836
10852
  "merge-attempt",
@@ -12850,6 +12866,13 @@ Lint, tests, and typecheck are also hard quality gates:
12850
12866
  - Keep fixing failures caused by your change until lint, impacted tests, build, and typecheck pass.
12851
12867
  - If the repository exposes a typecheck command, run it and fix failures caused by your change.
12852
12868
  - 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.
12869
+
12870
+ **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:
12871
+ - 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.
12872
+ - 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.
12873
+ - 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.
12874
+ - Added a public store/service method? Update the inventory/drift guards that require every public surface to be classified.
12875
+ 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.
12853
12876
  - 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.
12854
12877
  - Do not repeatedly rerun a broad failing or hanging workspace command without a new hypothesis and a narrower confirming command.
12855
12878
 
@@ -13122,6 +13145,7 @@ files with assertions that run via a test runner. Typechecks and builds are NOT
13122
13145
  tests. Manual verification is NOT a test.
13123
13146
 
13124
13147
  - Each implementation step should include writing tests for the code being changed
13148
+ - **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.
13125
13149
  - 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.
13126
13150
  - 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.
13127
13151
  - 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)
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/dependency-graph",
3
- "version": "0.1.67-beta.7",
3
+ "version": "0.1.67-beta.8",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -8200,7 +8200,16 @@ var projectTableNames = [
8200
8200
  "chat_rooms",
8201
8201
  "chat_room_members",
8202
8202
  "chat_room_messages",
8203
- "chat_token_usage"
8203
+ "chat_token_usage",
8204
+ /*
8205
+ FNXC:WorkspaceCoordination 2026-08-23-20:05:
8206
+ FN-9059 (migration 0060) added these two tables to the schema without registering them here, so
8207
+ every registry consumer under-counted them: the PostgreSQL test harness never TRUNCATEd them
8208
+ between tests (a held `repo:<repo>` lease leaked from one case into the next and made the next
8209
+ land report the previous test's successor as the busy holder), and health compaction skipped them.
8210
+ */
8211
+ "workspace_coordination_leases",
8212
+ "workspace_land_intents"
8204
8213
  ];
8205
8214
 
8206
8215
  // ../core/src/postgres/schema/central.ts
@@ -9393,12 +9402,16 @@ var DEFAULT_PROJECT_SETTINGS = {
9393
9402
  executorEscalationProvider: void 0,
9394
9403
  executorEscalationModelId: void 0,
9395
9404
  executorEscalationNodeId: void 0,
9396
- reviewConvergenceEscalationEnabled: true,
9397
- reviewConvergenceEscalationProvider: void 0,
9398
- reviewConvergenceEscalationModelId: void 0,
9399
- reviewArbitrationEnabled: true,
9400
- reviewArbitrationProvider: void 0,
9401
- reviewArbitrationModelId: void 0,
9405
+ /*
9406
+ FNXC:ReviewConvergence 2026-08-23-21:05:
9407
+ FN-149's six review-convergence/arbitration keys are declared in BUILTIN_WORKFLOW_SETTINGS, which
9408
+ the U4 hard-move made the SINGLE source of truth for a moved key's default. Re-declaring them here
9409
+ put them back in the legacy object the hard-move emptied, so an undeclared key on a custom workflow
9410
+ could resolve to this literal instead of the declaration default — the exact drift
9411
+ `workflow-settings-fallback-alignment` guards. The declaration defaults are identical (both
9412
+ `*Enabled` default true, the provider/model lanes carry no default), and the reader uses
9413
+ `!== false`, so removing them here preserves behaviour and restores the invariant.
9414
+ */
9402
9415
  /**
9403
9416
  * FNXC:Merge 2026-06-26-00:00:
9404
9417
  * 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.
@@ -10291,6 +10304,20 @@ function classifyWorkflowAgentNode(node) {
10291
10304
  }
10292
10305
  }
10293
10306
 
10307
+ // ../core/src/workflows/workflow-merge-region.ts
10308
+ var MERGE_REGION_ENTRY_NODE_KINDS = /* @__PURE__ */ new Set([
10309
+ "merge-gate",
10310
+ "merge-attempt",
10311
+ "manual-merge-hold",
10312
+ "retry-backoff",
10313
+ "recovery-router",
10314
+ "branch-group-member-integration",
10315
+ "branch-group-promotion",
10316
+ "pr-create",
10317
+ "pr-respond",
10318
+ "pr-merge"
10319
+ ]);
10320
+
10294
10321
  // ../core/src/workflows/workflow-extension-types.ts
10295
10322
  function workflowExtensionRegistryId(pluginId, extensionId) {
10296
10323
  return `plugin:${pluginId}:${extensionId}`;
@@ -10819,18 +10846,7 @@ function reachableFrom(start, outgoing) {
10819
10846
  }
10820
10847
  return seen;
10821
10848
  }
10822
- var INTERPRETER_ENTRY_NODE_KINDS = /* @__PURE__ */ new Set([
10823
- "merge-gate",
10824
- "merge-attempt",
10825
- "manual-merge-hold",
10826
- "retry-backoff",
10827
- "recovery-router",
10828
- "branch-group-member-integration",
10829
- "branch-group-promotion",
10830
- "pr-create",
10831
- "pr-respond",
10832
- "pr-merge"
10833
- ]);
10849
+ var INTERPRETER_ENTRY_NODE_KINDS = MERGE_REGION_ENTRY_NODE_KINDS;
10834
10850
  var MERGE_CLASS_NODE_KINDS = /* @__PURE__ */ new Set([
10835
10851
  "merge-gate",
10836
10852
  "merge-attempt",
@@ -12850,6 +12866,13 @@ Lint, tests, and typecheck are also hard quality gates:
12850
12866
  - Keep fixing failures caused by your change until lint, impacted tests, build, and typecheck pass.
12851
12867
  - If the repository exposes a typecheck command, run it and fix failures caused by your change.
12852
12868
  - 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.
12869
+
12870
+ **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:
12871
+ - 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.
12872
+ - 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.
12873
+ - 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.
12874
+ - Added a public store/service method? Update the inventory/drift guards that require every public surface to be classified.
12875
+ 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.
12853
12876
  - 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.
12854
12877
  - Do not repeatedly rerun a broad failing or hanging workspace command without a new hypothesis and a narrower confirming command.
12855
12878
 
@@ -13122,6 +13145,7 @@ files with assertions that run via a test runner. Typechecks and builds are NOT
13122
13145
  tests. Manual verification is NOT a test.
13123
13146
 
13124
13147
  - Each implementation step should include writing tests for the code being changed
13148
+ - **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.
13125
13149
  - 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.
13126
13150
  - 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.
13127
13151
  - 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)
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/droid-runtime",
3
- "version": "0.1.62-beta.7",
3
+ "version": "0.1.62-beta.8",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -8200,7 +8200,16 @@ var projectTableNames = [
8200
8200
  "chat_rooms",
8201
8201
  "chat_room_members",
8202
8202
  "chat_room_messages",
8203
- "chat_token_usage"
8203
+ "chat_token_usage",
8204
+ /*
8205
+ FNXC:WorkspaceCoordination 2026-08-23-20:05:
8206
+ FN-9059 (migration 0060) added these two tables to the schema without registering them here, so
8207
+ every registry consumer under-counted them: the PostgreSQL test harness never TRUNCATEd them
8208
+ between tests (a held `repo:<repo>` lease leaked from one case into the next and made the next
8209
+ land report the previous test's successor as the busy holder), and health compaction skipped them.
8210
+ */
8211
+ "workspace_coordination_leases",
8212
+ "workspace_land_intents"
8204
8213
  ];
8205
8214
 
8206
8215
  // ../core/src/postgres/schema/central.ts
@@ -9393,12 +9402,16 @@ var DEFAULT_PROJECT_SETTINGS = {
9393
9402
  executorEscalationProvider: void 0,
9394
9403
  executorEscalationModelId: void 0,
9395
9404
  executorEscalationNodeId: void 0,
9396
- reviewConvergenceEscalationEnabled: true,
9397
- reviewConvergenceEscalationProvider: void 0,
9398
- reviewConvergenceEscalationModelId: void 0,
9399
- reviewArbitrationEnabled: true,
9400
- reviewArbitrationProvider: void 0,
9401
- reviewArbitrationModelId: void 0,
9405
+ /*
9406
+ FNXC:ReviewConvergence 2026-08-23-21:05:
9407
+ FN-149's six review-convergence/arbitration keys are declared in BUILTIN_WORKFLOW_SETTINGS, which
9408
+ the U4 hard-move made the SINGLE source of truth for a moved key's default. Re-declaring them here
9409
+ put them back in the legacy object the hard-move emptied, so an undeclared key on a custom workflow
9410
+ could resolve to this literal instead of the declaration default — the exact drift
9411
+ `workflow-settings-fallback-alignment` guards. The declaration defaults are identical (both
9412
+ `*Enabled` default true, the provider/model lanes carry no default), and the reader uses
9413
+ `!== false`, so removing them here preserves behaviour and restores the invariant.
9414
+ */
9402
9415
  /**
9403
9416
  * FNXC:Merge 2026-06-26-00:00:
9404
9417
  * 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.
@@ -10299,6 +10312,20 @@ function classifyWorkflowAgentNode(node) {
10299
10312
  }
10300
10313
  }
10301
10314
 
10315
+ // ../core/src/workflows/workflow-merge-region.ts
10316
+ var MERGE_REGION_ENTRY_NODE_KINDS = /* @__PURE__ */ new Set([
10317
+ "merge-gate",
10318
+ "merge-attempt",
10319
+ "manual-merge-hold",
10320
+ "retry-backoff",
10321
+ "recovery-router",
10322
+ "branch-group-member-integration",
10323
+ "branch-group-promotion",
10324
+ "pr-create",
10325
+ "pr-respond",
10326
+ "pr-merge"
10327
+ ]);
10328
+
10302
10329
  // ../core/src/workflows/workflow-extension-types.ts
10303
10330
  function workflowExtensionRegistryId(pluginId, extensionId) {
10304
10331
  return `plugin:${pluginId}:${extensionId}`;
@@ -10827,18 +10854,7 @@ function reachableFrom(start, outgoing) {
10827
10854
  }
10828
10855
  return seen;
10829
10856
  }
10830
- var INTERPRETER_ENTRY_NODE_KINDS = /* @__PURE__ */ new Set([
10831
- "merge-gate",
10832
- "merge-attempt",
10833
- "manual-merge-hold",
10834
- "retry-backoff",
10835
- "recovery-router",
10836
- "branch-group-member-integration",
10837
- "branch-group-promotion",
10838
- "pr-create",
10839
- "pr-respond",
10840
- "pr-merge"
10841
- ]);
10857
+ var INTERPRETER_ENTRY_NODE_KINDS = MERGE_REGION_ENTRY_NODE_KINDS;
10842
10858
  var MERGE_CLASS_NODE_KINDS = /* @__PURE__ */ new Set([
10843
10859
  "merge-gate",
10844
10860
  "merge-attempt",
@@ -12858,6 +12874,13 @@ Lint, tests, and typecheck are also hard quality gates:
12858
12874
  - Keep fixing failures caused by your change until lint, impacted tests, build, and typecheck pass.
12859
12875
  - If the repository exposes a typecheck command, run it and fix failures caused by your change.
12860
12876
  - 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.
12877
+
12878
+ **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:
12879
+ - 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.
12880
+ - 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.
12881
+ - 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.
12882
+ - Added a public store/service method? Update the inventory/drift guards that require every public surface to be classified.
12883
+ 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.
12861
12884
  - 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.
12862
12885
  - Do not repeatedly rerun a broad failing or hanging workspace command without a new hypothesis and a narrower confirming command.
12863
12886
 
@@ -13130,6 +13153,7 @@ files with assertions that run via a test runner. Typechecks and builds are NOT
13130
13153
  tests. Manual verification is NOT a test.
13131
13154
 
13132
13155
  - Each implementation step should include writing tests for the code being changed
13156
+ - **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.
13133
13157
  - 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.
13134
13158
  - 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.
13135
13159
  - 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)
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/grok-runtime",
3
- "version": "0.2.14-beta.7",
3
+ "version": "0.2.14-beta.8",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -8203,7 +8203,16 @@ var projectTableNames = [
8203
8203
  "chat_rooms",
8204
8204
  "chat_room_members",
8205
8205
  "chat_room_messages",
8206
- "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"
8207
8216
  ];
8208
8217
 
8209
8218
  // ../core/src/postgres/schema/central.ts
@@ -9396,12 +9405,16 @@ var DEFAULT_PROJECT_SETTINGS = {
9396
9405
  executorEscalationProvider: void 0,
9397
9406
  executorEscalationModelId: void 0,
9398
9407
  executorEscalationNodeId: void 0,
9399
- reviewConvergenceEscalationEnabled: true,
9400
- reviewConvergenceEscalationProvider: void 0,
9401
- reviewConvergenceEscalationModelId: void 0,
9402
- reviewArbitrationEnabled: true,
9403
- reviewArbitrationProvider: void 0,
9404
- reviewArbitrationModelId: void 0,
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
+ */
9405
9418
  /**
9406
9419
  * FNXC:Merge 2026-06-26-00:00:
9407
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.
@@ -10294,6 +10307,20 @@ function classifyWorkflowAgentNode(node) {
10294
10307
  }
10295
10308
  }
10296
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
+
10297
10324
  // ../core/src/workflows/workflow-extension-types.ts
10298
10325
  function workflowExtensionRegistryId(pluginId, extensionId) {
10299
10326
  return `plugin:${pluginId}:${extensionId}`;
@@ -10822,18 +10849,7 @@ function reachableFrom(start, outgoing) {
10822
10849
  }
10823
10850
  return seen;
10824
10851
  }
10825
- var INTERPRETER_ENTRY_NODE_KINDS = /* @__PURE__ */ new Set([
10826
- "merge-gate",
10827
- "merge-attempt",
10828
- "manual-merge-hold",
10829
- "retry-backoff",
10830
- "recovery-router",
10831
- "branch-group-member-integration",
10832
- "branch-group-promotion",
10833
- "pr-create",
10834
- "pr-respond",
10835
- "pr-merge"
10836
- ]);
10852
+ var INTERPRETER_ENTRY_NODE_KINDS = MERGE_REGION_ENTRY_NODE_KINDS;
10837
10853
  var MERGE_CLASS_NODE_KINDS = /* @__PURE__ */ new Set([
10838
10854
  "merge-gate",
10839
10855
  "merge-attempt",
@@ -12853,6 +12869,13 @@ Lint, tests, and typecheck are also hard quality gates:
12853
12869
  - Keep fixing failures caused by your change until lint, impacted tests, build, and typecheck pass.
12854
12870
  - If the repository exposes a typecheck command, run it and fix failures caused by your change.
12855
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.
12856
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.
12857
12880
  - Do not repeatedly rerun a broad failing or hanging workspace command without a new hypothesis and a narrower confirming command.
12858
12881
 
@@ -13125,6 +13148,7 @@ files with assertions that run via a test runner. Typechecks and builds are NOT
13125
13148
  tests. Manual verification is NOT a test.
13126
13149
 
13127
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.
13128
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.
13129
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.
13130
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)
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/hermes-runtime",
3
- "version": "0.2.86-beta.7",
3
+ "version": "0.2.86-beta.8",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {