From e5e09784f5f5b9cac1563ddc2b497174ee4399b8 Mon Sep 17 00:00:00 2001 From: joonas-001 <248571776+joonas-001@users.noreply.github.com> Date: Tue, 1 Sep 2026 20:31:46 +0800 Subject: [PATCH] feat: add pinned issue submission hub --- AGENTS.md | 9 +++ README.md | 1 + TODO.md | 11 ++- docs/architecture/milestone-8f-validation.md | 16 ++++ docs/contributing/issue-submission-hub.md | 18 +++++ docs/contributing/reporting-issues.md | 6 +- docs/project-status.md | 7 +- governance/issues-v1.json | 19 ++++- tools/repo_checks.py | 84 +++++++++++++++++++- 9 files changed, 164 insertions(+), 7 deletions(-) create mode 100644 docs/contributing/issue-submission-hub.md diff --git a/AGENTS.md b/AGENTS.md index d48c4ff..f59a888 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -373,6 +373,15 @@ 和密钥扫描。8G 未访问远程来源,因此 `M8B-002` 仍阻断入口;`algorithm@0.3.0` 必须保持 `draft + intake: closed`,默认入口保持 `0.2.2`,直到项目所有者作出最终入口决定。8G 不 授权真实库写入、Tailnet 候选、GitHub 远程写操作、外部 AI、公开发布或云端变更。 +- GitHub Issues 置顶入口授权与状态:项目所有者于 2026-09-01 在 8G 之外单独授权创建并 + 置顶一个提交入口。远程 Issue #26 标题为“提交issues请看这里”,正文由 + `docs/contributing/issue-submission-hub.md` 受管,提供 Bug、Feature Request、Other 三栏 + 即时预填链接,分别使用 GitHub 已存在的 `bug`、`enhancement`、`question` 标签;Issue + 自身使用 `documentation` 标签。该有限授权已完成,不构成持续远程同步授权,也不包含 + 创建或同步 `type:*`/`status:*` 受管标签、Milestone、仓库设置、Private Vulnerability + Reporting 开关、测试 Issue 或其他 GitHub 写操作。确定性检查会解析三条链接并核对标题、 + 标签和预填正文;完整 `release-readiness` 通过 147 项后端(1 项按预期跳过)、44 项前端、 + 13 个静态页面、26 项 E2E(6 项按范围跳过)、全部治理、契约无漂移和密钥扫描。 - 当前未决定: - OpenAI、Moonshot AI 及 5B 范围外用途的首批模型清单; - 6B 后续运维复核、月度预算周期开始后的实际消耗; diff --git a/README.md b/README.md index 9584483..5c41e66 100644 --- a/README.md +++ b/README.md @@ -57,6 +57,7 @@ | 第六里程碑 6A–6D | 6D 已完成并合并 | 浏览器同源 API 修复精确提交 `c781fe1` 已部署,旧 `5b4af16` 保留为回滚点;真实库 47 表/54 行、策略 `1.1.0`、远程 Runner、身份、Tailnet HTTPS、备份、资源和自动回滚均已复验。项目所有者已完成真实手机确认、账单复核并取消剩余观察期;PR #19 已合并为 `main@d4f079c`。Headless 浏览器限制继续记录,真实 AI/来源/邮件、公开访问和扩容继续关闭 | | 第七里程碑 7A–7F | 已完成并合并 | PR #18 已合并为 `main@90e16e2`;合并后 push CI `32806434805` 共 22 项成功。Windows 实际高对比度和连续两小时阅读疲劳为非阻断后续人工任务,未执行前不得写成已通过或声称 WCAG 合规认证 | | 第八里程碑 8A–8G | 8G 技术验收完成,入口待决定 | `algorithm@0.3.0` 的 12 域、46 能力、34 单元、64 题和 22 个双语言 Runner 任务已完成第二评审、迁移回滚、真实 Runner 全量复验、隐私回归和完整门禁;后端 147 项、前端 44 项、生产构建及 E2E 26 项通过。远程来源实质复核仍未授权,默认入口保持 `0.2.2`,当前推荐继续关闭 `0.3.0` 并等待项目所有者最终决定 | +| GitHub Issues 提交入口 | 已创建并置顶 | [Issue #26“提交issues请看这里”](https://github.com/joonas-001/cloud_study_everything/issues/26) 提供 Bug、Feature Request、Other 三栏即时预填模板,分别附加 `bug`、`enhancement`、`question` 标签;其他远程治理配置仍须单独授权 | 当前 Web 页面提供算法诊断、规划、学习执行和目标准备度的本地受限流程。规划、确定性练习和 5A 准备度比较由本地规则处理;自由文本和代码文本只做结构校验,不能据此判断内容正确,也不代表算法技能包已经激活、用户已经掌握相关能力或已经具备真实交付资格。 diff --git a/TODO.md b/TODO.md index 46d321d..53835b7 100644 --- a/TODO.md +++ b/TODO.md @@ -249,7 +249,7 @@ PR #13 合并并通过主线验证。7D 已通过 PR #14 合并为 `main@809a6c5 | M8C-001 | 已完成(当前授权范围) | 8C:确定性自适应诊断 | 通用引擎已实现下游阻断度/区分价值/重复/稳定 ID 选题,三态路径信号,修正后下游重算,36 题/50 分钟停止,决定审计、进程重启恢复、相同状态重放、受管固定序列回退及未来/损坏状态拒绝;API 和界面准确展示解释、预算和证据上限。`0.3.0` 保持关闭,未新增迁移、依赖、外部调用或运行状态变更;验证见 `milestone-8c-validation.md` | | M8D-001 | 已完成(当前授权范围) | 8D:共同主干学习执行 | 已实现默认 120 分钟每日重排、追加式延期、暂停恢复、确定性纠错、双语言范围化 Runner 证据、迁移/作品限制、真人评审、固定复习、十二域阶段检查和四分支准确门禁;`0.3.0` 入口仍关闭,验证见 `milestone-8d-validation.md` | | M8E-001 | 已完成(当前授权范围) | 8E:能力档案与校准基础 | 已实现精确范围与 90 天时效档案、Runner/真人评审验证方式、JSON/CSV/打印视图、非虚荣学习分析及锁定且只读的复习影子评估;不含敏感正文,不影响任务、证据或用户结论,验证见 `milestone-8e-validation.md` | -| M8F-001 | 已完成(当前授权范围) | 8F:Issues 反馈与发布准备 | 已实现三个 Issue Forms、关闭空白 Issue、安全入口、双语指南、受管标签/生命周期/Milestone 与 TODO 映射契约、允许列表诊断预览、删字段、显式复制及复制后手动 GitHub 入口;不持久化、不自动提交或上传,验证见 `milestone-8f-validation.md`;远程标签、Milestone、置顶 Issue、Private Vulnerability Reporting 开关和真实测试 Issue 仍须单独授权 | +| M8F-001 | 已完成(当前授权范围) | 8F:Issues 反馈与发布准备 | 已实现三个 Issue Forms、关闭空白 Issue、安全入口、双语指南、受管标签/生命周期/Milestone 与 TODO 映射契约、允许列表诊断预览、删字段、显式复制及复制后手动 GitHub 入口;2026-09-01 另行授权创建并置顶远程 Issue #26,提供 Bug/Feature Request/Other 三栏即时预填链接;其余远程标签、Milestone、Private Vulnerability Reporting 开关和测试 Issue 仍须单独授权 | | M8G-001 | 进行中(技术验收完成) | 8G:完整验收与入口决定 | 历史兼容、`0011 → 0010 → 0011` 迁移回滚、内容抽审、Runner 复验、Issues 隐私、桌面/移动/WebKit E2E 和完整门禁均通过,见 `milestone-8g-validation.md`;因 M8B-002 未完成,当前推荐保持 0.3.0 关闭,等待项目所有者最终决定 | ### 第八里程碑明确延期但未取消的任务 @@ -267,7 +267,7 @@ PR #13 合并并通过主线验证。7D 已通过 PR #14 合并为 `main@809a6c5 | M5C-007 | 待确认 | 启用接单或产品化真实实验 | 首版仍只启用就业路径;任一路径须另行确认市场、证据门禁、外部动作和收入边界,不因 8A 或分支入口自动启用 | | PLATFORM-PLUGIN-001 | 待确认 | 评估云奕学通用插件平台 | 只有第二技能或明确外部集成出现无法由受管适配器解决的真实需求后再评估;须单独确认第三方代码、权限、供应链、凭据、升级、兼容和隔离边界 | | CONTENT-AUTHORING-001 | 待确认 | 评估可视化课程创作和 AI 辅助内容生产 | 必须先有来源、许可、人工复核、不可变版本和撤回规则;不得让 AI 自动生成后直接发布课程、答案、测试或能力依赖 | -| GITHUB-REMOTE-001 | 待确认 | 执行 GitHub 远程反馈配置 | 8F 可先提交仓库文件;创建标签、Milestone、置顶 Issue、开启私密安全报告或真实测试 Issue 均须单独授权并逐项验收 | +| GITHUB-REMOTE-001 | 部分完成(限置顶入口) | 执行 GitHub 远程反馈配置 | 项目所有者于 2026-09-01 单独授权并完成 Issue #26 创建与置顶,三类链接分别预填并使用现有 `bug`、`enhancement`、`question` 标签;同步受管标签、创建 Milestone、修改仓库或安全设置、提交测试 Issue 仍待分别授权 | | SELF-HOST-UPGRADE-001 | 待确认 | 改进自托管检查更新与受控升级体验 | 在现有预检、加密备份和回滚上设计“检查—备份—迁移演练—确认—回滚”,不得静默升级 | | INTEROP-001 | 待确认 | 评估 PWA、LTI、SCORM、xAPI 和外部 LMS 互操作 | 仅在出现真实跨设备或机构集成需求后逐项立项;不得为了功能矩阵提前增加标准和依赖 | | SECOND-SKILL-001 | 待确认 | 在算法共同主干验证后选择并建设第二技能包 | 复用通用学习引擎,单独确认技能范围、来源、评估、Runner 和版本;不得把算法能力硬编码复制到新技能 | @@ -303,6 +303,13 @@ PR #13 合并并通过主线验证。7D 已通过 PR #14 合并为 `main@809a6c5 ## 维护记录 +- 2026-09-01:项目所有者单独授权把提交流程创建为远程置顶 Issue。Issue #26 已以标题 + “提交issues请看这里”创建并置顶,提供 Bug、Feature Request、Other 三栏即时预填模板, + 分别附加远程已有 `bug`、`enhancement`、`question` 标签,并链接到详细研究文档。仓库保存 + 同源正文和治理记录;本次没有同步受管标签、创建 Milestone、修改仓库/安全设置或提交 + 测试 Issue。完整 `release-readiness` 通过 147 项后端(1 项按预期跳过)、44 项前端、 + 13 个静态页面、26 项 E2E(6 项按范围跳过)、全部治理、契约无漂移和密钥扫描。 + - 2026-09-01:项目所有者单独授权 8G。强制第二评审完成 9/34 学习单元、20/64 诊断题、 4/10 本地来源映射元数据及 Runner、量表、评估准则和分支门禁全量复核,修正两项内容问题; `0011 → 0010 → 0011` 迁移往返、十项真实 Runner 矩阵、22 任务/66 测试、Issues 隐私、 diff --git a/docs/architecture/milestone-8f-validation.md b/docs/architecture/milestone-8f-validation.md index 086e2c8..b0213bf 100644 --- a/docs/architecture/milestone-8f-validation.md +++ b/docs/architecture/milestone-8f-validation.md @@ -92,3 +92,19 @@ Issues、API、Web、E2E、契约漂移和密钥扫描检查。 - 未写入真实库,未迁移数据,未修改云端,未调用外部 AI; - `algorithm@0.3.0` 继续 `draft + intake: closed`,默认入口继续为 `algorithm@0.2.2`; - 8G 完整验收与入口决定仍须项目所有者另行授权。 + +## 5. 8F 后续远程入口记录 + +2026-09-01,项目所有者另行授权创建一个 GitHub Issues 提交入口。远程 +[Issue #26](https://github.com/joonas-001/cloud_study_everything/issues/26) 已按标题 +“提交issues请看这里”创建并置顶,提供 Bug、Feature Request 和 Other 三栏即时预填链接, +分别使用 GitHub 已存在的 `bug`、`enhancement` 和 `question` 标签;置顶 Issue 自身使用 +`documentation` 标签。正文来源为 `docs/contributing/issue-submission-hub.md`。 + +这次授权只覆盖该 Issue 的创建与置顶。受管 `type:*`/`status:*` 标签同步、GitHub +Milestone、仓库设置、Private Vulnerability Reporting 开关和测试 Issue 仍未授权。 + +仓库新增确定性校验,解析三条链接并核对标题、标签、预填正文、私密安全入口、详细研究 +链接和唯一受管远程操作记录。完整 `pnpm release-readiness` 通过 147 项后端测试(1 项按 +预期跳过)、44 项前端测试、13 个静态页面、26 项 E2E(6 项按既有范围跳过)、全部治理、 +契约无漂移和密钥扫描。 diff --git a/docs/contributing/issue-submission-hub.md b/docs/contributing/issue-submission-hub.md new file mode 100644 index 0000000..343c9c2 --- /dev/null +++ b/docs/contributing/issue-submission-hub.md @@ -0,0 +1,18 @@ +# 提交issues请看这里 + +## 简要提交流程 + +1. 先搜索是否已有相同问题;安全漏洞、凭据泄露或越权问题不要公开提交; +2. 在下方选择最合适的一栏,点击“填写并提交”打开已预填模板; +3. 补齐信息并删除答案、完整代码、凭据、身份、私有地址、本地路径和完整日志等敏感内容; +4. 最后检查标题、正文和自动附加的标签,点击 GitHub 的“Submit new issue”完成提交。 + +| Bug/缺陷 | Feature Request/功能建议 | Other/其他 | +| --- | --- | --- | +| 可复现故障、错误结果或回归 | 新能力、体验或运维改进 | 内容/证据、文档、使用问题或暂时无法归类的事项 | +| 自动附加 `bug` 标签 | 自动附加 `enhancement` 标签 | 自动附加 `question` 标签,等待分诊 | +| [填写并提交 Bug](https://github.com/joonas-001/cloud_study_everything/issues/new?labels=bug&title=%5BBug%5D%20&body=%23%23%20%E5%8F%91%E7%94%9F%E4%BA%86%E4%BB%80%E4%B9%88%0A%0A%23%23%20%E6%9C%9F%E6%9C%9B%E8%A1%8C%E4%B8%BA%0A%0A%23%23%20%E5%A4%8D%E7%8E%B0%E6%AD%A5%E9%AA%A4%0A%0A1.%20%0A%0A%23%23%20%E7%89%88%E6%9C%AC%0A%0A-%20%5B%20%5D%20%E5%B7%B2%E7%A7%BB%E9%99%A4%E7%AD%94%E6%A1%88%E3%80%81%E4%BB%A3%E7%A0%81%E3%80%81%E5%87%AD%E6%8D%AE%E3%80%81%E8%BA%AB%E4%BB%BD%E3%80%81%E7%A7%81%E6%9C%89%E5%9C%B0%E5%9D%80%E3%80%81%E6%9C%AC%E5%9C%B0%E8%B7%AF%E5%BE%84%E5%92%8C%E5%AE%8C%E6%95%B4%E6%97%A5%E5%BF%97%E3%80%82) | [填写并提交 Feature Request](https://github.com/joonas-001/cloud_study_everything/issues/new?labels=enhancement&title=%5BFeature%5D%20&body=%23%23%20%E8%A6%81%E8%A7%A3%E5%86%B3%E7%9A%84%E9%97%AE%E9%A2%98%0A%0A%23%23%20%E7%90%86%E6%83%B3%E8%A1%8C%E4%B8%BA%0A%0A%23%23%20%E9%AA%8C%E6%94%B6%E6%A0%87%E5%87%86%0A%0A-%20%5B%20%5D%20%0A%0A%23%23%20%E5%BD%B1%E5%93%8D%0A%0A-%20%5B%20%5D%20%E6%88%91%E7%90%86%E8%A7%A3%20Issue%20%E8%A2%AB%E6%8E%A5%E5%8F%97%E4%B8%8D%E7%AD%89%E4%BA%8E%E5%B7%B2%E6%8E%88%E6%9D%83%E5%AE%9E%E6%96%BD%E3%80%81%E4%BB%98%E8%B4%B9%E3%80%81%E9%83%A8%E7%BD%B2%E6%88%96%E5%85%AC%E5%BC%80%E5%8F%91%E5%B8%83%E3%80%82) | [填写并提交 Other](https://github.com/joonas-001/cloud_study_everything/issues/new?labels=question&title=%5BOther%5D%20&body=%23%23%20%E7%B1%BB%E5%9E%8B%0A%0A%3C!--%20%E5%86%85%E5%AE%B9%2F%E8%AF%81%E6%8D%AE%E3%80%81%E6%96%87%E6%A1%A3%E3%80%81%E4%BD%BF%E7%94%A8%E9%97%AE%E9%A2%98%E6%88%96%E5%85%B6%E4%BB%96%20--%3E%0A%0A%23%23%20%E6%9C%80%E5%B0%8F%E6%8F%8F%E8%BF%B0%0A%0A%23%23%20%E6%9C%9F%E6%9C%9B%E5%A4%84%E7%90%86%0A%0A-%20%5B%20%5D%20%E5%B7%B2%E7%A7%BB%E9%99%A4%E5%87%AD%E6%8D%AE%E3%80%81%E8%BA%AB%E4%BB%BD%E3%80%81%E7%A7%81%E6%9C%89%E5%9C%B0%E5%9D%80%E3%80%81%E6%9C%AC%E5%9C%B0%E8%B7%AF%E5%BE%84%E5%92%8C%E5%85%B6%E4%BB%96%E6%95%8F%E6%84%9F%E6%AD%A3%E6%96%87%E3%80%82) | + +安全问题请使用仓库的 [Private Vulnerability Reporting](https://github.com/joonas-001/cloud_study_everything/security/advisories/new),不要创建公开 Issue。 + +详细信息见:[本次 **GitHub Issues 提交流程研究与云奕学适配连接**](https://github.com/joonas-001/cloud_study_everything/blob/main/docs/research/github-issues-workflow.md)。 diff --git a/docs/contributing/reporting-issues.md b/docs/contributing/reporting-issues.md index 8694728..1eba962 100644 --- a/docs/contributing/reporting-issues.md +++ b/docs/contributing/reporting-issues.md @@ -1,7 +1,9 @@ # 如何提交高质量问题 / How to report a high-quality issue -> 状态:8F 仓库内置顶指南正文候选。将它创建为远程置顶 Issue、同步标签或提交测试 Issue -> 都属于 GitHub 外部写操作,必须另行授权。 +> 状态:详细提交指南。项目所有者于 2026-09-01 单独授权并已创建远程 +> [置顶提交入口 Issue #26](https://github.com/joonas-001/cloud_study_everything/issues/26); +> 受管正文见 `issue-submission-hub.md`。该授权不包含同步受管标签、Milestone、仓库设置、 +> Private Vulnerability Reporting 开关或测试 Issue。 ## 快速流程 / Quick flow diff --git a/docs/project-status.md b/docs/project-status.md index 30bc879..55f71c4 100644 --- a/docs/project-status.md +++ b/docs/project-status.md @@ -29,8 +29,13 @@ 全量复验;最终 `release-readiness` 通过 147 项后端测试(1 项按预期跳过)、44 项前端测试、 生产构建与 13 个静态页面、26 项 E2E(6 项按既有范围跳过)、全部治理检查、契约无漂移和 密钥扫描。`0.3.0` 入口仍关闭,默认入口仍为 `0.2.2`;远程来源实质复核和项目所有者入口 - 决定尚未完成,GitHub 远程写操作、真实库写入、Tailnet 候选与云端变更均未授权; + 决定尚未完成;除后续单独授权的 Issue #26 创建与置顶外,其他 GitHub 远程写操作、真实库 + 写入、Tailnet 候选与云端变更均未授权; - 真实 AI、真实来源、邮件、公开发布、扩容和新增付费资源仍未授权。 +- 项目所有者于 2026-09-01 单独授权 GitHub Issues 置顶提交入口;Issue #26 已创建并置顶, + Bug、Feature Request、Other 三类即时预填链接分别使用远程已有 `bug`、`enhancement`、 + `question` 标签。确定性链接解析和完整 `release-readiness` 已通过;该操作不授权同步受管 + 标签、Milestone、仓库/安全设置或测试 Issue。 ## 6C 证据 diff --git a/governance/issues-v1.json b/governance/issues-v1.json index 5e4b8df..9c96b18 100644 --- a/governance/issues-v1.json +++ b/governance/issues-v1.json @@ -3,7 +3,24 @@ "repository": "joonas-001/cloud_study_everything", "remote_sync": { "authorized": false, - "note": "Creating or changing remote labels, milestones, pinned issues, repository settings, or test issues requires separate owner authorization." + "note": "General remote synchronization remains unauthorized. The completed operation below was separately authorized and does not authorize labels, milestones, repository settings, security settings, or test issues.", + "completed_operations": [ + { + "operation": "pinned_submission_issue", + "authorized_at": "2026-09-01", + "completed_at": "2026-09-01", + "issue_number": 26, + "title": "提交issues请看这里", + "url": "https://github.com/joonas-001/cloud_study_everything/issues/26", + "source": "docs/contributing/issue-submission-hub.md", + "issue_labels": ["documentation"], + "submission_labels": { + "bug": "bug", + "feature_request": "enhancement", + "other": "question" + } + } + ] }, "labels": [ {"name": "type:bug", "category": "type", "color": "d73a4a", "description": "可复现缺陷或回归"}, diff --git a/tools/repo_checks.py b/tools/repo_checks.py index 8d3f0da..74dac2b 100644 --- a/tools/repo_checks.py +++ b/tools/repo_checks.py @@ -9,7 +9,7 @@ from collections.abc import Iterable from pathlib import Path from typing import Any -from urllib.parse import urlsplit +from urllib.parse import parse_qs, urlsplit import yaml from cloud_study_api.governance import ( @@ -1149,6 +1149,68 @@ def check_issue_workflow(root: Path) -> None: ): raise CheckFailure("the private security-reporting entry is missing") + submission_hub_path = root / "docs" / "contributing" / "issue-submission-hub.md" + submission_hub = submission_hub_path.read_text(encoding="utf-8") + required_hub_fragments = { + "# 提交issues请看这里", + "## 简要提交流程", + "Bug/缺陷 | Feature Request/功能建议 | Other/其他", + "issues/new?labels=bug&title=%5BBug%5D%20&body=", + "issues/new?labels=enhancement&title=%5BFeature%5D%20&body=", + "issues/new?labels=question&title=%5BOther%5D%20&body=", + "security/advisories/new", + "GitHub Issues 提交流程研究与云奕学适配连接", + "blob/main/docs/research/github-issues-workflow.md", + } + missing_hub_fragments = sorted( + fragment + for fragment in required_hub_fragments + if fragment not in submission_hub + ) + if missing_hub_fragments: + raise CheckFailure( + f"the pinned Issue submission hub is incomplete: {missing_hub_fragments}" + ) + submission_urls = re.findall( + r"https://github\.com/joonas-001/cloud_study_everything/issues/new\?[^)\s]+", + submission_hub, + ) + expected_submissions = { + "bug": ("[Bug] ", {"发生了什么", "期望行为", "复现步骤", "版本"}), + "enhancement": ( + "[Feature] ", + {"要解决的问题", "理想行为", "验收标准", "影响"}, + ), + "question": ("[Other] ", {"类型", "最小描述", "期望处理"}), + } + observed_submission_labels: set[str] = set() + for submission_url in submission_urls: + query = parse_qs(urlsplit(submission_url).query, keep_blank_values=True) + labels = query.get("labels", []) + titles = query.get("title", []) + bodies = query.get("body", []) + if len(labels) != 1 or labels[0] not in expected_submissions: + raise CheckFailure("the pinned Issue submission link uses an unknown label") + label = labels[0] + expected_title, required_body_fragments = expected_submissions[label] + if titles != [expected_title] or len(bodies) != 1: + raise CheckFailure( + f"the pinned Issue submission link for {label} is not prefilled" + ) + missing_body_fragments = sorted( + fragment + for fragment in required_body_fragments + if fragment not in bodies[0] + ) + if missing_body_fragments: + raise CheckFailure( + f"the pinned Issue template for {label} is incomplete: " + f"{missing_body_fragments}" + ) + observed_submission_labels.add(label) + if observed_submission_labels != set(expected_submissions): + raise CheckFailure("the pinned Issue hub must expose exactly three templates") + contract = json.loads( (root / "governance" / "issues-v1.json").read_text(encoding="utf-8") ) @@ -1159,6 +1221,26 @@ def check_issue_workflow(root: Path) -> None: raise CheckFailure( "the Issue workflow must not authorize remote synchronization" ) + completed_operations = remote_sync.get("completed_operations") + expected_pinned_operation = { + "operation": "pinned_submission_issue", + "authorized_at": "2026-09-01", + "completed_at": "2026-09-01", + "issue_number": 26, + "title": "提交issues请看这里", + "url": "https://github.com/joonas-001/cloud_study_everything/issues/26", + "source": "docs/contributing/issue-submission-hub.md", + "issue_labels": ["documentation"], + "submission_labels": { + "bug": "bug", + "feature_request": "enhancement", + "other": "question", + }, + } + if completed_operations != [expected_pinned_operation]: + raise CheckFailure( + "the Issue workflow must record only the authorized pinned submission Issue" + ) labels = contract.get("labels") if not isinstance(labels, list) or not labels: raise CheckFailure("the managed label dictionary is missing")