open-wiki-spec 0.2.3 → 0.3.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 (265) hide show
  1. package/CHANGELOG.md +54 -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 +101 -5
  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 +18 -0
  82. package/dist/core/embedding/embedder.d.ts.map +1 -1
  83. package/dist/core/embedding/embedder.js +87 -10
  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 +59 -11
  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/sanitize.d.ts +17 -0
  106. package/dist/core/migrate/sanitize.d.ts.map +1 -0
  107. package/dist/core/migrate/sanitize.js +33 -0
  108. package/dist/core/migrate/sanitize.js.map +1 -0
  109. package/dist/core/migrate/spec-converter.d.ts.map +1 -1
  110. package/dist/core/migrate/spec-converter.js +9 -3
  111. package/dist/core/migrate/spec-converter.js.map +1 -1
  112. package/dist/core/migrate/types.d.ts +9 -0
  113. package/dist/core/migrate/types.d.ts.map +1 -1
  114. package/dist/core/parser/frontmatter-parser.d.ts +0 -6
  115. package/dist/core/parser/frontmatter-parser.d.ts.map +1 -1
  116. package/dist/core/parser/frontmatter-parser.js +59 -2
  117. package/dist/core/parser/frontmatter-parser.js.map +1 -1
  118. package/dist/core/parser/note-parser.js +15 -4
  119. package/dist/core/parser/note-parser.js.map +1 -1
  120. package/dist/core/parser/requirement-parser.js +4 -0
  121. package/dist/core/parser/requirement-parser.js.map +1 -1
  122. package/dist/core/parser/task-parser.d.ts.map +1 -1
  123. package/dist/core/parser/task-parser.js +19 -0
  124. package/dist/core/parser/task-parser.js.map +1 -1
  125. package/dist/core/parser/wikilink-parser.d.ts.map +1 -1
  126. package/dist/core/parser/wikilink-parser.js +21 -5
  127. package/dist/core/parser/wikilink-parser.js.map +1 -1
  128. package/dist/core/retrieval/classify.d.ts +11 -4
  129. package/dist/core/retrieval/classify.d.ts.map +1 -1
  130. package/dist/core/retrieval/classify.js +76 -14
  131. package/dist/core/retrieval/classify.js.map +1 -1
  132. package/dist/core/retrieval/lexical.d.ts.map +1 -1
  133. package/dist/core/retrieval/lexical.js +31 -12
  134. package/dist/core/retrieval/lexical.js.map +1 -1
  135. package/dist/core/retrieval/retrieve.d.ts.map +1 -1
  136. package/dist/core/retrieval/retrieve.js +45 -5
  137. package/dist/core/retrieval/retrieve.js.map +1 -1
  138. package/dist/core/retrieval/scoring.d.ts.map +1 -1
  139. package/dist/core/retrieval/scoring.js +37 -12
  140. package/dist/core/retrieval/scoring.js.map +1 -1
  141. package/dist/core/schema/change.schema.d.ts.map +1 -1
  142. package/dist/core/schema/change.schema.js +6 -1
  143. package/dist/core/schema/change.schema.js.map +1 -1
  144. package/dist/core/schema/feature.schema.d.ts +1 -1
  145. package/dist/core/schema/feature.schema.d.ts.map +1 -1
  146. package/dist/core/schema/feature.schema.js +1 -0
  147. package/dist/core/schema/feature.schema.js.map +1 -1
  148. package/dist/core/schema/frontmatter.d.ts +15 -0
  149. package/dist/core/schema/frontmatter.d.ts.map +1 -1
  150. package/dist/core/schema/index.d.ts +15 -0
  151. package/dist/core/schema/index.d.ts.map +1 -1
  152. package/dist/core/schema/query.schema.d.ts +15 -0
  153. package/dist/core/schema/query.schema.d.ts.map +1 -1
  154. package/dist/core/schema/query.schema.js +5 -0
  155. package/dist/core/schema/query.schema.js.map +1 -1
  156. package/dist/core/schema/templates.d.ts +0 -4
  157. package/dist/core/schema/templates.d.ts.map +1 -1
  158. package/dist/core/schema/templates.js +25 -7
  159. package/dist/core/schema/templates.js.map +1 -1
  160. package/dist/core/sequencing/analyze.d.ts.map +1 -1
  161. package/dist/core/sequencing/analyze.js +3 -1
  162. package/dist/core/sequencing/analyze.js.map +1 -1
  163. package/dist/core/sequencing/priority-queue.d.ts +9 -3
  164. package/dist/core/sequencing/priority-queue.d.ts.map +1 -1
  165. package/dist/core/sequencing/priority-queue.js +10 -4
  166. package/dist/core/sequencing/priority-queue.js.map +1 -1
  167. package/dist/core/sequencing/stale-detector.d.ts.map +1 -1
  168. package/dist/core/sequencing/stale-detector.js +5 -0
  169. package/dist/core/sequencing/stale-detector.js.map +1 -1
  170. package/dist/core/workflow/apply/apply.d.ts.map +1 -1
  171. package/dist/core/workflow/apply/apply.js +494 -55
  172. package/dist/core/workflow/apply/apply.js.map +1 -1
  173. package/dist/core/workflow/apply/delta-parser.d.ts.map +1 -1
  174. package/dist/core/workflow/apply/delta-parser.js +43 -9
  175. package/dist/core/workflow/apply/delta-parser.js.map +1 -1
  176. package/dist/core/workflow/apply/feature-updater.d.ts.map +1 -1
  177. package/dist/core/workflow/apply/feature-updater.js +27 -11
  178. package/dist/core/workflow/apply/feature-updater.js.map +1 -1
  179. package/dist/core/workflow/apply/types.d.ts +14 -0
  180. package/dist/core/workflow/apply/types.d.ts.map +1 -1
  181. package/dist/core/workflow/continue/continue.d.ts +18 -0
  182. package/dist/core/workflow/continue/continue.d.ts.map +1 -1
  183. package/dist/core/workflow/continue/continue.js +134 -15
  184. package/dist/core/workflow/continue/continue.js.map +1 -1
  185. package/dist/core/workflow/continue/next-action.d.ts.map +1 -1
  186. package/dist/core/workflow/continue/next-action.js +16 -3
  187. package/dist/core/workflow/continue/next-action.js.map +1 -1
  188. package/dist/core/workflow/continue/types.d.ts +12 -0
  189. package/dist/core/workflow/continue/types.d.ts.map +1 -1
  190. package/dist/core/workflow/propose/note-creator.d.ts +2 -2
  191. package/dist/core/workflow/propose/note-creator.d.ts.map +1 -1
  192. package/dist/core/workflow/propose/note-creator.js +89 -12
  193. package/dist/core/workflow/propose/note-creator.js.map +1 -1
  194. package/dist/core/workflow/propose/propose.d.ts.map +1 -1
  195. package/dist/core/workflow/propose/propose.js +190 -46
  196. package/dist/core/workflow/propose/propose.js.map +1 -1
  197. package/dist/core/workflow/propose/query-normalizer.d.ts.map +1 -1
  198. package/dist/core/workflow/propose/query-normalizer.js +37 -5
  199. package/dist/core/workflow/propose/query-normalizer.js.map +1 -1
  200. package/dist/core/workflow/propose/types.d.ts +15 -0
  201. package/dist/core/workflow/propose/types.d.ts.map +1 -1
  202. package/dist/core/workflow/propose/types.js +6 -1
  203. package/dist/core/workflow/propose/types.js.map +1 -1
  204. package/dist/core/workflow/query/query-note-creator.d.ts +0 -4
  205. package/dist/core/workflow/query/query-note-creator.d.ts.map +1 -1
  206. package/dist/core/workflow/query/query-note-creator.js +27 -37
  207. package/dist/core/workflow/query/query-note-creator.js.map +1 -1
  208. package/dist/core/workflow/verify/coherence.d.ts +10 -0
  209. package/dist/core/workflow/verify/coherence.d.ts.map +1 -1
  210. package/dist/core/workflow/verify/coherence.js +91 -4
  211. package/dist/core/workflow/verify/coherence.js.map +1 -1
  212. package/dist/core/workflow/verify/completeness.d.ts +1 -1
  213. package/dist/core/workflow/verify/completeness.d.ts.map +1 -1
  214. package/dist/core/workflow/verify/completeness.js +53 -10
  215. package/dist/core/workflow/verify/completeness.js.map +1 -1
  216. package/dist/core/workflow/verify/correctness.d.ts +1 -1
  217. package/dist/core/workflow/verify/correctness.d.ts.map +1 -1
  218. package/dist/core/workflow/verify/correctness.js +95 -14
  219. package/dist/core/workflow/verify/correctness.js.map +1 -1
  220. package/dist/core/workflow/verify/vault-integrity.d.ts +11 -0
  221. package/dist/core/workflow/verify/vault-integrity.d.ts.map +1 -1
  222. package/dist/core/workflow/verify/vault-integrity.js +80 -3
  223. package/dist/core/workflow/verify/vault-integrity.js.map +1 -1
  224. package/dist/core/workflow/verify/verify.d.ts +0 -5
  225. package/dist/core/workflow/verify/verify.d.ts.map +1 -1
  226. package/dist/core/workflow/verify/verify.js +54 -3
  227. package/dist/core/workflow/verify/verify.js.map +1 -1
  228. package/dist/index.d.ts +13 -0
  229. package/dist/index.d.ts.map +1 -1
  230. package/dist/index.js +11 -0
  231. package/dist/index.js.map +1 -1
  232. package/dist/types/cli-contracts.d.ts +78 -0
  233. package/dist/types/cli-contracts.d.ts.map +1 -0
  234. package/dist/types/cli-contracts.js +2 -0
  235. package/dist/types/cli-contracts.js.map +1 -0
  236. package/dist/types/error-codes.d.ts +25 -0
  237. package/dist/types/error-codes.d.ts.map +1 -0
  238. package/dist/types/error-codes.js +27 -0
  239. package/dist/types/error-codes.js.map +1 -0
  240. package/dist/types/frontmatter.d.ts +9 -2
  241. package/dist/types/frontmatter.d.ts.map +1 -1
  242. package/dist/types/next-action.d.ts +21 -0
  243. package/dist/types/next-action.d.ts.map +1 -1
  244. package/dist/types/retrieval.d.ts +17 -0
  245. package/dist/types/retrieval.d.ts.map +1 -1
  246. package/dist/types/verify.d.ts +58 -1
  247. package/dist/types/verify.d.ts.map +1 -1
  248. package/dist/types/verify.js +58 -1
  249. package/dist/types/verify.js.map +1 -1
  250. package/dist/utils/conventions.d.ts +9 -0
  251. package/dist/utils/conventions.d.ts.map +1 -0
  252. package/dist/utils/conventions.js +22 -0
  253. package/dist/utils/conventions.js.map +1 -0
  254. package/dist/utils/id-generator.d.ts.map +1 -1
  255. package/dist/utils/id-generator.js +8 -0
  256. package/dist/utils/id-generator.js.map +1 -1
  257. package/dist/utils/normalize.d.ts +7 -4
  258. package/dist/utils/normalize.d.ts.map +1 -1
  259. package/dist/utils/normalize.js +43 -6
  260. package/dist/utils/normalize.js.map +1 -1
  261. package/dist/utils/path-safety.d.ts +12 -1
  262. package/dist/utils/path-safety.d.ts.map +1 -1
  263. package/dist/utils/path-safety.js +54 -3
  264. package/dist/utils/path-safety.js.map +1 -1
  265. package/package.json +3 -2
@@ -1,10 +1,14 @@
1
+ import { PROPOSE_RESULT_SCHEMA_VERSION } from './types.js';
1
2
  import { normalizeQuery, enrichSystemTerms } from './query-normalizer.js';
2
3
  import { checkPlannedPrerequisites } from './prerequisites.js';
3
4
  import { createFeatureNote, createChangeNote } from './note-creator.js';
4
5
  import { computeSemanticRecall } from '../../embedding/semantic-recall.js';
5
- import { createEmbedder, DEFAULT_MODEL } from '../../embedding/embedder.js';
6
+ import { createEmbedder, DEFAULT_MODEL, DEFAULT_MODEL_REVISION } from '../../embedding/embedder.js';
6
7
  import { loadEmbeddingCache, createEmptyCache, saveEmbeddingCache, getCachedVector, setCachedVector } from '../../embedding/cache.js';
7
8
  import * as path from 'node:path';
9
+ import { statSync } from 'node:fs';
10
+ import { assertInsideVault } from '../../../utils/path-safety.js';
11
+ import { readConventionsContent } from '../../../utils/conventions.js';
8
12
  /**
9
13
  * Map local intent aliases to RetrievalQuery intent.
10
14
  */
@@ -21,14 +25,38 @@ function mapIntent(intent) {
21
25
  */
22
26
  function runPreflight(query, index, deps, semanticScores) {
23
27
  const sequencingFull = deps.analyzeSequencing(index.records);
24
- const retrieval = deps.retrieve(index, {
25
- intent: mapIntent(query.intent),
26
- summary: query.summary,
27
- feature_terms: query.feature_terms,
28
- system_terms: query.system_terms,
29
- entity_terms: query.entity_terms,
30
- status_bias: query.status_bias,
31
- }, { sequencing: sequencingFull, semanticScores });
28
+ // Wrap retrieve() in a try/catch so a single bad record or a
29
+ // scoring bug cannot abort the whole propose flow. A retrieval
30
+ // failure downgrades the run to a "no candidates" path which
31
+ // classify() already handles (short-circuits to needs_confirmation
32
+ // when terms are empty, or gets classified based on whatever the
33
+ // caller passes). The stderr trace tells operators something is
34
+ // wrong without corrupting stdout / --json consumers.
35
+ let retrieval;
36
+ try {
37
+ retrieval = deps.retrieve(index, {
38
+ intent: mapIntent(query.intent),
39
+ summary: query.summary,
40
+ feature_terms: query.feature_terms,
41
+ system_terms: query.system_terms,
42
+ entity_terms: query.entity_terms,
43
+ status_bias: query.status_bias,
44
+ }, { sequencing: sequencingFull, semanticScores });
45
+ }
46
+ catch (err) {
47
+ process.stderr.write(`[ows] Warning: retrieval failed (${err.message}). ` +
48
+ `Falling back to empty candidate set — classification will ask for confirmation.\n`);
49
+ retrieval = {
50
+ query: query.summary,
51
+ classification: 'needs_confirmation',
52
+ confidence: 'low',
53
+ sequencing: { status: 'parallel_safe', related_changes: [], reasons: [] },
54
+ candidates: [],
55
+ warnings: [
56
+ `Retrieval error: ${err.message}. Rerun with OWS_VERBOSE=1 for details.`,
57
+ ],
58
+ };
59
+ }
32
60
  return { retrieval, sequencingFull };
33
61
  }
34
62
  /**
@@ -90,22 +118,56 @@ export async function propose(userRequest, options, deps) {
90
118
  const embedder = await createEmbedder();
91
119
  if (embedder.available) {
92
120
  const cachePath = path.join(options.vaultRoot, '.ows-cache', 'embeddings.json');
93
- const cache = loadEmbeddingCache(cachePath, DEFAULT_MODEL) ?? createEmptyCache(DEFAULT_MODEL);
94
- // Refresh stale/missing embeddings before recall
95
- let cacheUpdated = false;
121
+ const cache = loadEmbeddingCache(cachePath, DEFAULT_MODEL, DEFAULT_MODEL_REVISION) ?? createEmptyCache(DEFAULT_MODEL, DEFAULT_MODEL_REVISION);
122
+ // Progress feedback for cold start (first propose downloads the model,
123
+ // then computes embeddings for every note — can take 30s+ on slow machines)
124
+ const verbose = process.env.OWS_VERBOSE === '1' || process.env.OWS_DEBUG === '1';
125
+ const toEmbed = [];
96
126
  for (const [id, record] of index.records) {
97
127
  if (!getCachedVector(cache, id, record.content_hash) && record.raw_text) {
98
- // Include title for better semantic matching (e.g., "회원가입" in title)
99
- const embeddingText = `${record.title}\n${record.raw_text}`.slice(0, 512);
100
- const vec = await embedder.embed(embeddingText);
101
- if (vec) {
102
- setCachedVector(cache, id, vec, record.content_hash);
103
- cacheUpdated = true;
104
- }
128
+ toEmbed.push({ id, record });
105
129
  }
106
130
  }
107
- if (cacheUpdated && !options.dryRun) {
108
- saveEmbeddingCache(cachePath, cache);
131
+ // In dry-run we don't persist the cache, and we don't want to pollute
132
+ // stderr either (stderr can interfere with --json consumers). Only emit
133
+ // the progress message when we're actually going to write.
134
+ if (verbose && toEmbed.length > 0 && !options.dryRun) {
135
+ process.stderr.write(`[ows] Computing embeddings for ${toEmbed.length} note(s) (first run may take longer)...\n`);
136
+ }
137
+ // Prune cache entries for notes that no longer exist in the index
138
+ let cacheUpdated = false;
139
+ const staleIds = [];
140
+ for (const id of Object.keys(cache.entries)) {
141
+ if (!index.records.has(id)) {
142
+ staleIds.push(id);
143
+ }
144
+ }
145
+ for (const id of staleIds) {
146
+ delete cache.entries[id];
147
+ cacheUpdated = true;
148
+ }
149
+ // Refresh stale/missing embeddings before recall
150
+ for (const { id, record } of toEmbed) {
151
+ // Include title for better semantic matching (e.g., "회원가입" in title)
152
+ const embeddingText = `${record.title}\n${record.raw_text}`.slice(0, 512);
153
+ const vec = await embedder.embed(embeddingText);
154
+ if (vec) {
155
+ setCachedVector(cache, id, vec, record.content_hash);
156
+ cacheUpdated = true;
157
+ }
158
+ }
159
+ // Persist cache even in dry-run mode — cache is an auxiliary file, not
160
+ // part of the vault's logical state, so saving it is safe. This lets
161
+ // diagnostic commands like `ows retrieve` (which wraps propose dry-run)
162
+ // heal a corrupted .ows-cache/embeddings.json file.
163
+ if (cacheUpdated) {
164
+ try {
165
+ assertInsideVault(cachePath, options.vaultRoot);
166
+ saveEmbeddingCache(cachePath, cache);
167
+ }
168
+ catch {
169
+ // Best-effort cache save — don't fail propose if save fails
170
+ }
109
171
  }
110
172
  const semanticInput = query.override_keywords && query.override_keywords.length > 0
111
173
  ? query.override_keywords.join(' ')
@@ -124,6 +186,19 @@ export async function propose(userRequest, options, deps) {
124
186
  // 3. Allow force override (with candidate type validation)
125
187
  let effectiveRetrieval = retrieval;
126
188
  if (options.forceClassification) {
189
+ // Guardrail: `--force-target` is meaningless for `new_feature` — the
190
+ // whole point of that classification is to CREATE a new Feature, so
191
+ // pointing at an existing candidate id contradicts the intent. Reject
192
+ // the combination with a clear message rather than silently honoring
193
+ // whichever flag happened to be processed last (the current behavior
194
+ // would spread a reordered candidate list onto classification
195
+ // `new_feature`, which the post-classification executor then ignores).
196
+ if (options.forceClassification === 'new_feature' && options.forceTargetId) {
197
+ throw new Error('--force-target cannot be combined with --force-classification new_feature. ' +
198
+ 'A new_feature classification creates a brand-new Feature skeleton, so ' +
199
+ 'there is no existing target to pin. Use --force-classification existing_feature ' +
200
+ 'with --force-target instead, or drop --force-target.');
201
+ }
127
202
  // When forceTargetId is specified, reorder candidates so the target is first
128
203
  let reorderedCandidates = retrieval.candidates;
129
204
  if (options.forceTargetId) {
@@ -158,7 +233,22 @@ export async function propose(userRequest, options, deps) {
158
233
  }
159
234
  effectiveRetrieval = { ...retrieval, candidates: reorderedCandidates, classification: options.forceClassification };
160
235
  }
161
- // 4. Engine guardrail: needs_confirmation blocks note creation unless confirmed
236
+ // 4. Engine guardrail: needs_confirmation blocks note creation unless confirmed.
237
+ //
238
+ // `--confirm` alone is NOT enough to force a note creation — it only
239
+ // unlocks the guard. The actual classification is still needs_confirmation,
240
+ // and the post-classification executor would fall into the
241
+ // `needs_confirmation` case and return `asked_user` anyway. That left
242
+ // `--confirm` as a silent no-op in previous versions. Reject the
243
+ // combination explicitly so users know they must also specify
244
+ // `--force-classification` to tell the engine which direction to go.
245
+ if (effectiveRetrieval.classification === 'needs_confirmation' &&
246
+ options.confirm &&
247
+ !options.forceClassification) {
248
+ throw new Error('`confirm: true` requires `forceClassification` when the engine returned `needs_confirmation`. ' +
249
+ 'Pick one of: `forceClassification: "existing_change" | "existing_feature" | "new_feature"`. ' +
250
+ 'CLI equivalent: pass `--force-classification <type>` alongside `--confirm`.');
251
+ }
162
252
  if (effectiveRetrieval.classification === 'needs_confirmation' &&
163
253
  !options.forceClassification &&
164
254
  !options.confirm) {
@@ -191,7 +281,11 @@ export async function propose(userRequest, options, deps) {
191
281
  };
192
282
  }
193
283
  // 7. Execute post-classification action
194
- return executePostClassification(classification, query, sequencingFull, effectiveRetrieval, index, options.vaultRoot, sequencing_warnings, deps);
284
+ const result = executePostClassification(classification, query, sequencingFull, effectiveRetrieval, index, options.vaultRoot, sequencing_warnings, deps);
285
+ // 8. Attach schema version and project conventions
286
+ result.schema_version = PROPOSE_RESULT_SCHEMA_VERSION;
287
+ result.conventions = readConventionsContent(options.vaultRoot, deps);
288
+ return result;
195
289
  }
196
290
  function classificationToAction(classification) {
197
291
  switch (classification) {
@@ -236,7 +330,7 @@ function executePostClassification(classification, query, sequencingFull, retrie
236
330
  }
237
331
  const { id: changeId, path: changePath, title: changeTitle } = createChangeNote(vaultRoot, { id: feature.id, title: feature.title }, query, sequencingFull, index, deps);
238
332
  // Update Feature's changes field to include the new Change
239
- updateFeatureChangesField(feature.path, changeTitle ?? changeId, deps);
333
+ updateFeatureChangesField(feature.path, changeTitle ?? changeId, vaultRoot, deps);
240
334
  const parsed = deps.parseNote(changePath);
241
335
  const prerequisites = checkPlannedPrerequisites(parsed);
242
336
  return {
@@ -246,11 +340,11 @@ function executePostClassification(classification, query, sequencingFull, retrie
246
340
  target_change: {
247
341
  id: changeId,
248
342
  path: changePath,
249
- status: prerequisites.all_hard_met ? 'planned' : 'proposed',
343
+ status: 'proposed',
250
344
  },
251
345
  target_feature: { id: feature.id, path: feature.path },
252
346
  prerequisites,
253
- transitioned_to_planned: prerequisites.all_hard_met,
347
+ transitioned_to_planned: false,
254
348
  sequencing_warnings,
255
349
  };
256
350
  }
@@ -258,7 +352,7 @@ function executePostClassification(classification, query, sequencingFull, retrie
258
352
  const { id: featureId, path: featurePath, title: featureTitle } = createFeatureNote(vaultRoot, query, index, deps);
259
353
  const { id: changeId, path: changePath, title: changeTitle } = createChangeNote(vaultRoot, { id: featureId, title: featureTitle }, query, sequencingFull, index, deps);
260
354
  // Update Feature's changes field
261
- updateFeatureChangesField(featurePath, changeTitle ?? changeId, deps);
355
+ updateFeatureChangesField(featurePath, changeTitle ?? changeId, vaultRoot, deps);
262
356
  const parsed = deps.parseNote(changePath);
263
357
  const prerequisites = checkPlannedPrerequisites(parsed);
264
358
  return {
@@ -268,11 +362,11 @@ function executePostClassification(classification, query, sequencingFull, retrie
268
362
  target_change: {
269
363
  id: changeId,
270
364
  path: changePath,
271
- status: prerequisites.all_hard_met ? 'planned' : 'proposed',
365
+ status: 'proposed',
272
366
  },
273
367
  target_feature: { id: featureId, path: featurePath },
274
368
  prerequisites,
275
- transitioned_to_planned: prerequisites.all_hard_met,
369
+ transitioned_to_planned: false,
276
370
  sequencing_warnings,
277
371
  };
278
372
  }
@@ -295,27 +389,77 @@ function makeAskedUserResult(retrieval, classification, sequencing_warnings) {
295
389
  }
296
390
  /**
297
391
  * Update a Feature note's `changes` frontmatter field to include a new Change.
392
+ * Uses compare-and-swap retry to handle concurrent writes safely.
298
393
  */
299
- function updateFeatureChangesField(featurePath, changeTitle, deps) {
394
+ function updateFeatureChangesField(featurePath, changeTitle, vaultRoot, deps) {
395
+ // Resolve relative paths against vault root before validation
396
+ const absPath = path.isAbsolute(featurePath) ? featurePath : path.resolve(vaultRoot, featurePath);
397
+ // Defensive: ensure the feature path stays inside the vault (reject symlink escapes)
300
398
  try {
301
- const content = deps.readFile(featurePath);
302
- const wikilink = `"[[${changeTitle}]]"`;
303
- // Check if already included
304
- if (content.includes(wikilink) || content.includes(`[[${changeTitle}]]`))
305
- return;
306
- // Find `changes:` field in frontmatter and append
307
- const updated = content.replace(/^(changes:\s*\[)(.*?)(\])/m, (_match, prefix, existing, suffix) => {
308
- const trimmed = existing.trim();
309
- if (!trimmed)
310
- return `${prefix}${wikilink}${suffix}`;
311
- return `${prefix}${trimmed}, ${wikilink}${suffix}`;
312
- }).replace(/^(changes:)\s*$/m, `$1\n - ${wikilink}`);
313
- if (updated !== content) {
314
- deps.writeFile(featurePath, updated);
315
- }
399
+ assertInsideVault(absPath, vaultRoot);
316
400
  }
317
401
  catch {
318
- // Best-effort don't fail propose if Feature update fails
402
+ return; // refuse to touch paths outside the vault
403
+ }
404
+ const MAX_RETRIES = 3;
405
+ const wikilink = `"[[${changeTitle}]]"`;
406
+ for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
407
+ let beforeMtime;
408
+ try {
409
+ // Snapshot mtime before read
410
+ try {
411
+ beforeMtime = statSync(absPath).mtimeMs;
412
+ }
413
+ catch {
414
+ // File may not exist yet — skip CAS
415
+ }
416
+ const content = deps.readFile(absPath);
417
+ // Check if already included (idempotent)
418
+ if (content.includes(wikilink) || content.includes(`[[${changeTitle}]]`))
419
+ return;
420
+ // Case 1: `changes: [...]` inline array → append inside brackets
421
+ let updated = content.replace(/^(changes:\s*\[)(.*?)(\])/m, (_match, prefix, existing, suffix) => {
422
+ const trimmed = existing.trim();
423
+ if (!trimmed)
424
+ return `${prefix}${wikilink}${suffix}`;
425
+ return `${prefix}${trimmed}, ${wikilink}${suffix}`;
426
+ });
427
+ // Case 2: `changes:` block form (no value or existing list) → append YAML item
428
+ if (updated === content) {
429
+ updated = content.replace(/^(changes:)(?:\s*$|\s*\n((?:[ \t]+-[^\n]*\n?)*))/m, (match, prefix, listItems) => {
430
+ if (listItems) {
431
+ // Existing YAML list — append a new item
432
+ return `${prefix}\n${listItems} - ${wikilink}\n`;
433
+ }
434
+ return `${prefix}\n - ${wikilink}`;
435
+ });
436
+ }
437
+ // Case 3: `changes:` field is entirely absent → add it to frontmatter.
438
+ // Only do this if we can clearly identify the frontmatter block bounds.
439
+ if (updated === content) {
440
+ const fmMatch = content.match(/^---\n([\s\S]*?)\n---\n/);
441
+ if (fmMatch && !fmMatch[1].match(/^changes:/m)) {
442
+ const insertAt = fmMatch.index + fmMatch[0].length - '---\n'.length;
443
+ updated = content.slice(0, insertAt) + `changes:\n - ${wikilink}\n` + content.slice(insertAt);
444
+ }
445
+ }
446
+ if (updated === content)
447
+ return; // no-op (frontmatter unparseable)
448
+ // CAS: verify mtime hasn't changed since we read
449
+ if (beforeMtime !== undefined) {
450
+ const currentMtime = statSync(absPath).mtimeMs;
451
+ if (currentMtime !== beforeMtime) {
452
+ // Someone else wrote — retry
453
+ continue;
454
+ }
455
+ }
456
+ deps.writeFile(absPath, updated);
457
+ return;
458
+ }
459
+ catch {
460
+ // Best-effort — don't fail propose if Feature update fails
461
+ return;
462
+ }
319
463
  }
320
464
  }
321
465
  //# sourceMappingURL=propose.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"propose.js","sourceRoot":"","sources":["../../../../src/core/workflow/propose/propose.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"propose.js","sourceRoot":"","sources":["../../../../src/core/workflow/propose/propose.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"query-normalizer.d.ts","sourceRoot":"","sources":["../../../../src/core/workflow/propose/query-normalizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,YAAY,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AA6BjE;;;GAGG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,WAAW,CA+D5F;AAqBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,GAAG,WAAW,CA2BpF"}
1
+ {"version":3,"file":"query-normalizer.d.ts","sourceRoot":"","sources":["../../../../src/core/workflow/propose/query-normalizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,YAAY,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AA6CjE;;;GAGG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,WAAW,CA+E5F;AAqBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,GAAG,WAAW,CA2BpF"}
@@ -13,14 +13,29 @@ const STOP_WORDS = new Set([
13
13
  'where', 'why', 'how', 'new',
14
14
  ]);
15
15
  const INTENT_KEYWORDS = [
16
+ // English
16
17
  { pattern: /\b(fix|bug|broken|error|crash)\b/i, intent: 'fix' },
17
18
  { pattern: /\b(change|update|modify|refactor|improve)\b/i, intent: 'modify' },
18
19
  { pattern: /\b(remove|delete|deprecate|drop)\b/i, intent: 'remove' },
19
20
  { pattern: /\b(investigate|research|explore|analyze|query)\b/i, intent: 'investigate' },
21
+ // Korean — `\b` doesn't work at CJK boundaries so we match the word
22
+ // directly. These cover the most common natural-language patterns that
23
+ // Korean developers use when describing proposed changes.
24
+ { pattern: /(수정|버그|오류|에러|고장|깨진|크래시)/, intent: 'fix' },
25
+ { pattern: /(변경|업데이트|개선|리팩토링|개편)/, intent: 'modify' },
26
+ { pattern: /(삭제|제거|폐기|드롭)/, intent: 'remove' },
27
+ { pattern: /(조사|연구|탐색|분석|질의)/, intent: 'investigate' },
20
28
  ];
21
29
  // Matches camelCase or snake_case tokens
22
30
  const ENTITY_PATTERN = /^(?:[a-z]+[A-Z][a-zA-Z]*|[a-z]+_[a-z_]+)$/;
23
31
  const MAX_SUMMARY_LENGTH = 500;
32
+ /**
33
+ * Maximum number of unique feature_terms a query may produce. Pathological
34
+ * 10k-char user inputs would otherwise produce hundreds of search terms,
35
+ * each triggering an O(notes × raw_text.length) lexical scan. Cap keeps
36
+ * retrieval bounded at `MAX_QUERY_TERMS × index_size` work per query.
37
+ */
38
+ const MAX_QUERY_TERMS = 64;
24
39
  /**
25
40
  * Normalize a natural language user request into a structured QueryObject.
26
41
  * Intent detection + term extraction.
@@ -56,27 +71,44 @@ export function normalizeQuery(userRequest, overrideKeywords) {
56
71
  override_keywords: overrideKeywords,
57
72
  };
58
73
  }
59
- const words = extractWords(trimmed);
74
+ // Cap term extraction to the trimmed summary. Users can paste entire
75
+ // design docs into `ows propose` and we don't want each word to become
76
+ // its own lexical search term (which would be O(n_terms × n_notes)).
77
+ // The summary cap is already MAX_SUMMARY_LENGTH chars, so term counts
78
+ // stay bounded; MAX_QUERY_TERMS is a second line of defense against
79
+ // dense token streams (e.g., no whitespace non-English text).
80
+ const words = extractWords(summary);
60
81
  const significantWords = words.filter((w) => !STOP_WORDS.has(w.toLowerCase()) && w.length > 1);
61
82
  const entity_terms = [];
62
83
  const feature_terms = [];
84
+ const seenFeature = new Set();
85
+ const seenEntity = new Set();
63
86
  for (const word of significantWords) {
64
87
  // Skip intent keywords from feature_terms
65
88
  if (isIntentKeyword(word))
66
89
  continue;
67
90
  if (ENTITY_PATTERN.test(word)) {
68
- entity_terms.push(word);
91
+ if (!seenEntity.has(word)) {
92
+ seenEntity.add(word);
93
+ entity_terms.push(word);
94
+ }
69
95
  }
70
96
  else {
71
- feature_terms.push(word.toLowerCase());
97
+ const lowered = word.toLowerCase();
98
+ if (!seenFeature.has(lowered)) {
99
+ seenFeature.add(lowered);
100
+ feature_terms.push(lowered);
101
+ }
72
102
  }
103
+ if (feature_terms.length + entity_terms.length >= MAX_QUERY_TERMS)
104
+ break;
73
105
  }
74
106
  return {
75
107
  intent,
76
108
  summary,
77
- feature_terms: [...new Set(feature_terms)],
109
+ feature_terms,
78
110
  system_terms: [],
79
- entity_terms: [...new Set(entity_terms)],
111
+ entity_terms,
80
112
  status_bias: ['active', 'proposed', 'planned', 'in_progress'],
81
113
  };
82
114
  }
@@ -1 +1 @@
1
- {"version":3,"file":"query-normalizer.js","sourceRoot":"","sources":["../../../../src/core/workflow/propose/query-normalizer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query-normalizer.js","sourceRoot":"","sources":["../../../../src/core/workflow/propose/query-normalizer.ts"],"names":[],"mappings":"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"}
@@ -38,7 +38,15 @@ export interface PlannedPrerequisites {
38
38
  warnings: string[];
39
39
  }
40
40
  export type ProposeAction = 'continued_change' | 'created_change' | 'created_feature_and_change' | 'asked_user';
41
+ /**
42
+ * JSON schema version for ProposeResult shape.
43
+ * Bump this when breaking changes are made to the output format.
44
+ * Consumers (CLI clients, AI agents) should check this to adapt parsing.
45
+ */
46
+ export declare const PROPOSE_RESULT_SCHEMA_VERSION = "1.0.0";
41
47
  export interface ProposeResult {
48
+ /** Schema version for the result JSON. See PROPOSE_RESULT_SCHEMA_VERSION. */
49
+ schema_version?: string;
42
50
  action: ProposeAction;
43
51
  retrieval: RetrievalResult;
44
52
  classification: ClassificationResult;
@@ -54,6 +62,8 @@ export interface ProposeResult {
54
62
  prerequisites: PlannedPrerequisites | null;
55
63
  transitioned_to_planned: boolean;
56
64
  sequencing_warnings: string[];
65
+ /** Project conventions from wiki/00-meta/conventions.md (if present). */
66
+ conventions?: string;
57
67
  }
58
68
  export interface ProposeDeps {
59
69
  buildIndex: (vaultRoot: string) => Promise<VaultIndex> | VaultIndex;
@@ -62,6 +72,11 @@ export interface ProposeDeps {
62
72
  parseNote: (filePath: string) => import('../../parser/types.js').ParseResult;
63
73
  writeFile: (filePath: string, content: string) => void;
64
74
  readFile: (filePath: string) => string;
75
+ /**
76
+ * Atomic exclusive file create (O_CREAT|O_EXCL). Defaults to writeFile if omitted.
77
+ * When provided, used for new Feature/Change notes to prevent concurrent propose races.
78
+ */
79
+ exclusiveCreateFile?: (filePath: string, content: string) => void;
65
80
  }
66
81
  export interface ProposeOptions {
67
82
  vaultRoot: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/workflow/propose/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/workflow/propose/types.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,7 @@
1
- export {};
1
+ /**
2
+ * JSON schema version for ProposeResult shape.
3
+ * Bump this when breaking changes are made to the output format.
4
+ * Consumers (CLI clients, AI agents) should check this to adapt parsing.
5
+ */
6
+ export const PROPOSE_RESULT_SCHEMA_VERSION = '1.0.0';
2
7
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/core/workflow/propose/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/core/workflow/propose/types.ts"],"names":[],"mappings":"AA6DA;;;;GAIG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,OAAO,CAAC"}
@@ -1,7 +1,3 @@
1
- /**
2
- * Query note creator.
3
- * Builds Query note markdown from investigation inputs.
4
- */
5
1
  import type { QueryNoteInput } from './types.js';
6
2
  /**
7
3
  * Create a Query note markdown file from investigation results.
@@ -1 +1 @@
1
- {"version":3,"file":"query-note-creator.d.ts","sourceRoot":"","sources":["../../../../src/core/workflow/query/query-note-creator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAexF"}
1
+ {"version":3,"file":"query-note-creator.d.ts","sourceRoot":"","sources":["../../../../src/core/workflow/query/query-note-creator.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAexF"}