seihou-cli 0.11.0.0 → 0.11.0.1
raw patch · 3 files changed
+30/−18 lines, 3 filesdep ~seihou-corePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: seihou-core
API changes (from Hackage documentation)
Files
- help/modules.md +1/−1
- seihou-cli.cabal +4/−4
- src-exe/Seihou/CLI/Commands.hs +25/−13
help/modules.md view
@@ -85,7 +85,7 @@ seihou install <git-url> Install modules, recipes, blueprints, or prompts from git seihou run <module> --var k=v Run a module to generate files seihou update [target] Update a recorded application and preserve user edits- seihou remove <module> Remove an applied module and its files+ seihou remove <module> Remove a module; preserve project-owned seeds seihou schema-upgrade ./my-module Upgrade module.dhall to current schema VERSIONING AND MIGRATIONS
seihou-cli.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: seihou-cli-version: 0.11.0.0+version: 0.11.0.1 synopsis: CLI for Seihou project scaffolding description: Command-line interface for Seihou, a composable project scaffolding@@ -141,7 +141,7 @@ generic-lens >=2.2 && <3, lens >=5.2 && <6, process >=1.6 && <2,- seihou-core ^>=0.11.0.0,+ seihou-core ^>=0.11.0.1, streamly-core >=0.3 && <0.5, temporary >=1.3 && <2, text >=2.0 && <3,@@ -228,7 +228,7 @@ optparse-applicative >=0.18 && <1, process >=1.6 && <2, seihou-cli-internal,- seihou-core ^>=0.11.0.0,+ seihou-core ^>=0.11.0.1, temporary >=1.3 && <2, text >=2.0 && <3, time >=1.12 && <2,@@ -320,7 +320,7 @@ lens >=5.2 && <6, process >=1.6 && <2, seihou-cli-internal,- seihou-core ^>=0.11.0.0,+ seihou-core ^>=0.11.0.1, streamly-core >=0.3 && <0.5, tasty >=1.4 && <2, tasty-hspec >=1.2 && <2,
src-exe/Seihou/CLI/Commands.hs view
@@ -581,6 +581,8 @@ pretty ("When re-running, Seihou uses the .seihou/manifest.json to detect" :: String), pretty ("new, modified, unchanged, and conflicting files. Conflicts are" :: String), pretty ("reported and block execution unless --force is used." :: String),+ pretty ("Seeds are created once; edits and deletion survive even with --force." :: String),+ pretty ("Lifecycle changes require seihou update <target>." :: String), line, pretty ("If an applied module's installed copy has advanced past the manifest's" :: String), pretty ("recorded version and ships migrations that move project files," :: String),@@ -613,7 +615,10 @@ vsep [ pretty ("Reconciles recorded module and recipe applications with newer source" :: String), pretty ("content. Saved inputs are reused, migrations are included automatically," :: String),- pretty ("user edits are three-way merged, and unchanged commands are skipped." :: String),+ pretty ("managed edits are three-way merged, and unchanged commands are skipped." :: String),+ pretty ("Managed-to-seed releases preserve project bytes and absence. Seeds" :: String),+ pretty ("remain project-owned; seed-to-managed adoption requires explicit" :: String),+ pretty ("keep/accept consent. Neither --force nor --json supplies that consent." :: String), line, pretty ("With no TARGET, updates every recorded application in manifest order." :: String), pretty ("Use --dry-run to preview or --json for a non-interactive machine result." :: String),@@ -634,15 +639,16 @@ info (removeParser <**> helper) ( fullDesc- <> progDesc "Remove an applied module and delete its generated files"+ <> progDesc "Remove a module and retire its ownership" <> footerDoc ( Just $ vsep [ pretty ("Removes a module that was previously applied via 'seihou run' and" :: String),- pretty ("reverses its effects. Only modules with a 'removal' section" :: String),- pretty ("in their module.dhall can be removed." :: String),+ pretty ("reverses its declared effects. Managed files require a removal" :: String),+ pretty ("specification. Seed-only ownership can be retired without one; seed" :: String),+ pretty ("files and their deliberate deletion are preserved, even with --force." :: String), line,- pretty ("Files that have been modified since generation are treated as" :: String),+ pretty ("Managed files modified since generation are treated as" :: String), pretty ("conflicts. Use --force to delete them without prompting, or" :: String), pretty ("respond interactively to keep or delete each one." :: String), line,@@ -662,9 +668,9 @@ fmap Remove $ RemoveOpts <$> argument moduleNameReader (metavar "MODULE" <> help "Module to remove")- <*> optional (ApplicationId . T.pack <$> strOption (long "application" <> metavar "ID" <> help "Select a checkout-owning recorded application"))+ <*> optional (ApplicationId . T.pack <$> strOption (long "application" <> metavar "ID" <> help "Select the recorded application owning this instance")) <*> switch (long "dry-run" <> help "Show removal plan without executing")- <*> switch (long "force" <> help "Delete conflicted files without prompting")+ <*> switch (long "force" <> help "Delete conflicted managed files without prompting; preserve seeds") <*> switch (long "verbose" <> short 'v' <> help "Show detailed progress messages") varsInfo :: ParserInfo Command@@ -732,6 +738,7 @@ vsep [ pretty ("Reads .seihou/manifest.json in the current directory and displays" :: String), pretty ("applied modules, tracked files, and resolved variable values." :: String),+ pretty ("Seed receipts are counted without reading project-owned content." :: String), pretty ("If no manifest exists, reports that and exits successfully." :: String), line, pretty ("Use --check-updates to also report which applied modules have newer" :: String),@@ -775,7 +782,8 @@ vsep [ pretty ("Compares tracked files in .seihou/manifest.json against the current" :: String), pretty ("disk state. Shows files that have been modified or deleted since the" :: String),- pretty ("last 'seihou run'. Does not load modules or resolve variables." :: String)+ pretty ("last 'seihou run'. Does not load modules or resolve variables." :: String),+ pretty ("Seed receipts are counted; their content and deletion are not compared." :: String) ] ) )@@ -902,7 +910,7 @@ ) <*> switch (long "dry-run" <> help "Show plan without executing") <*> switch (long "diff" <> help "Show diff against current disk state")- <*> switch (long "force" <> help "Auto-resolve conflicts (accept new files)")+ <*> switch (long "force" <> help "Accept generated managed files on conflicts; preserve seeds") <*> switch (long "no-commands" <> help "Skip shell command steps") <*> optional (option (T.pack <$> str) (long "namespace" <> metavar "NS" <> help "Override namespace for config lookup")) <*> optional (option (T.pack <$> str) (long "context" <> short 'c' <> metavar "CTX" <> help "Override context for config lookup"))@@ -933,10 +941,10 @@ varPair (long "var" <> metavar "KEY=VALUE" <> help "Variable override (repeatable)") )- <*> switch (long "dry-run" <> help "Show the complete update plan without modifying managed state")+ <*> switch (long "dry-run" <> help "Show the complete update plan without modifying project state") <*> switch (long "json" <> help "Emit one JSON document and disable prompts") <*> switch (long "reconfigure" <> help "Ignore saved inputs and resolve them again")- <*> switch (long "force" <> help "Use generated content for safe conflicts and retain edited orphans")+ <*> switch (long "force" <> help "Use generated content for managed conflicts; retain edited orphans; adoption still prompts") <*> updateCommandFlags <*> switch (long "commit" <> help "Commit successfully updated managed paths") <*> optional (option (T.pack <$> str) (long "commit-message" <> metavar "MSG" <> help "Custom commit message (implies --commit)"))@@ -1404,7 +1412,9 @@ line, pretty ("Conflict semantics mirror 'seihou remove': files whose disk hash differs" :: String), pretty ("from the manifest are flagged. Without --force the engine refuses to" :: String),- pretty ("overwrite them and exits non-zero. With --force, the migration proceeds." :: String),+ pretty ("overwrite them and exits non-zero. With --force, managed conflicts proceed." :: String),+ pretty ("Declarative migrations cannot mutate seed-owned paths, even with --force." :: String),+ pretty ("Shell commands are unsandboxed; authors must preserve project-owned seeds." :: String), line, pretty ("Examples:" :: String), indent 2 $@@ -1959,6 +1969,8 @@ pretty ("optionally applies the blueprint's baseModules as a starting scaffold," :: String), pretty ("renders the prompt template, and starts the configured" :: String), pretty ("provider." :: String),+ pretty ("Baseline seeds are created once; edits and deletion survive --force." :: String),+ pretty ("Lifecycle changes require seihou update <recorded-target>." :: String), line, pretty ("Variable resolution follows the same precedence as 'seihou run':" :: String), pretty ("CLI overrides > env > local config > namespace > context > global > defaults" :: String),@@ -1999,7 +2011,7 @@ <*> optional (option (T.pack <$> str) (long "namespace" <> metavar "NS" <> help "Override namespace for config lookup")) <*> optional (option (T.pack <$> str) (long "context" <> short 'c' <> metavar "CTX" <> help "Override context for config lookup")) <*> switch (long "verbose" <> short 'v' <> help "Show detailed progress messages")- <*> switch (long "force" <> help "Auto-resolve baseline conflicts (accept new files)")+ <*> switch (long "force" <> help "Accept generated managed baseline files on conflicts; preserve seeds") <*> switch (long "batch" <> help "Run a non-interactive CLI provider (automatic when stdin is not a terminal)") <*> providerOption <*> modelOption