@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.
- package/README.md +57 -8
- package/dist/builders/links.d.ts.map +1 -1
- package/dist/builders/links.js +2 -3
- package/dist/builders/links.js.map +1 -1
- package/dist/builders/pointers.d.ts.map +1 -1
- package/dist/builders/pointers.js +2 -3
- package/dist/builders/pointers.js.map +1 -1
- package/dist/builders/task-items.d.ts.map +1 -1
- package/dist/builders/task-items.js +2 -3
- package/dist/builders/task-items.js.map +1 -1
- package/dist/conditions/pointer-resolve.d.ts +8 -3
- package/dist/conditions/pointer-resolve.d.ts.map +1 -1
- package/dist/conditions/pointer-resolve.js +80 -35
- package/dist/conditions/pointer-resolve.js.map +1 -1
- package/dist/corpus.d.ts +10 -3
- package/dist/corpus.d.ts.map +1 -1
- package/dist/corpus.js +5 -27
- package/dist/corpus.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -1
- package/dist/model/by-document.d.ts +21 -0
- package/dist/model/by-document.d.ts.map +1 -0
- package/dist/model/by-document.js +19 -0
- package/dist/model/by-document.js.map +1 -0
- package/dist/model/document.d.ts +1 -1
- package/dist/model/document.d.ts.map +1 -1
- package/dist/model/links.d.ts.map +1 -1
- package/dist/model/links.js +1 -7
- package/dist/model/links.js.map +1 -1
- package/dist/model/task-items.d.ts.map +1 -1
- package/dist/model/task-items.js +1 -7
- package/dist/model/task-items.js.map +1 -1
- package/dist/model/text-of.d.ts +14 -0
- package/dist/model/text-of.d.ts.map +1 -0
- package/dist/model/text-of.js +19 -0
- package/dist/model/text-of.js.map +1 -0
- package/dist/rules/adr.d.ts +8 -0
- package/dist/rules/adr.d.ts.map +1 -1
- package/dist/rules/adr.js +18 -6
- package/dist/rules/adr.js.map +1 -1
- package/dist/rules/ledger.d.ts +120 -0
- package/dist/rules/ledger.d.ts.map +1 -1
- package/dist/rules/ledger.js +255 -41
- package/dist/rules/ledger.js.map +1 -1
- package/package.json +3 -2
package/dist/rules/ledger.js
CHANGED
|
@@ -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
|
-
/**
|
|
146
|
-
function
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
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
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
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
|
-
|
|
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
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
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;
|
package/dist/rules/ledger.js.map
CHANGED
|
@@ -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
|
+
"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.
|
|
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",
|