@nielspeter/eess-md 0.3.0 → 0.6.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 (47) hide show
  1. package/README.md +57 -8
  2. package/dist/builders/links.d.ts.map +1 -1
  3. package/dist/builders/links.js +2 -3
  4. package/dist/builders/links.js.map +1 -1
  5. package/dist/builders/pointers.d.ts.map +1 -1
  6. package/dist/builders/pointers.js +2 -3
  7. package/dist/builders/pointers.js.map +1 -1
  8. package/dist/builders/task-items.d.ts.map +1 -1
  9. package/dist/builders/task-items.js +2 -3
  10. package/dist/builders/task-items.js.map +1 -1
  11. package/dist/conditions/pointer-resolve.d.ts +8 -3
  12. package/dist/conditions/pointer-resolve.d.ts.map +1 -1
  13. package/dist/conditions/pointer-resolve.js +80 -35
  14. package/dist/conditions/pointer-resolve.js.map +1 -1
  15. package/dist/corpus.d.ts +10 -3
  16. package/dist/corpus.d.ts.map +1 -1
  17. package/dist/corpus.js +5 -27
  18. package/dist/corpus.js.map +1 -1
  19. package/dist/index.d.ts +6 -0
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +23 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/model/by-document.d.ts +21 -0
  24. package/dist/model/by-document.d.ts.map +1 -0
  25. package/dist/model/by-document.js +19 -0
  26. package/dist/model/by-document.js.map +1 -0
  27. package/dist/model/document.d.ts +1 -1
  28. package/dist/model/document.d.ts.map +1 -1
  29. package/dist/model/links.d.ts.map +1 -1
  30. package/dist/model/links.js +1 -7
  31. package/dist/model/links.js.map +1 -1
  32. package/dist/model/task-items.d.ts.map +1 -1
  33. package/dist/model/task-items.js +1 -7
  34. package/dist/model/task-items.js.map +1 -1
  35. package/dist/model/text-of.d.ts +14 -0
  36. package/dist/model/text-of.d.ts.map +1 -0
  37. package/dist/model/text-of.js +19 -0
  38. package/dist/model/text-of.js.map +1 -0
  39. package/dist/rules/adr.d.ts +8 -0
  40. package/dist/rules/adr.d.ts.map +1 -1
  41. package/dist/rules/adr.js +18 -6
  42. package/dist/rules/adr.js.map +1 -1
  43. package/dist/rules/ledger.d.ts +120 -0
  44. package/dist/rules/ledger.d.ts.map +1 -1
  45. package/dist/rules/ledger.js +255 -41
  46. package/dist/rules/ledger.js.map +1 -1
  47. package/package.json +3 -2
@@ -1,5 +1,7 @@
1
- import { finishPreset } from '@nielspeter/eess';
1
+ import { finishPreset, mergeCollectResults } from '@nielspeter/eess';
2
2
  import { collectTaskItems } from '../model/task-items.js';
3
+ import { docs } from '../builders/docs.js';
4
+ import { taskItems } from '../builders/task-items.js';
3
5
  const DEFAULT_DONE_FOLDERS = ['/completed/', '/fixed/', '/wont-do/', '/delivered/', '/archived/'];
4
6
  const DEFAULT_BOARD_FILES = ['ROADMAP.md', 'BUGS.md', 'REFINEMENT.md', 'SUPPORT.md', 'README.md'];
5
7
  const DEFAULT_STATES = ['Draft', 'Ready', 'Open', 'Done', "Won't-do"];
@@ -74,7 +76,7 @@ function stripFencedCode(s) {
74
76
  * the done-item test and the placement check so the two cannot disagree about
75
77
  * what a document says it is.
76
78
  */
77
- function findState(text, vocabulary) {
79
+ export function findState(text, vocabulary) {
78
80
  const known = stateMatcher(vocabulary);
79
81
  const canonical = (m) => vocabulary.find((s) => s.toLowerCase().replace(/’/g, "'") === m.toLowerCase().replace(/’/g, "'")) ?? m;
80
82
  const lines = stripFencedCode(text).split('\n');
@@ -142,40 +144,203 @@ function headerStateViolation(doc, inDoneFolder, closeInPlace, states, terminalS
142
144
  }
143
145
  return null;
144
146
  }
145
- /** Ledger reconciliation of one done-item: unchecked boxes + the `none`-summary lie. */
146
- function ledgerViolations(doc) {
147
- const out = [];
148
- let anyDeferredDisposedBox = false;
149
- for (const box of collectTaskItems(doc.root)) {
150
- if (box.checked)
151
- continue; // only open boxes are live ledger entries
152
- if (DEFERRED_DISPOSITION_RE.test(box.text))
153
- anyDeferredDisposedBox = true;
154
- if (!DISPOSITION_RE.test(box.text)) {
155
- out.push(v('ledger/silent-open-box', doc, box.line, 'unchecked box with no disposition (done-otherwise / deferred→<home> / dropped-on-purpose / validation-owed)', "silence is not 'nothing deferred' — a done-item with a silently-open box has lost scope"));
147
+ /** A box's disposition is disclosed, or it is a silent open box. */
148
+ function isDisposed(boxText) {
149
+ return DISPOSITION_RE.test(boxText);
150
+ }
151
+ /**
152
+ * Does this document carry at least one open box disposed as `deferred→<home>`?
153
+ *
154
+ * A corruption here (always `false`) is caught by
155
+ * `scripts/nonvacuity/bad-ledger.mjs`'s `completed/0005-deferred-none-lie.md`
156
+ * fixture (bug 0131 round-2 review) — before it existed, no fixture in that
157
+ * corpus carried a `deferred→<home>` box at all, so this function's only
158
+ * "protection" was this repo's own live corpus incidentally carrying one,
159
+ * which would have silently vanished the day that box got resolved.
160
+ */
161
+ function hasDeferredDisposedBox(doc) {
162
+ return collectTaskItems(doc.root).some((box) => !box.checked && DEFERRED_DISPOSITION_RE.test(box.text));
163
+ }
164
+ /**
165
+ * A `none` deferral-summary while the document carries a box disposed as
166
+ * `deferred→<home>` — the summary contradicts the boxes. Absence of a summary
167
+ * is deliberately NOT gated; only a *contradicting* one is.
168
+ */
169
+ function deferredNoneLieViolation(doc) {
170
+ const lines = stripFencedCode(doc.text).split('\n');
171
+ for (let i = 0; i < lines.length; i++) {
172
+ const raw = lines[i] ?? '';
173
+ if (/^\s*>/.test(raw))
174
+ continue;
175
+ const sm = raw.match(DEFERRED_SUMMARY_RE);
176
+ if (sm && /^none\b/i.test((sm[1] ?? '').trim())) {
177
+ return v('ledger/deferred-none-lie', doc, i + 1, "'deferred: none' contradicts a box disposed as deferred→<home>", 'the out-loud summary must reconcile with the box states, not override them');
156
178
  }
157
179
  }
158
- // A `none` deferral-summary while a box carries a defer disposition — the
159
- // summary contradicts the boxes. (Absence of a summary is deliberately NOT gated.)
160
- if (anyDeferredDisposedBox) {
161
- const lines = stripFencedCode(doc.text).split('\n');
162
- for (let i = 0; i < lines.length; i++) {
163
- const raw = lines[i] ?? '';
164
- if (/^\s*>/.test(raw))
165
- continue;
166
- const sm = raw.match(DEFERRED_SUMMARY_RE);
167
- if (sm && /^none\b/i.test((sm[1] ?? '').trim())) {
168
- out.push(v('ledger/deferred-none-lie', doc, i + 1, "'deferred: none' contradicts a box disposed as deferred→<home>", 'the out-loud summary must reconcile with the box states, not override them'));
169
- break;
180
+ return null;
181
+ }
182
+ /** Predicate: not a board/index file (never scanned as an item). */
183
+ function notBoardFile(boardFiles) {
184
+ return {
185
+ description: 'is not a board file',
186
+ test: (doc) => !boardFiles.has(doc.relPath.split('/').pop() ?? doc.relPath),
187
+ };
188
+ }
189
+ /** Predicate: this document is a done-item under the caller's own vocabulary. */
190
+ function isDoneItemPredicate(doneFolders, terminalStates) {
191
+ return {
192
+ description: 'is a done item',
193
+ test: (doc) => isDoneItem(doc, doneFolders, terminalStates),
194
+ };
195
+ }
196
+ /**
197
+ * Predicate: this task item's own document is a done-item.
198
+ *
199
+ * A corruption here (always `false`) is caught not by a purpose-built
200
+ * fixture but as a side effect of `ledger.test.ts`'s pre-existing
201
+ * `flags a silent open box in a done-item (red)` /
202
+ * `passes a done-item whose every open box is disposed (green)` pair, and of
203
+ * `scripts/nonvacuity/bad-ledger.mjs`'s `completed/0001-silent-open-box.md`
204
+ * fixture — both keep a real open box on a real done-item in the corpus, the
205
+ * exact shape `honestyAtClose`'s independent `anyOpenBoxOnADoneItem` peek
206
+ * (see its docstring) needs to diverge from a corrupted `belongsToADoneItem`.
207
+ * Simplifying either fixture to drop that box, even for reasons unrelated to
208
+ * this concern, would silently regress the coverage.
209
+ */
210
+ function belongsToADoneItem(doneFolders, terminalStates) {
211
+ return {
212
+ description: 'belongs to a done item',
213
+ test: (t) => isDoneItem(t.doc, doneFolders, terminalStates),
214
+ };
215
+ }
216
+ /** Condition: the header `State:` line is readable and matches its folder. */
217
+ function headerStateCondition(doneFolders, closeInPlace, states, terminalStates) {
218
+ return {
219
+ description: 'have a readable State: line that matches its folder',
220
+ evaluate(elements, _ctx) {
221
+ const out = [];
222
+ for (const doc of elements) {
223
+ const inDoneFolder = doneFolders.some((seg) => `/${doc.relPath}`.includes(seg));
224
+ const found = headerStateViolation(doc, inDoneFolder, closeInPlace, states, terminalStates);
225
+ if (found)
226
+ out.push(found);
170
227
  }
171
- }
172
- }
173
- return out;
228
+ return out;
229
+ },
230
+ };
231
+ }
232
+ /** Condition: an open box on a done-item carries a disposition token. */
233
+ function dispositionCondition() {
234
+ return {
235
+ description: 'carry a disposition token (done-otherwise / deferred→<home> / dropped-on-purpose / validation-owed)',
236
+ evaluate(elements, _ctx) {
237
+ return elements
238
+ .filter((t) => !isDisposed(t.text))
239
+ .map((t) => v('ledger/silent-open-box', t.doc, t.line, 'unchecked box with no disposition (done-otherwise / deferred→<home> / dropped-on-purpose / validation-owed)', "silence is not 'nothing deferred' — a done-item with a silently-open box has lost scope"));
240
+ },
241
+ };
242
+ }
243
+ /** Condition: a document with a deferred-disposed box does not lie in its summary. */
244
+ function deferredNoneLieCondition() {
245
+ return {
246
+ description: "not summarize deferrals as 'none' while a box is deferred→<home>",
247
+ evaluate(elements, _ctx) {
248
+ const out = [];
249
+ for (const doc of elements) {
250
+ const found = deferredNoneLieViolation(doc);
251
+ if (found)
252
+ out.push(found);
253
+ }
254
+ return out;
255
+ },
256
+ };
174
257
  }
175
258
  /**
176
259
  * Run the honesty-at-close gate over a corpus. Throws `ArchRuleError` on any
177
260
  * finding. Placement is checked on every item; ledger reconciliation only on
178
261
  * done-items (the inverse of the frozen-folder exemption).
262
+ *
263
+ * Three builder-based rules, merged: header state↔folder (`docs()`), silent
264
+ * open boxes (`taskItems()`, filtered to done-items), and the deferred-none
265
+ * lie (`docs()`, filtered to done-items carrying a deferred-disposed box).
266
+ *
267
+ * **Emptiness declarations, and why each is shaped the way it is** (bug 0131
268
+ * follow-up, six-persona review before this landed): `.expectEmpty()` is only
269
+ * a sound fail-closed gate when the thing that decides *whether* to declare
270
+ * it is independent of the predicate the declaration would otherwise let
271
+ * pass silently. Two designs were tried and rejected for this reason:
272
+ *
273
+ * 1. Peeking the exact same selection each rule gates (`.select()` on
274
+ * `openBoxesOnDoneItems`/`doneItemsWithDeferredBox` themselves) before
275
+ * conditionally declaring `.expectEmpty()`. This *reads* as a live check
276
+ * but is circular: the peek and the real run filter the identical
277
+ * elements through the identical predicates with nothing in between, so
278
+ * the declaration is always self-consistent and can never expire — it
279
+ * provides zero protection against exactly the corruption class ADR-010
280
+ * exists to catch, for either rule.
281
+ * 2. Gating on `terminalStates.length === 0` alone. Correct for the
282
+ * always-structurally-empty `proposals` lane, but too narrow: it doesn't
283
+ * cover a plan/bug lane's own test fixtures that legitimately have zero
284
+ * done-items in a given run (e.g. a single-document fixture testing an
285
+ * unrelated placement rule).
286
+ * 3. Gating both rules on one coarse "any done item exists in this corpus"
287
+ * signal. Independent of the right predicate, but the wrong *scope*: most
288
+ * done items carry zero open boxes and zero deferred boxes — that's the
289
+ * normal, healthy, permanent state for a reconciled item, not a corner
290
+ * case — so "a done item exists" routinely holds while the real selection
291
+ * (open boxes on it, or a deferred box on it) is legitimately empty. That
292
+ * false-positived on the project's own `fixed/green-bug-closed.md` fixture
293
+ * (a done item with one already-checked box, no open boxes at all).
294
+ *
295
+ * The fix: peek `openTaskItems` once (`taskItems(corpus).that().areOpen()`,
296
+ * a purely structural filter, no done-item check), then derive each rule's
297
+ * own emptiness signal from *that*, narrowed to what the rule actually
298
+ * selects, while staying independent of the specific predicate/function
299
+ * being protected:
300
+ *
301
+ * - `silentOpenBoxViolations` is gated by `belongsToADoneItem`. Its peek
302
+ * (`anyOpenBoxOnADoneItem`) calls `isDoneItem` on `openTaskItems` directly
303
+ * — not through `belongsToADoneItem` — so a corruption of that predicate
304
+ * specifically doesn't also blind the peek.
305
+ * - `deferredLieViolations`'s selection adds `hasDeferredDisposedBox` (which
306
+ * walks each done document's own mdast via a separate
307
+ * `collectTaskItems(doc.root)` call) on top of `isDoneItemPredicate`. Its
308
+ * peek (`anyDeferredDisposedBoxOnADoneItem`) instead re-tests
309
+ * `openTaskItems` (a different traversal) against the same
310
+ * `DEFERRED_DISPOSITION_RE` constant `hasDeferredDisposedBox` uses — so a
311
+ * corruption of `hasDeferredDisposedBox`'s own body doesn't blind this
312
+ * peek either.
313
+ *
314
+ * Both peeks share `isDoneItem` and the underlying `collectTaskItems` box
315
+ * collection with the very selections they protect — a corruption isolated to
316
+ * either would defeat both peek and real selection identically, uniformly,
317
+ * for every lane. This is a real residual gap, not a narrow one: verified by
318
+ * sabotaging `isDoneItem` against this repo's own real corpus during bug
319
+ * 0131's round-2 review, which produced **zero violations, exit 0** — not a
320
+ * partial miss. `headerStateCondition` does **not** independently backstop
321
+ * this (an earlier draft of this comment claimed it "would likely also
322
+ * surface through `headerViolations`" — false: `headerStateCondition` never
323
+ * calls `isDoneItem`, it recomputes the folder half of the same determination
324
+ * inline, so it only catches a corruption if a live state/folder mismatch
325
+ * already exists in the scanned corpus, which it usually doesn't).
326
+ *
327
+ * `honestyAtClose` itself can't close this gap generically — a corpus with
328
+ * zero done-items is legitimate on a freshly-bootstrapped lane's first day,
329
+ * so a library-level "zero done-items across the whole call is always wrong"
330
+ * assertion would be exactly the false-positive class `expectEmptyHeaders`
331
+ * exists to avoid. What closes it is caller knowledge: **a corpus with an
332
+ * established history should assert its own "zero done-items is never
333
+ * legitimate here" claim on top.** `scripts/check-ledger.mjs` (this repo's
334
+ * own wiring) does exactly that — 0 done-items summed across every lane fails
335
+ * the build, because this repo has carried done-items in every
336
+ * terminal-states lane for its entire history. A `kit/`-seeded caller with no
337
+ * history yet should not copy that assertion verbatim; it becomes true, and
338
+ * worth adding, once the corpus has one.
339
+ *
340
+ * `headerViolations` gets no computed declaration — nothing in the corpus
341
+ * can tell "no non-board documents authored yet" apart from "the selector
342
+ * broke." Callers who know the former is legitimate (a freshly-bootstrapped
343
+ * lane) opt in explicitly via {@link HonestyAtCloseOptions.expectEmptyHeaders}.
179
344
  */
180
345
  export function honestyAtClose(corpus, options = {}) {
181
346
  const doneFolders = options.doneFolders ?? DEFAULT_DONE_FOLDERS;
@@ -183,19 +348,66 @@ export function honestyAtClose(corpus, options = {}) {
183
348
  const closeInPlace = options.closeInPlace ?? false;
184
349
  const states = options.states ?? DEFAULT_STATES;
185
350
  const terminalStates = options.terminalStates ?? DEFAULT_TERMINAL_STATES;
186
- const violations = [];
187
- for (const doc of corpus.documents()) {
188
- const base = doc.relPath.split('/').pop() ?? doc.relPath;
189
- if (boardFiles.has(base))
190
- continue;
191
- const inDoneFolder = doneFolders.some((seg) => `/${doc.relPath}`.includes(seg));
192
- const header = headerStateViolation(doc, inDoneFolder, closeInPlace, states, terminalStates);
193
- if (header)
194
- violations.push(header);
195
- if (isDoneItem(doc, doneFolders, terminalStates))
196
- violations.push(...ledgerViolations(doc));
197
- }
198
- return finishPreset(violations, options);
351
+ const expectEmptyHeaders = options.expectEmptyHeaders ?? false;
352
+ let headerRule = docs(corpus)
353
+ .that()
354
+ .satisfy(notBoardFile(boardFiles))
355
+ .should()
356
+ .satisfy(headerStateCondition(doneFolders, closeInPlace, states, terminalStates));
357
+ if (expectEmptyHeaders)
358
+ headerRule = headerRule.expectEmpty();
359
+ const headerViolations = headerRule.violations();
360
+ // Open task items, collected once and reused for both peeks below. "Any
361
+ // done item exists" is too coarse a signal on its own — most done items
362
+ // legitimately carry zero open boxes and zero deferred boxes, so gating on
363
+ // it alone false-positives on the common, healthy case (a done item with
364
+ // nothing outstanding). Each peek below narrows to what its own rule
365
+ // actually selects, while staying independent of the predicate/function
366
+ // that rule uses to select it.
367
+ const openTaskItems = taskItems(corpus)
368
+ .that()
369
+ .areOpen()
370
+ .select({
371
+ label: 'open task items',
372
+ identify: (t) => ({ name: t.doc.relPath, file: t.doc.file, line: t.line }),
373
+ }).elements;
374
+ // Independent of `belongsToADoneItem`: calls `isDoneItem` directly rather
375
+ // than through that predicate object, so a corruption of
376
+ // `belongsToADoneItem` itself doesn't also blind this peek.
377
+ const anyOpenBoxOnADoneItem = openTaskItems.some((t) => isDoneItem(t.doc, doneFolders, terminalStates));
378
+ let silentBoxRule = taskItems(corpus)
379
+ .that()
380
+ .areOpen()
381
+ .satisfy(belongsToADoneItem(doneFolders, terminalStates))
382
+ .should()
383
+ .satisfy(dispositionCondition());
384
+ if (!anyOpenBoxOnADoneItem)
385
+ silentBoxRule = silentBoxRule.expectEmpty();
386
+ const silentOpenBoxViolations = silentBoxRule.violations();
387
+ // Independent of `hasDeferredDisposedBox`: that function walks each done
388
+ // document's own mdast via a separate `collectTaskItems(doc.root)` call:
389
+ // this peek instead reuses the flat, already-collected `openTaskItems` list
390
+ // (from the `taskItems()` builder's own traversal) and the same
391
+ // `DEFERRED_DISPOSITION_RE` constant `hasDeferredDisposedBox` tests against
392
+ // — two different collection paths converging on the one shared pattern,
393
+ // so a corruption of `hasDeferredDisposedBox`'s own body doesn't blind this
394
+ // peek too.
395
+ const anyDeferredDisposedBoxOnADoneItem = openTaskItems.some((t) => isDoneItem(t.doc, doneFolders, terminalStates) && DEFERRED_DISPOSITION_RE.test(t.text));
396
+ let deferredLieRule = docs(corpus)
397
+ .that()
398
+ .satisfy(isDoneItemPredicate(doneFolders, terminalStates))
399
+ .satisfy({
400
+ description: 'carries a box disposed as deferred→<home>',
401
+ test: (doc) => hasDeferredDisposedBox(doc),
402
+ })
403
+ .should()
404
+ .satisfy(deferredNoneLieCondition());
405
+ if (!anyDeferredDisposedBoxOnADoneItem)
406
+ deferredLieRule = deferredLieRule.expectEmpty();
407
+ const deferredLieViolations = deferredLieRule.violations();
408
+ // Merged, not spread: all three are receipts, and a spread would discard every
409
+ // `examined` this preset just earned — the denominator `check:ledger` prints.
410
+ return finishPreset(mergeCollectResults([headerViolations, silentOpenBoxViolations, deferredLieViolations]), options);
199
411
  }
200
412
  /**
201
413
  * The denominator, computed by the preset itself.
@@ -209,6 +421,8 @@ export function honestyAtClose(corpus, options = {}) {
209
421
  * Callers must not re-derive it. `check-ledger.mjs` did, with a copy of the very
210
422
  * expression 0119 removed, and its copy disagreed with the preset on 56 of 56
211
423
  * records while heading a section captioned "so a green is provably non-vacuous".
424
+ *
425
+ * Pure read-only counting, not a rule — no evidence gate applies here.
212
426
  */
213
427
  export function ledgerStats(corpus, options = {}) {
214
428
  const doneFolders = options.doneFolders ?? DEFAULT_DONE_FOLDERS;
@@ -1 +1 @@
1
- {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../src/rules/ledger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../src/rules/ledger.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nielspeter/eess-md",
3
- "version": "0.3.0",
3
+ "version": "0.6.0",
4
4
  "description": "Architecture testing for a Markdown corpus — the Markdown dialect of the eess family. Links resolve, code pointers ground, ADRs declare enforcement.",
5
5
  "type": "module",
6
6
  "exports": {
@@ -34,6 +34,7 @@
34
34
  "license": "MIT",
35
35
  "scripts": {
36
36
  "prepublishOnly": "npm run build",
37
+ "prebuild": "rm -rf dist",
37
38
  "build": "tsc -p tsconfig.build.json",
38
39
  "test": "vitest run",
39
40
  "test:watch": "vitest",
@@ -48,7 +49,7 @@
48
49
  "eess"
49
50
  ],
50
51
  "dependencies": {
51
- "@nielspeter/eess": "^0.2.2",
52
+ "@nielspeter/eess": "^0.5.0",
52
53
  "mdast-util-from-markdown": "^2.0.3",
53
54
  "mdast-util-gfm": "^3.1.0",
54
55
  "micromark-extension-gfm": "^3.0.0",