Merge pull request 'Record the no-project surfaces 404 fix' (#663) from fix/no-project-surfaces-404 into main
ci / svc-realcombo (push) Failing after 2m28s
ci / test (push) Successful in 9m47s
ci / test-pg (push) Successful in 14m14s

This commit was merged in pull request #663.
This commit is contained in:
2026-10-21 01:58:03 +00:00
@@ -0,0 +1,113 @@
# fix/no-project-surfaces-404 任务卡
任务主记录:PR #663 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/663;状态:已完成(合入前闭合);owner:weichen
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 6945b6701f7579bf4e31def283825e392c33ad16
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-fix-no-project-surfaces-404(worktree);分支:fix/no-project-surfaces-404
- 分支类型:standalone;root_target:main;immediate_target:main;accepting_requirements:false
- 需求分流:verdict=NEW;selected_initiative=无;requirement_sha256=1b640acba3dbeaf8c1845b3a0068132de5c8f156ef23871a3b421697195809e5;triage_receipt=/tmp/rdir/ps-triage.json;receipt_sha256=0ea9b03a7448d0a5f3408d3b4e27edf1029df19da8dbbed2cbdad7414cc4f4c4
- 授权与交付终点:用户 2026-10-20 要求"解决一下非阻塞问题"(fix/multiuser-collab-followups 记录的无项目账号 surfaces 404);终点=Frontend/RDM/Dev PR 经 Review 与当前 HEAD CI 后合入,8788 备份后部署并浏览器复测;路由沿用用户授权(Cursor 额度耗尽→跳过,agy 失败→PI)。未授权:改写历史、分支保护、发布版本。
- 交付模式:goal-first(目标、范围和交付终点一次确认;范围内连续推进)
- 实施执行:agent-per-unit(配置:AGENT-EXECUTION.md)
- 合入执行:agent(已授权交付范围内,Review 通过、冲突解决且当前 HEAD 的 CI 通过后合入)
- 流程依据:仓库根目录 policy/delivery.md(归档后仍按仓库根目录定位)
## 目标与非目标
来源:`.task/archive/fix-multiuser-collab-followups.md` 非阻塞简记。
- 根因:Frontend `src/store.ts` `openConversation` 无当前项目时仍以空 projectId 调 `api.projectSurfaces('')`,请求 `/api/projects//surfaces` 被 Backend 路由清洗为 `/api/projects/surfaces` 而 404。
- 修复:无当前项目时不发该请求(`projectSurfaces` 已在同函数内置空);有项目时行为不变。RDM `pins/agent-system-frontend` 与 Dev `modules/frontend` 固定到新 frontend 后部署 8788。
非目标:不改 Backend 路由与错误码、不改其他 surfaces 入口、不做 UI 改动。
## Agent 实施收据
路由与 fail-stop 规则见根目录 AGENT-EXECUTION.md 与 policy/delivery.md;每次尝试一行,原始日志留在源码外收据路径。
| 单元 ID | 预期范围 | 配置摘要 | 角色 | 候选顺序 | attempt | CLI/模型 | 终态 | transport | fallback | 源码外收据路径 |
|---|---|---|---|---|---|---|---|---|---|---|
| ps-frontend-no-project-surfaces | Frontend `src/store.ts` + `test/`:无当前项目不请求 projectSurfaces | AGENT-EXECUTION.md | implementation | Cursor→agy→PI(用户授权:Cursor 额度耗尽、agy 不可用) | — | PI | blocked(启动前:unit 文件尚未写入即启动,invalid unit packet;未启动 CLI) | 无 | 否 | /tmp/rdir/ps-fe-receipt.json |
| ps-frontend-no-project-surfaces-r2 | 同上(新单元 ID 重跑) | 同上 | implementation | 同上(cursor×3、antigravity×3 unavailable) | PI run1 | PI | success(host Review 通过) | 16a0593(已 apply)→ [Frontend #122](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Frontend/pulls/122) merge 18fc958 | 否 | /tmp/rdir/ps-fe2-receipt.json |
| ps-rdm-repin-frontend | RDM `pins/agent-system-frontend`→18fc958 | 同上 | implementation | 同上 | PI run1 | PI | success | 0f35084(已 apply)→ [RDM #457](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/pulls/457) | 否 | /tmp/rdir/ps-rdmpin-receipt.json |
| ps-dev-repin-frontend | Dev `modules/frontend`→18fc958 | 同上 | implementation | 同上 | PI run1 | PI | success | f66c320(本分支,已 apply;后由下一行撤回) | 否 | /tmp/rdir/ps-devpin-receipt.json |
| ps-dev-unpin-frontend | Dev `modules/frontend` 撤回为 R0 值 e4cd8f1(main 已改固定 113103f,冲突无法在本任务范围内解决) | 同上 | implementation | 同上 | PI run1 | PI | success | 7ac0050(本分支,已 apply) | 否 | /tmp/rdir/ps-devunpin-receipt.json |
## 同步记录
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|---|---|---|---|
| 启动 | 6945b6701f7579bf4e31def283825e392c33ad16 | 6945b6701f7579bf4e31def283825e392c33ad16 | 2026-10-20T15:31:49Z |
## 证据(Evidence)
<!-- CMD="<命令>" make evidence 写入;手抄/转写输出视为无效证据(AGENTS.md 证据与验证门禁)。 -->
| 时间(UTC) | 命令 | 被测HEAD | exit | 来源 | sha256(16) |
|---|---|---|---|---|---|
## 结果与验证
- 结果:无当前项目时前端不再请求 `/api/projects//surfaces`;修复在 Frontend main 18fc958,经 RDM bd7ea28 固定;8788 已部署 `rdm@bd7ea28`(备份快照 20261020T154639Z)。
- Dev 固定:同步时 main 已把 `modules/frontend` 改固定为 113103f(project-access-lifecycle 的 Frontend 分支 `feature/project-access-lifecycle-u6-ui`,尚未合入 Frontend main,且不含 e4cd8f1/18fc958)。合并两者须改动该任务分支,超出本任务范围,故撤回本分支的 frontend 固定,本 PR 仅含任务卡;该任务把 u6-ui 合回 Frontend main 时会带上 e4cd8f1 与 18fc958。
- 验证:
- 组件 CI(GATE,PR head):Frontend 16a059381c41c3d95d91391de0bf39883db347fd test-and-build run 4541 + governance run 4542 success;RDM 0f35084a394bfa3287f436bd6def2409bbd34a67 build-and-test run 4545 + governance run 4546 success。
- 新增单测 `test/open-conversation-no-project.test.ts`:无项目不发请求、有项目仍请求(随 Frontend CI 通过)。
- 8788 浏览器复测(SELF,Playwright,/tmp/rdir/rt/r06-carol-no-project-conv.png)PASS:无项目账号 vf-carol 打开旧会话,surfaces 请求仅 `GET /api/conversations/cnv_2e2545025ac2/surfaces`,无 `/api/projects//surfaces`,API 错误为空。复测后 vf-carol 已重新停用,临时口令与会话文件已删除。
- 影响与剩余项:记录——Dev main 当前组合的 frontend(113103f)暂不含 Frontend #121/#122 的修复,待 project-access-lifecycle 合回 Frontend main 后由其重新固定;8788 实际运行的是 RDM 固定的 18fc958,不受影响。
## 合入与清理
- Review 记录:host(当前主模型,独立于 PI 实施会话)审阅 Frontend 16a0593(store.ts 一行守卫 + 新测试)、RDM 0f35084 与 Dev f66c320(各仅一个 gitlink e4cd8f1→18fc958):通过,无阻塞项。
- 冲突记录:Frontend/RDM PR 基于最新 main,无冲突;Dev 首次同步 `modules/frontend` gitlink 冲突(本分支 18fc958 vs main 113103f),放弃该次合并,经单元 ps-dev-unpin-frontend 撤回本分支固定后重新同步 main 1850d03,无冲突。
- CI 记录:组件见"结果与验证";Dev PR 以 `make ci-wait` 核验当前 HEAD。
- 合入记录:[Frontend #122](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Frontend/pulls/122)→18fc958;[RDM #457](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/pulls/457)→bd7ea28(均以 head_commit_id 核验后合入 main);Dev PR 见任务主记录。
- 清理记录:NOT_RUN(授权依据、写者退出确认、worktree/分支/任务卡处置)
<!-- Local receipt: SELF. Digests detect corruption; they do not authenticate a reviewer or CI. -->
```json
{
"summary_schema": 1,
"source": "SELF",
"timestamp": "2026-10-20T15:26:22.705792+00:00",
"command": "make precheck",
"exit_code": 0,
"cwd": "/home/weichen/projects/Agent-System-Dev",
"before_head": "6945b6701f7579bf4e31def283825e392c33ad16",
"after_head": "6945b6701f7579bf4e31def283825e392c33ad16",
"branch": "main",
"target_branch": "main",
"target_head": "6945b6701f7579bf4e31def283825e392c33ad16",
"root_target": "main",
"immediate_target": "main",
"before_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"after_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"output_tail": [
"make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev'",
"[repo] branch=main head=6945b6701f",
"[remote] origin/main=6945b6701f ahead=0 behind=0",
"[tree] clean submodules_drift=0 uninit=0",
"[worktrees] linked=5",
"[recycle] merged un-recycled branches: feature/fast-slow-o2-a01-checkpoint-design",
"[initiatives] local cards (not authoritative): none",
"[hooks] core.hooksPath=scripts/hooks(pre-commit/post-merge 实际接线)",
"[facts] policy/facts.md 6 条事实均在有效期内",
"[required-reading] core/baseline.md, workflows/delivery.md §1, policy/delivery.md",
"[R0] 6945b6701f(完整:6945b6701f7579bf4e31def283825e392c33ad16)",
"[worktree] before-sync: recursive component checks passed",
"[verdict] READY — 保留本次 precheck receipt 后建任务工作区:PRECHECK_RECEIPT=/tmp/task-precheck.json make task-start NAME=feature/your-branch",
"make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev'"
],
"output_sha256": "764cb9a09719b74aec61f3fe6443ec035ad0b701efd8bb8cb434b65b722dc600",
"receipt_sha256": "2e180d0dd053eec20ad024570a8e1b332956f954bf5929f4843b1f7feae6a7ff",
"receipt_path": "/home/weichen/.cache/agent-system-dev/evidence/2e180d0dd053eec20ad024570a8e1b332956f954bf5929f4843b1f7feae6a7ff.json"
}
```
| 同步(记录前对象) | 1850d03563875fd848664ab9b348f6858d0fa590 | 8264bcbfe5721f6743eb0a33ce7983240b49004b | 2026-10-20T15:55:56Z |
## 闭合记录(合入前折叠)
- 本卡在 PR #663(https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/663)合入前闭合并归档,随该 PR 一同合入。
- 该 PR 的合并提交即本任务的落地记录。
- 合入后无需回填,也无需单独的闭合 PR。
| 同步(记录前对象) | 7a5c80eacb835bfc6e62b3557129ec299bbb5290 | 9c81fd2d00d52b63788b124ead56d4a916221bcb | 2026-10-21T01:47:29Z |