본문으로 건너뛰기
cccskills
무료GitHub에 공개

spec

Capture a POC's signed-off behaviour into its spec ledger (`<poc>/spec.json`) — the structured, walkable behaviour contract graduation freezes as authoritative. Run at the moment a behaviour gets signed off ("ok, this works"), while it's fresh — the same trigger as the HANDOFF.md update, but capturing the *behaviour as a testable entry* rather than the *decision as prose*. Use when a POC behaviour is approved, or asked to "capture this spec", "write the spec entry", "log this to the ledger".

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

설치 방법 보기

포함된 파일(1)

  • SKILL.md5.5 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Spec Skill — capture a signed-off POC behaviour into the ledger

A POC discovers its spec one behaviour at a time. This skill writes that discovery down as a structured entry in <poc>/spec.json — the third leg beside HANDOFF.md (prose / architecture) and changelog.json (chronological / archaeology). The spec ledger is the one graduation freezes as authoritative and the side-by-side comparison gate walks (/graduate A0/C1). Without it, "rebuild the experience" has no checkable contract and the rebuild drifts into a different UX (#988).

The schema is owned by pocs/CLAUDE.md ("Capture the spec ledger") — that's the single source of truth for the field list. This skill is the capture mechanic; it does not redefine the schema.

When to run

The trigger is a sign-off: a behaviour gets approved ("ok, this works") → capture it now, while it's fresh, not at the end and not at graduation. Same moment you'd update HANDOFF.md — do both. Reconstructing the ledger after the fact (the /graduate retrofit path) is the lossy fallback, never the goal: an after-the-fact list can't be certified exhaustive.

If the behaviour is still being explored (not signed off), it's too early — capture it as status: "stopgap" or "new", never "settled".

The capture flow

  1. Locate the ledger. <poc>/spec.json (next to changelog.json / HANDOFF.md). If absent, create it as an empty array []. Confirm the poc path with Glob if not given.

  2. Draft the entry from the signed-off behaviour. Fill every field the schema in pocs/CLAUDE.md lists — at minimum id (kebab, stable), behaviour, when→expect, howToTest (numbered, with before/after), and status. Two fields carry the method's weight:

    • hook — the data-handoff/data-testid selector that locates this state on the running page, so the same walk runs on POC and the graduated app. Plant one if the state has no stable anchor yet (see the data-handoff convention in pocs/CLAUDE.md).
    • status — settled (the contract, preserve — needs signedOff) · stopgap (known-temporary fake, replace at graduation) · new (an addition the POC left open) · proposed (drafted but not yet signed off — captured from artifacts at A0 retrofit, or proposed ahead of confirmation; flips to settled once a human reconciles it). Pick honestly; stopgap/new/proposed are not lesser — they tell graduation which gate governs the behaviour and whether it's confirmed yet.
  3. settled requires a recorded sign-off. Only set status: "settled" with signedOff populated by the approval token (lgtm vNN / a comment ref). Done is derived from this, never self-asserted — and it's enforced: .claude/hooks/gate-spec-signoff.mjs blocks a settled entry with an empty signedOff. If you have the sign-off, record it; if not, keep it stopgap/new.

  4. Supersede, don't append blindly. Specs evolve like HANDOFF.md (newest wins), not like the append-only changelog. If this behaviour replaces an earlier entry, set supersedes to its id and edit/remove the stale one — a ledger must read as "this is how it behaves now", never "here is everything we tried". Capture any rejected alternative in consideredRejected (option → ❌ why).

  5. Validate before writing. The whole file stays a JSON array; every entry has a unique id; every status is one of settled|stopgap|new; every settled has a non-empty signedOff; every supersedes points at a real (or just-removed) id. Quick check:

    node -e 'const s=require("./<poc>/spec.json"); if(!Array.isArray(s))throw"not array";
      const ids=new Set(); for(const e of s){ if(ids.has(e.id))throw"dup id "+e.id; ids.add(e.id);
        if(!["settled","stopgap","new","proposed"].includes(e.status))throw"bad status "+e.id;
        if(e.status==="settled"&&!(e.signedOff||"").trim())throw"settled w/o signoff "+e.id; }
      console.log("spec ok:",s.length,"entries")'
    
  6. Surface it in-app (if the POC has the changelog chip pattern) so a reviewer can walk and sign off entries against the running preview — the spec is the walk script, the live POC is the expected result. The builder POC shows a vNN chip; add the spec entries beside it.

What you hand back

The updated <poc>/spec.json (valid, deduped, stale entries pruned), committed via /commit with the same scope as the POC. If a behaviour was signed off, its entry exists — that's the acceptance.

Conventions

Schema + the capture trigger live in pocs/CLAUDE.md (this skill defers to it). The settled sign-off rule is the done-rule (AGENTS.md), enforced by gate-spec-signoff.mjs. Consumed by /graduate at stage A0 (the frozen spec) and C1 (the walk). Pairs with the HANDOFF.md / changelog.json updates — capture all three at sign-off.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

a11y

무료

Accessibility review for Vue surfaces — the code-cleaning analog of /code-review and /simplify, pointed at WCAG/ARIA. Reviews just your diff (or a package/file), rates findings by severity, and either comments inline on the PR (--comment) or applies the safe fixes for you (--fix). Steers the depth-aware `a11y` subagent. Use when asked to "check accessibility", "a11y this", "audit ARIA/keyboard", or run /a11y.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

FriendlyInternet/nuxt-crouton102026년 10월 18일 업데이트

ask-human

무료

Emit a blocking question the owner can read in ~10 seconds and answer in one reply — the scannable, recommendation-first handoff every agent posts when it hits a fork it can't own. Leads with the one decision + a recommendation, carries the 🤖 provenance header, doubles as the

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

FriendlyInternet/nuxt-crouton102026년 10월 18일 업데이트

audit

무료

Audit packages for documentation completeness, detect drift between code and docs, and maintain documentation quality across the monorepo. Use when checking package docs, running audits, or reviewing documentation health.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

FriendlyInternet/nuxt-crouton102026년 10월 18일 업데이트

Author a placeable layout block that looks right at ANY pane size. The one hard rule — size to the PANE with container queries (@container), never the viewport — plus list/form playbooks and the sizing contract (minWidth etc.) the viability metric reads. Use when adding/converting a croutonLayoutBlocks block, or when a block overflows/breaks in a narrow pane.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

FriendlyInternet/nuxt-crouton102026년 10월 18일 업데이트

When a bug or regression is reported, the FIRST step — before fixing — is to research how and when it was introduced (git archaeology), then record that finding on the tracking issue/PR. Use the moment a bug, error, broken build, or "this used to work" is reported, before writing a fix. Produces a first-bad-commit (or "not a code regression") note you paste onto the issue.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

FriendlyInternet/nuxt-crouton102026년 10월 18일 업데이트

commit

무료

Smart, granular git commits following monorepo conventions. Analyzes changes, filters to session-relevant files, groups by intent, and uses conventional commit format. Use when committing code changes.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

FriendlyInternet/nuxt-crouton102026년 10월 18일 업데이트

FriendlyInternet의 스킬 모두 보기

이 스킬의 문제 신고