[P0] 04.specs. Добавить единый local verify и schema/spec validation в CI #2

Closed
opened 2026-09-13 15:34:04 +03:00 by codex-bot · 4 comments
Owner

Проблема

У specs нет repo-local verify и .gitea/workflows. README содержит отдельные команды native validation. Behavioral authority не имеет автоматической проверки собственных спецификаций и навигации.

Что сделать

Предоставить одну локальную проверку и вызвать её из CI. Runtime/toolchain принадлежит specs #4; ожидаемую версию OpenSpec получать из openspec/.cli-version, не из глобального latest.

Критерии готовности

  • В чистой среде доступна одна документированная команда schema/spec validation.
  • Проверяются фактическая версия CLI и store wealth-ledger-specs; mismatch даёт понятный FAIL.
  • Выполняются применимые native schema/spec checks; targets/anchors AI_INDEX и поддерживаемые относительные ссылки проверяются минимальным подходящим способом.
  • CI вызывает тот же local verify, фиксирует revision и даёт обратную связь на push/PR согласно main #2.
  • Намеренно сломанная schema/spec или проверяемая ссылка дают FAIL; исправленный контрольный пример проходит.
  • Проверка не создаёт planning artifacts, не изменяет specs/archives и не возвращает обязательный SDD lifecycle для обычных задач.
  • README точно описывает scope checks; structural validation не выдаётся за semantic review.

Основание и связи

README, CLI pin, сверка 14.09.2026. Required checks на сервере — отдельная specs #3. Локальный runner workspace — main #4.

## Проблема У specs нет repo-local verify и .gitea/workflows. README содержит отдельные команды native validation. Behavioral authority не имеет автоматической проверки собственных спецификаций и навигации. ## Что сделать Предоставить одну локальную проверку и вызвать её из CI. Runtime/toolchain принадлежит [specs #4](https://git.personal.ksv741.ru/WealthLedger/specs/issues/4); ожидаемую версию OpenSpec получать из openspec/.cli-version, не из глобального latest. ## Критерии готовности - [x] В чистой среде доступна одна документированная команда schema/spec validation. - [x] Проверяются фактическая версия CLI и store wealth-ledger-specs; mismatch даёт понятный FAIL. - [x] Выполняются применимые native schema/spec checks; targets/anchors AI_INDEX и поддерживаемые относительные ссылки проверяются минимальным подходящим способом. - [x] CI вызывает тот же local verify, фиксирует revision и даёт обратную связь на push/PR согласно [main #2](https://git.personal.ksv741.ru/WealthLedger/main/issues/2). - [x] Намеренно сломанная schema/spec или проверяемая ссылка дают FAIL; исправленный контрольный пример проходит. - [x] Проверка не создаёт planning artifacts, не изменяет specs/archives и не возвращает обязательный SDD lifecycle для обычных задач. - [x] README точно описывает scope checks; structural validation не выдаётся за semantic review. ## Основание и связи [README](https://git.personal.ksv741.ru/WealthLedger/specs/src/commit/50658ea8be85568995cc2b71568f9779452424b6/README.md), [CLI pin](https://git.personal.ksv741.ru/WealthLedger/specs/src/commit/50658ea8be85568995cc2b71568f9779452424b6/openspec/.cli-version), сверка 14.09.2026. Required checks на сервере — отдельная [specs #3](https://git.personal.ksv741.ru/WealthLedger/specs/issues/3). Локальный runner workspace — [main #4](https://git.personal.ksv741.ru/WealthLedger/main/issues/4).
codex-bot changed title from [P0] 04.specs. Добавить native schema/spec validation в CI to [P0] 04.specs. Добавить единый local verify и schema/spec validation в CI 2026-09-14 06:11:32 +03:00
ksv741 was assigned by codex-bot 2026-09-14 06:11:32 +03:00
codex-bot added the Kind/EnhancementKind/Testing
Priority
High
2
Reviewed
Confirmed
1
labels 2026-09-14 06:12:46 +03:00
Author
Owner

[Process] Audit supplement — meaningful committed CI input

Существующие user criteria/schema-navigation requirements и assignee сохраняются; текущий audit P2, historical title P0 не переписан. Не создаётся отдельный дубль CI задачи.

Problem

Нынешний verify=git diff --check в clean checkout читает пустой worktree/index diff, не PR/push commits. Setup-node/npm ci не добавляют content guarantee. Native/store expectations первоначальной задачи отдельно от whitespace proof.

Expected Behavior

Required verify проверяет actual committed range; native validation scope/toolchain явно определён в existing local guidance без custom validator.

Evidence

Audit date 2026-10-11; 11. IDs VERIFY-001, CA-H08. Revision fcdc805f6c1b3be6a20a7e858e3e80cbd83a9121; Confidence High; Verification status static.
Affected: verify.yml:13–22; package.json:8–14; README:18–35,52–55,68–70.

Scope

In scope

Meaningful Git range, history availability/zero SHA handling; existing native toolchain requirements routed to #4.

Out of scope

Удаление required context без replacement, новый script/validator framework, standard lifecycle edits, application gates.

Proposed Approach

PR merge-base→head, push before→after с определённым initial/zero-SHA fallback. Git-only verify job может убрать Node install после input proof; commits/security remain. Initial native requirements закрывать штатными commands, не объявлять whitespace semantic spec validation.

Acceptance Criteria

  • Committed trailing whitespace на disposable PR fails, corrected range passes; clean checkout no-op больше не даёт ложный proof.
  • Shallow/base availability, branch creation/zero SHA и local staged/new-file boundaries явно проверены/описаны.
  • Required verify context сохранён; Node removed из Git-only job лишь после consumer check, security/commits intact.
  • Native/version/store/index requirements existing issue имеют agreed scope и supplied local toolchain; no generated planning artifacts.

Verification

Disposable Git range positive/negative и native checks при actual requirements/schema change. No full application verify/build/tests.

Dependencies

#4 — только для исходных native toolchain criteria; Git-range fix независимо и не должен ждать CLI installation.

Traceability

Campaign WealthLedger/main#23 . Findings VERIFY-001, CA-H08. WealthLedger/specs; T32.

<!-- wealthledger-audit:2026-10-11:specs-ci-input --> # [Process] Audit supplement — meaningful committed CI input Существующие user criteria/schema-navigation requirements и assignee сохраняются; текущий audit P2, historical title P0 не переписан. Не создаётся отдельный дубль CI задачи. ## Problem Нынешний verify=git diff --check в clean checkout читает пустой worktree/index diff, не PR/push commits. Setup-node/npm ci не добавляют content guarantee. Native/store expectations первоначальной задачи отдельно от whitespace proof. ## Expected Behavior Required verify проверяет actual committed range; native validation scope/toolchain явно определён в existing local guidance без custom validator. ## Evidence Audit date `2026-10-11`; [11](https://git.personal.ksv741.ru/WealthLedger/main/src/commit/d07fbfabb1295780952a554185989d2d5b5c8349/audits/2026-10-11/reports/11-validation-and-ci-cd-efficiency-report.md). IDs VERIFY-001, CA-H08. Revision `fcdc805f6c1b3be6a20a7e858e3e80cbd83a9121`; Confidence High; Verification status static. Affected: [verify.yml:13–22](https://git.personal.ksv741.ru/WealthLedger/specs/src/commit/fcdc805f6c1b3be6a20a7e858e3e80cbd83a9121/.gitea/workflows/verify.yml#L13-L22); package.json:8–14; README:18–35,52–55,68–70. ## Scope ### In scope Meaningful Git range, history availability/zero SHA handling; existing native toolchain requirements routed to #4. ### Out of scope Удаление required context без replacement, новый script/validator framework, standard lifecycle edits, application gates. ## Proposed Approach PR merge-base→head, push before→after с определённым initial/zero-SHA fallback. Git-only verify job может убрать Node install после input proof; commits/security remain. Initial native requirements закрывать штатными commands, не объявлять whitespace semantic spec validation. ## Acceptance Criteria - [ ] Committed trailing whitespace на disposable PR fails, corrected range passes; clean checkout no-op больше не даёт ложный proof. - [ ] Shallow/base availability, branch creation/zero SHA и local staged/new-file boundaries явно проверены/описаны. - [ ] Required verify context сохранён; Node removed из Git-only job лишь после consumer check, security/commits intact. - [ ] Native/version/store/index requirements existing issue имеют agreed scope и supplied local toolchain; no generated planning artifacts. ## Verification Disposable Git range positive/negative и native checks при actual requirements/schema change. No full application verify/build/tests. ## Dependencies https://git.personal.ksv741.ru/WealthLedger/specs/issues/4 — только для исходных native toolchain criteria; Git-range fix независимо и не должен ждать CLI installation. ## Traceability Campaign https://git.personal.ksv741.ru/WealthLedger/main/issues/23 . Findings VERIFY-001, CA-H08. WealthLedger/specs; T32.
codex-bot added this to the Technical Audit Remediation — 2026-10-11 milestone 2026-10-11 21:54:44 +03:00
codex-bot added a new dependency 2026-10-11 21:54:46 +03:00
codex-bot added
Priority
Medium
3
audit/2026-10-11
and removed
Priority
High
2
Kind/Enhancement
labels 2026-10-11 21:55:07 +03:00
ksv741 was unassigned by hermes-agent 2026-10-12 00:04:34 +03:00
codex-bot was assigned by hermes-agent 2026-10-12 00:04:34 +03:00
hermes-agent added this to the WealthLedger — Delivery Board project 2026-10-12 00:04:34 +03:00
hermes-agent added Kind/Enhancement and removed Kind/Testing labels 2026-10-12 00:04:34 +03:00
Author
Owner

Progress (VERIFY-001 supplement) — PR #72.

  • verify теперь проверяет committed range: PR merge-base→head, push before→after, zero/absent before → последний коммит. Node/npm ci убраны из git-only job.
  • CI proof на PR #72: probe с trailing whitespace (ee1b188) → run 1815 verify FAIL (ci-probe.md:1: trailing whitespace); удаление (52c6e3d) → runs 1816–1818 PASS.
  • Push-ветка (before→after, zero-SHA) проверена локально на disposable repo; на CI подтвердится после merge в develop.

Остаётся открытым в #2: OpenSpec validation в CI (нужен CLI в runner) и проверка AI_INDEX targets/anchors.

Progress (VERIFY-001 supplement) — PR #72. - `verify` теперь проверяет committed range: PR merge-base→head, push before→after, zero/absent before → последний коммит. Node/npm ci убраны из git-only job. - CI proof на PR #72: probe с trailing whitespace (`ee1b188`) → run 1815 `verify` FAIL (`ci-probe.md:1: trailing whitespace`); удаление (`52c6e3d`) → runs 1816–1818 PASS. - Push-ветка (before→after, zero-SHA) проверена локально на disposable repo; на CI подтвердится после merge в develop. Остаётся открытым в #2: OpenSpec validation в CI (нужен CLI в runner) и проверка AI_INDEX targets/anchors.
Author
Owner

PR #72 squash-merged в develop как 7f73de7. Push run 1820 verify PASS, range 97f3585..7f73de7 — push-ветка (before→after) подтверждена на CI. Zero-SHA fallback подтверждён только локально (на CI сработает при первом push новой защищённой ветки).

Supplement VERIFY-001 выполнен. Issue остаётся открытой: OpenSpec validation в CI и проверка AI_INDEX targets/anchors.

PR #72 squash-merged в develop как `7f73de7`. Push run 1820 `verify` PASS, range `97f3585..7f73de7` — push-ветка (before→after) подтверждена на CI. Zero-SHA fallback подтверждён только локально (на CI сработает при первом push новой защищённой ветки). Supplement VERIFY-001 выполнен. Issue остаётся открытой: OpenSpec validation в CI и проверка AI_INDEX targets/anchors.
Author
Owner

Закрыто PR #73 (1fd7e6a, squash в develop) поверх #72 (7f73de7).

  • npm run validate: check:openspec → openspec schema validate → openspec validate --all --strict --store wealth-ledger-specs → lychee 0.24.2 --offline --include-fragments (корневые *.md вкл. AI_INDEX, openspec/specs; архивы и внешние URL — вне scope).
  • CI verify: whitespace по committed range, затем pinned CLI из .cli-version + store register . + sha256-pinned lychee → npm run validate.
  • Local (CLI 1.13.1): baseline 0; битая ссылка AI_INDEX 2; spec без scenarios 1; invalid schema 1; CLI 1.15.0 ≠ pin → 1 с подсказкой reinstall. Чистый HOME без store → понятный FAIL Unknown store.
  • CI PR #73: baseline run 1823 PASS (34 specs/changes, 28 links); битая ссылка run 1826 FAIL (portfolio-viewX/spec.md File not found); revert run 1829 PASS. Push develop runs 1830/1831 PASS.

Ограничение: lychee проверяет только локальные ссылки и anchors; semantic review по-прежнему ручной.

Закрыто PR #73 (`1fd7e6a`, squash в develop) поверх #72 (`7f73de7`). - `npm run validate`: `check:openspec` → `openspec schema validate` → `openspec validate --all --strict --store wealth-ledger-specs` → `lychee 0.24.2 --offline --include-fragments` (корневые `*.md` вкл. AI_INDEX, `openspec/specs`; архивы и внешние URL — вне scope). - CI `verify`: whitespace по committed range, затем pinned CLI из `.cli-version` + `store register .` + sha256-pinned lychee → `npm run validate`. - Local (CLI 1.13.1): baseline 0; битая ссылка AI_INDEX 2; spec без scenarios 1; invalid schema 1; CLI 1.15.0 ≠ pin → 1 с подсказкой reinstall. Чистый HOME без store → понятный FAIL `Unknown store`. - CI PR #73: baseline run 1823 PASS (34 specs/changes, 28 links); битая ссылка run 1826 FAIL (`portfolio-viewX/spec.md File not found`); revert run 1829 PASS. Push develop runs 1830/1831 PASS. Ограничение: lychee проверяет только локальные ссылки и anchors; semantic review по-прежнему ручной.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Reference: WealthLedger/specs#2