Competition note: the GitHub repository is the primary open-source release
link for the 2026 MoonBit domestic open-source ecosystem contest. The GitLink
repository is kept as the contest platform mirror.
What It Does
MoonModGuard parses moon.mod and moon.pkg text, extracts module metadata and
package imports, builds an in-memory project model, evaluates supply-chain
policy risks, and renders a deterministic Markdown audit report.
The first version is deliberately dependency-free and accepts explicit strings
or snapshots instead of scanning the filesystem. This keeps the core portable
and testable while leaving room for later CI and workspace integrations.
Installation
moon add Noverberrain/moonmodguard
Why This Exists
MoonBit projects rely on compact manifest files for package identity,
dependencies, metadata, and publication readiness. A small auditor can help
maintainers check whether a package is ready to publish, whether metadata is
complete, and whether dependency declarations match a local policy.
MoonModGuard targets software analysis and engineering quality workflows:
# Audit a moon.mod file, output Markdown report
moon run cmd/main -- moon.mod
# Output JSON instead of Markdown
moon run cmd/main -- moon.mod --json
# Use EnhancedPolicy with trust grading
moon run cmd/main -- moon.mod --enhanced
EnhancedPolicy with Trust Grading
let manifest = match @moonmodguard.parse_mod(mod_text) {
Ok(m) => m
Err(_) => abort("parse error")
}
let project = @moonmodguard.project_from(manifest, [])
let report = @moonmodguard.evaluate_enhanced(project, @moonmodguard.EnhancedPolicy::default())
println(@moonmodguard.render_full_report(report))
EnhancedPolicy adds CSP-style trust grading (Trusted / Allowed / Blocked), max-dependency limits, and version validation on top of the base policy checks.
Trust Policy Builder
let policy = @moonmodguard.TrustPolicy::new()
.trust("moonbitlang/")
.allow("github.com/")
.block("bad-domain/")
.default_level(@moonmodguard.Blocked)
let level = policy.check("moonbitlang/x")
// level is Trusted
The parser now supports @version in dependency declarations:
import { "moonbitlang/x@0.4.46" @x }
Use check_version_consistency to validate declared versions, and
check_missing_versioned_dep to match module-level versioned deps against
package-level imports.
JSON Output
let json = @moonmodguard.render_json(report)
// All string values are properly escaped (quotes, backslashes, newlines, tabs)
SARIF Output (GitHub Code Scanning)
let sarif = @moonmodguard.render_sarif(report, "MoonModGuard")
// Valid SARIF v2.1.0 JSON for GitHub Code Scanning upload
Workspace Scanner
# Recursively audit all packages under a directory
moon run cmd/main -- --workspace .
let pkgs = @moonmodguard.discover_packages(".") raise
let summary = @moonmodguard.audit_workspace(".") raise
println(@moonmodguard.render_batch_summary(summary))
GitHub Annotations
# Output as GitHub Actions workflow commands
moon run cmd/main -- moon.mod --annotations
mooncake.yaml Consistency
let mooncake = match @moonmodguard.parse_mooncake(yaml_text) {
Ok(m) => m
Err(_) => abort("parse error")
}
let diags = @moonmodguard.check_mooncake_consistency(mod_manifest, mooncake)
// Reports name/version/license/repository/description/keywords mismatches
Full Audit & Dependency Analysis
full_audit runs the base policy plus every dependency check in one report:
// Same source declared with two versions -> "version-conflict"
let conflicts = @moonmodguard.check_version_conflicts(manifest, packages)
// Module imports its own name -> "self-dependency"
let self = @moonmodguard.check_self_dependency(manifest)
Dependency struct now includes version : String? for versioned dependency declarations.
Design Notes
The parser handles the common MoonBit manifest shape used by package metadata
and import declarations. It is not a full MoonBit grammar parser. That boundary
is intentional: the first release focuses on release readiness and policy audit
checks that can be validated with stable tests.
The default policy accepts Apache-2.0, MIT, and MulanPSL-2.0, and treats
moonbitlang/ and wyc060514/ as trusted dependency prefixes. Callers can pass
a custom Policy value for stricter project rules.
MoonModGuard
MoonModGuard is a MoonBit project manifest and supply-chain policy auditor.
wyc060514What It Does
MoonModGuard parses
moon.modandmoon.pkgtext, extracts module metadata and package imports, builds an in-memory project model, evaluates supply-chain policy risks, and renders a deterministic Markdown audit report.The first version is deliberately dependency-free and accepts explicit strings or snapshots instead of scanning the filesystem. This keeps the core portable and testable while leaving room for later CI and workspace integrations.
Installation
Why This Exists
MoonBit projects rely on compact manifest files for package identity, dependencies, metadata, and publication readiness. A small auditor can help maintainers check whether a package is ready to publish, whether metadata is complete, and whether dependency declarations match a local policy.
MoonModGuard targets software analysis and engineering quality workflows:
Features
moon.mod:name,version,license,readme,repository,description.keywords = [ "audit", "moonbit" ].moon.modandmoon.pkg.Quick Start
Example CLI output:
API Example
Public API:
parse_mod(input : String) -> Result[ModuleManifest, GuardError]parse_pkg(input : String) -> Result[PackageManifest, GuardError]project_from(manifest : ModuleManifest, packages : Array[PackageManifest]) -> ProjectModelscan_project(snapshot : ProjectSnapshot) -> AuditReportdefault_policy() -> Policyevaluate_policy(project : ProjectModel, policy : Policy) -> AuditReportrender_markdown(report : AuditReport) -> Stringformat_error(err : GuardError) -> StringConsumer Guide
CLI Usage
EnhancedPolicy with Trust Grading
EnhancedPolicyadds CSP-style trust grading (Trusted / Allowed / Blocked), max-dependency limits, and version validation on top of the base policy checks.Trust Policy Builder
Batch Audit
Versioned Dependencies
The parser now supports
@versionin dependency declarations:Use
check_version_consistencyto validate declared versions, andcheck_missing_versioned_depto match module-level versioned deps against package-level imports.JSON Output
SARIF Output (GitHub Code Scanning)
Workspace Scanner
GitHub Annotations
mooncake.yaml Consistency
Full Audit & Dependency Analysis
full_auditruns the base policy plus every dependency check in one report:Version conflict and self-dependency detection:
Repository URL validation:
Public API additions:
check_missing_versioned_dep(manifest, packages) -> Array[Diagnostic]check_version_consistency(manifest) -> Array[Diagnostic]check_version_conflicts(manifest, packages) -> Array[Diagnostic]check_self_dependency(manifest) -> Array[Diagnostic]full_audit(manifest, packages) -> AuditReportis_valid_repository_url(repository) -> Boolevaluate_enhanced(project, policy) -> AuditReportrender_json(report) -> Stringrender_full_report(report) -> Stringrender_summary(report) -> Stringbatch_audit(snapshots) -> AuditSummaryrender_batch_summary(summary) -> StringTrustPolicy::new() / .trust() / .allow() / .block() / .default_level()EnhancedPolicy::default()Dependency struct now includes
version : String?for versioned dependency declarations.Design Notes
The parser handles the common MoonBit manifest shape used by package metadata and import declarations. It is not a full MoonBit grammar parser. That boundary is intentional: the first release focuses on release readiness and policy audit checks that can be validated with stable tests.
The default policy accepts
Apache-2.0,MIT, andMulanPSL-2.0, and treatsmoonbitlang/andwyc060514/as trusted dependency prefixes. Callers can pass a customPolicyvalue for stricter project rules.Competition Materials
docs/competition/proposal.mddocs/competition/submission-guide.mddocs/competition/acceptance-checklist.mddocs/competition/MoonModGuard项目申报书.pdfLicense
Apache-2.0