Deterministic repository change-policy evaluation and review planning for MoonBit
Dependencies
moon update
moon check --target wasm-gc --deny-warn
moon test --target wasm-gc
moon run cmd/moonchange --target js -- demomoon run cmd/moonchange --target js -- audit \
--policy examples/policy.mcp \
--manifest examples/manifest.mcm \
--format jsonmoon run cmd/moonchange --target js -- audit-diff \
--policy examples/policy.mcp \
--evidence examples/evidence.mce \
--diff examples/change.diffmoon run cmd/moonchange --target js -- explain \
--policy examples/policy.mcp --path src/security/auth.mbt
moon run cmd/moonchange --target js -- lint --policy examples/policy.mcpmoon run cmd/moonchange --target js -- compare \
--before examples/policy-before.mcp \
--after examples/policy.mcp \
--paths examples/paths.txtMOONCHANGE_POLICY 1
DEFAULT approvals=1 max_total=500 require_owned=yes
OWNER **/* @maintainers
OWNER src/security/** @security,@maintainers
RULE source src/** approvals=1 checks=unit labels=code forbid=delete max_lines=200 release_note=no binary=denyMOONCHANGE 1
ID PR-42
ACTOR @alice
APPROVAL @maintainers
CHECK unit passed
LABEL code
RELEASE_NOTE no
CHANGE modify src/main.mbt 8 2 textlet policy = @moonchange.parse_policy(policy_text).unwrap()
let changes = @moonchange.parse_manifest(manifest_text).unwrap()
let report = @moonchange.evaluate(policy, changes)
inspect(report.status(), content="Passed")moon fmt --check
moon check --target wasm-gc --deny-warn
moon check --target wasm --deny-warn
moon check --target js --deny-warn
moon check --target native --deny-warn
moon test --target wasm-gc
moon test --target wasm
moon test --target js
moon test --target nativemoon add ZJH-666-ZJH/moonchange@0.2.1pub struct AuditReport {
change_id : String
status : GateStatus
total_lines : Int
decisions : Array[PathDecision]
findings : Array[Finding]
plan : ReviewPlan
} derive(Eq, Debug)pub struct Change {
kind : ChangeKind
old_path : String?
new_path : String?
additions : Int
deletions : Int
binary : Bool
} derive(Eq, Debug)fn Change::new(kind : ChangeKind, old_path : String?, new_path : String?, additions : Int, deletions : Int, binary? : Bool) -> Result[Change, Diagnostic]fn Diagnostic::new(code : String, location : String, message : String, expected : String, actual : String) -> Diagnosticpub struct Finding {
level : FindingLevel
code : String
path : String
message : String
} derive(Eq, Debug)fn GovernanceRule::new(name : String, pattern : PathGlob, approvals? : Int, checks? : Array[String], labels? : Array[String], forbidden? : Array[ChangeKind], max_lines? : Int?, release_note? : Bool, allow_binary? : Bool) -> Result[GovernanceRule, Diagnostic]pub struct PathPolicyDelta {
path : String
before : PathDecision
after : PathDecision
owners : StringDelta
rules : StringDelta
checks : StringDelta
labels : StringDelta
forbidden : StringDelta
} derive(Eq, Debug)fn Policy::new(default_approvals? : Int, max_total_lines? : Int?, require_owned? : Bool, owner_rules? : Array[OwnerRule], rules? : Array[GovernanceRule]) -> Result[Policy, Diagnostic]pub struct ReviewPlan {
required_owners : Array[String]
approved_owners : Array[String]
unapproved_owners : Array[String]
required_checks : Array[String]
passed_checks : Array[String]
unresolved_checks : Array[String]
required_labels : Array[String]
present_labels : Array[String]
missing_labels : Array[String]
touched_rules : Array[String]
maximum_path_approvals : Int
release_note_required : Bool
release_note_present : Bool
} derive(Eq, Debug)fn change_set_from_unified_diff(id : String, evidence : Evidence, source : String) -> Result[ChangeSet, Diagnostic]fn compare_policies(before : Policy, after : Policy, paths : Array[String]) -> Result[PolicyComparison, Diagnostic]Install
Download zipDeterministic repository change-policy evaluation and review planning for MoonBit
Dependencies