mustflow 2.23.0 → 2.24.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/README.md +12 -2
  2. package/dist/cli/commands/adapters.js +11 -9
  3. package/dist/cli/commands/api.js +263 -113
  4. package/dist/cli/commands/check.js +11 -7
  5. package/dist/cli/commands/classify.js +16 -42
  6. package/dist/cli/commands/context.js +18 -31
  7. package/dist/cli/commands/contract-lint.js +12 -7
  8. package/dist/cli/commands/dashboard.js +65 -114
  9. package/dist/cli/commands/docs.js +43 -26
  10. package/dist/cli/commands/doctor.js +11 -7
  11. package/dist/cli/commands/evidence.js +642 -0
  12. package/dist/cli/commands/explain-verify.js +1 -59
  13. package/dist/cli/commands/explain.js +84 -36
  14. package/dist/cli/commands/handoff.js +13 -17
  15. package/dist/cli/commands/impact.js +14 -20
  16. package/dist/cli/commands/index.js +15 -9
  17. package/dist/cli/commands/init.js +56 -70
  18. package/dist/cli/commands/line-endings.js +15 -9
  19. package/dist/cli/commands/map.js +30 -42
  20. package/dist/cli/commands/next.js +300 -0
  21. package/dist/cli/commands/onboard.js +136 -0
  22. package/dist/cli/commands/run.js +47 -42
  23. package/dist/cli/commands/search.js +43 -69
  24. package/dist/cli/commands/status.js +9 -6
  25. package/dist/cli/commands/update.js +16 -10
  26. package/dist/cli/commands/upgrade.js +9 -6
  27. package/dist/cli/commands/verify/args.js +55 -249
  28. package/dist/cli/commands/verify.js +2 -1
  29. package/dist/cli/commands/version-sources.js +9 -6
  30. package/dist/cli/commands/version.js +9 -6
  31. package/dist/cli/commands/workspace.js +564 -0
  32. package/dist/cli/i18n/en.js +60 -1
  33. package/dist/cli/i18n/es.js +60 -1
  34. package/dist/cli/i18n/fr.js +60 -1
  35. package/dist/cli/i18n/hi.js +60 -1
  36. package/dist/cli/i18n/ko.js +60 -1
  37. package/dist/cli/i18n/zh.js +60 -1
  38. package/dist/cli/index.js +28 -25
  39. package/dist/cli/lib/agent-context.js +8 -9
  40. package/dist/cli/lib/command-registry.js +24 -0
  41. package/dist/cli/lib/dashboard-html/client-script.js +1 -1
  42. package/dist/cli/lib/local-index/database-path.js +5 -0
  43. package/dist/cli/lib/local-index/database-read.js +88 -0
  44. package/dist/cli/lib/local-index/effect-graph-read-model.js +112 -0
  45. package/dist/cli/lib/local-index/freshness.js +60 -0
  46. package/dist/cli/lib/local-index/index.js +12 -1866
  47. package/dist/cli/lib/local-index/path-surface-read-model.js +134 -0
  48. package/dist/cli/lib/local-index/populate.js +474 -0
  49. package/dist/cli/lib/local-index/schema.js +413 -0
  50. package/dist/cli/lib/local-index/search-read-model.js +533 -0
  51. package/dist/cli/lib/local-index/search-text.js +79 -0
  52. package/dist/cli/lib/option-parser.js +93 -0
  53. package/dist/cli/lib/repo-map.js +2 -2
  54. package/dist/cli/lib/run-plan.js +5 -22
  55. package/dist/core/change-verification.js +11 -5
  56. package/dist/core/command-effects.js +1 -3
  57. package/dist/core/command-intent-eligibility.js +14 -0
  58. package/dist/core/command-preconditions.js +8 -4
  59. package/dist/core/command-run-constraints.js +43 -0
  60. package/dist/core/public-json-contracts.js +57 -0
  61. package/dist/core/test-selection.js +8 -2
  62. package/dist/core/verification-plan.js +32 -4
  63. package/package.json +1 -1
  64. package/schemas/README.md +16 -0
  65. package/schemas/api-serve-response.schema.json +89 -0
  66. package/schemas/change-verification-report.schema.json +4 -1
  67. package/schemas/contract-lint-report.schema.json +1 -0
  68. package/schemas/evidence-report.schema.json +287 -0
  69. package/schemas/explain-report.schema.json +4 -0
  70. package/schemas/next-report.schema.json +121 -0
  71. package/schemas/onboard-commands-report.schema.json +100 -0
  72. package/schemas/workspace-command-catalog.schema.json +172 -0
  73. package/schemas/workspace-status.schema.json +141 -0
  74. package/schemas/workspace-verification-plan.schema.json +195 -0
  75. package/templates/default/manifest.toml +1 -1
@@ -0,0 +1,413 @@
1
+ import { SEARCH_BACKEND_FTS5 } from './constants.js';
2
+ export function createSchema(database, capabilities) {
3
+ database.run(`
4
+ CREATE TABLE metadata (
5
+ key TEXT PRIMARY KEY,
6
+ value TEXT NOT NULL
7
+ );
8
+
9
+ CREATE TABLE indexed_files (
10
+ path TEXT PRIMARY KEY,
11
+ source_scope TEXT NOT NULL,
12
+ size_bytes INTEGER NOT NULL,
13
+ mtime_ms INTEGER NOT NULL,
14
+ content_hash TEXT NOT NULL,
15
+ indexed_at TEXT NOT NULL,
16
+ index_mode TEXT NOT NULL,
17
+ parser_version TEXT NOT NULL
18
+ );
19
+
20
+ CREATE TABLE documents (
21
+ path TEXT PRIMARY KEY,
22
+ type TEXT NOT NULL,
23
+ title TEXT NOT NULL,
24
+ locale TEXT,
25
+ revision INTEGER,
26
+ content_hash TEXT NOT NULL,
27
+ content_snippet TEXT NOT NULL
28
+ );
29
+
30
+ CREATE TABLE sections (
31
+ document_path TEXT NOT NULL,
32
+ ordinal INTEGER NOT NULL,
33
+ heading TEXT NOT NULL,
34
+ PRIMARY KEY (document_path, ordinal)
35
+ );
36
+
37
+ CREATE TABLE document_terms (
38
+ document_path TEXT NOT NULL,
39
+ term TEXT NOT NULL,
40
+ source TEXT NOT NULL,
41
+ PRIMARY KEY (document_path, term, source)
42
+ );
43
+
44
+ CREATE TABLE search_ngrams (
45
+ target_kind TEXT NOT NULL,
46
+ target_key TEXT NOT NULL,
47
+ gram TEXT NOT NULL,
48
+ source TEXT NOT NULL,
49
+ PRIMARY KEY (target_kind, target_key, gram, source)
50
+ );
51
+
52
+ CREATE INDEX search_ngrams_lookup ON search_ngrams(target_kind, gram, target_key);
53
+
54
+ CREATE TABLE skills (
55
+ name TEXT PRIMARY KEY,
56
+ path TEXT NOT NULL,
57
+ title TEXT NOT NULL
58
+ );
59
+
60
+ CREATE TABLE skill_routes (
61
+ skill_name TEXT NOT NULL,
62
+ skill_path TEXT NOT NULL,
63
+ trigger TEXT NOT NULL,
64
+ required_input TEXT NOT NULL,
65
+ edit_scope TEXT NOT NULL,
66
+ risk TEXT NOT NULL,
67
+ verification_intents TEXT NOT NULL,
68
+ expected_output TEXT NOT NULL,
69
+ PRIMARY KEY (skill_name, trigger)
70
+ );
71
+
72
+ CREATE TABLE command_intents (
73
+ name TEXT PRIMARY KEY,
74
+ status TEXT NOT NULL,
75
+ lifecycle TEXT,
76
+ run_policy TEXT,
77
+ description TEXT
78
+ );
79
+
80
+ CREATE TABLE command_effects (
81
+ intent TEXT NOT NULL,
82
+ source TEXT NOT NULL,
83
+ access TEXT NOT NULL,
84
+ mode TEXT NOT NULL,
85
+ path TEXT,
86
+ lock TEXT NOT NULL,
87
+ concurrency TEXT NOT NULL
88
+ );
89
+
90
+ CREATE VIEW command_write_locks AS
91
+ SELECT
92
+ intent,
93
+ lock,
94
+ group_concat(DISTINCT path) AS paths,
95
+ group_concat(DISTINCT mode) AS modes,
96
+ group_concat(DISTINCT source) AS sources,
97
+ group_concat(DISTINCT concurrency) AS concurrencies,
98
+ count(*) AS effect_count
99
+ FROM command_effects
100
+ WHERE access = 'write'
101
+ GROUP BY intent, lock;
102
+
103
+ CREATE VIEW command_lock_conflicts AS
104
+ SELECT
105
+ a.intent AS left_intent,
106
+ b.intent AS right_intent,
107
+ a.lock AS lock,
108
+ group_concat(DISTINCT a.path) AS left_paths,
109
+ group_concat(DISTINCT b.path) AS right_paths,
110
+ group_concat(DISTINCT a.mode) AS left_modes,
111
+ group_concat(DISTINCT b.mode) AS right_modes,
112
+ group_concat(DISTINCT a.concurrency) AS left_concurrencies,
113
+ group_concat(DISTINCT b.concurrency) AS right_concurrencies
114
+ FROM command_effects a
115
+ JOIN command_effects b
116
+ ON a.lock = b.lock
117
+ AND a.intent < b.intent
118
+ WHERE
119
+ a.access = 'write'
120
+ OR b.access = 'write'
121
+ OR a.concurrency = 'exclusive'
122
+ OR b.concurrency = 'exclusive'
123
+ OR a.mode = 'delete_recreate'
124
+ OR b.mode = 'delete_recreate'
125
+ GROUP BY a.intent, b.intent, a.lock;
126
+
127
+ CREATE TABLE path_surfaces (
128
+ rule_id TEXT PRIMARY KEY,
129
+ pattern_kind TEXT NOT NULL,
130
+ pattern TEXT NOT NULL,
131
+ pattern_flags TEXT NOT NULL,
132
+ surface_kind TEXT NOT NULL,
133
+ category TEXT NOT NULL,
134
+ is_public_surface INTEGER NOT NULL,
135
+ update_policy TEXT NOT NULL
136
+ );
137
+
138
+ CREATE TABLE path_surface_reasons (
139
+ rule_id TEXT NOT NULL,
140
+ reason_kind TEXT NOT NULL,
141
+ reason TEXT NOT NULL,
142
+ ordinal INTEGER NOT NULL,
143
+ PRIMARY KEY (rule_id, reason_kind, reason)
144
+ );
145
+
146
+ CREATE TABLE source_anchors (
147
+ id TEXT PRIMARY KEY,
148
+ path TEXT NOT NULL,
149
+ line_start INTEGER NOT NULL,
150
+ purpose TEXT,
151
+ search_terms TEXT NOT NULL,
152
+ invariant TEXT,
153
+ risk TEXT NOT NULL,
154
+ navigation_only INTEGER NOT NULL,
155
+ can_instruct_agent INTEGER NOT NULL
156
+ );
157
+
158
+ CREATE TABLE source_anchor_fingerprints (
159
+ anchor_id TEXT PRIMARY KEY,
160
+ path TEXT NOT NULL,
161
+ line_start INTEGER NOT NULL,
162
+ anchor_metadata_hash TEXT NOT NULL,
163
+ anchor_text_hash TEXT NOT NULL,
164
+ context_hash TEXT NOT NULL,
165
+ search_terms_hash TEXT,
166
+ invariant_hash TEXT,
167
+ risk_hash TEXT NOT NULL,
168
+ symbol_kind TEXT NOT NULL,
169
+ symbol_name TEXT,
170
+ symbol_exported INTEGER NOT NULL,
171
+ signature_hash TEXT,
172
+ body_hash TEXT,
173
+ symbol_start_line INTEGER,
174
+ symbol_end_line INTEGER
175
+ );
176
+
177
+ CREATE TABLE source_anchor_status (
178
+ anchor_id TEXT PRIMARY KEY,
179
+ status TEXT NOT NULL,
180
+ confidence REAL NOT NULL,
181
+ identity_signal TEXT NOT NULL,
182
+ location_signal TEXT NOT NULL,
183
+ symbol_signal TEXT NOT NULL,
184
+ body_signal TEXT NOT NULL,
185
+ metadata_signal TEXT NOT NULL,
186
+ semantic_signal TEXT NOT NULL,
187
+ risk_signal TEXT NOT NULL,
188
+ navigation_only INTEGER NOT NULL,
189
+ can_instruct_agent INTEGER NOT NULL
190
+ );
191
+
192
+ CREATE TABLE verification_evidence_summaries (
193
+ source_path TEXT PRIMARY KEY,
194
+ source_hash TEXT NOT NULL,
195
+ command TEXT NOT NULL,
196
+ kind TEXT NOT NULL,
197
+ status TEXT NOT NULL,
198
+ run_dir TEXT,
199
+ manifest_path TEXT,
200
+ verification_plan_id TEXT,
201
+ completion_status TEXT,
202
+ primary_reason TEXT,
203
+ matched_intents INTEGER NOT NULL,
204
+ ran_intents INTEGER NOT NULL,
205
+ passed_intents INTEGER NOT NULL,
206
+ failed_intents INTEGER NOT NULL,
207
+ skipped_intents INTEGER NOT NULL,
208
+ receipt_count INTEGER NOT NULL,
209
+ coverage_count INTEGER NOT NULL,
210
+ remaining_risk_count INTEGER NOT NULL,
211
+ failure_fingerprint TEXT
212
+ );
213
+
214
+ CREATE TABLE verification_plans (
215
+ plan_id TEXT PRIMARY KEY,
216
+ source_path TEXT NOT NULL,
217
+ classification_hash TEXT,
218
+ command_contract_hash TEXT,
219
+ selected_intents_hash TEXT,
220
+ created_at TEXT,
221
+ source_hash TEXT NOT NULL
222
+ );
223
+
224
+ CREATE TABLE acceptance_criteria (
225
+ criterion_id TEXT NOT NULL,
226
+ plan_id TEXT NOT NULL,
227
+ source TEXT NOT NULL,
228
+ statement_hash TEXT,
229
+ reason TEXT,
230
+ surface TEXT,
231
+ path_hash TEXT,
232
+ PRIMARY KEY (plan_id, criterion_id)
233
+ );
234
+
235
+ CREATE TABLE criterion_coverage (
236
+ criterion_id TEXT NOT NULL,
237
+ plan_id TEXT NOT NULL,
238
+ status TEXT NOT NULL,
239
+ receipt_count INTEGER NOT NULL,
240
+ gap_count INTEGER NOT NULL,
241
+ risk_count INTEGER NOT NULL,
242
+ PRIMARY KEY (plan_id, criterion_id)
243
+ );
244
+
245
+ CREATE TABLE verification_receipt_summaries (
246
+ source_path TEXT NOT NULL,
247
+ ordinal INTEGER NOT NULL,
248
+ intent TEXT,
249
+ status TEXT NOT NULL,
250
+ skipped INTEGER NOT NULL,
251
+ verification_plan_id TEXT,
252
+ receipt_path TEXT,
253
+ receipt_sha256 TEXT,
254
+ PRIMARY KEY (source_path, ordinal)
255
+ );
256
+
257
+ CREATE TABLE command_receipt_summaries (
258
+ receipt_hash TEXT NOT NULL,
259
+ plan_id TEXT NOT NULL,
260
+ intent TEXT,
261
+ status TEXT NOT NULL,
262
+ command_fingerprint TEXT,
263
+ contract_fingerprint TEXT,
264
+ current_state_hash TEXT,
265
+ write_drift_status TEXT,
266
+ PRIMARY KEY (plan_id, receipt_hash)
267
+ );
268
+
269
+ CREATE TABLE verification_coverage_states (
270
+ source_path TEXT NOT NULL,
271
+ criterion_id TEXT NOT NULL,
272
+ source TEXT NOT NULL,
273
+ status TEXT NOT NULL,
274
+ requirement_reason TEXT,
275
+ intents TEXT NOT NULL,
276
+ receipt_count INTEGER NOT NULL,
277
+ gap_count INTEGER NOT NULL,
278
+ source_anchor_count INTEGER NOT NULL,
279
+ PRIMARY KEY (source_path, criterion_id)
280
+ );
281
+
282
+ CREATE TABLE verification_risk_signals (
283
+ source_path TEXT NOT NULL,
284
+ ordinal INTEGER NOT NULL,
285
+ code TEXT NOT NULL,
286
+ severity TEXT NOT NULL,
287
+ detail_hash TEXT NOT NULL,
288
+ PRIMARY KEY (source_path, ordinal)
289
+ );
290
+
291
+ CREATE TABLE validation_ratchet_signals (
292
+ signal_id TEXT PRIMARY KEY,
293
+ plan_id TEXT,
294
+ code TEXT NOT NULL,
295
+ severity TEXT NOT NULL,
296
+ path_hash TEXT NOT NULL,
297
+ before_hash TEXT,
298
+ after_hash TEXT
299
+ );
300
+
301
+ CREATE TABLE completion_verdict_summaries (
302
+ claim_id TEXT PRIMARY KEY,
303
+ plan_id TEXT NOT NULL,
304
+ status TEXT NOT NULL,
305
+ primary_reason TEXT,
306
+ risk_count INTEGER NOT NULL,
307
+ contradiction_count INTEGER NOT NULL,
308
+ blocker_count INTEGER NOT NULL
309
+ );
310
+
311
+ CREATE TABLE repro_routes (
312
+ route_id TEXT PRIMARY KEY,
313
+ task_hash TEXT NOT NULL,
314
+ route_digest TEXT,
315
+ route_kind TEXT,
316
+ failure_oracle_hash TEXT
317
+ );
318
+
319
+ CREATE TABLE repro_observations (
320
+ route_id TEXT NOT NULL,
321
+ phase TEXT NOT NULL,
322
+ outcome TEXT,
323
+ receipt_hash TEXT,
324
+ diagnostic_fingerprint TEXT NOT NULL,
325
+ PRIMARY KEY (route_id, phase)
326
+ );
327
+
328
+ CREATE TABLE failure_fingerprints (
329
+ fingerprint TEXT PRIMARY KEY,
330
+ plan_id TEXT,
331
+ failed_intents_hash TEXT,
332
+ risk_codes_hash TEXT,
333
+ seen_count INTEGER NOT NULL,
334
+ first_seen_at TEXT,
335
+ last_seen_at TEXT
336
+ );
337
+
338
+ CREATE TABLE verification_failure_fingerprints (
339
+ source_path TEXT NOT NULL,
340
+ fingerprint TEXT NOT NULL,
341
+ verification_plan_id TEXT,
342
+ status TEXT NOT NULL,
343
+ failed_intents TEXT NOT NULL,
344
+ primary_reason TEXT,
345
+ failed_intents_hash TEXT,
346
+ risk_codes_hash TEXT,
347
+ affected_surfaces_hash TEXT,
348
+ first_seen_at TEXT,
349
+ last_seen_at TEXT,
350
+ seen_count INTEGER NOT NULL,
351
+ requires_new_evidence INTEGER NOT NULL,
352
+ PRIMARY KEY (source_path, fingerprint)
353
+ );
354
+
355
+ CREATE TABLE source_anchor_risk_signals (
356
+ anchor_id TEXT PRIMARY KEY,
357
+ path_hash TEXT NOT NULL,
358
+ status TEXT NOT NULL,
359
+ risk_signal TEXT NOT NULL,
360
+ confidence REAL NOT NULL,
361
+ navigation_only INTEGER NOT NULL,
362
+ can_instruct_agent INTEGER NOT NULL
363
+ );
364
+ `);
365
+ if (capabilities.backend === SEARCH_BACKEND_FTS5) {
366
+ database.run(`
367
+ CREATE VIRTUAL TABLE search_documents_fts USING fts5(
368
+ path UNINDEXED,
369
+ type UNINDEXED,
370
+ title,
371
+ sections,
372
+ terms,
373
+ snippet
374
+ );
375
+
376
+ CREATE VIRTUAL TABLE search_skills_fts USING fts5(
377
+ name UNINDEXED,
378
+ path UNINDEXED,
379
+ title
380
+ );
381
+
382
+ CREATE VIRTUAL TABLE search_skill_routes_fts USING fts5(
383
+ route_key UNINDEXED,
384
+ skill_name UNINDEXED,
385
+ skill_path UNINDEXED,
386
+ trigger,
387
+ required_input,
388
+ edit_scope,
389
+ risk,
390
+ verification_intents,
391
+ expected_output
392
+ );
393
+
394
+ CREATE VIRTUAL TABLE search_command_intents_fts USING fts5(
395
+ name UNINDEXED,
396
+ status UNINDEXED,
397
+ lifecycle UNINDEXED,
398
+ run_policy UNINDEXED,
399
+ description,
400
+ effects
401
+ );
402
+
403
+ CREATE VIRTUAL TABLE search_source_anchors_fts USING fts5(
404
+ id UNINDEXED,
405
+ path UNINDEXED,
406
+ purpose,
407
+ search_terms,
408
+ invariant,
409
+ risk
410
+ );
411
+ `);
412
+ }
413
+ }