Files
pi-auto-reinject/BACKLOG.md
T
grayhook ca97660bac TODO: plan Phase 15 for mid-turn compaction reinject gap (B-003)
Document root cause and fix strategy from lost-reinject.jsonl analysis.
Add B-003 to BACKLOG; ignore *.ndjson and *.jsonl session dumps.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-18 22:42:48 +07:00

77 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# BACKLOG — pi-skill-reinject
Журнал **открытых** ограничений и сбоев при разработке, ручном тесте с `pi`, интеграции с [pi-auto-compact](https://github.com/capyup/pi-auto-compact) или неясностях API Pi.
Не путать с [`TODO.md`](./TODO.md): там план разработки; здесь — наблюдения из runtime, которые потом закрывают пачкой (правка кода, документация, issue upstream Pi).
Правило для агентов: [`.cursor/rules/dev-backlog.mdc`](./.cursor/rules/dev-backlog.mdc).
---
## Когда добавлять пункт
- Поведение Pi / extension API не совпало с [`SPEC.md`](./SPEC.md) или [документацией Pi](https://github.com/earendil-works/pi/blob/main/packages/coding-agent/docs/extensions.md).
- Ошибка или гонка при совместной работе с pi-auto-compact (`sendUserMessage`, `before_agent_start`, follow-up).
- Ручной E2E не воспроизводится стабильно; обходной путь есть, но хрупкий.
- Неясность в публичном API (события без `reason`, формат entries, settings merge).
- Пришлось дублировать приватную логику Pi — зафиксировать риск и желаемый upstream.
**Не добавлять:** ожидаемое «extension выключен по умолчанию»; отсутствие установленного `pi`; разовый сбой без воспроизведения; пункты из плана фаз (это `TODO.md`).
---
## Формат пункта
Следующий свободный id: **`B-###`** (смотреть заголовки ниже, увеличивать номер).
```markdown
### B-001 · open · pi-api · 2026-06-17
- **Сценарий:** что пытались сделать
- **Проблема:** одно предложение — в чём затык
- **Место:** `session_compact` / `before_agent_start` / pi-auto-compact / `src/…`
- **Факт:** текст ошибки, неожиданное поведение, расхождение с SPEC
- **Обход:** что сработало (или «нет»)
- **Предложение:** правка в extension / SPEC / issue в Pi / pi-auto-compact
```
При закрытии: статус `open``done`, дата закрытия, ссылка на коммит/issue; блок перенести в [Закрыто](#закрыто).
---
## Открыто
_Новые пункты — ниже (следующий id: **B-004**)._
### B-003 · open · e2e · 2026-06-18
- **Сценарий:** Длинная сессия `gitlab-mr-review` + pi-auto-compact; auto compaction в ходе Phase 6 review (issue #480334)
- **Проблема:** Второй подряд auto compaction не re-inject'ит tracked skill; `/skill-reinject` status показывает `last compaction: none`
- **Место:** `session_before_compact` / `session_compact` / defer + `before_agent_start`; артефакт `lost-reinject.jsonl`
- **Факт:** Compaction #1 (07:25:03): `lastCompactionSource: auto`, `skill-reinject:inject` есть, follow-up «Auto-compact ran before this turn». Compaction #2 (+11s, mid-turn после `ls`): `lastCompactionSource: null`, inject нет, агент продолжил без user-prompt. Skill `gitlab-mr-review` вне kept window (оригинальный block до `firstKeptEntryId`; reinject — `custom_message`, не user)
- **Обход:** `/skill-reinject now` (не проверялось в этом прогоне)
- **Предложение:** Phase 15 в `TODO.md` — fallback детекции source на `session_compact` + mid-turn доставка defer вне `before_agent_start` + kept-window учитывает `skill-reinject:inject`
---
## Закрыто
### B-002 · done · e2e · 2026-06-17 (закрыт 2026-06-17)
- **Сценарий:** Manual E2E §12.2 п.25, §12.3 п.37, §13 п.3/9/10 — auto compaction → re-inject tracked skills; `/skill-reinject now` как контроль
- **Проблема:** skill из `--skill /path/to/SKILL.md` разворачивается в контекст, но не попадает в `resourceLoader``planReinject` / `reinjectNow` отфильтровывают его (`filterSkillsNeedingReinject` требует `registeredNames.has(name)`)
- **Место:** `src/skills-registry.ts`, `src/kept.ts`, `src/reinject.ts`, `before_agent_start`
- **Факт:** pre-fix RPC: `registered` мог быть пуст при `loadSkills` fallback; skill вне kept + пустой registry → `planned=[]`. Post-fix: defer plan без registry на compact, consume/build loose fallback по `tracked.filePath`, `requireRegistered` (default false)
- **Закрытие:** Phase 14 commits (`aca68e7``e3873d7`); unit regression 84 tests; `docs/e2e-b002-post-fix.md` — short RPC session держит skill в kept (reinject не нужен); полный compact→reinject RPC требует длинной сессии
- **Предложение:** (реализовано) `planDeferredReinject`, `filterPendingReinjectForConsume`, loose `buildReinjectBlocks` / `reinjectNow`, README `requireRegistered`
### B-001 · done · e2e · 2026-06-17 (закрыт 2026-06-17)
- **Сценарий:** Manual E2E §12.2 / §12.3 — блокировка из‑за отсутствия LLM
- **Проблема:** в среде агента не было доступного LLM
- **Место:** `pi --mode rpc` / compaction
- **Факт:** изначально нет API key; `pi-llama-cpp``192.168.1.159:8080` недоступен. После настройки: `pi-provider-litellm`, `~/.pi/agent/litellm-models.json`, `auth.json`; `pi --list-models``Eltex-Coder-Senior`, `Eltex-Kimi`; compaction и agent turn работают
- **Обход:** LiteLLM proxy (`llm2.eltex.loc:4000`), default model `Eltex-Coder-Senior` в `settings.json`
- **Закрытие:** LLM доступен; частичный RPC smoke пройден (коммиты phase 13). Оставшиеся E2E-дыры — B-002