Skip to content

[PM seat] domain:cli — 🟢 os-project-manager #6024

Description

@claude

本贴是 domain:cli 座位的唯一权威登记。 座位贴协议(维护者 2026-08-06 批准,自 #4604 单正文座位表迁移而来):索引 = label:pm:seat,总入口 #4604(指针页)。

单写手规则:只有在任座位 PM 编辑本贴正文;接管/移交 = 改正文 + 一条审计评论(评论只作交接存档,不承载状态)。空缺争用时:动手前重拉正文、审计评论时间戳先到先得、写后回读。活性判定(惰性,无心跳,仅接管冲突时评估):Routine 座位查调度器,会话座位查最近产出评论时间戳,>24h 无产出即可回收。

范围

packages/cli, runtime, verify, qa, types, packages/rest, packages/mcp, packages/observability, packages/client, packages/client-react, packages/cloud-connection, packages/create-objectstack, packages/adapters/*, packages/plugins/plugin-hono-server, plugin-dev — per the SKILL domain-lane table。

当前 PM(会话或 Routine ID)

Session session_017uFVNMmTxLpmfQYiuKM1Yx(GitHub account os-project-manager);2026-08-08 经维护者 /pm-dispatch cli 接管。前任:session session_01Wbxm29qPKnLf44AbSxizqW(account qq9340100),末次产出 2026-08-07 16:35Z。

说明

🟢 本班次已落地 16 单 · 在飞 2 · 待并 2 · 排队 3(worktree 保活)· 决策箱 0。 状态时点 2026-08-08 23:16Z。

⛔ 两条现行维护者指令(覆盖此前一切相反安排)

  1. 并发上限 = 2(~17:35Z,取代早前「加速」的批量 5)。任何时刻在飞不得超过 2 个 dev。
  2. 每次 Agent 派发必须显式传 model: "opus"(~17:5xZ)。实测原因见教训 ④ —— 不要依赖 agent 定义,每次都传。

巡检节奏保持 ≤25 分钟(在飞时);空闲时可拉长。

落地账目(16 单)

Round Issue PR Landed
R1 #6322 data.find canonical-key 判据(target:v17) #6480 ec3dfd7d8
R1 #6266 flaky exit-code pin #6481 b532f8ab1
R1 #6334 hono position-bound grants(target:v17) #6482 1fe436d29
R2 #6217 --json stdout 纯净(target:v17) #6524 2b641ddd4
R2 #6250 unique-violation 谓词(target:v17) #6541 88f9d94bb
R2 #4633 import dry run 走 validateData #6532 53ef05744
R2 #6055 MCP 元数据停机诊断 #6507 5c2716b0c
R3 #6485 { limit: 0 } 被真值性丢弃 #6578 merged
R4 #6551 share-links dispatcher 面整信封(target:v17) #6647 merged
R4 #5996 doctor ledger 目录权威 #6645 merged
R5 #6633 直挂面可发现 + SDK 跟随通告 base(target:v17) #6712 11066f681
R5 #6544 uniqueViolationColumn(索引名不冒充列名) #6717 merged
R5 #6649 share-links 权限拒绝答 403 而非 500 #6718 merged
R5 #6643 doctor 账本失败行改报真实解析目录 #6722 merged
R6 #6531 os login --json 声明为 NDJSON #6727 merged
R6 #6469 三命令统一默认数据库解析(target:v17) #6744 merged

全部一次通过队列,零返工,零弹出。 验收一律对着 GitHub 而非 dev 报告:改动文件清单比对声明面、正文以 Fixes #n 开头、changeset 存在、前提验证为实测、无 content/docs/releases/ 改动;入队一律用 gh-readonly-queue/* 分支名确认,从不用「main 里没有」反推。docs-drift 机器人输出仅 advisory,其清单常含 releases/v*.mdx —— 代码 PR 里编辑那些正是仓库禁止的,一律不动。

在飞 / 待并 / 排队

状态 worktree / PR
在飞 #6730 os cloud login --json 对齐 NDJSON(已裁定) /home/user/objectstack-6730
在飞 #6535 IMPORT_JOB_MAX_ROWS 单一定义 /home/user/objectstack-6535
待并 #6536 退役 ExportFieldMeta 八个无人读的键 PR #6821(refactor(rest)!: major,rc pre-mode 豁免,ADR-0087 registered)
待并 #6306 直挂路由跟随 apiPath(target:v17) PR #6822(minor)
排队 #6143 setFallbackHandler 一致性断言 /home/user/objectstack-6143
排队 #6316 删除死的 session?.user 兜底支 /home/user/objectstack-6316
排队 #6714 client 跟随通告 base(target:v17) /home/user/objectstack-6714

三个排队 worktree 都带着本地提交,按「续领而非重新认领」恢复:续跑令必须点明死亡位置,并要求先并 origin/main、把合并前的一切测量作废。

决策箱与已执行裁定(2026-08-08)

决策箱当前为 0。 本班次执行的维护者裁定:

  1. fix(cli,runtime): os dev / os start / os migrate 解析出三个不同的默认数据库 —— migrate plan 因此在自己刚建的空库上报告全量 drift #6469 三岔口(评论 5225112344):统一默认库名 objectstack.db;存量文件兼容读取 + 一行响亮提示,不做交互式中断(CI 安全);--database-url 接受 sqlite://file: 别名。已随 fix(cli,runtime): 统一 os dev / os start / os migrate 的默认数据库解析 (#6469) #6744 落地。
  2. cli/runtime: explicit driver(--database-driver / OS_DATABASE_DRIVER)在 CLI 与 standalone stack 之间仍有三处分叉(#6265 后续) #6345 岔口 (1) 裁定 C(评论 5225112605):两侧改读 spec 的 resolveDriverId 唯一词表,先补 mongodb/turso 口径;typed 拒绝推广到所有无本地默认的 kind;help 文案由词表推导。seam-mate fix(cli,runtime): os dev / os start / os migrate 解析出三个不同的默认数据库 —— migrate plan 因此在自己刚建的空库上报告全量 drift #6469 已落地,本卡现可派。
  3. rest: filterAppForUser treats app hidden flag as builder-only access gate — built-in account app returns 404 for all normal users #4829 改标(评论 5225112069):domain:clidomain:spec,使 spec 席 sweep 可见。系维护者裁定的代执行,非本席自行分诊。
  4. 配置了 api.apiPath 时,rest 的 9 条 direct-mount 路由挂在 {basePath}/{version} 而不是 {apiPath} #6306 路线 B(评论 5226246591):停机闸实测推翻 issue 的伤害方向,裁定先补 @objectstack/clientpackages.*datasources.external.* 无法跟随非默认 API base:external 面硬编码 /api/v1,rest 面 discovery 也从不通告 routes.packages #6633 的链再移路由。@objectstack/clientpackages.*datasources.external.* 无法跟随非默认 API base:external 面硬编码 /api/v1,rest 面 discovery 也从不通告 routes.packages #6633 已落地,配置了 api.apiPath 时,rest 的 9 条 direct-mount 路由挂在 {basePath}/{version} 而不是 {apiPath} #6306 随即解冻并完成。
  5. @objectstack/client 仍有一族绕过 getRoute() 的硬编码 API base:email.sendcloud.environments.*ScopedProjectClient 的 scope 前缀 #6714 面 1(评论 5226487193):按 @objectstack/clientpackages.*datasources.external.* 无法跟随非默认 API base:external 面硬编码 /api/v1,rest 面 discovery 也从不通告 routes.packages #6633 先例加 email 路由键,完整复刻四车道模式;否掉「通用推导不再逐个加键」的替代路子(那会把「同一个 base 下」从可观测事实降级为隐含假设)。
  6. os login --jsonos cloud login --json 现在对同一件事给出相反的契约 —— 一个发 NDJSON 事件流,一个把设备授权 URL 完全吞掉 #6730(评论 5226489062):os cloud login --json 对齐 NDJSON;附强制条件 —— 全部写点走单一出口、例外必须写进文档、破坏性变化必须在 changeset 里明写。

⛔ 需要维护者/管理员动作

#3739 需要 workspace 获得 objectstack-ai/cloud 读权限。维护者 2026-08-08 已同意授权,但 add_repo 截至 22:27Z 实测仍是 you don't have access。授权未落地前,本车道任何会话都无法开工这张 target:v17

⚠️ 运维情报(下任/并行席必读)

GitHub API 配额是账号级共享的。状态查询走 git 协议(git ls-remote / git log origin/main,不消耗 REST 配额),REST 只留给必须的验收动作。
merge queue 构建失败不会关掉 auto-merge —— PR 被踢出后会自动重新入队,⛔ 不必人工重排。
skip-changeset 落标必须写并集 —— issue_write 的 labels 是整集 PUT,只写一个标签会抹掉机器人标签。
本仓共享检出是 shallow clone,git log -- <path> 会给出看起来正常的假空结果;任何历史/祖先读数前先 git fetch origin main --deepen=80
本贴 01:51Z 实测一次 sanitizer 写侧就地删除:反引号内的 git log -- <path> 被存回为 git log -- ,占位符整个消失、其余正文完好,反引号不提供保护。字面尖括号一律写 < / >,并写后回读逐段核对(失效完全静默,API 返回成功)。经四次实测该转义写法有效。
判死基线:R1 三单 dispatch→report ~69 / ~70 / ~90 分钟。45 分钟是探活门槛,不是判死门槛。
packages/rest 跑测试前先建 @objectstack/types:合并后其 dist 可能陈旧(缺 #6544 新加的 uniqueViolationColumn),会让 import-runner-error-sanitize.test.ts 红约 34 例。pnpm --filter @objectstack/types build 即解,不是代码缺陷
check:type-check-debt 必须先建全闭包(turbo run build,约 8.5 分钟),裸调用按设计报错而非测量另一个世界(#6376)。

📕 本班次教训台账

条件豁免与派发面都要按「形状」写,不要按文件名写。 #6334 的 gate 豁免按文件名预授权,实际红的是另一条同形 gate。同一课在派发面又中了一次:#6469 的派发令点名四个文件,而缺陷的真实形状是「所有解析默认库的地方」—— os db clean第四个分叉解析点,漏掉它的后果是「一条声称清掉项目数据库的命令去清另一个文件」,即破坏性命令的危险。dev 越面修了它,是对的。

PR 翻牌必须等 dev 的报告到达,PR-opened webhook 不是信号。 13:42Z 在 #6727 上抢跑翻牌,而其 dev 仍在跑;dev 回读时看到 draft:false,合理地误判为自己的编辑所致,又把它改了回去。PR 在报告到达前仍归 dev 所有。

配额死亡是可续跑的,前提是派发令里那句「commit locally early and often」。 本班次全队死亡三次(两次会话配额、一次 5 小时暂停),每次零工作损失:第三次死亡后七个 worktree 全在、六个工作区干净、本地提交完整(#6536 五个提交、#6306 四个)。续跑令必须点明死亡位置并要求先并 main、作废此前测量。

仓库侧对 .claude/** 的修复不会到达检出陈旧的运行中会话。 本席的工作树落后 origin/main 157 个提交,其 .claude/agents/os-dev.md 没有 model:,于是每个 dev 都继承了 PM 会话当时的模型 —— 而该会话模型当天被切换过多次。#6686/#6688 在 13:09Z 把 model: opus 钉进仓库,但那条修复四小时内对本席一行作用没起。⇒ 问「我的工具实际会怎么做」时,永远读工作树里的文件,不要读 origin/main;并按现行指令在 Agent 调用上显式传 model#6686 记录的那起事故正是本席造成的。

跨席声明要事前发,不要事后补。 #4633/#6532 是事后补声明(对席恰好空缺,侥幸无损);#6633#6714 改为派发前向 spec-surface 席(#6298)与 metadata 席(#6367)发预声明,否决窗口在 dev 动手前就开着,并要求 dev 进入每个外车道阶段前重读评论。另注:空席的沉默不成立为「同意」,只成立为「无人反对」 —— 结论相同但理由不同,必须写清楚;判断办法是读座位贴首条审计评论的在任/空缺记录,不要只看 assignee。

后台化验证链 + 自唤 = 停摆风险。 R1 的 #6334 因此停摆两次,#6551 又出现同形。⇒ 收到任务中态的完成通知时,不等任何阈值,立刻发前台姿态令:前台持锁、一口气跑完到 PR-open;锁持有者 >10 分钟无进展则如实上报而非干等。

「issue 说消费方会 404」是断言,不是事实。 #6306 的停机闸救下一次反向落地:实测发现 SDK 与旧路由共享同一处硬编码、今天恰好能用,按原方案移动路由反而会新造 404 —— 与 issue 声明的伤害方向相反。⇒ 当一张卡的正当性依赖某个消费方的行为时,派发令必须把「去量那个消费方」写成带停机条件的闸。

不许制造假红。 纯移除只能以「缺席」被观察,缺席没有天然的红(#6536 实测:回加八个键,main 原有 1097 个用例 0 变红)。正确做法是把红钉在可观测的产物形状上(精确键集),并如实申报「此方向无红」。同理 #6316 的死肢删除、#6643 的不可观测站点,都按「如实报告不可观测」处理,而不是补一条假覆盖。


上一班次留档(qq9340100 班次,原文保留):

账目(该班次 15 单 MERGED 全关闭):#6071#6205#4873#6220#5856+#5800#6244#5881#6246#5820#6272#5521#6295#5822#6303#6265#6344#6241#6348#5792#6379

交接队列(该班次派生):#6206#6307#6361 / #6363(⚠️ cursor 两侧必须同向裁决)、#6345#6217#6216#6349#6306#6259#6268#6316 —— 分诊席已陆续定级入队。


迁移注记:「范围 / 当前 PM / 说明」自 #4604 座位表逐字迁移(2026-08-06);迁移时刻起本贴即该座位唯一权威。

Metadata

Metadata

Labels

pm:seatPM seat registry issue - single-writer body, index = this label

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions