polymath-society 0.2.11 → 0.2.13
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/dist/cli.js +109 -49
- package/dist/engine/chat-loops.js +23 -2
- package/dist/engine/exp-allfacets.js +23 -2
- package/dist/engine/exp-person.js +23 -2
- package/dist/engine/exp-pipeline.js +22 -1
- package/dist/engine/ingest-export.js +2 -2
- package/dist/engine/peak-demos.js +23 -2
- package/dist/engine/person-dimension-summary.js +23 -2
- package/dist/engine/person-facet-lines.js +23 -2
- package/dist/engine/person-headline.js +23 -2
- package/dist/engine/person-report.js +23 -2
- package/dist/engine/person-self-image.js +23 -2
- package/dist/engine/public-report.js +25 -4
- package/dist/engine/run-analysis.js +23 -2
- package/dist/engine/run-tagger.js +22 -1
- package/dist/index.js +37 -8
- package/dist/pipeline/coding-agglomerate.js +25 -4
- package/dist/pipeline/coding-aggregate.js +3 -3
- package/dist/pipeline/coding-build.js +3 -3
- package/dist/pipeline/coding-coaching.js +25 -4
- package/dist/pipeline/coding-day-digest.js +25 -4
- package/dist/pipeline/coding-delegation.js +25 -4
- package/dist/pipeline/coding-expertise.js +25 -4
- package/dist/pipeline/coding-flow.js +3 -3
- package/dist/pipeline/coding-focus.js +22 -1
- package/dist/pipeline/coding-frontier-detail.js +25 -4
- package/dist/pipeline/coding-frontier.js +3 -3
- package/dist/pipeline/coding-gap-dist.js +3 -3
- package/dist/pipeline/coding-gap.js +25 -4
- package/dist/pipeline/coding-grade.js +40 -5
- package/dist/pipeline/coding-nutshell.js +25 -4
- package/dist/pipeline/coding-projects.js +3 -3
- package/dist/pipeline/coding-walkthrough.js +41 -5
- package/dist/web/app.js +65 -2
- package/dist/web/styles.css +1 -1
- package/package.json +1 -1
|
@@ -151,6 +151,25 @@ import { spawn } from "child_process";
|
|
|
151
151
|
import { promises as fs2 } from "fs";
|
|
152
152
|
import path2 from "path";
|
|
153
153
|
|
|
154
|
+
// ../coding-core/dist/env.js
|
|
155
|
+
var AUTH_VARS = ["ANTHROPIC_API_KEY", "ANTHROPIC_AUTH_TOKEN"];
|
|
156
|
+
var warned = false;
|
|
157
|
+
function claudeCliEnv(base = process.env) {
|
|
158
|
+
if (process.env.POLYMATH_USE_API_KEY === "1")
|
|
159
|
+
return base;
|
|
160
|
+
const present = AUTH_VARS.filter((k) => base[k]);
|
|
161
|
+
if (!present.length)
|
|
162
|
+
return base;
|
|
163
|
+
if (!warned) {
|
|
164
|
+
warned = true;
|
|
165
|
+
console.error(`[polymath-society] ${present.join(" + ")} is set in your shell \u2014 ignoring it so the analysis runs on your claude.ai login (the key would take over auth and either fail or bill your API account). Set POLYMATH_USE_API_KEY=1 if you really want the API key used.`);
|
|
166
|
+
}
|
|
167
|
+
const scrubbed = { ...base };
|
|
168
|
+
for (const k of AUTH_VARS)
|
|
169
|
+
delete scrubbed[k];
|
|
170
|
+
return scrubbed;
|
|
171
|
+
}
|
|
172
|
+
|
|
154
173
|
// ../../lib/agents/shared/adapter.ts
|
|
155
174
|
function extractJson(text2) {
|
|
156
175
|
const fences = [...text2.matchAll(/```json\s*([\s\S]*?)```/gi)];
|
|
@@ -255,7 +274,9 @@ var cliAdapter = {
|
|
|
255
274
|
await new Promise((resolve2, reject) => {
|
|
256
275
|
const child = spawn(CLAUDE_BIN, args, {
|
|
257
276
|
cwd: inv.cwd ?? inv.addDir,
|
|
258
|
-
|
|
277
|
+
// scrubbed: a stray ANTHROPIC_API_KEY in the user's shell hijacks the
|
|
278
|
+
// claude CLI away from their claude.ai login (coding-core/env.ts)
|
|
279
|
+
env: claudeCliEnv(),
|
|
259
280
|
stdio: ["ignore", "pipe", "pipe"],
|
|
260
281
|
// Own process group, so a timeout can kill the WHOLE tree (claude spawns
|
|
261
282
|
// its own children that otherwise orphan and pile up — the root cause of
|
|
@@ -15653,7 +15674,7 @@ var CODING_CRITERIA = [
|
|
|
15653
15674
|
label: "Abstraction \u2014 seeing the load-bearing thing, and being right",
|
|
15654
15675
|
graded: true,
|
|
15655
15676
|
definition: "Under genuine ambiguity (an obvious path sitting right there, no answer key): did the USER see that the obvious path was subtly wrong \u2014 or that something decisive was invisible \u2014 and do the non-obvious thing that made it right, AND were they right? The graded unit is the whole move: the CATCH (noticing the fork) -> the QUESTION (formulating it) -> the CALL (resolving it). The move surfaces three interchangeable ways, scored identically: a REFRAME (collapse a mess to its real axis), a QUESTION (pose the hard thing nobody posed), or an INSTRUMENT (build the code/chart/structure that makes the truth legible, then read it). Tag the SUBSTANCE, not the medium \u2014 a chart built (technical act) to make a human-intensity call legible is a JUDGMENT catch.",
|
|
15656
|
-
read: "FOUR LEVERS set the height: (1) INVISIBILITY \u2014 how non-obvious there was anything to catch; a sharp operator in the flow drives past it (the DOMINANT lever); (2) DIFFICULTY of forming the catch; (3) STAKES \u2014 'without this, things silently go wrong' is the 9-10 condition; (4) SOUNDNESS \u2014 did the call hold. THREE OVERRIDING GATES: (a) OBVIOUSNESS KILLS IT \u2014 a correct, even load-bearing catch a sharp operator reaches anyway scores LOW ('you're evaluating the person not the AI' is correct but obvious -> ~5; 'compute in the OAuth dead-time' is real but fairly obvious -> ~6). (b) LEVERAGE BEATS INSIGHT \u2014 a move whose payoff is a HIGHER RATE OF FUTURE INSIGHT (building the tool that lets him set his own boundaries; timestamp-by-timestamp structure to instruct the grader precisely) raises the bandwidth of the loop that produces every later catch, and can outrank a clean one-off reframe. (c) SOUNDNESS GATE \u2014 a confident WRONG call to a noticed fork is an ANTI-SIGNAL; an honest 'not sure, here's a range' is NOT penalized. HUNT THE FORK BLIND \u2014 reconstruct what continuing-without-noticing looked like, then check whether/why he diverged; do NOT hand yourself the fork pre-formed or you score everyone's problem-finding a 10. TAG every instance: kind = systems | judgment | both (+ optional register: human/product/measurement). Reasoning and instrument-building are the SAME criterion. ANCHORS: 10 = 'OCEAN won't change, measure effectiveness of actions' (reframe that redefines the measure) /
|
|
15677
|
+
read: "FOUR LEVERS set the height: (1) INVISIBILITY \u2014 how non-obvious there was anything to catch; a sharp operator in the flow drives past it (the DOMINANT lever); (2) DIFFICULTY of forming the catch; (3) STAKES \u2014 'without this, things silently go wrong' is the 9-10 condition; (4) SOUNDNESS \u2014 did the call hold. THREE OVERRIDING GATES: (a) OBVIOUSNESS KILLS IT \u2014 a correct, even load-bearing catch a sharp operator reaches anyway scores LOW ('you're evaluating the person not the AI' is correct but obvious -> ~5; 'compute in the OAuth dead-time' is real but fairly obvious -> ~6). (b) LEVERAGE BEATS INSIGHT \u2014 a move whose payoff is a HIGHER RATE OF FUTURE INSIGHT (building the tool that lets him set his own boundaries; timestamp-by-timestamp structure to instruct the grader precisely) raises the bandwidth of the loop that produces every later catch, and can outrank a clean one-off reframe. (c) SOUNDNESS GATE \u2014 a confident WRONG call to a noticed fork is an ANTI-SIGNAL; an honest 'not sure, here's a range' is NOT penalized. HUNT THE FORK BLIND \u2014 reconstruct what continuing-without-noticing looked like, then check whether/why he diverged; do NOT hand yourself the fork pre-formed or you score everyone's problem-finding a 10. TAG every instance: kind = systems | judgment | both (+ optional register: human/product/measurement). Reasoning and instrument-building are the SAME criterion. ANCHORS: 10 = 'OCEAN won't change, measure effectiveness of actions' (reframe that redefines the measure) / a human-stakes call where the person overrode the analytically-clean answer on knowledge only they could have about someone involved, and was right (lived judgment, requires being the person) / 'plot it sorted, let me set the boundaries' (leverage \u2014 builds the bandwidth tool); 9 = 'word count IS the proxy \u2014 sitting there is unfakeable focus' / 'uncertainty collapses in that direction'; 8 = 'a better metric is the difficulty of content + original synthesis' (hard opening question); 7 = 'this candidate seems too strong for his judgement to be real' (real non-obvious catch, modest stakes); 6 = 'compute in the OAuth dead-time' / 'why overcomplicate it, single agent' (real but obvious); 5 = 'you're evaluating the person not the AI' (correct but obvious).",
|
|
15657
15678
|
rungs: [
|
|
15658
15679
|
{ level: 2, marker: "A fork existed; defers the call to the AI, or takes the obvious branch; vague." },
|
|
15659
15680
|
{ level: 4, marker: "Notices something, but the question is vague or obvious \u2014 anyone in the seat asks it." },
|
|
@@ -16106,11 +16127,11 @@ var TRANSCRIPT_LINE_RE = new RegExp(`^\\s*(${NOTE})((,| and) ${NOTE})*\\s*$|^\\s
|
|
|
16106
16127
|
|
|
16107
16128
|
// ../../lib/calibration/index.ts
|
|
16108
16129
|
var DEFAULT_CALIBRATION = {
|
|
16109
|
-
version: "2026-07-
|
|
16130
|
+
version: "2026-07-15.1",
|
|
16110
16131
|
// = RUBRIC_FINGERPRINT of the shipped npm rubric (packages/coding-analyzer/
|
|
16111
16132
|
// src/grade/criteria.ts). A unit test fails loud when the rubric changes
|
|
16112
16133
|
// without this being updated (and re-pushed to the server).
|
|
16113
|
-
rubricVersion: "
|
|
16134
|
+
rubricVersion: "7983c01d53",
|
|
16114
16135
|
// Canonical scale = the one the product owner set for the public report
|
|
16115
16136
|
// (11=0.01% … 8=2%), extended downward from the old report ladder. The old
|
|
16116
16137
|
// CodeAnalysisView / npm-viewer maps (7→10%/15%, 6→25%/30%) were drift, not
|
|
@@ -324,7 +324,7 @@ var CODING_CRITERIA = [
|
|
|
324
324
|
label: "Abstraction \u2014 seeing the load-bearing thing, and being right",
|
|
325
325
|
graded: true,
|
|
326
326
|
definition: "Under genuine ambiguity (an obvious path sitting right there, no answer key): did the USER see that the obvious path was subtly wrong \u2014 or that something decisive was invisible \u2014 and do the non-obvious thing that made it right, AND were they right? The graded unit is the whole move: the CATCH (noticing the fork) -> the QUESTION (formulating it) -> the CALL (resolving it). The move surfaces three interchangeable ways, scored identically: a REFRAME (collapse a mess to its real axis), a QUESTION (pose the hard thing nobody posed), or an INSTRUMENT (build the code/chart/structure that makes the truth legible, then read it). Tag the SUBSTANCE, not the medium \u2014 a chart built (technical act) to make a human-intensity call legible is a JUDGMENT catch.",
|
|
327
|
-
read: "FOUR LEVERS set the height: (1) INVISIBILITY \u2014 how non-obvious there was anything to catch; a sharp operator in the flow drives past it (the DOMINANT lever); (2) DIFFICULTY of forming the catch; (3) STAKES \u2014 'without this, things silently go wrong' is the 9-10 condition; (4) SOUNDNESS \u2014 did the call hold. THREE OVERRIDING GATES: (a) OBVIOUSNESS KILLS IT \u2014 a correct, even load-bearing catch a sharp operator reaches anyway scores LOW ('you're evaluating the person not the AI' is correct but obvious -> ~5; 'compute in the OAuth dead-time' is real but fairly obvious -> ~6). (b) LEVERAGE BEATS INSIGHT \u2014 a move whose payoff is a HIGHER RATE OF FUTURE INSIGHT (building the tool that lets him set his own boundaries; timestamp-by-timestamp structure to instruct the grader precisely) raises the bandwidth of the loop that produces every later catch, and can outrank a clean one-off reframe. (c) SOUNDNESS GATE \u2014 a confident WRONG call to a noticed fork is an ANTI-SIGNAL; an honest 'not sure, here's a range' is NOT penalized. HUNT THE FORK BLIND \u2014 reconstruct what continuing-without-noticing looked like, then check whether/why he diverged; do NOT hand yourself the fork pre-formed or you score everyone's problem-finding a 10. TAG every instance: kind = systems | judgment | both (+ optional register: human/product/measurement). Reasoning and instrument-building are the SAME criterion. ANCHORS: 10 = 'OCEAN won't change, measure effectiveness of actions' (reframe that redefines the measure) /
|
|
327
|
+
read: "FOUR LEVERS set the height: (1) INVISIBILITY \u2014 how non-obvious there was anything to catch; a sharp operator in the flow drives past it (the DOMINANT lever); (2) DIFFICULTY of forming the catch; (3) STAKES \u2014 'without this, things silently go wrong' is the 9-10 condition; (4) SOUNDNESS \u2014 did the call hold. THREE OVERRIDING GATES: (a) OBVIOUSNESS KILLS IT \u2014 a correct, even load-bearing catch a sharp operator reaches anyway scores LOW ('you're evaluating the person not the AI' is correct but obvious -> ~5; 'compute in the OAuth dead-time' is real but fairly obvious -> ~6). (b) LEVERAGE BEATS INSIGHT \u2014 a move whose payoff is a HIGHER RATE OF FUTURE INSIGHT (building the tool that lets him set his own boundaries; timestamp-by-timestamp structure to instruct the grader precisely) raises the bandwidth of the loop that produces every later catch, and can outrank a clean one-off reframe. (c) SOUNDNESS GATE \u2014 a confident WRONG call to a noticed fork is an ANTI-SIGNAL; an honest 'not sure, here's a range' is NOT penalized. HUNT THE FORK BLIND \u2014 reconstruct what continuing-without-noticing looked like, then check whether/why he diverged; do NOT hand yourself the fork pre-formed or you score everyone's problem-finding a 10. TAG every instance: kind = systems | judgment | both (+ optional register: human/product/measurement). Reasoning and instrument-building are the SAME criterion. ANCHORS: 10 = 'OCEAN won't change, measure effectiveness of actions' (reframe that redefines the measure) / a human-stakes call where the person overrode the analytically-clean answer on knowledge only they could have about someone involved, and was right (lived judgment, requires being the person) / 'plot it sorted, let me set the boundaries' (leverage \u2014 builds the bandwidth tool); 9 = 'word count IS the proxy \u2014 sitting there is unfakeable focus' / 'uncertainty collapses in that direction'; 8 = 'a better metric is the difficulty of content + original synthesis' (hard opening question); 7 = 'this candidate seems too strong for his judgement to be real' (real non-obvious catch, modest stakes); 6 = 'compute in the OAuth dead-time' / 'why overcomplicate it, single agent' (real but obvious); 5 = 'you're evaluating the person not the AI' (correct but obvious).",
|
|
328
328
|
rungs: [
|
|
329
329
|
{ level: 2, marker: "A fork existed; defers the call to the AI, or takes the obvious branch; vague." },
|
|
330
330
|
{ level: 4, marker: "Notices something, but the question is vague or obvious \u2014 anyone in the seat asks it." },
|
|
@@ -431,11 +431,11 @@ var IDLE_CAP_MS = 12 * 6e4;
|
|
|
431
431
|
|
|
432
432
|
// ../../lib/calibration/index.ts
|
|
433
433
|
var DEFAULT_CALIBRATION = {
|
|
434
|
-
version: "2026-07-
|
|
434
|
+
version: "2026-07-15.1",
|
|
435
435
|
// = RUBRIC_FINGERPRINT of the shipped npm rubric (packages/coding-analyzer/
|
|
436
436
|
// src/grade/criteria.ts). A unit test fails loud when the rubric changes
|
|
437
437
|
// without this being updated (and re-pushed to the server).
|
|
438
|
-
rubricVersion: "
|
|
438
|
+
rubricVersion: "7983c01d53",
|
|
439
439
|
// Canonical scale = the one the product owner set for the public report
|
|
440
440
|
// (11=0.01% … 8=2%), extended downward from the old report ladder. The old
|
|
441
441
|
// CodeAnalysisView / npm-viewer maps (7→10%/15%, 6→25%/30%) were drift, not
|
|
@@ -1138,7 +1138,7 @@ var CODING_CRITERIA = [
|
|
|
1138
1138
|
label: "Abstraction \u2014 seeing the load-bearing thing, and being right",
|
|
1139
1139
|
graded: true,
|
|
1140
1140
|
definition: "Under genuine ambiguity (an obvious path sitting right there, no answer key): did the USER see that the obvious path was subtly wrong \u2014 or that something decisive was invisible \u2014 and do the non-obvious thing that made it right, AND were they right? The graded unit is the whole move: the CATCH (noticing the fork) -> the QUESTION (formulating it) -> the CALL (resolving it). The move surfaces three interchangeable ways, scored identically: a REFRAME (collapse a mess to its real axis), a QUESTION (pose the hard thing nobody posed), or an INSTRUMENT (build the code/chart/structure that makes the truth legible, then read it). Tag the SUBSTANCE, not the medium \u2014 a chart built (technical act) to make a human-intensity call legible is a JUDGMENT catch.",
|
|
1141
|
-
read: "FOUR LEVERS set the height: (1) INVISIBILITY \u2014 how non-obvious there was anything to catch; a sharp operator in the flow drives past it (the DOMINANT lever); (2) DIFFICULTY of forming the catch; (3) STAKES \u2014 'without this, things silently go wrong' is the 9-10 condition; (4) SOUNDNESS \u2014 did the call hold. THREE OVERRIDING GATES: (a) OBVIOUSNESS KILLS IT \u2014 a correct, even load-bearing catch a sharp operator reaches anyway scores LOW ('you're evaluating the person not the AI' is correct but obvious -> ~5; 'compute in the OAuth dead-time' is real but fairly obvious -> ~6). (b) LEVERAGE BEATS INSIGHT \u2014 a move whose payoff is a HIGHER RATE OF FUTURE INSIGHT (building the tool that lets him set his own boundaries; timestamp-by-timestamp structure to instruct the grader precisely) raises the bandwidth of the loop that produces every later catch, and can outrank a clean one-off reframe. (c) SOUNDNESS GATE \u2014 a confident WRONG call to a noticed fork is an ANTI-SIGNAL; an honest 'not sure, here's a range' is NOT penalized. HUNT THE FORK BLIND \u2014 reconstruct what continuing-without-noticing looked like, then check whether/why he diverged; do NOT hand yourself the fork pre-formed or you score everyone's problem-finding a 10. TAG every instance: kind = systems | judgment | both (+ optional register: human/product/measurement). Reasoning and instrument-building are the SAME criterion. ANCHORS: 10 = 'OCEAN won't change, measure effectiveness of actions' (reframe that redefines the measure) /
|
|
1141
|
+
read: "FOUR LEVERS set the height: (1) INVISIBILITY \u2014 how non-obvious there was anything to catch; a sharp operator in the flow drives past it (the DOMINANT lever); (2) DIFFICULTY of forming the catch; (3) STAKES \u2014 'without this, things silently go wrong' is the 9-10 condition; (4) SOUNDNESS \u2014 did the call hold. THREE OVERRIDING GATES: (a) OBVIOUSNESS KILLS IT \u2014 a correct, even load-bearing catch a sharp operator reaches anyway scores LOW ('you're evaluating the person not the AI' is correct but obvious -> ~5; 'compute in the OAuth dead-time' is real but fairly obvious -> ~6). (b) LEVERAGE BEATS INSIGHT \u2014 a move whose payoff is a HIGHER RATE OF FUTURE INSIGHT (building the tool that lets him set his own boundaries; timestamp-by-timestamp structure to instruct the grader precisely) raises the bandwidth of the loop that produces every later catch, and can outrank a clean one-off reframe. (c) SOUNDNESS GATE \u2014 a confident WRONG call to a noticed fork is an ANTI-SIGNAL; an honest 'not sure, here's a range' is NOT penalized. HUNT THE FORK BLIND \u2014 reconstruct what continuing-without-noticing looked like, then check whether/why he diverged; do NOT hand yourself the fork pre-formed or you score everyone's problem-finding a 10. TAG every instance: kind = systems | judgment | both (+ optional register: human/product/measurement). Reasoning and instrument-building are the SAME criterion. ANCHORS: 10 = 'OCEAN won't change, measure effectiveness of actions' (reframe that redefines the measure) / a human-stakes call where the person overrode the analytically-clean answer on knowledge only they could have about someone involved, and was right (lived judgment, requires being the person) / 'plot it sorted, let me set the boundaries' (leverage \u2014 builds the bandwidth tool); 9 = 'word count IS the proxy \u2014 sitting there is unfakeable focus' / 'uncertainty collapses in that direction'; 8 = 'a better metric is the difficulty of content + original synthesis' (hard opening question); 7 = 'this candidate seems too strong for his judgement to be real' (real non-obvious catch, modest stakes); 6 = 'compute in the OAuth dead-time' / 'why overcomplicate it, single agent' (real but obvious); 5 = 'you're evaluating the person not the AI' (correct but obvious).",
|
|
1142
1142
|
rungs: [
|
|
1143
1143
|
{ level: 2, marker: "A fork existed; defers the call to the AI, or takes the obvious branch; vague." },
|
|
1144
1144
|
{ level: 4, marker: "Notices something, but the question is vague or obvious \u2014 anyone in the seat asks it." },
|
|
@@ -1294,11 +1294,11 @@ var TRANSCRIPT_LINE_RE = new RegExp(`^\\s*(${NOTE})((,| and) ${NOTE})*\\s*$|^\\s
|
|
|
1294
1294
|
|
|
1295
1295
|
// ../../lib/calibration/index.ts
|
|
1296
1296
|
var DEFAULT_CALIBRATION = {
|
|
1297
|
-
version: "2026-07-
|
|
1297
|
+
version: "2026-07-15.1",
|
|
1298
1298
|
// = RUBRIC_FINGERPRINT of the shipped npm rubric (packages/coding-analyzer/
|
|
1299
1299
|
// src/grade/criteria.ts). A unit test fails loud when the rubric changes
|
|
1300
1300
|
// without this being updated (and re-pushed to the server).
|
|
1301
|
-
rubricVersion: "
|
|
1301
|
+
rubricVersion: "7983c01d53",
|
|
1302
1302
|
// Canonical scale = the one the product owner set for the public report
|
|
1303
1303
|
// (11=0.01% … 8=2%), extended downward from the old report ladder. The old
|
|
1304
1304
|
// CodeAnalysisView / npm-viewer maps (7→10%/15%, 6→25%/30%) were drift, not
|
|
@@ -145,6 +145,25 @@ import { spawn } from "child_process";
|
|
|
145
145
|
import { promises as fs2 } from "fs";
|
|
146
146
|
import path2 from "path";
|
|
147
147
|
|
|
148
|
+
// ../coding-core/dist/env.js
|
|
149
|
+
var AUTH_VARS = ["ANTHROPIC_API_KEY", "ANTHROPIC_AUTH_TOKEN"];
|
|
150
|
+
var warned = false;
|
|
151
|
+
function claudeCliEnv(base = process.env) {
|
|
152
|
+
if (process.env.POLYMATH_USE_API_KEY === "1")
|
|
153
|
+
return base;
|
|
154
|
+
const present = AUTH_VARS.filter((k) => base[k]);
|
|
155
|
+
if (!present.length)
|
|
156
|
+
return base;
|
|
157
|
+
if (!warned) {
|
|
158
|
+
warned = true;
|
|
159
|
+
console.error(`[polymath-society] ${present.join(" + ")} is set in your shell \u2014 ignoring it so the analysis runs on your claude.ai login (the key would take over auth and either fail or bill your API account). Set POLYMATH_USE_API_KEY=1 if you really want the API key used.`);
|
|
160
|
+
}
|
|
161
|
+
const scrubbed = { ...base };
|
|
162
|
+
for (const k of AUTH_VARS)
|
|
163
|
+
delete scrubbed[k];
|
|
164
|
+
return scrubbed;
|
|
165
|
+
}
|
|
166
|
+
|
|
148
167
|
// ../../lib/agents/shared/adapter.ts
|
|
149
168
|
function extractJson(text2) {
|
|
150
169
|
const fences = [...text2.matchAll(/```json\s*([\s\S]*?)```/gi)];
|
|
@@ -249,7 +268,9 @@ var cliAdapter = {
|
|
|
249
268
|
await new Promise((resolve2, reject) => {
|
|
250
269
|
const child = spawn(CLAUDE_BIN, args, {
|
|
251
270
|
cwd: inv.cwd ?? inv.addDir,
|
|
252
|
-
|
|
271
|
+
// scrubbed: a stray ANTHROPIC_API_KEY in the user's shell hijacks the
|
|
272
|
+
// claude CLI away from their claude.ai login (coding-core/env.ts)
|
|
273
|
+
env: claudeCliEnv(),
|
|
253
274
|
stdio: ["ignore", "pipe", "pipe"],
|
|
254
275
|
// Own process group, so a timeout can kill the WHOLE tree (claude spawns
|
|
255
276
|
// its own children that otherwise orphan and pile up — the root cause of
|
|
@@ -15651,7 +15672,7 @@ var CODING_CRITERIA = [
|
|
|
15651
15672
|
label: "Abstraction \u2014 seeing the load-bearing thing, and being right",
|
|
15652
15673
|
graded: true,
|
|
15653
15674
|
definition: "Under genuine ambiguity (an obvious path sitting right there, no answer key): did the USER see that the obvious path was subtly wrong \u2014 or that something decisive was invisible \u2014 and do the non-obvious thing that made it right, AND were they right? The graded unit is the whole move: the CATCH (noticing the fork) -> the QUESTION (formulating it) -> the CALL (resolving it). The move surfaces three interchangeable ways, scored identically: a REFRAME (collapse a mess to its real axis), a QUESTION (pose the hard thing nobody posed), or an INSTRUMENT (build the code/chart/structure that makes the truth legible, then read it). Tag the SUBSTANCE, not the medium \u2014 a chart built (technical act) to make a human-intensity call legible is a JUDGMENT catch.",
|
|
15654
|
-
read: "FOUR LEVERS set the height: (1) INVISIBILITY \u2014 how non-obvious there was anything to catch; a sharp operator in the flow drives past it (the DOMINANT lever); (2) DIFFICULTY of forming the catch; (3) STAKES \u2014 'without this, things silently go wrong' is the 9-10 condition; (4) SOUNDNESS \u2014 did the call hold. THREE OVERRIDING GATES: (a) OBVIOUSNESS KILLS IT \u2014 a correct, even load-bearing catch a sharp operator reaches anyway scores LOW ('you're evaluating the person not the AI' is correct but obvious -> ~5; 'compute in the OAuth dead-time' is real but fairly obvious -> ~6). (b) LEVERAGE BEATS INSIGHT \u2014 a move whose payoff is a HIGHER RATE OF FUTURE INSIGHT (building the tool that lets him set his own boundaries; timestamp-by-timestamp structure to instruct the grader precisely) raises the bandwidth of the loop that produces every later catch, and can outrank a clean one-off reframe. (c) SOUNDNESS GATE \u2014 a confident WRONG call to a noticed fork is an ANTI-SIGNAL; an honest 'not sure, here's a range' is NOT penalized. HUNT THE FORK BLIND \u2014 reconstruct what continuing-without-noticing looked like, then check whether/why he diverged; do NOT hand yourself the fork pre-formed or you score everyone's problem-finding a 10. TAG every instance: kind = systems | judgment | both (+ optional register: human/product/measurement). Reasoning and instrument-building are the SAME criterion. ANCHORS: 10 = 'OCEAN won't change, measure effectiveness of actions' (reframe that redefines the measure) /
|
|
15675
|
+
read: "FOUR LEVERS set the height: (1) INVISIBILITY \u2014 how non-obvious there was anything to catch; a sharp operator in the flow drives past it (the DOMINANT lever); (2) DIFFICULTY of forming the catch; (3) STAKES \u2014 'without this, things silently go wrong' is the 9-10 condition; (4) SOUNDNESS \u2014 did the call hold. THREE OVERRIDING GATES: (a) OBVIOUSNESS KILLS IT \u2014 a correct, even load-bearing catch a sharp operator reaches anyway scores LOW ('you're evaluating the person not the AI' is correct but obvious -> ~5; 'compute in the OAuth dead-time' is real but fairly obvious -> ~6). (b) LEVERAGE BEATS INSIGHT \u2014 a move whose payoff is a HIGHER RATE OF FUTURE INSIGHT (building the tool that lets him set his own boundaries; timestamp-by-timestamp structure to instruct the grader precisely) raises the bandwidth of the loop that produces every later catch, and can outrank a clean one-off reframe. (c) SOUNDNESS GATE \u2014 a confident WRONG call to a noticed fork is an ANTI-SIGNAL; an honest 'not sure, here's a range' is NOT penalized. HUNT THE FORK BLIND \u2014 reconstruct what continuing-without-noticing looked like, then check whether/why he diverged; do NOT hand yourself the fork pre-formed or you score everyone's problem-finding a 10. TAG every instance: kind = systems | judgment | both (+ optional register: human/product/measurement). Reasoning and instrument-building are the SAME criterion. ANCHORS: 10 = 'OCEAN won't change, measure effectiveness of actions' (reframe that redefines the measure) / a human-stakes call where the person overrode the analytically-clean answer on knowledge only they could have about someone involved, and was right (lived judgment, requires being the person) / 'plot it sorted, let me set the boundaries' (leverage \u2014 builds the bandwidth tool); 9 = 'word count IS the proxy \u2014 sitting there is unfakeable focus' / 'uncertainty collapses in that direction'; 8 = 'a better metric is the difficulty of content + original synthesis' (hard opening question); 7 = 'this candidate seems too strong for his judgement to be real' (real non-obvious catch, modest stakes); 6 = 'compute in the OAuth dead-time' / 'why overcomplicate it, single agent' (real but obvious); 5 = 'you're evaluating the person not the AI' (correct but obvious).",
|
|
15655
15676
|
rungs: [
|
|
15656
15677
|
{ level: 2, marker: "A fork existed; defers the call to the AI, or takes the obvious branch; vague." },
|
|
15657
15678
|
{ level: 4, marker: "Notices something, but the question is vague or obvious \u2014 anyone in the seat asks it." },
|
|
@@ -16269,11 +16290,11 @@ function computeWorkstyle(inp) {
|
|
|
16269
16290
|
|
|
16270
16291
|
// ../../lib/calibration/index.ts
|
|
16271
16292
|
var DEFAULT_CALIBRATION = {
|
|
16272
|
-
version: "2026-07-
|
|
16293
|
+
version: "2026-07-15.1",
|
|
16273
16294
|
// = RUBRIC_FINGERPRINT of the shipped npm rubric (packages/coding-analyzer/
|
|
16274
16295
|
// src/grade/criteria.ts). A unit test fails loud when the rubric changes
|
|
16275
16296
|
// without this being updated (and re-pushed to the server).
|
|
16276
|
-
rubricVersion: "
|
|
16297
|
+
rubricVersion: "7983c01d53",
|
|
16277
16298
|
// Canonical scale = the one the product owner set for the public report
|
|
16278
16299
|
// (11=0.01% … 8=2%), extended downward from the old report ladder. The old
|
|
16279
16300
|
// CodeAnalysisView / npm-viewer maps (7→10%/15%, 6→25%/30%) were drift, not
|
|
@@ -151,6 +151,25 @@ import { spawn } from "child_process";
|
|
|
151
151
|
import { promises as fs2 } from "fs";
|
|
152
152
|
import path2 from "path";
|
|
153
153
|
|
|
154
|
+
// ../coding-core/dist/env.js
|
|
155
|
+
var AUTH_VARS = ["ANTHROPIC_API_KEY", "ANTHROPIC_AUTH_TOKEN"];
|
|
156
|
+
var warned = false;
|
|
157
|
+
function claudeCliEnv(base = process.env) {
|
|
158
|
+
if (process.env.POLYMATH_USE_API_KEY === "1")
|
|
159
|
+
return base;
|
|
160
|
+
const present = AUTH_VARS.filter((k) => base[k]);
|
|
161
|
+
if (!present.length)
|
|
162
|
+
return base;
|
|
163
|
+
if (!warned) {
|
|
164
|
+
warned = true;
|
|
165
|
+
console.error(`[polymath-society] ${present.join(" + ")} is set in your shell \u2014 ignoring it so the analysis runs on your claude.ai login (the key would take over auth and either fail or bill your API account). Set POLYMATH_USE_API_KEY=1 if you really want the API key used.`);
|
|
166
|
+
}
|
|
167
|
+
const scrubbed = { ...base };
|
|
168
|
+
for (const k of AUTH_VARS)
|
|
169
|
+
delete scrubbed[k];
|
|
170
|
+
return scrubbed;
|
|
171
|
+
}
|
|
172
|
+
|
|
154
173
|
// ../../lib/agents/shared/adapter.ts
|
|
155
174
|
function extractJson(text2) {
|
|
156
175
|
const fences = [...text2.matchAll(/```json\s*([\s\S]*?)```/gi)];
|
|
@@ -255,7 +274,9 @@ var cliAdapter = {
|
|
|
255
274
|
await new Promise((resolve2, reject) => {
|
|
256
275
|
const child = spawn(CLAUDE_BIN, args, {
|
|
257
276
|
cwd: inv.cwd ?? inv.addDir,
|
|
258
|
-
|
|
277
|
+
// scrubbed: a stray ANTHROPIC_API_KEY in the user's shell hijacks the
|
|
278
|
+
// claude CLI away from their claude.ai login (coding-core/env.ts)
|
|
279
|
+
env: claudeCliEnv(),
|
|
259
280
|
stdio: ["ignore", "pipe", "pipe"],
|
|
260
281
|
// Own process group, so a timeout can kill the WHOLE tree (claude spawns
|
|
261
282
|
// its own children that otherwise orphan and pile up — the root cause of
|
|
@@ -15901,7 +15922,7 @@ var CODING_CRITERIA = [
|
|
|
15901
15922
|
label: "Abstraction \u2014 seeing the load-bearing thing, and being right",
|
|
15902
15923
|
graded: true,
|
|
15903
15924
|
definition: "Under genuine ambiguity (an obvious path sitting right there, no answer key): did the USER see that the obvious path was subtly wrong \u2014 or that something decisive was invisible \u2014 and do the non-obvious thing that made it right, AND were they right? The graded unit is the whole move: the CATCH (noticing the fork) -> the QUESTION (formulating it) -> the CALL (resolving it). The move surfaces three interchangeable ways, scored identically: a REFRAME (collapse a mess to its real axis), a QUESTION (pose the hard thing nobody posed), or an INSTRUMENT (build the code/chart/structure that makes the truth legible, then read it). Tag the SUBSTANCE, not the medium \u2014 a chart built (technical act) to make a human-intensity call legible is a JUDGMENT catch.",
|
|
15904
|
-
read: "FOUR LEVERS set the height: (1) INVISIBILITY \u2014 how non-obvious there was anything to catch; a sharp operator in the flow drives past it (the DOMINANT lever); (2) DIFFICULTY of forming the catch; (3) STAKES \u2014 'without this, things silently go wrong' is the 9-10 condition; (4) SOUNDNESS \u2014 did the call hold. THREE OVERRIDING GATES: (a) OBVIOUSNESS KILLS IT \u2014 a correct, even load-bearing catch a sharp operator reaches anyway scores LOW ('you're evaluating the person not the AI' is correct but obvious -> ~5; 'compute in the OAuth dead-time' is real but fairly obvious -> ~6). (b) LEVERAGE BEATS INSIGHT \u2014 a move whose payoff is a HIGHER RATE OF FUTURE INSIGHT (building the tool that lets him set his own boundaries; timestamp-by-timestamp structure to instruct the grader precisely) raises the bandwidth of the loop that produces every later catch, and can outrank a clean one-off reframe. (c) SOUNDNESS GATE \u2014 a confident WRONG call to a noticed fork is an ANTI-SIGNAL; an honest 'not sure, here's a range' is NOT penalized. HUNT THE FORK BLIND \u2014 reconstruct what continuing-without-noticing looked like, then check whether/why he diverged; do NOT hand yourself the fork pre-formed or you score everyone's problem-finding a 10. TAG every instance: kind = systems | judgment | both (+ optional register: human/product/measurement). Reasoning and instrument-building are the SAME criterion. ANCHORS: 10 = 'OCEAN won't change, measure effectiveness of actions' (reframe that redefines the measure) /
|
|
15925
|
+
read: "FOUR LEVERS set the height: (1) INVISIBILITY \u2014 how non-obvious there was anything to catch; a sharp operator in the flow drives past it (the DOMINANT lever); (2) DIFFICULTY of forming the catch; (3) STAKES \u2014 'without this, things silently go wrong' is the 9-10 condition; (4) SOUNDNESS \u2014 did the call hold. THREE OVERRIDING GATES: (a) OBVIOUSNESS KILLS IT \u2014 a correct, even load-bearing catch a sharp operator reaches anyway scores LOW ('you're evaluating the person not the AI' is correct but obvious -> ~5; 'compute in the OAuth dead-time' is real but fairly obvious -> ~6). (b) LEVERAGE BEATS INSIGHT \u2014 a move whose payoff is a HIGHER RATE OF FUTURE INSIGHT (building the tool that lets him set his own boundaries; timestamp-by-timestamp structure to instruct the grader precisely) raises the bandwidth of the loop that produces every later catch, and can outrank a clean one-off reframe. (c) SOUNDNESS GATE \u2014 a confident WRONG call to a noticed fork is an ANTI-SIGNAL; an honest 'not sure, here's a range' is NOT penalized. HUNT THE FORK BLIND \u2014 reconstruct what continuing-without-noticing looked like, then check whether/why he diverged; do NOT hand yourself the fork pre-formed or you score everyone's problem-finding a 10. TAG every instance: kind = systems | judgment | both (+ optional register: human/product/measurement). Reasoning and instrument-building are the SAME criterion. ANCHORS: 10 = 'OCEAN won't change, measure effectiveness of actions' (reframe that redefines the measure) / a human-stakes call where the person overrode the analytically-clean answer on knowledge only they could have about someone involved, and was right (lived judgment, requires being the person) / 'plot it sorted, let me set the boundaries' (leverage \u2014 builds the bandwidth tool); 9 = 'word count IS the proxy \u2014 sitting there is unfakeable focus' / 'uncertainty collapses in that direction'; 8 = 'a better metric is the difficulty of content + original synthesis' (hard opening question); 7 = 'this candidate seems too strong for his judgement to be real' (real non-obvious catch, modest stakes); 6 = 'compute in the OAuth dead-time' / 'why overcomplicate it, single agent' (real but obvious); 5 = 'you're evaluating the person not the AI' (correct but obvious).",
|
|
15905
15926
|
rungs: [
|
|
15906
15927
|
{ level: 2, marker: "A fork existed; defers the call to the AI, or takes the obvious branch; vague." },
|
|
15907
15928
|
{ level: 4, marker: "Notices something, but the question is vague or obvious \u2014 anyone in the seat asks it." },
|
|
@@ -16012,11 +16033,11 @@ var TRANSCRIPT_LINE_RE = new RegExp(`^\\s*(${NOTE})((,| and) ${NOTE})*\\s*$|^\\s
|
|
|
16012
16033
|
|
|
16013
16034
|
// ../../lib/calibration/index.ts
|
|
16014
16035
|
var DEFAULT_CALIBRATION = {
|
|
16015
|
-
version: "2026-07-
|
|
16036
|
+
version: "2026-07-15.1",
|
|
16016
16037
|
// = RUBRIC_FINGERPRINT of the shipped npm rubric (packages/coding-analyzer/
|
|
16017
16038
|
// src/grade/criteria.ts). A unit test fails loud when the rubric changes
|
|
16018
16039
|
// without this being updated (and re-pushed to the server).
|
|
16019
|
-
rubricVersion: "
|
|
16040
|
+
rubricVersion: "7983c01d53",
|
|
16020
16041
|
// Canonical scale = the one the product owner set for the public report
|
|
16021
16042
|
// (11=0.01% … 8=2%), extended downward from the old report ladder. The old
|
|
16022
16043
|
// CodeAnalysisView / npm-viewer maps (7→10%/15%, 6→25%/30%) were drift, not
|
|
@@ -151,6 +151,25 @@ import { spawn } from "child_process";
|
|
|
151
151
|
import { promises as fs2 } from "fs";
|
|
152
152
|
import path2 from "path";
|
|
153
153
|
|
|
154
|
+
// ../coding-core/dist/env.js
|
|
155
|
+
var AUTH_VARS = ["ANTHROPIC_API_KEY", "ANTHROPIC_AUTH_TOKEN"];
|
|
156
|
+
var warned = false;
|
|
157
|
+
function claudeCliEnv(base = process.env) {
|
|
158
|
+
if (process.env.POLYMATH_USE_API_KEY === "1")
|
|
159
|
+
return base;
|
|
160
|
+
const present = AUTH_VARS.filter((k) => base[k]);
|
|
161
|
+
if (!present.length)
|
|
162
|
+
return base;
|
|
163
|
+
if (!warned) {
|
|
164
|
+
warned = true;
|
|
165
|
+
console.error(`[polymath-society] ${present.join(" + ")} is set in your shell \u2014 ignoring it so the analysis runs on your claude.ai login (the key would take over auth and either fail or bill your API account). Set POLYMATH_USE_API_KEY=1 if you really want the API key used.`);
|
|
166
|
+
}
|
|
167
|
+
const scrubbed = { ...base };
|
|
168
|
+
for (const k of AUTH_VARS)
|
|
169
|
+
delete scrubbed[k];
|
|
170
|
+
return scrubbed;
|
|
171
|
+
}
|
|
172
|
+
|
|
154
173
|
// ../../lib/agents/shared/adapter.ts
|
|
155
174
|
function extractJson(text2) {
|
|
156
175
|
const fences = [...text2.matchAll(/```json\s*([\s\S]*?)```/gi)];
|
|
@@ -255,7 +274,9 @@ var cliAdapter = {
|
|
|
255
274
|
await new Promise((resolve2, reject) => {
|
|
256
275
|
const child = spawn(CLAUDE_BIN, args, {
|
|
257
276
|
cwd: inv.cwd ?? inv.addDir,
|
|
258
|
-
|
|
277
|
+
// scrubbed: a stray ANTHROPIC_API_KEY in the user's shell hijacks the
|
|
278
|
+
// claude CLI away from their claude.ai login (coding-core/env.ts)
|
|
279
|
+
env: claudeCliEnv(),
|
|
259
280
|
stdio: ["ignore", "pipe", "pipe"],
|
|
260
281
|
// Own process group, so a timeout can kill the WHOLE tree (claude spawns
|
|
261
282
|
// its own children that otherwise orphan and pile up — the root cause of
|
|
@@ -16308,7 +16329,7 @@ var CODING_CRITERIA = [
|
|
|
16308
16329
|
label: "Abstraction \u2014 seeing the load-bearing thing, and being right",
|
|
16309
16330
|
graded: true,
|
|
16310
16331
|
definition: "Under genuine ambiguity (an obvious path sitting right there, no answer key): did the USER see that the obvious path was subtly wrong \u2014 or that something decisive was invisible \u2014 and do the non-obvious thing that made it right, AND were they right? The graded unit is the whole move: the CATCH (noticing the fork) -> the QUESTION (formulating it) -> the CALL (resolving it). The move surfaces three interchangeable ways, scored identically: a REFRAME (collapse a mess to its real axis), a QUESTION (pose the hard thing nobody posed), or an INSTRUMENT (build the code/chart/structure that makes the truth legible, then read it). Tag the SUBSTANCE, not the medium \u2014 a chart built (technical act) to make a human-intensity call legible is a JUDGMENT catch.",
|
|
16311
|
-
read: "FOUR LEVERS set the height: (1) INVISIBILITY \u2014 how non-obvious there was anything to catch; a sharp operator in the flow drives past it (the DOMINANT lever); (2) DIFFICULTY of forming the catch; (3) STAKES \u2014 'without this, things silently go wrong' is the 9-10 condition; (4) SOUNDNESS \u2014 did the call hold. THREE OVERRIDING GATES: (a) OBVIOUSNESS KILLS IT \u2014 a correct, even load-bearing catch a sharp operator reaches anyway scores LOW ('you're evaluating the person not the AI' is correct but obvious -> ~5; 'compute in the OAuth dead-time' is real but fairly obvious -> ~6). (b) LEVERAGE BEATS INSIGHT \u2014 a move whose payoff is a HIGHER RATE OF FUTURE INSIGHT (building the tool that lets him set his own boundaries; timestamp-by-timestamp structure to instruct the grader precisely) raises the bandwidth of the loop that produces every later catch, and can outrank a clean one-off reframe. (c) SOUNDNESS GATE \u2014 a confident WRONG call to a noticed fork is an ANTI-SIGNAL; an honest 'not sure, here's a range' is NOT penalized. HUNT THE FORK BLIND \u2014 reconstruct what continuing-without-noticing looked like, then check whether/why he diverged; do NOT hand yourself the fork pre-formed or you score everyone's problem-finding a 10. TAG every instance: kind = systems | judgment | both (+ optional register: human/product/measurement). Reasoning and instrument-building are the SAME criterion. ANCHORS: 10 = 'OCEAN won't change, measure effectiveness of actions' (reframe that redefines the measure) /
|
|
16332
|
+
read: "FOUR LEVERS set the height: (1) INVISIBILITY \u2014 how non-obvious there was anything to catch; a sharp operator in the flow drives past it (the DOMINANT lever); (2) DIFFICULTY of forming the catch; (3) STAKES \u2014 'without this, things silently go wrong' is the 9-10 condition; (4) SOUNDNESS \u2014 did the call hold. THREE OVERRIDING GATES: (a) OBVIOUSNESS KILLS IT \u2014 a correct, even load-bearing catch a sharp operator reaches anyway scores LOW ('you're evaluating the person not the AI' is correct but obvious -> ~5; 'compute in the OAuth dead-time' is real but fairly obvious -> ~6). (b) LEVERAGE BEATS INSIGHT \u2014 a move whose payoff is a HIGHER RATE OF FUTURE INSIGHT (building the tool that lets him set his own boundaries; timestamp-by-timestamp structure to instruct the grader precisely) raises the bandwidth of the loop that produces every later catch, and can outrank a clean one-off reframe. (c) SOUNDNESS GATE \u2014 a confident WRONG call to a noticed fork is an ANTI-SIGNAL; an honest 'not sure, here's a range' is NOT penalized. HUNT THE FORK BLIND \u2014 reconstruct what continuing-without-noticing looked like, then check whether/why he diverged; do NOT hand yourself the fork pre-formed or you score everyone's problem-finding a 10. TAG every instance: kind = systems | judgment | both (+ optional register: human/product/measurement). Reasoning and instrument-building are the SAME criterion. ANCHORS: 10 = 'OCEAN won't change, measure effectiveness of actions' (reframe that redefines the measure) / a human-stakes call where the person overrode the analytically-clean answer on knowledge only they could have about someone involved, and was right (lived judgment, requires being the person) / 'plot it sorted, let me set the boundaries' (leverage \u2014 builds the bandwidth tool); 9 = 'word count IS the proxy \u2014 sitting there is unfakeable focus' / 'uncertainty collapses in that direction'; 8 = 'a better metric is the difficulty of content + original synthesis' (hard opening question); 7 = 'this candidate seems too strong for his judgement to be real' (real non-obvious catch, modest stakes); 6 = 'compute in the OAuth dead-time' / 'why overcomplicate it, single agent' (real but obvious); 5 = 'you're evaluating the person not the AI' (correct but obvious).",
|
|
16312
16333
|
rungs: [
|
|
16313
16334
|
{ level: 2, marker: "A fork existed; defers the call to the AI, or takes the obvious branch; vague." },
|
|
16314
16335
|
{ level: 4, marker: "Notices something, but the question is vague or obvious \u2014 anyone in the seat asks it." },
|
|
@@ -16419,11 +16440,11 @@ var TRANSCRIPT_LINE_RE = new RegExp(`^\\s*(${NOTE})((,| and) ${NOTE})*\\s*$|^\\s
|
|
|
16419
16440
|
|
|
16420
16441
|
// ../../lib/calibration/index.ts
|
|
16421
16442
|
var DEFAULT_CALIBRATION = {
|
|
16422
|
-
version: "2026-07-
|
|
16443
|
+
version: "2026-07-15.1",
|
|
16423
16444
|
// = RUBRIC_FINGERPRINT of the shipped npm rubric (packages/coding-analyzer/
|
|
16424
16445
|
// src/grade/criteria.ts). A unit test fails loud when the rubric changes
|
|
16425
16446
|
// without this being updated (and re-pushed to the server).
|
|
16426
|
-
rubricVersion: "
|
|
16447
|
+
rubricVersion: "7983c01d53",
|
|
16427
16448
|
// Canonical scale = the one the product owner set for the public report
|
|
16428
16449
|
// (11=0.01% … 8=2%), extended downward from the old report ladder. The old
|
|
16429
16450
|
// CodeAnalysisView / npm-viewer maps (7→10%/15%, 6→25%/30%) were drift, not
|
|
@@ -147,6 +147,25 @@ import { spawn } from "child_process";
|
|
|
147
147
|
import { promises as fs2 } from "fs";
|
|
148
148
|
import path2 from "path";
|
|
149
149
|
|
|
150
|
+
// ../coding-core/dist/env.js
|
|
151
|
+
var AUTH_VARS = ["ANTHROPIC_API_KEY", "ANTHROPIC_AUTH_TOKEN"];
|
|
152
|
+
var warned = false;
|
|
153
|
+
function claudeCliEnv(base = process.env) {
|
|
154
|
+
if (process.env.POLYMATH_USE_API_KEY === "1")
|
|
155
|
+
return base;
|
|
156
|
+
const present = AUTH_VARS.filter((k) => base[k]);
|
|
157
|
+
if (!present.length)
|
|
158
|
+
return base;
|
|
159
|
+
if (!warned) {
|
|
160
|
+
warned = true;
|
|
161
|
+
console.error(`[polymath-society] ${present.join(" + ")} is set in your shell \u2014 ignoring it so the analysis runs on your claude.ai login (the key would take over auth and either fail or bill your API account). Set POLYMATH_USE_API_KEY=1 if you really want the API key used.`);
|
|
162
|
+
}
|
|
163
|
+
const scrubbed = { ...base };
|
|
164
|
+
for (const k of AUTH_VARS)
|
|
165
|
+
delete scrubbed[k];
|
|
166
|
+
return scrubbed;
|
|
167
|
+
}
|
|
168
|
+
|
|
150
169
|
// ../../lib/agents/shared/adapter.ts
|
|
151
170
|
function extractJson(text2) {
|
|
152
171
|
const fences = [...text2.matchAll(/```json\s*([\s\S]*?)```/gi)];
|
|
@@ -251,7 +270,9 @@ var cliAdapter = {
|
|
|
251
270
|
await new Promise((resolve2, reject) => {
|
|
252
271
|
const child = spawn(CLAUDE_BIN, args, {
|
|
253
272
|
cwd: inv.cwd ?? inv.addDir,
|
|
254
|
-
|
|
273
|
+
// scrubbed: a stray ANTHROPIC_API_KEY in the user's shell hijacks the
|
|
274
|
+
// claude CLI away from their claude.ai login (coding-core/env.ts)
|
|
275
|
+
env: claudeCliEnv(),
|
|
255
276
|
stdio: ["ignore", "pipe", "pipe"],
|
|
256
277
|
// Own process group, so a timeout can kill the WHOLE tree (claude spawns
|
|
257
278
|
// its own children that otherwise orphan and pile up — the root cause of
|
|
@@ -15918,7 +15939,7 @@ var CODING_CRITERIA = [
|
|
|
15918
15939
|
label: "Abstraction \u2014 seeing the load-bearing thing, and being right",
|
|
15919
15940
|
graded: true,
|
|
15920
15941
|
definition: "Under genuine ambiguity (an obvious path sitting right there, no answer key): did the USER see that the obvious path was subtly wrong \u2014 or that something decisive was invisible \u2014 and do the non-obvious thing that made it right, AND were they right? The graded unit is the whole move: the CATCH (noticing the fork) -> the QUESTION (formulating it) -> the CALL (resolving it). The move surfaces three interchangeable ways, scored identically: a REFRAME (collapse a mess to its real axis), a QUESTION (pose the hard thing nobody posed), or an INSTRUMENT (build the code/chart/structure that makes the truth legible, then read it). Tag the SUBSTANCE, not the medium \u2014 a chart built (technical act) to make a human-intensity call legible is a JUDGMENT catch.",
|
|
15921
|
-
read: "FOUR LEVERS set the height: (1) INVISIBILITY \u2014 how non-obvious there was anything to catch; a sharp operator in the flow drives past it (the DOMINANT lever); (2) DIFFICULTY of forming the catch; (3) STAKES \u2014 'without this, things silently go wrong' is the 9-10 condition; (4) SOUNDNESS \u2014 did the call hold. THREE OVERRIDING GATES: (a) OBVIOUSNESS KILLS IT \u2014 a correct, even load-bearing catch a sharp operator reaches anyway scores LOW ('you're evaluating the person not the AI' is correct but obvious -> ~5; 'compute in the OAuth dead-time' is real but fairly obvious -> ~6). (b) LEVERAGE BEATS INSIGHT \u2014 a move whose payoff is a HIGHER RATE OF FUTURE INSIGHT (building the tool that lets him set his own boundaries; timestamp-by-timestamp structure to instruct the grader precisely) raises the bandwidth of the loop that produces every later catch, and can outrank a clean one-off reframe. (c) SOUNDNESS GATE \u2014 a confident WRONG call to a noticed fork is an ANTI-SIGNAL; an honest 'not sure, here's a range' is NOT penalized. HUNT THE FORK BLIND \u2014 reconstruct what continuing-without-noticing looked like, then check whether/why he diverged; do NOT hand yourself the fork pre-formed or you score everyone's problem-finding a 10. TAG every instance: kind = systems | judgment | both (+ optional register: human/product/measurement). Reasoning and instrument-building are the SAME criterion. ANCHORS: 10 = 'OCEAN won't change, measure effectiveness of actions' (reframe that redefines the measure) /
|
|
15942
|
+
read: "FOUR LEVERS set the height: (1) INVISIBILITY \u2014 how non-obvious there was anything to catch; a sharp operator in the flow drives past it (the DOMINANT lever); (2) DIFFICULTY of forming the catch; (3) STAKES \u2014 'without this, things silently go wrong' is the 9-10 condition; (4) SOUNDNESS \u2014 did the call hold. THREE OVERRIDING GATES: (a) OBVIOUSNESS KILLS IT \u2014 a correct, even load-bearing catch a sharp operator reaches anyway scores LOW ('you're evaluating the person not the AI' is correct but obvious -> ~5; 'compute in the OAuth dead-time' is real but fairly obvious -> ~6). (b) LEVERAGE BEATS INSIGHT \u2014 a move whose payoff is a HIGHER RATE OF FUTURE INSIGHT (building the tool that lets him set his own boundaries; timestamp-by-timestamp structure to instruct the grader precisely) raises the bandwidth of the loop that produces every later catch, and can outrank a clean one-off reframe. (c) SOUNDNESS GATE \u2014 a confident WRONG call to a noticed fork is an ANTI-SIGNAL; an honest 'not sure, here's a range' is NOT penalized. HUNT THE FORK BLIND \u2014 reconstruct what continuing-without-noticing looked like, then check whether/why he diverged; do NOT hand yourself the fork pre-formed or you score everyone's problem-finding a 10. TAG every instance: kind = systems | judgment | both (+ optional register: human/product/measurement). Reasoning and instrument-building are the SAME criterion. ANCHORS: 10 = 'OCEAN won't change, measure effectiveness of actions' (reframe that redefines the measure) / a human-stakes call where the person overrode the analytically-clean answer on knowledge only they could have about someone involved, and was right (lived judgment, requires being the person) / 'plot it sorted, let me set the boundaries' (leverage \u2014 builds the bandwidth tool); 9 = 'word count IS the proxy \u2014 sitting there is unfakeable focus' / 'uncertainty collapses in that direction'; 8 = 'a better metric is the difficulty of content + original synthesis' (hard opening question); 7 = 'this candidate seems too strong for his judgement to be real' (real non-obvious catch, modest stakes); 6 = 'compute in the OAuth dead-time' / 'why overcomplicate it, single agent' (real but obvious); 5 = 'you're evaluating the person not the AI' (correct but obvious).",
|
|
15922
15943
|
rungs: [
|
|
15923
15944
|
{ level: 2, marker: "A fork existed; defers the call to the AI, or takes the obvious branch; vague." },
|
|
15924
15945
|
{ level: 4, marker: "Notices something, but the question is vague or obvious \u2014 anyone in the seat asks it." },
|
|
@@ -16029,11 +16050,11 @@ var TRANSCRIPT_LINE_RE = new RegExp(`^\\s*(${NOTE})((,| and) ${NOTE})*\\s*$|^\\s
|
|
|
16029
16050
|
|
|
16030
16051
|
// ../../lib/calibration/index.ts
|
|
16031
16052
|
var DEFAULT_CALIBRATION = {
|
|
16032
|
-
version: "2026-07-
|
|
16053
|
+
version: "2026-07-15.1",
|
|
16033
16054
|
// = RUBRIC_FINGERPRINT of the shipped npm rubric (packages/coding-analyzer/
|
|
16034
16055
|
// src/grade/criteria.ts). A unit test fails loud when the rubric changes
|
|
16035
16056
|
// without this being updated (and re-pushed to the server).
|
|
16036
|
-
rubricVersion: "
|
|
16057
|
+
rubricVersion: "7983c01d53",
|
|
16037
16058
|
// Canonical scale = the one the product owner set for the public report
|
|
16038
16059
|
// (11=0.01% … 8=2%), extended downward from the old report ladder. The old
|
|
16039
16060
|
// CodeAnalysisView / npm-viewer maps (7→10%/15%, 6→25%/30%) were drift, not
|
|
@@ -287,7 +287,7 @@ var CODING_CRITERIA = [
|
|
|
287
287
|
label: "Abstraction \u2014 seeing the load-bearing thing, and being right",
|
|
288
288
|
graded: true,
|
|
289
289
|
definition: "Under genuine ambiguity (an obvious path sitting right there, no answer key): did the USER see that the obvious path was subtly wrong \u2014 or that something decisive was invisible \u2014 and do the non-obvious thing that made it right, AND were they right? The graded unit is the whole move: the CATCH (noticing the fork) -> the QUESTION (formulating it) -> the CALL (resolving it). The move surfaces three interchangeable ways, scored identically: a REFRAME (collapse a mess to its real axis), a QUESTION (pose the hard thing nobody posed), or an INSTRUMENT (build the code/chart/structure that makes the truth legible, then read it). Tag the SUBSTANCE, not the medium \u2014 a chart built (technical act) to make a human-intensity call legible is a JUDGMENT catch.",
|
|
290
|
-
read: "FOUR LEVERS set the height: (1) INVISIBILITY \u2014 how non-obvious there was anything to catch; a sharp operator in the flow drives past it (the DOMINANT lever); (2) DIFFICULTY of forming the catch; (3) STAKES \u2014 'without this, things silently go wrong' is the 9-10 condition; (4) SOUNDNESS \u2014 did the call hold. THREE OVERRIDING GATES: (a) OBVIOUSNESS KILLS IT \u2014 a correct, even load-bearing catch a sharp operator reaches anyway scores LOW ('you're evaluating the person not the AI' is correct but obvious -> ~5; 'compute in the OAuth dead-time' is real but fairly obvious -> ~6). (b) LEVERAGE BEATS INSIGHT \u2014 a move whose payoff is a HIGHER RATE OF FUTURE INSIGHT (building the tool that lets him set his own boundaries; timestamp-by-timestamp structure to instruct the grader precisely) raises the bandwidth of the loop that produces every later catch, and can outrank a clean one-off reframe. (c) SOUNDNESS GATE \u2014 a confident WRONG call to a noticed fork is an ANTI-SIGNAL; an honest 'not sure, here's a range' is NOT penalized. HUNT THE FORK BLIND \u2014 reconstruct what continuing-without-noticing looked like, then check whether/why he diverged; do NOT hand yourself the fork pre-formed or you score everyone's problem-finding a 10. TAG every instance: kind = systems | judgment | both (+ optional register: human/product/measurement). Reasoning and instrument-building are the SAME criterion. ANCHORS: 10 = 'OCEAN won't change, measure effectiveness of actions' (reframe that redefines the measure) /
|
|
290
|
+
read: "FOUR LEVERS set the height: (1) INVISIBILITY \u2014 how non-obvious there was anything to catch; a sharp operator in the flow drives past it (the DOMINANT lever); (2) DIFFICULTY of forming the catch; (3) STAKES \u2014 'without this, things silently go wrong' is the 9-10 condition; (4) SOUNDNESS \u2014 did the call hold. THREE OVERRIDING GATES: (a) OBVIOUSNESS KILLS IT \u2014 a correct, even load-bearing catch a sharp operator reaches anyway scores LOW ('you're evaluating the person not the AI' is correct but obvious -> ~5; 'compute in the OAuth dead-time' is real but fairly obvious -> ~6). (b) LEVERAGE BEATS INSIGHT \u2014 a move whose payoff is a HIGHER RATE OF FUTURE INSIGHT (building the tool that lets him set his own boundaries; timestamp-by-timestamp structure to instruct the grader precisely) raises the bandwidth of the loop that produces every later catch, and can outrank a clean one-off reframe. (c) SOUNDNESS GATE \u2014 a confident WRONG call to a noticed fork is an ANTI-SIGNAL; an honest 'not sure, here's a range' is NOT penalized. HUNT THE FORK BLIND \u2014 reconstruct what continuing-without-noticing looked like, then check whether/why he diverged; do NOT hand yourself the fork pre-formed or you score everyone's problem-finding a 10. TAG every instance: kind = systems | judgment | both (+ optional register: human/product/measurement). Reasoning and instrument-building are the SAME criterion. ANCHORS: 10 = 'OCEAN won't change, measure effectiveness of actions' (reframe that redefines the measure) / a human-stakes call where the person overrode the analytically-clean answer on knowledge only they could have about someone involved, and was right (lived judgment, requires being the person) / 'plot it sorted, let me set the boundaries' (leverage \u2014 builds the bandwidth tool); 9 = 'word count IS the proxy \u2014 sitting there is unfakeable focus' / 'uncertainty collapses in that direction'; 8 = 'a better metric is the difficulty of content + original synthesis' (hard opening question); 7 = 'this candidate seems too strong for his judgement to be real' (real non-obvious catch, modest stakes); 6 = 'compute in the OAuth dead-time' / 'why overcomplicate it, single agent' (real but obvious); 5 = 'you're evaluating the person not the AI' (correct but obvious).",
|
|
291
291
|
rungs: [
|
|
292
292
|
{ level: 2, marker: "A fork existed; defers the call to the AI, or takes the obvious branch; vague." },
|
|
293
293
|
{ level: 4, marker: "Notices something, but the question is vague or obvious \u2014 anyone in the seat asks it." },
|
|
@@ -394,11 +394,11 @@ var IDLE_CAP_MS = 12 * 6e4;
|
|
|
394
394
|
|
|
395
395
|
// ../../lib/calibration/index.ts
|
|
396
396
|
var DEFAULT_CALIBRATION = {
|
|
397
|
-
version: "2026-07-
|
|
397
|
+
version: "2026-07-15.1",
|
|
398
398
|
// = RUBRIC_FINGERPRINT of the shipped npm rubric (packages/coding-analyzer/
|
|
399
399
|
// src/grade/criteria.ts). A unit test fails loud when the rubric changes
|
|
400
400
|
// without this being updated (and re-pushed to the server).
|
|
401
|
-
rubricVersion: "
|
|
401
|
+
rubricVersion: "7983c01d53",
|
|
402
402
|
// Canonical scale = the one the product owner set for the public report
|
|
403
403
|
// (11=0.01% … 8=2%), extended downward from the old report ladder. The old
|
|
404
404
|
// CodeAnalysisView / npm-viewer maps (7→10%/15%, 6→25%/30%) were drift, not
|
|
@@ -159,6 +159,25 @@ import { spawn } from "child_process";
|
|
|
159
159
|
import { promises as fs2 } from "fs";
|
|
160
160
|
import path2 from "path";
|
|
161
161
|
|
|
162
|
+
// ../coding-core/dist/env.js
|
|
163
|
+
var AUTH_VARS = ["ANTHROPIC_API_KEY", "ANTHROPIC_AUTH_TOKEN"];
|
|
164
|
+
var warned = false;
|
|
165
|
+
function claudeCliEnv(base = process.env) {
|
|
166
|
+
if (process.env.POLYMATH_USE_API_KEY === "1")
|
|
167
|
+
return base;
|
|
168
|
+
const present = AUTH_VARS.filter((k) => base[k]);
|
|
169
|
+
if (!present.length)
|
|
170
|
+
return base;
|
|
171
|
+
if (!warned) {
|
|
172
|
+
warned = true;
|
|
173
|
+
console.error(`[polymath-society] ${present.join(" + ")} is set in your shell \u2014 ignoring it so the analysis runs on your claude.ai login (the key would take over auth and either fail or bill your API account). Set POLYMATH_USE_API_KEY=1 if you really want the API key used.`);
|
|
174
|
+
}
|
|
175
|
+
const scrubbed = { ...base };
|
|
176
|
+
for (const k of AUTH_VARS)
|
|
177
|
+
delete scrubbed[k];
|
|
178
|
+
return scrubbed;
|
|
179
|
+
}
|
|
180
|
+
|
|
162
181
|
// ../../lib/agents/shared/adapter.ts
|
|
163
182
|
function extractJson(text2) {
|
|
164
183
|
const fences = [...text2.matchAll(/```json\s*([\s\S]*?)```/gi)];
|
|
@@ -263,7 +282,9 @@ var cliAdapter = {
|
|
|
263
282
|
await new Promise((resolve2, reject) => {
|
|
264
283
|
const child = spawn(CLAUDE_BIN, args, {
|
|
265
284
|
cwd: inv.cwd ?? inv.addDir,
|
|
266
|
-
|
|
285
|
+
// scrubbed: a stray ANTHROPIC_API_KEY in the user's shell hijacks the
|
|
286
|
+
// claude CLI away from their claude.ai login (coding-core/env.ts)
|
|
287
|
+
env: claudeCliEnv(),
|
|
267
288
|
stdio: ["ignore", "pipe", "pipe"],
|
|
268
289
|
// Own process group, so a timeout can kill the WHOLE tree (claude spawns
|
|
269
290
|
// its own children that otherwise orphan and pile up — the root cause of
|
|
@@ -145,6 +145,25 @@ import { spawn } from "child_process";
|
|
|
145
145
|
import { promises as fs2 } from "fs";
|
|
146
146
|
import path2 from "path";
|
|
147
147
|
|
|
148
|
+
// ../coding-core/dist/env.js
|
|
149
|
+
var AUTH_VARS = ["ANTHROPIC_API_KEY", "ANTHROPIC_AUTH_TOKEN"];
|
|
150
|
+
var warned = false;
|
|
151
|
+
function claudeCliEnv(base = process.env) {
|
|
152
|
+
if (process.env.POLYMATH_USE_API_KEY === "1")
|
|
153
|
+
return base;
|
|
154
|
+
const present = AUTH_VARS.filter((k) => base[k]);
|
|
155
|
+
if (!present.length)
|
|
156
|
+
return base;
|
|
157
|
+
if (!warned) {
|
|
158
|
+
warned = true;
|
|
159
|
+
console.error(`[polymath-society] ${present.join(" + ")} is set in your shell \u2014 ignoring it so the analysis runs on your claude.ai login (the key would take over auth and either fail or bill your API account). Set POLYMATH_USE_API_KEY=1 if you really want the API key used.`);
|
|
160
|
+
}
|
|
161
|
+
const scrubbed = { ...base };
|
|
162
|
+
for (const k of AUTH_VARS)
|
|
163
|
+
delete scrubbed[k];
|
|
164
|
+
return scrubbed;
|
|
165
|
+
}
|
|
166
|
+
|
|
148
167
|
// ../../lib/agents/shared/adapter.ts
|
|
149
168
|
function extractJson(text2) {
|
|
150
169
|
const fences = [...text2.matchAll(/```json\s*([\s\S]*?)```/gi)];
|
|
@@ -249,7 +268,9 @@ var cliAdapter = {
|
|
|
249
268
|
await new Promise((resolve2, reject) => {
|
|
250
269
|
const child = spawn(CLAUDE_BIN, args, {
|
|
251
270
|
cwd: inv.cwd ?? inv.addDir,
|
|
252
|
-
|
|
271
|
+
// scrubbed: a stray ANTHROPIC_API_KEY in the user's shell hijacks the
|
|
272
|
+
// claude CLI away from their claude.ai login (coding-core/env.ts)
|
|
273
|
+
env: claudeCliEnv(),
|
|
253
274
|
stdio: ["ignore", "pipe", "pipe"],
|
|
254
275
|
// Own process group, so a timeout can kill the WHOLE tree (claude spawns
|
|
255
276
|
// its own children that otherwise orphan and pile up — the root cause of
|
|
@@ -15884,7 +15905,7 @@ var CODING_CRITERIA = [
|
|
|
15884
15905
|
label: "Abstraction \u2014 seeing the load-bearing thing, and being right",
|
|
15885
15906
|
graded: true,
|
|
15886
15907
|
definition: "Under genuine ambiguity (an obvious path sitting right there, no answer key): did the USER see that the obvious path was subtly wrong \u2014 or that something decisive was invisible \u2014 and do the non-obvious thing that made it right, AND were they right? The graded unit is the whole move: the CATCH (noticing the fork) -> the QUESTION (formulating it) -> the CALL (resolving it). The move surfaces three interchangeable ways, scored identically: a REFRAME (collapse a mess to its real axis), a QUESTION (pose the hard thing nobody posed), or an INSTRUMENT (build the code/chart/structure that makes the truth legible, then read it). Tag the SUBSTANCE, not the medium \u2014 a chart built (technical act) to make a human-intensity call legible is a JUDGMENT catch.",
|
|
15887
|
-
read: "FOUR LEVERS set the height: (1) INVISIBILITY \u2014 how non-obvious there was anything to catch; a sharp operator in the flow drives past it (the DOMINANT lever); (2) DIFFICULTY of forming the catch; (3) STAKES \u2014 'without this, things silently go wrong' is the 9-10 condition; (4) SOUNDNESS \u2014 did the call hold. THREE OVERRIDING GATES: (a) OBVIOUSNESS KILLS IT \u2014 a correct, even load-bearing catch a sharp operator reaches anyway scores LOW ('you're evaluating the person not the AI' is correct but obvious -> ~5; 'compute in the OAuth dead-time' is real but fairly obvious -> ~6). (b) LEVERAGE BEATS INSIGHT \u2014 a move whose payoff is a HIGHER RATE OF FUTURE INSIGHT (building the tool that lets him set his own boundaries; timestamp-by-timestamp structure to instruct the grader precisely) raises the bandwidth of the loop that produces every later catch, and can outrank a clean one-off reframe. (c) SOUNDNESS GATE \u2014 a confident WRONG call to a noticed fork is an ANTI-SIGNAL; an honest 'not sure, here's a range' is NOT penalized. HUNT THE FORK BLIND \u2014 reconstruct what continuing-without-noticing looked like, then check whether/why he diverged; do NOT hand yourself the fork pre-formed or you score everyone's problem-finding a 10. TAG every instance: kind = systems | judgment | both (+ optional register: human/product/measurement). Reasoning and instrument-building are the SAME criterion. ANCHORS: 10 = 'OCEAN won't change, measure effectiveness of actions' (reframe that redefines the measure) /
|
|
15908
|
+
read: "FOUR LEVERS set the height: (1) INVISIBILITY \u2014 how non-obvious there was anything to catch; a sharp operator in the flow drives past it (the DOMINANT lever); (2) DIFFICULTY of forming the catch; (3) STAKES \u2014 'without this, things silently go wrong' is the 9-10 condition; (4) SOUNDNESS \u2014 did the call hold. THREE OVERRIDING GATES: (a) OBVIOUSNESS KILLS IT \u2014 a correct, even load-bearing catch a sharp operator reaches anyway scores LOW ('you're evaluating the person not the AI' is correct but obvious -> ~5; 'compute in the OAuth dead-time' is real but fairly obvious -> ~6). (b) LEVERAGE BEATS INSIGHT \u2014 a move whose payoff is a HIGHER RATE OF FUTURE INSIGHT (building the tool that lets him set his own boundaries; timestamp-by-timestamp structure to instruct the grader precisely) raises the bandwidth of the loop that produces every later catch, and can outrank a clean one-off reframe. (c) SOUNDNESS GATE \u2014 a confident WRONG call to a noticed fork is an ANTI-SIGNAL; an honest 'not sure, here's a range' is NOT penalized. HUNT THE FORK BLIND \u2014 reconstruct what continuing-without-noticing looked like, then check whether/why he diverged; do NOT hand yourself the fork pre-formed or you score everyone's problem-finding a 10. TAG every instance: kind = systems | judgment | both (+ optional register: human/product/measurement). Reasoning and instrument-building are the SAME criterion. ANCHORS: 10 = 'OCEAN won't change, measure effectiveness of actions' (reframe that redefines the measure) / a human-stakes call where the person overrode the analytically-clean answer on knowledge only they could have about someone involved, and was right (lived judgment, requires being the person) / 'plot it sorted, let me set the boundaries' (leverage \u2014 builds the bandwidth tool); 9 = 'word count IS the proxy \u2014 sitting there is unfakeable focus' / 'uncertainty collapses in that direction'; 8 = 'a better metric is the difficulty of content + original synthesis' (hard opening question); 7 = 'this candidate seems too strong for his judgement to be real' (real non-obvious catch, modest stakes); 6 = 'compute in the OAuth dead-time' / 'why overcomplicate it, single agent' (real but obvious); 5 = 'you're evaluating the person not the AI' (correct but obvious).",
|
|
15888
15909
|
rungs: [
|
|
15889
15910
|
{ level: 2, marker: "A fork existed; defers the call to the AI, or takes the obvious branch; vague." },
|
|
15890
15911
|
{ level: 4, marker: "Notices something, but the question is vague or obvious \u2014 anyone in the seat asks it." },
|
|
@@ -15995,11 +16016,11 @@ var TRANSCRIPT_LINE_RE = new RegExp(`^\\s*(${NOTE})((,| and) ${NOTE})*\\s*$|^\\s
|
|
|
15995
16016
|
|
|
15996
16017
|
// ../../lib/calibration/index.ts
|
|
15997
16018
|
var DEFAULT_CALIBRATION = {
|
|
15998
|
-
version: "2026-07-
|
|
16019
|
+
version: "2026-07-15.1",
|
|
15999
16020
|
// = RUBRIC_FINGERPRINT of the shipped npm rubric (packages/coding-analyzer/
|
|
16000
16021
|
// src/grade/criteria.ts). A unit test fails loud when the rubric changes
|
|
16001
16022
|
// without this being updated (and re-pushed to the server).
|
|
16002
|
-
rubricVersion: "
|
|
16023
|
+
rubricVersion: "7983c01d53",
|
|
16003
16024
|
// Canonical scale = the one the product owner set for the public report
|
|
16004
16025
|
// (11=0.01% … 8=2%), extended downward from the old report ladder. The old
|
|
16005
16026
|
// CodeAnalysisView / npm-viewer maps (7→10%/15%, 6→25%/30%) were drift, not
|
|
@@ -47,7 +47,7 @@ var CODING_CRITERIA = [
|
|
|
47
47
|
label: "Abstraction \u2014 seeing the load-bearing thing, and being right",
|
|
48
48
|
graded: true,
|
|
49
49
|
definition: "Under genuine ambiguity (an obvious path sitting right there, no answer key): did the USER see that the obvious path was subtly wrong \u2014 or that something decisive was invisible \u2014 and do the non-obvious thing that made it right, AND were they right? The graded unit is the whole move: the CATCH (noticing the fork) -> the QUESTION (formulating it) -> the CALL (resolving it). The move surfaces three interchangeable ways, scored identically: a REFRAME (collapse a mess to its real axis), a QUESTION (pose the hard thing nobody posed), or an INSTRUMENT (build the code/chart/structure that makes the truth legible, then read it). Tag the SUBSTANCE, not the medium \u2014 a chart built (technical act) to make a human-intensity call legible is a JUDGMENT catch.",
|
|
50
|
-
read: "FOUR LEVERS set the height: (1) INVISIBILITY \u2014 how non-obvious there was anything to catch; a sharp operator in the flow drives past it (the DOMINANT lever); (2) DIFFICULTY of forming the catch; (3) STAKES \u2014 'without this, things silently go wrong' is the 9-10 condition; (4) SOUNDNESS \u2014 did the call hold. THREE OVERRIDING GATES: (a) OBVIOUSNESS KILLS IT \u2014 a correct, even load-bearing catch a sharp operator reaches anyway scores LOW ('you're evaluating the person not the AI' is correct but obvious -> ~5; 'compute in the OAuth dead-time' is real but fairly obvious -> ~6). (b) LEVERAGE BEATS INSIGHT \u2014 a move whose payoff is a HIGHER RATE OF FUTURE INSIGHT (building the tool that lets him set his own boundaries; timestamp-by-timestamp structure to instruct the grader precisely) raises the bandwidth of the loop that produces every later catch, and can outrank a clean one-off reframe. (c) SOUNDNESS GATE \u2014 a confident WRONG call to a noticed fork is an ANTI-SIGNAL; an honest 'not sure, here's a range' is NOT penalized. HUNT THE FORK BLIND \u2014 reconstruct what continuing-without-noticing looked like, then check whether/why he diverged; do NOT hand yourself the fork pre-formed or you score everyone's problem-finding a 10. TAG every instance: kind = systems | judgment | both (+ optional register: human/product/measurement). Reasoning and instrument-building are the SAME criterion. ANCHORS: 10 = 'OCEAN won't change, measure effectiveness of actions' (reframe that redefines the measure) /
|
|
50
|
+
read: "FOUR LEVERS set the height: (1) INVISIBILITY \u2014 how non-obvious there was anything to catch; a sharp operator in the flow drives past it (the DOMINANT lever); (2) DIFFICULTY of forming the catch; (3) STAKES \u2014 'without this, things silently go wrong' is the 9-10 condition; (4) SOUNDNESS \u2014 did the call hold. THREE OVERRIDING GATES: (a) OBVIOUSNESS KILLS IT \u2014 a correct, even load-bearing catch a sharp operator reaches anyway scores LOW ('you're evaluating the person not the AI' is correct but obvious -> ~5; 'compute in the OAuth dead-time' is real but fairly obvious -> ~6). (b) LEVERAGE BEATS INSIGHT \u2014 a move whose payoff is a HIGHER RATE OF FUTURE INSIGHT (building the tool that lets him set his own boundaries; timestamp-by-timestamp structure to instruct the grader precisely) raises the bandwidth of the loop that produces every later catch, and can outrank a clean one-off reframe. (c) SOUNDNESS GATE \u2014 a confident WRONG call to a noticed fork is an ANTI-SIGNAL; an honest 'not sure, here's a range' is NOT penalized. HUNT THE FORK BLIND \u2014 reconstruct what continuing-without-noticing looked like, then check whether/why he diverged; do NOT hand yourself the fork pre-formed or you score everyone's problem-finding a 10. TAG every instance: kind = systems | judgment | both (+ optional register: human/product/measurement). Reasoning and instrument-building are the SAME criterion. ANCHORS: 10 = 'OCEAN won't change, measure effectiveness of actions' (reframe that redefines the measure) / a human-stakes call where the person overrode the analytically-clean answer on knowledge only they could have about someone involved, and was right (lived judgment, requires being the person) / 'plot it sorted, let me set the boundaries' (leverage \u2014 builds the bandwidth tool); 9 = 'word count IS the proxy \u2014 sitting there is unfakeable focus' / 'uncertainty collapses in that direction'; 8 = 'a better metric is the difficulty of content + original synthesis' (hard opening question); 7 = 'this candidate seems too strong for his judgement to be real' (real non-obvious catch, modest stakes); 6 = 'compute in the OAuth dead-time' / 'why overcomplicate it, single agent' (real but obvious); 5 = 'you're evaluating the person not the AI' (correct but obvious).",
|
|
51
51
|
rungs: [
|
|
52
52
|
{ level: 2, marker: "A fork existed; defers the call to the AI, or takes the obvious branch; vague." },
|
|
53
53
|
{ level: 4, marker: "Notices something, but the question is vague or obvious \u2014 anyone in the seat asks it." },
|
|
@@ -203,11 +203,11 @@ var TRANSCRIPT_LINE_RE = new RegExp(`^\\s*(${NOTE})((,| and) ${NOTE})*\\s*$|^\\s
|
|
|
203
203
|
|
|
204
204
|
// ../../lib/calibration/index.ts
|
|
205
205
|
var DEFAULT_CALIBRATION = {
|
|
206
|
-
version: "2026-07-
|
|
206
|
+
version: "2026-07-15.1",
|
|
207
207
|
// = RUBRIC_FINGERPRINT of the shipped npm rubric (packages/coding-analyzer/
|
|
208
208
|
// src/grade/criteria.ts). A unit test fails loud when the rubric changes
|
|
209
209
|
// without this being updated (and re-pushed to the server).
|
|
210
|
-
rubricVersion: "
|
|
210
|
+
rubricVersion: "7983c01d53",
|
|
211
211
|
// Canonical scale = the one the product owner set for the public report
|
|
212
212
|
// (11=0.01% … 8=2%), extended downward from the old report ladder. The old
|
|
213
213
|
// CodeAnalysisView / npm-viewer maps (7→10%/15%, 6→25%/30%) were drift, not
|