Skip to content
Closed
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
74 changes: 47 additions & 27 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-30T08:42Z
**Reported by:** EM run 7 (claude-code:opus:shellforge:em)
**Updated:** 2026-03-31T00:00Z
**Reported by:** EM run 9 (claude-code:opus:shellforge:em)

---

Expand All @@ -13,17 +13,36 @@

## P1 — Active Work

### PR #89 — Test coverage + dead code fix (awaiting human review)
**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 — this closes the last P1 (#68 test coverage).
**URL:** https://github.com/AgentGuardHQ/shellforge/pull/89
**None.** All P1 issues closed (PR #89 merged — closes #68 + #66).

---

## P2 — Active Blocker
## Incident (Resolved)

### #76 — Dogfood: setup.sh doesn't support remote Ollama
**Severity:** Medium — dogfood on jared-box (headless WSL2 + RunPod GPU) is blocked
### Broken worktree — incomplete WIP fix for #51
**Detected:** Run 9 (2026-03-31)
**Resolved:** Yes
**Description:** The worktree had uncommitted partial changes to `cmd/shellforge/main.go`:
- `import (` was replaced with `import "log"`, breaking the multi-package import block syntax
- `run()` was partially refactored to call a non-existent `executeCommand()` function, leaving the old body orphaned outside any function
- Build failure: `syntax error: non-declaration statement outside function body`

**Resolution:** Stashed the WIP changes, created `fix/run-silent-errors-51` branch from `origin/main`, implemented the fix correctly (add `"log"` to imports, log error in `run()` via `if err := cmd.Run(); err != nil`). PR #93 open.

---

## P2 — Active Blockers

### PR Review Queue (budget: 2/3)
| PR | Title | Status |
|----|-------|--------|
| #91 | EM state update run 8 | CI green — REVIEW REQUIRED |
| #93 | fix run() silent errors (closes #51) | CI pending — REVIEW REQUIRED |

**Action Required:** @jpleva91 review and merge PR #91 and PR #93.

### #76 — Dogfood: setup.sh doesn't support remote Ollama (3rd escalation)
**Severity:** Medium — dogfood on jared-box (headless WSL2 + RunPod GPU) blocked
**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:** setup.sh should offer remote Ollama config when `isServer=true` — set `OLLAMA_HOST`, skip local Ollama install, keep Goose setup.
**URL:** https://github.com/AgentGuardHQ/shellforge/issues/76
Expand All @@ -34,10 +53,10 @@

| # | Issue | Notes |
|---|-------|-------|
| #65 | scheduler.go silent os.WriteFile error | Silent failure on job persistence |
| #52 | filepath.Glob ** never matches Go files | cmdScan scan feature broken |
| #92 | Bundle Preflight in Goose bootstrap | Blocked on Preflight v1 ship |
| #65 | scheduler.go silent os.WriteFile error | Next EM fix after PR budget clears |
| #52 | filepath.Glob ** never matches Go files | Next EM fix — needs filepath.Walk |
| #53 | README stale ./shellforge commands | Docs rot |
| #51 | run() helper silently ignores errors | Silent failure in main.go |
| #50 | kernel version comparison lexicographic | setup.sh version gate broken |
| #49 | InferenceQueue not priority-aware | Documented but unimplemented |
| #26 | run-qa/report agents don't build binary if missing | Setup gap |
Expand All @@ -48,15 +67,16 @@

## 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
- **#67** — govern-shell.sh fragile sed output parsing → merged in PR #83
- **#69** — rm policy only blocked -rf/-fr, not plain rm → merged in PR #83
- **#74** — stale crush references in cmdEvaluate → merged in PR #84
- **#59** — misleading `# Mode: monitor` comment → fixed in PR #83, closed manually
- **#68** — zero test coverage → merged PR #89 (25 tests for normalizer/governance/intent)
- **#66** — dead code in flattenParams() → fixed in PR #89
- **#51** — run() helper silently ignores errors → PR #93 open

## Resolved (prior cycles)

- **#28** → PR #86 merged
- **#63** → PR #88 merged
- **#58, #62, #75, #67, #69** → PR #83 merged
- **#74** → PR #84 merged

---

Expand All @@ -65,11 +85,11 @@
| Item | Status |
|------|--------|
| P0 issues | ✅ All closed |
| 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 |
| Sprint goal | ✅ Achieved (pending PR #89 merge) |
| PR budget | 1/3 |
| Dogfood (#76) | 🔴 Blocked — setup.sh remote Ollama gap |
| P1 issues | ✅ All closed |
| PR #91 (EM state run 8) | 🟡 CI green — REVIEW REQUIRED |
| PR #93 (fix #51) | 🟡 CI pending — REVIEW REQUIRED |
| Sprint goal | 🔵 Active — P2 sweep in progress |
| PR budget | 2/3 |
| Dogfood (#76) | 🔴 Blocked — setup.sh remote Ollama gap (3rd escalation) |
| Retry loops | None |
| Blast radius | Low |
100 changes: 54 additions & 46 deletions .agentguard/squads/shellforge/state.json
Original file line number Diff line number Diff line change
@@ -1,91 +1,99 @@
{
"squad": "shellforge",
"updated_at": "2026-03-30T08:42:00Z",
"updated_at": "2026-03-31T00:00:00Z",
"sprint": {
"goal": "Harden enforcement runtime — fix all P0/P1 governance bugs before dogfood run",
"focus": "P0/P1 COMPLETE: all governance bugs closed or in green PR. PR #89 (test coverage + dead code) CI green, awaiting human merge.",
"status": "goal_achieved_pending_pr_merge"
"goal": "P2 bug sweep + dogfood readiness — #52 (Glob **), #65 (silent WriteFile), #76 (setup.sh remote Ollama)",
"focus": "PR #89 merged (25 tests, #68+#66 closed). Fixed #51 in PR #93. Next: #52 (Glob **) and #65 (silent WriteFile) when budget clears.",
"status": "active"
},
"pr_budget": {
"max_open": 3,
"current_open": 1,
"current_open": 2,
"status": "ok"
},
"loop_guard": {
"retry_loop_detected": false,
"blast_radius": "low"
},
"incident": {
"id": "worktree-dirty-wip-51",
"resolved": true,
"description": "Worktree had uncommitted partial fix for #51 — import block broken (import \"log\" vs import ()), orphaned run() body left outside function. Build was failing. Stashed WIP, reimplemented cleanly in PR #93."
},
"issue_queue": {
"p0": [],
"p1": [
{ "number": 28, "title": "bug: bounded-execution policy timeout (300s) is silently overridden to 60s in shell execution", "assignee": "em", "status": "CLOSED — merged PR #86" },
{ "number": 63, "title": "bug: classifyShellRisk prefix matching too broad — false read-only classification", "assignee": "qa-agent", "status": "CLOSED — merged PR #88" },
{ "number": 68, "title": "test: zero test coverage across all packages", "assignee": "qa-agent", "status": "PR #89 open, CI green (5/5)" }
],
"p1": [],
"p2": [
{ "number": 66, "title": "bug: dead code in flattenParams() overwrites result before using it", "assignee": "qa-agent", "status": "covered in PR #89" },
{ "number": 65, "title": "bug: scheduler.go silently ignores os.WriteFile error", "assignee": null },
{ "number": 76, "title": "Dogfood: run ShellForge swarm on jared box via RunPod GPU", "assignee": null, "notes": "Blocked on setup.sh: isServer=true skips Goose, remote Ollama (OLLAMA_HOST) not supported" },
{ "number": 52, "title": "bug: filepath.Glob with ** in cmdScan never matches any Go files", "assignee": null },
{ "number": 76, "title": "Dogfood: run ShellForge swarm on jared box via RunPod GPU", "assignee": "em", "notes": "Blocked on setup.sh: isServer=true skips Goose, remote Ollama (OLLAMA_HOST) not supported. 3rd escalation." },
{ "number": 92, "title": "Bundle Preflight protocol in Goose agent bootstrap", "assignee": null, "notes": "Blocked on Preflight v1 ship. Triaged P2 this run." },
{ "number": 65, "title": "bug: scheduler.go silently ignores os.WriteFile error", "assignee": "em" },
{ "number": 52, "title": "bug: filepath.Glob with ** in cmdScan never matches any Go files", "assignee": "em" },
{ "number": 53, "title": "docs/readme: README still shows ./shellforge commands", "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 },
{ "number": 26, "title": "bug: run-qa-agent.sh and run-report-agent.sh don't build binary if missing", "assignee": null },
{ "number": 25, "title": "bug: agent RunResult.Success heuristic is incorrect", "assignee": null },
{ "number": 24, "title": "bug: listFiles() returns paths relative to cwd, not the listed directory", "assignee": null }
{ "number": 51, "title": "bug: run() helper silently ignores errors", "assignee": "em", "notes": "FIXED — PR #93 open, CI pending" },
{ "number": 50, "title": "bug: kernel version comparison is lexicographic, not numeric", "assignee": null },
{ "number": 49, "title": "bug: InferenceQueue is not priority-aware", "assignee": null },
{ "number": 26, "title": "bug: run-qa-agent.sh doesn't build binary if missing", "assignee": null },
{ "number": 25, "title": "bug: agent RunResult.Success heuristic incorrect", "assignee": null },
{ "number": 24, "title": "bug: listFiles() returns paths relative to cwd", "assignee": null }
],
"p3": [
{ "number": 81, "title": "feat: OpenClaw as governed execution runtime in ShellForge", "assignee": null },
{ "number": 77, "title": "[research] Evaluate go-agent-framework sandboxing integration", "assignee": null },
{ "number": 73, "title": "[research] ml-explore/mlx-lm — Apple MLX inference backend", "assignee": null },
{ "number": 72, "title": "[research] nono — kernel-enforced agent sandbox via macOS Seatbelt", "assignee": null },
{ "number": 71, "title": "[research] lean-ctx — 88% token reduction via shell hook + MCP server", "assignee": null },
{ "number": 56, "title": "[research] mem0 — persistent cross-run agent memory", "assignee": null },
{ "number": 81, "title": "feat: OpenClaw as governed execution runtime", "assignee": null },
{ "number": 77, "title": "[research] go-agent-framework sandboxing", "assignee": null },
{ "number": 73, "title": "[research] ml-explore/mlx-lm inference backend", "assignee": null },
{ "number": 72, "title": "[research] nono — macOS Seatbelt sandbox", "assignee": null },
{ "number": 71, "title": "[research] lean-ctx — token reduction", "assignee": null },
{ "number": 56, "title": "[research] mem0 — persistent agent memory", "assignee": null },
{ "number": 55, "title": "[research] microsoft/agent-governance-toolkit", "assignee": null },
{ "number": 54, "title": "[research] omlx — SSD KV caching doubles swarm capacity", "assignee": null },
{ "number": 11, "title": "[research] RTK integration — 70-90% token savings for agent runs", "assignee": null },
{ "number": 10, "title": "[research] TurboQuant integration — 6x KV cache compression", "assignee": null }
{ "number": 54, "title": "[research] omlx — SSD KV caching", "assignee": null },
{ "number": 11, "title": "[research] RTK integration", "assignee": null },
{ "number": 10, "title": "[research] TurboQuant KV cache compression", "assignee": null }
]
},
"pr_queue": [
{
"number": 89,
"title": "test: initial coverage — normalizer, governance, intent (closes #68, #66)",
"number": 91,
"title": "chore(squad): EM state update — run 8 (2026-03-30)",
"status": "open",
"ci": "green (5/5)",
"review_status": "REVIEW_REQUIRED — awaiting human approval",
"issues_closed": [68, 66]
"review_status": "REVIEW_REQUIRED",
"issues_closed": []
},
{
"number": 93,
"title": "fix(main): log errors from run() helper — closes #51",
"status": "open",
"ci": "pending",
"review_status": "REVIEW_REQUIRED",
"issues_closed": [51]
}
],
"recently_closed": [
{ "number": 89, "merged": true, "issues_closed": [68, 66], "date": "2026-03-30", "notes": "25 tests — normalizer, governance, intent" },
{ "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" }
],
"agents": {
"qa-agent": { "status": "pr_open", "schedule": "4h", "last_pr": 89, "notes": "Opened PR #89 (25 tests + dead code fix) — solid output" },
"qa-agent": { "status": "idle", "schedule": "4h", "last_pr": 89, "notes": "PR #89 merged — idle until next assignment" },
"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 required EM to author fixes directly",
"No dev-agent in swarm — P2 bugs require EM to author fixes directly",
"setup.sh needs remote Ollama support (OLLAMA_HOST) before dogfood can proceed on headless/GPU-remote boxes"
],
"blockers": [
"PR #89 (test coverage + dead code fix): CI green — REVIEW REQUIRED. GitHub branch protection prevents self-approval. @jpleva91 must approve to close last P1 (#68) and P2 #66.",
"Dogfood (#76): governance unblocked, but setup.sh isServer check skips Goose on headless servers — needs code fix before jared-box dogfood run."
"PR #91 (EM state run 8): CI green — REVIEW REQUIRED. Chore PR.",
"PR #93 (fix #51): CI pending — REVIEW REQUIRED. One-line fix, 25/25 tests pass.",
"Dogfood (#76): 3rd escalation — setup.sh isServer check skips Goose on headless servers. Needs code fix before jared-box dogfood run."
],
"next_sprint_proposal": {
"goal": "Dogfood readiness — unblock jared-box run and batch P2 bug fixes",
"focus": [
"Fix setup.sh: support remote Ollama (OLLAMA_HOST) on headless/server deployments (#76)",
"P2 batch: #65 (silent WriteFile), #52 (Glob ** broken), #51 (silent run() errors), #50 (version compare)",
"README cleanup (#53)"
]
},
"notes": "Run 7 (2026-03-30T08:42Z): Sprint goal ACHIEVED. PR #86 merged (#28 closed), PR #88 merged (#63 closed), PR #89 opened by qa-agent with 25 tests — green CI. Only remaining action: human review of PR #89 to close last P1 (#68). Dogfood remains blocked on setup.sh remote Ollama gap. Next sprint: pivot to dogfood readiness."
"human_escalations": [
{ "priority": "P2", "title": "Review PR #91 — EM state run 8", "url": "https://github.com/AgentGuardHQ/shellforge/pull/91" },
{ "priority": "P2", "title": "Review PR #93 — fix run() silent errors (closes #51)", "url": "https://github.com/AgentGuardHQ/shellforge/pull/93" },
{ "priority": "P2", "title": "Trigger dogfood run (#76) — all governance P0/P1 bugs fixed, blocked on setup.sh remote Ollama gap", "url": "https://github.com/AgentGuardHQ/shellforge/issues/76" }
],
"notes": "Run 9 (2026-03-31): Found broken worktree — incomplete WIP fix for #51 left import block broken and run() body orphaned. Stashed, reimplemented cleanly in PR #93. PR #89 now merged (25 tests). Issue #92 (Preflight/Goose) triaged P2. PR budget 2/3. Next: fix #52 (filepath.Walk) and #65 (scheduler WriteFile) when budget clears."
}
Loading