tiny-spec 0.1.0__tar.gz → 0.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {tiny_spec-0.1.0 → tiny_spec-0.2.1}/PKG-INFO +20 -12
- {tiny_spec-0.1.0 → tiny_spec-0.2.1}/README.md +19 -11
- {tiny_spec-0.1.0 → tiny_spec-0.2.1}/pyproject.toml +3 -1
- tiny_spec-0.2.1/tiny-spec-breakdown/SKILL.md +92 -0
- tiny_spec-0.2.1/tiny-spec-breakdown/templates/BREAKDOWN.template.md +37 -0
- {tiny_spec-0.1.0 → tiny_spec-0.2.1}/tiny-spec-build/SKILL.md +3 -2
- {tiny_spec-0.1.0 → tiny_spec-0.2.1}/tiny-spec-create/SKILL.md +40 -8
- {tiny_spec-0.1.0 → tiny_spec-0.2.1}/tiny-spec-plan/SKILL.md +3 -2
- {tiny_spec-0.1.0 → tiny_spec-0.2.1}/tiny-spec-tasks/SKILL.md +3 -2
- {tiny_spec-0.1.0 → tiny_spec-0.2.1}/tiny_spec/__init__.py +1 -1
- {tiny_spec-0.1.0 → tiny_spec-0.2.1}/tiny_spec/manifest.json +1 -0
- {tiny_spec-0.1.0 → tiny_spec-0.2.1}/.gitignore +0 -0
- {tiny_spec-0.1.0 → tiny_spec-0.2.1}/LICENSE +0 -0
- {tiny_spec-0.1.0 → tiny_spec-0.2.1}/agents/tiny-spec-build-executor.md +0 -0
- {tiny_spec-0.1.0 → tiny_spec-0.2.1}/agents/tiny-spec-build-reviewer.md +0 -0
- {tiny_spec-0.1.0 → tiny_spec-0.2.1}/tiny-spec-build/templates/memory.template.md +0 -0
- {tiny_spec-0.1.0 → tiny_spec-0.2.1}/tiny-spec-create/templates/SPEC.template.md +0 -0
- {tiny_spec-0.1.0 → tiny_spec-0.2.1}/tiny-spec-create/templates/constitution.template.md +0 -0
- {tiny_spec-0.1.0 → tiny_spec-0.2.1}/tiny-spec-plan/templates/PLAN.template.md +0 -0
- {tiny_spec-0.1.0 → tiny_spec-0.2.1}/tiny-spec-tasks/templates/tasks.template.md +0 -0
- {tiny_spec-0.1.0 → tiny_spec-0.2.1}/tiny_spec/cli.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tiny-spec
|
|
3
|
-
Version: 0.1
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: A tiny, opinionated take on spec-driven development.
|
|
5
5
|
Project-URL: Homepage, https://github.com/GrayMa77er/tiny-spec
|
|
6
6
|
Project-URL: Source, https://github.com/GrayMa77er/tiny-spec
|
|
@@ -54,15 +54,23 @@ builds the work one task at a time. Every task is implemented by one agent and
|
|
|
54
54
|
graded by an independent reviewer that runs the real tests before anything is
|
|
55
55
|
committed.
|
|
56
56
|
|
|
57
|
-
It is four skills and two agents
|
|
57
|
+
It is four skills and two agents — plus an optional Phase-0 on-ramp,
|
|
58
|
+
`tiny-spec-breakdown`, for carving a PRD into stories. No orchestrator, no config
|
|
59
|
+
file, no build step.
|
|
58
60
|
|
|
59
61
|
```
|
|
60
|
-
tiny-spec-create → tiny-spec-plan → tiny-spec-tasks → tiny-spec-build
|
|
61
|
-
intent design tasks per-task loop
|
|
62
|
-
SPEC.md PLAN.md + tasks.md plan → implement → review → commit
|
|
63
|
-
|
|
62
|
+
tiny-spec-breakdown ⇢ tiny-spec-create → tiny-spec-plan → tiny-spec-tasks → tiny-spec-build
|
|
63
|
+
(optional) intent design tasks per-task loop
|
|
64
|
+
PRD → stories SPEC.md PLAN.md + tasks.md plan → implement → review → commit
|
|
65
|
+
BREAKDOWN.md constitution
|
|
64
66
|
```
|
|
65
67
|
|
|
68
|
+
`tiny-spec-breakdown` is optional: skip it and start at `tiny-spec-create` for a
|
|
69
|
+
single known piece of work; reach for it when a PRD needs carving into many stories.
|
|
70
|
+
It reads a PRD plus wireframes/notes and writes a `BREAKDOWN.md` at your project root
|
|
71
|
+
— a flat list of Features → Stories with draft acceptance criteria — which
|
|
72
|
+
`tiny-spec-create` then reads one story at a time.
|
|
73
|
+
|
|
66
74
|
## New to spec-driven development?
|
|
67
75
|
|
|
68
76
|
Spec-driven development (SDD) means writing down *what* you want and *why* before
|
|
@@ -85,10 +93,11 @@ uvx tiny-spec install
|
|
|
85
93
|
Restart Claude Code so it picks up the new skills, then run the flow in your project:
|
|
86
94
|
|
|
87
95
|
```
|
|
88
|
-
/tiny-spec-
|
|
89
|
-
/tiny-spec-
|
|
90
|
-
/tiny-spec-
|
|
91
|
-
/tiny-spec-
|
|
96
|
+
/tiny-spec-breakdown # optional: carve a PRD + wireframes into stories (BREAKDOWN.md)
|
|
97
|
+
/tiny-spec-create # capture intent and requirements (binds a ticket, optional)
|
|
98
|
+
/tiny-spec-plan # turn the spec into a design and harden the constitution
|
|
99
|
+
/tiny-spec-tasks # slice the plan into an ordered checklist
|
|
100
|
+
/tiny-spec-build # build each task: implement, review, commit
|
|
92
101
|
```
|
|
93
102
|
|
|
94
103
|
Re-run `install` any time to update; `tiny-spec uninstall` removes only what it
|
|
@@ -106,7 +115,7 @@ git clone https://github.com/GrayMa77er/tiny-spec.git
|
|
|
106
115
|
cd tiny-spec
|
|
107
116
|
|
|
108
117
|
mkdir -p "$HOME/.claude/skills" "$HOME/.claude/agents"
|
|
109
|
-
for s in tiny-spec-create tiny-spec-plan tiny-spec-tasks tiny-spec-build; do
|
|
118
|
+
for s in tiny-spec-breakdown tiny-spec-create tiny-spec-plan tiny-spec-tasks tiny-spec-build; do
|
|
110
119
|
cp -R "$s" "$HOME/.claude/skills/$s"
|
|
111
120
|
done
|
|
112
121
|
cp agents/*.md "$HOME/.claude/agents/"
|
|
@@ -209,7 +218,6 @@ It is namespaced per ticket, with a shared spine at the root:
|
|
|
209
218
|
|
|
210
219
|
```
|
|
211
220
|
.spec/
|
|
212
|
-
ACTIVE the active ticket directory name (resolution pointer)
|
|
213
221
|
constitution.md project-wide, shared across tickets
|
|
214
222
|
memory.md operational lessons, shared across tickets
|
|
215
223
|
<ticket-id>/ one directory per ticket (PROJ-123/, gh-42/, …)
|
|
@@ -17,15 +17,23 @@ builds the work one task at a time. Every task is implemented by one agent and
|
|
|
17
17
|
graded by an independent reviewer that runs the real tests before anything is
|
|
18
18
|
committed.
|
|
19
19
|
|
|
20
|
-
It is four skills and two agents
|
|
20
|
+
It is four skills and two agents — plus an optional Phase-0 on-ramp,
|
|
21
|
+
`tiny-spec-breakdown`, for carving a PRD into stories. No orchestrator, no config
|
|
22
|
+
file, no build step.
|
|
21
23
|
|
|
22
24
|
```
|
|
23
|
-
tiny-spec-create → tiny-spec-plan → tiny-spec-tasks → tiny-spec-build
|
|
24
|
-
intent design tasks per-task loop
|
|
25
|
-
SPEC.md PLAN.md + tasks.md plan → implement → review → commit
|
|
26
|
-
|
|
25
|
+
tiny-spec-breakdown ⇢ tiny-spec-create → tiny-spec-plan → tiny-spec-tasks → tiny-spec-build
|
|
26
|
+
(optional) intent design tasks per-task loop
|
|
27
|
+
PRD → stories SPEC.md PLAN.md + tasks.md plan → implement → review → commit
|
|
28
|
+
BREAKDOWN.md constitution
|
|
27
29
|
```
|
|
28
30
|
|
|
31
|
+
`tiny-spec-breakdown` is optional: skip it and start at `tiny-spec-create` for a
|
|
32
|
+
single known piece of work; reach for it when a PRD needs carving into many stories.
|
|
33
|
+
It reads a PRD plus wireframes/notes and writes a `BREAKDOWN.md` at your project root
|
|
34
|
+
— a flat list of Features → Stories with draft acceptance criteria — which
|
|
35
|
+
`tiny-spec-create` then reads one story at a time.
|
|
36
|
+
|
|
29
37
|
## New to spec-driven development?
|
|
30
38
|
|
|
31
39
|
Spec-driven development (SDD) means writing down *what* you want and *why* before
|
|
@@ -48,10 +56,11 @@ uvx tiny-spec install
|
|
|
48
56
|
Restart Claude Code so it picks up the new skills, then run the flow in your project:
|
|
49
57
|
|
|
50
58
|
```
|
|
51
|
-
/tiny-spec-
|
|
52
|
-
/tiny-spec-
|
|
53
|
-
/tiny-spec-
|
|
54
|
-
/tiny-spec-
|
|
59
|
+
/tiny-spec-breakdown # optional: carve a PRD + wireframes into stories (BREAKDOWN.md)
|
|
60
|
+
/tiny-spec-create # capture intent and requirements (binds a ticket, optional)
|
|
61
|
+
/tiny-spec-plan # turn the spec into a design and harden the constitution
|
|
62
|
+
/tiny-spec-tasks # slice the plan into an ordered checklist
|
|
63
|
+
/tiny-spec-build # build each task: implement, review, commit
|
|
55
64
|
```
|
|
56
65
|
|
|
57
66
|
Re-run `install` any time to update; `tiny-spec uninstall` removes only what it
|
|
@@ -69,7 +78,7 @@ git clone https://github.com/GrayMa77er/tiny-spec.git
|
|
|
69
78
|
cd tiny-spec
|
|
70
79
|
|
|
71
80
|
mkdir -p "$HOME/.claude/skills" "$HOME/.claude/agents"
|
|
72
|
-
for s in tiny-spec-create tiny-spec-plan tiny-spec-tasks tiny-spec-build; do
|
|
81
|
+
for s in tiny-spec-breakdown tiny-spec-create tiny-spec-plan tiny-spec-tasks tiny-spec-build; do
|
|
73
82
|
cp -R "$s" "$HOME/.claude/skills/$s"
|
|
74
83
|
done
|
|
75
84
|
cp agents/*.md "$HOME/.claude/agents/"
|
|
@@ -172,7 +181,6 @@ It is namespaced per ticket, with a shared spine at the root:
|
|
|
172
181
|
|
|
173
182
|
```
|
|
174
183
|
.spec/
|
|
175
|
-
ACTIVE the active ticket directory name (resolution pointer)
|
|
176
184
|
constitution.md project-wide, shared across tickets
|
|
177
185
|
memory.md operational lessons, shared across tickets
|
|
178
186
|
<ticket-id>/ one directory per ticket (PROJ-123/, gh-42/, …)
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "tiny-spec"
|
|
7
|
-
version = "0.1
|
|
7
|
+
version = "0.2.1"
|
|
8
8
|
description = "A tiny, opinionated take on spec-driven development."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
@@ -34,6 +34,7 @@ packages = ["tiny_spec"]
|
|
|
34
34
|
# expects them). Bundle them into the wheel under tiny_spec/_bundle/ so the
|
|
35
35
|
# installer can copy them at runtime, without restructuring the repo.
|
|
36
36
|
[tool.hatch.build.targets.wheel.force-include]
|
|
37
|
+
"tiny-spec-breakdown" = "tiny_spec/_bundle/tiny-spec-breakdown"
|
|
37
38
|
"tiny-spec-create" = "tiny_spec/_bundle/tiny-spec-create"
|
|
38
39
|
"tiny-spec-plan" = "tiny_spec/_bundle/tiny-spec-plan"
|
|
39
40
|
"tiny-spec-tasks" = "tiny_spec/_bundle/tiny-spec-tasks"
|
|
@@ -43,6 +44,7 @@ packages = ["tiny_spec"]
|
|
|
43
44
|
[tool.hatch.build.targets.sdist]
|
|
44
45
|
include = [
|
|
45
46
|
"tiny_spec",
|
|
47
|
+
"tiny-spec-breakdown",
|
|
46
48
|
"tiny-spec-create",
|
|
47
49
|
"tiny-spec-plan",
|
|
48
50
|
"tiny-spec-tasks",
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tiny-spec-breakdown
|
|
3
|
+
description: Optional Phase-0 on-ramp — read a PRD plus wireframes/notes, interview briefly, and decompose the work into a flat list of Features → user Stories (each with draft acceptance criteria and a slug) plus a shared Decisions block, written to BREAKDOWN.md at the project root. Does not scaffold .spec/ or touch the constitution — tiny-spec-create reads BREAKDOWN.md in seeded mode and does that. The suite works without it.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# tiny-spec-breakdown
|
|
7
|
+
|
|
8
|
+
Turns a body of source material — a PRD, wireframes, loose notes — into the set of
|
|
9
|
+
**user stories** to spec, *before* any one of them is picked up. It is the moment
|
|
10
|
+
**before** `tiny-spec-create`: that skill takes **one story → one spec**; this one
|
|
11
|
+
decides what the stories *are*.
|
|
12
|
+
|
|
13
|
+
This is an **optional** front door. The suite works fine without it — start at
|
|
14
|
+
`tiny-spec-create` for a single known piece of work. Reach for `breakdown` only when
|
|
15
|
+
you have a multi-story PRD to carve.
|
|
16
|
+
|
|
17
|
+
**It writes exactly one file: `BREAKDOWN.md` at the project root.** It does **not**
|
|
18
|
+
scaffold `.spec/`, does **not** create or edit `constitution.md`, and does **not**
|
|
19
|
+
run `tiny-spec-create` or loop over stories. It produces the worksheet and stops —
|
|
20
|
+
you create the work items in your tracker from it, then run the normal flow per
|
|
21
|
+
story. Keeping the carve out of `.spec/` is deliberate: `.spec/` is per-spec build
|
|
22
|
+
state; the breakdown is pre-spec planning the tracker owns.
|
|
23
|
+
|
|
24
|
+
## Inputs
|
|
25
|
+
|
|
26
|
+
Take one or more file paths from the user (a PRD is the usual anchor; wireframes,
|
|
27
|
+
design notes, an API sketch are common companions). **Read them all.** If two
|
|
28
|
+
sources disagree, ask which wins and note it — don't silently pick.
|
|
29
|
+
|
|
30
|
+
## Interview — short, five groups
|
|
31
|
+
|
|
32
|
+
Keep it lean (earned ceremony). Ask only what you can't infer from the inputs; skip
|
|
33
|
+
a group the material already answers.
|
|
34
|
+
|
|
35
|
+
1. **Inputs & boundary.** Which files are in scope, and what's the boundary of *this*
|
|
36
|
+
breakdown — the whole product, one epic, or an MVP slice? *(Hint: anchors against
|
|
37
|
+
boiling the ocean; you can re-run later for the next slice.)*
|
|
38
|
+
2. **Platform & hierarchy.** Where will these live — `ado | jira | github | monday`,
|
|
39
|
+
or **ad-hoc** (no tracker)? Which levels does the team actually use? *(Hint: ADO
|
|
40
|
+
default is Epic › Feature › Story › Task, but many teams skip Feature — don't
|
|
41
|
+
invent levels they won't track. Ad-hoc → kebab slugs, no parent ids, no `Refs:`
|
|
42
|
+
footer downstream.)*
|
|
43
|
+
3. **Structure & granularity.** How should features be grouped — by user journey, by
|
|
44
|
+
screen/surface, by domain/module, or by persona? And how big is a story? *(Hint:
|
|
45
|
+
wireframes push toward screen-based, a PRD usually reads journey-based — pick one
|
|
46
|
+
lens. A story = one buildable spec = one tight plan→build loop; if it can't be
|
|
47
|
+
built and verified in one pass, split it as a vertical slice, not a layer.)*
|
|
48
|
+
4. **Tech & cross-cutting** (→ the Decisions block). Stack / framework, where code
|
|
49
|
+
lives, and any cross-cutting non-functionals (auth, i18n, a11y, perf)? *(Hint:
|
|
50
|
+
stack + code-location seed the constitution later; cross-cutting concerns become
|
|
51
|
+
constitution invariants or shared requirements — **not** their own feature.)*
|
|
52
|
+
5. **Confirm the carve.** Play back the proposed Features and the stories under each
|
|
53
|
+
before writing. Adjust on feedback.
|
|
54
|
+
|
|
55
|
+
## Write `BREAKDOWN.md`
|
|
56
|
+
|
|
57
|
+
Copy this skill's `templates/BREAKDOWN.template.md` to `BREAKDOWN.md` at the
|
|
58
|
+
**project root** (the user's cwd) and fill it in:
|
|
59
|
+
|
|
60
|
+
- the **`## Decisions`** block — stack, code location, platform, structure lens,
|
|
61
|
+
scope, cross-cutting concerns;
|
|
62
|
+
- one **`## Feature:`** heading per feature (a grouping only — it never becomes a
|
|
63
|
+
folder), with the tracker-parent id left blank for the user to fill after creating
|
|
64
|
+
it;
|
|
65
|
+
- under each feature, the **stories** — each a single user-observable capability,
|
|
66
|
+
with a proposed **slug** and its **draft acceptance criteria** (`AC:` lines).
|
|
67
|
+
|
|
68
|
+
**Slugs** mirror `tiny-spec-create`: derive from the platform key when bound —
|
|
69
|
+
ADO `AB#77`→`ado-77`, GitHub `#42`→`gh-42`, Monday item→`monday-<id>`, Jira
|
|
70
|
+
`PROJ-123` verbatim; **ad-hoc** → a short kebab-case slug (`email-login`). The
|
|
71
|
+
tracker id is unknown until the user creates the item, so leave the parent-id
|
|
72
|
+
placeholder and use a provisional slug where needed.
|
|
73
|
+
|
|
74
|
+
**Acceptance criteria are draft `REQ-N`.** Write each as one **user-observable,
|
|
75
|
+
testable** outcome with no implementation detail — and keep it **atomic**: if a line
|
|
76
|
+
hides two capabilities behind an "and", split it. `tiny-spec-create` promotes these
|
|
77
|
+
into `REQ-N`, so atomic ACs here save a re-split later.
|
|
78
|
+
|
|
79
|
+
## When done
|
|
80
|
+
|
|
81
|
+
Print the carve — the features and the stories under each — and a **suggested first
|
|
82
|
+
spec** (which story to pick up first). Then **stop**. Tell the user the next steps,
|
|
83
|
+
which you do **not** perform:
|
|
84
|
+
|
|
85
|
+
1. Create the Features and Stories in their tracker from `BREAKDOWN.md`, capturing
|
|
86
|
+
the ids.
|
|
87
|
+
2. Run `tiny-spec-create` per story — with `BREAKDOWN.md` present it reads each
|
|
88
|
+
story's entry instead of re-interviewing (seeded mode), and on first run seeds the
|
|
89
|
+
constitution from the Decisions block.
|
|
90
|
+
|
|
91
|
+
Do **not** scaffold `.spec/`, write a constitution, or invoke `tiny-spec-create`
|
|
92
|
+
yourself — `breakdown` ends here.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Breakdown — <product / epic name>
|
|
2
|
+
|
|
3
|
+
<!-- A pre-spec worksheet. It lives at the PROJECT ROOT (not under .spec/) and is
|
|
4
|
+
NOT a tracked .spec/ artifact. tiny-spec-create reads it in seeded mode: each
|
|
5
|
+
Story below becomes one .spec/<slug>/SPEC.md (its AC lines → REQ-N), and on a
|
|
6
|
+
story's first create the Decisions block seeds the shared constitution.md.
|
|
7
|
+
Regenerable — edit freely; the tracker (ADO/Jira/…) stays the source of truth. -->
|
|
8
|
+
|
|
9
|
+
## Decisions
|
|
10
|
+
|
|
11
|
+
<!-- Project-wide framing. tiny-spec-create folds these into constitution.md on a
|
|
12
|
+
story's first run: Stack + Code-lives → Style and Layout; verification hints →
|
|
13
|
+
Verification commands; Cross-cutting → Guiding invariants. Keep each to a line. -->
|
|
14
|
+
|
|
15
|
+
- Stack: <language / framework / runtime>
|
|
16
|
+
- Code lives: <where the code is — repo path, dirs of note>
|
|
17
|
+
- Platform: <ado | jira | github | monday | ad-hoc> <!-- ad-hoc → kebab slugs, no parent ids, no Refs footer -->
|
|
18
|
+
- Structure lens: <by journey | by screen | by domain | by persona — how features are grouped below>
|
|
19
|
+
- Scope: <whole product | epic | MVP slice — the boundary of this breakdown>
|
|
20
|
+
- Cross-cutting: <non-functionals spanning stories — auth, i18n, a11y, perf. These become constitution invariants or shared REQ, NOT their own feature.>
|
|
21
|
+
|
|
22
|
+
## Feature: <feature name> (tracker parent: <fill after creating, e.g. AB#120>)
|
|
23
|
+
|
|
24
|
+
- Story: <one user-observable capability> slug: <ado-__ | kebab>
|
|
25
|
+
- AC: <a single user-observable, testable outcome — becomes REQ-1 in this story's SPEC.md>
|
|
26
|
+
- AC: <another — keep each atomic; no "and" hiding two capabilities>
|
|
27
|
+
- Story: <one user-observable capability> slug: <ado-__ | kebab>
|
|
28
|
+
- AC: <…>
|
|
29
|
+
|
|
30
|
+
## Feature: <feature name> (tracker parent: <…>)
|
|
31
|
+
|
|
32
|
+
- Story: <one user-observable capability> slug: <ado-__ | kebab>
|
|
33
|
+
- AC: <…>
|
|
34
|
+
|
|
35
|
+
## Suggested first spec
|
|
36
|
+
|
|
37
|
+
<story title> (slug: <…>) — run tiny-spec-create on this first.
|
|
@@ -19,8 +19,9 @@ alongside this skill (see the suite README).
|
|
|
19
19
|
|
|
20
20
|
## Inputs
|
|
21
21
|
|
|
22
|
-
1. **Resolve the active ticket dir** from
|
|
23
|
-
|
|
22
|
+
1. **Resolve the active ticket dir** from the current git branch: the `.spec/<slug>/`
|
|
23
|
+
whose slug matches the branch name (one branch per ticket). If none matches, use
|
|
24
|
+
the sole ticket dir if there's exactly one; else ask which. Call it `<active>`.
|
|
24
25
|
2. Read `.spec/constitution.md` (**the shared constitution**), `.spec/memory.md` if
|
|
25
26
|
it exists (**shared**), and `.spec/<active>/tasks.md`. The constitution + memory
|
|
26
27
|
get injected **whole** into every executor and reviewer. Also note the `ticket`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: tiny-spec-create
|
|
3
|
-
description: Start or update a spec — capture intent and requirements into .spec/<slug>/SPEC.md, optionally bound to a ticket (or ad-hoc). On first run, scaffolds .spec/ and seeds the shared constitution (constitution.md) from a short interview. Re-run to update an existing spec in place.
|
|
3
|
+
description: Start or update a spec — capture intent and requirements into .spec/<slug>/SPEC.md, optionally bound to a ticket (or ad-hoc). On first run, scaffolds .spec/ and seeds the shared constitution (constitution.md) from a short interview. If a BREAKDOWN.md (from tiny-spec-breakdown) is present, seeds the spec from a chosen story instead of a full interview. Re-run to update an existing spec in place.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# tiny-spec-create
|
|
@@ -16,6 +16,31 @@ directory. Two are **project-wide** and shared at the `.spec/` root
|
|
|
16
16
|
`tasks.md`, `decisions.md`) live under `.spec/<slug>/`. Templates ship in this
|
|
17
17
|
skill's own `templates/` folder (alongside this file); read them from there.
|
|
18
18
|
|
|
19
|
+
## Seeded mode (`BREAKDOWN.md` present)
|
|
20
|
+
|
|
21
|
+
Before interviewing, check for **`BREAKDOWN.md`** at the project root (written by the
|
|
22
|
+
optional `tiny-spec-breakdown` skill). If it exists and the user is creating one of
|
|
23
|
+
its stories, **seed from it instead of running the full interview** — confirm, don't
|
|
24
|
+
re-ask:
|
|
25
|
+
|
|
26
|
+
1. **Pick the story.** Ask which story (or infer from the user's request); match it
|
|
27
|
+
to its `## Feature:` → `Story:` entry by slug or title.
|
|
28
|
+
2. **Slug + binding.** Use the story's **slug** for `.spec/<slug>/`. Take the ticket
|
|
29
|
+
provider from the Decisions **Platform** and the **id** from the story's tracker
|
|
30
|
+
parent or the user (ask for the id if the placeholder is still blank; omit the
|
|
31
|
+
`ticket:` block entirely if the platform is ad-hoc).
|
|
32
|
+
3. **Requirements.** Promote the story's **`AC:` lines into `REQ-N`** — verbatim where
|
|
33
|
+
already atomic; split any that hide two capabilities behind an "and".
|
|
34
|
+
4. **Constitution (first run only).** Seed `constitution.md` from the **`## Decisions`**
|
|
35
|
+
block instead of interviewing stack/layout: Stack + Code-lives → **Style** and
|
|
36
|
+
**Layout**; any verification hints → **Verification commands**; cross-cutting
|
|
37
|
+
concerns → **Guiding invariants**. If `constitution.md` already exists, reuse it.
|
|
38
|
+
5. Confirm the captured `REQ-N` with the user, then write `SPEC.md` as below.
|
|
39
|
+
|
|
40
|
+
Only the **project-wide** questions collapse — still confirm this story's binding and
|
|
41
|
+
requirements. If there is **no `BREAKDOWN.md`**, or no entry matches, run the **full
|
|
42
|
+
interview** below unchanged.
|
|
43
|
+
|
|
19
44
|
## Pick the slug (resolve the active dir)
|
|
20
45
|
|
|
21
46
|
Each spec lives in its own directory `.spec/<slug>/`. At the start of the interview,
|
|
@@ -31,14 +56,20 @@ establish the slug. There are two paths — both are first-class:
|
|
|
31
56
|
footer (everything else — namespacing, the constitution, the build loop — is
|
|
32
57
|
identical). You can bind a ticket later by adding the block to `SPEC.md`.
|
|
33
58
|
|
|
34
|
-
Create `.spec/<slug
|
|
35
|
-
|
|
59
|
+
Create `.spec/<slug>/`.
|
|
60
|
+
|
|
61
|
+
**One branch per ticket — how the active ticket is resolved.** Work for a ticket
|
|
62
|
+
lives on a branch named after the slug (e.g. `PROJ-123` or
|
|
63
|
+
`feature/PROJ-123-dark-mode`); downstream skills resolve the active ticket from the
|
|
64
|
+
branch name, so several tickets can be in flight on separate branches at once. If the
|
|
65
|
+
user isn't already on such a branch, create one (e.g. `git switch -c <slug>`) so the
|
|
66
|
+
new spec resolves by branch match.
|
|
36
67
|
|
|
37
68
|
## First run — scaffold
|
|
38
69
|
|
|
39
70
|
If `.spec/` does not exist:
|
|
40
71
|
|
|
41
|
-
1. Create `.spec/` and the active ticket dir `.spec/<slug
|
|
72
|
+
1. Create `.spec/` and the active ticket dir `.spec/<slug>/` (on the ticket branch — see above).
|
|
42
73
|
2. **Short interview** (keep it short — earned ceremony):
|
|
43
74
|
- the ticket binding (above);
|
|
44
75
|
- the intent in one paragraph;
|
|
@@ -71,7 +102,8 @@ that hides two capabilities, split it.
|
|
|
71
102
|
## Update mode (re-run on an existing spec)
|
|
72
103
|
|
|
73
104
|
When the active ticket's `SPEC.md` already exists and the user wants a change to
|
|
74
|
-
requirements (resolve the active dir
|
|
105
|
+
requirements (resolve the active dir by branch match — see the resolution order
|
|
106
|
+
downstream skills use):
|
|
75
107
|
|
|
76
108
|
1. Edit `.spec/<active>/SPEC.md` in place — add/alter/remove `REQ-N`, preserving
|
|
77
109
|
existing ids where the requirement still exists.
|
|
@@ -92,9 +124,9 @@ Tell the user which downstream docs went stale and to re-run `tiny-spec-plan` to
|
|
|
92
124
|
reconcile.
|
|
93
125
|
|
|
94
126
|
> **New spec?** To start a different piece of work (a new ticket or an ad-hoc
|
|
95
|
-
> change), re-run this skill — it creates a new `.spec/<slug>/`
|
|
96
|
-
>
|
|
97
|
-
> previous spec's artifacts stay untouched on disk.
|
|
127
|
+
> change), re-run this skill on a new branch — it creates a new `.spec/<slug>/` that
|
|
128
|
+
> resolves by branch match. The shared `constitution.md` and `memory.md` carry over;
|
|
129
|
+
> the previous spec's artifacts stay untouched on disk.
|
|
98
130
|
|
|
99
131
|
## When done
|
|
100
132
|
|
|
@@ -11,8 +11,9 @@ reviewed against.
|
|
|
11
11
|
|
|
12
12
|
Artifacts live under `.spec/`: the **shared** constitution at the root
|
|
13
13
|
(`.spec/constitution.md`), the per-ticket `SPEC.md`/`PLAN.md` under
|
|
14
|
-
`.spec/<ticket-id>/`. **Resolve the active ticket dir** from
|
|
15
|
-
|
|
14
|
+
`.spec/<ticket-id>/`. **Resolve the active ticket dir** from the current git branch:
|
|
15
|
+
the `.spec/<slug>/` whose slug matches the branch name (one branch per ticket). If
|
|
16
|
+
none matches, use the sole ticket dir if there's exactly one; else ask which. The
|
|
16
17
|
template ships in this skill's own `templates/` folder (alongside this file).
|
|
17
18
|
Requires `.spec/<active>/SPEC.md`.
|
|
18
19
|
|
|
@@ -10,8 +10,9 @@ tasks. No waves, no parallelism, no `owns:` contracts — tasks run one at a tim
|
|
|
10
10
|
top to bottom.
|
|
11
11
|
|
|
12
12
|
Artifacts live under `.spec/`; `PLAN.md` and `tasks.md` are per-ticket. **Resolve
|
|
13
|
-
the active ticket dir** from
|
|
14
|
-
|
|
13
|
+
the active ticket dir** from the current git branch: the `.spec/<slug>/` whose slug
|
|
14
|
+
matches the branch name (one branch per ticket). If none matches, use the sole
|
|
15
|
+
ticket dir if there's exactly one; else ask which. The template ships in this skill's own
|
|
15
16
|
`templates/` folder (alongside this file). Requires `.spec/<active>/PLAN.md`.
|
|
16
17
|
|
|
17
18
|
## Slice the plan into tasks
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|