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
|
-
-
|
|
86
|
-
-
|
|
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.
|
|
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
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
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,
|