Files
awoooi/docs/security/gitea-authenticated-inventory-export-request.snapshot.json

169 lines
7.7 KiB
JSON
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.
{
"schema_version": "gitea_authenticated_inventory_export_request_v1",
"status": "draft_waiting_owner_export",
"date": "2026-05-13",
"mode": "redacted_export_request_only",
"runtime_execution_authorized": false,
"source_contract": "gitea_repo_inventory_v1",
"source_indexes": [
"docs/security/gitea-repo-inventory.snapshot.json",
"docs/security/gitea-public-repo-search.snapshot.json",
"docs/security/gitea-org-repo-inventory-blocked.snapshot.json",
"docs/security/local-git-remote-inventory.snapshot.json",
"docs/security/gitea-readonly-inventory-approval.snapshot.json",
"docs/security/security-rollout-policy.snapshot.json"
],
"summary": {
"gitea_base_url": "http://192.168.0.110:3001",
"org_or_user": "wooo",
"public_only_repo_count": 2,
"local_gitea_unique_repo_count": 4,
"local_gitea_gap_count": 2,
"export_source_option_count": 2,
"target_inventory_status": "gitea_repo_inventory_v1.status=ok",
"token_value_collection_allowed": false,
"write_token_allowed": false,
"repo_write_allowed": false,
"refs_sync_allowed": false,
"github_primary_switch_authorized": false,
"action_buttons_allowed": false
},
"export_source_options": [
{
"option_id": "gitea_readonly_token_api_inventory",
"title": "Gitea read-only token API inventory",
"request_status": "waiting_human_approval_or_owner_export",
"producer": "repo owner or security commander runs existing read-only inventory tool",
"allowed_processing": [
"使用 `GITEA_READONLY_TOKEN` 環境變數執行 `scripts/security/gitea-repo-inventory.py`",
"輸出只保存 `token_present=true`,不保存 token value",
"只查 repo metadatafull name、owner、private、archived、empty、default branch、redacted clone / ssh URL",
"產出 `gitea_repo_inventory_v1.status=ok` snapshot 等待人工 review"
],
"blocked_processing": [
"把 token value 寫入文件、LOGBOOK、shell script、snapshot 或對話",
"使用 write-capable token",
"建立、刪除、封存或修改 Gitea repo",
"sync refs 或切 GitHub primary"
],
"acceptance_gate": [
"`visibility_scope=authenticated`",
"`status=ok`",
"`repo_count` 大於或等於 public-only repo count",
"owner 必須確認 read-only token 沒有 write / admin / secret scope",
"敏感字串掃描不得出現 token、password、private key、webhook secret 或 repository secret value"
],
"execution_authorized": false
},
{
"option_id": "gitea_redacted_admin_export_inventory",
"title": "Gitea redacted admin export inventory",
"request_status": "waiting_human_approval_or_owner_export",
"producer": "Gitea administrator exports repo metadata and redacts before import",
"allowed_processing": [
"匯入已脫敏的 repo list JSON",
"只保留 repo metadata不保留 secret、webhook、deploy key 或 token material",
"產出 `visibility_scope=admin_export` 與 `status=ok` 的 inventory snapshot",
"將 export 與 local remote inventory 做 coverage review"
],
"blocked_processing": [
"匯入 Gitea DB dump、完整 git object pack、private key 或 webhook secret",
"保存 API token、PAT、cookie、session、CSRF token",
"用管理匯出直接建立 GitHub repo 或同步 refs",
"把 admin export 當成 primary cutover approval"
],
"acceptance_gate": [
"`visibility_scope=admin_export`",
"`status=ok`",
"每筆 repo 都可識別 `full_name` 或 `owner.login + name`",
"每筆 repo 都有 `private`、`archived`、`empty` 與 `default_branch` metadata",
"所有 URL 必須 redacted且不含 username、password 或 token"
],
"execution_authorized": false
}
],
"required_inventory_fields": [
"full_name or owner.login + name",
"name",
"owner.login",
"private",
"archived",
"empty",
"default_branch",
"clone_url_redacted",
"ssh_url_redacted",
"github_repo_candidate"
],
"coverage_gap_hints": [
{
"gap_id": "public_only_vs_local_gitea_gap",
"title": "Public-only API 與本機 Gitea remote 覆蓋差異",
"current_evidence": [
"Public-only Gitea API 目前只看到 `wooo/awoooi` 與 `wooo/ewoooc`",
"本機 remote inventory 看到 4 個 unique Gitea repos`wooo/awoooi`、`wooo/clawbot-v5`、`wooo/ewoooc`、`wooo/wooo-aiops`",
"至少 `wooo/clawbot-v5` 與 `wooo/wooo-aiops` 需要 authenticated inventory 或 owner attestation 解釋"
],
"required_resolution": [
"authenticated inventory 或 admin export 必須包含這些 local-gitea repos或由 owner 明確標註為 external / legacy / inaccessible",
"缺口只能進 owner review不得自動建立、刪除或封存 repo"
],
"execution_authorized": false
},
{
"gap_id": "org_endpoint_blocked_gap",
"title": "Gitea org endpoint 未認證查詢 blocked",
"current_evidence": [
"`orgs/wooo/repos` 未認證查詢先前為 blocked / 404 evidence",
"`users/wooo/repos` 與 public search 都只代表 public-only 可見範圍"
],
"required_resolution": [
"用 read-only token 或 redacted admin export 確認 `wooo` 是 user、org 或混合來源",
"不得把未認證 404 解讀為沒有 private/internal repos"
],
"execution_authorized": false
},
{
"gap_id": "internal_110_adjacent_source_gap",
"title": "110 internal git adjacent source-control gap",
"current_evidence": [
"本機 remote inventory 另看到 internal 110 repos`bitan-pharmacy`、`root/momo-pro-system`、`tsenyang-website`、`wooo/wooo-infra-config`",
"這些不等同 Gitea org inventory但會影響完整專案版本遷移"
],
"required_resolution": [
"Gitea authenticated inventory 完成後,仍需 owner 判定 internal 110 repos 是否屬於同一輪 GitHub migration scope",
"不得在 Gitea inventory request 中自動合併 internal 110 source"
],
"execution_authorized": false
}
],
"acceptance_rules": [
"S4.5 完成只代表 Gitea authenticated inventory export request 已定義,不代表 inventory 已取得。",
"真正完成 gate 必須讓 `gitea_repo_inventory_v1.status=ok`,且 `visibility_scope` 為 `authenticated` 或 `admin_export`。",
"export 必須能解釋 public-only repo count 2 與 local Gitea unique repo count 4 之間的 gap。",
"所有敏感值必須拒收並進 mirror quarantine。",
"通過 inventory gate 後仍只能更新 migration matrix、decision table、approval board 與 readiness gate不得同步 refs 或切 GitHub primary。"
],
"redaction_rules": [
"API token 只允許以 `token_present=true|false` 表示,不保存 value。",
"URL 必須移除 username、password、token 與 query secret只保留 redacted clone / ssh URL。",
"不得保存 webhook secret、repository secret value、deploy key private key、runner registration token、cookie、session 或 CSRF token。",
"不得保存 Gitea DB dump、完整 git object pack 或任何可還原 credentials 的 partial token。",
"任何含敏感值的 export 必須拒收,不得人工手改後直接入庫。"
],
"forbidden_actions": [
"store_token_value",
"use_write_capable_token",
"write_to_gitea",
"create_gitea_repo",
"delete_or_archive_gitea_repo",
"create_github_repo",
"change_repo_visibility",
"sync_git_refs",
"delete_git_refs",
"force_push",
"switch_github_primary",
"disable_gitea",
"add_action_button"
]
}