v0.6.0 — analyzer invariants, safer Claude invocation, Optional<X> fix
The analyzer prompt is rebuilt around two explicit invariants — "shape, not
content" and "one declared pattern per variance axis" — giving its design
judgment a principled, self-auditing foundation. The Claude subprocess no
longer uses --dangerously-skip-permissions; both the analyzer and sequencer
now run as pure prompt→JSON transforms via --strict-mcp-config --tools "".
The model picker offers Opus 4.8 (replaces 4.7). Optional<X> return types
in resolver/rule-table matching are now unwrapped correctly, fixing a silent
variance-gap false alarm.
Added
disc.claude.timeoutanddisc.claude.effortconfig properties. Override the subprocess timeout (default 300 s, was 120 s) and Claude's reasoning effort (defaultlow; raise tomedium/highfor deeper designs) inapplication.ymlor via-Dflags../gradlew evaltask. Runs the analyzer eval suite against the real Claude CLI in isolation from unit tests. Streams per-run summaries; artifacts land inbuild/eval/. Tune with-Ddisc.eval.runs=Nand-Ddisc.eval.passRate=0.N.DesignContractValidator— a structured contract-level assertion harness for eval, replacingDesignModelAssertions. Validates participants, entities, variancePlan, and cases[] against contract rules rather than raw field equality.
Changed
- Analyzer prompt rebuilt around two invariants. "Shape, not content" and "one declared pattern per variance axis" are now declared up front with worked examples, so every rule in the prompt derives from one of these invariants rather than appearing ad-hoc.
- Safer Claude invocation. Both
AnalyzeServiceandSequenceServicenow run--strict-mcp-config --tools ""instead of--dangerously-skip-permissions. Single-completion prompt→JSON transforms never needed agent tools or MCP servers; disabling both removes the permission footprint and prevents stalled tool calls. - Timeout raised to 300 s and made configurable. The 120 s limit was too tight for Opus on complex designs; 300 s is the new default.
- Background stdout reader. Stdout is now drained on a daemon thread before
waitFor(), preventing a potential deadlock on outputs larger than the ~64 KB pipe buffer. - Opus 4.8 replaces Opus 4.7 in both model pickers (Analyze step and Generate step).
- Rule prompt refinements.
invariance,composition-over-inheritance, andR2-purpose-specificityupdated with tighter worked examples.
Fixed
Optional<X>return types in resolver/rule-table matching. A resolver whose method returnsOptional<StrategyInterface>(correct Java for a map-lookup miss) was silently dropped from variance-gap checks and resolver sidecar generation. The newunwrapOptional()strips the wrapper before matching.