Files
agent-radar/schema/license-tiers.yaml
T
gitea-publish e5cdb1801e track: 新增 OpenWork / Orca / Maka 三项目,样本达到 4 个
样本
- openwork (different-ai/openwork) 23.2k★ 能力分发层,DCO + evals + worlds
- orca (stablyai/orca) 58.8k★ 并行编排外壳,5000 issue 实为团队自开任务板
- maka (apache/maka) 4.4k★ 执行记录层,Apache 孵化但无正式 release

档案
- 三份五维档案填完,risk.claim_vs_reality 均已核实到证据
- ipollowork 象限坐标从占位 9/9/9/9 校准为 8/7/7/7(与新样本同一标尺)

文章
- 新增横评文《四个 Agent 工作台的路线分野:把「多引擎中立」拆开看》(emlog id=99)
- 总纲文回填四项目矩阵 + 双视图象限图 (emlog id=98)

镜像
- gitinbox/maka 已推送(public,source-only 快照 12 MB)
- openwork(291MB) / orca(671MB) 受 50KB/s 带宽约束,档案标 mode: pending

规则
- license-tiers.yaml 新增「目录切分许可」降级流程(OpenWork 判例:
  排除 ee/ 后为纯 MIT → public,完整镜像 → private)
- registry.yaml openwork 可见性改 public + mirror_excludes: ["ee/"]

脚本修复
- _common.py 新增 upsert_block:手工整块覆盖 ecosystem 删掉 metrics 时能自愈
- mirror_sync.sh:SOURCE_ONLY 未初始化(set -u 下偶发炸);
  浅仓推送被服务端拒绝 → 自动 --unshallow,失败降级快照;
  量体积前先 repack(此前新 commit 全是 loose object,恒打印 0 MB)
- build_matrix.py:成熟度长文本移出表格(新增 maturity_level 短标签);
  象限图标签靠右时翻转到左侧防溢出;SVG 加 max-width 防窄屏溢出;
  文章索引改为自动生成(原先手抄,横评文发了索引里却没有)
- publish_emlog.py:ID 回写按「有无同名档案」分流,
  00-* 跨项目文章落到 articles/<id>.meta.yaml(此前 ID 无处可写)
2026-09-01 19:27:21 +08:00

123 lines
5.5 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ============================================================
# 许可证成色分级 → 镜像可见性规则
# ------------------------------------------------------------
# 这是新增项目时的**第一判断项**:先定级,再决定源码镜像能不能公开。
# 定错级的代价:L3 项目被公开镜像,等于替对方做了一次未经授权的公开分发。
#
# 判定顺序自上而下,命中即停。
# ============================================================
tiers:
- level: L1
label: 完全开源
redistributable: true
visibility: public
match_spdx:
- MIT
- Apache-2.0
- BSD-2-Clause
- BSD-3-Clause
- ISC
- MPL-2.0
- GPL-2.0
- GPL-3.0
- LGPL-3.0
- Unlicense
note: "可自由镜像与再分发,保留原许可证声明即可。"
- level: L2
label: 有限开源
redistributable: true
visibility: public
match_spdx:
- AGPL-3.0
- SSPL-1.0
- BUSL-1.1
- Elastic-2.0
note: "有附加限制(网络使用即触发开源义务、或限制商业化托管)。可公开镜像,但档案中必须记录限制条款。"
- level: L3
label: 源码可得 · 非开源
redistributable: false
visibility: private
match_spdx:
- NOASSERTION
- OTHER
- LicenseRef-scanned
note: |
SPDX 无法识别的自定义许可,典型为 source-available。
必须人工读 LICENSE 原文确认,再决定是否归 L3 或 L4。
判为 L3 时镜像**一律私有**,仅作个人代码级研究,不构成公开分发。
- level: L4
label: 不可得
redistributable: false
visibility: none
match_spdx:
- ""
- null
note: "无 LICENSE 文件或明确 proprietary。不镜像,档案里只留仓库链接与 commit 快照。"
# ---------- 人工复核触发条件 ----------
# 命中以下任一情形,脚本必须停下来要求人工确认,不得自动定级:
manual_review_triggers:
- "SPDX 为 NOASSERTION 且 LICENSE 文件超过 200 行(条款复杂,容易漏掉分发限制)"
- "同一仓库存在多个 LICENSE 文件(如 LICENSE + LICENSES/ 目录,可能混合许可)"
- "README 自称 open source 但 SPDX 不是 OSI 认证标识(名实不符,需显式记录)"
- "LICENSE 中出现 SaaS / hosting / white-label / marketplace / resale 任一关键词"
# ---------- 混合许可的降级规则 ----------
# 自动定级只认 SPDX 标识,无法识别「目录切分许可」这类混合形态。
# 遇到需人工复核的仓库,按此流程处理:
mixed_license_procedure:
- "定位受限目录:读根目录 LICENSE 与各子目录 LICENSE,找出采用非 OSI 许可的路径"
- "评估剩余部分:确认排除受限目录后,其余内容是否为单一 OSI 许可"
- "若成立 -> 镜像时排除受限目录,可见性按剩余部分的许可定级(通常可 public)"
- "若不成立 -> 整仓按最严格的那个许可定级(通常 L3 / private)"
- "必须在档案 mirror.sync_note 与仓库内 MIRROR-NOTE.md 写明:排除了什么、为什么、如何恢复完整镜像"
# 补这条规则的缘由(注意:这是独立顶层键,不能写进上面的列表里——
# YAML 不允许序列与映射键同级混用,写进去会直接让整份 schema 解析失败)
mixed_license_note: |
这条规则是 2026-09-01 处理 different-ai/openwork 时补上的。
自动定级把它判成 L3/private,但人工复核后发现 ee/ 之外是纯 MIT,
排除 ee/ 后完全可以公开镜像——同一个仓库,两种正确答案,
取决于镜像是否包含受限目录。没有这条规则就会做出过度保守的误判。
# ---------- 已定级样本(供后续同类项目参照) ----------
precedents:
- repo: Devin-AXIS/iPolloWork
level: L3
visibility: private
license_name: "iPolloWork Source Available License 1.0"
decided_at: 2026-09-01
reason: |
条款原文要求:任何售卖、转售、收费服务、SaaS、托管、白标、市场分发或
面向客户的使用,无论个人还是企业,均需事先书面授权;且面向用户的前端
必须保留 iPolloWork 名称、Logo 与产品归属。公开镜像落入「托管/市场分发」
的解释空间,故设为私有。
- repo: different-ai/openwork
level: L3
visibility: public
decided_at: 2026-09-01
manual_review: true
trigger_hit:
- "同一仓库存在多个 LICENSE 文件(LICENSE + ee/LICENSE)"
- "README 自称 open source 但 SPDX 为 NOASSERTION"
- "ee/LICENSE 含 production / subscription / resale 关键词"
license_name: "目录切分许可:ee/ 之外 MIT;ee/ 为 OpenWork EE License"
reason: |
根目录 LICENSE(36 行)声明 ee/ 之外的部分为 MIT;
ee/LICENSE(72 行)为 OpenWork EE License,要求生产使用需订阅,
仅 5 人以下组织、30 天评估、开发测试三种情形豁免,
且每个 ee/ 版本公开发布满两年后自动追加 MIT 授权。
**排除 ee/ 目录后,镜像内容为纯 MIT,可公开分发**;
若完整镜像(含 ee/)则必须私有。
mirror_strategy: "镜像时排除 ee/ -> public;完整镜像 -> private"
lesson: |
这是「自动定级过度保守」的典型案例:SPDX=NOASSERTION 直接判 L3/private
是安全的默认值,但对目录切分许可仓库会误伤。
已据此补充 mixed_license_procedure 规则。