Files

20 KiB
Raw Permalink Blame History

Context

WealthLedger использует project-local OpenSpec schema поверх CLI 1.10.0, canonical store в отдельном specs-репозитории и project-owned OpenCode entrypoints в unversioned workspace root. Schema уже задаёт последовательный artifact graph, а repository scripts защищают store authority, Delivery Map и terminal verification. Однако planning quality до Apply проверяется неравномерно, Tasks не имеют машиночитаемой связи с requirements и delivery areas, а root agent projection проверяется только как локально существующее состояние и не восстанавливается из четырёх Git-репозиториев.

Custom schema API остаётся experimental, поэтому совместимость нельзя безопасно выводить только из SemVer. Root workspace не является Git-репозиторием; versioned authority для новых guardrails и projection recovery должен принадлежать specs, а as-built policy, audit snapshots и dispositions — docs. Других active OpenSpec changes нет. Этот change создан по schema version 1, поэтому его собственные Tasks должны вручную соответствовать утверждённому v2 contract до того, как Apply сделает этот contract default для будущих changes.

Goals / Non-Goals

Goals:

  • сделать planning structure, task ownership и requirement coverage детерминированно проверяемыми до Apply;
  • восстановить project-owned agent workflow из versioned inputs и обнаруживать drift derived projection;
  • сохранить один exact supported CLI contract, пригодный для контролируемого будущего upgrade;
  • распределить guidance между schema, config, durable policy и verifiers без конкурирующих источников;
  • сохранить все source assessments и нормализовать их claims с доказательными dispositions;
  • сохранить пропорциональность workflow и существующие human approval gates.

Non-Goals:

  • обновление OpenSpec CLI в этом change;
  • изменение frontend, backend, runtime API или deployment behavior;
  • универсальная схема для других проектов, Fast Track или второй lifecycle;
  • собственный workflow engine, identity/signature system для approvals или общий dependency scheduler для changes;
  • автоматическое доказательство смысловой полноты Proposal, Specs или Design;
  • новые review, completion, blocker, revision либо traceability artifacts.

Decisions

1. Native schema v2 остаётся workflow engine

wealth-ledger-sdd повышается до version 2, сохраняя граф Proposal → Delta Specs → Design → Tasks → Apply. Изменяется contract существующих artifacts, а не их число. Schema и templates задают обязательную форму Tasks, условный rollback contract, stage validation guidance, полный feedback path и компактные примеры сложных delta operations. Minimal spec template остаётся ориентированным на ADDED; неиспользуемые delta sections не генерируются как пустые placeholders.

Artifact approval остаётся человеческим фактом разговора. File existence и CLI status продолжают означать только structural state. Форматное исправление, не меняющее approved semantics, повторяет structural checks без каскадного reapproval; любое изменение intent, behavior, architecture или task scope возвращает workflow к самому раннему затронутому artifact и инвалидирует его downstream approvals.

2. Guidance имеет явных владельцев

Ответственность разделяется так:

Surface Authority
schema instructions artifact semantics, native syntax и workflow behavior
templates только форма создаваемого Markdown
config context стабильные факты workspace и язык project artifacts
config rules только краткие additive project constraints, отсутствующие в schema
governance и ADR durable rationale, ownership и upgrade policy
non-mutating verifiers Enforceable Engineering Invariants

Текущие config rules, дословно повторяющие schema, удаляются или сокращаются; произвольный _rules.md не вводится. Project explanations пишутся по-русски, а OpenSpec tokens, headings, commands и normative keywords сохраняются в их точной английской форме.

3. Planning verifier отделён от full delivery dispatcher

specs получает один stage-aware non-mutating planning verifier. Он разрешает change через canonical store и применяет только доступные на текущем этапе checks:

  • Proposal — metadata, обязательную структуру и разрешимость declared existing capability paths;
  • Delta Specs — strict change validation и соответствие capability set Proposal;
  • Design — Delivery Map, Contract Gate Decision и rollback decision;
  • Tasks — checkbox shape, area ownership, canonical gate coverage и точные requirement references, включая explicit N/A rationale.

Verifier не пытается машинно оценивать качество мотивации, архитектурного rationale или semantic correctness. Full workspace dispatcher вызывает его перед affected-area gates, а artifact entrypoints запускают доступный stage до запроса approval. Проверяемая логика получает compliant fixtures и representative failures для uncovered requirement, invalid area, malformed rollback decision и projection/version drift. Существующие parsers Delivery Map переиспользуются либо извлекаются, а не дублируются вторым несовместимым разбором.

4. Tasks используют area owner и встроенную coverage metadata

Каждый checkbox использует формат X.Y [area] action, где area — ровно одна из frontend, backend, specs, docs, workspace. Следующие indented metadata lines содержат:

  • Covers: одна или несколько пар capability path — exact Requirement heading либо N/A — concrete reason;
  • Verification: planned command, observable check или delivered artifact.

OpenSpec продолжает отслеживать progress по checkbox line, а planning verifier связывает последующие metadata lines с ближайшим checkbox. Cross-repository implementation разбивается по repository owners; workspace используется только для orchestration и verification. Requirement heading остаётся native identity OpenSpec; дополнительный ID namespace не создаётся.

5. Root agent projection получает versioned canonical source

Текущие project-owned commands и skills импортируются как canonical source tree под specs/agent-projection/opencode. Package manifests, installed dependencies и machine-local runtime state не входят в source. Явная sync команда атомарно обновляет соответствующие каталоги root .opencode, а отдельный non-mutating verifier сравнивает required file set и contents с canonical source.

На upgrade новая upstream projection сначала создаётся в isolated staging. Upstream delta и минимальные WealthLedger overlays — fixed store, one-artifact-at-a-time approvals, feedback path и hard archive blockers — переносятся в canonical source, после чего sync обновляет root derived output. Authority verifier получает expected version из единственного version contract и проверяет совпадение каждого required generated marker. Concrete CLI version не закрепляется в verifier logic или fixtures независимо от contract.

Canonical source tree выбран вместо:

  • patch set: меньше committed content, но patches хрупки к upstream text churn;
  • custom generator: устраняет дублирование, но создаёт новый transformation engine и повышает maintenance cost;
  • symlink: устраняет copy drift, но связывает agent discovery с filesystem и tool-specific symlink behavior;
  • manual staging only: сохраняет текущую простоту, но не обеспечивает recovery из clean checkouts.

6. Rollback contract является условной частью Design

Design template получает внутри Migration Plan структурированный rollback decision. Для auth/security, data integrity или migration, public contract и других труднообратимых решений status required раскрывает trigger, actions, data safety и verification. Для остальных changes status N/A требует конкретной причины. Отдельный rollback artifact не создаётся.

У этого change rollback contract имеет status N/A: application data, security behavior и public contracts не меняются, а committed specs/docs обратимы через Git. Initial projection cutover выполняется атомарно и сохраняет предыдущее local derived state до успешного verification, чтобы failed sync не оставил частично обновлённый workspace.

7. Multi-source assessment хранит raw evidence и отдельный triage

Пять исходных model reports переносятся byte-for-byte в один dated audit snapshot set под docs/audits; index обозначает их как external, non-authority claims и фиксирует checksums. После проверки совпадения исходная unversioned папка удаляется, чтобы не оставить competing copy.

Live registry получает нормализованные Audit IDs. Повторяющиеся claims имеют одну запись со ссылками на все sources. Triage disposition confirmed | already-covered | rejected | deferred хранится отдельно от remediation status. Confirmed findings этого scope связываются с текущим active change; already-covered получают existing evidence; rejected — rationale; deferred — review trigger. Следующим planned remediation после завершения этого change снова становится ранее выбранная auth platform assessment.

8. Version contract фиксирует совместимость, а не вечную версию

Текущая exact version остаётся неизменной. Появление новой stable версии не блокирует delivery и не меняет contract автоматически. Future upgrade является отдельным SDD change и проходит staged projection comparison, schema/status/ instructions compatibility, canonical-store checks, disposable lifecycle и positive/negative authority fixtures. Historical archives и Completion Evidence сохраняют фактические версии своих запусков.

Delivery Map

Area Status Architectural outcome or N/A reason
frontend N/A Change не меняет frontend behavior, source, contract или canonical gate.
backend N/A Change не меняет backend behavior, source, contract или canonical gate.
specs affected Schema v2, planning/projection guardrails, canonical agent source и нормативные lifecycle requirements образуют единый проверяемый SDD contract.
docs affected Immutable multi-source audit, dispositions, governance, lifecycle documentation и ADR отражают поставленную SDD-систему.

Contract Gate Decision

Gate Status Reason
runtime-openapi N/A Change не затрагивает backend runtime API, frontend generated client или committed OpenAPI snapshot.

Solution Assessment

Change существенно меняет общую project tooling infrastructure, поэтому сравнение alternatives обязательно.

Workflow enforcement

Option Fit и maturity Security / operating cost Constraints / migration cost Decision
Native OpenSpec schema/config + thin project verifiers Полностью сохраняет canonical artifact graph; используемые extension points уже работают в 1.10, хотя schema API experimental Local-only, без новых secrets/services; низкая стоимость поверх существующих gates Требует exact compatibility contract и fixtures при upgrade; incremental migration Selected
Prompt/docs-only conventions Markdown mature и дёшев, но не отклоняет нарушения Низкая стоимость, высокий риск silent drift Не выполняет требования machine validation и reproducibility Rejected
Собственный workflow engine Максимальный theoretical fit, но custom maturity отсутствует Новый privileged control surface и высокая постоянная стоимость Дублирует OpenSpec lifecycle, требует migration всех entrypoints и state Rejected
Общая monorepo/CI platform Зрелые продукты существуют, но workspace не имеет общего build/dependency graph и CI Существенная installation и operating cost Не решает approval semantics или audit traceability сама по себе Rejected

Projection recovery

Option Fit и maturity Operating cost Main constraint Decision
Versioned canonical source tree + sync/check Простая file projection с детерминированным сравнением Низкая; около 115 KB source Markdown Source и derived copy должны проверяться на drift Selected
Versioned overlay patches Компактно Средняя/высокая при каждом upstream text change Patch fragility Rejected
Programmatic overlay generator Гибко Высокая; собственная transformation logic Риск второго workflow engine Rejected
Symlink в specs-owned tree Минимум duplication Низкая локально Tool/filesystem portability и смешение machine-local package state Rejected

Выбранный вариант не реализует OpenSpec behavior самостоятельно: native CLI остаётся engine, а project scripts только синхронизируют derived files и проверяют детерминированные инварианты.

Risks / Trade-offs

  • Canonical source и derived projection дублируют Markdown. Drift блокирует verifier; изменения вносятся только в source и распространяются explicit sync-командой.
  • Markdown parser может стать хрупким. Машиночитаемые prefixes и metadata намеренно узкие, fixture suite покрывает compliant и representative invalid inputs, а semantic review остаётся отдельным gate.
  • Traceability создаёт ложное ощущение semantic coverage. Verifier подтверждает наличие ссылок, но semantic verification и independent review продолжают проверять полноту реализации.
  • Форматное исключение может скрыть semantic edit. Оно ограничено ошибками, не меняющими intent, behavior, decisions или tasks; сомнение возвращает artifact на обычный reapproval path.
  • Schema instructions могут разрастись. Duplicate config rules удаляются, examples остаются короткими, а final instruction size сравнивается с baseline без жёсткого token threshold.
  • Raw model reports могут выглядеть authoritative. Snapshot index и registry явно разделяют source claims, triage evidence и project authority.
  • Initial source-tree bootstrap не имеет прежней versioned baseline. Sync сохраняет local pre-cutover state до успешного gate; после поставки все дальнейшие projection versions становятся восстановимыми через Git history.
  • Future OpenSpec release может изменить experimental interfaces. Exact contract блокирует silent adoption, а отдельный upgrade change выполняет staged compatibility assessment.

Migration Plan

  1. Ввести canonical projection source и non-mutating planning/projection checks, подтвердив compliant и controlled-invalid fixtures до переключения schema.
  2. Обновить schema, templates, config и canonical agent source до v2 contract; собственные Tasks этого change оформить уже в новом формате.
  3. Атомарно синхронизировать root derived projection и отклонить delivery при любом content/version drift.
  4. Перенести raw assessments в immutable indexed snapshot, проверить byte-for-byte equality, удалить unversioned copy и обновить live registry.
  5. Обновить governance, lifecycle docs и ADR до фактической архитектуры, затем выполнить specs/docs gates, semantic verification и independent review.

Rollback Contract

Field Decision
Status N/A
Reason Change не меняет application data, security behavior или public contracts; committed state обратим через Git, а projection является derived output с atomic cutover.
Failed cutover handling Sync восстанавливает сохранённое pre-cutover local state и не объявляет source/projection согласованными.
Verification Planning, projection, authority, strict OpenSpec и docs gates должны снова подтвердить выбранное состояние.