Архитектура
Карта кода emet/src и то, как промпты /emet управляют ею. Термины соответствуют GLOSSARY.md; решения, определившие устройство, находятся в docs/adr. О проблемах см. устранение неполадок.
Устройство
Есть две половины. Промпты (commands/run.md, agents/*.md, emet/reference/*.md) говорят Claude, что делать в каждой фазе. CLI emet (emet/bin/emet.ts и emet/src/) делает всё, что должно быть детерминированным: проверки, захваты, слоты, гейты, записи в трекер и посадку. Промпты никогда не реализуют заново проверку, которую CLI уже выполняет.
emet/bin/emet.ts — тонкий диспетчер: он читает первый аргумент и передаёт управление одному модулю подкоманды, который сам читает остальную часть process.argv. Коды завершения имеют смысл во всех подкомандах.
Как промпты управляют CLI
commands/run.md — короткий маршрутизатор. Он загружает по одному файлу фазы из emet/reference/, поэтому уплотнение контекста никогда не теряет правила текущей фазы.
| Фаза | Промпт | Вызовы CLI |
|---|---|---|
| 1-5 интервью, спецификация, тикеты, одобрение | phases-1-5.md |
init, doctor, validate, surfaces, approve, tracker |
| 6-7 диспетчеризация и воркеры | phases-6-7-dispatch.md, worker-prompt.md |
preflight, claims, slots, launch, lock-reason, handoff, results |
| 8 ревью, гейт, посадка, завершение | phases-8-closeout.md, reviewer-prompt.md |
verify, review-package, review, assess, gate, land, cleanup |
| 9 передача и цепочки | phases-9-handoff.md |
status, metrics, usage, spec-merge |
Координатор — единственный, кто пишет в трекер (ADR-0005): воркеры отчитываются через заметку передачи и emet results, а координатор публикует их. emet guard работает как хук PreToolUse и блокирует известные причины сбоев при запусках без присмотра.
Карта модулей
Рядом с каждым модулем лежит *.test.ts.
| Область | Модули |
|---|---|
| Настройка и аудит | init.ts (конфигурация и каркас документов), config.ts (emet.config.json, прежний forge.config.json по-прежнему читается), doctor.ts (обход флота), preflight.ts (гигиена диспетчеризации), dependencies.ts, skills.ts (контракт mattpocock-skills), map.ts (обзор кодовой базы) |
| Состояние запусков | claims.ts (резервирование тикетов), slots.ts (пул слотов воркеров), resources.ts (сведения о хосте), runs.ts (живость), locks.ts, lockreason.ts, proctree.ts, worktrees.ts, cleanup.ts, status.ts, launch.ts |
| Трекер | tracker.ts, tracker-files.ts (локальный трекер .scratch/), validate.ts (покрытие спецификации), specmerge.ts, approve.ts, surfaces.ts (пересечение поверхностей правок) |
| Передача от воркера | handoff.ts, results.ts, materializelog.ts |
| Ревью и посадка | verify.ts, reviewpackage.ts, review.ts (журнал замечаний), assess.ts (классификатор риска), gate.ts, land.ts |
| Отчётность | metrics.ts, usage.ts |
| Безопасность | guard.ts, guard-destructive.ts |
| Общие вспомогательные модули | narrow.ts, optional.ts, assets.ts (встроенные файлы в скомпилированных бинарных файлах) |
Структура промптов
commands/run.md (около 130 строк) — маршрутизатор /emet. Каждый файл в emet/reference/ — группа фаз (phases-1-5.md, phases-6-7-dispatch.md, phases-8-closeout.md, phases-9-handoff.md), загружаемая только тогда, когда она нужна режиму текущего запуска. Тест падает, если любой из них вырастает больше 20 000 байт, чтобы один файл не мог занять весь контекст после уплотнения. Фазы велят координатору перечитывать нужный раздел перед каждым раундом исправлений или ревью. install.sh откладывает старый единый phases-6-9.md как phases-6-9.md.retired, если вы его редактировали или он старше манифеста установки, и удаляет его в остальных случаях. install.sh также подключает emet guard в ~/.claude/settings.json как хук PreToolUse.
Распространение
install.sh копирует emet/ в ~/.claude/emet и переписывает промпты. Путь через плагин поставляет шим, который скачивает автономный бинарный файл с проверкой контрольной суммы, собранный tools/build-binaries.ts. См. ADR-0008.