From fcf9283fe18b692d4818a69ce2b0ae8ae73ffae5 Mon Sep 17 00:00:00 2001 From: GRayHook Date: Wed, 17 Jun 2026 17:39:32 +0700 Subject: [PATCH] =?UTF-8?q?BACKLOG:=20close=20B-002=20=E2=80=94=20Phase=20?= =?UTF-8?q?14=20loose=20reinject=20for=20--skill=20paths?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Defer planning, consume filter, disk fallback, and unit regression gate; short RPC E2E documented in docs/e2e-b002-post-fix.md. Co-authored-by: Cursor --- BACKLOG.md | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/BACKLOG.md b/BACKLOG.md index d0d1eff..c54eebe 100644 --- a/BACKLOG.md +++ b/BACKLOG.md @@ -41,22 +41,21 @@ ## Открыто -### B-002 · open · e2e · 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` (`loadSkills` → 0 skills без discovery), `src/kept.ts` (`filterSkillsNeedingReinject`), `src/commands.ts` (`getRegisteredSkills()` без `resolveRegisteredSkills`), `before_agent_start` cache `registeredSkills` -- **Факт:** на машине с LiteLLM (`pi-provider-litellm`, `Eltex-Coder-Senior`) RPC smoke: команды OK, `/skill:fup-blame-commits` + `--skill ~/.cursor/skills/fup-blame-commits` → skill-блок в messages OK, ручной `/compact` → reinject нет (ожидаемо). Auto compact (RPC `compact`) + follow-up prompt → суффикса `[skill-reinject] Re-applied…` нет; `/skill-reinject now` после turn → новых inject-сообщений нет. `loadSkills({ includeDefaults: true })` в репо возвращает `[]`; skills лежат в `~/.cursor/skills`, не в путях discovery Pi -- **Обход:** для ручного E2E — skill в каталоге discovery Pi (`~/.pi/agent/skills`, project skills) или убедиться, что `before_agent_start` заполняет `systemPromptOptions.skills` для `--skill` CLI -- **Критерий закрытия:** (1) RPC или TUI: `/skill-reinject on` → `/skill:name` → auto compaction → на следующем turn в контексте reinject с суффиксом или skill-блок вне kept window; (2) `/skill-reinject now` добавляет блоки для tracked skill; (3) с pi-auto-compact: defer, нет `Agent is already processing`, continue после compact (§12.3 п.4–5); (4) unit/E2E не регрессят -- **Предложение:** в `commands.ts` / `reinjectNow` использовать `resolveRegisteredSkills(ctx.cwd, registeredSkills)`; рассмотреть reinject по `state.skills` + `filePath` tracked, если skill ещё на диске, без жёсткой привязки к `resourceLoader`; README — явно про `--skill` vs discovery paths - _Новые пункты — ниже (следующий id: **B-003**)._ --- ## Закрыто +### 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