prjct-cli 2.21.0 → 2.22.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/CHANGELOG.md CHANGED
@@ -1,56 +1,53 @@
1
1
  # Changelog
2
2
 
3
- ## [2.21.0] - 2026-05-17
3
+ ## [2.22.0] - 2026-05-18
4
4
 
5
5
  ### Features
6
6
 
7
- - prjct review-risk verb advisory size/delivery-geometry signal (#18/19/20, minimal cut) (v2.20.1) (#340)
8
-
9
-
10
- ## [2.20.2] - 2026-05-17
7
+ - prjct update self-cleanup of parallel installs + prjct upgrade alias + one-command notify (WS4+WS5) (#347)
11
8
 
12
9
  ### Bug Fixes
13
10
 
14
- - skill routing triages complexity FIRST spec is the exception, not the default (v2.20.1) (#341)
11
+ - WS3bship-atomicity marker + serialized daemon request handling (#350)
12
+ - WS2b SQLite hardening — BEGIN IMMEDIATE txns, statement-cache + daemon-cache gating (#349)
13
+ - WS3 P2 reliability — timer leak, backup clobber, daemon-exit, WAL checkpoint, duplicate-POST (#348)
15
14
 
16
15
 
17
- ## [Unreleased]
18
-
19
- ### Added
20
-
21
- - **Architecture guard: SQLite connection factory is now an enforced invariant.** `openDatabase()` in `core/storage/database/sqlite-compat.ts` already baked the daemon-safety PRAGMAs (`journal_mode=WAL`, `busy_timeout=5000`) into every connection, but nothing stopped a future caller from doing a raw `new Database(...)` / `require('bun:sqlite')` / `require('better-sqlite3')` and silently bypassing them — the open half of the HIGH-severity daemon-vs-CLI write-lock anti-pattern. New `core/__tests__/storage/sqlite-factory-guard.test.ts` scans `core/` + `bin/` and fails CI if any file outside the sanctioned factory acquires a driver, and separately asserts the factory keeps both PRAGMAs. Closes the anti-pattern by moving it from convention to enforced. No runtime code change.
22
- - **`prjct review-risk [--md]`** — advisory size/delivery-geometry signal (minimal cut of harnesses #18/19/20). Reads the committed changeset vs the merge-base with the default branch (`git diff --shortstat`), derives a size tier (trivial/normal/large) and suggests a delivery geometry (`direct`/`single`/`split`, with the touched top-level dirs as natural split lines). Read-only/Tier-1 (retro/health shape); never gates, never splits, never mutates git; graceful no-signal when there is no base or nothing committed.
23
-
24
- ## [2.20.1] - 2026-05-17
16
+ ## [2.21.1] - 2026-05-18
25
17
 
26
18
  ### Bug Fixes
27
19
 
28
- - skill-miss-detector crew-isolation guard (no false nags after crew runs) (v2.19.10) (#339)
20
+ - route all remaining os.homedir()/.prjct-cli sites through pathManager (#344)
21
+ - optimistic CAS on StorageManager.update() — close the lost-update data race (#346)
22
+ - gate workflow rules ingested from repo markdown (close clone-to-RCE) (#345)
29
23
 
30
24
 
31
25
  ## [Unreleased]
32
26
 
33
- ### Fixed
34
-
35
- - **skill-miss-detector no longer false-positives after a crew run (#16 follow-up).** Crew implementer/reviewer run as isolated subagents in the *shared* working tree, so at the leader's Stop hook `getModifiedFiles()` saw their edits and path-overlap relevance fired — but the leader transcript never carries the memory references the subagent made in its own isolated transcript, producing a false skill-miss nag for every crew-touched file. Fix: `detectSkillMisses` collects the `files_touched` of crew runs whose `ended_at` is within `CREW_RUN_RECENCY_MS` (6h) via `crewRunStorage.list` and excludes them from path-overlap relevance; token-overlap detection stays active so non-crew work in the same session is still covered. Crew itself is unchanged (it was architecturally correct). Best-effort — any failure degrades to prior behavior. Tests: `core/__tests__/services/skill-miss-detector.test.ts`.
36
-
37
- ## [2.20.0] - 2026-05-17
27
+ ## [2.21.0] - 2026-05-17
38
28
 
39
29
  ### Features
40
30
 
41
- - Skill Resolution Feedback (#16) skill-miss detector + improvement-signals widening + prjct skill-adherence (v2.19.9) (#338)
31
+ - **`prjct review-risk [--md]`** — advisory size/delivery-geometry signal (minimal cut of harnesses #18/19/20). Reads the committed changeset vs the merge-base with the default branch (`git diff --shortstat`), derives a size tier (trivial/normal/large) and suggests a delivery geometry (`direct`/`single`/`split`, with the touched top-level dirs as natural split lines). Read-only/Tier-1 (retro/health shape); never gates, never splits, never mutates git; graceful no-signal when there is no base or nothing committed. (#340)
42
32
 
33
+ ## [2.20.2] - 2026-05-17
43
34
 
44
- ## [2.19.9] - 2026-05-16
35
+ ### Added
36
+
37
+ - **Architecture guard: SQLite connection factory is now an enforced invariant.** `openDatabase()` in `core/storage/database/sqlite-compat.ts` already baked the daemon-safety PRAGMAs (`journal_mode=WAL`, `busy_timeout=5000`) into every connection, but nothing stopped a future caller from doing a raw `new Database(...)` / `require('bun:sqlite')` / `require('better-sqlite3')` and silently bypassing them — the open half of the HIGH-severity daemon-vs-CLI write-lock anti-pattern. New `core/__tests__/storage/sqlite-factory-guard.test.ts` scans `core/` + `bin/` and fails CI if any file outside the sanctioned factory acquires a driver, and separately asserts the factory keeps both PRAGMAs. Closes the anti-pattern by moving it from convention to enforced. No runtime code change. (#342)
45
38
 
46
39
  ### Bug Fixes
47
40
 
48
- - strictly-monotonic updated_at so the CAS token can't collide (#337)
41
+ - skill routing triages complexity FIRST — spec is the exception, not the default (v2.20.1) (#341)
49
42
 
43
+ ## [2.20.1] - 2026-05-17
50
44
 
51
- ## [Unreleased]
45
+ ### Fixed
46
+
47
+ - **skill-miss-detector no longer false-positives after a crew run (#16 follow-up) (#339).** Crew implementer/reviewer run as isolated subagents in the *shared* working tree, so at the leader's Stop hook `getModifiedFiles()` saw their edits and path-overlap relevance fired — but the leader transcript never carries the memory references the subagent made in its own isolated transcript, producing a false skill-miss nag for every crew-touched file. Fix: `detectSkillMisses` collects the `files_touched` of crew runs whose `ended_at` is within `CREW_RUN_RECENCY_MS` (6h) via `crewRunStorage.list` and excludes them from path-overlap relevance; token-overlap detection stays active so non-crew work in the same session is still covered. Crew itself is unchanged (it was architecturally correct). Best-effort — any failure degrades to prior behavior. Tests: `core/__tests__/services/skill-miss-detector.test.ts`.
52
48
 
53
- ## [2.19.9] - 2026-05-16
49
+
50
+ ## [2.20.0] - 2026-05-17
54
51
 
55
52
  ### Added
56
53
 
@@ -64,6 +61,12 @@
64
61
  ### Fixed
65
62
  - **`getProjectId` no longer silently mints a random orphan project.** Root cause: `ConfigManager.getProjectId()` fell through to `pathManager.generateProjectId()` (`crypto.randomUUID()`) whenever `readConfig()` returned null, so any path-resolution miss (daemon resolving the wrong cwd, config transiently unreadable, case-variant path) forked a brand-new project and scattered specs/memory across ghost projects with no error surfaced. Now returns `''` — the falsy sentinel 31/32 call sites already guard with `if (!projectId)` → callers fail loud ("run prjct init") instead of writing into a random new project. Only explicit `prjct init` (`createConfig`) mints. Regression test: `core/__tests__/infrastructure/config-manager-getprojectid.test.ts`.
66
63
 
64
+ ## [2.19.9] - 2026-05-16
65
+
66
+ ### Bug Fixes
67
+
68
+ - strictly-monotonic updated_at so the CAS token can't collide (#337)
69
+
67
70
  ## [2.19.8] - 2026-05-14
68
71
 
69
72
  Crew-mode persistence v7 (spec a50b32d1). SQLite becomes the single source of truth for crew runs, team enrollment, and checkpoint customization. Disk mirrors exist only where an external read contract demands one (the pre-commit hook).
@@ -180,15 +183,7 @@ Crew-mode persistence v7 (spec a50b32d1). SQLite becomes the single source of tr
180
183
 
181
184
  ## [2.15.0] - 2026-05-03
182
185
 
183
- ### Features
184
-
185
- - prjct as a Spec-Driven Development system (#318)
186
- - self-heal prjct SKILL.md on every CLI invocation (#317)
187
-
188
-
189
- ## [Unreleased]
190
-
191
- ### Features — SDD: Spec-Driven Development
186
+ ### Features — SDD: Spec-Driven Development (#318)
192
187
 
193
188
  prjct now ships an end-to-end SDD primitive. The canonical sequence is `spec → audit-spec → task --spec → implement → ship (acceptance gate) → remember learning`.
194
189
 
@@ -201,6 +196,8 @@ prjct now ships an end-to-end SDD primitive. The canonical sequence is `spec →
201
196
  - **Skill body** — Claude is taught the SDD canonical sequence and the `spec` / `audit-spec` verbs in the intent map. The skill body's verb intent map now leads with `spec` for substantive work; `task` is the right call for routine work that doesn't deserve a spec.
202
197
  - **Templates** — `templates/spec-template.md`, `templates/spec-reviewer-rubrics/{strategic,architecture,design}.md`, `templates/sdd-canonical-sequence.md`. Old `templates/planning-methodology.md` renamed to `planning-methodology-deep.md` (retained but de-defaulted).
203
198
 
199
+ - self-heal prjct SKILL.md on every CLI invocation (#317)
200
+
204
201
  ### Schema
205
202
 
206
203
  - Migration 16 adds the `specs` table and the `tasks.linked_spec_id` column. Additive — existing memory and tasks unaffected.