Ariver
2026-07-07 c4912689af3edeba6e45bc61b3cd7fb150304be5
chore: close initialization blockers
6 files modified
7 files added
291 ■■■■ changed files
.gitignore 1 ●●●● patch | view | raw | blame | history
AGENTS.md 6 ●●●● patch | view | raw | blame | history
CODE_GOVERNANCE.md 58 ●●●● patch | view | raw | blame | history
K1.业务知识/README.md 13 ●●●●● patch | view | raw | blame | history
K2.项目管理/QA成果地图.md 25 ●●●●● patch | view | raw | blame | history
K2.项目管理/README.md 14 ●●●●● patch | view | raw | blame | history
K2.项目管理/新窗口接手指南.md 20 ●●●● patch | view | raw | blame | history
K2.项目管理/研发交付验收流程.md 23 ●●●●● patch | view | raw | blame | history
K2.项目管理/项目经理-经验与教训.md 15 ●●●●● patch | view | raw | blame | history
K3.运营与发布资料/README.md 33 ●●●●● patch | view | raw | blame | history
K3.运营与发布资料/Release/AppStore-8.3.5-20260702.1046/RELEASE_EVIDENCE_ERRATA.md 37 ●●●●● patch | view | raw | blame | history
K3.运营与发布资料/Screenshots/render_marketing_screenshots.mjs 41 ●●●● patch | view | raw | blame | history
K3.运营与发布资料/Screenshots/render_marketing_screenshots.py 5 ●●●●● patch | view | raw | blame | history
.gitignore
@@ -1,4 +1,5 @@
.DS_Store
._*
# Root-local runtime/build byproducts. App build outputs are generated under src/build/.
/build/
AGENTS.md
@@ -36,13 +36,13 @@
## 命令输出保护
任何输出未知或可能很大的命令都必须限制输出:
任何输出未知或可能很大的命令都必须控制范围。标准验证命令在文档、规则、CODEGRAPH 或交接材料中必须保持原始可执行形式;执行时优先使用工具输出上限,或把完整输出写入日志并保留原始命令退出码。
```bash
COMMAND 2>&1 | head -c 6000
COMMAND
```
搜索优先用 `rg` / `rg --files`。不要无上限打印大文件、构建日志或目录树。
搜索优先用 `rg` / `rg --files`。不要无上限打印大文件、构建日志或目录树;临时查看大输出时可以由执行工具限制输出,不要把截断管道写进标准命令。
## 对话记忆保存规则
CODE_GOVERNANCE.md
@@ -15,9 +15,9 @@
- 开始任何代码、文档、发布或迁移任务前,必须先执行并检查:
```bash
git status --short 2>&1 | head -c 6000
git branch --show-current 2>&1 | head -c 2000
git worktree list --porcelain 2>&1 | head -c 6000
git status --short
git branch --show-current
git worktree list --porcelain
```
- 如果工作区已有改动,必须区分改动来源:
@@ -46,9 +46,9 @@
- 提交前必须确认:
```bash
git status --short 2>&1 | head -c 6000
git diff --stat 2>&1 | head -c 6000
git diff --cached --stat 2>&1 | head -c 6000
git status --short
git diff --stat
git diff --cached --stat
```
- 提交信息使用简洁英文或项目已有风格,示例:
@@ -90,9 +90,9 @@
- 任务完成后必须执行:
```bash
git worktree remove WORKTREE_PATH 2>&1 | head -c 6000
git worktree prune 2>&1 | head -c 6000
git worktree list --porcelain 2>&1 | head -c 6000
git worktree remove WORKTREE_PATH
git worktree prune
git worktree list --porcelain
```
- 如果 worktree 有未提交改动,禁止直接删除;必须先确认归属和处理方式。
@@ -109,10 +109,10 @@
接手旧线程、长期任务、发布任务或迁移任务时,必须先完成以下检查,不得等待旧线程:
```bash
git status --short 2>&1 | head -c 6000
git branch --show-current 2>&1 | head -c 2000
git log --oneline --decorate --graph --max-count=12 2>&1 | head -c 6000
git worktree list --porcelain 2>&1 | head -c 6000
git status --short
git branch --show-current
git log --oneline --decorate --graph --max-count=12
git worktree list --porcelain
```
- 必须读取最近会话记录,确认未完成项、已完成项、阻塞项和用户最新指令。
@@ -182,15 +182,15 @@
## 11. 命令输出保护
任何未知或可能很大的命令输出都必须 byte-cap:
任何未知或可能很大的命令输出都必须控制范围。规则、CODEGRAPH、交接材料和标准验证命令必须保留原始可执行形式,不能为了展示输出而追加 `head -c`、`2>&1 | head` 等截断管道。执行时通过工具输出上限控制展示,或把完整输出写入日志文件并保留原始命令退出码。
```bash
COMMAND 2>&1 | head -c 6000
COMMAND
```
- 构建、测试、目录遍历、日志、Git diff、搜索结果都应限制输出。
- 构建、测试、目录遍历、日志、Git diff、搜索结果都应控制展示范围。
- 搜索优先用 `rg` / `rg --files`。
- 不无上限打印大文件、构建日志、目录树或二进制信息。
- 不无上限打印大文件、构建日志、目录树或二进制信息;需要压缩展示时由执行工具限制输出,不把截断管道写进标准命令。
## 12. 禁止事项
@@ -206,22 +206,22 @@
## 13. 常用检查命令
```bash
git status --short 2>&1 | head -c 6000
git branch --show-current 2>&1 | head -c 2000
git log --oneline --decorate --graph --max-count=12 2>&1 | head -c 6000
git worktree list --porcelain 2>&1 | head -c 6000
git diff --stat 2>&1 | head -c 6000
git diff --cached --stat 2>&1 | head -c 6000
git ls-files C1.source 2>&1 | wc -l | head -c 2000
git status --short
git branch --show-current
git log --oneline --decorate --graph --max-count=12
git worktree list --porcelain
git diff --stat
git diff --cached --stat
git ls-files C1.source | wc -l
```
从源码根目录运行 QA:
```bash
cd /Users/ar/Projects/Taglauncher/03-O/C1.source
bash Scripts/apple_default_apps_resource_qa.sh 2>&1 | head -c 12000
bash Scripts/apple_default_note_policy_qa.sh 2>&1 | head -c 12000
bash Scripts/smartstart_catalog_resource_qa.sh 2>&1 | head -c 12000
bash Scripts/quick_search_app_name_qa.sh 2>&1 | head -c 12000
bash Scripts/quick_search_system_app_qa.sh 2>&1 | head -c 12000
bash Scripts/apple_default_apps_resource_qa.sh
bash Scripts/apple_default_note_policy_qa.sh
bash Scripts/smartstart_catalog_resource_qa.sh
bash Scripts/quick_search_app_name_qa.sh
bash Scripts/quick_search_system_app_qa.sh
```
K1.业务知识/README.md
New file
@@ -0,0 +1,13 @@
# K1.业务知识
本目录保存长期有效的产品、领域和系统行为知识。
适合放入这里的内容:
- Taglauncher 长期产品决策。
- 用户任务、领域规则、系统能力和限制。
- 可复用的错误文案、验收口径和领域知识。
- 长期有效的技术约束、状态模型和系统行为知识。
- `成果地图.md` 中索引到的稳定成果和事实源。
不放 Round 过程记录;过程记录留在 `02-P/`。
K2.项目管理/QA成果地图.md
New file
@@ -0,0 +1,25 @@
# Taglauncher QA 成果地图
最后整理:2026-07-05
## 当前状态
Taglauncher 当前源码工程位于 `03-O/C1.source`,Git 根位于 `03-O`。本文件记录 QA 门禁和验证入口;迁移接收验证通过不等同正式发布 QA PASS。
## 当前已建立入口
| 类型 | 路径 | 状态 |
| --- | --- | --- |
| 当前验收口径 | `02-P/Round00-Foundation/04-QA与验收.md` | 已建立 |
| 工程地图入口 | `03-O/CODEGRAPH.md` | 已建立 |
| 构建产物根 | `03-O/C2.builds/` | 已建立 |
| 工具脚本根 | `03-O/C3.tools/` | 已建立 |
| Release evidence errata | `03-O/K3.运营与发布资料/Release/AppStore-8.3.5-20260702.1046/RELEASE_EVIDENCE_ERRATA.md` | 已建立,作为发布前 gate 输入 |
## 后续应补
- 下一次源码变更或发布前的真实构建命令复核。
- 下一次源码变更或发布前的真实测试命令复核。
- 主 UI / 主流程 / 数据层 / 发布前检查门禁。
- 发布前重新绑定当前可解析 Git commit、manifest、tag、SHA256、metadata、review notes 和截图。
- 截图素材恢复:`03-O/K3.运营与发布资料/Screenshots/localized-content.mjs` 与 `assets/`。
K2.项目管理/README.md
New file
@@ -0,0 +1,14 @@
# K2.项目管理
本目录保存长期有效的项目管理、协作、复盘和交付经验。
适合放入这里的内容:
- Taglauncher 项目级 SOP。
- QA 门禁和验证地图。
- 阶段复盘。
- 交付验收经验。
- 新 Agent / 新 session 接手指南。
- 多角色协作规则的项目特例。
不复制全局规则;全局规则只在本项目有特例时才补充说明。
K2.项目管理/新窗口接手指南.md
@@ -9,10 +9,12 @@
1. `/Users/ar/Projects/Taglauncher/AGENTS.md`
2. `/Users/ar/Projects/Taglauncher/PROJECT.md`
3. `/Users/ar/Projects/Taglauncher/INDEX.md`
4. `/Users/ar/Projects/Taglauncher/02-P/进度地图.md`
5. `/Users/ar/Projects/Taglauncher/03-O/CODEGRAPH.md`
6. `/Users/ar/Projects/Taglauncher/03-O/CODE_GOVERNANCE.md`
7. `/Users/ar/Projects/Taglauncher/.codex-sessionhistory/00-Topics.md`
4. `/Users/ar/Projects/Taglauncher/00-H/初心与Go-No-Go.md`
5. `/Users/ar/Projects/Taglauncher/02-P/进度地图.md`
6. `/Users/ar/Projects/Taglauncher/02-P/角色协作宪章.md`
7. `/Users/ar/Projects/Taglauncher/03-O/CODEGRAPH.md`
8. `/Users/ar/Projects/Taglauncher/03-O/CODE_GOVERNANCE.md`
9. `/Users/ar/Projects/Taglauncher/.codex-sessionhistory/00-Topics.md`
## 自检命令
@@ -34,7 +36,13 @@
- 当前迁移基线:`2309264` / `v8.3.5-build20260702.1046`
- 当前源码根:`03-O/C1.source`
- 当前 HIPO 根结构:`00-H / 01-I / 02-P / 03-O`
- 当前初心 / Go-No-Go 入口:`00-H/初心与Go-No-Go.md`
- 当前统一台账:`02-P/进度地图.md`
- 当前角色启动入口:`02-P/角色会话启动清单.md`
- 当前 PMO 收件箱:`02-P/PMO_INBOX.md`
- 当前 PMO active assignment:`02-P/pmo-active-assignments.json`
- 当前 PMO 事件日志:`02-P/pmo-events.jsonl`
- 当前工程地图:`03-O/CODEGRAPH.md`
- 当前最新迁入 release 资料:`03-O/K3.运营与发布资料/Release/AppStore-8.3.5-20260702.1046`
- 当前最新迁入 release 包:`03-O/C2.builds/AppStore-8.3.5-20260702.1046`
@@ -43,9 +51,11 @@
旧完整 Git 对象、旧 worktree、历史构建包、旧截图原图、帮助 PDF 副本、promo codes、备份目录和系统噪声不在当前正文中。
补充旧资料根 `/Users/ar/Downloads/0702codex-move/02-project2/26.0705-Archive-taglauncher` 只读使用,不作为当前执行路径。
## 成功判定
新会话能说明项目是什么、当前基线是什么、代码在哪里、任务从哪里领取、QA 和发布入口在哪里、哪些历史材料不能直接当当前事实。
新会话能说明项目是什么、当前基线是什么、代码在哪里、任务从哪里领取、PMO 和角色启动入口在哪里、QA 和发布入口在哪里、哪些历史材料不能直接当当前事实。
## 接手演练结果
K2.项目管理/研发交付验收流程.md
New file
@@ -0,0 +1,23 @@
# Taglauncher 研发交付验收流程
最后整理:2026-07-05
## 标准链路
```text
目标对齐
  -> 当前 Round 包
  -> 技术方案
  -> 实现
  -> 代码审核
  -> QA
  -> 发布准备
  -> 用户 / Owner 验收
```
## 规则
- 不跳过 `02-P/进度地图.md` 直接派工。
- 不跳过技术方案直接进入非平凡实现。
- 不跳过 QA 直接进入发布准备。
- 交付结论必须落在文档,而不是只留在会话中。
K2.项目管理/项目经理-经验与教训.md
New file
@@ -0,0 +1,15 @@
# Taglauncher 项目经理-经验与教训
最后整理:2026-07-05
## 当前状态
项目尚处初始化阶段,暂无长期有效经验教训。
## 后续记录范围
- 计划失真原因
- 交接失败原因
- 文档入口失效原因
- 规则树冗余或缺口
- 哪些流程在真实执行中有效,哪些只是纸面结构
K3.运营与发布资料/README.md
New file
@@ -0,0 +1,33 @@
# K3.运营与发布资料
本目录保存 TagLauncher 的官网、商店、营销、支持和法务资料。当前目录来自轻量迁移包,包含可复核的 8.3.5 包体证据,也包含若干历史版本资料;发布前必须先区分当前证据和历史参考。
## 当前状态
- 当前迁入 release 证据包:`Release/AppStore-8.3.5-20260702.1046/`
- 当前迁入 DMG / PKG:`../C2.builds/AppStore-8.3.5-20260702.1046/`
- 8.3.5 包体 hash 已与 `Release/AppStore-8.3.5-20260702.1046/SHA256SUMS.txt` 核对一致。
- 8.3.5 manifest 中的 `Git commit: 01bab54` 在当前迁移仓库不可解析;证据边界见 `Release/AppStore-8.3.5-20260702.1046/RELEASE_EVIDENCE_ERRATA.md`。
- 本目录不能单独作为 App Store 发布 PASS;发布前仍需 QA / release gate。
## 子目录
- `Website/`:官网页面、素材、站点脚本。
- `AppStoreConnect/`:渠道元数据、审核说明、商店材料;当前 metadata 仍是历史 7.9.1 口径,不能直接用于 8.3.5 或后续提交。
- `Marketing/`:营销图、演示图、传播素材;历史文章保留为参考,不自动代表当前审核文案。
- `Screenshots/`:截图脚本和截图清单;当前脚本已迁移到本目录路径,但仍缺本地 `localized-content.mjs` 和 `assets/`,需要恢复素材后才能生成新图。
- `Release/`:发布证据、历史手工清单和 release gate 输入。
- `Support-Legal/`:支持、隐私、协议、法务资料。
## 历史资料边界
- `AppStore_Submission.md` 和 `AppStore_TODO_7.3.5_744.md` 是 7.3.5 / Build 744 历史提交资料。
- `Release/APP_STORE_RELEASE_MANUAL_TODO.md` 是 7.6.0 历史清单。
- `AppStoreConnect/ASC审核提交SOP.md` 包含 7.9.1 历史提交流程。
- 上述文件只作证据和复盘参考,不能直接复制为当前 ASC 提交材料。
## 发布前必做
- 重新生成目标版本的 App Store metadata、What’s New、review notes 和截图清单。
- 修复或恢复 `Screenshots/localized-content.mjs` 与 `Screenshots/assets/` 后再运行截图脚本。
- 重新执行 QA / release gate,绑定当前可解析 Git commit、manifest、tag 和 SHA256。
K3.运营与发布资料/Release/AppStore-8.3.5-20260702.1046/RELEASE_EVIDENCE_ERRATA.md
New file
@@ -0,0 +1,37 @@
# TagLauncher 8.3.5 Release Evidence Errata
Date: 2026-07-07
This file records the migration-era evidence gap for the 8.3.5 package. It does not replace `RELEASE_MANIFEST.md` and does not declare App Store release PASS.
## Current Evidence
- Package version: `8.3.5`
- Package build: `20260702.1046`
- Migrated baseline commit: `2309264ee94daca4b9abe3592d84602c98b77690`
- Migrated project handoff commit: `5dbabdb9df401b30e8c92cfb3fb089a0fe1b4f9b`
- Release tag available in this repository: `v8.3.5-build20260702.1046 -> 2309264ee94daca4b9abe3592d84602c98b77690`
- Manifest commit recorded in `RELEASE_MANIFEST.md`: `01bab54`
- Current repository lookup for `01bab54`: not resolvable in this migrated repository.
## Artifact Hash Check
The migrated DMG and PKG match `SHA256SUMS.txt`:
```text
c378548b9f5186e2e71de08a2b0efc6e33bc84e2785dd98fc62e05903026a729  Archive/TagLauncher-8.3.5-build20260702.1046.dmg
647b64ba420d60f4df1b72daff50f3174ab4c5da61b513ed0d9dc2d7eee2a417  Upload/TagLauncher-8.3.5-build20260702.1046.pkg
```
## Interpretation
- The package files are hash-consistent with the migrated release evidence.
- The exact source commit recorded by the original manifest is not available from the current migrated Git history.
- For project handoff and code management, `boborobots/main` is aligned to the migrated project handoff commit `5dbabdb9df401b30e8c92cfb3fb089a0fe1b4f9b`.
- For release audit, this package remains a migrated release evidence package and must go through a fresh QA / release gate before any new App Store submission or public distribution claim.
## Required Before Release Use
- Resolve whether old Git history containing `01bab54` should be restored as historical evidence, or accept this errata as the migration-era evidence boundary.
- Rebuild or re-freeze from a current, resolvable Git commit before calling a package a new formal release package.
- Regenerate App Store metadata, review notes, screenshots, and the manual release checklist for the target submission version.
K3.运营与发布资料/Screenshots/render_marketing_screenshots.mjs
@@ -2,23 +2,42 @@
import fs from "node:fs/promises";
import path from "node:path";
import { createRequire } from "node:module";
import { fileURLToPath } from "node:url";
import {
  LOCALES,
  getCopy,
  loadAppStrings,
  modeLabels
} from "../../../docs/scripts/localized-content.mjs";
import { fileURLToPath, pathToFileURL } from "node:url";
const require = createRequire(import.meta.url);
const { chromium } = require("playwright");
const SCRIPT_DIR = path.dirname(fileURLToPath(import.meta.url));
const ROOT = path.resolve(SCRIPT_DIR, "../../..");
const ASSETS = path.join(ROOT, "docs/assets");
const OUT_ROOT = path.join(ROOT, "Docs/X-Op资料/Screenshots/AppStore-Marketing");
const REPO_ROOT = path.resolve(SCRIPT_DIR, "../..");
const SOURCE_ROOT = path.join(REPO_ROOT, "C1.source");
const LOCALIZED_CONTENT = path.join(SCRIPT_DIR, "localized-content.mjs");
const ASSETS = path.join(SCRIPT_DIR, "assets");
const OUT_ROOT = path.join(SCRIPT_DIR, "AppStore-Marketing");
const W = 2880;
const H = 1800;
if (!fsSync.existsSync(LOCALIZED_CONTENT)) {
  throw new Error([
    "Missing localized screenshot copy module.",
    `Expected: ${LOCALIZED_CONTENT}`,
    "Restore or regenerate this file before rendering App Store screenshots."
  ].join("\n"));
}
if (!fsSync.existsSync(ASSETS)) {
  throw new Error([
    "Missing screenshot asset directory.",
    `Expected: ${ASSETS}`,
    "Restore image assets before rendering App Store screenshots."
  ].join("\n"));
}
const {
  LOCALES,
  getCopy,
  loadAppStrings,
  modeLabels
} = await import(pathToFileURL(LOCALIZED_CONTENT).href);
function esc(value) {
  return String(value ?? "")
@@ -389,7 +408,7 @@
async function renderLocale(browser, locale) {
  const copy = getCopy(locale.code);
  const app = loadAppStrings(ROOT, locale);
  const app = loadAppStrings(SOURCE_ROOT, locale);
  const modes = modeLabels(app);
  const outDir = path.join(OUT_ROOT, locale.code);
  await cleanGeneratedPngs(outDir);
K3.运营与发布资料/Screenshots/render_marketing_screenshots.py
@@ -6,11 +6,10 @@
import sys
ROOT = Path("/Users/ar/Projects/Taglauncher")
SCRIPT = Path(__file__).resolve().with_suffix(".mjs")
RUNTIME = Path("/Users/ar/.cache/codex-runtimes/codex-primary-runtime/dependencies")
NODE = RUNTIME / "node/bin/node"
NODE_MODULES = RUNTIME / "node/node_modules"
SCRIPT = ROOT / "Docs/X-Op资料/Screenshots/render_marketing_screenshots.mjs"
def main() -> int:
@@ -23,7 +22,7 @@
    existing = env.get("NODE_PATH")
    env["NODE_PATH"] = str(NODE_MODULES) if not existing else f"{NODE_MODULES}{os.pathsep}{existing}"
    completed = subprocess.run([node, str(SCRIPT)], cwd=str(ROOT), env=env)
    completed = subprocess.run([node, str(SCRIPT)], cwd=str(SCRIPT.parent), env=env)
    return completed.returncode