Skip to content

Release v2.13.0

Choose a tag to compare

@github-actions github-actions released this 05 Aug 16:31
· 12 commits to main since this release
feat: reliability and security hardening, v2.8.0 through v2.13.0

Implements roadmap tasks 052-057, completing the Phase 11 hardening pillars
(task 051 shipped separately as v2.7.0). Squashed into one commit: the original
per-release history carried a Stripe-shaped test fixture that GitHub push
protection correctly refused, and it appeared in every commit of the chain.

v2.8.0 — Response-path secret redaction (task 052)
  redactSecrets runs in callTool on the final payload, before it splits into
  content[0].text and structuredContent, so both channels and tool error
  messages are covered by construction rather than by parallel code paths.
  Exact-match on credentials this process holds, plus shape-match on
  issuer-prefixed formats, PEM blocks, Authorization headers, and secret-named
  assignments. Generic entropy detection was deliberately rejected: this server
  returns git SHAs and sha256: content hashes as normal output, and an entropy
  rule would redact them and corrupt results.

v2.9.0 — Transport hardening for the model hop (task 053)
  Protected per-provider tls_verify, set in the process environment so editable
  preferences cannot weaken it. When enabled, plain HTTP to a non-loopback host
  and NODE_TLS_REJECT_UNAUTHORIZED=0 are refused at adapter construction, so the
  failure surfaces at startup. Fixes a real bug: both adapters discarded the
  transport error and raised a *retryable* endpoint_unreachable, so a rejected
  certificate was retried as though it were a transient blip.

v2.10.0 — Release-qualification gates (task 054)
  npm run release:gates reports each gate as met, unmet, or unverifiable and
  exits non-zero unless all are met; "unverifiable" is a distinct outcome so a
  missing artifact never reads as a pass. npm run release:scenarios drives the
  official fixtures through real harnesses and refuses to fabricate a run. The
  external gates stay operator-only and the task's boxes are left unchecked.

v2.11.0 — Fault-injection test suite (task 055)
  An in-test responder that dies mid-body, truncates SSE, returns HTML error
  pages, answers slowly, or returns empty bodies. Covers transport, stream, and
  capacity-state faults, asserting typed errors and zero residual capacity
  however a task settled.

v2.12.0 — Error-rate observability (task 056, ADR-0015)
  get_offload_stats gains failure, retry, and breaker metrics with live
  per-provider state. Fixes a pre-existing defect in task 032: raw events are
  pruned after seven days and record() prunes on every write, so the advertised
  monthly and lifetime windows could never hold anything older than a week. The
  existing test passed only because the old event happened to be written last.
  Windows now come from a durable daily rollup holding counters alone.

v2.13.0 — Large-monorepo degradation (task 057)
  index_max_files (25,000) and index_max_bytes (512 MiB) bound indexing, which
  stops at the ceiling and reports the shortfall instead of walking an unbounded
  tree. search_semantic attaches an index_limitation so a caller can tell "not
  indexed" from "no match".

Also corrects the stale "Planned" status on task 043, which shipped in v2.2.0.

Credential fixtures are assembled from parts at run time so no scanner-matching
literal exists in source. npm run validate green: 553 tests.