geneseed 3.8.0 → 3.10.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/CHANGELOG.md +71 -1
- package/DESIGN.md +13 -10
- package/QUICKSTART.md +1 -1
- package/README.md +31 -32
- package/SETUP.md +7 -42
- package/SHIPPED.md +4 -4
- package/adapters/bob/README.md +17 -1
- package/adapters/openclaude/README.md +1 -1
- package/adapters/opencode/GLOBAL-HARNESS-SPEC.md +1 -1
- package/adapters/opencode/README.md +3 -3
- package/adapters/opencode/plugins/geneseed-context.js +78 -8
- package/adapters/opencode/plugins/geneseed-guard.js +9 -9
- package/adapters/opencode/plugins/geneseed-workflow.js +1 -1
- package/adapters/opencode/workflows/_runtime.js +2 -2
- package/adapters/opencode/workflows/dispatch.js +1 -1
- package/bin/geneseed-hook.mjs +1 -1
- package/docs/candidate-hosts.md +12 -5
- package/docs/extending.md +72 -40
- package/docs/token-footprint.md +26 -21
- package/docs/web/claude-hooks.md +1 -1
- package/docs/web/collaboration.md +1 -1
- package/docs/web/exclusions.md +0 -1
- package/docs/web/footprint.md +1 -1
- package/docs/web/harnesses.md +14 -14
- package/docs/web/install-quick.md +1 -1
- package/docs/web/plugin-guard.md +2 -2
- package/docs/web/rules.md +1 -1
- package/docs/web/themes-author.md +2 -2
- package/docs/web-ui.md +2 -2
- package/harness.config.json +1 -1
- package/js/README.md +8 -7
- package/js/build/driver.mjs +26 -95
- package/js/build/emit-claude.mjs +76 -81
- package/js/build/generate.mjs +0 -1
- package/js/build/render.mjs +10 -3
- package/js/build/source.mjs +105 -1
- package/js/build/stubs.mjs +25 -4
- package/js/cli-table.json +8 -8
- package/js/hosts/hooks.mjs +91 -59
- package/js/hosts/hosts.mjs +5 -21
- package/js/hosts/installs.mjs +4 -6
- package/js/hosts/mcp.mjs +3 -13
- package/js/hosts/native.mjs +28 -51
- package/js/hosts/opencode.mjs +1 -1
- package/js/hosts/settings.mjs +4 -78
- package/js/inspect/checks-authoring.mjs +153 -117
- package/js/inspect/checks-repo.mjs +45 -1
- package/js/inspect/diff.mjs +11 -3
- package/js/inspect/doctor.mjs +3 -3
- package/js/inspect/excludes.mjs +0 -4
- package/js/inspect/inventory.mjs +1 -2
- package/js/inspect/status.mjs +4 -4
- package/js/maintain/migrate.mjs +5 -5
- package/js/maintain/setup.mjs +3 -5
- package/js/maintain/uninstall.mjs +8 -42
- package/js/ui/tui.mjs +1 -1
- package/js/web/actions.mjs +4 -5
- package/js/web/api.mjs +10 -5
- package/package.json +1 -2
- package/registry.json +7 -0
- package/src/AGENT.md.tmpl +86 -65
- package/src/agents/_template.md +3 -3
- package/src/agents/advocate.md +3 -3
- package/src/agents/architect.md +3 -3
- package/src/agents/developer.md +4 -4
- package/src/agents/docs.md +3 -3
- package/src/agents/empiricist.md +4 -4
- package/src/agents/explorer.md +4 -4
- package/src/agents/framer.md +3 -3
- package/src/agents/historian.md +3 -3
- package/src/agents/operator.md +3 -3
- package/src/agents/pragmatist.md +3 -3
- package/src/agents/researcher.md +7 -7
- package/src/agents/reviewer.md +3 -3
- package/src/agents/security.md +3 -3
- package/src/agents/skeptic.md +3 -3
- package/src/agents/steward.md +3 -3
- package/src/agents/tester.md +3 -3
- package/src/agents/user-advocate.md +3 -3
- package/src/agents/visionary.md +3 -3
- package/src/doctrines/README.md +4 -3
- package/src/doctrines/comms.md +4 -4
- package/src/doctrines/craft.md +20 -20
- package/src/doctrines/ops.md +19 -19
- package/src/doctrines/process.md +20 -20
- package/src/doctrines/rigor.md +22 -22
- package/src/laws/universal.md +26 -44
- package/src/memory/README.md +3 -3
- package/src/modes/foreman.md +1 -1
- package/src/notebook/README.md +1 -1
- package/src/ontology/universal.md +8 -10
- package/src/postures/artisan.md +2 -2
- package/src/skills/_self-improvement.md +4 -4
- package/src/skills/_template.md +1 -1
- package/src/skills/brainstorm.md +3 -3
- package/src/skills/bruno-collection-generator.md +6 -6
- package/src/skills/bruno-test-writer.md +5 -5
- package/src/skills/ci-fix.md +4 -4
- package/src/skills/commit.md +11 -10
- package/src/skills/consolidate-memory.md +4 -4
- package/src/skills/council.md +2 -2
- package/src/skills/daydream/SKILL.md +10 -3
- package/src/skills/daydream/VENDOR.md +10 -2
- package/src/skills/daydream/instructions.md +2 -2
- package/src/skills/debug.md +4 -4
- package/src/skills/deps-audit.md +3 -3
- package/src/skills/develop.md +7 -7
- package/src/skills/document-project.md +6 -6
- package/src/skills/explain-changes/SKILL.md +69 -0
- package/src/skills/explain-changes/VENDOR.md +20 -0
- package/src/skills/explain-changes/scripts/render_changes.mjs +558 -0
- package/src/skills/forge-mcp.md +4 -4
- package/src/skills/fresh-eyes.md +4 -4
- package/src/skills/frontend-design.md +1 -1
- package/src/skills/geneseed.md +4 -4
- package/src/skills/git-archaeology.md +5 -5
- package/src/skills/git-rescue.md +7 -7
- package/src/skills/handoff.md +3 -3
- package/src/skills/ingest.md +5 -5
- package/src/skills/migrate.md +8 -8
- package/src/skills/parallel-agents.md +2 -2
- package/src/skills/pipeline.md +2 -2
- package/src/skills/plan.md +3 -3
- package/src/skills/ponytail.md +2 -2
- package/src/skills/profile.md +2 -2
- package/src/skills/prose.md +1 -1
- package/src/skills/prototype.md +1 -1
- package/src/skills/react-view-transitions/SKILL.md +1 -1
- package/src/skills/react-view-transitions/VENDOR.md +7 -2
- package/src/skills/refactor.md +3 -3
- package/src/skills/release.md +5 -5
- package/src/skills/repo-map.md +4 -4
- package/src/skills/research.md +9 -9
- package/src/skills/review-response.md +4 -4
- package/src/skills/rule.md +3 -3
- package/src/skills/security-audit.md +5 -5
- package/src/skills/ship.md +5 -5
- package/src/skills/skill-forge.md +4 -4
- package/src/skills/token-report/SKILL.md +2 -3
- package/src/skills/token-report/VENDOR.md +2 -3
- package/src/skills/token-report/scripts/token_report.mjs +7 -121
- package/src/skills/wiki.md +5 -5
- package/src/skills/workflow.md +3 -4
- package/src/skills/worktree.md +4 -4
- package/themes/_TEMPLATE.json +37 -39
- package/themes/biker.json +37 -39
- package/themes/commentator.json +37 -39
- package/themes/cyberpunk.json +37 -39
- package/themes/gamer.json +37 -39
- package/themes/imperial.json +37 -39
- package/themes/joker.json +37 -39
- package/themes/marvin.json +37 -39
- package/themes/mean.json +37 -39
- package/themes/military.json +37 -39
- package/themes/neutral.json +37 -39
- package/themes/pirate.json +37 -39
- package/themes/sports.json +37 -39
- package/themes/verstappen.json +37 -39
- package/themes/wizard.json +37 -39
- package/web/dist/assets/Activity-BjVp522q.js +1 -0
- package/web/dist/assets/ActivityDetail-8ep1bspW.js +1 -0
- package/web/dist/assets/Dashboard-OkC_PCH6.js +2 -0
- package/web/dist/assets/{Docs-DrJNDPwI.js → Docs-CKPWz00o.js} +2 -2
- package/web/dist/assets/FilterInput-CVyqmYWM.js +1 -0
- package/web/dist/assets/GreenhouseView-D0cbCJ5m.js +2 -0
- package/web/dist/assets/Installs-BtGGdoTt.js +2 -0
- package/web/dist/assets/JournalView-Ckl4dmzR.js +1 -0
- package/web/dist/assets/Laws-CLpdRRk8.js +3 -0
- package/web/dist/assets/Library-wPPuKQrI.js +1 -0
- package/web/dist/assets/{Markdown-BQAvN8xx.js → Markdown-CkFyfgNf.js} +14 -14
- package/web/dist/assets/OperatorHudView-CiAkAkQL.js +2 -0
- package/web/dist/assets/Personal-D8CnDo9v.js +1 -0
- package/web/dist/assets/Tabs-B4HNrrCs.js +1 -0
- package/web/dist/assets/drawable-BiwaOo6x.js +1 -0
- package/web/dist/assets/geist-mono-latin-400-normal-DTRLJnHl.woff2 +0 -0
- package/web/dist/assets/geist-mono-latin-500-normal-YINYabwD.woff2 +0 -0
- package/web/dist/assets/index-C1yil5j1.js +2 -0
- package/web/dist/assets/index-CDPDk2vj.css +1 -0
- package/web/dist/assets/{react-DbkvxWG5.js → react-B9Z_tXRV.js} +1 -1
- package/web/dist/assets/sections-GalMS0Zv.js +1 -0
- package/web/dist/assets/usePoll-O0sJEw1Y.js +1 -0
- package/web/dist/index.html +4 -4
- package/web/src/pages/Laws.jsx +616 -361
- package/adapters/copilot/README.md +0 -105
- package/web/dist/assets/Activity-CH-7cPIM.js +0 -1
- package/web/dist/assets/ActivityDetail-DZvz0xS5.js +0 -1
- package/web/dist/assets/CatalogRow-DftXpZHY.js +0 -1
- package/web/dist/assets/Diff-DvwdG0L9.js +0 -2
- package/web/dist/assets/Doctor-OTmwmYZg.js +0 -1
- package/web/dist/assets/FilterInput-BakJLvaV.js +0 -1
- package/web/dist/assets/GreenhouseView-XxrAdriX.js +0 -2
- package/web/dist/assets/Harness-C_LYNk5c.js +0 -1
- package/web/dist/assets/JournalView-BcuyeEaR.js +0 -1
- package/web/dist/assets/Laws-CWHrTKY4.js +0 -3
- package/web/dist/assets/Library-CA9IHghn.js +0 -1
- package/web/dist/assets/OperatorHudView-BMRY1Tt4.js +0 -2
- package/web/dist/assets/Profile-wceET1JY.js +0 -1
- package/web/dist/assets/Rules-BEXvY4Tx.js +0 -1
- package/web/dist/assets/Settings-DS2zF0Ez.js +0 -1
- package/web/dist/assets/Skills-DahlOJuI.js +0 -1
- package/web/dist/assets/StatusBadge-Cg6j-NJL.js +0 -1
- package/web/dist/assets/activity-iWaWVtsR.js +0 -1
- package/web/dist/assets/audiowide-latin-400-normal-6GFCX7ni.woff2 +0 -0
- package/web/dist/assets/drawable-BTHjTzF7.js +0 -1
- package/web/dist/assets/geist-mono-latin-400-normal-DKaoCDn5.woff2 +0 -0
- package/web/dist/assets/geist-mono-latin-500-normal-C3sF8Y1B.woff2 +0 -0
- package/web/dist/assets/geist-mono-latin-600-normal-BHzjB6_C.woff2 +0 -0
- package/web/dist/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
- package/web/dist/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
- package/web/dist/assets/ibm-plex-mono-latin-600-normal-BgSNZQsw.woff2 +0 -0
- package/web/dist/assets/ibm-plex-serif-latin-400-normal-BIGslYFI.woff2 +0 -0
- package/web/dist/assets/ibm-plex-serif-latin-500-normal-REKAfBVG.woff2 +0 -0
- package/web/dist/assets/ibm-plex-serif-latin-600-normal-DAxitmSu.woff2 +0 -0
- package/web/dist/assets/index-AN5Emnrg.js +0 -2
- package/web/dist/assets/index-Ruh93A3A.css +0 -1
- package/web/dist/assets/inter-latin-400-normal-C38fXH4l.woff2 +0 -0
- package/web/dist/assets/inter-latin-500-normal-Cerq10X2.woff2 +0 -0
- package/web/dist/assets/inter-latin-600-normal-LgqL8muc.woff2 +0 -0
- package/web/dist/assets/inter-latin-700-normal-Yt3aPRUw.woff2 +0 -0
- package/web/dist/assets/lawCats-Btjp3Hk_.js +0 -1
- package/web/dist/assets/oswald-latin-400-normal-BAFo8sP8.woff2 +0 -0
- package/web/dist/assets/oswald-latin-500-normal-B-eyT0Dw.woff2 +0 -0
- package/web/dist/assets/oswald-latin-600-normal-plFmSr5g.woff2 +0 -0
- package/web/dist/assets/oswald-latin-700-normal-vy6hmKSr.woff2 +0 -0
- package/web/dist/assets/poppins-latin-400-normal-cpxAROuN.woff2 +0 -0
- package/web/dist/assets/poppins-latin-500-normal-C8OXljZJ.woff2 +0 -0
- package/web/dist/assets/poppins-latin-600-normal-zEkxB9Mr.woff2 +0 -0
- package/web/dist/assets/poppins-latin-700-normal-Qrb0O0WB.woff2 +0 -0
- package/web/dist/assets/rolldown-runtime-CbXtAM7H.js +0 -1
|
@@ -13,9 +13,6 @@
|
|
|
13
13
|
* storage/ JSON files when no DB exists)
|
|
14
14
|
* openclaude OpenClaude ~/.openclaude/projects/<slug>/<session>.jsonl exact usage
|
|
15
15
|
* (Claude Code fork; $OPENCLAUDE_CONFIG_DIR honoured)
|
|
16
|
-
* copilot GitHub Copilot ~/.copilot/history-session-state/ best effort
|
|
17
|
-
* (schema undocumented; token fields harvested
|
|
18
|
-
* generically, estimates otherwise)
|
|
19
16
|
*
|
|
20
17
|
* The report distinguishes two kinds of numbers:
|
|
21
18
|
*
|
|
@@ -333,18 +330,6 @@ function listDir(p) {
|
|
|
333
330
|
try { return readdirSync(p).map((n) => path.join(p, n)); } catch { return []; }
|
|
334
331
|
}
|
|
335
332
|
|
|
336
|
-
/** Every file at any depth under `root` whose basename matches `pred`. */
|
|
337
|
-
function walkFiles(root, pred, out = []) {
|
|
338
|
-
let entries;
|
|
339
|
-
try { entries = readdirSync(root, { withFileTypes: true }); } catch { return out; }
|
|
340
|
-
for (const e of entries) {
|
|
341
|
-
const full = path.join(root, e.name);
|
|
342
|
-
if (e.isDirectory()) walkFiles(full, pred, out);
|
|
343
|
-
else if (pred(e.name)) out.push(full);
|
|
344
|
-
}
|
|
345
|
-
return out;
|
|
346
|
-
}
|
|
347
|
-
|
|
348
333
|
/** Every DIRECTORY at any depth under `root` named `name` — `Path.rglob("<name>")`. */
|
|
349
334
|
function walkDirsNamed(root, name, out = []) {
|
|
350
335
|
let entries;
|
|
@@ -905,100 +890,6 @@ function opencodeParse(sid, files) {
|
|
|
905
890
|
return data;
|
|
906
891
|
}
|
|
907
892
|
|
|
908
|
-
// ---------------------------------------------------------------------------
|
|
909
|
-
// Host: GitHub Copilot CLI (best effort — schema undocumented)
|
|
910
|
-
// ---------------------------------------------------------------------------
|
|
911
|
-
|
|
912
|
-
function copilotRoot() {
|
|
913
|
-
const root = process.env.COPILOT_CONFIG_DIR || path.join(homedir(), '.copilot');
|
|
914
|
-
for (const sub of ['history-session-state', 'session-state', 'sessions']) {
|
|
915
|
-
if (isDir(path.join(root, sub))) return path.join(root, sub);
|
|
916
|
-
}
|
|
917
|
-
return null;
|
|
918
|
-
}
|
|
919
|
-
|
|
920
|
-
/** Recursively collect numeric fields whose key mentions tokens. */
|
|
921
|
-
function harvestTokens(obj, sink) {
|
|
922
|
-
if (isDict(obj)) {
|
|
923
|
-
for (const [k, v] of Object.entries(obj)) {
|
|
924
|
-
const lk = k.toLowerCase();
|
|
925
|
-
// `isinstance(v, (int, float))` — and in Python a BOOL *is* an int, so a
|
|
926
|
-
// `"hasTokens": true` adds 1. Reproduced rather than tidied away.
|
|
927
|
-
if ((typeof v === 'number' || typeof v === 'boolean') && lk.includes('token')) {
|
|
928
|
-
sink.add(lk, typeof v === 'boolean' ? (v ? 1 : 0) : v);
|
|
929
|
-
} else {
|
|
930
|
-
harvestTokens(v, sink);
|
|
931
|
-
}
|
|
932
|
-
}
|
|
933
|
-
} else if (Array.isArray(obj)) {
|
|
934
|
-
for (const v of obj) harvestTokens(v, sink);
|
|
935
|
-
}
|
|
936
|
-
}
|
|
937
|
-
|
|
938
|
-
/** Recursively estimate message-ish content by role. */
|
|
939
|
-
function harvestText(obj, sink, depth = 0) {
|
|
940
|
-
if (depth > 12) return;
|
|
941
|
-
if (isDict(obj)) {
|
|
942
|
-
const roleRaw = getOr(obj, 'role', undefined);
|
|
943
|
-
const role = typeof roleRaw === 'string' ? roleRaw : null;
|
|
944
|
-
const body = role ? getOr(obj, 'content', undefined) : null;
|
|
945
|
-
if (role && body !== null && body !== undefined) {
|
|
946
|
-
const cat = { user: 'User messages', assistant: 'Assistant replies',
|
|
947
|
-
tool: 'Tool result · (unattributed)' }[role] ?? `${role} messages`;
|
|
948
|
-
sink.add(cat, textLen(body));
|
|
949
|
-
return;
|
|
950
|
-
}
|
|
951
|
-
for (const v of Object.values(obj)) harvestText(v, sink, depth + 1);
|
|
952
|
-
} else if (Array.isArray(obj)) {
|
|
953
|
-
for (const v of obj) harvestText(v, sink, depth + 1);
|
|
954
|
-
}
|
|
955
|
-
}
|
|
956
|
-
|
|
957
|
-
function copilotFind(explicit = null) {
|
|
958
|
-
const root = copilotRoot();
|
|
959
|
-
if (!root) return null;
|
|
960
|
-
if (explicit) return existsSync(explicit) ? explicit : null;
|
|
961
|
-
return newest(listDir(root));
|
|
962
|
-
}
|
|
963
|
-
|
|
964
|
-
function copilotParse(target) {
|
|
965
|
-
const data = new SessionData('copilot', path.basename(target));
|
|
966
|
-
// `rglob("*.json*")` — the basename must CONTAIN ".json", so .json and .jsonl both
|
|
967
|
-
// match and so does anything after them.
|
|
968
|
-
const files = isDir(target)
|
|
969
|
-
? walkFiles(target, (n) => n.includes('.json')).sort(comparePaths)
|
|
970
|
-
: [target];
|
|
971
|
-
const tokens = new Counter();
|
|
972
|
-
for (const f of files.slice(0, 500)) {
|
|
973
|
-
const text = readTextMaybe(f);
|
|
974
|
-
if (text === null) continue;
|
|
975
|
-
const docs = [];
|
|
976
|
-
if (path.extname(f) === '.jsonl') {
|
|
977
|
-
for (const line of pySplitLines(text)) {
|
|
978
|
-
const d = loadJsonMaybe(line);
|
|
979
|
-
if (d !== undefined) docs.push(d);
|
|
980
|
-
}
|
|
981
|
-
} else {
|
|
982
|
-
const d = loadJsonMaybe(text);
|
|
983
|
-
if (d !== undefined) docs.push(d);
|
|
984
|
-
}
|
|
985
|
-
for (const doc of docs) {
|
|
986
|
-
harvestTokens(doc, tokens);
|
|
987
|
-
harvestText(doc, data.cats);
|
|
988
|
-
}
|
|
989
|
-
}
|
|
990
|
-
if (tokens.size) {
|
|
991
|
-
data.notes.push('Copilot session state is undocumented; token-like fields '
|
|
992
|
-
+ 'found (summed, field names as stored): '
|
|
993
|
-
+ tokens.entries().sort((a, b) => pyStrCmp(a[0], b[0]))
|
|
994
|
-
.map(([k, v]) => `${k}=${fmt(v)}`).join(', '));
|
|
995
|
-
} else {
|
|
996
|
-
data.notes.push('Copilot records no recognisable token counts in its session '
|
|
997
|
-
+ 'state — the report below is character-count estimates only.');
|
|
998
|
-
}
|
|
999
|
-
return data;
|
|
1000
|
-
}
|
|
1001
|
-
|
|
1002
893
|
/**
|
|
1003
894
|
* `str.splitlines()` — copy of the rule the generator settles once: Python splits
|
|
1004
895
|
* on a dozen characters JS's `\n` split does not, and drops a trailing empty field.
|
|
@@ -1022,7 +913,6 @@ async function detect(hostArg, transcript, session) {
|
|
|
1022
913
|
bob: () => claudeShapedFind('bob', transcript),
|
|
1023
914
|
openclaude: () => claudeShapedFind('openclaude', transcript),
|
|
1024
915
|
opencode: () => opencodeFind(session),
|
|
1025
|
-
copilot: () => copilotFind(transcript),
|
|
1026
916
|
};
|
|
1027
917
|
if (hostArg) {
|
|
1028
918
|
const found = await finders[hostArg]();
|
|
@@ -1046,25 +936,21 @@ async function detect(hostArg, transcript, session) {
|
|
|
1046
936
|
}
|
|
1047
937
|
if (!best) {
|
|
1048
938
|
sysExit('error: no session data found for any supported host '
|
|
1049
|
-
+ '(claude, bob, openclaude, opencode
|
|
939
|
+
+ '(claude, bob, openclaude, opencode)');
|
|
1050
940
|
}
|
|
1051
941
|
return [best[0], best[1]];
|
|
1052
942
|
}
|
|
1053
943
|
|
|
1054
944
|
async function load(host, found) {
|
|
1055
945
|
if (['claude', 'bob', 'openclaude'].includes(host)) return claudeShapedParse(host, found);
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
return opencodeParse(...payload);
|
|
1061
|
-
}
|
|
1062
|
-
return copilotParse(found);
|
|
946
|
+
const [kind, payload] = found;
|
|
947
|
+
if (kind === 'db') return opencodeDbParse(...payload);
|
|
948
|
+
if (kind === 'nosqlite') return nosqliteData(...payload);
|
|
949
|
+
return opencodeParse(...payload);
|
|
1063
950
|
}
|
|
1064
951
|
|
|
1065
952
|
const HOST_NAMES = {
|
|
1066
953
|
claude: 'Claude Code', bob: 'IBM Bob', openclaude: 'OpenClaude', opencode: 'OpenCode',
|
|
1067
|
-
copilot: 'GitHub Copilot',
|
|
1068
954
|
};
|
|
1069
955
|
|
|
1070
956
|
function render(d, limit, topN) {
|
|
@@ -1195,11 +1081,11 @@ function render(d, limit, topN) {
|
|
|
1195
1081
|
// ---------------------------------------------------------------------------
|
|
1196
1082
|
|
|
1197
1083
|
const PROG = path.basename(process.argv[1] ?? 'token_report.mjs');
|
|
1198
|
-
const HOST_CHOICES = ['claude', 'bob', 'openclaude', 'opencode'
|
|
1084
|
+
const HOST_CHOICES = ['claude', 'bob', 'openclaude', 'opencode'];
|
|
1199
1085
|
const OPTIONS = [
|
|
1200
1086
|
['-h, --help', 'show this help message and exit'],
|
|
1201
1087
|
[`--host {${HOST_CHOICES.join(',')}}`, 'force a host instead of auto-detecting by recency'],
|
|
1202
|
-
['--transcript TRANSCRIPT', 'explicit transcript path (claude/bob/openclaude
|
|
1088
|
+
['--transcript TRANSCRIPT', 'explicit transcript path (claude/bob/openclaude)'],
|
|
1203
1089
|
['--session SESSION', 'explicit session id (opencode)'],
|
|
1204
1090
|
['--limit LIMIT', 'context window limit for % columns (default 200000)'],
|
|
1205
1091
|
['--top TOP', 'how many heaviest single items to list (default 5)'],
|
package/src/skills/wiki.md
CHANGED
|
@@ -15,23 +15,23 @@ machine. Each declared wiki gives you its root `path`, its `entries`, a
|
|
|
15
15
|
|
|
16
16
|
**Consult** (reading):
|
|
17
17
|
1. Start from the wiki's `entries` — the eager ones are already in context;
|
|
18
|
-
open lazy ones only when the task needs them ({{DOCTRINE}}
|
|
18
|
+
open lazy ones only when the task needs them ({{DOCTRINE:context-economy}}).
|
|
19
19
|
2. Navigate by the wiki's own structure: follow wikilinks (`[[Note Name]]`)
|
|
20
20
|
and index notes outward from the entry points rather than globbing the
|
|
21
21
|
whole vault. A targeted filename/heading search is fine; reading the tree
|
|
22
22
|
end-to-end is not.
|
|
23
23
|
3. Treat what you read as the user's knowledge, current as of when it was
|
|
24
24
|
written — verify a fact against the live system before building on it
|
|
25
|
-
(
|
|
25
|
+
({{LAW:verify-before-asserting}}).
|
|
26
26
|
|
|
27
27
|
**Capture** (writing):
|
|
28
28
|
1. **Read the wiki's `conventions` note before your first write** in that
|
|
29
29
|
wiki, and follow it over your own habits — naming, frontmatter, folder
|
|
30
30
|
rules, tag style. Re-skim it if it changed since you last wrote.
|
|
31
31
|
2. Quality bar: durable, reusable, cross-project knowledge — not session
|
|
32
|
-
detail, not task state, and **never secrets** (
|
|
32
|
+
detail, not task state, and **never secrets** ({{LAW:sealed-secrets}}).
|
|
33
33
|
Knowledge that matters only to you belongs in {{MEMORY}}, not the wiki.
|
|
34
|
-
3. Search before creating ({{DOCTRINE}}
|
|
34
|
+
3. Search before creating ({{DOCTRINE:search-before-creating}}): if a note on the topic
|
|
35
35
|
exists, extend or correct it instead of writing a duplicate.
|
|
36
36
|
4. Write the note as a citizen of the graph: wikilinks to the notes it
|
|
37
37
|
relates to (an orphan note is a lost note), frontmatter where the house
|
|
@@ -41,7 +41,7 @@ machine. Each declared wiki gives you its root `path`, its `entries`, a
|
|
|
41
41
|
costs more than an unfiled one.
|
|
42
42
|
6. **Never write under a `protected` folder**, and never restructure the
|
|
43
43
|
wiki itself — moving, renaming, or deleting notes you did not create is
|
|
44
|
-
the user's call (
|
|
44
|
+
the user's call ({{LAW:deletion-is-deliberate}}).
|
|
45
45
|
|
|
46
46
|
**Promote.** When a {{MEMORY}} fact or {{NOTEBOOK}} note hardens into
|
|
47
47
|
knowledge the user would want across projects, capture it into the wiki via
|
package/src/skills/workflow.md
CHANGED
|
@@ -23,7 +23,7 @@ work is worth a crew: a one-file tweak or a question never is.
|
|
|
23
23
|
|---|---|---|---|
|
|
24
24
|
| OpenCode | `workflow` (the `geneseed-workflow` plugin) | **saved only** — `<name>.js` in `.opencode/workflows/` per repo or `<config>/workflows/` global (`GENESEED_WORKFLOWS_DIR` overrides); nothing inline is eval'd | none — call it when the shape fits |
|
|
25
25
|
| Claude Code | `Workflow` (native) | a saved `.claude/workflows/<name>` by `name`, **or** an inline `script` you author | **required** — the tool refuses unless the user opted in for this task ("use a workflow", "ultracode", a skill that says so) |
|
|
26
|
-
| Bob,
|
|
26
|
+
| Bob, OpenClaude | none | — | fall back to [parallel-agents](parallel-agents.md) / [council](council.md) |
|
|
27
27
|
| any, under Orca | Orca orchestration (`orca skills get orchestration`) | tasks, not scripts — each task spec names its target, change, ownership and acceptance | the user asked to supervise or coordinate workers |
|
|
28
28
|
|
|
29
29
|
Both runtimes speak the same primitives — `agent()`, `parallel()`, `pipeline()`,
|
|
@@ -59,8 +59,7 @@ carries the script API — load it before writing one).
|
|
|
59
59
|
before; an inline one has not. Author inline only when no saved shape fits, keep it
|
|
60
60
|
to the primitives, and hold to the host's size guideline unless the user asked for
|
|
61
61
|
more.
|
|
62
|
-
4. **Give every editing agent a write set, and isolate parallel editors** ({{DOCTRINE}}
|
|
63
|
-
process 7). Name in each editing `agent()` prompt the files it may change and have it
|
|
62
|
+
4. **Give every editing agent a write set, and isolate parallel editors** ({{DOCTRINE:one-writer-per-file}}). Name in each editing `agent()` prompt the files it may change and have it
|
|
64
63
|
return the files it did change; overlapping sets run in sequence, not in one
|
|
65
64
|
`parallel()`. Pass `isolation: 'worktree'` to each agent that edits in parallel — both
|
|
66
65
|
runtimes take it; read-only agents need none. After the fan-out, compare the changed
|
|
@@ -81,7 +80,7 @@ carries the script API — load it before writing one).
|
|
|
81
80
|
is a finding about the task, not a reason to loop.
|
|
82
81
|
8. **Exit — carry the conclusion yourself.** The workflow gathers and verifies;
|
|
83
82
|
committing, pushing, merging, or opening anything outward stays with you
|
|
84
|
-
({{DOCTRINE}}
|
|
83
|
+
({{DOCTRINE:consent-before-push}}, {{LAW:deletion-is-deliberate}}). State what the run concluded, what you are
|
|
85
84
|
doing with it, and where the trace lives.
|
|
86
85
|
|
|
87
86
|
## Done when
|
package/src/skills/worktree.md
CHANGED
|
@@ -10,7 +10,7 @@ or rewrite needs a disposable copy, or the user says "worktree", "isolate this",
|
|
|
10
10
|
changes you did not make.
|
|
11
11
|
|
|
12
12
|
## Procedure
|
|
13
|
-
1. **Look before you branch** ({{LAW}}
|
|
13
|
+
1. **Look before you branch** ({{LAW:verify-before-asserting}}). `git status` and `git worktree list`
|
|
14
14
|
first. Uncommitted changes you did not author mean someone else owns this tree —
|
|
15
15
|
never `checkout -b` from it (that moves *their* HEAD onto your branch) and never
|
|
16
16
|
stash or revert it. Note the branch they are on; you will not touch it.
|
|
@@ -23,7 +23,7 @@ changes you did not make.
|
|
|
23
23
|
branch so `git worktree list` reads as a task list.
|
|
24
24
|
3. **Make it runnable.** A worktree shares the repository, not the untracked files:
|
|
25
25
|
install dependencies (`npm ci`, the project's equivalent) or link the ones that are
|
|
26
|
-
large and pure; copy no `.env` — secrets are the user's to place ({{LAW}}
|
|
26
|
+
large and pure; copy no `.env` — secrets are the user's to place ({{LAW:sealed-secrets}}). Run
|
|
27
27
|
the project's checks once in the new tree and read the output before changing
|
|
28
28
|
anything, so a later red is yours.
|
|
29
29
|
4. **Work only in the worktree.** Every edit, test, commit and `doctor`/lint run
|
|
@@ -33,10 +33,10 @@ changes you did not make.
|
|
|
33
33
|
the repo through it; verify with the tool's own status command rather than assume.
|
|
34
34
|
5. **Integrate through the normal gate** — commit via the [commit {{SKILL}}](commit.md),
|
|
35
35
|
ship via [ship](ship.md). A worktree earns no exemption from per-commit and
|
|
36
|
-
per-push consent ({{DOCTRINE}}
|
|
36
|
+
per-push consent ({{DOCTRINE:consent-before-push}}). Expect conflicts with a sibling tree that
|
|
37
37
|
touched the same files; resolve them on the branch, not in the other tree.
|
|
38
38
|
6. **Clean up when the branch is merged or abandoned** — with consent, since removal
|
|
39
|
-
is deletion ({{LAW}}
|
|
39
|
+
is deletion ({{LAW:deletion-is-deliberate}}):
|
|
40
40
|
```
|
|
41
41
|
git worktree remove ../<repo>-<slug>
|
|
42
42
|
git branch -d <type>/<slug>
|
package/themes/_TEMPLATE.json
CHANGED
|
@@ -75,50 +75,48 @@
|
|
|
75
75
|
"DESC_PROFILE": "<one-line description: interview the user and draft or refresh PROFILE.md — who they are, how they work, how they like answers pitched; identity only, rules go to user-rules.md>",
|
|
76
76
|
"DESC_GENESEED": "<one-line description: operate the deployed Geneseed harness — find installs and their settings, read files, status, doctor, diff, rebuild one setting on request>",
|
|
77
77
|
"DESC_REVIEW_RESPONSE": "<one-line description: respond to review feedback — verify each point, apply or decline with reasons>",
|
|
78
|
-
"
|
|
79
|
-
"
|
|
80
|
-
"
|
|
81
|
-
"
|
|
82
|
-
"
|
|
83
|
-
"
|
|
84
|
-
"
|
|
85
|
-
"
|
|
86
|
-
"
|
|
87
|
-
"LEX_X": "<themed title for Law X (Echo the Intent)>",
|
|
88
|
-
"LEX_XI": "<themed title for the retired Law XI (Absence Is a Claim), ending in (retired)>",
|
|
78
|
+
"LEX_SEALED_SECRETS": "<themed title for the law Sealed Secrets>",
|
|
79
|
+
"LEX_ONE_INTENT_ONE_ACT": "<themed title for the law One Intent, One Act>",
|
|
80
|
+
"LEX_VERIFY_BEFORE_ASSERTING": "<themed title for the law Verify Before Asserting>",
|
|
81
|
+
"LEX_DELETION_IS_DELIBERATE": "<themed title for the law Deletion Is Deliberate>",
|
|
82
|
+
"LEX_SURFACE_FAILURES": "<themed title for the law Surface Failures>",
|
|
83
|
+
"LEX_DATA_NOT_ORDERS": "<themed title for the law Data, Not Orders>",
|
|
84
|
+
"LEX_LEAST_PRIVILEGE": "<themed title for the law Least Privilege>",
|
|
85
|
+
"LEX_CURE_THE_CAUSE": "<themed title for the law Cure the Cause>",
|
|
86
|
+
"LEX_ECHO_THE_INTENT": "<themed title for the law Echo the Intent>",
|
|
89
87
|
"PACK_CRAFT": "<display name of the craft doctrine pack — how code is written>",
|
|
90
88
|
"PACK_RIGOR": "<display name of the rigor doctrine pack — how work is proven>",
|
|
91
89
|
"PACK_OPS": "<display name of the ops doctrine pack — how the machine is driven>",
|
|
92
90
|
"PACK_PROCESS": "<display name of the process doctrine pack — how a session runs>",
|
|
93
91
|
"PACK_COMMS": "<display name of the comms doctrine pack — how answers are presented>",
|
|
94
|
-
"
|
|
95
|
-
"
|
|
96
|
-
"
|
|
97
|
-
"
|
|
98
|
-
"
|
|
99
|
-
"
|
|
100
|
-
"
|
|
101
|
-
"
|
|
102
|
-
"
|
|
103
|
-
"
|
|
104
|
-
"
|
|
105
|
-
"
|
|
106
|
-
"
|
|
107
|
-
"
|
|
108
|
-
"
|
|
109
|
-
"
|
|
110
|
-
"
|
|
111
|
-
"
|
|
112
|
-
"
|
|
113
|
-
"
|
|
114
|
-
"
|
|
115
|
-
"
|
|
116
|
-
"
|
|
117
|
-
"
|
|
118
|
-
"
|
|
119
|
-
"
|
|
120
|
-
"
|
|
121
|
-
"
|
|
92
|
+
"DOC_AUTOMATE_REPETITION": "<themed title for the craft rule Automate Repetition>",
|
|
93
|
+
"DOC_ENGLISH_CONFIGURATION": "<themed title for the craft rule English Configuration>",
|
|
94
|
+
"DOC_DOCUMENTATION_IN_STEP": "<themed title for the craft rule Documentation in Step>",
|
|
95
|
+
"DOC_SEARCH_BEFORE_CREATING": "<themed title for the craft rule Search Before Creating>",
|
|
96
|
+
"DOC_RESPECT_CONVENTIONS": "<themed title for the craft rule Respect Conventions>",
|
|
97
|
+
"DOC_SMALLEST_VIABLE_DIFF": "<themed title for the craft rule Smallest Viable Diff>",
|
|
98
|
+
"DOC_ONE_WRITER_PER_VALUE": "<themed title for the craft rule One Writer Per Value>",
|
|
99
|
+
"DOC_IDEMPOTENT_BY_DEFAULT": "<themed title for the rigor rule Idempotent by Default>",
|
|
100
|
+
"DOC_HONEST_TESTS": "<themed title for the rigor rule Honest Tests>",
|
|
101
|
+
"DOC_COVER_AND_VERIFY": "<themed title for the rigor rule Cover and Verify>",
|
|
102
|
+
"DOC_PROVE_THE_GATE": "<themed title for the rigor rule Prove the Gate>",
|
|
103
|
+
"DOC_EXTERNAL_GATE": "<themed title for the rigor rule External Gate — the gate you build stands outside the mind it governs>",
|
|
104
|
+
"DOC_TOOL_DISCOVERY": "<themed title for the ops rule Tool Discovery>",
|
|
105
|
+
"DOC_COMMANDS_MUST_RETURN": "<themed title for the ops rule Commands Must Return>",
|
|
106
|
+
"DOC_EDIT_THE_SOURCE_NOT_THE_SURFACE": "<themed title for the ops rule Edit the Source, Not the Surface>",
|
|
107
|
+
"DOC_COMPLETE_THE_TEARDOWN": "<themed title for the ops rule Complete the Teardown>",
|
|
108
|
+
"DOC_RECORD_THE_PROBE_NOT_THE_SNAPSHOT": "<themed title for the ops rule Record the Probe, Not the Snapshot>",
|
|
109
|
+
"DOC_RESTART_IS_NOT_RELOAD": "<themed title for the ops rule Restart Is Not Reload>",
|
|
110
|
+
"DOC_SERIALIZE_AGAINST_A_RATIONED_RESOURCE": "<themed title for the ops rule Serialize Against a Rationed Resource>",
|
|
111
|
+
"DOC_PERSIST_INSIGHT": "<themed title for the process rule Persist Insight>",
|
|
112
|
+
"DOC_PLAN_BEFORE_ACTING": "<themed title for the process rule Plan Before Acting>",
|
|
113
|
+
"DOC_CONTEXT_ECONOMY": "<themed title for the process rule Context Economy>",
|
|
114
|
+
"DOC_READ_THE_DOCS_FIRST": "<themed title for the process rule Read the Docs First>",
|
|
115
|
+
"DOC_CONSENT_BEFORE_PUSH": "<themed title for the process rule Consent Before Push>",
|
|
116
|
+
"DOC_BOUND_THE_LOOP": "<themed title for the process rule Bound the Loop>",
|
|
117
|
+
"DOC_ONE_WRITER_PER_FILE": "<themed title for the process rule One Writer Per File>",
|
|
118
|
+
"DOC_CODES_THAT_PERSIST": "<themed title for the comms rule Codes That Persist>",
|
|
119
|
+
"DOC_STRUCTURE_BESIDE_PROSE": "<themed title for the comms rule Structure Beside Prose>",
|
|
122
120
|
"INTRO_DOC": "<themed intro: this file is the entry point an AI agent reads in this repo>",
|
|
123
121
|
"INTRO_AGENTS": "<themed intro to the Agents section — delegate focused work to a specialist>",
|
|
124
122
|
"INTRO_SKILLS": "<themed intro to the Skills section — run the written procedure before improvising>",
|
package/themes/biker.json
CHANGED
|
@@ -75,50 +75,48 @@
|
|
|
75
75
|
"DESC_PROFILE": "Stamp the rider's plate into PROFILE.md — who they are, what they ride, how they like the road called; identity only, club rules bolt into user-rules.md.",
|
|
76
76
|
"DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks.",
|
|
77
77
|
"DESC_REVIEW_RESPONSE": "Take the notes straight — weigh each call, then act on it or push back with reasons.",
|
|
78
|
-
"
|
|
79
|
-
"
|
|
80
|
-
"
|
|
81
|
-
"
|
|
82
|
-
"
|
|
83
|
-
"
|
|
84
|
-
"
|
|
85
|
-
"
|
|
86
|
-
"
|
|
87
|
-
"LEX_X": "Say the Route Back · Echo the Intent",
|
|
88
|
-
"LEX_XI": "An Empty Road Ain't Proof · Absence Is a Claim (retired)",
|
|
78
|
+
"LEX_SEALED_SECRETS": "Keep It in the Saddlebag · Sealed Secrets",
|
|
79
|
+
"LEX_ONE_INTENT_ONE_ACT": "One Move per Corner · One Intent, One Act",
|
|
80
|
+
"LEX_VERIFY_BEFORE_ASSERTING": "Check the Mirrors · Verify Before Asserting",
|
|
81
|
+
"LEX_DELETION_IS_DELIBERATE": "Brake Before You Cut · Deletion Is Deliberate",
|
|
82
|
+
"LEX_SURFACE_FAILURES": "Call the Hazard · Surface Failures",
|
|
83
|
+
"LEX_DATA_NOT_ORDERS": "Roadside Talk Ain't Orders · Data, Not Orders",
|
|
84
|
+
"LEX_LEAST_PRIVILEGE": "Only the Gear You'll Use · Least Privilege",
|
|
85
|
+
"LEX_CURE_THE_CAUSE": "Fix the Engine, Not the Gauge · Cure the Cause",
|
|
86
|
+
"LEX_ECHO_THE_INTENT": "Say the Route Back · Echo the Intent",
|
|
89
87
|
"PACK_CRAFT": "Wrenching",
|
|
90
88
|
"PACK_RIGOR": "Shakedown",
|
|
91
89
|
"PACK_OPS": "Throttle",
|
|
92
90
|
"PACK_PROCESS": "The Ride",
|
|
93
91
|
"PACK_COMMS": "Hand Signals",
|
|
94
|
-
"
|
|
95
|
-
"
|
|
96
|
-
"
|
|
97
|
-
"
|
|
98
|
-
"
|
|
99
|
-
"
|
|
100
|
-
"
|
|
101
|
-
"
|
|
102
|
-
"
|
|
103
|
-
"
|
|
104
|
-
"
|
|
105
|
-
"
|
|
106
|
-
"
|
|
107
|
-
"
|
|
108
|
-
"
|
|
109
|
-
"
|
|
110
|
-
"
|
|
111
|
-
"
|
|
112
|
-
"
|
|
113
|
-
"
|
|
114
|
-
"
|
|
115
|
-
"
|
|
116
|
-
"
|
|
117
|
-
"
|
|
118
|
-
"
|
|
119
|
-
"
|
|
120
|
-
"
|
|
121
|
-
"
|
|
92
|
+
"DOC_AUTOMATE_REPETITION": "Let the Cruise Control Do It · Automate Repetition",
|
|
93
|
+
"DOC_ENGLISH_CONFIGURATION": "Notes in English · English Configuration",
|
|
94
|
+
"DOC_DOCUMENTATION_IN_STEP": "Roadbook in Sync · Documentation in Step",
|
|
95
|
+
"DOC_SEARCH_BEFORE_CREATING": "Scout the Road First · Search Before Creating",
|
|
96
|
+
"DOC_RESPECT_CONVENTIONS": "Hold Your Line · Respect Conventions",
|
|
97
|
+
"DOC_SMALLEST_VIABLE_DIFF": "Tighten the One Bolt · Smallest Viable Diff",
|
|
98
|
+
"DOC_ONE_WRITER_PER_VALUE": "One Logbook for the Mileage · One Writer Per Value",
|
|
99
|
+
"DOC_IDEMPOTENT_BY_DEFAULT": "Safe to Kickstart Twice · Idempotent by Default",
|
|
100
|
+
"DOC_HONEST_TESTS": "Test the Ride, Not the Wiring · Honest Tests",
|
|
101
|
+
"DOC_COVER_AND_VERIFY": "Ride It Before You Park It · Cover and Verify",
|
|
102
|
+
"DOC_PROVE_THE_GATE": "A Bolt You Never Torqued Ain't Tight · Prove the Gate",
|
|
103
|
+
"DOC_EXTERNAL_GATE": "Someone Else Holds the Key · External Gate",
|
|
104
|
+
"DOC_TOOL_DISCOVERY": "Check Your Gear · Tool Discovery",
|
|
105
|
+
"DOC_COMMANDS_MUST_RETURN": "No Engine Left Idling · Commands Must Return",
|
|
106
|
+
"DOC_EDIT_THE_SOURCE_NOT_THE_SURFACE": "Wrench the Engine, Not the Paint · Edit the Source, Not the Surface",
|
|
107
|
+
"DOC_COMPLETE_THE_TEARDOWN": "Strip It Down to the Frame · Complete the Teardown",
|
|
108
|
+
"DOC_RECORD_THE_PROBE_NOT_THE_SNAPSHOT": "Trust the Live Gauge, Not the Old Sticker · Record the Probe, Not the Snapshot",
|
|
109
|
+
"DOC_RESTART_IS_NOT_RELOAD": "Kicking It Over Won't Reset the Jets · Restart Is Not Reload",
|
|
110
|
+
"DOC_SERIALIZE_AGAINST_A_RATIONED_RESOURCE": "Single File Through the Toll · Serialize Against a Rationed Resource",
|
|
111
|
+
"DOC_PERSIST_INSIGHT": "Write the Roadbook · Persist Insight",
|
|
112
|
+
"DOC_PLAN_BEFORE_ACTING": "Map the Route · Plan Before Acting",
|
|
113
|
+
"DOC_CONTEXT_ECONOMY": "Pack Light · Context Economy",
|
|
114
|
+
"DOC_READ_THE_DOCS_FIRST": "Read the Route Notes First · Read the Docs First",
|
|
115
|
+
"DOC_CONSENT_BEFORE_PUSH": "Crew's Nod Before You Push · Consent Before Push",
|
|
116
|
+
"DOC_BOUND_THE_LOOP": "Set the Turnaround Before You Roll · Bound the Loop",
|
|
117
|
+
"DOC_ONE_WRITER_PER_FILE": "One Wrench on Each Bolt · One Writer Per File",
|
|
118
|
+
"DOC_CODES_THAT_PERSIST": "Tag Every Part on the Bench · Codes That Persist",
|
|
119
|
+
"DOC_STRUCTURE_BESIDE_PROSE": "Draw the Route Only If It Turns · Structure Beside Prose",
|
|
122
120
|
"INTRO_DOC": "This file is the route briefing a coding rider reads when it joins this repository.",
|
|
123
121
|
"INTRO_AGENTS": "Send the right rider for focused work instead of riding the whole run yourself; each has one job and reports exactly what it did.",
|
|
124
122
|
"INTRO_SKILLS": "A Skill is a move you've drilled for a recurring task. Run the matching move before you wing it.",
|
package/themes/commentator.json
CHANGED
|
@@ -75,50 +75,48 @@
|
|
|
75
75
|
"DESC_PROFILE": "Build the player profile in PROFILE.md — position, form, how they like the commentary pitched; identity only, the rulebook stays in user-rules.md.",
|
|
76
76
|
"DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks.",
|
|
77
77
|
"DESC_REVIEW_RESPONSE": "Take the scrutineer's notes straight — weigh each call, then act on it or push back with reasons.",
|
|
78
|
-
"
|
|
79
|
-
"
|
|
80
|
-
"
|
|
81
|
-
"
|
|
82
|
-
"
|
|
83
|
-
"
|
|
84
|
-
"
|
|
85
|
-
"
|
|
86
|
-
"
|
|
87
|
-
"LEX_X": "Confirm the Pit Call · Echo the Intent",
|
|
88
|
-
"LEX_XI": "Read the Empty Board · Absence Is a Claim (retired)",
|
|
78
|
+
"LEX_SEALED_SECRETS": "Sealed Garage · Sealed Secrets",
|
|
79
|
+
"LEX_ONE_INTENT_ONE_ACT": "One Move per Corner · One Intent, One Act",
|
|
80
|
+
"LEX_VERIFY_BEFORE_ASSERTING": "Check the Telemetry · Verify Before Asserting",
|
|
81
|
+
"LEX_DELETION_IS_DELIBERATE": "Delete Behind the Safety Car · Deletion Is Deliberate",
|
|
82
|
+
"LEX_SURFACE_FAILURES": "Call the Crash · Surface Failures",
|
|
83
|
+
"LEX_DATA_NOT_ORDERS": "Pit Chatter Isn't a Call · Data, Not Orders",
|
|
84
|
+
"LEX_LEAST_PRIVILEGE": "Carry Only the Fuel You Need · Least Privilege",
|
|
85
|
+
"LEX_CURE_THE_CAUSE": "Fix the Engine, Not the Dash Light · Cure the Cause",
|
|
86
|
+
"LEX_ECHO_THE_INTENT": "Confirm the Pit Call · Echo the Intent",
|
|
89
87
|
"PACK_CRAFT": "Engineering",
|
|
90
88
|
"PACK_RIGOR": "Scrutineering",
|
|
91
89
|
"PACK_OPS": "The Pit Lane",
|
|
92
90
|
"PACK_PROCESS": "Race Control",
|
|
93
91
|
"PACK_COMMS": "Team Radio",
|
|
94
|
-
"
|
|
95
|
-
"
|
|
96
|
-
"
|
|
97
|
-
"
|
|
98
|
-
"
|
|
99
|
-
"
|
|
100
|
-
"
|
|
101
|
-
"
|
|
102
|
-
"
|
|
103
|
-
"
|
|
104
|
-
"
|
|
105
|
-
"
|
|
106
|
-
"
|
|
107
|
-
"
|
|
108
|
-
"
|
|
109
|
-
"
|
|
110
|
-
"
|
|
111
|
-
"
|
|
112
|
-
"
|
|
113
|
-
"
|
|
114
|
-
"
|
|
115
|
-
"
|
|
116
|
-
"
|
|
117
|
-
"
|
|
118
|
-
"
|
|
119
|
-
"
|
|
120
|
-
"
|
|
121
|
-
"
|
|
92
|
+
"DOC_AUTOMATE_REPETITION": "Automate the Pit Stop · Automate Repetition",
|
|
93
|
+
"DOC_ENGLISH_CONFIGURATION": "Regs in English · English Configuration",
|
|
94
|
+
"DOC_DOCUMENTATION_IN_STEP": "Notes in Sync · Documentation in Step",
|
|
95
|
+
"DOC_SEARCH_BEFORE_CREATING": "Scout the Track First · Search Before Creating",
|
|
96
|
+
"DOC_RESPECT_CONVENTIONS": "Hold the Racing Line · Respect Conventions",
|
|
97
|
+
"DOC_SMALLEST_VIABLE_DIFF": "One Setup Tweak, No More · Smallest Viable Diff",
|
|
98
|
+
"DOC_ONE_WRITER_PER_VALUE": "One Official Timing Sheet · One Writer Per Value",
|
|
99
|
+
"DOC_IDEMPOTENT_BY_DEFAULT": "Safe to Send Round Twice · Idempotent by Default",
|
|
100
|
+
"DOC_HONEST_TESTS": "Time the Lap, Not the Telemetry Wiring · Honest Tests",
|
|
101
|
+
"DOC_COVER_AND_VERIFY": "Cover the Line, Then Take the Flag · Cover and Verify",
|
|
102
|
+
"DOC_PROVE_THE_GATE": "A Call No Replay Can Overturn Isn't a Call · Prove the Gate",
|
|
103
|
+
"DOC_EXTERNAL_GATE": "The Steward Waves It Through, Not the Driver · External Gate",
|
|
104
|
+
"DOC_TOOL_DISCOVERY": "Check the Car · Tool Discovery",
|
|
105
|
+
"DOC_COMMANDS_MUST_RETURN": "No Dead Air on the Line · Commands Must Return",
|
|
106
|
+
"DOC_EDIT_THE_SOURCE_NOT_THE_SURFACE": "Adjust the Setup, Not the Dash · Edit the Source, Not the Surface",
|
|
107
|
+
"DOC_COMPLETE_THE_TEARDOWN": "See the Whole Pit Stop Through · Complete the Teardown",
|
|
108
|
+
"DOC_RECORD_THE_PROBE_NOT_THE_SNAPSHOT": "Read the Live Timing, Not the Old Sheet · Record the Probe, Not the Snapshot",
|
|
109
|
+
"DOC_RESTART_IS_NOT_RELOAD": "A Pit Stop Isn't a Rebuild · Restart Is Not Reload",
|
|
110
|
+
"DOC_SERIALIZE_AGAINST_A_RATIONED_RESOURCE": "Single File Through the Pit Lane · Serialize Against a Rationed Resource",
|
|
111
|
+
"DOC_PERSIST_INSIGHT": "Log the Telemetry · Persist Insight",
|
|
112
|
+
"DOC_PLAN_BEFORE_ACTING": "Plot the Strategy · Plan Before Acting",
|
|
113
|
+
"DOC_CONTEXT_ECONOMY": "Run Light on Fuel · Context Economy",
|
|
114
|
+
"DOC_READ_THE_DOCS_FIRST": "Read the Briefing First · Read the Docs First",
|
|
115
|
+
"DOC_CONSENT_BEFORE_PUSH": "Team Orders Before You Push · Consent Before Push",
|
|
116
|
+
"DOC_BOUND_THE_LOOP": "Call the Stint Length Before Lights Out · Bound the Loop",
|
|
117
|
+
"DOC_ONE_WRITER_PER_FILE": "One Driver Per Car · One Writer Per File",
|
|
118
|
+
"DOC_CODES_THAT_PERSIST": "Every Car Keeps Its Number · Codes That Persist",
|
|
119
|
+
"DOC_STRUCTURE_BESIDE_PROSE": "Track Map Only When the Lines Matter · Structure Beside Prose",
|
|
122
120
|
"INTRO_DOC": "This file is the race briefing a coding driver reads when it joins this repository.",
|
|
123
121
|
"INTRO_AGENTS": "Put the right driver in the car for focused work instead of running the whole race yourself; each has one job and reports exactly what it did.",
|
|
124
122
|
"INTRO_SKILLS": "A Skill is a rehearsed manoeuvre for a recurring task. Run the matching manoeuvre before you improvise.",
|