@openrig/cli 0.3.1 → 0.3.2

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 (264) hide show
  1. package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +1 -1
  2. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  3. package/daemon/dist/adapters/codex-runtime-adapter.js +2 -1
  4. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  5. package/daemon/dist/adapters/tmux.d.ts +36 -0
  6. package/daemon/dist/adapters/tmux.d.ts.map +1 -1
  7. package/daemon/dist/adapters/tmux.js +66 -0
  8. package/daemon/dist/adapters/tmux.js.map +1 -1
  9. package/daemon/dist/db/migrations/037_mission_control_actions.d.ts +5 -1
  10. package/daemon/dist/db/migrations/037_mission_control_actions.d.ts.map +1 -1
  11. package/daemon/dist/db/migrations/037_mission_control_actions.js +5 -1
  12. package/daemon/dist/db/migrations/037_mission_control_actions.js.map +1 -1
  13. package/daemon/dist/db/migrations/041_rig_policy.d.ts +32 -0
  14. package/daemon/dist/db/migrations/041_rig_policy.d.ts.map +1 -0
  15. package/daemon/dist/db/migrations/041_rig_policy.js +47 -0
  16. package/daemon/dist/db/migrations/041_rig_policy.js.map +1 -0
  17. package/daemon/dist/domain/agent-images/resume-token-discovery.js +1 -1
  18. package/daemon/dist/domain/agent-images/resume-token-discovery.js.map +1 -1
  19. package/daemon/dist/domain/agent-images/snapshot-capturer.d.ts.map +1 -1
  20. package/daemon/dist/domain/agent-images/snapshot-capturer.js +2 -1
  21. package/daemon/dist/domain/agent-images/snapshot-capturer.js.map +1 -1
  22. package/daemon/dist/domain/agent-manifest.js +27 -0
  23. package/daemon/dist/domain/agent-manifest.js.map +1 -1
  24. package/daemon/dist/domain/bootstrap-orchestrator.d.ts.map +1 -1
  25. package/daemon/dist/domain/bootstrap-orchestrator.js +86 -6
  26. package/daemon/dist/domain/bootstrap-orchestrator.js.map +1 -1
  27. package/daemon/dist/domain/bundle-agent-images-router.d.ts +95 -0
  28. package/daemon/dist/domain/bundle-agent-images-router.d.ts.map +1 -0
  29. package/daemon/dist/domain/bundle-agent-images-router.js +140 -0
  30. package/daemon/dist/domain/bundle-agent-images-router.js.map +1 -0
  31. package/daemon/dist/domain/bundle-assembler.d.ts +18 -1
  32. package/daemon/dist/domain/bundle-assembler.d.ts.map +1 -1
  33. package/daemon/dist/domain/bundle-assembler.js +11 -1
  34. package/daemon/dist/domain/bundle-assembler.js.map +1 -1
  35. package/daemon/dist/domain/bundle-audit.d.ts +89 -0
  36. package/daemon/dist/domain/bundle-audit.d.ts.map +1 -0
  37. package/daemon/dist/domain/bundle-audit.js +87 -0
  38. package/daemon/dist/domain/bundle-audit.js.map +1 -0
  39. package/daemon/dist/domain/bundle-conflict-detector.d.ts +57 -0
  40. package/daemon/dist/domain/bundle-conflict-detector.d.ts.map +1 -0
  41. package/daemon/dist/domain/bundle-conflict-detector.js +49 -0
  42. package/daemon/dist/domain/bundle-conflict-detector.js.map +1 -0
  43. package/daemon/dist/domain/bundle-context-packs-router.d.ts +100 -0
  44. package/daemon/dist/domain/bundle-context-packs-router.d.ts.map +1 -0
  45. package/daemon/dist/domain/bundle-context-packs-router.js +158 -0
  46. package/daemon/dist/domain/bundle-context-packs-router.js.map +1 -0
  47. package/daemon/dist/domain/bundle-plugins-router.d.ts +69 -0
  48. package/daemon/dist/domain/bundle-plugins-router.d.ts.map +1 -0
  49. package/daemon/dist/domain/bundle-plugins-router.js +87 -0
  50. package/daemon/dist/domain/bundle-plugins-router.js.map +1 -0
  51. package/daemon/dist/domain/bundle-skills-router.d.ts +62 -0
  52. package/daemon/dist/domain/bundle-skills-router.d.ts.map +1 -0
  53. package/daemon/dist/domain/bundle-skills-router.js +90 -0
  54. package/daemon/dist/domain/bundle-skills-router.js.map +1 -0
  55. package/daemon/dist/domain/bundle-types.d.ts +106 -0
  56. package/daemon/dist/domain/bundle-types.d.ts.map +1 -1
  57. package/daemon/dist/domain/bundle-types.js +375 -0
  58. package/daemon/dist/domain/bundle-types.js.map +1 -1
  59. package/daemon/dist/domain/bundle-workflow-specs-router.d.ts +94 -0
  60. package/daemon/dist/domain/bundle-workflow-specs-router.d.ts.map +1 -0
  61. package/daemon/dist/domain/bundle-workflow-specs-router.js +144 -0
  62. package/daemon/dist/domain/bundle-workflow-specs-router.js.map +1 -0
  63. package/daemon/dist/domain/context-monitor.d.ts +5 -1
  64. package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
  65. package/daemon/dist/domain/context-monitor.js +28 -15
  66. package/daemon/dist/domain/context-monitor.js.map +1 -1
  67. package/daemon/dist/domain/graph-projection.d.ts +6 -0
  68. package/daemon/dist/domain/graph-projection.d.ts.map +1 -1
  69. package/daemon/dist/domain/graph-projection.js +6 -0
  70. package/daemon/dist/domain/graph-projection.js.map +1 -1
  71. package/daemon/dist/domain/native-resume-probe.js +7 -7
  72. package/daemon/dist/domain/native-resume-probe.js.map +1 -1
  73. package/daemon/dist/domain/node-inventory.d.ts +18 -0
  74. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  75. package/daemon/dist/domain/node-inventory.js +98 -0
  76. package/daemon/dist/domain/node-inventory.js.map +1 -1
  77. package/daemon/dist/domain/node-launcher.d.ts +12 -0
  78. package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
  79. package/daemon/dist/domain/node-launcher.js +25 -1
  80. package/daemon/dist/domain/node-launcher.js.map +1 -1
  81. package/daemon/dist/domain/pod-bundle-assembler.d.ts +16 -1
  82. package/daemon/dist/domain/pod-bundle-assembler.d.ts.map +1 -1
  83. package/daemon/dist/domain/pod-bundle-assembler.js +11 -1
  84. package/daemon/dist/domain/pod-bundle-assembler.js.map +1 -1
  85. package/daemon/dist/domain/profile-resolver.d.ts +10 -0
  86. package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
  87. package/daemon/dist/domain/profile-resolver.js +4 -0
  88. package/daemon/dist/domain/profile-resolver.js.map +1 -1
  89. package/daemon/dist/domain/ps-projection.d.ts +22 -0
  90. package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
  91. package/daemon/dist/domain/ps-projection.js +57 -0
  92. package/daemon/dist/domain/ps-projection.js.map +1 -1
  93. package/daemon/dist/domain/queue-repository.d.ts +37 -1
  94. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  95. package/daemon/dist/domain/queue-repository.js +99 -2
  96. package/daemon/dist/domain/queue-repository.js.map +1 -1
  97. package/daemon/dist/domain/restore-check-service.d.ts +4 -0
  98. package/daemon/dist/domain/restore-check-service.d.ts.map +1 -1
  99. package/daemon/dist/domain/restore-check-service.js +16 -7
  100. package/daemon/dist/domain/restore-check-service.js.map +1 -1
  101. package/daemon/dist/domain/rig-policy/rig-policy-defaults.d.ts +48 -0
  102. package/daemon/dist/domain/rig-policy/rig-policy-defaults.d.ts.map +1 -0
  103. package/daemon/dist/domain/rig-policy/rig-policy-defaults.js +96 -0
  104. package/daemon/dist/domain/rig-policy/rig-policy-defaults.js.map +1 -0
  105. package/daemon/dist/domain/rig-policy/rig-policy-store.d.ts +46 -0
  106. package/daemon/dist/domain/rig-policy/rig-policy-store.d.ts.map +1 -0
  107. package/daemon/dist/domain/rig-policy/rig-policy-store.js +171 -0
  108. package/daemon/dist/domain/rig-policy/rig-policy-store.js.map +1 -0
  109. package/daemon/dist/domain/rig-policy/rig-policy-types.d.ts +145 -0
  110. package/daemon/dist/domain/rig-policy/rig-policy-types.d.ts.map +1 -0
  111. package/daemon/dist/domain/rig-policy/rig-policy-types.js +52 -0
  112. package/daemon/dist/domain/rig-policy/rig-policy-types.js.map +1 -0
  113. package/daemon/dist/domain/rig-policy/rig-policy-validator.d.ts +58 -0
  114. package/daemon/dist/domain/rig-policy/rig-policy-validator.d.ts.map +1 -0
  115. package/daemon/dist/domain/rig-policy/rig-policy-validator.js +211 -0
  116. package/daemon/dist/domain/rig-policy/rig-policy-validator.js.map +1 -0
  117. package/daemon/dist/domain/rigspec-instantiator.d.ts +1 -1
  118. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  119. package/daemon/dist/domain/rigspec-instantiator.js +109 -18
  120. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  121. package/daemon/dist/domain/seat-activity-service.d.ts +79 -0
  122. package/daemon/dist/domain/seat-activity-service.d.ts.map +1 -0
  123. package/daemon/dist/domain/seat-activity-service.js +123 -0
  124. package/daemon/dist/domain/seat-activity-service.js.map +1 -0
  125. package/daemon/dist/domain/slices/slice-indexer.d.ts +12 -0
  126. package/daemon/dist/domain/slices/slice-indexer.d.ts.map +1 -1
  127. package/daemon/dist/domain/slices/slice-indexer.js +23 -0
  128. package/daemon/dist/domain/slices/slice-indexer.js.map +1 -1
  129. package/daemon/dist/domain/spec-library-service.d.ts.map +1 -1
  130. package/daemon/dist/domain/spec-library-service.js +19 -0
  131. package/daemon/dist/domain/spec-library-service.js.map +1 -1
  132. package/daemon/dist/domain/types.d.ts +79 -3
  133. package/daemon/dist/domain/types.d.ts.map +1 -1
  134. package/daemon/dist/domain/types.js.map +1 -1
  135. package/daemon/dist/domain/workflow-spec-cache.d.ts +22 -0
  136. package/daemon/dist/domain/workflow-spec-cache.d.ts.map +1 -1
  137. package/daemon/dist/domain/workflow-spec-cache.js +37 -0
  138. package/daemon/dist/domain/workflow-spec-cache.js.map +1 -1
  139. package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts +7 -0
  140. package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -1
  141. package/daemon/dist/domain/workspace/default-workspace-scaffold.js +156 -3
  142. package/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -1
  143. package/daemon/dist/domain/workspace/workspace-doctor.d.ts +197 -0
  144. package/daemon/dist/domain/workspace/workspace-doctor.d.ts.map +1 -0
  145. package/daemon/dist/domain/workspace/workspace-doctor.js +448 -0
  146. package/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -0
  147. package/daemon/dist/index.d.ts.map +1 -1
  148. package/daemon/dist/index.js +11 -0
  149. package/daemon/dist/index.js.map +1 -1
  150. package/daemon/dist/routes/bundles.d.ts.map +1 -1
  151. package/daemon/dist/routes/bundles.js +966 -7
  152. package/daemon/dist/routes/bundles.js.map +1 -1
  153. package/daemon/dist/routes/config.d.ts.map +1 -1
  154. package/daemon/dist/routes/config.js +19 -2
  155. package/daemon/dist/routes/config.js.map +1 -1
  156. package/daemon/dist/routes/info.d.ts +3 -0
  157. package/daemon/dist/routes/info.d.ts.map +1 -0
  158. package/daemon/dist/routes/info.js +20 -0
  159. package/daemon/dist/routes/info.js.map +1 -0
  160. package/daemon/dist/routes/queue.d.ts +18 -0
  161. package/daemon/dist/routes/queue.d.ts.map +1 -1
  162. package/daemon/dist/routes/queue.js +97 -5
  163. package/daemon/dist/routes/queue.js.map +1 -1
  164. package/daemon/dist/routes/rig-policy.d.ts +9 -0
  165. package/daemon/dist/routes/rig-policy.d.ts.map +1 -0
  166. package/daemon/dist/routes/rig-policy.js +174 -0
  167. package/daemon/dist/routes/rig-policy.js.map +1 -0
  168. package/daemon/dist/routes/rigs.d.ts.map +1 -1
  169. package/daemon/dist/routes/rigs.js +10 -2
  170. package/daemon/dist/routes/rigs.js.map +1 -1
  171. package/daemon/dist/routes/sessions.d.ts.map +1 -1
  172. package/daemon/dist/routes/sessions.js +26 -3
  173. package/daemon/dist/routes/sessions.js.map +1 -1
  174. package/daemon/dist/routes/up.d.ts +25 -0
  175. package/daemon/dist/routes/up.d.ts.map +1 -1
  176. package/daemon/dist/routes/up.js +70 -3
  177. package/daemon/dist/routes/up.js.map +1 -1
  178. package/daemon/dist/routes/workspace.d.ts.map +1 -1
  179. package/daemon/dist/routes/workspace.js +80 -1
  180. package/daemon/dist/routes/workspace.js.map +1 -1
  181. package/daemon/dist/server.d.ts +10 -0
  182. package/daemon/dist/server.d.ts.map +1 -1
  183. package/daemon/dist/server.js +11 -0
  184. package/daemon/dist/server.js.map +1 -1
  185. package/daemon/dist/startup.d.ts.map +1 -1
  186. package/daemon/dist/startup.js +45 -4
  187. package/daemon/dist/startup.js.map +1 -1
  188. package/daemon/specs/agents/orchestration/orchestrator/guidance/role.md +28 -4
  189. package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +285 -8
  190. package/daemon/specs/agents/shared/skills/core/rig-lifecycle/SKILL.md +2 -2
  191. package/daemon/specs/rigs/launch/conveyor/rig.yaml +1 -1
  192. package/dist/client.d.ts +3 -0
  193. package/dist/client.d.ts.map +1 -1
  194. package/dist/client.js +13 -1
  195. package/dist/client.js.map +1 -1
  196. package/dist/commands/bundle.d.ts.map +1 -1
  197. package/dist/commands/bundle.js +123 -2
  198. package/dist/commands/bundle.js.map +1 -1
  199. package/dist/commands/config-init-workspace.d.ts.map +1 -1
  200. package/dist/commands/config-init-workspace.js +40 -5
  201. package/dist/commands/config-init-workspace.js.map +1 -1
  202. package/dist/commands/ps.d.ts.map +1 -1
  203. package/dist/commands/ps.js +51 -8
  204. package/dist/commands/ps.js.map +1 -1
  205. package/dist/commands/queue.d.ts +6 -0
  206. package/dist/commands/queue.d.ts.map +1 -1
  207. package/dist/commands/queue.js +103 -5
  208. package/dist/commands/queue.js.map +1 -1
  209. package/dist/commands/rig-policy.d.ts +48 -0
  210. package/dist/commands/rig-policy.d.ts.map +1 -0
  211. package/dist/commands/rig-policy.js +429 -0
  212. package/dist/commands/rig-policy.js.map +1 -0
  213. package/dist/commands/scope.d.ts +6 -0
  214. package/dist/commands/scope.d.ts.map +1 -0
  215. package/dist/commands/scope.js +659 -0
  216. package/dist/commands/scope.js.map +1 -0
  217. package/dist/commands/up.d.ts.map +1 -1
  218. package/dist/commands/up.js +47 -0
  219. package/dist/commands/up.js.map +1 -1
  220. package/dist/commands/workflow.d.ts +9 -0
  221. package/dist/commands/workflow.d.ts.map +1 -1
  222. package/dist/commands/workflow.js +139 -1
  223. package/dist/commands/workflow.js.map +1 -1
  224. package/dist/commands/workspace.d.ts +20 -0
  225. package/dist/commands/workspace.d.ts.map +1 -1
  226. package/dist/commands/workspace.js +138 -7
  227. package/dist/commands/workspace.js.map +1 -1
  228. package/dist/daemon-lifecycle.d.ts +25 -1
  229. package/dist/daemon-lifecycle.d.ts.map +1 -1
  230. package/dist/daemon-lifecycle.js +33 -2
  231. package/dist/daemon-lifecycle.js.map +1 -1
  232. package/dist/index.d.ts +2 -0
  233. package/dist/index.d.ts.map +1 -1
  234. package/dist/index.js +5 -0
  235. package/dist/index.js.map +1 -1
  236. package/dist/lib/scope/dot-id.d.ts +43 -0
  237. package/dist/lib/scope/dot-id.d.ts.map +1 -0
  238. package/dist/lib/scope/dot-id.js +165 -0
  239. package/dist/lib/scope/dot-id.js.map +1 -0
  240. package/dist/lib/scope/scope-fs.d.ts +79 -0
  241. package/dist/lib/scope/scope-fs.d.ts.map +1 -0
  242. package/dist/lib/scope/scope-fs.js +468 -0
  243. package/dist/lib/scope/scope-fs.js.map +1 -0
  244. package/dist/lib/scope/templates.d.ts +38 -0
  245. package/dist/lib/scope/templates.d.ts.map +1 -0
  246. package/dist/lib/scope/templates.js +109 -0
  247. package/dist/lib/scope/templates.js.map +1 -0
  248. package/dist/lib/scope/types.d.ts +61 -0
  249. package/dist/lib/scope/types.d.ts.map +1 -0
  250. package/dist/lib/scope/types.js +38 -0
  251. package/dist/lib/scope/types.js.map +1 -0
  252. package/dist/lib/scope-templates/backlog-deprecation.md +26 -0
  253. package/dist/lib/scope-templates/backlog-tech-debt.md +22 -0
  254. package/dist/lib/scope-templates/bug-fix.md +30 -0
  255. package/dist/lib/scope-templates/mission-notes.md +97 -0
  256. package/dist/lib/scope-templates/mission-placeholder.md +20 -0
  257. package/dist/lib/scope-templates/mission-release.md +25 -0
  258. package/dist/lib/scope-templates/placeholder.md +30 -0
  259. package/dist/lib/scope-templates/release-feature.md +26 -0
  260. package/dist/lib/scope-templates/research.md +22 -0
  261. package/package.json +2 -2
  262. package/ui/dist/assets/index-GjTxfi9S.js +547 -0
  263. package/ui/dist/index.html +1 -1
  264. package/ui/dist/assets/index-Rl3ZBrUg.js +0 -547
@@ -1,22 +1,32 @@
1
1
  // V0.3.1 slice 21 onboarding-conveyor: rich narrative content for the
2
2
  // getting-started mission's two slices (the click-through-to-learn
3
3
  // teaching surface).
4
+ import * as fs from "node:fs";
5
+ import * as path from "node:path";
4
6
  import { GETTING_STARTED_NARRATIVE } from "./getting-started-narrative.js";
7
+ // Release-0.3.2 slice 01 (OPR.0.3.2.1) — seeded missions/slices now
8
+ // carry §1 dot-IDs in frontmatter so the scaffold coheres with
9
+ // `conventions/scope-and-versioning`. `getting-started` is a
10
+ // non-release mission → escape band `OPR.99.0.1`; its slices fan out
11
+ // as `OPR.99.0.1.<n>` (numbers monotonic, never reused).
5
12
  const DEFAULT_MISSIONS = [
6
13
  {
7
14
  id: "getting-started",
15
+ dotId: "OPR.99.0.1",
8
16
  title: "Getting Started",
9
17
  status: "active",
10
18
  objective: "Launch the conveyor starter and learn how OpenRig moves work through queue-backed slices.",
11
19
  slices: [
12
20
  {
13
21
  id: "first-conveyor-run",
22
+ dotId: "OPR.99.0.1.1",
14
23
  title: "First Conveyor Run",
15
24
  status: "active",
16
25
  objective: "Move one small packet through intake, planning, build, review, and close on the conveyor starter.",
17
26
  },
18
27
  {
19
28
  id: "inspect-project-evidence",
29
+ dotId: "OPR.99.0.1.2",
20
30
  title: "Inspect Project Evidence",
21
31
  status: "draft",
22
32
  objective: "Open Project, Queue, Story, and Tests to inspect the evidence created by the first conveyor run.",
@@ -43,7 +53,7 @@ export function workspaceScaffoldDirs() {
43
53
  function subdirReadmeContent(subdir) {
44
54
  switch (subdir) {
45
55
  case "missions":
46
- return "# missions\n\nProject missions live here. Each mission folder maps to one Project mission in the UI and owns a `slices/` child folder.\n\nExpected shape:\n\n```text\nmissions/<mission-id>/README.md\nmissions/<mission-id>/PROGRESS.md\nmissions/<mission-id>/slices/<slice-id>/README.md\n```\n";
56
+ return "# missions\n\nProject missions live here. Each mission folder maps to one Project mission in the UI and owns a `slices/` child folder.\n\nExpected shape:\n\n```text\nmissions/<mission-name>/README.md\nmissions/<mission-name>/PROGRESS.md\nmissions/<mission-name>/slices/<slice-name>/README.md\n```\n\nEvery mission and slice README carries a stable dot-ID in its frontmatter (`id: OPR.<ver>[.<n>]`) per the scope-and-versioning convention. Use `rig scope mission create <name>` and `rig scope slice create <mission> <slug>` to mint conformant artifacts; the CLI handles the dot-ID + auto-numbering for you. The folder name is the operator-facing slug; the `id:` is the stable handle that survives renames.\n";
47
57
  case "artifacts":
48
58
  return "# artifacts\n\nWork products live here: plans, drafts, generated outputs, and other files that a slice may reference before closure.\n";
49
59
  case "evidence":
@@ -71,7 +81,7 @@ This workspace is file-backed. The Project UI mirrors this structure:
71
81
  - \`evidence/\` is for proof notes and verification summaries.
72
82
  - \`dogfood-evidence/<proof-packet-id>\` becomes Tests proof when the packet id contains the slice id tokens.
73
83
 
74
- Use stable kebab-case ids for mission and slice folders. Keep slice ids unique inside the workspace.
84
+ Use stable kebab-case names for mission and slice folders. Every mission/slice README also carries a stable dot-ID in its frontmatter (\`id: OPR.<ver>[.<n>]\`) per the \`scope-and-versioning\` convention; mint conformant artifacts via \`rig scope mission create <name>\` and \`rig scope slice create <mission> <slug>\`. Folder names are operator-facing slugs; the \`id:\` is the rename-proof handle.
75
85
  `;
76
86
  const STEERING_PLACEHOLDER = `---
77
87
  title: Priority Stack
@@ -100,6 +110,7 @@ alongside your Project workspace.
100
110
  `;
101
111
  function missionReadme(mission) {
102
112
  return `---
113
+ id: ${mission.dotId}
103
114
  title: ${mission.title}
104
115
  status: ${mission.status}
105
116
  mission: ${mission.id}
@@ -134,6 +145,7 @@ function sliceReadme(mission, slice) {
134
145
  const narrative = GETTING_STARTED_NARRATIVE[slice.id];
135
146
  if (narrative) {
136
147
  return `---
148
+ id: ${slice.dotId}
137
149
  title: ${slice.title}
138
150
  status: ${slice.status}
139
151
  mission: ${mission.id}
@@ -144,6 +156,7 @@ slice: ${slice.id}
144
156
  ${narrative.readme}`;
145
157
  }
146
158
  return `---
159
+ id: ${slice.dotId}
147
160
  title: ${slice.title}
148
161
  status: ${slice.status}
149
162
  mission: ${mission.id}
@@ -219,6 +232,134 @@ ${slice.objective}
219
232
  - [ ] Any proof artifacts are referenced from the slice before closure.
220
233
  `;
221
234
  }
235
+ // FR-5e A1 (daemon-side symmetry) — MISSION_NOTES template +
236
+ // rendering for the daemon's `/api/config/init-workspace` route so
237
+ // UI-driven init lands the same scaffold as CLI-driven init. The
238
+ // template content is duplicated here from
239
+ // packages/cli/src/lib/scope-templates/mission-notes.md to keep the
240
+ // daemon side dependency-free of the cli package; a parity test in
241
+ // getting-started-narrative-parity.test.ts asserts CLI + daemon emit
242
+ // byte-identical MISSION_NOTES content given the same opts. Same
243
+ // env-var-pivot pattern the CLI surface honors:
244
+ // OPENRIG_MISSION_NOTES_TEMPLATE_PATH > built-in.
245
+ const MISSION_NOTES_BUILT_IN = `---
246
+ mission: {{mission_id}}
247
+ name: {{mission_name}}
248
+ status: active
249
+ authored: {{created_date}}
250
+ last-updated: {{created_date}}
251
+ ---
252
+
253
+ # Mission Notes — {{mission_name}}
254
+
255
+ > Read the frontmatter \`last-updated\` first. If stale relative to runtime,
256
+ > treat this file as \`provisional\` and re-verify before relying on it.
257
+ > Pointer-first by design — index durable canonical artifacts; don't duplicate
258
+ > them (duplication is the stale-breadcrumb failure mode this convention
259
+ > exists to kill).
260
+
261
+ ## §1. Top-of-mind context
262
+
263
+ (Current most-load-bearing state — gates, open scope-decisions, in-flight
264
+ surprises. Updated by anyone when material changes. Keep to 5-15 lines.)
265
+
266
+ ## §2. Active workstreams + drivers + tips
267
+
268
+ (Per-workstream rows. THIS SECTION IS THE MISSION CODEMAP. Each row:
269
+ state / driver / branch+tip-SHA / latest blocker or ACK.)
270
+
271
+ - (workstream-id) — state — driver — tip-SHA — blocker/ACK
272
+
273
+ ## §3. Open scope-decisions
274
+
275
+ (Labeled gates the operator owns. Per gate: where the gate is, what's needed,
276
+ who routed.)
277
+
278
+ - OQ-1: (decision needed) — gate at <artifact-path> — surfaced by <seat>
279
+
280
+ ## §4. Slice inventory
281
+
282
+ (Full table of slices on this mission.)
283
+
284
+ | # | slice | state | driver | blocker |
285
+ |---|---|---|---|---|
286
+
287
+ ## §5. Pending dispatches
288
+
289
+ (Next-go items waiting on driver availability or convergence. Immediately-ready
290
+ set, not full backlog.)
291
+
292
+ ## §6. Ledgers
293
+
294
+ (Mission-specific shared ledgers: release version + tag, SC counts, cumulative
295
+ deltas, etc.)
296
+
297
+ ## §7. Banked memories that apply here
298
+
299
+ (Bulleted: banked-feedback / banked-project memories load-bearing on restore
300
+ for this mission. Ones learned during this mission go into the same list.)
301
+
302
+ ## §8. Convention pointers
303
+
304
+ (Which banked conventions this mission inherits. Cross-reference each by path.
305
+ This section is the principles/conventions inheritance surface for the mission.)
306
+
307
+ - \`conventions/mission-notes/README.md\` — this convention (apply on every restore)
308
+
309
+ ## §9. Reconstruction protocol
310
+
311
+ (Commands to run after compaction or for onboarding. Refresh as the mission's
312
+ restore-needs evolve.)
313
+
314
+ 1. \`rig whoami --json\` — confirm seat identity
315
+ 2. Read this file's §1 + your §A-§X section + this §9
316
+ 3. Read \`missions/{{mission_id}}/README.md\` for mission scope
317
+ 4. Read \`missions/{{mission_id}}/PROGRESS.md\` for delivery state
318
+ 5. \`rig queue list --destination <your-session>\` — your durable inbox
319
+ 6. State "restored from {{mission_id}}; resumed at <action>" before acting
320
+
321
+ ## §10. What NOT to reconstruct
322
+
323
+ (Explicit pruning — completed slices / merged commits / closed ACK packets are
324
+ recoverable on demand and don't need to be in working memory. Name them to
325
+ free attention.)
326
+
327
+ ## §A. <first-seat>@<rig> notes
328
+
329
+ (First seat's notes. Pattern: append cont.N entries with date + state of the
330
+ world from this seat's perspective. Latest = truth. Other seats READ but
331
+ don't modify.)
332
+
333
+ DONE {{created_date}} (cont.0 — mission scaffolded):
334
+ - Mission scaffolded via \`rig scope mission create\`. Template applied; this
335
+ file is the seed state. First substantive cont.1 entry follows when work
336
+ begins.
337
+
338
+ ## §B / §C / ... — per-seat sections
339
+
340
+ (Each additional seat adds an h2 ## §X section under their own header as they
341
+ join. Section pattern matches §A.)
342
+ `;
343
+ function applyMissionNotesPlaceholders(content, opts) {
344
+ return content
345
+ .replace(/\{\{mission_id\}\}/g, opts.mission_id)
346
+ .replace(/\{\{mission_name\}\}/g, opts.mission_name)
347
+ .replace(/\{\{created_date\}\}/g, opts.created_date);
348
+ }
349
+ export function renderDaemonMissionNotes(opts) {
350
+ const envValue = process.env.OPENRIG_MISSION_NOTES_TEMPLATE_PATH;
351
+ if (envValue && envValue.trim().length > 0) {
352
+ const absPath = path.resolve(envValue.trim());
353
+ if (!fs.existsSync(absPath)) {
354
+ throw new Error(`OPENRIG_MISSION_NOTES_TEMPLATE_PATH points at "${envValue}", which does not exist. ` +
355
+ "MISSION_NOTES.md not scaffolded. Set it to an absolute path to a readable template file, " +
356
+ "or unset it to use the built-in bundled fallback.");
357
+ }
358
+ const raw = fs.readFileSync(absPath, "utf8");
359
+ return applyMissionNotesPlaceholders(raw, opts);
360
+ }
361
+ return applyMissionNotesPlaceholders(MISSION_NOTES_BUILT_IN, opts);
362
+ }
222
363
  export function workspaceScaffoldFiles() {
223
364
  const files = [
224
365
  { relPath: "README.md", content: WORKSPACE_README },
@@ -232,7 +373,19 @@ export function workspaceScaffoldFiles() {
232
373
  { relPath: "dogfood-evidence/README.md", content: subdirReadmeContent("dogfood-evidence") },
233
374
  ];
234
375
  for (const mission of DEFAULT_MISSIONS) {
235
- files.push({ relPath: `missions/${mission.id}/README.md`, content: missionReadme(mission) }, { relPath: `missions/${mission.id}/PROGRESS.md`, content: missionProgress(mission) });
376
+ files.push({ relPath: `missions/${mission.id}/README.md`, content: missionReadme(mission) }, { relPath: `missions/${mission.id}/PROGRESS.md`, content: missionProgress(mission) },
377
+ // FR-5e A1 (daemon-side symmetry) — match CLI scaffold so UI-init
378
+ // produces a workspace that passes doctor check #7. The template
379
+ // resolution + env-var-pivot mirrors the CLI surface;
380
+ // getting-started-narrative-parity.test.ts asserts byte-identity.
381
+ {
382
+ relPath: `missions/${mission.id}/MISSION_NOTES.md`,
383
+ content: renderDaemonMissionNotes({
384
+ mission_id: mission.dotId,
385
+ mission_name: mission.title,
386
+ created_date: new Date().toISOString().slice(0, 10),
387
+ }),
388
+ });
236
389
  for (const slice of mission.slices) {
237
390
  files.push({ relPath: `missions/${mission.id}/slices/${slice.id}/README.md`, content: sliceReadme(mission, slice) }, { relPath: `missions/${mission.id}/slices/${slice.id}/PROGRESS.md`, content: sliceProgress(mission, slice) }, { relPath: `missions/${mission.id}/slices/${slice.id}/IMPLEMENTATION-PRD.md`, content: slicePrd(mission, slice) });
238
391
  // V0.3.1 slice 21: getting-started slices ship a timeline.md
@@ -1 +1 @@
1
- {"version":3,"file":"default-workspace-scaffold.js","sourceRoot":"","sources":["../../../src/domain/workspace/default-workspace-scaffold.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"default-workspace-scaffold.js","sourceRoot":"","sources":["../../../src/domain/workspace/default-workspace-scaffold.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,197 @@
1
+ export type CheckStatus = "ok" | "warn" | "fail";
2
+ export interface DoctorCheck {
3
+ check: string;
4
+ status: CheckStatus;
5
+ message: string;
6
+ fixHint?: string;
7
+ evidence?: Record<string, unknown>;
8
+ }
9
+ export type WorkspaceRootSource = "env" | "file" | "default";
10
+ export interface CheckWorkspaceRootInput {
11
+ workspaceRoot: string;
12
+ source: WorkspaceRootSource;
13
+ }
14
+ /**
15
+ * Check #1 — workspace root reachable.
16
+ *
17
+ * Verifies the resolved workspace root exists as a directory. The
18
+ * `source` (env / file / default) is propagated into the fix-hint so
19
+ * the operator gets the right remediation channel.
20
+ */
21
+ export declare function checkWorkspaceRootReachable(opts: CheckWorkspaceRootInput): DoctorCheck;
22
+ export interface CheckMissionsFolderInput {
23
+ workspaceRoot: string;
24
+ /** Resolved `workspace.slicesRoot` per ConfigStore (defaults to
25
+ * `<workspaceRoot>/missions`). Operators who customized
26
+ * `workspace.slices_root` (env or config) point this elsewhere; the
27
+ * check honors the override so a deliberate custom layout doesn't
28
+ * spuriously fail. */
29
+ slicesRoot: string;
30
+ }
31
+ /**
32
+ * Check #2 — missions folder present.
33
+ *
34
+ * Verifies the resolved missions folder (per ConfigStore `workspace.
35
+ * slicesRoot` — defaults to `<workspaceRoot>/missions`) exists as a
36
+ * directory. Fail on absence or wrong-shape; this is the load-bearing
37
+ * folder for Project UI projection.
38
+ */
39
+ export declare function checkMissionsFolder(opts: CheckMissionsFolderInput): DoctorCheck;
40
+ /**
41
+ * Canonical-decoded allowlist entry as the shipped file API sees it
42
+ * (post `decodeAllowlist`): absolute path, realpath-canonicalized
43
+ * when reachable. Relative paths are silently dropped by the canonical
44
+ * decoder before they reach this shape — see check #3 for the
45
+ * usable-vs-raw entry-count semantics.
46
+ */
47
+ export interface AllowlistEntry {
48
+ name: string;
49
+ /** Canonical absolute path (post-decodeAllowlist + realpathSync
50
+ * fallback). Equivalent to the file API's `AllowlistRoot.canonicalPath`. */
51
+ path: string;
52
+ }
53
+ export interface CheckFileAllowlistInput {
54
+ workspaceRoot: string;
55
+ /** Raw `files.allowlist` value resolved via ConfigStore
56
+ * (comma-separated `name:/abs/path` pairs, or empty string). */
57
+ allowlistValue: string;
58
+ allowlistSource: WorkspaceRootSource;
59
+ /** Pre-decoded entries; if omitted the check decodes allowlistValue
60
+ * via the canonical `decodeAllowlist` from
61
+ * domain/files/path-safety.ts so the doctor reports exactly what
62
+ * the shipped file API at /api/files/* accepts. Pre-decoded
63
+ * entries MUST be in canonical form (absolute path); raw
64
+ * named-pair strings from SettingsStore should go through
65
+ * allowlistValue + the in-function decode, not parsedEntries. */
66
+ parsedEntries?: AllowlistEntry[];
67
+ }
68
+ /**
69
+ * Check #3 — file allowlist sane.
70
+ *
71
+ * IMPL-PRD §43 references `<workspace-root>/.openrig/file-allowlist`
72
+ * as a file — the shipped surface (ConfigStore `files.allowlist` key,
73
+ * env OPENRIG_FILES_ALLOWLIST, default `workspace:${workspaceRoot}`)
74
+ * is a CONFIGSTORE STRING KEY holding comma-separated `name:/abs/path`
75
+ * pairs. There is no per-workspace file. Check #3 verifies the
76
+ * resolved value decodes to at least one USABLE entry (canonical,
77
+ * absolute) covering the workspaceRoot — the same usable-root
78
+ * semantics the shipped file API at /api/files/* enforces via
79
+ * `decodeAllowlist` in domain/files/path-safety.ts:60-80 (silently
80
+ * drops non-absolute paths at line 71).
81
+ *
82
+ * Decoding via the canonical decoder (not a local re-implementation)
83
+ * guarantees the doctor's verdict matches the actual file-API
84
+ * behavior — `workspace:.` or `workspace:relative-root` evaluates
85
+ * to zero usable entries here, mirroring the file API's silent skip.
86
+ */
87
+ export declare function checkFileAllowlist(opts: CheckFileAllowlistInput): DoctorCheck;
88
+ export interface CheckDaemonWorkspaceInput {
89
+ /** workspace.root the daemon process resolves (server-side). */
90
+ daemonResolvedRoot: string;
91
+ /** workspace.root the doctor caller expects (CLI-side resolved,
92
+ * passed in the request body or matched against the --workspace
93
+ * flag). */
94
+ expectedRoot: string;
95
+ }
96
+ /**
97
+ * Check #4 — daemon points at this workspace.
98
+ *
99
+ * Reports divergence between the workspace.root the daemon resolved at
100
+ * start-time vs the workspace.root the doctor caller expects. The
101
+ * common cause is the daemon being started in a shell with a different
102
+ * OPENRIG_WORKSPACE_ROOT than the operator's current shell.
103
+ */
104
+ export declare function checkDaemonWorkspace(opts: CheckDaemonWorkspaceInput): DoctorCheck;
105
+ export interface CheckDaemonReloadInput {
106
+ /** Path to the ConfigStore config file on disk. */
107
+ configFilePath: string;
108
+ /** Daemon process start time as a Date. Callers typically capture
109
+ * this once at daemon-startup (e.g.
110
+ * `new Date(Date.now() - process.uptime() * 1000)` at the doctor
111
+ * route handler) and pass it through. Compared to config-file
112
+ * mtime; mtime > startTime → stale daemon. */
113
+ daemonStartTime: Date;
114
+ }
115
+ /**
116
+ * Check #5 — daemon reload needed.
117
+ *
118
+ * Compares config-file mtime to the daemon's start-time. A newer
119
+ * mtime means the operator edited config (via CLI / UI) after the
120
+ * daemon started, and the daemon hasn't picked the change up yet.
121
+ * Missing config file is not a fail — fresh installs without an
122
+ * operator-written config use defaults entirely and never need a
123
+ * reload.
124
+ */
125
+ export declare function checkDaemonReload(opts: CheckDaemonReloadInput): DoctorCheck;
126
+ export interface CheckSliceDocsInput {
127
+ /** Resolved missions folder root. The check walks each
128
+ * `<missionsRoot>/<mission>/slices/<slice>/` and verifies it has
129
+ * README.md OR IMPLEMENTATION-PRD.md OR IMPL-PRD.md. */
130
+ missionsRoot: string;
131
+ }
132
+ /**
133
+ * Check #6 — optional slice docs.
134
+ *
135
+ * Walks each mission's slices subdirectory and reports slices that
136
+ * have NEITHER a README.md, IMPLEMENTATION-PRD.md, nor IMPL-PRD.md.
137
+ * Warn-only (empty slices are sometimes intentional staging per
138
+ * IMPL-PRD §57-59). The walk is bounded to one mission + one slice
139
+ * level; we don't recurse into slice subdirs.
140
+ */
141
+ export declare function checkOptionalSliceDocs(opts: CheckSliceDocsInput): DoctorCheck;
142
+ export interface CheckMissionNotesInput {
143
+ missionsRoot: string;
144
+ }
145
+ /**
146
+ * Check #7 — MISSION_NOTES presence.
147
+ *
148
+ * Verifies each mission directory has a `MISSION_NOTES.md` (per the
149
+ * FR-3 convention that just merged at LOCAL main e154a5ce). Warn-
150
+ * only because legacy missions predate the convention; the
151
+ * operator can run `rig scope mission create` (which now auto-
152
+ * scaffolds the file per FR-3) for new missions.
153
+ */
154
+ export declare function checkMissionNotesPresence(opts: CheckMissionNotesInput): DoctorCheck;
155
+ export interface RunDoctorInput {
156
+ /** Workspace root under check (caller's --workspace override or
157
+ * daemon-resolved default). */
158
+ workspaceRoot: string;
159
+ workspaceRootSource: WorkspaceRootSource;
160
+ /** Resolved missions folder per ConfigStore workspace.slices_root,
161
+ * or `<workspaceRoot>/missions` when caller overrode --workspace. */
162
+ slicesRoot: string;
163
+ /** Raw files.allowlist value from SettingsStore (will be decoded
164
+ * via canonical decodeAllowlist). */
165
+ allowlistValue: string;
166
+ allowlistSource: WorkspaceRootSource;
167
+ /** Daemon-resolved workspace.root (for check #4 comparison against
168
+ * the workspace under check). */
169
+ daemonResolvedWorkspaceRoot: string;
170
+ /** Daemon's ConfigStore configPath on disk (for check #5 staleness
171
+ * comparison). */
172
+ configFilePath: string;
173
+ /** Daemon process start time (for check #5). */
174
+ daemonStartTime: Date;
175
+ }
176
+ export interface DoctorReport {
177
+ /** Workspace under check (echoes input.workspaceRoot for clarity). */
178
+ workspaceRoot: string;
179
+ checks: DoctorCheck[];
180
+ summary: {
181
+ ok: number;
182
+ warn: number;
183
+ fail: number;
184
+ };
185
+ /** ISO timestamp of when the daemon ran the report. */
186
+ daemonResolvedAt: string;
187
+ }
188
+ /**
189
+ * Orchestrator — runs all 7 checks in fixed order and returns a
190
+ * structured DoctorReport with aggregate counts. Pure function;
191
+ * filesystem effects are bounded to the individual check helpers
192
+ * (statSync / readdirSync / existsSync). Used by the daemon route
193
+ * POST /api/workspace/doctor (FR-5c) and by the CLI's --json
194
+ * formatter (FR-5d).
195
+ */
196
+ export declare function runWorkspaceDoctor(input: RunDoctorInput): DoctorReport;
197
+ //# sourceMappingURL=workspace-doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-doctor.d.ts","sourceRoot":"","sources":["../../../src/domain/workspace/workspace-doctor.ts"],"names":[],"mappings":"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"}