Files
grayhook d126efe907 BACKLOG: close B-003 — Phase 15 mid-turn compaction reinject fix
Source fallback on session_compact, steer delivery when not idle, and
kept-window inject entries address lost-reinject second-compact failure.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-18 23:03:09 +07:00

77 lines
6.1 KiB
Markdown
Raw Permalink 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 · done · e2e · 2026-06-18 (закрыт 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: `lastCompactionSource: auto`, inject OK. Compaction #2 mid-turn: `lastCompactionSource: null` (no `session_before_compact`), defer consume only on user prompt → skill lost
- **Закрытие:** Phase 15 (`a07ddef``c12a371`); `ensureCompactionSourceMarked` on `session_compact`, mid-turn `sendMessage`/`steer`, kept-window `skill-reinject:inject`, debug diag; 93 unit tests; `scripts/b003-repro.mjs`; full two-compact RPC deferred (`docs/e2e-b003-post-fix.md`)
- **Предложение:** (реализовано) source fallback §8, steer delivery §6.5.1, kept custom §6.4
### 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