7.6 KiB
Source Control Canonical Repo 判定表
| 項目 | 內容 |
|---|---|
| 日期 | 2026-05-12 |
| 狀態 | 第一版,read-only evidence |
| 上游 evidence | docs/security/GITEA-PUBLIC-REPO-SEARCH-SNAPSHOT.md、docs/security/LOCAL-GIT-REMOTE-INVENTORY-SNAPSHOT.md、docs/security/GITHUB-TARGET-PROBE-SNAPSHOT.md、docs/security/GITHUB-TARGET-VISIBILITY-DECISION-TABLE.md、docs/security/LOCAL-REPO-CANONICAL-EWOOOC-MOMO-SNAPSHOT.md |
| 原則 | 只判定風險與下一步,不合併、不同步、不刪除、不切 primary |
0. 核心結論
目前不能假設「本機資料夾名稱相近」就代表同一個 canonical repo。
尤其 momo-pro-system、momo_pro_system、wooo/ewoooc、root/momo-pro-system 看起來高度相關,但來源 remote、repo host、HEAD 都不同。第一輪本機 lineage probe 顯示三個 working tree 在最近 100 個 commits sample 內沒有共同 commit,因此這一組必須先人工判定 canonical 關係,否則 GitHub 遷移時可能發生錯誤合併、漏轉、或把舊版覆蓋新版。
1. Server-side public search 結果
未提供 token 的 Gitea users/wooo/repos 與 public repo search 可見:
| Gitea repo | default branch | GitHub candidate | 狀態 |
|---|---|---|---|
wooo/awoooi |
main |
owenhytsai/awoooi |
已有 GitHub,但 refs blocked |
wooo/ewoooc |
main |
owenhytsai/ewoooc |
GitHub candidate 未建立或不可見 |
此結果只代表 public-only 可見範圍,private/internal repos 仍需只讀 token 或管理匯出。操作契約見 docs/security/GITEA-SERVER-SIDE-INVENTORY-RUNBOOK.md。
2. P0 canonical 判定
| 群組 | Evidence | 目前判定 | 風險 | 下一步 |
|---|---|---|---|---|
ewoooc / momo-pro-system |
wooo/ewoooc public Gitea repo;/Users/ogt/momo-pro-system 與 iCloud momo-pro-system 都指向 Gitea;lineage probe 顯示兩份 working tree no_shared_history |
待人工判定,禁止自動視為複本 | 同名資料夾不同 HEAD,且近期 sample 無共同 commit;GitHub target 未確認 | 確認部署真相、完整 refs / ancestry 後再決定 GitHub target |
momo_pro_system / GitLab 110 |
/Users/ogt/momo_pro_system 指向 root/momo-pro-system GitLab 類 remote;lineage probe 顯示與 Gitea 兩份 working tree no_shared_history |
待人工判定,禁止自動合併 | 可能是同產品不同歷史、舊版重建、或完全不同 repo | 確認是否仍 active、不得自動合併 |
bitan-pharmacy |
指向 110 SSH 類 remote;110 remote main 與本機 main 對齊;GitHub owenhytsai/bitan-pharmacy 未授權 probe 看不到 |
待建立 target | GitHub target 未確認 | 確認是否 active、建立或指定 GitHub target |
tsenyang-website |
指向 110 SSH 類 remote;110 remote main 與本機 main 對齊;GitHub owenhytsai/tsenyang-website 未授權 probe 看不到 |
待建立 target | GitHub target 未確認 | 確認是否仍 active、建立或指定 GitHub target |
wooo-infra-config |
GitHub remote 存在且 main 與本機對齊;110 internal remote 因 SSH 權限不足或不可讀 |
待判定 110 remote 用途 | 可能是舊 remote、mirror、或權限未配置 | 確認 110 remote 用途;若為舊 remote,降級或移除 |
2.1 GitHub target probe
| GitHub repo | probe status | heads | 判定 |
|---|---|---|---|
owenhytsai/awoooi |
exists |
2 |
可見但 refs blocked |
owenhytsai/clawbot-v5 |
exists |
1 |
可見但 refs blocked |
owenhytsai/wooo-aiops |
exists |
3 |
可見但 refs blocked |
owenhytsai/wooo-infra-config |
exists |
1 |
可見,需判斷 110 internal remote |
owenhytsai/ewoooc |
not_found_or_private |
0 |
未建立或為 private 且未授權,不能當作已轉移 |
owenhytsai/bitan-pharmacy |
not_found_or_private |
0 |
未建立或為 private 且未授權,不能當作已轉移 |
owenhytsai/tsenyang-website |
not_found_or_private |
0 |
未建立或為 private 且未授權,不能當作已轉移 |
nexu-io/open-design |
exists |
186 |
外部/設計 repo,需 scope 判定 |
2.1.1 GitHub target 決策
docs/security/GITHUB-TARGET-VISIBILITY-DECISION-TABLE.md 顯示:
| 類型 | Repos | 判定 |
|---|---|---|
| refs blocked | awoooi、clawbot-v5、wooo-aiops |
不得切 primary,需 refs reconcile approval |
| create / grant access after approval | ewoooc、bitan-pharmacy、tsenyang-website |
不得自動建立或修改 visibility |
| internal remote purpose pending | wooo-infra-config |
需確認 110 internal remote 用途 |
| external scope | nexu-io/open-design |
先做 scope review |
此決策只補足 target owner / visibility 的下一步,不取代 canonical 判定與 server-side refs diff。
2.2 Internal 110 refs probe
docs/security/GIT-REMOTE-REFS-BITAN-TSENYANG-SNAPSHOT.md 顯示:
| Repo | Relation | Heads | Tags | 判定 |
|---|---|---|---|---|
bitan-pharmacy |
aligned_current_branch |
1 |
0 |
110 remote 可作為 source candidate,但 GitHub target 未確認 |
tsenyang-website |
aligned_current_branch |
1 |
0 |
110 remote 可作為 source candidate,但 GitHub target 未確認 |
wooo-infra-config GitHub |
aligned_current_branch |
1 |
0 |
GitHub target 可讀且與本機 main 對齊 |
wooo-infra-config 110 internal |
unreachable |
0 |
0 |
110 internal remote 用途與權限待判定 |
3. 本機 lineage evidence
docs/security/LOCAL-REPO-CANONICAL-EWOOOC-MOMO-SNAPSHOT.md 顯示:
| 比對 | Relation | Common commits |
|---|---|---|
local-momo-gitea vs icloud-momo-gitea |
no_shared_history |
0 |
local-momo-gitea vs local-momo-gitlab |
no_shared_history |
0 |
icloud-momo-gitea vs local-momo-gitlab |
no_shared_history |
0 |
此結果仍只代表本機 sample,未 fetch 遠端;但足以阻止自動把這三者當成同一個 repo 複本處理。
4. 本機 HEAD evidence
| Working tree | Remote 類型 | 短 SHA | 判定 |
|---|---|---|---|
/Users/ogt/momo-pro-system |
Gitea wooo/ewoooc |
61a9c4c |
不可直接視為 iCloud 複本 |
/Users/ogt/Library/Mobile Documents/com~apple~CloudDocs/momo-pro-system |
Gitea wooo/ewoooc |
fe6180b |
與本機 momo-pro-system 不同 HEAD |
/Users/ogt/momo_pro_system |
GitLab 類 110 remote | 5a4294e |
與 wooo/ewoooc 關係待判定 |
/Users/ogt/bitan-pharmacy |
110 SSH 類 remote | 7423a08 |
GitHub target 未確認 |
/Users/ogt/tsenyang-website |
110 SSH 類 remote | b103112 |
GitHub target 未確認 |
上述短 SHA 只用於人工辨識,不代表 server-side 最新狀態。
5. Credential hygiene
本輪 read-only 檢查發現,部分本機 remote URL 仍含 embedded credential 或個人 token 形式。文件只記錄風險,不記錄任何值。
後續處理 gate:
- 先完成 repo inventory 與 canonical 判定。
- 以 credential helper、只讀 token 或 secret store 取代 embedded credential。
- 對既有 token 做 rotation。
- 在 AwoooP / AWOOOI audit 中只記錄「已輪替」與 evidence ref,不記錄 token value。
6. 下一步
- 用只讀 token 或管理匯出取得 Gitea server 全量 repo list。
- 對
wooo/ewoooc與root/momo-pro-system做 server-side refs diff。 - 確認三個 momo/ewoooc working tree 的產品關係與部署真相。
- 確認
bitan-pharmacy、tsenyang-website是否仍 active。 - 依 GitHub target 決策表完成 repo / owner / visibility approval。
- 完成 canonical 判定前,不建立自動 mirror、不刪除任何 remote、不切 GitHub primary。