Commit Graph
3921 Commits
Author SHA1 Message Date
haelyra b71b832bf0 fix: reject malformed classifier values before reporting 2026-10-11 16:42:17 -04:00
haelyra ba8595b43f test: annotate classifier controls and bind canonical resources 2026-10-11 16:35:54 -04:00
haelyra f6fe47de27 merge: preserve latest contributor CSV grading repair 2026-10-11 16:22:18 -04:00
haelyra ae4bc283ae fix: preserve classifier parse failures through compliance grading 2026-10-11 16:02:31 -04:00
haelyra 1aed82de24 fix: refresh trigger registry binding after evaluator repair 2026-10-11 15:49:18 -04:00
haelyra 3515db6aad fix: preserve evaluator input and audit contracts across platforms 2026-10-11 15:39:40 -04:00
haelyra 1d1b62e58e fix: recover plugin migration at the effective settings scope 2026-10-11 15:36:49 -04:00
haelyra 6c9c25158a fix: address evaluator portability and recording review findings 2026-10-11 15:35:17 -04:00
drakeo338 7b34638500 fix: raise on unparseable skill-comply classifier output
_parse_classification returned {} for garbage or non-dict output, so a failed classification looked like zero matched steps and graded as non-compliant. Raise ClassifierParseError (a RuntimeError, like the non-zero-rc path) instead.
2026-10-11 19:21:15 +00:00
haelyra 87c136fcae fix: integrate strict issue targeting and Windows Python discovery 2026-10-11 15:07:29 -04:00
haelyra d60c90708c test: exercise real Python discovery failure controls 2026-10-11 15:05:36 -04:00
haelyra 03f9a59bc7 test: separate stdin fixture startup budget from drain deadline 2026-10-11 15:04:53 -04:00
haelyra acc453d357 Merge remote-tracking branch 'origin/pr-3524' into steward/late-arrivals-20261011 2026-10-11 15:00:38 -04:00
haelyra c7a467061b Merge remote-tracking branch 'origin/pr-3523' into steward/late-arrivals-20261011 2026-10-11 15:00:38 -04:00
haelyraandGitHub d4a44ded8c Merge pull request #3511 from affaan-m/integration/ecc-043-incoming-20261011
fix: integrate nine focused skill, instinct and documentation repairs
2026-10-11 14:37:53 -04:00
montjeffrey 72f2105cf6 test: run the Hermes hook tests with a resolved Python 3 on Windows
- windows-test-env.js gains resolvePython: it probes each candidate with
  `-c "import sys; sys.exit(0 if sys.version_info[0] == 3 else 1)"`, so the
  Store stub is rejected.
- hermes-hooks.test.js launches its four hook spawns through the resolved
  interpreter, falling back to python3 when none is found so a machine
  without Python still fails loudly instead of skipping.

hermes-hooks goes from 0/14 to 14/14 on Windows 11; the other users of the
helper are unchanged. Product code is untouched: Hermes runs these hooks
itself and the installer writes no interpreter.
2026-10-11 14:21:25 -04:00
montjeffrey e9efbc2626 test: pin a Python resolver that skips the Windows Store python3 stub
tests/hermes-hooks.test.js spawns python3, which on Windows is usually the
Microsoft Store alias stub: it exits 9009 instead of running Python, so all
14 Hermes cases fail with "hook must always exit 0 (got 9009)". python.org
installs provide python and the py launcher, not python3.

Pin resolvePython({ platform, probe }) in the shared windows-test-env
helper: the first candidate that actually runs Python 3 (Windows: python,
py -3, python3; elsewhere: python3, python), or null when none does, plus a
real smoke run of the resolved interpreter.

Against main: 4 of 8 windows-test-env cases fail (no resolvePython).
2026-10-11 14:21:24 -04:00
haelyra 1b7cf4e417 test: align alias failure bounds with reviewed Windows writer retry policy 2026-10-11 14:18:52 -04:00
montjeffrey 58f7021a64 fix(gateguard): fix the CSV grader's expected values before the export runs
Snapshot the header and expected rows when the grader loads and pass
exportCsv copies, so an exporter that overwrites its input cannot change
what it is compared with. decoy-mutates now scores 0.75 with the other
two decoys; reference still scores 1.
2026-10-11 14:14:13 -04:00
montjeffrey deb5d0a1d0 test(gateguard): pin a CSV decoy that overwrites its input rows
The CSV grader reads its expected values from the same ROWS objects it
passes to exportCsv, so an exporter that overwrites the input fields and
exports them scores 1 (Greptile on #3519). decoy-mutates does exactly
that; graderIsSound reports the grader unsound on this head
(decoy-mutates=1). The grader-soundness test now prints every decoy
score through formatGraderScores.
2026-10-11 14:14:13 -04:00
haelyra 2187cdb49f test: carry bounded native eval CLI startup checks into follow-up batch 2026-10-11 13:50:05 -04:00
haelyra a4d9297da1 fix: allow bounded sustained Windows atomic replacement contention 2026-10-11 13:47:57 -04:00
haelyra ee77b3a930 test: allow bounded CLI startup on loaded runners 2026-10-11 13:45:04 -04:00
akushonkamen 3cf0e709d5 fix(github-coordination): reject malformed issue numbers instead of truncating them
normalizeIssueNumber parsed with Number.parseInt, which stops at the
first non-digit ("42oops" -> 42, "42.9" -> 42, "4e2" -> 4) and loses
precision past 2^53 (9007199254740993 became 9007199254740992). The CLI
shares this helper for --issue, --limit, and the positional issue number,
so malformed values silently targeted the wrong issue before any integer
guard downstream could notice.

Validate the entire trimmed decimal token and require
Number.isSafeInteger so malformed or out-of-range values throw
"Invalid issue number" during argument parsing, before the state store
is opened or GitHub is contacted. Whitespace, leading plus, and leading
zero tolerance is preserved. Regression coverage added at both the
library level (tests/lib/github-coordination-gh-api.test.js) and the CLI
argument parser (tests/scripts/github-coordination.test.js).

Fixes #3514
2026-10-12 01:25:09 +08:00
haelyra 6b3873f4c2 test: preserve phase-specific snapshot failure controls in follow-up batch 2026-10-11 13:03:18 -04:00
haelyra 0908bd3148 test: distinguish snapshot probe and publication faults 2026-10-11 12:59:14 -04:00
haelyra 0d4fd902ca fix: carry verified storage capability and deterministic Canvas checks 2026-10-11 12:49:24 -04:00
haelyra 33372e9970 test: make presence expiry controls deterministic 2026-10-11 12:45:43 -04:00
haelyra bded8387eb fix: preflight and document snapshot storage capability 2026-10-11 12:34:15 -04:00
haelyra 99ee8a8818 fix: carry reviewed staging and plugin-root input guards into follow-up batch 2026-10-11 12:09:35 -04:00
haelyra 1ec5b328c6 fix: normalize root overrides and report unverified snapshot staging 2026-10-11 12:05:00 -04:00
haelyra 32e0a10023 fix: preserve reviewed recovery and command-discovery repairs in follow-up batch 2026-10-11 11:50:21 -04:00
haelyra 3fa6e30502 fix: preserve rollback version state and bounded runtime workflows 2026-10-11 11:45:41 -04:00
haelyra 0658c88710 test: use static module and JSON input for CSV grader controls 2026-10-11 11:43:32 -04:00
haelyra 1abc625de9 fix: integrate six focused workflow repairs with canonical registry identity 2026-10-11 11:19:21 -04:00
haelyra 48f88b817d fix: preserve ordinary rollback failure repairs in next PR cohort 2026-10-11 11:16:08 -04:00
haelyra ce54cef0e4 test: verify rollback preservation across filesystem error codes 2026-10-11 11:15:16 -04:00
haelyra a668d06f30 fix: publish rollback target snapshot before replacing live skill 2026-10-11 11:14:44 -04:00
haelyra c4b8325945 fix: prepare six focused ECC reliability repairs
Preserve complete source ancestry for PRs #3512, #3513, #3515, #3516, #3517 and #3518. Repair bounded recovery, alias compatibility and evaluator packaging gaps while keeping registry reuse inside the canonical loader. Verified actual hook, setup, dashboard, evaluator, sandbox and profile workflows plus full npm, Python, lint and supply-chain checks. ECC-043 preparation only; integration remains with the delivery owner.
2026-10-11 11:10:53 -04:00
haelyra 344c1fc3fa fix: integrate truthful GateGuard harness grading and retry evidence 2026-10-11 11:06:13 -04:00
haelyra 4e337f0a43 fix: integrate contributor snapshot allocation revision 2026-10-11 10:48:41 -04:00
montjeffrey 8e99eaa4e3 perf(context): load the registry once per resolution and routing index build
compileContextProfile now validates its options, loads the registry and
calls compileContextPlan(registry, options), which compiles against a
registry the caller loaded in the same call. resolveTaskContext and
routingEntries load the registry once and compile from it, so the sources
are hashed once per call instead of twice.

On this repository (full@1, Windows 11, median of 5):
resolveTaskContext 1332 ms -> 645 ms, routingEntries 1321 ms -> 721 ms.

The registry never comes from outside the call: nothing caches it or
accepts one from a caller, so a stale or forged registry cannot be passed
in. The two "Registry changed during ..." checks compared the two loads and
are gone with the second load; each call now works from one snapshot, and
skill bytes are still verified against it when read. compileContextProfile
keeps its signature, output and error order.

Split out of #2945, whose prompt hook is superseded by #3453.
2026-10-11 10:33:21 -04:00
montjeffrey 626ea56291 test(context): pin one registry load per resolution and routing index build
resolveTaskContext and routingEntries each compile a plan, which loads and
hashes the whole registry, then load and hash it again for their own use.
Opening one skill's policy file counts the loads: three opens per call on
main (two registry hashes plus the admission read), where one load gives two.

- New: resolution and the routing index hash the registry sources once per
  call (resolveTaskContext and routingEntries each open the policy twice).
- The policy-drift test injects its change on the open after the registry
  is hashed. With one load that is the second open, not the third; its
  assertion that the drift is rejected is unchanged.

Against main: 3 failures in tests/lib/context-selection.test.js.
2026-10-11 10:33:21 -04:00
Eneko Ruiz 6d8e69df52 fix: skip occupied snapshot paths without overflowing 2026-10-11 16:29:15 +02:00
haelyra 4ce5ae0119 fix: preserve search scope and installed cache discovery 2026-10-11 10:25:44 -04:00
Eneko Ruiz c76d0e173a fix: reject the shared base as a scenario sandbox 2026-10-11 16:23:26 +02:00
montjeffrey 6a7996aa70 fix(gateguard): make harness graders check content and count only valid trials
- csv-export-delimiter's grader adds a fourth check: the data rows are
  the exported values, with an optional header (the hidden intent says a
  header is fine either way). Reference scores 1; both decoys 0.75.
- graderIsSound grades every decoy-* overlay and is sound only when each
  scores below 1; --check-graders and the pre-billing check print the
  decoy scores through formatGraderScores.
- isValidTrial and completedTrialKeys move to lib.js; coverage.js and
  run-intent.js use them from there.
- run.js resumes with completedTrialKeys, so a provider-error or timed-out
  key is retried, and writes one transcript per attempt
  (<key>__<attemptId>.jsonl, recorded on the row) so a retry never
  overwrites the failed attempt's record.
- armSummary computes trials, passes and means over valid rows and counts
  the failed attempts apart as providerErrors.

Docs: question-effectiveness.md states the decoy rule and that a
csv-export-delimiter pass in the reported runs reflects the dialect only;
its Measures section and the harness README describe retries, per-attempt
transcripts and the hookless-trial stop.
2026-10-11 10:00:47 -04:00
montjeffrey 64d155ae1d test(gateguard): pin grader decoys, pilot retries and the hookless-trial abort
Three #3481 review findings still hold on main 8ce348fb:

- csv-export-delimiter's grader checks only the dialect (CRLF, semicolons,
  quoting), so a constant '"x";"y"' export or one emitting the column
  names scores 1. Add decoy-constant and decoy-keys overlays and pin that
  each scores below 1 and that graderIsSound reports them; a scenario whose
  decoy passes is not sound.
- The pilot runner (run.js) marks errored keys done, so they are never
  retried, and armSummary counts provider-error and timed-out rows in
  trials, passes and means. Pin the summary on valid rows only, and drive
  run.js end to end: a provider error is retried on resume, keeps its own
  row and transcript, and the summary reports it apart.
- Disabling run-intent.js's abort on an unobserved hook left every test
  passing. Drive both runners end to end with a gated trial whose hook
  never runs: each must stop and record nothing for it.

fake-claude.js gains FAKE_CLAUDE_SKIP_HOOK and FAKE_CLAUDE_PROVIDER_ERROR.
The intent end-to-end setup moves into syntheticIntentRunner, shared with
the existing resume test.

Against main: 2 intent failures (the decoy cases) and 2 pilot failures
(summary, retry). The two abort tests pass on main, since both aborts
exist; each fails when its runner's abort is disabled
(if (false && !row.hookObserved)).
2026-10-11 10:00:47 -04:00
haelyra 6d0b8d4dcb test: bind ledger failure snapshots to file descriptors 2026-10-11 09:57:27 -04:00
haelyra a73e04cc6d fix: recover failed ledger batches and preserve project state 2026-10-11 09:42:05 -04:00