@agentskit/harness 0.12.0 → 0.13.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/CHANGELOG.md CHANGED
@@ -1,5 +1,42 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.13.0] - 2026-09-14
4
+
5
+ A full-codebase test-coverage sweep (every module in `src/kernel/`, `src/execution/`, `src/adapters/`, and most of
6
+ `src/loop/` brought to 90%+ statements/branches) that surfaced eight real bugs along the way, each fixed in its own
7
+ focused PR rather than folded silently into a test change.
8
+
9
+ - **Per-issue state files are now written atomically**: `dispatch.json`, `delivery.json`, and `contract.json` were
10
+ each written with a plain `writeFileSync` straight to the final path. `tick` and `deliver` run as separate
11
+ scheduled processes against the same state directory, and `readDeliveryState` already treats malformed JSON as
12
+ "no state yet" rather than erroring — so a crash mid-write or a read racing a write could silently reset
13
+ `fixRounds`/`nudges`/`finalOutcome` instead of surfacing the corruption. Consolidated the three duplicated unsafe
14
+ writes into one shared `src/loop/fs-atomic.ts` (temp file + atomic rename).
15
+ - **`events.ndjson` rotation is now serialized**: `appendLoopEvent`'s size-based rotation (`statSync` →
16
+ `renameSync` → `appendFileSync`) had no lock, so two scheduled processes rotating the same file near-
17
+ simultaneously could overwrite one process's archive or drop events. Only the rotation decision is now gated
18
+ behind a lock file; a busy lock skips rotation for that call rather than racing it, and a lock older than 5s is
19
+ treated as an abandoned crash artifact and cleared.
20
+ - **PII scanner recognizes current-format secrets**: added `sk-proj-...` (current OpenAI project keys), fine-
21
+ grained GitHub PATs, Google API keys, Stripe live keys, PEM private-key blocks, and the AWS secret-access-key
22
+ half (previously only the `AKIA` access-key id was matched).
23
+ - **`Ctrl-C` now actually stops `loop watch`**: its SIGINT handler only set `process.exitCode` without calling
24
+ `process.exit()`, so the long-running poll loop (and its `gh`/`orca` shell-outs) kept running in the background
25
+ after a cancelled watch.
26
+ - **Raw throws reclassified as `HarnessError`**: `retro.ts`'s `--since` parsing and `doc-bridge.ts`'s index
27
+ freshness/readability checks threw plain `Error`, so these bad-input/bad-state failures fell through the CLI's
28
+ generic exit-1 catch-all instead of the classified exit-code path every other validation failure uses.
29
+ - **Fixed two `execution/agent.ts` session-recorder bugs**: a dead `executing` Set that could never affect
30
+ control flow (removed), and a structurally-invalid-but-non-throwing runtime result that was being swallowed into
31
+ a generic, retryable `RUNTIME_ERROR` instead of surfacing as its own distinct failure.
32
+ - **`findExecutable` now checks the execute bit**: a non-executable regular file sitting on `PATH` with a matching
33
+ name was reported as a runnable binary, only to fail with `EACCES` at actual spawn time.
34
+ - **`loop debrief --issue X` no longer returns an empty report** for a normal, not-yet-dispatched issue: the
35
+ "always include an explicitly requested issue" fast path was shadowed by an unconditional second skip check
36
+ right after it.
37
+
38
+ Everything else in this release is test-only: no other production behavior changed.
39
+
3
40
  ## [0.12.0] - 2026-09-13
4
41
 
5
42
  Closes gaps found reusing Orca instead of reinventing it. Orchestration mutations (`run-create`, `task-create`,