@milehimikey/em 1.19.7 → 1.21.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 +1 -1
- package/.claude/skills/event-modeling-conform/SKILL.md +1 -1
- package/.claude/skills/event-modeling-conform/reference/conform.md +29 -1
- package/.claude/skills/event-modeling-design/SKILL.md +33 -7
- package/.claude/skills/event-modeling-discover/SKILL.md +2 -2
- package/.claude/skills/event-modeling-discover/reference/extract.md +12 -0
- package/.claude/skills/event-modeling-engagement/SKILL.md +1 -1
- package/.claude/skills/event-modeling-implement/SKILL.md +7 -2
- package/.claude/skills/event-modeling-implement/reference/implement.md +73 -6
- package/.claude/skills/event-modeling-review/SKILL.md +19 -7
- package/.claude/skills/event-modeling-shared/reference/em-dsl.md +57 -5
- package/.claude/skills/event-modeling-shared/reference/methodology.md +51 -2
- package/.claude/skills/event-modeling-shared/reference/slice-doc-schema.md +2 -1
- package/.claude/skills/event-modeling-shared/templates/model-readme.md +10 -2
- package/.claude/skills/event-modeling-shared/templates/slice.md +12 -1
- package/.claude-plugin/marketplace.json +2 -2
- package/dist/catalog/build.js +6 -5
- package/dist/catalog/build.js.map +1 -1
- package/dist/catalog/coverage.d.ts +3 -0
- package/dist/catalog/coverage.js +12 -0
- package/dist/catalog/coverage.js.map +1 -1
- package/dist/catalog/docBadge.d.ts +16 -0
- package/dist/catalog/docBadge.js +50 -0
- package/dist/catalog/docBadge.js.map +1 -0
- package/dist/catalog/docLocate.d.ts +17 -0
- package/dist/catalog/docLocate.js +97 -0
- package/dist/catalog/docLocate.js.map +1 -0
- package/dist/catalog/docModelConsistencyValidate.js +9 -2
- package/dist/catalog/docModelConsistencyValidate.js.map +1 -1
- package/dist/catalog/frontmatterCoherenceValidate.js +16 -1
- package/dist/catalog/frontmatterCoherenceValidate.js.map +1 -1
- package/dist/catalog/invTokens.d.ts +49 -0
- package/dist/catalog/invTokens.js +94 -0
- package/dist/catalog/invTokens.js.map +1 -0
- package/dist/catalog/orphanedSliceDocValidate.js +15 -10
- package/dist/catalog/orphanedSliceDocValidate.js.map +1 -1
- package/dist/catalog/pages.js +48 -1
- package/dist/catalog/pages.js.map +1 -1
- package/dist/catalog/readSliceDoc.js +5 -4
- package/dist/catalog/readSliceDoc.js.map +1 -1
- package/dist/catalog/scenarioQualityValidate.js +2 -2
- package/dist/catalog/scenarioQualityValidate.js.map +1 -1
- package/dist/catalog/scenarios.d.ts +4 -0
- package/dist/catalog/scenarios.js +4 -1
- package/dist/catalog/scenarios.js.map +1 -1
- package/dist/catalog/sliceDoc.d.ts +54 -1
- package/dist/catalog/sliceDoc.js +99 -2
- package/dist/catalog/sliceDoc.js.map +1 -1
- package/dist/catalog/sliceDocRender.d.ts +3 -0
- package/dist/catalog/sliceDocRender.js +295 -0
- package/dist/catalog/sliceDocRender.js.map +1 -0
- package/dist/catalog/sliceSections.d.ts +18 -1
- package/dist/catalog/sliceSections.js +38 -4
- package/dist/catalog/sliceSections.js.map +1 -1
- package/dist/cli/coverage.d.ts +13 -23
- package/dist/cli/coverage.js +51 -91
- package/dist/cli/coverage.js.map +1 -1
- package/dist/cli/defer.js +3 -2
- package/dist/cli/defer.js.map +1 -1
- package/dist/cli/ledgerCheck.js +11 -8
- package/dist/cli/ledgerCheck.js.map +1 -1
- package/dist/cli/markImplemented.js +2 -2
- package/dist/cli/markImplemented.js.map +1 -1
- package/dist/cli/ratify.js +2 -2
- package/dist/cli/ratify.js.map +1 -1
- package/dist/cli/refsCheck.d.ts +52 -0
- package/dist/cli/refsCheck.js +129 -2
- package/dist/cli/refsCheck.js.map +1 -1
- package/dist/cli/render-inputs.d.ts +1 -1
- package/dist/cli/render-inputs.js +3 -2
- package/dist/cli/render-inputs.js.map +1 -1
- package/dist/cli/review.js +2 -2
- package/dist/cli/review.js.map +1 -1
- package/dist/cli/revise.js +2 -2
- package/dist/cli/revise.js.map +1 -1
- package/dist/cli/skillDirs.d.ts +22 -0
- package/dist/cli/skillDirs.js +24 -0
- package/dist/cli/skillDirs.js.map +1 -1
- package/dist/cli/sliceConform.d.ts +57 -1
- package/dist/cli/sliceConform.js +111 -10
- package/dist/cli/sliceConform.js.map +1 -1
- package/dist/cli/sliceIndex.d.ts +19 -3
- package/dist/cli/sliceIndex.js +81 -17
- package/dist/cli/sliceIndex.js.map +1 -1
- package/dist/cli/sliceNew.js +2 -0
- package/dist/cli/sliceNew.js.map +1 -1
- package/dist/cli/sliceStubAll.js +7 -2
- package/dist/cli/sliceStubAll.js.map +1 -1
- package/dist/cli/sliceSync.d.ts +12 -0
- package/dist/cli/sliceSync.js +42 -4
- package/dist/cli/sliceSync.js.map +1 -1
- package/dist/cli/status.d.ts +3 -4
- package/dist/cli/status.js +5 -4
- package/dist/cli/status.js.map +1 -1
- package/dist/cli/storylineSplit.d.ts +18 -0
- package/dist/cli/storylineSplit.js +110 -0
- package/dist/cli/storylineSplit.js.map +1 -0
- package/dist/cli/upgrade.js +39 -14
- package/dist/cli/upgrade.js.map +1 -1
- package/dist/cli/watchStoryline.d.ts +33 -0
- package/dist/cli/watchStoryline.js +65 -0
- package/dist/cli/watchStoryline.js.map +1 -0
- package/dist/cli.js +423 -71
- package/dist/cli.js.map +1 -1
- package/dist/emit/docJson.d.ts +99 -0
- package/dist/emit/docJson.js +197 -0
- package/dist/emit/docJson.js.map +1 -0
- package/dist/emit/json.d.ts +22 -1
- package/dist/emit/json.js +12 -1
- package/dist/emit/json.js.map +1 -1
- package/dist/emit/refsJson.d.ts +5 -3
- package/dist/emit/refsJson.js +5 -2
- package/dist/emit/refsJson.js.map +1 -1
- package/dist/mcp/server.js +43 -9
- package/dist/mcp/server.js.map +1 -1
- package/dist/model/continuation.d.ts +9 -0
- package/dist/model/continuation.js +30 -0
- package/dist/model/continuation.js.map +1 -1
- package/dist/model/edges.d.ts +1 -1
- package/dist/model/edges.js +8 -1
- package/dist/model/edges.js.map +1 -1
- package/dist/model/loadModel.d.ts +38 -0
- package/dist/model/loadModel.js +122 -0
- package/dist/model/loadModel.js.map +1 -0
- package/dist/model/model.d.ts +9 -4
- package/dist/model/model.js +4 -0
- package/dist/model/model.js.map +1 -1
- package/dist/model/rules.d.ts +31 -0
- package/dist/model/rules.js +31 -0
- package/dist/model/rules.js.map +1 -1
- package/dist/model/shapeLint.js +143 -0
- package/dist/model/shapeLint.js.map +1 -1
- package/dist/model/sliceDocIndex.js +13 -5
- package/dist/model/sliceDocIndex.js.map +1 -1
- package/dist/model/sliceDocPath.d.ts +19 -0
- package/dist/model/sliceDocPath.js +49 -0
- package/dist/model/sliceDocPath.js.map +1 -0
- package/dist/model/storylineMap.d.ts +20 -0
- package/dist/model/storylineMap.js +55 -0
- package/dist/model/storylineMap.js.map +1 -0
- package/dist/model/validate.d.ts +7 -0
- package/dist/model/validate.js +127 -0
- package/dist/model/validate.js.map +1 -1
- package/dist/parser/ast.d.ts +27 -0
- package/dist/parser/parser.d.ts +17 -1
- package/dist/parser/parser.js +142 -3
- package/dist/parser/parser.js.map +1 -1
- package/dist/pipeline.d.ts +16 -0
- package/dist/pipeline.js +19 -2
- package/dist/pipeline.js.map +1 -1
- package/dist/render/drawEdges.d.ts +5 -1
- package/dist/render/drawEdges.js +57 -4
- package/dist/render/drawEdges.js.map +1 -1
- package/dist/render/drawNotes.d.ts +4 -1
- package/dist/render/drawNotes.js +40 -10
- package/dist/render/drawNotes.js.map +1 -1
- package/dist/render/render.d.ts +11 -0
- package/dist/render/render.js +93 -10
- package/dist/render/render.js.map +1 -1
- package/dist/render/serve.d.ts +5 -0
- package/dist/render/serve.js +18 -2
- package/dist/render/serve.js.map +1 -1
- package/dist/render/sliceDiagram.js +3 -0
- package/dist/render/sliceDiagram.js.map +1 -1
- package/dist/render/sliceOverlay.d.ts +5 -1
- package/dist/render/sliceOverlay.js +24 -2
- package/dist/render/sliceOverlay.js.map +1 -1
- package/dist/render/sliceStatus.d.ts +8 -0
- package/dist/render/sliceStatus.js +22 -15
- package/dist/render/sliceStatus.js.map +1 -1
- package/dist/render/storylineBands.d.ts +0 -3
- package/dist/render/storylineBands.js +2 -22
- package/dist/render/storylineBands.js.map +1 -1
- package/dist/render/storylineDiagram.js +17 -69
- package/dist/render/storylineDiagram.js.map +1 -1
- package/dist/render/storylineMap.d.ts +18 -0
- package/dist/render/storylineMap.js +263 -0
- package/dist/render/storylineMap.js.map +1 -0
- package/dist/render/storylinePicker.d.ts +9 -0
- package/dist/render/storylinePicker.js +17 -0
- package/dist/render/storylinePicker.js.map +1 -0
- package/dist/render/svgGeometry.d.ts +9 -0
- package/dist/render/svgGeometry.js +16 -0
- package/dist/render/svgGeometry.js.map +1 -1
- package/dist/render/viewerHtml.js +1 -1
- package/dist/render/viewerHtml.js.map +1 -1
- package/dist/templates.d.ts +1 -1
- package/dist/templates.js +10 -2
- package/dist/templates.js.map +1 -1
- package/package.json +1 -1
- package/plugin/.claude-plugin/plugin.json +2 -2
- package/plugin/shared/reference/em-dsl.md +57 -5
- package/plugin/shared/reference/methodology.md +51 -2
- package/plugin/shared/reference/slice-doc-schema.md +2 -1
- package/plugin/shared/templates/model-readme.md +10 -2
- package/plugin/shared/templates/slice.md +12 -1
- package/plugin/skills/conform/SKILL.md +1 -1
- package/plugin/skills/conform/reference/conform.md +29 -1
- package/plugin/skills/design/SKILL.md +33 -7
- package/plugin/skills/discover/SKILL.md +2 -2
- package/plugin/skills/discover/reference/extract.md +12 -0
- package/plugin/skills/engagement/SKILL.md +1 -1
- package/plugin/skills/event-modeling/SKILL.md +1 -1
- package/plugin/skills/implement/SKILL.md +7 -2
- package/plugin/skills/implement/reference/implement.md +73 -6
- package/plugin/skills/review/SKILL.md +19 -7
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: discover
|
|
3
|
-
em-version: 1.
|
|
3
|
+
em-version: 1.21.0
|
|
4
4
|
description: >-
|
|
5
5
|
Use when starting a brand-new event model from scratch — greenfield discovery: brainstorming
|
|
6
6
|
past-tense events, storyboarding the happy path, finding the commands and read models — or when
|
|
@@ -69,7 +69,7 @@ Goal: a draft model of events, storyboard, commands, and views. Loose is OK; str
|
|
|
69
69
|
**Close the loop before leaving this step:** every event from step 3 must be read by at least one
|
|
70
70
|
read model. Walk the event list and ask, for each one, *"who looks at this, and what do they do
|
|
71
71
|
with it?"* An event with no answer is either missing its read model or shouldn't be recorded —
|
|
72
|
-
both are worth raising with the user rather than leaving dangling.
|
|
72
|
+
both are worth raising with the user rather than leaving dangling. Keep the draft in one file with inline `storyline` blocks; the design phase splits it into one file per story (`em storyline split`) once the names are settled.
|
|
73
73
|
|
|
74
74
|
End of phase: write/refresh the `.em`, render it, update `.event-modeling.md` (steps done,
|
|
75
75
|
decisions, open questions — run `em state set-phase model` rather than hand-editing `Current
|
|
@@ -97,6 +97,18 @@ it is fine to finish a round with `# TBD`s still parked.
|
|
|
97
97
|
read model* warnings: real systems do record fire-and-forget events. In an as-is model that is
|
|
98
98
|
a **finding about the system**, not a modelling mistake — never invent a reader to silence it
|
|
99
99
|
(that would be desired state). Park it in the Decisions log and carry the warning.
|
|
100
|
+
**Expect lookup-style sources too.** A lifted model will faithfully reproduce the projection's
|
|
101
|
+
lookup joins — a view wired to `from "Order Created"` only because the current query joins the
|
|
102
|
+
orders table to get `customerName`, not because this view owns any row that event changes. Wire
|
|
103
|
+
it as-is (current-state-only stance: that join is how the system behaves today); don't fix it
|
|
104
|
+
here, that would be inventing desired state. Note it as a finding in the Decisions log the same
|
|
105
|
+
way as an unread event, and leave it for `model`/`slice` to apply the views-as-lookups rule
|
|
106
|
+
(`../../../shared/reference/methodology.md`, "Views as lookups") once the as-is
|
|
107
|
+
model is agreed. **Housekeeping handlers are `updates from`, as-is:** when the projection code
|
|
108
|
+
handles an event only to update or delete a row it already holds (a status flip, a due date
|
|
109
|
+
moved, an address changed, a row removed), write that event in `updates from "…"`, not `from` —
|
|
110
|
+
that is what the code does today, it keeps the field tracing complete, and the as-is render then
|
|
111
|
+
shows the one line that puts work on the list instead of every handler.
|
|
100
112
|
- **R5 — Boundaries & reactions.** Current automations and integrations as-is: schedulers,
|
|
101
113
|
listeners, outbound syncs, inbound webhooks. Model each as a reaction sharing its slice with
|
|
102
114
|
the `command` + `event` it triggers (`reaction → command → event`, per `em-dsl.md`) — the
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: event-modeling
|
|
3
|
-
em-version: 1.
|
|
3
|
+
em-version: 1.21.0
|
|
4
4
|
description: >-
|
|
5
5
|
Use when the user runs `/em:event-modeling` (with or without a phase name), or wants to resume an
|
|
6
6
|
event-modeling session without specifying which part of the process applies. Reads the model's
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: implement
|
|
3
|
-
em-version: 1.
|
|
3
|
+
em-version: 1.21.0
|
|
4
4
|
description: >-
|
|
5
5
|
Use when building a single ratified event-modeling slice (status: ready-to-implement) into
|
|
6
6
|
merged, tested code — the one phase where the agent builds rather than facilitates. Gates on
|
|
@@ -53,7 +53,12 @@ routing table (§7) is what names the skill set for each pattern.
|
|
|
53
53
|
Preconditions (tool check, model location) are the same as every other phase — see
|
|
54
54
|
`${CLAUDE_PLUGIN_ROOT}/shared/reference/operating-principles.md` — but this phase additionally
|
|
55
55
|
requires the target slice to already be ratified; if it isn't, stop and say so rather than
|
|
56
|
-
starting on unratified work.
|
|
56
|
+
starting on unratified work. The one documented exception is **inline ratification** (GH #399,
|
|
57
|
+
`reference/implement.md` §1a): for an internal (non-public-touching, non-engagement) slice whose
|
|
58
|
+
doc is already `reviewed`, drafting code on the same branch ahead of the human's `em slice
|
|
59
|
+
ratify` is sanctioned — provided you never flip the gate yourself and re-confirm
|
|
60
|
+
`--slice-ready` reads `true` before treating the slice as done. `em:engagement` is
|
|
61
|
+
unchanged by this: it still requires every dispatched slice ratified before its branch is cut.
|
|
57
62
|
|
|
58
63
|
End of phase: PR merged, slice doc flipped to `status: implemented` with `implementedIn`
|
|
59
64
|
filled, `em slice index <model-name>.em` run to refresh `README.md`'s Slices table. Implement
|
|
@@ -47,15 +47,82 @@ A warning whose code is in this list blocks; any other warning never does — `c
|
|
|
47
47
|
|
|
48
48
|
Because of that list, `ready` can be `false` with every `gates` entry `true` (a `both-ends-of-a-flow/*` warning on one of the slice's own elements, say). Don't work it out from `gates`: read **`blockedBy`** (schema `1.5`, GH #377), the codes that flipped `ready`, `[]` exactly when it is `true`, and report those codes with the `false` gates when you hand the slice back.
|
|
49
49
|
|
|
50
|
-
**`ready: false` means stop** — with
|
|
51
|
-
with `driftSignal: in-sync` or `uncertified` (MIL-214) also reads `ready: false`
|
|
52
|
-
`statusReady` gate fails because nothing is newly ratified), and that specific case is
|
|
53
|
-
re-implementation/repair, not a blocker — see §3's third mode before treating it as one.
|
|
50
|
+
**`ready: false` means stop** — with two named exceptions. First: a slice already `status:
|
|
51
|
+
implemented` with `driftSignal: in-sync` or `uncertified` (MIL-214) also reads `ready: false`
|
|
52
|
+
(its `statusReady` gate fails because nothing is newly ratified), and that specific case is
|
|
53
|
+
re-implementation/repair, not a blocker — see §3's third mode before treating it as one. Second:
|
|
54
|
+
under **inline ratification** (§1a) a slice doc that's only `status: reviewed` — not yet
|
|
55
|
+
`ready-to-implement` — is a sanctioned starting point for drafting code on the SAME branch, with
|
|
56
|
+
the explicit, non-negotiable condition that you treat nothing as actually ratified, and open
|
|
57
|
+
nothing for merge, until a human has run `em slice ratify` and `--slice-ready` reads `true` for
|
|
58
|
+
real; §1a names exactly which slices qualify and what that condition requires in practice. For
|
|
54
59
|
every other `false`, report which `gates`
|
|
55
60
|
entries are `false` and what `blockedBy` names (and any `diagnostics` entries concerning this
|
|
56
61
|
slice) and hand the slice back to the humans. Never make the gate pass yourself — checking an open-question box, flipping
|
|
57
|
-
`status`, or editing frontmatter are ratification decisions,
|
|
58
|
-
|
|
62
|
+
`status`, or editing frontmatter are ratification decisions, made by a human in a ratification
|
|
63
|
+
session, never by you running `em slice ratify` on their behalf. That session is usually a
|
|
64
|
+
separate doc-only PR, merged before an implementation branch is even cut — but it doesn't have
|
|
65
|
+
to be: **inline ratification** (GH #399, §1a below) lets the session be the PR review of the
|
|
66
|
+
very branch you're implementing on, for internal slices. Either shape, the rule here is the
|
|
67
|
+
same: you never flip the gate yourself, whatever branch you're on.
|
|
68
|
+
|
|
69
|
+
### 1a. The inline variant: ratifying on the implementation branch
|
|
70
|
+
|
|
71
|
+
Most of this document assumes the ordinary shape — a slice is already `ready-to-implement` when
|
|
72
|
+
you start, ratified in its own prior PR, and §1's gate reads `true` before you write a line of
|
|
73
|
+
code. **Inline ratification** is the documented alternative
|
|
74
|
+
(`docs/process.md`'s
|
|
75
|
+
["Inline ratification" section](https://github.com/milehimikey/em/blob/main/docs/process.md#inline-ratification-approval-as-the-ratification-session)):
|
|
76
|
+
draft the slice doc *and* build it on the same branch, spec commits first, and let the human's
|
|
77
|
+
review of that one PR be the ratification session — which means you are, deliberately and
|
|
78
|
+
sanctioned, building for most of that branch's life against a doc that reads `ready: false`.
|
|
79
|
+
What doesn't change: you still never flip `status` yourself, never run `em slice ratify` on the
|
|
80
|
+
human's behalf, and never write a word of the ratification record — see §1's second named
|
|
81
|
+
exception for the precise condition this depends on. What's different is sequencing and tiering:
|
|
82
|
+
|
|
83
|
+
- **Draft the doc first, then build on the same branch.** Commit the slice doc (through the
|
|
84
|
+
normal `slice` phase), get it reviewed (`em slice review --by`, flipping it to `status:
|
|
85
|
+
reviewed` — a human has to do this part too, same as always) before any implementation code,
|
|
86
|
+
even though doc and code will both live on one branch and merge in one PR. Writing code before
|
|
87
|
+
the doc exists, or before a human has looked at it, is retrofit — the exact failure mode inline
|
|
88
|
+
mode is named after avoiding — whether or not anyone ever checks for it.
|
|
89
|
+
- **You may keep building past a `reviewed`-but-not-yet-`ready-to-implement` doc, but nothing is
|
|
90
|
+
ratified until `em slice ratify` actually runs.** `--slice-ready` keeps reading `false` the
|
|
91
|
+
whole time you're building — that's expected, not a signal to stop, as long as the doc's
|
|
92
|
+
`status` is `reviewed` (not `draft`: an un-reviewed doc is never a valid base, inline or not).
|
|
93
|
+
On an inline branch the human typically runs `em slice ratify --no-ref` as part of approving
|
|
94
|
+
the PR (`--no-ref` because the branch is headed for a squash/rebase merge) — not something you
|
|
95
|
+
do for them, and not something you should expect to have happened before the PR is up for
|
|
96
|
+
review. Before you report the slice done, or treat §6's merge-time flip as legitimate,
|
|
97
|
+
re-check `--slice-ready` yourself and confirm it now reads `true` with `ratifiedBy:` set — if
|
|
98
|
+
it still doesn't, the slice isn't ratified yet and you say so instead of proceeding.
|
|
99
|
+
- **A post-signature doc edit still trips the hash check.** `ratifiedHash` doesn't know or care
|
|
100
|
+
which branch it was computed on — if something changes the doc's body after the human has
|
|
101
|
+
signed it (a gap surfaces, §4), `--slice-ready` and `em slice ratify` both refuse the stale
|
|
102
|
+
signature exactly as they would across two PRs. Route it through `em slice revise --withdraw`,
|
|
103
|
+
review, re-ratify (§4) — inline doesn't shortcut that loop, it just means the re-sign happens
|
|
104
|
+
on the branch you're already on instead of a fresh one.
|
|
105
|
+
- **Not every slice is a candidate.** A slice owning a `public` command, event or view
|
|
106
|
+
(`isPublicTouchingSlice`) keeps the separate doc PR — the contract is a promise to consumers
|
|
107
|
+
who never see your implementation diff, and `em slice ratify` already refuses a public-touching
|
|
108
|
+
slice without `--meaning-unchanged`/`--contract-change` regardless of which branch it runs on.
|
|
109
|
+
An engagement-dispatched slice is never inline either — engagements structurally need every
|
|
110
|
+
contract frozen before any implementer branch is cut, so the engagement skill never offers you
|
|
111
|
+
this shape (it is explicitly unchanged by GH #399 — this is a note for your own judgment
|
|
112
|
+
outside an engagement, not something to apply inside one).
|
|
113
|
+
- **Pre-ship advisory conform is the loop's natural checkpoint.** Before the PR merges, a human
|
|
114
|
+
(or you, if asked) can run `em slice conform <model>.em <key> --at <rev> --preview` — the
|
|
115
|
+
pre-ship, non-certifying mode (GH #400): same doc-resolution and findings-check read as a real
|
|
116
|
+
certification, legal before the slice has shipped, never writes `conformedVersion:`/
|
|
117
|
+
`conformedAt:`/`conformedOn:`. It's advisory and ephemeral by default (nothing written unless
|
|
118
|
+
`--write-findings` is passed) — a cheap "did I just drift from the doc I signed" look before
|
|
119
|
+
asking for the PR review that will also be the ratification.
|
|
120
|
+
- **The ordering advisory is informational, not yours to act on.** `em refs --check-order`
|
|
121
|
+
(GH #399) can report whether a commit on this branch touched code before the doc's
|
|
122
|
+
`ratifiedRef` — a retrofit smoke signal for the human reviewing the PR. It's advisory, never a
|
|
123
|
+
gate, and nothing in this skill asks you to run it or react to its output; if a human shows you
|
|
124
|
+
a `code-before-ratification` result, treat it the same as any other gap raised against your
|
|
125
|
+
work (§4), not as something to silence.
|
|
59
126
|
|
|
60
127
|
## 2. Read the spec
|
|
61
128
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: review
|
|
3
|
-
em-version: 1.
|
|
3
|
+
em-version: 1.21.0
|
|
4
4
|
description: >-
|
|
5
5
|
Use when starting em's live browser viewer (`em watch --serve`) so a team can watch a model
|
|
6
6
|
update in real time, or facilitating a SCHEDULED stakeholder walkthrough that steps through
|
|
@@ -16,8 +16,16 @@ description: >-
|
|
|
16
16
|
Start the watcher with `--serve` in the background:
|
|
17
17
|
`em watch <model-name>.em -o <model-name>.svg --serve` (run_in_background). It re-renders on every
|
|
18
18
|
save and pushes an instant reload to the browser over Server-Sent Events. Tell the user to open the
|
|
19
|
-
URL it prints
|
|
20
|
-
|
|
19
|
+
URL it prints and share their screen — updates appear the moment you save, with no polling and no
|
|
20
|
+
idle churn between edits.
|
|
21
|
+
|
|
22
|
+
What that URL opens depends on the model. A model that declares storylines opens on the
|
|
23
|
+
**storyline canvas** (`http://localhost:5173/map`): every storyline's own diagram in a draggable
|
|
24
|
+
frame, the flow between storylines drawn between frames, reloaded live on every save with the
|
|
25
|
+
layout kept. A frame's **open ›** drills into that storyline — the viewer on its own slices and
|
|
26
|
+
nothing from outside it — and **‹ Storylines** in the header returns to the canvas. A model
|
|
27
|
+
without storylines opens on the timeline (`http://localhost:5173/?svg=<model-name>.svg`). Never
|
|
28
|
+
send a room to the full timeline of a storyline model; the storyline is the unit people read.
|
|
21
29
|
|
|
22
30
|
The viewer navigates like a map — drag to pan, scroll/pinch to zoom, **Fit** to reset — and its
|
|
23
31
|
**Review mode** steps through slices one at a time (see the `review` phase below). A save that
|
|
@@ -35,10 +43,14 @@ speculation.** Don't propose this phase proactively; it exists for facilitated r
|
|
|
35
43
|
non-engineer stakeholders in the room, not routine model editing.
|
|
36
44
|
|
|
37
45
|
Start the same live server as `watch`: `em watch <model-name>.em -o <model-name>.svg --serve`
|
|
38
|
-
(run_in_background). Open the printed URL
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
46
|
+
(run_in_background). Open the printed URL and share the screen. With storylines, review one
|
|
47
|
+
storyline at a time: open it from the canvas (or start inside it with `--storyline "<name>"`),
|
|
48
|
+
then click **Review mode** in the header — Prev/Next walk that storyline's slices only. Between
|
|
49
|
+
storylines, **‹ Storylines** returns to the canvas, where the arrows between frames are the
|
|
50
|
+
order to take them in. Without storylines, click **Review mode** on the timeline. Use Prev/Next
|
|
51
|
+
(or the left/right arrow keys) to step through slices in declaration order — each one
|
|
52
|
+
pans/zooms into view with everything else dimmed, so the room's attention tracks one slice at
|
|
53
|
+
a time.
|
|
42
54
|
|
|
43
55
|
**When a State View slice is on screen, ask who reads it (MIL-215):** a person or client in the
|
|
44
56
|
room → the `ui` should draw it; another system → `public`; only an automation → nothing, it's
|