DSH: request_approval-инструмент — аппрув одним кликом владельца (#77) #78

Merged
aep merged 2 commits from feat/77-approve-tool into main 2026-10-25 10:20:04 +03:00
Owner

Bounded #77 (решение владельца 25.10: ручной /approve — неочевидный UX).

Что сделано

  • lib/approval.js: общая логика runApproval (предпосылки + запись секции) извлечена из /approve; /approve переписан на неё (поведение не изменилось, 13 старых тестов зелёные).
  • tool-approve.js: model-инструмент request_approval — plain-JSON-определение (без @deepseek-ai импортов; register-контракт проверен по app.asar), ленивый userQuestions через ctx.get, валидация change_id/kind, диалог Approve/Cancel, запись только после Approve.
  • index.js: регистрация при enabled && approvalGates; inject не менялся.
  • Спека approval-gates: писатель approval.md — только код бандла (/approve или request_approval) после подтверждения владельца; гейт C без изменений; новое Requirement + 7 сценариев.

Тесты

dsh/tests/run.sh 171/171 (161 + 10); tests/run.sh 640/0; openspec validate approval-gates valid. Ревью v4-pro: merge ok.

Находки

T1.1 fixed b81afaf (спека), T1.2 fixed (отчёт), T1.3 deferred (dsh-tools.md — в #43 Task 4), T1.4 rejected (неатомарный write — fail-closed, прежнее поведение), T1.5 deferred (формулировка «ошибка диалога» — при следующем касании спеки).

После merge

Переустановить бандл и перезапустить DSH — дальше аппрувы: модель вызывает request_approval, владелец жмёт Approve.

Bounded #77 (решение владельца 25.10: ручной /approve — неочевидный UX). ## Что сделано - lib/approval.js: общая логика runApproval (предпосылки + запись секции) извлечена из /approve; /approve переписан на неё (поведение не изменилось, 13 старых тестов зелёные). - tool-approve.js: model-инструмент request_approval — plain-JSON-определение (без @deepseek-ai импортов; register-контракт проверен по app.asar), ленивый userQuestions через ctx.get, валидация change_id/kind, диалог Approve/Cancel, запись только после Approve. - index.js: регистрация при enabled && approvalGates; inject не менялся. - Спека approval-gates: писатель approval.md — только код бандла (/approve или request_approval) после подтверждения владельца; гейт C без изменений; новое Requirement + 7 сценариев. ## Тесты dsh/tests/run.sh 171/171 (161 + 10); tests/run.sh 640/0; openspec validate approval-gates valid. Ревью v4-pro: merge ok. ## Находки T1.1 fixed b81afaf (спека), T1.2 fixed (отчёт), T1.3 deferred (dsh-tools.md — в #43 Task 4), T1.4 rejected (неатомарный write — fail-closed, прежнее поведение), T1.5 deferred (формулировка «ошибка диалога» — при следующем касании спеки). ## После merge Переустановить бандл и перезапустить DSH — дальше аппрувы: модель вызывает request_approval, владелец жмёт Approve.
aep added 2 commits 2026-10-25 10:10:41 +03:00
aep merged commit fc18bbd976 into main 2026-10-25 10:20:04 +03:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: aep/claude-harness#78
No description provided.