- cron/jobs.json: heartbeat last_run / next_run actualizat de scheduler-ul live - tasks/spike-planning-findings.md: validare empirică Spike Step 0 pentru planning agent subprocess (claude -p + skills gstack + --resume round-trip) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
62 lines
4.3 KiB
Markdown
62 lines
4.3 KiB
Markdown
# Spike Step 0 — Planning Subprocess Feasibility
|
||
|
||
**Date:** 2026-04-26
|
||
**Plan:** `/home/moltbot/.claude/plans/home-moltbot-claude-plans-vreau-ca-come-snoopy-spark.md`
|
||
**Verdict:** ✅ **PASS** — proceed with W1 + W2 + W3 as planned
|
||
|
||
---
|
||
|
||
## Pass criteria check
|
||
|
||
| # | Criteriu plan | Rezultat | Detalii |
|
||
|---|---------------|----------|---------|
|
||
| 1 | Subprocess termină în <60s/turn | ✅ | 49s pentru turn cu prompt simplu, 82s pentru resume. |
|
||
| 2 | Output text readable (AskUserQuestion → text) | ✅ | Skill-ul detectează `-p` mode și serializează întrebarea în `result` text natural, NU blochează cu tool. |
|
||
| 3 | Session ID returnat și reusabil cu `--resume` | ✅ | Confirmat round-trip; context preservat între turn-uri. |
|
||
| 4 | Artifact pe disk apare în locația așteptată | ⚠️ N/A pentru spike | Artifactul se creează la sfârșitul fazei (multi-turn). Spike-ul a verificat doar primele 2 turn-uri; comportamentul de la sfârșit rămâne de validat în W2 implementation. |
|
||
|
||
---
|
||
|
||
## Test runs (raw)
|
||
|
||
| Run | Prompt | --max-turns | Result | Cost | Notes |
|
||
|-----|--------|-------------|--------|------|-------|
|
||
| 1 | `/office-hours Vreau sa adaug filtru genuri pe game-library` | 1 | `error_max_turns` (stop=tool_use) | $0.56 | Skill a iterat tool_use; nu a apucat să termine. |
|
||
| 2 | (același) | 8 | `error_max_turns` (stop=tool_use, num_turns=9) | $0.68 | Skill a făcut deep context-gathering (Bash×N pentru git log/grep) fără a ajunge la întrebare în turn budget. |
|
||
| 3 | `/office-hours Test feasibility minimal` | 5 | ✅ `completed` (end_turn) în 49s | $0.55 | Skill a detectat ambiguitate, a output-at întrebarea ca **text** în `result`, exit clean. |
|
||
| 4 | `--resume 175bb0c3...` cu reply substantive | 6 | ✅ `completed` (end_turn) în 82s | $1.11 | Skill a continuat natural, a output structured premises + clarification questions. |
|
||
|
||
---
|
||
|
||
## Concluzii cheie
|
||
|
||
### Validate
|
||
- **Pattern subprocess funcționează**: Echo poate `claude -p '/skill'` + `claude --resume <id> -p '<user reply>'` într-un loop cu user-in-the-loop.
|
||
- **AskUserQuestion convertit la text**: skill-ul gstack detectează single-shot mode și serializează întrebările în output text. Eng review's concern (#1, #2) **refutat empiric**.
|
||
- **Multi-language support**: skill răspunde în limba prompt-ului (ro detectat corect).
|
||
|
||
### Cavetate și ajustări față de plan
|
||
- **Turn budget critical**: prompts complexe (cu context concret de proiect) declanșează deep tool-use chains (read CLAUDE.md, grep, git log etc.) și pot eșua cu max-turns mic.
|
||
- **Recomandare W2**: `--max-turns 15-20` per invocare; detect `terminal_reason != "completed"` → fallback strategy (retry cu mesaj mai concis, sau abort cu mesaj util către user).
|
||
- **Cost per turn**: $0.5-1.1 pe runde Opus 4.7 1M context. Pentru full planning (4 faze × ~5 runde = 20 turns) ar putea fi $10-22 per proiect. Marius pe subscription deci e doar rate-limit pressure, nu USD direct.
|
||
- **Recomandare W2**: monitoring rate limits; instrumentation usage `total_cost_usd` aggregat per planning session.
|
||
- **Hot-restart limitation acceptat**: dacă echo-core restart mid-planning, sesiunea Claude rămâne pe disk (resume funcționează), DAR child subprocess (dacă e long-running) se pierde. Re-resume e necesar la repornire.
|
||
|
||
### Riscuri rămase pentru W2
|
||
1. **Skills înlănțuite** (ex: `/plan-ceo-review` urmat de `/plan-eng-review` în sesiuni separate, citind disk artifacts) — netestat în spike. Risc mediu — știm că skill-uri individuale merg.
|
||
2. **`--add-dir` cu paths multiple** pentru a expune ~/workspace/<slug> + ~/.gstack/projects/ + ~/.claude/skills/ — netestat. Risc mic, doar configurație.
|
||
3. **Stream-json input pentru pipe stdin response** — netestat; alternativa naivă (concat în prompt) merge.
|
||
|
||
---
|
||
|
||
## Decision
|
||
|
||
**Proceed with W1 → W2 → W3 sequence per plan.** Spike-ul confirmă fezabilitatea fundamentală a Partea C. Riscurile rămase sunt incrementale, nu blocaj arhitectural.
|
||
|
||
W2 trebuie să implementeze:
|
||
- `PlanningOrchestrator` cu `--max-turns 20` default și retry strategy pe `error_max_turns`
|
||
- Telemetry pe `total_cost_usd` în `result` JSON pentru rate limit monitoring
|
||
- Re-resume logic la restart echo-core (citește `sessions/planning.json`, continuă cu `--resume <stored_id>`)
|
||
|
||
**Total cost spike**: ~$2.88 (subscription rate-limit consumption, nu USD direct).
|