Skip to content

Release v4.207.0

Choose a tag to compare

@github-actions github-actions released this 28 Oct 14:09
882179c

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-001 for malformed input or control, bidi, private-use or line-separator characters, and STAGE-HEADER-002 for a line the file's comment syntax cannot carry, such as a \u sequence 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 as still refuse with STAGE-ESM-024. (part of #343)
  • Experimental stage-target/v1 kit 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 own STAGE-KIT code; 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-header input and FileHeaderInput keep working unchanged, and a header refusal in a caller profile now reports STAGE-HEADER-001. (#861)
  • Generated required-text validation now uses FluentValidation's built-in NotEmpty() rule, so its error code is NotEmptyValidator. (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)