@bigsteele/the-big-sean 0.1.0 → 0.2.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 +21 -1
- package/dist/cli.js +76 -4
- package/package.json +5 -2
- package/prompt/THE-BIG-SEAN.md +20 -2
package/README.md
CHANGED
|
@@ -12,7 +12,11 @@ band, a ceiling, gate status, category cards, the path to 100, and every finding
|
|
|
12
12
|
a file and line, a query, or a page.
|
|
13
13
|
|
|
14
14
|
The audit itself is run by Claude Code against your repo and, where reachable, your live
|
|
15
|
-
system — read-only, no edits, no questions, nothing spent.
|
|
15
|
+
system — read-only, no edits, no questions, nothing spent. Step 0 is the **Big Steele AI
|
|
16
|
+
Audit**: `big-sean` runs it for you first (deterministic, file-by-file, never opens an env
|
|
17
|
+
file) and the protocol uses its findings as evidence for the autonomy side, with its score
|
|
18
|
+
on the summary card as the AI readiness line. The deliverable lands at the repo root, named
|
|
19
|
+
for the app: **The Big Sean - <App Name>.md** and **.html**. This package ships the
|
|
16
20
|
protocol and the tools around it:
|
|
17
21
|
|
|
18
22
|
```
|
|
@@ -22,6 +26,16 @@ npx @bigsteele/the-big-sean --check # after the audit: re-compute the report'
|
|
|
22
26
|
npx @bigsteele/the-big-sean --stdout # print the protocol
|
|
23
27
|
```
|
|
24
28
|
|
|
29
|
+
## Before you run it
|
|
30
|
+
|
|
31
|
+
This is a large scan, not a quick check. The agent reads everything in the repository it
|
|
32
|
+
can reach, spawns multiple sub-agents against the codebase, probes the live system
|
|
33
|
+
read-only where your credentials allow, and writes a long report: 140 graded checks with
|
|
34
|
+
evidence. Expect a long session and a lot of tokens. `big-sean --run` says this and asks
|
|
35
|
+
before it starts (`--yes` skips the question); the protocol file says it at the top so
|
|
36
|
+
whoever pastes it sees it too. It changes nothing: no edits, no commits, no deploys, no
|
|
37
|
+
messages, no spending.
|
|
38
|
+
|
|
25
39
|
## Prove the number
|
|
26
40
|
|
|
27
41
|
The protocol makes the auditing agent write its own validator and show its math. `--check`
|
|
@@ -47,6 +61,12 @@ or any connected service. No commits, branches, deploys, messages, or spending.
|
|
|
47
61
|
prints a secret or a customer's personal data, and it never says "production ready" — it
|
|
48
62
|
says what it verified and what it did not.
|
|
49
63
|
|
|
64
|
+
## After the card
|
|
65
|
+
|
|
66
|
+
Every report card ends the same way: send it in at **bigsteele.com/scan** and get a written
|
|
67
|
+
read of the three fixes that come first, in order. No call required to get it, and no pitch
|
|
68
|
+
inside it. If the read turns into a build, it is the first mile of that engagement.
|
|
69
|
+
|
|
50
70
|
## The name
|
|
51
71
|
|
|
52
72
|
Big Steele wrote the machine. LaSean Pickens wrote the standard. The Big Sean is what
|
package/dist/cli.js
CHANGED
|
@@ -7,27 +7,38 @@
|
|
|
7
7
|
// --check exits 0 on GATES CLEAR, 2 on LAUNCH BLOCKED or NOT VERIFIED FOR LAUNCH,
|
|
8
8
|
// 1 when the grade.json is rejected. Everything else exits 0 on success.
|
|
9
9
|
import { spawn } from "node:child_process";
|
|
10
|
-
import {
|
|
10
|
+
import { createInterface } from "node:readline/promises";
|
|
11
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
11
12
|
import { join, resolve } from "node:path";
|
|
13
|
+
import { runAudit, secretShaped, slug, toMarkdown } from "@bigsteele/ai-audit";
|
|
12
14
|
import { extractRecords, score, showTheMath } from "./check.js";
|
|
13
15
|
import { loadPrompt } from "./index.js";
|
|
16
|
+
const WARNING = `Before you run The Big Sean, know what it is.
|
|
17
|
+
This is a large scan, not a quick check. Claude will read everything in this repository
|
|
18
|
+
it can reach, spawn multiple sub-agents against the codebase, probe the live system
|
|
19
|
+
read-only where your credentials allow, and write a long report: 140 graded checks with
|
|
20
|
+
evidence. Expect a long session and a lot of tokens. It changes nothing: no edits, no
|
|
21
|
+
commits, no deploys, no messages, no spending.`;
|
|
14
22
|
const HELP = `The Big Sean — the Launch Report Card. Big Steele × LaSean Pickens.
|
|
15
23
|
|
|
16
24
|
big-sean [dir] drop THE-BIG-SEAN.md into the repo (default: here)
|
|
17
25
|
big-sean --stdout print the protocol
|
|
18
|
-
big-sean --run [dir] open claude with the protocol as the opening prompt
|
|
26
|
+
big-sean --run [dir] open claude with the protocol as the opening prompt (asks first; --yes skips)
|
|
19
27
|
big-sean --check [file] re-score a report's grade.json and show the math
|
|
20
28
|
(default: .planning/launch-audit/grade.json)`;
|
|
21
29
|
export async function main(argv, log = console.log, err = console.error) {
|
|
22
30
|
let dir = ".";
|
|
23
31
|
let mode = "write";
|
|
24
32
|
let checkTarget = null;
|
|
33
|
+
let yes = false;
|
|
25
34
|
for (let i = 0; i < argv.length; i++) {
|
|
26
35
|
const a = argv[i];
|
|
27
36
|
if (a === "--stdout")
|
|
28
37
|
mode = "stdout";
|
|
29
38
|
else if (a === "--run")
|
|
30
39
|
mode = "run";
|
|
40
|
+
else if (a === "--yes" || a === "-y")
|
|
41
|
+
yes = true;
|
|
31
42
|
else if (a === "--check") {
|
|
32
43
|
mode = "check";
|
|
33
44
|
const next = argv[i + 1];
|
|
@@ -55,6 +66,11 @@ export async function main(argv, log = console.log, err = console.error) {
|
|
|
55
66
|
}
|
|
56
67
|
const res = score(extractRecords(raw));
|
|
57
68
|
log(showTheMath(res));
|
|
69
|
+
const ai = await aiReadinessLine(resolve(file, ".."));
|
|
70
|
+
if (ai)
|
|
71
|
+
log(ai);
|
|
72
|
+
log("");
|
|
73
|
+
log("Send the card in for a written read of the three fixes that come first: bigsteele.com/scan");
|
|
58
74
|
if (!res.ok)
|
|
59
75
|
return 1;
|
|
60
76
|
return res.gate.status === "GATES CLEAR" ? 0 : 2;
|
|
@@ -64,7 +80,24 @@ export async function main(argv, log = console.log, err = console.error) {
|
|
|
64
80
|
log(prompt);
|
|
65
81
|
return 0;
|
|
66
82
|
}
|
|
83
|
+
// Step 0 of the protocol: the AI Audit runs here, deterministically, so the
|
|
84
|
+
// agent starts with its files as evidence. Read-only; never opens an env file.
|
|
85
|
+
await runAiAudit(root, log, err);
|
|
67
86
|
if (mode === "run") {
|
|
87
|
+
log(WARNING);
|
|
88
|
+
if (!yes) {
|
|
89
|
+
if (!process.stdin.isTTY) {
|
|
90
|
+
err(`No terminal to confirm in. Re-run with --yes when you are ready for a session that size.`);
|
|
91
|
+
return 1;
|
|
92
|
+
}
|
|
93
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
94
|
+
const answer = (await rl.question("Run it now? [y/N] ")).trim().toLowerCase();
|
|
95
|
+
rl.close();
|
|
96
|
+
if (answer !== "y" && answer !== "yes") {
|
|
97
|
+
log(`Not started. The protocol is unchanged; run big-sean --run when you are ready.`);
|
|
98
|
+
return 0;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
68
101
|
log(`The Big Sean: opening claude with the Launch Report Card. Read-only audit; it changes nothing.`);
|
|
69
102
|
const child = spawn("claude", [prompt], { cwd: root, stdio: "inherit" });
|
|
70
103
|
return await new Promise((resolvePromise) => {
|
|
@@ -77,14 +110,53 @@ export async function main(argv, log = console.log, err = console.error) {
|
|
|
77
110
|
}
|
|
78
111
|
return writeProtocol(root, log);
|
|
79
112
|
}
|
|
113
|
+
async function runAiAudit(root, log, err) {
|
|
114
|
+
try {
|
|
115
|
+
const audit = await runAudit(root);
|
|
116
|
+
const hit = secretShaped(audit);
|
|
117
|
+
if (hit) {
|
|
118
|
+
err(`AI Audit not written: its output matched a credential shape (${hit}). A secret is committed in this repository; that is the first finding.`);
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
const dir = join(root, ".planning", "launch-audit");
|
|
122
|
+
await mkdir(dir, { recursive: true });
|
|
123
|
+
const base = `ai-audit-${slug(audit.app)}`;
|
|
124
|
+
await writeFile(join(dir, `${base}.md`), toMarkdown(audit), "utf8");
|
|
125
|
+
await writeFile(join(dir, `${base}.json`), JSON.stringify(audit, null, 2) + "\n", "utf8");
|
|
126
|
+
const sc = audit.score;
|
|
127
|
+
log(`AI Audit: ${audit.app} ${sc.total} / 100 ${sc.grade} level ${sc.level.n} ${sc.level.name} → ${join(".planning", "launch-audit", base + ".md")}`);
|
|
128
|
+
}
|
|
129
|
+
catch (e) {
|
|
130
|
+
err(`AI Audit did not run (${e instanceof Error ? e.message : String(e)}). The protocol tells the agent to run it itself.`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/** The AI readiness line for --check, when Step 0's json is beside grade.json. */
|
|
134
|
+
async function aiReadinessLine(reportDir) {
|
|
135
|
+
try {
|
|
136
|
+
const { readdir } = await import("node:fs/promises");
|
|
137
|
+
const files = (await readdir(reportDir)).filter((f) => /^ai-audit-.*\.json$/.test(f));
|
|
138
|
+
if (files.length === 0)
|
|
139
|
+
return null;
|
|
140
|
+
const a = JSON.parse(await readFile(join(reportDir, files[0]), "utf8"));
|
|
141
|
+
if (!a.score)
|
|
142
|
+
return null;
|
|
143
|
+
return `AI readiness (Big Steele AI Audit): ${a.score.total} / 100 (${a.score.grade}, level ${a.score.level?.n} ${a.score.level?.name})`;
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
80
149
|
async function writeProtocol(root, log) {
|
|
81
150
|
const file = join(root, "THE-BIG-SEAN.md");
|
|
82
151
|
await writeFile(file, await loadPrompt(), "utf8");
|
|
83
152
|
log(`Wrote ${file}`);
|
|
84
153
|
log(``);
|
|
154
|
+
log(WARNING);
|
|
155
|
+
log(``);
|
|
85
156
|
log(`Next: open Claude Code in this folder and paste the whole file in (or run big-sean --run).`);
|
|
86
|
-
log(`When it finishes,
|
|
87
|
-
log(`
|
|
157
|
+
log(`When it finishes, "The Big Sean - <App Name>.md" and .html are at the repo root and the card opens itself.`);
|
|
158
|
+
log(`Then prove the number: big-sean --check`);
|
|
159
|
+
log(`Then send it in for a written read of the three fixes that come first: bigsteele.com/scan`);
|
|
88
160
|
return 0;
|
|
89
161
|
}
|
|
90
162
|
const entry = process.argv[1] ?? "";
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bigsteele/the-big-sean",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "The Big Sean: the Launch Report Card, by Big Steele and LaSean Pickens.
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "The Big Sean: the Launch Report Card, by Big Steele and LaSean Pickens. Runs the Big Steele AI Audit, drops a 140-check launch-readiness and autonomy audit protocol into a repo for Claude Code to run, names the deliverable after the app, and independently re-computes any report's math from its grade.json so the number on the card can be proven, not trusted.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "UNLICENSED",
|
|
7
7
|
"author": "Big Steele (Together Inc.) and LaSean Pickens",
|
|
@@ -35,5 +35,8 @@
|
|
|
35
35
|
},
|
|
36
36
|
"publishConfig": {
|
|
37
37
|
"access": "public"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@bigsteele/ai-audit": "^0.2.2"
|
|
38
41
|
}
|
|
39
42
|
}
|
package/prompt/THE-BIG-SEAN.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
A collaboration between Big Steele and LaSean Pickens.
|
|
4
4
|
|
|
5
|
+
BEFORE YOU RUN THIS, KNOW WHAT IT IS. This is a large scan, not a quick check. The agent will read everything in this repository it can reach, spawn multiple sub-agents against the codebase to inventory routes, tables, functions, crons, and dependencies, probe the live system read-only where credentials on this machine allow it, and then write a long report with one hundred forty graded checks and their evidence. Expect it to run for a long time and to use a lot of context and tokens. It changes nothing: no edits, no commits, no deploys, no messages, no spending. If you are not ready for a session that size, stop here and come back when you are.
|
|
6
|
+
|
|
5
7
|
Paste this whole thing into Claude Code (or Claude Cowork) inside your app's folder. Type nothing else. When it finishes, your report card opens by itself.
|
|
6
8
|
|
|
7
9
|
You are a senior software auditor. Grade this app on two things: is it ready for beta launch (reliable, safe, secure, usable, able to take load) and is it autonomous (able to run the business without the owner or the customer's staff after onboarding, inside explicit policies). Both are primary. Neither is optional. Do not fix anything. Do not change anything. Do not ask me questions. Discover everything yourself, grade it, and give me a full report card with a score out of 100, a score for every category, why each category scored what it scored, exactly what to change, and the order to do it in.
|
|
@@ -11,6 +13,9 @@ Rules you never break:
|
|
|
11
13
|
• Reading a file is not proof it works. A migration in the repo is not proof it is applied. A cron in a config is not proof it fires. A test file is not proof the test runs. A "done" checkbox in a planning doc is not proof of anything.
|
|
12
14
|
• Never print a secret, a token, a password, or a customer's personal data anywhere.
|
|
13
15
|
• Never say "100% bug-free" or "production ready." Say what you verified and what you did not.
|
|
16
|
+
Step 0. The AI Audit (already run for you, or run it now)
|
|
17
|
+
If .planning/launch-audit/ai-audit-<app>.md and ai-audit-<app>.json exist, big-sean ran the Big Steele AI Audit before handing you this protocol. Read both. They are evidence, cited like any other: use their findings for the checks about surfaces, model calls, tools, loops, reach, and failure visibility in Part B, and cite the file and the criterion. If they are missing, run `npx @bigsteele/ai-audit --repo . --out .planning/launch-audit` yourself (it is read-only, writes only those two files, and never opens an env file), then read them. The AI Audit's score, grade, and level go on the summary card as the AI readiness line. It replaces no check: an agent-runnable architecture still has to pass every gate.
|
|
18
|
+
|
|
14
19
|
Step 1. Find out what you can reach (no setup from me)
|
|
15
20
|
Look for what is already on this machine and use it read-only. Do not ask me for anything.
|
|
16
21
|
• Env files (.env, .env.local, .env.production, .env.example) for the names of services in use and any database URL, Supabase URL and keys, provider keys. Use keys only for read operations.
|
|
@@ -303,7 +308,7 @@ Score math (compute it, do not eyeball it):
|
|
|
303
308
|
• If any check anywhere is UNKNOWN, the headline shows the verified score with the word INCOMPLETE next to it and the ceiling beside it. Never show a bare number over a report that has unknowns.
|
|
304
309
|
Prove the number. Write score.mjs into the report folder. It reads grade.json, rejects any status outside PASS, FAIL, UNKNOWN, N/A, rejects any PASS or FAIL that has zero evidence entries, rejects any N/A without a reason, rejects any check without a written test, and then computes every number on the page. The HTML reads the computed output; nothing is typed by hand. Run node score.mjs and paste its output into the report under the heading "Show the math": the weight table, the sums, the division, per category and overall. If the validator rejects the file, fix the grade.json, not the validator.
|
|
305
310
|
Step 6. Write the report card
|
|
306
|
-
Create .planning/launch-audit/REPORT-CARD.html (single file, inline CSS and JS, opens from disk, no external requests) and REPORT-CARD.md with identical content. Build both from a grade.json you write first, so every number is computed. Structure, in this order:
|
|
311
|
+
Create .planning/launch-audit/REPORT-CARD.html (single file, inline CSS and JS, opens from disk, no external requests) and REPORT-CARD.md with identical content. Then copy both to the repository root as "The Big Sean - <App Name>.html" and "The Big Sean - <App Name>.md", where <App Name> is the product's real name (the brand a customer would recognize, from the manifest, the README, or the UI; the folder name only if nothing better exists). Those two root files are the deliverable a person shares; the report folder keeps the working artifacts. Build both from a grade.json you write first, so every number is computed. Structure, in this order:
|
|
307
312
|
• Headline: verified score and band, ceiling, coverage, gate status (LAUNCH BLOCKED, NOT VERIFIED FOR LAUNCH, or GATES CLEAR), the launch-readiness score and the autonomy score side by side, the unattended verdict with the duty counts, the one-sentence verdict, the date, the commit, the sources reached live and not reached.
|
|
308
313
|
• The thirty-five category cards (L01 to L15, then D01 to D20). Each card shows: the category score and band; the four checks with PASS, FAIL, UNKNOWN, or N/A and their weight; Why you scored this (one plain-language paragraph per check that is not PASS, citing the file and line, the query, or the page); What this costs you (what happens to a customer, to your money, or to your reputation if you launch like this); How to fix it (the exact change, where, and the test that proves it); How to verify it yourself (a command or a click path).
|
|
309
314
|
• Your path to 100: every check that is not PASS, across all categories, in the order to do them. Blockers first (weight-5 FAILs), then the weight-5 UNKNOWNs to prove, then everything else in dependency order. Each with the change, the location, the test, and a rough effort (hours, one day, multi-day).
|
|
@@ -328,17 +333,28 @@ Create .planning/launch-audit/REPORT-CARD.html (single file, inline CSS and JS,
|
|
|
328
333
|
• The full WORKFLOW-COVERAGE table: every duty, plane, trigger, what runs it, status, evidence, and what makes it unattended.
|
|
329
334
|
• The simulated day, week, and month logs: every step, who or what performed it, the receipt, and every point a human was needed.
|
|
330
335
|
• Every finding, all of them, not the ones that move the needle: ID, category, severity, check ID, file and line or query, expected, observed, impact, fix, retest.
|
|
336
|
+
• What to do with this (the last section of both files, verbatim, after everything else):
|
|
337
|
+
## What to do with this
|
|
338
|
+
|
|
339
|
+
This report card is the diagnosis. The build is the work.
|
|
340
|
+
|
|
341
|
+
Big Steele and LaSean Pickens wrote this standard because they build what it grades: the tenant isolation, the money paths, the jobs that recover, the autonomy that runs a business inside explicit policies. If you want the people who wrote the rubric to read your card and tell you which three fixes come first, send it in:
|
|
342
|
+
|
|
343
|
+
**bigsteele.com/scan** Upload this file. You get a written read back. No call required to get it, and no pitch inside it.
|
|
344
|
+
|
|
345
|
+
If the read turns into a build, it is the first mile of that engagement. The path to 100 above is the plan; the read tells you where to start.
|
|
331
346
|
Minimums, or the report is not done: every one of the one hundred forty checks has a written test and at least one evidence entry or an UNKNOWN reason; every table and every route appears in the inventories; the findings list contains every FAIL and every UNKNOWN as its own row. If the app is large, the report is long. That is correct.
|
|
332
347
|
Make the HTML readable by a non-engineer at the top and complete for an engineer underneath: a score dial, category cards with color by band, filters by category and severity and status, expandable evidence, and a button that downloads grade.json. Put the summary card from Step 7 at the very top of the page so the first screen answers the question.
|
|
333
348
|
Step 7. Hand it to me
|
|
334
349
|
Do not make me look for anything.
|
|
335
|
-
• If this session has an artifact tool or a file-presenting tool (Claude Cowork and claude.ai do), present
|
|
350
|
+
• If this session has an artifact tool or a file-presenting tool (Claude Cowork and claude.ai do), present "The Big Sean - <App Name>.html" as an artifact so it renders right here in the conversation with a clickable card.
|
|
336
351
|
• Whether or not that worked, open the report in the default browser automatically: start "" "<full path>" on Windows, open "<full path>" on macOS, xdg-open "<full path>" on Linux. Then print the clickable link on its own line: file:///<full path to REPORT-CARD.html>.
|
|
337
352
|
• Under the link, print the summary card in chat:
|
|
338
353
|
LAUNCH REPORT CARD
|
|
339
354
|
Score: <verified> / 100 (<band>) <INCOMPLETE if any unknowns> Ceiling: <ceiling> Proven either way: <coverage>%
|
|
340
355
|
Checks: <n> PASS, <n> FAIL, <n> UNKNOWN, <n> N/A of 140 Findings: <count> Evidence entries: <count>
|
|
341
356
|
Launch readiness (L01 to L15): <score> Autonomy (D01 to D20): <score> Combined: <score>
|
|
357
|
+
AI readiness (Big Steele AI Audit): <score> / 100 (<grade>, level <n> <name>)
|
|
342
358
|
Gates: <LAUNCH BLOCKED by ... | NOT VERIFIED FOR LAUNCH: ... | GATES CLEAR>
|
|
343
359
|
Runs unattended today: <YES | NO | UNKNOWN> Duties automated: <n> of <total> (<n> of <software-executable>) Human touches per week: <n> (<removable> removable, <partial> partial, <by design> by design)
|
|
344
360
|
Live sources reached: <list> Not reached: <list>
|
|
@@ -349,5 +365,7 @@ Top 5 problems:
|
|
|
349
365
|
4. ...
|
|
350
366
|
5. ...
|
|
351
367
|
Next action: <the first item on the path to 100>
|
|
368
|
+
Your report card: <full path to "The Big Sean - <App Name>.md">
|
|
369
|
+
Send it in for a written read of the three fixes that come first: bigsteele.com/scan
|
|
352
370
|
Nothing else. No offer to fix anything. This run changed nothing.
|
|
353
371
|
|