polymath-society 0.2.5 → 0.2.7
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 +2420 -1573
- package/dist/engine/ingest-export.js +14 -8
- package/dist/engine/public-report.js +14 -8
- package/dist/index.js +1475 -60
- package/dist/pipeline/coding-agglomerate.js +289 -35
- package/dist/pipeline/coding-aggregate.js +15 -9
- package/dist/pipeline/coding-build.js +14 -8
- package/dist/pipeline/coding-coaching.js +273 -21
- package/dist/pipeline/coding-day-digest.js +17 -10
- package/dist/pipeline/coding-delegation.js +62 -17
- package/dist/pipeline/coding-expertise.js +166 -61
- package/dist/pipeline/coding-flow.js +14 -8
- package/dist/pipeline/coding-frontier-detail.js +143 -27
- package/dist/pipeline/coding-frontier.js +14 -8
- package/dist/pipeline/coding-gap-dist.js +14 -8
- package/dist/pipeline/coding-gap.js +140 -39
- package/dist/pipeline/coding-grade.js +44 -14
- package/dist/pipeline/coding-nutshell.js +39 -11
- package/dist/pipeline/coding-projects.js +41 -10
- package/dist/pipeline/coding-walkthrough.js +15 -9
- package/dist/web/app.js +493 -117
- package/dist/web/styles.css +1 -1
- package/package.json +1 -1
|
@@ -205,7 +205,7 @@ var TRANSCRIPT_LINE_RE = new RegExp(`^\\s*(${NOTE})((,| and) ${NOTE})*\\s*$|^\\s
|
|
|
205
205
|
|
|
206
206
|
// ../../lib/calibration/index.ts
|
|
207
207
|
var DEFAULT_CALIBRATION = {
|
|
208
|
-
version: "2026-07-
|
|
208
|
+
version: "2026-07-14.2",
|
|
209
209
|
// = RUBRIC_FINGERPRINT of the shipped npm rubric (packages/coding-analyzer/
|
|
210
210
|
// src/grade/criteria.ts). A unit test fails loud when the rubric changes
|
|
211
211
|
// without this being updated (and re-pushed to the server).
|
|
@@ -294,7 +294,7 @@ var DEFAULT_CALIBRATION = {
|
|
|
294
294
|
}
|
|
295
295
|
],
|
|
296
296
|
codingTiers: {
|
|
297
|
-
push: { median: 300, sigma:
|
|
297
|
+
push: { median: 300, sigma: 0.91, 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: a 1-in-1,000 user AVERAGES ~5k directed words/day (near-daily heavy dictation, clearly below the ~10k single-day record). AVERAGE over substantial days, cumulative not spiky." },
|
|
298
298
|
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." },
|
|
299
299
|
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" }
|
|
300
300
|
},
|
|
@@ -327,12 +327,18 @@ var DEFAULT_CALIBRATION = {
|
|
|
327
327
|
line: "the Claude Code lead runs 10\u201315 sessions at once; his #1 tip is 3\u20135 git worktrees in parallel"
|
|
328
328
|
},
|
|
329
329
|
throughput: {
|
|
330
|
-
//
|
|
331
|
-
//
|
|
332
|
-
//
|
|
333
|
-
//
|
|
334
|
-
|
|
335
|
-
|
|
330
|
+
// Two DIFFERENT kinds of line (2026-07-14.2): topAvg is a PERCENTILE
|
|
331
|
+
// claim — what a 1-in-1,000 user AVERAGES over substantial days (5k/day:
|
|
332
|
+
// near-daily heavy dictation; a measured top dictating power user
|
|
333
|
+
// averages ~3.9k). topPeak is NOT a percentile — it is the CEILING
|
|
334
|
+
// reference, the wildest single days on record (~10k: a 14-16h
|
|
335
|
+
// launch-day marathon), rendered as "wildest single days", never
|
|
336
|
+
// "top X% peak". An avg-percentile and a peak-percentile can't both be
|
|
337
|
+
// shown at a same-ish value (avg≈peak reads broken — user call), and a
|
|
338
|
+
// peak PERCENTILE line is unknowable anyway; the record framing is
|
|
339
|
+
// honest and keeps the visual gap.
|
|
340
|
+
topAvgWordsPerDay: 5e3,
|
|
341
|
+
topPeakWordsPerDay: 1e4,
|
|
336
342
|
benchLabel: "top 0.1%",
|
|
337
343
|
// No published "words typed/day" for heavy users — the real story is OUTPUT.
|
|
338
344
|
loopsHeadline: ">1,000,000 lines of Rust at 99.8% tests passing",
|
|
@@ -398,13 +404,38 @@ async function main() {
|
|
|
398
404
|
}
|
|
399
405
|
r.mins += s.activeMin || 0;
|
|
400
406
|
}
|
|
401
|
-
const
|
|
407
|
+
const pathEvidence = async (s, desc) => {
|
|
408
|
+
try {
|
|
409
|
+
const txt = await fs.readFile(s.file, "utf8");
|
|
410
|
+
let best = null, bestN = 0;
|
|
411
|
+
for (const r of desc) {
|
|
412
|
+
const n = txt.split(r.cwd + "/").length - 1;
|
|
413
|
+
if (n > bestN) {
|
|
414
|
+
best = r;
|
|
415
|
+
bestN = n;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
return bestN > 0 ? best : null;
|
|
419
|
+
} catch {
|
|
420
|
+
return null;
|
|
421
|
+
}
|
|
422
|
+
};
|
|
423
|
+
const titleEvidence = (s, desc) => {
|
|
424
|
+
const title = (s.title || "").toLowerCase();
|
|
425
|
+
const hits = desc.filter((r) => title.includes(base(r.cwd).replace(/[-_]/g, " ")) || title.includes(base(r.cwd)));
|
|
426
|
+
return hits.length === 1 ? hits[0] : null;
|
|
427
|
+
};
|
|
428
|
+
const resolveName = async (s) => {
|
|
402
429
|
const cwd = s.project || "";
|
|
403
430
|
const own = gitRemote(cwd);
|
|
404
431
|
if (own) return pretty(repoName(own));
|
|
405
432
|
const pref = cwd.endsWith("/") ? cwd : cwd + "/";
|
|
406
433
|
const desc = repos.filter((r) => r.cwd.startsWith(pref));
|
|
407
434
|
if (!desc.length) return pretty(base(cwd));
|
|
435
|
+
const byPath = await pathEvidence(s, desc);
|
|
436
|
+
if (byPath) return byPath.name;
|
|
437
|
+
const byTitle = titleEvidence(s, desc);
|
|
438
|
+
if (byTitle) return byTitle.name;
|
|
408
439
|
const t = Date.parse(s.start || "") || 0;
|
|
409
440
|
const dist = (r) => t < r.min ? r.min - t : t > r.max ? t - r.max : 0;
|
|
410
441
|
return desc.slice().sort((a, b) => dist(a) - dist(b) || b.mins - a.mins)[0].name;
|
|
@@ -413,7 +444,7 @@ async function main() {
|
|
|
413
444
|
for (const s of ss) {
|
|
414
445
|
const d = day(s.start);
|
|
415
446
|
if (!d) continue;
|
|
416
|
-
const p = resolveName(s);
|
|
447
|
+
const p = await resolveName(s);
|
|
417
448
|
(dayProj[d] = dayProj[d] || {})[p] = (dayProj[d][p] || 0) + (s.activeMin || 0);
|
|
418
449
|
}
|
|
419
450
|
const byDay = {};
|
|
@@ -16043,7 +16043,7 @@ var TRANSCRIPT_LINE_RE = new RegExp(`^\\s*(${NOTE})((,| and) ${NOTE})*\\s*$|^\\s
|
|
|
16043
16043
|
|
|
16044
16044
|
// ../../lib/calibration/index.ts
|
|
16045
16045
|
var DEFAULT_CALIBRATION = {
|
|
16046
|
-
version: "2026-07-
|
|
16046
|
+
version: "2026-07-14.2",
|
|
16047
16047
|
// = RUBRIC_FINGERPRINT of the shipped npm rubric (packages/coding-analyzer/
|
|
16048
16048
|
// src/grade/criteria.ts). A unit test fails loud when the rubric changes
|
|
16049
16049
|
// without this being updated (and re-pushed to the server).
|
|
@@ -16132,7 +16132,7 @@ var DEFAULT_CALIBRATION = {
|
|
|
16132
16132
|
}
|
|
16133
16133
|
],
|
|
16134
16134
|
codingTiers: {
|
|
16135
|
-
push: { median: 300, sigma:
|
|
16135
|
+
push: { median: 300, sigma: 0.91, 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: a 1-in-1,000 user AVERAGES ~5k directed words/day (near-daily heavy dictation, clearly below the ~10k single-day record). AVERAGE over substantial days, cumulative not spiky." },
|
|
16136
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
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
16138
|
},
|
|
@@ -16165,12 +16165,18 @@ var DEFAULT_CALIBRATION = {
|
|
|
16165
16165
|
line: "the Claude Code lead runs 10\u201315 sessions at once; his #1 tip is 3\u20135 git worktrees in parallel"
|
|
16166
16166
|
},
|
|
16167
16167
|
throughput: {
|
|
16168
|
-
//
|
|
16169
|
-
//
|
|
16170
|
-
//
|
|
16171
|
-
//
|
|
16172
|
-
|
|
16173
|
-
|
|
16168
|
+
// Two DIFFERENT kinds of line (2026-07-14.2): topAvg is a PERCENTILE
|
|
16169
|
+
// claim — what a 1-in-1,000 user AVERAGES over substantial days (5k/day:
|
|
16170
|
+
// near-daily heavy dictation; a measured top dictating power user
|
|
16171
|
+
// averages ~3.9k). topPeak is NOT a percentile — it is the CEILING
|
|
16172
|
+
// reference, the wildest single days on record (~10k: a 14-16h
|
|
16173
|
+
// launch-day marathon), rendered as "wildest single days", never
|
|
16174
|
+
// "top X% peak". An avg-percentile and a peak-percentile can't both be
|
|
16175
|
+
// shown at a same-ish value (avg≈peak reads broken — user call), and a
|
|
16176
|
+
// peak PERCENTILE line is unknowable anyway; the record framing is
|
|
16177
|
+
// honest and keeps the visual gap.
|
|
16178
|
+
topAvgWordsPerDay: 5e3,
|
|
16179
|
+
topPeakWordsPerDay: 1e4,
|
|
16174
16180
|
benchLabel: "top 0.1%",
|
|
16175
16181
|
// No published "words typed/day" for heavy users — the real story is OUTPUT.
|
|
16176
16182
|
loopsHeadline: ">1,000,000 lines of Rust at 99.8% tests passing",
|
|
@@ -16217,7 +16223,7 @@ function limiter(max) {
|
|
|
16217
16223
|
}
|
|
16218
16224
|
async function main() {
|
|
16219
16225
|
const sessions = JSON.parse(await fs6.readFile(path11.join(CODING, "sessions.json"), "utf8"));
|
|
16220
|
-
const todo = sessions.filter((s) => !isTrivial(s) && !s.duplicateOf).sort((a, b) => b.humanChars - a.humanChars);
|
|
16226
|
+
const todo = sessions.filter((s) => s.klass === "interactive" && !isTrivial(s) && !s.duplicateOf).sort((a, b) => b.humanChars - a.humanChars);
|
|
16221
16227
|
await fs6.mkdir(DIR, { recursive: true });
|
|
16222
16228
|
const pending = [];
|
|
16223
16229
|
for (const s of todo) {
|