fix(pstack): preload poteto-mode in Claude agent - #50
Conversation
|
Tick the box to add this pull request to the merge queue (same as
|
Greptile SummaryThis PR preloads the existing
Confidence Score: 4/5The production change appears safe to merge, with a non-blocking weakness in how the new live regression proves preload behavior. The frontmatter binding and static invariant are consistent with the package’s naming and delivery model; the only accepted concern is that the behavioral check can pass through an alternate skill-loading path because it asserts only the returned phrase. Files Needing Attention: tests/skill-collision-repro.sh
|
| Filename | Overview |
|---|---|
| plugins/pstack/agents/poteto-agent.md | Adds the canonical pstack:poteto-mode skill to the Claude agent’s preload frontmatter. |
| tests/skill-collision-repro.sh | Adds a sound static binding invariant, but the live check verifies only output text rather than whether the skill was actually preloaded. |
| docs/reference.md | Documents why the Claude-specific preload is required while preserving the existing agent invocation guidance. |
Reviews (1): Last reviewed commit: "fix(pstack): preload poteto-mode in Clau..." | Re-trigger Greptile
| --tools Agent \ | ||
| < /dev/null 2>&1 | ||
| )" | ||
| check "poteto-agent preloaded skill" "Laziness Protocol" "$preloaded_agent_output" |
There was a problem hiding this comment.
This regression only checks the child’s final text for Laziness Protocol. Asking the model not to invoke Skill or read files does not verify that restriction, especially because the agent description itself tells the child to read the poteto-mode skill. If the child obtains the phrase through that alternate path, the test passes without proving that frontmatter preloading worked. Consider asserting the child’s tool activity or making the expected value unavailable without the preload.
Knowledge Base Used: Testing and CI quality gates
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
|
@ericlitman This prerequisite is ready and blocks #52. The exact head still has the recorded live Claude preload evidence. I re-ran the repository suite today: 157 passed with only the already-documented baseline runner deadline test failing; static/plugin validation remains clean. Please merge #50 when ready so #52 can be rebased onto main and complete its Conductor acceptance. |
ericlitman
left a comment
There was a problem hiding this comment.
Gavel verdict: Approve
0 blocking findings; 0 unconfirmed plausible findings; 0 killed by adjudication; 1 confirmed non-blocking.
Quorum: 4/3 successful reviewers.
Continuity: 0 open · 0 resolved · 0 reopened.
Scope: initial full review.
Top findings
No blocking findings.
Non-blocking findings
- LOW
tests/skill-collision-repro.sh:458-467 RIGHTNew live check assigns claude output without|| true, aborting the script and discarding diagnostics — The new behavioral block captures the CLI output in a plain assignment (preloaded_agent_output="$(claude -p ... 2>&1)") with no|| true. Every other command substitution in this script that can exit nonzero is written"$(... || true)"(e.g.n="$(grep -Fc "$anchor" "$skill" || true)",copies="$(find ... 2>/dev/null || true)"), which only makes sense underset -e. Underset -e, any nonzero exit fromclaude(auth failure, rate limit, API error,--max-turnsexhaustion, or an unsupported flag) aborts the script at line 458: the captured stderr is thrown away, thecheckon line 468 never prints itsFAIL: ... got: <error>diagnostic, andexit "$fail"is skipped. Contrast the pre-existing checks, which pass$(run ...)as an argument so a failing child cannot abort the run. Fix:preloaded_agent_output="$(claude -p ... 2>&1 || true)". Note theset -eline at the top of the script is outside the visible diff, so this rests on the file's pervasive|| trueconvention as evidence.
Gavel run panel:42a68147903a35ea513ec88d144f1d760d5eb6cf:OMxeuW3-nB-:T_1NicuBuHY · Commit 42a68147903a35ea513ec88d144f1d760d5eb6cf
Judge: native (primary) openai/gpt-6-astra · tools: yes
Full record: GET /gavel/run/panel:42a68147903a35ea513ec88d144f1d760d5eb6cf:OMxeuW3-nB-:T_1NicuBuHY
Closes #49
Why
Claude subagents start with isolated context and do not inherit skills loaded by their parent. The poteto-agent prompt named the skill, but the skill body was unavailable unless the child independently invoked Skill or read plugin files.
What changed
Blast radius
This changes only the Claude-native pstack:poteto-agent. The shared skill tree, Codex path, other agents, and external provider lanes are unchanged.
Verification
Live evidence: