murmur8 4.7.5 → 4.7.7
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/.blueprint/features/feature_display-version-number/FEATURE_SPEC.md +159 -0
- package/.blueprint/features/feature_display-version-number/IMPLEMENTATION_PLAN.md +59 -0
- package/.blueprint/features/feature_display-version-number/handoff-alex.md +20 -0
- package/.blueprint/features/feature_display-version-number/handoff-cass.md +20 -0
- package/.blueprint/features/feature_display-version-number/handoff-nigel.md +20 -0
- package/.blueprint/features/feature_display-version-number/story-version-help-discoverability.md +39 -0
- package/.blueprint/features/feature_display-version-number/story-version-invocation.md +70 -0
- package/REFINE_SKILL.md +5 -0
- package/SKILL.md +5 -0
- package/bin/cli.js +7 -0
- package/package.json +1 -1
- package/src/commands/help.js +5 -0
- package/src/commands/version.js +28 -0
- package/src/update.js +2 -0
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
---
|
|
2
|
+
featureId: d480be2b-5d31-4a87-bbaa-2a564cd38c52
|
|
3
|
+
---
|
|
4
|
+
# Feature Specification — Display Version Number
|
|
5
|
+
|
|
6
|
+
**Feature slug:** `display-version-number`
|
|
7
|
+
**System Spec:** `.blueprint/system_specification/SYSTEM_SPEC.md`
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 1. Feature Intent
|
|
12
|
+
|
|
13
|
+
**Why this feature exists.**
|
|
14
|
+
|
|
15
|
+
- **Problem:** Users running `murmur8` have no way to quickly confirm which version of the package is installed. When filing bug reports or sharing configurations, they cannot state the version in use.
|
|
16
|
+
- **User need:** Developers need a fast, standard CLI affordance (`--version` / `-V`) to retrieve the installed murmur8 version without reading `package.json` directly.
|
|
17
|
+
- **System alignment:** murmur8 is distributed as an npm package (`murmur8`); version transparency is a baseline quality-of-life expectation for CLI tooling. This supports the system purpose of providing a dependable, professional workflow framework.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 2. Scope
|
|
22
|
+
|
|
23
|
+
### In Scope
|
|
24
|
+
- A `--version` flag (and `-V` short alias) handled at the CLI entry point (`bin/cli.js`) that prints the version string from `package.json` and exits.
|
|
25
|
+
- A `version` sub-command (`murmur8 version`) as an alias for discoverability, listed in `help`.
|
|
26
|
+
- The version string format: plain semver with no decoration (e.g., `4.7.6`), printed to stdout, followed by a newline.
|
|
27
|
+
- The `help` output updated to reference the version command/flag.
|
|
28
|
+
|
|
29
|
+
### Out of Scope
|
|
30
|
+
- Version checking against a remote registry (update notifications) — deferred.
|
|
31
|
+
- Structured output formats (e.g., `--format=json`) — not needed for a version command.
|
|
32
|
+
- Displaying versions of peer dependencies (Node.js, Claude Code) — not in scope.
|
|
33
|
+
- Changelog or release notes output.
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 3. Actors Involved
|
|
38
|
+
|
|
39
|
+
### Human User (Developer)
|
|
40
|
+
- **Can do:** Run `murmur8 --version`, `murmur8 -V`, or `murmur8 version` to retrieve the installed version number.
|
|
41
|
+
- **Cannot do:** Modify the version via this command; this is read-only.
|
|
42
|
+
|
|
43
|
+
### CLI Entry Point (`bin/cli.js`)
|
|
44
|
+
- **Can do:** Intercept `--version` / `-V` flags and the `version` sub-command before any other command routing, read `package.json` version, print it, and exit 0.
|
|
45
|
+
- **Cannot do:** Spawn agents or modify queue state.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## 4. Behaviour Overview
|
|
50
|
+
|
|
51
|
+
**What the feature does, conceptually.**
|
|
52
|
+
|
|
53
|
+
- **Happy path — flag form:** User runs `murmur8 --version` or `murmur8 -V`. The CLI reads `version` from `package.json`, prints it to stdout (e.g., `4.7.6`), and exits with code 0.
|
|
54
|
+
- **Happy path — command form:** User runs `murmur8 version`. Behaviour is identical to flag form.
|
|
55
|
+
- **Help integration:** `murmur8 help` lists `version` and `--version` so the affordance is discoverable.
|
|
56
|
+
- **No side effects:** Running the version command does not read queue state, start agents, or write any files.
|
|
57
|
+
- **Exit behaviour:** Process exits immediately after printing; no banner, no decorative output beyond the version string.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## 5. State & Lifecycle Interactions
|
|
62
|
+
|
|
63
|
+
This feature is **state-constraining** (does not create or transition pipeline state) and **read-only**.
|
|
64
|
+
|
|
65
|
+
- No pipeline stages are entered.
|
|
66
|
+
- No queue state is read or modified.
|
|
67
|
+
- No `.claude/` files are touched.
|
|
68
|
+
- The feature activates before command routing, so it cannot conflict with any pipeline state.
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## 6. Rules & Decision Logic
|
|
73
|
+
|
|
74
|
+
### Rule 1 — Flag intercept priority
|
|
75
|
+
- **Description:** `--version` and `-V` are checked before alias resolution and before command routing.
|
|
76
|
+
- **Inputs:** `process.argv`
|
|
77
|
+
- **Output:** Prints semver string, exits 0.
|
|
78
|
+
- **Deterministic:** Yes.
|
|
79
|
+
|
|
80
|
+
### Rule 2 — Command routing
|
|
81
|
+
- **Description:** If the first argument is `version` (after alias resolution), route to the version handler.
|
|
82
|
+
- **Inputs:** `args[0] === 'version'`
|
|
83
|
+
- **Output:** Prints semver string, exits 0.
|
|
84
|
+
- **Deterministic:** Yes.
|
|
85
|
+
|
|
86
|
+
### Rule 3 — Version source
|
|
87
|
+
- **Description:** Version is read from `package.json` at the project root (same directory as `bin/cli.js`'s parent). This ensures the displayed version always matches the installed package — no hardcoded strings.
|
|
88
|
+
- **Inputs:** `../package.json` relative to `bin/cli.js`
|
|
89
|
+
- **Output:** `version` field value.
|
|
90
|
+
- **Deterministic:** Yes.
|
|
91
|
+
|
|
92
|
+
### Rule 4 — Output format
|
|
93
|
+
- **Description:** Output is the bare semver string followed by a single newline. No prefix (e.g., no `murmur8 v4.7.6`), to support scripting and `grep`.
|
|
94
|
+
- **Inferred interpretation:** Bare version (e.g., `4.7.6`) is preferred over prefixed (`v4.7.6`) for scripting compatibility. This is an explicit assumption — see §9.
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## 7. Dependencies
|
|
99
|
+
|
|
100
|
+
- `package.json` (root) — source of truth for the version string.
|
|
101
|
+
- `bin/cli.js` — entry point where flag/command intercept is added.
|
|
102
|
+
- `src/commands/help.js` — must be updated to document the new flag and command.
|
|
103
|
+
- No external systems or network dependencies.
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## 8. Non-Functional Considerations
|
|
108
|
+
|
|
109
|
+
- **Performance:** Must execute and exit in under 100 ms; reading `package.json` via `require()` (sync, cached) is sufficient.
|
|
110
|
+
- **Reliability:** If `package.json` cannot be read, exit with a non-zero code and a descriptive error message. This is an edge case (malformed install) but must not silently fail.
|
|
111
|
+
- **Security:** No user input is echoed; no risk of injection.
|
|
112
|
+
- **Scripting compatibility:** Output must be machine-parseable (plain semver, no ANSI colour codes, no banner).
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## 9. Assumptions & Open Questions
|
|
117
|
+
|
|
118
|
+
### Assumptions
|
|
119
|
+
- A1: The preferred output format is bare semver (e.g., `4.7.6`), not prefixed (e.g., `v4.7.6`), to maximise scripting compatibility. **If the team prefers a `v` prefix, this is easily changed.**
|
|
120
|
+
- A2: `murmur8 version` (sub-command) is added as an alias for discoverability; this is consistent with tools like `node --version` / `node version`.
|
|
121
|
+
- A3: No existing `version` command conflicts with this slug (confirmed: not present in `src/commands/`).
|
|
122
|
+
- A4: The flag intercept should happen before `require()` of any command module, to avoid side effects on a simple version query.
|
|
123
|
+
|
|
124
|
+
### Open Questions
|
|
125
|
+
- OQ1: Should the version command also display the Node.js version (e.g., `murmur8 4.7.6 (node 20.x)`)? Deferred — not in scope for this iteration.
|
|
126
|
+
- OQ2: Should a future `--check-update` flag compare against the npm registry? Deferred.
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## 10. Impact on System Specification
|
|
131
|
+
|
|
132
|
+
- **Reinforces:** The system spec notes CLI tooling (`init`, `update`, `queue`, etc.) as in scope. A `version` command is a standard CLI affordance that reinforces the professional quality of the tooling.
|
|
133
|
+
- **No contradiction:** The system spec does not preclude this feature. It does not touch pipeline, queue, or agent concerns.
|
|
134
|
+
- **No system spec change required.** This feature is a straightforward CLI quality-of-life addition within existing boundaries.
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## 11. Handover to BA (Cass)
|
|
139
|
+
|
|
140
|
+
**Story themes:**
|
|
141
|
+
1. As a developer, I want to run `murmur8 --version` so that I can confirm the installed version.
|
|
142
|
+
2. As a developer, I want `murmur8 version` as an alternative sub-command so the version is discoverable from help.
|
|
143
|
+
3. As a developer, I want the output to be machine-parseable so I can use it in scripts.
|
|
144
|
+
|
|
145
|
+
**Expected story boundaries:**
|
|
146
|
+
- One story per invocation path (`--version`/`-V` flag; `version` sub-command) is sufficient, or they can be collapsed into one if acceptance criteria covers both.
|
|
147
|
+
- A story for help discoverability (the `help` output update) may be folded into the above or treated as a separate concern.
|
|
148
|
+
|
|
149
|
+
**Areas needing careful story framing:**
|
|
150
|
+
- The output format assumption (bare semver vs. `v`-prefixed) should be explicit in acceptance criteria so Nigel can write a deterministic assertion.
|
|
151
|
+
- Error path (unreadable `package.json`) should be a separate AC, not a separate story.
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## 12. Change Log (Feature-Level)
|
|
156
|
+
|
|
157
|
+
| Date | Change | Reason | Raised By |
|
|
158
|
+
|------|--------|--------|-----------|
|
|
159
|
+
| 2026-06-01 | Initial feature specification | New feature | Alex |
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Implementation Plan: display-version-number
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Add `--version` / `-V` flag interception and a `version` sub-command to the
|
|
6
|
+
murmur8 CLI. Version is read from `package.json` resolved relative to
|
|
7
|
+
`bin/cli.js` (not `cwd`) so the error path test (DVN-8) works correctly.
|
|
8
|
+
Help output is updated to list the sub-command and both flags.
|
|
9
|
+
|
|
10
|
+
## Files to Create/Modify
|
|
11
|
+
|
|
12
|
+
| Path | Action | Purpose |
|
|
13
|
+
|------|--------|---------|
|
|
14
|
+
| `src/commands/version.js` | Create | Reads `package.json`, writes bare semver to stdout, handles error path |
|
|
15
|
+
| `bin/cli.js` | Modify | Intercept `--version`/`-V` before command routing; add `version` alias |
|
|
16
|
+
| `src/commands/help.js` | Modify | Add `version`, `--version`, and `-V` entries to help text |
|
|
17
|
+
|
|
18
|
+
## Implementation Steps
|
|
19
|
+
|
|
20
|
+
1. **Create `src/commands/version.js`**
|
|
21
|
+
- Accept `pkgRoot` option (defaults to `path.join(__dirname, '../../')`) so
|
|
22
|
+
the path is always resolved relative to `bin/cli.js` via `__dirname` logic.
|
|
23
|
+
- In `run()`: read `package.json` with `fs.readFileSync`; on success write
|
|
24
|
+
`version + '\n'` to stdout and exit 0; on error write a descriptive message
|
|
25
|
+
to stderr and exit 1 (no stdout output).
|
|
26
|
+
- Export `{ run, description }`.
|
|
27
|
+
|
|
28
|
+
2. **Intercept `--version` and `-V` in `bin/cli.js`**
|
|
29
|
+
- Before the `if (!command || command === 'help' …)` block, add:
|
|
30
|
+
`if (command === '--version' || command === '-V') { require version cmd, run, return; }`
|
|
31
|
+
- Pass the resolved `pkgRoot` (`path.join(__dirname, '../package.json')`) so
|
|
32
|
+
`version.js` knows where to look.
|
|
33
|
+
|
|
34
|
+
3. **Add `version` sub-command alias in `bin/cli.js`**
|
|
35
|
+
- Add `'version': 'version'` to the `aliases` map (or simply ensure
|
|
36
|
+
`src/commands/version.js` is found by the existing dynamic loader since the
|
|
37
|
+
file name matches the sub-command name — no alias entry needed).
|
|
38
|
+
|
|
39
|
+
4. **Update `src/commands/help.js`**
|
|
40
|
+
- Add a `version` line to the Commands block (e.g. next to `help`):
|
|
41
|
+
`version Print the installed murmur8 version`
|
|
42
|
+
- Add a flags section or inline note:
|
|
43
|
+
`--version, -V Print version and exit`
|
|
44
|
+
- Both strings must appear literally in the output (DVN-9, DVN-10, DVN-11).
|
|
45
|
+
|
|
46
|
+
5. **Verify test coverage incrementally**
|
|
47
|
+
- Steps 1–2 make DVN-1 through DVN-8 pass.
|
|
48
|
+
- Step 3 makes DVN-3 pass (version sub-command).
|
|
49
|
+
- Step 4 makes DVN-9, DVN-10, DVN-11 pass.
|
|
50
|
+
|
|
51
|
+
## Risks / Questions
|
|
52
|
+
|
|
53
|
+
- **DVN-8 destructive rename**: the test temporarily deletes `package.json`
|
|
54
|
+
from the project root. `version.js` must NOT cache `require('../package.json')`
|
|
55
|
+
at module load time — it must use `fs.readFileSync` inside `run()` so the
|
|
56
|
+
missing-file error is triggered at invocation, not at `require` time.
|
|
57
|
+
- **`process.exit` in version.js**: calling `process.exit` directly is fine for
|
|
58
|
+
the CLI handler; ensure error branch uses exit code 1 and writes nothing to
|
|
59
|
+
stdout before exiting.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
## Handoff Summary
|
|
2
|
+
**For:** Cass
|
|
3
|
+
**Feature:** display-version-number
|
|
4
|
+
|
|
5
|
+
### Key Decisions
|
|
6
|
+
- Version is read from `package.json` at runtime (no hardcoded string) to guarantee accuracy
|
|
7
|
+
- Output format is bare semver (e.g., `4.7.6`) with no prefix or decoration, for scripting compatibility — this is an explicit assumption (A1 in spec)
|
|
8
|
+
- Both `--version`/`-V` flags and a `version` sub-command are in scope; flag intercept happens before command routing
|
|
9
|
+
- `help` output must be updated to document the new flag and command
|
|
10
|
+
- No remote registry check, no Node.js version display — deferred out of scope
|
|
11
|
+
|
|
12
|
+
### Files Created
|
|
13
|
+
- .blueprint/features/feature_display-version-number/FEATURE_SPEC.md
|
|
14
|
+
|
|
15
|
+
### Open Questions
|
|
16
|
+
- OQ1: Should output include a `v` prefix (e.g., `v4.7.6`) or remain bare (`4.7.6`)? Spec assumes bare; AC should encode whichever is decided
|
|
17
|
+
- OQ2: Should error path (unreadable `package.json`) be covered by a separate story or an AC on the primary story?
|
|
18
|
+
|
|
19
|
+
### Critical Context
|
|
20
|
+
This is a small, read-only CLI affordance. The key behavioural detail that Cass must make explicit in stories is the **output format** (bare semver, no ANSI codes, single newline) because Nigel's tests will assert on exact stdout. The two invocation paths (`--version` flag vs. `version` sub-command) can be one story with two ACs or two stories — either works, but the flag intercept priority (before command routing) should be captured as an AC to ensure Codey implements it correctly.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
## Handoff Summary
|
|
2
|
+
**For:** Nigel
|
|
3
|
+
**Feature:** display-version-number
|
|
4
|
+
|
|
5
|
+
### Key Decisions
|
|
6
|
+
- Output is bare semver only (e.g., `4.7.6`) — no `v` prefix, no ANSI codes, single trailing newline; assert on exact stdout
|
|
7
|
+
- All three invocations (`--version`, `-V`, `version` sub-command) must produce identical output
|
|
8
|
+
- Flag intercept occurs before command routing — no queue state touched, no agents spawned
|
|
9
|
+
- Version string is read from root `package.json` at runtime; test should verify it matches that file
|
|
10
|
+
- Error path (unreadable `package.json`) exits non-zero with stderr message — no stdout version string
|
|
11
|
+
|
|
12
|
+
### Files Created
|
|
13
|
+
- .blueprint/features/feature_display-version-number/story-version-invocation.md
|
|
14
|
+
- .blueprint/features/feature_display-version-number/story-version-help-discoverability.md
|
|
15
|
+
|
|
16
|
+
### Open Questions
|
|
17
|
+
- None
|
|
18
|
+
|
|
19
|
+
### Critical Context
|
|
20
|
+
AC assertions on stdout must be exact: bare semver string + newline, nothing else. The three invocation paths and the error path are the highest-priority test cases. Help discoverability story (AC1–AC2) only requires checking that `murmur8 help` stdout contains the strings `version` and `--version`/`-V`.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
## Handoff Summary
|
|
2
|
+
**For:** Codey
|
|
3
|
+
**Feature:** display-version-number
|
|
4
|
+
|
|
5
|
+
### Key Decisions
|
|
6
|
+
- 11 tests (DVN-1–DVN-11) covering all story ACs across both stories
|
|
7
|
+
- `--version`, `-V`, and `version` sub-command must produce identical output: bare semver + `\n`, no prefix, no ANSI
|
|
8
|
+
- Version must be read from `package.json` at runtime (resolved relative to `bin/cli.js`, not `cwd`)
|
|
9
|
+
- DVN-8 tests the error path by temporarily removing `package.json` — CLI must catch read errors, write to stderr, exit non-zero, emit no stdout
|
|
10
|
+
- Help discoverability tests assert `murmur8 help` stdout contains `version`, `--version`, and `-V`
|
|
11
|
+
|
|
12
|
+
### Files Created
|
|
13
|
+
- test/artifacts/feature_display-version-number/test-spec.md
|
|
14
|
+
- test/feature_display-version-number.test.js
|
|
15
|
+
|
|
16
|
+
### Open Questions
|
|
17
|
+
- None
|
|
18
|
+
|
|
19
|
+
### Critical Context
|
|
20
|
+
Implement version handling in `bin/cli.js` (flag intercept before command routing) and add a `src/commands/version.js` handler. Help output (`src/commands/help.js`) must list both `version` and `--version`/`-V`. The `package.json` must be resolved via `path.join(__dirname, '../package.json')` from `bin/cli.js` so DVN-8's rename-based error test works correctly.
|
package/.blueprint/features/feature_display-version-number/story-version-help-discoverability.md
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Story: Version Help Discoverability
|
|
2
|
+
|
|
3
|
+
**Feature:** display-version-number
|
|
4
|
+
**Story slug:** version-help-discoverability
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## User Story
|
|
9
|
+
|
|
10
|
+
As a developer using murmur8,
|
|
11
|
+
I want the `--version` flag and `version` command to appear in `murmur8 help` output
|
|
12
|
+
so that I can discover how to check the installed version without consulting external documentation.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Acceptance Criteria
|
|
17
|
+
|
|
18
|
+
**AC1 — `help` output lists the `version` sub-command**
|
|
19
|
+
- Given the murmur8 CLI is installed
|
|
20
|
+
- When the user runs `murmur8 help` (or `murmur8 --help`)
|
|
21
|
+
- Then stdout includes a reference to the `version` sub-command
|
|
22
|
+
|
|
23
|
+
**AC2 — `help` output documents the `--version` flag**
|
|
24
|
+
- Given the murmur8 CLI is installed
|
|
25
|
+
- When the user runs `murmur8 help` (or `murmur8 --help`)
|
|
26
|
+
- Then stdout includes a reference to the `--version` flag (and `-V` short alias)
|
|
27
|
+
|
|
28
|
+
**AC3 — Help output is not affected by version invocations**
|
|
29
|
+
- Given the murmur8 CLI is installed
|
|
30
|
+
- When the user runs `murmur8 help` after previously running `murmur8 --version`
|
|
31
|
+
- Then the help output is unchanged (no side effects from version invocation)
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Out of Scope
|
|
36
|
+
|
|
37
|
+
- Displaying version output within the help text itself
|
|
38
|
+
- Adding a dedicated `murmur8 help version` sub-help page
|
|
39
|
+
- Any changes to help output unrelated to the version flag/command
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Story: Version Invocation
|
|
2
|
+
|
|
3
|
+
**Feature:** display-version-number
|
|
4
|
+
**Story slug:** version-invocation
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## User Story
|
|
9
|
+
|
|
10
|
+
As a developer using murmur8,
|
|
11
|
+
I want to run `murmur8 --version`, `murmur8 -V`, or `murmur8 version`
|
|
12
|
+
so that I can quickly confirm which version of the package is installed without reading `package.json` directly.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Acceptance Criteria
|
|
17
|
+
|
|
18
|
+
**AC1 — `--version` flag prints bare semver and exits**
|
|
19
|
+
- Given the murmur8 CLI is installed
|
|
20
|
+
- When the user runs `murmur8 --version`
|
|
21
|
+
- Then stdout contains exactly the bare semver string (e.g., `4.7.6`) followed by a single newline, with no `v` prefix, no banner, and no ANSI colour codes
|
|
22
|
+
- And the process exits with code 0
|
|
23
|
+
|
|
24
|
+
**AC2 — `-V` short alias behaves identically to `--version`**
|
|
25
|
+
- Given the murmur8 CLI is installed
|
|
26
|
+
- When the user runs `murmur8 -V`
|
|
27
|
+
- Then stdout is identical to the output of `murmur8 --version`
|
|
28
|
+
- And the process exits with code 0
|
|
29
|
+
|
|
30
|
+
**AC3 — `version` sub-command behaves identically to the flag form**
|
|
31
|
+
- Given the murmur8 CLI is installed
|
|
32
|
+
- When the user runs `murmur8 version`
|
|
33
|
+
- Then stdout is identical to the output of `murmur8 --version`
|
|
34
|
+
- And the process exits with code 0
|
|
35
|
+
|
|
36
|
+
**AC4 — Flag intercept happens before command routing**
|
|
37
|
+
- Given the murmur8 CLI is installed
|
|
38
|
+
- When the user runs `murmur8 --version`
|
|
39
|
+
- Then the CLI intercepts the flag before any command module is loaded or executed
|
|
40
|
+
- And no queue state is read or modified, and no agents are spawned
|
|
41
|
+
|
|
42
|
+
**AC5 — Version is read from `package.json` at runtime**
|
|
43
|
+
- Given the murmur8 CLI is installed
|
|
44
|
+
- When any version invocation is run
|
|
45
|
+
- Then the printed version string matches the `version` field in the root `package.json` exactly
|
|
46
|
+
- And the output is not a hardcoded string
|
|
47
|
+
|
|
48
|
+
**AC6 — Error path: unreadable `package.json`**
|
|
49
|
+
- Given the root `package.json` cannot be read (e.g., missing or malformed)
|
|
50
|
+
- When the user runs any version invocation
|
|
51
|
+
- Then the process exits with a non-zero exit code
|
|
52
|
+
- And a descriptive error message is written to stderr
|
|
53
|
+
- And no version string is printed to stdout
|
|
54
|
+
|
|
55
|
+
**AC7 — No side effects**
|
|
56
|
+
- Given any version invocation is run
|
|
57
|
+
- When the command completes
|
|
58
|
+
- Then no files under `.claude/` are created or modified
|
|
59
|
+
- And no pipeline stages are entered
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Out of Scope
|
|
64
|
+
|
|
65
|
+
- Displaying the Node.js version alongside the murmur8 version
|
|
66
|
+
- Displaying versions of peer dependencies
|
|
67
|
+
- `v`-prefixed output (e.g., `v4.7.6`) — output is always bare semver
|
|
68
|
+
- Remote registry version checking or update notifications
|
|
69
|
+
- Structured output formats (e.g., `--format=json`)
|
|
70
|
+
- Changelog or release notes output
|
package/REFINE_SKILL.md
CHANGED
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
Refine an existing feature by conversing with Alex, then propagating changes through stories, tests, and implementation.
|
|
4
4
|
|
|
5
|
+
## Execution Contract
|
|
6
|
+
|
|
7
|
+
**You MUST execute ALL steps in sequence through to Step 8 (telemetry + commit).**
|
|
8
|
+
Do not stop after implementation. The pipeline is not complete until Step 8 runs.
|
|
9
|
+
|
|
5
10
|
## Invocation
|
|
6
11
|
|
|
7
12
|
```bash
|
package/SKILL.md
CHANGED
|
@@ -5,6 +5,11 @@ description: Run the Alex → Cass → Nigel → Codey pipeline using Task tool
|
|
|
5
5
|
|
|
6
6
|
# Implement Feature Skill
|
|
7
7
|
|
|
8
|
+
## Execution Contract
|
|
9
|
+
|
|
10
|
+
**You MUST execute ALL steps in sequence through to Step 12 (telemetry + summary).**
|
|
11
|
+
Do not stop after implementation or commit. The pipeline is not complete until Step 12 runs.
|
|
12
|
+
|
|
8
13
|
## Paths
|
|
9
14
|
|
|
10
15
|
| Var | Path |
|
package/bin/cli.js
CHANGED
|
@@ -18,6 +18,13 @@ const resolvedCommand = aliases[command] || command;
|
|
|
18
18
|
|
|
19
19
|
// Dynamic command loading
|
|
20
20
|
async function main() {
|
|
21
|
+
// Handle --version / -V flags
|
|
22
|
+
if (command === '--version' || command === '-V') {
|
|
23
|
+
const version = require('../src/commands/version');
|
|
24
|
+
version.run(args, { pkgRoot: path.join(__dirname, '../') });
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
|
|
21
28
|
// Handle help/no command
|
|
22
29
|
if (!command || command === 'help' || command === '--help' || command === '-h') {
|
|
23
30
|
const help = require('../src/commands/help');
|
package/package.json
CHANGED
package/src/commands/help.js
CHANGED
|
@@ -62,11 +62,16 @@ Commands:
|
|
|
62
62
|
murm-config View murmuration pipeline configuration
|
|
63
63
|
murm-config set <key> <value> Modify config (cli, skill, skillFlags, etc.)
|
|
64
64
|
murm-config reset Reset murmuration configuration to defaults
|
|
65
|
+
version Print the installed murmur8 version
|
|
65
66
|
help Show this help message
|
|
66
67
|
|
|
67
68
|
Aliases: parallel, murmuration (same as murm)
|
|
68
69
|
parallel-config (same as murm-config)
|
|
69
70
|
|
|
71
|
+
Flags:
|
|
72
|
+
--version, -V Print version and exit
|
|
73
|
+
--help, -h Show this help message
|
|
74
|
+
|
|
70
75
|
Examples:
|
|
71
76
|
npx murmur8 init
|
|
72
77
|
npx murmur8 update
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* version command - Print the installed murmur8 version
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const fs = require('fs');
|
|
8
|
+
const path = require('path');
|
|
9
|
+
|
|
10
|
+
const description = 'Print the installed murmur8 version';
|
|
11
|
+
|
|
12
|
+
function run(args, options = {}) {
|
|
13
|
+
const pkgRoot = options.pkgRoot || path.join(__dirname, '../../');
|
|
14
|
+
const pkgPath = path.join(pkgRoot, 'package.json');
|
|
15
|
+
|
|
16
|
+
let pkg;
|
|
17
|
+
try {
|
|
18
|
+
pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
|
|
19
|
+
} catch (err) {
|
|
20
|
+
process.stderr.write(`Error: could not read package.json: ${err.message}\n`);
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
process.stdout.write(pkg.version + '\n');
|
|
25
|
+
process.exit(0);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
module.exports = { run, description };
|
package/src/update.js
CHANGED
|
@@ -135,6 +135,8 @@ Updated:
|
|
|
135
135
|
- REFINE_SKILL.md
|
|
136
136
|
- .claude/commands/implement-feature.md (if exists)
|
|
137
137
|
- .claude/commands/refine-feature.md (if exists)
|
|
138
|
+
- .github/skills/implement-feature/SKILL.md (if exists)
|
|
139
|
+
- .github/skills/refine-feature/SKILL.md (if exists)
|
|
138
140
|
|
|
139
141
|
Preserved:
|
|
140
142
|
- .blueprint/features/
|