Repository navigation
feat(autocompact): --explain говорит, почему нудж молчит и что поставить (1.2.16) - #43
Merged
Merged
Conversation
Владелец спросил, можно ли зашить рабочее значение autoCompactWindow в плагин
по умолчанию. Нет: это настройка Claude Code, а не mnemo, и замер по таблице
моделей в бинаре 2.1.238 показывает, почему дефолт был бы вреден — у 8 моделей
из 14 окно 200k, где любое большее значение не действует вовсе, а у остальных 6
(нативный 1M) «разумный» дефолт вдвое урезал бы рабочий контекст без спроса.
Вместо дефолта — диагностика. Хук autocompactNudge по построению отказывает
МОЛЧА: не удалось установить окно — молчит, и это неотличимо от «предупреждать
не о чем». Теперь есть место, которое проговаривает разницу вслух.
- context-window.py --explain (read-only, ничего не пишет): resolved / source
(env | settings | cache | model-default | disabled) / window / compacts_at /
reserve / clamped + готовая человеческая подсказка.
- health: новый Step 7.55, гоняется ТОЛЬКО когда hooks.autocompactNudge = true.
- setup: при включении нуджа передаёт пользователю тот же hint.
- config-schema: формула записана в схему.
Два факта, на которых люди ошибаются, теперь называются прямо:
1. Порог — это НЕ окно. Компакт наступает на `window - min(max_output, 20000)
- 13000`, то есть на 33k раньше края. Хочешь компакт на 460000 — ставь
493000; поставишь 460000 — получишь 427000.
2. Значение выше контекстного окна модели не делает НИЧЕГО. На 200k-модели
460000 резолвится в 200000 и выглядит при этом как рабочая настройка
(отдаётся флагом clamped: true).
Формула перепроверена на бинаре 2.1.238 самостоятельно, а не по пересказу:
USe(e,t) возвращает `окно - min(Mor(e), avp)` при avp=20000, Oor = Mli(USe(...))
вычитает ещё 13000, и именно Oor подставляется в autoCompactThreshold. У
claude-opus-5 в таблице `context:{window:1e6, native_1m:!0}` и
`max_output_tokens:{default:64000}`, отсюда резерв ровно 33k.
🛑 Рядом лежит dRa() с `Math.min(e - e*precomputeBufferFraction, ...)` при доле
0.2 — это precompute-механизм, НЕ автокомпакт; спутать значит ошибиться на 20%
окна.
Мутант-килл: 5 правок, 5 адресных падений. Шестой прогон сначала показал
выжившего — оказалось, мутировано не то место: строка `if not
autocompact_enabled(cwd)` встречается дважды, и замена попала в resolve_window,
чей тест живёт в другом файле. Перемер с якорем внутри explain и прогоном обеих
сюит: убит.
Гейт: 17 сюит зелёные (context-window 31 -> 37), lint PASSED, verify-release
для v1.2.16 подтверждён.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ответ на вопрос «можно зашить рабочее значение
autoCompactWindowв плагин по умолчанию?» — нет, и вместо дефолта плагин теперь умеет объяснить.Почему не дефолт
Замер по таблице моделей в бинаре 2.1.238:
493000min(493k, 200k)— не действует вовсеПлюс
autoCompactWindowживёт в~/.claude/settings.json— это настройка Claude Code, и плагин, который её молча правит, перестаёт быть non-destructive.Что вместо
Хук
autocompactNudgeпо построению отказывает молча: не удалось установить окно — молчит, и это неотличимо от «предупреждать не о чем». Теперь есть место, которое проговаривает разницу:Отдаёт
resolved/source(env|settings|cache|model-default|disabled) /window/compacts_at/reserve/clampedплюс готовую подсказку.healthзовёт его новым Step 7.55 (только когда нудж включён),setupпередаёт hint при включении. Read-only: сообщает, что поставить, и никогда не пишет.Два факта, на которых ошибаются
window − min(max_output, 20000) − 13000, на 33k раньше края. Хочешь компакт на 460000 — ставь 493000; поставишь 460000 — получишь 427000.460000резолвится в200000и выглядит рабочей настройкой. Отдаётся флагомclamped: true.Формула перепроверена на 2.1.238 самостоятельно:
USeвозвращаетокно − min(Mor(e), avp)приavp=20000,Oor = Mli(USe(…))вычитает ещё 13000, и именноOorподставляется вautoCompactThreshold. СоседняяdRa()с долей 0.2 — precompute-механизм, не автокомпакт.Гейт
Мутант-килл 5 из 5 (шестой прогон сначала дал выжившего — оказалось, мутировано не то место: одноимённая строка встречается дважды, замена попала в
resolve_window; перемер с точным якорем убил). 17 сюит зелёные,context-window31 → 37 тестов, lint PASSED, verify-release для v1.2.16.🤖 Generated with Claude Code