@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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jesdi/skills",
3
- "version": "0.0.25",
3
+ "version": "0.0.26",
4
4
  "description": "jesdi's agent skills (content package consumed by @jesdi/skills-cli)",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -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, tasks) under specs/<slug>/.
6
- Runs in two stages with a human review between them. No interview, just
7
- synthesis of decisions already made. Trigger on "write the spec",
8
- "to-openspec", or "/to-openspec <slug> [stage 2]".
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 later task links back to it.
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**. Print the requirement list and any open questions so the human can cut or correct
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 (for example "/to-openspec <slug> stage 2"), after the human has reviewed
44
- stage 1. Re-read `proposal.md` and `spec.md` first; the human may have edited them.
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 (task IDs filled in step 3) or out of scope (why). Otherwise "None." Add the
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 tasks pass may not.
60
- 3. Write `specs/<slug>/tasks.md`: vertical slices, each small enough for one commit and one green
61
- check command. Tests come first in each slice.
62
- - Every task has its `_Goal:_` line, its **Seam** (one of the seams from `design.md`, precise
63
- enough to write a black-box test against) and its **Blocked by** (task IDs, or none). That
64
- makes the list a task graph `implement-spec` can run directly.
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" task: every task already ends with the check command green.
67
- - Then fill the task IDs into `design.md`'s **Identities**: every identity marked covered names
68
- the task that rekeys it. A covered identity with no task is a missing task; add it.
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 task list, then **Open questions**: every red-team finding the design leaves
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 task, or out of scope and why. Otherwise
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 <task> | out of scope: <why>.
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 task links back
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
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "generatedAt": "2026-10-01T01:49:46.043Z",
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.2",
80
- "hash": "sha256-80d168bfb69993b2977f6b6bcec9657e020f79e7cd61347a0f514755014e4c38",
81
- "description": "Turn settled discovery notes and a sketched data model into a spec folder in openspec shape (proposal, spec, design, tasks) under specs/<slug>/. Runs in two stages with a human review between them. No interview, just synthesis of decisions already made. Trigger on \"write the spec\", \"to-openspec\", or \"/to-openspec <slug> [stage 2]\"."
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.