Skip to content

Curdle โ€” artifact extraction

Curdle is the terminal state of mold. It runs only after the two-key handshake (see handshake.md).

Artifact types

Resolve the spec path with SPEC=$(python3 ${CLAUDE_SKILL_DIR}/scripts/mold.pyz artifact-path specs <slug>) โ€” it anchors at the per-project durable corpus (see shared/formatting.md ยง Corpus location). Issues stay repo-local: write them as .cheese/issues/<slug>-NNN.md.

Type When Path
Spec Any meaningful design discussion $SPEC (resolver output)
Spec + Issues Side-channel actionables surfaced (out-of-scope bugs, follow-ups) spec at $SPEC; issues at .cheese/issues/<slug>-001.md, -002.md, โ€ฆ
Issues only Pure standalone bug tickets, no design .cheese/issues/<slug>-001.md, โ€ฆ

A spec is the rich container; absorbs problem framing, requirements, approach, decisions, interface sketches, risks, gates. An issue is a separate, GitHub-flavoured item the user can paste into a tracker.

Slug rules

  • Lowercase the working problem statement, drop stopwords, kebab-case, cap at 5 words.
  • Honour user-passed slugs verbatim.
  • Match the spec's parent slug for issues (<slug>-001.md, -002.md).

Collisions

Existing Action
Same slug, status draft Overwrite (default) or rev (<slug>-v2) โ€” ask if unsure
Same slug, status approved Default to rev; never silently overwrite
Existing spec, new issues for same slug Append issues to that slug's series

Spec template

Cross-cutting house style and citation form: shared/formatting.md. This section owns the spec shape; formatting.md owns the voice rules and the footnote primitive.

---
slug: <slug>
status: draft
created: <YYYY-MM-DD>
confidence: <low | medium | high>
gates_overridden: []   # list of unchecked handshake items if `curdle anyway` was used
agent_introduced_scope: []   # terms in the spec the user did not type โ€” each approved per `handshake.md` ยง Agent-introduced scope (audit trail; downstream skills trust this list)
---

# <Title>

## Problem
<one paragraph; what's broken or missing today, who feels it>

## Goals
- <bullet>

## Non-goals
- <bullet>

## Approach
<chosen option summary>

## Decisions
- <one-line decision> โ€” <one-line rationale>

## Interface sketches
```pseudocode
<signatures, schemas, seams>

Risks

Open questions

  • [TBD]
  • [BLOCKED] โ€”

Quality gates

  • :

Reproduction (Diagnose only)

References

shared/formatting.md ยง Citations>

## Issue template

```markdown
---
slug: <slug>-<NNN>
status: open
flavor: bug | chore | slice
parent_spec: <slug>
---

# <One-line summary>

## Context
<why this exists, in 1โ€“3 sentences>

## Acceptance
- <bullet โ€” verifiable outcome>

## Notes
- <optional caveat or pointer>

Atomic write

Stage to a temp directory under ${TMPDIR} first, then move into place. Never leave partial files on a write failure.

Hand-off

After writing, suggest the next step inline. Never auto-invoke.

Artifact Suggested next step
Spec /cook .cheese/specs/<slug>.md
Issues Paste each into your tracker, or gh issue create --body-file <path>