Files
ECC/docs/releases/2.2.1/patch-execution.md
T

109 lines
6.6 KiB
Markdown

# 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
1. Independently review and merge the verified PowerShell security fix #2961.
2. Repair installer ownership and uninstall dry-run data-loss reports #2964 and
#2952. Exercise install, upgrade, dry-run, and uninstall on disposable roots.
3. Repair hook JSON truncation #2924, Pi/OMP recursive process spawning #2909,
and project-scoped GateGuard exemptions #2921 without weakening denials.
4. Review manual Claude hook activation #2982 and plugin dependency loading
#2822. Include complete, verified fixes; document any remaining limitation.
5. Verify memory MCP compatibility and existing heredoc fixes in current source
and the actual packed artifact. Avoid duplicating already merged repairs.
6. Review the integrated diff, run focused and full tests, lint, coverage,
security checks, and hosted platform and packed-lifecycle checks.
7. Update release notes to actual merged behavior. Verify exact current main,
tag/version availability, signing identity, and registry publishing path.
8. 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: e04ea0b9cc8248686edf5ac751cadff550e162b8.
- 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 bf0ac4e4 closes 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.