@askexenow/exe-os 0.9.64 → 0.9.66

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 (105) hide show
  1. package/deploy/stack-manifests/v0.9.json +4 -4
  2. package/dist/bin/backfill-conversations.js +22 -0
  3. package/dist/bin/backfill-responses.js +22 -0
  4. package/dist/bin/backfill-vectors.js +22 -0
  5. package/dist/bin/cleanup-stale-review-tasks.js +22 -0
  6. package/dist/bin/cli.js +2280 -1199
  7. package/dist/bin/exe-agent-config.js +4 -0
  8. package/dist/bin/exe-agent.js +16 -0
  9. package/dist/bin/exe-assign.js +22 -0
  10. package/dist/bin/exe-boot.js +116 -7
  11. package/dist/bin/exe-call.js +16 -0
  12. package/dist/bin/exe-cloud.js +6671 -464
  13. package/dist/bin/exe-dispatch.js +24 -0
  14. package/dist/bin/exe-doctor.js +2845 -1223
  15. package/dist/bin/exe-export-behaviors.js +24 -0
  16. package/dist/bin/exe-forget.js +22 -0
  17. package/dist/bin/exe-gateway.js +24 -0
  18. package/dist/bin/exe-heartbeat.js +23 -0
  19. package/dist/bin/exe-kill.js +22 -0
  20. package/dist/bin/exe-launch-agent.js +24 -0
  21. package/dist/bin/exe-link.js +310 -178
  22. package/dist/bin/exe-new-employee.js +127 -1
  23. package/dist/bin/exe-pending-messages.js +22 -0
  24. package/dist/bin/exe-pending-notifications.js +22 -0
  25. package/dist/bin/exe-pending-reviews.js +22 -0
  26. package/dist/bin/exe-rename.js +22 -0
  27. package/dist/bin/exe-review.js +22 -0
  28. package/dist/bin/exe-search.js +24 -0
  29. package/dist/bin/exe-session-cleanup.js +24 -0
  30. package/dist/bin/exe-settings.js +10 -0
  31. package/dist/bin/exe-start-codex.js +135 -1
  32. package/dist/bin/exe-start-opencode.js +149 -1
  33. package/dist/bin/exe-status.js +22 -0
  34. package/dist/bin/exe-team.js +22 -0
  35. package/dist/bin/git-sweep.js +24 -0
  36. package/dist/bin/graph-backfill.js +22 -0
  37. package/dist/bin/graph-export.js +22 -0
  38. package/dist/bin/install.js +115 -1
  39. package/dist/bin/intercom-check.js +24 -0
  40. package/dist/bin/scan-tasks.js +24 -0
  41. package/dist/bin/setup.js +412 -157
  42. package/dist/bin/shard-migrate.js +22 -0
  43. package/dist/bin/update.js +4 -0
  44. package/dist/gateway/index.js +24 -0
  45. package/dist/hooks/bug-report-worker.js +135 -42
  46. package/dist/hooks/codex-stop-task-finalizer.js +24 -0
  47. package/dist/hooks/commit-complete.js +24 -0
  48. package/dist/hooks/error-recall.js +24 -0
  49. package/dist/hooks/exe-heartbeat-hook.js +4 -0
  50. package/dist/hooks/ingest-worker.js +4 -0
  51. package/dist/hooks/ingest.js +23 -0
  52. package/dist/hooks/instructions-loaded.js +22 -0
  53. package/dist/hooks/notification.js +22 -0
  54. package/dist/hooks/post-compact.js +22 -0
  55. package/dist/hooks/post-tool-combined.js +24 -0
  56. package/dist/hooks/pre-compact.js +260 -109
  57. package/dist/hooks/pre-tool-use.js +22 -0
  58. package/dist/hooks/prompt-submit.js +24 -0
  59. package/dist/hooks/session-end.js +161 -122
  60. package/dist/hooks/session-start.js +142 -0
  61. package/dist/hooks/stop.js +23 -0
  62. package/dist/hooks/subagent-stop.js +22 -0
  63. package/dist/hooks/summary-worker.js +195 -79
  64. package/dist/index.js +24 -0
  65. package/dist/lib/agent-config.js +4 -0
  66. package/dist/lib/cloud-sync.js +50 -6
  67. package/dist/lib/config.js +12 -0
  68. package/dist/lib/consolidation.js +4 -0
  69. package/dist/lib/database.js +4 -0
  70. package/dist/lib/db-daemon-client.js +4 -0
  71. package/dist/lib/db.js +4 -0
  72. package/dist/lib/device-registry.js +4 -0
  73. package/dist/lib/embedder.js +12 -0
  74. package/dist/lib/employee-templates.js +16 -0
  75. package/dist/lib/employees.js +4 -0
  76. package/dist/lib/exe-daemon-client.js +4 -0
  77. package/dist/lib/exe-daemon.js +1144 -480
  78. package/dist/lib/hybrid-search.js +24 -0
  79. package/dist/lib/identity.js +4 -0
  80. package/dist/lib/license.js +4 -0
  81. package/dist/lib/messaging.js +4 -0
  82. package/dist/lib/reminders.js +4 -0
  83. package/dist/lib/schedules.js +22 -0
  84. package/dist/lib/skill-learning.js +12 -0
  85. package/dist/lib/status-brief.js +39 -0
  86. package/dist/lib/store.js +22 -0
  87. package/dist/lib/task-router.js +4 -0
  88. package/dist/lib/tasks.js +12 -0
  89. package/dist/lib/tmux-routing.js +12 -0
  90. package/dist/lib/token-spend.js +4 -0
  91. package/dist/mcp/server.js +1045 -427
  92. package/dist/mcp/tools/complete-reminder.js +4 -0
  93. package/dist/mcp/tools/create-reminder.js +4 -0
  94. package/dist/mcp/tools/create-task.js +12 -0
  95. package/dist/mcp/tools/deactivate-behavior.js +4 -0
  96. package/dist/mcp/tools/list-reminders.js +4 -0
  97. package/dist/mcp/tools/list-tasks.js +4 -0
  98. package/dist/mcp/tools/send-message.js +4 -0
  99. package/dist/mcp/tools/update-task.js +12 -0
  100. package/dist/runtime/index.js +24 -0
  101. package/dist/tui/App.js +24 -0
  102. package/package.json +3 -2
  103. package/src/commands/exe/cloud.md +15 -8
  104. package/src/commands/exe/link.md +7 -6
  105. package/stack.release.json +2 -2
@@ -188,6 +188,11 @@ function normalizeAutoUpdate(raw) {
188
188
  const userAU = raw.autoUpdate ?? {};
189
189
  raw.autoUpdate = { ...defaultAU, ...userAU };
190
190
  }
191
+ function normalizeOrchestration(raw) {
192
+ const defaultOrg = DEFAULT_CONFIG.orchestration;
193
+ const userOrg = raw.orchestration ?? {};
194
+ raw.orchestration = { ...defaultOrg, ...userOrg };
195
+ }
191
196
  async function loadConfig() {
192
197
  const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
193
198
  await ensurePrivateDir(dir);
@@ -212,6 +217,7 @@ async function loadConfig() {
212
217
  normalizeScalingRoadmap(migratedCfg);
213
218
  normalizeSessionLifecycle(migratedCfg);
214
219
  normalizeAutoUpdate(migratedCfg);
220
+ normalizeOrchestration(migratedCfg);
215
221
  const config = { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
216
222
  if (config.dbPath.startsWith("~")) {
217
223
  config.dbPath = config.dbPath.replace(/^~/, os.homedir());
@@ -287,6 +293,10 @@ var init_config = __esm({
287
293
  checkOnBoot: true,
288
294
  autoInstall: false,
289
295
  checkIntervalMs: 24 * 60 * 60 * 1e3
296
+ },
297
+ orchestration: {
298
+ phase: "phase_1_coo",
299
+ phaseSetBy: "default"
290
300
  }
291
301
  };
292
302
  CONFIG_MIGRATIONS = [
@@ -3838,6 +3848,12 @@ var init_platform_procedures = __esm({
3838
3848
  priority: "p0",
3839
3849
  content: "Founder -> coordinator (the executive agent, internally routed as 'COO') -> CTO/CMO. CTO -> engineers. CMO -> content production. Never skip levels: the coordinator does not bypass managers for specialist work. Specialists report to their manager. If you need cross-team info, use ask_team_memory \u2014 don't read other agents' task folders. Each level owns dispatch downward and review upward."
3840
3850
  },
3851
+ {
3852
+ title: "Customer orchestration maturity \u2014 recommend, never trap",
3853
+ domain: "workflow",
3854
+ priority: "p1",
3855
+ content: "New customers start best in Phase 1: founder \u2194 coordinator/Chief of Staff, building company context. Suggest Phase 2 executives when domain work repeats; suggest Phase 3 parallel execution only when review/permission gates are ready. This is guidance, not a blocker: users may jump phases anytime. Never overwrite their phase, role titles, identities, or custom org design."
3856
+ },
3841
3857
  {
3842
3858
  title: "Single dispatch path \u2014 create_task only",
3843
3859
  domain: "workflow",
@@ -3896,6 +3912,12 @@ var init_platform_procedures = __esm({
3896
3912
  priority: "p0",
3897
3913
  content: "exe-build-adv is MANDATORY for ALL work touching 3+ files. Run /exe-build-adv --auto BEFORE implementation. Pipeline: Spec \u2192 AC \u2192 Tests \u2192 Evaluate \u2192 Fix. No multi-file feature ships without pipeline artifacts. No exceptions \u2014 managers reject work without them."
3898
3914
  },
3915
+ {
3916
+ title: "Commit discipline \u2014 never leave verified work floating",
3917
+ domain: "workflow",
3918
+ priority: "p1",
3919
+ content: "After any code-change batch passes typecheck/tests/build, run git status, summarize changed files, and commit with a clear message before ending the session. If work must remain uncommitted for review/dogfood, explicitly say so, list the files, and state the blocker. Never imply work is complete while verified changes are still floating locally."
3920
+ },
3899
3921
  {
3900
3922
  title: "Desktop and TUI are the same product",
3901
3923
  domain: "architecture",
@@ -127,6 +127,10 @@ var init_config = __esm({
127
127
  checkOnBoot: true,
128
128
  autoInstall: false,
129
129
  checkIntervalMs: 24 * 60 * 60 * 1e3
130
+ },
131
+ orchestration: {
132
+ phase: "phase_1_coo",
133
+ phaseSetBy: "default"
130
134
  }
131
135
  };
132
136
  }
@@ -615,7 +619,7 @@ function commandHasAnyMarker(command, markers) {
615
619
  function isLegacySplitPostToolCommand(command) {
616
620
  return commandHasAnyMarker(command, LEGACY_SPLIT_POST_TOOL_HOOK_MARKERS);
617
621
  }
618
- var EXE_HOOKS, LEGACY_SPLIT_POST_TOOL_HOOK_MARKERS;
622
+ var EXE_HOOKS, EXE_HOOK_MANIFEST, LEGACY_SPLIT_POST_TOOL_HOOK_MARKERS;
619
623
  var init_runtime_hook_manifest = __esm({
620
624
  "src/adapters/runtime-hook-manifest.ts"() {
621
625
  "use strict";
@@ -633,6 +637,116 @@ var init_runtime_hook_manifest = __esm({
633
637
  notification: "dist/hooks/notification.js",
634
638
  instructionsLoaded: "dist/hooks/instructions-loaded.js"
635
639
  };
640
+ EXE_HOOK_MANIFEST = [
641
+ {
642
+ key: "postToolCombined",
643
+ event: "PostToolUse",
644
+ commandMarker: EXE_HOOKS.postToolCombined,
645
+ owner: "exe-os",
646
+ purpose: "Single PostToolUse entrypoint for ingestion, error recall, summaries, and bug detection.",
647
+ runtimes: ["claude", "codex", "opencode"],
648
+ checkpointRole: "none"
649
+ },
650
+ {
651
+ key: "sessionStart",
652
+ event: "SessionStart",
653
+ commandMarker: EXE_HOOKS.sessionStart,
654
+ owner: "exe-os",
655
+ purpose: "Loads agent identity, procedures, and boot context.",
656
+ runtimes: ["claude", "codex", "opencode"],
657
+ checkpointRole: "none"
658
+ },
659
+ {
660
+ key: "promptSubmit",
661
+ event: "UserPromptSubmit",
662
+ commandMarker: EXE_HOOKS.promptSubmit,
663
+ owner: "exe-os",
664
+ purpose: "Injects current tasks, pending reviews, and local context before each prompt.",
665
+ runtimes: ["claude", "codex", "opencode"],
666
+ checkpointRole: "none"
667
+ },
668
+ {
669
+ key: "heartbeat",
670
+ event: "UserPromptSubmit",
671
+ commandMarker: EXE_HOOKS.heartbeat,
672
+ owner: "exe-os",
673
+ purpose: "Lightweight heartbeat/status sidecar for Claude Code sessions.",
674
+ runtimes: ["claude"],
675
+ checkpointRole: "none"
676
+ },
677
+ {
678
+ key: "stop",
679
+ event: "Stop",
680
+ commandMarker: EXE_HOOKS.stop,
681
+ owner: "exe-os",
682
+ purpose: "Finalizes task state, capacity signals, and emergency checkpointing.",
683
+ runtimes: ["claude", "codex", "opencode"],
684
+ checkpointRole: "capacity_checkpoint"
685
+ },
686
+ {
687
+ key: "preToolUse",
688
+ event: "PreToolUse",
689
+ commandMarker: EXE_HOOKS.preToolUse,
690
+ owner: "exe-os",
691
+ purpose: "Preflight guardrails before shell/tool execution.",
692
+ runtimes: ["claude", "codex", "opencode"],
693
+ checkpointRole: "none"
694
+ },
695
+ {
696
+ key: "subagentStop",
697
+ event: "SubagentStop",
698
+ commandMarker: EXE_HOOKS.subagentStop,
699
+ owner: "exe-os",
700
+ purpose: "Captures subagent completion context.",
701
+ runtimes: ["claude"],
702
+ checkpointRole: "none"
703
+ },
704
+ {
705
+ key: "preCompact",
706
+ event: "PreCompact",
707
+ commandMarker: EXE_HOOKS.preCompact,
708
+ owner: "exe-os",
709
+ purpose: "Writes active-task snapshot and compaction recovery context.",
710
+ runtimes: ["claude"],
711
+ checkpointRole: "recovery_context"
712
+ },
713
+ {
714
+ key: "postCompact",
715
+ event: "PostCompact",
716
+ commandMarker: EXE_HOOKS.postCompact,
717
+ owner: "exe-os",
718
+ purpose: "Rehydrates recovery context after compaction.",
719
+ runtimes: ["claude"],
720
+ checkpointRole: "recovery_context"
721
+ },
722
+ {
723
+ key: "sessionEnd",
724
+ event: "SessionEnd",
725
+ commandMarker: EXE_HOOKS.sessionEnd,
726
+ owner: "exe-os",
727
+ purpose: "Stores session-end checkpoint and triages orphaned in-progress tasks.",
728
+ runtimes: ["claude"],
729
+ checkpointRole: "session_summary"
730
+ },
731
+ {
732
+ key: "notification",
733
+ event: "Notification",
734
+ commandMarker: EXE_HOOKS.notification,
735
+ owner: "exe-os",
736
+ purpose: "Captures runtime notifications and nudges.",
737
+ runtimes: ["claude"],
738
+ checkpointRole: "none"
739
+ },
740
+ {
741
+ key: "instructionsLoaded",
742
+ event: "InstructionsLoaded",
743
+ commandMarker: EXE_HOOKS.instructionsLoaded,
744
+ owner: "exe-os",
745
+ purpose: "Applies runtime instruction post-processing.",
746
+ runtimes: ["claude"],
747
+ checkpointRole: "none"
748
+ }
749
+ ];
636
750
  LEGACY_SPLIT_POST_TOOL_HOOK_MARKERS = [
637
751
  "dist/hooks/ingest.js",
638
752
  "dist/hooks/error-recall.js",
@@ -205,6 +205,11 @@ function normalizeAutoUpdate(raw) {
205
205
  const userAU = raw.autoUpdate ?? {};
206
206
  raw.autoUpdate = { ...defaultAU, ...userAU };
207
207
  }
208
+ function normalizeOrchestration(raw) {
209
+ const defaultOrg = DEFAULT_CONFIG.orchestration;
210
+ const userOrg = raw.orchestration ?? {};
211
+ raw.orchestration = { ...defaultOrg, ...userOrg };
212
+ }
208
213
  async function loadConfig() {
209
214
  const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
210
215
  await ensurePrivateDir(dir);
@@ -229,6 +234,7 @@ async function loadConfig() {
229
234
  normalizeScalingRoadmap(migratedCfg);
230
235
  normalizeSessionLifecycle(migratedCfg);
231
236
  normalizeAutoUpdate(migratedCfg);
237
+ normalizeOrchestration(migratedCfg);
232
238
  const config = { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
233
239
  if (config.dbPath.startsWith("~")) {
234
240
  config.dbPath = config.dbPath.replace(/^~/, os.homedir());
@@ -252,6 +258,7 @@ function loadConfigSync() {
252
258
  normalizeScalingRoadmap(migratedCfg);
253
259
  normalizeSessionLifecycle(migratedCfg);
254
260
  normalizeAutoUpdate(migratedCfg);
261
+ normalizeOrchestration(migratedCfg);
255
262
  return { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
256
263
  } catch {
257
264
  return { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db") };
@@ -273,6 +280,7 @@ async function loadConfigFrom(configPath) {
273
280
  normalizeScalingRoadmap(migratedCfg);
274
281
  normalizeSessionLifecycle(migratedCfg);
275
282
  normalizeAutoUpdate(migratedCfg);
283
+ normalizeOrchestration(migratedCfg);
276
284
  return { ...DEFAULT_CONFIG, ...migratedCfg };
277
285
  } catch {
278
286
  return { ...DEFAULT_CONFIG };
@@ -344,6 +352,10 @@ var init_config = __esm({
344
352
  checkOnBoot: true,
345
353
  autoInstall: false,
346
354
  checkIntervalMs: 24 * 60 * 60 * 1e3
355
+ },
356
+ orchestration: {
357
+ phase: "phase_1_coo",
358
+ phaseSetBy: "default"
347
359
  }
348
360
  };
349
361
  CONFIG_MIGRATIONS = [
@@ -3937,6 +3949,12 @@ var init_platform_procedures = __esm({
3937
3949
  priority: "p0",
3938
3950
  content: "Founder -> coordinator (the executive agent, internally routed as 'COO') -> CTO/CMO. CTO -> engineers. CMO -> content production. Never skip levels: the coordinator does not bypass managers for specialist work. Specialists report to their manager. If you need cross-team info, use ask_team_memory \u2014 don't read other agents' task folders. Each level owns dispatch downward and review upward."
3939
3951
  },
3952
+ {
3953
+ title: "Customer orchestration maturity \u2014 recommend, never trap",
3954
+ domain: "workflow",
3955
+ priority: "p1",
3956
+ content: "New customers start best in Phase 1: founder \u2194 coordinator/Chief of Staff, building company context. Suggest Phase 2 executives when domain work repeats; suggest Phase 3 parallel execution only when review/permission gates are ready. This is guidance, not a blocker: users may jump phases anytime. Never overwrite their phase, role titles, identities, or custom org design."
3957
+ },
3940
3958
  {
3941
3959
  title: "Single dispatch path \u2014 create_task only",
3942
3960
  domain: "workflow",
@@ -3995,6 +4013,12 @@ var init_platform_procedures = __esm({
3995
4013
  priority: "p0",
3996
4014
  content: "exe-build-adv is MANDATORY for ALL work touching 3+ files. Run /exe-build-adv --auto BEFORE implementation. Pipeline: Spec \u2192 AC \u2192 Tests \u2192 Evaluate \u2192 Fix. No multi-file feature ships without pipeline artifacts. No exceptions \u2014 managers reject work without them."
3997
4015
  },
4016
+ {
4017
+ title: "Commit discipline \u2014 never leave verified work floating",
4018
+ domain: "workflow",
4019
+ priority: "p1",
4020
+ content: "After any code-change batch passes typecheck/tests/build, run git status, summarize changed files, and commit with a clear message before ending the session. If work must remain uncommitted for review/dogfood, explicitly say so, list the files, and state the blocker. Never imply work is complete while verified changes are still floating locally."
4021
+ },
3998
4022
  {
3999
4023
  title: "Desktop and TUI are the same product",
4000
4024
  domain: "architecture",
@@ -454,6 +454,11 @@ function normalizeAutoUpdate(raw) {
454
454
  const userAU = raw.autoUpdate ?? {};
455
455
  raw.autoUpdate = { ...defaultAU, ...userAU };
456
456
  }
457
+ function normalizeOrchestration(raw) {
458
+ const defaultOrg = DEFAULT_CONFIG.orchestration;
459
+ const userOrg = raw.orchestration ?? {};
460
+ raw.orchestration = { ...defaultOrg, ...userOrg };
461
+ }
457
462
  async function loadConfig() {
458
463
  const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
459
464
  await ensurePrivateDir(dir);
@@ -478,6 +483,7 @@ async function loadConfig() {
478
483
  normalizeScalingRoadmap(migratedCfg);
479
484
  normalizeSessionLifecycle(migratedCfg);
480
485
  normalizeAutoUpdate(migratedCfg);
486
+ normalizeOrchestration(migratedCfg);
481
487
  const config = { ...DEFAULT_CONFIG, dbPath: path2.join(dir, "memories.db"), ...migratedCfg };
482
488
  if (config.dbPath.startsWith("~")) {
483
489
  config.dbPath = config.dbPath.replace(/^~/, os2.homedir());
@@ -501,6 +507,7 @@ function loadConfigSync() {
501
507
  normalizeScalingRoadmap(migratedCfg);
502
508
  normalizeSessionLifecycle(migratedCfg);
503
509
  normalizeAutoUpdate(migratedCfg);
510
+ normalizeOrchestration(migratedCfg);
504
511
  return { ...DEFAULT_CONFIG, dbPath: path2.join(dir, "memories.db"), ...migratedCfg };
505
512
  } catch {
506
513
  return { ...DEFAULT_CONFIG, dbPath: path2.join(dir, "memories.db") };
@@ -522,6 +529,7 @@ async function loadConfigFrom(configPath) {
522
529
  normalizeScalingRoadmap(migratedCfg);
523
530
  normalizeSessionLifecycle(migratedCfg);
524
531
  normalizeAutoUpdate(migratedCfg);
532
+ normalizeOrchestration(migratedCfg);
525
533
  return { ...DEFAULT_CONFIG, ...migratedCfg };
526
534
  } catch {
527
535
  return { ...DEFAULT_CONFIG };
@@ -593,6 +601,10 @@ var init_config = __esm({
593
601
  checkOnBoot: true,
594
602
  autoInstall: false,
595
603
  checkIntervalMs: 24 * 60 * 60 * 1e3
604
+ },
605
+ orchestration: {
606
+ phase: "phase_1_coo",
607
+ phaseSetBy: "default"
596
608
  }
597
609
  };
598
610
  CONFIG_MIGRATIONS = [
@@ -7615,6 +7627,12 @@ var init_platform_procedures = __esm({
7615
7627
  priority: "p0",
7616
7628
  content: "Founder -> coordinator (the executive agent, internally routed as 'COO') -> CTO/CMO. CTO -> engineers. CMO -> content production. Never skip levels: the coordinator does not bypass managers for specialist work. Specialists report to their manager. If you need cross-team info, use ask_team_memory \u2014 don't read other agents' task folders. Each level owns dispatch downward and review upward."
7617
7629
  },
7630
+ {
7631
+ title: "Customer orchestration maturity \u2014 recommend, never trap",
7632
+ domain: "workflow",
7633
+ priority: "p1",
7634
+ content: "New customers start best in Phase 1: founder \u2194 coordinator/Chief of Staff, building company context. Suggest Phase 2 executives when domain work repeats; suggest Phase 3 parallel execution only when review/permission gates are ready. This is guidance, not a blocker: users may jump phases anytime. Never overwrite their phase, role titles, identities, or custom org design."
7635
+ },
7618
7636
  {
7619
7637
  title: "Single dispatch path \u2014 create_task only",
7620
7638
  domain: "workflow",
@@ -7673,6 +7691,12 @@ var init_platform_procedures = __esm({
7673
7691
  priority: "p0",
7674
7692
  content: "exe-build-adv is MANDATORY for ALL work touching 3+ files. Run /exe-build-adv --auto BEFORE implementation. Pipeline: Spec \u2192 AC \u2192 Tests \u2192 Evaluate \u2192 Fix. No multi-file feature ships without pipeline artifacts. No exceptions \u2014 managers reject work without them."
7675
7693
  },
7694
+ {
7695
+ title: "Commit discipline \u2014 never leave verified work floating",
7696
+ domain: "workflow",
7697
+ priority: "p1",
7698
+ content: "After any code-change batch passes typecheck/tests/build, run git status, summarize changed files, and commit with a clear message before ending the session. If work must remain uncommitted for review/dogfood, explicitly say so, list the files, and state the blocker. Never imply work is complete while verified changes are still floating locally."
7699
+ },
7676
7700
  {
7677
7701
  title: "Desktop and TUI are the same product",
7678
7702
  domain: "architecture",