chore: scheduler runtime state + spike findings

- 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>
This commit is contained in:
2026-04-26 18:17:53 +00:00
parent 094c6be5a9
commit b95395ec2c
2 changed files with 64 additions and 3 deletions

View File

@@ -269,9 +269,9 @@
"prompt": "Heartbeat check. Rulează src/heartbeat.py printr-un scurt raport de status.\nDacă nu e nimic de raportat (email=0, calendar nu are evenimente <2h, kb ok), răspunde doar cu HEARTBEAT_OK și oprește-te — nu trimite mesaj.\nDacă e ceva: raport scurt pe Discord #echo-work.", "prompt": "Heartbeat check. Rulează src/heartbeat.py printr-un scurt raport de status.\nDacă nu e nimic de raportat (email=0, calendar nu are evenimente <2h, kb ok), răspunde doar cu HEARTBEAT_OK și oprește-te — nu trimite mesaj.\nDacă e ceva: raport scurt pe Discord #echo-work.",
"allowed_tools": [], "allowed_tools": [],
"enabled": true, "enabled": true,
"last_run": "2026-04-26T16:00:00.003767+00:00", "last_run": "2026-04-26T18:00:00.003601+00:00",
"last_status": "ok", "last_status": "ok",
"next_run": "2026-04-26T18:00:00+00:00" "next_run": "2026-04-27T06:00:00+00:00"
}, },
{ {
"name": "night-execute", "name": "night-execute",
@@ -289,4 +289,4 @@
"last_status": null, "last_status": null,
"next_run": null "next_run": null
} }
] ]

View File

@@ -0,0 +1,61 @@
# 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 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 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).