mirror of
https://bitbucket.org/siakitem/my-pi.git
synced 2026-08-28 08:35:57 +00:00
2.3 KiB
2.3 KiB
issue, issue_title
| issue | issue_title |
|---|---|
| 44 | Auto-allow /dev/null in external directory checks |
Retro: #44 — Auto-allow /dev/null in external directory checks
Final Retrospective (2026-05-03T14:30:00Z)
Session summary
Planned, implemented, shipped, and released (v3.2.0) a hardcoded allowlist of safe OS device paths (/dev/null, /dev/stdin, /dev/stdout, /dev/stderr) that are excluded from the external_directory permission gate.
The change touched one source file (src/external-directory.ts) and two test files, with a docs update to README.md.
The user challenged the security model mid-planning ("could agents use /dev/null to destroy files?"), which strengthened the plan's Risks section.
Observations
What went well
- The user's security challenge during planning ("should this be a setting?") prompted a thorough analysis of
cat /dev/null > filescenarios. This analysis showed that the external-directory gate never protected against in-CWD truncation (the tokenizer splits on>, so the redirect target and/dev/nullare separate tokens). The resulting two new Risks rows made the plan more defensible and the commit history shows the reasoning for future readers. - TDD steps 5–6 collapsed into one commit because
extractExternalPathsFromBashCommanddelegates toisPathOutsideWorkingDirectory. Recognizing the transitive coverage during execution avoided an unnecessary implementation commit without losing test coverage.
What caused friction (agent side)
instruction-violation— Used a literal|inside a backtick span in a markdown table cell in the plan. Markdownlint's MD056 does not exempt inline code from column-count validation, so the pre-commit hook rejected the commit. Required a follow-up edit to escape as\|. Impact: one failed commit attempt + one fixup edit. Self-identified after the lint failure (not user-caught).
What caused friction (user side)
- No friction observed. The user's mid-planning challenge was well-timed — it arrived after the initial plan was committed but before implementation, which is the ideal moment for security review.
Changes made
- No
AGENTS.mdor prompt changes — the pipe-in-table escape rule was proposed but the user declined it (the lint catches it anyway).