ctxr-cli 0.9.0 → 0.11.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 (211) hide show
  1. package/README.md +28 -11
  2. package/dist/commands/init.d.ts.map +1 -1
  3. package/dist/commands/init.js +10 -2
  4. package/dist/commands/init.js.map +1 -1
  5. package/dist/commands/publish-check.d.ts.map +1 -1
  6. package/dist/commands/publish-check.js +8 -0
  7. package/dist/commands/publish-check.js.map +1 -1
  8. package/dist/commands/publish-new.d.ts.map +1 -1
  9. package/dist/commands/publish-new.js +15 -0
  10. package/dist/commands/publish-new.js.map +1 -1
  11. package/dist/commands/serve.d.ts.map +1 -1
  12. package/dist/commands/serve.js +33 -11
  13. package/dist/commands/serve.js.map +1 -1
  14. package/dist/commands/session-start.d.ts.map +1 -1
  15. package/dist/commands/session-start.js +9 -1
  16. package/dist/commands/session-start.js.map +1 -1
  17. package/dist/commands/source-check.d.ts.map +1 -1
  18. package/dist/commands/source-check.js +28 -3
  19. package/dist/commands/source-check.js.map +1 -1
  20. package/dist/commands/update.d.ts.map +1 -1
  21. package/dist/commands/update.js +7 -1
  22. package/dist/commands/update.js.map +1 -1
  23. package/dist/commands/verify.d.ts +11 -2
  24. package/dist/commands/verify.d.ts.map +1 -1
  25. package/dist/commands/verify.js +86 -5
  26. package/dist/commands/verify.js.map +1 -1
  27. package/dist/commands/version.d.ts +31 -0
  28. package/dist/commands/version.d.ts.map +1 -0
  29. package/dist/commands/version.js +87 -0
  30. package/dist/commands/version.js.map +1 -0
  31. package/dist/config/defaults.d.ts +71 -5
  32. package/dist/config/defaults.d.ts.map +1 -1
  33. package/dist/config/defaults.js +70 -5
  34. package/dist/config/defaults.js.map +1 -1
  35. package/dist/config/load.d.ts +2 -2
  36. package/dist/config/load.d.ts.map +1 -1
  37. package/dist/config/load.js +13 -3
  38. package/dist/config/load.js.map +1 -1
  39. package/dist/config/render.d.ts +0 -6
  40. package/dist/config/render.d.ts.map +1 -1
  41. package/dist/config/render.js +4 -27
  42. package/dist/config/render.js.map +1 -1
  43. package/dist/config/schema.d.ts +21 -67
  44. package/dist/config/schema.d.ts.map +1 -1
  45. package/dist/config/schema.js +73 -112
  46. package/dist/config/schema.js.map +1 -1
  47. package/dist/core/agents-doc.d.ts.map +1 -1
  48. package/dist/core/agents-doc.js +2 -1
  49. package/dist/core/agents-doc.js.map +1 -1
  50. package/dist/core/browse/nav.d.ts.map +1 -1
  51. package/dist/core/browse/nav.js +4 -1
  52. package/dist/core/browse/nav.js.map +1 -1
  53. package/dist/core/browse/preferences.d.ts +26 -0
  54. package/dist/core/browse/preferences.d.ts.map +1 -0
  55. package/dist/core/browse/preferences.js +74 -0
  56. package/dist/core/browse/preferences.js.map +1 -0
  57. package/dist/core/browse/routes.d.ts +10 -8
  58. package/dist/core/browse/routes.d.ts.map +1 -1
  59. package/dist/core/browse/routes.js +113 -24
  60. package/dist/core/browse/routes.js.map +1 -1
  61. package/dist/core/browse/templates.d.ts +14 -4
  62. package/dist/core/browse/templates.d.ts.map +1 -1
  63. package/dist/core/browse/templates.js +22 -4
  64. package/dist/core/browse/templates.js.map +1 -1
  65. package/dist/core/checks/harness-portability-checks.d.ts +21 -0
  66. package/dist/core/checks/harness-portability-checks.d.ts.map +1 -1
  67. package/dist/core/checks/harness-portability-checks.js +46 -1
  68. package/dist/core/checks/harness-portability-checks.js.map +1 -1
  69. package/dist/core/checks/integrity-checks.d.ts +0 -2
  70. package/dist/core/checks/integrity-checks.d.ts.map +1 -1
  71. package/dist/core/checks/integrity-checks.js +38 -27
  72. package/dist/core/checks/integrity-checks.js.map +1 -1
  73. package/dist/core/checks/manifest.d.ts.map +1 -1
  74. package/dist/core/checks/manifest.js +2 -0
  75. package/dist/core/checks/manifest.js.map +1 -1
  76. package/dist/core/checks/store-checks.d.ts +12 -0
  77. package/dist/core/checks/store-checks.d.ts.map +1 -0
  78. package/dist/core/checks/store-checks.js +37 -0
  79. package/dist/core/checks/store-checks.js.map +1 -0
  80. package/dist/core/command.d.ts +6 -0
  81. package/dist/core/command.d.ts.map +1 -1
  82. package/dist/core/convention-doc.d.ts.map +1 -1
  83. package/dist/core/convention-doc.js +15 -9
  84. package/dist/core/convention-doc.js.map +1 -1
  85. package/dist/core/env.d.ts +5 -0
  86. package/dist/core/env.d.ts.map +1 -1
  87. package/dist/core/env.js +3 -0
  88. package/dist/core/env.js.map +1 -1
  89. package/dist/core/environment/probe.d.ts +12 -0
  90. package/dist/core/environment/probe.d.ts.map +1 -0
  91. package/dist/core/environment/probe.js +36 -0
  92. package/dist/core/environment/probe.js.map +1 -0
  93. package/dist/core/errors.d.ts +16 -3
  94. package/dist/core/errors.d.ts.map +1 -1
  95. package/dist/core/errors.js +41 -15
  96. package/dist/core/errors.js.map +1 -1
  97. package/dist/core/git/worktree.d.ts +22 -0
  98. package/dist/core/git/worktree.d.ts.map +1 -1
  99. package/dist/core/git/worktree.js +34 -0
  100. package/dist/core/git/worktree.js.map +1 -1
  101. package/dist/core/graph/model.d.ts +7 -6
  102. package/dist/core/graph/model.d.ts.map +1 -1
  103. package/dist/core/graph/model.js +11 -7
  104. package/dist/core/graph/model.js.map +1 -1
  105. package/dist/core/harness/isolated-run.d.ts +52 -0
  106. package/dist/core/harness/isolated-run.d.ts.map +1 -0
  107. package/dist/core/harness/isolated-run.js +100 -0
  108. package/dist/core/harness/isolated-run.js.map +1 -0
  109. package/dist/core/install-kind.d.ts +25 -0
  110. package/dist/core/install-kind.d.ts.map +1 -0
  111. package/dist/core/install-kind.js +56 -0
  112. package/dist/core/install-kind.js.map +1 -0
  113. package/dist/core/note-templates.d.ts +61 -0
  114. package/dist/core/note-templates.d.ts.map +1 -0
  115. package/dist/core/note-templates.js +188 -0
  116. package/dist/core/note-templates.js.map +1 -0
  117. package/dist/core/notes/list.d.ts.map +1 -1
  118. package/dist/core/notes/list.js +5 -0
  119. package/dist/core/notes/list.js.map +1 -1
  120. package/dist/core/publish/script-check.d.ts +5 -2
  121. package/dist/core/publish/script-check.d.ts.map +1 -1
  122. package/dist/core/publish/script-check.js +5 -2
  123. package/dist/core/publish/script-check.js.map +1 -1
  124. package/dist/core/reconcile.d.ts.map +1 -1
  125. package/dist/core/reconcile.js +8 -0
  126. package/dist/core/reconcile.js.map +1 -1
  127. package/dist/core/registry.d.ts +40 -0
  128. package/dist/core/registry.d.ts.map +1 -0
  129. package/dist/core/registry.js +55 -0
  130. package/dist/core/registry.js.map +1 -0
  131. package/dist/core/root.d.ts +11 -5
  132. package/dist/core/root.d.ts.map +1 -1
  133. package/dist/core/root.js +20 -8
  134. package/dist/core/root.js.map +1 -1
  135. package/dist/core/skills.d.ts.map +1 -1
  136. package/dist/core/skills.js +32 -15
  137. package/dist/core/skills.js.map +1 -1
  138. package/dist/core/version-check.d.ts +63 -0
  139. package/dist/core/version-check.d.ts.map +1 -0
  140. package/dist/core/version-check.js +181 -0
  141. package/dist/core/version-check.js.map +1 -0
  142. package/dist/core/write-lifecycle/path-gate.d.ts.map +1 -1
  143. package/dist/core/write-lifecycle/path-gate.js +4 -1
  144. package/dist/core/write-lifecycle/path-gate.js.map +1 -1
  145. package/dist/run.d.ts +1 -1
  146. package/dist/run.d.ts.map +1 -1
  147. package/dist/run.js +38 -16
  148. package/dist/run.js.map +1 -1
  149. package/dist/version.d.ts +8 -1
  150. package/dist/version.d.ts.map +1 -1
  151. package/dist/version.js +8 -1
  152. package/dist/version.js.map +1 -1
  153. package/package.json +1 -1
  154. package/templates/agents/canonical.md +5 -1
  155. package/templates/notes/Company.md +25 -0
  156. package/templates/notes/Concept.md +29 -0
  157. package/templates/notes/Deal.md +25 -0
  158. package/templates/notes/Note.md +6 -0
  159. package/templates/notes/People.md +19 -0
  160. package/templates/notes/Project.md +19 -0
  161. package/templates/serve/shell.html +16 -2
  162. package/templates/serve/style.css +145 -3
  163. package/templates/skills/ctxr-ingest-orchestration.md +4 -1
  164. package/templates/skills/ctxr-placement.md +21 -2
  165. package/templates/skills/ctxr-session-capture.md +5 -1
  166. package/templates/skills/ctxr-session-lifecycle.md +20 -0
  167. package/templates/skills/ctxr-upgrade.md +44 -0
  168. package/dist/commands/migrate.d.ts +0 -30
  169. package/dist/commands/migrate.d.ts.map +0 -1
  170. package/dist/commands/migrate.js +0 -56
  171. package/dist/commands/migrate.js.map +0 -1
  172. package/dist/core/migrations/add-explanation-craft-skill.d.ts +0 -26
  173. package/dist/core/migrations/add-explanation-craft-skill.d.ts.map +0 -1
  174. package/dist/core/migrations/add-explanation-craft-skill.js +0 -94
  175. package/dist/core/migrations/add-explanation-craft-skill.js.map +0 -1
  176. package/dist/core/migrations/archive-destination-from-taxonomy.d.ts +0 -35
  177. package/dist/core/migrations/archive-destination-from-taxonomy.d.ts.map +0 -1
  178. package/dist/core/migrations/archive-destination-from-taxonomy.js +0 -109
  179. package/dist/core/migrations/archive-destination-from-taxonomy.js.map +0 -1
  180. package/dist/core/migrations/config-defaults-as-the-convention.d.ts +0 -21
  181. package/dist/core/migrations/config-defaults-as-the-convention.d.ts.map +0 -1
  182. package/dist/core/migrations/config-defaults-as-the-convention.js +0 -54
  183. package/dist/core/migrations/config-defaults-as-the-convention.js.map +0 -1
  184. package/dist/core/migrations/drop-access-axes.d.ts +0 -24
  185. package/dist/core/migrations/drop-access-axes.d.ts.map +0 -1
  186. package/dist/core/migrations/drop-access-axes.js +0 -54
  187. package/dist/core/migrations/drop-access-axes.js.map +0 -1
  188. package/dist/core/migrations/drop-forge-and-workspaces-external.d.ts +0 -19
  189. package/dist/core/migrations/drop-forge-and-workspaces-external.d.ts.map +0 -1
  190. package/dist/core/migrations/drop-forge-and-workspaces-external.js +0 -49
  191. package/dist/core/migrations/drop-forge-and-workspaces-external.js.map +0 -1
  192. package/dist/core/migrations/registry.d.ts +0 -16
  193. package/dist/core/migrations/registry.d.ts.map +0 -1
  194. package/dist/core/migrations/registry.js +0 -34
  195. package/dist/core/migrations/registry.js.map +0 -1
  196. package/dist/core/migrations/rename-conventions-path.d.ts +0 -26
  197. package/dist/core/migrations/rename-conventions-path.d.ts.map +0 -1
  198. package/dist/core/migrations/rename-conventions-path.js +0 -86
  199. package/dist/core/migrations/rename-conventions-path.js.map +0 -1
  200. package/dist/core/migrations/rename-procedures-path.d.ts +0 -17
  201. package/dist/core/migrations/rename-procedures-path.d.ts.map +0 -1
  202. package/dist/core/migrations/rename-procedures-path.js +0 -45
  203. package/dist/core/migrations/rename-procedures-path.js.map +0 -1
  204. package/dist/core/migrations/retain-captures-as-provenance.d.ts +0 -22
  205. package/dist/core/migrations/retain-captures-as-provenance.d.ts.map +0 -1
  206. package/dist/core/migrations/retain-captures-as-provenance.js +0 -133
  207. package/dist/core/migrations/retain-captures-as-provenance.js.map +0 -1
  208. package/dist/core/migrations/types.d.ts +0 -27
  209. package/dist/core/migrations/types.d.ts.map +0 -1
  210. package/dist/core/migrations/types.js +0 -2
  211. package/dist/core/migrations/types.js.map +0 -1
@@ -2,6 +2,7 @@ import path from 'node:path';
2
2
  import { hashOfCapture } from '../core/ingest/capture-hash.js';
3
3
  import { NoteNotFoundError } from '../core/errors.js';
4
4
  import { ExitCode } from '../core/exit-codes.js';
5
+ import { hasAssignedIdentity } from '../core/ingest/identity.js';
5
6
  import { evaluateSourceCheck } from '../core/ingest/model.js';
6
7
  import { listCaptures, listNotes } from '../core/notes/list.js';
7
8
  export const requires = { store: 'required' };
@@ -13,8 +14,9 @@ function toStoreRelativePath(env, store, givenPath) {
13
14
  * retain-captures-as-provenance: the index is the union of the capture tier
14
15
  * and the notes still carrying identity from before it existed. `listNotes`
15
16
  * alone would return nothing at all, since the capture root is a declared
16
- * retrieval exclusion — the candidate itself is read straight off disk, so
17
- * only the comparison set is affected.
17
+ * retrieval exclusion. This includes the candidate itself — see
18
+ * `excludeUnassignedCandidate`, applied by the caller, for whether and when
19
+ * that self-record is removed before evaluation.
18
20
  */
19
21
  async function identityRecords(store) {
20
22
  const [captures, notes] = await Promise.all([
@@ -30,6 +32,29 @@ async function identityRecords(store) {
30
32
  byPath.set(record.path, record);
31
33
  return [...byPath.values()];
32
34
  }
35
+ /**
36
+ * exclude-candidate-from-source-check: the candidate is always present in
37
+ * `identityRecords()`'s result (it is itself a capture or a note), so
38
+ * without this it is always a candidate for matching itself. Whether that
39
+ * self-match is a bug depends on whether the candidate has been assigned
40
+ * identity by ingest (`source_hash` or `ingested` present):
41
+ *
42
+ * - Not assigned: a capture pipeline is permitted to pre-know its own
43
+ * `source_type`/`source_id` at capture time, before it has ever been
44
+ * ingested. Matching it against itself would report `already_ingested`
45
+ * for material that has never been ingested — the candidate is excluded.
46
+ * - Already assigned: the candidate genuinely has been ingested (or
47
+ * stamped). Re-checking it against its own identity is a legitimate
48
+ * question — "has this been ingested?" — and the honest answer is yes,
49
+ * naming itself. It stays in the comparison set.
50
+ */
51
+ function excludeUnassignedCandidate(records, candidatePath) {
52
+ const candidate = records.find((record) => record.path === candidatePath);
53
+ if (candidate && !hasAssignedIdentity(candidate)) {
54
+ return records.filter((record) => record.path !== candidatePath);
55
+ }
56
+ return [...records];
57
+ }
33
58
  /**
34
59
  * context-ingest spec: evaluate, in order, source-id match then content-
35
60
  * hash match, never proceeding past a stage with more than one match. Only
@@ -48,7 +73,7 @@ export async function execute(env, store, flags) {
48
73
  throw new NoteNotFoundError(relativePath);
49
74
  throw err;
50
75
  }
51
- const records = await identityRecords(store);
76
+ const records = excludeUnassignedCandidate(await identityRecords(store), relativePath);
52
77
  const result = evaluateSourceCheck(records, hash, flags.sourceId, store.config.ingest.tracking_params);
53
78
  const findings = result.verdict === 'multiple_matches'
54
79
  ? [
@@ -1 +1 @@
1
- {"version":3,"file":"source-check.js","sourceRoot":"","sources":["../../src/commands/source-check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"source-check.js","sourceRoot":"","sources":["../../src/commands/source-check.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAG7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAG9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,UAAU;IACzB,uGAAuG;IACvG,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAa5F"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAG7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAI9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,UAAU;IACzB,uGAAuG;IACvG,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAmB5F"}
@@ -1,5 +1,6 @@
1
1
  import { ExitCode } from '../core/exit-codes.js';
2
2
  import { reconcileStore } from '../core/reconcile.js';
3
+ import { updateAdvisory } from '../core/version-check.js';
3
4
  import { generateAdapterOutputs } from './adapters-generate.js';
4
5
  export const requires = { store: 'required' };
5
6
  /**
@@ -13,10 +14,15 @@ export async function execute(env, store) {
13
14
  const { changed, findings } = await reconcileStore(env, store.root, store.config);
14
15
  const adapterFiles = await generateAdapterOutputs(env.git, store);
15
16
  const all = [...new Set([...changed, ...adapterFiles.filter((f) => f.changed).map((f) => f.path)])];
17
+ // cli-contract: the human path for the release advisory. This is the command
18
+ // someone runs right AFTER upgrading, so "you have not upgraded" is at its
19
+ // most actionable here. It never changes this command's exit code.
20
+ const advisory = await updateAdvisory(env, store);
16
21
  return {
17
22
  exitCode: ExitCode.Ok,
18
23
  data: { changed: all },
19
- findings,
24
+ findings: [...findings, ...advisory.findings],
25
+ notices: advisory.notice ? [advisory.notice] : undefined,
20
26
  humanSummary: all.length === 0 ? 'Store is already up to date.' : `Updated ${all.length} contexture-owned file(s).`,
21
27
  storeRoot: store.root,
22
28
  schemaVersion: store.config.schema_version,
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,MAAM,CAAC,MAAM,QAAQ,GAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAO/D;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,KAAY;IACrD,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAClF,MAAM,YAAY,GAAG,MAAM,sBAAsB,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAClE,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpG,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,EAAE;QACrB,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;QACtB,QAAQ;QACR,YAAY,EAAE,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,MAAM,4BAA4B;QACnH,SAAS,EAAE,KAAK,CAAC,IAAI;QACrB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc;KAC3C,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,MAAM,CAAC,MAAM,QAAQ,GAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAO/D;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,KAAY;IACrD,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAClF,MAAM,YAAY,GAAG,MAAM,sBAAsB,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAClE,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpG,6EAA6E;IAC7E,2EAA2E;IAC3E,mEAAmE;IACnE,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAElD,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,EAAE;QACrB,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;QACtB,QAAQ,EAAE,CAAC,GAAG,QAAQ,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC;QAC7C,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QACxD,YAAY,EAAE,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,MAAM,4BAA4B;QACnH,SAAS,EAAE,KAAK,CAAC,IAAI;QACrB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc;KAC3C,CAAC;AACJ,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { CommandOutcome, CommandRequires } from '../core/command.js';
2
+ import type { RunEnv } from '../core/env.js';
2
3
  import type { Store } from '../core/store.js';
3
4
  export declare const requires: CommandRequires;
4
5
  export interface VerifyFlags {
@@ -6,11 +7,19 @@ export interface VerifyFlags {
6
7
  }
7
8
  export interface VerifyStepResult {
8
9
  operation: string;
9
- status: 'pass' | 'fail';
10
+ /**
11
+ * isolate-the-portability-test: `skip` is reported when an operation has
12
+ * nothing to exercise in this store — a conditional artifact that is not
13
+ * configured. Only `fail` decides the exit code, so a skipped step is
14
+ * visible in the envelope without ever changing the verdict.
15
+ */
16
+ status: 'pass' | 'fail' | 'skip';
10
17
  detail?: string;
11
18
  }
12
19
  export interface VerifyData {
13
20
  steps: VerifyStepResult[];
21
+ /** Present only in portable mode: the commit the disposable checkout was made from. */
22
+ commit?: string;
14
23
  }
15
24
  /**
16
25
  * harness-portability spec: exercises core store operations "from an
@@ -26,5 +35,5 @@ export interface VerifyData {
26
35
  * drift `ctxr doctor` checks — see `integrity-checks.ts`), and that a skill
27
36
  * is reachable by path at the configured skills path.
28
37
  */
29
- export declare function execute(store: Store, _flags?: VerifyFlags): Promise<CommandOutcome<VerifyData>>;
38
+ export declare function execute(env: RunEnv, store: Store, flags?: VerifyFlags): Promise<CommandOutcome<VerifyData>>;
30
39
  //# sourceMappingURL=verify.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAoB1E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC3B;AAWD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,GAAE,WAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CA8FzG"}
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAsB1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAI7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAS/D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,uFAAuF;IACvF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAWD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAE,WAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CA6HrH"}
@@ -8,8 +8,19 @@ import { readFencedRegionFromFile } from '../core/fs/fenced-region.js';
8
8
  import { buildGraphFromNotes, graphBuildOptions } from '../core/graph/model.js';
9
9
  import { writeGraph } from '../core/graph/persist.js';
10
10
  import { listNotes } from '../core/notes/list.js';
11
+ import { resolveOnPath } from '../core/environment/probe.js';
11
12
  import { scanSkills } from '../core/skills.js';
13
+ import { sanctionedPath } from '../core/write-lifecycle/path-gate.js';
14
+ import { NoCommitToVerifyError } from '../core/errors.js';
15
+ import { runIsolatedVerify } from '../core/harness/isolated-run.js';
16
+ import { resolveHead } from '../core/git/worktree.js';
12
17
  export const requires = { store: 'required' };
18
+ /**
19
+ * The tool `templates/skills/ctxr-submit.md` and `ctxr-land.md` drive. Hardcoded
20
+ * on purpose: accepting a tool name from configuration would let a store point
21
+ * the check at something it knows is present (D4).
22
+ */
23
+ const WRITE_PATH_TOOL = 'gh';
13
24
  /** Every section that renders unconditionally — Mission is checked separately since it's optional. */
14
25
  const ALWAYS_PRESENT_SECTIONS = [
15
26
  { label: 'store fundamentals', fence: AGENTS_MD_CANONICAL_FENCE },
@@ -32,7 +43,9 @@ const ALWAYS_PRESENT_SECTIONS = [
32
43
  * drift `ctxr doctor` checks — see `integrity-checks.ts`), and that a skill
33
44
  * is reachable by path at the configured skills path.
34
45
  */
35
- export async function execute(store, _flags = {}) {
46
+ export async function execute(env, store, flags = {}) {
47
+ if (flags.portable)
48
+ return executePortable(env, store);
36
49
  const steps = [];
37
50
  // 1. A retrieval query — reading a catalog section works even before any
38
51
  // build has ever run (an empty, valid section), so this genuinely proves
@@ -121,9 +134,38 @@ export async function execute(store, _flags = {}) {
121
134
  detail: err instanceof Error ? err.message : String(err),
122
135
  });
123
136
  }
137
+ // 7. The write-path gate — the store's surviving refusal mechanism. Every
138
+ // other operation here is a happy path; this one asks whether the gate still
139
+ // says no. The path escapes the store, which `sanctionedPath` refuses
140
+ // unconditionally: its sanctioned-location rule is inert until
141
+ // `write_lifecycle.writable_paths` is declared, so a step built on that half
142
+ // would pass vacuously on a default store (D3).
143
+ const gated = await sanctionedPath(store.config, store.root, path.join('..', 'outside.md'));
144
+ if (gated.ok || gated.reason === undefined) {
145
+ steps.push({
146
+ operation: 'write-path gate refuses an escaping path',
147
+ status: 'fail',
148
+ detail: 'the gate produced no refusal for a path resolving outside the store',
149
+ });
150
+ return finish(store, steps);
151
+ }
152
+ steps.push({ operation: 'write-path gate refuses an escaping path', status: 'pass' });
153
+ // 8. The external tooling the shipped write-path skills invoke. Presence
154
+ // only — nothing is executed, and no tool name comes from configuration.
155
+ const resolved = await resolveOnPath(WRITE_PATH_TOOL, env.env);
156
+ if (resolved === null) {
157
+ steps.push({
158
+ operation: `write-path prerequisite "${WRITE_PATH_TOOL}" on PATH`,
159
+ status: 'fail',
160
+ detail: `"${WRITE_PATH_TOOL}" is not on PATH; the shipped submit and land skills invoke it.`,
161
+ });
162
+ return finish(store, steps);
163
+ }
164
+ steps.push({ operation: `write-path prerequisite "${WRITE_PATH_TOOL}" on PATH`, status: 'pass' });
124
165
  return finish(store, steps);
125
166
  }
126
- function finish(store, steps) {
167
+ function finish(store, steps, commit) {
168
+ // Only `fail` is failing — a skipped operation never changes the exit code.
127
169
  const failed = steps.find((s) => s.status === 'fail');
128
170
  const findings = failed
129
171
  ? [
@@ -135,15 +177,54 @@ function finish(store, steps) {
135
177
  },
136
178
  ]
137
179
  : [];
180
+ // D2: a portable pass is a statement about the recorded commit, never about
181
+ // the working tree, so the summary always names which commit it was.
182
+ const at = commit === undefined ? '' : ` at commit ${commit.slice(0, 12)}`;
183
+ const mode = commit === undefined ? 'verify' : 'verify --portable';
138
184
  return {
139
185
  exitCode: failed ? ExitCode.CheckFailed : ExitCode.Ok,
140
- data: { steps },
186
+ data: commit === undefined ? { steps } : { steps, commit },
141
187
  findings,
142
188
  humanSummary: failed
143
- ? `verify --portable failed at: ${failed.operation}`
144
- : `verify --portable: all ${steps.length} operation(s) succeeded.`,
189
+ ? `${mode} failed${at} at: ${failed.operation}`
190
+ : `${mode}${at}: all ${steps.length} operation(s) succeeded.`,
145
191
  storeRoot: store.root,
146
192
  schemaVersion: store.config.schema_version,
147
193
  };
148
194
  }
195
+ /**
196
+ * D1/D2: verifies the store's RECORDED COMMIT in a disposable checkout, in a
197
+ * child process with no harness state reachable. The refusal below is a value
198
+ * check on `resolveHead` rather than a caught git error, and it runs before
199
+ * anything is created — an unborn HEAD leaves no checkout behind.
200
+ */
201
+ async function executePortable(env, store) {
202
+ const commit = await resolveHead(env.git, store.root);
203
+ if (commit === null)
204
+ throw new NoCommitToVerifyError();
205
+ const isolated = await runIsolatedVerify(env.git, store.root, env.env, commit);
206
+ const steps = isolated.steps.map((step) => ({
207
+ operation: step.operation,
208
+ status: step.status === 'fail' ? 'fail' : step.status === 'skip' ? 'skip' : 'pass',
209
+ ...(step.detail === undefined ? {} : { detail: step.detail }),
210
+ }));
211
+ // The requirement's "no harness state" clause, enforced: if the child wrote
212
+ // into the scrubbed home, the run was not isolated from what it claimed.
213
+ if (!isolated.homeWasEmpty) {
214
+ steps.push({
215
+ operation: 'isolated run leaves no harness state',
216
+ status: 'fail',
217
+ detail: 'the child wrote into the scrubbed home directory, so the run was not isolated from harness state',
218
+ });
219
+ return finish(store, steps, isolated.commit);
220
+ }
221
+ if (steps.length === 0) {
222
+ steps.push({
223
+ operation: 'isolated run',
224
+ status: 'fail',
225
+ detail: `the isolated child produced no verifiable output (exit ${isolated.exitCode})`,
226
+ });
227
+ }
228
+ return finish(store, steps, isolated.commit);
229
+ }
149
230
  //# sourceMappingURL=verify.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { CommandOutcome, CommandRequires } from '../core/command.js';
2
+ import type { RunEnv } from '../core/env.js';
3
+ import type { InstallKind } from '../core/install-kind.js';
4
+ /**
5
+ * cli-contract: the CLI reports its own version and how it was installed.
6
+ * `store: 'absent'` — the version of the running executable is a fact about
7
+ * the installation, not about any store, so this must answer from a directory
8
+ * that resolves to no store root at all.
9
+ */
10
+ export declare const requires: CommandRequires;
11
+ export type ReleaseStatus = 'current' | 'newer-available' | 'undetermined';
12
+ export interface VersionData {
13
+ version: string;
14
+ install_path: string;
15
+ install_kind: InstallKind;
16
+ /** Only present with --check. Null when the published version could not be resolved. */
17
+ latest?: string | null;
18
+ release_status?: ReleaseStatus;
19
+ }
20
+ export interface VersionFlags {
21
+ check?: boolean;
22
+ }
23
+ /**
24
+ * Unlike the session-start/update advisory, this check IS the command's whole
25
+ * purpose, so it fails loud: an answer that could not be determined exits with
26
+ * the usage code naming what was missing, rather than degrading to "current".
27
+ * It also reads the registry directly, never the cache — an operator who asks
28
+ * explicitly is asking about now.
29
+ */
30
+ export declare function execute(env: RunEnv, flags?: VersionFlags): Promise<CommandOutcome<VersionData>>;
31
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/commands/version.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAG7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAM3D;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,EAAE,eAAqC,CAAC;AAE7D,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,iBAAiB,GAAG,cAAc,CAAC;AAE3E,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,WAAW,CAAC;IAC1B,wFAAwF;IACxF,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,cAAc,CAAC,EAAE,aAAa,CAAC;CAChC;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,YAAiB,GAAG,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAuDzG"}
@@ -0,0 +1,87 @@
1
+ import { ExitCode } from '../core/exit-codes.js';
2
+ import { resolveInstallLocation } from '../core/install-kind.js';
3
+ import { ownPackageName } from '../core/registry.js';
4
+ import { compareRelease } from '../core/version-check.js';
5
+ import { CLI_VERSION } from '../version.js';
6
+ /**
7
+ * cli-contract: the CLI reports its own version and how it was installed.
8
+ * `store: 'absent'` — the version of the running executable is a fact about
9
+ * the installation, not about any store, so this must answer from a directory
10
+ * that resolves to no store root at all.
11
+ */
12
+ export const requires = { store: 'absent' };
13
+ /**
14
+ * Unlike the session-start/update advisory, this check IS the command's whole
15
+ * purpose, so it fails loud: an answer that could not be determined exits with
16
+ * the usage code naming what was missing, rather than degrading to "current".
17
+ * It also reads the registry directly, never the cache — an operator who asks
18
+ * explicitly is asking about now.
19
+ */
20
+ export async function execute(env, flags = {}) {
21
+ const install = resolveInstallLocation(env.execPath);
22
+ const base = {
23
+ version: CLI_VERSION,
24
+ install_path: install.path,
25
+ install_kind: install.kind,
26
+ };
27
+ if (!flags.check) {
28
+ return {
29
+ exitCode: ExitCode.Ok,
30
+ data: base,
31
+ findings: [],
32
+ humanSummary: CLI_VERSION,
33
+ storeRoot: null,
34
+ schemaVersion: null,
35
+ };
36
+ }
37
+ const lookup = await env.registry.latestVersion(ownPackageName());
38
+ if (lookup.kind === 'undetermined') {
39
+ return undetermined(base, `the latest published version could not be determined: ${lookup.reason}`);
40
+ }
41
+ const comparison = compareRelease(CLI_VERSION, lookup.version);
42
+ if (comparison.kind === 'undetermined') {
43
+ return undetermined({ ...base, latest: lookup.version }, comparison.reason);
44
+ }
45
+ if (comparison.kind === 'newer-available') {
46
+ const finding = {
47
+ code: 'cli.update_available',
48
+ severity: 'info',
49
+ message: `ctxr ${comparison.installed} is installed; ${comparison.latest} is available.`,
50
+ subject: ownPackageName(),
51
+ details: { installed: comparison.installed, latest: comparison.latest },
52
+ };
53
+ return {
54
+ exitCode: ExitCode.CheckFailed,
55
+ data: { ...base, latest: lookup.version, release_status: 'newer-available' },
56
+ findings: [finding],
57
+ humanSummary: `ctxr ${comparison.installed} is installed; ${comparison.latest} is available.`,
58
+ storeRoot: null,
59
+ schemaVersion: null,
60
+ };
61
+ }
62
+ return {
63
+ exitCode: ExitCode.Ok,
64
+ data: { ...base, latest: lookup.version, release_status: 'current' },
65
+ findings: [],
66
+ humanSummary: `ctxr ${CLI_VERSION} is the latest published version.`,
67
+ storeRoot: null,
68
+ schemaVersion: null,
69
+ };
70
+ }
71
+ function undetermined(data, reason) {
72
+ const finding = {
73
+ code: 'cli.update_check_failed',
74
+ severity: 'info',
75
+ message: reason,
76
+ subject: ownPackageName(),
77
+ };
78
+ return {
79
+ exitCode: ExitCode.Usage,
80
+ data: { ...data, latest: data.latest ?? null, release_status: 'undetermined' },
81
+ findings: [finding],
82
+ humanSummary: `error: ${reason}`,
83
+ storeRoot: null,
84
+ schemaVersion: null,
85
+ };
86
+ }
87
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/commands/version.ts"],"names":[],"mappings":"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"}
@@ -74,8 +74,40 @@ export declare const DEFAULT_EXCLUDE_PATHS: readonly ['.contexture/', "raw/"];
74
74
  export declare const DEFAULT_DEMOTE_PATHS: readonly string[];
75
75
  /** compose-the-retrieval-pass spec: how many notes `ctxr context gather` returns before it reports truncation. */
76
76
  export declare const DEFAULT_GATHER_MAX_NOTES = 50;
77
- /** graph-context-document spec: no relation vocabulary by default — no typed edges until a store declares names. */
78
- export declare const DEFAULT_RELATIONS: readonly string[];
77
+ /**
78
+ * context-retrieval spec ("Relation sections yield typed edges"): the fixed
79
+ * relation vocabulary, and the one place either a name or its definition is
80
+ * written. Not configurable — a store that wants a different edge type writes
81
+ * an ordinary heading and gets an untyped link, the same as any other heading.
82
+ *
83
+ * The definition is not decoration. The only question the vocabulary actually
84
+ * raises is which of two adjacent relations a link belongs under, so each one
85
+ * says when to use it and how it differs from its nearest neighbour. Every
86
+ * artifact that names a relation — the graph, the entry document, the
87
+ * connection-proposal skill, the note template — reads this pair, so a
88
+ * definition cannot drift from the name it explains.
89
+ */
90
+ export declare const RELATION_VOCABULARY: readonly [{
91
+ readonly name: 'Upstream';
92
+ readonly definition: 'The thinking this note is built on: prior ideas, sources, and decisions that had to exist first. If removing the linked note would leave this one unfounded, it is upstream.';
93
+ }, {
94
+ readonly name: 'Downstream';
95
+ readonly definition: 'What follows from this note: what it enables, informs, or raises. The inverse of Upstream.';
96
+ }, {
97
+ readonly name: 'Similar';
98
+ readonly definition: 'A note this one resembles in structure, pattern, or topic, where neither depends on the other. Use it when the observation is that the two rhyme, not that one caused the other.';
99
+ }, {
100
+ readonly name: 'Opposing';
101
+ readonly definition: 'A note that contradicts this one, or that holds under conditions where this one fails. The tension is the content; record it rather than resolving it by dropping a side.';
102
+ }];
103
+ /** Just the names, for the vocabulary match the graph performs on a heading. */
104
+ export declare const RELATION_NAMES: readonly string[];
105
+ /**
106
+ * Stated wherever the vocabulary is explained: an edge is recorded only on the
107
+ * note carrying the link. An agent that assumes the reciprocal is written for
108
+ * it will leave half the graph unwritten, and nothing in the output would say so.
109
+ */
110
+ export declare const RELATION_DIRECTEDNESS_NOTE = "An edge is recorded only on the note carrying the link \u2014 naming a note Upstream does not write the reciprocal Downstream edge on it.";
79
111
  /** graph-context-document spec: positional clusters two directory segments deep; document sections capped for readability. */
80
112
  export declare const DEFAULT_GRAPH_SETTINGS: {
81
113
  cluster_depth: number;
@@ -93,6 +125,27 @@ export declare const DEFAULT_DIFF_SIZE_CEILING_LINES = 2000;
93
125
  export declare const DEFAULT_CATALOG_PATH = ".contexture/catalog/";
94
126
  /** context-catalog spec: a section exceeding this triggers a failing doctor check, not a silent slowdown. */
95
127
  export declare const DEFAULT_CATALOG_SECTION_MAX_BYTES: number;
128
+ /**
129
+ * context-store spec (a note template is a starting shape, never a note): the
130
+ * note templates a note is started from — authored-but-tool-owned, like the
131
+ * catalog and the published pages, and excluded from retrieval for the same
132
+ * reason. A template is not a note; it is the shape one starts from.
133
+ */
134
+ export declare const DEFAULT_TEMPLATES_PATH = ".contexture/templates/";
135
+ /**
136
+ * harness-portability spec (a store declares which note templates it installs):
137
+ * the packaged library, installed by default and refreshed by update. The list
138
+ * is contexture's offer, not its assertion about what a store is about — a
139
+ * store drops what it does not need, and adds its own kinds as files this list
140
+ * never names. An empty list installs none.
141
+ *
142
+ * Appended, never sorted in: the order here is the order init stages and a
143
+ * rendered configuration lists, so growing the library is a pure insertion.
144
+ *
145
+ * `Note` is the base every other one builds on and the file a store copies to
146
+ * cut its own kind; it is deliberately first.
147
+ */
148
+ export declare const DEFAULT_INSTALLED_TEMPLATES: readonly ['Note', 'Concept', 'Project', 'People', 'Company', 'Deal'];
96
149
  /** publish spec: where published pages live — tracked, authored-but-tool-owned, excluded from retrieval like the catalog and skill pack. */
97
150
  export declare const DEFAULT_PUBLISH_PATH = ".contexture/publish/";
98
151
  /**
@@ -142,9 +195,15 @@ export declare const DEFAULT_ADAPTERS: readonly AdapterDeclaration[];
142
195
  * sites branch on the key's presence to decide whether the store has a
143
196
  * mission mechanism at all. `DEFAULT_MISSION_PATH` is what `init` seeds,
144
197
  * not what an omission resolves to.
145
- * - `harness.procedures_path` and `harness.conventions_path` are pre-rename
146
- * spellings, read only as fallbacks by `HarnessSchema`'s transform.
147
198
  */
199
+ /**
200
+ * cli-contract (keep-the-installed-cli-current): the release advisory is on by
201
+ * default — an operator who never learns a newer release exists is exactly the
202
+ * problem it solves — and off with one key. The interval is a day because the
203
+ * thing being watched is a hand-cut release, not a stream of commits.
204
+ */
205
+ export declare const DEFAULT_UPDATE_CHECK_ENABLED = true;
206
+ export declare const DEFAULT_UPDATE_CHECK_TTL_HOURS = 24;
148
207
  export declare const SHIPPED_DEFAULTS: {
149
208
  readonly derived: {
150
209
  readonly paths: readonly [".contexture/cache/"];
@@ -153,7 +212,6 @@ export declare const SHIPPED_DEFAULTS: {
153
212
  readonly exclude_paths: readonly [".contexture/", "raw/"];
154
213
  readonly demote_paths: readonly string[];
155
214
  readonly gather_max_notes: 50;
156
- readonly relations: readonly string[];
157
215
  readonly graph: {
158
216
  cluster_depth: number;
159
217
  hub_top: number;
@@ -176,6 +234,10 @@ export declare const SHIPPED_DEFAULTS: {
176
234
  readonly publish: {
177
235
  readonly path: ".contexture/publish/";
178
236
  };
237
+ readonly templates: {
238
+ readonly path: ".contexture/templates/";
239
+ readonly installed: readonly ["Note", "Concept", "Project", "People", "Company", "Deal"];
240
+ };
179
241
  readonly skills: {
180
242
  readonly vendored: readonly ["frontend-design", "eli5"];
181
243
  };
@@ -198,5 +260,9 @@ export declare const SHIPPED_DEFAULTS: {
198
260
  module?: string | undefined;
199
261
  skills_dir?: string | undefined;
200
262
  }[];
263
+ readonly update_check: {
264
+ readonly enabled: true;
265
+ readonly ttl_hours: 24;
266
+ };
201
267
  };
202
268
  //# sourceMappingURL=defaults.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,YAAI,oBAAoB,CAAU,CAAC;AAErE;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,oBAAoB,CAAC;AAErD;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,YAAI,iBAAiB,EAAE,MAAM,CAAU,CAAC;AAE5E;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,0BAA0B,CAAC;AAE7D,4HAA4H;AAC5H,eAAO,MAAM,sCAAsC,4BAA4B,CAAC;AAEhF;;;;;GAKG;AACH,eAAO,MAAM,oCAAoC,2BAA2B,CAAC;AAE7E;;;;GAIG;AACH,eAAO,MAAM,mCAAmC,yBAAyB,CAAC;AAE1E,mHAAmH;AACnH,eAAO,MAAM,yBAAyB,eAAe,CAAC;AAEtD,+IAA+I;AAC/I,eAAO,MAAM,oBAAoB,oCAAyD,CAAC;AAE3F,yIAAyI;AACzI,eAAO,MAAM,4BAA4B,QAAY,CAAC;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,SAAS,CAAC;AAE3C,6GAA6G;AAC7G,eAAO,MAAM,qBAAqB,YAAI,cAAc,SAAgC,CAAC;AAErF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAAO,CAAC;AAE1D,kHAAkH;AAClH,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,oHAAoH;AACpH,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAAO,CAAC;AAEvD,8HAA8H;AAC9H,eAAO,MAAM,sBAAsB;IACjC,aAAa;IACb,OAAO;IACP,UAAU;IACV,sBAAsB,EAAQ,MAAM,EAAE;CACvC,CAAC;AAEF,wFAAwF;AACxF,eAAO,MAAM,sBAAsB,gBAAgB,CAAC;AAEpD,8FAA8F;AAC9F,eAAO,MAAM,6BAA6B,aAAa,CAAC;AAGxD,oFAAoF;AACpF,eAAO,MAAM,+BAA+B,OAAO,CAAC;AAEpD,2HAA2H;AAC3H,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAE3D,6GAA6G;AAC7G,eAAO,MAAM,iCAAiC,QAAY,CAAC;AAE3D,4IAA4I;AAC5I,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAE3D;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,eAAe,CAAC;AAE/C,gJAAgJ;AAChJ,eAAO,MAAM,uBAAuB,UAA6F,CAAC;AAElI;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,aAAa,CAAC;AAEtD,iHAAiH;AACjH,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,kBAAkB,EAAwD,CAAC;AAEnH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,gBAAgB;aAC3B,OAAO;iBAAI,KAAK;;aAChB,SAAS;iBACP,aAAa;iBACb,YAAY;iBACZ,gBAAgB;iBAChB,SAAS;iBACT,KAAK;;;;oCApFuB,MAAM,EAAE;;;aAsFtC,OAAO;iBAAI,aAAa;iBAAiC,cAAc;;aACvE,eAAe;iBAAI,uBAAuB;iBAAmC,cAAc,EAAQ,MAAM,EAAE;;aAC3G,OAAO;iBAAI,IAAI;iBAAwB,iBAAiB;;aACxD,OAAO;iBAAI,IAAI;;aACf,MAAM;iBAAI,QAAQ;;aAClB,MAAM;iBACJ,UAAU;iBACV,YAAY;iBACZ,eAAe;;aAEjB,QAAQ;iBAAI,iBAAiB;;aAC7B,OAAO;iBACL,WAAW;iBACX,aAAa;iBACb,oBAAoB;;aAEtB,QAAQ;;;;;;CACA,CAAC"}
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,YAAI,oBAAoB,CAAU,CAAC;AAErE;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,oBAAoB,CAAC;AAErD;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,YAAI,iBAAiB,EAAE,MAAM,CAAU,CAAC;AAE5E;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,0BAA0B,CAAC;AAE7D,4HAA4H;AAC5H,eAAO,MAAM,sCAAsC,4BAA4B,CAAC;AAEhF;;;;;GAKG;AACH,eAAO,MAAM,oCAAoC,2BAA2B,CAAC;AAE7E;;;;GAIG;AACH,eAAO,MAAM,mCAAmC,yBAAyB,CAAC;AAE1E,mHAAmH;AACnH,eAAO,MAAM,yBAAyB,eAAe,CAAC;AAEtD,+IAA+I;AAC/I,eAAO,MAAM,oBAAoB,oCAAyD,CAAC;AAE3F,yIAAyI;AACzI,eAAO,MAAM,4BAA4B,QAAY,CAAC;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,SAAS,CAAC;AAE3C,6GAA6G;AAC7G,eAAO,MAAM,qBAAqB,YAAI,cAAc,SAAgC,CAAC;AAErF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAAO,CAAC;AAE1D,kHAAkH;AAClH,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,mBAAmB;aAE5B,IAAI,EAAE,UAAU;aAChB,UAAU,EACR,8KAA8K;;aAGhL,IAAI,EAAE,YAAY;aAClB,UAAU,EAAE,4FAA4F;;aAGxG,IAAI,EAAE,SAAS;aACf,UAAU,EACR,kLAAkL;;aAGpL,IAAI,EAAE,UAAU;aAChB,UAAU,EACR,2KAA2K;EAEvK,CAAC;AAEX,gFAAgF;AAChF,eAAO,MAAM,cAAc,EAAE,SAAS,MAAM,EAA2C,CAAC;AAExF;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,8IACiG,CAAC;AAEzI,8HAA8H;AAC9H,eAAO,MAAM,sBAAsB;IACjC,aAAa;IACb,OAAO;IACP,UAAU;IACV,sBAAsB,EAAQ,MAAM,EAAE;CACvC,CAAC;AAEF,wFAAwF;AACxF,eAAO,MAAM,sBAAsB,gBAAgB,CAAC;AAEpD,8FAA8F;AAC9F,eAAO,MAAM,6BAA6B,aAAa,CAAC;AAGxD,oFAAoF;AACpF,eAAO,MAAM,+BAA+B,OAAO,CAAC;AAEpD,2HAA2H;AAC3H,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAE3D,6GAA6G;AAC7G,eAAO,MAAM,iCAAiC,QAAY,CAAC;AAE3D;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAE/D;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,2BAA2B,YAAI,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAU,CAAC;AAEhH,4IAA4I;AAC5I,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAE3D;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,eAAe,CAAC;AAE/C,gJAAgJ;AAChJ,eAAO,MAAM,uBAAuB,UAA6F,CAAC;AAElI;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,aAAa,CAAC;AAEtD,iHAAiH;AACjH,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,kBAAkB,EAAwD,CAAC;AAEnH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,OAAO,CAAC;AACjD,eAAO,MAAM,8BAA8B,KAAK,CAAC;AAEjD,eAAO,MAAM,gBAAgB;aAC3B,OAAO;iBAAI,KAAK;;aAChB,SAAS;iBACP,aAAa;iBACb,YAAY;iBACZ,gBAAgB;iBAChB,KAAK;;;;oCAjHuB,MAAM,EAAE;;;aAmHtC,OAAO;iBAAI,aAAa;iBAAiC,cAAc;;aACvE,eAAe;iBAAI,uBAAuB;iBAAmC,cAAc,EAAQ,MAAM,EAAE;;aAC3G,OAAO;iBAAI,IAAI;iBAAwB,iBAAiB;;aACxD,OAAO;iBAAI,IAAI;;aACf,SAAS;iBAAI,IAAI;iBAA0B,SAAS;;aACpD,MAAM;iBAAI,QAAQ;;aAClB,MAAM;iBACJ,UAAU;iBACV,YAAY;iBACZ,eAAe;;aAEjB,QAAQ;iBAAI,iBAAiB;;aAC7B,OAAO;iBACL,WAAW;iBACX,aAAa;iBACb,oBAAoB;;aAEtB,QAAQ;;;;;;aACR,YAAY;iBAAI,OAAO;iBAAgC,SAAS;;CACxD,CAAC"}