Release v3.3.1
Summary
Two defects in how the ai and init commands treat an installed corpus, both silent: one installs a profile's skills without its rules, the other edits the corpus itself. Fixes #154 and #155.
Fixed
cratis ai installandupdateresolve rules against the composed profile closure instead of the literal configured list, so a profile that reaches an application profile throughcomposesgets that profile's rules and not just its skills —cratis/full/csharpwas installing twelve application profiles' skills while droppingvertical-slices.md,reactors.md,react.mdand the rest of the frontend set (#154).cratis initno longer writes through the symlinkscratis ai installcreates.File.Existsfollows a link, so appending the@CHRONICLE.mdreference or writing the generated skill landed inside.cratis/ai— reported afterwards as corpus drift thatcratis ai updaterefuses to replace without--force. Each destination is now resolved, following a link on the file or any ancestor directory, and reported as managed with a pointer tocratis ai update(#155).