维护者速读
事情:卡 26(#26 / PR #27)把 120 份种子合同按相对方分给了 §10 的三个「业务承办」,43 / 43 / 34。但开箱即用时这三个账号并不存在,名字解析不到就静默落 NULL,所以 pnpm demo 跑完,「我的合同 › 我发起的」仍然是空的,要等你在 Setup 里建好账号、再跑一次 pnpm demo(数据集是 upsert,会自动交接)才填上。
为什么这不只是「少一步」:实测下来,开箱状态更彻底——pnpm demo 只产出一个账号(dev admin),而 dev admin 不持有任何 clm_* 权限集,GET /api/v1/meta/app/clm 给它返回 navigation: []。所以开箱即用时,没有任何一个账号能打开「我的合同」这个分区,跟这张卡改没改都无关。对一个「能直接卖」的产品,这意味着 demo 的第一屏永远要靠一段说明书才能看到。
你要做的:回一个字母。A、B 或 C。
选项
A — 维持现状(卡 26 已交付的形态)。 fixture 写好名字,操作者在 Setup 建账号再跑一次;README 写明了三个名字和分配,pnpm demo 结束时也会在终端打出来。
代价:§10 一字未动,没有虚构人物,但第一屏在操作者动手之前是空的。
B — 让 scripts/demo.mjs 自己建这三个账号并各授予 clm_requester。 之后 pnpm demo 一条命令就能演示。
代价:§10 说「用户不可种子」约束的是 fixture,脚本不是 fixture——但这仍然是建账号,而且要发明邮箱与密码,那是产品内容不是工程细节。约 40 行,用的两个端点这张卡的验收里已经跑通(POST /api/v1/auth/admin/create-user 加一行 sys_user_permission_set)。
C — 把 #11 第一问判成 B(「我的合同」去掉 clm_requester.access 门控,登录即见),然后让 dev admin 分一份合同。
代价:最省事,但它是另一张卡的决定,而且会掏空 §04/§05 那套 *.access 令牌体系的一致性。
两问为什么耦合
如果 #11 判 B,dev admin 就能看见「我的合同」;而平台的 claimSeedOwnership 在单次启动下本来就会把 120 份全认领给它(实测 adminPromoted: true, ownershipClaimed: 260)。也就是说 C 一步同时解决两件事,一个新账号都不用建——代价是拿走一个门控开关。
反过来,如果 #11 判 A(我推荐的,也是卡 07 已实现的),那 B 就是让 demo 开箱可用的唯一路子,因为 A 的世界里 dev admin 永远看不到那个分区。
⇒ 先回 #11 第一问,这一张的答案就基本定了。 单独回这一张也行,但两张一起回只用想一次。
四棱分析
实际业务需求 — 偏 B。这是买家 demo 的第一屏,「跑一条命令就能看到东西」和「先读一页说明书建三个账号」对销售转化不是一个量级。A 的成本全部落在最不该承担成本的人身上——第一次接触这个产品的人。
项目长远合理性 — 偏 A 或 B,明确反对 C。C 用一个门控决定去换 demo 数据的便利,是拿架构换演示,方向反了;§04/§05 整套导航建立在五个 *.access 令牌上,抽掉一个,下一个作者照抄的就是「分区可以不门控」。A 与 B 都不动架构,区别只在这段建账号的代码放在 fixture 外面算不算越界——我认为不算,§10 那句话防的是「种子数据里出现假用户」,脚本在开发机上建演示账号是另一回事。
防 AI 写错 — 偏 B,理由不直观。A 依赖的是操作者照着 README 把名字一字不差地打对(Business Requester 1),打错一个字符就静默落 NULL、无报错无告警——这正是这个仓库一直在防的失败形状:一个静默的空结果和一个正确的空结果不可区分。B 把这个交接从人手里拿走,变成代码里的一个常量。
创业阶段不扩散 — 偏 A。B 要发明三个人的邮箱密码,等于 demo 开始携带凭据;一旦发布,这三组凭据就是产品的一部分了。这是 B 唯一的实质代价,也是它必须由你而不是由循环来定的原因。
结论:四棱里三棱偏 B,一棱(不扩散)偏 A,C 被长远合理性明确反对。我推荐 B,并建议账号名换成像真人的名字(Business Requester 1 是我起的占位,卡 26 的 agent 也把这一条列为要你定的)。但 B 要发明产品内容,所以它是你的决定,不是循环的。
影响
不阻塞任何在途卡片。M3 的卡 09–14 都不读这一条。答案影响的是 scripts/demo.mjs、README 那一节,以及(若选 C)src/apps/clm.app.ts 第 81 行。
关联
#26 / PR #27(这一条的来源,fixture 半边已交付)· #11 第一问(耦合的那一半)· #19(另一块空屏:合同版本,另有原因,仍在等裁定)· #18 / PR #21(两次启动交接,也就是无意中关掉归属认领的那次修复)。
维护者速读
事情:卡 26(#26 / PR #27)把 120 份种子合同按相对方分给了 §10 的三个「业务承办」,43 / 43 / 34。但开箱即用时这三个账号并不存在,名字解析不到就静默落 NULL,所以
pnpm demo跑完,「我的合同 › 我发起的」仍然是空的,要等你在 Setup 里建好账号、再跑一次pnpm demo(数据集是 upsert,会自动交接)才填上。为什么这不只是「少一步」:实测下来,开箱状态更彻底——
pnpm demo只产出一个账号(dev admin),而 dev admin 不持有任何clm_*权限集,GET /api/v1/meta/app/clm给它返回navigation: []。所以开箱即用时,没有任何一个账号能打开「我的合同」这个分区,跟这张卡改没改都无关。对一个「能直接卖」的产品,这意味着 demo 的第一屏永远要靠一段说明书才能看到。你要做的:回一个字母。A、B 或 C。
选项
A — 维持现状(卡 26 已交付的形态)。 fixture 写好名字,操作者在 Setup 建账号再跑一次;README 写明了三个名字和分配,
pnpm demo结束时也会在终端打出来。代价:§10 一字未动,没有虚构人物,但第一屏在操作者动手之前是空的。
B — 让
scripts/demo.mjs自己建这三个账号并各授予clm_requester。 之后pnpm demo一条命令就能演示。代价:§10 说「用户不可种子」约束的是 fixture,脚本不是 fixture——但这仍然是建账号,而且要发明邮箱与密码,那是产品内容不是工程细节。约 40 行,用的两个端点这张卡的验收里已经跑通(
POST /api/v1/auth/admin/create-user加一行sys_user_permission_set)。C — 把 #11 第一问判成 B(「我的合同」去掉
clm_requester.access门控,登录即见),然后让 dev admin 分一份合同。代价:最省事,但它是另一张卡的决定,而且会掏空 §04/§05 那套
*.access令牌体系的一致性。两问为什么耦合
如果 #11 判 B,dev admin 就能看见「我的合同」;而平台的
claimSeedOwnership在单次启动下本来就会把 120 份全认领给它(实测adminPromoted: true, ownershipClaimed: 260)。也就是说 C 一步同时解决两件事,一个新账号都不用建——代价是拿走一个门控开关。反过来,如果 #11 判 A(我推荐的,也是卡 07 已实现的),那 B 就是让 demo 开箱可用的唯一路子,因为 A 的世界里 dev admin 永远看不到那个分区。
⇒ 先回 #11 第一问,这一张的答案就基本定了。 单独回这一张也行,但两张一起回只用想一次。
四棱分析
实际业务需求 — 偏 B。这是买家 demo 的第一屏,「跑一条命令就能看到东西」和「先读一页说明书建三个账号」对销售转化不是一个量级。A 的成本全部落在最不该承担成本的人身上——第一次接触这个产品的人。
项目长远合理性 — 偏 A 或 B,明确反对 C。C 用一个门控决定去换 demo 数据的便利,是拿架构换演示,方向反了;§04/§05 整套导航建立在五个
*.access令牌上,抽掉一个,下一个作者照抄的就是「分区可以不门控」。A 与 B 都不动架构,区别只在这段建账号的代码放在 fixture 外面算不算越界——我认为不算,§10 那句话防的是「种子数据里出现假用户」,脚本在开发机上建演示账号是另一回事。防 AI 写错 — 偏 B,理由不直观。A 依赖的是操作者照着 README 把名字一字不差地打对(
Business Requester 1),打错一个字符就静默落 NULL、无报错无告警——这正是这个仓库一直在防的失败形状:一个静默的空结果和一个正确的空结果不可区分。B 把这个交接从人手里拿走,变成代码里的一个常量。创业阶段不扩散 — 偏 A。B 要发明三个人的邮箱密码,等于 demo 开始携带凭据;一旦发布,这三组凭据就是产品的一部分了。这是 B 唯一的实质代价,也是它必须由你而不是由循环来定的原因。
结论:四棱里三棱偏 B,一棱(不扩散)偏 A,C 被长远合理性明确反对。我推荐 B,并建议账号名换成像真人的名字(
Business Requester 1是我起的占位,卡 26 的 agent 也把这一条列为要你定的)。但 B 要发明产品内容,所以它是你的决定,不是循环的。影响
不阻塞任何在途卡片。M3 的卡 09–14 都不读这一条。答案影响的是
scripts/demo.mjs、README 那一节,以及(若选 C)src/apps/clm.app.ts第 81 行。关联
#26 / PR #27(这一条的来源,fixture 半边已交付)· #11 第一问(耦合的那一半)· #19(另一块空屏:合同版本,另有原因,仍在等裁定)· #18 / PR #21(两次启动交接,也就是无意中关掉归属认领的那次修复)。