skalpel 4.0.12 → 4.0.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/bootstrap.mjs +3 -1
- package/package.json +1 -1
- package/reveal.mjs +22 -6
- package/skalpel-setup.mjs +12 -2
package/bootstrap.mjs
CHANGED
|
@@ -368,7 +368,9 @@ function recordProfile(profile, sessions) {
|
|
|
368
368
|
if (headline) {
|
|
369
369
|
recordInsight({
|
|
370
370
|
kind: "profile",
|
|
371
|
-
|
|
371
|
+
// RED LINE 1: hours/rework_pct are the server's LLM-derived ESTIMATES, not a stopwatch and not
|
|
372
|
+
// locally reproducible — label them as estimates and point to the `skalpel autopsy` receipt.
|
|
373
|
+
display: `estimated ~${headline.hours ?? 0}h active with AI across ${headline.sessions ?? sessions} sessions; est. ~${headline.rework_pct ?? 0}% rework (run 'skalpel autopsy' for the exact receipt)`,
|
|
372
374
|
});
|
|
373
375
|
} else {
|
|
374
376
|
recordInsight({ kind: "profile", display: `standing profile built from ${sessions} sessions` });
|
package/package.json
CHANGED
package/reveal.mjs
CHANGED
|
@@ -31,13 +31,25 @@ export function graphReadyNote() {
|
|
|
31
31
|
const trap = m.report && (m.report.discriminative || [])[0] && m.report.discriminative[0].seq;
|
|
32
32
|
const n = m.n_sessions || h.sessions || 0;
|
|
33
33
|
|
|
34
|
+
// PROVENANCE / HONESTY (RED LINE 1): both `hours` and `rework_pct` come from the hosted graph
|
|
35
|
+
// server's profile, which is built from an LLM judge's per-intent classification (intent_class +
|
|
36
|
+
// resolution) over the ingested transcripts. `hours` = summed, banded human read/dwell time on
|
|
37
|
+
// non-`other` intents (NOT raw session wall-clock); `rework_pct` = share of that time whose
|
|
38
|
+
// LLM-judged resolution is a "waste" class. Neither is a stopwatch measurement and neither
|
|
39
|
+
// re-derives locally the way `skalpel autopsy` does — so they must be surfaced as ESTIMATES, never
|
|
40
|
+
// as measured fact. The reproducible receipt is `skalpel autopsy`.
|
|
34
41
|
const facts = [];
|
|
35
42
|
if (h.hours)
|
|
36
|
-
facts.push(
|
|
43
|
+
facts.push(
|
|
44
|
+
`skalpel ESTIMATES they've spent about ${h.hours} hours of active time working with AI across ` +
|
|
45
|
+
`these sessions (inferred from their history — an estimate, not an exact clock)`,
|
|
46
|
+
);
|
|
37
47
|
if (h.rework_pct)
|
|
38
48
|
facts.push(
|
|
39
|
-
`roughly ${h.rework_pct}% of that
|
|
40
|
-
`re-fix things they'd already worked on (
|
|
49
|
+
`and it estimates roughly ${h.rework_pct}% of that went into REWORK-type patterns — going back ` +
|
|
50
|
+
`to redo, re-explain, or re-fix things they'd already worked on (this % is skalpel's ESTIMATE ` +
|
|
51
|
+
`from reading their sessions, NOT a stopwatch figure — it's the kind of loop skalpel is built ` +
|
|
52
|
+
`to help with)`,
|
|
41
53
|
);
|
|
42
54
|
if (trap)
|
|
43
55
|
facts.push(
|
|
@@ -54,8 +66,12 @@ export function graphReadyNote() {
|
|
|
54
66
|
`"🔬 skalpel · your graph's ready — here's what I noticed about how you work:" — then, in 2-3 ` +
|
|
55
67
|
`friendly plain-English sentences, tell them what it found` +
|
|
56
68
|
(facts.length ? `: ${facts.join("; ")}` : "") +
|
|
57
|
-
`.
|
|
58
|
-
`
|
|
59
|
-
`
|
|
69
|
+
`. HONESTY RULE: present every number as skalpel's ESTIMATE inferred from their history — hedge ` +
|
|
70
|
+
`naturally ("about", "roughly", "skalpel estimates") and NEVER state a figure as an exact ` +
|
|
71
|
+
`measurement. If they want the exact, locally-verified receipt that re-derives from the coding ` +
|
|
72
|
+
`logs already on their own machine, tell them they can run \`skalpel autopsy\` anytime. Close by ` +
|
|
73
|
+
`reassuring them this is exactly the loop skalpel now quietly watches for and steers them out of, ` +
|
|
74
|
+
`live, while they code — they don't have to track it themselves. Then continue with whatever they ` +
|
|
75
|
+
`actually asked. Keep the whole thing short and human.]`
|
|
60
76
|
);
|
|
61
77
|
}
|
package/skalpel-setup.mjs
CHANGED
|
@@ -698,12 +698,15 @@ async function revealInsights(report) {
|
|
|
698
698
|
console.log("");
|
|
699
699
|
await line(` ${B}Here's what I learned about how you work:${X}\n`, 480);
|
|
700
700
|
|
|
701
|
+
// RED LINE 1: h.hours / h.rework_pct are the hosted graph server's ESTIMATES, built from an LLM
|
|
702
|
+
// judge's per-intent classification — not a stopwatch, and not locally reproducible. Surface them
|
|
703
|
+
// as estimates and point to `skalpel autopsy` (the zero-network receipt that re-derives from disk).
|
|
701
704
|
const rw = h.rework_pct || 0;
|
|
702
705
|
await line(
|
|
703
|
-
` ${R}▸${X}
|
|
706
|
+
` ${R}▸${X} skalpel estimates about ${B}${h.hours}h${X} of active time with AI across ${h.sessions} sessions — and that about ${B}${R}${rw}%${X} of it went to ${B}rework${X}:`,
|
|
704
707
|
);
|
|
705
708
|
await line(
|
|
706
|
-
` ${D}circling back, re-explaining, re-fixing the same thing
|
|
709
|
+
` ${D}circling back, re-explaining, re-fixing the same thing — the loop skalpel goes after.${X}\n`,
|
|
707
710
|
520,
|
|
708
711
|
);
|
|
709
712
|
|
|
@@ -738,6 +741,13 @@ async function revealInsights(report) {
|
|
|
738
741
|
}
|
|
739
742
|
|
|
740
743
|
console.log("");
|
|
744
|
+
// RED LINE 1: everything above (hours, rework %, archetype waste-hours, time-sink %, escape %) is
|
|
745
|
+
// the hosted graph's ESTIMATE from an LLM read of your sessions — not a stopwatch. State that once,
|
|
746
|
+
// plainly, and point to the zero-network receipt that re-derives from the logs on THIS machine.
|
|
747
|
+
await line(
|
|
748
|
+
` ${D}These are skalpel's estimates from your recent sessions — run ${X}${B}skalpel autopsy${X}${D} for the exact receipt that re-derives from the logs on this machine.${X}`,
|
|
749
|
+
260,
|
|
750
|
+
);
|
|
741
751
|
await line(
|
|
742
752
|
` ${G}skalpel now watches for these every session and steers you off them in real time.${X}`,
|
|
743
753
|
260,
|