@skitterbyte/skitterspec-jira 0.0.0-stage → 2.0.0
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/MIGRATION.md +1266 -0
- package/README.md +44 -2
- package/assets/claude-md-section.md +85 -0
- package/assets/commands/allow-main.md +33 -0
- package/assets/commands/spec-connect.md +13 -0
- package/assets/commands/spec-live.md +14 -0
- package/assets/commands/spec-remote-review.md +37 -0
- package/assets/commands/spec-skip.md +24 -0
- package/assets/core/SETUP.md +192 -0
- package/assets/core/env.config.json.example +56 -0
- package/assets/core/env.config.md +606 -0
- package/assets/core/gating.config.json.example +4 -0
- package/assets/core/gating.config.md +81 -0
- package/assets/core/jira.config.json.example +18 -0
- package/assets/core/jira.config.md +88 -0
- package/assets/hooks/main-guard.cjs +162 -0
- package/assets/hooks/review-gate.cjs +146 -0
- package/assets/review/page.html +3384 -0
- package/assets/rules/commit-trailers.md +96 -0
- package/assets/rules/negative-checks.md +69 -0
- package/assets/rules/offered-unblocks.md +100 -0
- package/assets/rules/spec-planning.md +702 -0
- package/assets/rules/spec-reports.md +572 -0
- package/assets/skills/no-spec/SKILL.md +249 -0
- package/assets/skills/spec/SKILL.md +714 -0
- package/assets/skills/spec-bug/SKILL.md +585 -0
- package/assets/skills/spec-cancel/SKILL.md +261 -0
- package/assets/skills/spec-complete/SKILL.md +451 -0
- package/assets/skills/spec-diff/SKILL.md +870 -0
- package/assets/skills/spec-hotfix/SKILL.md +607 -0
- package/assets/skills/spec-init/SKILL.md +178 -0
- package/assets/skills/spec-jira-setup/SKILL.md +221 -0
- package/assets/skills/spec-list/SKILL.md +173 -0
- package/assets/skills/spec-next/SKILL.md +678 -0
- package/assets/skills/spec-push/SKILL.md +306 -0
- package/assets/skills/spec-review/SKILL.md +256 -0
- package/assets/skills/spec-reviewed/SKILL.md +284 -0
- package/assets/skills/spec-start/SKILL.md +496 -0
- package/assets/skills/spec-status/SKILL.md +114 -0
- package/assets/skills/spec-sync/SKILL.md +220 -0
- package/assets/skills/spec-to-main/SKILL.md +141 -0
- package/bin/skitterspec-jira.js +68 -0
- package/package.json +40 -4
- package/src/cli.js +5967 -0
- package/src/deprecate.js +138 -0
- package/src/env/bootstrap.js +188 -0
- package/src/env/building.js +143 -0
- package/src/env/classify.js +176 -0
- package/src/env/commitcmd.js +108 -0
- package/src/env/config.js +850 -0
- package/src/env/dev.js +63 -0
- package/src/env/glob.js +34 -0
- package/src/env/hooks.js +226 -0
- package/src/env/hotfix.js +413 -0
- package/src/env/hotfixland.js +302 -0
- package/src/env/integrate.js +167 -0
- package/src/env/live.js +479 -0
- package/src/env/mainguard.js +299 -0
- package/src/env/provision.js +466 -0
- package/src/env/proxy.js +225 -0
- package/src/env/prune.js +119 -0
- package/src/env/registry.js +159 -0
- package/src/env/render.js +17 -0
- package/src/env/resolve.js +716 -0
- package/src/env/review.js +2622 -0
- package/src/env/reviewers/coderabbit.js +228 -0
- package/src/env/reviewers.js +517 -0
- package/src/env/serve.js +1044 -0
- package/src/env/supervise.js +157 -0
- package/src/env/teardown.js +248 -0
- package/src/env/trust.js +87 -0
- package/src/gating.js +155 -0
- package/src/init.js +1150 -0
- package/src/lines-diff.js +114 -0
- package/src/prompts.js +129 -0
- package/src/vendor/jira/adf.js +414 -0
- package/src/vendor/jira/api.js +295 -0
- package/src/vendor/jira/cli-sync.js +1252 -0
- package/src/vendor/jira/commands.js +44 -0
- package/src/vendor/jira/config.js +286 -0
- package/src/vendor/jira/credentials.js +108 -0
- package/src/vendor/jira/dialect.js +45 -0
- package/src/vendor/jira/mcp.js +129 -0
- package/src/vendor/provider-kit/index.js +41 -0
- package/src/vendor/provider-kit/src/adapter.js +23 -0
- package/src/vendor/provider-kit/src/apply.js +207 -0
- package/src/vendor/provider-kit/src/args.js +68 -0
- package/src/vendor/provider-kit/src/assignment.js +277 -0
- package/src/vendor/provider-kit/src/config.js +251 -0
- package/src/vendor/provider-kit/src/credentials.js +404 -0
- package/src/vendor/provider-kit/src/doctor.js +35 -0
- package/src/vendor/provider-kit/src/http.js +63 -0
- package/src/vendor/provider-kit/src/identity.js +93 -0
- package/src/vendor/provider-kit/src/list-assignee.js +71 -0
- package/src/vendor/provider-kit/src/list-rows.js +35 -0
- package/src/vendor/provider-kit/src/md-compare.js +39 -0
- package/src/vendor/provider-kit/src/md-tables.js +94 -0
- package/src/vendor/provider-kit/src/prompt.js +50 -0
- package/src/vendor/provider-kit/src/released.js +219 -0
- package/src/vendor/provider-kit/src/specs.js +248 -0
- package/src/vendor/provider-kit/src/transport.js +22 -0
- package/src/vendor/sync-core/index.js +92 -0
- package/src/vendor/sync-core/src/base.js +81 -0
- package/src/vendor/sync-core/src/compare.js +338 -0
- package/src/vendor/sync-core/src/dialect.js +51 -0
- package/src/vendor/sync-core/src/fields.js +36 -0
- package/src/vendor/sync-core/src/legacy.js +100 -0
- package/src/vendor/sync-core/src/normalize.js +971 -0
- package/src/vendor/sync-core/src/push.js +85 -0
- package/src/vendor/sync-core/src/retarget.js +278 -0
- package/src/vendor/sync-core/src/task-block.js +308 -0
- package/src/vendor/sync-core/src/verify.js +67 -0
- package/src/vendor/sync-core/src/write.js +191 -0
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: no-spec
|
|
3
|
+
description: Do a piece of work that genuinely has no spec — a version bump, a lockfile refresh, a rename — on its own branch in its own worktree, reviewed on a page and landed on the verdict. Never on the base branch. Use when the user says "/no-spec", or asks for mechanical work that does not warrant a spec and should not sit on main.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /no-spec — work with no spec, off the base branch
|
|
7
|
+
|
|
8
|
+
> Stay silent while this runs — speak only to ask something you cannot answer
|
|
9
|
+
> yourself, or to report a failure at the moment it happens. Read
|
|
10
|
+
> `.claude/rules/spec-reports.md` before reporting; it defines the block this
|
|
11
|
+
> skill ends with.
|
|
12
|
+
|
|
13
|
+
Some work has no spec and should not have one. Bumping four projects to a new
|
|
14
|
+
version, refreshing a lockfile, a rename across a package: writing a one-phase
|
|
15
|
+
document for it produces a spec nobody reads, and `spec --quick` would have been
|
|
16
|
+
that under a friendlier name.
|
|
17
|
+
|
|
18
|
+
**What it is not is an excuse to work on the base branch.** Two things follow
|
|
19
|
+
from doing it there, and both cost someone else something: the tree is left
|
|
20
|
+
dirty, so every in-flight spec has to replay over it and a release cannot be
|
|
21
|
+
cut; and no page is ever rendered, so the work gets no review at all. This skill
|
|
22
|
+
is the same lane every spec uses — branch, worktree, page, verdict, land —
|
|
23
|
+
with the document left out because there is nothing to put in it.
|
|
24
|
+
|
|
25
|
+
**It writes no spec, moves nothing through the lifecycle, and mints no ticket.**
|
|
26
|
+
There is no bucket, no status, no phase index and no `Refs:` trailer. If you
|
|
27
|
+
find yourself wanting any of those, the work wanted `/spec`.
|
|
28
|
+
|
|
29
|
+
## 1. Name it
|
|
30
|
+
|
|
31
|
+
Take a kebab-case name from the invocation. It becomes the branch
|
|
32
|
+
(`chore/<name>`) and the worktree folder, so it should describe the work:
|
|
33
|
+
`bump-deps`, `rename-widget-props`, `lockfile-refresh`.
|
|
34
|
+
|
|
35
|
+
**Ask if none was given.** Do not invent one — a name nobody chose is a branch
|
|
36
|
+
nobody recognises a week later, and this is the one thing the skill cannot infer
|
|
37
|
+
from the work.
|
|
38
|
+
|
|
39
|
+
**Refuse a name that is already a spec**, which the engine does for you: two
|
|
40
|
+
things answering to one name is how a teardown removes the wrong tree.
|
|
41
|
+
|
|
42
|
+
## 2. Provision
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
skitterspec spec-env nospec <name>
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
It records the name as a **specless branch** and prints the plan. Run the
|
|
49
|
+
`git worktree add` it prints, then move this session into the worktree with a
|
|
50
|
+
plain `cd` and run the `then, run:` line where there is one:
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
cd "<worktreePath>" && skitterspec spec-env bootstrap <name>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
That seeds the project's gitignored files into the worktree, then runs its
|
|
57
|
+
`setup`, and stops at the first failing step, naming it. There is no stack: a
|
|
58
|
+
specless branch never gets an env file or Docker. The Bash working directory persists between calls, so from
|
|
59
|
+
here on the work happens on its own branch.
|
|
60
|
+
|
|
61
|
+
**The worktree steps are the engine's to run, never yours.** Seeding the
|
|
62
|
+
gitignored files, the env file, `setup` and the stack all happen inside
|
|
63
|
+
`skitterspec spec-env bootstrap <name>` — one call that names no file. Do not
|
|
64
|
+
reconstruct them as shell: they used to be printed that way, an agent's copy was
|
|
65
|
+
never faithful, and a project's secrets hook refused every rewrite that named a
|
|
66
|
+
`.env` path. `bootstrap --plan` says what it would do, for reading only.
|
|
67
|
+
|
|
68
|
+
**Confirm the move landed** rather than reading silence as success
|
|
69
|
+
(`.claude/rules/negative-checks.md` rule 1): `skitterspec spec-env resolve` with
|
|
70
|
+
no argument must name this branch, and report `no spec` as its bucket. If it
|
|
71
|
+
names something else, stop — say so and do nothing further, because the failure
|
|
72
|
+
this guards against is a session that writes a branch's worth of work into the
|
|
73
|
+
primary checkout while everything looks normal at the time.
|
|
74
|
+
|
|
75
|
+
**The record is not bookkeeping.** It is the only thing that makes a name with
|
|
76
|
+
nothing under `specs/**` resolvable, so without it `review`, `integrate`, `down`
|
|
77
|
+
and a bare `resolve` would all refuse this branch as a spec that does not exist.
|
|
78
|
+
|
|
79
|
+
**Where isolation is not configured** (`specs/.core/env.config.json` absent)
|
|
80
|
+
there is no worktree to make. Say so in one line and stop: this skill exists to
|
|
81
|
+
move work off the base branch, and without isolation there is nowhere to move it
|
|
82
|
+
to. Do not silently do the work in place — that is the outcome it exists to
|
|
83
|
+
prevent.
|
|
84
|
+
|
|
85
|
+
## 3. Do the work
|
|
86
|
+
|
|
87
|
+
Follow the project's rules in `.claude/rules/*.md` and `CLAUDE.md`, exactly as a
|
|
88
|
+
phase would. Tests are part of the work and not after it: extend or add whatever
|
|
89
|
+
covers the change, then run the project's typecheck and test commands. Do not
|
|
90
|
+
proceed to the page until they are green — and if they cannot be made green, say
|
|
91
|
+
so where it happens and report `❌`.
|
|
92
|
+
|
|
93
|
+
**Mechanical does not mean untested.** A version bump that breaks a build is the
|
|
94
|
+
commonest thing in this lane, which is why the gate is the same one a phase has.
|
|
95
|
+
|
|
96
|
+
## 4. Render the page and arm the gate
|
|
97
|
+
|
|
98
|
+
The work is done, the tests are green, and nothing is committed yet:
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
skitterspec spec-env review <name> --buttons nospec --run-reviewers
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
**This is free.** The engine reads git and splices text into a template; the
|
|
105
|
+
diff never passes through you however large it is.
|
|
106
|
+
|
|
107
|
+
`--buttons nospec` offers `Commit & Land` and `Commit`. It is its own set
|
|
108
|
+
because neither of the usual pairs fits: there is no next phase to continue and
|
|
109
|
+
nothing to put in flight.
|
|
110
|
+
|
|
111
|
+
**Then arm the gate:**
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
skitterspec spec-env review arm <name>
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
**This skill arms, and `/spec` does not.** That asymmetry is the rule in
|
|
118
|
+
`.claude/rules/spec-reports.md` rather than a choice made here: the gate asserts
|
|
119
|
+
that *finished work* owes an answer, and this is finished work. A written spec
|
|
120
|
+
owes no phase, so authoring arms nothing.
|
|
121
|
+
|
|
122
|
+
**Then offer `/spec-diff`. Do not run it.** The written review costs real tokens
|
|
123
|
+
because writing it means reading the diff, and that spend is the user's call.
|
|
124
|
+
|
|
125
|
+
## 5. Wait for the verdict
|
|
126
|
+
|
|
127
|
+
**The wait is a command. Do not write one.**
|
|
128
|
+
|
|
129
|
+
1. **Note the moment you start waiting**, as an ISO timestamp. That instant is
|
|
130
|
+
the whole scope of what you may claim.
|
|
131
|
+
2. **Run the engine's wait, and end your turn** — under the harness's
|
|
132
|
+
persistent watch primitive where one exists, else in the background
|
|
133
|
+
(`.claude/rules/spec-reports.md` carries the preference):
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
skitterspec spec-env review wait <name> --since <the timestamp>
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Pass no timeout. A reader who walks away from a diff is the normal case, and
|
|
140
|
+
a bounded watch once lost a verdict to a lunch break.
|
|
141
|
+
3. **On waking, let the engine pick:**
|
|
142
|
+
|
|
143
|
+
**A watch that dies is re-armed on the same window**, silently and bounded by
|
|
144
|
+
the age of that window — `.claude/rules/spec-reports.md` carries the contract,
|
|
145
|
+
including when to stop and what the banner says instead. Do not restate it
|
|
146
|
+
here.
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
skitterspec spec-env review <name> --claim-since <the timestamp> --json
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
It claims the one pass that arrived inside the window, acts on nothing when
|
|
153
|
+
none did, and refuses to choose when two did.
|
|
154
|
+
|
|
155
|
+
Relay the engine's **stack** — the `local:`, `network:` and `remote:` lines, all
|
|
156
|
+
three, in that order — never the bare `page:` path.
|
|
157
|
+
`.claude/rules/spec-reports.md` carries the shape and why every tier is named.
|
|
158
|
+
|
|
159
|
+
### Route on the verdict
|
|
160
|
+
|
|
161
|
+
- **`commit-land`** — hand off to `review.commitWith` (`/commit` by default),
|
|
162
|
+
then land it, then tear the worktree down:
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
skitterspec spec-env integrate <name>
|
|
166
|
+
skitterspec spec-env down <name>
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
`integrate` plans a rebase onto the base branch and a `merge --ff-only`; run
|
|
170
|
+
the commands it prints. `down` removes the worktree, deletes the branch and
|
|
171
|
+
**forgets the specless record**, which is what stops a torn-down name going on
|
|
172
|
+
answering to every verb with a path that is no longer there.
|
|
173
|
+
|
|
174
|
+
**Between the two, run the after-land commands.** Where the `integrate` plan
|
|
175
|
+
ends with a `then, in the primary checkout (<path>), run:` section — the
|
|
176
|
+
project's `afterLand` — run those commands there, in order, once the
|
|
177
|
+
fast-forward has succeeded, and on an already-landed no-op too. Run only the
|
|
178
|
+
lines under that heading; a `skipped (nothing in the land matched):` block
|
|
179
|
+
lists conditional entries this land did not need, and is information, never
|
|
180
|
+
commands. A lockfile
|
|
181
|
+
refresh is exactly the land that needs them.
|
|
182
|
+
**Stop at the first non-zero exit**: the run becomes `⚠️`, naming the command that failed and the ones that
|
|
183
|
+
did not run, and it **never undoes the land and never stops the `down`**.
|
|
184
|
+
|
|
185
|
+
**If the rebase conflicts, stop.** `git rebase --abort`, leave the commit on
|
|
186
|
+
the branch, tear nothing down, and report `❌` with the conflict — there is a
|
|
187
|
+
standing worktree, which is what separates `❌` from `⏸`.
|
|
188
|
+
|
|
189
|
+
- **`commit`** — the same commit, and **stop there**. The branch stands with the
|
|
190
|
+
work on it, which is the right ending for work that turned out to be bigger
|
|
191
|
+
than one sitting. Say in `Next` that `/spec-to-main` lands it later.
|
|
192
|
+
- **`changes`** — work the notes, record a resolution for each one so the next
|
|
193
|
+
render shows it struck through with what changed, then
|
|
194
|
+
**re-render and wait again**. The reader is still holding a decision.
|
|
195
|
+
- **`discuss`** — report and talk. Claim nothing, change nothing, tear nothing
|
|
196
|
+
down.
|
|
197
|
+
|
|
198
|
+
**Never tear the worktree down on anything but `commit-land`.** It is the only
|
|
199
|
+
verdict that says the work is finished, and the cost of being wrong is somebody
|
|
200
|
+
else's branch removed from disk.
|
|
201
|
+
|
|
202
|
+
## Report
|
|
203
|
+
|
|
204
|
+
End with the block defined in `.claude/rules/spec-reports.md`. That file carries
|
|
205
|
+
the shape; this section carries only what is specific here.
|
|
206
|
+
|
|
207
|
+
**Verdicts**
|
|
208
|
+
|
|
209
|
+
- `✅` — the work is done, the tests are green, and the verdict was acted on.
|
|
210
|
+
- `⚠️` — done and green, with something worth knowing — an after-land command
|
|
211
|
+
that failed, for one. `Notes` carries what the after-land commands ran and
|
|
212
|
+
skipped, or where they stopped; nothing about them when none are configured.
|
|
213
|
+
- `❌` — the tests are red, or the land failed part-way. Quote the failure and
|
|
214
|
+
say what is standing.
|
|
215
|
+
- `⏸` — refused before acting: no name given, the name is already a spec, the
|
|
216
|
+
`cd` did not take, or the project has no isolation. Nothing changed.
|
|
217
|
+
|
|
218
|
+
**Fields:** `Branch` · `Built` · `Tests` · `Notes` · `Landed` · `Worktree` ·
|
|
219
|
+
`Review` · `Follow-ups` · `Next`
|
|
220
|
+
|
|
221
|
+
**No `Tracker` and no `Spec`, ever.** There is no ticket and no document, and a
|
|
222
|
+
row saying so would report an absence with nothing behind it — which
|
|
223
|
+
`spec-reports.md` forbids for exactly this reason.
|
|
224
|
+
|
|
225
|
+
`Landed` and `Worktree` appear only once a verdict has been acted on; a run
|
|
226
|
+
waiting on the page has neither, and **omits the `Review` row** in favour of the
|
|
227
|
+
banner, which carries the counts, the stack and the two exits:
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## ⏸ Review ready — <N> files, +<a> −<d>
|
|
232
|
+
|
|
233
|
+
- **local** — <the `local:` URL>
|
|
234
|
+
- **network** — <the `network:` URL, or off with the command that turns it on>
|
|
235
|
+
- **remote** — <the `remote:` URL, or off with the command that turns it on>
|
|
236
|
+
|
|
237
|
+
I'm holding here until you send a verdict — the wait covers local and network.
|
|
238
|
+
|
|
239
|
+
`Commit & Land` finishes it · `Commit` keeps the branch
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
There `Next` names the page rather than a command, because the button is what
|
|
244
|
+
carries the work on.
|
|
245
|
+
|
|
246
|
+
**`Follow-ups` is where a spec gets offered.** This lane is for work with no
|
|
247
|
+
spec, so the thing it most often surfaces is work that *does* want one. Offer to
|
|
248
|
+
`/spec` it on the spot — and `/spec` provisions its own worktree, so there is
|
|
249
|
+
no caveat about where to write it.
|