Skip to content

docs(examples): add 25 spec-permutation scenarios as canaries#75

Merged
pofallon merged 1 commit into
mainfrom
examples/spec-canaries
May 28, 2026
Merged

docs(examples): add 25 spec-permutation scenarios as canaries#75
pofallon merged 1 commit into
mainfrom
examples/spec-canaries

Conversation

@pofallon
Copy link
Copy Markdown
Contributor

Summary

  • Adds 25 new runnable examples under examples/ to demonstrate DevContainer spec permutations not previously covered, each with devcontainer.json (+ supporting files) + README.md + executable exec.sh.
  • Drafting these surfaced nine spec-parity gaps in deacon, each filed as its own issue. The master tracking issue #74 ticks them off as the underlying issues land.
  • 12/25 pass end-to-end against current deacon (with the --mount-workspace-git-root false workaround for #67); 13 are tracked as canaries.

New example categories

Category New scenarios Notes
up/ initialize-command, workspace-mount, user-env-probe-modes, wait-for, container-user-vs-remote-user, security-options, override-command, update-remote-user-uid, ports-config, image-metadata-merge 10 dirs
features/ override-install-order, feature-contributed-lifecycle, feature-env-injection, option-sanitization, oci-digest-pin 5 dirs
down/, run-user-commands/, set-up/ basic entire missing subcommands
configuration/ extends-chain-cycle, secrets-declarative 2 dirs
doctor/ gpu-host-requirements, host-requirements-failure 2 dirs
read-configuration/ named-config-search 1 dir
template-management/ optional-paths 1 dir
compose/ multiple-compose-files 1 dir

examples/README.md indexes every new dir and points at #74 as the source of truth for pass/fail status.

Issues filed as a side effect

All are spec-parity gaps with reproductions in the affected example's README:

Issue Surface
#65 --config / --override-config over-validate filenames
#66 read-configuration over-gates on --workspace-folder
#67 --workspace-folder replaced by git root for discovery, not just mount
#68 Missing standard devcontainer.local_folder / devcontainer.config_file labels
#69 Local ./feature-X paths misinterpreted as OCI refs under --config
#70 Image devcontainer.metadata LABEL not merged
#71 updateRemoteUserUID: true ignored
#72 Top-level secrets property stripped from resolved config
#73 postStart / postAttach not executed by run-user-commands / set-up

Test plan

  • cargo fmt --all -- --check (no Rust changes; should pass)
  • cargo clippy --all-targets -- -D warnings (no Rust changes; should pass)
  • CI green
  • Manual: run examples/up/workspace-mount/exec.sh --mount-workspace-git-root false against built deacon → passes end-to-end
  • Manual: run any blocked example listed in Tracking: example scripts blocked on upstream deacon bugs #74 → fails with the exact symptom the corresponding sub-issue describes
  • Skim examples/README.md "Status: which examples pass today" section for accuracy

🤖 Generated with Claude Code

Drafted runnable examples that exercise DevContainer spec permutations
not previously covered by the examples tree. Each new directory follows
the existing convention (devcontainer.json + README.md + executable
exec.sh) and is intended to serve double duty: a demonstration of the
permutation for users, and a canary that surfaces upstream deacon bugs
when run against today's CLI.

New scenarios (25 directories):

  up/                            (10)  initialize-command (paired with
                                       workspace-trust gate), workspace-mount,
                                       user-env-probe-modes, wait-for,
                                       container-user-vs-remote-user,
                                       security-options, override-command,
                                       update-remote-user-uid, ports-config,
                                       image-metadata-merge
  features/                       (5)  override-install-order,
                                       feature-contributed-lifecycle,
                                       feature-env-injection,
                                       option-sanitization, oci-digest-pin
  down/                           (1)  basic
  run-user-commands/              (1)  basic
  set-up/                         (1)  basic
  configuration/                  (2)  extends-chain-cycle, secrets-declarative
  doctor/                         (2)  gpu-host-requirements,
                                       host-requirements-failure
  read-configuration/             (1)  named-config-search
  template-management/            (1)  optional-paths
  compose/                        (1)  multiple-compose-files

Drafting these revealed nine spec-parity gaps in deacon — each filed
with its own reproduction and acceptance criteria. The master tracking
issue is #74; it lists which examples are currently blocked on which
specific deacon issue (#65#73) and ticks them off as fixes land.

12 of the 25 pass end-to-end against current deacon (with the
--mount-workspace-git-root false workaround for #67); 13 are tracked
canaries. examples/README.md indexes every new dir, links per-example
READMEs back to the specific deacon issue each surfaces, and points at
#74 as the single source of truth for pass/fail status.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs Documentation changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant