Fixes the Module 25 security + lab-integrity findings from the course review.
#24 (security): GitHub Actions expression-injection — untrusted github.event.issue.body now flows through env: and is read as $BODY, never interpolated into a run: script.
#25: lab .gitignore stops propose_pr's git add -A from sweeping __pycache__/scaffolding into the review diff.
#26: simulated reject() now removes the agent's untracked files (which git restore cannot).
#27: README clarifies --simulate runs a deterministic stand-in, not the delete-command issue.
Fixes the Module 25 security + lab-integrity findings from the course review.
- **#24 (security)**: GitHub Actions expression-injection — untrusted `github.event.issue.body` now flows through `env:` and is read as `$BODY`, never interpolated into a `run:` script.
- **#25**: lab `.gitignore` stops `propose_pr`'s `git add -A` from sweeping `__pycache__`/scaffolding into the review diff.
- **#26**: simulated `reject()` now removes the agent's untracked files (which `git restore` cannot).
- **#27**: README clarifies `--simulate` runs a deterministic stand-in, not the delete-command issue.
Closes #24
Closes #25
Closes #26
Closes #27
Verified: YAML parses, `py_compile` clean, `--simulate good/bad/stuck` behave per the README, review diff contains only the two intended files.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
- agent-job.yml: pass untrusted issue body via env (BODY), never interpolated
into a run: shell line (fixes GHA expression-injection). Adds security note.
- lab/.gitignore: keep propose_pr's `git add -A` from sweeping __pycache__ and
copied scaffolding into the review diff.
- agent_runner.py: simulated reject() now removes the agent's untracked files
(git restore can't), and the Module 2 restore line only prints for the real
tracked-edit path.
- README: clarify --simulate uses a deterministic stand-in, not the delete issue.
Closes#24Closes#25Closes#26Closes#27
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_01TfzV5QvtPDz8LJS3Pu5VLT
claude
merged commit b061a9da14 into main2026-06-22 14:37:20 -04:00
claude
deleted branch fix/p1-security-module-252026-06-22 14:37:20 -04:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Fixes the Module 25 security + lab-integrity findings from the course review.
github.event.issue.bodynow flows throughenv:and is read as$BODY, never interpolated into arun:script..gitignorestopspropose_pr'sgit add -Afrom sweeping__pycache__/scaffolding into the review diff.reject()now removes the agent's untracked files (whichgit restorecannot).--simulateruns a deterministic stand-in, not the delete-command issue.Closes #24
Closes #25
Closes #26
Closes #27
Verified: YAML parses,
py_compileclean,--simulate good/bad/stuckbehave per the README, review diff contains only the two intended files.🤖 Generated with Claude Code