Commit Graph
2577 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
van3hardyandhaelyra b0cd531a3e fix(plugin): export only plugin function for opencode loader compatibility
opencode's legacy plugin loader (getLegacyPlugins) iterates every module
export and throws 'Plugin export is not a function' if any export is not
a plugin function. The bundle exported VERSION (string) and metadata
(object) alongside the plugin, breaking plugin loading. Export only the
plugin function so opencode can load ecc-universal.
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
1444239eec feat(install): add AdaL CLI install target
Following the hermes/openclaw (#2433) and kimi (#2441) adapter recipe.

What's included (adal-project adapter, project kind, ./.adal root, same
shape as kimi-project/joycode-project):
- scripts/lib/install-targets/adal-project.js — 10-line project-kind
  adapter targeting ./.adal
- Registry + helpers platform-ownership wiring
- adal target on the 5 shared modules (rules-core, agents-core,
  commands-core, platform-configs, workflow-quality) +
  SUPPORTED_INSTALL_TARGETS + legacy-compat module
- .adal in platform-configs paths
- Both schema enums (install-modules, ecc-install-config), npm files
  allowlist, installer help text, .adal/README.md stub

AdaL (adalagent.ai) is a terminal-based AI coding agent (by SylphAI)
built on AdalFlow, with native MCP support and project-scoped config
under ./.adal/ (skills, custom tools, memory) plus a root-level
AGENTS.md instructions file — matching the shape ECC already installs
into other AGENTS.md-based harnesses (Codex, OpenCode, Kimi).

Verified: full suite matches main's baseline (3334 passed, same
pre-existing failures unrelated to this change — OpenCode build/npm-pack
surface tests requiring build tooling not present in this sandbox);
catalog check passes (67 agents / 94 commands / 281 skills); dry-run
resolves Target: adal / Adapter: adal-project / root ./.adal with all 5
modules planned; doctor reports OK after a real install; uninstall
cleanly reverses all 458 operations.

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
haelyraandGitHub 3e5f889342 Merge pull request #2693 from andrest/fix/stale-model-rates-cost-estimate-and-skill
fix(lib): correct stale model rates in the shared cost estimator and skill
2026-08-28 23:59:59 -04:00
haelyraandGitHub 6d04e74e80 Merge pull request #2633 from Juanpacol/fix/harness-optimizer-eval-harness-reference
fix(agents): point harness-optimizer at eval-harness instead of missing skill
2026-08-28 23:37:13 -04:00
haelyraandGitHub c6ffd3e2d3 Merge pull request #2899 from haelyra/fix/plugin-bootstrap-prefix-classification
fix(hooks): classify platform-dependent raw prefixes
2026-08-28 23:14:10 -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 6544b2f7f8 fix(agents): require repeated harness eval trials 2026-08-28 21:26:42 -04:00
haelyraandGitHub 69874a5041 Merge pull request #2602 from ertug/security-guide-container-limits
docs: note container isolation limits, add Jailbox reference
2026-08-28 21:24:11 -04:00
haelyra 1c42fe785b docs(skills): retain distinct legacy model rates 2026-08-28 21:22:54 -04:00
haelyra 08024bbf50 docs(skills): refresh live Claude pricing rows
Keep the contributor's corrected Haiku and Fable/Mythos tiers, update the live Sonnet and Opus rows against the current official pricing contract, and mirror the same numeric changes in the Japanese and Chinese tables.
2026-08-28 21:13:16 -04:00
haelyra 558aecb9c9 Merge current main into PR #2693
Keep the duplicate estimator and its tests deleted as landed through #2866, while carrying the contributor's pricing-table correction forward and refreshing the documented live model rows against the current official pricing contract.
2026-08-28 21:13:01 -04:00
haelyra 3b5105816c docs: constrain sandbox egress guidance
Clarify the editor boundary, require deliberately bounded egress, qualify Jailbox as one verified reference pattern, and remove the duplicate AWS bulletin citation.
2026-08-28 21:11:06 -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
haelyraandGitHub 48f952ea3b Merge pull request #2866 from actus7/consolidate/cost-tracker-v3
fix(hooks): consolidate cost-tracker and pricing fixes (2 PRs)
2026-08-28 21:00:49 -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
haelyraandGitHub 96c4dc4a74 Merge pull request #2871 from actus7/consolidate/docs-v3
docs: consolidate documentation improvements (3 PRs)
2026-08-28 17:50:16 -04:00
haelyraandGitHub a3f0cc80d5 Merge pull request #2873 from actus7/consolidate/remaining-fixes-v3
fix: consolidate miscellaneous bug fixes (5 PRs)
2026-08-28 16:55:50 -04:00
haelyra e51224697d docs(costs): cite the pricing contract 2026-08-28 16:38:56 -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