@skitterbyte/skitterspec 16.4.0 → 16.5.2
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 +1 -1
- package/src/cli.js +25 -2
- package/src/init.js +15 -5
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skitterbyte/skitterspec",
|
|
3
|
-
"version": "16.
|
|
3
|
+
"version": "16.5.2",
|
|
4
4
|
"description": "Spec-driven development for Claude Code — a tracker-free filesystem workflow: lifecycle skills and per-spec isolation. For Linear sync, install @skitterbyte/skitterspec-linear instead.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude",
|
package/src/cli.js
CHANGED
|
@@ -48,6 +48,29 @@ const { renderRoutes, portsInUse, waitListening } = require('./env/proxy.js')
|
|
|
48
48
|
|
|
49
49
|
const pkg = require('../package.json')
|
|
50
50
|
|
|
51
|
+
// Commands this (tracker-free) base does NOT ship, and the distribution that
|
|
52
|
+
// does. Without this the base says only "unknown command: spec-sync", which a
|
|
53
|
+
// user correctly reads as "no such feature" — nothing anywhere named the
|
|
54
|
+
// distribution that has it, so they were stranded. Naming Linear here is a
|
|
55
|
+
// diagnostic string, not provider machinery: `init.js` already knows
|
|
56
|
+
// `linear.config.json` and `linear-base/` by name in order to protect them.
|
|
57
|
+
const PROVIDER_COMMANDS = {
|
|
58
|
+
'spec-sync': '@skitterbyte/skitterspec-linear',
|
|
59
|
+
'spec-sanitise': '@skitterbyte/skitterspec-linear',
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function unknownCommand(cmd) {
|
|
63
|
+
const dist = PROVIDER_COMMANDS[cmd]
|
|
64
|
+
if (dist) {
|
|
65
|
+
return (
|
|
66
|
+
`unknown command: ${cmd} — this is the base distribution, which does not ` +
|
|
67
|
+
`ship it.\n ${cmd} comes from ${dist} (a superset of this package): ` +
|
|
68
|
+
`install that instead.`
|
|
69
|
+
)
|
|
70
|
+
}
|
|
71
|
+
return `unknown command: ${cmd} (try --help)`
|
|
72
|
+
}
|
|
73
|
+
|
|
51
74
|
const HELP = `skitterspec — spec-driven-development for Claude Code
|
|
52
75
|
|
|
53
76
|
Usage:
|
|
@@ -1384,8 +1407,8 @@ async function run(argv) {
|
|
|
1384
1407
|
await cleanupReleaseTooling(dir, opts)
|
|
1385
1408
|
break
|
|
1386
1409
|
default:
|
|
1387
|
-
throw new Error(
|
|
1410
|
+
throw new Error(unknownCommand(cmd))
|
|
1388
1411
|
}
|
|
1389
1412
|
}
|
|
1390
1413
|
|
|
1391
|
-
module.exports = { run, parse }
|
|
1414
|
+
module.exports = { run, parse, HELP, unknownCommand }
|
package/src/init.js
CHANGED
|
@@ -562,11 +562,21 @@ function printReport(dir, mode, { diff = false } = {}) {
|
|
|
562
562
|
// ships none. Discovering it from what was actually installed keeps this file
|
|
563
563
|
// tracker-free — it never has to know which tracker (if any) is in the box.
|
|
564
564
|
const setupSkill = SKILLS.find((s) => /^spec-.+-setup$/.test(s))
|
|
565
|
-
const
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
565
|
+
const provider = setupSkill ? /^spec-(.+)-setup$/.exec(setupSkill)[1] : null
|
|
566
|
+
// …and the same derivation gives the provider's config filename, so this can
|
|
567
|
+
// report tracker sync the way it reports isolation above — from what is
|
|
568
|
+
// actually on disk. It used to say "opt-in: run /…-setup" even on a repo that
|
|
569
|
+
// had already configured it, telling you to set up what was already set up.
|
|
570
|
+
const trackerOn =
|
|
571
|
+
provider && fs.existsSync(path.join(dir, 'specs', '.core', `${provider}.config.json`))
|
|
572
|
+
const trackerNote = !setupSkill
|
|
573
|
+
? ''
|
|
574
|
+
: trackerOn
|
|
575
|
+
? `Tracker sync is ON: ${provider} — the repo stays the source of truth;` +
|
|
576
|
+
' /spec-push mirrors a spec up and /spec-status reports drift.\n'
|
|
577
|
+
: `Tracker sync is opt-in: run /${setupSkill} to configure it` +
|
|
578
|
+
' (it discovers your workspace and writes the config), or see' +
|
|
579
|
+
' specs/.core/SETUP.md.\n'
|
|
570
580
|
process.stdout.write(
|
|
571
581
|
'\nDone. Skills resolve as /spec, /spec-go, /spec-complete, /spec-cancel,' +
|
|
572
582
|
' /spec-bug, /spec-review, /spec-init, /spec-connect.\n' +
|