Skip to content

Releases: Bandersnatch0x/design-playbook

v0.20.0 - First-party UI/UX closed loop (vNext)

Choose a tag to compare

@github-actions github-actions released this 15 Aug 00:51

v0.20.0 - First-party UI/UX closed loop (vNext)

Released 2026-08-15.

Major: implements the complete vNext capability matrix resolved by Wayfinder
map #23 — interactive requirement shaping, tool-neutral design decisions,
dual-track implementation review, evidence gates, recirculation, and
cross-run learning — delivered as slices S1-S6 in one unified release
(PR #42). Spec authority: docs/specs/ui-ux-vnext/.

Tiered run profiles (process weight scales with consequence)

  • Every run is graded P1 point-fix / P2 standard / P3 full by
    declaration-touch surface, recorded in a mandatory run-profile block at
    the top of plan.md; promotion is automatic, demotion is user-only.
  • P1 covers single-finding repairs (including line-level R2 backfills)
    without opening a shaping session; P3 carries the full gate matrix.

Rule registry and governance

  • skills/design-playbook/references/rules.md: unified first-party
    registry (13 entries — CRAFT-01..08 migrated with zero ID breakage,
    A11Y-01/RESP-01 first-party, I18N/PERF/SEC placeholders), G8-validated at
    product level and (per tier) at run level.
  • craft-guard detector tables migrate atomically to the seven-column
    three-state format; the historical N/A contradiction is fixed by splitting
    applicability from result. Historical run artifacts are never rewritten.
  • rules-governance.jsonl: append-only governance log; promotion to
    machine-enforced and exemptions are user-only decisions.
  • Learning candidates derive purely from run history
    (3 distinct runs, 2 task contexts, 0 unexplained false positives).

Interactive requirement shaping

  • Stateful S0-S6 session model with batched confirmation points
    (question caps, forced-to-assume after two unproductive batches);
    assumed fields age into mandatory questions after two acknowledged runs.
  • Session artifacts are append-only under <run>/shaping/ with an
    alive→archived→discardable lifecycle; the contract stays the sole
    persistent decision authority (zero-breaking v1 extension).

Dual-track review and evidence

  • Product track (per-AC supported/unsupported/unverifiable), interaction
    track (seven dimensions with a strict fact/judgment split — judgment
    findings are advisory and never block without user escalation), and a
    cross-cutting applicability matrix (accessibility + responsive in the
    first version; placeholders never skip silently).
  • Six-block point-back report with coverage statements (G11) and
    five-state×page sampling matrices (required at P3).
  • Manifest entries carry optional method-semantics keys; human-subject
    evidence without population/ethics is quarantined and cannot support a
    pass.

Recirculation machine-checked

  • Repair-round counting with two-round stop → escalated-stop narration
    (verdict values unchanged).
  • G12 tier-boundary gate reuses the G7 contract diff; tier violations
    escalate the run instead of being waivable.
  • R1-R5 routing, DD supersedes re-entry, and baseline-drift re-review
    narrate through run-status with minimal invalidated-evidence sets.

Design decisions (tool-neutral)

  • decision-report deepens into versioned DD entry blocks behind the
    unchanged Fill-facing header; exploration is tiered record/compare/explore
    (R/C/E); providers are replaceable data-contract adapters whose assets
    are reference-only.

Breaking

  • Severity legacy values high (blocking)|high|med|low are no longer
    legal (two-stage migration completed; ADR-0028). Write the axis values
    directly; re-checking pre-vNext run artifacts will correctly fail.

Verification

  • Independent dual-track review (product + interaction + cross-cutting):
    verdict Pass, zero blocking findings; four advisory findings fixed in-PR.
  • Full local matrix green (validate, doctor, run seam, 16 root suites,
    MCP stdio groups, doc links); CI Validate plugin pass; dogfood P3
    fixture passes the full chain under --strict.

v0.14.1 - Lockstep main and DSH publishing

Choose a tag to compare

@github-actions github-actions released this 14 Aug 09:54

v0.14.1 - Lockstep main and DSH publishing

Released 2026-08-14.

Patch: makes the public DSH bundle part of every stable release transaction.
One vX.Y.Z tag now drives both npm publishers and one shared GitHub Release.

Fixed release group

  • design-playbook and dsh-design-playbook publish at the same version.
  • The DSH bundle depends on the matching ^X.Y.Z main-package line.
  • Release, validation, and doctor diagnostics consume one shared lockstep
    policy and fail before publication when either invariant drifts.

Ordered publication and verification

  • The DSH workflow waits for the exact main-package artifact before it
    publishes.
  • The main workflow waits for the exact DSH artifact and verifies its npm
    provenance before creating the single GitHub Release.
  • Both packages continue to use separate npm Trusted Publisher workflows with
    job-scoped GitHub OIDC and no long-lived npm token.

Recovery

  • Fresh tag runs fail closed when an npm version already exists.
  • Explicit manual recovery verifies an existing DSH package without
    republishing it.
  • Shared GitHub Release recovery remains available after both registry
    artifacts exist.
  • No new dsh-v* tag is created; historical dsh-v0.14.0 records remain
    unchanged.

dsh-design-playbook 0.14.0

Choose a tag to compare

@github-actions github-actions released this 14 Aug 02:53

dsh-design-playbook 0.14.0

Thin DSH bundle bridging design-playbook's preview + evidence MCP servers.
Depends on design-playbook@^0.14.0.

v0.14.0 - DSH integration + architecture deepening

Choose a tag to compare

@github-actions github-actions released this 14 Aug 00:01

v0.14.0 - DSH integration + architecture deepening

Released 2026-08-14.

Minor: DSH (DeepSeek Harness) plugin integration lands as a third install
surface alongside Claude Code and Codex. Six architecture deepenings
eliminate duplication across the preview and evidence runtimes.

DSH plugin integration (Issues #15-#20)

Three-phase integration: P0 skills softlink → P1 npm bundle → P2 MCP bridge

  • commands. All three verified by real DSH boot smoke tests.

P1: npm bundle + skills provider (Issue #17)

  • packages/design-playbook/lib/index.js — Cordis plugin entry; registers
    8 skills on ctx.skills via registerProvider() + __dirname (the
    !!js evaluation scope has no require, so customSkillDirs cannot
    point into package resources).
  • packages/design-playbook/cordis.patch.yml — one bundle patch row
    mounting the plugin by package name.
  • packages/design-playbook/package.json — adds dsh.bundle.patch +
    dsh-plugin/dsh-bundle keywords + main + lib in files[].

P2: MCP bridge (Issue #19)

  • packages/dsh-design-playbook/ — thin npm bundle package depending on
    design-playbook. Its cordis.patch.yml bridges preview + evidence
    MCP servers via @deepseek-ai/dsh-mcp-client stdio.
  • Path resolution uses process.getBuiltinModule('node:module') .createRequire(baseUrl).resolve(...) — DSH !!js scope has no
    require but exposes baseUrl (profile dir), so createRequire
    resolves design-playbook from the profile's node_modules.
  • DSH smoke verified: both MCP tools register + tools/call round-trip
    passes (preview returns "summary is required"; evidence rejects
    missing schemaVersion per ADR-0018 fail-closed).

P2: commands (Issue #20)

  • lib/index.js extended: inject grows to ['skills', 'commands'];
    apply() registers 6 slash commands (design-io, doctor,
    run-review, run-status, ui-review, ux-spec).
  • Each handler loads commands/<name>.md, substitutes $ARGUMENTS,
    and injects via agent.followup() (not inject() — slash commands
    are explicit user actions that open a turn).
  • DSH smoke verified: 6 commands register; /design-io <args> executes,
    handler calls agent.followup() with the substituted prompt; frontmatter
    stripped; $ARGUMENTS substituted; unknown commands rejected.
  • Full interactive round-trip verified: preview server starts on fixed
    port, Chrome app window launches, HTTP POST auto-submits confirm form,
    transaction returns confirmed=true + floor_pass=true, decision entry
    written to disk.

Architecture deepening

Binding digest unification

  • compute_binding_digest() moves to integrity.py as the single source
    for the binding shape (canonical JSON + SHA-256). transaction.py
    write side and load_entry() read side both import it; G5 gate
    _valid_decision_entry() consumes the same function. Three independent
    implementations collapse to one.

Prototype resolution unification

  • _resolve_prototype() extracts the path/html resolution + digest
    computation that was duplicated 3× in transaction.py. Pre-lock
    binding and in-lock TOCTOU re-validation share one function.

Action dispatch registry

  • _run_actions 75-line if/elif chain → _ACTION_HANDLERS dict mapping
    do → handler function. Each handler owns its validation + Playwright
    call. Adding an action type adds a function + one entry, not an elif.

Evidence runtime-object validation

  • _validate_runtime_object() extracts url/type/state/actions validation
    from execute_capture_plan so the handler reads cleanly.

Preview server argument validation

  • _validate_preview_args() extracts the 6-field validation from
    handle_preview_prototype.

Dead code + duplication cleanup

  • _log() duplication removed (capture_runtime.py imports from
    util.py). Dead _require_str() removed. type: ignore replaced
    with assert.

v0.13.0 - Architecture deepening (C1-C6)

Choose a tag to compare

@github-actions github-actions released this 12 Aug 18:08

v0.13.0 - Architecture deepening (C1-C6)

Released 2026-08-09.

Refactor-only minor: no new commands (inventory stays 6), no layout change —
six architecture deepenings that make the bundled runtimes, gates, and
imports single-homed. Behavior changes are narrow, sanctioned corrections
(see below); everything else is movement, not semantics.

Contract v1 lands atomically (C2, ADR-0018)

  • Capture contract rules move into one package-internal module
    mcp/evidence/capture_contract.py: write-side parse_capture_contract,
    read-side validate_capture_snapshot, and the contract-fields JSON Schema
    fragment the provider composes (const/enum/required share one source, so
    schema and parser cannot drift).
  • G6 now validates bound manifest request snapshots through the same read
    authority instead of hand-written partial checks. Sanctioned correction:
    malformed viewport shape or missing freeze fail closed
    (was lax).
    New rule IDs G6.capture_viewport_shape / G6.capture_freeze; existing
    G6.capture_schema / G6.capture_viewport keep wording.

Preview integrity deepens (C1, ADR-0008/0013)

  • One read-only mcp/preview/integrity.py owns prototype digest, feedback
    floor, current round, and confirm validity; G5 and run status consume the
    same snapshot. run status aligns with G5 on Preview occurrence.

Stage registry (C4, ADR-0021)

  • scripts/stages.py is the single home for named stage specs (SKILL.md step
    mirror), regular resume actions, and the shared artifact names
    (evidence/, manifest.jsonl, point-back.md, decision-report.md,
    spec.md); run status and G6 share them, so the table and the names cannot
    disagree.

Closed-loop gate split (C3, ADR-0023)

  • validate_run.py (1262 → 272 lines) is a thin orchestrator over focused
    gate modules: g1_spec, g2_g4_pointback, g5_preview,
    g6_evidence, g6_warnings, with shared ledger/manifest parsing in
    g6_records. Rule IDs, messages, ordering, and exit codes remain unchanged.

Real import seam (C5, ADR-0022)

  • Cross-runtime sys.path adapters (31) collapse to one package-root
    bootstrap + absolute design_playbook.* imports; mcp/ and scripts/
    become importable packages. The duplicated root scripts/run_status.py
    dev copy is removed (one copy remains, in the package).

Preview versions collapse (C6, ADR-0024)

  • versions.py no longer reaches through transaction's private seam: the
    shared primitives (atomic write, directory lock, entry load, log render)
    are transaction's public API, and the lock policy is one source
    (DIRECTORY_LOCK_*) — no second lock namespace to desync.

Release-boundary notes

  • Per ADR-0018, capture contract v1 ships as one merge/release boundary;
    old unversioned run-local evidence requires recapture (no dual-read path).
  • main stays the stable channel (ADR-0015); this tag is the first surface
    carrying the deepening branch.

v0.12.0 - vNext contracts + shallow preview control

Choose a tag to compare

@github-actions github-actions released this 08 Aug 04:49

v0.12.0 - vNext contracts + shallow preview control

Released 2026-08-08.

New commands and run machinery

  • Packaged run-status and doctor commands (inventory grows from 4 → 6; ADR-0015 minor, not patch).
  • Persistent design contract v1 + structured G1–G6 diagnostics on the validate surface.
  • G7 contract drift gate against the bound contract snapshot.
  • Capture plan requires schemaVersion: 1 (fail-closed without it).
  • Orchestrator skill routes: load-map, first-run, a11y, and repair pointers (ADR-0016–0020).

Preview control interaction (Scheme A′)

Trusted parent control chrome (mcp/preview/control.*):

  • Abort uses an explicit second-confirm popover (replaces 4s arm): fixed viewport positioning, Tab trap, Cancel / Esc / outside dismiss.
  • Pill Revise is a real /decide submit (not open-drawer only).
  • Pill Confirm keeps arm → confirm mis-tap protection (no one-click Approve; no fake "LGTM" inject); Esc / outside click / timeout undo the arm.
  • Pill quick 1-line feedback (wide layouts only) shares state with the drawer textarea.
  • Status chip focuses the feedback field; Ctrl/Cmd+Enter always routes confirm through isSubstantive (ADR-0008 floor).
  • Visual tokens: control heights unified; float notes 999, bar 1000, drawer 1001; drawer overflow no longer clips the abort popover.

G5 sandbox / iframe pin bridge / decision token paths are unchanged.

Dogfood

  • Live HITL design-io dogfood 2026-08-08-vnext-live pass (confirm-round-2 + HTTP fill-host observe v1; G5/G6/G7 green).

Distribution

  • Installable inventory: 8 model skills, 6 commands, 2 bundled MCP servers.
  • COMMAND_INVENTORY admits the 0.12 command set explicitly (stable main channel).

Validation

  • python scripts/validate.py — VALIDATION PASSED
  • Seam + contract v1 + G7 + vNext integration + vnext_live_dogfood.py preflight — green
  • python packages/design-playbook/tests/test_floor_frontend.py — FRONTEND FLOOR TEST PASSED (incl. A′ scenarios)
  • Preview MCP suites (test_browser_control, test_server_stdio) green

v0.11.1 - trusted publishing verification

Choose a tag to compare

@github-actions github-actions released this 07 Aug 16:17

v0.11.1 - trusted publishing verification

Released 2026-08-07.

Release automation

  • npm publishing now runs from .github/workflows/release.yml through GitHub Actions OIDC and the package-scoped npm Trusted Publisher.
  • The workflow binds a stable SemVer tag to the exact main commit and package version before running release gates, the full test suite, and package inspection.
  • Registry availability and npm provenance are verified before the matching GitHub Release is created.

Security posture

  • The GitHub npm environment is restricted to v* release tags, and protected release tags cannot be deleted or retargeted.
  • No npm automation token is configured in GitHub; the trusted connection grants only the npm publish action.

Canvas interaction reliability

  • New-anchor comment focus now completes synchronously, so a delayed callback cannot steal focus after the user moves to another control.
  • The browser regression test deterministically covers immediate focus handoff followed by Ctrl/Cmd+Z anchor undo.

Package compatibility

  • Public contracts remain compatible with v0.11.0; this patch updates distribution metadata and fixes the Canvas focus race.
  • Installable inventory remains 8 model skills, 4 commands, and 2 bundled MCP servers.

Validation

  • Clean origin/main baseline: python -m pytest -q passed 190 tests plus 83 subtests.
  • npm pack --dry-run: design-playbook@0.11.1, 53 files, 122.8 kB packed / 460.9 kB unpacked.

v0.11.0 — local canvas versions

Choose a tag to compare

@Bandersnatch0x Bandersnatch0x released this 07 Aug 12:23

v0.11.0 - local canvas versions

Released 2026-08-07.

New: local canvas version control

  • Preview runs can create immutable named versions from committed decisions.
  • timeline() combines decisions and named versions in timestamp order, while state_at() replays historical state without mutating the active run.
  • fork() derives an independent linear run from a selected historical round so exploration does not rewrite the source history.
  • Anchor v2 records stable node identity and structural features for more reliable feedback targeting.

Transaction integrity

  • Preview writes are serialized across processes for the full transaction, including projection updates.
  • Confirmation binds to the exact rendered candidate and fails closed when state changes or validation cannot be completed.
  • Append-only decision and version records use atomic replacement and explicit committed-versus-projection failure semantics, preventing unsafe retries after durable commits.
  • Prototype HTML and path modes are explicit, and browser-side undo preserves native comment editing while correctly removing canvas anchors.

Distribution

  • Installable inventory remains 8 model skills, 4 commands, and 2 bundled MCP servers.
  • The Preview MCP package now includes local version projections and the hardened transaction path.
  • CI requires Chromium-backed canvas version-control end-to-end coverage.

Validation

  • Release functional gates passed: version consistency, static validation, run seam, adapter floor self-check, and tag availability.
  • python -m pytest -q: 183 tests passed, plus 67 subtests.
  • npm pack --dry-run: design-playbook@0.11.0, 53 files, 122.8 kB packed / 461.0 kB unpacked.

v0.10.0 — run review

Choose a tag to compare

@Bandersnatch0x Bandersnatch0x released this 04 Aug 05:27

v0.10.0 — run review

Released 2026-08-04.

New: cross-run run-review

  • New fourth command, run-review, reviews multiple user-side .scratch/<run>/ Design I/O runs without becoming another step in a single run.
  • Markdown contract starts with run-review/v1: inclusion manifest, per-run gate table, repeat-blocker frequency table, point-back citations, then row-derived rollup.
  • Runs without point-back.md are listed as skipped; fewer than two included runs refuse cleanly.
  • Gate status comes only from a real validate_run.py exit when that script is available; otherwise the report says not checked.

Integrity boundaries

  • Repeat blockers use observed text after casefold + whitespace collapse, then char-for-char equality. Literal differences remain separate.
  • _none_ is a normal result. The command must not loosen normalization to manufacture repeats.
  • No new run ledger, prose lessons, baseline writeback, or semantic clustering.
  • tests/test_normalize_lockstep.py keeps repo-side aggregate_runs.normalize() aligned with the shipped command wording, while OPP-21 continues to count distinct runs rather than ledger rows.

Distribution

  • Installable inventory: 8 model skills, 4 commands, 2 bundled MCP servers.
  • Claude marketplace instructions now use the explicit public HTTPS URL. This avoids Claude Code 2.1.220 selecting SSH for owner/repo shorthand on hosts without a GitHub SSH key.
  • v0.9.2 stable-main identity and version-to-command inventory enforcement remain intact.

Validation

  • scripts/validate.py VALIDATION PASSED; scripts/doctor.py DOCTOR PASSED; claude plugin validate --strict passed.
  • Run seam passed; 54 repo unit tests passed.
  • MCP gates passed: 27 shared transport/Preview tests, 8 Evidence pure-path tests, and 6 real-browser Evidence capture tests; frontend floor passed.
  • npm pack --dry-run: design-playbook@0.10.0, 50 files, 110.7 kB packed / 388.6 kB unpacked.

v0.9.2 — release-identity marker (stable main)

Choose a tag to compare

@Bandersnatch0x Bandersnatch0x released this 03 Aug 18:29

v0.9.2 — release-identity marker (stable main)

Released 2026-08-04.

Version-marker patch: no changes to the installable surface — skills,
commands, and MCP adapters are byte-identical to v0.9.1 (only the version
fields move). Cut so the version line carries a released marker for the
ADR-0015 stable-main restoration and the gate hardening that followed it.

Marked (repo-side, not in the npm/plugin tarball)

  • ADR-0015 — stable main channel. main is the public install
    surface; its version and installable inventory always equal the latest
    formal release. The prematurely landed v0.10 run-review command was
    moved back to feature/v0.10-run-review and main restored to the
    v0.9.1 inventory (e5c9ed7).
  • OPP-01 — version-to-inventory invariant. scripts/validate.py now
    fails whenever the shipped command set differs from what the plugin
    version admits; the policy map lives in shared scripts/_checks.py and
    scripts/doctor.py derives its expectations from the same source.
  • OPP-21 — repeat-blocker counting. scripts/aggregate_runs.py
    counts a repeat blocker per distinct run, not per ledger row.
  • Release-checklist gate-1 count correction and ADR/ticket cleanups.

Validation

  • scripts/release.py gate green (tree / versions / validate / seam /
    adapter floor); scripts/doctor.py DOCTOR PASSED; full local suites
    green; Ubuntu CI green on the source commit (b91879e).