Skip to content
Merged
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
13 changes: 12 additions & 1 deletion .claude/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,33 +30,43 @@
"Bash(agent-browser skills *)",
"Bash(curl -sS -X POST https://api.github.com/repos/objectstack-ai/objectstack/issues/*/labels *)",
"Bash(curl -sS -X POST https://api.github.com/repos/objectstack-ai/hotcrm/issues/*/labels *)",
"Bash(curl -sS -X POST https://api.github.com/repos/objectstack-ai/mobile/issues/*/labels *)",
"Bash(curl -sS -X GET https://api.github.com/rate_limit *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/objectstack/issues?* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/objectui/issues?* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/hotcrm/issues?* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/mobile/issues?* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/objectstack/issues/* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/objectui/issues/* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/hotcrm/issues/* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/mobile/issues/* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/objectstack/issues/*/comments* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/objectui/issues/*/comments* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/hotcrm/issues/*/comments* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/mobile/issues/*/comments* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/objectstack/issues/*/labels* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/objectui/issues/*/labels* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/hotcrm/issues/*/labels* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/mobile/issues/*/labels* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/objectstack/pulls/* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/objectui/pulls/* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/hotcrm/pulls/* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/mobile/pulls/* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/objectstack/pulls/*/files* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/objectui/pulls/*/files* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/hotcrm/pulls/*/files* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/mobile/pulls/*/files* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/objectstack/pulls/*/commits* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/objectui/pulls/*/commits* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/hotcrm/pulls/*/commits* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/mobile/pulls/*/commits* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/objectstack/commits/*/check-runs* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/objectui/commits/*/check-runs* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/hotcrm/commits/*/check-runs* *)",
"Bash(curl -sS -X GET https://api.github.com/repos/objectstack-ai/mobile/commits/*/check-runs* *)",
"Bash(curl -sS -X PATCH https://api.github.com/repos/objectstack-ai/objectstack/pulls/* *)",
"Bash(curl -sS -X PATCH https://api.github.com/repos/objectstack-ai/hotcrm/pulls/* *)",
"Bash(curl -sS -X PATCH https://api.github.com/repos/objectstack-ai/mobile/pulls/* *)",
"Bash(curl -sS -X POST https://api.github.com/repos/objectstack-ai/objectstack/pulls/*/ccr/ready_for_review *)",
"Bash(curl -sS -X PUT https://api.github.com/repos/objectstack-ai/objectstack/pulls/*/ccr/auto_merge *)",
"Bash(curl -sS -X POST https://api.github.com/repos/objectstack-ai/hotcrm/pulls/*/ccr/ready_for_review *)",
Expand All @@ -74,7 +84,8 @@
"Bash(node scripts/pm/issue-transfer.mjs *)",
"Bash(node --use-env-proxy scripts/pm/issue-transfer.mjs *)",
"Bash(curl -sS -X PATCH https://api.github.com/repos/objectstack-ai/objectstack/issues/* *)",
"Bash(curl -sS -X PATCH https://api.github.com/repos/objectstack-ai/hotcrm/issues/* *)"
"Bash(curl -sS -X PATCH https://api.github.com/repos/objectstack-ai/hotcrm/issues/* *)",
"Bash(curl -sS -X PATCH https://api.github.com/repos/objectstack-ai/mobile/issues/* *)"
],
"deny": [
"mcp__github__issue_write",
Expand Down
4 changes: 2 additions & 2 deletions .claude/skills/pm-dispatch/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,10 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
- 批 = 一个上下文里读完的 ≤5 张同族卡,是质量单位,⛔ 不是预算。
- 班 = 一个会话的任期,只以交接或惰性回收结束。
- 席位两形:Routine 席与项目席(会话是车队项目的线程);细则见 `references/seat-lifecycle.md`。
- 项目席唤醒 = PR 订阅 + 每席一个自建自绑巡查 routine(总监席除外);⛔ 无 `send_later` 链。
- 项目席唤醒 = PR 订阅 + 自建自绑巡查 routine(总监席与按需席除外);⛔ 无 `send_later` 链。
- 探针先行:fire 的第一动作是一次最便宜的车道盘点查询,⛔ 在它之前不读任何长文本。
- 队列空(逐卡表见 `references/seat-lifecycle.md`)+ 无在飞 + 无待复核 + 决策箱无新答复 ⇒ 自退。
- 分诊席与车道席常驻,断粮即换账号重开该席与信箱;分诊席默认判断档;裁决归总监席。
- 分诊席与车道席常驻(按需席除外),断粮换号重开席与信箱;分诊默认判断档;裁决归总监。
- 子代理裁决逐份过转录核验采信。

## 阶段细则索引
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# 多仓协调

- 产品依赖方向固定:`objectstack`(后端与 `ui/` 前端,`packages/spec` 唯一契约)→ `cloud`、`hotcrm`。
- 依赖方向固定:`objectstack`(后端与 `ui/`,`packages/spec` 唯一契约)→ `cloud`、`hotcrm`、`mobile`。
- 多车道仓 `objectstack`:中央分诊唯一生产 `domain:*`/type/定级,定级例外见 triage-duties 自分诊。
- 单车道仓 `cloud`、`objectos`、`hotcrm`、`www.objectos.ai`;未来新仓默认此类。
- 单车道仓 `cloud`、`objectos`、`hotcrm`、`mobile`、`www.objectos.ai`;未来新仓默认此类。
- 单车道仓 `repo:*` 席自理机械三务,⛔ 不产 `domain:*`;决策卡入本仓收件箱,不落 objectstack。
- 机械三务 = 自扫 sweep、自打 `type`、自做首触(含 `finding`;业务理由归召唤的总监席)。
- 新仓登记是一张清单:座位贴、标签、类别归属、门禁盘点、写身份锁移植(deny + hooks)。
Expand Down
2 changes: 1 addition & 1 deletion .claude/skills/pm-dispatch/references/decision-analysis.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@

## 应用仓推荐序特例

- 能力先建在平台(spec、objectstack 运行时与其 `ui/` 渲染器);应用仓(cloud、hotcrm)不自建替代。
- 能力先建在平台(spec、运行时与 `ui/` 渲染器);应用仓(cloud、hotcrm、mobile)不自建替代。
- 阻塞源是平台缺陷 ⇒ 恒荐等待;⛔ 不荐绕行(形状容错、复刻平台规则)、不荐劈半落地。
- 过渡唯维护者明裁;应用仓临时扩展平台契约,仅当平台卡与移除卡同一裁决立出。
- 应用仓裁决立出的平台卡取被裁卡优先级,⛔ 不降档。推论出处:cloud 2932 A、cloud 2924 A。
2 changes: 1 addition & 1 deletion .claude/skills/pm-dispatch/references/lanes/hotcrm.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
- 依赖是已发布的 `@objectstack/*` 包,逐包定版号,非 git pin。
- ⇒ 平台侧修复必须先发版、再在此升版号才到得了展品。
- 上游卡对本道的解锁判据是已发布,不是已合并。
- pm 状态机词表五仓统一,幂等创建在 `scripts/pm/ensure-pm-labels.sh`,对 hotcrm 实跑是落地步骤。
- pm 状态机词表各仓统一,幂等创建在 `scripts/pm/ensure-pm-labels.sh`,对 hotcrm 实跑是落地步骤。

## 席内判断

Expand Down
56 changes: 56 additions & 0 deletions .claude/skills/pm-dispatch/references/lanes/mobile.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# 车道岗位说明:repo:mobile

见 cross-repo-coordination.md;本文是本席的岗位说明,现值状态恒在座位贴,⛔ 不迁入本文件。

## 形态

- 本席为姊妹仓执行座位:在 mobile 仓认领、派发、复核;落地窗口止于 ACCEPT 加交棒。
- 按需席:维护者以指令行 `pm-dispatch mobile` 召唤;本席不建巡查 routine。
- 退席按 SKILL.md 自退四件(队列空、无在飞、无待复核、决策箱无新答复)。
- 信箱随召唤开、随退席关。
- 前提:mobile 仓的原生壳改造已进其 `main`;之前 ⛔ 不召唤本席。
- 座位贴住 mobile 仓,带 `pm:seat`;车队总表经 `fleet-roster.mjs` 默认仓列读到它。
- 存根的巡查行写 `Patrol: none — 按需席`:表明无 routine,半状态巡查只核此行在不在。
- ⛔ 不产 `domain:*`;机械三务(含首触定级)按 cross-repo-coordination.md 单车道仓条自理。

## 范围

- `objectstack-ai/mobile` 全仓:Expo 原生壳,在 WebView 中宿主平台 Console。
- 边界:业务界面与元数据渲染恒在平台 `ui/` 实现。
- ⛔ 永不在壳内原生重写 Console 已有的界面。
- 壳只收原生能力:服务器选择、推送、桥接方法、系统集成、原生加载与兜底页。
- 原生业务页只经仓内 `docs/HYBRID-SHELL.md` 的路由归属规则进入,该节四条前提缺一不收。
- 移动端发现的 Console 缺陷,立普通平台卡到 objectstack(渲染器在其 `ui/`),待分诊。
- 那是 file-at-destination、非缝卡;mobile 侧同笔挂 `pm:blocked` 加 `Blocked-by:` 回链。
- 解锁判据是修复已进平台发行版、配置的服务器可升到它;⛔ 不是上游已合并。
- ⛔ 永不在壳内绕行 Console 缺陷:绕行把平台缺口藏进壳,其余宿主从此拿不到修复。
- 桥接契约单源在仓内 `docs/HYBRID-SHELL.md`。
- 新桥接方法验收后,即在 objectstack 立 Console 消费卡。
- mobile 自己的卡(含决策卡)都住 mobile 仓:issue 住在修复落地的仓,决策入本仓收件箱。
- 无 `repo:mobile` 缝标签:今无具名读者。
- 首张跨仓次序即实质的协调卡出现时,随该卡走词表 PR 增设。

## 常设承诺

- 半状态巡查在本仓无载体:无 `half-state-patrol.yml`,无 workflow 即无锚 issue。
- ⇒ 手工半边:开新派发前整车道全交集读 open 卡。
- 逐张核交付 PR 是否已合并或关闭,先处置半状态;⛔ 无锚不等于免检。
- 壳不持 API 凭据、不调平台 API;⛔ 不重新引入 `@objectstack/*` 客户端依赖。
- `main` 上的 push 跑 `eas-build.yml` 与 `eas-update.yml`;`eas-submit.yml` 手动触发即商店提交。
- 三者皆按发布动作对待(AGENTS.md 发布条),⛔ 不由席位触发。
- `EXPO_TOKEN` 是否配置席位读不到,恒按已配置。
- ⇒ 本仓 PR 的合并恒归维护者;改 `.github/workflows/**` 的 PR 同此,不因触发方式改变而解除。
- 设备验证无 CI 载体:需真机的验收项写进 PR `## 维护者速读` 的「需要你做的」。
- ⛔ 未上真机的项不报已验。
- 本仓有 `.changeset/` 而无 changeset 门禁:用户可见变更随 PR 带 changeset,席位复核时核对。
- 不扩散需求:创业阶段聚焦原则全额适用;原生能力卡第一问恒为 Web 是否真做不到。
- 框架单源在 SKILL.md 〈升级与决策〉,⛔ 不另抄。
- pm 状态机词表各仓统一,幂等创建在 `scripts/pm/ensure-pm-labels.sh`,对 mobile 实跑是落地步骤。

## 席内判断

- 收卡第一问:原生能力还是业务界面。
- 业务界面 ⇒ 转 objectstack 平台卡,本卡关 not planned 并回链。
- 原生页面化提案进决策箱,附该路由的移动端用量与 Web 端性能读数;无读数不收。
- 会话转移、桥接新增写能力、导航策略放行新来源,皆属安全边界,恒在人工地板。
- 拿不准升决策箱,⛔ 不自裁。
4 changes: 2 additions & 2 deletions .claude/skills/pm-dispatch/references/project-forms.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
- 项目指令只有一行:`pm-dispatch <席位> [<席位>…]`,如 `pm-dispatch 总监`、`pm-dispatch ui skills`。
- 首词恒为技能目录名 `pm-dispatch`;⛔ 不用 `fleet`,它已是 bot 与中继的名字。
- 席位词 = 中文名或车道文件名:总监 = `lanes/director.md`,分诊 = `lanes/triage.md`。
- 其余席位词同 `lanes/<lane>.md` 文件名:ui、skills、devx、server、spec、hotcrm。
- 其余席位词同 `lanes/<lane>.md` 文件名:ui、skills、devx、server、spec、hotcrm、mobile。
- 一车道多席:协调者取 🟢 行写本账号的那一席;无则取空席;再无则问维护者一次。
- 其余一切住本文:⛔ 不往项目里贴模板;⛔ 不在账号层复制技能。

Expand All @@ -23,7 +23,7 @@
- 指令行就是指派:维护者在项目里写下或改写这一行,是唯一的指派动作。
- 项目聊天里的长句(「本账户坐 X;Y 的 PR 由本账户复审」)是等价写法。
- 坐席即把本账号写进 🟢 行、每席开一条席位线程;⛔ 无花名册文件。
- 坐席即建巡查 routine(见 `seat-lifecycle.md`);分诊席加每小时裸卡轮;总监席不建。
- 坐席即建巡查 routine(见 `seat-lifecycle.md`);分诊加每时裸卡轮;总监与宪章定的按需席不建。

## 接管不等撞墙账号

Expand Down
2 changes: 1 addition & 1 deletion .claude/skills/pm-dispatch/references/seat-lifecycle.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@
## 停止条件与待命

- 停:队列空或 `rounds` 用尽(仅一次性调用适用);一轮 ≥ 半数派发失败或升级;维护者打断。
- 队列空是待命非退场:巡查跑到收班,只维护者明令停;⛔ 不按「N 次无变化即停」的习惯。
- 队列空是待命非退场(按需席除外):巡查跑到收班,只维护者令停;⛔ 不按 N 次无变化即停。
- 队列空是逐卡表非结论:报无卡可派(维护者/协调者/轮报)即列队列过滤当刻返回的各卡。
- 逐卡:卡号、同轮现读标签与 assignee(⛔ 不用缓存)、具名卡点;无卡点即候选,⛔ 不得报空。
- 卡点一份词表:候选定义反面(`execution-duties.md`),open `Blocked-by:`、无分诊审计、他席 `Claim:`。
Expand Down
Loading
Loading