safe-chains v0.218.0
Released 2026-07-30 · View on GitHub
- feat *(cst)* Parse the last three POSIX shell grammar constructs
- feat *(engine)* Let a researched command bound what its substitution names
- feat *(cst)* Render >| and >> as the operator that was typed
- feat *(engine)* Bound a loop over a declared substitution
- feat *(cst)* Parse the both-streams redirects and the |& pipe
- feat *(registry)* Tag the config-is-code class, and gate marp
- fix *(perl)* Gate file operands by locus, and allow -i in the worktree
- fix *(engine)* Gate a bounded substitution in the path-gate too
- fix *(policy)* Treat a leading
~as a path - fix *(tilt)* Gate the template positional as an executor
- fix *(karma)* Gate config positionals, and guard the pattern structurally
- fix *(registry)* Keep
[command.output]out of repo-level custom TOML - fix *(targets)* Abstain when the envelope names a non-shell tool
- fix *(agy)* Self-filter on toolCall.name
- fix *(targets)* Don't panic when a settings file has a wrong-typed key
- fix *(registry)* Skip an invalid custom config instead of aborting
- fix *(pathctx)* An unresolvable
cdleaves the cwd UNKNOWN, not unchanged - fix *(cst)* Track shell state a compound changes, not just a bare statement
- fix *(cst)* Model word splitting on unquoted expansions
- fix *(cst)* Parse a heredoc body inside $( ) as data, not code
- fix *(cst)* Fence a doc example so it is not compiled as a doctest
- fix *(hook)* Name only real operands in the overreach nudge
- fix *(explain)* Stop a command from forging a line of our own output
- fix *(hook)* Abstain on a blank command instead of approving it
- fix *(targets)* Don't panic or clobber on a wrong-typed key in cursor/codex setup
- fix *(suggest)* Don't let --suggest mislead the trust decision it asks for
- fix *(registry)* Gate the wrapper flags whose value is a program
- fix *(registry)* Gate executor flags outside the wrapper block too
- fix *(registry)* Gate config flags on tools whose config file is code
- fix *(envvars)* Pair executor flags with their env twins, and tag the pairing
- fix *(tests)* Calibrate the termination budget instead of hardcoding 1.5s
- fix *(tests)* Floor the termination budget at 10s, not 1.5s
- other *(repo)* Drop two decision records misfiled as TODO items
- other *(todo)* Record the ANSI-C quoting over-deny
- other *(todo)* Measure the gate surface, and record two clean sweeps
- other *(engine)* Assert a substitution never beats a path it could produce
- other *(engine)* Extend abstraction soundness to every path-approximating site
- other *(targets)* Assert each harness's decision FIELD, not just the value
- other *(cst)* Hold the --explain renderer to the no-panic contract