- Deploy dry-run mode (
--dry-run) validates the full deployment path without submitting any transaction, printing an actionable deployment plan with fee estimates and warnings. - Template metadata fields adds
license,repository,homepage, anddocumentationURL fields to template entries, exposed via CLI publish flags and shown intemplate show. - Plugin update command adds
starforge plugin update [name]to upgrade installed plugins from their registered sources without manual reinstalls. - Template publish auditing requires README.md, validates semver strings for
versionand version constraints, and checks thatcli_version_min <= cli_version_max— all with actionable error messages.
- Added
--dry-runflag toDeployArgs - Added
run_dry_run()function that runs 4 sequential checks:- WASM artifact path + magic-byte validation
- Wallet existence in local config
- Network connectivity and account XLM balance via Horizon
- Soroban fee estimation via RPC simulation
- Prints a deployment plan summary with warnings and the exact
stellar contract deploycommand to run
- Added
license,repository,homepage,documentationoptional fields toTemplateEntry(serde-defaulted for backward compatibility) - Exposed all four as
--license,--repository,--homepage,--documentationflags onstarforge template publish - Displayed in
template showandtemplate publishoutput - Added
validate_template_structure_with_constraints()— the full audit entry-point used bypublish_template_versioned:- Requires
README.md(actionable error) - Validates
version,cli_version_min,cli_version_maxas valid semver - Rejects
cli_version_min > cli_version_max - Error messages name the exact field and explain the fix
- Requires
make_valid_template()test helper now createsREADME.md- New tests: missing README, bad version semver, bad constraint semver, min > max
- Added
version: Option<String>andinstalled_at: Option<String>toInstalledPlugin(serde-defaulted) install_plugin()now recordsinstalled_attimestamp (ISO-8601 UTC)- Added
Update { name: Option<String>, yes: bool }variant toPluginCommands update()function:- For crates.io sources: runs
cargo install --force - For other trusted sources: compares library mtime to
installed_atand refreshes registry if newer - Local-path plugins: reported as unupdatable with guidance
- Unknown sources: blocked unless
--yesis passed - Reports updated / skipped / failed counts
- For crates.io sources: runs
-
cargo buildsucceeds without warnings -
cargo test— all tests pass (no regressions) -
starforge deploy --wasm <file> --dry-run— prints plan, no transaction submitted -
starforge template publish <path> --name t --description d --author a --license MIT --repository https://github.com/org/repo— stores and displays metadata -
starforge template show <name>— displays license/repository/homepage/docs -
starforge template publish <path> --name t --description d --author awith no README.md — fails with actionable error -
starforge plugin update— checks all plugins and reports status -
starforge plugin update <name>— updates single named plugin
closes #240 closes #245 closes #248 closes #251
🤖 Generated with Claude Code