feat: add repository-scoped GitHub authority

This commit is contained in:
Codex
2026-07-13 12:35:00 +02:00
parent 3aaa2616e8
commit 89b618ded8
9 changed files with 379 additions and 68 deletions
@@ -0,0 +1,56 @@
# R1.1 任务报告
## 任务回链
- MDTODOR1.1。
- TargetNC01。
- targetWorkspace`/root/.worktrees/unidesk/selfmedia-repo-github-authority`
- repository`pikasTech/unidesk`
- ref`feat/selfmedia-repo-github-authority`
## Primary Workspace 轻量准备
- 仅加载 `dad-dev``unidesk-trans``unidesk-ymalops``cli-spec``git-spec``unidesk-gh``docs-spec`
- 未在 runner primary workspace 读取、修改或验证目标源码。
- 未把 runner 本地结果作为 Target 原入口证据。
## Target 实现
-`config/platform-infra/gitea.yaml``selfmedia-nc01` 声明 repository credential override。
- 独立 `sourceRef``/root/.unidesk/.env` 根下的 `pikainc-selfmedia-gh-token.txt`
- 独立 Secret key 为 `github-token-pikainc-selfmedia`,未修改全局 `gh_token.txt` 权限或内容。
- YAML 声明最小权限:Contents Read、Metadata Read、Webhooks Read/Write。
- 配置 parser 与 validator 支持通用 repository override,并校验 Secret key 唯一性、环境变量归一化碰撞、目标 namespace、bridge Secret 归属和必需能力。
- Secret 渲染支持多个 GitHub token keytoken 仅通过环境变量进入受控执行,不进入 YAML、Git、日志或报告。
- bridge、candidate、受控 fetch、GitHub head、hooks list/status 和 hook reconciler 均按 repository 选择 credential。
- bridge/candidate 只注入所属 Target 仓库 tokenhook owner reconciler 额外注入所有声明 `github-hooks-*` 的 overrideJD01 不依赖 NC01 selfmedia token。
- CLI credential 摘要对 override 仅披露 `sourceRef``present``requiredKeysPresent``fingerprint``permissionResult`、有界错误与 `valuesPrinted=false`
## Target 原入口证据
- 已通过 `trans NC01:/root/.worktrees/unidesk/selfmedia-repo-github-authority` 执行全部源码、Git 和验证操作。
- `bun test scripts/src/platform-infra-gitea-config.test.ts scripts/src/platform-infra-gitea-disclosure.test.ts`8 项通过,0 项失败。
- `bun scripts/cli.ts platform-infra gitea plan --target NC01`policy 为 `ok`
- `git diff --check`、Node 语法、Python `py_compile`、Shell `sh -n`:通过。
- `mirror bootstrap --target NC01 --repo selfmedia-nc01 --dry-run``OK=false`blocker 为 `github-upstream:selfmedia-nc01`,符合 fail-closed。
- `mirror bootstrap --target JD01 --dry-run``OK=true`,证明 JD01 不依赖 NC01 override。
- 专用凭据只读状态:`sourceRef=pikainc-selfmedia-gh-token.txt``presence=false``fingerprint=null``permissionResult=blocked-missing-credential`
- 因 credential material 缺失,未执行权限 API 探测;不得声称 Contents、Metadata 或 Webhooks 权限已实际授予。
## 并行保护
- 已两次按 `stash -u``fetch``rebase origin/master``stash apply` 安全吸收主线。
- 最终吸收 `origin/master@3aaa2616`
- R1.2 保持 `[completed]``R1.2_Task_Report.md` 保留。
## 未执行事项
- 未创建假 token,未复制 SSH 私钥,未修改仓库可见性。
- 未手工 apply、Secret sync、PipelineRun、Argo sync/refresh、rollout 或 cutover。
- 未触发 PaC 或任何部署,只保留只读运行面证据。
## 当前结论
- R1.1 配置、schema、renderer、Secret、bridge、observer 与受控 fetch 的源码能力已落地并通过轻量验证。
- 外部 credential material 仍缺失,R1.1 保持 `in_progress`
- 凭据到位后的下一步仅允许通过受控 CLI 观察脱敏 permissionResult、hook reconciler 与自动交付收敛,不得以手工触发替代自动链路。
+1 -1
View File
@@ -4,7 +4,7 @@
打通 selfmedia WebTerm 在 NC01 的纯自动生产交付:以 config/selfmedia.yaml 与 platform-infra owning YAML 为唯一真相,修复 GitHub→Gitea mirror→PaC/Tekton→GitOps/Argo 的自动触发与可见性,使合并 pikainc/selfmedia/master 后无需人工触发即可构建并发布;保留零 RBAC runtime、双 PVC、YAML-first Secret、NetworkPolicy、公网 IP 152.53.229.148:4317,禁止用手工 PipelineRun、Argo sync/refresh、rollout 或 cutover 代替自动链路,完成任务后将详细报告写入[任务报告](./details/selfmedia-production-delivery/R1_Task_Report.md)。
### R1.1
### R1.1 [in_progress]
以 YAML-first 为 selfmedia-nc01 增加仓库级 GitHub authority:使用独立 sourceRef 提供 pikainc/selfmedia 私有仓库 Contents Read 与 Webhooks Read/Write 权限,校验权限/Secret presence 与脱敏 fingerprint;不扩大全局 gh_token.txt、不向 Codex 下发、不手工触发 PaC,待凭据到位后仅观察 hook reconciler 与自动交付收敛,并将详细报告写入任务报告,完成任务后将详细报告写入[任务报告](./details/selfmedia-production-delivery/R1.1_Task_Report.md)。