open-wiki-spec 0.2.4 → 0.3.1

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 (252) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/README.md +50 -3
  3. package/dist/cli/commands/apply.d.ts.map +1 -1
  4. package/dist/cli/commands/apply.js +96 -4
  5. package/dist/cli/commands/apply.js.map +1 -1
  6. package/dist/cli/commands/archive.d.ts.map +1 -1
  7. package/dist/cli/commands/archive.js +19 -5
  8. package/dist/cli/commands/archive.js.map +1 -1
  9. package/dist/cli/commands/bulk-archive.d.ts +15 -0
  10. package/dist/cli/commands/bulk-archive.d.ts.map +1 -0
  11. package/dist/cli/commands/bulk-archive.js +97 -0
  12. package/dist/cli/commands/bulk-archive.js.map +1 -0
  13. package/dist/cli/commands/continue.d.ts.map +1 -1
  14. package/dist/cli/commands/continue.js +15 -2
  15. package/dist/cli/commands/continue.js.map +1 -1
  16. package/dist/cli/commands/error-handler.d.ts +1 -5
  17. package/dist/cli/commands/error-handler.d.ts.map +1 -1
  18. package/dist/cli/commands/error-handler.js +48 -3
  19. package/dist/cli/commands/error-handler.js.map +1 -1
  20. package/dist/cli/commands/init.d.ts +0 -3
  21. package/dist/cli/commands/init.d.ts.map +1 -1
  22. package/dist/cli/commands/init.js +22 -4
  23. package/dist/cli/commands/init.js.map +1 -1
  24. package/dist/cli/commands/list.d.ts +2 -17
  25. package/dist/cli/commands/list.d.ts.map +1 -1
  26. package/dist/cli/commands/list.js +15 -3
  27. package/dist/cli/commands/list.js.map +1 -1
  28. package/dist/cli/commands/migrate.d.ts.map +1 -1
  29. package/dist/cli/commands/migrate.js +6 -9
  30. package/dist/cli/commands/migrate.js.map +1 -1
  31. package/dist/cli/commands/propose.d.ts.map +1 -1
  32. package/dist/cli/commands/propose.js +46 -6
  33. package/dist/cli/commands/propose.js.map +1 -1
  34. package/dist/cli/commands/query.d.ts.map +1 -1
  35. package/dist/cli/commands/query.js +99 -4
  36. package/dist/cli/commands/query.js.map +1 -1
  37. package/dist/cli/commands/retrieve.d.ts +7 -0
  38. package/dist/cli/commands/retrieve.d.ts.map +1 -0
  39. package/dist/cli/commands/retrieve.js +70 -0
  40. package/dist/cli/commands/retrieve.js.map +1 -0
  41. package/dist/cli/commands/revert.d.ts +18 -0
  42. package/dist/cli/commands/revert.d.ts.map +1 -0
  43. package/dist/cli/commands/revert.js +109 -0
  44. package/dist/cli/commands/revert.js.map +1 -0
  45. package/dist/cli/commands/status.d.ts +2 -19
  46. package/dist/cli/commands/status.d.ts.map +1 -1
  47. package/dist/cli/commands/status.js +42 -3
  48. package/dist/cli/commands/status.js.map +1 -1
  49. package/dist/cli/commands/verify.d.ts.map +1 -1
  50. package/dist/cli/commands/verify.js +12 -1
  51. package/dist/cli/commands/verify.js.map +1 -1
  52. package/dist/cli/index.d.ts.map +1 -1
  53. package/dist/cli/index.js +68 -2
  54. package/dist/cli/index.js.map +1 -1
  55. package/dist/cli/init/init-engine.d.ts.map +1 -1
  56. package/dist/cli/init/init-engine.js +19 -6
  57. package/dist/cli/init/init-engine.js.map +1 -1
  58. package/dist/cli/init/meta-files.d.ts +2 -1
  59. package/dist/cli/init/meta-files.d.ts.map +1 -1
  60. package/dist/cli/init/meta-files.js +167 -8
  61. package/dist/cli/init/meta-files.js.map +1 -1
  62. package/dist/cli/init/skill-generator.d.ts +3 -0
  63. package/dist/cli/init/skill-generator.d.ts.map +1 -1
  64. package/dist/cli/init/skill-generator.js +184 -3
  65. package/dist/cli/init/skill-generator.js.map +1 -1
  66. package/dist/cli/json-envelope.d.ts +15 -0
  67. package/dist/cli/json-envelope.d.ts.map +1 -0
  68. package/dist/cli/json-envelope.js +86 -0
  69. package/dist/cli/json-envelope.js.map +1 -0
  70. package/dist/cli/schema-check.d.ts +27 -0
  71. package/dist/cli/schema-check.d.ts.map +1 -0
  72. package/dist/cli/schema-check.js +33 -0
  73. package/dist/cli/schema-check.js.map +1 -0
  74. package/dist/cli/vault-discovery.d.ts.map +1 -1
  75. package/dist/cli/vault-discovery.js +16 -2
  76. package/dist/cli/vault-discovery.js.map +1 -1
  77. package/dist/core/embedding/cache.d.ts +12 -3
  78. package/dist/core/embedding/cache.d.ts.map +1 -1
  79. package/dist/core/embedding/cache.js +42 -5
  80. package/dist/core/embedding/cache.js.map +1 -1
  81. package/dist/core/embedding/embedder.d.ts +5 -1
  82. package/dist/core/embedding/embedder.d.ts.map +1 -1
  83. package/dist/core/embedding/embedder.js +78 -7
  84. package/dist/core/embedding/embedder.js.map +1 -1
  85. package/dist/core/index/build.d.ts.map +1 -1
  86. package/dist/core/index/build.js +54 -6
  87. package/dist/core/index/build.js.map +1 -1
  88. package/dist/core/index/resolve.d.ts.map +1 -1
  89. package/dist/core/index/resolve.js +27 -12
  90. package/dist/core/index/resolve.js.map +1 -1
  91. package/dist/core/index/scan.d.ts +10 -1
  92. package/dist/core/index/scan.d.ts.map +1 -1
  93. package/dist/core/index/scan.js +59 -10
  94. package/dist/core/index/scan.js.map +1 -1
  95. package/dist/core/index/schema-version.d.ts +28 -0
  96. package/dist/core/index/schema-version.d.ts.map +1 -1
  97. package/dist/core/index/schema-version.js +47 -0
  98. package/dist/core/index/schema-version.js.map +1 -1
  99. package/dist/core/migrate/change-converter.d.ts.map +1 -1
  100. package/dist/core/migrate/change-converter.js +52 -5
  101. package/dist/core/migrate/change-converter.js.map +1 -1
  102. package/dist/core/migrate/migrate.d.ts.map +1 -1
  103. package/dist/core/migrate/migrate.js +115 -1
  104. package/dist/core/migrate/migrate.js.map +1 -1
  105. package/dist/core/migrate/spec-converter.js +5 -0
  106. package/dist/core/migrate/spec-converter.js.map +1 -1
  107. package/dist/core/migrate/types.d.ts +9 -0
  108. package/dist/core/migrate/types.d.ts.map +1 -1
  109. package/dist/core/parser/frontmatter-parser.d.ts +0 -6
  110. package/dist/core/parser/frontmatter-parser.d.ts.map +1 -1
  111. package/dist/core/parser/frontmatter-parser.js +59 -2
  112. package/dist/core/parser/frontmatter-parser.js.map +1 -1
  113. package/dist/core/parser/requirement-parser.js +4 -0
  114. package/dist/core/parser/requirement-parser.js.map +1 -1
  115. package/dist/core/parser/task-parser.d.ts.map +1 -1
  116. package/dist/core/parser/task-parser.js +19 -0
  117. package/dist/core/parser/task-parser.js.map +1 -1
  118. package/dist/core/parser/wikilink-parser.d.ts.map +1 -1
  119. package/dist/core/parser/wikilink-parser.js +21 -5
  120. package/dist/core/parser/wikilink-parser.js.map +1 -1
  121. package/dist/core/retrieval/classify.d.ts +11 -4
  122. package/dist/core/retrieval/classify.d.ts.map +1 -1
  123. package/dist/core/retrieval/classify.js +76 -14
  124. package/dist/core/retrieval/classify.js.map +1 -1
  125. package/dist/core/retrieval/lexical.d.ts.map +1 -1
  126. package/dist/core/retrieval/lexical.js +31 -12
  127. package/dist/core/retrieval/lexical.js.map +1 -1
  128. package/dist/core/retrieval/retrieve.d.ts.map +1 -1
  129. package/dist/core/retrieval/retrieve.js +45 -5
  130. package/dist/core/retrieval/retrieve.js.map +1 -1
  131. package/dist/core/retrieval/scoring.d.ts.map +1 -1
  132. package/dist/core/retrieval/scoring.js +37 -12
  133. package/dist/core/retrieval/scoring.js.map +1 -1
  134. package/dist/core/schema/change.schema.d.ts.map +1 -1
  135. package/dist/core/schema/change.schema.js +6 -1
  136. package/dist/core/schema/change.schema.js.map +1 -1
  137. package/dist/core/schema/feature.schema.d.ts +1 -1
  138. package/dist/core/schema/feature.schema.d.ts.map +1 -1
  139. package/dist/core/schema/feature.schema.js +1 -0
  140. package/dist/core/schema/feature.schema.js.map +1 -1
  141. package/dist/core/schema/frontmatter.d.ts +15 -0
  142. package/dist/core/schema/frontmatter.d.ts.map +1 -1
  143. package/dist/core/schema/index.d.ts +15 -0
  144. package/dist/core/schema/index.d.ts.map +1 -1
  145. package/dist/core/schema/query.schema.d.ts +15 -0
  146. package/dist/core/schema/query.schema.d.ts.map +1 -1
  147. package/dist/core/schema/query.schema.js +5 -0
  148. package/dist/core/schema/query.schema.js.map +1 -1
  149. package/dist/core/schema/templates.d.ts +0 -4
  150. package/dist/core/schema/templates.d.ts.map +1 -1
  151. package/dist/core/schema/templates.js +25 -7
  152. package/dist/core/schema/templates.js.map +1 -1
  153. package/dist/core/sequencing/analyze.d.ts.map +1 -1
  154. package/dist/core/sequencing/analyze.js +3 -1
  155. package/dist/core/sequencing/analyze.js.map +1 -1
  156. package/dist/core/sequencing/priority-queue.d.ts +9 -3
  157. package/dist/core/sequencing/priority-queue.d.ts.map +1 -1
  158. package/dist/core/sequencing/priority-queue.js +10 -4
  159. package/dist/core/sequencing/priority-queue.js.map +1 -1
  160. package/dist/core/sequencing/stale-detector.d.ts.map +1 -1
  161. package/dist/core/sequencing/stale-detector.js +5 -0
  162. package/dist/core/sequencing/stale-detector.js.map +1 -1
  163. package/dist/core/workflow/apply/apply.d.ts.map +1 -1
  164. package/dist/core/workflow/apply/apply.js +429 -25
  165. package/dist/core/workflow/apply/apply.js.map +1 -1
  166. package/dist/core/workflow/apply/delta-parser.d.ts.map +1 -1
  167. package/dist/core/workflow/apply/delta-parser.js +43 -9
  168. package/dist/core/workflow/apply/delta-parser.js.map +1 -1
  169. package/dist/core/workflow/apply/feature-updater.d.ts.map +1 -1
  170. package/dist/core/workflow/apply/feature-updater.js +27 -11
  171. package/dist/core/workflow/apply/feature-updater.js.map +1 -1
  172. package/dist/core/workflow/apply/types.d.ts +9 -0
  173. package/dist/core/workflow/apply/types.d.ts.map +1 -1
  174. package/dist/core/workflow/continue/continue.d.ts +18 -0
  175. package/dist/core/workflow/continue/continue.d.ts.map +1 -1
  176. package/dist/core/workflow/continue/continue.js +134 -15
  177. package/dist/core/workflow/continue/continue.js.map +1 -1
  178. package/dist/core/workflow/continue/next-action.d.ts.map +1 -1
  179. package/dist/core/workflow/continue/next-action.js +16 -3
  180. package/dist/core/workflow/continue/next-action.js.map +1 -1
  181. package/dist/core/workflow/continue/types.d.ts +12 -0
  182. package/dist/core/workflow/continue/types.d.ts.map +1 -1
  183. package/dist/core/workflow/propose/note-creator.d.ts +2 -2
  184. package/dist/core/workflow/propose/note-creator.d.ts.map +1 -1
  185. package/dist/core/workflow/propose/note-creator.js +89 -12
  186. package/dist/core/workflow/propose/note-creator.js.map +1 -1
  187. package/dist/core/workflow/propose/propose.d.ts.map +1 -1
  188. package/dist/core/workflow/propose/propose.js +189 -47
  189. package/dist/core/workflow/propose/propose.js.map +1 -1
  190. package/dist/core/workflow/propose/query-normalizer.d.ts.map +1 -1
  191. package/dist/core/workflow/propose/query-normalizer.js +37 -5
  192. package/dist/core/workflow/propose/query-normalizer.js.map +1 -1
  193. package/dist/core/workflow/propose/types.d.ts +15 -0
  194. package/dist/core/workflow/propose/types.d.ts.map +1 -1
  195. package/dist/core/workflow/propose/types.js +6 -1
  196. package/dist/core/workflow/propose/types.js.map +1 -1
  197. package/dist/core/workflow/query/query-note-creator.js +4 -0
  198. package/dist/core/workflow/query/query-note-creator.js.map +1 -1
  199. package/dist/core/workflow/verify/coherence.d.ts +10 -0
  200. package/dist/core/workflow/verify/coherence.d.ts.map +1 -1
  201. package/dist/core/workflow/verify/coherence.js +91 -4
  202. package/dist/core/workflow/verify/coherence.js.map +1 -1
  203. package/dist/core/workflow/verify/completeness.d.ts +1 -1
  204. package/dist/core/workflow/verify/completeness.d.ts.map +1 -1
  205. package/dist/core/workflow/verify/completeness.js +53 -10
  206. package/dist/core/workflow/verify/completeness.js.map +1 -1
  207. package/dist/core/workflow/verify/correctness.d.ts +1 -1
  208. package/dist/core/workflow/verify/correctness.d.ts.map +1 -1
  209. package/dist/core/workflow/verify/correctness.js +95 -14
  210. package/dist/core/workflow/verify/correctness.js.map +1 -1
  211. package/dist/core/workflow/verify/vault-integrity.d.ts +11 -0
  212. package/dist/core/workflow/verify/vault-integrity.d.ts.map +1 -1
  213. package/dist/core/workflow/verify/vault-integrity.js +80 -3
  214. package/dist/core/workflow/verify/vault-integrity.js.map +1 -1
  215. package/dist/core/workflow/verify/verify.d.ts +0 -5
  216. package/dist/core/workflow/verify/verify.d.ts.map +1 -1
  217. package/dist/core/workflow/verify/verify.js +54 -3
  218. package/dist/core/workflow/verify/verify.js.map +1 -1
  219. package/dist/index.d.ts +13 -0
  220. package/dist/index.d.ts.map +1 -1
  221. package/dist/index.js +11 -0
  222. package/dist/index.js.map +1 -1
  223. package/dist/types/cli-contracts.d.ts +78 -0
  224. package/dist/types/cli-contracts.d.ts.map +1 -0
  225. package/dist/types/cli-contracts.js +2 -0
  226. package/dist/types/cli-contracts.js.map +1 -0
  227. package/dist/types/error-codes.d.ts +25 -0
  228. package/dist/types/error-codes.d.ts.map +1 -0
  229. package/dist/types/error-codes.js +27 -0
  230. package/dist/types/error-codes.js.map +1 -0
  231. package/dist/types/frontmatter.d.ts +9 -2
  232. package/dist/types/frontmatter.d.ts.map +1 -1
  233. package/dist/types/next-action.d.ts +21 -0
  234. package/dist/types/next-action.d.ts.map +1 -1
  235. package/dist/types/retrieval.d.ts +17 -0
  236. package/dist/types/retrieval.d.ts.map +1 -1
  237. package/dist/types/verify.d.ts +58 -1
  238. package/dist/types/verify.d.ts.map +1 -1
  239. package/dist/types/verify.js +58 -1
  240. package/dist/types/verify.js.map +1 -1
  241. package/dist/utils/conventions.d.ts +9 -0
  242. package/dist/utils/conventions.d.ts.map +1 -0
  243. package/dist/utils/conventions.js +22 -0
  244. package/dist/utils/conventions.js.map +1 -0
  245. package/dist/utils/id-generator.d.ts.map +1 -1
  246. package/dist/utils/id-generator.js +8 -0
  247. package/dist/utils/id-generator.js.map +1 -1
  248. package/dist/utils/normalize.d.ts +7 -4
  249. package/dist/utils/normalize.d.ts.map +1 -1
  250. package/dist/utils/normalize.js +43 -6
  251. package/dist/utils/normalize.js.map +1 -1
  252. package/package.json +3 -2
@@ -1,4 +1,12 @@
1
1
  import { stripWikilinkSyntax } from '../parser/wikilink-parser.js';
2
+ import { normalizeString } from '../../utils/normalize.js';
3
+ /**
4
+ * Normalize a path for use as a lookup key. Converts backslashes to forward
5
+ * slashes so Windows paths match POSIX paths that scan.ts writes into records.
6
+ */
7
+ function normalizePathKey(p) {
8
+ return p.replace(/\\/g, '/');
9
+ }
2
10
  /**
3
11
  * Build lookup maps for wikilink resolution from raw records.
4
12
  */
@@ -10,20 +18,25 @@ export function buildLookupMaps(rawRecords) {
10
18
  for (const record of rawRecords) {
11
19
  // Id set for direct id resolution
12
20
  id_set.add(record.id);
13
- // Title map (lowercase for case-insensitive matching)
14
- const titleKey = record.title.toLowerCase();
21
+ // Title map normalizeString strips zero-width chars, NFC-normalizes,
22
+ // trims, collapses whitespace, and lowercases. This ensures lookup
23
+ // survives invisible character spoofing and NFD/NFC filesystem variants.
24
+ const titleKey = normalizeString(record.title);
15
25
  const titleEntries = title_to_ids.get(titleKey) ?? [];
16
26
  titleEntries.push(record.id);
17
27
  title_to_ids.set(titleKey, titleEntries);
18
- // Alias map
28
+ // Alias map (same normalization)
19
29
  for (const alias of record.aliases) {
20
- const aliasKey = alias.toLowerCase();
30
+ const aliasKey = normalizeString(alias);
21
31
  const aliasEntries = alias_to_ids.get(aliasKey) ?? [];
22
32
  aliasEntries.push(record.id);
23
33
  alias_to_ids.set(aliasKey, aliasEntries);
24
34
  }
25
- // Path map
26
- path_to_id.set(record.path, record.id);
35
+ // Path map — normalize to forward-slash form so Windows backslash paths
36
+ // compare equal to POSIX paths. scan.ts already emits POSIX paths, but
37
+ // any caller that stored a raw record.path elsewhere would have platform
38
+ // separators. Normalize here defensively.
39
+ path_to_id.set(normalizePathKey(record.path), record.id);
27
40
  }
28
41
  return { title_to_ids, id_set, alias_to_ids, path_to_id };
29
42
  }
@@ -39,8 +52,14 @@ export function resolveWikilink(raw, lookups) {
39
52
  if (target.length === 0) {
40
53
  return { error: 'no_match', raw_link: raw };
41
54
  }
42
- const normalized = target.toLowerCase();
43
- // Step 1: exact match against title
55
+ // Apply the same normalization used when building lookup keys so lookups
56
+ // survive zero-width chars, NFC/NFD differences, and whitespace variants.
57
+ const normalized = normalizeString(target);
58
+ // Step 1: exact match against note id (highest priority — deterministic, immutable)
59
+ if (lookups.id_set.has(target)) {
60
+ return { target_id: target, resolved_via: 'id' };
61
+ }
62
+ // Step 2: exact match against title
44
63
  const titleMatches = lookups.title_to_ids.get(normalized) ?? [];
45
64
  if (titleMatches.length === 1) {
46
65
  return { target_id: titleMatches[0], resolved_via: 'title' };
@@ -52,10 +71,6 @@ export function resolveWikilink(raw, lookups) {
52
71
  }
53
72
  return { error: 'ambiguous_alias', raw_link: raw, candidates: titleMatches };
54
73
  }
55
- // Step 2: exact match against note id
56
- if (lookups.id_set.has(target)) {
57
- return { target_id: target, resolved_via: 'id' };
58
- }
59
74
  // Step 3: exact match against alias
60
75
  const aliasMatches = lookups.alias_to_ids.get(normalized) ?? [];
61
76
  if (aliasMatches.length === 1) {
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/core/index/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AA6BnE;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,UAAuB;IACrD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAoB,CAAC;IACjD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAoB,CAAC;IACjD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE7C,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAChC,kCAAkC;QAClC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEtB,sDAAsD;QACtD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtD,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7B,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAEzC,YAAY;QACZ,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;YACrC,MAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACtD,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAC3C,CAAC;QAED,WAAW;QACX,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,GAAW,EACX,OAAmB;IAEnB,MAAM,SAAS,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAC3C,uCAAuC;IACvC,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACnF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IAC9C,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAExC,oCAAoC;IACpC,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IAChE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;IAC/D,CAAC;IACD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;QACxC,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;QAC/D,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;IAC/E,CAAC;IAED,sCAAsC;IACtC,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IACnD,CAAC;IAED,oCAAoC;IACpC,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IAChE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;IAC/D,CAAC;IACD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;IAC/E,CAAC;IAED,mBAAmB;IACnB,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,MAA0C;IACnE,OAAO,WAAW,IAAI,MAAM,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/core/index/resolve.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  export interface FileEntry {
2
- /** Path relative to vault root */
2
+ /** Path relative to vault root (always uses '/' as separator, even on Windows) */
3
3
  path: string;
4
4
  /** Absolute path on disk */
5
5
  absolutePath: string;
@@ -11,6 +11,15 @@ export interface FileEntry {
11
11
  }
12
12
  /**
13
13
  * Scan the vault for all markdown files.
14
+ *
15
+ * Broken symlinks: `fast-glob` with `followSymbolicLinks: false` may still
16
+ * return the link path itself (not its target). If the link points
17
+ * nowhere, a naive `statSync` throws ENOENT and aborts the entire scan.
18
+ * We catch per-entry errors, skip the broken file, and continue — one
19
+ * dangling symlink must not take down `ows verify` on the whole vault.
20
+ * Sort output with a pinned `en` + `numeric` collator so scan ordering
21
+ * is reproducible across host locales (matches the dedup tie-break in
22
+ * src/core/index/build.ts for consistency).
14
23
  */
15
24
  export declare function scanVaultFiles(vaultRoot: string, globPattern?: string): FileEntry[];
16
25
  //# sourceMappingURL=scan.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../src/core/index/scan.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB;IACjB,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACzC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CAYnF"}
1
+ {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../src/core/index/scan.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,kFAAkF;IAClF,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB;IACjB,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACzC;AAUD;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CA6CnF"}
@@ -1,19 +1,68 @@
1
1
  import { statSync } from 'node:fs';
2
- import { join, relative } from 'node:path';
2
+ import { join, relative, sep } from 'node:path';
3
3
  import fg from 'fast-glob';
4
+ /**
5
+ * Normalize a path to use forward slashes regardless of platform.
6
+ * This ensures downstream checks like `startsWith('wiki/')` work on Windows.
7
+ */
8
+ function toPosixPath(p) {
9
+ return sep === '\\' ? p.replace(/\\/g, '/') : p;
10
+ }
4
11
  /**
5
12
  * Scan the vault for all markdown files.
13
+ *
14
+ * Broken symlinks: `fast-glob` with `followSymbolicLinks: false` may still
15
+ * return the link path itself (not its target). If the link points
16
+ * nowhere, a naive `statSync` throws ENOENT and aborts the entire scan.
17
+ * We catch per-entry errors, skip the broken file, and continue — one
18
+ * dangling symlink must not take down `ows verify` on the whole vault.
19
+ * Sort output with a pinned `en` + `numeric` collator so scan ordering
20
+ * is reproducible across host locales (matches the dedup tie-break in
21
+ * src/core/index/build.ts for consistency).
6
22
  */
7
23
  export function scanVaultFiles(vaultRoot, globPattern) {
8
24
  const pattern = globPattern ?? join(vaultRoot, 'wiki', '**', '*.md');
9
- const files = fg.sync(pattern, { absolute: true, followSymbolicLinks: false });
10
- return files.map((absolutePath) => {
11
- const stat = statSync(absolutePath);
12
- return {
13
- path: relative(vaultRoot, absolutePath),
14
- absolutePath,
15
- stat: { mtimeMs: stat.mtimeMs, size: stat.size },
16
- };
17
- }).sort((a, b) => a.path.localeCompare(b.path));
25
+ // fast-glob can throw if the base directory is a symlink loop, is
26
+ // protected by restrictive ACLs, or disappears between stat calls.
27
+ // Return an empty list with a stderr warning rather than crashing the
28
+ // whole CLI invocation — individual file issues are still caught
29
+ // per-entry below. We intentionally do NOT swallow non-filesystem
30
+ // errors (programming bugs, bad patterns), only known I/O classes.
31
+ let files;
32
+ try {
33
+ files = fg.sync(pattern, { absolute: true, followSymbolicLinks: false });
34
+ }
35
+ catch (err) {
36
+ const code = err.code;
37
+ if (code === 'ELOOP' || code === 'EACCES' || code === 'ENOENT') {
38
+ process.stderr.write(`[ows] Warning: scanVaultFiles could not enumerate ${pattern}: ${err.message}. ` +
39
+ 'Returning empty file list. Check for symlink loops or permission issues under wiki/.\n');
40
+ return [];
41
+ }
42
+ throw err;
43
+ }
44
+ const entries = [];
45
+ for (const absolutePath of files) {
46
+ try {
47
+ const stat = statSync(absolutePath);
48
+ entries.push({
49
+ path: toPosixPath(relative(vaultRoot, absolutePath)),
50
+ absolutePath,
51
+ stat: { mtimeMs: stat.mtimeMs, size: stat.size },
52
+ });
53
+ }
54
+ catch (err) {
55
+ const code = err.code;
56
+ if (code === 'ENOENT' || code === 'ELOOP' || code === 'EACCES') {
57
+ // Dangling symlink, symlink cycle, or unreadable file — skip
58
+ // silently. Verify will emit a warning via the index's own
59
+ // pass if the user has `ows verify` enabled.
60
+ continue;
61
+ }
62
+ throw err;
63
+ }
64
+ }
65
+ const pathCollator = new Intl.Collator('en', { numeric: true, sensitivity: 'variant' });
66
+ return entries.sort((a, b) => pathCollator.compare(a.path, b.path));
18
67
  }
19
68
  //# sourceMappingURL=scan.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scan.js","sourceRoot":"","sources":["../../../src/core/index/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,MAAM,WAAW,CAAC;AAW3B;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,WAAoB;IACpE,MAAM,OAAO,GAAG,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,CAAC;IAE/E,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE;QAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;QACpC,OAAO;YACL,IAAI,EAAE,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC;YACvC,YAAY;YACZ,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;SACjD,CAAC;IACJ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"scan.js","sourceRoot":"","sources":["../../../src/core/index/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,MAAM,WAAW,CAAC;AAW3B;;;GAGG;AACH,SAAS,WAAW,CAAC,CAAS;IAC5B,OAAO,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,WAAoB;IACpE,MAAM,OAAO,GAAG,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACrE,kEAAkE;IAClE,mEAAmE;IACnE,sEAAsE;IACtE,iEAAiE;IACjE,kEAAkE;IAClE,mEAAmE;IACnE,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;QACjD,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC/D,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,qDAAqD,OAAO,KAAM,GAAa,CAAC,OAAO,IAAI;gBACzF,wFAAwF,CAC3F,CAAC;YACF,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,KAAK,MAAM,YAAY,IAAI,KAAK,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;gBACpD,YAAY;gBACZ,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;aACjD,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;YACjD,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC/D,6DAA6D;gBAC7D,2DAA2D;gBAC3D,6CAA6C;gBAC7C,SAAS;YACX,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IACD,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;IACxF,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACtE,CAAC"}
@@ -1,5 +1,33 @@
1
+ /**
2
+ * Current schema version written by `ows init`.
3
+ * Update this when schema structure changes in a backwards-incompatible way.
4
+ */
5
+ export declare const CURRENT_SCHEMA_VERSION = "2026-04-06-v1";
6
+ /**
7
+ * Supported schema versions — a vault with one of these can be read by current ows.
8
+ * Older versions trigger a warning; unlisted versions trigger an error.
9
+ */
10
+ export declare const SUPPORTED_SCHEMA_VERSIONS: readonly string[];
11
+ /**
12
+ * Breaking-change tripwire: fingerprint of the compile-time schema shape.
13
+ * Computed from the set of required/optional sections for each note type.
14
+ * When this fingerprint changes but CURRENT_SCHEMA_VERSION has not been bumped,
15
+ * `ows verify` emits a BREAKING_CHANGE_WITHOUT_VERSION_BUMP warning.
16
+ */
17
+ export declare function computeSchemaFingerprint(): string;
18
+ /**
19
+ * Baseline fingerprint captured at the CURRENT_SCHEMA_VERSION declaration above.
20
+ * If the runtime computeSchemaFingerprint() differs from this, it means schema
21
+ * shape changed without bumping CURRENT_SCHEMA_VERSION — a potential silent
22
+ * breaking change that verify will flag.
23
+ */
24
+ export declare const BASELINE_SCHEMA_FINGERPRINT = "a1c975130bcc7290";
1
25
  /**
2
26
  * Read the schema version from wiki/00-meta/schema.md frontmatter.
3
27
  */
4
28
  export declare function readSchemaVersion(vaultRoot: string): string;
29
+ /**
30
+ * Check if a schema version is supported by the current ows version.
31
+ */
32
+ export declare function isSchemaVersionSupported(version: string): boolean;
5
33
  //# sourceMappingURL=schema-version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema-version.d.ts","sourceRoot":"","sources":["../../../src/core/index/schema-version.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAa3D"}
1
+ {"version":3,"file":"schema-version.d.ts","sourceRoot":"","sources":["../../../src/core/index/schema-version.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,eAAO,MAAM,sBAAsB,kBAAkB,CAAC;AAEtD;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,EAEtD,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAWjD;AAED;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,qBAAqB,CAAC;AAE9D;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAa3D;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEjE"}
@@ -1,6 +1,47 @@
1
1
  import { existsSync, readFileSync } from 'node:fs';
2
+ import { createHash } from 'node:crypto';
2
3
  import { join } from 'node:path';
3
4
  import { extractFrontmatter } from '../parser/frontmatter-parser.js';
5
+ import { FEATURE_REQUIRED_SECTIONS, FEATURE_OPTIONAL_SECTIONS } from '../schema/feature.schema.js';
6
+ import { CHANGE_REQUIRED_SECTIONS } from '../schema/change.schema.js';
7
+ import { QUERY_REQUIRED_SECTIONS } from '../schema/query.schema.js';
8
+ /**
9
+ * Current schema version written by `ows init`.
10
+ * Update this when schema structure changes in a backwards-incompatible way.
11
+ */
12
+ export const CURRENT_SCHEMA_VERSION = '2026-04-06-v1';
13
+ /**
14
+ * Supported schema versions — a vault with one of these can be read by current ows.
15
+ * Older versions trigger a warning; unlisted versions trigger an error.
16
+ */
17
+ export const SUPPORTED_SCHEMA_VERSIONS = [
18
+ '2026-04-06-v1',
19
+ ];
20
+ /**
21
+ * Breaking-change tripwire: fingerprint of the compile-time schema shape.
22
+ * Computed from the set of required/optional sections for each note type.
23
+ * When this fingerprint changes but CURRENT_SCHEMA_VERSION has not been bumped,
24
+ * `ows verify` emits a BREAKING_CHANGE_WITHOUT_VERSION_BUMP warning.
25
+ */
26
+ export function computeSchemaFingerprint() {
27
+ const shape = {
28
+ version: CURRENT_SCHEMA_VERSION,
29
+ feature: {
30
+ required: [...FEATURE_REQUIRED_SECTIONS],
31
+ optional: [...FEATURE_OPTIONAL_SECTIONS],
32
+ },
33
+ change: { required: [...CHANGE_REQUIRED_SECTIONS] },
34
+ query: { required: [...QUERY_REQUIRED_SECTIONS] },
35
+ };
36
+ return createHash('sha256').update(JSON.stringify(shape)).digest('hex').slice(0, 16);
37
+ }
38
+ /**
39
+ * Baseline fingerprint captured at the CURRENT_SCHEMA_VERSION declaration above.
40
+ * If the runtime computeSchemaFingerprint() differs from this, it means schema
41
+ * shape changed without bumping CURRENT_SCHEMA_VERSION — a potential silent
42
+ * breaking change that verify will flag.
43
+ */
44
+ export const BASELINE_SCHEMA_FINGERPRINT = 'a1c975130bcc7290';
4
45
  /**
5
46
  * Read the schema version from wiki/00-meta/schema.md frontmatter.
6
47
  */
@@ -16,4 +57,10 @@ export function readSchemaVersion(vaultRoot) {
16
57
  }
17
58
  return String(raw.data.schema_version);
18
59
  }
60
+ /**
61
+ * Check if a schema version is supported by the current ows version.
62
+ */
63
+ export function isSchemaVersionSupported(version) {
64
+ return SUPPORTED_SCHEMA_VERSIONS.includes(version);
65
+ }
19
66
  //# sourceMappingURL=schema-version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema-version.js","sourceRoot":"","sources":["../../../src/core/index/schema-version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAErE;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IACnE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,EAAE,GAAG,EAAE,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;QACrC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"schema-version.js","sourceRoot":"","sources":["../../../src/core/index/schema-version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACnG,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,eAAe,CAAC;AAEtD;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAsB;IAC1D,eAAe;CAChB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB;IACtC,MAAM,KAAK,GAAG;QACZ,OAAO,EAAE,sBAAsB;QAC/B,OAAO,EAAE;YACP,QAAQ,EAAE,CAAC,GAAG,yBAAyB,CAAC;YACxC,QAAQ,EAAE,CAAC,GAAG,yBAAyB,CAAC;SACzC;QACD,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,GAAG,wBAAwB,CAAC,EAAE;QACnD,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,GAAG,uBAAuB,CAAC,EAAE;KAClD,CAAC;IACF,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACvF,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,kBAAkB,CAAC;AAE9D;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IACnE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,EAAE,GAAG,EAAE,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;QACrC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAe;IACtD,OAAO,yBAAyB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACrD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"change-converter.d.ts","sourceRoot":"","sources":["../../../src/core/migrate/change-converter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AASlE;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC;IAAE,UAAU,EAAE,gBAAgB,CAAC;IAAC,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CA0E7F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,aAAa,EAAE,EACxB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC;IAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAgBrD"}
1
+ {"version":3,"file":"change-converter.d.ts","sourceRoot":"","sources":["../../../src/core/migrate/change-converter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AASlE;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC;IAAE,UAAU,EAAE,gBAAgB,CAAC;IAAC,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAkF7F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,aAAa,EAAE,EACxB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC;IAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAgBrD"}
@@ -27,8 +27,15 @@ export function convertChange(change, featureRefs, systemRefMap) {
27
27
  const createdAt = resolveCreatedAt(change);
28
28
  // Parse capabilities from proposal for feature linking
29
29
  const capabilities = parseCapabilities(change.proposal ?? '');
30
- // Build feature reference
31
- const featureRef = resolveFeatureRef(change, featureRefs, capabilities, warnings);
30
+ // Build feature reference. Multi-capability OpenSpec changes produce a
31
+ // `features: [...]` array in the migrated ows Change so all touched
32
+ // features are preserved (ows schema requires multi-feature to use
33
+ // `features` with min 2 entries).
34
+ const allFeatureRefs = resolveAllFeatureRefs(change, featureRefs, capabilities);
35
+ const featureRef = allFeatureRefs.length > 0
36
+ ? allFeatureRefs[0]
37
+ : resolveFeatureRef(change, featureRefs, capabilities, warnings);
38
+ const multiFeatureRefs = allFeatureRefs.length >= 2 ? allFeatureRefs : undefined;
32
39
  // Build delta summary from delta specs
33
40
  const deltaSummary = buildDeltaSummary(change, featureRefs);
34
41
  // Extract tasks from tasks.md
@@ -49,6 +56,7 @@ export function convertChange(change, featureRefs, systemRefMap) {
49
56
  status,
50
57
  createdAt,
51
58
  featureRef,
59
+ featuresMulti: multiFeatureRefs,
52
60
  dependsOn,
53
61
  touchesRefs,
54
62
  systemRefs,
@@ -102,12 +110,17 @@ function buildChangeNote(opts) {
102
110
  const systemsYaml = opts.systemRefs.length > 0
103
111
  ? opts.systemRefs.map(s => ` - ${s}`).join('\n')
104
112
  : '';
113
+ // Emit either `feature:` (single) or `features: [...]` (multi), never both.
114
+ // The ows Change schema refines exactly one of them.
115
+ const featureField = opts.featuresMulti && opts.featuresMulti.length >= 2
116
+ ? `features:\n${opts.featuresMulti.map(f => ` - ${safeYamlQuoted(f)}`).join('\n')}`
117
+ : `feature: ${safeYamlQuoted(opts.featureRef)}`;
105
118
  return `---
106
119
  type: change
107
120
  id: ${safeYamlScalar(opts.id)}
108
121
  status: ${safeYamlScalar(opts.status)}
109
122
  created_at: ${safeYamlQuoted(opts.createdAt)}
110
- feature: ${safeYamlQuoted(opts.featureRef)}
123
+ ${featureField}
111
124
  depends_on:
112
125
  ${dependsOnYaml || ' []'}
113
126
  touches:
@@ -264,8 +277,42 @@ function resolveFeatureRef(change, featureRefs, capabilities, warnings) {
264
277
  return ref;
265
278
  }
266
279
  }
267
- warnings.push(`Could not resolve feature reference for change ${change.name}, leaving empty`);
268
- return '';
280
+ const placeholderRef = `[[Feature: ${formatChangeTitle(change.name)}]]`;
281
+ warnings.push(`Could not resolve feature reference for change ${change.name}, using placeholder: ${placeholderRef}`);
282
+ return placeholderRef;
283
+ }
284
+ /**
285
+ * Collect ALL feature refs from delta specs + capabilities + touches.
286
+ * Used to populate `features: [...]` for multi-feature ows Changes, so that
287
+ * OpenSpec changes touching 2+ capabilities don't silently lose the extras.
288
+ */
289
+ function resolveAllFeatureRefs(change, featureRefs, capabilities) {
290
+ const collected = [];
291
+ const seen = new Set();
292
+ const addIfNew = (ref) => {
293
+ if (ref && !seen.has(ref)) {
294
+ seen.add(ref);
295
+ collected.push(ref);
296
+ }
297
+ };
298
+ // Delta specs
299
+ for (const spec of change.deltaSpecs) {
300
+ addIfNew(featureRefs.get(spec.capability));
301
+ }
302
+ // Proposal capabilities (modified before new: convention — primary first)
303
+ for (const cap of capabilities.modifiedCapabilities) {
304
+ addIfNew(featureRefs.get(cap));
305
+ }
306
+ for (const cap of capabilities.newCapabilities) {
307
+ addIfNew(featureRefs.get(cap));
308
+ }
309
+ // Touches metadata
310
+ if (change.metadata?.touches) {
311
+ for (const touch of change.metadata.touches) {
312
+ addIfNew(featureRefs.get(touch));
313
+ }
314
+ }
315
+ return collected;
269
316
  }
270
317
  function buildDeltaSummary(change, featureRefs) {
271
318
  if (change.deltaSpecs.length === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"change-converter.js","sourceRoot":"","sources":["../../../src/core/migrate/change-converter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"change-converter.js","sourceRoot":"","sources":["../../../src/core/migrate/change-converter.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../src/core/migrate/migrate.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,eAAe,EAGhB,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,aAAa,CAuGpE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,aAAa,EACnB,MAAM,GAAE,OAAe,GACtB,OAAO,CAAC,eAAe,CAAC,CA4C1B;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAG/E"}
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../src/core/migrate/migrate.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,eAAe,EAGhB,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,aAAa,CAkIpE;AA0DD;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,aAAa,EACnB,MAAM,GAAE,OAAe,GACtB,OAAO,CAAC,eAAe,CAAC,CA4C1B;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAG/E"}
@@ -23,6 +23,19 @@ export function planMigration(options) {
23
23
  throw new Error(`OpenSpec directory not found. Specify with --openspec-dir or ensure openspec/ exists in ${projectPath}`);
24
24
  }
25
25
  const wikiPath = path.join(projectPath, 'wiki');
26
+ // Hybrid-state guard: refuse to migrate into a vault that already holds
27
+ // typed notes unless the caller explicitly opts in. Silent interleave
28
+ // causes `filesSkipped` entries that later manifest as unresolved wiki-
29
+ // links and drifted Change Log entries — a class of bug the user would
30
+ // have no visibility into until `ows verify` catches it much later.
31
+ if (!options.allowExistingVault && hasExistingTypedNotes(wikiPath)) {
32
+ throw new Error(`Target vault already exists at ${wikiPath} and contains typed notes. ` +
33
+ `Migrating into an existing vault can silently skip conflicting files and ` +
34
+ `leave the graph in a half-merged state. Either: (1) migrate into an empty ` +
35
+ `project directory, (2) move your existing wiki/ aside first, or ` +
36
+ `(3) pass \`allowExistingVault: true\` (CLI: --allow-existing-vault) if you ` +
37
+ `explicitly want to merge and accept the risk.`);
38
+ }
26
39
  // Step 1: Scan
27
40
  const scan = scanOpenSpec(openspecPath);
28
41
  const scanStep = {
@@ -33,7 +46,7 @@ export function planMigration(options) {
33
46
  };
34
47
  // Step 2: Generate source note from config context
35
48
  const sourceOutputs = [];
36
- if (scan.config?.context) {
49
+ if (scan.config?.context && typeof scan.config.context === 'string') {
37
50
  sourceOutputs.push(convertConfigToSource(scan.config.context, scan.config));
38
51
  }
39
52
  const sourceStep = {
@@ -83,6 +96,16 @@ export function planMigration(options) {
83
96
  };
84
97
  steps.push(archiveStep);
85
98
  }
99
+ // Step 7: Feature ↔ Change backlink patch.
100
+ // Each Change's frontmatter declares its target Feature(s), but the
101
+ // Feature side isn't updated to link back. `ows verify` flags this
102
+ // with MISSING_LINK, so a migrated vault looks broken on first run.
103
+ // Post-process feature outputs to include `changes:` wikilinks to
104
+ // every Change that points at them.
105
+ applyFeatureChangeBacklinks(featureStep.outputs, [
106
+ ...activeChangeStep.outputs,
107
+ ...(steps.find((s) => s.name === 'Convert Archived Changes')?.outputs ?? []),
108
+ ]);
86
109
  // Count totals
87
110
  const totalFiles = steps.reduce((sum, s) => sum + s.outputs.length, 0);
88
111
  const totalWarnings = steps.reduce((sum, s) => sum + s.warnings.length, 0);
@@ -94,6 +117,61 @@ export function planMigration(options) {
94
117
  totalWarnings,
95
118
  };
96
119
  }
120
+ /**
121
+ * Patch Feature ConversionResults' frontmatter to include back-references
122
+ * to Changes that target them. Walks change outputs, extracts feature
123
+ * wikilinks, then rewrites matching Feature outputs' `changes:` field.
124
+ */
125
+ function applyFeatureChangeBacklinks(featureOutputs, changeOutputs) {
126
+ // feature target path -> set of change titles that reference it
127
+ const backlinkMap = new Map();
128
+ for (const change of changeOutputs) {
129
+ if (!change.targetPath.startsWith('wiki/04-changes/') &&
130
+ !change.targetPath.startsWith('wiki/99-archive/'))
131
+ continue;
132
+ // Extract the Change title (H1). Change content uses `# Change: <title>`
133
+ const titleMatch = change.content.match(/^#\s+(Change:\s*[^\n]+)$/m);
134
+ if (!titleMatch)
135
+ continue;
136
+ const changeTitle = titleMatch[1].trim();
137
+ // Extract feature refs from frontmatter. Accepts both `feature: "[[Feature: X]]"`
138
+ // and multi-entry `features:` array blocks.
139
+ const fmMatch = change.content.match(/^---\n([\s\S]*?)\n---/);
140
+ if (!fmMatch)
141
+ continue;
142
+ const fm = fmMatch[1];
143
+ const featureLinks = new Set();
144
+ const singleMatch = fm.match(/^feature:\s*"(\[\[[^\]]+\]\])"/m);
145
+ if (singleMatch)
146
+ featureLinks.add(singleMatch[1]);
147
+ const featuresBlockMatch = fm.match(/^features:\n((?: -\s*"\[\[[^\]]+\]\]"\s*\n)+)/m);
148
+ if (featuresBlockMatch) {
149
+ const entries = featuresBlockMatch[1].matchAll(/"(\[\[[^\]]+\]\])"/g);
150
+ for (const e of entries)
151
+ featureLinks.add(e[1]);
152
+ }
153
+ for (const link of featureLinks) {
154
+ const existing = backlinkMap.get(link) ?? new Set();
155
+ existing.add(`[[${changeTitle}]]`);
156
+ backlinkMap.set(link, existing);
157
+ }
158
+ }
159
+ // Now rewrite each Feature's `changes: []` line to include backlinks
160
+ for (const feature of featureOutputs) {
161
+ if (!feature.targetPath.startsWith('wiki/03-features/'))
162
+ continue;
163
+ const titleMatch = feature.content.match(/^#\s+(Feature:\s*[^\n]+)$/m);
164
+ if (!titleMatch)
165
+ continue;
166
+ const featureLink = `[[${titleMatch[1].trim()}]]`;
167
+ const changeTitles = backlinkMap.get(featureLink);
168
+ if (!changeTitles || changeTitles.size === 0)
169
+ continue;
170
+ const linkList = [...changeTitles].map((t) => ` - "${t}"`).join('\n');
171
+ // Replace an empty `changes: []` or `changes:\n` block with a populated list.
172
+ feature.content = feature.content.replace(/^changes:\s*\[\]\s*$/m, `changes:\n${linkList}`);
173
+ }
174
+ }
97
175
  /**
98
176
  * Execute a migration plan: init vault structure and write all files.
99
177
  */
@@ -146,4 +224,40 @@ export async function migrate(options) {
146
224
  const plan = planMigration(options);
147
225
  return executeMigration(plan, options.dryRun);
148
226
  }
227
+ /**
228
+ * Does the target wiki/ directory already hold typed notes?
229
+ * Checks for any .md file inside a typed subfolder. Meta/seed files under
230
+ * `00-meta/` do not count — those are created by `ows init` and do not
231
+ * imply user content.
232
+ */
233
+ function hasExistingTypedNotes(wikiPath) {
234
+ if (!fs.existsSync(wikiPath))
235
+ return false;
236
+ const TYPED_SUBDIRS = [
237
+ '01-sources',
238
+ '02-systems',
239
+ '03-features',
240
+ '04-changes',
241
+ '05-decisions',
242
+ '06-queries',
243
+ '99-archive',
244
+ ];
245
+ for (const sub of TYPED_SUBDIRS) {
246
+ const dir = path.join(wikiPath, sub);
247
+ if (!fs.existsSync(dir))
248
+ continue;
249
+ let entries;
250
+ try {
251
+ entries = fs.readdirSync(dir);
252
+ }
253
+ catch {
254
+ continue;
255
+ }
256
+ for (const entry of entries) {
257
+ if (entry.endsWith('.md'))
258
+ return true;
259
+ }
260
+ }
261
+ return false;
262
+ }
149
263
  //# sourceMappingURL=migrate.js.map