6.6 KiB
ECC 2.2.1 bug and security patch execution
Status: in progress, 2026-09-07. Ticket: ECC-031.
Outcome and authority
The user authorized reviewing, repairing, and merging critical bug and security PRs, followed by publishing ECC 2.2.1. This advances the M0 distribution and release-evidence contract. ECC retains policy, canonical state, and release authority. New feature platforms, ECC 3 contracts, and broad refactoring remain outside this patch.
Integration sequence
- Independently review and merge the verified PowerShell security fix #2961.
- Repair installer ownership and uninstall dry-run data-loss reports #2964 and #2952. Exercise install, upgrade, dry-run, and uninstall on disposable roots.
- Repair hook JSON truncation #2924, Pi/OMP recursive process spawning #2909, and project-scoped GateGuard exemptions #2921 without weakening denials.
- Review manual Claude hook activation #2982 and plugin dependency loading #2822. Include complete, verified fixes; document any remaining limitation.
- Verify memory MCP compatibility and existing heredoc fixes in current source and the actual packed artifact. Avoid duplicating already merged repairs.
- Review the integrated diff, run focused and full tests, lint, coverage, security checks, and hosted platform and packed-lifecycle checks.
- Update release notes to actual merged behavior. Verify exact current main, tag/version availability, signing identity, and registry publishing path.
- Push the verified signed tag, watch the existing staged publication workflow, and verify public registry integrity, release, and install lifecycle.
Working rules
- Independent reviews and fixes use separate worktrees. One integration owner serializes merges and checks the final combined result.
- Preserve contributor attribution. Consolidated or superseded PRs are linked to the actual merged fix; PR closure alone is not repair evidence.
- Hosted checks must correspond to the source being merged or released. Failed checks are diagnosed before a rerun.
- Never run lifecycle tests against real user homes. Never include credentials in logs, source, release notes, or dashboard records.
- Keep v2.2.0 immutable and publish only the single tested 2.2.1 artifact through the existing release workflow, with registry readback before latest promotion.
Initial evidence
- Base:
e04ea0b9cc. - Current GitHub account: haelyra, repository write permission verified.
- Repository NPM_TOKEN secret is configured; validity still needs publication.
- No remote v2.2.1 tag; registry lookup returns E404 for ecc-universal@2.2.1.
- Registry latest is 2.2.0. No local GPG private signing key or loaded SSH agent identity was available in the initial check. Signing remains an open gate.
- Independent review found that a later scalar assignment could mask an earlier
unresolved PowerShell invocation in #2961. Commit
bf0ac4e4closes that bypass; 52 classifier cases and 253 hook cases pass. Updated hosted checks are pending.
Reviewed integration candidates
| Area | Source | Verification and scope |
|---|---|---|
| Hook truncation | #2925, #2924 | 37 direct-entrypoint cases, 16 MiB bounded input, existing production limits preserved |
| Pi recursive spawning | #2911, #2909 | 28 adapter and 7 actual adapter-boundary tests, never launches compiled OMP as Node |
| GateGuard exemptions | #2979, #2921 | 192 cases; relative globs constrained to project, explicit absolute globs retained |
| Plugin dependency loading | #2994, #2822 | 10 cases; help/list paths need no third-party modules, required dependency failures are explicit |
| Yarn dependency security | Dependabot alert #62 | toml 4.3.0 matches npm lock; immutable Yarn install and recursive audit pass |
| PowerShell security | #2961 | 52 classifier cases, combined governance and GateGuard regressions; late-assignment bypass repaired |
| Manual Claude hooks | #2992, #2982 | 36 settings, 66 lifecycle, 42 install-apply cases; concurrent-edit and observed parent-swap tests |
| Installer data protection | #2980, #2981, #2956 | 23 ownership, 13 uninstall cases; all 15 target collision checks and failed-checkpoint regressions |
| Observer retention | #2971, #2673 | Merged cf065358 after 45 green hosted checks and independent review |
| Harness setup instructions | #2977, #2958, #2957 | 4 regressions; documented CLI, pinned real optional memory package, no fabricated scheduling server |
Plugin dependency handling does not bundle or automatically install modules. Database and schema-validation features still require declared runtime packages. The installer, PowerShell, and manual Claude registration fixes are now combined and independently reviewed. Conflict resolutions preserve both project-scoped exemptions and PowerShell enforcement, plus Claude settings locking and installer ownership/checkpoint protections. Focused combined suites pass.
Claude settings pathname checks detect observed parent swaps and concurrent edits; they are not a native filesystem isolation boundary. The residual race between a final check and rename remains a follow-up, not a race-free claim. Successful managed-file upgrades retain their existing replacement semantics.
Completion evidence
First batch 82bfd225 passed 4,215/4,215 tests and lint. The first combined run
at 8cc31f1e passed 4,370/4,372 tests, with 89.27% line and 81.52% branch coverage.
Its two failures exposed guided setup reporting success after a late collision
was filtered. Full-preview revalidation fixes that interaction; all 22 guided
setup tests now pass, including initially identical unowned files before later
writes. Final full-suite and hosted validation are pending.
Windows hosted checks exposed fixture-owned descriptor cleanup and directory rename assumptions in two new settings tests. The repaired fixtures preserve Windows OS-refusal assertions and ECC parent-identity checks. CodeQL findings 338-341 were confined to test-source patterns; minimal assertion/interception changes preserve coverage without alert dismissals. Hosted rescanning remains required.
The first combined packed artifact passed the isolated macOS lifecycle, 13 memory MCP regressions, 12 actual Codex/Hermes protocol sessions, and 196 GateGuard cases including quoted, unquoted, and tab-stripped heredocs. Package helpers, public CLI aliases, and dry-run entrypoints were exercised from the installed archive, not just the source checkout. Final source must be repacked after the guided-setup integration repair. Signing remains unavailable locally.
Pending final hosted validation, signed tag, publication, registry integrity readback, and clean lifecycle canaries. This document does not claim that 2.2.1 has shipped.