polymath-society 0.2.4 → 0.2.5
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 +1024 -379
- package/dist/index.js +57 -23
- package/dist/pipeline/coding-agglomerate.js +174 -15
- package/dist/pipeline/coding-aggregate.js +306 -8
- package/dist/pipeline/coding-build.js +355 -8
- package/dist/pipeline/coding-coaching.js +1 -1
- package/dist/pipeline/coding-day-digest.js +343 -32
- package/dist/pipeline/coding-delegation.js +319 -17
- package/dist/pipeline/coding-expertise.js +324 -22
- package/dist/pipeline/coding-flow.js +302 -4
- package/dist/pipeline/coding-focus.js +16306 -0
- package/dist/pipeline/coding-frontier-detail.js +316 -14
- package/dist/pipeline/coding-frontier.js +350 -1
- package/dist/pipeline/coding-gap-dist.js +302 -4
- package/dist/pipeline/coding-gap.js +1 -1
- package/dist/pipeline/coding-grade.js +180 -20
- package/dist/pipeline/coding-nutshell.js +318 -16
- package/dist/pipeline/coding-projects.js +354 -5
- package/dist/pipeline/coding-walkthrough.js +317 -18
- package/dist/web/app.js +69 -19
- package/dist/web/styles.css +1 -1
- package/package.json +2 -2
|
@@ -135,7 +135,7 @@ var require_secure_json_parse = __commonJS({
|
|
|
135
135
|
|
|
136
136
|
// ../../scripts/coding-walkthrough.mts
|
|
137
137
|
import { promises as fs6 } from "fs";
|
|
138
|
-
import
|
|
138
|
+
import path11 from "path";
|
|
139
139
|
|
|
140
140
|
// ../../lib/agents/coding/walkthrough.ts
|
|
141
141
|
import { promises as fs5 } from "fs";
|
|
@@ -2155,8 +2155,8 @@ function getErrorMap() {
|
|
|
2155
2155
|
|
|
2156
2156
|
// ../../node_modules/zod/v3/helpers/parseUtil.js
|
|
2157
2157
|
var makeIssue = (params) => {
|
|
2158
|
-
const { data, path:
|
|
2159
|
-
const fullPath = [...
|
|
2158
|
+
const { data, path: path12, errorMaps, issueData } = params;
|
|
2159
|
+
const fullPath = [...path12, ...issueData.path || []];
|
|
2160
2160
|
const fullIssue = {
|
|
2161
2161
|
...issueData,
|
|
2162
2162
|
path: fullPath
|
|
@@ -2272,11 +2272,11 @@ var errorUtil;
|
|
|
2272
2272
|
|
|
2273
2273
|
// ../../node_modules/zod/v3/types.js
|
|
2274
2274
|
var ParseInputLazyPath = class {
|
|
2275
|
-
constructor(parent, value,
|
|
2275
|
+
constructor(parent, value, path12, key) {
|
|
2276
2276
|
this._cachedPath = [];
|
|
2277
2277
|
this.parent = parent;
|
|
2278
2278
|
this.data = value;
|
|
2279
|
-
this._path =
|
|
2279
|
+
this._path = path12;
|
|
2280
2280
|
this._key = key;
|
|
2281
2281
|
}
|
|
2282
2282
|
get path() {
|
|
@@ -15063,39 +15063,39 @@ function createOpenAI(options = {}) {
|
|
|
15063
15063
|
});
|
|
15064
15064
|
const createChatModel = (modelId, settings = {}) => new OpenAIChatLanguageModel(modelId, settings, {
|
|
15065
15065
|
provider: `${providerName}.chat`,
|
|
15066
|
-
url: ({ path:
|
|
15066
|
+
url: ({ path: path12 }) => `${baseURL}${path12}`,
|
|
15067
15067
|
headers: getHeaders,
|
|
15068
15068
|
compatibility,
|
|
15069
15069
|
fetch: options.fetch
|
|
15070
15070
|
});
|
|
15071
15071
|
const createCompletionModel = (modelId, settings = {}) => new OpenAICompletionLanguageModel(modelId, settings, {
|
|
15072
15072
|
provider: `${providerName}.completion`,
|
|
15073
|
-
url: ({ path:
|
|
15073
|
+
url: ({ path: path12 }) => `${baseURL}${path12}`,
|
|
15074
15074
|
headers: getHeaders,
|
|
15075
15075
|
compatibility,
|
|
15076
15076
|
fetch: options.fetch
|
|
15077
15077
|
});
|
|
15078
15078
|
const createEmbeddingModel = (modelId, settings = {}) => new OpenAIEmbeddingModel(modelId, settings, {
|
|
15079
15079
|
provider: `${providerName}.embedding`,
|
|
15080
|
-
url: ({ path:
|
|
15080
|
+
url: ({ path: path12 }) => `${baseURL}${path12}`,
|
|
15081
15081
|
headers: getHeaders,
|
|
15082
15082
|
fetch: options.fetch
|
|
15083
15083
|
});
|
|
15084
15084
|
const createImageModel = (modelId, settings = {}) => new OpenAIImageModel(modelId, settings, {
|
|
15085
15085
|
provider: `${providerName}.image`,
|
|
15086
|
-
url: ({ path:
|
|
15086
|
+
url: ({ path: path12 }) => `${baseURL}${path12}`,
|
|
15087
15087
|
headers: getHeaders,
|
|
15088
15088
|
fetch: options.fetch
|
|
15089
15089
|
});
|
|
15090
15090
|
const createTranscriptionModel = (modelId) => new OpenAITranscriptionModel(modelId, {
|
|
15091
15091
|
provider: `${providerName}.transcription`,
|
|
15092
|
-
url: ({ path:
|
|
15092
|
+
url: ({ path: path12 }) => `${baseURL}${path12}`,
|
|
15093
15093
|
headers: getHeaders,
|
|
15094
15094
|
fetch: options.fetch
|
|
15095
15095
|
});
|
|
15096
15096
|
const createSpeechModel = (modelId) => new OpenAISpeechModel(modelId, {
|
|
15097
15097
|
provider: `${providerName}.speech`,
|
|
15098
|
-
url: ({ path:
|
|
15098
|
+
url: ({ path: path12 }) => `${baseURL}${path12}`,
|
|
15099
15099
|
headers: getHeaders,
|
|
15100
15100
|
fetch: options.fetch
|
|
15101
15101
|
});
|
|
@@ -15116,7 +15116,7 @@ function createOpenAI(options = {}) {
|
|
|
15116
15116
|
const createResponsesModel = (modelId) => {
|
|
15117
15117
|
return new OpenAIResponsesLanguageModel(modelId, {
|
|
15118
15118
|
provider: `${providerName}.responses`,
|
|
15119
|
-
url: ({ path:
|
|
15119
|
+
url: ({ path: path12 }) => `${baseURL}${path12}`,
|
|
15120
15120
|
headers: getHeaders,
|
|
15121
15121
|
fetch: options.fetch
|
|
15122
15122
|
});
|
|
@@ -15891,6 +15891,305 @@ function isTrivial(s) {
|
|
|
15891
15891
|
return s.humanTurns < GATE.trivialHumanTurns || s.humanChars < GATE.trivialHumanChars;
|
|
15892
15892
|
}
|
|
15893
15893
|
|
|
15894
|
+
// ../../lib/agents/coding/profile.ts
|
|
15895
|
+
import path10 from "path";
|
|
15896
|
+
|
|
15897
|
+
// ../../lib/calibration/fingerprint.ts
|
|
15898
|
+
import { createHash } from "node:crypto";
|
|
15899
|
+
function rubricFingerprint(criteria) {
|
|
15900
|
+
return createHash("sha256").update(JSON.stringify(criteria)).digest("hex").slice(0, 10);
|
|
15901
|
+
}
|
|
15902
|
+
|
|
15903
|
+
// ../../lib/agents/coding/criteria.ts
|
|
15904
|
+
var CODING_CRITERIA = [
|
|
15905
|
+
{
|
|
15906
|
+
key: "outcomes",
|
|
15907
|
+
label: "Outcomes",
|
|
15908
|
+
graded: true,
|
|
15909
|
+
definition: "Whether they meaningfully move the needle \u2014 a real capability shipped and confirmed, a hard blocker killed, the boundary genuinely pushed. Per-conversation = THIS session's magnitude (cap 10); the headline Outcomes number is the CADENCE of meaningful days across the whole period (computed separately), and several stacked features show up at the DAY level, not in one session.",
|
|
15910
|
+
read: "Judge the END STATE on an OBSERVABLE axis: does the thing exist and work at the end (verification) \xD7 how much it unblocks downstream (leverage) \xD7 how many load-bearing things landed (scope). NEVER guess 'how long this would take a strong engineer' \u2014 an LLM can't know that. A session is 'meaningful' at level \u22656 (a real thing shipped/confirmed). Weight load-bearing work over throwaway scripts; discount busywork, abandoned threads, edits that never converged. ANCHORS: L8 = 7\xD71080p Remotion comps rendered+downloaded, or all 7 analysis dimensions driven to completion + viewer rebuilt; L4 = ends on 'I don't have the recs or the script', the pivot goes nowhere; L2 = confirmed a repo is private / 'what should I work on next, I'm confused'. L11 is DAY-LEVEL (several verified load-bearing things across the day) \u2014 never assign 11 to one session.",
|
|
15911
|
+
rungs: [
|
|
15912
|
+
{ level: 2, marker: "Nothing exists at the end \u2014 a lookup or an orientation." },
|
|
15913
|
+
{ level: 4, marker: "Partial \u2014 scaffolding or a small fix, no working capability yet; or a realization the work isn't ready." },
|
|
15914
|
+
{ level: 6, marker: "One real working thing shipped and at least loosely confirmed. (meaningful floor)" },
|
|
15915
|
+
{ level: 8, marker: "A substantial capability \u2014 or several real things \u2014 built AND verified this session." },
|
|
15916
|
+
{ level: 10, marker: "A shipped, end-to-end-checked thing that unblocks a lot downstream \u2014 leverage, not just size. (per-session ceiling)" }
|
|
15917
|
+
]
|
|
15918
|
+
},
|
|
15919
|
+
{
|
|
15920
|
+
key: "taste",
|
|
15921
|
+
label: "Taste",
|
|
15922
|
+
graded: true,
|
|
15923
|
+
definition: "How high and how RIGHT a quality bar they hold \u2014 and crucially, whether the call is one the AI could never have reached on its own. Taste is rare and particular: the 'oh shit, they're right' moment \u2014 highly opinionated, highly specific, vindicated. Includes a developed UP-FRONT vision (strongest where the AI is weakest \u2014 writing, design, brand, nuanced product) and knowing where NOT to impose a bar (letting the AI run on throwaway).",
|
|
15924
|
+
read: "Count as taste ONLY: a high, specific, vindicated call the AI couldn't have reached (stated up front OR via correction); a developed up-front vision where the AI is weak; handwritten samples/specs; knowing where not to impose. Do NOT count: generic feedback/correction the AI could've gone either way on ('make it white not yellow', 'no dividers', 'square checkbox') \u2014 that is NON-EVIDENCE, not low taste. Counting corrections is not a bar. Reactive-but-correct cringe calls are NOT penalized (the AI is blind to its own slop). ANCHORS: L8 = 'no em dashes anywhere \u2014 it IMMEDIATELY looks like AI slop', or 'the growth curve is cringe\u2026 a timeline without a y-axis is better'; L10 = authored the homepage copy himself up front, or defined 'would a smart engineer be surprised?' as the bar up front + lets the AI run on rote. KEY DISTINCTION: a low taste score on ROTE/ambiguity-free work = NO penalty (preface gently); a low score on TASTE-HEAVY work where they demonstrably hold a bar but withheld it = a real miss \u2014 say which. L11 = aggregator-only (consistency across the corpus).",
|
|
15925
|
+
rungs: [
|
|
15926
|
+
{ level: 2, marker: "Accepts whatever the AI produces; can't tell good from mediocre." },
|
|
15927
|
+
{ level: 4, marker: "Occasional pushback, but mostly rubber-stamps; standards are conventional." },
|
|
15928
|
+
{ level: 6, marker: "Rejects the obviously bad version and iterates toward better \u2014 a real but ordinary bar a competent reviewer would also reach." },
|
|
15929
|
+
{ level: 8, marker: "Makes the 'oh shit, they're right' call the AI couldn't have reached \u2014 specific, opinionated, vindicated \u2014 usually caught in the moment." },
|
|
15930
|
+
{ level: 10, marker: "Brings the developed, resonant vision up front before the AI tries, AND knows where not to impose (lets the AI run on throwaway). (per-session ceiling)" }
|
|
15931
|
+
]
|
|
15932
|
+
},
|
|
15933
|
+
{
|
|
15934
|
+
key: "generative",
|
|
15935
|
+
label: "Abstraction \u2014 seeing the load-bearing thing, and being right",
|
|
15936
|
+
graded: true,
|
|
15937
|
+
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.",
|
|
15938
|
+
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) / 'don't hurt Natalie, not long-term compatible' (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).",
|
|
15939
|
+
rungs: [
|
|
15940
|
+
{ level: 2, marker: "A fork existed; defers the call to the AI, or takes the obvious branch; vague." },
|
|
15941
|
+
{ level: 4, marker: "Notices something, but the question is vague or obvious \u2014 anyone in the seat asks it." },
|
|
15942
|
+
{ level: 5, marker: "Correct but OBVIOUS catch \u2014 a real fix a sharp operator reaches anyway; not really a judgment call. (obviousness gate)" },
|
|
15943
|
+
{ level: 6, marker: "A real, somewhat-non-obvious catch with a workable call \u2014 but reachable with effort; not load-bearing or redefining." },
|
|
15944
|
+
{ level: 7, marker: "A real, non-obvious catch called RIGHT \u2014 but a single move of modest stakes, no redefinition and no leverage." },
|
|
15945
|
+
{ level: 8, marker: "A genuinely hard, non-obvious QUESTION that opens something real \u2014 catch + framing excellent \u2014 even if the call stays open/tentative." },
|
|
15946
|
+
{ level: 9, marker: "Caught a real LOAD-BEARING fork and called it RIGHT (very good) \u2014 or a leverage/bandwidth move just below the redefinition line." },
|
|
15947
|
+
{ level: 10, marker: "Redefines what to measure / how to see it from first principles AND is right; OR a leverage move that compounds the whole loop; OR lived judgment that required being the person. Near-invisible catch. (per-session ceiling)" }
|
|
15948
|
+
]
|
|
15949
|
+
},
|
|
15950
|
+
{
|
|
15951
|
+
key: "caliber",
|
|
15952
|
+
label: "Caliber \u2014 what they can be trusted with",
|
|
15953
|
+
graded: true,
|
|
15954
|
+
definition: "A holistic TRUST read, SEPARATE from the per-move abstraction score: across the corpus, what TIER of person is typically trusted with the hard tasks/moves they actually pull off, and how SELF-SUFFICIENTLY they do them. Answers the hiring question \u2014 what can they be trusted with, and what not. TWO HALVES: (1) CALIBER \u2014 for each genuinely-hard moment, the difficulty of having FOUND AND DONE it, and the caliber of person usually trusted with a task like that. (2) AUTONOMY \u2014 how much they fix and reason on their OWN vs need to be unblocked by others (the AI included). NEVER needing to be unblocked across the corpus is itself a top-tier signal; needing constant rescue (doom-loops, forced descent) caps the tier no matter the occasional brilliance.",
|
|
15955
|
+
read: "For each hard moment record { difficulty: how hard it was to FIND AND DO this from the info available, NOT the topic's stated difficulty; trustTier: the caliber usually trusted with a task like this; selfSourced: did they originate and unblock it themselves (true) or get handed it / rescued (false); vsTier: below|met|exceeded; quote }. TIER LADDER (anchored): T1 competent generalist (a smart person, no special background, could do it); T2 senior engineer (solid, with effort); T3 staff/principal (a non-obvious reframe a strong senior wouldn't reach unprompted); T4 big-tech-senior / specialist (real depth or a genuinely novel frame); T5 frontier-lab / Anthropic-tier (OUT-REASONS strong models \u2014 first-principles measurement/judgment a top researcher makes); T6 beyond-AI-ceiling (the AI, cold, cannot reproduce it \u2014 singular lived/measurement judgment; the honest top). JUDGE-CEILING CAVEAT: when a move out-reasons the AI itself (it concedes, and a fresh model cold can't reproduce it), that is T5-T6 and the honest verdict is 'above my ceiling \u2014 cannot bound from above' \u2014 treat as the STRONGEST signal, NOT missing data. AUTONOMY: weight SELF-SOURCED moves at full tier; a move the AI handed them does NOT count toward caliber. AGGREGATE = the tier they CONSISTENTLY operate at (not a lucky peak) + an explicit TRUSTED-WITH / NOT-TRUSTED-WITH list + an autonomy verdict (e.g. 'never needed to be unblocked across N sessions \u2014 fixed and unblocked his own path throughout'). Be honest about SHAPE: someone can be T5 on measurement/judgment AND T1 on systems architecture \u2014 name both. ANCHORS (this corpus): T5/T6 = 'OCEAN won't change, measure effectiveness of actions' / the IIT transformer-consciousness argument the AI conceded / 'uncertainty collapses in that direction' (out-reasoned the tool, self-sourced); T3-T4 = 'word count IS the proxy \u2014 sitting there is unfakeable focus' (sharp reframe, resisted a confident WRONG AI); T1-T2 = 'why overcomplicate it, single agent' / 'just change the index' (sensible, a competent dev does it too).",
|
|
15956
|
+
rungs: [
|
|
15957
|
+
{ level: 2, marker: "T1 \u2014 competent generalist: tasks a smart person with no special background handles; needs unblocking often." },
|
|
15958
|
+
{ level: 4, marker: "T2 \u2014 senior engineer: solid execution with effort; self-sufficient on the familiar, rescued on the hard." },
|
|
15959
|
+
{ level: 6, marker: "T3 \u2014 staff/principal: non-obvious reframes a strong senior wouldn't reach unprompted; rarely needs unblocking." },
|
|
15960
|
+
{ level: 8, marker: "T4 \u2014 big-tech-senior / specialist: real depth or a genuinely novel frame; unblocks their own path." },
|
|
15961
|
+
{ level: 9, marker: "T5 \u2014 frontier-lab / Anthropic-tier: out-reasons strong models on first-principles measurement/judgment; never needs unblocking." },
|
|
15962
|
+
{ level: 10, marker: "T6 \u2014 beyond the AI's own ceiling: singular lived/measurement judgment the model cannot reproduce cold. (above-my-ceiling)" }
|
|
15963
|
+
]
|
|
15964
|
+
},
|
|
15965
|
+
{
|
|
15966
|
+
key: "expertise",
|
|
15967
|
+
label: "Expertise (specific systems / domain knowledge)",
|
|
15968
|
+
graded: true,
|
|
15969
|
+
definition: "Depth of specific, non-generic knowledge of systems, infra, tooling, and their OWN stack \u2014 the kind a competent junior wouldn't have. It is how much they know THEIR systems, not a general 'look around corners'. Two shapes: hard constraints ('you can't build it that way because X, Y, Z') and specific directives ('use claude-p not the API', 'Opus only when extended thinking is on', 'run it on EC2 overnight', 'use Kubernetes for this, Terraform for that').",
|
|
15970
|
+
read: "Grade OVERRIDES on non-obviousness (would a competent engineer / strong model do it unprompted? more 'no' = higher) \xD7 payoff (AI conceded, it worked, a problem was averted). A confident override that was WRONG is an anti-signal. NOT expertise: (a) cleverness about how to measure/grade \u2014 that's Abstraction; (b) generic caution any non-stupid person shows ('don't delete the local data', 'we're remoting in, no harm done') \u2014 not mission-critical, no special knowledge \u2192 non-evidence; (c) generic best-practice the AI already had ('you have the Supabase CLI, run it yourself'). ANCHORS: L8 = 'Opus only for reasoning convos, only when extended thinking is on', or 'remove Claude Code/codex convos from the chat parsers \u2014 different kind'; L9 = deep stack/infra directives a junior wouldn't know (EC2 overnight node + caffeinate/lid-close; 'when you type Claude in the terminal it's already logged in \u2014 not the issue'); L10 = counter-intuitive call the AI would've done the OPPOSITE of ('run it using claude-p, not the API'). L11 = aggregator-only.",
|
|
15971
|
+
rungs: [
|
|
15972
|
+
{ level: 2, marker: "Defers to the AI on system decisions; no specific knowledge surfaces." },
|
|
15973
|
+
{ level: 4, marker: "Opinions are generic best-practice the AI already had." },
|
|
15974
|
+
{ level: 6, marker: "Corrects the AI on a real systems fact it got wrong (but a competent engineer would too)." },
|
|
15975
|
+
{ level: 8, marker: "Repeatedly catches what the AI misses with specific, correct systems/tooling calls a junior wouldn't make." },
|
|
15976
|
+
{ level: 9, marker: "Deep, specific directives about their own stack / infra a junior wouldn't know." },
|
|
15977
|
+
{ level: 10, marker: "Counter-intuitive call \u2014 the AI would have done the opposite \u2014 grounded in deep operating knowledge, and it pays off. (per-session ceiling)" }
|
|
15978
|
+
]
|
|
15979
|
+
},
|
|
15980
|
+
{
|
|
15981
|
+
key: "delegation",
|
|
15982
|
+
label: "Delegation and calibration",
|
|
15983
|
+
graded: true,
|
|
15984
|
+
definition: "Whether they correctly judge when to do the thinking themselves vs. let the AI run \u2014 tight leash on subtle, judgement-heavy work; let it go ham on rote work \u2014 and whether that choice fits the task. Low-effort-until-needed is the IDEAL prompt economy, not a defect; never penalize a vague ask on routine work.",
|
|
15985
|
+
read: "Two kinds of correction, OPPOSITE verdicts: (a) genuine AI error caught and redirected = GOOD (couldn't be front-loaded); (b) the AI would clearly have done better with more instruction, the user demonstrably HELD that standard but withheld it and had to redo = the MISS (self-inflicted under-briefing on taste-sensitive work). Also: letting the AI run on genuinely rote work = good; over-specifying what the AI would have nailed anyway = its own miscalibration (distrust, not delegation). COACHING IS MANDATORY: name how they should have delegated ('the AI could have handled this part itself; you only needed to front-load X'). ANCHORS: L8 = 'We should discuss the architecture first. Don't go build random stuff yourself' (gatekept implementation behind review); MISS L4 = corrected the same 'top 0.01% too generous' calibration five times (clearly held the rule, withheld it), or taste-sensitive layout choices not front-loaded \u2192 correction rounds. L11 = aggregator-only (sustained across the corpus).",
|
|
15986
|
+
rungs: [
|
|
15987
|
+
{ level: 2, marker: "Badly miscalibrated \u2014 under-briefs taste-sensitive work and/or micromanages trivia; constant avoidable rework." },
|
|
15988
|
+
{ level: 4, marker: "Inconsistent \u2014 lets the AI run on things they clearly had opinions about, then redoes; or over-controls rote." },
|
|
15989
|
+
{ level: 6, marker: "Roughly right \u2014 briefs the big stuff, but still avoidable rework from withheld standards." },
|
|
15990
|
+
{ level: 8, marker: "Well-calibrated \u2014 front-loads the specifiable so the AI isn't redone on knowable things; reserves correction for genuine AI errors; lets rote run." },
|
|
15991
|
+
{ level: 10, marker: "Within a session, almost everything knowable is front-loaded; avoidable rework near-zero; the corrections that remain are genuine AI surprises. (per-session ceiling)" }
|
|
15992
|
+
]
|
|
15993
|
+
},
|
|
15994
|
+
{
|
|
15995
|
+
key: "metacognition",
|
|
15996
|
+
label: "Metacognition",
|
|
15997
|
+
graded: true,
|
|
15998
|
+
definition: "How aware they are of their own pace and process \u2014 noticing 'this is too slow, this is the bottleneck, fix it' \u2014 and how often they make HIGHER-ORDER changes to their own workflow mid-stream. Treating their own productivity as an engineering problem. (Replaces the old 'unblocking' criterion; the infra/leverage half of that now lives under Frontier tool use.)",
|
|
15999
|
+
read: "Look for: real-time awareness of going too slow/fast; naming a recurring friction and restructuring the workflow so it stops; changing the WHOLE way of working with the AI mid-session to get unstuck; deciding to let a system run and patch its failures one-by-one rather than tweak arbitrarily. Re-explaining the same context repeatedly without fixing the recurrence is the anti-signal. ANCHORS: L8 = 'Is it possible to parallelize it even more heavily? this is literally not even sequential' (diagnosed the artificial concurrency cap), or 'let the system run, find the wrong grades, patch one-by-one'; ANTI L3 = re-explained the same architecture 3+ times rather than fixing the recurrence, or session-limit hit 6+ times with no harness assembled. L11 = aggregator-only (standing engineering discipline that compounds across the period).",
|
|
16000
|
+
rungs: [
|
|
16001
|
+
{ level: 2, marker: "No awareness of pace; grinds the same loop without noticing it's the loop." },
|
|
16002
|
+
{ level: 4, marker: "Notices friction but only complains; no higher-order change." },
|
|
16003
|
+
{ level: 6, marker: "Recognizes a bottleneck and adjusts how they work for this case." },
|
|
16004
|
+
{ level: 8, marker: "Names a recurring friction and restructures their workflow so it stops recurring; aware in real time of pace." },
|
|
16005
|
+
{ level: 10, marker: "Diagnoses the bottleneck mid-session and changes the whole way of working with the AI to fix it. (per-session ceiling)" }
|
|
16006
|
+
]
|
|
16007
|
+
},
|
|
16008
|
+
{
|
|
16009
|
+
key: "frontier",
|
|
16010
|
+
label: "Frontier tool use",
|
|
16011
|
+
graded: true,
|
|
16012
|
+
definition: "How close to the frontier their WAY of using the tool is. Running sessions in parallel is now table-stakes; the frontier is loops, workflows, scale, remote/overnight execution, MCP, subagents, queue-ahead, custom harnesses, running from phone. Scores the BREADTH of techniques used (distinct from Expertise, which scores DEPTH of specific knowledge in the directives).",
|
|
16013
|
+
read: "NOTE: this ladder still needs SOTA anchoring (how power users / the Claude Code team actually work) \u2014 until then grade CONSERVATIVELY and lean on the level-up list. Credit real leverage actually USED: overnight/remote runs (EC2, caffeinate/lid-close survival), subagents, MCP, custom scripts that drive the AI, queue-ahead, parallelization as a standing demand. The deterministic layer already exposes subagentSpawns / mcpTools / queueOps / modes \u2014 use them. Always emit a concrete 'how to level up' note: the specific frontier techniques they're NOT yet using. ANCHORS: L8 = EC2 overnight compute node + lid-close survival + rate-limit logging, real leverage used; recurring 'this is embarrassingly parallel' diagnosis driving real throughput wins. L11 = aggregator-only (the way they wield the tool is itself ahead of how its makers expect).",
|
|
16014
|
+
rungs: [
|
|
16015
|
+
{ level: 2, marker: "One session at a time, default settings; no leverage beyond chat." },
|
|
16016
|
+
{ level: 4, marker: "Occasionally runs two things; no structural tooling." },
|
|
16017
|
+
{ level: 6, marker: "Routinely parallel; queues work ahead; renames/organizes sessions." },
|
|
16018
|
+
{ level: 8, marker: "Uses real leverage \u2014 overnight/remote runs, subagents, MCP, custom scripts to drive the AI." },
|
|
16019
|
+
{ level: 10, marker: "Builds harnesses and workflows; loops; scales the AI across machines; runs from anywhere. (per-session ceiling)" }
|
|
16020
|
+
]
|
|
16021
|
+
},
|
|
16022
|
+
{
|
|
16023
|
+
key: "parallelism",
|
|
16024
|
+
label: "Parallelism",
|
|
16025
|
+
graded: false,
|
|
16026
|
+
definition: "Concurrency \u2014 how many AI sessions run AT ONCE and how that's orchestrated (max concurrency, time at each level, overlap windows, queue-ahead, renames). The existing deterministic parallelism card (ParallelismView). Distinct from intensity.",
|
|
16027
|
+
read: "Deterministic \u2014 see the parallelism panel (max concurrency, time at each level, overlap windows, queue-ahead, renames)."
|
|
16028
|
+
},
|
|
16029
|
+
{
|
|
16030
|
+
key: "throughput",
|
|
16031
|
+
label: "Intensity (throughput)",
|
|
16032
|
+
graded: false,
|
|
16033
|
+
definition: "Intensity \u2014 how hard and how long they work start to finish (active time, session spans, daily cadence, late-night cadence). A DIFFERENT axis from parallelism (you can be intense and serial, or parallel and idle). The existing deterministic throughput card (ThroughputView).",
|
|
16034
|
+
read: "Deterministic \u2014 see the throughput/intensity panel (active hours, sessions/day, work spans, late-night cadence)."
|
|
16035
|
+
}
|
|
16036
|
+
];
|
|
16037
|
+
var GRADED_CRITERIA = CODING_CRITERIA.filter((c) => c.graded);
|
|
16038
|
+
var RUBRIC_FINGERPRINT = rubricFingerprint(GRADED_CRITERIA);
|
|
16039
|
+
|
|
16040
|
+
// ../coding-core/dist/words.js
|
|
16041
|
+
var NOTE = "((ran|created|edited|read|wrote|searched) (a|an|\\d+) [a-z]+|updated todos)";
|
|
16042
|
+
var TRANSCRIPT_LINE_RE = new RegExp(`^\\s*(${NOTE})((,| and) ${NOTE})*\\s*$|^\\s*thought for .{1,30}$`, "im");
|
|
16043
|
+
|
|
16044
|
+
// ../../lib/calibration/index.ts
|
|
16045
|
+
var DEFAULT_CALIBRATION = {
|
|
16046
|
+
version: "2026-07-12.2",
|
|
16047
|
+
// = RUBRIC_FINGERPRINT of the shipped npm rubric (packages/coding-analyzer/
|
|
16048
|
+
// src/grade/criteria.ts). A unit test fails loud when the rubric changes
|
|
16049
|
+
// without this being updated (and re-pushed to the server).
|
|
16050
|
+
rubricVersion: "f51b3a93a3",
|
|
16051
|
+
// Canonical scale = the one the product owner set for the public report
|
|
16052
|
+
// (11=0.01% … 8=2%), extended downward from the old report ladder. The old
|
|
16053
|
+
// CodeAnalysisView / npm-viewer maps (7→10%/15%, 6→25%/30%) were drift, not
|
|
16054
|
+
// intent.
|
|
16055
|
+
scoreBands: [
|
|
16056
|
+
{ score: 11, label: "Top 0.01%" },
|
|
16057
|
+
{ score: 10, label: "Top 0.1%" },
|
|
16058
|
+
{ score: 9, label: "Top 0.5%" },
|
|
16059
|
+
{ score: 8, label: "Top 2%" },
|
|
16060
|
+
{ score: 7, label: "Top 5%" },
|
|
16061
|
+
{ score: 6, label: "Top 15%" },
|
|
16062
|
+
{ score: 5, label: "Top 50%" },
|
|
16063
|
+
{ score: 4, label: "Top 65%" },
|
|
16064
|
+
{ score: 3, label: "Top 80%" },
|
|
16065
|
+
{ score: 2, label: "Top 90%" },
|
|
16066
|
+
{ score: 1, label: "Top 97%" }
|
|
16067
|
+
],
|
|
16068
|
+
minRankedScore: 6,
|
|
16069
|
+
benchmarkBands: [
|
|
16070
|
+
{
|
|
16071
|
+
level: "11",
|
|
16072
|
+
name: "Superhuman",
|
|
16073
|
+
rank: "Top 0.01%",
|
|
16074
|
+
oneIn: "1 in 10,000+",
|
|
16075
|
+
meaning: "Beyond the normal human ceiling for the trait \u2014 the genuine power-law outlier. Almost no one earns this; when the evidence shows it, it is scored, not rounded down.",
|
|
16076
|
+
foundIn: [
|
|
16077
|
+
"Fields Medal and Nobel-track researchers",
|
|
16078
|
+
"Founders of generational companies",
|
|
16079
|
+
"The handful of people a frontier field is named after"
|
|
16080
|
+
],
|
|
16081
|
+
maxTopPct: 0.01
|
|
16082
|
+
},
|
|
16083
|
+
{
|
|
16084
|
+
level: "10",
|
|
16085
|
+
name: "World-class",
|
|
16086
|
+
rank: "Top 0.1%",
|
|
16087
|
+
oneIn: "1 in 1,000",
|
|
16088
|
+
meaning: "Among the best alive at this trait \u2014 the level entire institutions are built to find.",
|
|
16089
|
+
foundIn: [
|
|
16090
|
+
"Researchers at frontier AI labs",
|
|
16091
|
+
"Faculty at top-5 research universities",
|
|
16092
|
+
"IMO / IOI medalists",
|
|
16093
|
+
"Founders backed by the top decile of venture firms"
|
|
16094
|
+
],
|
|
16095
|
+
maxTopPct: 0.1
|
|
16096
|
+
},
|
|
16097
|
+
{
|
|
16098
|
+
level: "9",
|
|
16099
|
+
name: "Exceptional",
|
|
16100
|
+
rank: "Top 1%",
|
|
16101
|
+
oneIn: "1 in 100",
|
|
16102
|
+
meaning: "Clearly exceptional \u2014 the strongest person on most strong teams.",
|
|
16103
|
+
foundIn: [
|
|
16104
|
+
"PhD students at top programs",
|
|
16105
|
+
"Early engineers at breakout startups",
|
|
16106
|
+
"YC-class founders",
|
|
16107
|
+
"National olympiad finalists"
|
|
16108
|
+
],
|
|
16109
|
+
maxTopPct: 1
|
|
16110
|
+
},
|
|
16111
|
+
{
|
|
16112
|
+
level: "8",
|
|
16113
|
+
name: "Strong",
|
|
16114
|
+
rank: "Top 10%",
|
|
16115
|
+
oneIn: "1 in 10",
|
|
16116
|
+
meaning: "Strong against the whole population \u2014 the best person in most rooms, not every room.",
|
|
16117
|
+
foundIn: [
|
|
16118
|
+
"Senior engineers at selective tech companies",
|
|
16119
|
+
"Graduates of demanding technical programs",
|
|
16120
|
+
"Operators who get promoted everywhere they go"
|
|
16121
|
+
],
|
|
16122
|
+
maxTopPct: 10
|
|
16123
|
+
},
|
|
16124
|
+
{
|
|
16125
|
+
level: "5",
|
|
16126
|
+
name: "Median",
|
|
16127
|
+
rank: "50th percentile",
|
|
16128
|
+
oneIn: "1 in 2",
|
|
16129
|
+
meaning: 'The middle of the general population. The reference class is all ~8 billion humans \u2014 so even "strong" above already means top 10% of everyone.',
|
|
16130
|
+
foundIn: ["The general population \u2014 most people, most places"],
|
|
16131
|
+
maxTopPct: 100
|
|
16132
|
+
}
|
|
16133
|
+
],
|
|
16134
|
+
codingTiers: {
|
|
16135
|
+
push: { median: 300, sigma: 1.121, tag: "estimated \u2014 log-normal fit", source: "Anthropic 2026 Claude Code study (400k sessions): median engaged user ~8 prompts/day at ~35 words \u2014 ~300 directed words/day; tail shape from its actions-per-prompt distribution. AVERAGE over substantial days, cumulative not spiky." },
|
|
16136
|
+
focus: { median: 0.08, sigma: 0.559, tag: "estimated \u2014 proxy-anchored", source: "median: Anthropic 20h/week engaged-user figure implies ~1h/day of true rapid exchange against an 8h working day; ceiling anchored to the ~4h/day deep-work limit (45% share = 1-in-1,000). AVERAGE share, cumulative not spiky." },
|
|
16137
|
+
orchestration: { tag: "estimated \u2014 behavior bands", source: "no published concurrency distribution exists; ceiling anchored to the Claude Code lead's documented 10-15 parallel sessions" }
|
|
16138
|
+
},
|
|
16139
|
+
codingBenchmarks: {
|
|
16140
|
+
flow: {
|
|
16141
|
+
// typical knowledge worker ≈ 35% of an 8h day focused; ~4h/day is the
|
|
16142
|
+
// recognized deep-work ceiling (Newport) ≈ 50% — most sit far below it.
|
|
16143
|
+
typicalPctOfDay: 0.35,
|
|
16144
|
+
topPctOfDay: 0.5,
|
|
16145
|
+
tag: "measured",
|
|
16146
|
+
source: "RescueTime 2019 (~2h48m focused/day) \xB7 Cal Newport, Deep Work (~4h/day deep-work ceiling)",
|
|
16147
|
+
line: "the best spend ~half the workday in true deep flow; ~4h/day is the human ceiling"
|
|
16148
|
+
},
|
|
16149
|
+
longestRun: {
|
|
16150
|
+
typicalHours: 0.67,
|
|
16151
|
+
// ~40 min before the average worker is interrupted
|
|
16152
|
+
topHours: 4,
|
|
16153
|
+
tag: "measured",
|
|
16154
|
+
source: "RescueTime (avg max ~40 min focus before interruption) \xB7 deep-work single-block ceiling ~3\u20134h",
|
|
16155
|
+
line: "a top performer can hold a single ~3\u20134h uninterrupted block; the average worker breaks at ~40 min"
|
|
16156
|
+
},
|
|
16157
|
+
parallelism: {
|
|
16158
|
+
topMaxConcurrent: 12,
|
|
16159
|
+
// Boris Cherny ~10–15 interactive sessions
|
|
16160
|
+
topAvgConcurrent: 6,
|
|
16161
|
+
// time-weighted average while active (anecdotal, same source)
|
|
16162
|
+
worktreesTip: "3\u20135 git worktrees at once",
|
|
16163
|
+
tag: "anecdotal",
|
|
16164
|
+
source: "Boris Cherny (Claude Code lead, Anthropic): ~10\u201315 concurrent sessions, 'dozens of Claudes running at all times'; 3\u20135 worktrees = 'the single biggest productivity unlock'",
|
|
16165
|
+
line: "the Claude Code lead runs 10\u201315 sessions at once; his #1 tip is 3\u20135 git worktrees in parallel"
|
|
16166
|
+
},
|
|
16167
|
+
throughput: {
|
|
16168
|
+
// Top-0.1% words/day reference lines, anchored to the throughput ladder
|
|
16169
|
+
// (THROUGHPUT_LADDER in throughput.ts): score 10 "world-class sustained" =
|
|
16170
|
+
// 9k/day, score 11 "superhuman ceiling" = 12k/day. Calibrated to the person's
|
|
16171
|
+
// own anchors, not a wild guess — but still a target, not a measured population.
|
|
16172
|
+
topAvgWordsPerDay: 9e3,
|
|
16173
|
+
topPeakWordsPerDay: 12e3,
|
|
16174
|
+
benchLabel: "top 0.1%",
|
|
16175
|
+
// No published "words typed/day" for heavy users — the real story is OUTPUT.
|
|
16176
|
+
loopsHeadline: ">1,000,000 lines of Rust at 99.8% tests passing",
|
|
16177
|
+
loopsDetail: "the Bun runtime was ported Zig\u2192Rust largely autonomously \u2014 hundreds of parallel subagents, two AI reviewers per file",
|
|
16178
|
+
tag: "measured",
|
|
16179
|
+
source: "The Register, May 2026 (Bun Zig\u2192Rust rewrite)",
|
|
16180
|
+
line: "autonomous fleets ported >1M lines of Rust at 99.8% tests passing; a while-loop agent delivered a $50k contract for $297 of compute"
|
|
16181
|
+
}
|
|
16182
|
+
}
|
|
16183
|
+
};
|
|
16184
|
+
|
|
16185
|
+
// ../../lib/agents/coding/benchmarks.ts
|
|
16186
|
+
var BEST = DEFAULT_CALIBRATION.codingBenchmarks;
|
|
16187
|
+
|
|
16188
|
+
// ../../lib/agents/coding/profile.ts
|
|
16189
|
+
var ROOT = process.cwd();
|
|
16190
|
+
var CODING_DIR = process.env.POLYMATH_DATA_DIR ? path10.join(process.env.POLYMATH_DATA_DIR, "coding") : path10.join(ROOT, ".data", "coding");
|
|
16191
|
+
var GRADES = path10.join(CODING_DIR, "grades");
|
|
16192
|
+
|
|
15894
16193
|
// ../../scripts/coding-walkthrough.mts
|
|
15895
16194
|
var argv = process.argv.slice(2);
|
|
15896
16195
|
var flag = (n, d) => {
|
|
@@ -15898,10 +16197,10 @@ var flag = (n, d) => {
|
|
|
15898
16197
|
return i >= 0 ? argv[i + 1] : d;
|
|
15899
16198
|
};
|
|
15900
16199
|
var MODEL = flag("model", "sonnet");
|
|
15901
|
-
var CONC = Number(flag("conc", "
|
|
16200
|
+
var CONC = Number(flag("conc", "8"));
|
|
15902
16201
|
var REGEN = argv.includes("--regen");
|
|
15903
|
-
var CODING =
|
|
15904
|
-
var DIR =
|
|
16202
|
+
var CODING = CODING_DIR;
|
|
16203
|
+
var DIR = path11.join(CODING, "walkthroughs");
|
|
15905
16204
|
function limiter(max) {
|
|
15906
16205
|
let a = 0;
|
|
15907
16206
|
const q = [];
|
|
@@ -15917,7 +16216,7 @@ function limiter(max) {
|
|
|
15917
16216
|
};
|
|
15918
16217
|
}
|
|
15919
16218
|
async function main() {
|
|
15920
|
-
const sessions = JSON.parse(await fs6.readFile(
|
|
16219
|
+
const sessions = JSON.parse(await fs6.readFile(path11.join(CODING, "sessions.json"), "utf8"));
|
|
15921
16220
|
const todo = sessions.filter((s) => !isTrivial(s) && !s.duplicateOf).sort((a, b) => b.humanChars - a.humanChars);
|
|
15922
16221
|
await fs6.mkdir(DIR, { recursive: true });
|
|
15923
16222
|
const pending = [];
|
|
@@ -15932,14 +16231,14 @@ async function main() {
|
|
|
15932
16231
|
try {
|
|
15933
16232
|
const w = await buildWalkthrough(s, { model: MODEL, outDir: DIR });
|
|
15934
16233
|
tick(!!w);
|
|
15935
|
-
console.log(` \u2022 ${s.title.slice(0, 46)} \u2192 ${w ? w.phases.length + " phases
|
|
16234
|
+
console.log(` \u2022 ${s.title.slice(0, 46)} \u2192 ${w ? w.phases.length + " phases" : "skip"}`);
|
|
15936
16235
|
} catch (e) {
|
|
15937
16236
|
tick(false);
|
|
15938
16237
|
console.log(` \u2022 ${s.title.slice(0, 46)} ERROR ${e.message.slice(0, 50)}`);
|
|
15939
16238
|
}
|
|
15940
16239
|
})));
|
|
15941
16240
|
endRun();
|
|
15942
|
-
console.log(`[walkthrough] done \u2192 ${
|
|
16241
|
+
console.log(`[walkthrough] done \u2192 ${path11.relative(process.cwd(), DIR)}/`);
|
|
15943
16242
|
}
|
|
15944
16243
|
main().catch((e) => {
|
|
15945
16244
|
console.error(e);
|
package/dist/web/app.js
CHANGED
|
@@ -9482,14 +9482,6 @@ var DO_THIS = {
|
|
|
9482
9482
|
context: "`/init` to generate or refresh CLAUDE.md; send the `anthropic-beta: context-1m-2025-08-07` header (Sonnet) to unlock the 1M-token window.",
|
|
9483
9483
|
headless: '`claude -p "<task>" --allowedTools "Bash,Read,Edit"` to run unattended; `/install-github-app` so a `@claude` mention on a PR/issue auto-fixes it.'
|
|
9484
9484
|
};
|
|
9485
|
-
var FOR_YOU = {
|
|
9486
|
-
worktrees: "You run everything in `main` with parallel sessions, so git branching isn't your pain \u2014 fair. Worktrees only help when two concurrent sessions edit the SAME files and clobber each other (or one runs a migration/install while another reads). If your parallel sessions stay on separate areas, skip this. If they ever collide, the one flag above is the entire fix.",
|
|
9487
|
-
subagents: "You're already fanning out \u2014 Claude spun up subagents on its own in 19 of your sessions, so the ad-hoc version is automatic; you don't need to \u201Cset up a multi-agent system.\u201D The thing you're NOT doing: saving your OWN reusable specialists. Your per-criterion graders (OCEAN, Growth, interpersonal, agency) should each be a named `.claude/agents/*.md` agent you invoke by name, instead of re-prompting the rubric every run.",
|
|
9488
|
-
loops: "Your overnight \u201CSet up EC2 instance\u201D and nightly grading re-runs are unattended grinds you currently babysit and re-run by hand \u2014 the exact shape a self-correcting loop finishes overnight against your test suite.",
|
|
9489
|
-
browser: "You already drive Claude-in-Chrome by hand (8 sessions). Same job \u2014 but the agent navigates, screenshots, reads the console, and fixes its own regression in one turn, instead of you relaying what you saw.",
|
|
9490
|
-
context: "This repo already ships a CLAUDE.md, so you have half of it. The lever you're not using is the 1M window \u2014 hold the whole engine + coding pipeline in one pass for big cross-cutting changes instead of hitting mid-task compaction.",
|
|
9491
|
-
headless: "You manually \u201CContinue interrupted HITL server task\u201D to resume stalled runs \u2014 a `claude -p` job (or a GitHub Action) could re-run and self-heal those with no one watching."
|
|
9492
|
-
};
|
|
9493
9485
|
function FrontierPanel({ f, detail, coaching, gap, parallelism }) {
|
|
9494
9486
|
const AUTO = /* @__PURE__ */ new Set(["queue-ahead", "deferred-tools", "subagent-fanout", "task-orchestration", "visualize", "web-research"]);
|
|
9495
9487
|
const deliberate = f.capabilities.filter((c) => !AUTO.has(c.key)).sort((a, b) => b.sessions - a.sessions);
|
|
@@ -9567,10 +9559,6 @@ function FrontierPanel({ f, detail, coaching, gap, parallelism }) {
|
|
|
9567
9559
|
DO_THIS[m.key] && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mt-1.5 rounded-lg bg-accentSoft/40 px-2.5 py-1.5 text-[12.5px] leading-relaxed text-ink", children: [
|
|
9568
9560
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "font-semibold text-accent", children: "Do this \u2014 " }),
|
|
9569
9561
|
DO_THIS[m.key]
|
|
9570
|
-
] }),
|
|
9571
|
-
FOR_YOU[m.key] && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mt-1.5 border-l-2 border-line pl-2.5 text-[12px] leading-relaxed text-muted", children: [
|
|
9572
|
-
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "font-semibold text-ink", children: "For you \u2014 " }),
|
|
9573
|
-
FOR_YOU[m.key]
|
|
9574
9562
|
] })
|
|
9575
9563
|
] }, m.key)) }) })
|
|
9576
9564
|
] });
|
|
@@ -9982,6 +9970,7 @@ function IntensityWeekRows({ data }) {
|
|
|
9982
9970
|
const effWeeks = nDays / 7;
|
|
9983
9971
|
const avgSpan = Math.round(inStretch.reduce((a, d) => a + d.span, 0) / effWeeks * 10) / 10;
|
|
9984
9972
|
const avgBrk = Math.round(inStretch.reduce((a, d) => a + d.brk, 0) / effWeeks * 10) / 10;
|
|
9973
|
+
const breaksMeasured = (data.focus?.days ?? []).some((d) => d.ranges);
|
|
9985
9974
|
const row = (label, value, sub) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex items-baseline justify-between rounded-xl border border-line bg-canvas px-4 py-3", children: [
|
|
9986
9975
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { children: [
|
|
9987
9976
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "text-[13px] font-semibold text-ink", children: label }),
|
|
@@ -10067,8 +10056,8 @@ function IntensityWeekRows({ data }) {
|
|
|
10067
10056
|
] })
|
|
10068
10057
|
] }),
|
|
10069
10058
|
nDays === 0 ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mt-2 rounded-lg border border-line bg-canvas px-3 py-2 text-[12.5px] text-muted", children: "No solid coding stretch in this window (a stretch needs days with 2h+ of work at most 4 days apart) \u2014 widen the range or hit Reset to all." }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mt-2 space-y-2", children: [
|
|
10070
|
-
row("Hours / week, including breaks", `${avgSpan}h`, "your working day with meals and breaks; overnight and 4h+ absences excluded"),
|
|
10071
|
-
row("Break hours / week", `${avgBrk}h`, "daytime gaps of 30 min to 4h inside your workday; meals, errands, drift")
|
|
10059
|
+
row("Hours / week, including breaks", `${avgSpan}h`, breaksMeasured ? "your working day with meals and breaks; overnight and 4h+ absences excluded" : "first \u2192 last activity per day"),
|
|
10060
|
+
breaksMeasured && row("Break hours / week", `${avgBrk}h`, "daytime gaps of 30 min to 4h inside your workday; meals, errands, drift")
|
|
10072
10061
|
] })
|
|
10073
10062
|
] });
|
|
10074
10063
|
}
|
|
@@ -10327,15 +10316,15 @@ function CodeAnalysisView({ data: dataProp } = {}) {
|
|
|
10327
10316
|
data.frontierArsenal && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(FrontierPanel, { f: data.frontierArsenal, detail: data.frontierDetail, coaching: data.coaching?.coaching?.frontier, gap: data.gap, parallelism: data.parallelism }),
|
|
10328
10317
|
data.delegationRollup && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DelegationPanel, { r: data.delegationRollup, takes: data.criteria?.find((c) => c.key === "delegation")?.takes })
|
|
10329
10318
|
] }), ["delegation", "frontier"]),
|
|
10330
|
-
fs("coding:expertise", "Expertise", /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
|
|
10319
|
+
data.expertiseMap && fs("coding:expertise", "Expertise", /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
|
|
10331
10320
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SectionDivider, { label: "Expertise" }),
|
|
10332
|
-
|
|
10321
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ExpertiseMapPanel, { x: data.expertiseMap, coaching: data.coaching?.coaching?.expertise })
|
|
10333
10322
|
] }), ["expertise"]),
|
|
10334
|
-
fs("coding:qualitatives", "The qualitatives", /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
|
|
10323
|
+
(data.gradedSessions ?? 0) > 0 && data.aggregate?.ability && fs("coding:qualitatives", "The qualitatives", /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
|
|
10335
10324
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SectionDivider, { label: "The qualitatives", note: "Our best estimate, with the specific chats behind each read. These are hard to tell from your Claude Code logs alone \u2014 you may well be much better than what shows up here." }),
|
|
10336
|
-
|
|
10325
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(AbilityPanel, { a: data.aggregate.ability, feelSeen: data.coaching?.feelSeen, agencyScore: (data.stackUp ?? []).find((r) => r.label === "Agency")?.score ?? null })
|
|
10337
10326
|
] }), []),
|
|
10338
|
-
fs("coding:conclusion", "In conclusion", /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
|
|
10327
|
+
(data.gradedSessions ?? 0) > 0 && fs("coding:conclusion", "In conclusion", /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
|
|
10339
10328
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SectionDivider, { label: "In conclusion" }),
|
|
10340
10329
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(FeelSeenConclusionPanel, { data }),
|
|
10341
10330
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(BetterThanYouPanel, { data })
|
|
@@ -11862,6 +11851,66 @@ function PublicReportTab() {
|
|
|
11862
11851
|
] })
|
|
11863
11852
|
] });
|
|
11864
11853
|
}
|
|
11854
|
+
function laneFrac(l) {
|
|
11855
|
+
if (l.done) return 1;
|
|
11856
|
+
if (!l.total) return 0;
|
|
11857
|
+
const w = l.within && l.within.total ? l.within.done / l.within.total : 0;
|
|
11858
|
+
return Math.min(1, Math.max(0, (l.i - 1 + w) / l.total));
|
|
11859
|
+
}
|
|
11860
|
+
function LaneRow({ name, l }) {
|
|
11861
|
+
if (l.skipped) return null;
|
|
11862
|
+
const pct = Math.round(laneFrac(l) * 100);
|
|
11863
|
+
const detail = l.done ? l.failed ? `${l.failed} stage${l.failed === 1 ? "" : "s"} failed. A rerun resumes them.` : "done \u2713" : `${l.label}${l.within ? ` \xB7 ${l.within.done}/${l.within.total}` : ""}${l.overnight ? " \xB7 heavy grading runs at 2:00 am tonight" : ""}`;
|
|
11864
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "flex min-w-0 flex-1 basis-full items-center gap-2 sm:basis-auto", children: [
|
|
11865
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "w-12 shrink-0 text-[11.5px] font-medium text-ink", children: name }),
|
|
11866
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "h-1.5 w-24 shrink-0 overflow-hidden rounded-full bg-canvas", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "h-full rounded-full bg-ink transition-all duration-700", style: { width: `${pct}%` } }) }),
|
|
11867
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("span", { className: "w-9 shrink-0 text-[12px] font-semibold tabular-nums text-ink", children: [
|
|
11868
|
+
pct,
|
|
11869
|
+
"%"
|
|
11870
|
+
] }),
|
|
11871
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "min-w-0 text-[11.5px] text-muted", children: detail })
|
|
11872
|
+
] });
|
|
11873
|
+
}
|
|
11874
|
+
function PipelineProgressBanner() {
|
|
11875
|
+
const [p, setP] = (0, import_react10.useState)(null);
|
|
11876
|
+
const [landedSinceLoad, setLandedSinceLoad] = (0, import_react10.useState)(false);
|
|
11877
|
+
(0, import_react10.useEffect)(() => {
|
|
11878
|
+
let alive = true;
|
|
11879
|
+
const sawRunning = {};
|
|
11880
|
+
const poll = () => fetch("/api/progress").then((r) => r.ok ? r.json() : null).then((j) => {
|
|
11881
|
+
if (!alive || !j) return;
|
|
11882
|
+
for (const [name, l] of Object.entries({ coding: j.coding, chat: j.chat })) {
|
|
11883
|
+
if (l && !l.done && !l.skipped) sawRunning[name] = true;
|
|
11884
|
+
if (l && l.done && sawRunning[name]) setLandedSinceLoad(true);
|
|
11885
|
+
}
|
|
11886
|
+
setP(j);
|
|
11887
|
+
}).catch(() => {
|
|
11888
|
+
});
|
|
11889
|
+
poll();
|
|
11890
|
+
const t = window.setInterval(poll, 5e3);
|
|
11891
|
+
return () => {
|
|
11892
|
+
alive = false;
|
|
11893
|
+
window.clearInterval(t);
|
|
11894
|
+
};
|
|
11895
|
+
}, []);
|
|
11896
|
+
const visible = [["coding", p?.coding], ["chat", p?.chat]].filter(([, l]) => l && !l.skipped);
|
|
11897
|
+
const anyRunning = visible.some(([, l]) => !l.done);
|
|
11898
|
+
const anyOvernight = visible.some(([, l]) => !l.done && l.overnight);
|
|
11899
|
+
if (!visible.length || !anyRunning && !landedSinceLoad) return null;
|
|
11900
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "mb-4 rounded-xl border border-line bg-paper px-4 py-3 text-[12.5px] text-muted", children: [
|
|
11901
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "mb-1.5 flex items-center gap-2", children: [
|
|
11902
|
+
anyRunning && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "inline-block h-2 w-2 animate-pulse rounded-full bg-amber-500", "aria-hidden": true }),
|
|
11903
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "font-medium text-ink", children: !anyRunning ? "New results just landed." : anyOvernight ? "Part of your analysis is scheduled for 2:00 am tonight. This page fills in as stages finish." : "Your analysis is still running. This page fills in as stages finish." }),
|
|
11904
|
+
landedSinceLoad && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("button", { onClick: () => window.location.reload(), className: "ml-auto rounded-full bg-ink px-3 py-1 text-[11.5px] font-medium text-paper transition-opacity hover:opacity-85", children: "Load the new results" })
|
|
11905
|
+
] }),
|
|
11906
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "flex flex-wrap items-center gap-x-6 gap-y-1.5", children: visible.map(([name, l]) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(LaneRow, { name, l }, name)) }),
|
|
11907
|
+
anyOvernight && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "mt-2 rounded-lg bg-canvas px-3 py-2 text-[12px] text-ink", children: [
|
|
11908
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "font-medium", children: "For the overnight part to finish:" }),
|
|
11909
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "ml-2", children: "1. Keep the laptop plugged in." }),
|
|
11910
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "ml-3", children: "2. Keep the lid open. A closed lid means sleep, and the run stalls until morning." })
|
|
11911
|
+
] })
|
|
11912
|
+
] });
|
|
11913
|
+
}
|
|
11865
11914
|
var TABS = [
|
|
11866
11915
|
{ key: "coding", label: "Code analysis" },
|
|
11867
11916
|
{ key: "chat", label: "Chat analysis" },
|
|
@@ -11958,6 +12007,7 @@ function Shell() {
|
|
|
11958
12007
|
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("a", { href: "/auth/login", target: "_blank", rel: "noreferrer", className: "font-medium underline", children: "Sign in" })
|
|
11959
12008
|
] }) : null
|
|
11960
12009
|
] }),
|
|
12010
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(PipelineProgressBanner, {}),
|
|
11961
12011
|
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "mb-6 flex items-center gap-1 rounded-full border border-line bg-paper p-1", role: "tablist", "aria-label": "Report sections", children: TABS.map((t) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
11962
12012
|
"button",
|
|
11963
12013
|
{
|