Skip to content

[CLA] 完成 ICLA v1.0 Gist 与 CLA Assistant 配置 #6

Description

@lin594

当前执行记录

  • PR R2 · DO NOT AUTO-MERGE · docs: establish organization license governance #5 squash merge commit:26f24cb518d6bc03d26b8f27c64e172ff3988d33
  • 合并后 ICLA v1.0 SHA-256:445bd124d129f75a377629fecbcd58c14aa25c78acefca7c877d3a9e46547f85
  • 公开生产 Gist:https://gist.github.com/lin594/e7aad6aea670fb1075a294f1269e58ae
  • Gist revision:b41fb7e4f5a53d57092b133757bdc23c92a417a0
  • CLA_SETUP.md 回填 PR:docs(cla): pin ICLA v1.0 production identity #7
  • PR docs(cla): pin ICLA v1.0 production identity #7 squash merge commit:79721ddda2233148aa60fc20c11e125464d7a07c
  • MANUAL-UI-1:已由 Organization Owner 于 2026-09-15 确认完成
  • CLA Assistant GitHub App:installation id 161854925repository_selection: selectedsuspended_at: null;Owner 已确认仅选择 .github
  • CLA Canary PR:test(cla): verify CLA Assistant workflow #9;initial head 179d903a5697d2a8f8337b4ce7f8a634b811c963;final head 76ded50aedadc156cc391a5c74077d04bf9fab66
  • Test A 未签署结果:CLA Assistant 已评论;真实 status context 为 license/cla,状态 PENDING;PR merge state 为 UNSTABLE
  • Test B 最终签署结果:Organization Owner 已回复 MANUAL-UI-2-RESIGNED done;Privacy Policy 生效后更新的 Canary head 76ded50aedadc156cc391a5c74077d04bf9fab66 于 2026-09-15 19:09:51(UTC+8)产生全新的 license/cla: SUCCESS
  • PIPIA / activation ledger 运行记录 PR:docs(cla): record .github activation #10;squash merge commit ad377c2f13b85b1063e78ebff192bf557e6cac97
  • CLA required check:repository ruleset 23440617Require CLA on main)已 active;只匹配 refs/heads/main,只要求 license/cla,无 bypass;原 branch protection 未改动
  • Canary PR test(cla): verify CLA Assistant workflow #9:验证完成后于 2026-09-15 19:37(UTC+8)关闭,临时远端分支已删除,测试文件未进入 main

启用前硬门槛

  • @lin594 完成人工 R2 审查并给出明确合并指令
  • PR R2 · DO NOT AUTO-MERGE · docs: establish organization license governance #5 已人工批准并合并
  • 合并后的 ICLA.md 仍为 Version 1.0,且 signer-specific effective date 语义未变
  • 发布最终版 CLA_PRIVACY.md
  • 已将 CLA_PIPIA.md 与实际服务方、metadata、Privacy Policy URL、数据流、Azure/欧洲存储说明和 CSV export 行为逐项复核,并通过 docs(cla): record .github activation #10 回填启用事实
  • 记录包含 ICLA v1.0 的 .github commit SHA
  • 计算并记录合并后 ICLA.md 的 SHA-256
  • 创建公开 Gist,内容与合并后的 ICLA.md 字节完全一致
  • 已合并 docs(cla): pin ICLA v1.0 production identity #7,将 Gist URL、真实 revision、commit SHA 和文件哈希正式回填到 CLA_SETUP.md
  • 在组织 Settings > Member privileges 中限制只有 Organization Owner 可以安装 GitHub App(MANUAL-UI-1 done,2026-09-15)

首位外部贡献者正式签署后,不再对同一 ICLA v1.0 Gist 做无意义的措辞、格式或 metadata 修改。实质条款变化必须发布新版本,并要求后续贡献显式接受。

MANUAL-UI-1 · GitHub App 安装权限(已完成)

GitHub 当前 REST/GraphQL API 未暴露此开关;当前 gh 身份已确认是 Organization Owner。执行记录:

  1. 已打开:https://github.com/organizations/e-dialect/settings/member_privileges
  2. 已在 GitHub Apps 中取消勾选 Allow repository admins to install GitHub Apps for their repositories
  3. Organization Owner 已回复 MANUAL-UI-1 done(2026-09-15)。

MANUAL-UI-CLA-1 · 仅为 .github 安装并连接 CLA Assistant(已完成)

  • Organization Owner 已完成 GitHub App 安装、GitHub OAuth 和 e-dialect/.github 与生产 Gist 的连接。
  • 首次 API 验证发现 repository_selection: all 后已暂停 Canary,并要求修正。
  • Organization Owner 已回复 MANUAL-UI-CLA-1 corrected
  • 修正后组织 API 证据(2026-09-15):installation id 161854925repository_selection: selectedsuspended_at: nullupdated_at: 2026-09-15T16:30:15+08:00
  • 当前 gh token 不含 read:user,无法通过 /user/installations/{id}/repositories 独立枚举 selected 列表;没有为此扩大 token scope。最终范围证据为 GitHub API 的 selected 状态与 Organization Owner 明确确认仅选择 .github
  • Agreement/Gist:https://gist.github.com/lin594/e7aad6aea670fb1075a294f1269e58ae
  • Privacy Policy URL:https://github.com/e-dialect/.github/blob/main/CLA_PRIVACY.md
  • 未启用 organization members exemption,未添加 allowlist,未使用 Import Signature,未连接其他仓库。

Gist 中的 metadata 固定为 required string legalName 与 required boolean crossBorderConsent;未添加 current email 或手填 GitHub username 字段,未修改 Gist。

CLA metadata 与隐私配置

  • Gist metadata 只额外收集 legalName 这一项文本个人信息;不要求 current email,也不重复要求 GitHub username
  • Canary 首次签署已由 GitHub-authenticated @lin594 身份触发并使同一 head 的 license/cla 变为 SUCCESS
  • Gist metadata 已配置独立于 ICLA 接受的 crossBorderConsent required boolean
  • 单独确认的中英文含义与 CLA_SETUP.md 示例一致
  • CLA Assistant Privacy Policy URL 使用 https://github.com/e-dialect/.github/blob/main/CLA_PRIVACY.md,且已由公开 linked-item API 验证
  • 已按 CLA Assistant 当前 custom-fields-schema.json 验证 metadata 的字段名称、类型和 required 状态
  • Organization Owner 已完成带 legalNamecrossBorderConsent 和项目 Privacy Policy 独立勾选的重新签署;新 Canary head 已由服务端重新验证为 SUCCESS
  • Test A 已证明 PR、commit 或模板本身不构成签署:相同贡献者在签署前得到 PENDING
  • 已核对 CLA Assistant 当前官方行为:关联 Gist / CLA 变化会要求贡献者在新 PR 上重新签署;未对 production Gist 做测试性修改
  • Canary 两个 commit 均无 Co-authored-by:;未来含实质共同作者的贡献继续按下方逐 PR 检查

crossBorderConsent 的 required boolean 含义为:

I separately consent to the cross-border processing of my CLA signature information as described in the e-dialect CLA Privacy Notice.
我已阅读 e-dialect CLA 隐私说明,并单独同意按其中说明将我的 CLA 签署相关个人信息提供至境外服务进行处理。

GitHub、CLA Assistant 或 SAP 仍可能依其自身告知处理账户邮箱;上述最小化仅表示 e-dialect 不额外要求 current email custom field。

.github CLA Canary

Test A · 未签署状态(已完成)

MANUAL-UI-2 · 完成一次真实 ICLA 测试签署(已完成)

2026-09-15 16:58,用户提供截图:GitHub 登录成功,但签署页只显示空白 Version 与空白正文,字段和接受按钮均未加载。这不是用户漏操作。

诊断证据:

  • GitHub Gist API:生产 Gist 为 public,仅有固定 revision b41fb7e4f5a53d57092b133757bdc23c92a417a0ICLA.md 为 11,527 bytes;metadata JSON 完整。
  • GitHub Markdown API:metadata 可正常渲染,去除 CLA Assistant 代码所处理的 <p> 与换行后仍是有效 JSON。
  • CLA Assistant /api/cla/getLinkedItem 直连返回正确关联:e-dialect/.github → 生产 Gist。
  • CLA Assistant /api/cla/get 直连返回 updatedAt: 2026-09-15T05:29:37Z、非空 CLA HTML(11,743 chars)和非空 metadata HTML(555 chars)。
  • 经当前代理访问 CLA Assistant 时连续出现 TLS/空响应;同机绕过代理直连约 10 秒成功。
  • 上游已有同类未关闭报告:cla-assistant/cla-assistant#1185#1168#933,症状均包含空白 Version/正文或极慢 API。

恢复步骤:

  1. cla-assistant.io 暂时绕过系统代理/规则走直连,然后重新打开或硬刷新:https://cla-assistant.io/e-dialect/.github?pullRequest=9
  2. 等待页面显示 Version 2026-09-15、ICLA 正文和字段。
  3. Legal name 填写你的法定姓名。
  4. 勾选 crossBorderConsent;如页面显示 CLA Assistant 内置的 project privacy policy consent,也需单独勾选。
  5. 显式点击 I agree 接受 ICLA v1.0;不要填写额外 email,不要修改其他设置。
  6. 完成后回复:MANUAL-UI-2 done。若直连后仍为空白,回复:MANUAL-UI-2 still blank

Codex 不得代表 GitHub 用户点击接受法律协议。

首次签署后的机器验证(2026-09-15):

  • Organization Owner 已回复 MANUAL-UI-2 done
  • PR test(cla): verify CLA Assistant workflow #9 的同一 head 179d903a5697d2a8f8337b4ce7f8a634b811c963 上,license/cla2026-09-15T09:50:16Z 变为 SUCCESS,描述为 Contributor License Agreement is signed.
  • CLA Assistant 原评论已更新为 All committers have signed the CLA.;GitHub merge state 由 UNSTABLE 变为 CLEAN
  • CLA Assistant 客户端从 GitHub authenticated user 取得签署身份,服务端以该身份的 login / user id 写入签署记录;本次 Canary 的签署账号为 @lin594
  • 未把法定姓名或其他签署个人信息复制到本公开 Issue。

首次签署后的隐私配置复核曾发现:

  • CLA Assistant 公开 /api/cla/getLinkedItem 返回的 .github 关联记录含正确 Gist,但不含 privacyPolicy
  • 对应开源版本的清理中间件只移除 repository token,不会移除 privacyPolicy;数据模型、更新接口和签署页面均使用同名字段。
  • 因而当时不能证明首次签署前展示并强制勾选了项目自己的 CLA_PRIVACY.md 链接;首次结果未作为最终 Test B。

该缺口已通过下述 MANUAL-UI-PRIVACY-1 修正;首次测试签名随后由签署人撤销并重新签署。

MANUAL-UI-PRIVACY-1 · 项目隐私政策链接(已完成)

  • Organization Owner 已回复 MANUAL-UI-PRIVACY-1 done(2026-09-15)。
  • CLA Assistant 公开 /api/cla/getLinkedItem 已返回 privacyPolicy: https://github.com/e-dialect/.github/blob/main/CLA_PRIVACY.md
  • GitHub API 已确认该 URL 对应 main 上的 CLA_PRIVACY.md(blob ce12ce808bd876c756fb3306c34b80bb13b422fc,8,428 bytes)。
  • 生产 Gist、ICLA v1.0 文本和 metadata 均未修改。
  • 由于首次测试签署发生在上述链接生效前,签署人已撤销该测试签名并完成下述重新签署。

Test B · 生效后重新签署(已完成)

  • Organization Owner 已回复 MANUAL-UI-2-RESIGNED done
  • 为避免把旧 status 冒充复测结果,在 Privacy Policy 生效并完成重新签署后,Canary 分支增加了一个不修改文件的空提交以触发新的 synchronize webhook。
  • 新 head:76ded50aedadc156cc391a5c74077d04bf9fab66
  • license/cla 状态:SUCCESS;时间 2026-09-15T11:09:51Z;描述 Contributor License Agreement is signed.
  • legalName 为 required string、crossBorderConsent 为 required boolean;项目 Privacy Policy URL 由 CLA Assistant 独立显示和强制接受。未配置项目 current-email 字段,GitHub username 来自 authenticated identity。
  • 生产 Gist 未修改:仍只有 b41fb7e4f5a53d57092b133757bdc23c92a417a0 一个 revision;ICLA.md SHA-256 仍为 445bd124d129f75a377629fecbcd58c14aa25c78acefca7c877d3a9e46547f85
  • Canary PR test(cla): verify CLA Assistant workflow #9 已关闭且远端分支已删除;CLA_CANARY.md 未合并进 main

.github activation record 与 required check(已完成)

  • PR docs(cla): record .github activation #10 将 PIPIA 范围从拟上线更新为已启用的 .github 工作流,并写入 activation ledger;未修改 ICLA.mdCCLA.md、Gist 或 metadata。
  • PR docs(cla): record .github activation #10 已于 2026-09-15T11:22:17Z squash merge;merge commit ad377c2f13b85b1063e78ebff192bf557e6cac97
  • 变更前备份:原 branch protection 要求 PR、dismiss stale reviews、conversation resolution 且 enforce admins;没有 required status checks;repository rulesets 为空。
  • 因 required-status-check 子资源尚未启用,GitHub 拒绝增量 PATCH;没有用整份 protection PUT 覆盖现有配置。
  • 已改用独立 repository ruleset 23440617:active,只匹配 refs/heads/main,只要求 license/clastrict_required_status_checks_policy: false,无 bypass。
  • 回读确认 main 的有效 rules 中存在上述 check,原 branch protection 逐项保持不变;仍开放的组织主页 PR docs(profile): present community infrastructure vision #8 已有 license/cla: SUCCESS,未被错误卡住。

.github Canary 完成清单

  • root license / license boundary 已审查并合并
  • path-level third-party license boundary 已审查并合并
  • data / asset boundary 已审查并合并
  • 未签署贡献得到 license/cla: PENDING
  • 带项目隐私政策及独立境外处理确认的重新签署贡献得到 license/cla: SUCCESS
  • activation ledger 已通过 docs(cla): record .github activation #10 合并
  • license/cla 已通过独立 active ruleset 加入 main 的 required status checks
  • Canary PR 和远端分支已清理,测试文件未进入默认分支

每个仓库的启用清单

对每个仓库分别完成:

  • root license / license boundary 已审查并合并
  • path-level third-party license boundary 已审查并合并
  • data / asset boundary 已审查并合并
  • 在测试 PR 上验证已签署贡献通过、未签署贡献被阻断
  • 记录 CLA Assistant 发出的真实 check name:license/cla
  • 更新 CLA_SETUP.md 的 Covered Repository activation ledger
  • 最后才将该真实 check 加入 branch protection / ruleset

Activation ledger 的每行必须记录 Repository、CLA version、明确的 Enabled at 日期时间、正式 ICLA repository commit、真实 Gist revision 和实际 CLA check name,不记录贡献者个人信息。

Cohort 1

  • .github
  • xiangsheng-box
  • wanyu-proofreader
  • edialect.top
  • hinghwa-chat
  • hinghwa-dict-backend
  • hinghwa-dict-web
  • hinghwa-dict-uni-app

以上仓库必须各自完成边界 PR 后逐一启用,不批量立即开启。

Cohort 2

  • hinghwa_semantic_retrieval
  • ipa_tts_minimal
  • Voice_Whisper
  • quick-start

以上仓库必须先完成并合并更严格的路径级许可证审查,再逐一启用。

明确不启用

  • fork;
  • private / archived legacy repositories;
  • code-contributing-practice
  • hinghwa-ime
  • hinghwa-RAG
  • hinghwa-dict-basic-service
  • hinghwa-dict-mp-weixin

始终使用 selected repositories,不选择 All repositories

企业贡献者:仅首次实际出现时执行

CCLA 是低频例外流程,不是立即工作。首次出现企业或机构贡献者时:

  • Corporate Contributor 与 Project Manager 双方完成 countersigned CCLA
  • 企业提供 Authorized Contributors 的准确 GitHub usernames
  • 为每个账号配置精确用户 allowListPattern,不使用宽泛 wildcard
  • 用测试 PR 验证 CCLA 覆盖账号不会被错误要求签署个人 ICLA
  • 维护最小私有记录:Corporate Contributor legal name、CCLA version、GitHub username、effective date、revoked date(如适用)
  • 核实未使用 CLA Assistant 的 Import Signature 表示 CCLA 覆盖或制造表面 ICLA 签署记录
  • 将 bot allowlist 与企业 CCLA allowlist 分开记录
  • 人员退出 Authorized Contributors 后,从未来贡献的 allowlist 移除并记录 revoked date

白名单本身不产生知识产权授权,授权来源始终是双方签署的 CCLA。不得使用 Import Signature 伪造、模拟或代替未签署人员的 ICLA 记录;不得建设公共员工登记系统,也不得在 GitHub 公开员工真实姓名、邮箱或完整签署记录。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions