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.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +33 -0
- package/behavioral-evals/README.md +39 -0
- package/behavioral-evals/case-validator.js +34 -0
- package/behavioral-evals/cases/baseline-worktree-submodule-reachability.yaml +30 -0
- package/behavioral-evals/fixtures/setup/fail.js +3 -0
- package/behavioral-evals/fixtures/setup/noop.js +4 -0
- package/behavioral-evals/fixtures/setup/verify-worktree-submodule.js +46 -0
- package/behavioral-evals/fixtures/setup/worktree-submodule.js +86 -0
- package/behavioral-evals/paired-benchmark.js +39 -5
- package/behavioral-evals/run-with-plugin.js +53 -39
- package/behavioral-evals/run.js +88 -9
- package/benchmarks/fixtures/system-one-holdout-reviews.json +18 -18
- package/benchmarks/fixtures/system-one-holdout.json +9 -9
- package/benchmarks/results/system-one/harness-routing-v1-cpu-2026-09-24/README.md +75 -0
- package/benchmarks/results/system-one/harness-routing-v1-cpu-2026-09-24/report.json +10832 -0
- package/benchmarks/results/system-one/harness-routing-v1-ngram-2026-09-24/README.md +72 -0
- package/benchmarks/results/system-one/harness-routing-v1-ngram-2026-09-24/report.json +10817 -0
- package/benchmarks/results/system-one/harness-routing-v3-ngram-2026-09-24/README.md +63 -0
- package/benchmarks/results/system-one/harness-routing-v3-ngram-2026-09-24/report.json +10817 -0
- package/benchmarks/results/system-one/labeler-holdout-check-2026-09-24/report.json +1104 -0
- package/benchmarks/results/system-one/labeler-holdout-check-codex-2026-09-24/report.json +1104 -0
- package/benchmarks/results/system-one/labeler-holdout-check-codex-tier3-2026-09-24/report.json +1104 -0
- package/ci/mechanism-2j-behavioral-runner.test.js +121 -1
- package/ci/mechanism-2j-fixture-entrypoints.test.js +153 -0
- package/ci/mechanism-system-one-evaluation.test.js +17 -0
- package/ci/mechanism-system-one-label.test.js +27 -0
- package/ci/mechanism-system-one-ngram.test.js +161 -0
- package/ci/mechanism-system-one-train.test.js +12 -0
- package/ci/system-one-ngram-parity.py +19 -0
- package/ci/system-one-train-test.py +6 -0
- package/ci/test-behavioral-case-validation.js +26 -0
- package/docs/system-one-corpus.md +31 -3
- package/docs/system-one-routing.md +84 -2
- package/docs/system-one-training.md +14 -2
- package/harness-everything/SKILL.md +1 -1
- package/harness-everything/scripts/system-one/evaluate.js +3 -2
- package/harness-everything/scripts/system-one/ngram.js +84 -0
- package/harness-everything/scripts/system-one/provider.js +15 -5
- package/opencode-plugin/plugin.json +1 -1
- package/package.json +1 -1
- package/plugins/harness-everything/.codex-plugin/plugin.json +1 -1
- package/plugins/harness-everything/plugin.json +1 -1
- package/plugins/harness-everything/skills/harness-everything/SKILL.md +1 -1
- package/plugins/harness-everything/skills/harness-everything/scripts/system-one/evaluate.js +3 -2
- package/plugins/harness-everything/skills/harness-everything/scripts/system-one/ngram.js +84 -0
- package/plugins/harness-everything/skills/harness-everything/scripts/system-one/provider.js +15 -5
- package/sbom.cdx.json +7 -7
- package/scripts/evaluate-system-one.js +16 -9
- package/scripts/system-one-calibrate.js +1 -1
- package/scripts/system-one-label.js +32 -3
- package/scripts/system-one-train-ngram.py +129 -0
- package/scripts/system-one-train.py +14 -1
package/behavioral-evals/run.js
CHANGED
|
@@ -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
|
|
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
|
|
689
|
-
|
|
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
|
|
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'))
|
|
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 =
|
|
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": "
|
|
414
|
-
"gold": "
|
|
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": "
|
|
421
|
-
"gold": "
|
|
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": "
|
|
442
|
-
"gold": "
|
|
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": "
|
|
456
|
-
"gold": "
|
|
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": "
|
|
463
|
-
"gold": "
|
|
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": "
|
|
470
|
-
"gold": "
|
|
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": "
|
|
617
|
-
"gold": "
|
|
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": "
|
|
624
|
-
"gold": "
|
|
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": "
|
|
1583
|
-
"gold": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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.
|