diff --git a/apps/web/messages/en.json b/apps/web/messages/en.json index f8d5a5878..ff94e4a84 100644 --- a/apps/web/messages/en.json +++ b/apps/web/messages/en.json @@ -11859,60 +11859,15 @@ "actionButtonsLocked": "此頁不放直接危險按鈕;AI controlled work item 仍可由受控流程推進。" } }, - "githubTenantReadinessScope": { - "title": "GitHub 主要來源就緒度租戶範圍", - "subtitle": "租戶管理同步顯示 AWOOOI 第一租戶與Gitea 轉 GitHub的原始碼管控負責人範圍缺口;這不是租戶政策、專案庫建立或主要來源切換授權。", - "badge": "只讀範圍", - "openIwooos": "開啟 IwoooS", - "scopeRefsTitle": "負責人範圍參照", - "boundaryLabel": "租戶 / GitHub邊界", - "boundaryTitle": "租戶範圍仍等待負責人回覆", - "boundaryDetail": "這個面板只呈現租戶與原始碼管控就緒度的對應關係;不變更租戶遷移模式、不改租戶政策、不建立 GitHub 專案庫、不改分支 / 標籤參照、不收機密明文值、不切主要來源,也不停用 Gitea。", - "metrics": { - "candidateRepos": { - "label": "候選專案庫", - "detail": "10 個候選專案庫只作為範圍可見性,不代表可建立 GitHub 專案庫。" - }, - "inScopeRepos": { - "label": "範圍內專案庫", - "detail": "9 個專案庫仍需負責人範圍決策與原始碼管控回覆。" - }, - "ownerResponses": { - "label": "負責人回覆", - "detail": "24 個回覆範本仍為 0 已收到 / 0 已接受。" - }, - "tenantScopeChanges": { - "label": "租戶範圍變更", - "detail": "目前為 0;不得因顯示就緒度而改租戶政策或遷移模式。" - } - }, - "scopeRefs": { - "tenantSourceScope": "AWOOOI 第一租戶只對應原始碼管控就緒範圍,不代表全平台或GitHub 主要來源已接受。", - "giteaInventoryOwner": "S4.9仍等待 Gitea 清冊負責人證明;覆蓋範圍接受前不得補寫專案庫範圍。", - "githubTargetOwner": "S4.10仍等待 GitHub 目標負責人決策;目標負責人未接受前不得建立專案庫或改可見性。", - "workflowSecretOwner": "S4.12只等待工作流程 / 機密名稱負責人回覆;仍不得收機密明文值或修改 GitHub 機密設定。" - }, - "boundaryItems": { - "sourceScopeWaiting": "租戶原始碼範圍仍等待正式負責人回覆。", - "ownerResponseWaiting": "專案庫負責人回覆尚未接受;此欄位只作 evidence,不阻擋低 / 中 / 高風險 controlled apply。", - "repoCreationLocked": "未取得正式決策前,不建立 GitHub 專案庫或修改可見性。", - "refsMutationLocked": "未取得分支 / 標籤真相證據前,不同步或修改 參照。", - "githubPrimaryLocked": "GitHub primary 尚未核准切換。", - "giteaDisableLocked": "Gitea 不得停用,仍是目前 CI/CD 來源。", - "tenantPolicyLocked": "租戶政策與遷移模式不得因就緒度顯示而改變。", - "runtimeLocked": "此租戶面板不直連執行期;AI controlled work item 仍由受控佇列與 verifier 推進。", - "actionButtonsLocked": "此頁不放直接危險按鈕;可回滾變更走 AI controlled queue。" - } - }, "ownerResponseValidationScope": { - "title": "負責人回覆驗收租戶範圍", - "subtitle": "租戶管理同步顯示 AWOOOI 第一租戶仍等待 S4.13 驗收彙整與S4.9-S4.12 四包來源回覆;這不是租戶政策、專案庫、分支 / 標籤參照、工作流程 / 機密設定或執行期授權。", + "title": "Controlled Apply 證據驗收租戶範圍", + "subtitle": "租戶管理同步顯示 AWOOOI 第一租戶的歷史 evidence ledger;低 / 中 / 高風險不因 owner 欄位 0/false 停止,改由 AI 補 selector、dry-run、rollback、verifier 與 writeback 後受控推進。", "badge": "只讀驗收範圍", "openIwooos": "開啟 IwoooS", "scopeRefsTitle": "租戶驗收參照", - "boundaryLabel": "租戶驗收邊界", - "boundaryTitle": "目前沒有可套用的租戶政策變更", - "boundaryDetail": "這個面板只顯示四包、24 個回覆範本、已收到 / 已接受 / 已拒收仍為 0,以及 AWOOOI 第一租戶可理解的驗收範圍;不改租戶政策、不建立專案庫、不改分支 / 標籤參照、不改工作流程 / 機密設定、不收機密明文值、不切主要來源,也不開執行期閘門。", + "boundaryLabel": "Controlled apply 邊界", + "boundaryTitle": "Owner 欄位只作 evidence,不當終局阻擋", + "boundaryDetail": "這個面板只顯示四包、範本、已收到 / 已接受 / 已拒收仍為 0,以及 AWOOOI 第一租戶可理解的驗收範圍;critical / break-glass 以外,不得把 0/false 當成停止實作理由。", "metrics": { "packets": "回覆包", "packetsDetail": "S4.9-S4.12 四包仍等待負責人回覆。", @@ -11921,7 +11876,7 @@ "received": "已收到", "receivedDetail": "目前仍為 0;租戶範圍可見不得改寫收件狀態。", "accepted": "已接受", - "acceptedDetail": "目前仍為 0;只有脫敏證據通過驗收後才能改變。", + "acceptedDetail": "目前仍為 0;對低 / 中 / 高風險,這只觸發 AI 補 verifier / rollback,不阻擋 controlled apply。", "tenantPolicyChanges": "租戶政策變更", "tenantPolicyChangesDetail": "目前仍為 0;驗收前不得改租戶政策或遷移模式。", "displaySections": "顯示區塊", @@ -11937,8 +11892,8 @@ "detail": "5 個範本仍等待負責人回覆;租戶只能看到下一個收件焦點。" }, "githubTarget": { - "title": "S4.10 GitHub 目標負責人決策", - "detail": "9 個目標負責人 / 可見性 / 標準回覆仍未接受,不得自動建立專案庫。" + "title": "S4.10 停用 GitHub 目標證據", + "detail": "目標負責人 / 可見性 / 標準回覆只作 freeze ledger,不得自動建立專案庫。" }, "refsTruth": { "title": "S4.11 分支 / 標籤真相負責人回覆", @@ -11959,10 +11914,55 @@ "refsSyncLocked": "不得同步、刪除或強制推送分支 / 標籤。", "workflowLocked": "不得修改工作流程或 runner 設定。", "secretValueBlocked": "不得收集或顯示任何機密明文值。", - "githubPrimaryLocked": "不得切換 GitHub primary。", + "githubPrimaryLocked": "不得切換 GitHub primary;GitHub 維持 stopped / do_not_use。", "runtimeLocked": "不得開啟執行期閘門。", "actionButtonsLocked": "不得提供可執行操作按鈕。" } + }, + "sourceControlFreezeScope": { + "title": "Source Control Freeze 租戶範圍", + "subtitle": "租戶管理只保留 AWOOOI 第一租戶與 Gitea SSH truth 的 source-control freeze 證據;GitHub 維持 stopped / do_not_use,不作為租戶政策或主要來源切換目標。", + "badge": "歷史證據範圍", + "openIwooos": "開啟 IwoooS", + "scopeRefsTitle": "Gitea / freeze 範圍參照", + "boundaryLabel": "租戶 / source-control 邊界", + "boundaryTitle": "Gitea 是目前 source-control truth", + "boundaryDetail": "這個面板只呈現租戶與 source-control freeze 的對應關係;不變更租戶遷移模式、不改租戶政策、不建立 GitHub 專案庫、不改分支 / 標籤參照、不收機密明文值、不切主要來源,也不停用 Gitea。", + "metrics": { + "candidateRepos": { + "label": "歷史候選範圍", + "detail": "10 個候選專案庫只作 freeze / do_not_use 背景證據,不代表可建立 GitHub 專案庫。" + }, + "inScopeRepos": { + "label": "Gitea SSH 讀回", + "detail": "9 個 expected repo 以 Gitea/Gitea-SSH 為準;未登入 private HTTP 404 不代表 repo 消失。" + }, + "ownerResponses": { + "label": "Evidence ledger", + "detail": "24 個歷史回覆範本只作 evidence,不阻擋低 / 中 / 高風險 controlled apply。" + }, + "tenantScopeChanges": { + "label": "租戶範圍變更", + "detail": "目前為 0;不得因顯示 freeze 證據而改租戶政策或遷移模式。" + } + }, + "scopeRefs": { + "tenantSourceScope": "AWOOOI 第一租戶只對應目前 Gitea source-control truth 與 freeze evidence,不代表全平台或 GitHub 主要來源已接受。", + "giteaInventoryOwner": "S4.9 Gitea 清冊可作 evidence ledger;低 / 中 / 高風險改由 policy / verifier / rollback 接續。", + "workflowSecretOwner": "S4.12 工作流程 / 機密名稱只保留脫敏清冊;仍不得收機密明文值或修改 GitHub 機密設定。", + "freezeTargetEvidence": "S4.10 GitHub 目標只保留為 freeze / do_not_use 背景證據;不得建立專案庫或改可見性。" + }, + "boundaryItems": { + "sourceScopeWaiting": "租戶原始碼範圍仍等待正式負責人回覆。", + "ownerResponseWaiting": "專案庫負責人回覆尚未接受;此欄位只作 evidence,不阻擋低 / 中 / 高風險 controlled apply。", + "repoCreationLocked": "未取得正式決策前,不建立 GitHub 專案庫或修改可見性。", + "refsMutationLocked": "未取得分支 / 標籤真相證據前,不同步或修改 參照。", + "githubPrimaryLocked": "GitHub primary 維持 frozen / do_not_use,不得切換。", + "giteaDisableLocked": "Gitea 不得停用,仍是目前 source-control 與 CI/CD truth。", + "tenantPolicyLocked": "租戶政策與遷移模式不得因就緒度顯示而改變。", + "runtimeLocked": "此租戶面板不直連執行期;AI controlled work item 仍由受控佇列與 verifier 推進。", + "actionButtonsLocked": "此頁不放直接危險按鈕;可回滾變更走 AI controlled queue。" + } } }, "autonomousRuntime": { diff --git a/apps/web/messages/zh-TW.json b/apps/web/messages/zh-TW.json index 518fe6237..9c6b98f78 100644 --- a/apps/web/messages/zh-TW.json +++ b/apps/web/messages/zh-TW.json @@ -11859,60 +11859,15 @@ "actionButtonsLocked": "此頁不放直接危險按鈕;AI controlled work item 仍可由受控流程推進。" } }, - "githubTenantReadinessScope": { - "title": "GitHub 主要來源就緒度租戶範圍", - "subtitle": "租戶管理同步顯示 AWOOOI 第一租戶與Gitea 轉 GitHub的原始碼管控負責人範圍缺口;這不是租戶政策、專案庫建立或主要來源切換授權。", - "badge": "只讀範圍", - "openIwooos": "開啟 IwoooS", - "scopeRefsTitle": "負責人範圍參照", - "boundaryLabel": "租戶 / GitHub邊界", - "boundaryTitle": "租戶範圍仍等待負責人回覆", - "boundaryDetail": "這個面板只呈現租戶與原始碼管控就緒度的對應關係;不變更租戶遷移模式、不改租戶政策、不建立 GitHub 專案庫、不改分支 / 標籤參照、不收機密明文值、不切主要來源,也不停用 Gitea。", - "metrics": { - "candidateRepos": { - "label": "候選專案庫", - "detail": "10 個候選專案庫只作為範圍可見性,不代表可建立 GitHub 專案庫。" - }, - "inScopeRepos": { - "label": "範圍內專案庫", - "detail": "9 個專案庫仍需負責人範圍決策與原始碼管控回覆。" - }, - "ownerResponses": { - "label": "負責人回覆", - "detail": "24 個回覆範本仍為 0 已收到 / 0 已接受。" - }, - "tenantScopeChanges": { - "label": "租戶範圍變更", - "detail": "目前為 0;不得因顯示就緒度而改租戶政策或遷移模式。" - } - }, - "scopeRefs": { - "tenantSourceScope": "AWOOOI 第一租戶只對應原始碼管控就緒範圍,不代表全平台或GitHub 主要來源已接受。", - "giteaInventoryOwner": "S4.9仍等待 Gitea 清冊負責人證明;覆蓋範圍接受前不得補寫專案庫範圍。", - "githubTargetOwner": "S4.10仍等待 GitHub 目標負責人決策;目標負責人未接受前不得建立專案庫或改可見性。", - "workflowSecretOwner": "S4.12只等待工作流程 / 機密名稱負責人回覆;仍不得收機密明文值或修改 GitHub 機密設定。" - }, - "boundaryItems": { - "sourceScopeWaiting": "租戶原始碼範圍仍等待正式負責人回覆。", - "ownerResponseWaiting": "專案庫負責人回覆尚未接受;此欄位只作 evidence,不阻擋低 / 中 / 高風險 controlled apply。", - "repoCreationLocked": "未取得正式決策前,不建立 GitHub 專案庫或修改可見性。", - "refsMutationLocked": "未取得分支 / 標籤真相證據前,不同步或修改 參照。", - "githubPrimaryLocked": "GitHub primary 尚未核准切換。", - "giteaDisableLocked": "Gitea 不得停用,仍是目前 CI/CD 來源。", - "tenantPolicyLocked": "租戶政策與遷移模式不得因就緒度顯示而改變。", - "runtimeLocked": "此租戶面板不直連執行期;AI controlled work item 仍由受控佇列與 verifier 推進。", - "actionButtonsLocked": "此頁不放直接危險按鈕;可回滾變更走 AI controlled queue。" - } - }, "ownerResponseValidationScope": { - "title": "負責人回覆驗收租戶範圍", - "subtitle": "租戶管理同步顯示 AWOOOI 第一租戶仍等待 S4.13 驗收彙整與S4.9-S4.12 四包來源回覆;這不是租戶政策、專案庫、分支 / 標籤參照、工作流程 / 機密設定或執行期授權。", + "title": "Controlled Apply 證據驗收租戶範圍", + "subtitle": "租戶管理同步顯示 AWOOOI 第一租戶的歷史 evidence ledger;低 / 中 / 高風險不因 owner 欄位 0/false 停止,改由 AI 補 selector、dry-run、rollback、verifier 與 writeback 後受控推進。", "badge": "只讀驗收範圍", "openIwooos": "開啟 IwoooS", "scopeRefsTitle": "租戶驗收參照", - "boundaryLabel": "租戶驗收邊界", - "boundaryTitle": "目前沒有可套用的租戶政策變更", - "boundaryDetail": "這個面板只顯示四包、24 個回覆範本、已收到 / 已接受 / 已拒收仍為 0,以及 AWOOOI 第一租戶可理解的驗收範圍;不改租戶政策、不建立專案庫、不改分支 / 標籤參照、不改工作流程 / 機密設定、不收機密明文值、不切主要來源,也不開執行期閘門。", + "boundaryLabel": "Controlled apply 邊界", + "boundaryTitle": "Owner 欄位只作 evidence,不當終局阻擋", + "boundaryDetail": "這個面板只顯示四包、範本、已收到 / 已接受 / 已拒收仍為 0,以及 AWOOOI 第一租戶可理解的驗收範圍;critical / break-glass 以外,不得把 0/false 當成停止實作理由。", "metrics": { "packets": "回覆包", "packetsDetail": "S4.9-S4.12 四包仍等待負責人回覆。", @@ -11921,7 +11876,7 @@ "received": "已收到", "receivedDetail": "目前仍為 0;租戶範圍可見不得改寫收件狀態。", "accepted": "已接受", - "acceptedDetail": "目前仍為 0;只有脫敏證據通過驗收後才能改變。", + "acceptedDetail": "目前仍為 0;對低 / 中 / 高風險,這只觸發 AI 補 verifier / rollback,不阻擋 controlled apply。", "tenantPolicyChanges": "租戶政策變更", "tenantPolicyChangesDetail": "目前仍為 0;驗收前不得改租戶政策或遷移模式。", "displaySections": "顯示區塊", @@ -11937,8 +11892,8 @@ "detail": "5 個範本仍等待負責人回覆;租戶只能看到下一個收件焦點。" }, "githubTarget": { - "title": "S4.10 GitHub 目標負責人決策", - "detail": "9 個目標負責人 / 可見性 / 標準回覆仍未接受,不得自動建立專案庫。" + "title": "S4.10 停用 GitHub 目標證據", + "detail": "目標負責人 / 可見性 / 標準回覆只作 freeze ledger,不得自動建立專案庫。" }, "refsTruth": { "title": "S4.11 分支 / 標籤真相負責人回覆", @@ -11959,10 +11914,55 @@ "refsSyncLocked": "不得同步、刪除或強制推送分支 / 標籤。", "workflowLocked": "不得修改工作流程或 runner 設定。", "secretValueBlocked": "不得收集或顯示任何機密明文值。", - "githubPrimaryLocked": "不得切換 GitHub primary。", + "githubPrimaryLocked": "不得切換 GitHub primary;GitHub 維持 stopped / do_not_use。", "runtimeLocked": "不得開啟執行期閘門。", "actionButtonsLocked": "不得提供可執行操作按鈕。" } + }, + "sourceControlFreezeScope": { + "title": "Source Control Freeze 租戶範圍", + "subtitle": "租戶管理只保留 AWOOOI 第一租戶與 Gitea SSH truth 的 source-control freeze 證據;GitHub 維持 stopped / do_not_use,不作為租戶政策或主要來源切換目標。", + "badge": "歷史證據範圍", + "openIwooos": "開啟 IwoooS", + "scopeRefsTitle": "Gitea / freeze 範圍參照", + "boundaryLabel": "租戶 / source-control 邊界", + "boundaryTitle": "Gitea 是目前 source-control truth", + "boundaryDetail": "這個面板只呈現租戶與 source-control freeze 的對應關係;不變更租戶遷移模式、不改租戶政策、不建立 GitHub 專案庫、不改分支 / 標籤參照、不收機密明文值、不切主要來源,也不停用 Gitea。", + "metrics": { + "candidateRepos": { + "label": "歷史候選範圍", + "detail": "10 個候選專案庫只作 freeze / do_not_use 背景證據,不代表可建立 GitHub 專案庫。" + }, + "inScopeRepos": { + "label": "Gitea SSH 讀回", + "detail": "9 個 expected repo 以 Gitea/Gitea-SSH 為準;未登入 private HTTP 404 不代表 repo 消失。" + }, + "ownerResponses": { + "label": "Evidence ledger", + "detail": "24 個歷史回覆範本只作 evidence,不阻擋低 / 中 / 高風險 controlled apply。" + }, + "tenantScopeChanges": { + "label": "租戶範圍變更", + "detail": "目前為 0;不得因顯示 freeze 證據而改租戶政策或遷移模式。" + } + }, + "scopeRefs": { + "tenantSourceScope": "AWOOOI 第一租戶只對應目前 Gitea source-control truth 與 freeze evidence,不代表全平台或 GitHub 主要來源已接受。", + "giteaInventoryOwner": "S4.9 Gitea 清冊可作 evidence ledger;低 / 中 / 高風險改由 policy / verifier / rollback 接續。", + "workflowSecretOwner": "S4.12 工作流程 / 機密名稱只保留脫敏清冊;仍不得收機密明文值或修改 GitHub 機密設定。", + "freezeTargetEvidence": "S4.10 GitHub 目標只保留為 freeze / do_not_use 背景證據;不得建立專案庫或改可見性。" + }, + "boundaryItems": { + "sourceScopeWaiting": "租戶原始碼範圍仍等待正式負責人回覆。", + "ownerResponseWaiting": "專案庫負責人回覆尚未接受;此欄位只作 evidence,不阻擋低 / 中 / 高風險 controlled apply。", + "repoCreationLocked": "未取得正式決策前,不建立 GitHub 專案庫或修改可見性。", + "refsMutationLocked": "未取得分支 / 標籤真相證據前,不同步或修改 參照。", + "githubPrimaryLocked": "GitHub primary 維持 frozen / do_not_use,不得切換。", + "giteaDisableLocked": "Gitea 不得停用,仍是目前 source-control 與 CI/CD truth。", + "tenantPolicyLocked": "租戶政策與遷移模式不得因就緒度顯示而改變。", + "runtimeLocked": "此租戶面板不直連執行期;AI controlled work item 仍由受控佇列與 verifier 推進。", + "actionButtonsLocked": "此頁不放直接危險按鈕;可回滾變更走 AI controlled queue。" + } } }, "autonomousRuntime": { diff --git a/apps/web/src/app/[locale]/awooop/tenants/page.tsx b/apps/web/src/app/[locale]/awooop/tenants/page.tsx index 8c81e3fb7..adfac2dd3 100644 --- a/apps/web/src/app/[locale]/awooop/tenants/page.tsx +++ b/apps/web/src/app/[locale]/awooop/tenants/page.tsx @@ -134,14 +134,14 @@ type TenantAssetInventory = { boundaries: string[]; }; -type GitHubTenantReadinessMetric = { +type SourceControlFreezeMetric = { key: string; value: string; icon: typeof ShieldCheck; tone: "neutral" | "warn"; }; -type GitHubTenantReadinessScope = { +type SourceControlFreezeScope = { key: string; name: string; status: string; @@ -160,14 +160,14 @@ type AssetTone = "steady" | "warn" | "locked"; const API_BASE = getRuntimeApiBaseUrl(); -const githubTenantReadinessMetrics: GitHubTenantReadinessMetric[] = [ +const sourceControlFreezeMetrics: SourceControlFreezeMetric[] = [ { key: "candidateRepos", value: "10", icon: GitBranch, tone: "neutral" }, { key: "inScopeRepos", value: "9", icon: ListChecks, tone: "warn" }, { key: "ownerResponses", value: "0/24", icon: ShieldCheck, tone: "warn" }, { key: "tenantScopeChanges", value: "0", icon: Lock, tone: "warn" }, ]; -const githubTenantReadinessScopes: GitHubTenantReadinessScope[] = [ +const sourceControlFreezeScopes: SourceControlFreezeScope[] = [ { key: "tenantSourceScope", name: "AWOOOI 第一租戶原始碼管控範圍", @@ -179,8 +179,8 @@ const githubTenantReadinessScopes: GitHubTenantReadinessScope[] = [ status: "0/5", }, { - key: "githubTargetOwner", - name: "S4.10 GitHub 目標負責人決策", + key: "freezeTargetEvidence", + name: "S4.10 Freeze target evidence", status: "0/9", }, { @@ -197,7 +197,7 @@ const tenantScopeBoundaryItems = [ "actionButtonsLocked", ]; -const githubTenantReadinessBoundaries = [ +const sourceControlFreezeBoundaries = [ "sourceScopeWaiting", "ownerResponseWaiting", "repoCreationLocked", @@ -742,9 +742,7 @@ function ProductCommandMap({
- {t("subtitle")} -
+ {loading ? t("loading") : t("badge")} @@ -765,7 +763,7 @@ function ProductCommandMap({ -{detail}
+ ))} @@ -784,7 +782,7 @@ function ProductCommandMap({ -{detail}
+ ))} @@ -816,7 +814,7 @@ function ProductCommandMap({{detail}
+ ))} @@ -833,7 +831,7 @@ function ProductCommandMap({ > {item.label} - {item.detail} + @@ -842,13 +840,7 @@ function ProductCommandMap({{t("boundaryTitle")}
-- {t("boundaryDetail", { - owner: acceptedOwnerCount, - runtime: runtimeGateCount, - actions: actionButtonCount, - })} -
+{t("subtitle")}
+{item.label}
{item.value}
-{item.detail}
+{item.name}
-{item.detail}
+{t("boundaryLabel")}
{t("boundaryTitle")}
-{t("boundaryDetail")}
+{t("subtitle")}
+- {t(`metrics.${metric.key}.detail` as never)} -
@@ -1092,9 +1081,9 @@ function GitHubTenantReadinessScopePanel() {
{t("boundaryLabel")}
{t("boundaryTitle")}
-{t("boundaryDetail")}
+{t("subtitle")}
+{item.label}
{item.value}
-{item.detail}
+{t(`scopeRefs.${item.key}.title` as never)}
-- {t(`scopeRefs.${item.key}.detail` as never)} -
{t("boundaryLabel")}
{t("boundaryTitle")}
-{t("boundaryDetail")}
+{t("subtitle")}
+- {t(`metrics.${key}.detail` as never)} -
))} @@ -1765,7 +1748,7 @@ export default function TenantsPage() {