npm run validate — one documented command: check:openspec (Node/.nvmrc, CLI = openspec/.cli-version, store usable) → openspec schema validate (all schemas) → openspec validate --all --strict (specs + active changes) → lychee --offline --include-fragments on root *.md (incl. AI_INDEX) + openspec/specs. Archives and external URLs not checked. No custom validator.
CI verify installs the pinned CLI from .cli-version, openspec store register ., lychee 0.24.2 (sha256-pinned release, same pattern as gitleaks), then runs npm run validate. Telemetry off.
README/AGENTS: single command, scope, structural ≠ semantic.
Local proof (pinned 1.13.1, Node 24.22.1): baseline 0; broken AI_INDEX target → 2; spec without scenarios → 1; invalid schema → 1; CLI 1.15.0 vs pin → 1 with reinstall hint; restored → 0. Validation does not write to the worktree.
CI proof below: disposable broken link must FAIL, revert → PASS.
Closes #2 (remaining AC after #72).
- `npm run validate` — one documented command: `check:openspec` (Node/.nvmrc, CLI = `openspec/.cli-version`, store usable) → `openspec schema validate` (all schemas) → `openspec validate --all --strict` (specs + active changes) → `lychee --offline --include-fragments` on root `*.md` (incl. AI_INDEX) + `openspec/specs`. Archives and external URLs not checked. No custom validator.
- CI `verify` installs the pinned CLI from `.cli-version`, `openspec store register .`, lychee 0.24.2 (sha256-pinned release, same pattern as gitleaks), then runs `npm run validate`. Telemetry off.
- README/AGENTS: single command, scope, structural ≠ semantic.
Local proof (pinned 1.13.1, Node 24.22.1): baseline 0; broken AI_INDEX target → 2; spec without scenarios → 1; invalid schema → 1; CLI 1.15.0 vs pin → 1 with reinstall hint; restored → 0. Validation does not write to the worktree.
CI proof below: disposable broken link must FAIL, revert → PASS.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Closes #2 (remaining AC after #72).
npm run validate— one documented command:check:openspec(Node/.nvmrc, CLI =openspec/.cli-version, store usable) →openspec schema validate(all schemas) →openspec validate --all --strict(specs + active changes) →lychee --offline --include-fragmentson root*.md(incl. AI_INDEX) +openspec/specs. Archives and external URLs not checked. No custom validator.verifyinstalls the pinned CLI from.cli-version,openspec store register ., lychee 0.24.2 (sha256-pinned release, same pattern as gitleaks), then runsnpm run validate. Telemetry off.Local proof (pinned 1.13.1, Node 24.22.1): baseline 0; broken AI_INDEX target → 2; spec without scenarios → 1; invalid schema → 1; CLI 1.15.0 vs pin → 1 with reinstall hint; restored → 0. Validation does not write to the worktree.
CI proof below: disposable broken link must FAIL, revert → PASS.