Clean up workBenches base and devBench tooling#1
Conversation
Reviewer's GuideRefactors base and devBench AI/spec tooling by moving spec-kit/OpenSpec into the dev-bench base layer with reusable Speckit worktree helpers, adds SonarQube/SonarScanner tooling and SonarCloud coverage helpers, introduces robust yolo/ct shell functions, and extends project detection and docs for pyBench/phpBench while tightening docker/devcontainer reconciliation and AI provider configuration. Sequence diagram for Speckit worktree and AI helper workflowsequenceDiagram
actor Dev
participant speckit_worktree_enable
participant git_feature as create-new-feature.sh
participant git_worktree as git_worktree
participant feature_json as feature.json
participant ct as ct_functions
participant select_wt as select-worktree.sh
participant claude_cli as claude
Dev->>speckit_worktree_enable: run speckit-worktree-enable
speckit_worktree_enable->>feature_json: install git extension config
speckit_worktree_enable->>ct: install ct, cta, ctc, ctg, cts
Dev->>speckit_worktree_enable: run /speckit.specify
speckit_worktree_enable->>git_feature: invoke speckit-git-feature hook
git_feature->>git_worktree: git worktree add -b <branch>
git_feature-->>speckit_worktree_enable: BRANCH_NAME, WORKTREE_PATH
speckit_worktree_enable->>feature_json: write feature_directory for spec
Dev->>ct: cta
ct->>select_wt: select-worktree.sh --path
select_wt-->>ct: WORKTREE_PATH
ct->>claude_cli: start claude in tmux at WORKTREE_PATH
claude_cli-->>Dev: interactive AI session in feature worktree
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
|
@codex review |
There was a problem hiding this comment.
Hey - I've found 2 issues, and left some high level feedback:
- The Speckit git/worktree templates include project- and user-specific values (e.g.,
worktree_root: ../ledgerlinc-model-ocr-pipeline-worktreesingit-config.ymland the hardcoded/home/brett/...path inct.zsh); consider replacing these with generic defaults or relative paths so generated projects are not tied to a specific environment. - There is a fair amount of duplicated logic between the project-local worktree helpers (e.g.,
.specify/shell/worktrees.sh) and the globalct-functions.zsh; it may be worth centralizing common behavior into a single shared script to reduce drift and simplify future changes. - In
reconcile-devcontainer-container.sh, failing hard when the expected image is missing (exit 1) might be surprising in multi-bench workflows; consider treating this as a non-fatal condition (log and exit 0) so callers can decide whether a missing image should stop their pipeline.
Prompt for AI Agents
Please address the comments from this code review:
## Overall Comments
- The Speckit git/worktree templates include project- and user-specific values (e.g., `worktree_root: ../ledgerlinc-model-ocr-pipeline-worktrees` in `git-config.yml` and the hardcoded `/home/brett/...` path in `ct.zsh`); consider replacing these with generic defaults or relative paths so generated projects are not tied to a specific environment.
- There is a fair amount of duplicated logic between the project-local worktree helpers (e.g., `.specify/shell/worktrees.sh`) and the global `ct-functions.zsh`; it may be worth centralizing common behavior into a single shared script to reduce drift and simplify future changes.
- In `reconcile-devcontainer-container.sh`, failing hard when the expected image is missing (`exit 1`) might be surprising in multi-bench workflows; consider treating this as a non-fatal condition (log and exit 0) so callers can decide whether a missing image should stop their pipeline.
## Individual Comments
### Comment 1
<location path="devBenches/base-image/files/speckit-worktree/templates/specify/shell/worktrees.sh" line_range="10-13" />
<code_context>
+
+# Auto-detect repo root from this script's own location so the file is
+# relocatable and does not embed a host-specific absolute path.
+LEDGERLINC_SPECKIT_REPO_ROOT="$(CDPATH="" cd "${${(%):-%x}:A:h}/../.." 2>/dev/null && pwd)"
+if [ -z "$LEDGERLINC_SPECKIT_REPO_ROOT" ]; then
+ # bash fallback when the zsh prompt expansion above is unavailable
+ LEDGERLINC_SPECKIT_REPO_ROOT="$(CDPATH="" cd "$(dirname "${BASH_SOURCE[0]:-$0}")/../.." 2>/dev/null && pwd)"
+fi
+LEDGERLINC_SPECKIT_LAST_WORKTREE_SCRIPT="$LEDGERLINC_SPECKIT_REPO_ROOT/.specify/extensions/git/scripts/bash/get-last-worktree.sh"
</code_context>
<issue_to_address>
**issue (bug_risk):** Sourcing this script in bash will fail due to unguarded zsh-specific parameter expansion.
Because the script is advertised as source-able from both bash and zsh, the unguarded `${${(%):-%x}:A:h}` causes `bad substitution` in bash before the fallback can run. Please gate the zsh-only expansion on `$ZSH_VERSION`, for example:
```bash
if [ -n "${ZSH_VERSION:-}" ]; then
LEDGERLINC_SPECKIT_REPO_ROOT="$(CDPATH="" cd "${${(%):-%x}:A:h}/../.." 2>/dev/null && pwd)"
else
LEDGERLINC_SPECKIT_REPO_ROOT="$(CDPATH="" cd "$(dirname "${BASH_SOURCE[0]:-$0}")/../.." 2>/dev/null && pwd)"
fi
```
</issue_to_address>
### Comment 2
<location path="devBenches/goBench/README.md" line_range="140-141" />
<code_context>
# Go shortcuts
# (alias examples - these would be configured in shell)
go run, go build, go test, go mod, etc.
+go-sonar-coverage # go test coverage.out + sonar-scanner
# Docker & Kubernetes
</code_context>
<issue_to_address>
**issue (typo):** The documented SonarCloud coverage helper uses two different command names (`go-sonar-coverage` vs `sonarcloud-go-coverage`).
Alias examples use `go-sonar-coverage`, while the dedicated section uses `sonarcloud-go-coverage`. Please either standardize on one name or clarify if they are different tools to avoid user confusion.
```suggestion
go run, go build, go test, go mod, etc.
sonarcloud-go-coverage # go test coverage.out + sonar-scanner
```
</issue_to_address>Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
There was a problem hiding this comment.
Pull request overview
This PR updates the shared workBench/devBench base tooling, moves spec-driven tooling into the devBench base layer, adds SonarQube/SonarCloud helpers, removes Grok from supported AI tooling, and refreshes bench inventory from pythonBench to pyBench with added phpBench support.
Changes:
- Reworks base/devBench AI and spec CLI installation, yolo/ct helpers, and OpenCode plugin handling.
- Adds Speckit worktree tooling, SonarQube MCP startup, and Java/Go/C++ SonarCloud coverage helpers.
- Updates bench detection/config/docs/tests for
pyBench,phpBench, Grok removal, and new devBench tooling.
Reviewed changes
Copilot reviewed 87 out of 88 changed files in this pull request and generated 11 comments.
Show a summary per file
| File | Description |
|---|---|
.gitignore |
Updates ignored bench directories and Python artifacts. |
README.md |
Refreshes image layer and bench inventory documentation. |
base-image/Dockerfile |
Updates Layer 0 version, removes spec CLI ownership, and adds yolo function. |
base-image/files/opencode/opencode.json |
Removes pinned OpenCode auth plugin versions. |
base-image/install-ai-clis.sh |
Updates AI CLI install flow, adds Antigravity, removes Grok/OpenSpec. |
bench-config.json.backup |
Renames Python bench backup entry to pyBench. |
config/bench-config.json |
Renames Python bench config and adds phpBench config. |
config/shell/zshrc |
Converts yolo alias into a tmux-backed function. |
devBenches/.devcontainer/devcontainer.json |
Starts SonarQube MCP for the devBenches workspace. |
devBenches/README.md |
Documents phpBench/pyBench and shared Sonar tools. |
devBenches/base-image/Dockerfile |
Adds spec-driven tools, ct helpers, and worktree bootstrap into Layer 1a. |
devBenches/base-image/files/ct/ct-functions.zsh |
Adds global Speckit worktree launcher functions. |
devBenches/base-image/files/opencode/opencode.json |
Removes pinned OpenCode auth plugin versions. |
devBenches/base-image/files/openspeckit/setup-openspeckit |
Adds repo bootstrapper for shared OpenSpec/Speckit agent context. |
devBenches/base-image/files/speckit-worktree/speckit-worktree-enable |
Adds Speckit worktree workflow bootstrap command. |
devBenches/base-image/files/speckit-worktree/templates/agents/skills/speckit-git-feature/SKILL.md |
Adds shared agent skill for Speckit git feature creation. |
devBenches/base-image/files/speckit-worktree/templates/claude/skills/speckit-git-feature/SKILL.md |
Adds Claude skill for Speckit git feature workflow. |
devBenches/base-image/files/speckit-worktree/templates/claude/skills/speckit-specify/SKILL.md |
Adds Claude skill for Speckit specify workflow. |
devBenches/base-image/files/speckit-worktree/templates/codex/skills/speckit-git-feature/SKILL.md |
Adds Codex wrapper skill for Speckit git feature workflow. |
devBenches/base-image/files/speckit-worktree/templates/codex/skills/speckit-git-feature/agents/openai.yaml |
Adds Codex agent metadata for git feature skill. |
devBenches/base-image/files/speckit-worktree/templates/codex/skills/speckit-specify/SKILL.md |
Adds Codex wrapper skill for Speckit specify workflow. |
devBenches/base-image/files/speckit-worktree/templates/codex/skills/speckit-specify/agents/openai.yaml |
Adds Codex agent metadata for specify skill. |
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/README.md |
Documents the bundled Speckit git extension. |
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/commands/speckit.git.commit.md |
Adds Speckit auto-commit command prompt. |
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/commands/speckit.git.feature.md |
Adds Speckit feature checkout command prompt. |
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/commands/speckit.git.initialize.md |
Adds Speckit git initialize command prompt. |
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/commands/speckit.git.remote.md |
Adds Speckit remote detection command prompt. |
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/commands/speckit.git.validate.md |
Adds Speckit branch validation command prompt. |
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/config-template.yml |
Adds generic git extension config template. |
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/extension.yml |
Defines bundled Speckit git extension hooks and commands. |
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/git-config.yml |
Adds default git extension config. |
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/scripts/bash/auto-commit.sh |
Adds Bash auto-commit helper. |
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/scripts/bash/get-last-worktree.sh |
Adds Bash last-worktree lookup helper. |
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/scripts/bash/git-common.sh |
Adds Bash git utility functions. |
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/scripts/bash/initialize-repo.sh |
Adds Bash git initialization helper. |
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/scripts/powershell/auto-commit.ps1 |
Adds PowerShell auto-commit helper. |
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/scripts/powershell/git-common.ps1 |
Adds PowerShell git utility functions. |
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/scripts/powershell/initialize-repo.ps1 |
Adds PowerShell git initialization helper. |
devBenches/base-image/files/speckit-worktree/templates/specify/shell/ct.zsh |
Adds per-repo ct wrapper template. |
devBenches/base-image/files/speckit-worktree/templates/specify/shell/select-worktree.sh |
Adds worktree selector helper. |
devBenches/base-image/files/speckit-worktree/templates/specify/shell/worktrees.sh |
Adds per-repo fallback worktree helpers. |
devBenches/base-image/install-ai-clis.sh |
Aligns devBench AI CLI install docs/logic with Grok removal and OpenCode upstream. |
devBenches/base-image/install-testing-tools.sh |
Adds Sonar tools and bumps testing utility versions. |
devBenches/cppBench/.devcontainer/devcontainer.json |
Chains Sonar MCP, Layer 3 ensure, and stale-container reconciliation. |
devBenches/cppBench/Dockerfile.layer2 |
Adds C++ coverage tooling and Sonar helper alias. |
devBenches/cppBench/README.md |
Documents C++ SonarCloud coverage workflow. |
devBenches/devcontainer.test/README.md |
Documents expanded devBench base test coverage. |
devBenches/devcontainer.test/test-ct-launchers.sh |
Adds ct launcher behavior tests. |
devBenches/devcontainer.test/test.sh |
Expands Layer 1a tests for spec, ct, Sonar, and PATH tooling. |
devBenches/goBench/.devcontainer/devcontainer.json |
Chains Sonar MCP, Layer 3 ensure, and stale-container reconciliation. |
devBenches/goBench/Dockerfile.layer2 |
Adds Go SonarCloud coverage helper and alias. |
devBenches/goBench/README.md |
Documents Go SonarCloud coverage workflow and pyBench naming. |
devBenches/goBench/files/sonarcloud-go-coverage |
Adds Go coverage and Sonar scanner wrapper. |
devBenches/javaBench/.devcontainer/devcontainer.json |
Chains Sonar MCP, Layer 3 ensure, and stale-container reconciliation. |
devBenches/javaBench/Dockerfile.layer2 |
Adds JaCoCo/SonarCloud helpers and aliases. |
devBenches/javaBench/README.md |
Documents Java SonarCloud coverage workflows. |
devBenches/pythonBench/.devcontainer/devcontainer.json |
Removes legacy pythonBench devcontainer. |
devBenches/pythonBench/.devcontainer/docker-compose.yml |
Removes legacy pythonBench compose file. |
devBenches/pythonBench/.env |
Removes legacy pythonBench environment file. |
devBenches/pythonBench/Dockerfile.layer2 |
Removes legacy pythonBench Layer 2 image. |
devBenches/pythonBench/scripts/build-layer.sh |
Removes legacy pythonBench build wrapper. |
devBenches/pythonBench/setup.sh |
Removes legacy pythonBench setup script. |
devBenches/scripts/ai-cli-adapter.sh |
Removes Grok support and filters unsupported configured providers. |
devBenches/scripts/ensure-sonarqube-mcp.sh |
Adds reusable SonarQube MCP/proxy startup script. |
devBenches/scripts/launchDevBench |
Adds PHP bench description/detection/help text. |
devBenches/scripts/update-devBench-project.sh |
Adds PHP project detection and pyBench naming. |
devBenches/scripts/workspace-type-detector.sh |
Adds PHP workspace indicators and TUI option. |
devcontainer.test/test.sh |
Updates yolo test for function implementation. |
docker-compose.mounts.yml |
Removes Grok mount and updates AI/spec CLI mount reference. |
docs/CONTAINER-ARCHITECTURE.md |
Updates Layer 0/1a tool ownership documentation. |
docs/MOUNTS-README.md |
Updates standard mounts, Grok removal, and spec CLI ownership docs. |
docs/newBench.md |
Updates new bench mount template with .agents and no Grok. |
docs/spec-driven-development.md |
Clarifies spec-driven tools are for developer benches. |
scripts/AI-PROVIDER-SETUP.md |
Removes Grok from provider documentation. |
scripts/configure-ai-priority.sh |
Removes Grok and filters unsupported providers from saved priority config. |
scripts/ensure-layer3.sh |
Reworks Layer 3 user/group validation without running containers. |
scripts/interactive-setup.sh |
Updates default bench list to pyBench. |
scripts/launchBench |
Adds PHP bench description. |
scripts/metadata-helper.sh |
Adds PHP sibling detection and pyBench naming. |
scripts/new-project.sh |
Updates AI prompt examples to pyBench. |
scripts/reconcile-devcontainer-container.sh |
Adds stale devcontainer reconciliation helper. |
scripts/setup-ui/src/utils/config.ts |
Updates UI default benches to pyBench. |
scripts/update-bench-config.sh |
Updates bench descriptions for pyBench and phpBench. |
scripts/update-project.sh |
Adds PHP indicators and updates prompt examples to pyBench. |
sysBenches/devcontainer.test/test.sh |
Updates yolo test for function implementation. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 21cdc35cae
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@codex review |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 87 out of 88 changed files in this pull request and generated 4 comments.
Comments suppressed due to low confidence (1)
devBenches/cppBench/.devcontainer/devcontainer.json:90
- Grok has been removed from the supported provider list and the standard mount documentation in this PR, but this bench still keeps the Grok credential mount. Remove this stale mount and comment so the devcontainer matches the supported AI CLI inventory and doesn't require an unused host path.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 373a7e8f58
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 437a5b1831
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@codex review |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 90 out of 91 changed files in this pull request and generated 4 comments.
Comments suppressed due to low confidence (1)
devBenches/cppBench/.devcontainer/devcontainer.json:90
- Grok has been removed from the installer, provider priority, adapter, and canonical mount docs, but this devcontainer still retains the Grok credential mount/comment. Remove the stale Grok mount here so the bench matches the supported AI provider set and does not keep depending on a deprecated credential path.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d7c8457178
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@codex review |
# Conflicts: # .gitignore # README.md # base-image/install-ai-clis.sh # bench-config.json.backup # config/bench-config.json # devBenches/README.md # devBenches/base-image/Dockerfile # devBenches/base-image/install-ai-clis.sh # devBenches/cppBench/.devcontainer/devcontainer.json # devBenches/cppBench/.devcontainer/docker-compose.yml # devBenches/cppBench/Dockerfile.layer2 # devBenches/cppBench/README.md # devBenches/cppBench~origin_main # devBenches/goBench/.devcontainer/devcontainer.json # devBenches/goBench/.devcontainer/docker-compose.yml # devBenches/goBench/Dockerfile.layer2 # devBenches/goBench/README.md # devBenches/goBench/scripts/build-layer2.sh # devBenches/goBench~origin_main # devBenches/javaBench/.devcontainer/devcontainer.json # devBenches/javaBench/.devcontainer/docker-compose.yml # devBenches/javaBench/Dockerfile.layer2 # devBenches/javaBench/README.md # devBenches/javaBench~origin_main # devBenches/scripts/launchDevBench # devBenches/scripts/update-devBench-project.sh # docker-compose.mounts.yml # setup.sh # sysBenches/cloudBench/build-layer2.sh # sysBenches/cloudBench/devcontainer.example/.devcontainer/devcontainer.json # sysBenches/cloudBench/devcontainer.example/docker-compose.yml # sysBenches/cloudBench~origin_main
|
@codex review |
| if [ "$NO_CACHE" = true ]; then | ||
| DOCKER_BUILD_NO_CACHE=1 "$build_script" --user "$USERNAME" 2>/dev/null || \ | ||
| DOCKER_BUILD_NO_CACHE=1 "$build_script" "$USERNAME" 2>/dev/null || \ | ||
| DOCKER_BUILD_NO_CACHE=1 "$build_script" | ||
| else | ||
| "$build_script" --user "$USERNAME" 2>/dev/null || "$build_script" "$USERNAME" 2>/dev/null || "$build_script" | ||
| fi |
| local no_cache_args="" | ||
| if [ "$NO_CACHE" = true ]; then | ||
| no_cache_args="--no-cache" | ||
| fi | ||
| "$user_layer_dir/build.sh" --base "$LAYER3_BASE" --user "$USERNAME" $chown_args $no_cache_args |
| if ! docker image inspect "$EXPECTED_IMAGE" >/dev/null 2>&1; then | ||
| echo "Expected image '$EXPECTED_IMAGE' is not available." >&2 | ||
| exit 1 | ||
| fi | ||
|
|
||
| CURRENT_IMAGE_ID="$(docker inspect --format '{{.Image}}' "$CONTAINER_NAME" 2>/dev/null)" || exit 0 | ||
| CURRENT_CONFIG_IMAGE="$(docker inspect --format '{{.Config.Image}}' "$CONTAINER_NAME" 2>/dev/null)" || exit 0 | ||
| EXPECTED_IMAGE_ID="$(docker image inspect --format '{{.Id}}' "$EXPECTED_IMAGE")" | ||
|
|
| if ! docker image inspect "$CURRENT_IMAGE_ID" >/dev/null 2>&1; then | ||
| REMOVE_REASON="backing image '$CURRENT_IMAGE_ID' no longer exists locally" | ||
| elif [[ "$CURRENT_IMAGE_ID" != "$EXPECTED_IMAGE_ID" ]]; then | ||
| REMOVE_REASON="container image '$CURRENT_IMAGE_ID' does not match expected '$EXPECTED_IMAGE_ID'" | ||
| fi |
| while IFS='=' read -r key value || [[ -n "$key" ]]; do | ||
| case "$key" in | ||
| ''|\#*) continue ;; | ||
| SONARQUBE_TOKEN|SONARQUBE_ORG|SONAR_TOKEN|SONAR_ORGANIZATION|SONAR_HOST_URL|SONARQUBE_URL|SONARQUBE_CLOUD_URL) | ||
| export "$key=$value" | ||
| ;; | ||
| esac | ||
| done < "$SECRET_FILE" |
| while IFS='=' read -r _sonar_key _sonar_value || [ -n "$_sonar_key" ]; do | ||
| case "$_sonar_key" in | ||
| ''|\#*) continue ;; | ||
| SONARQUBE_TOKEN|SONARQUBE_ORG|SONAR_TOKEN|SONAR_ORGANIZATION|SONAR_HOST_URL|SONARQUBE_URL) | ||
| export "$_sonar_key=$_sonar_value" | ||
| ;; | ||
| esac | ||
| done < "$SONARQUBE_ENV_FILE" |
| RUN command -v claude >/dev/null \ | ||
| && command -v codex >/dev/null \ | ||
| && command -v agy >/dev/null \ | ||
| && command -v gemini >/dev/null \ | ||
| && command -v opencode >/dev/null \ | ||
| || (echo "Missing inherited AI CLIs from workbench-base:latest. Rebuild Layer 0, then rebuild sys-bench-base." >&2 && exit 1) |
| @@ -578,7 +578,7 @@ fi | |||
| export KUBECONFIG=/home/brett/projects/adminbench/brett-heap.kubeconfig | |||
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6bb7323484
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| RELEASE_DOWNLOAD_TIMEOUT="${RELEASE_DOWNLOAD_TIMEOUT:-3600}" # 60 minutes for slow GitHub release assets | ||
| BUN_OPERATIONS_TIMEOUT="${BUN_OPERATIONS_TIMEOUT:-900}" # 15 minutes for bun ops | ||
| UV_TOOL_INSTALL_TIMEOUT="${UV_TOOL_INSTALL_TIMEOUT:-3600}" # 60 minutes for Python tool installs | ||
| INSTALL_ANTIGRAVITY_CLI="${INSTALL_ANTIGRAVITY_CLI:-0}" |
There was a problem hiding this comment.
Install agy by default or stop requiring it
With this default, base-image/Dockerfile runs install-ai-clis.sh without setting INSTALL_ANTIGRAVITY_CLI or a checksum, so Layer 0 will always skip installing agy; downstream sys/dev container tests still assert command -v agy, and the setup/auth flows continue to advertise the Antigravity CLI. A default rebuild therefore produces images that are missing an expected CLI and fail the published tests unless the install is enabled by default or those checks/docs are made optional.
Useful? React with 👍 / 👎.
| if suffix: | ||
| lines[index] = indent + "installed:" | ||
| lines.insert(index + 1, indent + "- git") |
There was a problem hiding this comment.
Preserve inline extension entries when adding git
When an existing .specify/extensions.yml uses an inline installed list such as installed: [foo, bar], this branch replaces the whole list with a block containing only - git, silently dropping every previously installed extension. Repos that already registered other extensions inline will lose them just by running speckit-worktree-enable; preserve the existing entries and append git instead.
Useful? React with 👍 / 👎.
| - **`dotNetBench/`** - .NET development environment with DevContainer | ||
| - **`flutterBench/`** - Flutter/Dart development environment with DevContainer | ||
| - **`javaBench/`** - Java development environment with DevContainer | ||
| - **`phpBench/`** - PHP development environment with DevContainer |
There was a problem hiding this comment.
Register phpBench before advertising it
This adds phpBench to the advertised dev bench inventory, but the repo still has no devBenches/phpBench submodule and config/bench-config.json has no phpBench entry; setup and the interactive selector enumerate installable benches from that config, so users cannot select or clone the PHP bench despite the docs saying it exists. Add the bench to the config/submodules or remove it from the inventory until it is installable.
Useful? React with 👍 / 👎.
| "branch_numbering": "sequential", | ||
| "checkout_mode": "worktree", | ||
| "base_branch": resolved_base_branch, | ||
| "worktree_root": resolved_worktree_root, |
There was a problem hiding this comment.
Preserve existing Speckit git-config values
When setup-openspeckit is rerun on a repo that already customized .specify/extensions/git/git-config.yml, these hard-coded values overwrite branch_numbering, checkout_mode, base_branch, and worktree_root even when the user did not pass overrides. For example, an existing checkout_mode: branch or base_branch: develop is silently changed to worktrees off main, so subsequent Speckit features are created in the wrong workflow/base branch; keep existing values unless the corresponding CLI option is provided.
Useful? React with 👍 / 👎.
| - ${home_dir}/.pi:/home/${container_user}/.pi:cached | ||
| - ${home_dir}/.config/sonarqube:/home/${container_user}/.config/sonarqube:ro | ||
| - ${home_dir}/.gemini:/home/${container_user}/.gemini:cached | ||
| - ${home_dir}/.grok:/home/${container_user}/.grok:ro |
There was a problem hiding this comment.
Mount the new AI profile homes in Wave containers
When this Wave fallback compose override is used, it still mounts only legacy ~/.grok and omits the profile directories the new account manager writes (~/.chatgpt-profiles, ~/.grok-profiles, and ~/.abacusai). Users launching benches from Wave therefore lose the configured ChatGPT/Codex, Grok, and Abacus account state even though the standard mount template exposes those directories; add these mounts, and create their host sources, so Wave-launched containers match the canonical mount set.
Useful? React with 👍 / 👎.
|
@codex review |
| local chown_args="" | ||
| if [ -n "$LAYER3_CHOWN" ]; then | ||
| chown_args="--chown $LAYER3_CHOWN" | ||
| fi | ||
| "$user_layer_dir/build.sh" --base "$LAYER3_BASE" --user "$USERNAME" $chown_args | ||
| local no_cache_args="" | ||
| if [ "$NO_CACHE" = true ]; then | ||
| no_cache_args="--no-cache" | ||
| fi | ||
| "$user_layer_dir/build.sh" --base "$LAYER3_BASE" --user "$USERNAME" $chown_args $no_cache_args |
| mkdir -p "$(dirname "$installer_dir")" | ||
| if ! git clone --depth 1 "$installer_repo" "$installer_dir"; then | ||
| echo "Wave Terminal widget setup skipped: failed to clone $installer_repo." | ||
| return 0 | ||
| fi |
| configure_profile_runtime() { | ||
| local config_dir="$1" statusline_source statusline_link settings settings_tmp statusline_command | ||
|
|
|
@codex review |
| DOCKER_BUILD_NO_CACHE=1 "$build_script" --user "$USERNAME" 2>/dev/null || \ | ||
| DOCKER_BUILD_NO_CACHE=1 "$build_script" "$USERNAME" 2>/dev/null || \ | ||
| DOCKER_BUILD_NO_CACHE=1 "$build_script" |
| if (item.action === 'install') { | ||
| const result = await installTool(item.id); | ||
| if (result.success) { | ||
| successCount++; | ||
| if (result.needsCredentials) { |
| && conda config --system --prepend channels bioconda \ | ||
| && conda config --system --set channel_priority strict | ||
| && conda config --system --set channel_priority strict \ | ||
| && CONDA_VERSION="$(curl -fsSL https://api.github.com/repos/conda/conda/releases/latest | jq -r '.tag_name')" \ |
| check "Claude profile launcher" "command -v claude-profile" | ||
| check "pclaude alias" "command -v pclaude" | ||
| check "Codex" "command -v codex" | ||
| check "Antigravity" "command -v agy" |
| test_tool "claude-profile" "command -v claude-profile" | ||
| test_tool "pclaude" "command -v pclaude" | ||
| test_tool "codex" "command -v codex" | ||
| test_tool "agy" "command -v agy" |
|
|
||
| unalias yolo 2>/dev/null || true | ||
| yolo() { | ||
| local session_name command_string prompt_file |
| mkdir -p "$(dirname "$installer_dir")" | ||
| if ! git clone --depth 1 "$installer_repo" "$installer_dir"; then | ||
| echo "Wave Terminal widget setup skipped: failed to clone $installer_repo." | ||
| return 0 | ||
| fi | ||
| elif [ -d "$installer_dir/.git" ] && command -v git >/dev/null 2>&1; then | ||
| git -C "$installer_dir" pull --ff-only --quiet || \ | ||
| echo "Wave Terminal installer update skipped; using existing checkout at $installer_dir." | ||
| fi | ||
|
|
||
| "$installer_script" \ | ||
| --workbenches-root "$SCRIPT_DIR" \ |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 868a1b2dc4
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| done | ||
|
|
||
| workbenches_root="${workbenches_root%/}" | ||
| resolve_bench_defaults |
There was a problem hiding this comment.
Preserve explicit compose-file overrides
When callers pass --compose-file for a standard bench such as the default py-bench, this post-parse default resolution recomputes compose_file and overwrites the explicit path parsed above. The fallback creation path then starts Docker Compose from the bench's default compose file instead of the custom/Wave compose file the option promises; track whether --compose-file was supplied or resolve defaults before applying CLI overrides.
Useful? React with 👍 / 👎.
| COMMAND_TIMEOUT="${COMMAND_TIMEOUT:-300}" # 5 minutes per command; large CLI/browser downloads are network-sensitive | ||
| PYTHON_TOOLS_TIMEOUT="${PYTHON_TOOLS_TIMEOUT:-1800}" # Semgrep is large and pip resolution can be slow on constrained networks | ||
| PLAYWRIGHT_VERSION="${PLAYWRIGHT_VERSION:-1.61.1}" | ||
| SONAR_SCANNER_VERSION="${SONAR_SCANNER_VERSION:-8.1.0.6389}" |
There was a problem hiding this comment.
Pin SonarScanner to a published release
The official SonarScanner CLI downloads page currently lists 8.0.1 as the latest published scanner, but this default builds sonar-scanner-cli-8.1.0.6389-...zip; when rebuilding dev-bench-base, the curl at the installer download step fails and this script only logs the error and continues, so the image silently lacks sonar-scanner. Pin this to a published scanner build or resolve the current download URL dynamically.
Useful? React with 👍 / 👎.
Summary
Validation
Summary by Sourcery
Align shared base and devBench tooling for AI/spec CLIs, SonarQube integrations, and spec-kit workflows while adding PHP bench support and improving workspace detection and tests.
New Features:
Bug Fixes:
Enhancements:
Build:
Documentation:
Tests:
Chores: