Release v3.6.0
Summary
cratis new becomes concept- and metadata-driven: language derivatives collapse into one concept template, bare cratis new runs an interactive wizard (template → language → database), and listing moves to an explicit cratis new list subcommand.
Added
- The creation wizard behind bare
cratis new: which template (defaulting to thecratisconcept), then which language, then which database — each question offering only what the chosen template supports, and single-choice questions skipped because their choice is already made; non-interactive terminals get guidance instead of a hang (#150) cratis new list— an explicit listing of the concept templates with their supported languages and databases, replacing the old bare-invocation listing; language derivatives (the C#, Kotlin, and Javacratis) collapse into a single entry, driven by the packages' own metadata: a sharedgroupIdentitygroups the derivatives,tags.languageselects the member, and theDatabaseparameter's choices declare the databases (#150)- Concept resolution for explicit invocation too:
cratis new cratis --language kotlinresolves the Kotlin derivative inside the concept through the language map rather than by template name (#150)
Changed
- The catalogue pins
Cratis.Templates1.5.0 and its lockstep Kotlin and Java packages, whose derivatives now share thecratisshort name exactly like the SDK's own language families (#150)
Fixed
- A dashed name (the wizard's default from the folder name) made the
sourceNameidentity andsafe_nameforms collide on one token and fail the scaffold; the documented upstream behavior is tolerance, and this engine now defines it deterministically — file paths keep the identity form, content takes the last non-identity form (My-App.csprojbesideRootNamespace My_App), matching the upstream engine's observable output (#150)