[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6J1JNFFDBB00YVVWYVV2F2N":3,"skill-same:01M6J1JNFFDBB00YVVWYVV2F2N":73},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":34,"linkOnly":35,"markdownContent":36,"markdownBody":37,"frontMatter":38,"refName":40,"commitSha":41,"skillDirectory":42,"forksCount":43,"repositoryHtmlUrl":44,"repositoryHomepageUrl":6,"ownerHtmlUrl":45,"ownerBlogUrl":46,"ownerDescription":47,"updatedAt":48,"install":49,"resources":62},"01M6J1JNFFDBB00YVVWYVV2F2N","sdd:archive",null,"Архивировать завершённый change со встроенной L1\u002FL2\u002FL3 spec-верификацией live spec'ов (включая REMOVED-инверсию). Проверяет test-plan.md, обновляет .sdd-state.yaml, при verify-fail после merge specs выводит red-banner и останавливается без авто-rollback. test-plan.md остаётся в архивной директории как историческая запись.","esurvanov\u002Fawesome-claude","esurvanov","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F4973667?v=4","01M6J1G7N9TE6PM9STY2K0BH2Y","Egor Urvanov","01M6J1G7S79PJF3DN0XVVPBMM4",22,"MIT","https:\u002F\u002Fgithub.com\u002Fesurvanov\u002Fawesome-claude\u002Fblob\u002Fmain\u002Fnamespace\u002Fsdd\u002Fskills\u002Farchive\u002Fskill.md",[],[19,20,5,21,22,23,24,25,26,27,28,29,30,31,32,33],"archive","sdd","spec","test","change","merge","state","yaml","verify","plan","rollback","live","banner","red","l2","2026-11-10 10:12:30",false,"---\nname: sdd:archive\nworkflow_step: 7\ndescription: >\n  Архивировать завершённый change со встроенной L1\u002FL2\u002FL3 spec-верификацией live spec'ов\n  (включая REMOVED-инверсию). Проверяет test-plan.md, обновляет .sdd-state.yaml,\n  при verify-fail после merge specs выводит red-banner и останавливается без авто-rollback.\n  test-plan.md остаётся в архивной директории как историческая запись.\n---\n\n0. **Preflight — проверь наличие openspec** через Bash tool:\n   ```bash\n   which openspec > \u002Fdev\u002Fnull 2>&1 || echo \"NOTFOUND\"\n   ```\n   Если вывод содержит `NOTFOUND` — остановись немедленно с сообщением:\n   `openspec not found. Install: npm install -g @openspec\u002Fcli`\n\n1. Определи имя change из $ARGUMENTS или контекста разговора. Сохрани `\u003Cchange-dir>` = `openspec\u002Fchanges\u002F\u003Cname>`.\n\n2. **Identity check.** Через Bash tool:\n   ```bash\n   python3 \"${CLAUDE_SKILL_DIR}\u002F..\u002Fscripts\u002Fidentity.py\"\n   ```\n   Прочитай `owner:` из `.sdd.yaml`:\n   ```bash\n   python3 \"${CLAUDE_SKILL_DIR}\u002F..\u002Fscripts\u002F_sdd_yaml.py\" read \"\u003Cchange-dir>\"\n   ```\n   Если `owner != email` → AskUserQuestion: `⚠ change owner=\u003Cowner>, ты \u003Cemail>. Перезаписать на тебя?`. При согласии:\n   ```bash\n   python3 \"${CLAUDE_SKILL_DIR}\u002F..\u002Fscripts\u002F_sdd_yaml.py\" set-owner \"\u003Cchange-dir>\" \"\u003Cemail>\"\n   ```\n   При отказе — остановись.\n\n3. **Проверь `test-plan.md`**: если `\u003Cchange-dir>\u002Ftest-plan.md` отсутствует —\n   остановись немедленно с сообщением:\n   `test-plan.md is missing — required before archiving`\n\n4. **Проверь что `test-plan.md` не является заглушкой**: если YAML front matter содержит\n   только placeholder-текст (например `TODO:`) в полях `approach` или `acceptance_criteria` —\n   предупреди: `test-plan.md appears unfilled` и запроси подтверждение от автора перед продолжением.\n\n5. Архивируй change через Bash tool:\n   ```bash\n   openspec archive \"\u003Cname>\" -y\n   ```\n   После этого шага specs из `\u003Cchange-dir>\u002Fspecs\u002F` smerged в `openspec\u002Fspecs\u002F\u003Ccap>\u002Fspec.md`.\n\n7. **Inline L1\u002FL2\u002FL3 spec-verification против live spec.md.**\n   \u003C!-- KEEP IN SYNC: skills\u002Fsdd\u002Fapply\u002Fskill.md verify section -->\n\n   Никакого внешнего кода — всё делаешь ты, модель, в одном прогоне.\n\n   **Источник Requirements.** Прочитай `.sdd.yaml.creates` и `.sdd.yaml.merges-into` из `\u003Cchange-dir>\u002F.sdd.yaml`. Для каждого `\u003Ccap>` из обоих полей читай `openspec\u002Fspecs\u002F\u003Ccap>\u002Fspec.md` и верифицируй симметрично.\n\n   **Requirement parsing.** Из spec.md извлекай все `### Requirement:` блоки.\n\n   Если spec содержит секции-операции (`## ADDED Requirements`, `## REMOVED Requirements`):\n   - **ADDED** — стандартная верификация (L1\u002FL2\u002FL3).\n   - **REMOVED** — **инвертированная L1**: артефакт MUST отсутствовать. L1 pass = файл НЕ существует; L1 fail = файл существует. L2\u002FL3 → `N\u002FA`.\n   - **MODIFIED** → вердикт `human_needed` («MODIFIED delta blocks not supported in v1»).\n\n   Без секций-операций — все Requirements в одной группе «All requirements».\n\n   **Requirement → артефакт:**\n\n   | Признак | Тип | Путь |\n   |---|---|---|\n   | Путь в backticks (`` `skills\u002Fsdd\u002Ffoo\u002Fskill.md` ``) | skill \u002F file | указан явно |\n   | Упоминание скилла (`\u002Fsdd:foo`, `sdd:foo`) | skill + command | `skills\u002Fsdd\u002Ffoo\u002Fskill.md` + `commands\u002Fsdd\u002Ffoo.md` |\n   | Секция документа (`CLAUDE.md → \u003Csection>`) | document | проверить секцию в файле |\n   | Конфиг (`.claude\u002Fsettings.json`) | config | указан явно |\n\n   Если артефакт не идентифицирован → `human_needed` («could not identify artifact from Requirement text»).\n   Runtime-поведение без файла → `human_needed` («requires live run»).\n\n   **Task verification loop.** Для каждого Requirement: L1 → L2 → L3 → вердикт `done | partial | missing | human_needed`.\n\n   Правила остановки:\n   - L1 fail (или ADDED L1 fail) → `missing`, L2\u002FL3 пропускаются.\n   - L1 fail для REMOVED (файл существует) → `missing` («removal not performed»), L2\u002FL3 = N\u002FA.\n   - L2 fail → `partial`, L3 запускается.\n   - L3 fail → `partial`.\n   - L1+L2+L3 pass → `done`.\n\n   **L2 stub detection.** Файл = заглушка если содержит `\u003C!-- TODO -->`\u002Fplaceholder\u002Fпустые секции\u002Fтолько frontmatter.\n\n   **L3 wiring heuristics:**\n\n   | Тип | Где искать wiring |\n   |---|---|\n   | skill (`skills\u002F\u003Cns>\u002F\u003Cskill>\u002Fskill.md`) | упоминание в `CLAUDE.md` + `README.md` |\n   | command (`commands\u002F\u003Cns>\u002F\u003Cname>.md`) | тело ссылается на скилл `\u003Cns>:\u003Cname>` |\n   | document | cross-ref из связанных файлов |\n   | config | упоминание пути в документации |\n\n   Если wiring неприменим — `L3 = N\u002FA`.\n\n   **Group aggregation:** для каждой `## ADDED\u002FREMOVED` группы — `complete | incomplete | pending`.\n\n   **Verdict:**\n   - `passed` — все done;\n   - `gaps_found` — есть missing\u002Fpartial;\n   - `human_needed` — нет gaps, есть human_needed.\n\n8. **При verify failed (gaps_found): red-banner и стоп.**\n\n   Если verdict ≠ `passed` (есть `missing` или `partial` Requirements в live spec):\n\n   Выведи **точно** такой banner:\n   ```\n   ? SPECS MODIFIED — manual rollback required\n   ? Run: git restore openspec\u002Fspecs\u002F\n   ? OR: start a new change via \u002Fsdd:propose\n   ```\n\n   Запиши pending_transitions для hook'а:\n   ```bash\n   python3 \"${CLAUDE_SKILL_DIR}\u002F..\u002Fscripts\u002Fstate.py\" update \"\u003Cchange-dir>\u002F.sdd-state.yaml\" pending_transitions \"archiving,archive-failed\"\n   ```\n\n   **Остановись немедленно.** MUST NOT удалять `.sdd-state.yaml`. MUST NOT откатывать файлы автоматически. MUST NOT выполнять шаги 9–10.\n\n9. **При verify passed: обнови index.yaml для merges-into, затем запиши pending_transitions**:\n\n   **Обновление index.yaml для merges-into.** Прочитай `.sdd.yaml.merges-into`. Для каждой capability из `merges-into` найди строку вида `- \\`\u003Ccap>\\`: \u003Cописание>` в секции `### Modified Capabilities` в `proposal.md` текущего change и обнови description:\n   ```bash\n   python3 \"${CLAUDE_SKILL_DIR}\u002F..\u002Fscripts\u002F_sdd_yaml.py\" update-index-description \"openspec\u002Fspecs\u002Findex.yaml\" \"\u003Ccap>\" \"\u003Cdescription>\"\n   ```\n   Если `### Modified Capabilities` отсутствует или нужная строка не найдена — пропусти обновление (оставить прежнее description).\n\n   ```bash\n   python3 \"${CLAUDE_SKILL_DIR}\u002F..\u002Fscripts\u002Fstate.py\" update \"\u003Cchange-dir>\u002F.sdd-state.yaml\" pending_transitions \"archiving,archived\"\n   ```\n   PostToolUse hook применит переходы. Если последний переход = `archived`, hook также удалит `.sdd-state.yaml`.\n\n10. **test-plan.md остаётся в архивной директории**: после переезда change'а в\n    `openspec\u002Fchanges\u002Farchive\u002F\u003Cdate>-\u003Cname>\u002F`, `test-plan.md` остаётся там как историческая запись.\n    НЕ копируется в `openspec\u002Fspecs\u002F\u003Ccapability>\u002F`. Semantic test cases для capabilities\n    генерируются скриптом `test-plan-to-cases.py` на этапе `sdd:apply`.\n\n11. **Запись лога и финальный отчёт**:\n\n    Сначала запиши лог через Bash tool:\n    ```bash\n    TS=$(date +%Y%m%dT%H%M%S)\n    mkdir -p \".logs\u002F\u003Cname>\"\n    # Записать в .logs\u002F\u003Cname>\u002Farchive-${TS}.md:\n    # frontmatter (change, skill, timestamp, verify_verdict)\n    # ## Archived Files — список файлов перемещённых openspec archive\n    # ## Spec Verification — L1\u002FL2\u002FL3 результаты по каждому Requirement из live specs\n    # ## State — финальная stage, факт удаления .sdd-state.yaml\n    # ## Errors — список ошибок с полями step\u002Fwhat\u002Fwhy\u002Freproduce (значение _нет_ если ошибок не было)\n    # При verify failed или ошибке шага: заполнить ## Errors перед остановкой.\n    # Поле reproduce — точная команда или входные аргументы, которые привели к ошибке.\n    ```\n\n    Затем вызови финальный отчёт через Bash tool:\n    ```bash\n    python3 \"${CLAUDE_SKILL_DIR}\u002F..\u002Fscripts\u002Farchive_report.py\" \"\u003Cchange-dir>\"\n    ```\n    Скрипт возвращает JSON `{archived[]}`. Используй его для рендера отчёта в **строгом порядке блоков**:\n\n    ```markdown\n    ## Описание\n    \u003C2–5 предложений прозы: что заархивировано и где теперь находится>\n\n    ## Архивированные артефакты\n    \u003Cдля каждого capability из JSON.archived:>\n    - **\u003Cname>**: spec готов — да\u002Fнет, test-plan — да\u002Fнет\n    \u003Cесли JSON.archived пусто — тело `_нет_`, заголовок остаётся>\n\n    ## Решено самостоятельно\n    \u003Cопционально; формат: «вопрос → решение»; опускается если пусто>\n\n    ## Прочее\n    \u003Cопционально; риторические замечания; опускается если пусто>\n\n    ## Вопросы к пользователю\n    \u003Cобычно ровно одна строка: `Продолжаю.`>\n    \u003Cсинтетический CTA «Продолжаем по флоу?» ЗАПРЕЩЁН>\n    \u003Cэтот блок — последний; после него нет заголовков и прозы>\n    \u003Cблок `## Как проверить` НЕ рендерится — он только в sdd:apply>\n    → Подробный технический отчёт: .logs\u002F\u003Cname>\u002Farchive-\u003CTS>.md\n    ```\n\n    **Правила коммуникационного стиля:**\n    1. **По умолчанию — действие, не вопрос.** Развилки закрывай автономно, фиксируй в `## Решено самостоятельно`. В `## Вопросы к пользователю` — только реальные user-only вопросы.\n    2. **Форма ответа = форма запроса.** Пятиблочный формат — только в этом финальном выводе. В промежуточной переписке — проза, 2–3 предложения, без markdown-секций.\n    3. **Действие первое, отчёт после.** Операции archiving выполняются первыми.\n    4. **Ноль внутреннего жаргона в user-facing полях.** В `## Описание` и `## Решено самостоятельно` SHALL NOT появляться имена файлов, детекторный жаргон или технические идентификаторы. Весь технический дамп — только в лог-файле.\n\n    **Write-then-replay:** После рендера отчёта запиши весь форматированный вывод (`## Описание`, `## Архивированные артефакты`, `## Решено самостоятельно` если есть, `## Прочее` если есть, `## Вопросы к пользователю`, строку `→ Подробный технический отчёт: ...`) в файл `.logs\u002F\u003Cname>\u002Farchive-${TS}-output.md` через Write tool. Затем выведи содержимое:\n    ```bash\n    cat \".logs\u002F\u003Cname>\u002Farchive-${TS}-output.md\"\n    ```\n","0. **Preflight — проверь наличие openspec** через Bash tool:\n   ```bash\n   which openspec > \u002Fdev\u002Fnull 2>&1 || echo \"NOTFOUND\"\n   ```\n   Если вывод содержит `NOTFOUND` — остановись немедленно с сообщением:\n   `openspec not found. Install: npm install -g @openspec\u002Fcli`\n\n1. Определи имя change из $ARGUMENTS или контекста разговора. Сохрани `\u003Cchange-dir>` = `openspec\u002Fchanges\u002F\u003Cname>`.\n\n2. **Identity check.** Через Bash tool:\n   ```bash\n   python3 \"${CLAUDE_SKILL_DIR}\u002F..\u002Fscripts\u002Fidentity.py\"\n   ```\n   Прочитай `owner:` из `.sdd.yaml`:\n   ```bash\n   python3 \"${CLAUDE_SKILL_DIR}\u002F..\u002Fscripts\u002F_sdd_yaml.py\" read \"\u003Cchange-dir>\"\n   ```\n   Если `owner != email` → AskUserQuestion: `⚠ change owner=\u003Cowner>, ты \u003Cemail>. Перезаписать на тебя?`. При согласии:\n   ```bash\n   python3 \"${CLAUDE_SKILL_DIR}\u002F..\u002Fscripts\u002F_sdd_yaml.py\" set-owner \"\u003Cchange-dir>\" \"\u003Cemail>\"\n   ```\n   При отказе — остановись.\n\n3. **Проверь `test-plan.md`**: если `\u003Cchange-dir>\u002Ftest-plan.md` отсутствует —\n   остановись немедленно с сообщением:\n   `test-plan.md is missing — required before archiving`\n\n4. **Проверь что `test-plan.md` не является заглушкой**: если YAML front matter содержит\n   только placeholder-текст (например `TODO:`) в полях `approach` или `acceptance_criteria` —\n   предупреди: `test-plan.md appears unfilled` и запроси подтверждение от автора перед продолжением.\n\n5. Архивируй change через Bash tool:\n   ```bash\n   openspec archive \"\u003Cname>\" -y\n   ```\n   После этого шага specs из `\u003Cchange-dir>\u002Fspecs\u002F` smerged в `openspec\u002Fspecs\u002F\u003Ccap>\u002Fspec.md`.\n\n7. **Inline L1\u002FL2\u002FL3 spec-verification против live spec.md.**\n   \u003C!-- KEEP IN SYNC: skills\u002Fsdd\u002Fapply\u002Fskill.md verify section -->\n\n   Никакого внешнего кода — всё делаешь ты, модель, в одном прогоне.\n\n   **Источник Requirements.** Прочитай `.sdd.yaml.creates` и `.sdd.yaml.merges-into` из `\u003Cchange-dir>\u002F.sdd.yaml`. Для каждого `\u003Ccap>` из обоих полей читай `openspec\u002Fspecs\u002F\u003Ccap>\u002Fspec.md` и верифицируй симметрично.\n\n   **Requirement parsing.** Из spec.md извлекай все `### Requirement:` блоки.\n\n   Если spec содержит секции-операции (`## ADDED Requirements`, `## REMOVED Requirements`):\n   - **ADDED** — стандартная верификация (L1\u002FL2\u002FL3).\n   - **REMOVED** — **инвертированная L1**: артефакт MUST отсутствовать. L1 pass = файл НЕ существует; L1 fail = файл существует. L2\u002FL3 → `N\u002FA`.\n   - **MODIFIED** → вердикт `human_needed` («MODIFIED delta blocks not supported in v1»).\n\n   Без секций-операций — все Requirements в одной группе «All requirements».\n\n   **Requirement → артефакт:**\n\n   | Признак | Тип | Путь |\n   |---|---|---|\n   | Путь в backticks (`` `skills\u002Fsdd\u002Ffoo\u002Fskill.md` ``) | skill \u002F file | указан явно |\n   | Упоминание скилла (`\u002Fsdd:foo`, `sdd:foo`) | skill + command | `skills\u002Fsdd\u002Ffoo\u002Fskill.md` + `commands\u002Fsdd\u002Ffoo.md` |\n   | Секция документа (`CLAUDE.md → \u003Csection>`) | document | проверить секцию в файле |\n   | Конфиг (`.claude\u002Fsettings.json`) | config | указан явно |\n\n   Если артефакт не идентифицирован → `human_needed` («could not identify artifact from Requirement text»).\n   Runtime-поведение без файла → `human_needed` («requires live run»).\n\n   **Task verification loop.** Для каждого Requirement: L1 → L2 → L3 → вердикт `done | partial | missing | human_needed`.\n\n   Правила остановки:\n   - L1 fail (или ADDED L1 fail) → `missing`, L2\u002FL3 пропускаются.\n   - L1 fail для REMOVED (файл существует) → `missing` («removal not performed»), L2\u002FL3 = N\u002FA.\n   - L2 fail → `partial`, L3 запускается.\n   - L3 fail → `partial`.\n   - L1+L2+L3 pass → `done`.\n\n   **L2 stub detection.** Файл = заглушка если содержит `\u003C!-- TODO -->`\u002Fplaceholder\u002Fпустые секции\u002Fтолько frontmatter.\n\n   **L3 wiring heuristics:**\n\n   | Тип | Где искать wiring |\n   |---|---|\n   | skill (`skills\u002F\u003Cns>\u002F\u003Cskill>\u002Fskill.md`) | упоминание в `CLAUDE.md` + `README.md` |\n   | command (`commands\u002F\u003Cns>\u002F\u003Cname>.md`) | тело ссылается на скилл `\u003Cns>:\u003Cname>` |\n   | document | cross-ref из связанных файлов |\n   | config | упоминание пути в документации |\n\n   Если wiring неприменим — `L3 = N\u002FA`.\n\n   **Group aggregation:** для каждой `## ADDED\u002FREMOVED` группы — `complete | incomplete | pending`.\n\n   **Verdict:**\n   - `passed` — все done;\n   - `gaps_found` — есть missing\u002Fpartial;\n   - `human_needed` — нет gaps, есть human_needed.\n\n8. **При verify failed (gaps_found): red-banner и стоп.**\n\n   Если verdict ≠ `passed` (есть `missing` или `partial` Requirements в live spec):\n\n   Выведи **точно** такой banner:\n   ```\n   ? SPECS MODIFIED — manual rollback required\n   ? Run: git restore openspec\u002Fspecs\u002F\n   ? OR: start a new change via \u002Fsdd:propose\n   ```\n\n   Запиши pending_transitions для hook'а:\n   ```bash\n   python3 \"${CLAUDE_SKILL_DIR}\u002F..\u002Fscripts\u002Fstate.py\" update \"\u003Cchange-dir>\u002F.sdd-state.yaml\" pending_transitions \"archiving,archive-failed\"\n   ```\n\n   **Остановись немедленно.** MUST NOT удалять `.sdd-state.yaml`. MUST NOT откатывать файлы автоматически. MUST NOT выполнять шаги 9–10.\n\n9. **При verify passed: обнови index.yaml для merges-into, затем запиши pending_transitions**:\n\n   **Обновление index.yaml для merges-into.** Прочитай `.sdd.yaml.merges-into`. Для каждой capability из `merges-into` найди строку вида `- \\`\u003Ccap>\\`: \u003Cописание>` в секции `### Modified Capabilities` в `proposal.md` текущего change и обнови description:\n   ```bash\n   python3 \"${CLAUDE_SKILL_DIR}\u002F..\u002Fscripts\u002F_sdd_yaml.py\" update-index-description \"openspec\u002Fspecs\u002Findex.yaml\" \"\u003Ccap>\" \"\u003Cdescription>\"\n   ```\n   Если `### Modified Capabilities` отсутствует или нужная строка не найдена — пропусти обновление (оставить прежнее description).\n\n   ```bash\n   python3 \"${CLAUDE_SKILL_DIR}\u002F..\u002Fscripts\u002Fstate.py\" update \"\u003Cchange-dir>\u002F.sdd-state.yaml\" pending_transitions \"archiving,archived\"\n   ```\n   PostToolUse hook применит переходы. Если последний переход = `archived`, hook также удалит `.sdd-state.yaml`.\n\n10. **test-plan.md остаётся в архивной директории**: после переезда change'а в\n    `openspec\u002Fchanges\u002Farchive\u002F\u003Cdate>-\u003Cname>\u002F`, `test-plan.md` остаётся там как историческая запись.\n    НЕ копируется в `openspec\u002Fspecs\u002F\u003Ccapability>\u002F`. Semantic test cases для capabilities\n    генерируются скриптом `test-plan-to-cases.py` на этапе `sdd:apply`.\n\n11. **Запись лога и финальный отчёт**:\n\n    Сначала запиши лог через Bash tool:\n    ```bash\n    TS=$(date +%Y%m%dT%H%M%S)\n    mkdir -p \".logs\u002F\u003Cname>\"\n    # Записать в .logs\u002F\u003Cname>\u002Farchive-${TS}.md:\n    # frontmatter (change, skill, timestamp, verify_verdict)\n    # ## Archived Files — список файлов перемещённых openspec archive\n    # ## Spec Verification — L1\u002FL2\u002FL3 результаты по каждому Requirement из live specs\n    # ## State — финальная stage, факт удаления .sdd-state.yaml\n    # ## Errors — список ошибок с полями step\u002Fwhat\u002Fwhy\u002Freproduce (значение _нет_ если ошибок не было)\n    # При verify failed или ошибке шага: заполнить ## Errors перед остановкой.\n    # Поле reproduce — точная команда или входные аргументы, которые привели к ошибке.\n    ```\n\n    Затем вызови финальный отчёт через Bash tool:\n    ```bash\n    python3 \"${CLAUDE_SKILL_DIR}\u002F..\u002Fscripts\u002Farchive_report.py\" \"\u003Cchange-dir>\"\n    ```\n    Скрипт возвращает JSON `{archived[]}`. Используй его для рендера отчёта в **строгом порядке блоков**:\n\n    ```markdown\n    ## Описание\n    \u003C2–5 предложений прозы: что заархивировано и где теперь находится>\n\n    ## Архивированные артефакты\n    \u003Cдля каждого capability из JSON.archived:>\n    - **\u003Cname>**: spec готов — да\u002Fнет, test-plan — да\u002Fнет\n    \u003Cесли JSON.archived пусто — тело `_нет_`, заголовок остаётся>\n\n    ## Решено самостоятельно\n    \u003Cопционально; формат: «вопрос → решение»; опускается если пусто>\n\n    ## Прочее\n    \u003Cопционально; риторические замечания; опускается если пусто>\n\n    ## Вопросы к пользователю\n    \u003Cобычно ровно одна строка: `Продолжаю.`>\n    \u003Cсинтетический CTA «Продолжаем по флоу?» ЗАПРЕЩЁН>\n    \u003Cэтот блок — последний; после него нет заголовков и прозы>\n    \u003Cблок `## Как проверить` НЕ рендерится — он только в sdd:apply>\n    → Подробный технический отчёт: .logs\u002F\u003Cname>\u002Farchive-\u003CTS>.md\n    ```\n\n    **Правила коммуникационного стиля:**\n    1. **По умолчанию — действие, не вопрос.** Развилки закрывай автономно, фиксируй в `## Решено самостоятельно`. В `## Вопросы к пользователю` — только реальные user-only вопросы.\n    2. **Форма ответа = форма запроса.** Пятиблочный формат — только в этом финальном выводе. В промежуточной переписке — проза, 2–3 предложения, без markdown-секций.\n    3. **Действие первое, отчёт после.** Операции archiving выполняются первыми.\n    4. **Ноль внутреннего жаргона в user-facing полях.** В `## Описание` и `## Решено самостоятельно` SHALL NOT появляться имена файлов, детекторный жаргон или технические идентификаторы. Весь технический дамп — только в лог-файле.\n\n    **Write-then-replay:** После рендера отчёта запиши весь форматированный вывод (`## Описание`, `## Архивированные артефакты`, `## Решено самостоятельно` если есть, `## Прочее` если есть, `## Вопросы к пользователю`, строку `→ Подробный технический отчёт: ...`) в файл `.logs\u002F\u003Cname>\u002Farchive-${TS}-output.md` через Write tool. Затем выведи содержимое:\n    ```bash\n    cat \".logs\u002F\u003Cname>\u002Farchive-${TS}-output.md\"\n    ```\n",{"name":5,"description":7,"workflow_step":39},7,"main","81eafc75f9ca212c44852f5012421b956024b0e6","namespace\u002Fsdd\u002Fskills\u002Farchive",5,"https:\u002F\u002Fgithub.com\u002Fesurvanov\u002Fawesome-claude","https:\u002F\u002Fgithub.com\u002Fesurvanov","https:\u002F\u002Fwww.urvanov.com\u002F","CTO in iGaming (NDA). AI development, engineering leadership, networking. Based between Batumi, Da Nang and Bangkok. Founder of Jaiora.","2026-05-12 00:32:28",{"source":8,"skillName":5,"commands":50,"prompt":60,"zipAvailable":61},[51,54,57],{"tool":52,"command":53},"npx","npx skills add esurvanov\u002Fawesome-claude --skill \"sdd:archive\"",{"tool":55,"command":56},"bunx","bunx skills add esurvanov\u002Fawesome-claude --skill \"sdd:archive\"",{"tool":58,"command":59},"pnpm","pnpm dlx skills add esurvanov\u002Fawesome-claude --skill \"sdd:archive\"","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fesurvanov\u002Fawesome-claude\u002Fblob\u002Fmain\u002Fnamespace\u002Fsdd\u002Fskills\u002Farchive\u002Fskill.md",true,[63,69],{"path":64,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":67,"sourceHtmlUrl":68},"cases\u002Farchive.md","REFERENCE","参考文档",5881,"https:\u002F\u002Fgithub.com\u002Fesurvanov\u002Fawesome-claude\u002Fblob\u002Fmain\u002Fnamespace\u002Fsdd\u002Fskills\u002Farchive\u002Fcases\u002Farchive.md",{"path":70,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":71,"sourceHtmlUrl":72},"state.yaml",236,"https:\u002F\u002Fgithub.com\u002Fesurvanov\u002Fawesome-claude\u002Fblob\u002Fmain\u002Fnamespace\u002Fsdd\u002Fskills\u002Farchive\u002Fstate.yaml",[74,97,110,122,137,151],{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":88,"publishedAt":34},"01M6J1MGH6A2FXTHYDF0WCCQJZ","skill:test-skill","Тест одного скилла: несколько кейсов, стабы, семантические проверки. Читает cases\u002F\u003Cns>\u002F\u003Cskill>.md, для каждого Case поднимает стаб, запускает скилл в агенте, проверяет contains + semantic.","https:\u002F\u002Fgithub.com\u002Fesurvanov\u002Fawesome-claude\u002Fblob\u002Fmain\u002Fnamespace\u002Fskill\u002Fskills\u002Ftest-skill\u002Fskill.md",[80,85],{"categoryNo":81,"categoryName":82,"taxonomyType":83,"taxonomyTypeDesc":84},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":86,"categoryName":87,"taxonomyType":83,"taxonomyTypeDesc":84},"01JBSEEDCAT000000000000023","Skill与智能体开发",[22,89,90,20,91,92,93,94,95,96],"skill:test skill","Test Skill","sonnet","case","semantic","read","Bash","help",{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":105,"publishedAt":34},"01M6J1MCNHVC2NAVF5XYKCA3BR","skill:test-all","Запускает все тесты скиллов. Обнаруживает тест-спеки в .claude\u002Fskills\u002F*\u002F*\u002Fcases\u002F, запускает каждый через логику test-skill, выводит сводную таблицу, проверяет TDD-coverage матрицу.","https:\u002F\u002Fgithub.com\u002Fesurvanov\u002Fawesome-claude\u002Fblob\u002Fmain\u002Fnamespace\u002Fskill\u002Fskills\u002Ftest-all\u002Fskill.md",[103,104],{"categoryNo":81,"categoryName":82,"taxonomyType":83,"taxonomyTypeDesc":84},{"categoryNo":86,"categoryName":87,"taxonomyType":83,"taxonomyTypeDesc":84},[22,106,107,108,95,94,109,91],"test all","skill:test all","tdd","coverage",{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":116,"publishedAt":34},"01M6J1M7Q2T82FXF2S5TYWMYWK","skill:setup","Dev mode setup для awesome-claude репы — создаёт симлинки skills\u002F, commands\u002F, rules\u002F в .claude\u002F напрямую через bash. Идемпотентен: повторный вызов выводит \"Already linked\". Если .claude\u002F\u003Cdir> уже существует как обычная директория — предупреждает и просит подтверждение перед заменой.","https:\u002F\u002Fgithub.com\u002Fesurvanov\u002Fawesome-claude\u002Fblob\u002Fmain\u002Fnamespace\u002Fskill\u002Fskills\u002Fsetup\u002Fskill.md",[],[117,112,118,95,119,94,120,91,121],"setup","dev","Rules","commands","mode",{"skillNo":123,"name":124,"nameZh":6,"description":125,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":129,"publishedAt":34},"01M6J1M37B5M33229RTK5EQM2Y","skill:release","Финальный шаг контрибьюторского workflow — релиз awesome-claude. Bump-version в manifest.yaml, commit, version tag. Останавливается если working tree не чистый.","https:\u002F\u002Fgithub.com\u002Fesurvanov\u002Fawesome-claude\u002Fblob\u002Fmain\u002Fnamespace\u002Fskill\u002Fskills\u002Frelease\u002Fskill.md",[128],{"categoryNo":86,"categoryName":87,"taxonomyType":83,"taxonomyTypeDesc":84},[124,130,131,132,133,134,26,135,95,94,136,91],"release","version","tree","workflow","commit","manifest","bump",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":149,"publishedAt":34},"01M6J1KZ8Y0TFBRF0D5ZKV62DW","skill:onboarding","Guided entry point для контрибьютора awesome-claude. Показывает полный contributor workflow и текущий следующий шаг по состоянию репы. НЕ запускает другие скиллы автоматически — только показывает, что вызвать дальше.","https:\u002F\u002Fgithub.com\u002Fesurvanov\u002Fawesome-claude\u002Fblob\u002Fmain\u002Fnamespace\u002Fskill\u002Fskills\u002Fonboarding\u002Fskill.md",[143,144],{"categoryNo":86,"categoryName":87,"taxonomyType":83,"taxonomyTypeDesc":84},{"categoryNo":145,"categoryName":146,"taxonomyType":147,"taxonomyTypeDesc":148},"01JBSEEDCAT000000000000038","人力资源","PROFESSION","适用职业",[139,150,133,95,94,91],"onboarding",{"skillNo":152,"name":153,"nameZh":6,"description":154,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":155,"categories":156,"keywords":158,"publishedAt":34},"01M6J1KTMG1PW8QJGTGH9PQE4V","skill:deps","Установка\u002Fпроверка зависимостей awesome-claude из manifest.yaml: CLI-инструменты из секции tools:, субмодули из repos: через sdd:sync. Read-only по manifest.yaml — никогда не пишет в него (для добавления записей используй ручное редактирование или sdd:repo). Валидирует схему manifest.yaml: ошибка и стоп если отсутствует один из version, tools, repos.","https:\u002F\u002Fgithub.com\u002Fesurvanov\u002Fawesome-claude\u002Fblob\u002Fmain\u002Fnamespace\u002Fskill\u002Fskills\u002Fdeps\u002Fskill.md",[157],{"categoryNo":86,"categoryName":87,"taxonomyType":83,"taxonomyTypeDesc":84},[153,159,160,161,162,26,163,135,95,164,94,131,165,20,166,91,167,168],"deps","sdd:sync","sync","repos","Tools","repo","only","read-only","sdd:repo","cli"]