From 1fd7e6ad974193eca3390cf41749368c5c318858 Mon Sep 17 00:00:00 2001 From: codex-bot Date: Mon, 2 Nov 2026 21:06:17 +0300 Subject: [PATCH] ci: run native OpenSpec and local link validation in verify (WealthLedger/specs#2) npm run validate: toolchain check, openspec schema validate, openspec validate --all --strict, lychee --offline --include-fragments for root *.md and openspec/specs. CI verify installs the pinned CLI and sha256-pinned lychee and runs it. Closes #2 --- .gitea/workflows/verify.yml | 17 +++++++++++++++++ AGENTS.md | 5 +++-- README.md | 20 ++++++++++++-------- package.json | 1 + 4 files changed, 33 insertions(+), 10 deletions(-) diff --git a/.gitea/workflows/verify.yml b/.gitea/workflows/verify.yml index d793b91..6d57f80 100644 --- a/.gitea/workflows/verify.yml +++ b/.gitea/workflows/verify.yml @@ -34,3 +34,20 @@ jobs: fi echo "Checked revision: $(git rev-parse HEAD); range: $range" git diff --check "$range" + - uses: https://github.com/actions/setup-node@v4 + with: + node-version-file: .nvmrc + - name: Install pinned OpenSpec CLI and lychee 0.24.2 + run: | + npm install -g "@fission-ai/openspec@$(cat openspec/.cli-version)" + openspec store register . + curl --fail --location --silent --show-error https://github.com/lycheeverse/lychee/releases/download/lychee-v0.24.2/lychee-x86_64-unknown-linux-gnu.tar.gz -o /tmp/lychee.tar.gz + echo '1f4e0ef7f6554a6ed33dd7ac144fb2e1bbed98598e7af973042fc5cd43951c9a /tmp/lychee.tar.gz' | sha256sum --check + tar -xzf /tmp/lychee.tar.gz -C /tmp + echo /tmp/lychee-x86_64-unknown-linux-gnu >> "$GITHUB_PATH" + env: + OPENSPEC_TELEMETRY: '0' + - name: Validate schemas, specs, changes and local links + run: npm run validate + env: + OPENSPEC_TELEMETRY: '0' diff --git a/AGENTS.md b/AGENTS.md index e94218f..dfe3b43 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -14,8 +14,9 @@ HTTP-провайдер публикует контракт, а потребит и локально проверяет generated types. Specs фиксируют behavioral requirements; другие checkout не нужны для чтения и native validation этого store. -Архивы и чужие active changes сохраняй. Для правки индекса проверь targets, -anchors и `git diff --check`; application gates принадлежат affected repos. +Архивы и чужие active changes сохраняй. Для правки индекса или specs выполни +`npm run validate` (targets/anchors, native checks) и `git diff --check`; +application gates принадлежат affected repos. Если явно запрошена работа через OpenSpec, следуй [локальным инструкциям OpenSpec](README.md#начало-работы) и используй store `wealth-ledger-specs`. Перед Node-командами активируй diff --git a/README.md b/README.md index f30829e..00f3cf8 100644 --- a/README.md +++ b/README.md @@ -18,14 +18,18 @@ OpenSpec применяется после явного решения Change Ow Для native validation из этого репозитория: ```bash -npm run check:openspec -openspec schema validate wealth-ledger-sdd --verbose -openspec schema validate wealth-ledger-sdd-v2 --verbose -openspec status --change --store wealth-ledger-specs -openspec validate --type change --strict --store wealth-ledger-specs -openspec validate --specs --strict --store wealth-ledger-specs +npm run validate ``` +Одна команда, её же вызывает CI `verify`: `check:openspec` (Node, версия CLI, +store), `openspec schema validate` (все schemas), `openspec validate --all --strict` +(specs и active changes) и [lychee](https://lychee.cli.rs/) 0.24.2 `--offline +--include-fragments` для относительных ссылок и anchors в корневых `*.md` +(включая `AI_INDEX`) и `openspec/specs`. Архивы и внешние URL не проверяются. +В чистой среде один раз: `openspec store register .`; lychee ставится +отдельно (например, `brew install lychee`). Для отдельного change: +`openspec status --change --store wealth-ledger-specs`. + OpenSpec CLI ставится глобально и не закрепляется в `package.json`: его транзитивная зависимость `braces` имеет advisory без исправления в 3.x. Ожидаемая версия хранится в `openspec/.cli-version`; `npm run check:openspec` проверяет Node из `.nvmrc`, версию @@ -36,8 +40,8 @@ Node задаётся собственной `.nvmrc`; после `nvm use --sil `npm run verify` локально проверяет whitespace в незакоммиченном diff; CI `verify` выполняет тот же `git diff --check` по коммитам PR (merge-base→head) или push (before→after, для новой ветки — последний коммит). Это структурная проверка -whitespace, не semantic spec validation. OpenSpec validation остаётся отдельной -проверкой при изменениях требований. История релизов — [CHANGELOG](CHANGELOG.md). +whitespace. Ни whitespace, ни structural validation не заменяют semantic review. +История релизов — [CHANGELOG](CHANGELOG.md). ## Релизы diff --git a/package.json b/package.json index 8dcf31d..7d7efe0 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "scripts": { "verify": "git diff --check", "check:openspec": "node scripts/check-openspec.cjs", + "validate": "npm run check:openspec && openspec schema validate && openspec validate --all --strict --no-interactive --store wealth-ledger-specs && lychee --offline --include-fragments --no-progress './*.md' openspec/specs", "release:preview": "release-it --dry-run --ci", "release:prepare": "release-it --ci", "commitlint": "commitlint",