Fix ccstatusline config not deploying after .claude location move#27
Fix ccstatusline config not deploying after .claude location move#27AnExiledDev merged 3 commits intomainfrom
Conversation
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.
CONFIG_SOURCE_DIR in .env still pointed to /workspaces/.claude after the v2.0 move, causing setup-config.sh to miss the file manifest and skip all manifest-based deployments including ccstatusline. Add a deprecation guard (matching the existing CLAUDE_CONFIG_DIR pattern) that auto-fixes .env on container start. Also fix /usr/local/share/ccstatusline/ ownership (root→user) so the template copy succeeds, and add error handling to setup-config.sh cp calls that previously logged success on failure.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review infoConfiguration used: defaults Review profile: CHILL Plan: Pro 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughUpdates and fixes across devcontainer scripts, marketplace plugins, and docs: stricter error handling (fail-closed), safer shell scripting, minor Python logic tweaks (skill scoring, JSON handling), ownership/permission fixes, two new plugin docs (git-workflow, prompt-snippets), and inventory count updates (agents/tools/skills/plugins). Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~30 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches
🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 5
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
docs/src/content/docs/features/agents.md (1)
33-33:⚠️ Potential issue | 🔴 CriticalFix agent count and enumeration: 15 new specialists, not 11—and architect is a replacement, not new.
Line 33 contains multiple errors. The claim of "11 entirely new specialists" is incorrect; there are 15 entirely new specialists (21 total agents minus 6 replacements from the table). Additionally, the enumerated list includes architect, which appears in the replacement table on line 25 (replaces
Plan) and should not be listed as an "entirely new" specialist. The list is also incomplete—it omits documenter, implementer, investigator, and tester.Correct count: 15 new specialists are debug-logs, dependency-analyst, doc-writer, documenter, git-archaeologist, implementer, investigator, migrator, perf-profiler, refactorer, researcher, security-auditor, spec-writer, test-writer, tester.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/src/content/docs/features/agents.md` at line 33, Update the sentence that begins "Beyond the six replacements..." to state there are 15 entirely new specialists (not 11), remove "architect" from the new-specialists list (architect is a replacement for `Plan`), and replace the current enumeration with the correct, complete list: debug-logs, dependency-analyst, doc-writer, documenter, git-archaeologist, implementer, investigator, migrator, perf-profiler, refactorer, researcher, security-auditor, spec-writer, test-writer, tester; ensure the revised sentence and list match the replacement table where `Plan` → architect is defined.
🧹 Nitpick comments (2)
.devcontainer/plugins/devs-marketplace/plugins/skill-engine/scripts/skill-suggester.py (1)
561-561: Consider aligningworktreeplacement with its new priority class.
"priority": 5is reasonable, but this entry now sits under the “Spec-workflow command skills (priority 10)” section. Movingworktreeto the practice/pattern block (or adjusting section labeling) would reduce maintenance confusion.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.devcontainer/plugins/devs-marketplace/plugins/skill-engine/scripts/skill-suggester.py at line 561, The "worktree" entry currently has "priority": 5 but is placed under the "Spec-workflow command skills (priority 10)" section; either move the worktree entry out of that section into the practice/pattern block where other priority 5 items live, or update the section header to reflect the actual priority grouping; locate the entry by searching for the "worktree" object and the "priority": 5 key and then relocate the whole object to the appropriate block (or change the section label) so priorities and sectioning remain consistent.docs/src/content/docs/plugins/git-workflow.md (1)
17-19: Add language specifiers to fenced code blocks.These usage example code blocks are missing language specifiers, which triggers MD040 warnings. For slash command examples that aren't a specific language, use
text:📝 Proposed fix for MD040 compliance
**Usage:** -``` +```text /ship [optional commit message hint]```diff **Usage:** -``` +```text /pr:review [PR number, URL, or omit for current branch]</details> Also applies to: 55-57 <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In
@docs/src/content/docs/plugins/git-workflow.mdaround lines 17 - 19, The
fenced code examples for the slash commands are missing language specifiers and
trigger MD040; update each code fence that shows command usage—e.g., the blocks
containing "/ship [optional commit message hint]" and "/pr:review [PR number,
URL, or omit for current branch]" (and the similar block at lines noted
55-57)—to use the "text" language specifier so the fences becometext ...
to satisfy the linter.</details> </blockquote></details> </blockquote></details> <details> <summary>🤖 Prompt for all review comments with AI agents</summary>Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.devcontainer/scripts/setup.sh:
- Around line 38-40: The sed invocation that comments out CONFIG_SOURCE_DIR in
ENV_FILE may fail but the script always prints a success message; update the
if-block around the sed command (the lines invoking sed -i
's|^CONFIG_SOURCE_DIR=.*|# CONFIG_SOURCE_DIR removed...' on ENV_FILE and the
subsequent echo) to check sed's exit status (e.g., capture its exit code or use
&&/||), only print the "[setup] .env updated ..." message when sed succeeds, and
on failure print an error to stderr and exit non‑zero so callers know the
migration failed; target the sed invocation and the surrounding echo in the
script (ENV_FILE, the sed command and the success echo) to implement this
conditional reporting.In
@docs/src/content/docs/features/skills.md:
- Line 3: The frontmatter description currently claims a "Complete reference for
all 38 CodeForge skills" which overstates the page's coverage; update the
description string to a softened statement such as "Reference for CodeForge
skills" or "Overview of CodeForge skills and selected domain knowledge packs"
(edit the description value in the frontmatter — the literal string starting
with description: Complete reference for all 38 CodeForge skills — domain
knowledge packs for frameworks, patterns, and workflows) so it no longer implies
exhaustive coverage.In
@docs/src/content/docs/getting-started/index.md:
- Line 55: The heading "22 Features and Tools" is ambiguous; update the heading
text in the document to "22 Tools" to match the page's terminology and remove
count ambiguity—locate the heading string "22 Features and Tools" in the file
and replace it with "22 Tools" ensuring any internal links or references to that
heading are updated if present.In
@docs/src/content/docs/getting-started/installation.md:
- Around line 51-52: Update the inconsistent feature count in the installation
docs: change the phrase "installs 21 DevContainer features." to match the
earlier "22 custom DevContainer features" entry so both occurrences show 22;
locate the sentence containing the exact string "installs 21 DevContainer
features." and replace the numeric count to 22 to keep the user-facing docs
consistent.In
@docs/src/content/docs/plugins/index.md:
- Around line 99-112: Update the JSON example for enabledPlugins to match the
expanded core plugin list: include "git-workflow" and "prompt-snippets" (or
explicitly mark the JSON as a partial/example) so the enabledPlugins example
aligns with the new core plugins shown in the table; locate the example that
references enabledPlugins and add those two keys or add a comment indicating
it's partial to keep documentation consistent with the Agent System, Skill
Engine, Spec Workflow, Ticket Workflow, Git Workflow, and Prompt Snippets
entries.
Outside diff comments:
In@docs/src/content/docs/features/agents.md:
- Line 33: Update the sentence that begins "Beyond the six replacements..." to
state there are 15 entirely new specialists (not 11), remove "architect" from
the new-specialists list (architect is a replacement forPlan), and replace
the current enumeration with the correct, complete list: debug-logs,
dependency-analyst, doc-writer, documenter, git-archaeologist, implementer,
investigator, migrator, perf-profiler, refactorer, researcher, security-auditor,
spec-writer, test-writer, tester; ensure the revised sentence and list match the
replacement table wherePlan→ architect is defined.
Nitpick comments:
In
@.devcontainer/plugins/devs-marketplace/plugins/skill-engine/scripts/skill-suggester.py:
- Line 561: The "worktree" entry currently has "priority": 5 but is placed under
the "Spec-workflow command skills (priority 10)" section; either move the
worktree entry out of that section into the practice/pattern block where other
priority 5 items live, or update the section header to reflect the actual
priority grouping; locate the entry by searching for the "worktree" object and
the "priority": 5 key and then relocate the whole object to the appropriate
block (or change the section label) so priorities and sectioning remain
consistent.In
@docs/src/content/docs/plugins/git-workflow.md:
- Around line 17-19: The fenced code examples for the slash commands are missing
language specifiers and trigger MD040; update each code fence that shows command
usage—e.g., the blocks containing "/ship [optional commit message hint]" and
"/pr:review [PR number, URL, or omit for current branch]" (and the similar block
at lines noted 55-57)—to use the "text" language specifier so the fences become
text ...to satisfy the linter.</details> --- <details> <summary>ℹ️ Review info</summary> **Configuration used**: defaults **Review profile**: CHILL **Plan**: Pro <details> <summary>📥 Commits</summary> Reviewing files that changed from the base of the PR and between b2261ed0ad8af2187037aa8649815c55e47ebfae and d04e7069d4b46aa26ab5b06f9dcc65d14a6b06a0. </details> <details> <summary>📒 Files selected for processing (29)</summary> * `.devcontainer/CHANGELOG.md` * `.devcontainer/connect-external-terminal.sh` * `.devcontainer/features/ccstatusline/install.sh` * `.devcontainer/features/tmux/install.sh` * `.devcontainer/plugins/devs-marketplace/plugins/dangerous-command-blocker/scripts/block-dangerous.py` * `.devcontainer/plugins/devs-marketplace/plugins/skill-engine/scripts/skill-suggester.py` * `.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/scripts/ticket-linker.py` * `.devcontainer/plugins/devs-marketplace/plugins/workspace-scope-guard/scripts/guard-workspace-scope.py` * `.devcontainer/scripts/check-setup.sh` * `.devcontainer/scripts/setup-config.sh` * `.devcontainer/scripts/setup-plugins.sh` * `.devcontainer/scripts/setup-projects.sh` * `.devcontainer/scripts/setup-terminal.sh` * `.devcontainer/scripts/setup.sh` * `docs/src/content/docs/features/agents.md` * `docs/src/content/docs/features/index.md` * `docs/src/content/docs/features/skills.md` * `docs/src/content/docs/getting-started/first-session.md` * `docs/src/content/docs/getting-started/index.md` * `docs/src/content/docs/getting-started/installation.md` * `docs/src/content/docs/index.mdx` * `docs/src/content/docs/plugins/agent-system.md` * `docs/src/content/docs/plugins/git-workflow.md` * `docs/src/content/docs/plugins/index.md` * `docs/src/content/docs/plugins/prompt-snippets.md` * `docs/src/content/docs/reference/architecture.md` * `docs/src/content/docs/reference/changelog.md` * `docs/src/content/docs/reference/commands.md` * `docs/src/content/docs/reference/index.md` </details> </details> <!-- This is an auto-generated comment by CodeRabbit for review status -->
| if [ -f "$ENV_FILE" ]; then | ||
| sed -i 's|^CONFIG_SOURCE_DIR=.*/workspaces/\.claude.*|# CONFIG_SOURCE_DIR removed (v2.0: now uses .devcontainer/config)|' "$ENV_FILE" | ||
| echo "[setup] .env updated — CONFIG_SOURCE_DIR line commented out." |
There was a problem hiding this comment.
Check sed success before reporting .env migration complete.
At Line 39, sed -i can fail, but Line 40 always prints that the .env line was updated. That can leave stale config on disk while reporting success.
Suggested fix
if [ -f "$ENV_FILE" ]; then
- sed -i 's|^CONFIG_SOURCE_DIR=.*/workspaces/\.claude.*|# CONFIG_SOURCE_DIR removed (v2.0: now uses .devcontainer/config)|' "$ENV_FILE"
- echo "[setup] .env updated — CONFIG_SOURCE_DIR line commented out."
+ if sed -i 's|^CONFIG_SOURCE_DIR=.*/workspaces/\.claude.*|# CONFIG_SOURCE_DIR removed (v2.0: now uses .devcontainer/config)|' "$ENV_FILE"; then
+ echo "[setup] .env updated — CONFIG_SOURCE_DIR line commented out."
+ else
+ echo "[setup] WARNING: Could not update .env automatically; please remove stale CONFIG_SOURCE_DIR manually."
+ fi
fi
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.devcontainer/scripts/setup.sh around lines 38 - 40, The sed invocation that
comments out CONFIG_SOURCE_DIR in ENV_FILE may fail but the script always prints
a success message; update the if-block around the sed command (the lines
invoking sed -i 's|^CONFIG_SOURCE_DIR=.*|# CONFIG_SOURCE_DIR removed...' on
ENV_FILE and the subsequent echo) to check sed's exit status (e.g., capture its
exit code or use &&/||), only print the "[setup] .env updated ..." message when
sed succeeds, and on failure print an error to stderr and exit non‑zero so
callers know the migration failed; target the sed invocation and the surrounding
echo in the script (ENV_FILE, the sed command and the success echo) to implement
this conditional reporting.
| --- | ||
| title: Skills | ||
| description: Complete reference for all 22 CodeForge skills — domain knowledge packs for frameworks, patterns, and workflows. | ||
| description: Complete reference for all 38 CodeForge skills — domain knowledge packs for frameworks, patterns, and workflows. |
There was a problem hiding this comment.
Description currently overstates page coverage.
The updated text says this page is a complete reference for all 38 skills, but this page enumerates only a subset of skills. Please soften wording to avoid implying full exhaustiveness.
✏️ Suggested wording tweak
-description: Complete reference for all 38 CodeForge skills — domain knowledge packs for frameworks, patterns, and workflows.
+description: Reference guide to CodeForge skills — domain knowledge packs for frameworks, patterns, and workflows.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| description: Complete reference for all 38 CodeForge skills — domain knowledge packs for frameworks, patterns, and workflows. | |
| description: Reference guide to CodeForge skills — domain knowledge packs for frameworks, patterns, and workflows. |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/src/content/docs/features/skills.md` at line 3, The frontmatter
description currently claims a "Complete reference for all 38 CodeForge skills"
which overstates the page's coverage; update the description string to a
softened statement such as "Reference for CodeForge skills" or "Overview of
CodeForge skills and selected domain knowledge packs" (edit the description
value in the frontmatter — the literal string starting with description:
Complete reference for all 38 CodeForge skills — domain knowledge packs for
frameworks, patterns, and workflows) so it no longer implies exhaustive
coverage.
| See the [Plugins Overview](../plugins/) for the full list and detailed documentation. | ||
|
|
||
| ### 21 Features and Tools | ||
| ### 22 Features and Tools |
There was a problem hiding this comment.
Clarify heading to avoid count ambiguity.
22 Features and Tools is ambiguous here since the section enumerates the toolchain. Using 22 Tools keeps terminology consistent with the rest of the page.
Proposed wording tweak
-### 22 Features and Tools
+### 22 Tools📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ### 22 Features and Tools | |
| ### 22 Tools |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/src/content/docs/getting-started/index.md` at line 55, The heading "22
Features and Tools" is ambiguous; update the heading text in the document to "22
Tools" to match the page's terminology and remove count ambiguity—locate the
heading string "22 Features and Tools" in the file and replace it with "22
Tools" ensuring any internal links or references to that heading are updated if
present.
| │ ├── features/ # 22 custom DevContainer features | ||
| │ ├── plugins/ # 14 plugins with hooks and scripts |
There was a problem hiding this comment.
Feature count is still inconsistent within this page.
After updating to 22 features here, Line 73 still says “installs 21 DevContainer features.” Please update that line to keep installation guidance consistent.
As per coding guidelines, docs/**: User-facing documentation changes MUST be reflected in relevant pages in docs/ if the docs site exists.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/src/content/docs/getting-started/installation.md` around lines 51 - 52,
Update the inconsistent feature count in the installation docs: change the
phrase "installs 21 DevContainer features." to match the earlier "22 custom
DevContainer features" entry so both occurrences show 22; locate the sentence
containing the exact string "installs 21 DevContainer features." and replace the
numeric count to 22 to keep the user-facing docs consistent.
| CodeForge ships with 13 local marketplace plugins plus 1 external Anthropic plugin, organized into two categories: **core plugins** that provide primary functionality, and **safety and integration plugins** that protect your work and connect to external tools. | ||
|
|
||
| ### Core Plugins | ||
|
|
||
| These plugins deliver the headline features of CodeForge — intelligent delegation, domain expertise, and workflow management. | ||
|
|
||
| | Plugin | What It Does | | ||
| |--------|-------------| | ||
| | [Agent System](./agent-system/) | 17 specialized agents with automatic delegation, CWD injection, and read-only enforcement | | ||
| | [Agent System](./agent-system/) | 21 specialized agents with automatic delegation, CWD injection, and read-only enforcement | | ||
| | [Skill Engine](./skill-engine/) | 22 domain skills with context-aware auto-suggestion | | ||
| | [Spec Workflow](./spec-workflow/) | Full specification lifecycle from creation through implementation to as-built closure | | ||
| | [Ticket Workflow](./ticket-workflow/) | GitHub issue integration with EARS-formatted tickets and automated PR reviews | | ||
| | [Git Workflow](./git-workflow/) | Standalone git operations: /ship (review/commit/push/PR) and /pr:review | | ||
| | [Prompt Snippets](./prompt-snippets/) | Quick behavioral mode switches via /ps command | |
There was a problem hiding this comment.
Keep the enabledPlugins example aligned with the new core plugin list.
After adding git-workflow and prompt-snippets to shipped core plugins (Line 111-112), the JSON example should include them too, or explicitly label it as a partial example.
Suggested doc update (outside this changed hunk)
"enabledPlugins": [
"agent-system",
"skill-engine",
"spec-workflow",
+ "git-workflow",
+ "prompt-snippets",
"session-context",
"auto-code-quality",
"workspace-scope-guard",
As per coding guidelines docs/**: User-facing documentation changes MUST be reflected in relevant pages in docs/ if the docs site exists.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/src/content/docs/plugins/index.md` around lines 99 - 112, Update the
JSON example for enabledPlugins to match the expanded core plugin list: include
"git-workflow" and "prompt-snippets" (or explicitly mark the JSON as a
partial/example) so the enabledPlugins example aligns with the new core plugins
shown in the table; locate the example that references enabledPlugins and add
those two keys or add a comment indicating it's partial to keep documentation
consistent with the Agent System, Skill Engine, Spec Workflow, Ticket Workflow,
Git Workflow, and Prompt Snippets entries.
Review SummaryReviewed 29 files (330+/78-) covering ccstatusline deployment fix, shell script hardening, Python plugin bug fixes, and documentation updates. Verified changes:
Issues found: None Note: Also closing #26 as superseded — its commit (a4aeb57) is included in this PR. |
New plugin pages were added but not included in the Starlight sidebar configuration, causing the docs build to fail.
Summary
CONFIG_SOURCE_DIRdeprecation guard insetup.sh— detects stale/workspaces/.claudevalue in.env(gitignored, can't be fixed by PRs), overrides to$DEVCONTAINER_DIR/config, and auto-comments the line on disk. Without this,setup-config.shcan't findfile-manifest.jsonand falls through to legacy copy, skipping all manifest-based deployments including ccstatusline.install.sh— chowns/usr/local/share/ccstatusline/to the target user sosetup-config.sh(running as vscode) can write the template file.setup-config.sh—cpfailures now warn instead of silently logging success.Root cause
The v2.0
.claudelocation move updatedCLAUDE_CONFIG_DIRin.envvia a deprecation guard but didn't add an equivalent guard forCONFIG_SOURCE_DIR, which also pointed to/workspaces/.claude. Since.envis gitignored, the stale value persisted across rebuilds.Test plan
~/.config/ccstatusline/settings.jsonand/usr/local/share/ccstatusline/settings.template.jsonboth exist after startSummary by CodeRabbit
New Features
Bug Fixes
Documentation