Stack-aware command templates with per-stack variant resolution. Local-edit protection via 3-hash manifest. (Retroactive entry: not previously logged in CHANGELOG; corresponds to npm-published version 1.3.0 from 2026-04-26.)
Added
- Stack-aware variant resolution in
install-commands—pickVariant(baseName, sourceDir, framework)returns a discriminated{hit, miss, fallback}union. Priority order: primary language → languages-declaration order → top-level passthrough fallback (typescript/javascript/python/swift/rust/go) → unsuffixed default. Variant filenames are filtered at the top level only — subdirectory contents recurse as-is. - Local-edit protection via SHA-256 manifest — manifest at
<claudeDir>/.massu/install-manifest.jsonwith 3-hash compare (source / existing / last-installed) and atomic tempfile+rename writes. NewSyncStats.keptcounter reports preserved edits. First-install heuristic preserves any pre-existing differing file and seeds the manifest with the existing hash. massu show-template <command> [--variant <stack>]subcommand — prints the resolved variant content to stdout for diff-against-upstream workflows. Used in the kept-your-version notice.- 4 seed variant templates —
massu-scaffold-router.python.md(FastAPI),massu-scaffold-page.swift.md(SwiftUI),massu-deploy.python.md(launchd/systemd/pm2/docker),massu-scaffold-page.mdregenerated as framework-agnostic with embedded multi-stack examples. Pluscommands/README.mddocumenting the variant convention. - +21 tests — VARIANT-01..10, MANIFEST-01..08, SHOW-01..03. Total suite: 1394 passing (was 1373 on 1.2.1).
Changed
config.tsspreads...fwinto the materialized framework sozod.passthrough()blocks (framework.swift,framework.python, …) flow through to consumers. Without this, the iteration-3 passthrough-fallback rule silently never fires in production despite green unit tests.