Repository navigation
Release v4.207.0
Summary
Stage can now stamp every generated code file with a configured header, renders application-trigger reactions that invoke commands, and relies on project-wide read protection in generated commands. It also adds an experimental kit manifest and loader.
Added
- Render targets can stamp every generated code file with a configured header through a new core profile input,
stage:file-header, applied after any planner has produced its final content. Comment syntax comes from a replaceable per-extension table, non-code files are left untouched, and with no header configured the output is byte-for-byte unchanged. (#861) - A header that cannot be written safely refuses the plan with a stable diagnostic:
STAGE-HEADER-001for malformed input or control, bidi, private-use or line-separator characters, andSTAGE-HEADER-002for a line the file's comment syntax cannot carry, such as a\usequence in a Java file. (#861) - The Cratis target now renders application-trigger reactions that invoke commands: each command runs through Arc's occurrence command executor under its own effect receipt, as system with the declared roles; an unhandled refusal fails the occurrence. Refusal branches and authorized commands without
runs asstill refuse withSTAGE-ESM-024. (part of #343) - Experimental
stage-target/v1kit manifest and kit loader: a strict manifest that rejects unknown fields, with a generated JSON schema, exact language-pack version binding and contract version checks; loading from memory or a directory that rejects path traversal, rooted paths, symbolic links, special files, case-insensitive duplicates and non-UTF-8 templates, each with its ownSTAGE-KITcode; and a deterministic kit archive whose SHA-256 is the kit digest. (#794)
Changed
- The Cratis render target now uses the core header. The legacy
cratis-render:file-headerinput andFileHeaderInputkeep working unchanged, and a header refusal in a caller profile now reportsSTAGE-HEADER-001. (#861) - Generated required-text validation now uses FluentValidation's built-in
NotEmpty()rule, so its error code isNotEmptyValidator. (part of #497) - Generated commands rely on project-wide read protection instead of repeating per-command attributes; protected-read admission and explicit hand-written opt-outs are preserved. (#660) (#784)