|
1 | 1 | # CodeForge Devcontainer Changelog |
2 | 2 |
|
3 | | -## [Unreleased] |
4 | | - |
5 | | -### Security |
6 | | -- Removed environment variable injection vector in agent redirect log path (S2-01) |
7 | | -- Narrowed config deployment allowed destinations from `/usr/local` to `/usr/local/share` (S2-09) |
8 | | -- Protected files guard now fails closed on unexpected errors instead of failing open (S2-04) |
9 | | - |
10 | | -### Testing |
11 | | -- **Plugin test suite** — 289 pytest tests covering 6 critical plugin scripts that previously had zero tests: |
12 | | - - `block-dangerous.py` (62 tests) — all 33 dangerous command patterns with positive/negative/edge cases |
13 | | - - `guard-workspace-scope.py` (40 tests) — blacklist, scope, allowlist, bash enforcement layers, primary command extraction |
14 | | - - `guard-protected.py` (56 tests) — all protected file patterns (secrets, locks, keys, credentials, auth dirs) |
15 | | - - `guard-protected-bash.py` (49 tests) — write target extraction, multi-target commands, and protected path integration |
16 | | - - `guard-readonly-bash.py` (69 tests) — general-readonly and git-readonly modes, bypass prevention, global flag handling |
17 | | - - `redirect-builtin-agents.py` (13 tests) — redirect mapping, passthrough, output structure |
18 | | -- Added `test:plugins` and `test:all` npm scripts for running plugin tests |
19 | | -- Python plugin tests (`pytest`) added to CI pipeline (Q3-08) |
20 | | - |
21 | | -### Dangerous Command Blocker |
22 | | -- **Force push block now suggests `git merge` as workaround** — error message explains how to avoid diverged history instead of leaving the agent to improvise destructive workarounds |
23 | | -- **Block `--force-with-lease`** — was slipping through regex; all force push variants now blocked uniformly |
24 | | -- **Block remote branch deletion** — `git push origin --delete` and colon-refspec deletion (`git push origin :branch`) now blocked; deleting remote branches closes associated PRs |
25 | | -- **Fixed README** — error handling was documented as "fails open" but code actually fails closed; corrected to match behavior |
26 | | -- Dangerous command blocker handles prefix bypasses (`\rm`, `command rm`, `env rm`) and symbolic chmod (S2-03) |
27 | | - |
28 | | -### Guards |
29 | | -- Fixed greedy alternation in write-target regex — `>>` now matched before `>` (Q3-01) |
30 | | -- Unified write-target extraction patterns across guards — protected-files bash guard expanded from 5 to 20 patterns (C1-02) |
31 | | -- Multi-target command support — `rm`, `touch`, `mkdir`, `chmod`, `chown` with multiple file operands now check all targets |
32 | | -- Bare `git stash` (equivalent to push) now blocked in read-only mode (Q3-04) |
33 | | -- Fixed git global flag handling — `git -C /path stash list` no longer misidentifies the stash subcommand |
34 | | - |
35 | | -### Documentation |
36 | | -- **DevContainer CLI guide** — dedicated Getting Started page for terminal-only workflows without VS Code |
37 | | -- **v2 Migration Guide** — path changes, automatic migration, manual steps, breaking changes, and troubleshooting |
38 | | -- Documented 4 previously undocumented agents in agents.md: implementer, investigator, tester, documenter |
39 | | -- Added missing git-workflow and prompt-snippets to configuration.md enabledPlugins example |
40 | | -- Added CONFIG_SOURCE_DIR deprecation note in environment variables reference |
41 | | -- Added cc-orc orchestrator command to first-session launch commands table |
42 | | -- Tabbed client-specific instructions on the installation page |
43 | | -- Dedicated port forwarding reference page covering VS Code auto-detect, devcontainer-bridge, and SSH tunneling |
44 | | - |
45 | 3 | ## v2.0.0 — 2026-02-26 |
46 | 4 |
|
47 | 5 | ### .codeforge/ Configuration System |
|
100 | 58 | - **worktree skill** — git worktree creation, management, cleanup, `EnterWorktree` tool, `.worktreeinclude` setup |
101 | 59 |
|
102 | 60 | ### Plugins |
| 61 | +- **Expanded Anthropic official plugins** — added `code-review`, `feature-dev`, and `pr-review-toolkit` from `anthropics/claude-code` |
| 62 | +- **Migrated plugin identifiers** — switched from `@claude-plugins-official` to `@anthropics/claude-code` format |
103 | 63 | - **Git workflow** — `/ship` (commit/push/PR with code review and approval) and `/pr:review` (PR review by number/URL, posts findings as comment) |
104 | 64 | - **Prompt snippets** — `/ps` command for quick behavioral mode switches (noaction, brief, plan, go, review, ship, deep, hold, recall, wait); composable (`/ps noaction brief`) |
105 | 65 |
|
|
113 | 73 | - POSIX redirect, bash-required installer shell, quoted `${TARGET}`, directory pre-creation |
114 | 74 |
|
115 | 75 | ### Testing |
116 | | -- **241 pytest tests** covering 6 critical plugin scripts (previously zero tests): |
117 | | - - `block-dangerous.py` (46), `guard-workspace-scope.py` (40), `guard-protected.py` (55), `guard-protected-bash.py` (24), `guard-readonly-bash.py` (63), `redirect-builtin-agents.py` (13) |
| 76 | +- **289 pytest tests** covering 6 critical plugin scripts (previously zero tests): |
| 77 | + - `block-dangerous.py` (62), `guard-workspace-scope.py` (40), `guard-protected.py` (56), `guard-protected-bash.py` (49), `guard-readonly-bash.py` (69), `redirect-builtin-agents.py` (13) |
118 | 78 | - `test:plugins` and `test:all` npm scripts |
| 79 | +- Python plugin tests (`pytest`) added to CI pipeline (Q3-08) |
119 | 80 |
|
120 | 81 | ### Authentication |
121 | 82 | - `CLAUDE_AUTH_TOKEN` support in `.secrets` for long-lived tokens from `claude setup-token` |
122 | 83 | - Auto-creates `.credentials.json` from token on container start (idempotent) |
123 | 84 | - `CLAUDE_AUTH_TOKEN` in devcontainer.json secrets declaration |
124 | 85 |
|
125 | 86 | ### Security |
| 87 | +- Removed environment variable injection vector in agent redirect log path (S2-01) |
| 88 | +- Narrowed config deployment allowed destinations from `/usr/local` to `/usr/local/share` (S2-09) |
| 89 | +- Protected files guard now fails closed on unexpected errors instead of failing open (S2-04) |
126 | 90 | - Protected-files-guard blocks `.credentials.json` modifications |
127 | 91 | - Replaced `eval` tilde expansion with `getent passwd` lookup (prevents shell injection) |
128 | 92 | - Auth token JSON-escaped before writing; credential directory with restrictive umask (700) |
|
153 | 117 | - Force push block now suggests `git merge` as workaround |
154 | 118 | - Block `--force-with-lease` — all force push variants now blocked uniformly |
155 | 119 | - Block remote branch deletion (`git push origin --delete`, colon-refspec `git push origin :branch`) |
| 120 | +- Handles prefix bypasses (`\rm`, `command rm`, `env rm`) and symbolic chmod (S2-03) |
156 | 121 | - Fixed README — error handling documented as "fails open" but code actually fails closed |
157 | 122 |
|
| 123 | +### Guards |
| 124 | +- **Allowed `.env.example` edits** — `.env.example` is no longer blocked by the `.env.*` pattern; actual secret files (`.env.local`, `.env.production`, etc.) remain protected |
| 125 | +- Fixed greedy alternation in write-target regex — `>>` now matched before `>` (Q3-01) |
| 126 | +- Unified write-target extraction patterns across guards — protected-files bash guard expanded from 5 to 20 patterns (C1-02) |
| 127 | +- Multi-target command support — `rm`, `touch`, `mkdir`, `chmod`, `chown` with multiple file operands now check all targets |
| 128 | +- Bare `git stash` (equivalent to push) now blocked in read-only mode (Q3-04) |
| 129 | +- Fixed git global flag handling — `git -C /path stash list` no longer misidentifies the stash subcommand |
| 130 | + |
158 | 131 | ### Session Context & Code Quality |
159 | 132 | - **Commit reminder** — switched to advisory (was blocking); tiered logic for meaningful changes; only fires when session modified files |
160 | 133 | - **Advisory test runner** — reads from correct tmp file prefix (`claude-cq-edited` instead of `claude-edited-files`) |
|
198 | 171 | - Missing plugin pages for git-workflow and prompt-snippets |
199 | 172 | - Port Forwarding reference, CLI guide cross-link, slimmed Installation page |
200 | 173 | - Documented 4 workhorse agents, cc-orc command, CONFIG_SOURCE_DIR deprecation, CLAUDE_AUTH_TOKEN setup |
| 174 | +- Added missing git-workflow and prompt-snippets to configuration.md enabledPlugins example |
| 175 | +- Tabbed client-specific instructions on the installation page |
201 | 176 | - MD040 compliance (language specifiers on fenced code blocks) |
202 | 177 | - Architecture docs — `.checksums/` and `.markers/` in `.codeforge/` tree |
203 | 178 | - Troubleshooting — "Reset to Defaults" renamed to "How to Reset", clarified `--reset` behavior |
|
0 commit comments