You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Five verified bugs from the third 6-agent audit pass.
## Bug 1 — grep walks dotfiles (security, F2 carryover)
`src/agent/tools/grep.rs:129` set `.hidden(false)` on the
ignore walker. Same security issue F2 fixed for find_files /
glob / list_dir — `.env`, `.git/` internals, etc. could be
matched by a generic regex search and surfaced into LLM context.
Added `include_hidden: bool` to `GrepArgs` (defaults false,
matching the F2 pattern). Schema documents the flag. Cache key
includes `:hidden=<bool>` so the same pattern with different
hidden flags doesn't collide.
## Bug 2 — grep invalid include glob silently fell back to
`src/agent/tools/grep.rs:121` used
`Regex::new(&pattern).unwrap_or_else(|_| Regex::new(".*").unwrap())` —
a malformed include like `"[a-z("` silently became
match-everything. User's include filter appeared to do nothing.
Now surfaces the compile error via `ToolError::Msg` so the LLM
sees "Invalid include glob '...': <err>. Use forms like "*.rs"
or "*.{ts,tsx}".".
## Bug 3 — default_permission_mode typo silently → Standard
`src/main.rs::resolve_mode` matched
`default_permission_mode` against "yolo"/"accept"/
"restrictive" and fell through to `SecurityMode::Standard`
for anything else. A typo like `"restritctive"` silently
ran the agent in standard mode while the user thought they had
configured restrictive.
Now warns to stderr naming the unknown value + valid options:
`warning: unknown default_permission_mode "restritctive" in
config; using standard. Valid values: yolo, accept, restrictive,
standard.`. Also accepts "standard" explicitly (previously
silent default).
## Bug 4 — chamber_row_centered padding off by 2 + char-count vs display-width
`src/ui/mod.rs::chamber_row_centered` had TWO stacked bugs:
(1) Used `content.chars().count()` instead of display width.
The NO-OUTPUT chamber starts with `⚠` (2 cells / 1 char),
so centering was off by 1 cell.
(2) `pad = inner - (len + 2)` left the row `inner + 2`
cells total — but `chamber_row` and `chamber_bottom`
produce `inner + 4` cells. The right border was 2
cells to the LEFT of the chamber's / . PR #93's
visible chamber-right-border misalignment was this.
Fixed to `pad = inner - len` (using display width). Row now
matches `inner + 4` cells exactly, so the right border lines
up with the chamber's top/bottom corners.
## Bug 5 — README docs gaps for shipped features
PR #102 (custom theme JSON) and PR #73 (`/allow` CRUD) were
both shipped but never mentioned in README:
- Added `/allow <list|add|remove|clear>` row to the slash
table.
- Added a paragraph under "UI theme" pointing at
`docs/THEMES.md` for custom theme JSON.
## Tests
1 new test:
- `chamber_row_centered_handles_wide_emoji`: asserts row is
exactly `inner + 4` cells wide with a leading-emoji
message (regression guard for both bugs).
716 pass (was 715). All build profiles + fmt clean.
## Other audit findings — verified false positives or deferred
The 6-agent audit produced ~60 candidate findings. Most were:
- Speculative (panic-safety, atomic-ordering, dead-code claims)
- Already-documented design choices (subagent isolation,
permission lock-while-ask)
- Feature requests (hot-reload plugins, harness/register-tool,
MCP resources/prompts, etc.)
Real bugs above are the ones I could reproduce or verify by
reading the actual code. The rest go on the ROADMAP candidates
list (or stay as is).
Co-authored-by: Yogthos <yogthos@gmail.com>
Copy file name to clipboardExpand all lines: README.md
+3Lines changed: 3 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -126,6 +126,7 @@ dirge --verbose
126
126
|`/regen-prompts`| Restore built-in prompts |
127
127
|`/mcp`| List MCP servers and tools |
128
128
|`/panel [on\|off\|auto]`| Toggle the right-hand info panel (cwd, MCP, LSP, todos, modified files). `auto` shows it when the terminal is at least 100 cols wide. |
129
+
|`/allow <list\|add\|remove\|clear>`| Manage the session permission allowlist (see `/help` for argument shapes) |
129
130
|`/quit`| Exit dirge |
130
131
|`/retry`| Retry last prompt |
131
132
|`/help`| Show all commands |
@@ -317,6 +318,8 @@ dirge ships with an 80s-CRT phosphor green palette by default. To opt out, set `
317
318
318
319
Errors stay red and warnings stay yellow under every theme — those colors are part of the load-bearing semantic contract.
319
320
321
+
For custom themes, create `~/.config/dirge/<name>.theme.json` with overrides for any subset of the palette (named colors, hex `#rrggbb`, or 256-color indices), then set `theme: "<name>"` in `config.json`. See [`docs/THEMES.md`](docs/THEMES.md) for the full schema and examples.
0 commit comments