prjct-cli 2.23.12 → 2.23.14

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
@@ -81,6 +81,16 @@
81
81
 
82
82
  ## [Unreleased]
83
83
 
84
+ ## [2.23.14] - 2026-05-20
85
+
86
+ ### Added
87
+ - current work
88
+
89
+ ## [2.23.13] - 2026-05-20
90
+
91
+ ### Added
92
+ - Audit followups: docs tightening, scripts orphans verified, CHANGELOG archive split, migrate-json deprecation track
93
+
84
94
  ## [2.23.12] - 2026-05-20
85
95
 
86
96
  ### Added
@@ -1355,1815 +1365,8 @@ usable, not just carved out.
1355
1365
  - PR 3 — lazy context injection (`prjct task` < 50 tokens)
1356
1366
  - PR 4 — workflow engine upgrade: status-transitions as steps, conditionals, parallel hooks, cache, rich project-memory API
1357
1367
 
1358
- ## [1.56.12] - 2026-04-14
1359
-
1360
- ### Bug Fixes
1361
-
1362
- - exclude .worktrees from indexing (#248)
1363
-
1364
- ## [1.56.11] - 2026-04-13
1365
-
1366
- ### Fixed
1367
- - Exclude `.worktrees` from BM25 and import graph indexing to eliminate duplicate search results
1368
- - Exclude `.worktrees` from biome config to prevent nested root configuration errors
1369
-
1370
- ## [1.56.10] - 2026-04-11
1371
-
1372
- ### Bug Fixes
1373
-
1374
- - prefer direct Glob/Grep over Explore subagent (#247)
1375
- - chore: dead code purge + architecture docs (v1.56.8) (#246)
1376
-
1377
- ## [1.56.9] - 2026-04-11
1378
-
1379
- ### Changed
1380
- - `templates/tools/task.txt`: prefer direct `Glob`/`Grep` for simple
1381
- exploration; only delegate to `Explore` subagent when the search is
1382
- open-ended. Subagents inherit all MCP tool schemas from the parent
1383
- session and can start with heavy context, so prescriptive delegation
1384
- was hurting more than helping.
1385
-
1386
- ## [1.56.8] - 2026-04-10
1387
-
1388
- ### Removed
1389
- - **Dead code purge (-9400 LOC).** Deleted 43 unused files including the entire
1390
- `core/integrations/` subtree (Linear/Jira integration replaced by the MCP
1391
- gateway CLIs in `core/cli/linear.ts` and `core/cli/jira.ts`), orphan schemas
1392
- (`prd`, `issues`, `permissions`, `agents`, `command-context`, `enriched-task`,
1393
- `project`), orphan services (`skill-service`, `skill-installer`, `skill-lock`,
1394
- `context-selector`, `file-categorizer`, `git-analyzer`), orphan domain files
1395
- (`snapshot-manager`, `architecture-generator`, `context-estimator`,
1396
- `task-stack`), and various agentic/session/utility files.
1397
- - **24 re-export lines** across 16 files (`core/utils/output.ts`,
1398
- `core/utils/error-messages.ts`, `core/commands/maintenance.ts`, and others).
1399
- Import directly from the source module per the no-barrel rule.
1400
- - **Unused functions** trimmed from `core/utils/collection-filters.ts`,
1401
- `core/utils/runtime.ts`, `core/utils/jsonl-helper.ts`,
1402
- `core/utils/subtask-table.ts`, and `core/utils/mcp-config.ts`.
1403
-
1404
- ### Added
1405
- - **`knip.json`** and `bun run knip` script for dead code detection. Entry
1406
- points reflect the five build targets from `scripts/build.js` plus tests.
1407
- - **`docs/architecture.md`** — layered architecture walkthrough, retrieval
1408
- triad (BM25 + import graph + git co-change) with ASCII diagram, schemas
1409
- pattern, storage and testing conventions, enforced code rules.
1410
- - **`docs/sqlite-migration.md`** — why v1.24.1 moved from JSON to SQLite,
1411
- what `migrate-json.ts` does, how to inspect `prjct.db` with `sqlite3`,
1412
- and troubleshooting recipes.
1413
- - **56 new tests** across `core/__tests__/sync/` (event-mapper, auth-config,
1414
- sync-client, sync-manager — 39 tests) and
1415
- `core/__tests__/tools/context/token-counter.test.ts` (17 tests).
1416
-
1417
- ### Changed
1418
- - **Biome lint rules hardened.** `noUnusedVariables`, `noUnusedImports`, and
1419
- `noVoidTypeReturn` are now `"error"` (were `"warn"`). CI blocks on any
1420
- violation.
1421
- - **`AGENTS.md`** updated with a "Code rules" section (no barrels, SQLite
1422
- only, Biome errors blocking, Zod as source of truth) and references to the
1423
- new architecture docs.
1424
- - **`.gitignore`** no longer ignores `docs/` so documentation is versioned.
1425
-
1426
- ### Tests
1427
- - Full suite: **1013 pass / 0 fail** (was 957).
1428
-
1429
- ## [1.56.6] - 2026-04-07
1430
-
1431
- ### Bug Fixes
1432
-
1433
- - resolve biome check lint and format errors (#244)
1434
- - prefer installed dist over source files (#243)
1435
-
1436
- ## [1.56.5] - 2026-04-07
1437
-
1438
- ### Added
1439
- - current work
1440
-
1441
- ## [1.56.4] - 2026-04-07
1442
-
1443
- ### Added
1444
- - fix update to use installed files instead of source
1445
-
1446
- ## [1.56.3] - 2026-04-07
1447
-
1448
- ### Added
1449
- - fix update to use installed files instead of source
1450
-
1451
- ## [1.56.2] - 2026-04-06
1452
-
1453
- ### Bug Fixes
1454
-
1455
- - obsidian status neutral message when not configured (#242)
1456
-
1457
- ## [1.56.1] - 2026-04-06
1458
-
1459
- ### Fixed
1460
- - Obsidian status no longer shows warning when not configured — Obsidian is optional, all data stored in SQLite by default
1461
-
1462
- ## [1.56.0] - 2026-04-06
1463
-
1464
- ### Features
1465
-
1466
- - web dashboard — Linear-style UI, full API, workflows, task detail
1467
- - CRUD API endpoints + static file serving for web dashboard
1468
-
1469
- ### Bug Fixes
1470
-
1471
- - biome lint + typecheck errors for clean push
1472
- - revert accent to neutral, sidebar/tabs cleanup
1473
-
1474
- ## [1.54.2] - 2026-04-06
1475
-
1476
- ### Added
1477
- - current work
1478
-
1479
- ## [1.54.1] - 2026-04-06
1480
-
1481
- ### Added
1482
- - current work
1483
-
1484
- ## [1.54.0] - 2026-04-05
1485
-
1486
- ### Features
1487
-
1488
- - multi-agent parallel sessions with auto-worktree isolation (#237)
1489
- - Obsidian vault integration — CLI commands, 8 MCP tools, Kanban board, Canvas roadmap, Dataview dashboards, path security
1490
- - Sync skill generates `_insights.md` via LLM when Obsidian is configured
1491
- - Linear CSV import script with per-project Kanban boards and tags
1492
-
1493
- ### Bug Fixes
1494
-
1495
- - guard feedback array spreads preventing s.push crash (#236)
1496
-
1497
- ## [1.53.1] - 2026-04-04
1498
-
1499
- ### Docs
1500
- - update README with full command reference, Windsurf support, MCP server, parallel sessions, code intelligence, web dashboard, cloud sync, and architecture overview
1501
-
1502
- ## [1.52.4] - 2026-03-26
1503
-
1504
- ### Bug Fixes
1505
- - fix: guard feedback array spreads with `Array.isArray()` in `getAggregatedFeedback` — prevents `s.push is not a function` crash when stored feedback contains non-array values
1506
-
1507
- ## [1.52.3] - 2026-03-08
1508
-
1509
- ### Bug Fixes
1510
-
1511
- - security hardening — command injection, CORS, path traversal, error disclosure (#235)
1512
- - security hardening — command injection, CORS, path traversal, error disclosure
1513
-
1514
- ## [1.52.2] - 2026-03-07
1515
-
1516
- ### Added
1517
- - security hardening
1518
-
1519
- ## [1.52.1] - 2026-03-07
1520
-
1521
- ### Added
1522
- - security hardening
1523
-
1524
- ## [1.51.4] - 2026-03-04
1525
-
1526
- ### Chores
1527
-
1528
- - Remove dead code from core/ (3 files, 9 exports, -675 lines)
1529
-
1530
- ## [1.51.3] - 2026-03-04
1531
-
1532
- ### Bug Fixes
1533
-
1534
- - sync auto-includes analysis payload (#233)
1535
-
1536
- ## [1.51.2] - 2026-03-04
1537
-
1538
- ### Fixed
1539
- - sync now auto-includes analysis payload instead of suggesting a manual step
1540
-
1541
- ## [1.51.1] - 2026-03-04
1542
-
1543
- ### Bug Fixes
1544
-
1545
- - strip --md/--json flags from context command args (#232)
1546
-
1547
- ## [1.51.0] - 2026-03-03
1548
-
1549
- ### Features
1550
-
1551
- - context health system + clean --md output (#231)
1552
-
1553
- ## [1.50.3] - 2026-03-03
1554
-
1555
- ### Added
1556
- - clean md output: remove emojis, redundancy, hardcoded schema from --md prompts
1557
-
1558
- ## [1.50.2] - 2026-03-03
1559
-
1560
- ### Bug Fixes
1561
-
1562
- - guard against undefined decision.contexts in pattern-store (#230)
1563
-
1564
- ## [1.50.1] - 2026-03-02
1565
-
1566
- ### Fixed
1567
- - Fix crash in pattern-store when decision.contexts is undefined (legacy data)
1568
-
1569
- ## [1.50.0] - 2026-02-27
1570
-
1571
- ### Features
1572
-
1573
- - auth UX overhaul — out.* utilities, branded browser page, auto-sync (#229)
1574
-
1575
- ## [1.49.0] - 2026-02-27
1576
-
1577
- ### Features
1578
-
1579
- - prjct login — browser-based OTP auth (#228)
1580
-
1581
- ## [1.48.1] - 2026-02-27
1582
-
1583
- ### Bug Fixes
1584
-
1585
- - wire auth command in registry and bypass setup check (#227)
1586
-
1587
- ## [1.48.0] - 2026-02-27
1588
-
1589
- ### Features
1590
-
1591
- - CLI↔Web bidirectional sync (#226)
1592
-
1593
- ## [1.47.4] - 2026-02-26
1594
-
1595
- ### Refactoring
1596
-
1597
- - remove static context generation system (#225)
1598
-
1599
- ## [1.47.3] - 2026-02-26
1600
-
1601
- ### Added
1602
- - current work
1603
-
1604
- ## [1.47.2] - 2026-02-23
1605
-
1606
- ### Added
1607
- - kill static context generation
1608
-
1609
- ## [1.47.1] - 2026-02-21
1610
-
1611
- ### Refactoring
1612
-
1613
- - centralize type definitions to core/types/ (#224)
1614
-
1615
- ## [1.47.0] - 2026-02-21
1616
-
1617
- ### Features
1618
-
1619
- - fix: analytics data pipeline — heartbeat realtime state, screen sizes, time on page
1620
-
1621
- ### Refactoring
1622
-
1623
- - eliminate barrel files, duplicates, and dead code (#223)
1624
- - clean up hybrid re-exports and delete tools barrel
1625
- - eliminate core/types/index.ts barrel (90 importers)
1626
- - eliminate 4 medium barrel files (schemas, storage, services, agentic)
1627
- - eliminate 12 leaf barrel files
1628
- - consolidate scattered types into core/types/
1629
- - remove duplicate sorting logic and dead markdown-builder
1630
-
1631
- ## [1.46.7] - 2026-02-21
1632
-
1633
- ### Refactoring
1634
-
1635
- - extract context contract builder from workflow.ts (#222)
1636
-
1637
- ## [1.46.6] - 2026-02-21
1638
-
1639
- ### Refactor
1640
-
1641
- - Extract context contract builder from workflow.ts
1642
-
1643
- ## [1.46.5] - 2026-02-21
1644
-
1645
- ### Bug Fixes
1646
-
1647
- - structural fixes for pattern ranking audit (#221)
1648
-
1649
- ## [1.46.5] - 2026-02-20
1650
-
1651
- ### Bug Fixes
1652
-
1653
- - structural fixes for pattern ranking
1654
-
1655
- ## [1.46.4] - 2026-02-18
1656
-
1657
- ### Bug Fixes
1658
-
1659
- - daemon production hardening — WAL checkpoint, log rotation, project cleanup (#220)
1660
-
1661
- ## [1.46.3] - 2026-02-18
1662
-
1663
- ### Bug Fixes
1664
-
1665
- - Daemon production hardening: WAL checkpoint, log rotation, project cleanup (#220)
1666
-
1667
- ## [1.46.2] - 2026-02-18
1668
-
1669
- ### Bug Fixes
1670
-
1671
- - daemon memory leaks — LRU pool, buffer cap, DB cleanup (#219)
1672
-
1673
- ## [1.46.1] - 2026-02-18
1674
-
1675
- ### Bug Fixes
1676
-
1677
- - Daemon memory leaks: LRU connection pool, buffer cap, DB cleanup on shutdown
1678
-
1679
- ## [1.46.0] - 2026-02-17
1680
-
1681
- ### Features
1682
-
1683
- - post-OAuth verify command for MCP health check (#218)
1684
-
1685
- ## [1.45.8] - 2026-02-17
1686
-
1687
- ### Added
1688
- - post-oauth verify command
1689
-
1690
- ### Bug Fixes
1691
-
1692
- - add jira/linear/status to global AI config command lists (#217)
1693
-
1694
- ## [1.45.7] - 2026-02-17
1695
-
1696
- ### Bug Fixes
1697
-
1698
- - release workflow respects package.json version when higher than last tag
1699
- - fix: jira command not recognized in global config
1700
-
1701
- ## [1.45.6] - 2026-02-17
1702
-
1703
- ### Bug Fixes
1704
-
1705
- - multi-provider MCP setup + OAuth status fix (v1.45.9) (#216)
1706
-
1707
- ## [1.45.11] - 2026-02-16
1708
-
1709
- ### Added
1710
- - fix: include templates/ in npm package files — templates missing from published package
1711
-
1712
- ## [1.45.10] - 2026-02-16
1713
-
1714
- ### Added
1715
- - fix: include templates/ in npm package files — templates missing from published package
1716
-
1717
- ## [1.45.9] - 2026-02-16
1718
-
1719
- ### Added
1720
- - multi-provider MCP setup + OAuth status fix
1721
-
1722
- ## [1.45.8] - 2026-02-16
1723
-
1724
- ### Added
1725
- - fix provider cache crash and MCP tool access
1726
-
1727
- ## [1.45.7] - 2026-02-16
1728
-
1729
- ### Added
1730
- - fix provider cache crash and MCP tool access
1731
-
1732
- ## [1.45.6] - 2026-02-17
1733
-
1734
- ### Bug Fixes
1735
-
1736
- - MCP OAuth token cache mismatch - pin mcp-remote version + allow MCP tools in templates (#214)
1737
-
1738
- ## [1.45.5] - 2026-02-17
1739
-
1740
- ### Bug Fixes
1741
-
1742
- - MCP OAuth token cache mismatch - pin mcp-remote version + allow MCP tools in templates (#214)
1743
-
1744
- ## [1.45.4] - 2026-02-17
1745
-
1746
- ### Bug Fixes
1747
-
1748
- - p. workflow agentic natural language parsing (#213)
1749
-
1750
- ## [1.45.3] - 2026-02-17
1751
-
1752
- ### Bug Fixes
1753
-
1754
- - p. workflow agentic natural language parsing (#213)
1755
-
1756
- ## [1.45.2] - 2026-02-17
1757
-
1758
- ### Bug Fixes
1759
-
1760
- - Jira/Linear MCP OAuth setup - guides user through mcp-remote auth (#212)
1761
-
1762
- ## [1.45.2] - 2026-02-16
1763
-
1764
- ### Added
1765
- - fix: Jira/Linear MCP OAuth setup
1766
-
1767
- ## [1.45.1] - 2026-02-17
1768
-
1769
- ### Bug Fixes
1770
-
1771
- - prjct update - daemon restart and latest version detection (#211)
1772
-
1773
- ## [1.45.1] - 2026-02-17
1774
-
1775
- ### Bug Fixes
1776
-
1777
- - prjct update now uses npm install @latest to always fetch true latest version
1778
- - daemon restart failure is non-fatal warning, not an error
1779
- - spawnDaemon polls up to 3s for daemon readiness after install
1780
-
1781
- ## [1.45.0] - 2026-02-17
1782
-
1783
- ### Features
1784
-
1785
- - migrate linear/jira integrations to MCP-only (#210)
1786
-
1787
- ## [1.44.9] - 2026-02-16
1788
-
1789
- ### Added
1790
- - JIRA Sprint/Backlog Differentiation
1791
-
1792
- ## [1.44.8] - 2026-02-16
1793
-
1794
- ### Added
1795
- - MCP Issue Trackers
1796
-
1797
- ## [1.44.7] - 2026-02-16
1798
-
1799
- ### Added
1800
- - MCP Issue Trackers
1801
-
1802
- ## [1.44.6] - 2026-02-16
1803
-
1804
- ### Added
1805
- - MCP Issue Trackers
1806
-
1807
- ## [1.44.5] - 2026-02-16
1808
-
1809
- ### Bug Fixes
1810
-
1811
- - remove unused _agentsList in workflow (PRJ-347) (#209)
1812
-
1813
- ## [1.44.4] - 2026-02-16
1814
-
1815
- ### Bug Fixes
1816
-
1817
- - analyze shows actual report path (PRJ-348) (#208)
1818
-
1819
- ## [1.44.3] - 2026-02-16
1820
-
1821
- ### Bug Fixes
1822
-
1823
- - widen retry test timing tolerances (PRJ-346) (#207)
1824
-
1825
- ## [1.44.2] - 2026-02-16
1826
-
1827
- ### Bug Fixes
1828
-
1829
- - legacy previousTask not migrated to pausedTasks (PRJ-345) (#206)
1830
-
1831
- ## [1.44.3] - 2026-02-16
1832
-
1833
- ### Bug Fixes
1834
-
1835
- - legacy previousTask not migrated to pausedTasks (PRJ-345)
1836
-
1837
- ## [1.44.1] - 2026-02-16
1838
-
1839
- ### Bug Fixes
1840
-
1841
- - resumeTask and pauseTask preserve business metadata (PRJ-344) (#205)
1842
-
1843
- ## [1.44.0] - 2026-02-16
1844
-
1845
- ### Features
1846
-
1847
- - migrate sessions from JSON files to SQLite (#204)
1848
-
1849
- ## [1.43.1] - 2026-02-15
1850
-
1851
- ### Added
1852
- - Sessions migrated to SQLite
1853
-
1854
- ### Bug Fixes
1855
-
1856
- - update command shows stale version on every run (#203)
1857
-
1858
- ## [1.43.0] - 2026-02-15
1859
-
1860
- ### Features
1861
-
1862
- - context file suggestion reinforcement learning (#202)
1863
-
1864
- ## [1.42.4] - 2026-02-15
1865
-
1866
- ### Added
1867
- - Context file suggestion reinforcement learning
1868
-
1869
- ## [1.42.3] - 2026-02-15
1870
-
1871
- ### Bug Fixes
1872
-
1873
- - state storage updates preserve existing state to prevent data loss (#201)
1874
-
1875
- ## [1.42.4] - 2026-02-15
1876
-
1877
- ### Bug Fixes
1878
- - fix: state storage updates now preserve existing state to prevent data loss during task completion, pause, and resume operations
1879
- - test: add state storage integrity tests
1880
-
1881
- ## [1.42.2] - 2026-02-15
1882
-
1883
- ### Bug Fixes
1884
-
1885
- - add update to daemon bypass commands (#200)
1886
-
1887
- ## [1.42.3] - 2026-02-15
1888
-
1889
- ### Bug Fixes
1890
- - fix: `prjct update` bypasses daemon so it runs with current binary code
1891
-
1892
- ## [1.42.1] - 2026-02-15
1893
-
1894
- ### Bug Fixes
1895
-
1896
- - daemon commands ignore request.cwd causing cross-project contamination (#199)
1897
- - pass request.cwd to analyze/cleanup/design in daemon
1898
-
1899
- ## [1.42.1] - 2026-02-15
1900
-
1901
- ### Bug Fixes
1902
- - fix: daemon analyze/cleanup/design commands ignore request.cwd causing cross-project contamination
1903
-
1904
- ## [1.42.0] - 2026-02-15
1905
-
1906
- ### Features
1907
-
1908
- - add task estimation service (#198)
1909
- - add task estimation service
1910
- - onboarding tours + help tooltips + stats grid redesign
1911
-
1912
- ## [1.41.1] - 2026-02-15
1913
-
1914
- ### Added
1915
- - task estimation
1916
-
1917
- ## [1.41.0] - 2026-02-15
1918
-
1919
- ### Features
1920
-
1921
- - provider capabilities system + provider-agnostic templates (#197)
1922
-
1923
- ## [1.40.3] - 2026-02-15
1924
-
1925
- ### Added
1926
- - Provider capabilities system
1927
-
1928
- ## [1.40.2] - 2026-02-15
1929
-
1930
- ### Added
1931
- - Provider capabilities system
1932
-
1933
- ## [1.40.1] - 2026-02-15
1934
-
1935
- ### Bug Fixes
1936
-
1937
- - sanitize SQLite bindings in JSON migration (#196)
1938
-
1939
- ## [1.40.1] - 2026-02-15
1940
-
1941
- ### Fixed
1942
- - Sanitize SQLite bindings in JSON migration to prevent type errors
1943
-
1944
- ## [1.40.0] - 2026-02-15
1945
-
1946
- ### Features
1947
-
1948
- - redesign prjct update as 3-phase system updater (#195)
1949
-
1950
- ## [1.39.0] - 2026-02-15
1951
-
1952
- ### Features
1953
-
1954
- - instruction rule type + daemon stop/restart/stale detection (#194)
1955
- - redesign prjct update as 3-phase system updater
1956
-
1957
- ## [1.38.10] - 2026-02-15
1958
-
1959
- ### Added
1960
- - instruction rule type + daemon stop/restart/stale detection
1961
-
1962
- ## [1.38.7] - 2026-02-15
1963
-
1964
- ### Bug Fixes
1965
-
1966
- - purge legacy code and fix test timeout (#193)
1967
-
1968
- ## [1.38.8] - 2026-02-14
1969
-
1970
- ### Added
1971
- - legacy code purge phase 2
1972
-
1973
- ## [1.38.7] - 2026-02-14
1974
-
1975
- ### Added
1976
- - legacy code purge + test fix
1977
-
1978
- ## [1.38.6] - 2026-02-14
1979
-
1980
- ### Bug Fixes
1981
-
1982
- - all agents get full operational context (#192)
1983
-
1984
- ## [1.38.5] - 2026-02-14
1985
-
1986
- ### Bug Fixes
1987
-
1988
- - skip diff preview in non-interactive sync mode (#191)
1989
- - all agents get full operational context (#192)
1990
-
1991
- ## [1.38.4] - 2026-02-14
1992
-
1993
- ### Bug Fixes
1994
-
1995
- - reconcile queue with Linear status on sync (#190)
1996
-
1997
- ## [1.38.3] - 2026-02-14
1998
-
1999
- ### Bug Fixes
2000
-
2001
- - reconcile queue with Linear status on sync
2002
- - replace hardcoded version in server API info (PRJ-341) (#189)
2003
-
2004
- ## [1.38.2] - 2026-02-14
2005
-
2006
- ### Bug Fixes
2007
-
2008
- - replace hardcoded version in server API info (PRJ-341)
2009
- - replace unbounded any types in workflow-rule-storage (PRJ-339) (#188)
2010
-
2011
- ## [1.38.1] - 2026-02-14
2012
-
2013
- ### Bug Fixes
2014
-
2015
- - auto-repair Codex router metadata during sync (#187)
2016
-
2017
- ## [1.38.1] - 2026-02-14
2018
-
2019
- ### Bug Fixes
2020
-
2021
- - Auto-repair Codex router metadata during sync and doctor checks (#187)
2022
-
2023
- ## [1.38.0] - 2026-02-14
2024
-
2025
- ### Features
2026
-
2027
- - hybrid sync pipeline - CLI + LLM analysis (#186)
2028
-
2029
- ## [1.37.1] - 2026-02-14
2030
-
2031
- ### Bug Fixes
2032
-
2033
- - neutral banner colors + add Codex to provider selection (#185)
2034
-
2035
- ## [1.37.1] - 2026-02-14
2036
-
2037
- ### Fixed
2038
- - Banner colors: neutral warm gray gradient (was loud cyan/pink)
2039
- - Codex provider now appears in `prjct start` selection menu
2040
-
2041
- ## [1.37.0] - 2026-02-14
2042
-
2043
- ### Features
2044
-
2045
- - Context7 integration, pattern extraction, and p-command resolver (#184)
2046
-
2047
- ### Bug Fixes
2048
-
2049
- - preserve all projects in global AI tool configs during sync
2050
-
2051
- ## [1.36.2] - 2026-02-13
2052
-
2053
- ### Added
2054
- - current work
2055
-
2056
- ## [1.36.1] - 2026-02-13
2057
-
2058
- ### Added
2059
- - current work
2060
-
2061
- ## [1.36.0] - 2026-02-14
2062
-
2063
- ### Features
2064
-
2065
- - Custom workflows with agentic auto-configuration (#183)
2066
-
2067
- ## [1.36.0] - 2026-02-13
2068
-
2069
- ### Features
2070
-
2071
- - Custom workflows with agentic auto-configuration (#183)
2072
- - Create user-defined workflows beyond built-in (task/done/ship/sync)
2073
- - Dynamic template generation at ~/.claude/commands/p/{name}.md
2074
- - CLI commands: create, list, delete, run
2075
- - Full test coverage (21 new tests)
2076
-
2077
- ## [1.35.0] - 2026-02-13
2078
-
2079
- ### Features
2080
-
2081
- - add diff between consecutive analysis runs (PRJ-275) (#182)
2082
-
2083
- ## [1.34.0] - 2026-02-13
2084
-
2085
- ### Features
2086
-
2087
- - add analysis rollback to restore previous sealed version (PRJ-276) (#181)
2088
-
2089
- ## [1.33.1] - 2026-02-12
2090
-
2091
- ### Added
2092
- - Analysis rollback to restore previous sealed version (PRJ-276)
2093
-
2094
- ## [1.33.0] - 2026-02-12
2095
-
2096
- ### Features
2097
-
2098
- - dynamic workflow customization — hooks, gates, and custom steps (#180)
2099
-
2100
- ## [1.32.1] - 2026-02-12
2101
-
2102
- ### Added
2103
- - Phase 2: Dynamic workflow customization — hooks, gates, and custom steps via `prjct workflow`
2104
-
2105
- ## [1.32.0] - 2026-02-12
2106
-
2107
- ### Features
2108
-
2109
- - session continuity and project-switch context preservation (PRJ-285) (#177)
2110
-
2111
- ## [1.31.0] - 2026-02-12
2112
-
2113
- ### Features
2114
-
2115
- - exquisite terminal UX — rich markdown formatters + branded output (#179)
2116
-
2117
- ## [1.30.2] - 2026-02-12
2118
-
2119
- ### Added
2120
- - exquisite-terminal-ux
2121
-
2122
- ## [1.30.1] - 2026-02-12
2123
-
2124
- ### Bug Fixes
2125
-
2126
- - guard analysis array accesses against undefined (n.push crash) (#178)
2127
-
2128
- ## [1.30.1] - 2026-02-11
2129
-
2130
- ### Added
2131
- - current work
2132
-
2133
- ## [1.30.0] - 2026-02-12
2134
-
2135
- ### Features
2136
-
2137
- - enrich AI formatters with analysis data + add Codex support (#176)
2138
-
2139
- ## [1.29.0] - 2026-02-12
2140
-
2141
- ### Features
2142
-
2143
- - JSON conflict handling + fix prjct start overwrite (#175)
2144
- - Enrich AI formatters with analysis data + add Codex support (PRJ-277)
2145
-
2146
- ## [1.28.2] - 2026-02-11
2147
-
2148
- ### Added
2149
- - json conflict handling in templates
2150
-
2151
- ## [1.28.1] - 2026-02-11
2152
-
2153
- ### Added
2154
- - test feature
2155
-
2156
- ## [1.28.0] - 2026-02-11
2157
-
2158
- ### Features
2159
-
2160
- - agentic Linear template without MCP dependency
2161
-
2162
- ## [1.27.1] - 2026-02-11
2163
-
2164
- ### Bug Fixes
2165
-
2166
- - exclude router files (p.md/p.toml) from subcommand installation
2167
-
2168
- ## [1.27.0] - 2026-02-11
2169
-
2170
- ### Features
2171
-
2172
- - dual-runtime SQLite — bun:sqlite + better-sqlite3 (#174)
2173
-
2174
- ## [1.27.6] - 2026-02-11
2175
-
2176
- ### Added
2177
- - Dual-runtime SQLite — bun:sqlite + better-sqlite3 for Node.js compatibility
2178
-
2179
- ## [1.27.1] - 2026-02-11
2180
-
2181
- ### Removed
2182
- - Dead context generators (`ContextFileGenerator`, legacy `generateContext()`) — no readers existed
2183
- - StorageManager MD write-through (`toMarkdown()`, `getLayer()`, `getMdFilename()`) from base class and 8 subclasses
2184
- - ~1,750 lines of orphaned code; writes are faster (no MD file I/O on state changes)
2185
-
2186
- ## [1.26.0] - 2026-02-11
2187
-
2188
- ### Features
2189
-
2190
- - kill JSON I/O + skill-on-demand --md architecture (PRJ-303) (#173)
2191
-
2192
- ## [1.27.0] - 2026-02-11
2193
-
2194
- ### Features
2195
-
2196
- - **`--md` flag on all CLI commands**: New LLM-optimized markdown output mode for all commands (`prjct task --md`, `prjct done --md`, `prjct sync --md`, etc.). Produces clean markdown with task context, relevant files, subtasks, and next steps — designed for agent consumption.
2197
- - **Ultra-thin templates**: All 36 command templates reduced from 6,066 → ~600 total lines (~90% reduction). Fast commands are ~10 lines, smart commands ~30 lines. Templates delegate data/formatting to CLI `--md` output, preserving agentic intelligence (exploration, planning, clarification).
2198
- - **Ultra-thin global instructions**: CLAUDE.md reduced from 488 → 16 lines (~97% reduction). GEMINI.md, WINDSURF.md, ANTIGRAVITY.md, CURSOR.mdc similarly reduced. Zero wasted context tokens.
2199
- - **New `md-formatter.ts` utility**: Shared markdown formatting functions (`mdTaskHeader`, `mdSubtasks`, `mdRelevantFiles`, `mdInstructions`, `mdNextSteps`, etc.) used by all command groups.
2200
- - **Fix: `task` command registration**: `prjct task` was listed in command-data but had no handler in registry or CLI routing. Now properly registered and routed through both normal CLI and daemon paths.
2201
-
2202
- ### Changes
2203
-
2204
- - 36 command templates rewritten (auth, bug, cleanup, dash, design, done, enrich, git, history, idea, impact, init, jira, learnings, linear, merge, next, pause, plan, prd, resume, review, serve, setup, ship, skill, spec, status, sync, task, test, update, verify, workflow, analyze)
2205
- - 5 global templates rewritten (CLAUDE.md, GEMINI.md, WINDSURF.md, ANTIGRAVITY.md, CURSOR.mdc)
2206
- - 6 CLAUDE.md modules deprecated (CLAUDE-commands, CLAUDE-git, CLAUDE-storage, CLAUDE-intelligence simplified to stubs; CLAUDE-core reduced to 14 lines; module-config.json single profile)
2207
- - `dist/templates.json` reduced from 358 KB → 177.6 KB (~50% reduction)
2208
- - All command groups (workflow, planning, shipping, analytics, analysis) accept `{ md?: boolean }` option
2209
- - Daemon `executeCommand` now has explicit cases for all workflow commands with `--md` passthrough
2210
- - `core/index.ts` standardCommands map passes `md` flag to all handlers
2211
-
2212
- ### Metrics
2213
-
2214
- | Metric | Before | After | Reduction |
2215
- |--------|--------|-------|-----------|
2216
- | CLAUDE.md (always loaded) | 488 lines | 16 lines | 97% |
2217
- | Templates total lines | 6,066 | ~600 | 90% |
2218
- | `dist/templates.json` | 358 KB | 177.6 KB | 50% |
2219
- | Context tokens per session | ~6,500 | ~350 | 95% |
2220
-
2221
- ## [1.26.1] - 2026-02-10
2222
-
2223
- ### Added
2224
- - purge JSON I/O from templates + prjct update command
2225
-
2226
- ## [1.26.0] - 2026-02-10
2227
-
2228
- ### Features
2229
-
2230
- - **`prjct update` command**: New CLI command that migrates all projects from JSON to SQLite and sweeps leftover JSON files. Supports `--all` (all projects) and `--dry-run` flags.
2231
- - **Template purge — zero JSON I/O**: Rewrote all 49 template files (commands, subagents, global instructions) to use `prjct` CLI commands instead of direct JSON file reads/writes. Templates now delegate all data operations to the CLI, which handles SQLite internally.
2232
- - **Fix performance-tracker date filter**: `getReport(id, 0)` now correctly means "today" instead of "this exact millisecond".
2233
-
2234
- ### Changes
2235
-
2236
- - 27 command templates simplified to use CLI commands (`prjct task`, `prjct done`, `prjct ship`, etc.)
2237
- - 8 global instruction files updated (CLAUDE-core/intelligence/storage, ANTIGRAVITY, GEMINI, CURSOR, WINDSURF, STORAGE-SPEC)
2238
- - 7 subagent/context templates updated (agent-base, orchestrator, planner, shipper, workflow, dashboard, roadmap)
2239
- - New `core/commands/update.ts` with `UpdateCommands` class
2240
- - Registered in command-data, register, index, and commands facade
2241
-
2242
- ## [1.25.0] - 2026-02-11
2243
-
2244
- ### Features
2245
-
2246
- - kill all JSON file I/O — everything to SQLite (PRJ-303) (#172)
2247
-
2248
- ## [1.25.0] - 2026-02-10
2249
-
2250
- ### Features
2251
-
2252
- - **Kill all JSON file I/O — everything to SQLite (PRJ-303)**: Migrated 4 modules that were still reading/writing JSON files directly, bypassing the SQLite migration. All storage now goes through `prjctDb` or `StorageManager`.
2253
-
2254
- ### Changes
2255
-
2256
- - `core/integrations/linear/sync.ts` — Replaced `readFile`/`writeFile` on `issues.json` with `prjctDb.getDoc/setDoc`
2257
- - `core/services/context-generator.ts` — Replaced direct `state.json`, `queue.json`, `ideas.json`, `shipped.json` reads with `stateStorage`, `queueStorage`, `ideasStorage`, `shippedStorage`
2258
- - `core/services/sync-service.ts` — `updateProjectJson` and `updateStateJson` now use `prjctDb`/`stateStorage` instead of `fs.readFile`/`fs.writeFile`
2259
- - `core/services/hooks-service.ts` — `getHookConfig`/`saveHookConfig` now use `prjctDb.getDoc/setDoc` for `project.json` data
2260
- - `core/storage/migrate-json.ts` — Added `sweepLegacyJson()` that runs on every sync to import and delete any ghost JSON files
2261
- - Templates updated to reference `prjct.db` instead of `storage/*.json`
2262
-
2263
- ### Test Plan
2264
-
2265
- #### For QA
2266
- 1. Run `bun test` — 1057 tests pass
2267
- 2. Run `prjct linear sync` — issues stored in `prjct.db`, no `issues.json` on disk
2268
- 3. Run `prjct sync --yes` — regenerates context without JSON file errors
2269
- 4. Verify `ls ~/.prjct-cli/projects/*/storage/` has no `.json` files
2270
- 5. Run `prjct status` — works without JSON files
2271
-
2272
- #### For Users
2273
- **What changed:** Internal storage optimization — no user action needed.
2274
- **Breaking changes:** None
2275
-
2276
- ## [1.24.1] - 2026-02-11
2277
-
2278
- ### Bug Fixes
2279
-
2280
- - strip shebangs in build via esbuild plugin (#171)
2281
-
2282
- ## [1.24.2] - 2026-02-10
2283
-
2284
- ### Bug Fixes
2285
-
2286
- - **Strip shebangs in build via esbuild plugin**: Added a `stripShebangPlugin` to the build script that removes shebangs from source files before bundling. This prevents double-shebang SyntaxErrors when source files (e.g. `#!/usr/bin/env bun`) are compiled with a banner that also injects a shebang. The previous fix (v1.24.1) removed shebangs manually from known files; this fix handles it generically for all future source files.
2287
-
2288
- ### Test Plan
2289
-
2290
- #### For QA
2291
- 1. Add `#!/usr/bin/env bun` to any source `.ts` file used as an entry point
2292
- 2. Run `node scripts/build.js`
2293
- 3. Verify compiled output has exactly one shebang (`#!/usr/bin/env node`) — not two
2294
- 4. Run `node dist/cli/linear.mjs --help` — should work without SyntaxError
2295
-
2296
- #### For Users
2297
- **What changed:** Build-time fix — no user action needed.
2298
- **Breaking changes:** None
2299
-
2300
- ## [1.24.0] - 2026-02-11
2301
-
2302
- ### Features
2303
-
2304
- - implement daemon mode with IPC socket for near-zero startup (PRJ-302) (#170)
2305
-
2306
- ### Bug Fixes
2307
-
2308
- - remove source shebang causing SyntaxError in compiled linear CLI (#169)
2309
-
2310
- ## [1.24.1] - 2026-02-10
2311
-
2312
- ### Bug Fixes
2313
-
2314
- - **Remove source shebangs from compiled entry points**: `core/daemon/entry.ts` and `core/cli/lint-meta-commentary.ts` had shebangs (`#!/usr/bin/env node`, `#!/usr/bin/env bun`) that caused dual shebangs in compiled `.mjs` output. Node.js only strips the first-line shebang, so the second became a SyntaxError. The build script's `banner` option is the single source of truth for shebang injection.
2315
-
2316
- ## [1.24.0] - 2026-02-10
2317
-
2318
- ### Features
2319
-
2320
- - **Daemon mode with IPC socket**: Background daemon process keeps CLI modules warm in memory. Commands are routed through a Unix domain socket using NDJSON protocol, achieving 1.6ms IPC roundtrip. Production startup drops from ~1060ms to ~220ms (4.8x speedup).
2321
- - **Thin shim entry point**: Production build now uses a 1.6KB shim (`prjct.mjs`) that tries the daemon first, only loading the full 613KB core bundle (`prjct-core.mjs`) when the daemon is unavailable.
2322
- - **Auto-start daemon**: First CLI invocation automatically spawns the daemon in background for future commands. 30-minute idle auto-shutdown.
2323
- - **Daemon lifecycle commands**: `prjct daemon start|stop|status` for manual control. Supports `--foreground`, `--port=N`, `--no-http` flags.
2324
-
2325
- ### Security
2326
-
2327
- - **Removed source maps from production build**: `.map` files previously embedded full `sourcesContent` including credential management code (`keychain.ts`, `project-credentials.ts`). Source maps are now completely removed from `dist/`.
2328
-
2329
- ### Implementation Details
2330
-
2331
- Daemon mode with Unix socket IPC for near-zero CLI startup. The daemon pre-loads `PrjctCommands`, `CommandRegistry`, and storage caches once, then reuses them across invocations. The thin shim entry point avoids parsing the heavy core bundle when the daemon handles the command. ESM static imports are hoisted before any code runs, so all imports in `bin/prjct.ts` are now dynamic to enable the fast path.
2332
-
2333
- ### Learnings
2334
-
2335
- - ESM hoists static imports — placing code before `import` statements doesn't help; all imports must be dynamic for a true fast path
2336
- - esbuild code splitting creates ~60 chunk files, not suitable for CLI distribution; explicit two-file shim is cleaner
2337
- - `process.stdin.unref()` doesn't exist in Bun — needs try/catch guard
2338
- - Unix domain sockets with NDJSON are ideal for local IPC: secure (file permissions), fast, debuggable
2339
-
2340
- ### Test Plan
2341
-
2342
- #### For QA
2343
- 1. `prjct daemon start` — verify socket at `~/.prjct-cli/run/daemon.sock`
2344
- 2. `prjct daemon status` — shows PID, uptime, commands served
2345
- 3. `prjct sync --json --yes` — works via IPC with valid JSON output
2346
- 4. `prjct daemon stop` — clean shutdown, socket removed
2347
- 5. Run any command without daemon — falls back to direct execution
2348
- 6. Verify `dist/` contains NO `.map` files or `sourcesContent`
2349
-
2350
- #### For Users
2351
- **What changed:** CLI commands are now routed through a background daemon for faster execution.
2352
- **How to use:** Automatic — daemon starts on first use, stops after 30min idle. Use `PRJCT_NO_DAEMON=1` to disable.
2353
- **Breaking changes:** None.
2354
-
2355
- ## [1.23.1] - 2026-02-10
2356
-
2357
- ### Bug Fix
2358
-
2359
- - **Fix dual shebang in compiled linear CLI**: Removed `#!/usr/bin/env bun` from `core/cli/linear.ts` source file. The build script (esbuild) already injects `#!/usr/bin/env node` via banner, so the source shebang was duplicated in `dist/cli/linear.mjs` — causing `SyntaxError: Invalid or unexpected token` on Node.js for all `prjct linear` commands.
2360
-
2361
- ### Root Cause
2362
-
2363
- The source file `core/cli/linear.ts` had `#!/usr/bin/env bun` on line 1. esbuild preserved it during compilation, and the build banner injected `#!/usr/bin/env node` — resulting in two shebangs. Node.js only strips line 1's shebang, so line 2 (`#!/usr/bin/env bun`) was parsed as JavaScript and threw a SyntaxError.
2364
-
2365
- ### Learnings
2366
-
2367
- - Source files compiled by esbuild should NOT have shebangs — the build script's `banner` option is the single source of truth for shebang injection
2368
- - Only the first line shebang is stripped by Node.js; any subsequent shebang lines cause parse errors
2369
-
2370
- ### Test Plan
2371
-
2372
- #### For QA
2373
- 1. `head -1 dist/cli/linear.mjs` — single `#!/usr/bin/env node` shebang
2374
- 2. `node dist/cli/linear.mjs --help` — no SyntaxError
2375
- 3. `prjct linear list` — works end-to-end
2376
- 4. `grep -c '#!/' dist/cli/linear.mjs` — returns `1`
2377
-
2378
- #### For Users
2379
- **What changed:** Fixed `prjct linear` commands failing with SyntaxError after v1.23.0.
2380
- **How to use:** Update to v1.23.1 — no action needed.
2381
- **Breaking changes:** None.
2382
-
2383
- ## [1.23.0] - 2026-02-11
2384
-
2385
- ### Features
2386
-
2387
- - compile and ship dist/ instead of raw TypeScript source (PRJ-294) (#168)
2388
- - add outcome-to-memory auto-learning (PRJ-283) (#166)
2389
-
2390
- ### Refactoring
2391
-
2392
- - consolidate core modules from 27 to 20 directories (PRJ-292) (#167)
2393
-
2394
- ## [1.25.0] - 2026-02-10
2395
-
2396
- ### Infrastructure
2397
-
2398
- - **Compile and ship dist/** (PRJ-294): Package no longer ships raw TypeScript source. Compiled, minified JavaScript with source maps instead.
2399
- - Rewrote `scripts/build.js` v3.0: produces minified ESM bundles via esbuild with source maps
2400
- - Bundled 127 template files into single `dist/templates.json` (408KB)
2401
- - Main CLI compiled to `dist/bin/prjct.mjs` (600KB minified), Linear CLI to `dist/cli/linear.mjs` (27KB)
2402
- - Package reduced from 1.1MB/480 files to 971KB/27 files
2403
- - All template consumers use bundle-first pattern via `getTemplateContent()` and `listTemplates()` helpers
2404
- - Dual-mode operation: dev mode (raw TS via bun) and production mode (compiled dist/) both work
2405
- - Updated `bin/prjct` shell script for dev vs production detection
2406
- - Updated 8 modules to use template bundle: command-installer, setup, setup-cursor, setup-windsurf, prompt-builder, sync-agent-gen, template-loader, bin/prjct.ts
2407
-
2408
- ### Implementation Details
2409
-
2410
- Rewrote the build system to produce compiled JavaScript output instead of shipping raw TypeScript. The key innovation is the bundle-first pattern: `getTemplateContent()` tries the bundled JSON first, falls back to filesystem for dev mode. This unified API replaced scattered `fs.readFile` calls across 8 modules. The shell script (`bin/prjct`) detects dev vs production by checking if `prjct.ts` exists.
2411
-
2412
- ### Learnings
2413
-
2414
- - Bundle-first pattern (try JSON bundle, fall back to filesystem) provides clean dev/prod abstraction
2415
- - ESM requires banner injection for `__dirname`/`__filename` since they don't exist in ESM scope
2416
- - npm auto-includes `main` field target in package even when not in `files` array
2417
- - `packages: 'external'` in esbuild avoids bundling node_modules into dist/
2418
- - `keepNames: true` preserves function names despite minification, helpful for debugging
2419
-
2420
- ### Test Plan
2421
-
2422
- #### For QA
2423
- 1. `npm pack` — verify tarball contains only dist/, bin/prjct, assets/, scripts, README, LICENSE, CHANGELOG
2424
- 2. `bun dist/bin/prjct.mjs version` — CLI runs from compiled output
2425
- 3. `bun dist/bin/prjct.mjs sync --json` — full sync works with bundled templates
2426
- 4. `prjct linear list` — linear CLI subprocess resolves correctly
2427
- 5. Verify `dist/templates.json` contains all 127 template files
2428
- 6. Dev mode: `bun bin/prjct.ts version` still runs raw TypeScript
2429
-
2430
- #### For Users
2431
- **What changed:** Package is now smaller and ships compiled JavaScript instead of raw TypeScript source.
2432
- **How to use:** No changes — all `prjct` commands work identically.
2433
- **Breaking changes:** None
2434
-
2435
- ## [1.24.0] - 2026-02-10
2436
-
2437
- ### Refactor
2438
-
2439
- - **Consolidate core modules** (PRJ-292): Reduced `core/` from 27 to 20 directories by merging overlapping modules, splitting large files, and eliminating legacy duplicates
2440
- - Merged `bus/` + `events/` into `events/` (pub-sub.ts, sync-events.ts)
2441
- - Merged `ai-tools/` + `context-tools/` into `tools/` (ai/, context/ subdirs)
2442
- - Merged `plugin/` + `agents/` into `agentic/` (hooks, plugin-loader, plugin-registry, performance)
2443
- - Merged `wizard/` + `outcomes/` into `workflows/` (onboarding, outcome-analyzer/recorder/learner/storage)
2444
- - Absorbed `context/` into `agentic/` and `constants/` into `utils/`
2445
- - Split 4 large files (5400+ lines total):
2446
- - `memory-system.ts` (1547 → 279) into memory-stores.ts, pattern-store.ts, semantic-memories.ts
2447
- - `sync-service.ts` (1562 → 837) into sync-analyzer.ts, sync-agent-gen.ts
2448
- - `setup.ts` (1061 → 775) into setup-cursor.ts, setup-windsurf.ts
2449
- - `analysis.ts` (1274 → 850) into analysis-helpers.ts
2450
- - Eliminated legacy `fs-helpers.ts` (16 importers migrated to `file-helper.ts`)
2451
- - Removed all type re-exports, duplicated code, and backward-compat shims
2452
- - 84 files changed, +2638/-3182, tsc clean, 1057 tests pass
2453
-
2454
- ### Implementation Details
2455
-
2456
- Large-scale module consolidation to reduce cognitive load and improve maintainability. Each merge followed the pattern: move files, update relative imports across all importers, clean barrel index.ts files, verify with tsc + tests. Used parallel background agents for independent file splits.
2457
-
2458
- Key patterns: CachedStore<T> abstract base class for disk-backed stores, standalone helper function extraction for large command classes, editor-specific code isolation (Cursor/Windsurf).
2459
-
2460
- ### Learnings
2461
-
2462
- - Parallel agents work well for independent file splits (3 simultaneous splits completed successfully)
2463
- - Pre-existing circular deps in commands<->services chain (3 cycles) — not introduced by this refactor
2464
- - Known flaky test (intermittent timing issue) — passes on re-run
2465
-
2466
- ### Test Plan
2467
-
2468
- #### For QA
2469
- 1. `npx tsc -p core/tsconfig.json --noEmit` — zero errors
2470
- 2. `bun test` — 1057 tests pass
2471
- 3. `prjct sync` in any project — works identically
2472
- 4. Deleted dirs don't exist: bus/, ai-tools/, context-tools/, plugin/, agents/, wizard/, outcomes/, context/, constants/
2473
- 5. New dirs exist: tools/ai/, tools/context/, workflows/, events/
2474
-
2475
- #### For Users
2476
- **What changed:** Internal module reorganization only
2477
- **Breaking changes:** None for CLI users. Internal import paths changed (affects contributors).
2478
-
2479
- ## [1.23.0] - 2026-02-10
2480
-
2481
- ### Features
2482
-
2483
- - **Outcome-to-memory auto-learning** (PRJ-283): Completed tasks automatically extract patterns and inject high-confidence learnings into semantic memory
2484
- - `OutcomeStorage`: Unified storage for feature/task outcomes extending StorageManager, with migration from shipped.json, aggregation, and markdown generation
2485
- - `OutcomeMemoryLearner`: Extracts file co-change, tech stack, architecture, gotcha, and workflow patterns from task history and feature outcomes
2486
- - Confidence-gated injection: Only patterns with 3+ occurrences are auto-injected into memory
2487
- - Deduplication: Updates existing `[auto-learned]` memories instead of creating duplicates
2488
- - Non-blocking sync integration: Auto-learning runs during `p. sync` as step 9c (errors caught, don't block sync)
2489
- - `p. learnings` command template for viewing auto-learned patterns by confidence level
2490
- - 37 new tests (26 learner + 11 storage), 1057 total
2491
-
2492
- ### Implementation Details
2493
-
2494
- Bridges the outcomes system to semantic memory. Previously, patterns from completed tasks were only available in task history JSON. Now, recurring patterns are automatically extracted and injected into the memory system for cross-session knowledge transfer.
2495
-
2496
- **Data flow:** `taskHistory[]` + `FeatureOutcome[]` → pattern extraction → confidence scoring → `SemanticMemories` injection
2497
-
2498
- **Pattern categories:** file_cochange (files modified together), tech_stack (confirmed technologies), architecture (discovered patterns), estimation (variance tracking), workflow (what works/doesn't), gotcha (recurring issues)
2499
-
2500
- **New modules:**
2501
- - `core/outcomes/outcome-storage.ts` — OutcomeStorage extending StorageManager with CRUD, migration, aggregation, markdown
2502
- - `core/outcomes/outcome-learner.ts` — OutcomeMemoryLearner with pattern extraction and memory injection
2503
- - `core/outcomes/index.ts` — Updated exports
2504
- - `core/services/sync-service.ts` — Added autoLearnFromHistory() in sync flow
2505
- - `templates/commands/learnings.md` — Template for `p. learnings` command
2506
- - `core/__tests__/outcomes/outcome-learner.test.ts` — 26 tests
2507
- - `core/__tests__/outcomes/outcome-storage.test.ts` — 11 tests
2508
-
2509
- ### Learnings
2510
-
2511
- - `StorageManager<T>` base class provides consistent pattern for all JSON storage with SQLite backing, cache, MD generation, and event publishing
2512
- - Non-critical sync steps should always wrap in try/catch to prevent blocking the main sync flow
2513
- - biome pre-commit hook checks ALL files, not just staged — run `biome check --write` on all new files before committing
2514
-
2515
- ### Test Plan
2516
-
2517
- #### For QA
2518
- 1. Run `p. sync` on a project with task history — verify auto-learning runs without errors
2519
- 2. Check memories.json for `[auto-learned]` entries after sync with 3+ recurring patterns
2520
- 3. Run `p. learnings` — verify patterns display grouped by confidence level
2521
- 4. Complete 3+ tasks with the same stackConfirmed values — verify auto-injection
2522
- 5. Verify sync works when no task history exists
2523
-
2524
- #### For Users
2525
- **What changed:** Completed tasks now automatically extract patterns and inject high-confidence learnings into the memory system.
2526
- **How to use:** Patterns accumulate automatically. Run `p. learnings` to see what the system has learned.
2527
- **Breaking changes:** None
2528
-
2529
- ## [1.22.0] - 2026-02-10
2530
-
2531
- ### Features
2532
-
2533
- - add task-to-analysis feedback loop (PRJ-272) (#165)
2534
- - add task history array with FIFO eviction (PRJ-281) (#164)
2535
-
2536
- ## [1.22.0] - 2026-02-10
2537
-
2538
- ### Features
2539
-
2540
- - **Task-to-analysis feedback loop** (PRJ-272): Tasks report discoveries back into analysis and agent generation
2541
- - TaskFeedbackSchema: stackConfirmed, patternsDiscovered, agentAccuracy (with rating enum), issuesEncountered
2542
- - Optional `feedback` field on TaskHistoryEntry for backward compatibility
2543
- - `getAggregatedFeedback()` consolidates patterns, stack confirmations, and issues across task history
2544
- - Recurring issues (2+ occurrences) automatically promoted to "known gotchas"
2545
- - Sync incorporates feedback: patterns populate analysis draft, gotchas become anti-patterns
2546
- - Agent generator injects "Recent Learnings" section into domain agents with patterns, gotchas, and accuracy notes
2547
- - Workflow `done()` accepts and passes feedback through to storage
2548
- - 22 new tests covering schema validation, persistence, aggregation, gotcha promotion, and backward compatibility (1020 total)
2549
-
2550
- ### Implementation Details
2551
-
2552
- Closes the knowledge loop between task execution and project analysis. Previously, discoveries made during tasks were lost when sessions ended. Now, structured feedback persists in task history and feeds into the next sync cycle.
2553
-
2554
- **Data flow:** `p. done` (feedback captured) → `taskHistory[].feedback` → `p. sync` → `analysis.patterns` + `agents/*.md` "Recent Learnings"
2555
-
2556
- **Modified modules:**
2557
- - `core/schemas/state.ts` — Added TaskFeedbackSchema, extended TaskHistoryEntrySchema with optional feedback field
2558
- - `core/storage/state-storage.ts` — completeTask() accepts feedback, createTaskHistoryEntry() attaches it, getAggregatedFeedback() provides read-side API, toMarkdown() shows feedback in context
2559
- - `core/commands/workflow.ts` — done() passes feedback through options to completeTask()
2560
- - `core/services/sync-service.ts` — saveDraftAnalysis() loads aggregated feedback, injectFeedbackSection() adds learnings to agents
2561
- - `core/services/agent-generator.ts` — generate() accepts TaskFeedbackContext, injectFeedbackSection() appends learnings to domain agents
2562
- - `core/__tests__/storage/state-storage-feedback.test.ts` — 22 comprehensive tests
2563
-
2564
- ### Learnings
2565
-
2566
- - **SyncService duplicates AgentGenerator:** Both have their own `generateDomainAgent()` — feedback injection needed in both places
2567
- - **Write-Through pattern:** All state flows JSON → MD → Event; feedback follows the same pattern
2568
- - **Backward compatibility via optional fields:** Adding `feedback?: TaskFeedback` to existing schema requires zero migration
2569
-
2570
- ### Test Plan
2571
-
2572
- #### For QA
2573
- 1. Complete a task with `p. done` — verify feedback stored in `taskHistory[0].feedback`
2574
- 2. Complete multiple tasks with same issue — verify gotcha promotion (2+ occurrences)
2575
- 3. Run `p. sync` after tasks with feedback — verify analysis draft has patterns
2576
- 4. Run `p. sync` with agent regeneration — verify "Recent Learnings" in domain agents
2577
- 5. Complete task WITHOUT feedback — verify backward compatibility
2578
- 6. Run `bun test` — all 1020 tests pass
2579
-
2580
- #### For Users
2581
- **What changed:** Task discoveries now persist and improve future agent context automatically.
2582
- **How to use:** Automatic via `p. done` template. No user action required.
2583
- **Breaking changes:** None.
2584
-
2585
- ## [1.21.0] - 2026-02-10
2586
-
2587
- ### Features
2588
-
2589
- - add semantic verification for analysis results (PRJ-270) (#163)
2590
- - **Task history array** (PRJ-281): Replace single previousTask with bounded task history for pattern learning
2591
- - TaskHistoryEntry schema captures completed task metadata: title, classification, timestamps, subtasks, outcome, branch, Linear IDs
2592
- - Automatic history push on task completion with FIFO eviction (max 20 entries)
2593
- - Context injection: shows 3 recent same-type tasks when active, 5 recent when idle
2594
- - Accessor methods: getTaskHistory(), getMostRecentTask(), getTaskHistoryByType()
2595
- - Backward compatible: undefined taskHistory initializes as empty array
2596
- - Comprehensive test suite with 20 test cases (998 tests total pass)
2597
-
2598
- ### Implementation Details
2599
-
2600
- Replaced single previousTask field with bounded task history array to enable pattern learning and cross-task context for AI agents. When tasks complete, metadata is automatically captured and stored with FIFO eviction.
2601
-
2602
- **Modified modules:**
2603
- - `core/schemas/state.ts` — Added TaskHistoryEntrySchema with 12 fields, updated StateJsonSchema, exported TaskHistoryEntry type, updated DEFAULT_STATE
2604
- - `core/storage/state-storage.ts` — Updated completeTask() to push history entries, added createTaskHistoryEntry() helper, added 3 accessor methods, updated toMarkdown() for context injection, updated getDefault()
2605
- - `core/__tests__/storage/state-storage-history.test.ts` (468 lines) — 20 comprehensive tests covering push, eviction, backward compatibility, accessors, and context injection
2606
- - `README.md` — Added Task History section with usage documentation
2607
- - `CHANGELOG.md` — Documented task history feature
2608
-
2609
- ### Learnings
2610
-
2611
- - **Schema-first design:** Define Zod schemas before implementation ensures type safety and validation at runtime
2612
- - **Type assertions for extended properties:** Use `taskAny = task as any` to access properties not in CurrentTask schema (type, branch, parentDescription)
2613
- - **Context injection in toMarkdown():** The state-storage toMarkdown() method is where context is generated, not context-builder.ts
2614
- - **pathManager mocking for test isolation:** Mock getGlobalProjectPath, getStoragePath, getFilePath to use temp directories in tests
2615
- - **FIFO over LRU:** Simpler implementation with predictable behavior for bounded history
2616
-
2617
- ### Test Plan
2618
-
2619
- #### For QA
2620
- 1. Complete a task with `p. done` — verify taskHistory entry appears in state.json with all metadata fields
2621
- 2. Complete 25+ tasks — verify only 20 entries remain (oldest dropped)
2622
- 3. Start a bug task — verify context markdown shows recent bug tasks only (not features)
2623
- 4. Test with existing state.json missing taskHistory field — verify backward compatibility
2624
- 5. Verify accessor methods return correct data: getTaskHistory(), getMostRecentTask(), getTaskHistoryByType()
2625
-
2626
- #### For Users
2627
- **What changed:** Completed tasks are now tracked in a history array (max 20) instead of only storing the last paused task
2628
- **How to use:** No action needed — task history is automatic on `p. done`
2629
- **Breaking changes:** None — fully backward compatible
2630
-
2631
- ## [1.20.0] - 2026-02-10
2632
-
2633
- ### Features
2634
-
2635
- - add retry with exponential backoff for agent and tool operations (#162)
2636
-
2637
- ## [1.20.0] - 2026-02-09
2638
-
2639
- ### Features
2640
-
2641
- - **Semantic verification for analysis results** (PRJ-270): Validate analysis consistency before sealing
2642
- - Framework verification: checks frameworks exist in package.json dependencies (case-insensitive matching)
2643
- - Language verification: validates languages match actual file extensions (.ts → TypeScript)
2644
- - Pattern location verification: confirms pattern files exist in project
2645
- - File count verification: validates count accuracy (within 10% tolerance)
2646
- - Anti-pattern file verification: ensures anti-pattern files exist when referenced
2647
- - CLI command: `prjct verify --semantic` with human-readable and JSON output
2648
- - Parallel execution of all 5 checks using Promise.all() (~100-200ms for typical projects)
2649
- - Comprehensive test suite with 10 new test cases covering all scenarios (28 tests total, 63 assertions)
2650
-
2651
- - **Retry with exponential backoff for agent and tool operations** (PRJ-271): Comprehensive retry infrastructure with error classification and circuit breaker
2652
- - RetryPolicy utility with configurable attempts, delays, and exponential backoff (1s→2s→4s)
2653
- - Automatic error classification: transient (EBUSY, EAGAIN, ETIMEDOUT) vs permanent (ENOENT, EPERM)
2654
- - Circuit breaker protection: opens after 5 consecutive failures, auto-closes after 60s
2655
- - Agent initialization retries (3 attempts with 1s base delay)
2656
- - Tool operations retry (Read/Write/Bash with 2 attempts)
2657
- - Resilient parallel agent generation using Promise.allSettled()
2658
-
2659
- ### Implementation Details
2660
-
2661
- #### Semantic Verification (PRJ-270)
2662
-
2663
- Added semantic verification functions to validate analysis results match actual project state. The verification system runs 5 parallel checks to detect logical inconsistencies before sealing analysis data.
2664
-
2665
- **Modified modules:**
2666
- - `core/schemas/analysis.ts` — Added 5 verification functions, 1 orchestrator, 2 helpers, and 2 interfaces (SemanticCheckResult, SemanticVerificationReport)
2667
- - `core/storage/analysis-storage.ts` — Added semanticVerify() method to AnalysisStorage class
2668
- - `core/commands/analysis.ts` — Extended verify() with --semantic flag and added semanticVerify() helper
2669
- - `core/commands/commands.ts` — Updated verify() signature to include semantic?: boolean
2670
- - `core/index.ts` — Updated verify command handler to pass semantic flag
2671
- - `core/__tests__/storage/analysis-storage.test.ts` — Added 10 comprehensive test cases (+345 lines)
2672
- - `README.md` — Added analysis verification documentation section
2673
- - `CHANGELOG.md` — Documented semantic verification feature
2674
-
2675
- **Verification functions:**
2676
- 1. `verifyFrameworks()` — Checks frameworks exist in package.json (case-insensitive partial matching)
2677
- 2. `verifyLanguages()` — Validates languages match file extensions (.ts → TypeScript)
2678
- 3. `verifyPatternLocations()` — Confirms pattern files exist in project
2679
- 4. `verifyFileCount()` — Validates count accuracy (10% tolerance for temporary files/caches)
2680
- 5. `verifyAntiPatternFiles()` — Ensures anti-pattern files exist when referenced
2681
-
2682
- **Helper functions:**
2683
- - `getProjectExtensions()` — Recursively scans project for file extensions (ignores node_modules, .git, dist, build, .next, .turbo, coverage)
2684
- - `countProjectFiles()` — Counts all files in project with same ignore patterns
2685
-
2686
- **Key features:**
2687
- - Parallel execution using Promise.all() for performance (~100-200ms typical)
2688
- - Skip conditions for null/undefined/empty arrays (prevents false failures)
2689
- - 10% tolerance for file count (accounts for temporary files, caches)
2690
- - Case-insensitive partial matching for frameworks
2691
- - Returns SemanticVerificationReport following VerificationReport pattern from sync-verifier
2692
- - Zero breaking changes: all 18 existing tests pass
2693
-
2694
- #### Retry Infrastructure (PRJ-271)
2695
-
2696
- Built RetryPolicy utility with exponential backoff, error classification, and circuit breaker. Integrated across agent initialization, tool operations, and parallel agent generation. The system now automatically retries transient failures while failing fast on permanent errors.
2697
-
2698
- **New modules:**
2699
- - `core/utils/retry.ts` (320 lines) — Core retry infrastructure with RetryPolicy class, error classification, circuit breaker
2700
- - `core/__tests__/utils/retry.test.ts` (380 lines) — 21 comprehensive tests with 53 assertions
2701
- - `ACCEPTANCE-PRJ-271.md` — Full acceptance criteria verification (22 criteria verified)
2702
-
2703
- **Modified modules:**
2704
- - `core/services/agent-service.ts` — Wrapped initialize() with retry policy (3 attempts)
2705
- - `core/agentic/tool-registry.ts` — Added retry to Read/Write/Bash tools (2 attempts each)
2706
- - `core/services/agent-generator.ts` — Changed to Promise.allSettled() with per-agent retry
2707
-
2708
- **Key features:**
2709
- - Exponential backoff: 1s, 2s, 4s (configurable base/max)
2710
- - Error classification: automatic transient vs permanent detection
2711
- - Circuit breaker: per-operation tracking, 5 failure threshold, 60s cooldown
2712
- - Two default policies: defaultAgentRetryPolicy (3 attempts), defaultToolRetryPolicy (2 attempts)
2713
- - Zero breaking changes: all 968 existing tests pass
2714
-
2715
- ### Learnings
2716
-
2717
- - **RetryPolicy pattern:** Wrapping operations with retry execution provides clean separation of retry logic from business logic
2718
- - **Error classification strategies:** Using error code sets (EBUSY, EAGAIN) for transient vs (ENOENT, EPERM) for permanent enables automatic decision-making
2719
- - **Promise.allSettled() for resilient parallel operations:** Prevents one failure from blocking other operations, enables partial success
2720
- - **Circuit breaker implementation:** Per-operation state tracking prevents cascading failures while allowing recovery
2721
-
2722
- ### Test Plan
2723
-
2724
- #### For QA
2725
-
2726
- 1. **Agent Initialization Retry**
2727
- - Temporarily make file system busy during agent initialization
2728
- - Verify agent initialization retries up to 3 times
2729
- - Confirm permanent errors (unsupported agent) fail immediately
2730
-
2731
- 2. **Tool Operations Retry**
2732
- - Test Read/Write/Bash with transient errors (EBUSY, ETIMEDOUT)
2733
- - Verify operations retry automatically (2 attempts)
2734
- - Confirm permanent errors (ENOENT, EPERM) return null/false without retry
2735
-
2736
- 3. **Circuit Breaker**
2737
- - Trigger 5 consecutive failures on same operation
2738
- - Verify circuit breaker opens and blocks further attempts
2739
- - Wait 60 seconds and verify circuit closes automatically
2740
-
2741
- 4. **Parallel Agent Generation**
2742
- - Simulate one agent generation failure during sync
2743
- - Verify other agents generate successfully (Promise.allSettled behavior)
2744
- - Check logs for failure warnings
2745
-
2746
- #### For Users
2747
-
2748
- **What changed:** The system is now more resilient against transient failures. Operations like agent initialization, file reads/writes, and command execution will automatically retry when they encounter temporary errors (disk busy, timeouts, etc).
2749
-
2750
- **How to use:** No action required - retry logic works automatically. Users will experience fewer random failures during normal operations.
2751
-
2752
- **Breaking changes:** None. All changes are backward compatible. Existing tests (968 total) all pass.
2753
-
2754
- ## [1.19.0] - 2026-02-09
2755
-
2756
- ### Features
2757
-
2758
- - **Aggressive archival of stale storage data** (PRJ-267): Automatic archival during `prjct sync` to keep LLM context lean
2759
- - Shipped features >90 days archived to SQLite `archives` table with 1-line summary
2760
- - Pending ideas >180 days marked `dormant` and excluded from LLM context
2761
- - Completed queue tasks >7 days auto-removed and archived
2762
- - Paused tasks >30 days archived with persistence (previously discarded)
2763
- - Memory log capped at 500 active entries, overflow archived
2764
-
2765
- ### Implementation Details
2766
-
2767
- New modules:
2768
- - `core/storage/archive-storage.ts` — Archive infrastructure: SQLite `archives` table, batch archival via transactions, restore, prune, stats
2769
- - `core/__tests__/storage/archive-storage.test.ts` — 13 tests covering all archival paths
2770
-
2771
- Modified:
2772
- - `core/storage/database.ts` — Migration v2: `archives` table with entity_type, entity_id, entity_data, summary, reason columns
2773
- - `core/storage/shipped-storage.ts` — `archiveOldShipped()` method with 90-day retention policy
2774
- - `core/storage/ideas-storage.ts` — `markDormantIdeas()` method, `dormant` status excluded from markdown context
2775
- - `core/storage/queue-storage.ts` — `removeStaleCompleted()` method with 7-day retention
2776
- - `core/storage/state-storage.ts` — `archiveStalePausedTasks()` now persists to archive table before removal
2777
- - `core/services/memory-service.ts` — `capEntries()` method with 500-entry cap
2778
- - `core/services/sync-service.ts` — `archiveStaleData()` orchestrates all archival in parallel during sync
2779
- - `core/schemas/ideas.ts` + `core/types/storage.ts` — Added `dormant` to IdeaStatus enum
2780
-
2781
- ### Test Plan
2782
-
2783
- #### For QA
2784
- 1. Run `prjct sync` with >90d shipped features — verify archive and removal from context
2785
- 2. Run sync with >180d pending ideas — verify dormant status, excluded from `ideas.md`
2786
- 3. Run sync with >7d completed queue tasks — verify removal and archival
2787
- 4. Run sync with >30d paused tasks — verify archival to SQLite
2788
- 5. Create >500 memory entries, sync — verify cap at 500
2789
- 6. `bun test` — all 947+ tests pass
2790
- 7. Verify recent items are NOT archived
2791
-
2792
- #### For Users
2793
- **What changed:** Storage data automatically cleaned up during sync. Old data archived, not deleted.
2794
- **How to use:** No action needed — runs automatically on every sync.
2795
- **Breaking changes:** Ideas can now have `dormant` status (new enum value).
2796
-
2797
- ## [1.18.0] - 2026-02-09
2798
-
2799
- ### Features
2800
-
2801
- - implement incremental sync with file hashing (PRJ-305) (#160)
2802
-
2803
- ## [1.18.0] - 2026-02-09
2804
-
2805
- ### Features
2806
-
2807
- - **Incremental sync**: `prjct sync` now only re-analyzes files that changed since last sync (PRJ-305)
2808
- - File hashing with Bun.hash (xxHash64) — <100ms for 500 files
2809
- - Change propagation through import graph (1-level reverse edges)
2810
- - Conditional index rebuilds: BM25, import graph, co-change only when source files change
2811
- - Conditional agent regeneration: only when config files (package.json, tsconfig.json) change
2812
- - `prjct sync --full` flag to force complete re-analysis
2813
-
2814
- ### Implementation Details
2815
-
2816
- New modules:
2817
- - `core/domain/file-hasher.ts` — Hash computation via Bun.hash, SQLite registry using `index_checksums` table, diff detection (added/modified/deleted/unchanged)
2818
- - `core/domain/change-propagator.ts` — Import graph reverse-edge lookup for 1-level change propagation, domain classification for affected files
2819
-
2820
- Modified:
2821
- - `core/services/sync-service.ts` — Incremental decision logic: detect changes → propagate → conditionally rebuild indexes and agents
2822
- - `core/services/watch-service.ts` — Passes accumulated `changedFiles` to sync options
2823
- - `core/types/project-sync.ts` — Added `full`, `changedFiles` to `SyncOptions` + `IncrementalInfo` result type
2824
- - CLI chain (`core/index.ts` → `commands.ts` → `analysis.ts`) — Wired `--full` flag through
2825
-
2826
- ### Learnings
2827
-
2828
- - Bun's `fs.readdir` with `withFileTypes` returns `Dirent<NonSharedBuffer>` — need `String()` cast for `.name`
2829
- - Existing `index_checksums` SQLite table was already set up (PRJ-303) — zero schema changes needed
2830
- - Import graph reverse edges (from PRJ-304) enable efficient 1-level propagation without rebuilding the graph
2831
-
2832
- ### Test Plan
2833
-
2834
- #### For QA
2835
- 1. Run `prjct sync` on fresh project (no hash cache) — should behave as full sync
2836
- 2. Run `prjct sync` again without changes — should skip index rebuilds and agent regeneration
2837
- 3. Modify a `.ts` file, run `prjct sync` — should detect change and rebuild indexes
2838
- 4. Modify `package.json`, run `prjct sync` — should regenerate agents
2839
- 5. Run `prjct sync --full` — should force complete re-analysis
2840
- 6. Run `prjct watch`, change a file — should pass changedFiles to sync
2841
-
2842
- #### For Users
2843
- **What changed:** `prjct sync` is now incremental by default.
2844
- **How to use:** No changes needed. Use `prjct sync --full` to force complete re-analysis.
2845
- **Breaking changes:** None
2846
-
2847
- ## [1.17.0] - 2026-02-09
2848
-
2849
- ### Features
2850
-
2851
- - implement BM25 + import graph + git co-change for zero-cost file selection (PRJ-304) (#159)
2852
-
2853
- ## [1.17.0] - 2026-02-08
2854
-
2855
- ### Features
2856
- - **BM25 + import graph + git co-change file selection** (PRJ-304): Zero-cost file selection using three mathematical signals combined into a weighted ranker. Replaces keyword matching in smart-context with precision that matches LLM-based classification — at zero API cost.
2857
-
2858
- ### Implementation Details
2859
- - `core/domain/bm25.ts` — BM25 indexer: tokenizes files (exports, functions, imports, comments, path segments), builds inverted index, scores queries using Okapi BM25 (k1=1.2, b=0.75). Stores in SQLite kv_store.
2860
- - `core/domain/import-graph.ts` — Import graph builder: parses TS/JS imports to build directed adjacency list, follows chains 2 levels deep, scores by proximity (1/(depth+1)).
2861
- - `core/domain/git-cochange.ts` — Git co-change analyzer: parses last 100 commits, builds Jaccard similarity matrix for file pairs that change together.
2862
- - `core/domain/file-ranker.ts` — Combined ranker: `BM25 × 0.5 + imports × 0.3 + cochange × 0.2`, normalizes each signal to [0,1], returns top 15 files.
2863
- - `core/agentic/smart-context.ts` — Uses ranker when indexes exist, graceful fallback to regex-based domain filtering.
2864
- - `core/services/sync-service.ts` — Builds all 3 indexes in parallel during `prjct sync`.
2865
-
2866
- ### Learnings
2867
- - `tokenizeQuery` must split camelCase BEFORE lowercasing — otherwise "getUserById" becomes "getuserbyid" and doesn't split
2868
- - Jaccard similarity > cosine for co-change because data is binary (file present or not in commit)
2869
- - Batch file reads (50 at a time) needed for indexing performance on large projects
2870
- - Stop words list must include code keywords (import, export, const) to reduce noise in scoring
2871
-
2872
- ### Test Plan
2873
-
2874
- #### For QA
2875
- 1. Run `prjct sync` — verify BM25, import graph, and co-change indexes build without errors
2876
- 2. Query "Fix auth middleware" — verify auth-related files rank higher than unrelated files
2877
- 3. Query "Build responsive dashboard" — verify frontend files rank higher than backend files
2878
- 4. Verify index rebuild time <5 seconds on 300+ file project
2879
- 5. Verify query time <50ms
2880
- 6. Verify zero API calls during file selection
2881
-
2882
- #### For Users
2883
- **What changed:** File selection during task context is now powered by BM25 text search, import graph proximity, and git co-change analysis instead of keyword matching.
2884
- **How to use:** Run `p. sync` to build indexes — file selection is automatic and more accurate.
2885
- **Breaking changes:** None. Falls back to previous filtering if indexes don't exist.
2886
-
2887
- ## [1.16.0] - 2026-02-09
2888
-
2889
- ### Features
2890
-
2891
- - remove JSON storage redundancy, SQLite-only backend (PRJ-303) (#158)
2892
-
2893
- ## [1.16.0] - 2026-02-08
2894
-
2895
- ### Features
2896
- - **Remove JSON storage redundancy** (PRJ-303): SQLite is now the sole storage backend. JSON dual-write removed from StorageManager and IndexStorage. Auto-migration runs during `prjct sync`, deletes source JSON files after backup.
2897
-
2898
- ### Implementation Details
2899
- - `StorageManager.write()` — removed JSON file write and temp file pattern; writes only to SQLite kv_store + regenerates context MD
2900
- - `StorageManager.read()` — removed JSON fallback; reads from cache → SQLite → default
2901
- - `StorageManager.exists()` — removed JSON file check; checks SQLite only
2902
- - `IndexStorage` — all 5 read methods (readIndex, readChecksums, readScores, readDomains, readCategories) no longer fall back to JSON; all 5 write methods no longer create JSON files
2903
- - `migrateJsonToSqlite()` — new cleanup step deletes `storage/*.json`, `index/*.json`, `memory/*.jsonl` after successful migration; keeps `storage/backup/`
2904
- - `SyncService.sync()` — auto-runs `migrateJsonToSqlite()` after directory setup (idempotent)
2905
- - `PrjctDatabase.getDb()` — ensures parent directory exists before creating SQLite DB
2906
- - `database.ts` — fixed all TS errors: `db.exec()` → `db.run()` (deprecated), `unknown[]` → `SQLQueryBindings[]`, `require()` → `fs.existsSync()`
2907
-
2908
- ### Test Plan
2909
-
2910
- #### For QA
2911
- 1. Run `bun test` — all 879 tests must pass
2912
- 2. Run `prjct sync` on existing project — verify migration runs, JSON files deleted, `prjct.db` has data
2913
- 3. Run `prjct sync` again — verify idempotent (no errors, migration skips)
2914
- 4. Verify `storage/backup/` contains pre-migration JSON files
2915
- 5. Verify `context/*.md` files still generated after writes
2916
- 6. Run `prjct status` — verify state reads from SQLite
2917
-
2918
- #### For Users
2919
- **What changed:** Storage is now fully SQLite-backed. JSON files are auto-migrated and removed during sync.
2920
- **How to use:** Run `prjct sync` — migration happens automatically.
2921
- **Breaking changes:** None — all public APIs unchanged. JSON backups preserved in `storage/backup/`.
2922
-
2923
- ## [1.15.0] - 2026-02-09
2924
-
2925
- ### Features
2926
-
2927
- - replace hardcoded memory domain tags with semantic matching (PRJ-300) (#157)
2928
-
2929
- ## [1.14.1] - 2026-02-09
2930
-
2931
- ### Improved
2932
- - **Semantic memory domain matching** (PRJ-300): Memory retrieval now uses two-pass scoring (exact MEMORY_TAG match + semantic keyword match) instead of exact-only tag matching. Unknown domains like "uxui" are resolved to canonical domains ("frontend") via SEMANTIC_DOMAIN_KEYWORDS map.
2933
- - **Tech stack normalizer**: New `tech-normalizer.ts` module handles framework name normalization, compound names ("React + TypeScript"), framework families (Next.js → React), and alias resolution (nextjs → next.js).
2934
- - **Anti-hallucination dedup**: Tech stack entries in the anti-hallucination block are now deduplicated using normalized matching, preventing duplicates like "React" and "react" or "Next.js" and "nextjs".
2935
- - **Sealed analysis priority**: Prompt builder now uses sealed analysis frameworks as primary tech stack source, falling back to repo conventions.
2936
-
2937
- ### Implementation Details
2938
- - Expanded `TaskDomain` type from fixed union to `KnownDomain | (string & {})` for forward compatibility while preserving autocomplete
2939
- - `DOMAIN_TAG_MAP` now includes TECH_STACK for frontend/database domains (previously missing)
2940
- - `SEMANTIC_DOMAIN_KEYWORDS` maps 80+ keywords across 7 domains for fuzzy domain resolution
2941
- - `resolveCanonicalDomains()` exported for testability — resolves arbitrary strings to known domains
2942
- - `normalizeFrameworkName()` handles 15 aliases; `FRAMEWORK_FAMILIES` maps 12 meta-frameworks to base frameworks
2943
- - `extractTechNames()` splits compound tech strings on +, /, commas, parentheses, "with", "and"
2944
-
2945
- ### Learnings
2946
- - Two-pass scoring (exact 10pts + semantic 5pts) gives gradual relevance instead of binary match/no-match
2947
- - TypeScript's `KnownDomain | (string & {})` pattern preserves autocomplete for known values while accepting any string
2948
- - Parentheses in compound names need comma replacement (not space) — otherwise adjacent words merge into a single token
2949
-
2950
- ### Test Plan
2951
-
2952
- #### For QA
2953
- 1. `bun test core/__tests__/agentic/semantic-matching.test.ts` — domain resolution (uxui→frontend, api→backend, infra→devops)
2954
- 2. `bun test core/__tests__/agentic/tech-normalizer.test.ts` — normalization, compound names, framework families, dedup
2955
- 3. `bun test core/__tests__/agentic/prompt-assembly.test.ts` — anti-hallucination block still renders correctly
2956
- 4. `bun test` — 848 tests pass, 0 fail
2957
-
2958
- #### For Users
2959
- - Memory retrieval automatically surfaces related memories across domains
2960
- - No user action needed — improvements are automatic
2961
- - No breaking changes
2962
-
2963
- ## [1.14.0] - 2026-02-09
2964
-
2965
- ### Features
2966
-
2967
- - add sprint-based velocity calculation with trend detection (PRJ-296) (#156)
2968
-
2969
- ## [1.14.0] - 2026-02-09
2970
-
2971
- ### Features
2972
- - **Velocity Dashboard**: New `prjct velocity` command with sprint-by-sprint breakdown, trend detection, and estimation accuracy (PRJ-296)
2973
- - **Estimation Patterns**: Automatic detection of over/under estimation patterns by task category
2974
- - **Completion Projections**: Given remaining backlog points, projects estimated sprints and completion date
2975
- - **Velocity Context Injection**: Historical velocity data automatically injected into LLM task prompts for better estimation
2976
-
2977
- ### Implementation Details
2978
-
2979
- **PRJ-296 — Sprint-Based Velocity Calculation**
2980
- New velocity subsystem that aggregates completed task data (from outcomes.jsonl) into sprint periods, calculates rolling velocity metrics, detects trends, and identifies estimation patterns.
2981
-
2982
- Key changes:
2983
- - `core/schemas/velocity.ts` — Zod schemas: SprintVelocity, VelocityMetrics, VelocityConfig, EstimationPattern, CompletionProjection
2984
- - `core/domain/velocity.ts` — Velocity engine: sprint bucketing, linear regression trend detection, accuracy tracking, pattern detection, duration parsing, LLM context formatting
2985
- - `core/storage/velocity-storage.ts` — Write-through storage extending StorageManager with markdown generation
2986
- - `core/commands/velocity.ts` — Dashboard command with chalk-formatted output + registration
2987
- - `core/types/agentic.ts` — Extended `OrchestratorContext` with `velocityContext` field
2988
- - `core/agentic/orchestrator-executor.ts` — Loads velocity context in parallel via `Promise.all`
2989
- - `core/agentic/prompt-builder.ts` — Injects velocity into Section 6 (task context)
2990
- - `core/__tests__/domain/velocity.test.ts` — 35 new tests
2991
-
2992
- ### Learnings
2993
- - Derive story points from estimated duration via Fibonacci mapping when outcomes lack explicit point data
2994
- - Linear regression slope normalized by average velocity works well for trend detection (>10% = improving, <-10% = declining)
2995
- - Parallel loading pattern in orchestrator-executor (`Promise.all`) ensures zero-latency context enrichment
2996
-
2997
- ### Test Plan
2998
-
2999
- #### For QA
3000
- 1. Run `prjct velocity` on a project with outcomes data — verify sprint-by-sprint breakdown with points, tasks, accuracy
3001
- 2. Run `prjct velocity` with no outcomes — verify graceful "No velocity data yet" message
3002
- 3. Run `prjct velocity 89` — verify completion projection (sprints remaining + date)
3003
- 4. Run `bun test core/__tests__/domain/velocity.test.ts` — 35 tests pass
3004
- 5. Run `bun test` — all 805 tests pass
3005
-
3006
- #### For Users
3007
- - **What changed:** New `prjct velocity` command shows sprint velocity, estimation accuracy trends, and completion projections. Velocity data is automatically injected into task prompts for better LLM estimation.
3008
- - **How to use:** Run `prjct velocity` after completing tasks with estimates. Add backlog points: `prjct velocity 89`
3009
- - **Breaking changes:** None
3010
-
3011
- ## [1.13.0] - 2026-02-09
3012
-
3013
- ### Features
3014
-
3015
- - inject sealed analysis into task prompt context (PRJ-260) (#155)
3016
-
3017
- ## [1.13.0] - 2026-02-09
3018
-
3019
- ### Features
3020
- - **Analysis Injection**: Sealed analysis (languages, frameworks, patterns, anti-patterns) now automatically injected into LLM prompt context (PRJ-260)
3021
- - **Enriched Ground Truth**: Prompt section 3 renders full analysis data — languages, frameworks, package manager, source/test dirs, code patterns, and anti-patterns
3022
- - **Enhanced Anti-Hallucination**: AVAILABLE tech list enriched with analysis data (case-insensitive dedup), package manager constraint added
3023
-
3024
- ### Implementation Details
3025
-
3026
- **PRJ-260 — Inject Sync Analysis into Task Context**
3027
- Connected the analysis pipeline (from PRJ-263) to the prompt assembly pipeline (from PRJ-301). `analysisStorage.getActive()` returns sealed analysis (or draft fallback), loaded in parallel with real codebase context for zero latency impact.
3028
-
3029
- Key changes:
3030
- - `core/types/agentic.ts` — New `SealedAnalysisContext` interface, extended `OrchestratorContext` with `sealedAnalysis` field
3031
- - `core/agentic/orchestrator-executor.ts` — Added `loadSealedAnalysis()`, loads in parallel with `gatherRealContext()`
3032
- - `core/agentic/prompt-builder.ts` — Section 3 (ground truth) renders analysis data, Section 5 passes analysis to anti-hallucination
3033
- - `core/agentic/anti-hallucination.ts` — Extended `ProjectGroundTruth` with `analysisLanguages`, `analysisFrameworks`, `analysisPackageManager`
3034
- - `core/__tests__/agentic/analysis-injection.test.ts` — 14 new tests
3035
-
3036
- ### Test Plan
3037
-
3038
- #### For QA
3039
- 1. Run `prjct sync` on a project with sealed analysis — verify prompt contains Languages, Frameworks, Patterns sections
3040
- 2. Run `prjct sync` on a project WITHOUT sealed analysis — verify no crash, fallback rules still present
3041
- 3. Check anti-hallucination block — verify AVAILABLE list includes analysis languages/frameworks (deduped)
3042
- 4. Run `bun test core/__tests__/agentic/analysis-injection.test.ts` — 14 tests pass
3043
- 5. Run `bun test` — all 770 tests pass
3044
-
3045
- #### For Users
3046
- - **What changed:** AI prompts now include your project's detected languages, frameworks, code patterns, and anti-patterns from sealed analysis
3047
- - **How to use:** Run `prjct sync` then `prjct seal` — improvements are automatic in subsequent task prompts
3048
- - **Breaking changes:** None
3049
-
3050
- ## [1.12.0] - 2026-02-09
3051
-
3052
- ### Features
3053
-
3054
- - make subtask output and handoff mandatory (PRJ-262) (#154)
3055
-
3056
- ## [1.11.0] - 2026-02-09
3057
-
3058
- ### Features
3059
- - **Mandatory Subtask Handoff**: Subtask completion now requires structured handoff data — files changed, work summary, and context for the next subtask (PRJ-262)
3060
- - **Prompt Handoff Injection**: Previous subtask handoff automatically rendered in next subtask's prompt context
3061
- - **Completion Validation**: `SubtaskCompletionDataSchema` with Zod validation rejects empty handoff at `completeSubtask()`
3062
- - **Sealable Analysis**: 3-state lifecycle (draft/verified/sealed) with SHA-256 commit-hash signatures (PRJ-263)
3063
- - **Dual Storage**: Re-sync creates drafts without destroying sealed analysis — only sealed feeds task context
3064
- - **Staleness Detection**: Warns when HEAD moves past the sealed commit hash
3065
- - **Seal & Verify Commands**: `prjct seal` locks draft analysis, `prjct verify` checks integrity
3066
-
3067
- ### Implementation Details
3068
-
3069
- **PRJ-262 — Mandatory Subtask Handoff**
3070
- Made `outputForNextAgent` required in `SubtaskSummarySchema` and `whatWasDone` min(1). Added `SubtaskCompletionDataSchema` for completion-time validation. `completeSubtask()` now requires `SubtaskCompletionData` and validates with Zod before persisting. Extended `OrchestratorSubtask` with optional `handoff` field. Prompt builder renders previous subtask handoff (files, work done, context). Done template updated with Step 3.5 for mandatory handoff collection.
3071
-
3072
- Key changes:
3073
- - `core/schemas/state.ts` — Required fields, `SubtaskCompletionDataSchema`, `validateSubtaskCompletion()`
3074
- - `core/storage/state-storage.ts` — `completeSubtask()` enforces handoff, `getPreviousHandoff()` helper
3075
- - `core/types/agentic.ts` — `OrchestratorSubtask.handoff` field
3076
- - `core/agentic/prompt-builder.ts` — Renders previous subtask handoff in prompt
3077
- - `templates/commands/done.md` — Step 3.5: Mandatory handoff collection
3078
-
3079
- **PRJ-263 — Sealable Analysis**
3080
- New `analysis-storage.ts` extends StorageManager with dual storage (draft + sealed). Analysis schema rewritten as Zod schemas with runtime validation. Sync service writes drafts in parallel with existing writes. Canonical JSON representation ensures deterministic SHA-256 signatures.
3081
-
3082
- Key changes:
3083
- - `core/schemas/analysis.ts` — Full rewrite: plain interfaces → Zod schemas with `AnalysisStatusSchema`, `AnalysisItemSchema`
3084
- - `core/storage/analysis-storage.ts` — New: dual storage, sealing, verification, staleness detection
3085
- - `core/services/sync-service.ts` — Added `saveDraftAnalysis()` to parallel writes
3086
- - `core/commands/analysis.ts` — Added `seal()` and `verify()` command methods
3087
- - `core/commands/register.ts`, `core/index.ts` — Registered new commands
3088
-
3089
- ### Learnings
3090
- - Keep storage schema backward-compatible (optional fields) but validate at completion call site
3091
- - Dual validation: storage accepts optional, completion requires mandatory
3092
-
3093
- ### Test Plan
3094
-
3095
- #### For QA (PRJ-262)
3096
- 1. Run `p. done` after completing a subtask — verify handoff data is collected
3097
- 2. Check state.json — verify subtask has `output` and `summary` fields with handoff data
3098
- 3. Start next subtask — verify prompt includes "Previous Subtask Handoff" section
3099
- 4. Load old state.json without handoff fields — verify backward compatibility (no errors)
3100
- 5. Run tests: `bun test core/__tests__/storage/subtask-handoff.test.ts` — 19 tests pass
3101
-
3102
- #### For QA (PRJ-263)
3103
- 1. Run `prjct sync` — verify draft analysis is created in storage
3104
- 2. Run `prjct seal` — verify analysis is locked with SHA-256 signature
3105
- 3. Run `prjct verify` — verify signature matches
3106
- 4. Run `prjct sync` again — verify sealed analysis is preserved, new draft created
3107
- 5. Make a commit, run `prjct status` — verify staleness detection warns about diverged commits
3108
-
3109
- #### For Users
3110
- - **PRJ-262:** Subtask completion now captures what was done, files changed, and context for the next subtask. `p. done` automatically collects handoff — no extra steps needed.
3111
- - **PRJ-263:** Analysis results can now be locked (sealed) so re-syncing doesn't overwrite verified context. Run `prjct seal` after reviewing sync results.
3112
- - **Breaking changes:** `completeSubtask()` API changed from optional to required parameters.
3113
-
3114
- ## [1.10.0] - 2026-02-08
3115
-
3116
- ### Features
3117
-
3118
- - redesign prompt assembly with correct section ordering + anti-hallucination (PRJ-301) (#152)
3119
- - add coordinated global token budget (PRJ-266) (#151)
3120
-
3121
- ## [1.12.0] - 2026-02-07
3122
-
3123
- ### Features
3124
- - **Prompt Assembly Redesign**: Correct section ordering based on research of 25+ system prompts (PRJ-301)
3125
- - **Environment Block**: Structured `<env>` block with project, git, platform, runtime, and model metadata
3126
- - **Anti-Hallucination Block**: Explicit availability/unavailability grounding injected BEFORE task context
3127
- - **Token Efficiency Directive**: Conciseness rules appended to every prompt
3128
-
3129
- ### Implementation Details
3130
- Redesigned `prompt-builder.ts` section ordering to follow research-backed pattern:
3131
- Identity → Environment → Ground Truth → Capabilities → Constraints → Task Context → Task → Output Schema → Efficiency
3132
-
3133
- Key changes:
3134
- - New `environment-block.ts`: Generates `<env>` XML block with auto-detected runtime, platform, and normalized names
3135
- - New `anti-hallucination.ts`: Generates constraints block from sealed analysis (available tech, absent domains, grounding rules)
3136
- - Moved template content (task instructions) to section 7 — LLM knows identity, env, and rules before reading task
3137
- - Anti-hallucination block placed at section 5 (before task context), replacing old `RULES (CRITICAL)` at the end
3138
- - Added `buildEfficiencyDirective()` with conciseness rules (max 4 lines, no preamble/postamble)
3139
- - Exported `PROMPT_SECTION_ORDER` constant and `SectionPriority` type for budget trimming
3140
- - Kept `buildCriticalRules()` as fallback when project context unavailable
3141
-
3142
- ### Test Plan
3143
-
3144
- #### For QA
3145
- 1. Run `prjct sync` on any project — verify CLAUDE.md has correct section ordering
3146
- 2. Check for `<env>` block near top of generated prompt
3147
- 3. Verify anti-hallucination block appears BEFORE task context
3148
- 4. Run `prjct sync --package=<name>` in monorepo — verify per-package context
3149
-
3150
- #### For Users
3151
- **What changed:** AI agent prompts now follow research-backed section ordering for better accuracy
3152
- **How to use:** Run `prjct sync` — improvements are automatic
3153
- **Breaking changes:** None
3154
-
3155
- ## [1.9.0] - 2026-02-06
3156
-
3157
- ### Features
3158
- - **Structured Output Schema**: All LLM prompts now include structured output schemas (PRJ-264)
3159
- - **Global Token Budget**: Coordinated token budget across all prompt sections (PRJ-266)
3160
-
3161
- ### Implementation Details
3162
- Added `core/schemas/llm-output.ts` with Zod schemas for each command's expected output format. Schemas are rendered as JSON examples in prompts so LLMs know the exact structure expected.
1368
+ ---
3163
1369
 
3164
- Global token budget (`core/agentic/token-budget.ts`) allocates tokens across sections with priority-based trimming. Critical sections (identity, task) are protected; lower-priority sections (patterns, history) get trimmed first.
1370
+ ## v1.x and earlier
3165
1371
 
3166
- ### Test Plan
3167
- 1. Run any command — verify output matches schema
3168
- 2. Run with large context — verify budget trimming works
3169
- 3. Check prompt size stays under model limits
1372
+ Older releases moved to [CHANGELOG.archive.md](./CHANGELOG.archive.md). Full history also visible via `git tag -l` and the GitHub Releases page.