feat(skill): absorb external design skills, restore interview gate, add review route

- Restore the step-0 interview as a mechanical gate the skill explicitly
  depends on; add harness.md (per-harness question tools, limits,
  fallbacks) and brief-interview.md (slots, question cards, rounds).
- Add 10 reference docs absorbed from external design skills
  (accessibility, interaction-feel, elevation, color, icons, product-copy,
  component-systems, critique, change-review, print-email) and extend
  existing references.
- Add a review-only route and two hard-gate clauses (truncated content
  reachability, three-flashes limit).
- design-gate: split tap targets into WCAG 2.5.8 and 44px contract layers,
  run axe-core when available, and fix false positives found on a real
  site (decorative alt="", stacked wordmark line count, url-only pages).
- lint-skill: fail if the interview gate section or its links disappear.
- Ship agents/openai.yaml and THIRD_PARTY_NOTICES.md.
This commit is contained in:
Yun Chan 2026-09-24 13:26:03 +09:00
parent 79e79c120b
commit 6805fb2be7
37 changed files with 5688 additions and 128 deletions

View file

@ -65,6 +65,8 @@ node tools/visual.mjs --update-baseline # refresh visual baselines, then commi
7. **`DESIGNPACA_STATE_DIR`** redirects designpaca's own state dir (`~/.designpaca` manifest) for CI/tests without changing user-facing install paths. CLI tests already set `HOME`/`USERPROFILE` to a tempdir; keep that isolation in new tests.
8. **Git push goes over Tailscale**, not the domain: `ssh://git@100.116.83.60:2222/yunchan/designpaca.git` (git.chanpaca.net is behind Cloudflare, port blocked). Details in `.env.example`.
9. **Never create release/dev checkouts outside this repo root.** Past release runs used ad-hoc sibling `git worktree`s (`D:/workspace/designpaca-release-v0.x.x`, `designpaca-deploy-<sha>`). These look like stray copies, carry full `node_modules`, and are actually owned by the main repo's `.git/worktrees/`. Deleting the folder by hand leaves a `prunable` ghost in `git worktree list`; deleting the main `.git` breaks them. If a separate checkout is genuinely required, place it under the repo (e.g. `.worktrees/`) or a dedicated `_worktrees/` root, and always finish with `git worktree remove <path>` (use `--force` only for disposable release checkouts) — never `rm -rf`. Prefer committing on a branch in this working tree when possible.
10. **Never soften the step-0 interview gate.** v0.11.0 (`45ba92e`) rewrote "almost always ask" into "ask only when it would change the result", with an empty commit body and no changelog line. Combined with harness autonomy pressure (Claude Code auto mode, Codex "bias to action"), the skill stopped asking users. `build/ci/lint-skill.mjs` now fails if the `## 인터뷰 게이트` section, the "명시적으로 의존한다" sentence, or the `harness.md`/`brief-interview.md` links disappear, or if a "~때만 묻는다" condition returns. Any change to when the skill asks must be stated in its changeset and re-checked with `build/eval/interview/` on Claude Code and Codex.
11. **Keep tool names harness-neutral in the skill body.** Every target adapter copies `SKILL.md` verbatim, so a Claude-only tool name (e.g. `AskUserQuestion`) reaches Codex, Cursor, Gemini, and others unchanged. Put per-harness tool names, limits, and fallbacks in `references/harness.md`, not in the body.
## Architecture & data flow