A MoonBit license metadata auditor with SPDX expression checks.
moon add clbbbb/moonbit-license-audit@0.1.1moon check
moon test
moon run cmd/mainlet expr = "MIT OR Apache-2.0"
println(normalize(expr))
println(validation_report(expr))
println(policy_report(expr, permissive_policy()))
println(policy_option_report(expr, permissive_policy()))
println(profile_table(expr))
println(scan_report("main.mbt", "// SPDX-License-Identifier: MIT\n"))
println(copyright_report("main.mbt", "// SPDX-FileCopyrightText: 2026 Example Contributors\n"))let moon_mod = "name = \"demo/pkg\"\nlicense = \"MIT\"\nrepository = \"https://example.invalid/demo/pkg\"\nreadme = \"README.mbt.md\"\n"
let readme = "# demo\n\nLicense: MIT\n"
let paths = ["src/a.mbt", "src/b.mbt"]
let sources = [
"// SPDX-License-Identifier: MIT\n",
"// SPDX-License-Identifier: Apache-2.0\n",
]
let audit = project_audit(moon_mod, readme, paths, sources, permissive_policy())
println(project_audit_report(audit))
println(remediation_report(audit))let manifest = "name = \"demo-lib\"\nlicense = \"MIT\"\nsource = \"https://example.invalid/demo-lib\"\nnotice = true\n"
println(join_lines(third_party_manifest_errors(manifest)))pub struct AuditEvidence {
project : ProjectAudit
third_party_errors : Array[String]
baseline_new : Array[AuditFinding]
generated_files : Array[String]
} derive(Eq, Debug)pub struct WorkspaceAudit {
project : ProjectAudit
readme : ReadmeAudit
inventory : Array[LicenseUse]
ignored_paths : Array[String]
} derive(Eq, Debug)fn add_third_party_if_complete(rows : Array[ThirdPartyPackage], name : String, license : String, source : String, notice : Bool) -> Unitfn audit_evidence(project : ProjectAudit, packages : Array[ThirdPartyPackage], current_findings : Array[AuditFinding], baseline : Array[AuditFinding], policy : Policy) -> AuditEvidencefn collect_source_alignment(results : Array[SourceLicense], package_license : String, warnings : Array[String]) -> Unitfn collect_source_findings(results : Array[SourceLicense], warnings : Array[String], policy_items : Array[String], policy : Policy) -> Unitfn compatibility_cell(left : String, right : String, compatible : Bool, reason : String) -> CompatibilityCellfn evidence_for_inputs(moon_mod : String, readme : String, paths : Array[String], sources : Array[String], packages_text : String, baseline_text : String, policy : Policy) -> AuditEvidencefn extract_quoted_value_line(line : String, field : String) -> String?fn findings_from_sources(paths : Array[String], sources : Array[String], policy : Policy) -> Array[AuditFinding]fn license_use(path : String, expression : String, licenses : Array[String], valid : Bool) -> LicenseUsefn new_findings(current : Array[AuditFinding], baseline : Array[AuditFinding]) -> Array[AuditFinding]fn project_audit(moon_mod : String, readme : String, paths : Array[String], sources : Array[String], policy : Policy) -> ProjectAuditfn readme_matches_package_license(readme : String, package_license : String) -> Boolfn readme_mentions_license_safe(readme : String, expr : String) -> Boolfn release_checklist(moon_mod : String, readme : String, paths : Array[String], sources : Array[String], policy : Policy) -> Array[ReleaseItem]fn resolved_findings(current : Array[AuditFinding], baseline : Array[AuditFinding]) -> Array[AuditFinding]fn source_copyright(path : String, entries : Array[String], found : Bool, valid : Bool, message : String) -> SourceCopyrightfn source_license(path : String, expression : String, found : Bool, valid : Bool, message : String) -> SourceLicensefn spdx_tag_value_in_comment(line : String, marker : String) -> String?fn third_party_by_license(packages : Array[ThirdPartyPackage], license : String) -> Array[ThirdPartyPackage]fn third_party_package(name : String, license : String, source : String, notice : Bool) -> ThirdPartyPackagefn third_party_record_errors(line : Int, name : String, license : String, source : String) -> Array[String]fn unchanged_findings(current : Array[AuditFinding], baseline : Array[AuditFinding]) -> Array[AuditFinding]fn workspace_audit(moon_mod : String, readme : String, paths : Array[String], sources : Array[String], policy : Policy) -> WorkspaceAuditA MoonBit license metadata auditor with SPDX expression checks.