Changelog

Entries grouped by date, newest first. d2c-docs tracks upstream d2c-ai/d2c. When upstream ships a CHANGELOG.md, this page will migrate to fetching from it; until then it is hand-authored here.

2026-04-20 — Flow parity, auth handling, and a leaner skill surface

A two-part release. First half hardened d2c-build-flow until it matched d2c-build's discipline mechanisms one-for-one. Second half cut the JS surface from 25 scripts to 9 by replacing deterministic helpers with explicit SKILL.md prose — the skill is now prompt-first as Anthropic's Skills convention intends.

d2c-build-flow parity work

  • Phase 1.5 — Flow-level intake. The flow now asks the standard six /d2c-build intake questions once upfront (with context-based skip rules) plus a new mobile-design question that collects all per-step mobile Figma URLs in one pass. Answers bundle into a flow_intake block and propagate to every per-page dispatch — replacing the silent hardcoded defaults that shipped earlier.
  • Stepper-step delegation to /d2c-build. Each step body is now a standalone /d2c-build dispatch with what: "component", output at app/<group_route>/steps/Step<N>.tsx. The orchestrator imports each step and wires onNext / onBack via a documented prop contract. Result: every step body passes through the same six non-negotiables as a route page.
  • Unified Playwright flow-walker. One spec walks the entire loaded path (visit start → screenshot → click Next → screenshot → click Next…), pixel-diffs each step against its Figma export, and auto-fixtures validate: form steps from the IR. Replaces N independent page.goto(URL) runs. Persists user-supplied fixture values to <run-dir>/flow/walker-fixtures.json with user-wins semantics so reruns don't re-prompt.
  • Per-step Phase 5 audit. Stepper-group virtual pages now audit every emitted file (orchestrator + state context + per-step bodies) instead of once on the virtual page.
  • flow-decisions-lock.json. Per-decision lock file with locked → failed → re-locked lifecycle. Phase 3 / 4 / 5 retries cannot silently change a flow-level choice (mode, shell, project_conventions, stepper_groups, per-page route / layout / mobile_variant, per-edge source / trigger / condition). validate-flow-graph.js --verify-lock enforces it.
  • Bucket F-Flow honor checks. Five-bucket Phase 5 enforcement on files the flow emits directly (orchestrator, state context, shared layout, nav-smoke spec, walker spec). Catches orchestration-layer drift the per-page audit can't see.
  • Walker discipline ports. Phase 4a now ports d2c-build's snapshot/ revert/plateau/oscillation logic and adds a checkpoint resume mechanism so an interrupted walker doesn't have to restart from scratch.
  • Auth handling (both skills). New Phase 4.0d (build) and Phase 4a.0b (flow) detect next-auth / clerk / supabase / middleware, identify gated routes, and branch on has_api_calls. UI-only flows get a public-route bypass snippet; flows with APIs require D2C_TEST_USER / D2C_TEST_PASSWORD in .env.local and the walker logs in via Playwright's storageState.
  • Failure-mode catalogue enrichment. Every flow failure-mode entry now carries Lock impact and Related rule fields plus anti-rationalization callouts on trap candidates — matching d2c-build's catalogue discipline.

Lean skill surface (25 → 9 scripts)

A skill is supposed to be prompt-first — markdown that teaches the agent to use its existing tools (Bash, Read, Edit, Glob, Grep). Code is the exception, not the rule. The previous shape leaned too heavily on JS helpers. Cut 16 scripts and their tests; replaced with explicit SKILL.md prose.

The 9 remaining scripts are where code is genuinely necessary:

  • Pixel math + browser control (3): pixeldiff.js, phase4-login.js, screenshot-with-auth.js.
  • Schema validation + grammar parsing (4): validate-ir.js, parse-structured-input.js, validate-flow-graph.js, parse-flow-prompt.js.
  • Atomic hashed lock (1): write-flow-lock.js.
  • Init only (1): detect-conflicts.js.

The cut surfaces (mode detection, shell detection, conventions, walker fixtures / snapshots / checkpoint / preflight, auth detection, validate-honor-flow, render-flow-diagram, format-frame-picker, nav-autofix-plan, pick-link-target, flow-reuse-metric, diff-flow-graph) are now SKILL.md sections with explicit Bash one-liners and reasoning rules. Schemas stay as documentation contracts.

2026-04-15 — Docs site launch

  • Landing page. Five-skill bento grid, animated pixel-diff demo in the hero, framework strip, source-of-truth callout.
  • Skill reference pages (/skills/init, /skills/build, /skills/build-flow, /skills/audit, /skills/guard) sourced live from upstream via fetchUpstream(). Six framework guides under /skills/build/<framework>.
  • Install guide at /install covering plugin, npm-skills, and manual install paths.
  • Reference section added:
    • FAQ — comparisons with Locofy / Anima / Builder.io / Figma Dev Mode.
    • Token schema — shape of design-tokens.json, the contract the five skills share.
    • Skill flags — every --flag across all five skills, extracted live from the upstream SKILL.md files.
    • Plugin manifest — annotated .claude-plugin/plugin.json.
    • Troubleshooting — per-skill failure modes and fixes.
  • Resilience:
    • fetchUpstream() falls back to public/snapshots/ when GitHub is unreachable. A "cached" pill surfaces next to the View source link on any page served from a snapshot.
    • Nightly snapshot refresh workflow opens a PR when upstream moves (.github/workflows/refresh-snapshots.yml).
    • On-demand revalidation endpoint at POST /api/revalidate for the upstream → docs webhook (see setup doc for the d2c-ai/d2c side).
  • Test harness: Vitest wired up with lib-level coverage for the markdown pipeline, URL builders, snapshot-fallback resilience, and skill-flag extraction. GitHub Actions runs lint, test, and build on every PR.
  • Dev-only a11y checker: @axe-core/react wired via src/components/axe-dev.tsx; production builds strip the check.