ctxr-cli 0.33.0 → 0.34.0

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 (273) hide show
  1. package/README.md +15 -1
  2. package/dist/commands/archive.d.ts +5 -4
  3. package/dist/commands/archive.d.ts.map +1 -1
  4. package/dist/commands/archive.js +7 -7
  5. package/dist/commands/archive.js.map +1 -1
  6. package/dist/commands/catalog-show.d.ts +8 -0
  7. package/dist/commands/catalog-show.d.ts.map +1 -1
  8. package/dist/commands/catalog-show.js +29 -2
  9. package/dist/commands/catalog-show.js.map +1 -1
  10. package/dist/commands/context-gather.d.ts.map +1 -1
  11. package/dist/commands/context-gather.js +3 -2
  12. package/dist/commands/context-gather.js.map +1 -1
  13. package/dist/commands/doctor.d.ts +5 -1
  14. package/dist/commands/doctor.d.ts.map +1 -1
  15. package/dist/commands/doctor.js +4 -0
  16. package/dist/commands/doctor.js.map +1 -1
  17. package/dist/commands/graph-build.d.ts +4 -1
  18. package/dist/commands/graph-build.d.ts.map +1 -1
  19. package/dist/commands/graph-build.js +14 -5
  20. package/dist/commands/graph-build.js.map +1 -1
  21. package/dist/commands/land.d.ts +27 -7
  22. package/dist/commands/land.d.ts.map +1 -1
  23. package/dist/commands/land.js +307 -32
  24. package/dist/commands/land.js.map +1 -1
  25. package/dist/commands/publish-gather.d.ts.map +1 -1
  26. package/dist/commands/publish-gather.js +2 -3
  27. package/dist/commands/publish-gather.js.map +1 -1
  28. package/dist/commands/review-list.d.ts +19 -5
  29. package/dist/commands/review-list.d.ts.map +1 -1
  30. package/dist/commands/review-list.js +55 -6
  31. package/dist/commands/review-list.js.map +1 -1
  32. package/dist/commands/rollup-gather.d.ts.map +1 -1
  33. package/dist/commands/rollup-gather.js +2 -3
  34. package/dist/commands/rollup-gather.js.map +1 -1
  35. package/dist/commands/second-opinion.d.ts +33 -0
  36. package/dist/commands/second-opinion.d.ts.map +1 -0
  37. package/dist/commands/second-opinion.js +56 -0
  38. package/dist/commands/second-opinion.js.map +1 -0
  39. package/dist/commands/serve.d.ts.map +1 -1
  40. package/dist/commands/serve.js +4 -0
  41. package/dist/commands/serve.js.map +1 -1
  42. package/dist/commands/session-discard.d.ts +18 -0
  43. package/dist/commands/session-discard.d.ts.map +1 -0
  44. package/dist/commands/session-discard.js +31 -0
  45. package/dist/commands/session-discard.js.map +1 -0
  46. package/dist/commands/session-list.d.ts +17 -6
  47. package/dist/commands/session-list.d.ts.map +1 -1
  48. package/dist/commands/session-list.js +31 -11
  49. package/dist/commands/session-list.js.map +1 -1
  50. package/dist/commands/session-rebase.d.ts +18 -0
  51. package/dist/commands/session-rebase.d.ts.map +1 -0
  52. package/dist/commands/session-rebase.js +43 -0
  53. package/dist/commands/session-rebase.js.map +1 -0
  54. package/dist/commands/session-start.d.ts +8 -0
  55. package/dist/commands/session-start.d.ts.map +1 -1
  56. package/dist/commands/session-start.js +45 -5
  57. package/dist/commands/session-start.js.map +1 -1
  58. package/dist/commands/session-status.d.ts +17 -0
  59. package/dist/commands/session-status.d.ts.map +1 -0
  60. package/dist/commands/session-status.js +38 -0
  61. package/dist/commands/session-status.js.map +1 -0
  62. package/dist/commands/session-submit.d.ts +23 -0
  63. package/dist/commands/session-submit.d.ts.map +1 -0
  64. package/dist/commands/session-submit.js +42 -0
  65. package/dist/commands/session-submit.js.map +1 -0
  66. package/dist/commands/shared-stores-status.d.ts +24 -0
  67. package/dist/commands/shared-stores-status.d.ts.map +1 -0
  68. package/dist/commands/shared-stores-status.js +51 -0
  69. package/dist/commands/shared-stores-status.js.map +1 -0
  70. package/dist/commands/shared-stores-sync.d.ts +27 -0
  71. package/dist/commands/shared-stores-sync.d.ts.map +1 -0
  72. package/dist/commands/shared-stores-sync.js +115 -0
  73. package/dist/commands/shared-stores-sync.js.map +1 -0
  74. package/dist/commands/verify.d.ts.map +1 -1
  75. package/dist/commands/verify.js +2 -4
  76. package/dist/commands/verify.js.map +1 -1
  77. package/dist/config/schema.d.ts +16 -0
  78. package/dist/config/schema.d.ts.map +1 -1
  79. package/dist/config/schema.js +32 -0
  80. package/dist/config/schema.js.map +1 -1
  81. package/dist/core/agents-doc.d.ts +10 -0
  82. package/dist/core/agents-doc.d.ts.map +1 -1
  83. package/dist/core/agents-doc.js +26 -1
  84. package/dist/core/agents-doc.js.map +1 -1
  85. package/dist/core/approval/decision.d.ts +39 -1
  86. package/dist/core/approval/decision.d.ts.map +1 -1
  87. package/dist/core/approval/decision.js +53 -6
  88. package/dist/core/approval/decision.js.map +1 -1
  89. package/dist/core/approval/session-group.d.ts +156 -0
  90. package/dist/core/approval/session-group.d.ts.map +1 -0
  91. package/dist/core/approval/session-group.js +359 -0
  92. package/dist/core/approval/session-group.js.map +1 -0
  93. package/dist/core/approval/session-marker.d.ts +79 -0
  94. package/dist/core/approval/session-marker.d.ts.map +1 -0
  95. package/dist/core/approval/session-marker.js +146 -0
  96. package/dist/core/approval/session-marker.js.map +1 -0
  97. package/dist/core/approval/store-forges.d.ts +15 -0
  98. package/dist/core/approval/store-forges.d.ts.map +1 -0
  99. package/dist/core/approval/store-forges.js +33 -0
  100. package/dist/core/approval/store-forges.js.map +1 -0
  101. package/dist/core/browse/approve.d.ts +8 -0
  102. package/dist/core/browse/approve.d.ts.map +1 -1
  103. package/dist/core/browse/approve.js +366 -48
  104. package/dist/core/browse/approve.js.map +1 -1
  105. package/dist/core/browse/link-resolver.d.ts +9 -4
  106. package/dist/core/browse/link-resolver.d.ts.map +1 -1
  107. package/dist/core/browse/link-resolver.js +12 -7
  108. package/dist/core/browse/link-resolver.js.map +1 -1
  109. package/dist/core/browse/review.d.ts +5 -0
  110. package/dist/core/browse/review.d.ts.map +1 -1
  111. package/dist/core/browse/review.js +8 -0
  112. package/dist/core/browse/review.js.map +1 -1
  113. package/dist/core/checks/integrity-checks.d.ts.map +1 -1
  114. package/dist/core/checks/integrity-checks.js +7 -1
  115. package/dist/core/checks/integrity-checks.js.map +1 -1
  116. package/dist/core/checks/manifest.d.ts.map +1 -1
  117. package/dist/core/checks/manifest.js +2 -0
  118. package/dist/core/checks/manifest.js.map +1 -1
  119. package/dist/core/checks/shared-stores-checks.d.ts +17 -0
  120. package/dist/core/checks/shared-stores-checks.d.ts.map +1 -0
  121. package/dist/core/checks/shared-stores-checks.js +84 -0
  122. package/dist/core/checks/shared-stores-checks.js.map +1 -0
  123. package/dist/core/errors.d.ts +17 -0
  124. package/dist/core/errors.d.ts.map +1 -1
  125. package/dist/core/errors.js +21 -0
  126. package/dist/core/errors.js.map +1 -1
  127. package/dist/core/forge/github.d.ts +14 -0
  128. package/dist/core/forge/github.d.ts.map +1 -1
  129. package/dist/core/forge/github.js +17 -0
  130. package/dist/core/forge/github.js.map +1 -1
  131. package/dist/core/git/fast-forward.d.ts +23 -0
  132. package/dist/core/git/fast-forward.d.ts.map +1 -0
  133. package/dist/core/git/fast-forward.js +38 -0
  134. package/dist/core/git/fast-forward.js.map +1 -0
  135. package/dist/core/git/repo.d.ts +11 -0
  136. package/dist/core/git/repo.d.ts.map +1 -1
  137. package/dist/core/git/repo.js +25 -0
  138. package/dist/core/git/repo.js.map +1 -1
  139. package/dist/core/graph/model.d.ts +27 -0
  140. package/dist/core/graph/model.d.ts.map +1 -1
  141. package/dist/core/graph/model.js +68 -2
  142. package/dist/core/graph/model.js.map +1 -1
  143. package/dist/core/graph/persist.d.ts.map +1 -1
  144. package/dist/core/graph/persist.js +3 -2
  145. package/dist/core/graph/persist.js.map +1 -1
  146. package/dist/core/mcp/sessions.d.ts +11 -14
  147. package/dist/core/mcp/sessions.d.ts.map +1 -1
  148. package/dist/core/mcp/sessions.js +23 -43
  149. package/dist/core/mcp/sessions.js.map +1 -1
  150. package/dist/core/notes/list.d.ts.map +1 -1
  151. package/dist/core/notes/list.js +5 -0
  152. package/dist/core/notes/list.js.map +1 -1
  153. package/dist/core/reconcile.d.ts.map +1 -1
  154. package/dist/core/reconcile.js +2 -1
  155. package/dist/core/reconcile.js.map +1 -1
  156. package/dist/core/retrieval/pass.d.ts.map +1 -1
  157. package/dist/core/retrieval/pass.js +5 -4
  158. package/dist/core/retrieval/pass.js.map +1 -1
  159. package/dist/core/rollup.d.ts.map +1 -1
  160. package/dist/core/rollup.js +2 -3
  161. package/dist/core/rollup.js.map +1 -1
  162. package/dist/core/root.d.ts.map +1 -1
  163. package/dist/core/root.js +33 -2
  164. package/dist/core/root.js.map +1 -1
  165. package/dist/core/second-opinion/environment.d.ts +21 -0
  166. package/dist/core/second-opinion/environment.d.ts.map +1 -0
  167. package/dist/core/second-opinion/environment.js +70 -0
  168. package/dist/core/second-opinion/environment.js.map +1 -0
  169. package/dist/core/second-opinion/judge.d.ts +29 -0
  170. package/dist/core/second-opinion/judge.d.ts.map +1 -0
  171. package/dist/core/second-opinion/judge.js +55 -0
  172. package/dist/core/second-opinion/judge.js.map +1 -0
  173. package/dist/core/second-opinion/launch.d.ts +16 -0
  174. package/dist/core/second-opinion/launch.d.ts.map +1 -0
  175. package/dist/core/second-opinion/launch.js +75 -0
  176. package/dist/core/second-opinion/launch.js.map +1 -0
  177. package/dist/core/second-opinion/lineup.d.ts +82 -0
  178. package/dist/core/second-opinion/lineup.d.ts.map +1 -0
  179. package/dist/core/second-opinion/lineup.js +113 -0
  180. package/dist/core/second-opinion/lineup.js.map +1 -0
  181. package/dist/core/second-opinion/modes.d.ts +98 -0
  182. package/dist/core/second-opinion/modes.d.ts.map +1 -0
  183. package/dist/core/second-opinion/modes.js +224 -0
  184. package/dist/core/second-opinion/modes.js.map +1 -0
  185. package/dist/core/second-opinion/prompts.d.ts +18 -0
  186. package/dist/core/second-opinion/prompts.d.ts.map +1 -0
  187. package/dist/core/second-opinion/prompts.js +65 -0
  188. package/dist/core/second-opinion/prompts.js.map +1 -0
  189. package/dist/core/session/commit.d.ts +29 -0
  190. package/dist/core/session/commit.d.ts.map +1 -0
  191. package/dist/core/session/commit.js +22 -0
  192. package/dist/core/session/commit.js.map +1 -0
  193. package/dist/core/session/discard.d.ts +24 -0
  194. package/dist/core/session/discard.d.ts.map +1 -0
  195. package/dist/core/session/discard.js +68 -0
  196. package/dist/core/session/discard.js.map +1 -0
  197. package/dist/core/session/list.d.ts +48 -0
  198. package/dist/core/session/list.d.ts.map +1 -0
  199. package/dist/core/session/list.js +55 -0
  200. package/dist/core/session/list.js.map +1 -0
  201. package/dist/core/session/rebase.d.ts +34 -0
  202. package/dist/core/session/rebase.d.ts.map +1 -0
  203. package/dist/core/session/rebase.js +87 -0
  204. package/dist/core/session/rebase.js.map +1 -0
  205. package/dist/core/session/remote.d.ts +80 -0
  206. package/dist/core/session/remote.d.ts.map +1 -0
  207. package/dist/core/session/remote.js +102 -0
  208. package/dist/core/session/remote.js.map +1 -0
  209. package/dist/core/session/resolve.d.ts +41 -0
  210. package/dist/core/session/resolve.d.ts.map +1 -0
  211. package/dist/core/session/resolve.js +109 -0
  212. package/dist/core/session/resolve.js.map +1 -0
  213. package/dist/core/session/status.d.ts +47 -0
  214. package/dist/core/session/status.d.ts.map +1 -0
  215. package/dist/core/session/status.js +55 -0
  216. package/dist/core/session/status.js.map +1 -0
  217. package/dist/core/session/submit.d.ts +67 -0
  218. package/dist/core/session/submit.d.ts.map +1 -0
  219. package/dist/core/session/submit.js +254 -0
  220. package/dist/core/session/submit.js.map +1 -0
  221. package/dist/core/shared-stores-location.d.ts +17 -0
  222. package/dist/core/shared-stores-location.d.ts.map +1 -0
  223. package/dist/core/shared-stores-location.js +22 -0
  224. package/dist/core/shared-stores-location.js.map +1 -0
  225. package/dist/core/shared-stores.d.ts +69 -0
  226. package/dist/core/shared-stores.d.ts.map +1 -0
  227. package/dist/core/shared-stores.js +100 -0
  228. package/dist/core/shared-stores.js.map +1 -0
  229. package/dist/core/skills.d.ts.map +1 -1
  230. package/dist/core/skills.js +14 -10
  231. package/dist/core/skills.js.map +1 -1
  232. package/dist/run.d.ts.map +1 -1
  233. package/dist/run.js +122 -6
  234. package/dist/run.js.map +1 -1
  235. package/dist/version.d.ts +1 -1
  236. package/dist/version.js +1 -1
  237. package/package.json +1 -1
  238. package/templates/agents/shared-stores.md +11 -0
  239. package/templates/approve/copies-missing.md +1 -0
  240. package/templates/approve/elsewhere-heading.md +1 -0
  241. package/templates/approve/elsewhere-intro.md +1 -0
  242. package/templates/approve/homed-elsewhere.md +1 -0
  243. package/templates/approve/not-decider.md +1 -0
  244. package/templates/approve/part-heading.md +1 -0
  245. package/templates/approve/parts-changed.md +1 -0
  246. package/templates/approve/session-decision-note.md +1 -0
  247. package/templates/approve/session-intro.md +1 -0
  248. package/templates/approve/session-no-decision.md +1 -0
  249. package/templates/approve/store-unreachable.md +1 -0
  250. package/templates/land/resolver.md +2 -0
  251. package/templates/second-opinion/poll-answer.md +7 -0
  252. package/templates/second-opinion/taste-panel.md +14 -0
  253. package/templates/session/pages/bare-route.md +2 -0
  254. package/templates/session/pages/block.md +8 -0
  255. package/templates/session/pages/condition-preview.md +1 -0
  256. package/templates/session/pages/condition.md +1 -0
  257. package/templates/session/pages/moved.md +1 -0
  258. package/templates/session/pages/stops-working.md +1 -0
  259. package/templates/session/pages/table-head-preview.md +2 -0
  260. package/templates/session/pages/table-head.md +2 -0
  261. package/templates/skills/ctxr-connection-finding.md +4 -1
  262. package/templates/skills/ctxr-land.md +26 -7
  263. package/templates/skills/ctxr-placement.md +10 -0
  264. package/templates/skills/ctxr-rollup.md +3 -0
  265. package/templates/skills/ctxr-second-opinion.md +52 -36
  266. package/templates/skills/ctxr-session-lifecycle.md +60 -33
  267. package/templates/skills/ctxr-submit.md +65 -56
  268. package/templates/skills/ctxr-second-opinion/run.mjs +0 -542
  269. /package/templates/{skills/ctxr-second-opinion → second-opinion}/critic-contract.md +0 -0
  270. /package/templates/{skills/ctxr-second-opinion → second-opinion}/lenses.md +0 -0
  271. /package/templates/{skills/ctxr-second-opinion → second-opinion}/personas/architect.md +0 -0
  272. /package/templates/{skills/ctxr-second-opinion → second-opinion}/personas/pragmatist.md +0 -0
  273. /package/templates/{skills/ctxr-second-opinion → second-opinion}/personas/skeptic.md +0 -0
package/README.md CHANGED
@@ -105,7 +105,7 @@ Two distinctions make the rest of this readable:
105
105
 
106
106
  Every harness loads this file on every turn, so it is kept short. contexture's own share is held under a ceiling by a test, and procedure a skill already carries lives in that skill.
107
107
 
108
- **The skills**, installed as full copies at `.agents/skills/ctxr-<name>/SKILL.md`. That path is the cross-harness canonical location; a harness that reads its own branded directory instead gets that directory bridged to it (`.claude/skills/` is a symlink), so skill auto-discovery works with no wrapper and no second copy. A harness without auto-discovery reaches the same file by path from `AGENTS.md`. They're contexture-owned — refreshed by `ctxr update`, never hand-edited — and they're written against *your* store's configured taxonomy, so no shipped profile's layer names leak into them. Your own skills live alongside, untouched by sync. An owned skill may carry files beside its `SKILL.md` — `ctxr-second-opinion` ships the script that runs its reviewers — and update keeps that whole directory matching the package.
108
+ **The skills**, installed as full copies at `.agents/skills/ctxr-<name>/SKILL.md`. That path is the cross-harness canonical location; a harness that reads its own branded directory instead gets that directory bridged to it (`.claude/skills/` is a symlink), so skill auto-discovery works with no wrapper and no second copy. A harness without auto-discovery reaches the same file by path from `AGENTS.md`. They're contexture-owned — refreshed by `ctxr update`, never hand-edited — and they're written against *your* store's configured taxonomy, so no shipped profile's layer names leak into them. Your own skills live alongside, untouched by sync. An owned skill may carry files beside its `SKILL.md` — `ctxr-capture-circleback` ships the script that retrieves its meetings — and update keeps that whole directory matching the package. `ctxr-second-opinion` drives `ctxr second-opinion preflight | critique | poll`, the one command that invokes a model CLI (`claude`, `codex`, `agy`, each in a scratch directory with an allowlisted environment); it is never on the write path and no other command depends on it.
109
109
 
110
110
  | Skill | What it decides |
111
111
  | --- | --- |
@@ -350,6 +350,19 @@ A published page's navigation label follows its own declared `<title>`, falling
350
350
 
351
351
  The **Preview** area, directly below the published pages, holds the pages your open session worktrees are carrying. A page is previewable from the moment its files exist on disk — before any commit, before any push, before a PR is opened or merged — because `serve` reads the worktree rather than asking git or a forge anything. Pages group by the worktree holding them at `/preview/<worktree>/<page>/index.html`, and a preview is byte-identical to what `/publish/<page>/index.html` will serve once the page lands, so what you read is what ships. Both routes address files rather than directories, so a page's address always names its index file — which is the address `ctxr publish new` and `ctxr publish check` report, so you never have to work out which of the two applies. For a whole change set, `ctxr publish urls --staged` (or `--since <ref>`) reports every page added, modified, moved or removed with both addresses, which is what `ctxr-submit` puts in a pull request's **Pages** section; set `serve.previews: none` in `contexture.yaml` if previews never resolve for your reviewers. A session worktree carrying no page appears nowhere, and nothing else inside one — notes, catalog, graph, config — becomes reachable.
352
352
 
353
+ ## Stores for more than one person
354
+
355
+ A store has one audience: everyone who can clone it reads all of it. Privacy between people is a store boundary, never a field on a note, because a git clone holds every file it has ever had. So each person keeps their own store, and the stores they read with others — a family's, a company's, a project group's — are mounted into it:
356
+
357
+ ```yaml
358
+ shared_stores:
359
+ - { name: family, url: "git@github.com:example/family-store.git" }
360
+ ```
361
+
362
+ `ctxr shared-stores sync` clones each one under `shared/<name>/` and fast-forwards it when that is safe, leaving a mount with local work alone. The clones are ignored through the repository's local exclude file, and `doctor` refuses a commit that stages anything under `shared/`. A mounted store stays a store: its own `contexture.yaml`, exclusions, review and approval govern its notes, and `ctxr session start` run inside `shared/<name>/` opens a session there, whose pull request lands in that store. The graph and `ctxr context gather` read every mount alongside the store's own notes, and `ctxr catalog show` adds the same section from each mount.
363
+
364
+ Links resolve within the store that holds the note. A filename link (`[[note]]`) finds notes in that store only, and a path link (`[[dir/note]]`) resolves against its root, so a note reaches into a mount with `[[shared/<name>/<path>]]` and a mounted note can never link back. `ctxr lint` reports a mounted note whose link names one of this store's notes. Who can clone which store is the forge's repository access and the credentials each person's agent holds; give each person's agent only their own stores.
365
+
353
366
  ## Approving changes from a page
354
367
 
355
368
  People who own a store's content often have no forge account. With change approval declared, `ctxr serve` gives them a page instead: `/approve/` lists every session with an open pull request, and each one's page shows the author's account of the change (its title, description and commit messages, labelled as the author's), the knowledge changes computed from the commits, the preview of every changed page, and every changed line. Two buttons — **Approve** and **Request changes** — record the decision on the pull request, as a review by the store's own forge identity naming the person who decided and the commit they saw. Nobody needs a GitHub account to leave an entry in the audit trail.
@@ -490,6 +503,7 @@ To pin a value against a future default change, declare it. Nothing rewrites wha
490
503
  | `session start \| capture \| list` | Session worktrees, and applying an approved capture proposal |
491
504
  | `land <pr> [--confirm] \| --pending` | Land a session pull request that carries consent: catch up, merge, confirm, sync, reclaim |
492
505
  | `review list` | Each open session pull request's decision from the approval page |
506
+ | `shared-stores sync \| status` | Clone and fast-forward the stores this store mounts under `shared/`, or report their state |
493
507
  | `adapters generate` | Regenerate harness outputs (`ctxr update` does this too) |
494
508
  | `serve` | Read the store in a browser |
495
509
  | `update` | Bring contexture-owned files up to the installed version |
@@ -22,10 +22,11 @@ export interface ArchiveData {
22
22
  * shipped profile may seed that value at init
23
23
  * (archive-destination-from-taxonomy), but nothing here reads the taxonomy.
24
24
  *
25
- * Wikilinks resolve by filename stem (context-retrieval spec), and archive
26
- * never changes a note's filename — only its directory — so no other
27
- * note's link actually breaks. `linkingNotes` is reported purely so the
28
- * operator is aware those notes now point at the archived location.
25
+ * A filename link resolves by stem (context-retrieval spec), and archive
26
+ * never changes a note's filename — only its directory — so no filename
27
+ * link breaks. A path link (mount-shared-stores) names the directory and
28
+ * does break. `linkingNotes` reports both kinds, so the operator knows
29
+ * which notes now point at the archived location and which need relinking.
29
30
  */
30
31
  export declare function execute(env: RunEnv, store: Store, flags: ArchiveFlags): Promise<CommandOutcome<ArchiveData>>;
31
32
  //# sourceMappingURL=archive.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/commands/archive.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAM7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAOD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CA6ClH"}
1
+ {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/commands/archive.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAM7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAOD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CA4ClH"}
@@ -4,7 +4,7 @@ import path from 'node:path';
4
4
  import { AlreadyArchivedError, ArchiveDestinationExistsError, NoteNotFoundError, NoteNotTrackedError } from '../core/errors.js';
5
5
  import { ExitCode } from '../core/exit-codes.js';
6
6
  import { isTracked, movePath } from '../core/git/repo.js';
7
- import { extractLinkTargets } from '../core/graph/model.js';
7
+ import { extractLinkTargets, linkNames } from '../core/graph/model.js';
8
8
  import { listNotes } from '../core/notes/list.js';
9
9
  export const requires = { store: 'required' };
10
10
  function toStoreRelativePath(env, store, givenPath) {
@@ -23,10 +23,11 @@ function toStoreRelativePath(env, store, givenPath) {
23
23
  * shipped profile may seed that value at init
24
24
  * (archive-destination-from-taxonomy), but nothing here reads the taxonomy.
25
25
  *
26
- * Wikilinks resolve by filename stem (context-retrieval spec), and archive
27
- * never changes a note's filename — only its directory — so no other
28
- * note's link actually breaks. `linkingNotes` is reported purely so the
29
- * operator is aware those notes now point at the archived location.
26
+ * A filename link resolves by stem (context-retrieval spec), and archive
27
+ * never changes a note's filename — only its directory — so no filename
28
+ * link breaks. A path link (mount-shared-stores) names the directory and
29
+ * does break. `linkingNotes` reports both kinds, so the operator knows
30
+ * which notes now point at the archived location and which need relinking.
30
31
  */
31
32
  export async function execute(env, store, flags) {
32
33
  const relativePath = toStoreRelativePath(env, store, flags.path).replace(/\/+$/, '');
@@ -50,10 +51,9 @@ export async function execute(env, store, flags) {
50
51
  const notes = await listNotes(store.root, store.config);
51
52
  const moving = isFolder ? notes.filter((note) => note.path.startsWith(`${relativePath}/`)) : notes.filter((note) => note.path === relativePath);
52
53
  const movingPaths = new Set(moving.map((note) => note.path));
53
- const stems = new Set(isFolder ? moving.map((note) => path.basename(note.path, '.md')) : [path.basename(relativePath, '.md')]);
54
54
  const linkingNotes = notes
55
55
  .filter((note) => !movingPaths.has(note.path))
56
- .filter((note) => extractLinkTargets(note.body).some((target) => stems.has(target)))
56
+ .filter((note) => extractLinkTargets(note.body).some((target) => [...movingPaths].some((moved) => linkNames(note.path, target, moved))))
57
57
  .map((note) => note.path)
58
58
  .sort();
59
59
  if (!(await isTracked(env.git, store.root, relativePath))) {
@@ -1 +1 @@
1
- {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/commands/archive.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/commands/archive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,oBAAoB,EAAE,6BAA6B,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAChI,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGlD,MAAM,CAAC,MAAM,QAAQ,GAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAY/D,SAAS,mBAAmB,CAAC,GAAW,EAAE,KAAY,EAAE,SAAiB;IACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC3F,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvE,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,KAAY,EAAE,KAAmB;IAC1E,MAAM,YAAY,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACrF,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACzD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,MAAM,IAAI,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAEzE,yEAAyE;IACzE,yEAAyE;IACzE,6EAA6E;IAC7E,2DAA2D;IAC3D,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAClF,IAAI,YAAY,KAAK,WAAW,IAAI,YAAY,CAAC,UAAU,CAAC,GAAG,WAAW,GAAG,CAAC,EAAE,CAAC;QAC/E,MAAM,IAAI,oBAAoB,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IAC1F,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;IACtD,MAAM,eAAe,GAAG,GAAG,WAAW,IAAI,YAAY,EAAE,CAAC;IACzD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IAE/D,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,6BAA6B,CAAC,eAAe,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;IAChJ,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,MAAM,YAAY,GAAG,KAAK;SACvB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC7C,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;SACvI,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;SACxB,IAAI,EAAE,CAAC;IAEV,IAAI,CAAC,CAAC,MAAM,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,mBAAmB,CAAC,YAAY,CAAC,CAAC;IAC9C,CAAC;IACD,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,MAAM,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;IAEnE,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,EAAE;QACrB,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE;QACpE,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,YAAY,QAAQ,CAAC,CAAC,CAAC,WAAW,YAAY,MAAM,MAAM,CAAC,MAAM,WAAW,CAAC,CAAC,CAAC,IAAI,YAAY,GAAG,QAAQ,eAAe,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,MAAM,sBAAsB,CAAC,CAAC,CAAC,EAAE,GAAG;QAC3N,SAAS,EAAE,KAAK,CAAC,IAAI;QACrB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc;KAC3C,CAAC;AACJ,CAAC"}
@@ -4,9 +4,17 @@ export declare const requires: CommandRequires;
4
4
  export interface CatalogShowFlags {
5
5
  section: string;
6
6
  }
7
+ export interface MountedCatalogSection {
8
+ name: string;
9
+ location: string;
10
+ /** The mounted store's entries for the section, each path prefixed by the mount's location. */
11
+ entries: string[];
12
+ }
7
13
  export interface CatalogShowData {
8
14
  section: string;
9
15
  content: string;
16
+ /** mount-shared-stores: the same section from each mounted store that has entries in it. Absent without mounts. */
17
+ mounts?: MountedCatalogSection[];
10
18
  }
11
19
  export declare function execute(store: Store, flags: CatalogShowFlags): Promise<CommandOutcome<CatalogShowData>>;
12
20
  //# sourceMappingURL=catalog-show.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"catalog-show.d.ts","sourceRoot":"","sources":["../../src/commands/catalog-show.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAI1E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAa7G"}
1
+ {"version":3,"file":"catalog-show.d.ts","sourceRoot":"","sources":["../../src/commands/catalog-show.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAK1E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,+FAA+F;IAC/F,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,mHAAmH;IACnH,MAAM,CAAC,EAAE,qBAAqB,EAAE,CAAC;CAClC;AAyBD,wBAAsB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAe7G"}
@@ -1,17 +1,44 @@
1
1
  import { readCatalogSection } from '../core/catalog/build.js';
2
2
  import { CatalogSectionNotFoundError } from '../core/errors.js';
3
3
  import { ExitCode } from '../core/exit-codes.js';
4
+ import { resolveMounts } from '../core/shared-stores.js';
4
5
  export const requires = { store: 'required' };
6
+ /** A catalog entry's path, inside its `(`…`)` code span — the one part of an entry that names where the note lives. */
7
+ const ENTRY_PATH_RE = /^(- \[\[.*?\]\] \(`)([^`]+)(`\))/;
8
+ /**
9
+ * context-catalog (mount-shared-stores): the same section read from a mounted
10
+ * store's own tracked catalog, entries only, with each path carrying the
11
+ * mount's location. Nothing is built, written or copied into this store.
12
+ */
13
+ async function mountedSection(store, sectionId) {
14
+ const sections = [];
15
+ for (const mount of await resolveMounts(store.root, store.config)) {
16
+ if (mount.state !== 'present')
17
+ continue;
18
+ const content = await readCatalogSection({ root: mount.root, config: mount.config }, sectionId);
19
+ if (content === null)
20
+ continue;
21
+ const entries = content
22
+ .split('\n')
23
+ .filter((line) => ENTRY_PATH_RE.test(line))
24
+ .map((line) => line.replace(ENTRY_PATH_RE, (_all, open, notePath, close) => `${open}${mount.location}/${notePath}${close}`));
25
+ if (entries.length > 0)
26
+ sections.push({ name: mount.name, location: mount.location, entries });
27
+ }
28
+ return sections;
29
+ }
5
30
  export async function execute(store, flags) {
6
31
  const content = await readCatalogSection(store, flags.section);
7
32
  if (content === null) {
8
33
  throw new CatalogSectionNotFoundError(flags.section);
9
34
  }
35
+ const mounts = (store.config.shared_stores ?? []).length > 0 ? await mountedSection(store, flags.section) : undefined;
36
+ const mountedText = (mounts ?? []).map((m) => [`## ${m.location}/ (mounted store "${m.name}")`, '', ...m.entries].join('\n'));
10
37
  return {
11
38
  exitCode: ExitCode.Ok,
12
- data: { section: flags.section, content },
39
+ data: { section: flags.section, content, ...(mounts !== undefined ? { mounts } : {}) },
13
40
  findings: [],
14
- humanSummary: content,
41
+ humanSummary: mountedText.length === 0 ? content : [content.replace(/\n+$/, ''), ...mountedText].join('\n\n'),
15
42
  storeRoot: store.root,
16
43
  schemaVersion: store.config.schema_version,
17
44
  };
@@ -1 +1 @@
1
- {"version":3,"file":"catalog-show.js","sourceRoot":"","sources":["../../src/commands/catalog-show.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGjD,MAAM,CAAC,MAAM,QAAQ,GAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAW/D,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAY,EAAE,KAAuB;IACjE,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/D,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,2BAA2B,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,EAAE;QACrB,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE;QACzC,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,OAAO;QACrB,SAAS,EAAE,KAAK,CAAC,IAAI;QACrB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc;KAC3C,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"catalog-show.js","sourceRoot":"","sources":["../../src/commands/catalog-show.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"context-gather.d.ts","sourceRoot":"","sources":["../../src/commands/context-gather.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAI1E,OAAO,EAA8B,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC3F,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,MAAM,CAAC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,GAAE,kBAAuB,GAAG,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAyBlH"}
1
+ {"version":3,"file":"context-gather.d.ts","sourceRoot":"","sources":["../../src/commands/context-gather.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAI1E,OAAO,EAA8B,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC3F,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,MAAM,CAAC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,GAAE,kBAAuB,GAAG,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CA0BlH"}
@@ -1,6 +1,6 @@
1
1
  import { ExitCode } from '../core/exit-codes.js';
2
2
  import { readAdmittedGraph } from '../core/graph/persist.js';
3
- import { listNotes } from '../core/notes/list.js';
3
+ import { listReadView } from '../core/shared-stores.js';
4
4
  import { gather } from '../core/retrieval/pass.js';
5
5
  export const requires = { store: 'required' };
6
6
  /**
@@ -10,7 +10,8 @@ export const requires = { store: 'required' };
10
10
  * gather`, it finds and orders candidates and never reads or synthesizes them.
11
11
  */
12
12
  export async function execute(store, flags = {}) {
13
- const notes = await listNotes(store.root, store.config);
13
+ // mount-shared-stores: the pass covers the read view, the same notes the persisted graph was built from.
14
+ const { notes } = await listReadView(store.root, store.config);
14
15
  const graph = await readAdmittedGraph(store);
15
16
  const options = {
16
17
  seeds: flags.seed,
@@ -1 +1 @@
1
- {"version":3,"file":"context-gather.js","sourceRoot":"","sources":["../../src/commands/context-gather.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,MAAM,EAA0C,MAAM,2BAA2B,CAAC;AAG3F,MAAM,CAAC,MAAM,QAAQ,GAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAa/D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAY,EAAE,KAAK,GAAuB,EAAE;IACxE,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAE7C,MAAM,OAAO,GAAkB;QAC7B,KAAK,EAAE,KAAK,CAAC,IAAI;QACjB,QAAQ,EAAE,KAAK,CAAC,OAAO;QACvB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,QAAQ,EAAE,KAAK,CAAC,MAAM;QACtB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,OAAO,0BAA0B,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACxH,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,EAAE;QACrB,IAAI;QACJ,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,mBAAmB,IAAI,CAAC,IAAI,UAAU,SAAS,GAAG;QACvF,SAAS,EAAE,KAAK,CAAC,IAAI;QACrB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc;KAC3C,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"context-gather.js","sourceRoot":"","sources":["../../src/commands/context-gather.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,MAAM,EAA0C,MAAM,2BAA2B,CAAC;AAG3F,MAAM,CAAC,MAAM,QAAQ,GAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAa/D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAY,EAAE,KAAK,GAAuB,EAAE;IACxE,yGAAyG;IACzG,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAE7C,MAAM,OAAO,GAAkB;QAC7B,KAAK,EAAE,KAAK,CAAC,IAAI;QACjB,QAAQ,EAAE,KAAK,CAAC,OAAO;QACvB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,QAAQ,EAAE,KAAK,CAAC,MAAM;QACtB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,OAAO,0BAA0B,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACxH,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,EAAE;QACrB,IAAI;QACJ,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,mBAAmB,IAAI,CAAC,IAAI,UAAU,SAAS,GAAG;QACvF,SAAS,EAAE,KAAK,CAAC,IAAI;QACrB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc;KAC3C,CAAC;AACJ,CAAC"}
@@ -23,5 +23,9 @@ export interface DoctorData {
23
23
  skip: number;
24
24
  };
25
25
  }
26
- export declare function execute(env: RunEnv, store: Store, flags?: DoctorFlags): Promise<CommandOutcome<DoctorData>>;
26
+ /**
27
+ * Only `git` is read from the environment, so the store-scope pass can also run
28
+ * as `ctxr session submit`'s gate (bring-the-session-lifecycle-into-the-cli D1).
29
+ */
30
+ export declare function execute(env: Pick<RunEnv, 'git'>, store: Store, flags?: DoctorFlags): Promise<CommandOutcome<DoctorData>>;
27
31
  //# sourceMappingURL=doctor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1E,OAAO,KAAK,EAAgB,UAAU,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAKnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,UAAU,CAAC;IAClB,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACvD;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAE,WAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAiDrH"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1E,OAAO,KAAK,EAAgB,UAAU,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAKnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,UAAU,CAAC;IAClB,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACvD;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAE,WAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAiDlI"}
@@ -5,6 +5,10 @@ import { getStagedFiles } from '../core/git/staged.js';
5
5
  import { readGraph } from '../core/graph/persist.js';
6
6
  import { listNotes } from '../core/notes/list.js';
7
7
  export const requires = { store: 'required' };
8
+ /**
9
+ * Only `git` is read from the environment, so the store-scope pass can also run
10
+ * as `ctxr session submit`'s gate (bring-the-session-lifecycle-into-the-cli D1).
11
+ */
8
12
  export async function execute(env, store, flags = {}) {
9
13
  const scope = flags.staged ? 'staged' : 'store';
10
14
  const staged = scope === 'staged' ? await getStagedFiles(env.git, store.root) : undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import type { CommandOutcome, CommandRequires } from '../core/command.js';
2
- import { type GraphBuildResult } from '../core/graph/model.js';
2
+ import type { GraphBuildResult } from '../core/graph/model.js';
3
3
  import { type GraphDocumentSummary } from '../core/graph/document.js';
4
4
  import { type PerNoteRecord } from '../core/records.js';
5
+ import { type UnavailableMount } from '../core/shared-stores.js';
5
6
  import type { Store } from '../core/store.js';
6
7
  export declare const requires: CommandRequires;
7
8
  export interface GraphBuildFlags {
@@ -16,6 +17,8 @@ export interface GraphBuildData {
16
17
  path: string;
17
18
  } & GraphDocumentSummary;
18
19
  records?: PerNoteRecord[];
20
+ /** mount-shared-stores: declared mounts the read view could not include. Absent for a store with no mounts. */
21
+ unavailableMounts?: UnavailableMount[];
19
22
  }
20
23
  /**
21
24
  * context-retrieval spec: node identity is path-based, so a genuine identity
@@ -1 +1 @@
1
- {"version":3,"file":"graph-build.d.ts","sourceRoot":"","sources":["../../src/commands/graph-build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1E,OAAO,EAA0C,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACvG,OAAO,EAAuB,KAAK,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAG3F,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACvC,sGAAsG;IACtG,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,oBAAoB,CAAC;IAClD,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAyBhH"}
1
+ {"version":3,"file":"graph-build.d.ts","sourceRoot":"","sources":["../../src/commands/graph-build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAuB,KAAK,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAE3F,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAyC,KAAK,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACxG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACvC,sGAAsG;IACtG,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,oBAAoB,CAAC;IAClD,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,+GAA+G;IAC/G,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACxC;AAED;;;;;;;GAOG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAoChH"}
@@ -1,9 +1,8 @@
1
1
  import { ExitCode } from '../core/exit-codes.js';
2
- import { buildGraphFromNotes, graphBuildOptions } from '../core/graph/model.js';
3
2
  import { renderGraphDocument } from '../core/graph/document.js';
4
3
  import { GRAPH_DOCUMENT_RELATIVE_PATH, writeGraph, writeGraphDocument } from '../core/graph/persist.js';
5
- import { listNotes } from '../core/notes/list.js';
6
4
  import { buildPerNoteRecords } from '../core/records.js';
5
+ import { buildReadViewGraph, unavailableMounts } from '../core/shared-stores.js';
7
6
  export const requires = { store: 'required' };
8
7
  /**
9
8
  * context-retrieval spec: node identity is path-based, so a genuine identity
@@ -14,8 +13,8 @@ export const requires = { store: 'required' };
14
13
  * reported as a finding rather than failing the build.
15
14
  */
16
15
  export async function execute(store, flags = {}) {
17
- const notes = await listNotes(store.root, store.config);
18
- const graph = buildGraphFromNotes(notes, graphBuildOptions(store.config));
16
+ const { graph, view } = await buildReadViewGraph(store.root, store.config);
17
+ const unavailable = unavailableMounts(view.mounts);
19
18
  await writeGraph(store, graph);
20
19
  const { text, summary } = renderGraphDocument(graph, store.config.retrieval.graph);
21
20
  await writeGraphDocument(store, text);
@@ -27,9 +26,19 @@ export async function execute(store, flags = {}) {
27
26
  subject: d.from,
28
27
  details: { target: d.target, reason: d.reason },
29
28
  }));
29
+ for (const mount of unavailable) {
30
+ findings.push({
31
+ code: 'shared_stores.mount_unavailable',
32
+ severity: 'warning',
33
+ message: mount.state === 'absent'
34
+ ? `Mount "${mount.name}" is not cloned at ${mount.location}, so its notes are not in the graph. Run \`ctxr shared-stores sync\`.`
35
+ : `Mount "${mount.name}" at ${mount.location} is not a store (${mount.reason}), so its notes are not in the graph.`,
36
+ subject: mount.location,
37
+ });
38
+ }
30
39
  return {
31
40
  exitCode: ExitCode.Ok,
32
- data: { nodeCount: graph.nodes.length, edgeCount: graph.edges.length, dangling: graph.dangling, document: { path: GRAPH_DOCUMENT_RELATIVE_PATH, ...summary }, records },
41
+ data: { nodeCount: graph.nodes.length, edgeCount: graph.edges.length, dangling: graph.dangling, document: { path: GRAPH_DOCUMENT_RELATIVE_PATH, ...summary }, records, ...(view.mounts.length > 0 ? { unavailableMounts: unavailable } : {}) },
33
42
  findings,
34
43
  humanSummary: `Graph built: ${graph.nodes.length} node(s), ${graph.edges.length} edge(s) (${summary.typedLinks} typed), ${graph.dangling.length} dangling link(s); ${summary.clusters} cluster(s), ${summary.bridges} bridge(s), ${summary.orphans} orphan(s) → ${GRAPH_DOCUMENT_RELATIVE_PATH}.`,
35
44
  storeRoot: store.root,
@@ -1 +1 @@
1
- {"version":3,"file":"graph-build.js","sourceRoot":"","sources":["../../src/commands/graph-build.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAyB,MAAM,wBAAwB,CAAC;AACvG,OAAO,EAAE,mBAAmB,EAA6B,MAAM,2BAA2B,CAAC;AAC3F,OAAO,EAAE,4BAA4B,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACxG,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAsB,MAAM,oBAAoB,CAAC;AAG7E,MAAM,CAAC,MAAM,QAAQ,GAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAe/D;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAY,EAAE,KAAK,GAAoB,EAAE;IACrE,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1E,MAAM,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC/B,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACnF,MAAM,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAEtC,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEjF,MAAM,QAAQ,GAAc,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrD,IAAI,EAAE,qBAAqB;QAC3B,QAAQ,EAAE,SAAkB;QAC5B,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,MAAM,eAAe,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,4CAA4C,CAAC,CAAC,CAAC,WAAW,GAAG;QACjJ,OAAO,EAAE,CAAC,CAAC,IAAI;QACf,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;KAChD,CAAC,CAAC,CAAC;IAEJ,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,EAAE;QACrB,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,GAAG,OAAO,EAAE,EAAE,OAAO,EAAE;QACvK,QAAQ;QACR,YAAY,EAAE,gBAAgB,KAAK,CAAC,KAAK,CAAC,MAAM,aAAa,KAAK,CAAC,KAAK,CAAC,MAAM,aAAa,OAAO,CAAC,UAAU,YAAY,KAAK,CAAC,QAAQ,CAAC,MAAM,sBAAsB,OAAO,CAAC,QAAQ,gBAAgB,OAAO,CAAC,OAAO,eAAe,OAAO,CAAC,OAAO,gBAAgB,4BAA4B,GAAG;QACjS,SAAS,EAAE,KAAK,CAAC,IAAI;QACrB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc;KAC3C,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"graph-build.js","sourceRoot":"","sources":["../../src/commands/graph-build.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type FastForwardOutcome } from '../core/git/fast-forward.js';
1
2
  import type { CommandOutcome, CommandRequires } from '../core/command.js';
2
3
  import type { RunEnv } from '../core/env.js';
3
4
  import { type CredentialKind } from '../core/forge/credentials.js';
@@ -8,6 +9,8 @@ export interface LandFlags {
8
9
  pr: number | undefined;
9
10
  pending: boolean;
10
11
  confirm: boolean;
12
+ /** approve-sessions-across-stores D7: a session homed here, by its worktree name or branch, landed whole on `--confirm`. */
13
+ session?: string | undefined;
11
14
  }
12
15
  export type LandOutcome = 'merged' | 'no-consent' | 'needs-reapproval' | 'blocked' | 'merge-refused' | 'lease-refused';
13
16
  export type CatchUp = 'not-needed' | 'clean' | 'carried-over' | 'patches-changed' | 'conflict' | 'conflict-resolved';
@@ -30,22 +33,39 @@ export interface LandResult {
30
33
  /** Records posted on the pull request, and records this credential could not post (not the recording login). */
31
34
  records_posted: string[];
32
35
  records_reported_only: string[];
36
+ /** approve-sessions-across-stores: the forge slug of the store a session's part is on; null outside a session. */
37
+ store?: string | null;
33
38
  }
34
- /** write-lifecycle spec ("Every landing run brings the canonical clone up to date when it is safe to"). */
35
- export interface CanonicalSync {
36
- /** True when the clone is at the forge's default branch afterwards — moved, or already there (`from === to`). */
37
- synced: boolean;
38
- from: string | null;
39
- to: string | null;
40
- /** Why it was left alone; null when synced. */
39
+ /**
40
+ * write-lifecycle spec ("A session is landed by its home store, mounted parts
41
+ * first"): one session's landing. `landed` when every part merged; `blocked`
42
+ * waits for a person (a named part closed without merging, a conflict);
43
+ * `retrying` is tried again on the next run; `needs-reapproval` and
44
+ * `not-approved` wait for a decision.
45
+ */
46
+ export interface SessionLandResult {
47
+ session: string;
48
+ home: string;
49
+ state: 'landed' | 'blocked' | 'retrying' | 'needs-reapproval' | 'not-approved';
41
50
  reason: string | null;
51
+ /** The part (`<store>#<number>`) that stopped the session; null when nothing did. */
52
+ stopped_at: string | null;
53
+ landed: string[];
54
+ not_attempted: string[];
55
+ /** For `retrying`: a one-word cause (`push-rejected`, `forge-unreachable`, `mount-not-synced`, …); null otherwise. */
56
+ reason_code: string | null;
42
57
  }
58
+ /** write-lifecycle spec ("Every landing run brings the canonical clone up to date when it is safe to"). */
59
+ /** The canonical clone's sync: the shared fast-forward rule's outcome (`core/git/fast-forward.ts`). */
60
+ export type CanonicalSync = FastForwardOutcome;
43
61
  export interface LandData {
44
62
  /** Which kind of forge credential the command used; never the credential. */
45
63
  credential: CredentialKind;
46
64
  results: LandResult[];
47
65
  /** `--pending` only: the sync every run ends with, whether or not it landed anything. */
48
66
  canonical_sync?: CanonicalSync;
67
+ /** Each session landed (or held) by this run, when any pull request carried a session marker homed here. */
68
+ sessions?: SessionLandResult[];
49
69
  }
50
70
  /**
51
71
  * write-lifecycle spec ("Landing merges only a head that carries consent"):
@@ -1 +1 @@
1
- {"version":3,"file":"land.d.ts","sourceRoot":"","sources":["../../src/commands/land.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAI7C,OAAO,EAA+C,KAAK,cAAc,EAAyB,MAAM,8BAA8B,CAAC;AACvI,OAAO,EAA0C,KAAK,WAAW,EAAsC,MAAM,yBAAyB,CAAC;AAGvI,OAAO,EAAa,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAKzD,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,YAAY,GAAG,kBAAkB,GAAG,SAAS,GAAG,eAAe,GAAG,eAAe,CAAC;AACvH,MAAM,MAAM,OAAO,GAAG,YAAY,GAAG,OAAO,GAAG,cAAc,GAAG,iBAAiB,GAAG,UAAU,GAAG,mBAAmB,CAAC;AAErH,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,WAAW,CAAC;IACrB,+FAA+F;IAC/F,OAAO,EAAE,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC;IACvC,qEAAqE;IACrE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,OAAO,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5D,gHAAgH;IAChH,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,qBAAqB,EAAE,MAAM,EAAE,CAAC;CACjC;AAED,2GAA2G;AAC3G,MAAM,WAAW,aAAa;IAC5B,iHAAiH;IACjH,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,+CAA+C;IAC/C,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,6EAA6E;IAC7E,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,yFAAyF;IACzF,cAAc,CAAC,EAAE,aAAa,CAAC;CAChC;AA+YD;;;;;;GAMG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CA0BjI"}
1
+ {"version":3,"file":"land.d.ts","sourceRoot":"","sources":["../../src/commands/land.ts"],"names":[],"mappings":"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"}