Commit Graph
942 Commits
Author SHA1 Message Date
Souptik Chakrabortyandhaelyra 4377ea1753 docs(gateguard): document the graduated gate controls
GateGuard reads five GATEGUARD_* environment variables that were absent
from skills/gateguard/SKILL.md, so the only discoverable escape hatch was
ECC_GATEGUARD=off - disabling the load-bearing destructive-Bash gate
along with the noisy ones (#2573).

Documented, with defaults and exact accepted values read from the hook:

- GATEGUARD_BASH_ROUTINE_DISABLED (was undocumented everywhere)
- GATEGUARD_EXEMPT_GLOBS (previously only in a 2.1.0 release note)
- GATEGUARD_BASH_EXTRA_DESTRUCTIVE (was undocumented)
- GATEGUARD_DISABLED (was undocumented)
- GATEGUARD_STATE_DIR (was undocumented; named in a runtime warning)
- GATEGUARD_FACT_FORCE_FULL_DENIALS (already documented; folded into the
  same table for one lookup point)

Adds tests/ci/gateguard-env-documented.test.js, which asserts every
GATEGUARD_* variable the hook reads appears in the skill doc, and that the
doc names no variable the hook has stopped reading. That surface test is
what found the three knobs beyond the two the issue reported.

Docs and test only; no hook behaviour changes.

Refs #2573
2026-08-29 14:55:13 -04:00
haelyra 2f8a5a271d test: cover inferred-window hook output 2026-08-29 14:55:13 -04:00
Tanelandhaelyra ecdd517765 fix(suggest-compact): don't quote a percentage against an assumed window
The context signal always rendered "N% of <window> window", including when
the window size was the assumed 200k default rather than a detected value.
On a 1M session whose transcript carries no [1m] marker, that produced
lines like:

  [StrategicCompact] Context ~194k tokens (97% of 200k window)

while actual usage was ~19%. The user compacts on a false alarm, loses
context, and the resulting quality drop reads as a model regression.

The gap is structural: the context threshold defaults to 80% of the
window (160k on 200k), so the signal fires precisely in the 160k-200k
band where the size cannot be determined — above 200k the observed-tokens
fallback correctly infers 1M, and below 160k nothing fires.

Model id alone cannot close this. A tier may ship both a 200k and a 1M
variant under one id, so neither the known-family table nor a new entry
can distinguish them, and the transcript records no window field.

So stop asserting what isn't known: resolveContextWindow() now reports
whether the size was detected (env override, [1m] marker, known family,
or observed tokens > 200k) or assumed, and the hook omits the percentage
and window label when it was assumed. The token count, threshold, and
firing behaviour are unchanged.

resolveContextWindowTokens() keeps its existing signature and semantics.

Note: 3 pre-existing failures in tests/hooks/suggest-compact.test.js
reproduce identically on unmodified main and are untouched here.
2026-08-29 14:55:13 -04:00
haelyra e82e477034 test(pack): tolerate slow Windows extraction 2026-08-29 14:53:54 -04:00
haelyra 4c7e965209 fix(gan): distinguish scores from verdict thresholds 2026-08-29 14:24:16 -04:00
van3hardyandhaelyra b2a8091440 test(opencode): guard plugin.tool existence before shape assertion 2026-08-29 13:40:57 -04:00
van3hardyandhaelyra e72f1e6824 test(opencode): assert init does not call shell and root plugin tools 2026-08-29 13:40:56 -04:00
van3hardyandhaelyra f932e63b0a test(opencode): assert built entry is a working plugin, not just an export shape 2026-08-29 13:40:56 -04:00
van3hardyandhaelyra f0684fda32 test(opencode): assert built entry exports only the plugin function 2026-08-29 13:40:56 -04:00
曹博淳andhaelyra fcef85cb87 test: skip GAN shell checks on Windows 2026-08-29 13:40:56 -04:00
haelyra cce8f60206 test(gan): use portable Bash lookup on Windows 2026-08-29 13:40:56 -04:00
CaoBochunandhaelyra 91e846dfe2 test: execute final GAN score selection 2026-08-29 13:40:56 -04:00
CaoBochunandhaelyra 8a396ef542 test: strengthen GAN harness assertions 2026-08-29 13:40:56 -04:00
CaoBochunandhaelyra 37e9683161 test: address GAN harness review feedback 2026-08-29 13:40:56 -04:00
CaoBochunandhaelyra 70eb0f68ae fix: make GAN harness score parsing portable 2026-08-29 13:40:56 -04:00
haelyra 73c29bbd08 fix(install): register AdaL capability metadata 2026-08-29 13:40:56 -04:00
1e7493595c fix(adal): correct README install paths and add adapter regression tests
Address CodeRabbit review feedback on PR #2607:
- Fix .adal/README.md to document actual install paths (rules/, skills/)
  instead of the incorrect namespaced rules/ecc/, skills/ecc/ paths.
- Add regression tests for the adal-project install target adapter:
  root/install-state path resolution, dual id/target registry lookup,
  native .adal root sync-root-children behavior, and foreign platform
  path filtering.

Co-Authored-By: AdaL <adal@sylph.ai>
2026-08-29 13:40:56 -04:00
benno0oandhaelyra 7c2bc54be2 test: verify Corepack uses the pinned pnpm version 2026-08-29 13:40:56 -04:00
benno0oandhaelyra b48f22f08c fix: address pre-push pnpm review findings 2026-08-29 13:40:53 -04:00
benno0oandhaelyra 03b441792e fix: resolve pnpm in Git Bash pre-push hook 2026-08-29 13:40:53 -04:00
haelyraandGitHub 656d4b5746 Merge pull request #2869 from actus7/consolidate/mcp-health-v3
fix(hooks): consolidate MCP health-check fixes (3 PRs)
2026-08-29 00:22:27 -04:00
haelyra 303f50c57e test(hooks): construct mismatch prefix immutably 2026-08-28 22:43:28 -04:00
haelyra b2ab65d0fb fix(hooks): classify platform-dependent raw prefixes 2026-08-28 22:35:23 -04:00
haelyraandGitHub d5ebac49b1 Merge pull request #2380 from chs0813/fix/plugin-hook-bootstrap-no-echo
fix(hooks): do not echo raw input from plugin-hook-bootstrap.js
2026-08-28 22:24:24 -04:00
haelyraandGitHub 9ff6949798 Merge pull request #2351 from vladyslavTezyk/main
Add ukranian translation of the main Readme.
2026-08-28 21:59:45 -04:00
haelyra 13c476965f fix(hooks): keep MCP reachability probes bounded
Remove the redundant JSON-RPC initialize fallback from the consolidated MCP health-check batch. A routed 404 already proves the endpoint is reachable, and the real authenticated MCP call remains authoritative. Avoiding the fallback also prevents a stalled GET plus stalled POST from consuming twice the configured hook timeout.
2026-08-28 21:09:35 -04:00
haelyra 3702a617db Merge remote-tracking branch 'origin/main' into maint/pr-2866-current 2026-08-28 18:29:35 -04:00
haelyraandGitHub 2aebdd3408 Merge pull request #2870 from actus7/consolidate/hooks-observer-v3
fix(hooks): consolidate hooks and observer fixes (5 PRs)
2026-08-28 18:29:03 -04:00
haelyra 1d19789c75 fix(hooks): preserve metadata-marked human prompts 2026-08-28 16:28:12 -04:00
haelyra 77c358dd3f fix(costs): retain dated Opus 4 legacy pricing 2026-08-28 16:26:13 -04:00
haelyra 70f42102fc test(evolve): support Windows line endings 2026-08-28 16:25:30 -04:00
Santhi Prakashandhaelyra 64f0acf60e test: split Sonnet model pricing cases 2026-08-28 16:23:25 -04:00
Santhi Prakashandhaelyra ab8cbf6505 test: cover Sonnet 5 cache rate splits 2026-08-28 16:23:25 -04:00
Santhi Prakashandhaelyra 616716f370 test: isolate cost tracker cache fixtures 2026-08-28 16:23:25 -04:00
5ee14cb2af test(hooks): use unique session IDs in Sonnet 5 pricing tests
Prevent stale /tmp/harness-cost cache files from affecting Sonnet 5, dated,
near-miss, and cache-rate pricing tests by using Date.now() in each session ID.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-08-28 16:23:25 -04:00
f5d0b295cb test(hooks): expand Sonnet 5 cost-tracker coverage for cache and model matching
- Add cache write/read token pricing test for Sonnet 5.
- Add dated Sonnet 5 ID and claude-sonnet-50 near-miss regression tests.
- Keep Sonnet 4.6 standard rate distinction intact.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-08-28 16:23:25 -04:00
haelyra 950caaaae1 fix(hooks): preserve short sessions and quote evolved metadata 2026-08-28 16:08:19 -04:00
haelyra b7d6c61b1e Merge remote-tracking branch 'origin/main' into maint/pr-2870-current 2026-08-28 16:03:10 -04:00
haelyra 1953a749a2 Merge remote-tracking branch 'origin/main' into maint/pr-2873-current 2026-08-28 15:59:31 -04:00
Aditya Dattaandhaelyra cb9dfabcf0 test: pin Ollama whitespace normalization 2026-08-28 15:59:31 -04:00
haelyra 51982fdab1 test(opencode): verify recovery through descriptors 2026-08-25 17:27:26 -04:00
haelyra aaaff77ef9 test(opencode): avoid path race in recovery fixture 2026-08-25 17:23:24 -04:00
haelyra 204cc2d2a3 fix(release): stage ECC 2.2 launch safely 2026-08-25 17:19:45 -04:00
haelyra d6d0c4e696 test(nasiko): isolate malformed lock fixture 2026-08-25 13:52:19 -04:00
haelyra e10c4bb5bf fix(nasiko): use descriptor lock identity 2026-08-25 13:49:26 -04:00
haelyra 307bbd53a6 fix(nasiko): harden lifecycle recovery 2026-08-25 13:34:58 -04:00
haelyra d66eaf116f test(opencode): canonicalize Windows path expectations 2026-08-25 12:55:02 -04:00
haelyra 5aa660219e test(opencode): isolate environment regression processes 2026-08-25 12:37:39 -04:00
haelyra 856733263c test(opencode): cover legacy upgrade edge cases 2026-08-25 12:28:23 -04:00
haelyra 2331afbfd3 test(opencode): reproduce ambient config leakage 2026-08-25 12:14:58 -04:00