ca97660bac
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>
77 lines
6.2 KiB
Markdown
77 lines
6.2 KiB
Markdown
# 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 п.2–5, §12.3 п.3–7, §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
|
||
|