name: openspec-extend-change description: Controlled scope extension for an existing OpenSpec change. user-extend (brief + confirm) or repair-from-verify (internal, silent). license: MIT compatibility: Does not call writer/reviewer and never edits BSL/XML metadata. May delegate read-only analysis to onec-code-architect / onec-code-explorer when gates require it. metadata: author: project version: "1.1"
Контролируемо расширить или пересмотреть scope существующего OpenSpec change по новому требованию, отчёту ревью, debug/RCA, verify-отчёту, архитектурному отчёту или итогу /opsx:explore.
Extend правит только артефакты change: proposal.md, design.md, specs/**, tasks.md, debug.md, reports/**. Код BSL, XML метаданных и реализация остаются за /opsx:apply.
Режимы (user-extend vs repair-from-verify)
| Режим | Триггер | Бриф | Сообщение в чат |
|---|---|---|---|
| user-extend | /opsx:extend от пользователя; --from-verify после decision 3a |
T-BRIEF + «Подтвердить?» | Handoff на языке эффекта + hint /opsx:verify <name> |
| repair-from-verify | internal из verify Repair Loop (apply_repairs_from_report) |
SKIP | нет — вызывающий verify продолжает loop |
repair-from-verify: без Entry Protocol, без lite-брифа, без «Подтвердить?»; сразу §6 Artifact update rules по remediation из отчёта verify; запись в debug.md; 0 строк в чат.
user-extend с --from-verify после decision: бриф B2 (delta extend) + «Подтвердить?» → после правок handoff на языке эффекта.
Chat Surface Contract — §2.6 opsx-output-style.md.
Input (free-form)
Пользователь может передать:
<change-name>— имя change. Если не указано, определить поopenspec list --json; при неоднозначности —AskQuestion.- Текст нового требования / пересмотра / замечания.
- Ссылки на файлы в любом виде:
@path/to/file.md- относительный или абсолютный путь
--from-review <path>— отчёт/review--from-debug <path>—debug.mdили RCA-отчёт--from-verify <path>— отчёт/opsx:verify--from-architecture <path>— отчёт архитектора--from-report <path>— итог/opsx:explore:temp/reports/<тип>-YYYY-MM-DD-<slug>.md(полный отчёт trace-analyst / explorer / architect) илиtemp/explore-handoff-*.md(опциональный handoff с блоком## Постановка ЗНИ)--from-explore <path>— legacy-источники, только по явной ссылке пользователя:temp/explore-summary-*.md,openspec/sessions/<slug>/analysis.md(RCA, рецепт, fix-задачи). Новые файлы этих форматов не создаются--code-sync— штатная синхронизация OpenSpec-артефактов с фактическим кодом после ручного упрощения, writer/apply или Code-Truth Gate (phantom-symbol, устаревшие имена процедур, drift design/tasks/debug).
Если текст требования отсутствует, но указан файл — извлечь намерение из файла и показать в брифе. Если намерение неоднозначно — спросить пользователя после брифа, до правок.
Output style:
Стиль вывода в чат (брифы, сводки) — см. .cursor/docs/opsx-output-style.md §2.5 «Человеческий слой». Развилки/блокеры с выбором — всегда по единому контракту .cursor/docs/templates/decision-block.md (блок «Что решить» + триада, суть inline; формулировки синтезированы по §1c, не скопированы из артефакта; голый код решения и непереведённая англ-метка запрещены, §1b.8 / §1c chat-output-budget.mdc).
Entry Protocol (MANDATORY для user-extend)
repair-from-verify: Entry Protocol пропускается — сразу §6 Artifact update rules.
Первый шаг команды user-extend:
- Прочитать этот
SKILL.md(Command → Skill,session-discipline.mdc). - Определить change:
- если
<change-name>указан — использовать его; - иначе выполнить
openspec list --jsonи выбрать активный / спросить пользователя.
- если
- Выполнить
openspec instructions apply --change "<name>" --json. - Прочитать
openspec/project.mdи артефакты change изcontextFiles:proposal.md,design.md,tasks.md,specs/**при наличии; для расширения scope также прочитатьdebug.md(если есть) — нужен для счётчика Scope Coherence Audit и записей## Extend. - Прочитать только явно переданные source-файлы (
--from-*,@path, пути в запросе). Трассы — через/opsx:explore(профиль bug).--from-reportпринимает (приоритет):temp/reports/<тип>-YYYY-MM-DD-<slug>.md(отчётTaskиз Ultra-Lite explore),temp/explore-handoff-*.md(handoff с блоком## Постановка ЗНИ); legacy-файлы — только через--from-exploreпо явной ссылке пользователя. Если указан--code-sync, source = артефакты change +debug.md+ отчётыreports/**+ результаты Code-Truth Gate; чтение BSL/XML до брифа всё равно запрещено. 5a. KB Discovery (internal): прочитатьopenspec/knowledge/_index.yamlи при необходимости_taxonomy.yamlи выбранные KB.md— по алгоритму Entry Protocol шаг 1.6 (KB Discovery).cursor/skills/openspec-explore/SKILL.md(anchor-paths из путей в уже прочитанных артефактах и source-файлах; бюджет Top-10). Результат — не в чат, только для промптов architect/explorer после «да». 5b. Brief Depth Classifier —.cursor/docs/opsx-output-style.md§5.1 (B1 по умолчанию; B2 при drift/decision/--code-sync/--from-review>3 findings/--from-verifyпосле decision; никогда B3). - Сформировать и показать бриф extend (B1 или B2) по шаблону ниже.
- END TURN. До подтверждения пользователя запрещены: запись артефактов, вызовы writer/reviewer, вызовы architect/explorer, чтение BSL/XML для анализа логики.
Разрешённые действия до брифа: чтение этого скилла, openspec list --json, openspec instructions apply --json, чтение project.md, чтение артефактов change, чтение явно переданных markdown/text/source-report файлов, чтение openspec/knowledge/_index.yaml / _taxonomy.yaml и выбранных KB .md (шаг 5a, internal).
Шаблон брифа (T-BRIEF)
SSOT: .cursor/docs/templates/brief-card.md (классификатор — opsx-output-style.md §5.1). Заголовок: Бриф: <change-name>. Файлы temp/briefs/*.md не создаются.
Чат-бриф extend = B1 или B2 (классификатор шаг 5b). Слоты:
| Уровень | Слоты в чате |
|---|---|
| B1 | Изменение (+ опц. Затронутое) + Подтвердить? |
| B2 | Изменение + Почему выбор + Варианты (нумерованный список) + Подтвердить? (ответ по номеру; голый «да» не принимается) |
Бюджет содержания — brief-card.md (≤6 слотов, ~30 сек).
Запрещено в чат-брифе extend: Что понял; слот План с перечислением артефактов; Как буду искать; Бриф для исследования; Drift-check:; proposal.md / design.md как план шагов; варианты A/B буквами.
Внутренние блоки (до брифа, в чат НЕ попадают — в debug.md § Extend после подтверждения):
# (internal, не в чат)
Предлагаемое изменение артефактов: proposal.md / design.md / specs/** / tasks.md / debug.md — что и где.
Соответствие исходному scope:
- Усиливает пункт Why: …
- Затрагивает Non-Goals: yes / no
- Меняет Behavior Contract: yes / no
- Отменяет архивный инвариант: yes / no
- Drift-check: pass / drift-warning / scope-violation
План после подтверждения (internal):
1. Уточнить неоднозначности при необходимости
2. Проверить гейты архитектуры и факты в коде
3. При --code-sync — делегировать исследователя кода → reports/exploration-code-sync-YYYY-MM-DD.md
4. Обновить артефакты change
5. Hint /opsx:verify <name>
Если extend вызван internal repair-from-verify — B0, бриф не показывается, правки сразу по §6.
Если extend вызван user-extend с --from-verify после decision — B2: только delta extend («что допишем в постановку по вашему ответу»), не повтор verify-карточки.
Матрица входов → уровень брифа:
| Флаг / вход | Уровень |
|---|---|
--code-sync |
B2 (всегда) |
--from-review с >3 findings |
B2 (сводка + приоритет в развилке A/B) |
--from-verify после decision |
B2 |
| Конкретное уточнение, drift pass | B1 |
drift-warning / scope-violation |
B2 |
Self-check перед выводом: уровень B1/B2 по классификатору; слоты по brief-card.md; UX-поля без S<N>.T<M> / D<N>; блок «Соответствие исходному scope» и План после подтверждения заполнены внутренне, в чат не выводятся; rg-HALT: нет Как буду искать, Что понял, Бриф для исследования.
Развилки в чате после брифа: любые варианты выбора до или после подтверждения (AskQuestion, неоднозначный Drift-check и т.п.) — слот Варианты нумерованным списком 1. 2. 3. (как в entry-брифе B2), приглашение ответить номером варианта. Коды <N>a / <N>b / A/B в чате запрещены. Варианты в чате, не только в длинном теле брифа.
Соответствие исходному scope — критерии заполнения (оркестратор)
Источник правды: текущие proposal.md (## Why, ## What Changes) и design.md (## Behavior Contract, ## Goals / Non-Goals).
Затрагивает Non-Goals: yes — предлагаемое изменение явно описывает или подразумевает действие, перечисленное или запрещённое в ## Non-Goals design.md.
Меняет Behavior Contract: yes — предлагается добавить новый пункт в ## Behavior Contract, удалить существующий пункт или изменить формулировку пункта так, что меняется наблюдаемое поведение (не просто уточнение терминологии).
Drift-check:
pass— ответ no по Non-Goals и Behavior Contract и «Отменяет архивный инвариант: no» и «Усиливает пункт Why» указывает конкретный пункт## Why(не «не относится напрямую»).drift-warning—Затрагивает Non-Goals: yesилиМеняет Behavior Contract: yesили «Усиливает пункт Why: не относится напрямую» или осознанное расширение при сохранении архивных контрактов (Behavior Contract меняется, но инвариант не отменяется — пояснить в брифе).scope-violation— любое из: оркестратор не находит ни одного пункта Why, который усиливается предлагаемым изменением, и при этом хотя бы одно из полей Non-Goals / Behavior Contract = yes; илиОтменяет архивный инвариант: **yes**при отсутствии заполненной секции## Blast Radiusвdesign.md(нет таблицы контракт / источник / бизнес-эффект / альтернативы / обоснование). В этом случае не использоватьdrift-warning— толькоscope-violation.
Если классификация неоднозначна до подтверждения брифа — AskQuestion с тремя вариантами итогового Drift-check: pass / drift-warning / scope-violation; результат отразить в брифе.
Per-turn Delegation Gate
На каждом follow-up ходе:
- Если запрос требует обследования кода, трассировки вызовов, проверки метаданных или анализа 3+ модулей — не читать
.bsl/XML самостоятельно. - Сформировать бриф и делегировать:
onec-code-explorer— для обследования кода;onec-code-architect— для выбора/пересмотра подхода;onec-trace-analystне используется в extend; трассы перенаправлять в/opsx:explore(профиль bug).
- До делегирования допустимо читать только OpenSpec-артефакты и явно переданные отчёты.
Source File Classification
После чтения явно переданных файлов классифицировать источник:
| Source | Признаки | Что извлекать |
|---|---|---|
review |
review-*.md, code-review-*.md, секции Findings, Action, Type, Severity |
findings, disposition, ARCHITECTURE, MUST_FIX, противоречия design, пути/anchors |
debug |
debug.md, trace-analysis-*, RCA, Verified facts, Hypotheses, Root cause |
verified facts, hypotheses, root cause, target slice |
verify |
verification-*.md, классы Repair Loop (decision / artifact-hygiene), CRITICAL/WARNING/SUGGESTION (legacy-маркер Phase B) |
decision cards, scope/design/task issues, recommended remediation |
architecture |
architecture-*.md, architecture-review-* |
рекомендуемые изменения design/spec/tasks/ADR, alternatives |
explore |
legacy-источники только по явной ссылке пользователя (explore-summary-*, Explore Summary, Decisions, Open questions) |
сформулированные требования, slice hints, unresolved questions |
report |
temp/reports/<тип>-*.md (trace-analyst / explorer / architect), temp/explore-handoff-*.md (блок ## Постановка ЗНИ) |
root cause, verified facts, рецепт, задачи для debug.md и tasks.md, slice placement |
code-sync |
флаг --code-sync, phantom-symbol, расхождения design/tasks/debug с фактическим кодом |
фактические символы, устаревшие рецепты, какие артефакты догнать до кода |
other |
markdown/text без явных маркеров | факты и open questions; если непонятно — AskQuestion |
Если файл содержит несколько типов (например raw review + reasoning appendix) — извлечь все, но в брифе отделить факты от рекомендаций.
Workflow Steps
1. Resolve change
- Проверить, что
openspec/changes/<name>/существует и не находится вarchive/. - Если change не найден — спросить пользователя или предложить
/opsx:new <name>. - Вывести
Using change: <name>и способ переопределения.
2. Load context
- Прочитать
proposal.md,design.md,tasks.md,specs/**,debug.md(если существует). - Прочитать
openspec/project.mdи извлечь пути cf/cfe (для возможного architect/explorer). - Прочитать явно переданные source-файлы.
- Не читать BSL/XML для анализа логики на этом шаге.
3. Prepare and show brief
- Сопоставить вход с текущим scope change.
- Определить тип изменения:
- новое требование;
- уточнение существующего требования;
- пересмотр архитектурного решения;
- постановочный дефект по результатам review/debug/verify;
- перенос open question в решение.
- Для
--code-sync: перечислить потенциальные drift-точки без чтения BSL/XML: имена процедур изtasks.md/debug.md, отчёты writer/reviewer/explorer, файлыsrc/**, которые потребуется прочитать черезonec-code-explorerпосле подтверждения. - Заполнить блок «Соответствие исходному scope» по критериям из секции под шаблоном T-BRIEF (сопоставить предлагаемые изменения с
## Why,## Non-Goals,## Behavior Contract). - Показать бриф и остановиться до подтверждения.
4. Ambiguity Gate
После подтверждения, но до правок, задать AskQuestion, если неясно:
- менять существующий
Requirementили добавить новый; - inside-slice, fix-срез или новый срез;
- принимать рекомендацию review/architecture или оставить как rejected/deferred;
- требуются ли изменения specs;
- считать source finding дефектом кода, постановки или ложным срабатыванием.
5. Architect Gate
Проверить .cursor/rules/architect-gate.mdc.
5a. Scope Coherence Audit (режим scope-coherence-audit)
Цель — обнаружить расползание ЗНИ (scope drift) до дорогого /opsx:verify. Отчёт: reports/architecture-extend-coherence-YYYY-MM-DD.md. Шаблон промпта: .cursor/skills/1c-agent-patterns/architect.md, секция Architect — scope coherence audit (extend).
Триггер 1 (семантический, из брифа): в блоке «Соответствие исходному scope» зафиксирован Drift-check: drift-warning или Drift-check: scope-violation.
Триггер 2 (объективный, счётчик Extend без архитектора):
Выполнить по
openspec/changes/<name>/debug.md:rg -c "Architect Gate:\\s*(не вызывался|не требовался|declined|—)" debug.mdОбозначить результат как M.
Выполнить
Globпоopenspec/changes/<name>/reports/architecture-extend-coherence-*.md.Триггер 2 срабатывает, если M ≥ 3 и выполняется одно из условий:
- файлов
architecture-extend-coherence-*.mdнет; - или дата из заголовка последней секции
## Extend — YYYY-MM-DDвdebug.md(парсинг ГГГГ-ММ-ДД из строки заголовка) строго новее даты из имени новейшего файлаarchitecture-extend-coherence-*.md(по дате в суффиксе имени).
- файлов
Примечание: M — число строк в debug.md, где поле Architect Gate: совпадает с шаблоном «Extend без архитектора» (маркеры выше); это приближение к числу секций ## Extend —, после которых архитектор не вызывался.
Триггер 3 (объективный, петля приёмки — зеркало verify Layer 2.5):
Цель — поймать петлю до дорогого /opsx:verify, пока пользователь ещё в /opsx:extend. Метрика и порог — SSOT .cursor/rules/vertical-slices.mdc § ДЕТЕКТОР ПЕТЛИ ПРИЁМКИ (AcceptLoop, PatchRounds, acceptance_loop_max default 3).
- Для каждого среза
S<N>сS<N>.accept = [ ]вычислитьAcceptLoop(S<N>)иPatchRounds(S<N>)поdebug.md(§ Slice Gate Decisions + § Extend —). - Триггер 3 срабатывает, если для какого-либо
S<N>:max(AcceptLoop, PatchRounds) >= acceptance_loop_max, и нетreports/architecture-loop-redesign-*.mdновее последнейawaiting-acceptanceэтого среза, и нет действующего (≤7 дней).gate-override.yamlсgate: acceptance-loop.
Если сработал Триггер 3 (приоритет над Триггерами 1/2 — разбирается корень, а не дрейф):
- Выполнить ADR Discovery и KB Discovery (как ниже).
- Вызвать
Task(subagent_type="onec-code-architect")сmode=deep-analysisи loop-контекстом: история раундовS<N>(записи Slice Gate Decisions + Extend —), ссылки на трассы/отчёты/debug.md, вопрос «корень один или N независимых дефектов; consolidation vs минимум». - Сохранить полный отчёт в
reports/architecture-loop-redesign-YYYY-MM-DD.md. - Добавить в
debug.mdсекцию## Loop Detection — YYYY-MM-DD(формат —vertical-slices.mdc). - Через decision-card (по
.cursor/docs/templates/decision-block.md) предложить: (a) принять consolidation-редизайн архитектора, (b) минимальный фикс с фиксацией риска вdebug.md, (c) отложить разбор (.gate-override.yaml,gate: acceptance-loop). Simplicity Check дляdeep-analysisтребуется (см.architect-gate.mdc).
Если Триггер 3 разобран (есть свежий architecture-loop-redesign-*.md или override), дальнейший extend идёт обычным путём (Триггеры 1/2 как раньше).
Если сработал Триггер 1 или Триггер 2:
Грейс-исключение (антидубль): если в ответ на этот же подтверждённый бриф уже записан файл reports/architecture-extend-coherence-YYYY-MM-DD.md, повторный Scope Coherence Audit до завершения handoff не вызывать. Следующий прогон /opsx:extend — новый бриф, грейс не действует.
Если грейс не применим:
- Выполнить ADR Discovery и KB Discovery (как ниже для обычного architect).
- Вызвать
Task(subagent_type="onec-code-architect")сmode=scope-coherence-auditи шаблоном из1c-agent-patterns/architect.md. Оркестратор передаёт блок «Соответствие исходному scope» из брифа, полные тексты артефактов, при наличии — фрагмент исходногоproposal.mdиз git (git show <hash>:openspec/changes/<name>/proposal.md, где<hash>— коммит создания change или первый коммит с каталогом change; если недоступно — явно указать в промпте «исторический proposal недоступен»). - Сохранить полный отчёт в
openspec/changes/<name>/reports/architecture-extend-coherence-YYYY-MM-DD.md. - Добавить в
debug.mdзапись:
Поле «Решение пользователя» заполняется после## Extend Coherence Audit — YYYY-MM-DD - Триггер: semantic | counter | both - Drift-check из брифа: pass | drift-warning | scope-violation - Вердикт архитектора: coherent | drift-warning | scope-violation - Отчёт: `reports/architecture-extend-coherence-YYYY-MM-DD.md` - Решение пользователя: accepted recommendations | partial | rejected — <кратко>AskQuestion, если вердикт архитектора требует решения.
Если вердикт архитектора в отчёте — scope-violation: до обновления остальных артефактов остановиться и через AskQuestion предложить: (a) принять рекомендации архитектора (например отделить часть в новую ЗНИ через /opsx:new), (b) отклонить и зафиксировать риск в debug.md, (c) свернуть extend без правок.
Simplicity Check для режима scope-coherence-audit не требуется (см. .cursor/rules/architect-gate.mdc).
Architect обязателен также по общим правилам Gate (ниже). Обычный отчёт расширения без coherence сохранять в reports/architecture-extend-YYYY-MM-DD.md, если вызывается архитектор по классическим триггерам после или вместо coherence — не дублировать два полных прохода без необходимости; при одновременном срабатывании 5a и классических триггеров достаточно одного вызова с приоритетом шаблона scope coherence audit, если пользователь не запросил явно отдельное архитектурное решение по API/перехватам.
Architect обязателен, если:
- source содержит
ARCHITECTUREfinding; - предлагается изменить точку расширения (
&Перед,&После,&Вместо,&ИзменениеИКонтроль); - меняется контракт/export/API;
- требуется новый объект метаданных;
- есть несколько альтернатив реализации без выбранного решения;
- пересматривается уже зафиксированный
design.mdapproach; - решение затрагивает 2+ файла или UX-сценарий.
Для --code-sync architect не обязателен, если не меняется Behavior Contract / ADR / точка расширения, а артефакты только догоняют фактический код. Если фактический код вводит новый подход (новая точка перехвата, новый контракт, сосуществование расширений), проверить обычные триггеры выше.
Перед вызовом architect:
- выполнить ADR Discovery по
openspec/adrs/; - выполнить KB Discovery по
openspec/knowledge/_index.yaml/_taxonomy.yaml, если файлы есть; - передать
## Existing Knowledgeпо правилам проекта.
Если архитектор вызывался только по п. 5a (Scope Coherence Audit), полный отчёт уже сохранён в reports/architecture-extend-coherence-YYYY-MM-DD.md. Иначе сохранить полный отчёт расширения в openspec/changes/<name>/reports/architecture-extend-YYYY-MM-DD.md.
Если пользователь явно отказался от architect — записать отказ в debug.md / reports/extend-decision-*.md и продолжать только если правила допускают отказ.
6. Artifact update rules
Порядок правок:
proposal.md— если меняется scope / Why / What Changes / Impact. При существенной смене доменной темы — опционально один вопрос: обновитьcomment_suffix(domain_label) в## Metadata (comment markers)? Не блокер extend.specs/**/spec.md— delta spec (ADDED,MODIFIED,REMOVED), минимум один Scenario на Requirement.design.md—Existing Mechanisms,Design Rationale,Decisions,Slices,Risks,Open Questions.tasks.md— slice-aware вставка:- непринятый срез → inside-slice перед
S<N>.accept(или legacyS<N>.T<M>); - принятый срез → fix-срез;
- новая функциональность → новый срез или расширение непринятого, только после Ambiguity Gate;
- legacy → подходящая секция или «Рефакторинг и качество».
- непринятый срез → inside-slice перед
debug.md— секция## Extend — YYYY-MM-DD:- источник (
--from-review,--from-debug, ...); - что добавлено/изменено;
- disposition по findings:
accepted,rejected,deferred; Architect Gate:— обязательное поле в каждой секции## Extend —. Значение: либо ссылка на отчёт (reports/architecture-extend-*.md/architecture-extend-coherence-*.md/architecture-loop-redesign-*.md), либо одно изне вызывался/не требовался/declined/—. Поле — детерминированный вход счётчика M Триггера 2 (§5a); без него M недосчитывает раунды без архитектора.- ссылки на отчёты architect/explorer;
- следующий шаг.
- источник (
6a. Verify decision ledger (после user-extend --from-verify по decision)
Триггер: user-extend с --from-verify после decision 3a (ответ пользователя на развилку verify).
Действия (до hint /opsx:verify, без ожидания следующего verification YAML):
- Добавить/обновить
debug.md§## Verify decision ledger(YAML-блок, agent-only):closed_decisions: - id: <snake_case> summary: "<проза>" closed_at: "YYYY-MM-DD" source: verify-user-answer open_decision_id: null decision_round: <N+1> verify_depth: incremental assumptions_accepted: [] - Обязательно добавить зеркало в
design.md§## Решения verify (зафиксировано)— 1–2 строки прозой безid:(не дублировать параграфы из## Decisions). Это человекочитаемый источник, из которого/opsx:applyвоспроизводит решение прозой (apply не читает YAML-ledger для чата). Пропуск этого шага оставит apply без прозы и вернёт голый код развилки — недопустимо. - Удалить из
open_known_questions(если велся в debug или последнем verification snapshot) темы, закрытые этим decision. - Internal mapping: парсинг ответа пользователя →
decision_id+ вариант; при неоднозначности — один уточняющий вопрос прозой.
repair-from-verify: ledger не меняет decision_round; только технические правки design/tasks.
6c. Repair-from-verify: slice acceptance remediation
Триггер: internal repair-from-verify; в quality-control-*.md или verification report есть блоки ### Remediation (auto-repair) для slice acceptance alerts.
Ограничения: repair не ставит [x] на accept; не архивирует; не меняет scope/spec Requirement без decision (merge cross-slice → decision, не auto).
Алгоритм:
- Parse все
Remediation (auto-repair)из последнегоreports/quality-control-*.md. - Порядок правок:
design.md(## Slices, матрица, Primary column) →tasks.md(metadata, accept, merge) → sync**Связь со spec:**. - По alert-id:
primary-acceptance-missing— добавить**Primary acceptance:**в metadata; первый sub-bullet**Primary (обязательно):**вS<N>.acceptиз Behavior Contract / design.accept-bullets-missing-scenario— optional sub-bullet вS<N>.acceptили agentS<N>.<M>«верифицировать по коду» или explorer в apply; user IB spike запрещён (User Task Contract).acceptance-simplicity-overload— оставить один mandatory Primary; остальные → «(опционально)» илиS<N>.<M>.slice-not-vertical/slice-foundation-with-gate— делегировать onec-code-architectmode=slice-restructuring; merge foundation → consumer; затем post-merge checklist ниже.
- Append
debug.md§## Verify repair — slice acceptance(дата, alerts, files touched).
Post-merge checklist (после merge foundation → consumer):
- Перенумерация
# Срез S<N>иS<N>.<M>без пропусков. **Зависимости:**пересчитаны; нет ссылок на слитый срез.- Ровно один
S<N>.accept+<!-- slice-gate -->на оставшийся срез. **Primary acceptance:**синхронны в design и tasks.- Append
debug.md§## Verify repair — slice merge(было S1+S2 → стало S1). - Grep: нет orphan
S<K>.в задачах других срезов.
6d. Repair-from-verify: user task contract
Триггер: internal repair-from-verify; в quality-control-*.md или verification report есть user-task-contract-violation (CRITICAL).
Ограничения: repair не ставит [x]; не меняет scope/spec Requirement без decision; [x] задачи не перенумеровывать.
Алгоритм:
- Удалить нарушающие
S<N>.<M>(user runtime-spike). - Grep
tasks.mdи снять условные зависимости: «При успешном verify S*.2», «после verify S*», «после стенда». - Слить blocked кодовые задачи в одну без условия «после стенда».
design.md: open question из spike → § Assumptions; § Risks — «runtime-подтверждение в Primary accept среза».- Перенумеровать только
[ ]задачи;[x]не трогать (номера выполненных могут остаться с gap). - Append
debug.md§## Verify repair — user task contract(дата, удалённые задачи, files touched).
6b. Code-sync update rules (--code-sync)
После подтверждения брифа:
- Делегировать
onec-code-explorerс точным списком файлов изtasks.md/debug.md/reports; запросить:- реальные процедуры/функции/аннотации;
- порядок вызовов;
- расхождения
artifact saysvscode says; - цитаты
file:lineдля каждого вывода.
- Сохранить полный отчёт в
reports/exploration-code-sync-YYYY-MM-DD.md. - Оркестратор перепроверяет ключевые цитаты точечным
Readперед правкой артефактов. - Обновлять
proposal.md,design.md,specs/**,tasks.md,debug.mdтак, чтобы они отражали код как source of truth. - Если код противоречит Behavior Contract, не «догонять» артефакты молча: остановиться, сформировать decision card (код править через
/opsx:applyили менять scope через extend).
7. Verification Gate
После обновления артефактов:
- проверить, что tasks/spec/design согласованы по названиям срезов и сценариев;
- если specs менялись — пройти Delta Specs Gate;
- если добавлены задачи фикса — проверить defect placement invariant из
vertical-slices.mdc; - если запуск был
--code-sync— выполнить Code-Truth Gate из.cursor/rules/code-truth-gate.mdc;phantom-symbolпосле синхронизации = BLOCKER до повторной правки артефактов; - User Task Contract (user-extend): mechanical grep DENY/ALLOW (
vertical-slices.mdc§ User Task Contract) на добавленные/изменённыеS<N>.<M>; CRITICALuser-task-contract-violation→ не завершать extend без правки; - следующий шаг для пользователя:
/opsx:verify <name>(не дублировать в чат длинный handoff — см. п. 8).
8. Handoff
Финальный вывод в чат — Chat Surface Contract §2.6 + §3a chat-output-budget.mdc:
- repair-from-verify (internal): нет сообщения в чат.
- user-extend, правок не было: одна строка на языке эффекта: «Артефакты соответствуют запросу, правок не потребовалось.»
- user-extend, артефакты изменены: «Постановка дополнена, можно проверять. Следующий шаг:
/opsx:verify <name>.» — без перечня файлов, без internal-команд с флагами.
Полный перечень правок — в debug.md (## Extend — YYYY-MM-DD) и при необходимости reports/extend-summary-*.md, не в чат.
Запрещено: «Обновлено: tasks.md, design.md, … Дальше: /opsx:extend --from-verify …».
Если изменения не внесены из-за неоднозначности — компактная развилка (исключение из однострочного режима).
Integration
session-discipline.mdc: первым tool call при/opsx:extend— Read этого скилла; протокол extend действует на каждом follow-up ходе.1c-agent-delegation.mdc: extend не реализует BSL/XML и не вызывает writer/reviewer (BSL и XML write guard — там).openspec-specs-gate.mdc: при изменении specs соблюдать delta-формат.vertical-slices.mdc: все измененияtasks.mdslice-aware.code-truth-gate.mdc:--code-sync— штатный remediation path дляphantom-symbolи drift code↔artifacts.verified-cause-gate.mdc: если вход — defect/RCA, разделять Verified facts и Hypotheses.preserve-subagent-reports.mdc: сохранять полные отчёты architect/explorer.architect-gate.mdc: scope-drift триггеры и закрытие Gate черезarchitecture-extend-coherence-*.md(см. п. 5a).
Common Follow-up Recommendations
Команды семейства /opsx:* должны ссылаться на extend, когда вывод показывает необходимость изменить scope:
/review:Architecture findingsили findings, противоречащиеdesign.md→/opsx:extend <name> --from-review <report-path>./opsx:explore(Ultra-Lite): RCA и рецепт →/opsx:extend <name> --from-report temp/reports/<тип>-YYYY-MM-DD-<slug>.md(отчётTask) илиtemp/explore-handoff-*.md(если был handoff)./opsx:verify: Repair Loop даёт классdecisionпо scope/design/tasks →/opsx:extend <name> --from-verify <report-path>./opsx:apply: реализация выявила scope mismatch →/opsx:extend <name>./opsx:explore: есть активный change и обсуждение даёт новое требование →/opsx:extend <name>.