diff --git a/openspec/changes/fix-npm-ghost-probe-false-positive/.openspec.yaml b/openspec/changes/archive/2026-07-01-fix-npm-ghost-probe-false-positive/.openspec.yaml similarity index 100% rename from openspec/changes/fix-npm-ghost-probe-false-positive/.openspec.yaml rename to openspec/changes/archive/2026-07-01-fix-npm-ghost-probe-false-positive/.openspec.yaml diff --git a/openspec/changes/fix-npm-ghost-probe-false-positive/design.md b/openspec/changes/archive/2026-07-01-fix-npm-ghost-probe-false-positive/design.md similarity index 100% rename from openspec/changes/fix-npm-ghost-probe-false-positive/design.md rename to openspec/changes/archive/2026-07-01-fix-npm-ghost-probe-false-positive/design.md diff --git a/openspec/changes/fix-npm-ghost-probe-false-positive/proposal.md b/openspec/changes/archive/2026-07-01-fix-npm-ghost-probe-false-positive/proposal.md similarity index 100% rename from openspec/changes/fix-npm-ghost-probe-false-positive/proposal.md rename to openspec/changes/archive/2026-07-01-fix-npm-ghost-probe-false-positive/proposal.md diff --git a/openspec/changes/fix-npm-ghost-probe-false-positive/specs/agent-update/spec.md b/openspec/changes/archive/2026-07-01-fix-npm-ghost-probe-false-positive/specs/agent-update/spec.md similarity index 100% rename from openspec/changes/fix-npm-ghost-probe-false-positive/specs/agent-update/spec.md rename to openspec/changes/archive/2026-07-01-fix-npm-ghost-probe-false-positive/specs/agent-update/spec.md diff --git a/openspec/changes/fix-npm-ghost-probe-false-positive/tasks.md b/openspec/changes/archive/2026-07-01-fix-npm-ghost-probe-false-positive/tasks.md similarity index 100% rename from openspec/changes/fix-npm-ghost-probe-false-positive/tasks.md rename to openspec/changes/archive/2026-07-01-fix-npm-ghost-probe-false-positive/tasks.md diff --git a/openspec/specs/agent-update/spec.md b/openspec/specs/agent-update/spec.md index 3a4849f..503b203 100644 --- a/openspec/specs/agent-update/spec.md +++ b/openspec/specs/agent-update/spec.md @@ -446,6 +446,16 @@ When a managed package is no longer installed but Quantex still records install - **THEN** Quantex does not remove the installed-agent state entry - **AND** the uninstall command reports failure +#### Scenario: Ghost recovery does not run when npm presence probing is inconclusive + +- **GIVEN** an agent has recorded managed install state with install type `npm` +- **AND** npm is available +- **AND** npm global presence probing cannot confirm whether the package is installed or absent +- **WHEN** the user runs `quantex uninstall ` +- **AND** the managed package-manager uninstall command reports failure +- **THEN** Quantex does not remove the installed-agent state entry +- **AND** the uninstall command reports failure + ### Requirement: Exec and shortcut install flows MUST honor global timeout during managed install When `quantex exec` or shortcut `quantex ` runs with `--timeout` and must install a missing agent before launch, Quantex SHALL apply the configured timeout to the install phase. After the deadline fires, Quantex SHALL wait up to `min(timeoutMs, 250)` for managed install work to finish before cancelling managed installer subprocesses.