docs(event-storming): clear the Design-Level y-overlap and collapse the duplicate scheme - #1789
Conversation
…he duplicate scheme The Design-Level Y-Coordinate Table packed Actors (-200), Commands (-100) and Aggregates (0) into 100px gaps, under the ~199px threshold these layouts use. An x-aware check confirms both overlaps: rows in one phase table share an x band, so x always intersects and the test reduces to adjacent |dy|. Rows above the Aggregates baseline now sit 250px apart rather than the minimum that clears the threshold — 250px is what this file's own Spacing summary already states for vertical rows, and 200px would clear a "~199px" threshold by a single pixel. Aggregates stays the y=0 baseline and nothing below it moves. The orphaned block after the table restated a third coordinate scheme (Actors -250, Read Models -450, Hot Spots -250, alternatives +250) matching neither canonical table, and described Commands sitting on the y=0 baseline — true of the single-flow model it was written for, not of Design-Level, where Aggregates holds y=0. Its y literals are gone. What it uniquely carried survives: the flow reads left to right at 400px per item, and a step is a column, so the example now names table rows instead of restating their values. Refs melodic-software/medley#1555 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RhS3T7ShwJgKTrvk2Mvd3C
|
Claude finished @kyle-sexton's task in 1m 37s —— View job PR Review
SummaryClean, well-scoped documentation fix. The two findings described in the PR body are both addressed correctly, and the approach (single source of truth for y-values, row-name references instead of inline literals) is consistent with the pattern established in #1473 / #219. Finding 1 — y-value gaps: correctThe four rows above the Aggregates baseline are each spaced 250 px apart:
The new values agree with the Spacing summary at line 222 ( Finding 2 — orphaned block: correctly removedThe removed block opened with "Commands, Events, Policies all sit on y=0" — true of the single-flow model, not Design-Level, where Aggregates holds y=0. Restating Actors at
One minor observation: the old worked example included a Read Model at the head of the x=0 column; the new one starts at Actor. The example is illustrative rather than exhaustive, so this is a simplification not a loss, but worth being aware of if the example is ever expanded. Pre-existing gap worth a follow-up (not introduced here)Line 122 states "250px minimum between ALL adjacent rows", but the Process Modeling table (lines 162–169) uses 200 px gaps above its baseline (External Systems → Read Models → Actors → Main Flow). That is right at the ~199 px sticky threshold. The PR doesn't touch Process Modeling and the PR body notes it passes the geometric check, but 200 px clearing a "~199 px" bound by one pixel is the same category of fragility this PR fixes in Design-Level. Worth a follow-up issue. VerdictApprove. The y-value changes are arithmetically correct, the Spacing summary is now internally consistent across Design-Level, and the orphaned block's removal eliminates an actively wrong description of the baseline. No blocking issues. |
|
Claude finished @kyle-sexton's task in 43s —— View job Security Review — PR #1789
FindingsNo security issues found. This PR makes two changes, both confined to the
Areas checked and found clean:
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 7083f176f2
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Classifying the two actionable items from your review individually. The verdict itself and Findings 1-2 need no action — they confirm the diff rather than contest it.
On the deferral, per the review discipline's provenance test: this reproduces on Latency caveat, stated plainly: #1689 is filed Follow-up with the commit SHA for item 1 to come. |
The Design-Level Y-Coordinate Table never carried a Policies row, so the worked example borrowed Domain Events — a row whose Purpose reads "Orange — outcomes" while a policy is violet. Making the tables the sole home of y values turned that omission load-bearing: an element with no row leaves nothing correct to pick. Policies sits at 1650, directly below the two event rows, since a policy reacts to an event and the Process Modeling table already groups the two on its Event-Command-Policy spine. What-if challenges and BC Contracts (outbound) shift down 250px to keep every adjacent gap at or above the minimum. Consumers reference these rows by name, never by coordinate, so the shift stays inside this table. Also restores the Read Model that headed the example's x=0 column, so the example again walks every row it touches. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 1m 3s —— View job Security Review — PR #1789
FindingsNo security issues found. This PR's two commits (
Areas checked and found clean:
|
|
Claude finished @kyle-sexton's task in 2m 19s —— View job PR Review — follow-up commits
Review of commit
|
| Pair | Gap |
|---|---|
| BC Contracts (inbound, −1000) → Read Models (−750) | 250 px ✓ |
| Read Models (−750) → Actors (−500) | 250 px ✓ |
| Actors (−500) → Commands (−250) | 250 px ✓ |
| Commands (−250) → Aggregates (0) | 250 px ✓ |
| Aggregates (0) → Business Rules (300) | 300 px ✓ |
| Business Rules (300) → Domain Events (1100) | 800 px ✓ (stacking headroom) |
| Domain Events (1100) → Alternative outcomes (1400) | 300 px ✓ |
| Alternative outcomes (1400) → Policies (1650) | 250 px ✓ |
| Policies (1650) → What-if challenges (1950) | 300 px ✓ |
| What-if challenges (1950) → BC Contracts (outbound, 2250) | 300 px ✓ |
Every adjacent gap meets the 250 px minimum. The two shifted rows (What-if challenges 1700→1950, BC Contracts (outbound) 2000→2250) each move down exactly 250 px, preserving their original 300 px gaps.
The Purpose description — Violet — reactive \Whenever X, do Y`` — is accurate and consistent with how Policies is described elsewhere in the file.
Item 2 — Worked example: correct
Two corrections in the code fence at lines 197–205:
Read Model x=0 row: Read Modelsrestored at the head of the column — the element is back and its row reference is valid.Policy x=800 row: Policies— the row pointer is now correct. The previousrow: Domain Eventspointed to an orange-outcome row for a violet reactive element.
Every element in the example now references a row that exists in the table above it. No inline y-literals appear anywhere in the prose.
Consistency check — legend sizing note
Line 214 reads Design-Level legend (8+ types): 500w x 1800h. The 8+ is a floor on element-type count, not a row count, and Policies was already a valid element type in Design-Level boards — it just lacked a y-coordinate row. The legend note does not need updating.
Verdict
Approve. The two items from the classification comment are fully resolved. The table is now arithmetically consistent from top to bottom, the worked example is exhaustive over every row it walks, and the single-source invariant (tables are the only place y values are written) is upheld. No blocking issues.
|
Follow-up on item 1 (Read Model dropped from the worked example) — fixed in + Read Model x=0 row: Read Models
Actor x=0 row: Actors
Command x=0 row: CommandsThe same commit addresses the Item 2 (Process Modeling 200px gaps) stays deferred to melodic-software/medley#1689, filed Verification re-run after the change: adjacent- |
Summary
Implements the owner-approved decision on melodic-software/medley#1555: widen Design-Level row spacing past the overlap threshold, keeping the single-flow model, then collapse the orphaned duplicate scheme into a reference to the corrected table. Both findings live in one file,
plugins/event-storming/skills/simulation/reference/miro-integration.md.Finding 1 — the Design-Level table overlapped itself. Actors (
-200), Commands (-100) and Aggregates (0) sat in 100px gaps, under the ~199px threshold these layouts use.Rows above the Aggregates baseline now sit 250px apart. The decision permits any gap ≥200px; I used 250 for two reasons rather than taking the minimum. This file's own Spacing summary already states
Vertical (rows) | 250px, so 250 makes the table agree with the guidance printed below it. And the threshold is written as "~199px" — a 200px gap clears an approximate bound by one pixel, which is not margin. Aggregates stays they=0baseline. Rows below it were untouched as first pushed; review has since added aPoliciesrow, which shifts the two bottom rows down by 250px — see Finding 3.Finding 2 — the orphaned block was a third scheme, not a stale copy of either table. It restated Actors
-250, Read Models-450, Hot Spots-250, alternatives+250, matching neither canonical table, and it opened with "Main flow (y=0 baseline): Commands, Events, Policies all sit on y=0" — true of the single-flow model it was written for, but not of Design-Level, where Aggregates holdsy=0. So it was not merely duplicated, it was actively wrong for the phase it sat under.Its y literals are gone. What it uniquely carried is kept: the flow reads left to right at 400px per item, and one flow step is a column sharing an x. The worked example now names table rows instead of restating their values, so the tables stay the only place y is written down — the same treatment #1473 / #219 gave the drifting literals.
Finding 3 — the Design-Level table had no
Policiesrow (found in review). Raised as aP2 by
chatgpt-codex-connectoragainst the worked example.agentic-simulation.mdputspolicies on this board twice —
:875carries them over from Process Modeling, and:881adds more in Step 3 — but the Design-Level table never gave them a row, so the example
borrowed
Domain Events, whose Purpose column reads "Orange — outcomes" while a policy isviolet. Finding 2's new wording is what makes the omission load-bearing rather than
cosmetic: once the text says the tables are the only place y is written down, an element with
no row leaves an agent nothing correct to pick.
Pre-existing state was wrong differently — on
mainthe example readPolicy: x=800, y=0,and
y=0in this phase is the Aggregates baseline. So the gap predates this PR, but itlands on lines this PR rewrote under a rule this PR tightened, which makes it a fix rather
than a deferral.
Policiesnow sits at 1650, directly below the two event rows — a policy reacts to anevent, and the Process Modeling table already groups the two on its
Event-Command-Policyspine. That keeps
Domain EventsandAlternative outcomesadjacent and keeps internalreactive logic above the
BC Contracts (outbound)boundary row. It shiftsWhat-if challenges1700 → 1950 andBC Contracts (outbound)2000 → 2250. Nothingdownstream restates these values —
simulation-evaluation.md,iteration-workflow.mdandSKILL.mdall reference phase rows by name, never by coordinate — so the shift iscontained to this one table.
Review also noted the worked example had dropped the Read Model that used to head its
x=0column. Restored, so the example again walks every row it touches.
Test plan
The issue asks for an x-aware geometric overlap check (two elements overlap only when their x-ranges intersect and
|Δy| < ~199px). Every row in one phase's table shares the same x band — a flow step is a column — so x always intersects and the test reduces to adjacent|Δy|across the sorted rows.Run against
origin/mainand against this branch:Before — reproduces exactly the two overlaps the issue reported:
After:
That the before run independently reproduces the issue's reported figures is what makes the after run meaningful — the check is measuring the right thing, not passing vacuously.
The other two phase tables were run through the same check to confirm this change did not disturb them: Big Picture — no overlaps; Process Modeling — no overlaps.
After Finding 3's row insert, the same adjacent-
|dy|walk was re-run over the widenedDesign-Level table, since the shift has to keep clearing the minimum. This run also flags
gaps that clear the ~199px overlap bound but fall under the file's own stated 250px minimum,
which the earlier pass did not distinguish:
The walk reads each row's declared y, so the Business Rules row shows an 800px delta to
Domain Events; that row stacks at 300/550/800, so the real clearance from the bottom of the
stack is 300px. Every other pair is its literal gap.
Big Picture stays clean on that stricter check. Process Modeling does not — its three
rows above the baseline are 200px apart, clear of the ~199px overlap bound but 50px short of
the stated minimum. That is pre-existing, reproduces on
main, and is out of scope here;filed as melodic-software/medley#1689 with the mechanical output.
markdownlint-cli2on the edited file: 0 errors.Not covered
No Miro render was performed — the verification is geometric, as the issue specifies. A to-scale visual confirmation is still worth doing by whoever next opens one of these boards, since only a render exercises sticky dimensions rather than centre coordinates.
Related
Refs melodic-software/medley#1555
🤖 Generated with Claude Code
https://claude.ai/code/session_01RhS3T7ShwJgKTrvk2Mvd3C
Fixes melodic-software/medley#1555