Skip to content

Version 0.1.9

Choose a tag to compare

@veggerby veggerby released this 29 Apr 19:21
· 15 commits to main since this release
ec612ac

[0.1.9] - 2026-04-29

Added

  • doctor overlay dependency checkscs doctor now validates that all overlay requires: dependencies are present in the project file, flags unknown overlay IDs (typos, removed overlays), and surfaces suggests: entries as informational warnings; doctor --fix auto-adds missing required overlays and regenerates
  • doctor port cross-validationcs doctor cross-checks devcontainer.json forwardPorts against the ports actually exposed by Docker Compose services; reports fail for forwarded ports with no backing service and warn for compose-bound ports absent from forwardPorts; not auto-fixable (requires overlay-level changes)
  • doctor .env.example drift detectioncs doctor detects when .env.example is stale: fail for parameters declared by selected overlays that are missing from the file; warn for keys in the file not declared by any overlay; doctor --fix regenerates .env.example via a full cs regen
  • doctor reproducibility checkcs doctor dry-composes the devcontainer to a temp directory and compares it file-by-file against the current output; reports fail when a generated file is missing or has drifted from what cs regen would produce; doctor --fix regenerates the affected files
  • doctor --fix --dry-run — New flag combination that previews what doctor --fix would change without writing any files; prints a numbered plan of each auto-fixable action with its remediationKey, safetyClass, and plannedChanges; exits with code 1 when any findings exist (auto-fixable or manual) so CI can detect "fix needed" without applying changes; --dry-run without --fix is an error; --format json is supported and adds dryRun: true and plannedActions to the output
  • doctor parameter checkscs doctor now validates overlay parameter configuration against the project file and generated output. Five new checks in a dedicated "Parameters" section:
    • Unresolved {{cs.*}} tokens — scans devcontainer.json, docker-compose.yml, and .env.example for substitution tokens that were never replaced; reported as a failure
    • Sensitive parameters in plain text — detects sensitive: true parameters whose values appear as literal strings in devcontainer.json remoteEnv instead of being referenced via ${VAR:-default}; reported as a warning
    • Missing .env.example — warns when a compose-stack project has parameterised overlays but no .env.example was generated
    • Unknown parameter keys — warns when the project file's parameters: section contains keys not declared by any selected overlay (stale entries from removed overlays)
    • Missing required parameters — fails when an overlay declares a required parameter (no default value) that is absent from the project file parameters: section
    • doctor --fix resolves the automatic checks by adding missing parameters with their overlay defaults to the project file then re-running cs regen
  • local-llm preset — New preset for local LLM inference: always selects ollama + ollama-cli + open-webui; optional gpu parameter adds cuda or rocm overlay; pre-sets OLLAMA_HOST environment variable
  • full-observability preset — New preset that bolts a complete monitoring stack onto any project: prometheus, grafana, loki, otel-collector, alertmanager, promtail always included; tracing parameter selects Jaeger, Tempo, both, or none; pre-sets all OTel SDK environment variables
  • vector-ai preset — New preset for RAG pipeline development: qdrant + ollama + ollama-cli + python always included; optional gpu and chat_ui (Open WebUI) parameters; pre-sets QDRANT_URL, OLLAMA_HOST, and EMBEDDING_MODEL
  • k8s-dev preset — New preset for local Kubernetes development: kubectl-helm + docker-in-docker + modern-cli-tools always included; cluster parameter selects k3d (default) or kind; devloop parameter selects Tilt (default), Skaffold, or none
  • .shared/vscode/markdown-extensions.json — New shared VS Code fragment containing yzhang.markdown-all-in-one and DavidAnson.vscode-markdownlint; imported by mkdocs, mkdocs2, and pandoc overlays, removing duplicated extension entries from their patches
  • fuseki overlay — New overlay for Apache Fuseki (Apache Jena SPARQL server); runs stain/jena-fuseki with a TDB2-backed persistent dataset, exposes port 3030 for the SPARQL endpoint and admin UI, and injects FUSEKI_HOST, FUSEKI_PORT, FUSEKI_DATASET, FUSEKI_URL, and FUSEKI_ADMIN_PASSWORD into the devcontainer environment
  • parameters: sections on infrastructure overlaysmysql, mongodb, redis, rabbitmq, nats, minio, sqlserver, and localstack now declare all configurable values (version, port(s), credentials) as first-class parameters visible to the questionnaire and documentation system; password fields are marked sensitive: true
  • serviceOrder field in overlay.yml — Service startup ordering is now declared as serviceOrder: <number> in overlay.yml rather than the non-standard _serviceOrder field in devcontainer.patch.json, eliminating VS Code JSON schema validation warnings; mergeRunServices() reads the value from the overlay manifest; convention is 0 = infrastructure, 1 = observability backends, 2 = middleware, 3 = UI tier, 4 = demo apps
  • messaging overlay categoryrabbitmq, nats, and redpanda are now categorised as messaging instead of database; the interactive questionnaire shows a dedicated "Messaging" section; a MessagingOverlay type alias is exported from tool/schema/types.ts
  • .shared/vscode/js-ts-settings.json — New shared VS Code settings fragment providing Prettier/ESLint extensions and formatOnSave for TypeScript and JavaScript; imported by nodejs and bun overlays, removing duplicated configuration from their patches

Fixed

  • cross-distro-packages feature deleted on regen — When cleanupStaleDirFiles was introduced to remove stale scripts within registered directories, it also recursed into the features/ directory and deleted cross-distro-packages/devcontainer-feature.json and install.sh because those files were never added to the file registry. The composer now registers every file in the copied feature directory, so devcontainer build can locate the local feature.
  • Stale scripts/ files not removed on regen — When an overlay with a setup.sh or verify.sh was removed from a project and cs regen was run, any scripts that belonged only to the removed overlay (e.g. scripts/setup-rabbitmq.sh) were left behind on disk if at least one other overlay still contributed scripts. The cleanup pass now recurses into registered subdirectories and removes individual stale files within them, not just entire unregistered directories. Additionally, scripts/ is no longer created eagerly before determining whether any overlay in the current run requires it.
  • messaging overlays rejected by project file validator on regen — After rabbitmq, nats, and redpanda were moved to the messaging category, any project file using the legacy database: list field to declare them caused a ProjectConfigError that silently aborted cs regen before any files were written — leaving the previous docker-compose.yml intact. The database predicate in buildCategoryLookup now accepts both database and messaging category overlays so existing project files continue to work without migration.
  • Port conflict declarations — Added bidirectional conflicts: entries for all overlays sharing host ports, preventing silent Docker bind failures at startup:
    • Port 3000: grafana, open-webui, nodejs, bun, rust
    • Port 8080: mysql, redpanda, otel-demo-nodejs, nodejs, bun, go, java, dotnet
    • Port 8081: mongodb, redpanda, otel-demo-python, go, java
  • grafana and otel-collector depends_on — Removed hardcoded depends_on entries for services declared as suggests (optional); grafana now only depends on prometheus (its sole requires); otel-collector's depends_on block removed entirely
  • minio / localstack conflict — Added bidirectional conflict between minio and localstack (both provide S3-compatible storage and inject conflicting AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY); minio env var unified from AWS_REGION to AWS_DEFAULT_REGION
  • Redundant feature installspre-commit no longer re-installs the Python devcontainer feature (already provided by requires: [python]); commitlint no longer re-installs Node (already provided by requires: [nodejs]); playwright now declares requires: [nodejs] and no longer installs Node independently
  • Observability restart: unless-stopped — Added restart policy to all 8 observability compose services (prometheus, grafana, loki, tempo, jaeger, alertmanager, promtail, otel-collector)
  • Observability healthchecks — Added HTTP healthchecks to all 8 observability services; grafana's healthcheck uses /api/health, prometheus and alertmanager use /-/ready, others use /ready or the collector's / health endpoint
  • redis healthcheck — Added redis-cli ping healthcheck matching the pattern in .shared/compose/common-healthchecks.md
  • mysql and mongodb healthcheck start_period — Added start_period: 30s to mysql and start_period: 20s to mongodb to prevent spurious failures during slow storage-engine initialisation
  • qdrant version pinning — Default QDRANT_VERSION changed from latest to v1.9.0 for reproducible builds
  • mkdocs category — Changed from language to dev, matching mkdocs2 and reflecting that documentation generators are dev tools, not language runtimes
  • comfyui GPU devcontainer support — Added compose_imports: [.shared/compose/nvidia-gpu-devcontainer.yml] so Nvidia GPU tooling is available in the devcontainer shell, not only the ComfyUI sidecar
  • rocm / comfyui cross-suggestsrocm now suggests comfyui; comfyui now suggests rocm, giving AMD GPU users guidance equivalent to the existing cuda suggest
  • keycloak service order — Corrected serviceOrder from 10 to 2 (middleware tier); added parameters: section for KEYCLOAK_VERSION, KEYCLOAK_PORT, KEYCLOAK_ADMIN, and KEYCLOAK_ADMIN_PASSWORD (sensitive) so they are visible to the questionnaire and documented in .env.example
  • otel-demo-nodejs / otel-demo-python service order — Corrected serviceOrder from 3 to 4 to match order: 4 declared in their overlay.yml
  • Observability suggests on infrastructure overlayspostgres, pgvector, mysql, mongodb, redis, rabbitmq, nats, redpanda, minio, sqlserver now suggest prometheus and grafana; qdrant, ollama, and open-webui additionally suggest otel-collector
  • nodejs and bun formatOnSaveeditor.formatOnSave: true is now set for [typescript] and [javascript] via the new shared js-ts-settings.json fragment
  • pgvector env var alignmentpgvector/devcontainer.patch.json now uses remoteEnv (matching postgres) with PGVECTOR_* primary names and POSTGRES_* aliases, so apps written against the postgres overlay work without changes when switching to pgvector
  • name: devnet in all compose network declarations — Added name: devnet under the devnet: key in all 28 overlay compose files so Docker uses that as the actual network name regardless of the Compose project name, enabling cross-stack service discovery
  • AI CLI overlay install stepsamp, opencode, gemini-cli, and windsurf-cli now wire their pre-existing setup.sh scripts via postCreateCommand, so the CLI tool is installed when the devcontainer is built rather than requiring a manual step
  • Removed unused .shared/otel/otel-base-config.yaml — Skeletal config superseded by the full otel-collector-config.yaml already shipped with the otel-collector overlay
  • adopt --json output no longer polluted by progress messagesbuildExpectedDevcontainerConfig now suppresses console.log progress output during analysis so --json mode always emits clean JSON
  • overlay-loader test category allowlistmessaging added to the valid overlay category set in overlay-loader.test.ts, fixing a pre-existing test failure introduced when the messaging category was added to the type system
  • claude-code overlay — Added anthropic.claude-code VS Code extension
  • codex overlay — Added openai.chatgpt VS Code extension
  • ollama-cli overlay — Added a CLI-only Ollama overlay that installs ollama in plain or compose stacks without requiring a local sidecar service
    • Supports host/remote Ollama usage by honoring OLLAMA_HOST when configured
    • Keeps the existing archive + Docker-image extraction install flow (.tar.zst preferred, .tgz fallback)
  • ollama overlay auto-dependencyollama now implicitly requires ollama-cli, preserving current UX (server + CLI) while separating service and CLI concerns
  • jaeger overlay — Jaeger no longer advertises unused legacy ports, so the overlay better matches the OTLP-based setup users actually run
    • Applications running inside the devcontainer now get OTLP tracing environment variables preconfigured out of the box for Jaeger, including OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4317
    • Jaeger now waits until it is healthy before the devcontainer starts, ensuring the UI is reachable when VS Code opens the browser
  • otel-collector overlay — Applications in the devcontainer now get OTLP export variables preconfigured for the collector, and telemetry is routed through the collector automatically when jaeger and otel-collector are used together
  • pandoc overlay — Unicode PDF generation no longer fails on \textfallback{} or when Noto Sans Symbols 2 is unavailable, including status-icon content like ✅ ⚠️ ❌