@jesdi/skills 0.0.25 → 0.0.26
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.
package/package.json
CHANGED
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
name: to-openspec
|
|
3
3
|
description: >-
|
|
4
4
|
Turn settled discovery notes and a sketched data model into a spec folder
|
|
5
|
-
in openspec shape (proposal, spec, design
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
"
|
|
5
|
+
in openspec shape (proposal, spec, design) under specs/<slug>/, plus ticket
|
|
6
|
+
files under .agent/tickets/ that implement-spec runs directly. Two stages:
|
|
7
|
+
stage 1 alone by default, with a human review before stage 2, or both at
|
|
8
|
+
once with "all". No interview, just synthesis of decisions already made.
|
|
9
|
+
Trigger on "write the spec", "to-openspec", or
|
|
10
|
+
"/to-openspec <slug> [stage 2 | all]".
|
|
9
11
|
---
|
|
10
12
|
|
|
11
13
|
# To openspec
|
|
@@ -21,13 +23,16 @@ instead of inventing it. Never invent prices, policies, deadlines, or permission
|
|
|
21
23
|
conversation.
|
|
22
24
|
- Shape: read every file in the repo's `specs/_template/`, or in this skill's `templates/` when
|
|
23
25
|
the repo has none. Keep the headings exactly; write "None." rather than dropping a section.
|
|
26
|
+
Ignore a `tasks.md` template: tickets replace it.
|
|
24
27
|
- Check command: the one the repo documents (`make check`, or what AGENTS.md names).
|
|
28
|
+
- Stages: no argument runs stage 1 and stops. `stage 2` runs stage 2 only. `all` runs both
|
|
29
|
+
without the stop in between.
|
|
25
30
|
|
|
26
31
|
## Stage 1: what and why
|
|
27
32
|
|
|
28
33
|
Write `specs/<slug>/proposal.md` and `specs/<slug>/spec.md`.
|
|
29
34
|
|
|
30
|
-
- **Goal** is one or two sentences. Every
|
|
35
|
+
- **Goal** is one or two sentences. Every ticket serves it.
|
|
31
36
|
- **Non-goals** carry over every "later" or "never" verdict from discovery.
|
|
32
37
|
- **Requirements** cover the v1 slice only: the smallest set that meets the goal. Each one is
|
|
33
38
|
testable and maps to at least one scenario.
|
|
@@ -35,13 +40,14 @@ Write `specs/<slug>/proposal.md` and `specs/<slug>/spec.md`.
|
|
|
35
40
|
Every invariant (overselling, expiry, refund permissions, and so on) gets a scenario for the
|
|
36
41
|
boundary and one for the violation.
|
|
37
42
|
|
|
38
|
-
Then **stop
|
|
39
|
-
the spec before the design is written. Don't write code.
|
|
43
|
+
Then **stop**, unless invoked with `all`. Print the requirement list and any open questions so
|
|
44
|
+
the human can cut or correct the spec before the design is written. Don't write code.
|
|
40
45
|
|
|
41
46
|
## Stage 2: how
|
|
42
47
|
|
|
43
|
-
Run only when asked
|
|
44
|
-
stage 1.
|
|
48
|
+
Run only when asked: "/to-openspec <slug> stage 2" after the human has reviewed stage 1, or
|
|
49
|
+
`all` straight after stage 1. On `stage 2`, re-read `proposal.md` and `spec.md` first; the
|
|
50
|
+
human may have edited them.
|
|
45
51
|
|
|
46
52
|
1. Run the `red-team-data-model` skill against the data model. Print the top 5, and its identity
|
|
47
53
|
inventory when the change widens a key; don't write them to a file.
|
|
@@ -50,23 +56,24 @@ stage 1. Re-read `proposal.md` and `spec.md` first; the human may have edited th
|
|
|
50
56
|
- **Data model**: every invariant a DB constraint can enforce (`CHECK`, `UNIQUE`, `NOT NULL`,
|
|
51
57
|
FK, conditional `UPDATE ... WHERE`) goes in the table, not only in app code.
|
|
52
58
|
- **Identities**: when the change widens a key, every item of the red-team's identity
|
|
53
|
-
inventory, marked covered (
|
|
59
|
+
inventory, marked covered (ticket numbers filled in step 3) or out of scope (why). Otherwise "None." Add the
|
|
54
60
|
heading when the repo's template lacks it.
|
|
55
61
|
- **Seams**: the endpoint, function, or command the tests drive through, marked existing or
|
|
56
62
|
new. Prefer one high seam.
|
|
57
63
|
- No implementation code anywhere in the spec folder. `implement-spec`'s test-writer reads it
|
|
58
64
|
and must not know the solution. A decision's shape (a type, a schema, a state machine, a
|
|
59
|
-
seam's signature) may appear; the function bodies that make the
|
|
60
|
-
3.
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
+
seam's signature) may appear; the function bodies that make the tickets pass may not.
|
|
66
|
+
3. Run the `to-tickets` skill on `specs/<slug>/`, skipping its quiz (step 4): it writes
|
|
67
|
+
`.agent/tickets/<NN>-<slug>.md`, the task graph `implement-spec` runs directly. Don't write a
|
|
68
|
+
`tasks.md`. On top of its rules:
|
|
69
|
+
- Every scenario in `spec.md` is an acceptance criterion of some ticket.
|
|
70
|
+
- Each ticket's **Seam** is one of the seams from `design.md`.
|
|
65
71
|
- A slice adds only the tables and columns its own scenarios need, not the whole model up front.
|
|
66
|
-
- No standalone "run the checks"
|
|
67
|
-
- Then fill the
|
|
68
|
-
the
|
|
72
|
+
- No standalone "run the checks" ticket: every ticket already ends with the check command green.
|
|
73
|
+
- Then fill the ticket numbers into `design.md`'s **Identities**: every identity marked covered
|
|
74
|
+
names the ticket that rekeys it. A covered identity with no ticket is a missing ticket; add it.
|
|
69
75
|
|
|
70
|
-
Print the
|
|
76
|
+
Print the ticket list (number, title, blocked by, seam, touches), then **Open questions**: every
|
|
77
|
+
red-team finding the design leaves
|
|
71
78
|
unresolved, and every input the design assumes but the sources don't provide. Then stop. Don't
|
|
72
79
|
write code.
|
|
@@ -17,10 +17,10 @@ Tables/fields touched or added, and the invariants that go in DB constraints (no
|
|
|
17
17
|
## Identities
|
|
18
18
|
|
|
19
19
|
When this change widens a key, each identity built from the old key (file names, hashes,
|
|
20
|
-
dedupe keys, command args, dict keys): covered by which
|
|
20
|
+
dedupe keys, command args, dict keys): covered by which ticket, or out of scope and why. Otherwise
|
|
21
21
|
"None."
|
|
22
22
|
|
|
23
|
-
- `<identity>` — covered by <
|
|
23
|
+
- `<identity>` — covered by <ticket> | out of scope: <why>.
|
|
24
24
|
|
|
25
25
|
## Seams
|
|
26
26
|
|
|
@@ -10,8 +10,7 @@ The actor(s) this serves (e.g. customer, staff, owner).
|
|
|
10
10
|
|
|
11
11
|
## Goal
|
|
12
12
|
|
|
13
|
-
What "done" looks like for this slice. One or two sentences — this is what every
|
|
14
|
-
to.
|
|
13
|
+
What "done" looks like for this slice. One or two sentences — this is what every ticket serves.
|
|
15
14
|
|
|
16
15
|
## Non-goals
|
|
17
16
|
|
package/skills-manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"generatedAt": "2026-10-
|
|
3
|
+
"generatedAt": "2026-10-02T10:20:34.972Z",
|
|
4
4
|
"skills": [
|
|
5
5
|
{
|
|
6
6
|
"name": "backlog",
|
|
@@ -76,9 +76,9 @@
|
|
|
76
76
|
},
|
|
77
77
|
{
|
|
78
78
|
"name": "to-openspec",
|
|
79
|
-
"version": "0.1.
|
|
80
|
-
"hash": "sha256-
|
|
81
|
-
"description": "Turn settled discovery notes and a sketched data model into a spec folder in openspec shape (proposal, spec, design
|
|
79
|
+
"version": "0.1.3",
|
|
80
|
+
"hash": "sha256-fa982c0960a4b07d6ec9c54076f831c1fb16a4e46b8ddd62acf86e5316345be7",
|
|
81
|
+
"description": "Turn settled discovery notes and a sketched data model into a spec folder in openspec shape (proposal, spec, design) under specs/<slug>/, plus ticket files under .agent/tickets/ that implement-spec runs directly. Two stages: stage 1 alone by default, with a human review before stage 2, or both at once with \"all\". No interview, just synthesis of decisions already made. Trigger on \"write the spec\", \"to-openspec\", or \"/to-openspec <slug> [stage 2 | all]\"."
|
|
82
82
|
},
|
|
83
83
|
{
|
|
84
84
|
"name": "to-spec",
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
# <Feature title> — Tasks
|
|
2
|
-
|
|
3
|
-
Each task links to the goal in proposal.md. Work the frontier (tasks whose blockers are done);
|
|
4
|
-
commit per task with its ID.
|
|
5
|
-
|
|
6
|
-
- [ ] **T1** — <task>. _Goal: <one line, why this task serves proposal.md's goal>._
|
|
7
|
-
Seam: <endpoint / function / command from design.md>. Blocked by: none.
|
|
8
|
-
- [ ] **T2** — <task>. _Goal: ..._
|
|
9
|
-
Seam: .... Blocked by: T1.
|