Repository navigation
The Org plan's policy block was only read by the policy command. analyze, check, precommit and the GitHub Action ignored it, so a required rule the config turned off stayed off, the severity floor never held, and a blocked pattern failed nothing. They apply it now, with a license key, and the key check itself is fixed.
Fixed
analyze,check,precommitand the Action apply the config'spolicyblock when they have an Org license key (--license-key,MIGRATIONPILOT_LICENSE_KEY, or the Action'slicense-keyinput). Required rules run even whenrules:, a preset,--excludeor theexcludeinput, or a disable comment turns them off, and the run prints a note for each one it keeps on. The severity floor stops a rule being set below it. A statement that matches a blocked pattern fails the run with exit code 2, or fails the check, whatever--fail-onsays; the Action annotates the line and lists it at the top of the PR comment and in the job summary. Review patterns are reported and fail nothing.watch,plan,plan-fix,simulateandmutation-testkeep the required rules on and hold the floor too- A disable comment can't switch off a required rule. It did, even in the
policycommand, which didn't report it either.policynow lists each such comment - The floor doesn't push a rule above its own severity. Under
severityFloor: critical, a rule that ships as a warning stays a warning; the floor only stops a config from lowering a rule - Patterns match statements, not the raw file. They skip comments, ignore case and whitespace, and match whole words, so
DROP TABLEin a comment no longer counts andDROP TABLEno longer matchesDROP TABLESPACE - The Action writes the audit log, one
analysis_completerecord per file and anaction_completerecord per run, undercommand: "action"
Added
- An Org tier. The Org checkout issues
MP-v2-ORG-…keys anddoctorreportsorg tier. A Pro, Team or Enterprise key signed with the new key turns on the same features - The JSON report carries a
policyfield when the policy applies:blockedandreview, each a list of{ line, pattern }, andnotes.report-v1.jsondescribes it. Audit records carrymetadata.policyBlocked
Changed
- The policy block and the audit log need an Org license key. Without one, every run says it isn't applying them (on stderr, or as an Action warning) and runs every rule as before. In 1.6.3 the audit log ran with no key at all. The
policycommand exits 1 without a key - A check that passed on 1.6.3 can fail on 1.6.4 once the key is set: a required rule the config turned off fires again, a downgraded rule goes back to the floor, and a blocked pattern fails the run
--no-configskips the config file, and the policy with it. Enforce the policy from CI, where the config is reviewed like code. The MCP server doesn't read the config
Security
- License keys are checked against a new signing key. The private half of the key pair 1.6.3 and earlier trusted was in the repository's test files, so anyone could sign a key those versions accepted. 1.6.4 trusts only the new key, and keys now look like
MP-v2-ORG-YYYYMMDD-…. A key in the old format is refused with a note to write to hello@migrationpilot.dev for a new one