Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ dist/
.tmp/
cloud-migration-exports/
.playwright-cli/
.artifacts/
*.log
.DS_Store
/*-proof.png
Expand Down
37 changes: 37 additions & 0 deletions PRODUCT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Product

## Register

product

## Users

Codex and ChatGPT users who manage long-running development, research, and content workflows across many conversations. They need to see task state, progress, history, and next actions without searching through chat noise.

## Product Purpose

Dashi Taskboard turns Codex conversations into a durable task workflow. It adds a taskboard entry to the Codex sidebar, organizes work by status and project, keeps a feature-level history across conversations, exposes real execution progress, and supports low-touch automation. Success means users can identify what is waiting, active, blocked, ready for review, or complete at a glance and move work forward safely.

## Brand Personality

Calm, precise, native. The interface should feel at home in current macOS and iOS product surfaces, remain readable during daytime use, and follow the Codex host theme without becoming visually noisy.

## Anti-references

- Dark-only interfaces that force nighttime styling during daytime use.
- Flat generic SaaS dashboards with weak hierarchy or indistinguishable panels.
- Decorative glass effects on task content, arbitrary shadows, and oversized rounding.
- Popovers clipped by navigation or scroll containers.
- Status columns that visually merge into surrounding chrome because spacing and surface boundaries are unclear.

## Design Principles

1. Make task state and progress legible in one glance.
2. Use predictable Apple-style hierarchy, spacing, focus, and interaction patterns.
3. Let navigation and transient overlays use restrained material effects; keep task content on solid surfaces.
4. Preserve context across theme changes and conversations.
5. Reduce manual coordination while keeping state changes explicit and recoverable.

## Accessibility & Inclusion

Target WCAG AA for text and interactive controls. Support keyboard navigation, visible focus, reduced motion, light and dark host themes, semantic dialogs and popovers, and layouts without document-level horizontal overflow.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ To use a different UI origin, set `window.__CODEX_TASKBOARD_URL__` before the us

| Variable | Default | Purpose |
| --- | --- | --- |
| `CODEX_TASKBOARD_HOST` | `0.0.0.0` | HTTP bind address; use `127.0.0.1` to disable LAN access |
| `CODEX_TASKBOARD_HOST` | `127.0.0.1` | HTTP bind address; use `0.0.0.0` only when LAN sharing is explicitly required |
| `CODEX_TASKBOARD_PORT` | `47823` | Local HTTP port |
| `CODEX_TASKBOARD_DATA_DIR` | `.data` | SQLite data directory |
| `CODEX_TASKBOARD_URL` | `http://127.0.0.1:47823` | CLI API origin |
Expand Down
8 changes: 7 additions & 1 deletion README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,12 @@
- 构建 macOS App 和 DMG:Xcode Command Line Tools、Rust 1.88 或更高版本,以及 `aarch64-apple-darwin` 和 `x86_64-apple-darwin` target。`npm install` 会安装本项目使用的 Tauri CLI。
- 构建 Windows NSIS:Microsoft Store 版 Codex App、Rust 1.88 或更高版本,以及带 C++ 工作负载和 Windows SDK 的 Visual Studio Build Tools。

## Apple Light A 变体

本分支默认采用适配 Codex 的 Apple Light A,并保留随宿主切换的深色模式。议题看板显示等待认领、处理中、等你确认和已完成;阻塞列在有阻塞任务时出现。归档使用工具栏中带文字和数量的独立入口。已完成任务仍可编辑、继续到处理中或归档,归档记录可恢复。

项目切换菜单使用不受工作区裁切的浮层,工具栏与任务主体保持 40px 纵向间距。详细启动、数据位置和安全回滚见[安装与回滚指南](docs/INSTALL-APPLE-LIGHT-A.zh-CN.md),最终浏览器、Axe 与 Codex 入口证据见[Apple Light A QA](docs/qa/apple-light-a-qa.md)。

## 本地运行

```bash
Expand Down Expand Up @@ -148,7 +154,7 @@ npm run codex:inject -- --port 9229 --open

| 变量 | 默认值 | 用途 |
| --- | --- | --- |
| `CODEX_TASKBOARD_HOST` | `0.0.0.0` | HTTP 绑定地址;使用 `127.0.0.1` 可禁用局域网访问 |
| `CODEX_TASKBOARD_HOST` | `127.0.0.1` | HTTP 绑定地址;仅在明确需要局域网共享时才设为 `0.0.0.0` |
| `CODEX_TASKBOARD_PORT` | `47823` | 本地 HTTP 端口 |
| `CODEX_TASKBOARD_DATA_DIR` | `.data` | SQLite 数据目录 |
| `CODEX_TASKBOARD_URL` | `http://127.0.0.1:47823` | CLI API 源地址 |
Expand Down
45 changes: 45 additions & 0 deletions design-qa.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# Dashi Taskboard Apple 浅色方案设计 QA

- 日期:2026-08-16
- 参考源:用户标注的仪表盘、议题看板、列表视图和甘特图弹窗截图;本轮重点为 `/var/folders/fd/m62ygxld11x4v5g23twh9pbc0000gn/T/codex-clipboard-47baf396-9674-4373-a3fc-fbf6367c5766.png`(2902 × 376)和 `/var/folders/fd/m62ygxld11x4v5g23twh9pbc0000gn/T/codex-clipboard-077489d4-6c8f-4dee-8cf4-abc35a9b8ce1.png`(2958 × 724)
- 实现截图:`.artifacts/playwright/screenshots/dashboard-independent-metrics-light-1440.png`(1440 × 900,CSS 1440 × 900,DPR 1)、`.artifacts/playwright/screenshots/dashboard-source-implementation-comparison.png`(1500 × 2200,同图对比)、`.artifacts/playwright/screenshots/board-light-1440.png`、`.artifacts/playwright/screenshots/list-view-surfaces-light-1440.png`、`.artifacts/playwright/screenshots/gantt-popup-layer-light.png`
- 验证视口:1440 × 900;补充响应式视口 900 × 760
- 验证状态:浅色、深色、看板、列表、甘特图、仪表盘、项目浮层

## 对比与修正

| 项目 | 修正前 | 修正后 | 结果 |
| --- | --- | --- | --- |
| 仪表盘外层间距 | 上 40、左右 8、下 64 | 四边统一 24px | 通过 |
| 列表视图外层间距 | 上 20、左右 10 | 上、左、右统一 24px | 通过 |
| 看板列布局 | 已调整但需统一复核 | 外层/列间 24px,标题内边距 12px | 通过 |
| 主要内容间距 | 混用 8/10/14/18/19 | 统一到 12/16/20/24 体系 | 通过 |
| 列表分类背景 | 层级偏弱 | 浅色使用 `#F2F2F6`,画布使用 `#FFFFFF` | 通过 |
| 投影 | 卡片、菜单、弹窗、导航存在投影 | 所有视图及浮层计算样式均无 box/text/drop shadow | 通过 |
| 描边 | 组件与焦点状态混用描边 | 所有组件 border/outline 清零;键盘焦点改用实体背景反馈 | 通过 |
| 字号 | 7–13px 小字与较大展示字号混用 | 全局仅 14/16/18/20px,最小 14px、最大 20px | 通过 |
| 弹窗层级 | 甘特图选项被时间轴覆盖 | 导航建立独立顶层堆叠;6 类主要弹窗逐点验证位于页面最上层 | 通过 |
| 仪表盘统计 | 5 项共用一个连续白色容器,列间距为 0 | 5 张等宽独立白色卡片,卡片间 24px、圆角 12px,总宽度随容器自适应 | 通过 |
| 贡献图月份 | 年度起点“8月”与紧邻的“9月”发生文字重叠 | 起始月份不足 3 周展示宽度时让位给完整的下个月份,月份标签不再重叠 | 通过 |
| 全局文字碰撞 | 月份标签、角色姓名/完成说明、900px 任务标题/ID 存在碰撞 | 角色双行文字统一 20px 行高;窄屏标题与 ID 分行;四视图在 1440/900 下全页面碰撞为 0 | 通过 |

## Apple 风格审计

- 排版:保留 SF Pro / PingFang 系统字体栈;内文/小标题 14px、导航 16px、页面标题 18px、关键数字 20px。
- 间距:页面与主要容器严格采用 12/16/20/24;图标光学校准、1px 分隔线和图表网格不作为布局间距。
- 圆角:看板列 20px、列标题 12px,保持柔和且层级清楚。
- 颜色:浅色画布采用冷灰白与实体白内容面;分类行采用 `#F2F2F6`;状态色仅用于语义提示。深色模式维持同构层级。
- 层次:移除全部投影和组件描边,以实体底色和留白区分层级;键盘焦点使用实体背景变化。
- 弹窗:项目切换、任务筛选、自动化设置、任务右键菜单、任务编辑器、甘特图选项均验证上下两个采样点为页面最上层;无裁切或内容穿透。
- 甘特图:数据画布维持满宽呈现,这是高密度时间轴的有意例外;其外围导航仍遵循统一间距。
- 仪表盘:5 张统计卡统一使用 24px 间距和 12px 圆角;贡献图保留完整月份节奏,不强塞不足宽度的起始月标签。
- 可访问性:浅色/深色 Axe serious/critical 为 0;“等你确认”蓝色已加深以满足 14px 文本对比度;交互语义保留。

## 本轮对比历史

1. P1:5 项统计在一个连续容器中,未形成用户要求的独立模块。修复为 5 张等宽卡片并以 24px 分隔;同图对比确认层级清晰。
2. P1:贡献图“8月/9月”文字重叠。真实文字 Range 碰撞测试先得到 `8月 <> 9月` RED,修复后为 0。
3. P2:扩展到全页面后发现角色姓名与完成说明碰撞,以及 900px 下任务标题与 ID 碰撞。分别调整行高和响应式分行后,1440/900 的看板、列表、甘特图、仪表盘均为 0 碰撞。
4. 完整视图对比检查了排版、间距、颜色、图标/图像质量和文案;本轮未增加或替换图像资产,现有图标保持清晰,无新增 P0/P1/P2。

final result: passed
30 changes: 30 additions & 0 deletions docs/DELIVERY-APPLE-LIGHT-A.zh-CN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Apple Light A 源码交付索引

这是 dashi-taskboard Apple Light A 的限定交付包索引,不是可独立运行的源码仓库。包内不含 `package.json`、应用源码、Codex profile 或签名 App/DMG。

所有 `npm`、`node`、`taskctl` 与构建命令都必须在完整源码仓库的 `feature/apple-light-a` 分支中运行,不能在本输出目录运行。开始前先阅读[安装、启动与回滚](INSTALL-APPLE-LIGHT-A.zh-CN.md)。

## 交付文件

- [安装、启动与回滚](INSTALL-APPLE-LIGHT-A.zh-CN.md)
- [最终 QA 与已知边界](apple-light-a-qa.md)
- [源码版本记录](source-revision.txt)

## 验收截图

- [Codex 左侧 Plugins → Taskboard 入口](screenshots/customized-codex-sidebar-light.png)
- [项目切换浮层](screenshots/project-switcher-overlay-light.png)
- [浅色 1440px 的 40px 布局节奏](screenshots/taskboard-spacing-light-1440.png)
- [深色 900px 响应式布局](screenshots/taskboard-spacing-dark-900.png)
- [已完成列与独立归档入口](screenshots/board-completed-archive-entry-light.png)
- [独立归档视图](screenshots/archive-dedicated-light.png)
- [1728px 浅色看板](screenshots/board-light-1728.png)
- [1440px 浅色看板](screenshots/board-light-1440.png)
- [1280px 浅色看板](screenshots/board-light-1280.png)
- [900px 浅色看板](screenshots/board-light-900.png)
- [深色模式回归](screenshots/board-dark-regression-1440.png)
- [真实 70% 任务进度](screenshots/task-progress-light-70.png)
- [自动化设置](screenshots/automation-light.png)
- [归档基线](screenshots/archive-light.png)

结构化 Codex DOM JSON 只由源码仓库中的安全捕获脚本写入被 Git 忽略的 `.artifacts/codex-qa/customized-codex`,不包含在本输出包中。
64 changes: 64 additions & 0 deletions docs/INSTALL-APPLE-LIGHT-A.zh-CN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# Apple Light A 安装、启动与回滚

本交付是基于 dashi-taskboard v1.0.3 的本地源码变体。它通过独立 Codex 配置启动,不修改 `/Applications/ChatGPT.app`、普通 Codex 配置或现有对话数据。

## 环境要求

- macOS,且已安装官方 Codex App;本机验收版本为 `26.810.50856`(build `6644`)。
- Node.js `>=22.5`;本机验收使用 `v24.19.0`。
- 安装依赖时需要 npm registry 访问;浏览器验收使用 Google Chrome `151.0.7922.138`。

## 启动 Scheme A

在源码目录运行:

```bash
npm ci
npm run build:web
CODEX_TASKBOARD_HOST=127.0.0.1 npm run codex
```

保持终端运行。启动器会使用独立 profile 启动第二个 Codex 窗口,并把“任务面板”放在左侧 Plugins 后。Codex 的浅色/深色切换会同步到面板,筛选、搜索、选中任务和详情不会因主题消息而重载。

默认服务只监听 `127.0.0.1:47823`,CDP 只监听 `127.0.0.1:9231`。不要为了本地使用把 `CODEX_TASKBOARD_HOST` 改成 `0.0.0.0`。

## 数据、运行信息与 Skill

- 源码运行数据:仓库内 `.data/taskboard.sqlite`。
- 独立 Codex profile:默认位于 `/private/tmp/codex-taskboard-independent-profile-v2`。如需持久化到其他位置,启动前设置 `CODEX_TASKBOARD_CODEX_PROFILE=/绝对路径/独立-profile`;该变量会覆盖默认路径。
- 带身份信息的临时端点:`.data/launcher-runtime.json`;不要复制到交付包或公开日志。
- Skill 源码:`skills/manage-taskboard/SKILL.md`。
- 源码启动器日志:当前终端标准输出/错误。
- 已签名上游 App 的独立数据与日志(仅供区分):`~/Library/Application Support/Codex Taskboard` 与 `~/Library/Logs/Codex Taskboard/codex-taskboard-launcher.log`。

使用 `taskctl` 时必须用完整议题 ID,并尊重返回的 `version`。已完成任务可以打开编辑、选择“继续任务”回到处理中,或归档;归档记录通过独立“归档”入口查看并恢复。

## 停止

在运行 `npm run codex` 的终端按 `Ctrl-C`。等待进程退出后可用以下只读命令确认端口已关闭:

```bash
lsof -nP -iTCP:47823 -sTCP:LISTEN
lsof -nP -iTCP:9231 -sTCP:LISTEN
```

若挂载过上游 DMG,可在 Finder 点推出,或对已确认的挂载点执行 `hdiutil detach <挂载点>`。不要对未知卷使用通配符。

## 回滚与移除

1. 先按上节停止源码启动器。
2. 删除或移走本源码检出即可移除界面变体;普通 Codex 不受影响。
3. 如曾手动链接 Skill,只删除该精确链接:`~/.codex/skills/manage-taskboard`。先用 `ls -l` 确认它指向本仓库。
4. 如需清空本变体数据,先备份,再只移除本仓库的 `.data`;不要删除 `~/Library/Application Support/Codex`。
5. 如需清理源码启动器的独立 Codex profile,先确认启动器已经停止,再用 `ls -ld /private/tmp/codex-taskboard-independent-profile-v2` 核对精确默认目录后移除它。若启动时设置过 `CODEX_TASKBOARD_CODEX_PROFILE`,只清理该变量指向并经你核实的独立目录,不要误删普通 Codex profile。
6. 若使用过上游 Codex Taskboard App,其数据是另一套目录;除非明确不再需要上游数据,不要删除 `~/Library/Application Support/Codex Taskboard`。

## 生成最小化 QA 入口证据

`node scripts/capture-codex-taskboard-qa.mjs` 默认把证据写入被 Git 忽略的 `.artifacts/codex-qa/customized-codex`。JSON 只保留主题、运行时存在性和 Plugins/Taskboard 相邻顺序字段,不保存页面 `bodyText`、任务或线程正文;PNG 直接裁剪到必要的两个侧栏入口区域,而不是整屏截图。

只有在明确需要其他临时目录时,才把第三个参数设为经过核实的输出路径:`node scripts/capture-codex-taskboard-qa.mjs 9231 /绝对路径/临时证据目录`。不要把未经检查的原始 CDP 输出复制到交付包。

## 签名与 DMG 边界

上游 v1.0.3 DMG 已单独通过签名、Gatekeeper 与哈希验证。本地 Apple Light A 源码没有可供 `app:preflight` 验证的自定义 `.app`,环境中也没有发布签名前置,因此本轮没有运行 `app:build`,没有修改或重新签名上游 DMG,也没有交付“已签名自定义 DMG”。当前可运行交付路径是上面的 `npm run codex`。
Loading