Commit Graph
3943 Commits
Author SHA1 Message Date
Affaan Mustafa 9de131420b fix(ito-compute): complete device auth lifecycle (#2706) 2026-08-07 14:53:13 -04:00
Affaan Mustafa 4162cc1fc2 fix Data Atlas skill live read contract (#2707) 2026-08-07 14:51:06 -04:00
Affaan Mustafa f16a6ff2a6 fix: ship new Itô skills through install manifests (#2704)
* fix: ship new Ito skills through install manifests

* ci: audit shipped dependencies separately from tooling

* test(release): pass previous version to heading helper
2026-08-07 14:14:21 -04:00
Kierkegaarde e/conandAffaan Mustafa fd27a0ec9f Add ito-inference and ito-training skills (delegate to canonical Itô backend) (#2700)
Two ECC skills chaining off an ito-compute booking, per the Full-Stack Harness
Engineering Plan (2026-08-06):

- ito-inference: serve a model on booked GPUs via ecc ito serve (Layer 0.2).
- ito-training: run a staged, eval-gated training pipeline via ecc ito train
  (Layer 0.3).

Both match the existing ito-compute skill: origin ECC, delegate to the canonical
CLI/backend, implement no parallel serving/training stack, chain off a completed
booking, and never book, reserve, or spend. They report the missing capability
while the desk serve-on-booking / training-run backends are scaffolds.

Co-authored-by: Affaan Mustafa <affaan@itomarkets.com>
2026-08-07 12:46:06 -04:00
haelyraandClaude Fable 5 ac7812ab17 feat(docker): support codex oauth login in networked harness
codex login binds its callback server to container loopback, so the host
browser redirect to localhost:1455 is refused. Publish 127.0.0.1:1455 on
the opt-in networked service only and bridge it to loopback with a small
node relay. Document the flow, fresh-state retry, and token lifetime in
the hardened-harness skill.

Follow-up to #2625.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-06 22:37:22 -04:00
haelyraandClaude Fable 5 9aac8585ab fix(skills): default GAN harness models to sonnet (#2442) (#2695)
Completes the model re-tiering from #2442: the gan-planner, gan-generator,
and gan-evaluator agents were already re-pinned to sonnet, but the
gan-style-harness script and docs still defaulted GAN_PLANNER_MODEL,
GAN_GENERATOR_MODEL, and GAN_EVALUATOR_MODEL to opus. Align the script
defaults, skill docs (en/ja/zh), and example commands with the landed
agent tiers. Opus remains available via the existing env overrides.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-06 17:42:22 -04:00
haelyraandClaude Fable 5 52a3babd5d feat(skills): add secure terminal opener (#2650)
* test(skills): define terminal opener contract

* feat(skills): add secure terminal opener

* fix(skills): report detached terminal errors

* docs: sync terminal opener skill count

* fix(security): require explicit terminal launch

* test(skills): cover terminal opener review findings

* fix(skills): bound terminal launch waits

* test(skills): cover terminal fallback output

* fix(skills): report terminal mux fallback

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-06 17:24:34 -04:00
haelyraandClaude Opus 5 b3c679684b test(release): add executable missing-heading regression (#2685)
release.test.js only greps release.sh for one of the five
update_latest_release_heading call sites, and plugin-manifest.test.js
only checks the headings committed today. Neither executes the rewrite,
so a helper that silently no-ops on a missing heading would ship green.

Extract the embedded node program from release.sh and run it against
fixtures to pin the fail-closed contract: bump stable and prerelease
headings, leave the rest of the file untouched, and exit non-zero
without writing when no heading matches. Also pin all five call sites so
the docs/zh-CN/README.md regression cannot recur.

Runs standalone via node tests/scripts/release-heading.test.js.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 16:53:59 -04:00
haelyra d791457aca feat(docker): add hardened CLI test harness (#2625)
* feat(install): add hardened Docker test harness

* feat(docker): complete isolated CLI session lifecycle

* fix(docker): exercise packed public CLI offline

* fix(docker): close hardened harness review gaps

* test(docker): bound harness subprocesses
2026-08-06 16:52:39 -04:00
haelyraandClaude Fable 5 28e53a0bc1 feat(install): add guided multi-harness installer (#2649)
* feat(install): add guided Claude plugin setup

* fix: support Claude command shims on Windows

* feat: support safe Claude plugin scope migration

* fix(install): preserve interactive setup terminal

* fix(install): auto-migrate setup scope changes

* feat(install): add guided multi-harness installer

* fix(install): sync Yarn binary metadata

* fix(install): handle wizard EOF on Node 18

* ci: allow installer matrix tests to finish

* test(install): allow slower PowerShell delegation

* fix(install): harden guided provider reconciliation

* test(install): harden packaged and local compatibility

* chore: prepare guided installer release 2.2.0

* fix(install): report refreshed Codex marketplace state

* fix(install): verify managed content provenance

* test(install): allow empty Yarn smoke fixture

* test(install): invoke Windows package shims safely

* fix(install): close cross-platform release gaps

* fix(install): require trusted GitHub origins

* fix(install): preserve hook profile precedence

* refactor(install): centralize trusted GitHub origins

* ci: retrigger workflow run after merge of main

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-06 15:39:49 -04:00
Andres Tuul 39416e3cdd fix(lib): correct stale model rates in the shared cost estimator and skill
`scripts/lib/cost-estimate.js` carries a second, independent copy of the
rate table that `scripts/hooks/cost-tracker.js` had, with the same defect:
every `opus` model priced at $15/$75, which are Claude 3 Opus era rates.
Opus 4.5 and later bill at $5/$25, so every current-generation Opus
estimate was exactly 3x real spend. Two more errors in the same table:
`haiku` was $0.80/$4.00, which is Claude 3.5 Haiku rather than Haiku 4.5's
$1/$5; and Fable and Mythos had no bucket at all, so they fell through to
`sonnet` and were understated 3.3x.

Legacy buckets are added rather than overwriting, so correcting the current
generation does not reprice the old one. `opusLegacy` keeps $15/$75 for the
three models that really billed it (Claude 3 Opus, Opus 4.0, Opus 4.1) and
`haikuLegacy` keeps $0.80/$4.00 for Claude 3.5 Haiku. The matching regexes
are the ones already used by the cost tracker, so the two tables now agree
on which model is legacy. Opus 4.0's snapshot is `claude-opus-4-20250514`
with no minor segment, which is why the bare `opus-4-<date>` form is
matched separately: an `opus-4-0` substring alone misses it.

`skills/cost-aware-llm-pipeline/SKILL.md` and its zh-CN and ja-JP
translations published the same stale numbers as prose. The Relative Cost
column is derived from the rates, so it is corrected with them: against a
corrected Haiku 4.5 baseline the multiples are now exact, which is why the
approximation markers are dropped.

`RATE_TABLE` keeps its existing keys and shape, so the export stays
backward compatible.

Tests: the existing test pinned the stale values and was updated to pin the
correct ones. Coverage is added for each legacy spelling (alias, dated
snapshot, Vertex `@` form, Bedrock prefix), for the current Opus line, and
for the Fable and Mythos bucket.
2026-08-06 22:36:24 +03:00
Affaan Mustafa 623f2c020f Add bounded harness evaluation and rollback loop (#2686)
* feat(ecc2): add bounded harness evaluation loop

* fix(ecc2): preserve harness evidence and legacy IDs
2026-08-05 18:17:10 -04:00
haelyra f1fec0e539 feat: add retention feedback loop and honest support matrix (#2681)
* feat: add retention feedback loop

* test: retire obsolete README parity row guard

* fix: harden public feedback guidance

* fix: let feedback CLI output flush

* test: keep feedback help coverage focused
2026-08-04 21:42:25 -04:00
Peopleoftechandhaelyra 7a5757e6c0 fix(hooks): never format installed plugin and marketplace clones (#2667)
The Stop hook formats every JS/TS file edited during a response, grouped by the project root each file happens to sit in. That includes trees under .claude/plugins, which are third-party checkouts we only read.

Formatting them writes to code the user does not own. It also does real damage when a repo's committed code has drifted from its own formatter config: the rewrite is not a no-op but a wholesale reformat, so an unrelated bugfix ends up carrying hundreds of untouched lines. I hit this contributing to this repo — a 162-line fix arrived as a 478-line diff, most of it reformatted code the change never went near.

Skips both the user-level install root and a project-local one, mirroring the lookup in scripts/harness-audit.js. Paths are resolved before the prefix comparison, and a sibling such as .claude/plugins-backup does not match. The user own .claude config outside plugins is still formatted.

Adds 7 tests for the predicate, plus an end-to-end check that a clone file listed in the accumulator is left byte-identical. Suite 16 to 23.

Co-authored-by: haelyra <49814733+haelyra@users.noreply.github.com>
2026-08-04 17:14:37 -04:00
Peopleoftechandhaelyra a8c6da485d fix(hooks): catch the bypass short flag anywhere in a cluster (#2668)
isCommitNoVerifyShortFlag anchored on the first character, so it only recognised the flag when it led the cluster. Git clusters short options, which means git commit -an is -a plus the bypass flag and skips the hooks. -sn and -vn slip through the same way, while -na and -nm are caught — the difference is position, not intent.

Scanning now walks the cluster and stops at a value-taking option, since that option swallows the rest as its inline value. The n in -mn stays message text, and the existing -tn case keeps working.

Adds 4 tests: the three clustered forms that were escaping, plus -mn to pin the inline-value boundary. Verified the three fail against current main. Suite 25 to 29.

Co-authored-by: haelyra <49814733+haelyra@users.noreply.github.com>
2026-08-04 17:08:56 -04:00
f235549cb8 fix(install): exclude ECC skills from antigravity install target (#2680)
* fix: exclude ECC skills from antigravity install target

* test(install): cover antigravity skills exclusion

Two tests encoded the collision the parent commit fixes.

install-manifests used skills/example as its example of a supported
antigravity path; it now asserts skills are filtered and uses
commands/example for the positive case, so the test still proves
supported paths survive filtering.

install-apply asserted .agent/skills/tdd-workflow/SKILL.md exists. That
directory is antigravity's agent directory and already receives ECC
agents/, so the assertion was pinning ECC skills and ECC agents to the
same destination. Inverted, with the reason recorded inline.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Calum Reeves <reevesc88@users.noreply.github.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-04 16:57:27 -04:00
8a97868b5b fix(continuous-learning): /evolve never produces skill or agent candidates (#2664)
* fix(continuous-learning): cluster instincts by keyword overlap in /evolve

`cmd_evolve` grouped instincts by exact string equality of the whole
normalized trigger sentence. Triggers are free-form sentences, so every
instinct landed in its own bucket and `skill_candidates` was always empty.
`agent_candidates` is derived from `skill_candidates`, so agents never
generated either — `/evolve --generate` could only ever emit commands.

Measured on a 42-instinct project: 42 instincts produced 42 unique cluster
keys, largest cluster size 1.

Group on keyword overlap instead. Jaccard is the wrong metric here — trigger
keyword sets average ~7 words, so even clearly related pairs top out around
0.33 — so this uses the overlap coefficient (shared / smaller set) at 0.5,
plus a floor of 2 shared keywords so one incidental word cannot pull
unrelated instincts together. The same 42 instincts now yield 4 clusters.

Also unify the command/agent slug used by the preview and the writer. The
preview called `.replace('a ', '')`, which strips "a " anywhere in the
string, mangling "extracting data from Reddit" into
`/extracting-datfrom-R` while `--generate` wrote `extracting-data-from.md`.
Both paths now share `_evolved_command_name()` / `_evolved_agent_name()`.

Adds tests/scripts/instinct-cli-evolve.test.js, which fails on the previous
implementation (0 clusters instead of 1; preview name `extracting-datfrom-R`)
and covers the negative cases so unrelated triggers still stay apart.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* docs(continuous-learning): correct clustering metric name in docstring

The docstring said "Jaccard" while the implementation uses the overlap
coefficient, which is the point of the change.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(continuous-learning): generate every evolve candidate and cut slugs on word boundaries

_generate_evolved() wrote only skill_candidates[:5], workflow_instincts[:5]
and agent_candidates[:3]. On a project with 36 command candidates that meant
5 files and no warning, so the output read as complete while 86% of the
candidates were dropped.

Generation is now unbounded by default and takes a --limit N flag for callers
that want a cap. A cap that truncates says so:

  Note: writing 3 of 36 command candidates (--limit 3); 33 skipped.

The analysis preview keeps showing five per kind but now names the remainder
("... and 31 more command candidates not shown") instead of presenting a
sample as the whole set.

Slugs were also cut with a hard slice, which split words mid-token and
produced /investigating-comple, /learning-about-compl and
/researching-mechanis. _truncate_slug() retreats to the last separator that
fits, and keeps the full head when the cut already lands on one, so
"analyzing large text files" stays /analyzing-large-text rather than losing
a word. A first word longer than the limit still falls back to a hard cut
because no boundary is available.

Shorter slugs collide more easily, and a collision used to mean one file
silently overwriting another. _assign_unique_slugs() suffixes duplicates
(-2, -3) and is called by both the preview and the writer over the same
ordered list, so advertised names and written names cannot drift apart.

Skill directory naming moved to _evolved_skill_name(); it previously used its
own inline slug expression, so it was the one truncation the shared helper
did not cover.

Adds tests/scripts/instinct-cli-evolve-generate.test.js: 7 cases covering
word-boundary cuts, the separator-aligned cut, unbounded generation, --limit
reporting, collision dedup, preview remainder and preview/writer agreement.
Six of the seven fail against the previous implementation.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: haelyra <49814733+haelyra@users.noreply.github.com>
2026-08-04 16:57:24 -04:00
dependabot[bot]andhaelyra b2bc8dcd14 chore(deps): bump tar in the npm-security group across 1 directory (#2671)
Bumps the npm-security group with 1 update in the / directory: [tar](https://github.com/isaacs/node-tar).


Updates `tar` from 7.5.19 to 7.5.22
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v7.5.19...v7.5.22)

---
updated-dependencies:
- dependency-name: tar
  dependency-version: 7.5.22
  dependency-type: indirect
  dependency-group: npm-security
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: haelyra <49814733+haelyra@users.noreply.github.com>
2026-08-04 16:57:20 -04:00
Alexis D. 2665d48ae6 fix(deps): bump fast-uri to 3.1.5 and brace-expansion to 5.0.9 (#2672)
npm audit --audit-level=high fails CI on two new high-severity
advisories:

- fast-uri GHSA-7p8r-x3mc-p8w7 (host confusion via backslash
  authority introducer) — pinned at 3.1.4 via overrides/resolutions;
  bump pins to the patched 3.1.5 (still within ajv's ^3.0.1 range)
- brace-expansion GHSA-rgw5-rvv9-x895 (DoS via unbounded intermediate
  arrays) — in-range lockfile bump 5.0.8 -> 5.0.9 under minimatch

npm audit now reports 0 vulnerabilities. yarn.lock regenerated with
Yarn 4.9.2 to keep resolutions in sync.
2026-08-04 12:36:54 -04:00
t0kubetsu 5bf41136de Merge remote-tracking branch 'upstream/main' into feat/story-lifecycle-skill 2026-08-04 08:54:04 +02:00
Alexis D. ff15079b9f test(lib): extract shared mini test runner for coordination tests (#2663)
Address CodeRabbit review on #2311: dedupe the local test(name, fn)
harness and route all reporter output through a shared helper
(tests/lib/helpers/mini-test-runner.js) instead of direct console.log.
2026-08-04 00:29:31 -04:00
Karim Farahat 203aac7710 fix(commands): probe for auto-update.js in auto-update ECC_ROOT resolver (#2462)
The auto-update command's inline ECC_ROOT resolver delegates to
resolveEccRoot() with the default probe (scripts/lib/utils.js). A
hooks-runtime-only install copies scripts/lib/ into ~/.claude, so the
partial install satisfies the probe and shadows the full plugin root
under ~/.claude/plugins/marketplaces/. The command then fails with
MODULE_NOT_FOUND because ~/.claude/scripts/auto-update.js does not
exist.

Pass {probe: scripts/auto-update.js} so the resolver only accepts a
root that actually contains the script the command runs. Applied to
the command doc and its ja-JP/zh-CN translations, with regression
tests for both the resolver behavior and the embedded snippets.
2026-08-04 00:28:59 -04:00
Yowon JeongandClaude Opus 4.8 7b76082b13 fix(mcp): accept reserved _meta field in tools/call params (#2670)
* fix(mcp): accept reserved _meta field in tools/call params

The memory MCP server rejected any tools/call whose params contained a key
other than name/arguments, returning -32602 "Unknown or missing memory tool."

MCP clients (e.g. Claude Code) attach the spec-reserved `_meta` field
(such as progressToken) to request params, so every tool call from a
compliant client failed and the entire memory MCP surface was unreachable —
even though initialize/tools-list and the `ecc memory` CLI kept working.

Per the MCP base protocol, `_meta` is reserved for request metadata and
must be accepted. Add it to the params key allowlist.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(mcp): validate _meta shape and cover tools/call param allowlist

Address CodeRabbit review on #2670:
- Validate params._meta when present: accept metadata objects, reject null,
  arrays, and scalar values (reuses isRecord). Keeps _meta optional and
  preserves existing name/arguments/unexpected-key rejection.
- Add regression tests: accept _meta with progressToken, reject malformed
  _meta values, and continue rejecting unrelated top-level params.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-04 00:28:09 -04:00
Bob.Hou ab373716e7 fix: add claude-opus-5 to KNOWN_MODEL_WINDOW_TOKENS (#2609)
* fix: add claude-opus-5 to KNOWN_MODEL_WINDOW_TOKENS

claude-opus-5 has a 1M context window (verified: 250k tokens at 25%
usage = ~1M), but was missing from the model table. This caused
resolveContextWindowTokens() to fall back to the 200k default when
tokens < 200k, incorrectly triggering compact warnings in the first
20% of a 1M session.

Same failure class as #2290 (Opus 4.x) and #2461 (fable-5/mythos-5).
The env override (ECC_CONTEXT_WINDOW_TOKENS) remains the escape hatch
for unlisted models.

Refs: #2290, #2461, #2468

* test: add regression test for claude-opus-5 context window

Verifies resolveContextWindowTokens returns LARGE_CONTEXT_WINDOW_TOKENS
for claude-opus-5 at 50k tokens, matching the behavior of fable-5 and
mythos-5 in the known-model table.
2026-08-04 00:27:33 -04:00
dependabot[bot] 26f633462b chore(deps): bump toml in /ecc2 in the cargo-minor-and-patch group (#2661)
Bumps the cargo-minor-and-patch group in /ecc2 with 1 update: [toml](https://github.com/toml-rs/toml).


Updates `toml` from 1.1.3+spec-1.1.0 to 1.1.4+spec-1.1.0
- [Commits](https://github.com/toml-rs/toml/compare/toml-v1.1.3...toml-v1.1.4)

---
updated-dependencies:
- dependency-name: toml
  dependency-version: 1.1.4+spec-1.1.0
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo-minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-04 00:26:10 -04:00
t0kubetsu e19dfd6947 fix(skills): replace U+25B6 marker with ASCII-safe » in status legend
check-unicode-safety.js classifies U+25B6 as emoji; the review-state
marker in the status output legend now uses » instead.
2026-08-03 15:08:58 +02:00
t0kubetsu e9242b625a feat(skills): address review — canonical state model, hardening, contract test
Address maintainer review on #2311:
- story file is the single authoritative status record; epic/sprint
  tables are derived and reconciled; todo → in-progress → review → done
  with done gated on confirmed merge to main
- implement lane: tdd-workflow first, language reviewer +
  verification-loop before a story reaches review
- naming/path contract (slug, story-id, sprint validation), resolved-path
  confinement under .stories/, untrusted-content handling, no silent
  overwrites, harness-native file operations (no POSIX-only shell)
- documented boundary and handoff to issue-backed epic-* coordination
- replaced references that do not resolve on main; added
  tests/docs/story-lifecycle-skill.test.js contract test
2026-08-03 14:49:34 +02:00
t0kubetsu b757873fb1 Revert "test(lib): extract shared mini test runner for coordination tests"
This reverts commit dbd9a672a8.
2026-08-03 14:35:20 +02:00
t0kubetsu 0d97825447 Merge remote-tracking branch 'upstream/main' into feat/story-lifecycle-skill 2026-08-03 14:29:37 +02:00
t0kubetsu dbd9a672a8 test(lib): extract shared mini test runner for coordination tests
Address CodeRabbit review on #2311: dedupe the local test(name, fn)
harness and route all reporter output through a shared helper
(tests/lib/helpers/mini-test-runner.js) instead of direct console.log.
2026-08-03 14:27:54 +02:00
Juan PabloandClaude Sonnet 5 cc9b20404d fix(agents): require human approval and rollback for harness-optimizer changes
Addresses CodeRabbit review findings on PR #2633: security-sensitive
diffs must stay BLOCKED until a human explicitly approves (no more
SHIP IT on flagged-but-unreviewed changes), and Step 2/3 now snapshot
the pre-change state and auto-restore it if the audit or test suite
fails, so a failed run never leaves the harness partially modified.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-03 00:02:59 -05:00
Md Kishor MorolandClaude Opus 4.6 2a31c83b0e fix: address remaining CodeRabbit review comments
- Add missing Urdu link to Bengali README language selectors
- Narrow zero-width char regex to only ZWSP (U+200B) and BOM (U+FEFF),
  preserving bidi controls and separators
- Add pg_encoding_to_char check for PostgreSQL UTF-8 verification

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-08-02 23:59:38 -04:00
Md Kishor MorolandClaude Opus 4.6 45a9780118 fix: address review feedback on Bengali language support
- Add missing Español link to Bengali README language selectors
- Fix Unicode character table: correct vowel range to U+0985–U+0994,
  consonant range to U+0995–U+09B0, include missing vowels ঌ ও ঔ
- Preserve ZWNJ/ZWJ in zero-width character stripping (important for
  Bengali conjuncts) — only remove ZWSP, BOM, and formatting chars
- Replace locale.setlocale with PyICU-first sorting approach
- Fix JavaScript sort to not mutate original array
- Use re.fullmatch for digit validation instead of re.match
- Add input sanitization guidance for Bengali prompt engineering
- Add PostgreSQL ICU collation verification step
- Make review summary template dynamic, not hardcoded
- Remove Bash from bengali-reviewer tools list for security
- Make database encoding advice database-specific (utf8mb4 for MySQL)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-08-02 23:28:54 -04:00
Md Kishor MorolandClaude Opus 4.6 bc88a6a470 feat: add Bengali (বাংলা) language support — translation, NLP skill, and reviewer agent
- Add Bengali README translation (docs/bn/README.md) covering guides, quick start, components, agent table, FAQ, and token optimization
- Add bengali-nlp skill (skills/bengali-nlp/SKILL.md) for Bengali text processing: Unicode normalization, conjunct handling, tokenization, script detection, Banglish handling, and dataset preparation
- Add bengali-reviewer agent (agents/bengali-reviewer.md) for reviewing code that handles Bengali text: grapheme cluster safety, NFC normalization, encoding validation, and i18n best practices
- Update language selectors across all existing README translations to include বাংলা

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-08-02 16:01:37 -04:00
dependabot[bot] 0c1d7be9a7 chore(deps-dev): require pytest-asyncio 1.4.0 (#2327)
Keep pytest-asyncio compatible with ECC's pytest 9 development floor.
2026-08-02 15:17:19 -04:00
haelyra 85c7822c4a fix(commands): generate discoverable skills from learning workflows (#2653)
Carry #2246 forward on current main with native SKILL.md discovery, guarded writes, portable metadata, and fail-closed validation.
2026-08-02 14:39:29 -04:00
haelyra f782bd616e fix(aura): reject history-free agents by default (#2652)
* fix(aura): reject history-free agents by default

* fix(aura): keep invalid responses fail-closed
2026-08-02 13:42:16 -04:00
Leone Martins 3fed6f3cfe feat(commands): add Antigravity CLI (agy) as santa-loop Reviewer B option
Santa-loop's Reviewer B only tried codex and gemini before falling back
to a same-family Claude reviewer, losing model diversity when neither
was installed. Detect agy (Antigravity CLI, ~/.local/bin/agy) as a
third option, using gemini-3.6-flash-high — despite the "flash" name,
it currently outranks gemini-3.1-pro-high on every published
coding/agentic benchmark (SWE-Bench Pro, Terminal-Bench, MLE-Bench),
with Pro only ahead on PhD-level reasoning benchmarks that don't apply
to code review. Also documents never pointing agy at a Claude model,
which would collapse Reviewer A/B model diversity entirely.
2026-07-31 20:53:56 -03:00
Juan Pablo a0164707f0 fix(agents): point harness-optimizer at eval-harness instead of missing skill
agents/harness-optimizer.md told Claude to run /harness-audit as if it
were a skill under skills/, but /harness-audit is a command backed by
scripts/harness-audit.js, and subagents cannot invoke slash commands
during their own run. Rework the agent's workflow and output contract
to follow skills/eval-harness/SKILL.md's own methodology (EVAL
DEFINITION/EVAL REPORT, Grader Types, pass@k/pass^k) instead of an
ad-hoc scorecard, and restructure the body to match the agent template
in CONTRIBUTING.md (Your Role, Workflow steps, Output Format,
Examples).
2026-07-30 08:38:55 -05:00
haelyra e4e4163101 fix(docs): restore main CI (#2623) 2026-07-29 14:11:01 -04:00
t0kubetsu 947a3e883d fix(docs): repair README lint errors and Windows hook-install path regression
Fixes CI inherited from the README 2.1 restructure (19b05476):
- MD058: blank lines around tables (delegation map, Codex role configs)
- MD001: Option A/B headings under Ecosystem Tools h2 jump to h4
- MD024: duplicate 'What's included' headings (Codex, Copilot sections)
- restore %USERPROFILE%\\.claude escaping required by
  tests/scripts/manual-hook-install-docs.test.js
2026-07-29 10:40:57 +02:00
t0kubetsu b7fd507936 Merge remote-tracking branch 'upstream/main' into feat/story-lifecycle-skill 2026-07-29 10:40:57 +02:00
Shanujan Sureshandhaelyra 591ab5cbd3 fix(opencode): don't crash the whole session when plugins/lib is missing (#2538)
* fix(opencode): don't crash the whole session when plugins/lib is missing (#2530)

* fix: address review feedback (trailing newlines, symptom wording)

* fix(opencode): also lazy-load the store in ecc-hooks.ts plugin entrypoint

* test(opencode): add regression coverage for missing/present plugins/lib in ecc-hooks

* fix(opencode): guard diagnostic log() against unhandled rejection; tighten test assertion

* fix(opencode): only publish store after init succeeds; scrub loader errors from warning; catch sync log throws

* fix(opencode): scrub raw loader error from changed-files tool; add tool-level regression tests

* fix(ci): make OpenCode checks cross-platform

---------

Co-authored-by: haelyra <49814733+haelyra@users.noreply.github.com>
2026-07-28 21:37:41 -04:00
dependabot[bot] afa34d1aca chore(deps): bump the cargo-minor-and-patch group (#2593)
Bumps the cargo-minor-and-patch group in /ecc2 with 4 updates: [tokio](https://github.com/tokio-rs/tokio), [serde_json](https://github.com/serde-rs/json), [clap](https://github.com/clap-rs/clap) and [libc](https://github.com/rust-lang/libc).


Updates `tokio` from 1.53.0 to 1.53.1
- [Release notes](https://github.com/tokio-rs/tokio/releases)
- [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.53.0...tokio-1.53.1)

Updates `serde_json` from 1.0.150 to 1.0.151
- [Release notes](https://github.com/serde-rs/json/releases)
- [Commits](https://github.com/serde-rs/json/compare/v1.0.150...v1.0.151)

Updates `clap` from 4.6.2 to 4.6.4
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.6.2...clap_complete-v4.6.4)

Updates `libc` from 0.2.186 to 0.2.189
- [Release notes](https://github.com/rust-lang/libc/releases)
- [Changelog](https://github.com/rust-lang/libc/blob/0.2.189/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/libc/compare/0.2.186...0.2.189)

---
updated-dependencies:
- dependency-name: tokio
  dependency-version: 1.53.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo-minor-and-patch
- dependency-name: serde_json
  dependency-version: 1.0.151
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo-minor-and-patch
- dependency-name: clap
  dependency-version: 4.6.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo-minor-and-patch
- dependency-name: libc
  dependency-version: 0.2.189
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo-minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-28 21:33:18 -04:00
837acaf20b fix(hooks,lib): fix hook detection and parsing edge cases (#2405)
* fix(hooks,lib): fix hook detection and parsing edge cases

- auto-tmux-dev: dev\b -> dev(?![\w-]) so one-shot dev-build/dev-docs scripts
  are not detached into tmux; align command shapes (yarn run dev, bun dev) with
  pre-bash-dev-server-block.js DEV_PATTERN.
- pre-bash-commit-quality: skip obvious non-secret placeholders (env refs,
  ${...}, <...>, whitelisted tokens) in the api-key rule without suppressing
  real high-entropy secrets; make -m message extraction quote- and
  escaped-quote-aware so `-m "fix: \"x\""` / apostrophes are not truncated.
- pre-compact: annotate the CURRENT worktree's session (match **Worktree:** /
  legacy **Project:**) instead of the newest *-session.tmp across all projects,
  layered onto the LLM-summary flow from #2388; a present-but-blank Worktree
  header is treated as non-legacy (no foreign project fallback).
- shell-substitution: stop double-appending a trailing backslash in an
  unterminated backtick span.
- utils readStdinJson: on overflow, settle and resolve {} immediately (clear
  timer + listeners) instead of waiting for end/timeout and parsing a partial
  prefix; surface the overflow on stderr.

Regression tests added/extended (new tests/hooks/pre-compact.test.js).

Addresses review feedback on #2405. The earlier block-no-verify change was
dropped: its message-value skip on merge/cherry-pick/am/rebase would let
`git rebase -m --no-verify` bypass the hook (rebase's -m is the boolean
--merge), a false-negative worse than the contrived false-positive it fixed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(ci): align hook fixtures and drain oversized stdin

---------

Co-authored-by: djpjronline-netizen <276112803+djpjronline-netizen@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: haelyra <49814733+haelyra@users.noreply.github.com>
2026-07-28 21:32:42 -04:00
Affaan Mustafaandhaelyra 6be87a56ae fix: clean promoted instinct sources (#2587)
* fix: clean promoted instinct sources

* test(instincts): normalize retained-content line endings

---------

Co-authored-by: haelyra <49814733+haelyra@users.noreply.github.com>
2026-07-28 21:31:12 -04:00
GitHub CopilotandCopilot App 4acd6aa687 docs: agent architecture audit fixes
- Add Prompt Defense Baseline to agent-evaluator (was the only agent missing it)
- Update AGENTS.md to document all 67 agents (36 were previously unlisted)
- Add routing guidance for 11 additional agents in orchestration section
- Count in header kept at 67 (matches actual agents/ folder count)

Audit findings (documented but not changed):
- 3 agents (doc-updater, opensource-forker, opensource-packager) use model:haiku
  with Write/Edit tools; intentional for lightweight pipeline tasks
- 6 agents have non-standard color: field (loop-operator, harness-optimizer,
  gan-*, performance-optimizer); may be harness-specific UI metadata
- 7 agents are <=60 lines; thin but sufficient for narrow scope

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-07-28 23:25:43 +02:00
t0kubetsu 9d70386a3f fix(manifests): register story-lifecycle skill in workflow-quality install module 2026-07-28 16:40:29 +02:00
t0kubetsuandgreptile-apps[bot] 05740105dd fix(skills/story-lifecycle): only update sprint file when Sprint is assigned
Carries forward a Greptile-suggested fix already applied on origin
(commit 1104f4be) that predates this session's rebase: marking a story
done should only touch .stories/sprints/sprint-<n>.md's table when the
story actually has a Sprint assigned, not unconditionally.

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-07-28 16:12:01 +02:00
t0kubetsu 2491620709 feat(skills): add story-lifecycle skill — file-based epic→story→sprint loop
Adds skills/story-lifecycle/SKILL.md, a community skill inspired by
the BMAD Method's epic/story/sprint workflow: a self-contained,
file-based delivery loop (Epic → Stories → Sprint → Implement → Done)
with all state under .stories/, no external PM tool required.

Rebuilt on current upstream/main as a skill-only diff, per affaan-m's
review (same blockers as #2309): the shared format-code.ts Windows fix
and github-coordination branch-coverage tests that were bundled here
now live in #2459. Skill count recomputed as 277->278 against current
main (the old bump was stale, which was the actual conflict source).

Also repoints the Related Skills entry from the closed project-context
skill (#2310) to dev-team, which now owns reading/generating
PROJECT-CONTEXT.md.
2026-07-28 16:12:01 +02:00