Skip to content

fix: isolate Claude project hooks from ESM hosts - #3184

Merged
affaan-m merged 2 commits into
affaan-m:mainfrom
Ai-Eastern:fix/claude-project-esm-hooks
Sep 20, 2026
Merged

affaan-m merged 2 commits into
affaan-m:mainfrom
Ai-Eastern:fix/claude-project-esm-hooks

Conversation

@Ai-Eastern

@Ai-Eastern Ai-Eastern commented Sep 20, 2026 •

Copy link
Copy Markdown
Contributor

What Changed

  • install managed {"type":"commonjs"} boundaries inside .claude/scripts/hooks and .claude/scripts/lib when the claude-project hooks runtime is selected
  • keep the boundaries inside ECC-managed trees so existing user-owned .claude/package.json and .claude/scripts/package.json files are never overwritten
  • track both boundaries through the existing install-state lifecycle so reinstall stays idempotent and uninstall removes only managed files
  • add regression coverage for ESM hosts, a user-owned ESM scripts manifest, real hook execution, reinstall, and uninstall

Why This Change

Project-scoped Claude hooks are CommonJS files. In a host project with "type": "module", Node treats those .js files as ESM unless a nearer package boundary exists, causing errors such as module is not defined in ES module scope.

The boundaries live directly in the installed hooks and library trees, so a user-owned .claude/scripts/package.json can retain its own module policy without breaking ECC hooks.

Closes #3182.

Testing Done

  • Manual testing completed
  • Automated tests pass locally (node tests/run-all.js)
  • Edge cases considered and tested

Latest focused verification:

  • node tests/scripts/install-apply.test.js — the ESM and user-owned scripts manifest regression passes; 44 passed, 1 unrelated pre-existing failure in the ECC_DISABLED_MCPS case (adapter.id is undefined)
  • node tests/scripts/uninstall.test.js — 14 passed, 0 failed
  • node tests/lib/install-targets.test.js — 51 passed, 0 failed
  • node scripts/ci/validate-install-manifests.js — validated 37 modules, 84 components, and 7 profiles
  • npx eslint scripts/lib/install-targets/claude-project.js tests/scripts/install-apply.test.js tests/scripts/uninstall.test.js — passed
  • git diff --check — passed
  • npm pack --dry-run --ignore-scripts --json — the CommonJS boundary asset is included

The full local npm test run on the initial fix commit reported 4698 passed and 54 failed. The remaining failures included unavailable WSL /bin/bash, unavailable Python, Windows symlink EPERM, and the pre-existing ECC_DISABLED_MCPS failure above. The follow-up commit changes only boundary destinations and their regression expectations; focused verification was rerun after that change.

Manual ESM fixture verification confirmed that:

  • the installed hook no longer fails with an ESM scope error
  • user-owned .claude/package.json and .claude/scripts/package.json files remain byte-for-byte unchanged across install and reinstall
  • reinstall records exactly the two managed CommonJS boundaries
  • uninstall removes the managed boundaries while preserving both user-owned package files

Type of Change

  • fix: Bug fix
  • feat: New feature
  • refactor: Code refactoring
  • docs: Documentation
  • test: Tests
  • chore: Maintenance/tooling
  • ci: CI/CD changes

Security & Quality Checklist

  • No secrets or API keys committed (ghp_, sk-, AKIA, xoxb, xoxp patterns checked)
  • JSON files validate cleanly
  • Shell scripts pass shellcheck (not applicable; no shell scripts changed)
  • Pre-commit hooks pass locally (no configured hook output during commit)
  • No sensitive data exposed in logs or output
  • Follows conventional commits format

If you changed dependencies or package.json (bin / files / deps)

Not applicable; no dependency, root package.json, or lockfile changes.

If you added a skill, command, agent, hook, or CLI tool

Not applicable; this PR adds package-scope boundaries for existing hooks, not a new hook or CLI surface.

  • Full gauntlet passes locally (npm test)

Documentation

  • Updated relevant documentation (not needed for this runtime fix)
  • Added comments for complex logic (not needed; the boundaries are covered by integration tests)
  • README updated (not needed)

@ecc-tools

ecc-tools Bot commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / Security Evidence

Commit: 72ca6782a3810f8cce294ed7706a531517542022

Security evidence gate passed (success)

No security-sensitive scanner-evidence gap detected.

Mode: enforce

Scanned 4 changed file(s). No missing scanner-evidence signal was detected.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / PR Risk Taxonomy

Commit: 72ca6782a3810f8cce294ed7706a531517542022

PR taxonomy review recommended (neutral)

Detected 2 PR taxonomy bucket(s): CI/CD Recommendation, Cost/Token Risk.

Scanned 4 changed file(s).

Roadmap taxonomy buckets:

CI/CD Recommendation

CI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.

Signals:

  • 2 CI or workflow path(s) changed

Paths:

  • tests/scripts/install-apply.test.js
  • tests/scripts/uninstall.test.js

Cost/Token Risk

AI routing, usage, and token-budget changes should include budget or usage-limit evidence.

Signals:

  • Cost or token-risk changes may ship without budget evidence
  • 1 cost/token path(s) changed

Paths:

  • scripts/lib/install-targets/claude-project.js

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / Reference Set Readiness

Commit: 72ca6782a3810f8cce294ed7706a531517542022

Reference set readiness gaps detected (neutral)

Reference evidence present for 0/7 areas (0%) across 4 changed file(s).

This check is based on files changed in this PR. Repository-level readiness is still reported by /ecc-tools analyze comments and generated manifests.

Area Status Evidence / Next Step
Deep analyzer corpus Missing Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions.
RAG/evaluator comparison Missing Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior.
PR salvage/review corpus Missing Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation.
Discussion triage corpus Missing Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications.
Harness compatibility Missing Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces.
Security evidence Missing Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs.
CI failure-mode evidence Missing Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / Hosted Promotion Readiness

Commit: 72ca6782a3810f8cce294ed7706a531517542022

Hosted promotion readiness passed (success)

No hosted promotion evidence gaps detected across 4 changed file(s); 0 corpus scenarios had matching evidence.

This check compares PR file changes against the evaluator/RAG promotion corpus in src/analyzers/fixtures/evaluator-rag-corpus.ts.
Hosted output scoring inspected 0 completed cached hosted job results.

No evaluator corpus scenarios matched this PR.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@coderabbitai

coderabbitai Bot commented Sep 20, 2026 •

Copy link
Copy Markdown
Contributor

Review Change StackReview Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository: affaan-m/ECC/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: eb958d27-50f1-455b-a75c-a974df9cd7d2

📥 Commits

Reviewing files that changed from the base of the PR and between 72ca678 and 4e297fb.

📒 Files selected for processing (3)
  • scripts/lib/install-targets/claude-project.js
  • tests/scripts/install-apply.test.js
  • tests/scripts/uninstall.test.js

Included review availability: Your plan provides up to 10 included reviews per hour; 8 remain after this review.

📜 Recent review details
⏰ Context from checks skipped due to timeout. (1)
  • GitHub Check: Greptile Review
🧰 Additional context used
📓 Path-based instructions (21)
Focus on command injection, unsafe subprocess usage, path traversal, SSRF, secret exposure, and missing tests for new CLI behavior.

⚙️ CodeRabbit configuration file

Files:

  • scripts/lib/install-targets/claude-project.js
Lightweight agents with frequent invocation Pair programming and code generation Worker agents in multi-agent systems Main development work Orchestrating multi-agent workflows Complex coding tasks Complex architectural decisions Maximum rea...

📄 CodeRabbit inference engine (.cursor/rules/common-performance.md)

Files:

  • tests/scripts/uninstall.test.js
  • tests/scripts/install-apply.test.js
  • scripts/lib/install-targets/claude-project.js
NEVER hardcode secrets in source code - ALWAYS use environment variables or a secret manager

📄 CodeRabbit inference engine (.cursor/rules/common-security.md)

Files:

  • tests/scripts/uninstall.test.js
  • tests/scripts/install-apply.test.js
  • scripts/lib/install-targets/claude-project.js
No hardcoded secrets (API keys, passwords, tokens) - validate before any commit

📄 CodeRabbit inference engine (.cursor/rules/common-security.md)

Files:

  • tests/scripts/uninstall.test.js
  • tests/scripts/install-apply.test.js
  • scripts/lib/install-targets/claude-project.js
Package manager detection should support npm, pnpm, yarn, and bun, with configuration via CLAUDE_PACKAGE_MANAGER environment variable or project config.

📄 CodeRabbit inference engine (CLAUDE.md)

Files:

  • scripts/lib/install-targets/claude-project.js
Always create new objects, never mutate existing ones.

📄 CodeRabbit inference engine (.cursor/rules/common-coding-style.md)

Files:

  • tests/scripts/uninstall.test.js
  • tests/scripts/install-apply.test.js
  • scripts/lib/install-targets/claude-project.js
Use parameterized queries to prevent SQL injection

📄 CodeRabbit inference engine (.cursor/rules/common-security.md)

Files:

  • tests/scripts/uninstall.test.js
  • tests/scripts/install-apply.test.js
  • scripts/lib/install-targets/claude-project.js
Implement XSS prevention by sanitizing HTML output

📄 CodeRabbit inference engine (.cursor/rules/common-security.md)

Files:

  • tests/scripts/uninstall.test.js
  • tests/scripts/install-apply.test.js
  • scripts/lib/install-targets/claude-project.js
All user inputs must be validated Enable CSRF protection on all state-changing endpoints Verify authentication and authorization for all protected endpoints Implement rate limiting on all endpoints to prevent abuse Ensure error messages do...

📄 CodeRabbit inference engine (.cursor/rules/common-security.md)

Files:

  • tests/scripts/uninstall.test.js
  • tests/scripts/install-apply.test.js
  • scripts/lib/install-targets/claude-project.js
Write tests before implementation (test-driven development); target 80%+ coverage Achieve minimum 80% test coverage across all three layers: Unit, Integration, and E2E Use AAA structure (Arrange / Act / Assert) in tests with descriptive tes...

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Files:

  • tests/scripts/uninstall.test.js
  • tests/scripts/install-apply.test.js
Do not hardcode secrets, API keys, passwords, or tokens

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Files:

  • tests/scripts/uninstall.test.js
  • tests/scripts/install-apply.test.js
  • scripts/lib/install-targets/claude-project.js
Always create new objects and never mutate in place; return new copies instead Keep files between 200–400 lines typical, with a maximum of 800 lines Extract helpers when a file exceeds 200 lines Handle errors explicitly at every level; neve...

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Files:

  • tests/scripts/uninstall.test.js
  • tests/scripts/install-apply.test.js
  • scripts/lib/install-targets/claude-project.js
HTML output must be sanitized where applicable

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Files:

  • tests/scripts/uninstall.test.js
  • tests/scripts/install-apply.test.js
  • scripts/lib/install-targets/claude-project.js
Auto-format JavaScript/TypeScript files using Prettier after edit Warn about `console.log` statements in edited files Check all modified files for `console.log` statements before session ends

📄 CodeRabbit inference engine (.cursor/rules/typescript-hooks.md)

Files:

  • tests/scripts/uninstall.test.js
  • tests/scripts/install-apply.test.js
  • scripts/lib/install-targets/claude-project.js
Never hardcode secrets; always use environment variables for sensitive credentials like API keys Throw an error when required environment variables are not configured to fail fast and ensure security prerequisites are met

📄 CodeRabbit inference engine (.cursor/rules/typescript-security.md)

Files:

  • tests/scripts/uninstall.test.js
  • tests/scripts/install-apply.test.js
  • scripts/lib/install-targets/claude-project.js
Use Playwright as the E2E testing framework for critical user flows in TypeScript/JavaScript

📄 CodeRabbit inference engine (.cursor/rules/typescript-testing.md)

Files:

  • tests/scripts/uninstall.test.js
  • tests/scripts/install-apply.test.js
  • scripts/lib/install-targets/claude-project.js
Use spread operator for immutable updates in TypeScript/JavaScript instead of direct mutation Use async/await with try-catch for error handling in TypeScript/JavaScript Use Zod for schema-based input validation in TypeScript/JavaScript No c...

📄 CodeRabbit inference engine (.cursor/rules/typescript-coding-style.md)

Files:

  • tests/scripts/uninstall.test.js
  • tests/scripts/install-apply.test.js
  • scripts/lib/install-targets/claude-project.js
Use the ApiResponse interface pattern with generic type parameter: `interface ApiResponse { success: boolean; data?: T; error?: string; meta?: { total: number; page: number; limit: number; } }` Implement custom React hooks following the...

📄 CodeRabbit inference engine (.cursor/rules/typescript-patterns.md)

Files:

  • tests/scripts/uninstall.test.js
  • tests/scripts/install-apply.test.js
  • scripts/lib/install-targets/claude-project.js
Ensure cross-platform support for Windows, macOS, and Linux via Node.js scripts in the scripts/ directory.

📄 CodeRabbit inference engine (CLAUDE.md)

Files:

  • scripts/lib/install-targets/claude-project.js
Required environment variables must be validated at startup

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Files:

  • tests/scripts/uninstall.test.js
  • tests/scripts/install-apply.test.js
  • scripts/lib/install-targets/claude-project.js
Use parameterized queries for all database writes (no string interpolation) Auth/authz must be checked server-side for every sensitive path Rate limiting must be applied to all public endpoints

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Files:

  • tests/scripts/uninstall.test.js
  • tests/scripts/install-apply.test.js
  • scripts/lib/install-targets/claude-project.js
🪛 ast-grep (0.45.3)
tests/scripts/uninstall.test.js

[warning] 147-147: Filesystem path is not a string literal; a request-/variable-derived path can enable path traversal. Validate and normalize the path before use.
Context: fs.writeFileSync(path.join(projectRoot, 'package.json'), '{"type":"module"}\n')
Note: [CWE-22] Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal').

(detect-non-literal-fs-filename)


[warning] 149-149: Filesystem path is not a string literal; a request-/variable-derived path can enable path traversal. Validate and normalize the path before use.
Context: fs.writeFileSync(userPackagePath, userPackage)
Note: [CWE-22] Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal').

(detect-non-literal-fs-filename)


[warning] 150-150: Filesystem path is not a string literal; a request-/variable-derived path can enable path traversal. Validate and normalize the path before use.
Context: fs.writeFileSync(scriptsPackagePath, userScriptsPackage)
Note: [CWE-22] Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal').

(detect-non-literal-fs-filename)


[warning] 168-168: Filesystem path is not a string literal; a request-/variable-derived path can enable path traversal. Validate and normalize the path before use.
Context: fs.readFileSync(libPackagePath, 'utf8')
Note: [CWE-22] Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal').

(detect-non-literal-fs-filename)


[warning] 169-169: Filesystem path is not a string literal; a request-/variable-derived path can enable path traversal. Validate and normalize the path before use.
Context: fs.readFileSync(scriptsPackagePath, 'utf8')
Note: [CWE-22] Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal').

(detect-non-literal-fs-filename)


[warning] 176-176: Filesystem path is not a string literal; a request-/variable-derived path can enable path traversal. Validate and normalize the path before use.
Context: fs.readFileSync(userPackagePath, 'utf8')
Note: [CWE-22] Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal').

(detect-non-literal-fs-filename)


[warning] 177-177: Filesystem path is not a string literal; a request-/variable-derived path can enable path traversal. Validate and normalize the path before use.
Context: fs.readFileSync(scriptsPackagePath, 'utf8')
Note: [CWE-22] Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal').

(detect-non-literal-fs-filename)

tests/scripts/install-apply.test.js

[warning] 1070-1070: Filesystem path is not a string literal; a request-/variable-derived path can enable path traversal. Validate and normalize the path before use.
Context: fs.writeFileSync(path.join(projectDir, 'package.json'), '{"type":"module"}\n')
Note: [CWE-22] Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal').

(detect-non-literal-fs-filename)


[warning] 1072-1072: Filesystem path is not a string literal; a request-/variable-derived path can enable path traversal. Validate and normalize the path before use.
Context: fs.writeFileSync(userPackagePath, userPackage)
Note: [CWE-22] Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal').

(detect-non-literal-fs-filename)


[warning] 1073-1073: Filesystem path is not a string literal; a request-/variable-derived path can enable path traversal. Validate and normalize the path before use.
Context: fs.writeFileSync(scriptsPackagePath, userScriptsPackage)
Note: [CWE-22] Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal').

(detect-non-literal-fs-filename)


[warning] 1080-1080: Filesystem path is not a string literal; a request-/variable-derived path can enable path traversal. Validate and normalize the path before use.
Context: fs.readFileSync(userPackagePath, 'utf8')
Note: [CWE-22] Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal').

(detect-non-literal-fs-filename)


[warning] 1081-1081: Filesystem path is not a string literal; a request-/variable-derived path can enable path traversal. Validate and normalize the path before use.
Context: fs.readFileSync(scriptsPackagePath, 'utf8')
Note: [CWE-22] Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal').

(detect-non-literal-fs-filename)

🔇 Additional comments (1)
scripts/lib/install-targets/claude-project.js (1)

12-12: LGTM!

Also applies to: 69-69, 103-103, 106-107, 109-109


📝 Summary

Summary by CodeRabbit

  • Bug Fixes
    • Claude project installations now work correctly in projects configured for ECMAScript modules.
    • Managed CommonJS boundaries are created for hook scripts without modifying user-managed configuration.
    • User-managed .claude/package.json and .claude/scripts/package.json files remain unchanged during installation and removal.
    • Installed hooks continue to block git commit --no-verify.
    • Repeated installations remain stable without duplicate changes.
    • Uninstall removes managed boundary files and installation state while preserving user-authored configuration.

Walkthrough

The Claude project installer now writes CommonJS package boundaries for hook and library scripts. Tests verify hook execution in ESM projects, repeat-install state, managed-file removal, and preservation of user-owned Claude configuration.

Changes

Claude project hook module boundary

Layer / File(s) Summary
Add the CommonJS hook boundaries
manifests/install-assets/claude-project-scripts-package.json, scripts/lib/install-targets/claude-project.js
Adds a commonjs manifest and installs it at scripts/hooks/package.json and scripts/lib/package.json for hooks-runtime.
Validate install and uninstall ownership
tests/scripts/install-apply.test.js, tests/scripts/uninstall.test.js
Tests hook execution in an ESM project, repeat-install state, managed-file removal, and byte-for-byte preservation of user-owned package files.

Priority: ➖ Normal

Estimated code review effort: 2 (Simple) | ~15 minutes

Change: Bug fix · Severity of issue fixed: Medium

Sequence Diagram(s)

sequenceDiagram
  participant Project
  participant Installer
  participant HookRuntime
  participant Filesystem
  Project->>Installer: request claude-project install with hooks
  Installer->>HookRuntime: plan hooks-runtime operations
  HookRuntime->>Filesystem: write CommonJS package boundaries
  Filesystem-->>HookRuntime: store managed files and state
  Project->>HookRuntime: invoke block-no-verify.js
  HookRuntime-->>Project: reject git commit --no-verify
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 3 functions across 3 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed PASS. For issue #3182, the PR installs CommonJS package boundaries for the hook and library directories under .claude/scripts. The install test covers an ESM host, hook execution, expected blocking …
Out of Scope Changes check ✅ Passed PASS. The manifest, installer state tracking, and install/uninstall tests directly support the CommonJS boundary required by issue #3182. The additional boundary for the library directory supports rel…
Title check ✅ Passed The title clearly and concisely describes the main change: isolating CommonJS Claude project hooks from ESM host projects.
Description check ✅ Passed The description directly explains the managed CommonJS boundaries, preservation of user-owned files, install-state behavior, regression coverage, and testing results.
  • Fix all pre-merge checks with AI
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@greptile-apps

greptile-apps Bot commented Sep 20, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerConfidence Score: 5/5

Safe to merge.

Summary
  • Adds ECC-owned CommonJS package boundaries within the managed Claude hook and library directories.
  • Preserves user-owned Claude package metadata while preventing it from changing the module format of installed ECC hooks.

The previously reported hook-loading problem is addressed.

Reviews (2) · Last reviewed commit: "fix: handle user-owned Claude scripts pa..."

@ecc-tools

ecc-tools Bot commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / Security Evidence

Commit: 4e297fbca517b8ae2d9793b0d3622757e81ac284

Security evidence gate passed (success)

No security-sensitive scanner-evidence gap detected.

Mode: enforce

Scanned 4 changed file(s). No missing scanner-evidence signal was detected.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / PR Risk Taxonomy

Commit: 4e297fbca517b8ae2d9793b0d3622757e81ac284

PR taxonomy review recommended (neutral)

Detected 2 PR taxonomy bucket(s): CI/CD Recommendation, Cost/Token Risk.

Scanned 4 changed file(s).

Roadmap taxonomy buckets:

CI/CD Recommendation

CI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.

Signals:

  • 2 CI or workflow path(s) changed

Paths:

  • tests/scripts/install-apply.test.js
  • tests/scripts/uninstall.test.js

Cost/Token Risk

AI routing, usage, and token-budget changes should include budget or usage-limit evidence.

Signals:

  • Cost or token-risk changes may ship without budget evidence
  • 1 cost/token path(s) changed

Paths:

  • scripts/lib/install-targets/claude-project.js

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / Reference Set Readiness

Commit: 4e297fbca517b8ae2d9793b0d3622757e81ac284

Reference set readiness gaps detected (neutral)

Reference evidence present for 0/7 areas (0%) across 4 changed file(s).

This check is based on files changed in this PR. Repository-level readiness is still reported by /ecc-tools analyze comments and generated manifests.

Area Status Evidence / Next Step
Deep analyzer corpus Missing Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions.
RAG/evaluator comparison Missing Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior.
PR salvage/review corpus Missing Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation.
Discussion triage corpus Missing Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications.
Harness compatibility Missing Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces.
Security evidence Missing Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs.
CI failure-mode evidence Missing Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / Hosted Promotion Readiness

Commit: 4e297fbca517b8ae2d9793b0d3622757e81ac284

Hosted promotion readiness passed (success)

No hosted promotion evidence gaps detected across 4 changed file(s); 0 corpus scenarios had matching evidence.

This check compares PR file changes against the evaluator/RAG promotion corpus in src/analyzers/fixtures/evaluator-rag-corpus.ts.
Hosted output scoring inspected 0 completed cached hosted job results.

No evaluator corpus scenarios matched this PR.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@affaan-m
affaan-m merged commit 95448ad into affaan-m:main Sep 20, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Project-scoped hooks crash on ESM projects ("type": "module") — CommonJS scripts loaded as ES modules

2 participants