v0.4.0 — DisC Studio launch
The wizard grew up. It's now DisC Studio — the companion editor for
DisC. Designs are first-class authoring objects with decision tables,
explicit system-under-test marking, and a step composer you can actually
live in: one-line rows, click-to-edit pills, insert-anywhere wedges,
duplicate, hover-only delete, drag-reorder with a visible grip. Two demo
seeds (a 4-participant loop example and the full 10-participant order
flow) cover both ends of the complexity gradient.
Added
- Decision tables, first-class. Any CALL step can be marked
decision-table-backed via a+ DTchip on the step row. Click opens a
modal editor with the method signature as a read-only header, a config
form (nullHandling,exceptionType/defaultValue,rounding,
scale,locale— the keysjava_spring.mdenumerates), and a
freeform rows table. "Save to project" writes the.pumlplus one
<Participant>.decision.mdsidecar per DT-backed call into the same
design/folder. - System-under-test mark + entry interaction. Each participant card
shows a+ SUTchip. Marking auto-adds the entry interaction
([*] -> SUT : method(...)) and final return ([*] <-- SUT : Type).
Single-method SUTs get the boundary steps instantly; multi-method SUTs
prompt via an inline "pick entry method" banner on Step 2. Required
for DisC v0.5.x — Step 1 refuses any.pumlwithout exactly one
system_caller. - Step composer overhaul for read, write, and modify:
- Each CALL renders on one line instead of two — the trailing
return type is a muted inline suffix, halving vertical space. The
13-step complex demo fits on a single screen. - Caller, callee, and method are click-to-edit pills. Click opens
a small popover scoped to valid choices; Esc / outside-click
dismisses. Method-edit is one click, not "delete + re-pick three
dropdowns." - Insert-anywhere wedges between adjacent rows. Hover the gap
between steps, click+ insert here, the composer relocates inline. - Per-row duplicate (⎘) button deep-copies the step including any
attached decision table. Delete (×) and duplicate now hover-only to
reduce idle noise. - Visible 6-dot grip glyph advertises the drag-reorder affordance
that was already there but invisible. - Composer's caller dropdown prefills from the last CALL's caller
(the common "same orchestrator throughout" case).
- Each CALL renders on one line instead of two — the trailing
- Two demo seeds, side by side. "Load simple demo" seeds a
4-participant loop example (matches the03_loop.pumlcorpus).
"Load complex demo" seeds the 10-participant order flow with three
pre-populated decision tables (matches06_order/PlaceOrder.puml).
First-timers can climb from one to the other. - Target-package autocomplete on Step 4. Suggestions come from the
uniquepackageNames in the scanned project. Free typing still works.
The list is persisted tolocalStorageso it survives a page reload
before reconnecting. - Plugin pre-flight gets an Update flow. When the installed
design-is-codeplugin is older than the latest GitHub release, an
"Update plugin" banner appears next to "Run it for me" with the new
version + changelog link + a one-click installer. Skip-for-session
also available. - Boundary box auto-fit. Participant boxes in the live SVG measure
their rendered text width (getBBox()) instead of guessing 8px/char,
so long names likeLineSubtotalCalculatornever clip.
Changed
- Renamed to "DisC Studio" (user-facing).
<title>,<h1>,
README all reframed: DisC owns codegen; the Studio owns design
authoring. The Java package, Gradle artifact name, plugin slug, and
repo URL are unchanged — this is a Tier-1 brand rename. - PlantUML emitter uses the SUT-anchored arrow style from the
canonical.pumlcorpus: returns emit<--(dashed) instead of
<-(solid), and the boundary marker[*]always anchors the left
side of every line — both for entry ([*] -> SUT) and final return
([*] <-- SUT). Visually distinguishes returns from forward calls. - DisC step-name display synced to the v0.5.1 SKILL:
Validate Inputs→Validate Design,Classify→Classify Participants,
Discover Context→Resolve Targets,Generate→Generate Tests,Quality Gate→Check Tests,Implement→Generate Implementation. Step numbers unchanged. The run-event regex is
number-only so live event mapping was unaffected; this is display
only. - Participant cards drop the noisy CALLER/IMPL header badges —
premature surface for half-shipped affordances. Gridminmaxraised
from 13rem to 18rem so cards have room for typical method signatures;
method line wraps within the card instead of ellipsizing. - Plugin-update flash simplified. The post-update pill no longer
says "restart Claude Code" (nothing needs restarting — each "Run it
for me" spawns a freshclaudeprocess that picks up the new
plugin). ReadsDisC plugin updated to v<X> ✓then settles to the
normal status pill. - Story textarea placeholder changed from a concrete example to
the canonical three-part templateAs a <role>, I want to <action>, so that <outcome>.Teaches the shape, not just the tone. - Step 2 terminology cleanup:
+ new class→+ new participant;
N classescounter →N participants. Matches the participant data
model. - Modal copy: "generate a stub class alongside the interface" →
"also generate the implementation class alongside the interface."
Stub was misleading — DisC emits a real implementation.
Breaking
- Hand-built designs need a SUT. DisC v0.5.x refuses any
.puml
without exactly onesystem_caller. Loading either demo handles
this automatically. For hand-built designs, click+ SUTon the
participant that is your entry point — Studio adds the boundary
steps for you. Pre-v0.4.0 designs saved before this release will
need the SUT marked before they can be re-run. - The CALLER and IMPL badges on participant cards are gone. No
behavior change beyond visual — the underlyingimplByDefaultflag
is still stored on each participant.