moonbit-music-license

    MoonBit Music License & Sampling Lineage Compliance Metadata Tool

    music
    license
    spdx
    copyright
    lineage
    compliance
    Download zip
    Author
    Version
    0.2.1
    License
    Apache-2.0
    Last updated
    last month
    Downloads
    11

    #moonbit-music-license

    CI MoonBit License

    一个用 MoonBit 编写的音乐版权元数据、采样谱系与发行前合规审计工具。它把 JSON manifest 转换为类型化领域模型,校验曲目与贡献者资料,检查采样关系图,并输出适合人工审阅和 CI 集成的报告。

    项目面向“发行前清单审计”场景:它不读取音频文件、不替代律师意见,也不提供网络版权数据库同步。输入应由上游分发系统或人工准备为结构化 manifest。

    #功能概览

    • SPDX 许可证标识、表达式和上下游兼容性检查。
    • ISRC / ISWC 标准码校验、曲目元数据边界检查、贡献者角色与版税拆分审计。
    • 采样谱系 DAG:缺失引用、重复边、自环、环、采样区间、变速比和清权凭证检查。
    • 默认与 strict 两种审计策略;strict 会把发行前必须处理的警告升级为错误。
    • JSON 审计报告与 SARIF 2.1.0 输出,可直接接入 CI 或代码扫描工具。
    • NOTICE、SPDX JSON/Tag-Value、HTML、Graphviz DOT、Mermaid、CSV 和 DDEX XML 导出。
    • 原生 core/bench 基准,覆盖 manifest 解析、谱系校验、策略审计和报告导出。

    #数据流

    JSON manifest │ ▼ manifest ──► metadata / lineage validation ──► checker policy audit │ ├── text / HTML / CSV / XML ├── audit JSON └── SARIF 2.1.0

    #包结构

    manifest/ JSON manifest 类型、解析、字段校验和领域图构建 spdx/ SPDX 数据、表达式解析、风险和兼容性规则 metadata/ 曲目、贡献者、标准码、音频指纹、调性和版税拆分 lineage/ 采样关系图、拓扑算法、清权状态、指标和完整性校验 checker/ 审计规则、策略、诊断、汇总和稳定排序 exporter/ 人类可读与机器可读报告导出 cli/ 命令解析、演示目录和命令分发 cmd/main/ 可执行 CLI 入口 benchmarks/ native 基准及已保存的本地测量结果 scripts/ 可复现的 MoonBit 源码规模统计脚本 .github/ GitHub Actions 多平台 CI

    #环境与安装

    需要 MoonBit stable 工具链 0.10.9 或兼容的更新版本。安装方式请以 MoonBit 官方文档 为准;安装后确认:

    moon version --all moon update

    #构建、测试与 CLI

    moon check moon test moon check --target all --deny-warn moon test --target all --deny-warn moon fmt --check moon info

    常用命令:

    moon run cmd/main -- audit moon run cmd/main -- audit --format json moon run cmd/main -- audit --format sarif --strict moon run cmd/main -- validate moon run cmd/main -- manifest-example moon run cmd/main -- audit --format html > dashboard.html moon run cmd/main -- notice > NOTICE.md moon run cmd/main -- spdx > spdx.json moon run cmd/main -- graph --format dot > lineage.dot moon run cmd/main -- validate-isrc US-S1Z-23-00001 moon run cmd/main -- key-match 8A moon run cmd/main -- analytics

    manifest-example 输出一个确定性的、字段完整的 JSON 示例,适合快速检查解析器或作为集成测试输入。CLI 默认使用内置演示目录,其中包含不完整的版权字段和待清权采样关系,用于展示诊断与 strict 策略升级;生产集成可以直接依赖 manifest、checker 和 exporter 包。

    #Manifest 输入

    顶层字段包括:

    { "schema_version": 1, "project_id": "catalog-2026", "project_title": "Example Release", "commercial_release": true, "target_license": "MIT", "tracks": [], "samples": [] }

    曲目字段覆盖标题、艺术家、时长、BPM、调性、音频指纹、ISRC、ISWC、发行年份、类型、标签、许可证、商业属性、贡献者和拆分表。采样字段覆盖父子曲目、采样区间、移调、变速、采样类型、清权状态、协议引用和许可证覆盖。未知字段值、重复 ID、缺失引用和非法数值会产生带稳定字段路径的诊断。

    默认元数据边界为 1–86,400,000 ms、20–300 BPM 和 1900–2100 年;版税拆分允许 0.01 个百分点的舍入误差。非商业曲目的 ISRC/ISWC 可以保持为空,strict 策略可要求完整发行资料。

    #审计输出

    audit --format json 输出包含 schema、时间戳、汇总、谱系指标和稳定排序的 issue 数组。audit --format sarif 输出 SARIF 2.1.0,结果包含规则 ID、级别、消息和曲目位置,可被 GitHub Code Scanning 等工具消费。

    两种策略均保持确定性排序;脚本或 CI 可以按 severity、category、track_id 和 code 进行二次聚合。项目中的导出器只负责报告生成,不会修改源 manifest。

    #基准与规模

    原生基准:

    moon run --target native benchmarks

    一次实际本地运行(moonc 0.10.9, native, runs=10)的 benchmarks 中位数如下,单位为微秒;完整原始 JSON 保存在 benchmarks/results-native-2026-08-24.json。这些数值用于描述该次运行,不是跨机器的性能承诺。

    操作中位数(µs)批量大小
    manifest_parse996.78131313131399
    lineage_validate12.7202933531377668079
    policy_audit73.755217391304341380
    report_export284.28841807909606354

    用 PowerShell 重新统计源码规模:

    powershell -ExecutionPolicy Bypass -File scripts/count-moonbit-lines.ps1

    统计脚本只计算扩展名严格为 .mbt 的源码,排除 _build、.mooncakes、.git,并把 *_test.mbt 单独报告。当前结果为 52 个生产 .mbt 文件、5,782 行总行数、5,389 行非空代码;另有 10 个测试文件、1,111 行总行数、996 行非空代码。

    #CI

    .github/workflows/test.yml 在 Ubuntu、macOS 和 Windows 上执行:

    • moon version --all、moon update;
    • moon check --target all --deny-warn;
    • moon test --target all --deny-warn;
    • moon fmt 与 moon info 的工作区 diff 检查。

    工作流只需要 contents: read,关闭 checkout 持久凭据,不包含发布或推送步骤。

    #许可证

    本项目采用 Apache License 2.0。