Skip to content

Commit a4aeb57

Browse files
committed
Fix all actionable findings from post-integration codebase review
Resolves 19 issues (1 critical, 4 high, 4 medium, 10 low) identified after 12 rapid squash-merges into main. Reclassified 5 findings as intentional or not-issues (M-4, M-5, L-5, L-7, L-10). Critical: worktree skill crash (plain strings → weighted tuples), merge conflict marker in first-session.md. Security: dangerous-command- blocker now fails closed on unexpected exceptions. Python: remove redundant ValueError, add maxsplit to split(). Shell: executable bit, variable quoting, pipefail, POSIX redirects, command -v. Docs: agent count 17→21, skill count→38, plugin count→14, feature count→22 across all pages; new plugin pages for git-workflow and prompt-snippets; cc-orc and dbr added to commands reference; architecture tree updated.
1 parent b2261ed commit a4aeb57

26 files changed

Lines changed: 296 additions & 72 deletions

File tree

.devcontainer/CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,18 @@
5252

5353
### Fixed
5454

55+
#### Post-Integration Review Fixes
56+
- **skill-engine** — worktree skill definition uses weighted tuples (was plain strings, caused crash)
57+
- **dangerous-command-blocker** — fail closed on unexpected exceptions (was fail-open)
58+
- **ticket-workflow** — remove redundant `ValueError` from exception handlers
59+
- **workspace-scope-guard** — use maxsplit in variable assignment detection
60+
- **Shell scripts** — add executable bit to `check-setup.sh`, quote `PLUGIN_BLACKLIST` variable, add `set -uo pipefail` to tmux installer, replace deprecated `which` with `command -v`, normalize `&>` redirects in setup scripts
61+
- **Documentation** — update agent count to 21, skill count to 38, plugin count to 14 across all docs site pages
62+
- **Documentation** — add missing plugin pages for git-workflow and prompt-snippets
63+
- **Documentation** — add `cc-orc` and `dbr` to commands reference
64+
- **Documentation** — remove merge conflict marker from first-session.md
65+
- **Documentation** — update architecture.md directory tree with new plugins
66+
5567
#### CodeRabbit Review Fixes
5668
- **`implementer.md`** — changed PostToolUse hook (fires every Edit) to Stop hook (fires once at task end) with 120s timeout; prevents redundant test runs during multi-file tasks
5769
- **`tester.md`** — increased Stop hook timeout from 30s to 120s to accommodate larger test suites

.devcontainer/connect-external-terminal.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ echo "Found container: $CONTAINER_NAME ($CONTAINER_ID)"
4949
echo ""
5050

5151
# Check if tmux is available in the container
52-
if ! docker exec "$CONTAINER_ID" which tmux >/dev/null 2>&1; then
52+
if ! docker exec "$CONTAINER_ID" command -v tmux >/dev/null 2>&1; then
5353
echo "ERROR: tmux is not installed in the container."
5454
echo "Rebuild the devcontainer to install the tmux feature."
5555
exit 1

.devcontainer/features/tmux/install.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/bin/bash
22
# SPDX-License-Identifier: GPL-3.0-only
33
# Copyright (c) 2026 Marcus Krueger
4-
set -e
4+
set -euo pipefail
55

66
VERSION="${VERSION:-latest}"
77

.devcontainer/plugins/devs-marketplace/plugins/dangerous-command-blocker/scripts/block-dangerous.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,9 @@ def main():
127127
# Fail closed: can't parse means can't verify safety
128128
sys.exit(2)
129129
except Exception as e:
130-
# Log error but don't block on hook failure
130+
# Fail closed: unexpected errors should block, not allow
131131
print(f"Hook error: {e}", file=sys.stderr)
132-
sys.exit(0)
132+
sys.exit(2)
133133

134134

135135
if __name__ == "__main__":

.devcontainer/plugins/devs-marketplace/plugins/skill-engine/scripts/skill-suggester.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -546,18 +546,19 @@
546546
},
547547
"worktree": {
548548
"phrases": [
549-
"create a worktree",
550-
"work in a worktree",
551-
"git worktree",
552-
"worktree",
553-
"parallel branches",
554-
"isolate my work",
555-
"clean up worktrees",
556-
"list worktrees",
557-
"set up a worktree",
558-
"enter worktree",
549+
("create a worktree", 0.9),
550+
("work in a worktree", 0.8),
551+
("git worktree", 0.9),
552+
("worktree", 0.7),
553+
("parallel branches", 0.6),
554+
("isolate my work", 0.5),
555+
("clean up worktrees", 0.8),
556+
("list worktrees", 0.7),
557+
("set up a worktree", 0.8),
558+
("enter worktree", 0.8),
559559
],
560560
"terms": ["worktree", "EnterWorktree", "WorktreeCreate"],
561+
"priority": 5,
561562
},
562563
}
563564

.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/scripts/ticket-linker.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ def fetch_ticket(number: int) -> str | None:
7171

7272
try:
7373
data = json.loads(result.stdout)
74-
except (json.JSONDecodeError, ValueError):
74+
except json.JSONDecodeError:
7575
return None
7676

7777
title = data.get("title", "(no title)")
@@ -103,7 +103,7 @@ def main():
103103

104104
try:
105105
data = json.loads(raw)
106-
except (json.JSONDecodeError, ValueError):
106+
except json.JSONDecodeError:
107107
sys.exit(0)
108108

109109
prompt = data.get("prompt", "")

.devcontainer/plugins/devs-marketplace/plugins/workspace-scope-guard/scripts/guard-workspace-scope.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ def extract_primary_command(command: str) -> str:
157157
while i < len(tokens):
158158
tok = tokens[i]
159159
# Skip inline variable assignments: VAR=value
160-
if "=" in tok and not tok.startswith("-") and tok.split("=")[0].isidentifier():
160+
if "=" in tok and not tok.startswith("-") and tok.split("=", 1)[0].isidentifier():
161161
i += 1
162162
continue
163163
# Skip sudo and its flags

.devcontainer/scripts/check-setup.sh

100644100755
File mode changed.

.devcontainer/scripts/setup-plugins.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ if [ -d "$MARKETPLACE_PATH/plugins" ]; then
5959
plugin_name=$(basename "$plugin_dir")
6060

6161
# Skip blacklisted plugins
62-
if echo ",$PLUGIN_BLACKLIST," | grep -q ",$plugin_name,"; then
62+
if echo ",${PLUGIN_BLACKLIST}," | grep -q ",$plugin_name,"; then
6363
echo "[setup-plugins] Skipping $plugin_name (blacklisted)"
6464
continue
6565
fi

.devcontainer/scripts/setup-projects.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ start_watcher() {
178178
fi
179179

180180
# Check if inotifywait is available (installed by tmux feature at build time)
181-
if ! command -v inotifywait &>/dev/null; then
181+
if ! command -v inotifywait >/dev/null 2>&1; then
182182
echo "$LOG_PREFIX WARNING: inotify-tools not installed, watcher disabled"
183183
return 1
184184
fi

0 commit comments

Comments
 (0)