Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 30 additions & 20 deletions .agentguard/squads/shellforge/blockers.md
Original file line number Diff line number Diff line change
@@ -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)

---

Expand All @@ -11,31 +11,35 @@

---

## 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

### #63classifyShellRisk 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 #90EM 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

---

## P2 — Queued (unassigned)

| # | 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 |
Expand All @@ -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
Expand All @@ -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 |
57 changes: 36 additions & 21 deletions .agentguard/squads/shellforge/state.json
Original file line number Diff line number Diff line change
@@ -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": {
Expand All @@ -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 },
Expand All @@ -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."
}
Loading