great-cto 3.2.0 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -20,6 +20,25 @@ That's it. The CLI detects your stack, picks the right archetype, clones the plu
20
20
 
21
21
  After install, restart Claude Code and run `/inbox` or `/audit`.
22
22
 
23
+ ## What the plugin gives you
24
+
25
+ The CLI installs it; these are what it installs.
26
+
27
+ - **A pipeline of specialist agents** — architect, product owner, senior dev, QA,
28
+ security officer, and archetype-specific reviewers — that run in sequence with
29
+ human approval gates at the points that are expensive to undo.
30
+ - **Spending caps that refuse.** Set a per-agent cap; when measured spend passes
31
+ it the dispatcher declines to run that agent instead of quietly continuing. An
32
+ agent with no measurement reads as `unmeasured`, never as `$0`.
33
+ - **A board at `localhost:3141`** — tasks, metrics, per-agent budgets, docs
34
+ search, and the decision journal, all served from your own machine. Nothing
35
+ leaves it.
36
+ - **A decision journal** that records what each dispatch decided and why, so a
37
+ pipeline that did not run looks different from one that ran and found nothing.
38
+
39
+ Telemetry is opt-in and off by default — see
40
+ [docs/PRIVACY.md](https://github.com/avelikiy/great_cto/blob/main/docs/PRIVACY.md).
41
+
23
42
  ## Examples
24
43
 
25
44
  ### Commerce detection (Stripe + Next.js)
@@ -82,8 +101,10 @@ npx great-cto init [options]
82
101
  ## Trust signals
83
102
 
84
103
  - Zero runtime dependencies — only Node built-ins (`node:fs`, `node:path`, etc.)
85
- - 47 unit tests covering stack detection, archetype scoring, settings merge
86
- - CI matrix: Node 18/20/22 × Ubuntu/macOS/Windows
104
+ - 305 unit tests covering stack detection, archetype scoring, and settings merge
105
+ - Tests and the release gate run locally (`scripts/ci-local.sh`) the hosted CI
106
+ workflows are present in the repo but have not run since June 2026, so treat the
107
+ badge-shaped claims in this file as claims about the local gate, not a cloud matrix
87
108
  - Source: [`packages/cli/src/`](https://github.com/avelikiy/great_cto/tree/main/packages/cli/src) — ~1.2k LOC TypeScript
88
109
 
89
110
  ## License
@@ -2,7 +2,7 @@
2
2
  "name": "great_cto",
3
3
  "id": "great_cto",
4
4
  "description": "Engineering process for solo founders and teams up to 50 engineers. Agents do architecture, code review, QA, and security. You make two decisions per feature.",
5
- "version": "3.2.0",
5
+ "version": "3.4.0",
6
6
  "author": {
7
7
  "name": "Great CTO",
8
8
  "url": "https://github.com/avelikiy/great_cto"
@@ -1174,9 +1174,24 @@ async function dispatch(req, res, url, cwd) {
1174
1174
  return (x[0] - y[0]) || (x[1] - y[1]) || (x[2] - y[2]);
1175
1175
  }).pop() || null;
1176
1176
  } catch { installed = null; }
1177
- const stale = installed && BUILD_VERSION !== 'unknown'
1178
- ? (installed !== BUILD_VERSION ? 'yes' : 'no')
1179
- : 'unknown';
1177
+ // Direction, not inequality. `installed !== BUILD_VERSION` is true in both
1178
+ // directions, and the banner it fed said "restart to pick up the new
1179
+ // version" either way — so a board running 3.2.0 against an installed 3.1.0
1180
+ // was told to restart into the OLDER build. A prompt to downgrade that
1181
+ // looks exactly like a prompt to upgrade is the same defect this endpoint
1182
+ // was written to fix, pointed the other way.
1183
+ //
1184
+ // Four states: `behind` (an install is waiting), `ahead` (the running code
1185
+ // is newer — restarting would lose it), `no`, and `unknown`.
1186
+ const cmp = (a, b) => {
1187
+ const x = a.split('.').map(Number), y = b.split('.').map(Number);
1188
+ return (x[0] - y[0]) || (x[1] - y[1]) || (x[2] - y[2]);
1189
+ };
1190
+ let stale = 'unknown';
1191
+ if (installed && BUILD_VERSION !== 'unknown' && /^\d+\.\d+\.\d+$/.test(BUILD_VERSION)) {
1192
+ const d = cmp(installed, BUILD_VERSION);
1193
+ stale = d > 0 ? 'behind' : d < 0 ? 'ahead' : 'no';
1194
+ }
1180
1195
  res.writeHead(200, { 'Content-Type': 'application/json', 'Cache-Control': 'no-store' });
1181
1196
  res.end(JSON.stringify({
1182
1197
  version: BUILD_VERSION, installed, stale,