boardx / boardx/workspacex

[F01+F02+F06] 任务看板:五态状态机 + 视图投影/回写 + 我的今天四分区(收窄版)

Open
#2,436 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
0
Forks
0
Avg merge
1h 7m
Merged PRs (30d)
969

Description

> 本 issue 由独立 review PR #2432 时补建——该 PR 实现了 phase-02 F01/F02/F06,但按其自身 PR 正文的如实记录,开工时既没有建 issue,也没有走 `harness sync --apply`/sprint/verify 门控。这是治理动作的事后补齐,不代表已满足合并前提(见下方"⚠ 设计签核缺口")。

## 交付契约(user_visible_behavior,逐条摘自 feature_list.json)

- **F01**:任一任务卡的 status 恒属于 `{inbox, todo, in_progress, review, done}`;拖动/箭头改列时服务端按 O-27 转移矩阵裁定:前进跳跃全放行,回退须填非空理由并写审计,任意态→`inbox` 一律拒绝;`scope=global` 下跨项目拖动被拒。
- **F02**:同一份任务表投影为项目内四列(折叠 inbox)与全局五列,两视图卡 ID 集合完全相同;每卡带来源徽标、负责人(人)与执行者(可为 agent)分列显示;拖动改列在同一事务内回写来源对象,回写失败标"未同步"可重试。
- **F06**:进入 `/tasks` 看到四个固定语义分区(等我判断/今天该我推进/AI 正在替我跑/下一步轮到别人),分区互斥、纯派生不落库;底注样本量不足时显示"样本不足"而非编造折算值。

## Story

- `phases/phase-02-visible-outcomes/requirements/11-board/uc-11-1-四列看板与推进.md`(F01 #R10,F02 #R7)
- `phases/phase-02-visible-outcomes/requirements/11-board/uc-11-5-我的今天.md`(F06 #R7)

## 验证(完成的唯一标准:每条命令退出码 0)

- [ ] `pnpm --filter api exec vitest run tests/board/status-enum-single-source.test.ts`
- [ ] `pnpm --filter api exec vitest run tests/board/transition-matrix-o27.test.ts`
- [ ] `pnpm --filter api exec vitest run tests/board/view-projection-no-card-loss.test.ts`
- [ ] `pnpm --filter api exec vitest run tests/board/owner-is-human-executor-split.test.ts`
- [ ] `pnpm --filter api exec vitest run tests/board/writeback-transaction.test.ts`
- [ ] `pnpm --filter api exec vitest run tests/board/pg-task-repository-guard.test.ts`
- [ ] `pnpm --filter api exec vitest run tests/board/board-controller-write-guard.test.ts`(独立 review 新增,见下)
- [ ] `pnpm --filter api exec vitest run tests/board/my-today-sections-mutex.test.ts`
- [ ] `pnpm --filter api exec vitest run tests/board/my-today-same-source-enum.test.ts`
- [ ] `pnpm --filter web exec vitest run tests/ui/my-today.render.test.tsx`

证据落盘:`phases/phase-02-visible-outcomes/`(尚无 sprint 目录,`sprint` 字段当前为 `null`)。

## ⚠ 设计签核缺口(本 issue 建立时的实测状态,不是"回头补"就能跳过的事)

- `phases/phase-02-visible-outcomes/contracts/` 目前只有 `survey/` 一个契约束,**没有 `board/`**——F06 是 `CAP-UI` 且 notes 写明"UI 已建成于 apps/web /tasks",F02 notes 显式标注 `needs_ui_signoff`(项目内四列/全局五列看板 UI 尚未建、折叠 inbox 与 owner/executor 视觉分列待补画确认)。按 `AGENTS.md`:"`has_ui: true` 却没有 `contracts/` 的阶段判失败,不是放行"——这不是本 issue 能自行了结的事,需要人类按 `.harness/instructions/contract-design.md` 走一次契约束签核(UI / 用例 / API 契约三件一处签)。
- `feature_list.json` 里 F01/F02/F06 的 `status` 仍为 `not_started`,`sprint` 为 `null`——这两者需要人类跑 `harness new-sprint` + `harness sync --apply` 之后才闭环。

## 实现指引(notes,摘自 feature_list.json)

- F01 是 11-board 全模块地基,被 F02–F10、F17、F24、F43 依赖;20 个有序对逐格断言实际放行集合与矩阵一致。
- F02 的 `owner=人` 服务端校验(D-39)在此落地,被 F43 复用;7 天折叠为 Backlog 因原型确认缺失,仅做后端不删。
- F06 的"AI 正在替我跑"按 `executor=agent && status=in_progress` 近似判定,未接真实 agent 运行时(F03/F05/F08 未做,属经用户确认的收窄范围,见 PR #2432 正文)。

## 前置依赖

- `p00:F01 两层权限内核` — 已就绪(F01 依赖)
- `F01` → `F02` → `F06`(本 issue 内部顺序)
- F02 另依赖 `p01:10-report 缺料来源(F24)`、`p01:13-deliv 决策后续(F43)`——均标记为收窄未做
- F06 另依赖 `F03`、`F05`、`F08`——均未做,收窄范围内不实现

## 元数据

| phase | sprint | 能力平面 | 优先级 | area |
|---|---|---|---|---|
| 02 | null | CAP-API / CAP-UI | P1/P2 | board |

## 关联 PR

- #2432(`claude/new-phase-task-management-daeg85`)——独立 review 已发现并修复一个真实的 R5 写路径权限漏洞(PATCH /tasks/:id/status 原先零权限校验,任意 org 成员含 observer 均可改任意任务状态),详见 PR 评论。**在设计签核缺口解决前不建议合并**,即使 CI 全绿。

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by reading phases/phase-02-visible-outcomes/requirements/11-board/uc-11-1-四列看板与推进.md and uc-11-5-我的今天.md, then review PR #2432 and run the listed API and web Vitest commands. Done means every verification command exits 0, with the board contract and required harness sprint/sync steps completed before merge.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
backend-api-design, full-stack
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
20/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.