feat: remove feature authoring commands from CLI#11
Merged
Conversation
Remove the entire 'features' subcommand group (test, package, pull, publish, info, plan) and templates authoring subcommands (publish, metadata, generate-docs). Narrow the CLI to consumer-only commands — users who USE dev containers, not authors who publish features. Changes: - Remove FeatureCommands enum and Commands::Features variant from cli.rs - Remove authoring variants from TemplateCommands (Publish, Metadata, GenerateDocs) - Simplify templates.rs dispatcher to only Pull and Apply - Delete features/, features_monolith.rs, features_publish_output.rs command modules - Delete features_info.rs and features_test/ from core library - Delete 16 authoring test files from deacon and core test suites - Delete 5 spec documentation directories and 8 example directories - Update README.md, CLI_PARITY.md, examples/README.md, nextest.toml - Fix license metadata from Apache-2.0 to MIT in workspace Cargo.toml Consumer feature installation during 'deacon up' is fully preserved. 1755 tests pass, zero clippy warnings. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
4 tasks
pofallon
added a commit
that referenced
this pull request
May 26, 2026
…liases and dormant scaffolding (#51) Audit gap #11 + user directive: aggressively delete dormant / deprecation-tracked scaffolding since nobody is using deacon yet — no back-compat to preserve. ## Deleted CLI flags (Up + Build) - `--experimental-lockfile` (hidden alias for the legacy `<PATH>` form, emitted a deprecation WARN) — replaced by `--no-lockfile` and the default-derived path next to the config file. - `--experimental-frozen-lockfile` (hidden alias for `--frozen-lockfile`) — replaced by `--frozen-lockfile` directly. - `--omit-syntax-directive` (Build) — was never read in any code path. - `--skip-persisting-customizations-from-features` (Build) — was never read. ## Deleted code following the flags - `crates/deacon/src/cli.rs`: removed the 2 deprecation-WARN blocks, the `effective_frozen_lockfile = frozen || experimental_frozen` OR, and the corresponding fields from the Up + Build dispatchers + enum variants. - `crates/deacon/src/commands/up/args.rs`: removed `experimental_lockfile`, `experimental_frozen_lockfile`, and `omit_syntax_directive` from `UpArgs` and `NormalizedUpInput` (+ their Default impl + the normalize-and-validate threading). Removed the `#[allow(dead_code)] // TODO: Will be wired in T009` on `update_remote_user_uid_default` (it IS actually consumed downstream — no allow needed). - `crates/deacon/src/commands/up/mod.rs`: simplified the frozen-lockfile pre-build validation — `(args.frozen_lockfile || args.experimental_lockfile.is_some())` → `args.frozen_lockfile`, and dropped the experimental_lockfile path derivation. - `crates/deacon/src/commands/up/helpers.rs`: removed the `experimental_lockfile` branch in `handle_lockfile_post_build` and the `experimental_lockfile_path_overrides_derivation` test. - `crates/deacon/src/commands/build/mod.rs`: removed `experimental_lockfile`, `experimental_frozen_lockfile`, `omit_syntax_directive`, and `skip_persisting_customizations_from_features` from `BuildArgs` and its Default impl. Tightened the `no_lockfile` / `frozen_lockfile` doc comments to point at the actual followup (lifting the byte-compare helper from `up::helpers` into a shared module). - `crates/core/src/build/mod.rs`: removed `experimental_lockfile`, `experimental_frozen_lockfile`, `omit_syntax_directive` from the `BuildRequest` struct and updated the 2 test fixtures accordingly. - `crates/deacon/tests/up_lockfile_frozen.rs`: removed the `test_experimental_frozen_lockfile_defaults_to_false` test; updated 2 other tests that referenced the deleted field to use `frozen_lockfile`. ## Deleted dead module - `crates/deacon/src/commands/up/dotfiles.rs` (245 LoC) — module was marked `#[deprecated]` since T009 with dotfiles execution now in `deacon_core::container_lifecycle::execute_dotfiles_in_container`. Confirmed zero callers via grep. Removed `mod dotfiles;` registration in `up/mod.rs` and the matching doc-comment line. ## Verification - `cargo build` - `cargo fmt --all -- --check` - `cargo clippy --all-targets -- -D warnings` - `cargo test --lib` → 284 deacon + 1081 deacon-core pass Refs: gap #11 from the post-1.0 audit. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
featuressubcommand group (test, package, pull, publish, info, plan) and templates authoring subcommands (publish, metadata, generate-docs)Consumer feature installation during
deacon upremains fully functional. 1755 tests pass, zero clippy warnings.Test plan
cargo fmt --all -- --checkpassescargo clippy --all-targets -- -D warningsproduces zero warningsmake test-nextest-fast— 1755 tests pass, 31 skippeddeacon --helpdoes not listfeaturessubcommand groupdeacon templates --helpshows onlypullandapplygrep 'license' Cargo.tomlreads MIT🤖 Generated with Claude Code