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