Skip to content

Commit 0919534

Browse files
copeusclaude
andcommitted
docs(audit): the inventory question is not the coverage question — 6 of 13 hook events
The table answers 'is each of OUR guarantees covered by a native mechanism'. That is not 'do we use everything the runtime offers'. Asked the second question today, the answer is no: we register 6 of 13 hook events, verified by strings against the real 2.1.238 binary. Four of the seven we do not register are plausible for our own guarantees and have never been examined — SubagentStop (the native place for a per-worker scope gate), PreCompact (save position BEFORE compaction; the 'Claude forgets' complaint that started 3.0 is currently answered by a SessionStart banner AFTER), PostToolUseFailure (a worker's failed Bash feeding the failure classifier we already have), and SessionEnd. The other three look marginal, but that is an estimate, not a probe. Recorded so that 'eleven of twelve closed' cannot be read as 'everything is used'. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1 parent 6f18de7 commit 0919534

1 file changed

Lines changed: 41 additions & 0 deletions

File tree

docs/superpowers/architecture/native-mechanisms.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,3 +108,44 @@
108108
возвращает правую часть и для `null`, И ДЛЯ `false`, то есть явный опт-аут,
109109
задокументированный в тексте самого блока, не работал бы. Поймал собственный тест на
110110
первом прогоне; теперь читается `== false` явно.
111+
112+
---
113+
114+
## Инвентарь vs. таблица — то, чего в таблице нет вообще (2026-09-02)
115+
116+
Таблица выше отвечает на вопрос «покрыта ли каждая НАША гарантия нативным механизмом».
117+
Это не тот же вопрос, что «пользуемся ли мы всем, что рантайм умеет». Второй вопрос
118+
задали 2026-09-02, и ответ — **нет**.
119+
120+
**События хуков: 6 из 13.** Проверено `strings` по реальному бинарнику
121+
`~/.local/share/claude/versions/2.1.238` (Mach-O arm64) — все тринадцать присутствуют
122+
точными строками.
123+
124+
| Регистрируем (6) | Не регистрируем (7) |
125+
|---|---|
126+
| `Stop`, `PreToolUse`, `PostToolUse`, `UserPromptSubmit`, `SessionStart`, `PostCompact` | `SubagentStop`, `PreCompact`, `PostToolUseFailure`, `PermissionRequest`, `SessionEnd`, `UserPromptExpansion`, `Notification` |
127+
128+
Из семи нетронутых **четыре правдоподобны для наших гарантий и не рассматривались ни
129+
разу** — это ровно тот же дефект «не смотрели», который вскрывался весь день:
130+
131+
* **`SubagentStop`** — нативное место для scope-гейта на возврат воркера. Сейчас гейт
132+
живёт отдельной стадией внутри воркфлоу; событие даёт его же на уровне рантайма.
133+
* **`PreCompact`** — сохранить позицию ДО компакции. Жалоба «Клод забывает», с которой
134+
началась линия 3.0, закрыта баннером на `SessionStart` уже ПОСЛЕ; `PreCompact` — точка
135+
до.
136+
* **`PostToolUseFailure`** — упавший Bash воркера как вход для классификатора отказов,
137+
который у нас уже есть (`compound-v-classify-failure.py`).
138+
* **`SessionEnd`** — финализация аудит-следа.
139+
140+
Оставшиеся три (`PermissionRequest`, `UserPromptExpansion`, `Notification`) выглядят
141+
малорелевантными, но это ОЦЕНКА, а не проверка: ни одно из них не пробовалось.
142+
143+
**Рантайм воркфлоу.** Используем `agent()`, `pipeline()`, `phase()`, `log()`, `budget`,
144+
`args`. Не используем `parallel()` — сознательно, барьер там, где `pipeline` не нужен,
145+
это трата wall-clock — и `workflow()` (вложенный запуск), которого мы не рассматривали.
146+
147+
**Опции `agent()`.** Передаём `label`, `phase`, `schema`, `model`, `effort`, `isolation`,
148+
`agentType`, `disallowedTools`, `bashCommandClamp`.
149+
150+
Эта секция существует, чтобы «одиннадцать из двенадцати закрыты» не читалось как
151+
«использовано всё». Первое — правда. Второе — нет.

0 commit comments

Comments
 (0)