Skip to content

Merge main into feature/ADR-191-oop-ml-pipeline#237

Merged
jodavis merged 10 commits into
feature/ADR-191-oop-ml-pipelinefrom
dev/claude/merge-main-into-ADR-191
Jun 26, 2026
Merged

Merge main into feature/ADR-191-oop-ml-pipeline#237
jodavis merged 10 commits into
feature/ADR-191-oop-ml-pipelinefrom
dev/claude/merge-main-into-ADR-191

Conversation

@jodavis-claude

Copy link
Copy Markdown
Collaborator

Summary

  • Merges recent commits from main into feature/ADR-191-oop-ml-pipeline, including the new devcontainer definition
  • Resolves conflict in .gitignore: replaced feature-branch-specific .claude/settings.local.json entry with main's more general *.local.* pattern (which covers it) and adds dotnet/ cache exclusion
  • Resolves conflict in ml/requirements.txt: merged both sets of dependencies (feature branch: pytest/audio libs; main: numpy/pandas/tensorflow/dvc)

Commits from main included

🤖 Generated with Claude Code

dependabot Bot and others added 6 commits June 10, 2026 16:46
---
updated-dependencies:
- dependency-name: Microsoft.Extensions.Hosting
  dependency-version: 10.0.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
updated-dependencies:
- dependency-name: Azure.Monitor.OpenTelemetry.Exporter
  dependency-version: 1.8.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
updated-dependencies:
- dependency-name: Microsoft.NET.Test.Sdk
  dependency-version: 18.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
)

* Add devcontainer definition for reproducible Linux dev environment

Provides a Docker-based devcontainer so Claude Code remote sessions and
local contributors get a consistent environment with all dependencies
pre-installed.

- Base image: mcr.microsoft.com/devcontainers/base:ubuntu-24.04 (vscode
  user with passwordless sudo, git, curl pre-installed)
- Baked into image: GitHub CLI, .NET 10 SDK, PowerShell, Node.js LTS,
  Claude Code CLI, Playwright OS-level Chromium deps, Python ML venv
  at /opt/ml-env with numpy/pandas/tensorflow/dvc
- ~/.claude mounted as named volume (survives container rebuilds; first
  Claude Code login is interactive, subsequent starts reuse credentials)
- GITHUB_TOKEN forwarded from host environment so gh works without
  interactive login
- post-create.sh: dotnet restore → dotnet build → playwright.ps1 install
  chromium --with-deps (version-matched to Microsoft.Playwright NuGet pin)
- ml/requirements.txt added alongside devcontainer so Dockerfile COPY
  works from the repo-root build context

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019jmGA95hGTRu4aZ4yL45NL

* Add CI workflow to test-build the devcontainer

Builds the Docker image on every push/PR that touches devcontainer
files or ml/requirements.txt, then runs a smoke test inside the
built container to verify .NET, gh, Node.js, Python, and the ML
venv packages are all present and importable.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019jmGA95hGTRu4aZ4yL45NL

* Fix devcontainer build: install python3-venv before creating venv

On Debian/Ubuntu, python3-venv is a separate package from python3 and
must be explicitly installed before python3 -m venv will work.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019jmGA95hGTRu4aZ4yL45NL

* Address Copilot review comments on devcontainer

- Dockerfile: replace curl|bash NodeSource install with explicit GPG
  keyring + pinned node_24.x repo for auditability and reproducibility
- devcontainer.json: forward GH_TOKEN alongside GITHUB_TOKEN (gh CLI
  checks both env vars depending on how the host is configured)
- post-create.sh: export ~/.dotnet/tools to PATH in the fallback branch
  before calling playwright, since global tool installs land there and
  it is not on PATH by default; fix quality gate script names to
  include the .sh extension
- ml/requirements.txt: pin to versions validated by the CI build
  (numpy 2.5.0, pandas 3.0.3, tensorflow 2.21.0, dvc 3.67.1)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019jmGA95hGTRu4aZ4yL45NL

* Fix ~/.claude volume ownership so Claude Code login can write credentials

Docker initialises a named volume from the image's directory at the
mount point. If the directory doesn't exist in the image, Docker creates
a root-owned entry and the vscode user cannot write to it — causing the
'login succeeds in browser but shows as not logged in' symptom.

Creating ~/.claude as the vscode user in the Dockerfile ensures the
volume is initialised with UID 1000 ownership on first use.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019jmGA95hGTRu4aZ4yL45NL

* Configure container with default permissions settings

* Add skills to define agent behavior specific to this project's work tracking, code style, and documentation standards.

* CI validation of devcontainer with conditional execution

* Fix devcontainer image name case: lowercase repository for Docker registry

github.repository expands to jodavis/AdaptiveRemote (uppercase A) which
Docker rejects — registry names must be all lowercase. Add a step that
pipes the repository name through tr to produce the lowercase image name,
then reference it via step output in imageName and cacheFrom.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019jmGA95hGTRu4aZ4yL45NL

* Fix CLAUDE_DEFAULTS path in post-create.sh

Was pointing at /home/vscode/.claude/settings.json (the volume target,
same as CLAUDE_SETTINGS). Should point at /home/vscode/.claude-defaults/
settings.json where the Dockerfile bakes the template. In CI the named
volume is always fresh so the source never exists and cp fails. Locally
this is masked because returning developers already have settings in the
persistent volume and the if-block is skipped.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Mark validate scripts executable (git mode 100755)

validate.sh calls validate-build.sh and validate-tests.sh directly (no
bash prefix), so they must be executable. Without the execute bit the
devcontainer CI run fails with exit code 126 (permission denied) when
validate.sh reaches line 20.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Minor updates to skill definitions

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Joe Davis <ElwoodMoves@hotmail.com>
@github-actions

github-actions Bot commented Jun 26, 2026

Copy link
Copy Markdown

Test Results

401 tests  ±0   401 ✅ ±0   2m 13s ⏱️ -43s
  5 suites ±0     0 💤 ±0 
  5 files   ±0     0 ❌ ±0 

Results for commit dc4892c. ± Comparison against base commit 8f13e2e.

♻️ This comment has been updated with latest results.

ElwoodMoves and others added 4 commits June 26, 2026 22:58
librosa -> resampy -> numba, and numba <0.59.0 does not support Python 3.12.3
(Ubuntu 24.04 system Python). numba 0.59.0 added Python 3.12 support.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
numpy==2.5.0 conflicts with numba (latest numba supports numpy<2.5).
Librosa brings in resampy which requires numba>=0.59.0, but numba
0.59.0 requires numpy<1.27, and no numba version supports numpy 2.5.0.

Use numpy>=1.22 to let pip find a compatible version that satisfies
both tensorflow 2.21.0 and numba/librosa.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…dentials

Adds a git-askpass.sh script baked into the image at /usr/local/bin/git-askpass
that supplies GITHUB_TOKEN for git credential prompts. GIT_ASKPASS is set in
containerEnv so it takes precedence over the VS Code credential helper injected
on each container attach, keeping host git credentials out of the container.
@jodavis jodavis merged commit ba36fd2 into feature/ADR-191-oop-ml-pipeline Jun 26, 2026
5 checks passed
@jodavis jodavis deleted the dev/claude/merge-main-into-ADR-191 branch June 26, 2026 23:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants