You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(runtime)!: action params are enforced by default, and the opt-in is gone (#3438)
ADR-0104 D2 landed warn-first behind OS_ACTION_PARAMS_STRICT_ENABLED. The
2026-07-30 addendum decided that window closes in 17.0 rather than 18.0, so
this executes it:
- actionParamsStrict() becomes laxActionParams(): enforcement is the default
and OS_ALLOW_LAX_ACTION_PARAMS=1 is the only knob — spelled OS_ALLOW_* per
PD #9 and ADR-0110 D6, which this change also removes the sole cited
exception from. The opt-in name never reached `latest` (RC-only), so it is
deleted outright rather than deprecated for a release.
- The escape-hatch path still warns once per action, so opting out tolerates
the drift instead of hiding it again.
- Dogfood duals are inverted: the DEFAULT path is now what the gate proves,
and the hatch — the branch nobody sets — is what gets a test so it cannot
rot unnoticed.
Also corrects three docs the flip falsifies, plus two the earlier #3681 media
work had already left self-contradictory in the v17 notes (the section said
hard rejection arrives only via OS_DATA_VALUE_SHAPE_STRICT_ENABLED two
paragraphs before saying media enforces per verified deployment; the upgrade
checklist prescribed the env var as the way to get there, which would opt in
every value class including the ones with no migration behind them).
Verified: runtime 951, spec 7147, dogfood 425 (+3 skipped) all green; the D2
contract dogfood passes with the inverted duals; all ten spec artifact gates
pass. Swept examples and packages for callers posting param bags — the todo
MCP e2e invokes only param-less actions, showcase tests call handlers
directly.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016zgA8CQMJeJbFEjnbib1Uv
0 commit comments