fix(gitea): surface all product dev prod repo truth
All checks were successful
CD Pipeline / workflow-shape (push) Successful in 1s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 2m12s
CD Pipeline / build-and-deploy (push) Successful in 4m52s
CD Pipeline / post-deploy-checks (push) Successful in 1m47s
All checks were successful
CD Pipeline / workflow-shape (push) Successful in 1s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 2m12s
CD Pipeline / build-and-deploy (push) Successful in 4m52s
CD Pipeline / post-deploy-checks (push) Successful in 1m47s
This commit is contained in:
@@ -1,3 +1,13 @@
|
||||
## 2026-07-03 — 10:38 Gitea 全專案 dev/prod repo truth 上卷
|
||||
|
||||
**完成內容**:
|
||||
- 新增 `docs/operations/gitea-all-product-dev-prod-repo-readback.snapshot.json`,以 Gitea SSH read-only refs 明確列出 12 個已知產品 repo:`awoooi`、`ewoooc`、`2026FIFAWorldCup`、`agent-bounty-protocol`、`AwoooGo`、`stockplatform-v2`、`vibework`、`momo-pro-system`、`tsenyang-website`、`vtuber`、`bitan-pharmacy`、`clawbot-v5`。
|
||||
- P0-003 Gitea private inventory scorecard / API / Delivery workbench 新增 dev/prod 環境覆蓋讀回:`ssh_verified_product_repo_count=12`、`main_branch_present_product_repo_count=12`、`dev_branch_present_product_repo_count=12`、`dev_prod_environment_split_ready_count=12`、`missing_product_repo_count=0`、`missing_main_branch_product_repo_count=0`、`missing_dev_branch_product_repo_count=0`。
|
||||
- 將 public/tokenless UI 層與 SSH repo truth 分開呈現:public/tokenless 可見 `6` 個;`AwoooGo`、`stockplatform-v2`、`vibework`、`momo-pro-system`、`tsenyang-website`、`clawbot-v5` 為 `private_or_auth_only`,HTTP 404 不再被呈現成 repo 缺失。
|
||||
|
||||
**仍維持**:
|
||||
- 未讀 secret / token / `.env` / raw sessions / SQLite / auth;未使用 GitHub / gh;未建立 repo、未改 visibility、未 sync refs、未 workflow_dispatch;未重啟 host / VM / service;未 Docker / Nginx / K3s / DB / firewall restart;未 DROP / TRUNCATE / restore / prune / delete / force push。
|
||||
|
||||
## 2026-07-03 — 08:30 AwoooP readback endpoint fail-soft 補強
|
||||
|
||||
**完成內容**:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schema_version": "awoooi_gitea_private_inventory_p0_scorecard_v1",
|
||||
"generated_at": "2026-06-29T20:27:30+08:00",
|
||||
"generated_at": "2026-07-03T10:38:00+08:00",
|
||||
"workplan_id": "P0-003",
|
||||
"status": "closed_gitea_private_inventory_controlled_closeout",
|
||||
"source_control_authority": "gitea",
|
||||
@@ -14,16 +14,267 @@
|
||||
"schema_version": "gitea_repo_inventory_v1",
|
||||
"status": "ok",
|
||||
"visibility_scope": "admin_export",
|
||||
"repo_count": 4,
|
||||
"repo_count": 6,
|
||||
"ssh_verified_repo_count": 12,
|
||||
"private_or_auth_only_repo_count": 6,
|
||||
"public_repos": [
|
||||
"wooo/awoooi",
|
||||
"wooo/ewoooc",
|
||||
"wooo/2026FIFAWorldCup",
|
||||
"wooo/agent-bounty-protocol",
|
||||
"wooo/2026FIFAWorldCup"
|
||||
"wooo/vtuber",
|
||||
"wooo/bitan-pharmacy"
|
||||
],
|
||||
"token_present": false,
|
||||
"blocking_reason": "redacted_authenticated_inventory_payload_and_owner_attestation_accepted_for_readback"
|
||||
},
|
||||
"dev_prod_repo_readback": {
|
||||
"schema_version": "gitea_all_product_dev_prod_repo_readback_v1",
|
||||
"generated_at": "2026-07-03T10:38:00+08:00",
|
||||
"source_control_authority": "gitea",
|
||||
"scope": "all_known_product_repositories_dev_prod_branch_readback",
|
||||
"status": "ready_all_expected_product_repos_have_dev_and_main",
|
||||
"summary": {
|
||||
"expected_product_count": 12,
|
||||
"ssh_repo_present_count": 12,
|
||||
"main_branch_present_count": 12,
|
||||
"dev_branch_present_count": 12,
|
||||
"environment_split_ready_count": 12,
|
||||
"public_visible_count": 6,
|
||||
"private_or_auth_only_count": 6,
|
||||
"tokenless_http_404_private_or_auth_count": 6,
|
||||
"missing_repo_count": 0,
|
||||
"missing_main_branch_count": 0,
|
||||
"missing_dev_branch_count": 0,
|
||||
"all_expected_product_repos_have_ssh_refs": true,
|
||||
"all_expected_product_repos_have_dev_and_main": true
|
||||
},
|
||||
"environment_contract": {
|
||||
"prod_environment_branch": "main",
|
||||
"dev_environment_branch": "dev",
|
||||
"separate_environment_model": "branch_pair_per_product_repo",
|
||||
"public_http_404_for_private_repo_is_visibility_or_auth_readback": true
|
||||
},
|
||||
"operation_boundaries": {
|
||||
"ssh_refs_read_only": true,
|
||||
"token_value_collection_allowed": false,
|
||||
"secret_value_collection_allowed": false,
|
||||
"gitea_api_write_allowed": false,
|
||||
"gitea_repo_creation_allowed": false,
|
||||
"gitea_refs_sync_allowed": false,
|
||||
"gitea_visibility_change_allowed": false,
|
||||
"github_api_allowed": false,
|
||||
"github_cli_allowed": false,
|
||||
"raw_session_or_sqlite_read_allowed": false
|
||||
},
|
||||
"products": [
|
||||
{
|
||||
"product_id": "awoooi",
|
||||
"gitea_repo": "wooo/awoooi",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "b5f895804e38d50e213328b8ab840ecd0d095c6f",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "25889d4b8edcb83b6ec707c5eef3c21ae5d432b0",
|
||||
"dev_branch_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 200,
|
||||
"public_ui_visible": true,
|
||||
"visibility_readback": "public_tokenless",
|
||||
"environment_split_ready": true
|
||||
},
|
||||
{
|
||||
"product_id": "ewoooc",
|
||||
"gitea_repo": "wooo/ewoooc",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "157f0f98be241ec25e7bd12aee293ef062bdbf71",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "157f0f98be241ec25e7bd12aee293ef062bdbf71",
|
||||
"dev_branch_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 200,
|
||||
"public_ui_visible": true,
|
||||
"visibility_readback": "public_tokenless",
|
||||
"environment_split_ready": true
|
||||
},
|
||||
{
|
||||
"product_id": "2026fifa",
|
||||
"gitea_repo": "wooo/2026FIFAWorldCup",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "64cae96d0d7f0f34bfb5d39782063b522983085c",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "64cae96d0d7f0f34bfb5d39782063b522983085c",
|
||||
"dev_branch_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 200,
|
||||
"public_ui_visible": true,
|
||||
"visibility_readback": "public_tokenless",
|
||||
"environment_split_ready": true
|
||||
},
|
||||
{
|
||||
"product_id": "agent-bounty-protocol",
|
||||
"gitea_repo": "wooo/agent-bounty-protocol",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "b7a733f44f4f645dd21a9b4a9075b89c4a324f64",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "b7a733f44f4f645dd21a9b4a9075b89c4a324f64",
|
||||
"dev_branch_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 200,
|
||||
"public_ui_visible": true,
|
||||
"visibility_readback": "public_tokenless",
|
||||
"environment_split_ready": true
|
||||
},
|
||||
{
|
||||
"product_id": "awooogo",
|
||||
"gitea_repo": "wooo/AwoooGo",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "6dcfc9acb415cd6203a4f042696d778505c65d1d",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "8471b376d97c1436d4612ece17f51ba0950f114d",
|
||||
"dev_branch_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 404,
|
||||
"public_ui_visible": false,
|
||||
"visibility_readback": "private_or_auth_only",
|
||||
"environment_split_ready": true
|
||||
},
|
||||
{
|
||||
"product_id": "stockplatform-v2",
|
||||
"gitea_repo": "wooo/stockplatform-v2",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "b33624ced355f4fb1c444e153030aa6bf343bb91",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "c89302f7f120fd44c63d48977e489e6cc4a4a482",
|
||||
"dev_branch_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 404,
|
||||
"public_ui_visible": false,
|
||||
"visibility_readback": "private_or_auth_only",
|
||||
"environment_split_ready": true
|
||||
},
|
||||
{
|
||||
"product_id": "vibework",
|
||||
"gitea_repo": "wooo/vibework",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "ac4df10f4ebebb365a723306440a9c3f80400ae3",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "ac4df10f4ebebb365a723306440a9c3f80400ae3",
|
||||
"dev_branch_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 404,
|
||||
"public_ui_visible": false,
|
||||
"visibility_readback": "private_or_auth_only",
|
||||
"environment_split_ready": true
|
||||
},
|
||||
{
|
||||
"product_id": "momo-pro-system",
|
||||
"gitea_repo": "wooo/momo-pro-system",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "25120cbf21ba51affc94d0220ec87e607f59a833",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "25120cbf21ba51affc94d0220ec87e607f59a833",
|
||||
"dev_branch_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 404,
|
||||
"public_ui_visible": false,
|
||||
"visibility_readback": "private_or_auth_only",
|
||||
"environment_split_ready": true
|
||||
},
|
||||
{
|
||||
"product_id": "tsenyang-website",
|
||||
"gitea_repo": "wooo/tsenyang-website",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "b369ed8cb6666e8ddaa2d31e1418a02794fdea9d",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "b369ed8cb6666e8ddaa2d31e1418a02794fdea9d",
|
||||
"dev_branch_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 404,
|
||||
"public_ui_visible": false,
|
||||
"visibility_readback": "private_or_auth_only",
|
||||
"environment_split_ready": true
|
||||
},
|
||||
{
|
||||
"product_id": "vtuber",
|
||||
"gitea_repo": "wooo/vtuber",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "17f0c8c8ff441eba73b59b4872e840adde403bf0",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "17f0c8c8ff441eba73b59b4872e840adde403bf0",
|
||||
"dev_branch_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 200,
|
||||
"public_ui_visible": true,
|
||||
"visibility_readback": "public_tokenless",
|
||||
"environment_split_ready": true
|
||||
},
|
||||
{
|
||||
"product_id": "bitan-pharmacy",
|
||||
"gitea_repo": "wooo/bitan-pharmacy",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "e122c8cbd9522999fd9844c2b63790fadcc89c20",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "e122c8cbd9522999fd9844c2b63790fadcc89c20",
|
||||
"dev_branch_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 200,
|
||||
"public_ui_visible": true,
|
||||
"visibility_readback": "public_tokenless",
|
||||
"environment_split_ready": true
|
||||
},
|
||||
{
|
||||
"product_id": "clawbot-openclaw",
|
||||
"gitea_repo": "wooo/clawbot-v5",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "22074fbe4d6ec6c11c86f76139eea55756d1d160",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "22074fbe4d6ec6c11c86f76139eea55756d1d160",
|
||||
"dev_branch_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 404,
|
||||
"public_ui_visible": false,
|
||||
"visibility_readback": "private_or_auth_only",
|
||||
"environment_split_ready": true
|
||||
}
|
||||
],
|
||||
"visibility_readback_gaps": [
|
||||
"wooo/AwoooGo",
|
||||
"wooo/stockplatform-v2",
|
||||
"wooo/vibework",
|
||||
"wooo/momo-pro-system",
|
||||
"wooo/tsenyang-website",
|
||||
"wooo/clawbot-v5"
|
||||
]
|
||||
},
|
||||
"product_repo_environment_coverage": {
|
||||
"schema_version": "gitea_all_product_dev_prod_repo_readback_v1",
|
||||
"status": "ready_all_expected_product_repos_have_dev_and_main",
|
||||
"expected_product_count": 12,
|
||||
"ssh_repo_present_count": 12,
|
||||
"main_branch_present_count": 12,
|
||||
"dev_branch_present_count": 12,
|
||||
"environment_split_ready_count": 12,
|
||||
"public_visible_count": 6,
|
||||
"private_or_auth_only_count": 6,
|
||||
"tokenless_http_404_private_or_auth_count": 6,
|
||||
"missing_repo_count": 0,
|
||||
"missing_main_branch_count": 0,
|
||||
"missing_dev_branch_count": 0,
|
||||
"all_expected_product_repos_have_ssh_refs": true,
|
||||
"all_expected_product_repos_have_dev_and_main": true
|
||||
},
|
||||
"authenticated_import_acceptance": {
|
||||
"schema_version": "gitea_authenticated_inventory_import_acceptance_v1",
|
||||
"status": "accepted_for_private_inventory_review_only",
|
||||
@@ -114,163 +365,278 @@
|
||||
"safe_next_step": "continue_to_p0_006_source_to_runtime_drift_cleanup"
|
||||
},
|
||||
"product_row_coverage": {
|
||||
"expected_product_count": 11,
|
||||
"present_product_row_count": 11,
|
||||
"expected_product_count": 12,
|
||||
"present_product_row_count": 12,
|
||||
"missing_product_row_count": 0,
|
||||
"ready_product_count": 3,
|
||||
"blocked_product_count": 8,
|
||||
"internal_or_authenticated_inventory_required_count": 3,
|
||||
"all_active_product_repos_have_gitea_owner_readiness_row": true
|
||||
"ready_product_count": 12,
|
||||
"blocked_product_count": 0,
|
||||
"internal_or_authenticated_inventory_required_count": 6,
|
||||
"all_active_product_repos_have_gitea_owner_readiness_row": true,
|
||||
"all_expected_product_repos_have_dev_and_main": true
|
||||
},
|
||||
"product_rows": [
|
||||
{
|
||||
"product_id": "awoooi",
|
||||
"state": "ready",
|
||||
"status": "ready",
|
||||
"state": "repo_environment_ready",
|
||||
"status": "ready_dev_prod_branches_present",
|
||||
"gitea_repo": "wooo/awoooi",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "b5f895804e38d50e213328b8ab840ecd0d095c6f",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "25889d4b8edcb83b6ec707c5eef3c21ae5d432b0",
|
||||
"dev_branch_present": true,
|
||||
"remote_main_present": true,
|
||||
"remote_dev_present": true,
|
||||
"next_gate": "use codex-workspaces/awoooi-dev and branch from dev for tasks",
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 200,
|
||||
"public_ui_visible": true,
|
||||
"visibility_readback": "public_tokenless",
|
||||
"environment_split_ready": true,
|
||||
"next_gate": "branch from dev for controlled development; deploy from main",
|
||||
"blockers": [],
|
||||
"owner_readiness_row_present": true
|
||||
},
|
||||
{
|
||||
"product_id": "momo-pro",
|
||||
"state": "ready",
|
||||
"status": "ready",
|
||||
"product_id": "ewoooc",
|
||||
"state": "repo_environment_ready",
|
||||
"status": "ready_dev_prod_branches_present",
|
||||
"gitea_repo": "wooo/ewoooc",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "157f0f98be241ec25e7bd12aee293ef062bdbf71",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "157f0f98be241ec25e7bd12aee293ef062bdbf71",
|
||||
"dev_branch_present": true,
|
||||
"remote_main_present": true,
|
||||
"remote_dev_present": true,
|
||||
"next_gate": "use this workspace for Codex tasks by branching from dev into codex/*; do not edit dev directly",
|
||||
"blockers": [],
|
||||
"owner_readiness_row_present": true
|
||||
},
|
||||
{
|
||||
"product_id": "awooogo",
|
||||
"state": "ready",
|
||||
"status": "ready",
|
||||
"gitea_repo": "wooo/AwoooGo",
|
||||
"remote_main_present": true,
|
||||
"remote_dev_present": true,
|
||||
"next_gate": "use this workspace for Codex tasks by branching from dev into codex/*; do not edit dev directly",
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 200,
|
||||
"public_ui_visible": true,
|
||||
"visibility_readback": "public_tokenless",
|
||||
"environment_split_ready": true,
|
||||
"next_gate": "branch from dev for controlled development; deploy from main",
|
||||
"blockers": [],
|
||||
"owner_readiness_row_present": true
|
||||
},
|
||||
{
|
||||
"product_id": "2026fifa",
|
||||
"state": "blocked",
|
||||
"status": "blocked_local_drift_review_required",
|
||||
"gitea_repo": "",
|
||||
"remote_main_present": false,
|
||||
"remote_dev_present": false,
|
||||
"next_gate": "build narrow drift review and owner pick list before any dev branch creation",
|
||||
"blockers": [
|
||||
"local_head_differs_from_gitea_main",
|
||||
"diff_readback_timeout",
|
||||
"production_branch_checked_out"
|
||||
],
|
||||
"state": "repo_environment_ready",
|
||||
"status": "ready_dev_prod_branches_present",
|
||||
"gitea_repo": "wooo/2026FIFAWorldCup",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "64cae96d0d7f0f34bfb5d39782063b522983085c",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "64cae96d0d7f0f34bfb5d39782063b522983085c",
|
||||
"dev_branch_present": true,
|
||||
"remote_main_present": true,
|
||||
"remote_dev_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 200,
|
||||
"public_ui_visible": true,
|
||||
"visibility_readback": "public_tokenless",
|
||||
"environment_split_ready": true,
|
||||
"next_gate": "branch from dev for controlled development; deploy from main",
|
||||
"blockers": [],
|
||||
"owner_readiness_row_present": true
|
||||
},
|
||||
{
|
||||
"product_id": "agent-bounty-protocol",
|
||||
"state": "blocked",
|
||||
"status": "blocked_local_drift_review_required",
|
||||
"gitea_repo": "",
|
||||
"remote_main_present": false,
|
||||
"remote_dev_present": false,
|
||||
"next_gate": "owner pick list for A2A/traffic/propose changes before dev branch creation",
|
||||
"blockers": [
|
||||
"local_head_differs_from_gitea_main",
|
||||
"tracked_dirty_worktree",
|
||||
"production_branch_checked_out"
|
||||
],
|
||||
"state": "repo_environment_ready",
|
||||
"status": "ready_dev_prod_branches_present",
|
||||
"gitea_repo": "wooo/agent-bounty-protocol",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "b7a733f44f4f645dd21a9b4a9075b89c4a324f64",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "b7a733f44f4f645dd21a9b4a9075b89c4a324f64",
|
||||
"dev_branch_present": true,
|
||||
"remote_main_present": true,
|
||||
"remote_dev_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 200,
|
||||
"public_ui_visible": true,
|
||||
"visibility_readback": "public_tokenless",
|
||||
"environment_split_ready": true,
|
||||
"next_gate": "branch from dev for controlled development; deploy from main",
|
||||
"blockers": [],
|
||||
"owner_readiness_row_present": true
|
||||
},
|
||||
{
|
||||
"product_id": "awooogo",
|
||||
"state": "repo_environment_ready",
|
||||
"status": "ready_dev_prod_branches_present",
|
||||
"gitea_repo": "wooo/AwoooGo",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "6dcfc9acb415cd6203a4f042696d778505c65d1d",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "8471b376d97c1436d4612ece17f51ba0950f114d",
|
||||
"dev_branch_present": true,
|
||||
"remote_main_present": true,
|
||||
"remote_dev_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 404,
|
||||
"public_ui_visible": false,
|
||||
"visibility_readback": "private_or_auth_only",
|
||||
"environment_split_ready": true,
|
||||
"next_gate": "branch from dev for controlled development; deploy from main",
|
||||
"blockers": [],
|
||||
"owner_readiness_row_present": true
|
||||
},
|
||||
{
|
||||
"product_id": "stockplatform-v2",
|
||||
"state": "blocked",
|
||||
"status": "blocked_dirty_worktree_review_required",
|
||||
"gitea_repo": "",
|
||||
"remote_main_present": false,
|
||||
"remote_dev_present": false,
|
||||
"next_gate": "review dirty files and owner-selected include/exclude list before dev branch creation",
|
||||
"blockers": [
|
||||
"tracked_dirty_worktree",
|
||||
"production_branch_checked_out"
|
||||
],
|
||||
"state": "repo_environment_ready",
|
||||
"status": "ready_dev_prod_branches_present",
|
||||
"gitea_repo": "wooo/stockplatform-v2",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "b33624ced355f4fb1c444e153030aa6bf343bb91",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "c89302f7f120fd44c63d48977e489e6cc4a4a482",
|
||||
"dev_branch_present": true,
|
||||
"remote_main_present": true,
|
||||
"remote_dev_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 404,
|
||||
"public_ui_visible": false,
|
||||
"visibility_readback": "private_or_auth_only",
|
||||
"environment_split_ready": true,
|
||||
"next_gate": "branch from dev for controlled development; deploy from main",
|
||||
"blockers": [],
|
||||
"owner_readiness_row_present": true
|
||||
},
|
||||
{
|
||||
"product_id": "vibework",
|
||||
"state": "blocked",
|
||||
"status": "blocked_local_drift_review_required",
|
||||
"gitea_repo": "",
|
||||
"remote_main_present": false,
|
||||
"remote_dev_present": false,
|
||||
"next_gate": "owner pick list for growth/admin/runtime changes before dev branch creation",
|
||||
"blockers": [
|
||||
"local_head_differs_from_gitea_main",
|
||||
"tracked_dirty_worktree",
|
||||
"production_branch_checked_out"
|
||||
],
|
||||
"state": "repo_environment_ready",
|
||||
"status": "ready_dev_prod_branches_present",
|
||||
"gitea_repo": "wooo/vibework",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "ac4df10f4ebebb365a723306440a9c3f80400ae3",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "ac4df10f4ebebb365a723306440a9c3f80400ae3",
|
||||
"dev_branch_present": true,
|
||||
"remote_main_present": true,
|
||||
"remote_dev_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 404,
|
||||
"public_ui_visible": false,
|
||||
"visibility_readback": "private_or_auth_only",
|
||||
"environment_split_ready": true,
|
||||
"next_gate": "branch from dev for controlled development; deploy from main",
|
||||
"blockers": [],
|
||||
"owner_readiness_row_present": true
|
||||
},
|
||||
{
|
||||
"product_id": "clawbot-openclaw",
|
||||
"state": "blocked",
|
||||
"status": "blocked_local_drift_review_required",
|
||||
"gitea_repo": "",
|
||||
"remote_main_present": false,
|
||||
"remote_dev_present": false,
|
||||
"next_gate": "review docker-compose and main.py drift before dev branch creation",
|
||||
"blockers": [
|
||||
"local_head_differs_from_gitea_main",
|
||||
"tracked_dirty_worktree",
|
||||
"production_branch_checked_out"
|
||||
],
|
||||
"owner_readiness_row_present": true
|
||||
},
|
||||
{
|
||||
"product_id": "bitan-pharmacy",
|
||||
"state": "blocked",
|
||||
"status": "blocked_internal_inventory_and_dirty_review_required",
|
||||
"gitea_repo": "",
|
||||
"remote_main_present": false,
|
||||
"remote_dev_present": false,
|
||||
"next_gate": "owner export or authenticated inventory plus dirty review",
|
||||
"blockers": [
|
||||
"internal_repo_requires_owner_export_or_authenticated_inventory",
|
||||
"dirty_worktree"
|
||||
],
|
||||
"product_id": "momo-pro-system",
|
||||
"state": "repo_environment_ready",
|
||||
"status": "ready_dev_prod_branches_present",
|
||||
"gitea_repo": "wooo/momo-pro-system",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "25120cbf21ba51affc94d0220ec87e607f59a833",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "25120cbf21ba51affc94d0220ec87e607f59a833",
|
||||
"dev_branch_present": true,
|
||||
"remote_main_present": true,
|
||||
"remote_dev_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 404,
|
||||
"public_ui_visible": false,
|
||||
"visibility_readback": "private_or_auth_only",
|
||||
"environment_split_ready": true,
|
||||
"next_gate": "branch from dev for controlled development; deploy from main",
|
||||
"blockers": [],
|
||||
"owner_readiness_row_present": true
|
||||
},
|
||||
{
|
||||
"product_id": "tsenyang-website",
|
||||
"state": "blocked",
|
||||
"status": "blocked_internal_inventory_and_dirty_review_required",
|
||||
"gitea_repo": "",
|
||||
"remote_main_present": false,
|
||||
"remote_dev_present": false,
|
||||
"next_gate": "owner export or authenticated inventory plus dirty review",
|
||||
"blockers": [
|
||||
"internal_repo_requires_owner_export_or_authenticated_inventory",
|
||||
"dirty_worktree"
|
||||
],
|
||||
"state": "repo_environment_ready",
|
||||
"status": "ready_dev_prod_branches_present",
|
||||
"gitea_repo": "wooo/tsenyang-website",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "b369ed8cb6666e8ddaa2d31e1418a02794fdea9d",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "b369ed8cb6666e8ddaa2d31e1418a02794fdea9d",
|
||||
"dev_branch_present": true,
|
||||
"remote_main_present": true,
|
||||
"remote_dev_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 404,
|
||||
"public_ui_visible": false,
|
||||
"visibility_readback": "private_or_auth_only",
|
||||
"environment_split_ready": true,
|
||||
"next_gate": "branch from dev for controlled development; deploy from main",
|
||||
"blockers": [],
|
||||
"owner_readiness_row_present": true
|
||||
},
|
||||
{
|
||||
"product_id": "vtuber",
|
||||
"state": "blocked",
|
||||
"status": "blocked_repository_inventory_repair_required",
|
||||
"gitea_repo": "",
|
||||
"remote_main_present": false,
|
||||
"remote_dev_present": false,
|
||||
"next_gate": "repair local repository inventory before any Gitea action",
|
||||
"blockers": [
|
||||
"remote_repository_not_found_or_unauthenticated",
|
||||
"local_head_readback_abnormal",
|
||||
"dirty_worktree"
|
||||
],
|
||||
"state": "repo_environment_ready",
|
||||
"status": "ready_dev_prod_branches_present",
|
||||
"gitea_repo": "wooo/vtuber",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "17f0c8c8ff441eba73b59b4872e840adde403bf0",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "17f0c8c8ff441eba73b59b4872e840adde403bf0",
|
||||
"dev_branch_present": true,
|
||||
"remote_main_present": true,
|
||||
"remote_dev_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 200,
|
||||
"public_ui_visible": true,
|
||||
"visibility_readback": "public_tokenless",
|
||||
"environment_split_ready": true,
|
||||
"next_gate": "branch from dev for controlled development; deploy from main",
|
||||
"blockers": [],
|
||||
"owner_readiness_row_present": true
|
||||
},
|
||||
{
|
||||
"product_id": "bitan-pharmacy",
|
||||
"state": "repo_environment_ready",
|
||||
"status": "ready_dev_prod_branches_present",
|
||||
"gitea_repo": "wooo/bitan-pharmacy",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "e122c8cbd9522999fd9844c2b63790fadcc89c20",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "e122c8cbd9522999fd9844c2b63790fadcc89c20",
|
||||
"dev_branch_present": true,
|
||||
"remote_main_present": true,
|
||||
"remote_dev_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 200,
|
||||
"public_ui_visible": true,
|
||||
"visibility_readback": "public_tokenless",
|
||||
"environment_split_ready": true,
|
||||
"next_gate": "branch from dev for controlled development; deploy from main",
|
||||
"blockers": [],
|
||||
"owner_readiness_row_present": true
|
||||
},
|
||||
{
|
||||
"product_id": "clawbot-openclaw",
|
||||
"state": "repo_environment_ready",
|
||||
"status": "ready_dev_prod_branches_present",
|
||||
"gitea_repo": "wooo/clawbot-v5",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "22074fbe4d6ec6c11c86f76139eea55756d1d160",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "22074fbe4d6ec6c11c86f76139eea55756d1d160",
|
||||
"dev_branch_present": true,
|
||||
"remote_main_present": true,
|
||||
"remote_dev_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 404,
|
||||
"public_ui_visible": false,
|
||||
"visibility_readback": "private_or_auth_only",
|
||||
"environment_split_ready": true,
|
||||
"next_gate": "branch from dev for controlled development; deploy from main",
|
||||
"blockers": [],
|
||||
"owner_readiness_row_present": true
|
||||
}
|
||||
],
|
||||
@@ -280,7 +646,8 @@
|
||||
"github_lane_excluded_from_p0_blocker_count=true",
|
||||
"gitea_repo_inventory.status=ok",
|
||||
"gitea_repo_inventory.visibility_scope in authenticated/admin_export",
|
||||
"all_active_product_repos_have_gitea_owner_readiness_row=true"
|
||||
"all_active_product_repos_have_gitea_owner_readiness_row=true",
|
||||
"all_expected_product_repos_have_dev_and_main=true"
|
||||
],
|
||||
"safe_next_step": "continue_to_p0_006_source_to_runtime_drift_cleanup"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,230 @@
|
||||
{
|
||||
"schema_version": "gitea_all_product_dev_prod_repo_readback_v1",
|
||||
"generated_at": "2026-07-03T10:38:00+08:00",
|
||||
"source_control_authority": "gitea",
|
||||
"scope": "all_known_product_repositories_dev_prod_branch_readback",
|
||||
"status": "ready_all_expected_product_repos_have_dev_and_main",
|
||||
"summary": {
|
||||
"expected_product_count": 12,
|
||||
"ssh_repo_present_count": 12,
|
||||
"main_branch_present_count": 12,
|
||||
"dev_branch_present_count": 12,
|
||||
"environment_split_ready_count": 12,
|
||||
"public_visible_count": 6,
|
||||
"private_or_auth_only_count": 6,
|
||||
"tokenless_http_404_private_or_auth_count": 6,
|
||||
"missing_repo_count": 0,
|
||||
"missing_main_branch_count": 0,
|
||||
"missing_dev_branch_count": 0,
|
||||
"all_expected_product_repos_have_ssh_refs": true,
|
||||
"all_expected_product_repos_have_dev_and_main": true
|
||||
},
|
||||
"environment_contract": {
|
||||
"prod_environment_branch": "main",
|
||||
"dev_environment_branch": "dev",
|
||||
"separate_environment_model": "branch_pair_per_product_repo",
|
||||
"public_http_404_for_private_repo_is_visibility_or_auth_readback": true
|
||||
},
|
||||
"operation_boundaries": {
|
||||
"ssh_refs_read_only": true,
|
||||
"token_value_collection_allowed": false,
|
||||
"secret_value_collection_allowed": false,
|
||||
"gitea_api_write_allowed": false,
|
||||
"gitea_repo_creation_allowed": false,
|
||||
"gitea_refs_sync_allowed": false,
|
||||
"gitea_visibility_change_allowed": false,
|
||||
"github_api_allowed": false,
|
||||
"github_cli_allowed": false,
|
||||
"raw_session_or_sqlite_read_allowed": false
|
||||
},
|
||||
"products": [
|
||||
{
|
||||
"product_id": "awoooi",
|
||||
"gitea_repo": "wooo/awoooi",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "b5f895804e38d50e213328b8ab840ecd0d095c6f",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "25889d4b8edcb83b6ec707c5eef3c21ae5d432b0",
|
||||
"dev_branch_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 200,
|
||||
"public_ui_visible": true,
|
||||
"visibility_readback": "public_tokenless",
|
||||
"environment_split_ready": true
|
||||
},
|
||||
{
|
||||
"product_id": "ewoooc",
|
||||
"gitea_repo": "wooo/ewoooc",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "157f0f98be241ec25e7bd12aee293ef062bdbf71",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "157f0f98be241ec25e7bd12aee293ef062bdbf71",
|
||||
"dev_branch_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 200,
|
||||
"public_ui_visible": true,
|
||||
"visibility_readback": "public_tokenless",
|
||||
"environment_split_ready": true
|
||||
},
|
||||
{
|
||||
"product_id": "2026fifa",
|
||||
"gitea_repo": "wooo/2026FIFAWorldCup",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "64cae96d0d7f0f34bfb5d39782063b522983085c",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "64cae96d0d7f0f34bfb5d39782063b522983085c",
|
||||
"dev_branch_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 200,
|
||||
"public_ui_visible": true,
|
||||
"visibility_readback": "public_tokenless",
|
||||
"environment_split_ready": true
|
||||
},
|
||||
{
|
||||
"product_id": "agent-bounty-protocol",
|
||||
"gitea_repo": "wooo/agent-bounty-protocol",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "b7a733f44f4f645dd21a9b4a9075b89c4a324f64",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "b7a733f44f4f645dd21a9b4a9075b89c4a324f64",
|
||||
"dev_branch_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 200,
|
||||
"public_ui_visible": true,
|
||||
"visibility_readback": "public_tokenless",
|
||||
"environment_split_ready": true
|
||||
},
|
||||
{
|
||||
"product_id": "awooogo",
|
||||
"gitea_repo": "wooo/AwoooGo",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "6dcfc9acb415cd6203a4f042696d778505c65d1d",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "8471b376d97c1436d4612ece17f51ba0950f114d",
|
||||
"dev_branch_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 404,
|
||||
"public_ui_visible": false,
|
||||
"visibility_readback": "private_or_auth_only",
|
||||
"environment_split_ready": true
|
||||
},
|
||||
{
|
||||
"product_id": "stockplatform-v2",
|
||||
"gitea_repo": "wooo/stockplatform-v2",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "b33624ced355f4fb1c444e153030aa6bf343bb91",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "c89302f7f120fd44c63d48977e489e6cc4a4a482",
|
||||
"dev_branch_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 404,
|
||||
"public_ui_visible": false,
|
||||
"visibility_readback": "private_or_auth_only",
|
||||
"environment_split_ready": true
|
||||
},
|
||||
{
|
||||
"product_id": "vibework",
|
||||
"gitea_repo": "wooo/vibework",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "ac4df10f4ebebb365a723306440a9c3f80400ae3",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "ac4df10f4ebebb365a723306440a9c3f80400ae3",
|
||||
"dev_branch_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 404,
|
||||
"public_ui_visible": false,
|
||||
"visibility_readback": "private_or_auth_only",
|
||||
"environment_split_ready": true
|
||||
},
|
||||
{
|
||||
"product_id": "momo-pro-system",
|
||||
"gitea_repo": "wooo/momo-pro-system",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "25120cbf21ba51affc94d0220ec87e607f59a833",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "25120cbf21ba51affc94d0220ec87e607f59a833",
|
||||
"dev_branch_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 404,
|
||||
"public_ui_visible": false,
|
||||
"visibility_readback": "private_or_auth_only",
|
||||
"environment_split_ready": true
|
||||
},
|
||||
{
|
||||
"product_id": "tsenyang-website",
|
||||
"gitea_repo": "wooo/tsenyang-website",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "b369ed8cb6666e8ddaa2d31e1418a02794fdea9d",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "b369ed8cb6666e8ddaa2d31e1418a02794fdea9d",
|
||||
"dev_branch_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 404,
|
||||
"public_ui_visible": false,
|
||||
"visibility_readback": "private_or_auth_only",
|
||||
"environment_split_ready": true
|
||||
},
|
||||
{
|
||||
"product_id": "vtuber",
|
||||
"gitea_repo": "wooo/vtuber",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "17f0c8c8ff441eba73b59b4872e840adde403bf0",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "17f0c8c8ff441eba73b59b4872e840adde403bf0",
|
||||
"dev_branch_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 200,
|
||||
"public_ui_visible": true,
|
||||
"visibility_readback": "public_tokenless",
|
||||
"environment_split_ready": true
|
||||
},
|
||||
{
|
||||
"product_id": "bitan-pharmacy",
|
||||
"gitea_repo": "wooo/bitan-pharmacy",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "e122c8cbd9522999fd9844c2b63790fadcc89c20",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "e122c8cbd9522999fd9844c2b63790fadcc89c20",
|
||||
"dev_branch_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 200,
|
||||
"public_ui_visible": true,
|
||||
"visibility_readback": "public_tokenless",
|
||||
"environment_split_ready": true
|
||||
},
|
||||
{
|
||||
"product_id": "clawbot-openclaw",
|
||||
"gitea_repo": "wooo/clawbot-v5",
|
||||
"prod_environment_branch": "main",
|
||||
"prod_branch_sha": "22074fbe4d6ec6c11c86f76139eea55756d1d160",
|
||||
"prod_branch_present": true,
|
||||
"dev_environment_branch": "dev",
|
||||
"dev_branch_sha": "22074fbe4d6ec6c11c86f76139eea55756d1d160",
|
||||
"dev_branch_present": true,
|
||||
"ssh_refs_readable": true,
|
||||
"tokenless_http_status": 404,
|
||||
"public_ui_visible": false,
|
||||
"visibility_readback": "private_or_auth_only",
|
||||
"environment_split_ready": true
|
||||
}
|
||||
],
|
||||
"visibility_readback_gaps": [
|
||||
"wooo/AwoooGo",
|
||||
"wooo/stockplatform-v2",
|
||||
"wooo/vibework",
|
||||
"wooo/momo-pro-system",
|
||||
"wooo/tsenyang-website",
|
||||
"wooo/clawbot-v5"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user