Third upstream sync for PR #2914: main c05b2d66 (rename chore #3330, 17
skill files) re-staled the generated skill-triggers registryDigest. Sole
conflict resolved by keeping our pretty-printed manifest + triggers and
recomputing registryDigest over the merged tree via the repo's own
context-pack-registry chain (validated by reproducing both sides'
committed digests on their own trees first). Gates: validate-context-
profiles PASS, plan-orchestrate tests fail 0, full run-all.js clean.
* chore: retire the Everything Claude Code name, ECC only
Replace the expanded product name and the everything-claude-code slug
with ECC across READMEs, translated docs, harness folders, skills,
commands, scripts and examples. Repo URLs now point at affaan-m/ECC.
Rename repo-internal artifacts to ecc forms (ecc-conventions skill,
ecc-guardrails, ecc-research-playbook, ecc-team-config, ecc-instincts
with ecc-* ids) and update .claude/ecc-tools.json.
Legacy install ids, plugin dirs, package names and MCP prefixes stay
where existing installs resolve against them. The codex global-state
check and harness-audit repo detection accept the new name first and
the legacy one as a fallback. The Discord bot prefers ~/GitHub/ECC and
falls back to the nested legacy checkout path.
Refresh the skill-triggers registryDigest for the changed skill text.
* fix(ecc-tools): drop managed paths to the removed Claude repo skill
.claude/skills/<repo-skill>/SKILL.md was deleted in #2770 but stayed listed in
ecc-tools.json and the team config. Remove those entries and point the Claude
Code adapter at the existing .agents/skills/ecc-conventions/SKILL.md.
pi/core and the bundled blueprint skill now refer to the project as ECC only;
the generated README no longer expands the name. Profile contents, package
name and paths are unchanged (123 skills, 24 commands).
The release workflows poll npm for up to five minutes after publish before
verifying the artifact. In 2.2.2 the check gave up after about 30 seconds while
npm was still processing, failing the run before latest was promoted and the
GitHub Release was created.
Version metadata synced to 2.2.3 with CHANGELOG, translated release headings
and release notes; skill-triggers registryDigest updated for the blueprint text.
Pin the core steering files to `inclusion: always`, check every steering
file's frontmatter against the .kiro/README.md table, and require the
fields each inclusion mode needs.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The installer never overwrites steering files that already exist, so
projects installed before the switch to `inclusion: always` keep `auto`.
Document the manual frontmatter update alongside the no-action-needed note.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Reject missing values for --ecc-root/--out with exit code 2 (CodeRabbit) | - Preserve regex matcher tokens with metacharacters or mcp__ prefixes from lower-casing (CodeRabbit) | - Shell-quote eccRoot in the env prefix to close CWE-78 command substitution (CodeRabbit, Greptile P1) | - Fix last_verified_at future date in the deepseek-harness record (CodeRabbit) | - Guide and skill: clarify skill-name placeholders and make the compose check verify the entry instead of echoing OK on exit status alone (Greptile P2 x2) | - Tests: 11 passing including new coverage for quoting, regex preservation, and flag validation
- Add deepseek-harness record (Adapter-backed) to ADAPTER_RECORDS with onramp, verification commands, risk notes, and source docs | - Regenerate the matrix block in docs/architecture/harness-adapter-compliance.md via the renderer | - Addresses the Harness-compatibility reference gap flagged by the ecc-tools Reference Set Readiness check on PR #3309
Kiro only loads steering files automatically in every conversation when
they use `inclusion: always`; `auto` loads them only when the request
matches the description. Switch the always-on steering files to
`always` and update README, install.sh and docs accordingly.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Addresses review feedback on #3277 (CodeRabbit): the existing test only
checked that Config::config_path() is stable within one thread. Nothing
guarded the property that makes parallel tests safe, that each test thread
gets its own root. If config_root() regressed to one shared directory, the
existing tests would still pass while parallel tests that save a config
raced on the same file.
The code already behaves correctly, so the new test passes as written. To
show it can fail, I temporarily made config_root() return one process-wide
root (a OnceLock around the thread-local) and ran it:
$ cargo test config_path_under_test_is_distinct # with that mutation
running 1 test
test config::tests::config_path_under_test_is_distinct_across_test_threads ... FAILED
failures:
---- config::tests::config_path_under_test_is_distinct_across_test_threads stdout ----
thread 'config::tests::config_path_under_test_is_distinct_across_test_threads' panicked at src/config/mod.rs:1167:9:
assertion `left != right` failed
left: "<tmp>/ecc2-test-config-958aace6-2774-481f-a50c-7684c5189e20/ecc2/config.toml"
right: "<tmp>/ecc2-test-config-958aace6-2774-481f-a50c-7684c5189e20/ecc2/config.toml"
failures:
config::tests::config_path_under_test_is_distinct_across_test_threads
test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 492 filtered out; finished in 0.00s
The mutation is reverted and is not part of this commit. With the real code:
$ cargo test config_path_under_test_is_distinct
test config::tests::config_path_under_test_is_distinct_across_test_threads ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 492 filtered out
$ cargo test # full suite
test result: ok. 492 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out
Refs #3276
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011Y54kLgLGzLGqAxwLMFEc9
Addresses review feedback on #3277: the Drop impl for the per-thread test
config root discarded remove_dir_all errors, against the AGENTS.md rule
"Never silently swallow errors".
The root is now created up front when a test thread first asks for it, so
it always exists at cleanup. remove_dir_all can then only fail for a real
reason, and any failure is reported on stderr with no NotFound special
case. Creation failure panics in test setup.
No red step: this changes failure reporting only, which has no observable
test behaviour. Full suite: 491 passed, 0 failed, 1 ignored, and no scratch
directories left behind.
Refs #3276
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011Y54kLgLGzLGqAxwLMFEc9
payOnce reserved MAX_AMOUNT before awaiting confirmation but only released
it when confirmWithUser returned false. A prompt that threw (timeout, closed
window) or a challenge the payment policy rejected before signing kept the
reservation, so five such failures exhausted SESSION_CAP with zero payments.
Track per call whether a request carrying PAYMENT-SIGNATURE / X-PAYMENT was
actually sent, and release the reservation in a finally block unless it was.
A sent signed request may settle, so it stays counted even if the response
fails. The reservation still happens before any await, so concurrent calls
cannot overrun the cap. Mirrored in ja-JP and zh-CN.
Preserve the Bengali and MyBatis catalog additions, keep Laravel storage examples disk-consistent, isolate ECC 2 test configuration with private permissions, and verify every command-referenced runtime script is published.