Commit Graph

86 Commits

Author SHA1 Message Date
Дмитрий 5bcf229e4f feat: plan-done и арбитраж gate3 — только терминальный грант (consent forgery B4)
Снятие печати плана (plan-done) и арбитраж gate3 (gate3-arb:accept/continue) — тело-агностичные
согласия, обходящие/снимающие стену — теперь открываются ТОЛЬКО терминальным грантом владельца
(Поза 1, HOLE-4). supreme-gate: новый параметр terminalGrants в decideMode/runGate, PLAN_FINISH_ACTION
проверяется против него (лёгкий escape остаётся на chat-грантах); main грузит loadTerminalGrants.
gate3-loop: арбитраж-гранты грузятся через loadTerminalGrants (loader-swap; resolveOwnerArbitration
агностична). Ядро стены: 138/138, gate3 44/44, полный свод 4346. Спека §B/§DEC.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 19:03:10 +03:00
Дмитрий 29287d73c9 feat: деплой и коммит — только терминальный грант владельца (consent forgery B3)
ops-runbook:<hash> (деплой) и commit:<hash> (коммит агентом) открываются ТОЛЬКО
терминальным грантом владельца (origin:owner-terminal + валидная подпись, ключ обязателен —
fail-closed #KEY), не chat floor_escape — Поза 1. loadPlanScopedGrants переписан как
loadTerminalGrants + фильтр по префиксу (origin/подпись/нижняя граница в одном месте, DRY).
Мосты blessed-ops/commit-grant не тронуты (читают через те же обёртки). Тесты загрузчиков
переписаны под новый контракт. Спека §B/§KEY/§CRIT6.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 18:39:48 +03:00
Дмитрий f87090702c feat: owner-seal только из терминального гранта (consent forgery B2)
Печать «одобрено владельцем» (owner-seal) теперь открывается ТОЛЬКО терминальным грантом
владельца (loadTerminalGrants), не chat floor_escape — Поза 1 для самого тяжёлого согласия.
Вычисление вынесено в тестируемую ownerSealOpenForEvent (источник грантов инъектируется);
sealTurnProd зовёт её с loadTerminalGrants. sealOnWiredGo (берёт ownerSealOpen параметром) и
его тесты не тронуты. Убран ставший неиспользуемым верхний импорт loadFloorEscapes
(escape-валве судьи берёт его динамически). Спека §B/§CRIT7.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 18:17:46 +03:00
Дмитрий dec0ed502a feat: терминальный грант владельца — примитив (consent forgery B1)
Несомненный канал согласия для тяжёлого (Поза 1): floor_escape с origin:owner-terminal,
подписанный ключом keychain. Скрипт владельца tools/owner-consent.mjs строит+подписывает+
пишет грант (запускает владелец; контроллер не может — нет ключа + floor режет запись runtime).
Читатель loadTerminalGrants принимает ТОЛЬКО origin-помеченные валидно-подписанные гранты,
ключ обязателен (fail-closed, #KEY). Нулевой радиус: живые потребители НЕ тронуты —
подключение (owner-seal/ops-runbook/commit/plan-done/gate3/bash) отдельными заходами B2+.
Спека: specs/2026-06-18-consent-forgery-fix-design.md §B/§KEY.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 18:02:28 +03:00
Дмитрий cdc32b1a1d fix: anti-button — согласие только из свободного ввода владельца (consent forgery A)
Ответ AskUserQuestion, дословно совпавший с ярлыком контроллерской кнопки, больше
не порождает доверенную запись (floor_escape И approve_git_operation). Закрывает
наблюдаемую подделку owner-seal и HOLE-1 (git-approval тем же классом). Фундамент —
guard в единственном писателе processEvent + чистый предикат answerMatchesOption.
Спека: specs/2026-06-18-consent-forgery-fix-design.md §A.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 17:43:58 +03:00
Дмитрий bd03df7f2b docs: wall-GUIDE — операт. заметки допила (B+C ч.2/D1/D2/§3.4)
bags/router-mentor-wall-GUIDE.md: новый раздел «Обновления 18.06.2026» —
осмотр-сеанс op:"session", деплой агентом (ops-runbook:<hash>), коммит агентом
(commit:<hash>, гейты качества остаются), §3.4 десинк помечен ПОЧИНЕН. Дисциплины
A/D1 (читать вывод→стоп на аномалии; под планом препятствие→перепланируй, не гадай).
Устаревший обход §3.4 в «Пуш кода» помечен снятым. Формальный свод (Pravila/CLAUDE.md)
— отдельно, через claude-md-management со включённой стеной (отмечено в GUIDE).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 14:59:29 +03:00
Дмитрий a5830a8a1c docs: handoff — §3.4 десинк закрыт (cdcaf61), остался только норматив-хвост
Обновлён docs/superpowers/2026-06-18-wall-improvements-handoff.md: §3.4 помечен
СДЕЛАНО (ленивое снятие печати), свод 4320. Единственный оставшийся хвост —
норматив-заметки A/D1/D2 в Pravila/GUIDE (когда стена вернётся).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 14:53:26 +03:00
Дмитрий cdcaf610a0 fix: §3.4 десинк — печать снимается ЛЕНИВО (criterion-gate видит план на пуше)
Баг: на ПОСЛЕДНЕМ шаге плана supreme-gate (PreToolUse) снимал печать синхронно
ДО того, как со-хук criterion-gate (PreToolUse, в settings.json ПОЗЖЕ) успевал
проверить пуш → criterion видел «нет плана» и ложно блокировал код-пуш.

Фикс (правка только enforce-supreme-gate.mjs runGate):
- на planComplete печать БОЛЬШЕ НЕ снимается синхронно (указатель за конец +
  метка петли E-S1 остаются) → план жив для co-хуков в этом же tool-call;
- печать снимается ЛЕНИВО на СЛЕДУЮЩЕМ действии (ветка в начале runGate: если
  committed-указатель за последним листом и steps — непустой массив → removeFrozenPlan
  + разговорный режим). Гард steps на массив: минимальные/legacy-планы без steps
  не считаются «исчерпанными».

Строго лучше прежнего: чинит ложный блок код-пуша последним шагом (зелёные критерии),
случай реального провала критерия не ухудшен. Спека §3.4.

+2 теста (ленивое снятие + репро «печать не снята синхронно»), свод 4320 passed / 2 skipped.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 14:49:33 +03:00
Дмитрий 6bc0f6d040 docs: handoff допила эталона — B+C ч.2/D1/D2 DONE + решения по хвостам
Обновлён docs/superpowers/2026-06-18-wall-improvements-handoff.md:
- «Сделано» дополнено B+C ч.2 (bc1d2a3), D1 (bbc053e), D2 (b47a71c); свод 4319.
- «Осталось» переписано: только §3.4 десинк (решение владельца — отдельной
  сессией; механизм + безопасный путь зафиксированы) + норматив-заметки.
- §3.3 docs/ops без criterion/verify — ЗАКРЫТО (владелец 2026-06-18): строго .md,
  расширение на не-.md ops-артефакты не делаем (конфликт с CLAUDE.md §13).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 14:32:26 +03:00
Дмитрий b47a71c66b feat: D2 — канал коммита под ревью (агент коммитит под commit:<hash>)
Опечатанный ревью-план (GO наставника+судьи, judge_mode=live-block) + одно
согласие владельца `FLOOR-ESCAPE: commit:<plan-hash>` → агент делает git
add/commit/push без терминала владельца. Гейт ПРИСУТСТВИЯ (router-gate
git-approval) отходит; гейты КАЧЕСТВА (criterion-gate/verify-gate) НЕ тронуты —
код-коммит всё равно требует по-критерийный GREEN и свежую расписку. Согласия
деплоя (ops-runbook:) и коммита (commit:) — раздельные кнопки.

- escape-grant: обобщён plan-scoped загрузчик (loadPlanScopedGrants/
  planScopedGrantOpen, окно = существование плана); D1 ops-runbook стал тонкой
  обёрткой; добавлены commit: COMMIT_GRANT_PREFIX/loadCommitGrants/commitGrantOpen.
- commit-grant (новый мост план↔router-gate): commitGrantOpenForSession —
  открыт ли commit:<hash> на валидный sealed live-block план сессии.
- shell-content-rules classifyGitCommand: conditional-git пускается при
  ctx.commitGrantOpen; GIT_HARD (force-push/--no-verify/-c) блокирует ПЕРВЫМ
  (качество/безопасность не ослаблены).
- enforce-router-gate: main кладёт ctx.commitGrantOpen (gated через мост).

План: docs/superpowers/plans/2026-06-18-agent-commit-channel-plan.md
Спека: docs/superpowers/specs/2026-06-18-agent-commit-channel-design.md §3.1-3.2.

ОТЛОЖЕНО (требует решения владельца, в хвосте плана):
- §3.3 docs/ops без criterion/verify: .md уже пропускается; расширение на
  не-.md ops-артефакты конфликтует с CLAUDE.md §13 v2.40 — нужен явный список.
- §3.4 десинк push-последним-шагом: рискованная правка снятия печати стены.

+22 теста, свод 4319 passed / 2 skipped.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 13:58:05 +03:00
Дмитрий bbc053e0a6 feat: D1 — благословлённый ops-runbook (деплой выполняет агент под ревью)
Деплой, помеченный **Kind:** deploy и опечатанный (наставник+судья GO,
judge_mode=live-block), агент выполняет по белому списку шагов под ОДНИМ
согласием владельца `FLOOR-ESCAPE: ops-runbook:<plan-hash>` — без аварийного
выхода на каждую команду. «Ядерный» набор (rm -rf/force-push/migrate:fresh/
db:wipe) остаётся на per-command escape.

- plan-lock: freezePlan принимает kind (в подписанную базу + хеш, как delivery);
  не-'normal' добавляет поле, обычные планы байт-идентичны старым печатям.
- plan-skills: parsePlanKind (**Kind:** deploy|normal, default normal).
- seal-orchestration: sealablePlan/sealPlan прокидывают kind в печать.
- escape-grant: loadOpsRunbookGrants (окно = существование плана, БЕЗ 5-мин
  фильтра) + opsRunbookGrantOpen (точный матч на plan_id).
- floor-decide: floorDecide получает инъектируемый blessedOps(cmd); content-block
  команда из набора пропускается, ЯДЕРНЫЙ набор (bashIsFloor) исключён из послабления.
- blessed-ops (новый модуль-мост): buildBlessedOps + loadBlessedOpsForSession —
  знает план+пол, чтобы СОХРАНИТЬ Δ9 (enforce-floor не зависит от модуля печати плана).
  Предикат пускает команду только дословно из Bash-листов опечатанного deploy-плана.
- enforce-floor: gated — blessed-ops грузит план/гранты ТОЛЬКО при открытом
  ops-runbook-гранте; без согласия владельца пол плана не касается (Δ9 цел).

План: docs/superpowers/plans/2026-06-18-blessed-ops-runbook-plan.md
Спека: docs/superpowers/specs/2026-06-18-blessed-ops-runbook-design.md §3.1-3.7.
+33 теста, свод 4299 passed / 2 skipped.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 13:19:22 +03:00
Дмитрий bc1d2a370a feat: B+C часть 2 — сеанс осмотра op:"session" под стеной
Новый тип шага плана op:"session" {goal, tools, produces} для интерактивного
осмотра (логин/формы/чужой сайт) под планом: внутри сеанса смотреть/кликать по
живым ref свободно, указатель не двигается; сеанс закрывает запись последнего
produces (матч-якорь). Снят дедлок op:"Skill"-как-шаг.

- plan-lock: sessionProduces, actionMatchesStep матчит последний produces,
  validatePlanTree валидирует session (produces>=1) и запрещает op:"Skill",
  sanitizeSessionTools (предохранитель §3.3: дроп Write/Edit/Bash/floor + warn).
- enforce-supreme-gate decide: ветка указатель-на-сеансе — tools сеанса и
  промежуточные produces allow без сдвига, пол применяется (defense-in-depth).
- plan-steps-parse: распознаёт op:"session" (goal/tools/produces, без object/ref),
  отвергает op:"Skill" с явным сообщением.
- mentor-verdict: наставник понимает op:"session" — не заворачивает как непонятный шаг.
- сеанс+tools/produces в хеше и подписи плана (подмена ломает печать).

Спека: docs/superpowers/specs/2026-06-18-wall-interactive-session-design.md §3.2-3.3.
+37 тестов, свод 4266 passed / 2 skipped.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 11:54:42 +03:00
Дмитрий e9ba6fb9a2 feat: B+C part1 - смотрящие инструменты свободны под/без плана (isQueryOnly)
Новый предикат isQueryOnly (ToolSearch/WebFetch/WebSearch/read-only браузер:
navigate/snapshot/wait/screenshot) проведён во все ветки стены: смотрящие и
спрашивающие инструменты проходят и в разговорном режиме (осмотр чужого сайта
без плана), и под опечатанным планом, не двигая указатель шагов. Действующие
инструменты (клик/ввод) сюда не входят - они пойдут через сеанс осмотра
(часть 2 B+C). Свод зелёный: 4229 passed, 2 skipped.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 10:52:47 +03:00
Дмитрий e91aa021f0 feat: A - чтение под опечатанным планом свободно (ДР-1 снят в impl)
Под планом авторское чтение больше не блок: свой вывод, лог упавшего шага,
новый файл доступны. Чтение не двигает очередь шагов; impl-чтения логируются
с пометкой impl:true для ретро и не считаются во фронт-лоад порог. Секреты
держит отдельный read-path-deny. Свод зелёный: 4221 passed, 2 skipped.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 10:40:23 +03:00
Дмитрий abf2060328 feat standby: штатный режим - флаг, управляющий хук, сброс, страж в 12 хуков
Сессионный флаг standby-mode + управляющий UserPromptSubmit-хук рукопожатия + SessionStart-сброс. Страж if standbyActive в 12 блокирующих хуках; рельсы floor/snapshot/verify-gate не тронуты.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 10:07:04 +03:00
Дмитрий 2b9e72ab46 docs: mark open-items roadmap + produce-verify-receipt bag resolved
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 08:10:39 +03:00
Дмитрий 2380e82002 feat: gate-3 owner acceptance live wiring Phase 2d finale
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 05:28:49 +03:00
Дмитрий c50ac7c915 restore: run-test-json конфиг от корня репо через resolveVitestConfig plus тест buildVitestJsonArgs plus GUIDE Уроки 9 формат плана
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 20:20:23 +03:00
Дмитрий 07f24382e8 docs: .gitattributes принудительный LF plus GUIDE Уроки 8 диагностика CRLF-саги (vitest@4 давится на CRLF .mjs)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 20:15:21 +03:00
Дмитрий 7ae53216bf docs: черновики deliderra-cleanup и app-path-split-legacy-fix спеки и планы plus bag wall-read-block
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 20:10:14 +03:00
Дмитрий f6d0544277 Merge branch 'track-d-2c-delivery' 2026-06-17 19:11:26 +03:00
Дмитрий 2b5e265c3e Merge branch 'track-c-2b-gate3card'
# Conflicts:
#	tools/enforce-gate3-loop.mjs
2026-06-17 19:10:52 +03:00
Дмитрий 451b0d4cf5 feat: E-S1 2c chestnost delivery na gate-2 - linza delivery_honesty
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 18:01:24 +03:00
Дмитрий 89367986f2 fix(track-b): надёжность вердиктов — флап наставника + видимый degraded при срыве захода судьи/gate3
1) validateMentorVerdict: recommendation обязателен только на NO-GO (положительный GO с пустым слотом больше не заворачивается). 2) runJudgeTurn: срыв runJudgeGate -> видимый degraded вместо слепого возврата. 3) produceGate3Verdict: срыв захода/построения -> видимый degraded вместо немого fail-OPEN. TDD-тесты добавлены; vitest в worktree сломан средой, логика проверена через node.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 17:16:18 +03:00
Дмитрий 46c1b2301d feat: E-S1 Фаза 2b судья-карточки gate3card линзы card_matches_product/no_overstatement/verify_steps_real plus чистый помощник видимости gate3CardSurfaceRecord стадия judge:gate3card
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 16:54:52 +03:00
Дмитрий ba584a8335 docs: bag-репорты багов стены plus спеки и планы фаз gate3 plus роадмап открытых вопросов по сессиям
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 15:41:09 +03:00
Дмитрий cd831b872f fix: наставник-хук silent-swallow срыв в видимый degraded plus GUIDE Уроки 7 диагностика наставник не вернулся
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 15:13:28 +03:00
Дмитрий 15e217fcb4 feat: E-S1 gate-3 приёмка владельца фаза 2a ядро buildOwnerCard plus расширение decideGate3Closure и фикс produce-verify-receipt выбор конфига от корня репо
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 14:39:40 +03:00
Дмитрий 9b85f51b7a feat: видимость вердиктов 2 сторож verdict-wait судья и печать в снимок пропуск сторожа в стене
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 13:27:58 +03:00
Дмитрий a8489a22c7 feat: видимость вердиктов роутер и gate3 в баннер и снимок-стор
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 13:06:07 +03:00
Дмитрий fed3c4f9b8 feat: E-S1 gate-3 owner-acceptance phase 1 delivery mark plumbing
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 10:53:25 +03:00
Дмитрий e4a0b48c0a feat: E-S1 gate-3 trigger Stop-hook enforce-gate3-loop plus wall loop-open marker
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 08:54:54 +03:00
Дмитрий dfa5ef180f feat: E-S1 gate-3 safe core buildGate3Product and decideGate3Closure
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 06:55:43 +03:00
Дмитрий 4f5c928796 fix: classifyJudgeOutcome skip vs degraded plus bug notes and SP2a design
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 05:43:18 +03:00
Дмитрий c4774c55fb feat: supreme-gate two-tact step-pointer tentative-advance F-J SP4
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 04:52:00 +03:00
Дмитрий 9f28c2cfbc feat: round-memory wire sealAction в карточки наставника и судьи SP3-c2b
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 03:45:30 +03:00
Дмитрий f96610cd7b feat: round-memory ownerSealActionForContent per-stage hash helper SP3-c2a
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 03:42:22 +03:00
Дмитрий ce58f37d8f feat: round-memory arbitration-card sealAction owner-seal SP3-c1
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 03:36:15 +03:00
Дмитрий 6a9d3e2466 fix: round-memory судья холодный не называет наставника в промпте SP3-b-followup
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 03:33:42 +03:00
Дмитрий 9b2c4f9e86 feat: round-memory owner-seal judge-gate wiring runJudgeTurn sealOnWiredGo sealTurnProd SP3-b4
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 03:17:14 +03:00
Дмитрий b111ca5ec1 feat: round-memory owner-seal sealArtifact sealPlan bypass plan-carveout SP3-b3
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 03:04:32 +03:00
Дмитрий 6a3bbad1ab feat: round-memory owner-seal sealOnApproval bypass SP3-b2
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 19:12:32 +03:00
Дмитрий 96a6204b73 feat: round-memory owner-seal decideSeal carve-out via-labels SP3-b1
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 19:10:24 +03:00
Дмитрий 171f7fb44a feat: round-memory owner-seal ownerSealAction decideSeal SP3-a ядро
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 18:41:29 +03:00
Дмитрий 3f24deddca feat: round-memory арбитраж на любом круге по маркеру SP2d-b врезка в гейты
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 17:52:58 +03:00
Дмитрий 56074a0430 feat: round-memory arbitrationRequested детектор маркера арбитража SP2d-a
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 17:48:13 +03:00
Дмитрий 74905096a7 feat: round-memory вызыватели передают stage в потолки SP2c-3b живой per-стадия
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 17:32:30 +03:00
Дмитрий fd6046fa92 feat: round-memory потолки кругов per-стадия spec/plan SP2c-3a счётчики
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 17:29:33 +03:00
Дмитрий dc2c1a3df2 feat: round-memory загрузка roundMemory J-side в хуке судьи SP2c-2 инкремент 3
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 17:22:23 +03:00
Дмитрий 1289e68524 feat: round-memory загрузка roundMemory M-side в хуке наставника SP2c-2 инкремент 2b
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 17:11:21 +03:00