@milehimikey/em 1.11.0 → 1.13.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/.claude/skills/event-modeling/SKILL.md +4 -2
- package/.claude/skills/event-modeling-conform/SKILL.md +20 -9
- package/.claude/skills/event-modeling-conform/reference/conform.md +107 -10
- package/.claude/skills/event-modeling-design/SKILL.md +22 -6
- package/.claude/skills/event-modeling-discover/SKILL.md +1 -1
- package/.claude/skills/event-modeling-implement/SKILL.md +12 -6
- package/.claude/skills/event-modeling-implement/reference/implement.md +165 -18
- package/.claude/skills/event-modeling-review/SKILL.md +5 -1
- package/.claude/skills/event-modeling-shared/reference/em-dsl.md +57 -8
- package/.claude/skills/event-modeling-shared/reference/operating-principles.md +13 -3
- package/.claude/skills/event-modeling-shared/reference/slice-doc-schema.md +69 -0
- package/.claude/skills/event-modeling-shared/templates/conformance-report.md +8 -1
- package/.claude/skills/event-modeling-shared/templates/constitution.md +8 -1
- package/.claude/skills/event-modeling-shared/templates/state.md +3 -0
- package/README.md +1 -0
- package/dist/catalog/build.js +42 -1
- package/dist/catalog/build.js.map +1 -1
- package/dist/catalog/coverage.d.ts +15 -0
- package/dist/catalog/coverage.js +34 -0
- package/dist/catalog/coverage.js.map +1 -0
- package/dist/catalog/docJoin.d.ts +20 -2
- package/dist/catalog/docJoin.js +32 -4
- package/dist/catalog/docJoin.js.map +1 -1
- package/dist/catalog/docModelConsistencyValidate.js +1 -1
- package/dist/catalog/docModelConsistencyValidate.js.map +1 -1
- package/dist/catalog/driftSignal.d.ts +11 -5
- package/dist/catalog/driftSignal.js +18 -4
- package/dist/catalog/driftSignal.js.map +1 -1
- package/dist/catalog/modelVersionValidate.d.ts +9 -0
- package/dist/catalog/modelVersionValidate.js +38 -0
- package/dist/catalog/modelVersionValidate.js.map +1 -0
- package/dist/catalog/noteBindingValidate.js +18 -0
- package/dist/catalog/noteBindingValidate.js.map +1 -1
- package/dist/catalog/orphanedSliceDocValidate.d.ts +8 -1
- package/dist/catalog/orphanedSliceDocValidate.js +33 -6
- package/dist/catalog/orphanedSliceDocValidate.js.map +1 -1
- package/dist/catalog/pages.d.ts +16 -1
- package/dist/catalog/pages.js +16 -4
- package/dist/catalog/pages.js.map +1 -1
- package/dist/catalog/sliceDoc.d.ts +12 -0
- package/dist/catalog/sliceDoc.js +15 -0
- package/dist/catalog/sliceDoc.js.map +1 -1
- package/dist/catalog/sliceReadyValidate.d.ts +12 -1
- package/dist/catalog/sliceReadyValidate.js +4 -4
- package/dist/catalog/sliceReadyValidate.js.map +1 -1
- package/dist/cli/agentsMd.js +9 -3
- package/dist/cli/agentsMd.js.map +1 -1
- package/dist/cli/ciInit.js +20 -0
- package/dist/cli/ciInit.js.map +1 -1
- package/dist/cli/conformScope.d.ts +1 -0
- package/dist/cli/conformScope.js +13 -4
- package/dist/cli/conformScope.js.map +1 -1
- package/dist/cli/conformSupersede.d.ts +24 -2
- package/dist/cli/conformSupersede.js +44 -3
- package/dist/cli/conformSupersede.js.map +1 -1
- package/dist/cli/coverage.d.ts +34 -9
- package/dist/cli/coverage.js +61 -24
- package/dist/cli/coverage.js.map +1 -1
- package/dist/cli/findings.d.ts +134 -0
- package/dist/cli/findings.js +355 -0
- package/dist/cli/findings.js.map +1 -0
- package/dist/cli/markImplemented.js +12 -1
- package/dist/cli/markImplemented.js.map +1 -1
- package/dist/cli/metrics.d.ts +93 -0
- package/dist/cli/metrics.js +331 -0
- package/dist/cli/metrics.js.map +1 -0
- package/dist/cli/modelVersion.d.ts +139 -0
- package/dist/cli/modelVersion.js +256 -0
- package/dist/cli/modelVersion.js.map +1 -0
- package/dist/cli/ratify.js +17 -1
- package/dist/cli/ratify.js.map +1 -1
- package/dist/cli/reratify.d.ts +17 -0
- package/dist/cli/reratify.js +37 -2
- package/dist/cli/reratify.js.map +1 -1
- package/dist/cli/review.js +12 -1
- package/dist/cli/review.js.map +1 -1
- package/dist/cli/skillCheck.js +2 -2
- package/dist/cli/skillCheck.js.map +1 -1
- package/dist/cli/sliceConform.d.ts +50 -0
- package/dist/cli/sliceConform.js +206 -0
- package/dist/cli/sliceConform.js.map +1 -0
- package/dist/cli/sliceIndex.d.ts +2 -0
- package/dist/cli/sliceIndex.js +24 -7
- package/dist/cli/sliceIndex.js.map +1 -1
- package/dist/cli/sliceLink.js +16 -0
- package/dist/cli/sliceLink.js.map +1 -1
- package/dist/cli/sliceNew.d.ts +12 -0
- package/dist/cli/sliceNew.js +23 -0
- package/dist/cli/sliceNew.js.map +1 -1
- package/dist/cli/sliceStubAll.d.ts +76 -0
- package/dist/cli/sliceStubAll.js +189 -0
- package/dist/cli/sliceStubAll.js.map +1 -0
- package/dist/cli/stateFile.d.ts +63 -7
- package/dist/cli/stateFile.js +179 -18
- package/dist/cli/stateFile.js.map +1 -1
- package/dist/cli/status.d.ts +90 -1
- package/dist/cli/status.js +151 -16
- package/dist/cli/status.js.map +1 -1
- package/dist/cli/upgrade.d.ts +122 -0
- package/dist/cli/upgrade.js +476 -0
- package/dist/cli/upgrade.js.map +1 -0
- package/dist/cli.js +586 -66
- package/dist/cli.js.map +1 -1
- package/dist/emit/coverageJson.d.ts +2 -2
- package/dist/emit/coverageJson.js +6 -2
- package/dist/emit/coverageJson.js.map +1 -1
- package/dist/emit/freshnessJson.d.ts +1 -1
- package/dist/emit/freshnessJson.js +3 -1
- package/dist/emit/freshnessJson.js.map +1 -1
- package/dist/emit/json.d.ts +34 -1
- package/dist/emit/json.js +84 -2
- package/dist/emit/json.js.map +1 -1
- package/dist/emit/metricsJson.d.ts +7 -0
- package/dist/emit/metricsJson.js +27 -0
- package/dist/emit/metricsJson.js.map +1 -0
- package/dist/emit/statusJson.d.ts +1 -1
- package/dist/emit/statusJson.js +22 -1
- package/dist/emit/statusJson.js.map +1 -1
- package/dist/emit/upgradeJson.d.ts +5 -0
- package/dist/emit/upgradeJson.js +26 -0
- package/dist/emit/upgradeJson.js.map +1 -0
- package/dist/emit/validateJson.d.ts +10 -5
- package/dist/emit/validateJson.js +22 -8
- package/dist/emit/validateJson.js.map +1 -1
- package/dist/mcp/server.d.ts +1 -1
- package/dist/mcp/server.js +151 -22
- package/dist/mcp/server.js.map +1 -1
- package/dist/model/continuation.d.ts +23 -0
- package/dist/model/continuation.js +49 -0
- package/dist/model/continuation.js.map +1 -0
- package/dist/model/queryIndex.js +1 -1
- package/dist/model/queryIndex.js.map +1 -1
- package/dist/model/rules.d.ts +13 -0
- package/dist/model/rules.js +18 -0
- package/dist/model/rules.js.map +1 -1
- package/dist/model/sliceDocIndex.d.ts +12 -5
- package/dist/model/sliceDocIndex.js +18 -7
- package/dist/model/sliceDocIndex.js.map +1 -1
- package/dist/model/validate.d.ts +20 -0
- package/dist/model/validate.js +94 -45
- package/dist/model/validate.js.map +1 -1
- package/dist/render/sliceStatus.d.ts +3 -3
- package/dist/render/sliceStatus.js +27 -29
- package/dist/render/sliceStatus.js.map +1 -1
- package/dist/templates.d.ts +3 -3
- package/dist/templates.js +15 -2
- package/dist/templates.js.map +1 -1
- package/dist/util/localDate.d.ts +2 -0
- package/dist/util/localDate.js +17 -0
- package/dist/util/localDate.js.map +1 -0
- package/dist/util/semver.d.ts +19 -0
- package/dist/util/semver.js +54 -0
- package/dist/util/semver.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// `em slice conform` (MIL-214): the per-slice-per-version certification act — "a conform sweep
|
|
3
|
+
// walked THIS version of this slice's code, against target-repo revision R, and found nothing
|
|
4
|
+
// left unruled." Nothing wrote this before now: `implementedIn` only ever said "code exists
|
|
5
|
+
// somewhere for this slice," never "the code that's there was actually checked against version N
|
|
6
|
+
// of this doc" — the gap the whole engagement (MIL-214) exists to close. Sets exactly three
|
|
7
|
+
// frontmatter fields — `conformedVersion: <doc.version>`, `conformedAt: <rev>`,
|
|
8
|
+
// `conformedOn: <local date>` — on the slice doc resolved from the key via the SAME note-binding
|
|
9
|
+
// resolution `ratify`/`reratify`/`mark-implemented`/`em export` use (catalog/docJoin.ts's
|
|
10
|
+
// resolveSliceDocJoin).
|
|
11
|
+
//
|
|
12
|
+
// Write strategy: the same surgical index-math splicing ratify.ts/markImplemented.ts use, via
|
|
13
|
+
// the shared primitives in ./frontmatterSurgery.js — never a parse+re-serialize. New fields are
|
|
14
|
+
// inserted directly after `implementedIn:` (the anchor this ticket's ruling names) when none of
|
|
15
|
+
// the three exist yet; an existing triple is edited in place. Everything else — the body,
|
|
16
|
+
// `version:` itself (read, never written), `status:`, lineage/`covers` keys, and (best-effort)
|
|
17
|
+
// the file's own line-ending style — is copied through verbatim.
|
|
18
|
+
//
|
|
19
|
+
// Preconditions (the owner's ruling, MIL-214):
|
|
20
|
+
// - Legal only for `status: implemented` — a slice that hasn't shipped has no code to certify.
|
|
21
|
+
// - Refuses when there's no `implementedIn:` link at all (the OLD, pre-MIL-214
|
|
22
|
+
// driftSignal-would-be-"in-sync" precondition, computed directly from status+implementedIn
|
|
23
|
+
// here rather than via classifyImplementationDrift — that function is now conformedVersion-
|
|
24
|
+
// aware, so calling it here would always read "uncertified" before the first-ever certify and
|
|
25
|
+
// make this command permanently refuse itself).
|
|
26
|
+
// - Idempotent on the SAME (conformedVersion, conformedAt) pair — re-running with the exact
|
|
27
|
+
// triple already recorded is a no-op, `conformedOn` untouched. A DIFFERENT `--at` (a
|
|
28
|
+
// re-certification at a later revision — "legal and common," the ruling's words) simply
|
|
29
|
+
// OVERWRITES rather than refusing/needing a `--force` escape hatch: `em` has no way to tell
|
|
30
|
+
// "later" from "earlier" for an arbitrary target-repo revision string without walking that
|
|
31
|
+
// repo's git history, which this pure, fs-scoped command never does.
|
|
32
|
+
// - Refuses a continuation key (MIL-208 pattern) — no doc of its own to flip.
|
|
33
|
+
// - Refuses when the newest `conformance/*-findings.json` beside this model whose `revision`
|
|
34
|
+
// equals `--at` still has an unruled finding (`locus: null`) in scope for this slice —
|
|
35
|
+
// the whole point (docs the code was never fully certified, so bumping/certifying past it
|
|
36
|
+
// would be exactly the sequencing bug MIL-214 exists to close). `--skip-findings-check`
|
|
37
|
+
// escapes with a loud notice, never silently.
|
|
38
|
+
import { readFileSync, writeFileSync } from "node:fs";
|
|
39
|
+
import { join } from "node:path";
|
|
40
|
+
import { continuationOf } from "../model/continuation.js";
|
|
41
|
+
import { resolveSliceDocJoin } from "../catalog/docJoin.js";
|
|
42
|
+
import { fieldLineRegex, locateFrontmatterInner, normalizeFieldValue } from "./frontmatterSurgery.js";
|
|
43
|
+
import { isValidDateString } from "./stateFile.js";
|
|
44
|
+
import { listAllFindingsFiles, unruledFindingsInScope } from "./findings.js";
|
|
45
|
+
/**
|
|
46
|
+
* Pure text transform: reads the CURRENT `version:` value (never writes it) and writes
|
|
47
|
+
* `conformedVersion:`/`conformedAt:`/`conformedOn:` in `raw`'s frontmatter block. See module
|
|
48
|
+
* header for the full precondition/idempotency contract. No fs access — the caller reads/writes;
|
|
49
|
+
* see `runSliceConform` below.
|
|
50
|
+
*/
|
|
51
|
+
export function applyConformFrontmatter(raw, sliceKey, at, on) {
|
|
52
|
+
const trimmedAt = at.trim();
|
|
53
|
+
if (!trimmedAt)
|
|
54
|
+
return { ok: false, message: "a target-repo revision is required (--at)" };
|
|
55
|
+
if (/[\x00-\x1f\x7f\s]/.test(trimmedAt)) {
|
|
56
|
+
return { ok: false, message: "revision (--at) must not contain control characters or whitespace" };
|
|
57
|
+
}
|
|
58
|
+
if (!isValidDateString(on)) {
|
|
59
|
+
return { ok: false, message: `invalid date "${on}" — expected YYYY-MM-DD` };
|
|
60
|
+
}
|
|
61
|
+
const range = locateFrontmatterInner(raw);
|
|
62
|
+
if (!range)
|
|
63
|
+
return { ok: false, message: "no frontmatter block found" };
|
|
64
|
+
const inner = raw.slice(range.innerStart, range.innerEnd);
|
|
65
|
+
const statusMatch = fieldLineRegex("status").exec(inner);
|
|
66
|
+
if (!statusMatch)
|
|
67
|
+
return { ok: false, message: "no `status:` field found in frontmatter" };
|
|
68
|
+
const currentStatus = normalizeFieldValue(statusMatch[2])?.toLowerCase() ?? null;
|
|
69
|
+
if (currentStatus !== "implemented") {
|
|
70
|
+
return {
|
|
71
|
+
ok: false,
|
|
72
|
+
message: `slice "${sliceKey}" is \`status: ${currentStatus ?? "(empty)"}\` — only a slice at ` +
|
|
73
|
+
"`status: implemented` can be certified; run `em slice mark-implemented` first",
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
const implMatch = fieldLineRegex("implementedIn").exec(inner);
|
|
77
|
+
const currentImplementedIn = implMatch ? normalizeFieldValue(implMatch[2]) : null;
|
|
78
|
+
if (currentImplementedIn === null) {
|
|
79
|
+
return {
|
|
80
|
+
ok: false,
|
|
81
|
+
message: `slice "${sliceKey}" has \`status: implemented\` but no \`implementedIn:\` link — nothing to certify against`,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
const versionMatch = fieldLineRegex("version").exec(inner);
|
|
85
|
+
const currentVersionRaw = versionMatch ? normalizeFieldValue(versionMatch[2]) : null;
|
|
86
|
+
const version = currentVersionRaw !== null ? Number(currentVersionRaw) : NaN;
|
|
87
|
+
if (!Number.isInteger(version) || version < 1) {
|
|
88
|
+
return { ok: false, message: `doc's \`version:\` value "${currentVersionRaw ?? ""}" isn't a positive integer — refusing to certify` };
|
|
89
|
+
}
|
|
90
|
+
const cvMatch = fieldLineRegex("conformedVersion").exec(inner);
|
|
91
|
+
const caMatch = fieldLineRegex("conformedAt").exec(inner);
|
|
92
|
+
const coMatch = fieldLineRegex("conformedOn").exec(inner);
|
|
93
|
+
const currentConformedVersion = cvMatch ? normalizeFieldValue(cvMatch[2]) : null;
|
|
94
|
+
const currentConformedAt = caMatch ? normalizeFieldValue(caMatch[2]) : null;
|
|
95
|
+
// Idempotent on the (conformedVersion, conformedAt) pair — see module header. `conformedOn` is
|
|
96
|
+
// deliberately excluded from the identity check: it's a timestamp, not provenance identity the
|
|
97
|
+
// way ratifiedBy/ratifiedOn's PAIR is for ratify (there, either differing refuses; here, only
|
|
98
|
+
// the (version, revision) pair is the thing that must not silently change without the caller
|
|
99
|
+
// noticing — a same-day-different-time rerun is not a conflict).
|
|
100
|
+
if (currentConformedVersion === String(version) && currentConformedAt === trimmedAt) {
|
|
101
|
+
return { ok: true, content: raw, changed: false, version };
|
|
102
|
+
}
|
|
103
|
+
// Match the file's own line-ending style for any freshly-inserted line — same trick
|
|
104
|
+
// ratify.ts/markImplemented.ts use.
|
|
105
|
+
const afterImpl = inner.slice(implMatch.index + implMatch[0].length);
|
|
106
|
+
const eol = afterImpl.startsWith("\r\n") ? "\r\n" : "\n";
|
|
107
|
+
const missingLines = [];
|
|
108
|
+
if (!cvMatch)
|
|
109
|
+
missingLines.push(`conformedVersion: ${version}`);
|
|
110
|
+
if (!caMatch)
|
|
111
|
+
missingLines.push(`conformedAt: ${trimmedAt}`);
|
|
112
|
+
if (!coMatch)
|
|
113
|
+
missingLines.push(`conformedOn: ${on}`);
|
|
114
|
+
const implNext = missingLines.length > 0 ? `${implMatch[0]}${eol}${missingLines.join(eol)}` : null;
|
|
115
|
+
const edits = [];
|
|
116
|
+
if (implNext !== null)
|
|
117
|
+
edits.push({ index: implMatch.index, oldLen: implMatch[0].length, next: implNext });
|
|
118
|
+
if (cvMatch)
|
|
119
|
+
edits.push({ index: cvMatch.index, oldLen: cvMatch[0].length, next: `${cvMatch[1]}${version}` });
|
|
120
|
+
if (caMatch)
|
|
121
|
+
edits.push({ index: caMatch.index, oldLen: caMatch[0].length, next: `${caMatch[1]}${trimmedAt}` });
|
|
122
|
+
if (coMatch)
|
|
123
|
+
edits.push({ index: coMatch.index, oldLen: coMatch[0].length, next: `${coMatch[1]}${on}` });
|
|
124
|
+
edits.sort((a, b) => b.index - a.index);
|
|
125
|
+
let updatedInner = inner;
|
|
126
|
+
for (const edit of edits) {
|
|
127
|
+
updatedInner = updatedInner.slice(0, edit.index) + edit.next + updatedInner.slice(edit.index + edit.oldLen);
|
|
128
|
+
}
|
|
129
|
+
const content = raw.slice(0, range.innerStart) + updatedInner + raw.slice(range.innerEnd);
|
|
130
|
+
return { ok: true, content, changed: true, version };
|
|
131
|
+
}
|
|
132
|
+
/** Scan `<baseDir>/conformance/*-findings.json`, newest filename first, for the first one whose
|
|
133
|
+
* `revision` matches `at` — the "newest findings JSON whose revision == --at" the ruling
|
|
134
|
+
* describes. A malformed candidate is silently skipped (not refused): this is a best-effort
|
|
135
|
+
* lookup for the findings-check gate below, not itself a validator — `em conform-findings
|
|
136
|
+
* check` is where a broken findings file gets a loud diagnosis. Returns null when the
|
|
137
|
+
* `conformance/` directory doesn't exist, or no candidate matches `at`. */
|
|
138
|
+
export function findLatestFindingsForRevision(baseDir, at) {
|
|
139
|
+
return listAllFindingsFiles(baseDir).find((f) => f.doc.revision === at) ?? null;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Resolves `sliceKey` to its bound doc via the same note-binding join `ratify`/`reratify`/
|
|
143
|
+
* `mark-implemented`/`em export` use (MIL-121 cross-binding included), runs the findings-check
|
|
144
|
+
* gate, then reads/applies/writes it. `baseDir` is the `.em` file's directory, same convention
|
|
145
|
+
* every doc/note path in `em` uses.
|
|
146
|
+
*/
|
|
147
|
+
export function runSliceConform(model, refs, baseDir, sliceKey, at, on, skipFindingsCheck = false) {
|
|
148
|
+
const sliceIndex = refs.sliceKeys.indexOf(sliceKey);
|
|
149
|
+
if (sliceIndex === -1) {
|
|
150
|
+
return { ok: false, message: `no slice with export key "${sliceKey}" in this model` };
|
|
151
|
+
}
|
|
152
|
+
const slice = model.slices[sliceIndex];
|
|
153
|
+
const { doc, continuationOf: continuationOfKey } = resolveSliceDocJoin(model, refs, slice, sliceKey, baseDir, (id) => refs.refById.get(id));
|
|
154
|
+
// MIL-208: see ratify.ts's runRatify — a continuation slice has no doc of its own to certify.
|
|
155
|
+
if (continuationOfKey) {
|
|
156
|
+
const continuation = continuationOf(model, refs, sliceIndex);
|
|
157
|
+
const viewName = model.byId.get(continuation.viewLogicalId).name;
|
|
158
|
+
return {
|
|
159
|
+
ok: false,
|
|
160
|
+
message: `"${sliceKey}" is a continuation of "${continuationOfKey}" (view "${viewName}" again) — ` +
|
|
161
|
+
`it has no doc of its own; conform "${continuationOfKey}" instead`,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
if (doc.reason === "no-doc-bound") {
|
|
165
|
+
return {
|
|
166
|
+
ok: false,
|
|
167
|
+
message: `slice "${sliceKey}" has no doc bound via \`note "slices/${sliceKey}.md"\` — bind a slice doc before certifying it`,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
if (doc.reason === "binding-missing-file") {
|
|
171
|
+
return { ok: false, message: `slice "${sliceKey}" notes "${doc.path}" but no such file exists` };
|
|
172
|
+
}
|
|
173
|
+
if (doc.reason === "frontmatter-invalid") {
|
|
174
|
+
return {
|
|
175
|
+
ok: false,
|
|
176
|
+
message: `slice doc "${doc.path}" has missing or invalid frontmatter — run \`em validate\` for details`,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
const found = findLatestFindingsForRevision(baseDir, at);
|
|
180
|
+
let skippedFindingsCheck = null;
|
|
181
|
+
if (found) {
|
|
182
|
+
const unruled = unruledFindingsInScope(found.doc.findings, new Set([sliceKey]));
|
|
183
|
+
if (unruled.length > 0) {
|
|
184
|
+
if (!skipFindingsCheck) {
|
|
185
|
+
return {
|
|
186
|
+
ok: false,
|
|
187
|
+
message: `slice "${sliceKey}" has ${unruled.length} unruled conformance finding(s) in ${found.path} ` +
|
|
188
|
+
`(id ${unruled.map((f) => f.id).join(", ")}) — rule on them (\`em conform-supersede --locus --by\`) ` +
|
|
189
|
+
"or pass --skip-findings-check to certify anyway",
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
skippedFindingsCheck = unruled.map((f) => f.id);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
const absPath = join(baseDir, doc.path);
|
|
196
|
+
const raw = readFileSync(absPath, "utf8");
|
|
197
|
+
const result = applyConformFrontmatter(raw, sliceKey, at, on);
|
|
198
|
+
if (!result.ok) {
|
|
199
|
+
return { ok: false, message: `${doc.path}: ${result.message}` };
|
|
200
|
+
}
|
|
201
|
+
if (result.changed) {
|
|
202
|
+
writeFileSync(absPath, result.content, "utf8");
|
|
203
|
+
}
|
|
204
|
+
return { ok: true, path: doc.path, changed: result.changed, version: result.version, skippedFindingsCheck };
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=sliceConform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sliceConform.js","sourceRoot":"","sources":["../../src/cli/sliceConform.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/sliceIndex.d.ts
CHANGED
package/dist/cli/sliceIndex.js
CHANGED
|
@@ -16,8 +16,19 @@ import { applyMarker } from "../util/markers.js";
|
|
|
16
16
|
/** The marker name wrapping the Slices table: `<!-- GENERATED:slices:start -->` /
|
|
17
17
|
* `<!-- GENERATED:slices:end -->`, matching templates/model-readme.md. */
|
|
18
18
|
export const SLICE_INDEX_MARKER = "slices";
|
|
19
|
-
const TABLE_HEADER = "| # | Slice | Pattern | Status | Reviewed by | Ratified by | Owner | Tracking | Implemented in | Design doc |\n" +
|
|
20
|
-
"
|
|
19
|
+
const TABLE_HEADER = "| # | Slice | Pattern | Status | Reviewed by | Ratified by | Owner | Tracking | Implemented in | Conformed | Design doc |\n" +
|
|
20
|
+
"|---|-------|---------|--------|-------------|-------------|-------|----------|----------------|-----------|------------|";
|
|
21
|
+
/** MIL-214: `v<N> @ <rev>` when this slice's current version has a conformance certification
|
|
22
|
+
* (`doc.conformedVersion`/`doc.conformedAt` both set — always set together, `em slice conform`'s
|
|
23
|
+
* only write path), `—` otherwise. Deliberately reports the RECORDED certification verbatim,
|
|
24
|
+
* even when it's stale (`conformedVersion !== doc.version`, the `uncertified` driftSignal case)
|
|
25
|
+
* — `em status`/`em export`'s `driftSignal` is where "is this still current" is judged; this
|
|
26
|
+
* column is just "what was last certified, and against what revision". */
|
|
27
|
+
function conformedCell(doc) {
|
|
28
|
+
if (doc.conformedVersion === null || doc.conformedAt === null)
|
|
29
|
+
return "—";
|
|
30
|
+
return `v${doc.conformedVersion} @ ${doc.conformedAt}`;
|
|
31
|
+
}
|
|
21
32
|
/** Escape characters that would break a markdown table cell: `|` (the column separator) and
|
|
22
33
|
* newlines (a slice name is always one line, but a doc's freeform `implementedIn` text isn't
|
|
23
34
|
* guaranteed to be). */
|
|
@@ -33,8 +44,13 @@ function escapeCell(s) {
|
|
|
33
44
|
* templates/model-readme.md and reference/extract.md already use for a slice that hasn't
|
|
34
45
|
* reached the `slice` phase. `doc.found` false covers both of docJoin's not-found reasons
|
|
35
46
|
* (no-doc-bound and binding-missing-file) — catalog doesn't distinguish them either, since a
|
|
36
|
-
* broken binding still means "there's no doc a human can currently read."
|
|
37
|
-
|
|
47
|
+
* broken binding still means "there's no doc a human can currently read." `continuationOf`
|
|
48
|
+
* (MIL-208) wins over both: a continuation slice's row names the originating slice instead of
|
|
49
|
+
* echoing its (borrowed) status verbatim, which would otherwise look like an independent slice
|
|
50
|
+
* happens to share the same status by coincidence. */
|
|
51
|
+
function statusCell(doc, continuationOf) {
|
|
52
|
+
if (continuationOf)
|
|
53
|
+
return `continuation of \`${continuationOf}\``;
|
|
38
54
|
if (!doc.found)
|
|
39
55
|
return "no doc yet";
|
|
40
56
|
return doc.status ?? "unknown";
|
|
@@ -46,24 +62,25 @@ export function buildSliceIndexTable(model, refs, baseDir) {
|
|
|
46
62
|
const rows = model.slices.map((slice, i) => {
|
|
47
63
|
const sliceKey = refs.sliceKeys[i];
|
|
48
64
|
const pattern = classifySlicePattern(slice);
|
|
49
|
-
const { doc, diagnostics: docDiags } = resolveSliceDocJoin(slice, sliceKey, baseDir, (id) => refs.refById.get(id));
|
|
65
|
+
const { doc, diagnostics: docDiags, continuationOf } = resolveSliceDocJoin(model, refs, slice, sliceKey, baseDir, (id) => refs.refById.get(id));
|
|
50
66
|
diagnostics.push(...docDiags);
|
|
51
67
|
return {
|
|
52
68
|
index: i + 1,
|
|
53
69
|
name: slice.name,
|
|
54
70
|
pattern: slicePatternLabel(pattern),
|
|
55
|
-
status: statusCell(doc),
|
|
71
|
+
status: statusCell(doc, continuationOf),
|
|
56
72
|
reviewedBy: doc.reviewedBy ?? "—",
|
|
57
73
|
ratifiedBy: doc.ratifiedBy ?? "—",
|
|
58
74
|
owner: doc.owner ?? "—",
|
|
59
75
|
tracking: doc.tracking ?? "—",
|
|
60
76
|
implementedIn: doc.implementedIn ?? "—",
|
|
77
|
+
conformed: conformedCell(doc),
|
|
61
78
|
docPath: doc.path,
|
|
62
79
|
};
|
|
63
80
|
});
|
|
64
81
|
const lines = rows.map((r) => `| ${r.index} | ${escapeCell(r.name)} | ${escapeCell(r.pattern)} | ${escapeCell(r.status)} | ` +
|
|
65
82
|
`${escapeCell(r.reviewedBy)} | ${escapeCell(r.ratifiedBy)} | ${escapeCell(r.owner)} | ` +
|
|
66
|
-
`${escapeCell(r.tracking)} | ${escapeCell(r.implementedIn)} | [${r.docPath}](${r.docPath}) |`);
|
|
83
|
+
`${escapeCell(r.tracking)} | ${escapeCell(r.implementedIn)} | ${escapeCell(r.conformed)} | [${r.docPath}](${r.docPath}) |`);
|
|
67
84
|
return { markdown: [TABLE_HEADER, ...lines].join("\n"), rows, diagnostics };
|
|
68
85
|
}
|
|
69
86
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sliceIndex.js","sourceRoot":"","sources":["../../src/cli/sliceIndex.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,6FAA6F;AAC7F,6FAA6F;AAC7F,sFAAsF;AACtF,iGAAiG;AACjG,EAAE;AACF,0FAA0F;AAC1F,uFAAuF;AACvF,+FAA+F;AAC/F,sDAAsD;AAEtD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAI1C,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAkB,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD;2EAC2E;AAC3E,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AAE3C,MAAM,YAAY,GAChB,
|
|
1
|
+
{"version":3,"file":"sliceIndex.js","sourceRoot":"","sources":["../../src/cli/sliceIndex.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/sliceLink.js
CHANGED
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
// Refuses (never overwrites/duplicates) when the header line already carries a `note` clause —
|
|
37
37
|
// the caller falls back to printing the line for a hand edit, same as when `--wire` isn't passed
|
|
38
38
|
// at all.
|
|
39
|
+
import { continuationOf } from "../model/continuation.js";
|
|
39
40
|
import { indexOfUnquoted, stripComment } from "../parser/lexer.js";
|
|
40
41
|
/** Which element kind(s) count as a slice's "primary" element per pattern — the one `note
|
|
41
42
|
* "slices/<key>.md"` binds to (SKILL.md's slice phase, step 4): the command for State Change,
|
|
@@ -73,6 +74,21 @@ export function resolvePrimaryElement(model, refs, sliceKey, pattern) {
|
|
|
73
74
|
message: `slice "${slice.name}" has ${candidates.length} ${kinds.join("/")} elements — ambiguous, wire the note by hand`,
|
|
74
75
|
};
|
|
75
76
|
}
|
|
77
|
+
// MIL-208: the sole candidate view is `again` — this slice is a CONTINUATION of the view's
|
|
78
|
+
// originating slice, which has no doc of its own to scaffold/wire. Refuse and point at the
|
|
79
|
+
// originating slice's key and doc path instead of wiring a doc this slice can never be
|
|
80
|
+
// ratified against.
|
|
81
|
+
if (candidates[0].kind === "view" && candidates[0].again === true) {
|
|
82
|
+
const continuation = continuationOf(model, refs, sliceIndex);
|
|
83
|
+
if (continuation) {
|
|
84
|
+
const viewName = model.byId.get(continuation.viewLogicalId).name;
|
|
85
|
+
return {
|
|
86
|
+
ok: false,
|
|
87
|
+
message: `slice "${slice.name}" is a later instance of "${viewName}" (again) — it has no doc of ` +
|
|
88
|
+
`its own; the doc lives at slices/${continuation.sliceKey}.md (slice "${continuation.sliceKey}")`,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
76
92
|
return { ok: true, sliceIndex, element: candidates[0] };
|
|
77
93
|
}
|
|
78
94
|
/** Insert `note "<notePath>"` into one raw source line — see module header for the placement
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sliceLink.js","sourceRoot":"","sources":["../../src/cli/sliceLink.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sliceLink.js","sourceRoot":"","sources":["../../src/cli/sliceLink.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/sliceNew.d.ts
CHANGED
|
@@ -16,3 +16,15 @@ export declare function sliceDocKey(displayName: string): string;
|
|
|
16
16
|
* ...) is deliberately left out, staying hand-authored per templates/slice.md.
|
|
17
17
|
*/
|
|
18
18
|
export declare function buildSliceDocContent(displayName: string, key: string, pattern: SlicePattern, swimlane: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Build the full contents of a fresh, near-free `slices/<key>.md` STUB (MIL-184: `em slice new
|
|
21
|
+
* --stub` / `em slice stub-all`) — the same 5 frontmatter keys `buildSliceDocContent` writes
|
|
22
|
+
* (nothing else, same as above), but the body is one placeholder line instead of the
|
|
23
|
+
* diagram-image stub and every judgment section (Intent, Command, Scenarios, Open Questions,
|
|
24
|
+
* ...) a full slice doc eventually carries. Exists purely so the slice has a real, single-
|
|
25
|
+
* source-of-truth `status` — every lifecycle tool that reads `doc.status` (render coloring,
|
|
26
|
+
* `em status`, `driftSignal`, `em slice index`) treats a stub exactly like any other doc, since
|
|
27
|
+
* it's the same frontmatter dialect. Deepen it later with `em slice new` (no `--stub`) + `-f` to
|
|
28
|
+
* overwrite this placeholder body once the team is ready to write the real spec.
|
|
29
|
+
*/
|
|
30
|
+
export declare function buildStubDocContent(displayName: string, pattern: SlicePattern, swimlane: string): string;
|
package/dist/cli/sliceNew.js
CHANGED
|
@@ -50,4 +50,27 @@ export function buildSliceDocContent(displayName, key, pattern, swimlane) {
|
|
|
50
50
|
`\n` +
|
|
51
51
|
`\n`);
|
|
52
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Build the full contents of a fresh, near-free `slices/<key>.md` STUB (MIL-184: `em slice new
|
|
55
|
+
* --stub` / `em slice stub-all`) — the same 5 frontmatter keys `buildSliceDocContent` writes
|
|
56
|
+
* (nothing else, same as above), but the body is one placeholder line instead of the
|
|
57
|
+
* diagram-image stub and every judgment section (Intent, Command, Scenarios, Open Questions,
|
|
58
|
+
* ...) a full slice doc eventually carries. Exists purely so the slice has a real, single-
|
|
59
|
+
* source-of-truth `status` — every lifecycle tool that reads `doc.status` (render coloring,
|
|
60
|
+
* `em status`, `driftSignal`, `em slice index`) treats a stub exactly like any other doc, since
|
|
61
|
+
* it's the same frontmatter dialect. Deepen it later with `em slice new` (no `--stub`) + `-f` to
|
|
62
|
+
* overwrite this placeholder body once the team is ready to write the real spec.
|
|
63
|
+
*/
|
|
64
|
+
export function buildStubDocContent(displayName, pattern, swimlane) {
|
|
65
|
+
return (`---\n` +
|
|
66
|
+
`schemaVersion: ${SCHEMA_VERSION}\n` +
|
|
67
|
+
`pattern: ${pattern}\n` +
|
|
68
|
+
`swimlane: ${swimlane}\n` +
|
|
69
|
+
`status: draft\n` +
|
|
70
|
+
`version: 1\n` +
|
|
71
|
+
`---\n` +
|
|
72
|
+
`# Slice: ${displayName}\n` +
|
|
73
|
+
`\n` +
|
|
74
|
+
`_Stub — deepen with the slice phase (see slice-doc-schema.md)._\n`);
|
|
75
|
+
}
|
|
53
76
|
//# sourceMappingURL=sliceNew.js.map
|
package/dist/cli/sliceNew.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sliceNew.js","sourceRoot":"","sources":["../../src/cli/sliceNew.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,qFAAqF;AACrF,6FAA6F;AAC7F,6FAA6F;AAC7F,4FAA4F;AAC5F,8FAA8F;AAC9F,+FAA+F;AAC/F,8FAA8F;AAC9F,+FAA+F;AAC/F,6FAA6F;AAC7F,EAAE;AACF,8FAA8F;AAC9F,oFAAoF;AACpF,6BAA6B;AAE7B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,0FAA0F;AAC1F,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,CAAU,CAAC;AAGnG,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAQ,cAAoC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/D,CAAC;AAED;;;8BAG8B;AAC9B,MAAM,cAAc,GAAG,CAAC,CAAC;AAEzB;;;6EAG6E;AAC7E,MAAM,UAAU,WAAW,CAAC,WAAmB;IAC7C,OAAO,SAAS,CAAC,WAAW,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,WAAmB,EAAE,GAAW,EAAE,OAAqB,EAAE,QAAgB;IAC5G,OAAO,CACL,OAAO;QACP,kBAAkB,cAAc,IAAI;QACpC,YAAY,OAAO,IAAI;QACvB,aAAa,QAAQ,IAAI;QACzB,iBAAiB;QACjB,cAAc;QACd,OAAO;QACP,YAAY,WAAW,IAAI;QAC3B,IAAI;QACJ,gBAAgB,GAAG,SAAS,CAC7B,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"sliceNew.js","sourceRoot":"","sources":["../../src/cli/sliceNew.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,qFAAqF;AACrF,6FAA6F;AAC7F,6FAA6F;AAC7F,4FAA4F;AAC5F,8FAA8F;AAC9F,+FAA+F;AAC/F,8FAA8F;AAC9F,+FAA+F;AAC/F,6FAA6F;AAC7F,EAAE;AACF,8FAA8F;AAC9F,oFAAoF;AACpF,6BAA6B;AAE7B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,0FAA0F;AAC1F,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,CAAU,CAAC;AAGnG,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAQ,cAAoC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/D,CAAC;AAED;;;8BAG8B;AAC9B,MAAM,cAAc,GAAG,CAAC,CAAC;AAEzB;;;6EAG6E;AAC7E,MAAM,UAAU,WAAW,CAAC,WAAmB;IAC7C,OAAO,SAAS,CAAC,WAAW,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,WAAmB,EAAE,GAAW,EAAE,OAAqB,EAAE,QAAgB;IAC5G,OAAO,CACL,OAAO;QACP,kBAAkB,cAAc,IAAI;QACpC,YAAY,OAAO,IAAI;QACvB,aAAa,QAAQ,IAAI;QACzB,iBAAiB;QACjB,cAAc;QACd,OAAO;QACP,YAAY,WAAW,IAAI;QAC3B,IAAI;QACJ,gBAAgB,GAAG,SAAS,CAC7B,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB,EAAE,OAAqB,EAAE,QAAgB;IAC9F,OAAO,CACL,OAAO;QACP,kBAAkB,cAAc,IAAI;QACpC,YAAY,OAAO,IAAI;QACvB,aAAa,QAAQ,IAAI;QACzB,iBAAiB;QACjB,cAAc;QACd,OAAO;QACP,YAAY,WAAW,IAAI;QAC3B,IAAI;QACJ,mEAAmE,CACpE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { NormalizedModel, Slice } from "../model/model.js";
|
|
2
|
+
import { RefsResult } from "../model/refs.js";
|
|
3
|
+
import { SlicePattern } from "./sliceNew.js";
|
|
4
|
+
/** `--status`'s exact 4-value enum — the same lifecycle values every slice doc already uses
|
|
5
|
+
* (docs/slice-doc-schema.md); `stub-all` never invents a 5th "backbone"/"existing" value. */
|
|
6
|
+
export declare const STUB_STATUSES: readonly ["draft", "reviewed", "ready-to-implement", "implemented"];
|
|
7
|
+
export type StubStatus = (typeof STUB_STATUSES)[number];
|
|
8
|
+
export declare function isStubStatus(value: string): value is StubStatus;
|
|
9
|
+
/**
|
|
10
|
+
* MIL-184: derive a stub's `swimlane` from the slice's own shape rather than asking for one per
|
|
11
|
+
* slice — the slice's first `ui` element's resolved `persona`, arrow-joined to its first `event`
|
|
12
|
+
* element's resolved `context`, both in declaration order (matching `wireSliceNote`'s own
|
|
13
|
+
* "first candidate wins" convention). Falls back to the literal placeholder `"— → —"` when either
|
|
14
|
+
* side is missing (a slice with no `ui` at all — a pure Automation/Translation reaction never
|
|
15
|
+
* has a screen of its own — or, vanishingly rare, no `event` either): a placeholder is honest
|
|
16
|
+
* about "nobody's filled this in yet," which is exactly a stub's whole premise, rather than
|
|
17
|
+
* guessing a lane from unrelated context.
|
|
18
|
+
*/
|
|
19
|
+
export declare function deriveStubSwimlane(slice: Slice): string;
|
|
20
|
+
export type ApplyStubStatusResult = {
|
|
21
|
+
ok: true;
|
|
22
|
+
content: string;
|
|
23
|
+
} | {
|
|
24
|
+
ok: false;
|
|
25
|
+
message: string;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Escalates a freshly-built `status: draft` stub's content to `status`, reusing review/ratify/
|
|
29
|
+
* mark-implemented's own pure frontmatter writers (see module header) — never a second
|
|
30
|
+
* implementation of what those statuses write. `by`/`on` are required by the CALLER (the CLI
|
|
31
|
+
* action, which enforces `--by` before compiling anything) whenever `status !== "draft"`; this
|
|
32
|
+
* function has no opinion about CLI flag requiredness, only about what each writer itself
|
|
33
|
+
* validates (a blank `by`, a malformed `on`). `implementedInUrl` only matters for `status ===
|
|
34
|
+
* "implemented"` — required there, ignored otherwise.
|
|
35
|
+
*/
|
|
36
|
+
export declare function applyStubStatus(content: string, sliceKey: string, status: StubStatus, by: string, on: string, implementedInUrl: string | null): ApplyStubStatusResult;
|
|
37
|
+
export type StubAllOutcome = {
|
|
38
|
+
kind: "stubbed";
|
|
39
|
+
sliceKey: string;
|
|
40
|
+
path: string;
|
|
41
|
+
pattern: SlicePattern;
|
|
42
|
+
swimlane: string;
|
|
43
|
+
status: StubStatus;
|
|
44
|
+
/** False only for the `binding-missing-file` case: a note already pointed at this path, so
|
|
45
|
+
* there was nothing left to wire. */
|
|
46
|
+
wired: boolean;
|
|
47
|
+
elementName: string | null;
|
|
48
|
+
} | {
|
|
49
|
+
kind: "skip";
|
|
50
|
+
sliceKey: string;
|
|
51
|
+
reason: string;
|
|
52
|
+
};
|
|
53
|
+
export interface StubAllOptions {
|
|
54
|
+
status: StubStatus;
|
|
55
|
+
/** Required by the caller whenever `status !== "draft"` — `null` only ever legal for `draft`. */
|
|
56
|
+
by: string | null;
|
|
57
|
+
on: string;
|
|
58
|
+
implementedInUrl: string | null;
|
|
59
|
+
dryRun: boolean;
|
|
60
|
+
}
|
|
61
|
+
export interface StubAllResult {
|
|
62
|
+
outcomes: StubAllOutcome[];
|
|
63
|
+
/** The `.em` file's source text with every successful `--wire` insertion applied, in slice
|
|
64
|
+
* order — byte-identical to the input `source` when nothing needed wiring, or when `dryRun`.
|
|
65
|
+
* The caller (the CLI action) writes this back to `<file>`, same read/resolve/write split
|
|
66
|
+
* `em slice new --wire`'s own CLI action keeps. */
|
|
67
|
+
source: string;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Walks `model.slices` in declaration order and, for every slice with no resolvable doc, writes
|
|
71
|
+
* a stub `slices/<key>.md` (skipped entirely when `opts.dryRun`) and wires it into `source` —
|
|
72
|
+
* see the module header for the full per-slice decision tree. `baseDir` is the `.em` file's
|
|
73
|
+
* directory, same convention every doc/note path in `em` uses. Never throws on a per-slice
|
|
74
|
+
* problem — every failure becomes a `"skip"` outcome so one bad slice doesn't abort the batch.
|
|
75
|
+
*/
|
|
76
|
+
export declare function runStubAll(model: NormalizedModel, refs: RefsResult, baseDir: string, source: string, opts: StubAllOptions): StubAllResult;
|