harness-everything 0.27.0 → 0.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +33 -0
  4. package/behavioral-evals/README.md +39 -0
  5. package/behavioral-evals/case-validator.js +34 -0
  6. package/behavioral-evals/cases/baseline-worktree-submodule-reachability.yaml +30 -0
  7. package/behavioral-evals/fixtures/setup/fail.js +3 -0
  8. package/behavioral-evals/fixtures/setup/noop.js +4 -0
  9. package/behavioral-evals/fixtures/setup/verify-worktree-submodule.js +46 -0
  10. package/behavioral-evals/fixtures/setup/worktree-submodule.js +86 -0
  11. package/behavioral-evals/paired-benchmark.js +39 -5
  12. package/behavioral-evals/run-with-plugin.js +53 -39
  13. package/behavioral-evals/run.js +88 -9
  14. package/benchmarks/fixtures/system-one-holdout-reviews.json +18 -18
  15. package/benchmarks/fixtures/system-one-holdout.json +9 -9
  16. package/benchmarks/results/system-one/harness-routing-v1-cpu-2026-09-24/README.md +75 -0
  17. package/benchmarks/results/system-one/harness-routing-v1-cpu-2026-09-24/report.json +10832 -0
  18. package/benchmarks/results/system-one/harness-routing-v1-ngram-2026-09-24/README.md +72 -0
  19. package/benchmarks/results/system-one/harness-routing-v1-ngram-2026-09-24/report.json +10817 -0
  20. package/benchmarks/results/system-one/harness-routing-v3-ngram-2026-09-24/README.md +63 -0
  21. package/benchmarks/results/system-one/harness-routing-v3-ngram-2026-09-24/report.json +10817 -0
  22. package/benchmarks/results/system-one/labeler-holdout-check-2026-09-24/report.json +1104 -0
  23. package/benchmarks/results/system-one/labeler-holdout-check-codex-2026-09-24/report.json +1104 -0
  24. package/benchmarks/results/system-one/labeler-holdout-check-codex-tier3-2026-09-24/report.json +1104 -0
  25. package/ci/mechanism-2j-behavioral-runner.test.js +121 -1
  26. package/ci/mechanism-2j-fixture-entrypoints.test.js +153 -0
  27. package/ci/mechanism-system-one-evaluation.test.js +17 -0
  28. package/ci/mechanism-system-one-label.test.js +27 -0
  29. package/ci/mechanism-system-one-ngram.test.js +161 -0
  30. package/ci/mechanism-system-one-train.test.js +12 -0
  31. package/ci/system-one-ngram-parity.py +19 -0
  32. package/ci/system-one-train-test.py +6 -0
  33. package/ci/test-behavioral-case-validation.js +26 -0
  34. package/docs/system-one-corpus.md +31 -3
  35. package/docs/system-one-routing.md +84 -2
  36. package/docs/system-one-training.md +14 -2
  37. package/harness-everything/SKILL.md +1 -1
  38. package/harness-everything/scripts/system-one/evaluate.js +3 -2
  39. package/harness-everything/scripts/system-one/ngram.js +84 -0
  40. package/harness-everything/scripts/system-one/provider.js +15 -5
  41. package/opencode-plugin/plugin.json +1 -1
  42. package/package.json +1 -1
  43. package/plugins/harness-everything/.codex-plugin/plugin.json +1 -1
  44. package/plugins/harness-everything/plugin.json +1 -1
  45. package/plugins/harness-everything/skills/harness-everything/SKILL.md +1 -1
  46. package/plugins/harness-everything/skills/harness-everything/scripts/system-one/evaluate.js +3 -2
  47. package/plugins/harness-everything/skills/harness-everything/scripts/system-one/ngram.js +84 -0
  48. package/plugins/harness-everything/skills/harness-everything/scripts/system-one/provider.js +15 -5
  49. package/sbom.cdx.json +7 -7
  50. package/scripts/evaluate-system-one.js +16 -9
  51. package/scripts/system-one-calibrate.js +1 -1
  52. package/scripts/system-one-label.js +32 -3
  53. package/scripts/system-one-train-ngram.py +129 -0
  54. package/scripts/system-one-train.py +14 -1
@@ -22,12 +22,13 @@ const fs = require('fs');
22
22
  const os = require('os');
23
23
  const path = require('path');
24
24
  const crypto = require('crypto');
25
- const { execFileSync } = require('child_process');
25
+ const { execFileSync, spawnSync } = require('child_process');
26
26
  const {
27
27
  gradeExecutionEvidence,
28
28
  parseTranscriptFile,
29
29
  } = require('./transcript-parser');
30
30
  const { commandMatches, normalizeRepoPath } = require('../scripts/lib/execution-contract');
31
+ const { resolveFixtureSetup, validateFixture } = require('./case-validator');
31
32
 
32
33
  const ROOT = path.resolve(__dirname, '..');
33
34
  const CASES_DIR = path.join(__dirname, 'cases');
@@ -155,7 +156,8 @@ function validate(cases) {
155
156
  if (!c.id) problems.push('missing id');
156
157
  if (!c.prompt) problems.push('missing prompt');
157
158
  if (!c.max_turns) problems.push('missing max_turns');
158
- if (!c.fixture || !Array.isArray(c.fixture.files)) problems.push('fixture.files missing');
159
+ if (!c.fixture) problems.push('fixture missing');
160
+ else problems.push(...validateFixture(c.fixture));
159
161
  if (!Array.isArray(c.expectations) || c.expectations.length === 0) problems.push('expectations missing');
160
162
  if (c.loaded_skills !== undefined && (!Array.isArray(c.loaded_skills) || c.loaded_skills.some(skill => !fs.existsSync(path.join(ROOT, skill, 'SKILL.md'))))) {
161
163
  problems.push('loaded_skills must name existing skills');
@@ -207,6 +209,66 @@ function buildWorkspace(c) {
207
209
  return ws;
208
210
  }
209
211
 
212
+ function runFixtureSetup(c, ws) {
213
+ const resolved = resolveFixtureSetup(c && c.fixture && c.fixture.setup);
214
+ if (!resolved) return { path: null, script_sha256: null, status: 'not-requested', exit_code: null, duration_ms: 0 };
215
+ const scriptSha256 = sha256(fs.readFileSync(resolved.absolute));
216
+ const startedAt = Date.now();
217
+ const result = spawnSync(process.execPath, [resolved.absolute], {
218
+ cwd: ws,
219
+ encoding: 'utf8',
220
+ env: {
221
+ ...process.env,
222
+ HARNESS_BEHAVIORAL_WORKSPACE: ws,
223
+ HARNESS_BEHAVIORAL_CASE_ID: String(c.id || ''),
224
+ },
225
+ timeout: 60 * 1000,
226
+ windowsHide: true,
227
+ });
228
+ const evidence = {
229
+ path: resolved.relative,
230
+ script_sha256: scriptSha256,
231
+ status: result.status === 0 && !result.error ? 'pass' : 'fail',
232
+ exit_code: result.status,
233
+ duration_ms: Date.now() - startedAt,
234
+ };
235
+ if (result.error || result.status !== 0) {
236
+ const detail = (result.stderr || result.stdout || (result.error && result.error.message) || '').trim();
237
+ const error = new Error(
238
+ `fixture setup failed: ${resolved.relative}${result.status === null ? '' : ` (exit ${result.status})`}${detail ? `: ${detail.slice(0, 300)}` : ''}`
239
+ );
240
+ error.fixtureSetup = evidence;
241
+ throw error;
242
+ }
243
+ return evidence;
244
+ }
245
+
246
+ function prepareWorkspace(c) {
247
+ let workspace = null;
248
+ try {
249
+ workspace = buildWorkspace(c);
250
+ return {
251
+ ok: true,
252
+ workspace,
253
+ setup: runFixtureSetup(c, workspace),
254
+ };
255
+ } catch (error) {
256
+ return {
257
+ ok: false,
258
+ workspace,
259
+ outcome: 'fixture-error',
260
+ error: error.message.slice(0, 500),
261
+ setup: error.fixtureSetup || {
262
+ path: c && c.fixture ? c.fixture.setup || null : null,
263
+ script_sha256: null,
264
+ status: 'fail',
265
+ exit_code: null,
266
+ duration_ms: null,
267
+ },
268
+ };
269
+ }
270
+ }
271
+
210
272
  // Capture the requested fixture baseline after treatment installation so the
211
273
  // installer's own artifacts (.claude/, .harness-src/, opencode.json) show up
212
274
  // in neither arm's post-run scope check.
@@ -685,9 +747,8 @@ function treatmentSkills(c) {
685
747
  function runArm(c, engine, arm, pairId) {
686
748
  const loadedSkills = arm === 'treatment' ? treatmentSkills(c) : [];
687
749
  const attributionRequired = arm === 'treatment';
688
- const ws = buildWorkspace(c);
689
- if (arm === 'treatment') installHarness(ws, loadedSkills);
690
- if (c.fixture.git) gitSnapshot(ws);
750
+ const prepared = prepareWorkspace(c);
751
+ const ws = prepared.workspace;
691
752
 
692
753
  const record = {
693
754
  arm,
@@ -698,9 +759,22 @@ function runArm(c, engine, arm, pairId) {
698
759
  workspace: ws,
699
760
  fixture_sha256: sha256(JSON.stringify(c.fixture)),
700
761
  prompt_sha256: sha256(c.prompt),
762
+ fixture_setup: prepared.setup,
701
763
  cost: null,
702
764
  };
765
+ if (!prepared.ok) {
766
+ return {
767
+ ...record,
768
+ outcome: 'fixture-error',
769
+ error: prepared.error,
770
+ parse_status: 'unavailable',
771
+ tool_call_count: null,
772
+ tool_call_counts: { attempted: null, completed: null, denied: null, unresolved: null },
773
+ };
774
+ }
703
775
  try {
776
+ if (arm === 'treatment') installHarness(ws, loadedSkills);
777
+ if (c.fixture.git) gitSnapshot(ws);
704
778
  const transcriptPath = runHeadless(c.prompt, ws, c.max_turns, engine, arm);
705
779
  const graded = grade(c, ws, transcriptPath, engine);
706
780
  const { results, passed } = graded;
@@ -764,6 +838,8 @@ function summarizePairResults(pairResults) {
764
838
  const completed = pairResults.filter(isCompletedPair);
765
839
  const sessionFailures = pairResults.filter(record => Object.values(record.arms || {})
766
840
  .some(arm => arm.outcome === 'session-error')).length;
841
+ const fixtureFailures = pairResults.filter(record => Object.values(record.arms || {})
842
+ .some(arm => arm.outcome === 'fixture-error')).length;
767
843
  const effective = completed.filter(record => record.verdict === 'EFFECTIVE').length;
768
844
  const categorySummary = {};
769
845
  for (const record of pairResults) {
@@ -806,6 +882,7 @@ function summarizePairResults(pairResults) {
806
882
  cost,
807
883
  completed_pairs: completed.length,
808
884
  session_failures: sessionFailures,
885
+ fixture_failures: fixtureFailures,
809
886
  tool_call_delta: toolCallDelta,
810
887
  verdicts: Object.fromEntries(['EFFECTIVE', 'INEFFECTIVE', 'INCONCLUSIVE', 'HARMFUL']
811
888
  .map(verdict => [verdict, completed.filter(record => record.verdict === verdict).length])),
@@ -835,7 +912,7 @@ function runLive(filter, engineArg, armArg = 'treatment') {
835
912
  fs.mkdirSync(RESULTS_DIR, { recursive: true });
836
913
 
837
914
  const pairResults = [];
838
- let sessionFailures = 0;
915
+ let infrastructureFailures = 0;
839
916
  for (const c of cases) {
840
917
  const pairId = `${c.id}-${Date.now()}-${crypto.randomBytes(3).toString('hex')}`;
841
918
  const order = armArg === 'both'
@@ -864,13 +941,13 @@ function runLive(filter, engineArg, armArg = 'treatment') {
864
941
  for (const arm of Object.values(arms)) {
865
942
  console.log(` ${arm.arm}: ${arm.outcome} (${arm.loaded_skills.length ? arm.loaded_skills.join(', ') : 'no Harness skills'})`);
866
943
  }
867
- if (Object.values(arms).some(arm => arm.outcome === 'session-error')) sessionFailures++;
944
+ if (Object.values(arms).some(arm => arm.outcome === 'session-error' || arm.outcome === 'fixture-error')) infrastructureFailures++;
868
945
  if (armArg === 'both') console.log(` Verdict: ${record.verdict}`);
869
946
  const suffix = armArg === 'both' ? 'pair' : armArg;
870
947
  fs.writeFileSync(path.join(RESULTS_DIR, `${record.date.slice(0, 10)}-${c.id}-${suffix}.json`), JSON.stringify(record, null, 2));
871
948
  }
872
949
 
873
- let exitCode = sessionFailures ? 1 : 0;
950
+ let exitCode = infrastructureFailures ? 1 : 0;
874
951
  if (armArg === 'both') {
875
952
  const aggregate = summarizePairResults(pairResults);
876
953
  const summary = {
@@ -888,7 +965,7 @@ function runLive(filter, engineArg, armArg = 'treatment') {
888
965
  fs.writeFileSync(summaryPath, JSON.stringify(summary, null, 2));
889
966
  console.log(`\nPaired summary: ${summaryPath}`);
890
967
  console.log(`Completed pairs: ${summary.completed_pairs}/${summary.requested_sample_size}`);
891
- exitCode = aggregate.session_failures ? 1 : 0;
968
+ exitCode = (aggregate.session_failures || aggregate.fixture_failures) ? 1 : 0;
892
969
  }
893
970
  process.exit(exitCode);
894
971
  }
@@ -915,6 +992,8 @@ if (require.main === module) main();
915
992
  module.exports = {
916
993
  buildEngineInvocation,
917
994
  buildWorkspace,
995
+ runFixtureSetup,
996
+ prepareWorkspace,
918
997
  countToolCalls,
919
998
  extractAgentEvents,
920
999
  extractAgentTrace,
@@ -410,15 +410,15 @@
410
410
  {
411
411
  "id": "h-fix-cli-error-log-3",
412
412
  "promptHash": "09d285719d1f96cd6740d19922cafc6d8dd0cf2c69107c6684406e4c71a754f3",
413
- "decision": "relabel",
414
- "gold": "tier3",
413
+ "decision": "accept",
414
+ "gold": "tier2",
415
415
  "reviewer": "human:repository-owner"
416
416
  },
417
417
  {
418
418
  "id": "h-fix-cli-error-log-4",
419
419
  "promptHash": "cf19ff4c74605c34d4e8743ff71dd61978178b070c79ea392b7c9c56ea44a933",
420
- "decision": "relabel",
421
- "gold": "tier3",
420
+ "decision": "accept",
421
+ "gold": "tier2",
422
422
  "reviewer": "human:repository-owner"
423
423
  },
424
424
  {
@@ -438,8 +438,8 @@
438
438
  {
439
439
  "id": "h-fix-failing-test-3",
440
440
  "promptHash": "a06402d978c65a532d23ee2381e4e062154adfffb446021c8c5102cad93a8202",
441
- "decision": "relabel",
442
- "gold": "tier3",
441
+ "decision": "accept",
442
+ "gold": "tier2",
443
443
  "reviewer": "human:repository-owner"
444
444
  },
445
445
  {
@@ -452,22 +452,22 @@
452
452
  {
453
453
  "id": "h-add-cli-flag-1",
454
454
  "promptHash": "ae03dbf3193395e0de90b58741c3e866ce2cd3bf08a501820d6a13632d1cd1bb",
455
- "decision": "relabel",
456
- "gold": "tier3",
455
+ "decision": "accept",
456
+ "gold": "tier2",
457
457
  "reviewer": "human:repository-owner"
458
458
  },
459
459
  {
460
460
  "id": "h-add-cli-flag-2",
461
461
  "promptHash": "dee4d30095d0eb8a53d969dd58773cf9d74c27766b67ec0e2871e4d28bf1f12a",
462
- "decision": "relabel",
463
- "gold": "tier3",
462
+ "decision": "accept",
463
+ "gold": "tier2",
464
464
  "reviewer": "human:repository-owner"
465
465
  },
466
466
  {
467
467
  "id": "h-add-cli-flag-3",
468
468
  "promptHash": "5ba561160b690b0725c6d40956d2ee1deb97745adc418fc137e6774448295f66",
469
- "decision": "relabel",
470
- "gold": "tier3",
469
+ "decision": "accept",
470
+ "gold": "tier2",
471
471
  "reviewer": "human:repository-owner"
472
472
  },
473
473
  {
@@ -613,15 +613,15 @@
613
613
  {
614
614
  "id": "h-hash-algorithm-support-1",
615
615
  "promptHash": "f0da51303eeb3a54985a29bc91cc456438222a68d0632cab72b07edfb18a3795",
616
- "decision": "relabel",
617
- "gold": "tier3",
616
+ "decision": "accept",
617
+ "gold": "tier2",
618
618
  "reviewer": "human:repository-owner"
619
619
  },
620
620
  {
621
621
  "id": "h-hash-algorithm-support-2",
622
622
  "promptHash": "74b9af0f162bd5f25b8c7aa032120c4c6fd950fa0e4badfe65ede93adba251c6",
623
- "decision": "relabel",
624
- "gold": "tier3",
623
+ "decision": "accept",
624
+ "gold": "tier2",
625
625
  "reviewer": "human:repository-owner"
626
626
  },
627
627
  {
@@ -1579,8 +1579,8 @@
1579
1579
  {
1580
1580
  "id": "h-long-git-ops-1",
1581
1581
  "promptHash": "38d447c5f21ff104d786066a36ff1a76d11886c1a6361248e478cf953121a888",
1582
- "decision": "relabel",
1583
- "gold": "tier2",
1582
+ "decision": "accept",
1583
+ "gold": "tier1",
1584
1584
  "reviewer": "human:repository-owner"
1585
1585
  }
1586
1586
  ]
@@ -2005,7 +2005,7 @@
2005
2005
  "catalogHash": "b625bd9390f1d163f8fbace0b9c4768166bfc613aed04d87b2246b2c6e966d40",
2006
2006
  "requestHash": "f3cf716b74e5fe928f8047acda0267e8490cd69ff17db017eb47ca77cd35a4a4"
2007
2007
  },
2008
- "gold": "tier3"
2008
+ "gold": "tier2"
2009
2009
  },
2010
2010
  {
2011
2011
  "id": "h-fix-cli-error-log-4",
@@ -2039,7 +2039,7 @@
2039
2039
  "catalogHash": "b625bd9390f1d163f8fbace0b9c4768166bfc613aed04d87b2246b2c6e966d40",
2040
2040
  "requestHash": "fdd46662e02f8d3230b840fe089b4e4cb4a37aef1aa998f59e3ffaa4637093bc"
2041
2041
  },
2042
- "gold": "tier3"
2042
+ "gold": "tier2"
2043
2043
  },
2044
2044
  {
2045
2045
  "id": "h-fix-failing-test-1",
@@ -2141,7 +2141,7 @@
2141
2141
  "catalogHash": "b625bd9390f1d163f8fbace0b9c4768166bfc613aed04d87b2246b2c6e966d40",
2142
2142
  "requestHash": "dd3cf4d63ff04266de08e6235641a3e191a2485cb849a5dc3e44eeacfc7238a3"
2143
2143
  },
2144
- "gold": "tier3"
2144
+ "gold": "tier2"
2145
2145
  },
2146
2146
  {
2147
2147
  "id": "h-fix-failing-test-4",
@@ -2209,7 +2209,7 @@
2209
2209
  "catalogHash": "b625bd9390f1d163f8fbace0b9c4768166bfc613aed04d87b2246b2c6e966d40",
2210
2210
  "requestHash": "b9438ca5119663f987c91d4b851b71e1f0f9e15547e4405b752302116cfe2de1"
2211
2211
  },
2212
- "gold": "tier3"
2212
+ "gold": "tier2"
2213
2213
  },
2214
2214
  {
2215
2215
  "id": "h-add-cli-flag-2",
@@ -2243,7 +2243,7 @@
2243
2243
  "catalogHash": "b625bd9390f1d163f8fbace0b9c4768166bfc613aed04d87b2246b2c6e966d40",
2244
2244
  "requestHash": "89dc4acaee4ca2c8f070fe1eb7e8da8a11025f78d3cf9d8b15f14cc22af7538a"
2245
2245
  },
2246
- "gold": "tier3"
2246
+ "gold": "tier2"
2247
2247
  },
2248
2248
  {
2249
2249
  "id": "h-add-cli-flag-3",
@@ -2277,7 +2277,7 @@
2277
2277
  "catalogHash": "b625bd9390f1d163f8fbace0b9c4768166bfc613aed04d87b2246b2c6e966d40",
2278
2278
  "requestHash": "426171654d98fe77a50a5dced0053d3539595cbf28d23259e680fffbad603230"
2279
2279
  },
2280
- "gold": "tier3"
2280
+ "gold": "tier2"
2281
2281
  },
2282
2282
  {
2283
2283
  "id": "h-nondeterministic-output-1",
@@ -2991,7 +2991,7 @@
2991
2991
  "catalogHash": "b625bd9390f1d163f8fbace0b9c4768166bfc613aed04d87b2246b2c6e966d40",
2992
2992
  "requestHash": "cb231efa719d2585111733df0da9907aa0d8b046d806a8f77a49a62c22e8bf5a"
2993
2993
  },
2994
- "gold": "tier3"
2994
+ "gold": "tier2"
2995
2995
  },
2996
2996
  {
2997
2997
  "id": "h-hash-algorithm-support-2",
@@ -3025,7 +3025,7 @@
3025
3025
  "catalogHash": "b625bd9390f1d163f8fbace0b9c4768166bfc613aed04d87b2246b2c6e966d40",
3026
3026
  "requestHash": "d6f57302ad014bf5dc923fffd50895568941dde27b4966d8bf9b428d7dc827fa"
3027
3027
  },
3028
- "gold": "tier3"
3028
+ "gold": "tier2"
3029
3029
  },
3030
3030
  {
3031
3031
  "id": "h-toolchain-check-1",
@@ -7309,7 +7309,7 @@
7309
7309
  "catalogHash": "b625bd9390f1d163f8fbace0b9c4768166bfc613aed04d87b2246b2c6e966d40",
7310
7310
  "requestHash": "d48c25217d11d4d8881768a373dc92125fef499d200ce49d9a0b7d461e13831f"
7311
7311
  },
7312
- "gold": "tier2"
7312
+ "gold": "tier1"
7313
7313
  }
7314
7314
  ]
7315
7315
  }
@@ -0,0 +1,75 @@
1
+ # System One: first harness-routing-v1 checkpoint (2026-09-24)
2
+
3
+ This is local real-checkpoint evidence for a candidate tier checkpoint trained on the owner's
4
+ own prompts, evaluated once on the owner-reviewed holdout. It is not live-host evidence.
5
+ Issue [#233](https://github.com/dyphn1/Harness-everything/issues/233); the pipeline is in
6
+ [system-one-training.md](../../../../docs/system-one-training.md). **Result: the checkpoint is
7
+ not released.**
8
+
9
+ ## Data and labels
10
+
11
+ The training data stays local and is not committed.
12
+
13
+ - **Prompts:** 5,625 from the owner's Claude Code, Codex (interactive only), Copilot CLI and
14
+ VS Code Copilot Chat histories. That is 1,401 session families, split 4,898 train / 727
15
+ validation, and 93% of the prompts are zh-TW.
16
+ - **Labels:** assigned under the refined rules (rules SHA-256 prefix `e153bd5ff747d6c9`).
17
+ - 3,300 by Claude Sonnet, which agreed with the holdout at 83.7%
18
+ ([check](../labeler-holdout-check-2026-09-24/report.json)). This run stopped when the
19
+ Claude session limit was reached.
20
+ - 2,325 by Codex `gpt-5.6-luna` in stateless per-batch calls, which agreed at 81.9%
21
+ ([check](../labeler-holdout-check-codex-2026-09-24/report.json)).
22
+ - **Rejected labeling run:** two long-running Codex lane sessions were rejected. One labeled
23
+ with a keyword regex, and the long sessions consumed most of the Codex budget.
24
+
25
+ ## Training (CPU, Intel Core Ultra 5 225H, 4 torch threads)
26
+
27
+ The model is a fresh `cua_s1` `tinyx` with width 128, 2 layers, 4 heads and `context_tokens` 1024. It was trained for 12 epochs at about 6 minutes each. The best validation NLL came at epoch 7:
28
+
29
+ | Validation | Value |
30
+ | --- | --- |
31
+ | NLL | 0.911 |
32
+ | Top-1 accuracy | 65.1% |
33
+
34
+ Checkpoint SHA-256 values: weights `d0744d894eb3…`, config `c9833f3791eb…`.
35
+
36
+ ## Calibration on validation (727)
37
+
38
+ | Min confidence | Coverage | Accepted precision |
39
+ | --- | --- | --- |
40
+ | 0.5 | 85.1% | 67.9% |
41
+ | 0.7 | 55.8% | 71.7% |
42
+ | 0.8 | 29.4% | 75.7% |
43
+ | 0.9 | 3.7% | 81.5% |
44
+ | 0.95 (chosen for ≥98%) | 0.1% | 100% (1 case) |
45
+
46
+ Precision never approaches 98% at useful coverage.
47
+
48
+ ## Holdout (215 owner-reviewed cases, one run)
49
+
50
+ [`report.json`](report.json) is the unmodified evaluator output. It was produced with the resident transport and the calibrated `acceptance` (0.95 / 0).
51
+
52
+ | Metric | Value |
53
+ | --- | --- |
54
+ | Accepted | 0 of 215; every decision is `low-confidence` |
55
+ | Raw top-1, ignoring thresholds | 35.3% |
56
+ | Raw macro-F1 | 0.255 (the lexical baseline is 0.254) |
57
+ | tier3 predicted correctly | 0 of 51 |
58
+ | Warm p95 | 59.8 ms (the `warmLatency` gate passes) |
59
+ | Repeatability | 1.0 |
60
+
61
+ **Gates.** The `reviewedHoldout`, `repeatability`, `warmLatency` and `sourceProvenance` gates pass. The `acceptedPrecision`, `coverage`, `macroF1`, `policyEvidence` and `liveHostEvidence` gates fail. `rolloutReady` is false.
62
+
63
+ ## Reading
64
+
65
+ - **Generalization gap.** Validation top-1 is 65%, which is in-distribution with the owner's
66
+ real session prompts. On the holdout it falls to 35%. The holdout consists of authored
67
+ prompts and de-identified rewrites with balanced classes.
68
+ - **Label skew.** The training labels are about 61% tier2. The model mostly predicts tier2 or
69
+ unclassified and never tier3.
70
+ - **Label noise.** The labels disagree with the owner's gold roughly 16–18% of the time, which
71
+ also caps accuracy.
72
+ - **Model capacity.** A 4-way byte-level scorer trained from scratch on about 5k noisy
73
+ examples does not reach the rollout gates. Better class balance, more tier3 and tier1
74
+ examples, or a pretrained multilingual encoder are the likely next levers. None of them is
75
+ measured yet.