mirror of
https://github.com/affaan-m/ECC.git
synced 2026-09-08 07:37:48 +02:00
feat(install): require an explicit hook decision at the apply layer
The guided installer asks how ECC hooks should run, but that consent lived only in the wizard path. Running install-apply directly with a profile that includes hooks-runtime still materialized the hook runtime with no disclosure and no decision. Gate the apply layer instead, so every entry point is covered: - disclose the six hook capability groups when a plan would materialize the hook runtime, and refuse to apply until the caller decides - --enable-hooks confirms the hook runtime; --no-hooks installs the rest of the selection without it and records the reduced module closure in install-state - surface the pending decision as a dry-run warning - show the same capability disclosure in the guided installer's plan preview, so the wizard's hook question states what it is asking about Plans that never materialize hooks (Kimi, --profile minimal, --without baseline:hooks) are unaffected and need no flag. Repair and uninstall operate on already-recorded state and stay unchanged. The capability taxonomy and the held-materialization behavior come from Samarjeet Singh Tomar's PR #2634, reworked to fit the single-decision consent model that shipped with the guided installer in #2649. Co-Authored-By: Samarjeet Singh Tomar <samar_tomar@hotmail.com> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Samarjeet Singh Tomar
Claude Fable 5
parent
a89cec9658
commit
6aaa41e028
@@ -6,6 +6,7 @@ const path = require('path');
|
||||
const { spawnSync } = require('child_process');
|
||||
|
||||
const { discoverInstalledStates } = require('./lib/install-lifecycle');
|
||||
const { getRecordedHookConsent } = require('./lib/install/hook-consent');
|
||||
const { SUPPORTED_INSTALL_TARGETS } = require('./lib/install-manifests');
|
||||
|
||||
function showHelp(exitCode = 0) {
|
||||
@@ -85,6 +86,7 @@ function buildInstallApplyArgs(record) {
|
||||
const target = state.target.target || record.adapter.target;
|
||||
const request = state.request || {};
|
||||
const args = [];
|
||||
const hookConsent = getRecordedHookConsent(state);
|
||||
|
||||
if (target) {
|
||||
args.push('--target', target);
|
||||
@@ -106,6 +108,12 @@ function buildInstallApplyArgs(record) {
|
||||
args.push('--without', componentId);
|
||||
}
|
||||
|
||||
if (hookConsent === 'enabled') {
|
||||
args.push('--enable-hooks');
|
||||
} else if (hookConsent === 'declined') {
|
||||
args.push('--no-hooks');
|
||||
}
|
||||
|
||||
for (const language of Array.isArray(request.legacyLanguages) ? request.legacyLanguages : []) {
|
||||
args.push(language);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user