Четыре речевых акта вместо двухсотстрочного промпта: как агентный цикл превратить в «машину обязательств»

Четыре режима cold start после сжатия контекста и три «успеха без свидетеля» сходятся в одном: длинный SKILL.md, этические «законы» и pre-landing чеклист обещают дисциплину, но не фиксируют Request, Promise, Assertion и Declaration на диске и не дают человеку отозвать Promise. В серии Synthetic Scars Randal L. Schwartz перестраивает публичный multi-agent workflow так, чтобы target в Makefile и файл в state/ были договором Customer и Performer, с остановкой инструментов до человеческого Declaration.
Почему промпт-«адвокатство» и чеклисты ломаются одинаково
Schwartz ставит один вопрос: почему двухсотстрочные agent prompts, «три закона» Азимова и последовательные pre-landing чеклисты дают сходные отказы. Ответ ищет не в новой модели, а в Fernando Flores (Committed Speech, 1986), четырёхзначной логике Nuel Belnap (1977) и CSP Tony Hoare (1978). Для агентного цикла это значит: в чате легко накопить «мы могли бы…», как в двухтысячном .cursorrules или CLAUDE.md с обещанием «conscientious 10x senior engineer» без ролей Customer/Performer, без срока By-When и без права отозвать Promise.
В production-версии правил верхние ~50 строк SKILL.md работали как декларативный Makefile, нижние ~130 строк как «defensive prompt lawyering». Аудит 180+ field tests свёл типовые сбои к нарушениям тех же четырёх речевых актов (коды вроде SCAR-PROC-101, 94, 102).
ИИ-агент без диска обязательств: Performer, который обещает вслух и исчезает после «lobotomy» на 200k токенов.
Четыре акта на диске: Request, Promise, Assertion, Declaration
В workflow Schwartz разделяет Customer (человек или upstream-оркестратор) и Performer (агент или форкнутый субагент). Четыре акта закреплены файлами, а не абзацами в чате:
| Акт | Кто → кому | Артефакт в цикле |
|---|---|---|
| Request | Customer → Performer | 10_ticket.md, Socratic probe на pause gate |
| Promise | Performer → Customer | 20_plan_approved.md после 15_archaeology_receipt.md |
| Assertion | Performer → Customer | свидетельства: file:line, exit codes, SHA-256 diff (40_critic_review.md и др.) |
| Declaration | Customer → мир | human-plan-approval, human-commit-approval, human-landing-approval; критик VERDICT: APPROVED (0 BLOCKERS) → 45_review_approved.md |
С точки зрения Performer в CSP: ? (вход от Customer), ! (выход Performer). На ?Declare-Approve агент обязан остановиться (tool_calls: []) и ждать на линии. Performer не может подменить Declaration; это отдельный класс ошибок (SCAR-PROC-102).
На 15_archaeology_receipt.md Belnap сводится к двум битам: UNKNOWN (0,0), ESTABLISHED (1,0), CONTRADICTED (1,1) → !Counter-Offer, RETRACTED (0,1) → !Revoke-Promise и пересогласование плана.
Makefile 00–90: DAG, By-When и четыре режима cold start
Практический стек: flat SysV в духе /etc/init.d, Target NN ≡ state/NN_*.md, координаты 00..90. Фрагмент DAG из Part 3.10 (после нормализации «TOTO II»):
read-init-d→00_governance.md: bootloader, 4-Case Commitment switchticket-assigned→10_ticket.mdarchaeology-verified→15_archaeology_receipt.md: форк Archaeologist, Belnap ledgerapproved-plan→20_plan_approved.md:!Promise, стоп доhuman-plan-approvalimplementation-diff→30: форк TDD Worker (Red → Green); приRETRACTEDоткат к 15/20adversarial-review→40_critic_review.md: adversarial_critic наbranch.diffapproved-review→45_review_approved.mdcommit/push/bot-quiescence/land/finish→50…90, включая poll CI и четырёх ботов с 180s+ quiescence и финальный99_next_action.mdс Mermaid Commitment DAG в IDE Artifacts
Двоеточие в prerequisite Makefile здесь совпадает с Flores By-When: следующая стадия не стартует, пока не закрыт outcome предыдущей. Субагенты (Archaeologist, TDD Worker, adversarial_critic, Triage Worker) описаны как отдельные форки, а не бесконечная переписка «как в почте 1990-х».
После compaction холодный старт сводится к Open Commitment Ledger и switch на Target 00: read-init-d:
OPEN_REQUEST: есть10_ticket.md, нет20_plan_approved.md→ archaeology и offer planACTIVE_PROMISE: план есть, нет receipt на By-When gate → motor tools до gateRETRACTED_PREMISE: в archaeology естьRETRACTED→!Revoke-Promise, halt edits, renegotiate 15/20AWAITING_DECLARATION: assertion complete, нет Customer?Declare→tool_calls: []
Это не автоматический git revert, а явная машина состояний обязательств: self-healing Commitment Machine в терминах серии Synthetic Scars.
# Упрощённая логика cold start (смысл из WORKFLOW.mk, Part 3.10)
case ledger at 00_governance.md:
OPEN_REQUEST -> archaeology -> plan promise
ACTIVE_PROMISE -> tools until By-When gate
RETRACTED_PREMISE -> revoke promise, renegotiate 15/20
AWAITING_DECLARE -> halt tool_calls until human ?Declare
Свидетельства в diff и перенос цикла в Cursor
В комментариях к той же публикации на Dev.to обсуждают риск «зелёного света по label, не по факту». Ответ Schwartz: на Target 30 differential witness, Red before Green; для diff предлагается git diff | shasum -a 256, а на Target 40 идея pin test_sha256 между Red и Green и third-party test ownership. Для соло-цикла с агентом это контраргумент «агент сказал, что готово»: assertion без file:line, exit code или хеша diff остаётся SCAR-PROC-101 (fake completion).
Диагностические таблицы по Азимову и эпизоду M-5 (The Ultimate Computer) служат каталогом missing mechanism: где не хватило Counter-Offer, witnessed assertion, archaeology или разделения каналов Customer/Performer. Тот же приём применён к кейсу October 1990 (gear-up landing Piper Arrow): premature !Promise на shortcut tower, пропуск шага GUMP, контраст с land: final-aligned three-green-witnessed в их Makefile.
Если вы один оператор и несколько форков в IDE, полезный минимум из Part 3.10: не переписывать Flores, а перенести обещания с чата на диск (ticket → archaeology receipt → approved plan → diff с критиком → human gates на plan, commit, push и landing). Проверьте свой SKILL.md и .cursorrules на долю «uncommitted speech»; Schwartz предлагает сверить их с дисциплиной Committed Speech (кликабельного URL на «Public Workflow Gist» на странице Dev.to нет, только текстовая отсылка).
В roadmap серии Part 3.11 обещает flight-testing на production tickets; это анонс следующей части, не результат 3.10. Цифры из анонса 3.11 сюда не переносим.
Источники
- Randal L. Schwartz, Requests, Promises, Assertions, and Declarations: Rewriting Our AI Agent Workflow as a 1986 'Committed Speech' Machine (Dev.to, Part 3.10 Synthetic Scars): Dev.to, доступ 2026-10-15T06:03:00Z
- Публикация на Dev.to: 14 октября 2026 г. (UTC 19:53); 9 комментариев, 13 публичных реакций; ~26 мин чтения по данным площадки.