Skip to content

v0.5.0

Latest

Choose a tag to compare

@github-actions github-actions released this 06 Aug 13:19
· 24 commits to main since this release
3ae254c

v0.5.0 — Agent ergonomics

This release makes a DWE project legible to an AI coding agent working inside it, and adds the engine features that came out of that work.

Highlights

🤖 Navigation for agents

  • dwe docs llms-txt is a real briefing — project context, services, commands, builtin and predicate inventories, docs pointers. Project-aware inside a project, generic outside one.
  • dwe docs search is tokenized and ranked, with snippets and a resolvable topic#anchor on every hit. dwe docs show --anchors / --toc / --anchor address a document's sections directly.
  • dwe test list --output json gained cost_profile — host steps, isolation findings, shared volumes — so the cost of running the suite is knowable before running it.

🧩 Pipeline primitives

  • argv_append_from — build extra argv elements from a host command's output, one per line, no shell re-parse.
  • check: auto — derive a step's check: by inverting its shell when: instead of writing the condition twice.
  • source_clone — a self-gating clone builtin, with path containment and symlink checks on the destination.

🔤 ${vars.*} inside pipelines

Pipeline cmd:, with:, check:, timeout: and shell when: render at resolve time, so a deploy step can read project vars — and dwe deploy plan shows the command that will actually run. An unrecognized head (${HOME}, a typo) stays literal instead of collapsing to an empty string. Adds dwe deploy plan --output json.

dwe validate

Three new checks — config.template_refs (a ${...} whose path doesn't resolve), config.container_name, config.ports_exports — and less noise: implicit defaults no longer report as findings. The summary and JSON now name the active scope.

🐚 Command surface

  • ${args} pass-through — forwarded as positional parameters, never interpolated into the command text.
  • dwe shell --tty / --no-tty, dwe services list, and a named diagnosis when a container lacks the configured shell.

🏗 Scaffold and tables

dwe init ships service defaults, a pipeline skeleton, an AI pack, and a starter test scenario. Every CLI table now adapts to terminal width — fits, shrinks, then breaks into record blocks; piped output is byte-identical to before.

Upgrade notes

⚠️ The Compose project name is now lowercased. Compose requires [a-z0-9][a-z0-9_-]* while project.name / project.prefix / docker.yml's project_name are free-form, so cueBreaker now resolves to dwe-cuebreaker — and container names, the volume prefix, and the compose project label follow. If your project name carries uppercase, stop the stack with v0.4.1 before upgrading: the old containers and volumes belong to a different project as far as Compose is concerned, and would be orphaned rather than adopted. Already-lowercase projects are unaffected.

One-time full re-run. vars: is now part of the config hashes — it has to be, since a step's command can depend on it — so the first dwe deploy run after upgrading re-runs every step. Steps are idempotent and gated, so this is safe; it just isn't silent.

Everything else is additive and activates only when used.

Full changelog: v0.4.1...v0.5.0