diff --git a/.agentguard/squads/shellforge/blockers.md b/.agentguard/squads/shellforge/blockers.md index 225b4b1..54fcbc3 100644 --- a/.agentguard/squads/shellforge/blockers.md +++ b/.agentguard/squads/shellforge/blockers.md @@ -1,7 +1,7 @@ # ShellForge Squad — Blockers -**Updated:** 2026-03-30T00:45Z -**Reported by:** EM run 6 (claude-code:opus:shellforge:em) +**Updated:** 2026-03-30T10:00Z +**Reported by:** EM run 8 (claude-code:opus:shellforge:em) --- @@ -11,21 +11,27 @@ --- -## P1 — Active Work +## P1 — Pending Human Review -### PR #86 — Governance timeout override (awaiting human review) -**Description:** PR #86 removes the hardcoded 60s cap in `runShellWithRTK` and `runShellRaw` that silently overrode the governance engine's timeout value. CI pending; GitHub branch protection prevents self-approval. -**Action Required:** @jpleva91 review and approve PR #86. +### PR #89 — Test coverage + dead code fix (REVIEW REQUIRED) +**Description:** qa-agent opened PR #89 with 25 tests across `normalizer`, `governance`, and `intent` packages, plus the `flattenParams` dead code removal (#66). CI is green (5/5). GitHub branch protection prevents self-approval. +**Action Required:** @jpleva91 review and approve PR #89 — closes last P1 (#68 test coverage) and P2 #66. +**URL:** https://github.com/AgentGuardHQ/shellforge/pull/89 -### #63 — classifyShellRisk prefix matching too broad -**Severity:** High — false read-only classification on commands starting with `cat`/`ls`/`echo` -**Assignee:** qa-agent -**URL:** https://github.com/AgentGuardHQ/shellforge/issues/63 +### PR #90 — EM state update run 7 (REVIEW REQUIRED) +**Description:** EM state update PR from run 7. CI is green (5/5). Branch protection prevents EM self-merge. +**Action Required:** @jpleva91 review and merge PR #90. +**URL:** https://github.com/AgentGuardHQ/shellforge/pull/90 -### #68 — Zero test coverage across all packages -**Severity:** High — governance runtime with no tests is unshipable -**Assignee:** qa-agent -**URL:** https://github.com/AgentGuardHQ/shellforge/issues/68 +--- + +## P2 — Sprint Focus Blocker + +### #76 — Dogfood: setup.sh doesn't support remote Ollama +**Severity:** High — dogfood on jared-box (headless WSL2 + RunPod GPU) is blocked; this is the new sprint goal +**Root cause:** `shellforge setup` detects `isServer=true` on headless Linux and skips Goose + Ollama entirely, with no option to configure `OLLAMA_HOST` for a remote GPU endpoint. +**Fix needed:** When `isServer=true`, offer remote Ollama mode — set `OLLAMA_HOST`, skip local Ollama install, keep Goose setup. +**URL:** https://github.com/AgentGuardHQ/shellforge/issues/76 --- @@ -33,9 +39,7 @@ | # | Issue | Notes | |---|-------|-------| -| #76 | Dogfood: run ShellForge swarm on jared box | P0 governance bugs resolved — can now proceed | | #65 | scheduler.go silent os.WriteFile error | Silent failure on job persistence | -| #66 | flattenParams dead code | Logic bug, result overwritten before use | | #52 | filepath.Glob ** never matches Go files | cmdScan scan feature broken | | #53 | README stale ./shellforge commands | Docs rot | | #51 | run() helper silently ignores errors | Silent failure in main.go | @@ -49,6 +53,8 @@ ## Resolved (this cycle) +- **#28** — bounded-execution policy timeout silently overridden to 60s → merged in PR #86 +- **#63** — classifyShellRisk prefix matching too broad → merged in PR #88 - **#58** — bounded-execution wildcard policy blocked all run_shell → merged in PR #83 - **#62** — cmdEvaluate fail-open on JSON unmarshal → merged in PR #83 - **#75** — govern-shell.sh printf injection → merged in PR #83 @@ -64,9 +70,13 @@ | Item | Status | |------|--------| | P0 issues | ✅ All closed | -| PR #86 (P1 timeout fix) | CI pending — REVIEW REQUIRED | -| PR budget | 1/3 | -| Dogfood (#76) | Governance unblocked — needs human trigger | -| QA-agent (#63, #68) | Active | +| P1 #28 (timeout fix) | ✅ Closed — PR #86 merged | +| P1 #63 (classifyShellRisk) | ✅ Closed — PR #88 merged | +| P1 #68 (test coverage) | 🟡 PR #89 open, CI green — REVIEW REQUIRED | +| P2 #66 (dead code) | 🟡 PR #89 open, CI green — REVIEW REQUIRED | +| Sprint goal (enforcement hardening) | ✅ Achieved | +| New sprint (dogfood readiness) | 🔵 Active | +| PR budget | 2/3 | +| Dogfood (#76) | 🔴 Blocked — setup.sh remote Ollama gap | | Retry loops | None | | Blast radius | Low | diff --git a/.agentguard/squads/shellforge/state.json b/.agentguard/squads/shellforge/state.json index cced989..18c91e1 100644 --- a/.agentguard/squads/shellforge/state.json +++ b/.agentguard/squads/shellforge/state.json @@ -1,13 +1,18 @@ { "squad": "shellforge", - "updated_at": "2026-03-30T00:45:00Z", + "updated_at": "2026-03-30T10:00:00Z", "sprint": { - "goal": "Harden enforcement runtime — fix all P0/P1 governance bugs before dogfood run", - "focus": "Security correctness: P0 COMPLETE, P1 #28 in PR #86, test coverage (#68) and classifyShellRisk (#63) assigned to qa-agent" + "goal": "Dogfood readiness — unblock jared-box run and batch P2 bug fixes", + "focus": "Fix setup.sh remote Ollama gap (#76). P2 batch: #65, #52, #51, #50. README cleanup (#53). Prerequisite: human must merge PR #89 and PR #90 to clear P1 backlog.", + "status": "active", + "previous_sprint": { + "goal": "Harden enforcement runtime — fix all P0/P1 governance bugs before dogfood run", + "status": "ACHIEVED — all P0/P1 closed or in CI-green PR. PR #89 (P1 #68 + P2 #66) pending human merge." + } }, "pr_budget": { "max_open": 3, - "current_open": 1, + "current_open": 2, "status": "ok" }, "loop_guard": { @@ -17,16 +22,14 @@ "issue_queue": { "p0": [], "p1": [ - { "number": 28, "title": "bug: bounded-execution policy timeout (300s) is silently overridden to 60s in shell execution", "assignee": "em", "status": "fix-in-pr-86" }, - { "number": 63, "title": "bug: classifyShellRisk prefix matching too broad — false read-only classification", "assignee": "qa-agent" }, - { "number": 68, "title": "test: zero test coverage across all packages", "assignee": "qa-agent" } + { "number": 68, "title": "test: zero test coverage across all packages", "assignee": "qa-agent", "status": "PR #89 open, CI green (5/5) — REVIEW REQUIRED" }, + { "number": 66, "title": "bug: dead code in flattenParams() overwrites result before using it", "assignee": "qa-agent", "status": "covered in PR #89 — REVIEW REQUIRED" } ], "p2": [ + { "number": 76, "title": "Dogfood: run ShellForge swarm on jared box via RunPod GPU", "assignee": "em", "status": "SPRINT FOCUS — setup.sh isServer=true skips Goose, no OLLAMA_HOST support for remote GPU endpoint" }, { "number": 65, "title": "bug: scheduler.go silently ignores os.WriteFile error", "assignee": null }, - { "number": 66, "title": "bug: dead code in flattenParams() overwrites result before using it", "assignee": null }, { "number": 52, "title": "bug: filepath.Glob with ** in cmdScan never matches any Go files", "assignee": null }, { "number": 53, "title": "docs/readme: README still shows ./shellforge commands", "assignee": null }, - { "number": 76, "title": "Dogfood: run ShellForge swarm on jared box via RunPod GPU", "assignee": null }, { "number": 51, "title": "bug: run() helper in main.go silently ignores command errors", "assignee": null }, { "number": 50, "title": "bug: kernel version comparison in setup.sh is lexicographic, not numeric", "assignee": null }, { "number": 49, "title": "bug: InferenceQueue is not priority-aware despite being documented as such", "assignee": null }, @@ -49,31 +52,43 @@ }, "pr_queue": [ { - "number": 86, - "title": "fix(governance): honour policy timeout in shell execution — remove 60s cap (#28)", + "number": 90, + "title": "chore(squad): EM state update — run 7 (2026-03-30)", + "status": "open", + "ci": "green (5/5)", + "review_status": "REVIEW REQUIRED — branch protection blocks EM self-merge", + "issues_closed": [] + }, + { + "number": 89, + "title": "test: initial coverage — normalizer, governance, intent (closes #68, #66)", "status": "open", - "ci": "pending", - "review_status": "REVIEW_REQUIRED — awaiting human approval", - "issues_closed": [28] + "ci": "green (5/5)", + "review_status": "REVIEW REQUIRED — awaiting human approval", + "issues_closed": [68, 66] } ], "recently_closed": [ + { "number": 88, "merged": true, "issues_closed": [63], "date": "2026-03-30", "notes": "P1 classifyShellRisk word-boundary fix" }, + { "number": 87, "merged": true, "issues_closed": [], "date": "2026-03-30", "notes": "EM state run 6" }, + { "number": 86, "merged": true, "issues_closed": [28], "date": "2026-03-30", "notes": "P1 timeout override fix" }, { "number": 83, "merged": true, "issues_closed": [58, 62, 67, 69, 75], "date": "2026-03-30" }, - { "number": 84, "merged": true, "issues_closed": [74], "date": "2026-03-30" }, - { "number": 85, "merged": true, "issues_closed": [], "date": "2026-03-30" } + { "number": 84, "merged": true, "issues_closed": [74], "date": "2026-03-30" } ], "agents": { - "qa-agent": { "status": "assigned", "schedule": "4h", "last_issue": 63 }, + "qa-agent": { "status": "idle", "schedule": "4h", "last_pr": 89, "notes": "PR #89 open (25 tests + dead code fix) — awaiting human merge. No new tasking until PR lands." }, "report-agent": { "status": "idle", "schedule": "30m", "last_issue": null }, "security-scanner": { "status": "idle", "schedule": "12h", "last_issue": 75 }, "slack-notifier": { "status": "disabled", "schedule": "8h", "last_issue": null } }, "capability_gaps": [ - "No dev-agent in swarm — P0/P1 bugs require EM to author fixes directly" + "No dev-agent — P2 bug fixes (setup.sh #76, silent errors #65/#51, Glob #52) require EM to author directly", + "setup.sh remote Ollama gap (#76) is the critical dogfood blocker — needs dev author for setup.sh changes" ], "blockers": [ - "PR #86 (P1 timeout fix): CI pending, review BLOCKED — GitHub prevents self-approval. Requires human review from @jpleva91.", - "Dogfood (#76): unblocked by P0 merge but no assignee yet — needs human trigger." + "PR #89 (test coverage + dead code): CI green (5/5), REVIEW REQUIRED — @jpleva91 must approve to close P1 #68 and P2 #66", + "PR #90 (EM state run 7): CI green (5/5), REVIEW REQUIRED — branch protection prevents EM self-merge", + "Dogfood (#76): setup.sh `isServer=true` skips Goose with no remote Ollama (OLLAMA_HOST) option — code fix needed before jared-box run" ], - "notes": "Run 6 (2026-03-30T00:45Z): PRs #83/#84/#85 all merged — P0 COMPLETE. Issue #59 closed (was already fixed by #83). PR #86 opened for last P1 (#28, timeout override). PR budget 1/3. Sprint goal nearly achieved — remaining P1s are #28 (in PR), #63/#68 (qa-agent). Dogfood run (#76) is unblocked from governance side but needs human to trigger." + "notes": "Run 8 (2026-03-30T10:00Z): Sprint transitioned to 'Dogfood readiness'. Previous sprint (enforcement hardening) fully achieved — all P0/P1 governance bugs closed or CI-green PR. No new issues found. Build clean. PR budget 2/3, no retry loops. Both open PRs (#89, #90) CI-green but blocked on human review due to branch protection. Next actions: human merges #89 + #90, squad pivots to #76 (setup.sh remote Ollama) and P2 bug batch." }