From 6374370b59d7fcb129870bc8a90555356e607187 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 24 Jun 2026 14:10:54 +0800 Subject: [PATCH] docs(ops): add VTuber dev baseline decision package [skip ci] --- docs/LOGBOOK.md | 26 +++ ...-DEV-BASELINE-OWNER-DECISION-2026-06-24.md | 84 ++++++++++ ...-dev-baseline-owner-decision.snapshot.json | 151 ++++++++++++++++++ 3 files changed, 261 insertions(+) create mode 100644 docs/operations/VTUBER-DEV-BASELINE-OWNER-DECISION-2026-06-24.md create mode 100644 docs/operations/vtuber-dev-baseline-owner-decision.snapshot.json diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index 056dcb90a..c3935f61b 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -1,3 +1,29 @@ +## 2026-06-24|VTuber dev baseline owner decision package + +**背景**:Blocked products pick list 將 VTuber 排在最後一個候選,因為它不是一般 dirty review,而是 repository identity / HEAD 異常。本輪只讀 `/Users/ogt/VTuber`,不 commit、不 branch、不 push、不建立 Gitea repo、不讀 env 或 secret value。 + +**只讀 readback**: +- local branch:`main`。 +- local HEAD:invalid;`git rev-parse HEAD` 回 `fatal: ambiguous argument 'HEAD'`。 +- Gitea `wooo/vtuber`:not found。 +- tracked modified:`0`。 +- tracked deleted:`0`。 +- staged additions:`2`,為 `apps/admin/public/.gitkeep`、`apps/web/public/.gitkeep`。 +- untracked files:`84`。 +- untracked porcelain entries:`30`。 +- env-like paths observed but not read:`.env.example`、`apps/admin/.env.example`、`apps/api/.env.example`、`apps/web/.env.example`、`deploy/.env.prod`、`deploy/.env.prod.example`。 +- default quarantine:`deploy/.env.prod`、`apps/web/tsconfig.tsbuildinfo`。 + +**文件**: +- `docs/operations/vtuber-dev-baseline-owner-decision.snapshot.json` +- `docs/operations/VTUBER-DEV-BASELINE-OWNER-DECISION-2026-06-24.md` + +**判定**:VTuber 不能進入 `dev` branch 流程;必須先做 repository identity repair,決定是新 repo bootstrap、找正確既有 repo,或先修 local git history / initial commit。 + +**下一步**:建立 repo bootstrap owner package;owner 明確接受 repo identity、source include list、staged `.gitkeep` 處理、VRM / GLB model asset policy、Nginx / compose / deploy script scope 後,才可建立 Gitea repo 或遠端 branch。 + +**邊界**:沒有產品 repo 寫入、沒有 remote write、沒有 runtime write、沒有 secret collection、沒有讀 `deploy/.env.prod`、沒有建 repo;Mac Mini / MacBook Pro 仍不得把 VTuber 視為雙機可開發 ready。 + ## 2026-06-24|Bitan Pharmacy dev baseline owner decision package **背景**:Blocked products pick list 將 Bitan 排在第七候選,且使用者回報 `[Bitan Pharmacy] Public content cleanliness check failed` 類告警。本輪只讀 `/Users/ogt/bitan-pharmacy`,先把 internal repo / public content evidence / dirty source 分桶;沒有 commit、branch、push、讀 `.env`、讀 `.npmrc` 或讀 secret value。 diff --git a/docs/operations/VTUBER-DEV-BASELINE-OWNER-DECISION-2026-06-24.md b/docs/operations/VTUBER-DEV-BASELINE-OWNER-DECISION-2026-06-24.md new file mode 100644 index 000000000..0e8c37253 --- /dev/null +++ b/docs/operations/VTUBER-DEV-BASELINE-OWNER-DECISION-2026-06-24.md @@ -0,0 +1,84 @@ +# VTuber Dev Baseline Owner Decision + +- generated_at: `2026-06-24T14:08:41+08:00` +- product_id: `vtuber` +- local_path: `/Users/ogt/VTuber` +- status: `blocked, repository identity repair required` + +## Readback + +| Gate | Result | +|------|--------| +| local branch | `main` | +| local HEAD | invalid / no commit HEAD | +| local HEAD error | `fatal: ambiguous argument 'HEAD'` | +| Gitea repo | `wooo/vtuber` not found | +| tracked modified | `0` | +| tracked deleted | `0` | +| staged additions | `2` | +| untracked files | `84` | +| untracked porcelain entries | `30` | + +Staged additions already present in local repo: + +- `apps/admin/public/.gitkeep` +- `apps/web/public/.gitkeep` + +## Untracked 分桶 + +| Bucket | Count | 判定 | +|--------|------:|------| +| `apps/web` | `33` | source / asset candidates | +| `apps/admin` | `15` | source candidates | +| `apps/api` | `13` | source candidates | +| `packages/db` | `5` | DB schema / seed candidates | +| `packages/ui` | `2` | UI package candidates | +| `deploy` | `4` plus env-like files | deploy / Nginx / compose candidates, env quarantine required | +| `scripts` | `3` | ops candidates | +| `docs` | `2` | product docs candidates | +| root | `7` | repo bootstrap candidates | + +Env-like paths observed but not read: + +- `.env.example` +- `apps/admin/.env.example` +- `apps/api/.env.example` +- `apps/web/.env.example` +- `deploy/.env.prod` +- `deploy/.env.prod.example` + +Quarantined by default: + +- `apps/web/tsconfig.tsbuildinfo` +- `deploy/.env.prod` + +## 判定 + +VTuber 不能進入 Gitea `dev` branch 流程。這不是一般 dirty worktree;它目前沒有有效 HEAD,遠端 `wooo/vtuber` 也不存在。這表示要先做 repo identity 決策: + +1. 這是新產品 repo bootstrap。 +2. 或者本地資料夾應該對應到另一個既有 Gitea repo。 +3. 或者需要先修 local git history / initial commit。 + +在決策前,不可把 84 個 untracked files 直接推成產品基準。 + +## Owner Decision + +需要 owner 回覆: + +1. VTuber 是否要建立全新 Gitea repo,或對應另一個既有 repo。 +2. 兩個已 staged `.gitkeep` 要保留 staged、提交到初始 baseline,還是重置後重新 bootstrap。 +3. `deploy/.env.prod` 一律不可讀、不可複製、不可進 source control。 +4. env example 檔只能 metadata-only review,確認不含真實 secret 後才可納入。 +5. VRM / GLB model assets 是否屬於 source artifact。 +6. Nginx / compose / deploy scripts 是否屬於初始 baseline。 +7. owner 接受 repo identity 與 source include list 後,才可建立 Gitea repo / branch / MacBook workspace。 + +## 安全邊界 + +- 未讀 env 檔內容。 +- 未讀 secret value。 +- 未修改 VTuber repo。 +- 未建立 branch、commit、repo 或 push。 +- 未同步 raw `.git`、runtime volume 或 raw Codex conversations。 +- 未執行 deploy、Nginx、Docker、production smoke 或 runtime write。 diff --git a/docs/operations/vtuber-dev-baseline-owner-decision.snapshot.json b/docs/operations/vtuber-dev-baseline-owner-decision.snapshot.json new file mode 100644 index 000000000..356836e61 --- /dev/null +++ b/docs/operations/vtuber-dev-baseline-owner-decision.snapshot.json @@ -0,0 +1,151 @@ +{ + "schema_version": "vtuber_dev_baseline_owner_decision_v1", + "generated_at": "2026-06-24T14:08:41+08:00", + "product_id": "vtuber", + "local_path": "/Users/ogt/VTuber", + "gitea_repo": "wooo/vtuber", + "remote_refs": { + "main": "", + "dev": "", + "status": "repository_not_found" + }, + "local_readback": { + "branch": "main", + "head": "invalid_unborn_or_no_commit_head", + "head_error": "fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree", + "tracked_modified_count": 0, + "tracked_deleted_count": 0, + "staged_addition_count": 2, + "untracked_file_count": 84, + "untracked_porcelain_entry_count": 30, + "status": "repository_identity_repair_required" + }, + "remote_readback": { + "ls_remote": "failed_repository_not_found", + "error_summary": "Cannot find repository: wooo/vtuber" + }, + "staged_additions_seen_but_not_modified": [ + "apps/admin/public/.gitkeep", + "apps/web/public/.gitkeep" + ], + "untracked_classification": { + "apps_web_count": 33, + "apps_admin_count": 15, + "apps_api_count": 13, + "packages_db_count": 5, + "packages_ui_count": 2, + "deploy_count": 4, + "scripts_count": 3, + "docs_count": 2, + "root_count": 7 + }, + "untracked_source_groups": { + "root": [ + ".env.example", + ".gitignore", + "README.md", + "package.json", + "test-browser.js", + "test_glb.js", + "tsconfig.base.json" + ], + "apps_admin": [ + "apps/admin/.env.example", + "apps/admin/.eslintrc.json", + "apps/admin/Dockerfile", + "apps/admin/next-env.d.ts", + "apps/admin/next.config.js", + "apps/admin/package.json", + "apps/admin/src/app/inventory/page.tsx", + "apps/admin/src/app/operations/page.tsx", + "apps/admin/src/app/orders/page.tsx", + "apps/admin/src/app/products/page.tsx", + "apps/admin/src/lib/api.ts", + "apps/admin/tsconfig.json" + ], + "apps_api": [ + "apps/api/.env.example", + "apps/api/.eslintrc.json", + "apps/api/Dockerfile", + "apps/api/nest-cli.json", + "apps/api/package.json", + "apps/api/src/app.controller.ts", + "apps/api/src/app.module.ts", + "apps/api/src/app.service.ts", + "apps/api/src/database/database.module.ts", + "apps/api/src/database/prisma.service.ts", + "apps/api/src/main.ts", + "apps/api/tsconfig.build.json", + "apps/api/tsconfig.json" + ], + "apps_web": [ + "apps/web/.env.example", + "apps/web/.eslintrc.json", + "apps/web/Dockerfile", + "apps/web/next-env.d.ts", + "apps/web/next.config.js", + "apps/web/package.json", + "apps/web/public/models/realistic-host.glb", + "apps/web/public/models/xiaoyai.vrm", + "apps/web/src/app/[locale]/live/demo/page.tsx", + "apps/web/src/app/cart/page.tsx", + "apps/web/src/app/checkout/page.tsx", + "apps/web/src/app/live/page.tsx", + "apps/web/src/app/products/[slug]/page.tsx", + "apps/web/src/components/virtual-host.tsx", + "apps/web/src/lib/api.ts", + "apps/web/src/middleware.ts", + "apps/web/tsconfig.json", + "apps/web/tsconfig.tsbuildinfo" + ], + "packages_deploy_and_docs": [ + "deploy/apply-nginx-110-live-fallback.sh", + "deploy/deploy-prod.sh", + "deploy/docker-compose.prod.yml", + "deploy/vtuber-nginx-110-live-fallback.conf", + "deploy/.env.prod", + "deploy/.env.prod.example", + "docs/PRD.md", + "docs/TASKS.md", + "packages/db/prisma/schema.prisma", + "packages/db/prisma/seed.ts", + "packages/db/src/index.ts", + "packages/ui/src/index.ts", + "scripts/check-vtuber-offline-110.sh", + "scripts/deploy-and-verify-vtuber110.sh", + "scripts/verify-live-domain-110.sh" + ] + }, + "excluded_or_quarantined_by_default": [ + "apps/web/tsconfig.tsbuildinfo", + "deploy/.env.prod" + ], + "secret_or_env_paths_seen_but_not_read": [ + ".env.example", + "apps/admin/.env.example", + "apps/api/.env.example", + "apps/web/.env.example", + "deploy/.env.prod", + "deploy/.env.prod.example" + ], + "risk_assessment": { + "secret_value_collected": false, + "env_file_read": false, + "runtime_write_performed": false, + "product_repo_write_performed": false, + "remote_write_performed": false, + "risk_level": "blocked_repository_identity_repair_required", + "reason": "The local repository has no valid HEAD, two staged .gitkeep files, 84 untracked files, and the expected Gitea repository wooo/vtuber is not found. This must be treated as repo bootstrap or repo identity repair before any source control action." + }, + "owner_decision_required": [ + "Decide whether VTuber is a new repository bootstrap or should map to another existing Gitea repository.", + "Approve creating or identifying the correct Gitea repository before any branch action.", + "Approve whether the two staged .gitkeep files should remain staged, be committed, or be reset in a new repo bootstrap flow.", + "Confirm deploy/.env.prod remains excluded and is not read or copied.", + "Confirm env example files are metadata-only and contain no real secrets before source control inclusion.", + "Approve or reject VRM / GLB model assets as source artifacts.", + "Approve or reject Nginx / compose / deploy scripts as part of the initial baseline.", + "Approve remote main / dev branch creation only after repository identity and initial source include list are accepted." + ], + "recommended_next_step": "Resolve repository identity first, then create a bootstrap owner package before any Gitea repository creation, branch creation, or MacBook workspace bootstrap." +}