From b95395ec2c5b6f2824510f24d5912fbb8beed660 Mon Sep 17 00:00:00 2001 From: Marius Mutu Date: Sun, 26 Apr 2026 18:17:53 +0000 Subject: [PATCH] chore: scheduler runtime state + spike findings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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) --- cron/jobs.json | 6 ++-- tasks/spike-planning-findings.md | 61 ++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 tasks/spike-planning-findings.md diff --git a/cron/jobs.json b/cron/jobs.json index 34cafca..2fa1ddc 100644 --- a/cron/jobs.json +++ b/cron/jobs.json @@ -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.", "allowed_tools": [], "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", - "next_run": "2026-04-26T18:00:00+00:00" + "next_run": "2026-04-27T06:00:00+00:00" }, { "name": "night-execute", @@ -289,4 +289,4 @@ "last_status": null, "next_run": null } -] \ No newline at end of file +] diff --git a/tasks/spike-planning-findings.md b/tasks/spike-planning-findings.md new file mode 100644 index 0000000..de0c035 --- /dev/null +++ b/tasks/spike-planning-findings.md @@ -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 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 -p ''` î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/ + ~/.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 `) + +**Total cost spike**: ~$2.88 (subscription rate-limit consumption, nu USD direct).