@milehimikey/em 1.8.0 → 1.9.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 +58 -404
- package/.claude/skills/event-modeling-conform/SKILL.md +77 -0
- package/.claude/skills/{event-modeling → event-modeling-conform}/reference/conform.md +39 -13
- package/.claude/skills/event-modeling-design/SKILL.md +139 -0
- package/.claude/skills/event-modeling-discover/SKILL.md +89 -0
- package/.claude/skills/{event-modeling → event-modeling-discover}/reference/extract.md +3 -2
- package/.claude/skills/event-modeling-implement/SKILL.md +40 -0
- package/.claude/skills/{event-modeling → event-modeling-implement}/reference/implement.md +3 -2
- package/.claude/skills/event-modeling-review/SKILL.md +58 -0
- package/.claude/skills/{event-modeling → event-modeling-shared}/reference/em-dsl.md +128 -84
- package/.claude/skills/{event-modeling → event-modeling-shared}/reference/methodology.md +6 -5
- package/.claude/skills/event-modeling-shared/reference/operating-principles.md +147 -0
- package/.claude/skills/{event-modeling → event-modeling-shared}/templates/model-readme.md +2 -2
- package/.claude/skills/{event-modeling → event-modeling-shared}/templates/slice.md +51 -8
- package/README.md +24 -4
- package/dist/catalog/build.js +9 -0
- package/dist/catalog/build.js.map +1 -1
- package/dist/catalog/docJoin.d.ts +15 -0
- package/dist/catalog/docJoin.js +8 -0
- package/dist/catalog/docJoin.js.map +1 -1
- package/dist/catalog/modelCollisionValidate.d.ts +22 -0
- package/dist/catalog/modelCollisionValidate.js +67 -0
- package/dist/catalog/modelCollisionValidate.js.map +1 -0
- package/dist/catalog/orphanedSliceDocValidate.d.ts +11 -0
- package/dist/catalog/orphanedSliceDocValidate.js +98 -0
- package/dist/catalog/orphanedSliceDocValidate.js.map +1 -0
- package/dist/catalog/sliceDoc.d.ts +15 -0
- package/dist/catalog/sliceDoc.js +18 -0
- package/dist/catalog/sliceDoc.js.map +1 -1
- package/dist/cli/changelogBuild.d.ts +12 -0
- package/dist/cli/changelogBuild.js +89 -0
- package/dist/cli/changelogBuild.js.map +1 -0
- package/dist/cli/ciInit.d.ts +42 -0
- package/dist/cli/ciInit.js +298 -0
- package/dist/cli/ciInit.js.map +1 -0
- package/dist/cli/conformSupersede.d.ts +32 -0
- package/dist/cli/conformSupersede.js +102 -0
- package/dist/cli/conformSupersede.js.map +1 -0
- package/dist/cli/coverage.d.ts +17 -10
- package/dist/cli/coverage.js +61 -16
- package/dist/cli/coverage.js.map +1 -1
- package/dist/cli/frontmatterSurgery.d.ts +28 -0
- package/dist/cli/frontmatterSurgery.js +66 -0
- package/dist/cli/frontmatterSurgery.js.map +1 -0
- package/dist/cli/markImplemented.js +6 -45
- package/dist/cli/markImplemented.js.map +1 -1
- package/dist/cli/ratify.d.ts +41 -0
- package/dist/cli/ratify.js +151 -0
- package/dist/cli/ratify.js.map +1 -0
- package/dist/cli/reratify.d.ts +33 -0
- package/dist/cli/reratify.js +137 -0
- package/dist/cli/reratify.js.map +1 -0
- package/dist/cli/skillCheck.d.ts +6 -0
- package/dist/cli/skillCheck.js +46 -0
- package/dist/cli/skillCheck.js.map +1 -1
- package/dist/cli/skillDirs.d.ts +15 -0
- package/dist/cli/skillDirs.js +34 -0
- package/dist/cli/skillDirs.js.map +1 -0
- package/dist/cli/skillSync.d.ts +10 -0
- package/dist/cli/skillSync.js +15 -0
- package/dist/cli/skillSync.js.map +1 -1
- package/dist/cli/sliceIndex.d.ts +3 -0
- package/dist/cli/sliceIndex.js +6 -2
- package/dist/cli/sliceIndex.js.map +1 -1
- package/dist/cli/sliceLink.d.ts +52 -0
- package/dist/cli/sliceLink.js +152 -0
- package/dist/cli/sliceLink.js.map +1 -0
- package/dist/cli/status.d.ts +261 -0
- package/dist/cli/status.js +536 -0
- package/dist/cli/status.js.map +1 -0
- package/dist/cli/usageLog.d.ts +75 -0
- package/dist/cli/usageLog.js +193 -0
- package/dist/cli/usageLog.js.map +1 -0
- package/dist/cli.js +501 -130
- package/dist/cli.js.map +1 -1
- package/dist/emit/diffJson.d.ts +9 -1
- package/dist/emit/diffJson.js +44 -1
- package/dist/emit/diffJson.js.map +1 -1
- package/dist/emit/freshnessJson.d.ts +6 -0
- package/dist/emit/freshnessJson.js +24 -0
- package/dist/emit/freshnessJson.js.map +1 -0
- package/dist/emit/json.d.ts +67 -8
- package/dist/emit/json.js +19 -3
- package/dist/emit/json.js.map +1 -1
- package/dist/emit/statusJson.d.ts +7 -0
- package/dist/emit/statusJson.js +39 -0
- package/dist/emit/statusJson.js.map +1 -0
- package/dist/emit/typespec.d.ts +26 -0
- package/dist/emit/typespec.js +356 -0
- package/dist/emit/typespec.js.map +1 -0
- package/dist/emit/usageReportJson.d.ts +3 -0
- package/dist/emit/usageReportJson.js +23 -0
- package/dist/emit/usageReportJson.js.map +1 -0
- package/dist/mcp/server.d.ts +1 -1
- package/dist/mcp/server.js +301 -11
- package/dist/mcp/server.js.map +1 -1
- package/dist/model/rules.d.ts +13 -0
- package/dist/model/rules.js +20 -0
- package/dist/model/rules.js.map +1 -1
- package/dist/model/validate.js +9 -1
- package/dist/model/validate.js.map +1 -1
- package/dist/parser/ast.d.ts +6 -0
- package/dist/parser/parser.js +20 -6
- package/dist/parser/parser.js.map +1 -1
- package/dist/render/drawNotes.d.ts +11 -1
- package/dist/render/drawNotes.js +20 -2
- package/dist/render/drawNotes.js.map +1 -1
- package/dist/render/render.js +31 -6
- package/dist/render/render.js.map +1 -1
- package/dist/render/serve.js +4 -0
- package/dist/render/serve.js.map +1 -1
- package/dist/render/sliceOverlay.d.ts +7 -2
- package/dist/render/sliceOverlay.js +19 -7
- package/dist/render/sliceOverlay.js.map +1 -1
- package/dist/render/sliceStatus.d.ts +7 -3
- package/dist/render/sliceStatus.js +21 -14
- package/dist/render/sliceStatus.js.map +1 -1
- package/dist/render/viewerHtml.js +1 -1
- package/dist/render/viewerHtml.js.map +1 -1
- package/dist/templates.d.ts +2 -2
- package/dist/templates.js +5 -5
- package/dist/util/markers.d.ts +16 -4
- package/dist/util/markers.js +23 -10
- package/dist/util/markers.js.map +1 -1
- package/package.json +2 -1
- /package/.claude/skills/{event-modeling → event-modeling-shared}/templates/conformance-report.md +0 -0
- /package/.claude/skills/{event-modeling → event-modeling-shared}/templates/state.md +0 -0
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// `em state log-usage` / `em usage-report` (MIL-161 finding #2): mechanizes the two
|
|
3
|
+
// hand-maintained halves of docs/usage-data.md's Usage log convention.
|
|
4
|
+
//
|
|
5
|
+
// - WRITE (`em state log-usage`, `appendUsageLogEntry` below): every session currently ends
|
|
6
|
+
// with the agent running `em validate --json`, pulling each diagnostic's `usageCategory`,
|
|
7
|
+
// deduping by hand, and hand-formatting one line into the exact
|
|
8
|
+
// `- YYYY-MM-DD: phases: X, Y — validate: A, B` shape docs/usage-data.md#categories requires
|
|
9
|
+
// verbatim. docs/usage-data.md:48-50 names the failure mode this replaces: two sessions
|
|
10
|
+
// writing "read model with no source" vs. "read model has no source" for the same rule
|
|
11
|
+
// silently split one count into two in aggregation. Deriving `phases`/categories from actual
|
|
12
|
+
// tool output instead of free recall, and writing the line with one canonical formatter,
|
|
13
|
+
// removes the chance of that drift entirely.
|
|
14
|
+
//
|
|
15
|
+
// - READ (`em usage-report`, `aggregateUsageReport`/`parseUsageLogSection` below): replaces
|
|
16
|
+
// docs/usage-data.md#aggregating-across-models-for-a-retro's hand-rolled `grep`/`awk`/`sort`
|
|
17
|
+
// pipeline (with its documented `LC_ALL=C` + UTF-8 em-dash caveat) with a plain, locale-
|
|
18
|
+
// independent parse over every `.event-modeling.md` under a root directory. A logged line
|
|
19
|
+
// that doesn't match the canonical format (hand-authored before this command existed, or
|
|
20
|
+
// edited by hand since) is surfaced in `unparseableLines` rather than silently mistallied or
|
|
21
|
+
// silently dropped — the same "never guess, report the uncertainty" posture the rest of `em`
|
|
22
|
+
// holds for anything it can't parse cleanly.
|
|
23
|
+
//
|
|
24
|
+
// Deliberately its own module, not folded into stateFile.ts: that module's header explicitly
|
|
25
|
+
// scopes itself to the six MECHANICAL top bullets, calling the Usage log (like the Decisions
|
|
26
|
+
// log, Open questions, ...) "agent-authored prose and out of scope here." This module's write
|
|
27
|
+
// side stays true to that spirit — it only ever APPENDS one new, fully-formed line; it never
|
|
28
|
+
// edits, re-reads, or reformats an existing one, so a hand-authored history predating this
|
|
29
|
+
// command is left exactly as it was written.
|
|
30
|
+
import { basename } from "node:path";
|
|
31
|
+
import { PHASES, STATE_FILE_NAME } from "./stateFile.js";
|
|
32
|
+
import { walkDir } from "../util/walkDir.js";
|
|
33
|
+
/** The Usage log's phase vocabulary (docs/usage-data.md#what-s-captured-and-where): the state
|
|
34
|
+
* file's own `Current phase:` enum (`stateFile.ts`'s `PHASES`) plus `watch` — a live-viewing
|
|
35
|
+
* activity a session can touch without ever being a `Current phase:` value itself (see
|
|
36
|
+
* `stateFile.ts`'s own comment on why `watch` is deliberately excluded there). Order here is
|
|
37
|
+
* the canonical sort order `log-usage` writes phases in, matching docs/usage-data.md's own
|
|
38
|
+
* listing order. */
|
|
39
|
+
export const USAGE_PHASES = [...PHASES, "watch"];
|
|
40
|
+
export function isUsagePhase(value) {
|
|
41
|
+
return USAGE_PHASES.includes(value);
|
|
42
|
+
}
|
|
43
|
+
/** Dedupe and sort a `--phases` list into `USAGE_PHASES`' own canonical order (matching
|
|
44
|
+
* docs/usage-data.md's own listing order) rather than input order or alphabetical — so two
|
|
45
|
+
* sessions naming the same phases in a different order always log an identical line. */
|
|
46
|
+
export function sortUsagePhases(phases) {
|
|
47
|
+
const order = USAGE_PHASES;
|
|
48
|
+
return [...new Set(phases)].sort((a, b) => order.indexOf(a) - order.indexOf(b));
|
|
49
|
+
}
|
|
50
|
+
const USAGE_LOG_HEADING_RE = /^## Usage log[ \t]*\r?\n/m;
|
|
51
|
+
/** Locate the "## Usage log" section's body span within a state file's text: `[bodyStart,
|
|
52
|
+
* bodyEnd)` covers everything between the heading line and the next `## ` heading (or
|
|
53
|
+
* end-of-file). `null` if the file has no such heading at all. Plain substring search for the
|
|
54
|
+
* next heading (not a second regex) — every heading in `templates/state.md` is `## <Title>`,
|
|
55
|
+
* so `"\n## "` is an exact, unambiguous anchor. */
|
|
56
|
+
function findUsageLogSection(text) {
|
|
57
|
+
const headingMatch = USAGE_LOG_HEADING_RE.exec(text);
|
|
58
|
+
if (!headingMatch)
|
|
59
|
+
return null;
|
|
60
|
+
const bodyStart = headingMatch.index + headingMatch[0].length;
|
|
61
|
+
const nextIdx = text.indexOf("\n## ", bodyStart);
|
|
62
|
+
const bodyEnd = nextIdx === -1 ? text.length : nextIdx + 1; // +1: keep pointing at the '#'
|
|
63
|
+
return { bodyStart, bodyEnd };
|
|
64
|
+
}
|
|
65
|
+
/** Format one Usage log bullet line — the ONE place this exact shape is generated, so
|
|
66
|
+
* `log-usage`'s writer and any future caller never drift from `usage-report`'s parser. */
|
|
67
|
+
export function formatUsageLogLine(date, phases, categories) {
|
|
68
|
+
return `- ${date}: phases: ${phases.join(", ")} — validate: ${categories.join(", ")}`;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Append one Usage log bullet to `text`'s "## Usage log" section — after whatever's already
|
|
72
|
+
* there (the guidance comment, and/or prior bullets), never editing or reordering existing
|
|
73
|
+
* content. `phases`/`categories` are trusted already-deduped, already-sorted, non-empty arrays
|
|
74
|
+
* (the CLI layer owns that — see `sortByCanonicalOrder`/dedup below); `categories` is `["none"]`
|
|
75
|
+
* when nothing fired. Fails (without writing anything) if the file has no "## Usage log"
|
|
76
|
+
* heading at all — same "refuse rather than guess where it goes" discipline
|
|
77
|
+
* `stateFile.ts`'s `applyBulletUpdates` uses for a missing mechanical bullet.
|
|
78
|
+
*/
|
|
79
|
+
export function appendUsageLogEntry(text, date, phases, categories) {
|
|
80
|
+
const section = findUsageLogSection(text);
|
|
81
|
+
if (!section)
|
|
82
|
+
return { ok: false, message: 'missing "## Usage log" section' };
|
|
83
|
+
const { bodyStart, bodyEnd } = section;
|
|
84
|
+
const body = text.slice(bodyStart, bodyEnd);
|
|
85
|
+
const trimmed = body.replace(/[ \t\r\n]+$/, "");
|
|
86
|
+
const trailing = body.slice(trimmed.length) || "\n\n";
|
|
87
|
+
const prefix = trimmed.length > 0 ? `${trimmed}\n` : "";
|
|
88
|
+
const newBody = prefix + formatUsageLogLine(date, phases, categories) + trailing;
|
|
89
|
+
return { ok: true, text: text.slice(0, bodyStart) + newBody + text.slice(bodyEnd) };
|
|
90
|
+
}
|
|
91
|
+
const USAGE_LOG_LINE_RE = /^-\s+(\d{4}-\d{2}-\d{2}):\s*phases:\s*(.+?)\s*—\s*validate:\s*(.+?)\s*$/;
|
|
92
|
+
/**
|
|
93
|
+
* Parse every `- YYYY-MM-DD: phases: ... — validate: ...` bullet out of `text`'s "## Usage log"
|
|
94
|
+
* section. A line that starts with `- ` inside the section but doesn't match the canonical shape
|
|
95
|
+
* (hand-edited, or written before `log-usage` existed) is returned in `malformed` verbatim
|
|
96
|
+
* rather than silently skipped or force-fit — `usage-report` surfaces these so a stale/foreign
|
|
97
|
+
* format is visible, not invisibly under-counted. Lines that are just the guidance comment (or
|
|
98
|
+
* blank) are ignored entirely — only an actual `- ` bullet attempt counts as malformed.
|
|
99
|
+
*/
|
|
100
|
+
export function parseUsageLogSection(text) {
|
|
101
|
+
const section = findUsageLogSection(text);
|
|
102
|
+
if (!section)
|
|
103
|
+
return { entries: [], malformed: [] };
|
|
104
|
+
const body = text.slice(section.bodyStart, section.bodyEnd);
|
|
105
|
+
const entries = [];
|
|
106
|
+
const malformed = [];
|
|
107
|
+
for (const rawLine of body.split(/\r?\n/)) {
|
|
108
|
+
const line = rawLine.trim();
|
|
109
|
+
if (!line.startsWith("- "))
|
|
110
|
+
continue;
|
|
111
|
+
const m = USAGE_LOG_LINE_RE.exec(line);
|
|
112
|
+
if (!m) {
|
|
113
|
+
malformed.push(line);
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
entries.push({
|
|
117
|
+
date: m[1],
|
|
118
|
+
phases: m[2].split(",").map((s) => s.trim()).filter((s) => s.length > 0),
|
|
119
|
+
categories: m[3].split(",").map((s) => s.trim()).filter((s) => s.length > 0),
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
return { entries, malformed };
|
|
123
|
+
}
|
|
124
|
+
/** Every `.event-modeling.md` under `root`, recursively, as paths relative to `root` — sorted,
|
|
125
|
+
* POSIX forward slashes (see `walkDir`). Prunes VCS/dependency directories a repo-wide sweep
|
|
126
|
+
* should never descend into. */
|
|
127
|
+
export function findStateFiles(root) {
|
|
128
|
+
return walkDir(root, { skipDir: (name) => name === "node_modules" || name === ".git" }).filter((relPath) => basename(relPath) === STATE_FILE_NAME);
|
|
129
|
+
}
|
|
130
|
+
/** Sort by count descending, ties broken alphabetically — deterministic regardless of Map
|
|
131
|
+
* insertion order (which itself depends on file-walk/parse order). */
|
|
132
|
+
function sortCounts(counts) {
|
|
133
|
+
return [...counts.entries()]
|
|
134
|
+
.map(([key, count]) => ({ key, count }))
|
|
135
|
+
.sort((a, b) => b.count - a.count || a.key.localeCompare(b.key));
|
|
136
|
+
}
|
|
137
|
+
/** Aggregate every input file's Usage log into one report — pure, no I/O; the CLI layer resolves
|
|
138
|
+
* `entries` first (`findStateFiles` + a plain read per file). `root` is carried through only
|
|
139
|
+
* for the report's own labeling, never used to re-derive `files`. */
|
|
140
|
+
export function aggregateUsageReport(root, entries) {
|
|
141
|
+
const phaseCounts = new Map();
|
|
142
|
+
const categoryCounts = new Map();
|
|
143
|
+
const unparseableLines = [];
|
|
144
|
+
let sessions = 0;
|
|
145
|
+
for (const { file, text } of entries) {
|
|
146
|
+
const { entries: logEntries, malformed } = parseUsageLogSection(text);
|
|
147
|
+
for (const line of malformed)
|
|
148
|
+
unparseableLines.push({ file, line });
|
|
149
|
+
for (const entry of logEntries) {
|
|
150
|
+
sessions++;
|
|
151
|
+
for (const p of entry.phases)
|
|
152
|
+
phaseCounts.set(p, (phaseCounts.get(p) ?? 0) + 1);
|
|
153
|
+
for (const c of entry.categories) {
|
|
154
|
+
if (c === "none")
|
|
155
|
+
continue;
|
|
156
|
+
categoryCounts.set(c, (categoryCounts.get(c) ?? 0) + 1);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return {
|
|
161
|
+
root,
|
|
162
|
+
files: entries.map((e) => e.file).sort(),
|
|
163
|
+
sessions,
|
|
164
|
+
phaseCounts: sortCounts(phaseCounts),
|
|
165
|
+
categoryCounts: sortCounts(categoryCounts),
|
|
166
|
+
unparseableLines,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
/** Text report: a one-line summary, then a phase tally and a category tally, each empty-aware. */
|
|
170
|
+
export function formatUsageReportText(report) {
|
|
171
|
+
const lines = [];
|
|
172
|
+
lines.push(`${report.files.length} state file(s) under ${report.root}, ${report.sessions} logged session(s)`);
|
|
173
|
+
lines.push("");
|
|
174
|
+
lines.push("Phases touched:");
|
|
175
|
+
if (report.phaseCounts.length === 0)
|
|
176
|
+
lines.push(" (none logged)");
|
|
177
|
+
for (const { key, count } of report.phaseCounts)
|
|
178
|
+
lines.push(` ${count}\t${key}`);
|
|
179
|
+
lines.push("");
|
|
180
|
+
lines.push("Validate diagnostic categories hit:");
|
|
181
|
+
if (report.categoryCounts.length === 0)
|
|
182
|
+
lines.push(" (none logged)");
|
|
183
|
+
for (const { key, count } of report.categoryCounts)
|
|
184
|
+
lines.push(` ${count}\t${key}`);
|
|
185
|
+
if (report.unparseableLines.length > 0) {
|
|
186
|
+
lines.push("");
|
|
187
|
+
lines.push(`${report.unparseableLines.length} line(s) didn't match the canonical format (not counted above):`);
|
|
188
|
+
for (const { file, line } of report.unparseableLines)
|
|
189
|
+
lines.push(` ${file}: ${line}`);
|
|
190
|
+
}
|
|
191
|
+
return lines.join("\n");
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=usageLog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usageLog.js","sourceRoot":"","sources":["../../src/cli/usageLog.ts"],"names":[],"mappings":"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"}
|