|
810
|
124
|
4
|
5
|
|
0
|
test: add clause-level evidence for 14 thinly cove test: add clause-level evidence for 14 thinly covered P0 requirements...
|
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1791510359
|
1791510367
|
1791510367
|
0
|
0
|
0
|
Edit
Delete
|
|
811
|
124
|
5
|
5
|
|
0
|
feat: add review invitation guardrail to manager c feat: add review invitation guardrail to manager cockpit (SCO11)...
|
基于 PR #2(`claude/sco11-invite`,已包含 PR #3)。PR #2 合并 基于 PR #2(`claude/sco11-invite`,已包含 PR #3)。PR #2 合并后,请把本 PR 的目标改为 `main`。
## 内容
- **14 项 P0 逐条证据**:为 CON03、SELF04/05/08/09/12、JRN01/03–06、CLN03、INS03、OPN02 补 58 条测试,不改源码。查到的缺口写入 `docs/acceptance-unimplemented.md`,例如:上一场私人欢迎和素材的清除逻辑缺失、限制名单没有批准生效动作、经营指标是固定样例、没有节假日价格日历
- **GRP06 拼团**(活动执行页)
- 规则须经 D29 批准才能开团
- 参与时校验团版本,防止并发超额
- 成团只产生"已成团待预约",预约另查容量,且不等于入场
- 未成团时逐人生成"待退款核对",不自动退款
- **GAM05 奖品额度**(活动执行页)
- 额度负责人、成本负责人、单价没登记就不能发奖
- 多个活动共用一个奖品池,数量和预算都不超
- 参与授权与音视频宣传授权分开
- **外部对接推进清单** `docs/integration-readiness.md`:按卡住的 P0 数量排序,列出每项依赖要业务方提供什么、接通前怎么降级、由哪个工程包承接
- 验收矩阵:未实现 2 项 → 0 项;有命名证据的需求 165 → 179
## 验证
- 原型测试 369/370:唯一失败是缺 `dist` 构建产物的打包测试
- `node ops/check-acceptance.mjs --check`、`node ops/sync-package-status.mjs --check`、`python3 scripts/verify-development-plan.py` 均通过
- 拼团与奖品两条流程已在浏览器中走通,控制台无报错
## 注意
- 所有拼团规则与奖品参数都是演示值,要等 D29 和 GAM05 的负责人确定后才能正式使用
- 签认仍为 0;30 项 P0 需等外部对接
🤖 Generated with [Claude Code](https://claude.com/claude-code)...
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1791510471
|
1791510481
|
1791510481
|
0
|
0
|
0
|
Edit
Delete
|
|
812
|
124
|
6
|
5
|
|
0
|
feat(SUP01): public FAQ and pre-booking customer h feat(SUP01): public FAQ and pre-booking customer help on current main...
|
Port the public FAQ, pre-booking general help and Port the public FAQ, pre-booking general help and original help-record
targeting from codex/ktv-delivery-integration (5d56fcc) onto main's
consumer workspace reader (f295ce8), instead of the older readSerial guard.
- Signed-out and no-booking customers can open the FAQ; it exposes no
customer, store, price or device facts.
- Signed-in customers without a booking can save a store-level general
help request; payment/redeem/door topics still require the original
booking. Results reuse independent review and customer confirmation.
- Receipts locate the exact original help record; help drafts and result
notes are cleared only within the same identity and help scope.
- SUP01 gets named test mappings (consumer-help, prototype-enhancement,
persistence).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>...
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1791558540
|
1791558556
|
1791558556
|
0
|
0
|
0
|
Edit
Delete
|
|
813
|
124
|
7
|
5
|
|
0
|
test: prepare CON01 sandbox sign-off for booking s test: prepare CON01 sandbox sign-off for booking slots...
|
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1791558679
|
1791558684
|
1791558684
|
0
|
0
|
0
|
Edit
Delete
|
|
814
|
124
|
8
|
5
|
|
0
|
fix(AUD-EXIT): keep fulfilling original obligation fix(AUD-EXIT): keep fulfilling original obligations after cooperation exit...
|
Exit used to freeze an exiting cooperation: delive Exit used to freeze an exiting cooperation: deliveries were rejected, so
open promises had no continued-handling path (ALI01, AC30).
- deliver accepts active or exiting cooperations, still capped by each
original obligation; after-exit entries are tagged phase:'after-exit'
with the acting principal.
- exit records which obligations were open at that moment; there is still
no action that adds new obligations, and approve stays draft-only.
- new completeExit moves exiting -> exited only when every original
obligation is delivered (OBLIGATIONS_OPEN otherwise); exited rejects
further deliveries. Finance reconcile is unaffected and funds remain
unverified.
- store workbench mirrors the rules and adds a 完成退出 action.
- ALI01/AC30 named test mapping for the new rule test.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>...
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1791559039
|
1791559044
|
1791559044
|
0
|
0
|
0
|
Edit
Delete
|
|
815
|
124
|
9
|
5
|
|
0
|
test: move remaining hardcoded booking fixtures on test: move remaining hardcoded booking fixtures onto future dates...
|
The CRM04/BRD04 20:30 failures were already fixed The CRM04/BRD04 20:30 failures were already fixed on main (3e41516,
4941806). Running the self-contained suites under a shifted clock found
two more booking fixtures that would start failing once their date passed:
- composition-fixtures.mjs booked 2026-10-20, so all seven PER07 tests
fail from 20:30 Asia/Shanghai that day.
- prototype-enhancement.persistence.test.mjs defaulted to 2026-10-12 and
used 10-13/14/15 for its other bookings.
Both now go through futureBookingDate(), which keeps weekdays and distinct
dates while staying ahead of the server day.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>...
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1791559271
|
1791559275
|
1791559275
|
0
|
0
|
0
|
Edit
Delete
|
|
816
|
124
|
10
|
5
|
|
0
|
test: dedicated evidence for 14 P1/P2 requirements test: dedicated evidence for 14 P1/P2 requirements and strict licence dates...
|
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1791559454
|
1791559459
|
1791559459
|
0
|
0
|
0
|
Edit
Delete
|
|
817
|
124
|
11
|
5
|
|
0
|
test: dedicated evidence for 14 P1/P2 requirements test: dedicated evidence for 14 P1/P2 requirements and strict licence dates...
|
|
0
|
0
|
0
|
1
|
0
|
|
0
|
1791559480
|
1791559480
|
0
|
0
|
0
|
0
|
Edit
Delete
|
|
818
|
124
|
12
|
5
|
|
0
|
feat(GOV01): renew development test registration w feat(GOV01): renew development test registration without rotating identities...
|
The registered development scope had no renewal pa The registered development scope had no renewal path: rerunning the script
only re-validated the file, and bindings expire 30 days after generation.
- renewDevelopmentRegistration() keeps tenant, store, registration, binding
and person UUIDs; only active bindings get expiresAt = now + days
(1-30, default 30). Revoked/suspended people are never revived. Each
renewal records time, authorization and previous expiry in `renewals`.
- ops/register-development-test-scope.mjs --renew "<authorization>".
- Renewed the fixture once: 2026-11-07T02:15Z -> 2026-11-08T15:33Z.
- Running registered gateways read their release copy and need a redeploy.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>...
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1791560333
|
1791560339
|
1791560339
|
0
|
0
|
0
|
Edit
Delete
|
|
819
|
124
|
13
|
5
|
|
0
|
feat(GOV01): allow 90-day development registration feat(GOV01): allow 90-day development registration renewals and renew again...
|
At the user's request the renewal cap and defa At the user's request the renewal cap and default go from 30 to 90 days
(DEVELOPMENT_RENEWAL_MAX_DAYS); first-time generation still issues 30 days.
Renewed the fixture again with the same identities: bindings now expire
2027-01-07T15:38:57Z. Both renewals are recorded in `renewals`.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>...
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1791560579
|
1791560584
|
1791560584
|
0
|
0
|
0
|
Edit
Delete
|
|
820
|
124
|
14
|
5
|
|
0
|
Merge remote-tracking branch 'origin/main' Merge remote-tracking branch 'origin/main' into claude/vid01-adv03...
|
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1791560682
|
1791560687
|
1791560687
|
0
|
0
|
0
|
Edit
Delete
|
|
821
|
124
|
15
|
5
|
|
0
|
docs: record verbal confirmation of development de docs: record verbal confirmation of development defaults (2026-10-09)...
|
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1791561736
|
1791561742
|
1791561742
|
0
|
0
|
0
|
Edit
Delete
|
|
822
|
124
|
16
|
5
|
|
0
|
docs: 开发默认值口头确认,并刷新验收矩阵
|
- required-business-decisions.md:开发默认值表标为“2026-10- - required-business-decisions.md:开发默认值表标为“2026-10-09 已口头确认,待正式审批记录”,包括秒杀迟到支付转人工退款核对、转写中断片段不能校对两条补充规则;仍待定的部分(门店地址随 BD01、暂锁到期是否通知、可校对岗位、真实开票能力)单独写明。
- 这只是口头确认:代码里的策略仍是 approved:false,要等正式批准记录到位后再改;没有启用任何真实支付、设备、平台、开票或语音识别能力。
- 重新生成验收矩阵:#12/#13 合并后 main 上的矩阵已过期,重跑 903/903 通过,--check 恢复为 0。
🤖 Generated with [Claude Code](https://claude.com/claude-code)...
|
0
|
0
|
0
|
1
|
0
|
|
0
|
1791588968
|
1791588968
|
0
|
0
|
0
|
0
|
Edit
Delete
|
|
823
|
124
|
17
|
5
|
|
0
|
feat(AC79): move video wall layout controls into t feat(AC79): move video wall layout controls into the domain and add evidence...
|
AC79 (HQR04) was the only non-external acceptance AC79 (HQR04) was the only non-external acceptance case without named
evidence: group/flat, 4/9/16, paging, sorting and rotation switches must
keep the scope, and mobile focus/return must stay reachable.
- hq-wall-domain: wallControl() owns slots/sort/pin/mode/page/tour changes
and never touches store, region, type or point scope; wallSections()
derives group/flat sections for the current page.
- HeadquartersConsole/VideoWall use them instead of inline setters; the
behavior is unchanged (layout, risk-first, manual paging, focus and talk
stop rotation; group/flat keeps the page; sort/pin/layout reset to page 1).
- New AC79 test walks every switch over three scopes and checks each page
covers the scope exactly once; AC79 maps to it.
- Browser (store dev server, demo data): 北区 scope stayed 12 cameras/3
stores through 4->flat->risk->16; next-page stopped rotation; at 375px,
focus moved to the detail panel and return restored scroll and the
original focus button.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>...
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1791589290
|
1791589300
|
1791589300
|
0
|
0
|
0
|
Edit
Delete
|
|
824
|
18
|
230
|
1
|
|
0
|
登录和验证密码增加次数限制。
|
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1791868121
|
1791868133
|
1791868133
|
0
|
0
|
0
|
Edit
Delete
|
|
825
|
18
|
231
|
1
|
|
0
|
登录和验证密码增加次数限制。
|
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1791868153
|
1791868177
|
1791868177
|
0
|
0
|
0
|
Edit
Delete
|
|
826
|
22
|
114
|
1
|
|
0
|
激活判断其他门店的错误提示语
|
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1791868409
|
1791868415
|
1791868415
|
0
|
0
|
0
|
Edit
Delete
|
|
827
|
22
|
115
|
1
|
|
0
|
激活判断其他门店的错误提示语
|
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1791868428
|
1791868433
|
1791868433
|
0
|
0
|
0
|
Edit
Delete
|
|
828
|
23
|
63
|
1
|
|
0
|
1111
|
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1791868451
|
1791868458
|
1791868458
|
0
|
0
|
0
|
Edit
Delete
|
|
829
|
23
|
64
|
1
|
|
0
|
1111
|
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1791868475
|
1791868484
|
1791868484
|
0
|
0
|
0
|
Edit
Delete
|
|
830
|
23
|
65
|
1
|
|
0
|
1111
|
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1791868652
|
1791868657
|
1791868657
|
0
|
0
|
0
|
Edit
Delete
|
|
831
|
21
|
342
|
1
|
|
0
|
包厢安全信息二维码
|
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1791883266
|
1791883284
|
1791883284
|
0
|
0
|
0
|
Edit
Delete
|
|
832
|
21
|
343
|
1
|
|
0
|
包厢安全信息二维码
|
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1791883297
|
1791883305
|
1791883305
|
0
|
0
|
0
|
Edit
Delete
|
|
833
|
21
|
344
|
1
|
|
0
|
营业时间盘点单
|
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1792057288
|
1792057294
|
1792057294
|
0
|
0
|
0
|
Edit
Delete
|
|
834
|
21
|
345
|
1
|
|
0
|
包厢安全信息二维码
|
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1792057321
|
1792057332
|
1792057332
|
0
|
0
|
0
|
Edit
Delete
|
|
835
|
18
|
232
|
1
|
|
0
|
需求 pc小程序设置 16881
|
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1792376943
|
1792377006
|
1792377006
|
0
|
0
|
0
|
Edit
Delete
|
|
836
|
18
|
233
|
1
|
|
0
|
需求 pc小程序设置 16881
|
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1792377026
|
1792377034
|
1792377034
|
0
|
0
|
0
|
Edit
Delete
|
|
837
|
21
|
346
|
1
|
|
0
|
其他 兼容方法变更
|
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1792377221
|
1792377227
|
1792377227
|
0
|
0
|
0
|
Edit
Delete
|
|
838
|
21
|
347
|
1
|
|
0
|
其他 兼容方法变更
|
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1792377236
|
1792377247
|
1792377247
|
0
|
0
|
0
|
Edit
Delete
|
|
839
|
21
|
348
|
1
|
|
0
|
修复美团预订核销bug
|
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1792393336
|
1792393342
|
1792393342
|
0
|
0
|
0
|
Edit
Delete
|
|
840
|
21
|
349
|
1
|
|
0
|
修复美团预订核销bug
|
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1792393351
|
1792393357
|
1792393357
|
0
|
0
|
0
|
Edit
Delete
|
|
841
|
116
|
2
|
5
|
|
0
|
fix(credential-sdk): harden bounded responses and fix(credential-sdk): harden bounded responses and redirect cleanup...
|
|
0
|
0
|
0
|
1
|
0
|
|
0
|
1792411245
|
1792411245
|
0
|
0
|
0
|
0
|
Edit
Delete
|
|
842
|
116
|
3
|
5
|
|
0
|
fix(channel-sdk): bound response bodies and reject fix(channel-sdk): bound response bodies and reject redirected results...
|
|
0
|
0
|
0
|
1
|
0
|
|
0
|
1792411267
|
1792411267
|
0
|
0
|
0
|
0
|
Edit
Delete
|
|
843
|
146
|
1
|
1
|
|
0
|
php8.3
|
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1793066913
|
1793066921
|
1793066921
|
0
|
0
|
0
|
Edit
Delete
|
|
844
|
83
|
1
|
5
|
|
0
|
docs(governance): sync dynamic baseline with curre docs(governance): sync dynamic baseline with current D3 reports...
|
Refresh the GOVERNANCE-BASELINE section of CLAUDE. Refresh the GOVERNANCE-BASELINE section of CLAUDE.md from
reports/governance.latest.json, reports/baseline-d3.json and the
2026-10-25 runtime/UI/RLS reports plus the 2026-09-23 OS audits:
static governance now passes, runtime 452, UI 46, RLS 116 tables,
own tests 69/471, single-host outbox/health scenarios, OS product
0.19.4 upgrade ready and release blocked only by remote CI and
target sign-off. Retire the native Fastify UI row and keep earlier
dual-host figures labelled as history.
Verified with check:governance-docs, check:docs-truth and
check:dual-backend (all exit 0); regenerated gate reports were not
committed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
<!--
PR 治理模板。提交前请逐项确认,确保符合 docs/standards 下的工程规范。
CI 会执行:pnpm check(命名 + 单源漂移 + 治理棘轮 + lint + typecheck);
有测试 DB 的流水线另执行 DATABASE_URL=... pnpm check:runtime。
-->
## 变更内容
<!-- 简述这次改了什么、为什么改(聚焦 why) -->
-
## 涉及业务概念
<!-- 列出涉及的业务词典英文名,例如 store / order / verification。参见 docs/domain-glossary.md -->
-
## 检查清单
### 命名一致性
- [ ] 业务概念使用了词典中的标准英文名(未出现 shop/branch/seller/voucher/writeOff 等禁用词)
- [ ] 数据库 snake_case + 复数表名;API/JSON 字段 camelCase;类型 PascalCase;常量 SCREAMING_SNAKE_CASE
- [ ] `pnpm check:naming` 通过
- [ ] `pnpm check:schema` 通过,未新增第二份状态/契约真源
### API / 契约
- [ ] 不涉及 API 变更
- [ ] 新增/修改了 API,路由符合当前生命周期规范:既有 Personnel Core 保持 `/api/personnel/*`,HR v2 领域使用 `/api/v2/{domain}/*`,身份协议使用标准 OIDC 端点
- [ ] 已更新 `packages/contracts` 中的 Zod schema / DTO / 类型(前后端共用同一份)
- [ ] 无破坏前端兼容的字段删除/重命名(如有,已在描述中说明迁移方案)
### 数据库
- [ ] 不涉及数据库变更
- [ ] 新增/修改了表或字段,已通过 migration review(表名复数、字段 snake_case、外键 xxx_id、时间 _at、状态 status)
- [ ] 高增长表已考虑分区;涉及多租户的表带 tenant_id
- [ ] 写链显式带 tenant_id;跨租户读写按 404/隔离口径处理
### 数据库迁移(迁移即代码:版本/顺序/内容/环境/发布/回滚一致)
- [ ] 改 schema.prisma 的同时**已生成并提交 migration**(`pnpm db:migrate:dev --name <change>`),未只改 schema 不落迁移
- [ ] **未修改已发布过的历史 migration 文件**(内容一致:历史不可变,新变更走新迁移)
- [ ] `pnpm check:migrations` 通过(迁移历史在位 / 无未豁免高危 DDL / schema 表、enum、`@map` 列均已落迁移)
- [ ] 破坏性变更(删表/删列/改名/改类型/加 NOT NULL/加唯一约束)走 **expand→migrate→contract** 三阶段,不一次切
- [ ] 大表加索引用 `CREATE INDEX CONCURRENTLY`;大批量回填走 BullMQ 分批任务,不塞进 migration
- [ ] 高危但确需的 DDL 已加 `-- migration-allow:<原因>` 留痕,并在下方回滚方案说明
- [ ] 非开发环境只用 `migrate deploy`(禁止 `db push` / 线上手动 ALTER);发布前 `pnpm db:migrate:status` 无 drift
### 实时 / 队列
- [ ] 不涉及
- [ ] 关键业务事件进入 BullMQ 或持久化事件表(未仅依赖 Redis Pub/Sub)
- [ ] 写库事件与真实写操作在同一 tx 写入 outbox,未在 commit 后旁路 publish
- [ ] 实时通道选型符合规范(订单/看板/通知用 SSE;设备在线/包间控制/IM 用 WebSocket)
### 质量与发布
- [ ] 通过 `pnpm lint` 与 `pnpm typecheck`
- [ ] 通过 `pnpm check:governance`,`reports/*.latest.json` 已刷新且无棘轮回退
- [ ] 涉及写链 / DB / 租户 / 状态机时,通过 `DATABASE_URL=... pnpm check:runtime`,`reports/runtime-acceptance.latest.json` 已刷新
- [ ] 涉及页面或浏览器行为时,`pnpm check:ui` 与 `pnpm check:ui:fastify` 均通过,未只验证一个后端
- [ ] 已补充/更新必要的测试
- [ ] 不需要回滚方案
- [ ] 需要回滚方案,已在下方说明
## 回滚方案 / 其他说明
-
...
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1793092331
|
1793092337
|
1793092337
|
0
|
0
|
0
|
Edit
Delete
|
|
845
|
83
|
2
|
5
|
|
0
|
fix(ci): re-hash O18 OS Web sources from an explic fix(ci): re-hash O18 OS Web sources from an explicit locked OS checkout...
|
O18 re-hashed OS Web sources through the osRoot re O18 re-hashed OS Web sources through the osRoot recorded inside the
host UI report, an ephemeral /tmp clone that never exists on a CI
runner and disappears locally after cleanup. governance.yml therefore
failed on every Gitea run and the runtime/UI job never executed.
- O18 now only trusts --os-root / DIGITAL_EMPLOYEE_OS_ROOT and fails
closed with an explicit message when neither is given; new negative
probe product-host-ui-without-explicit-os-root (258 probes).
- The static CI job resolves compatibilityLock.osGitSha from
readiness.json, checks out luoanwu/digital-employee-os at that SHA
with secret OS_REPO_READ_TOKEN, moves it to RUNNER_TEMP, builds the
compat packages and asserts a clean tree; Node 22 to satisfy the OS
engine-strict requirement.
- Docs: CLAUDE.md commands/G9/G14/ci-gate, README, acceptance-runner
and business-module-intake now state the OS checkout requirement.
Local evidence (dirty worktree): clean OS clone at e12d0f2 makes
check:os-product pass; missing root and a tampered OS Web file both
fail O18. Full pnpm check still fails check:governance on runtime/UI
report fingerprints, which predates this change and needs a rerun of
check:runtime and check:ui on the final tree.
🤖 Generated with [Claude Code](https://claude.com/claude-code)...
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1793094537
|
1793095912
|
1793095912
|
0
|
0
|
0
|
Edit
Delete
|
|
846
|
83
|
3
|
5
|
|
0
|
fix(ci): fetch locked OS with a Gitea token header fix(ci): fetch locked OS with a Gitea token header and probe access first...
|
actions/checkout presented OS_REPO_READ_TOKEN as B actions/checkout presented OS_REPO_READ_TOKEN as Basic credentials and
Gitea answered 401 (git fell back to a username prompt) for two
different correctly scoped tokens. Fetch the locked SHA with plain git
and an "Authorization: token" header into RUNNER_TEMP instead, after a
Gitea API probe that prints only the HTTP status, so a missing secret,
unusable token or missing repository access fails with a clear reason.
This step also no longer downloads an action from github.com.
🤖 Generated with [Claude Code](https://claude.com/claude-code)...
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1793096204
|
1793096226
|
1793096226
|
0
|
0
|
0
|
Edit
Delete
|
|
847
|
83
|
4
|
5
|
|
0
|
ci: stop pulling actions from github.com on the Gi ci: stop pulling actions from github.com on the Gitea runner...
|
The Gitea runner repeatedly timed out cloning acti The Gitea runner repeatedly timed out cloning actions/checkout from
github.com (once hanging Set up job for over 10 minutes), so jobs failed
or blocked the single runner before any repository code ran.
- Checkout: plain git with the Gitea task token as Basic credentials,
all branches and tags fetched (F5 provenance needs history), detached
at github.sha, workspace cleaned.
- Node: scripts/ci-setup-node.sh downloads an exact version from
npmmirror and verifies it against the mirror's SHASUMS256.txt; both
governance jobs and the platform job use 22.23.2.
- platform-governance: upload-artifact replaced by printing the gate
reports into the run log. This file now diverges from the
@juhai/governance consumer template.
Verified locally: the checkout snippet against a file:// copy of this
repository (detached at the requested SHA, stale files removed); the
Node script in a linux/arm64 container with a test-only curl stand-in
(install, cache reuse, tampered archive rejected, unknown version
rejected).
🤖 Generated with [Claude Code](https://claude.com/claude-code)...
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1793096895
|
1793096902
|
1793096902
|
0
|
0
|
0
|
Edit
Delete
|
|
848
|
83
|
5
|
5
|
|
0
|
docs(governance): record first remote run past O18 docs(governance): record first remote run past O18 and the stale acceptance provenance...
|
<!--
PR 治理模板。提交前请逐项确认,确保符合 docs/standards 下的 <!--
PR 治理模板。提交前请逐项确认,确保符合 docs/standards 下的工程规范。
CI 会执行:pnpm check(命名 + 单源漂移 + 治理棘轮 + lint + typecheck);
有测试 DB 的流水线另执行 DATABASE_URL=... pnpm check:runtime。
-->
## 变更内容
<!-- 简述这次改了什么、为什么改(聚焦 why) -->
-
## 涉及业务概念
<!-- 列出涉及的业务词典英文名,例如 store / order / verification。参见 docs/domain-glossary.md -->
-
## 检查清单
### 命名一致性
- [ ] 业务概念使用了词典中的标准英文名(未出现 shop/branch/seller/voucher/writeOff 等禁用词)
- [ ] 数据库 snake_case + 复数表名;API/JSON 字段 camelCase;类型 PascalCase;常量 SCREAMING_SNAKE_CASE
- [ ] `pnpm check:naming` 通过
- [ ] `pnpm check:schema` 通过,未新增第二份状态/契约真源
### API / 契约
- [ ] 不涉及 API 变更
- [ ] 新增/修改了 API,路由符合当前生命周期规范:既有 Personnel Core 保持 `/api/personnel/*`,HR v2 领域使用 `/api/v2/{domain}/*`,身份协议使用标准 OIDC 端点
- [ ] 已更新 `packages/contracts` 中的 Zod schema / DTO / 类型(前后端共用同一份)
- [ ] 无破坏前端兼容的字段删除/重命名(如有,已在描述中说明迁移方案)
### 数据库
- [ ] 不涉及数据库变更
- [ ] 新增/修改了表或字段,已通过 migration review(表名复数、字段 snake_case、外键 xxx_id、时间 _at、状态 status)
- [ ] 高增长表已考虑分区;涉及多租户的表带 tenant_id
- [ ] 写链显式带 tenant_id;跨租户读写按 404/隔离口径处理
### 数据库迁移(迁移即代码:版本/顺序/内容/环境/发布/回滚一致)
- [ ] 改 schema.prisma 的同时**已生成并提交 migration**(`pnpm db:migrate:dev --name <change>`),未只改 schema 不落迁移
- [ ] **未修改已发布过的历史 migration 文件**(内容一致:历史不可变,新变更走新迁移)
- [ ] `pnpm check:migrations` 通过(迁移历史在位 / 无未豁免高危 DDL / schema 表、enum、`@map` 列均已落迁移)
- [ ] 破坏性变更(删表/删列/改名/改类型/加 NOT NULL/加唯一约束)走 **expand→migrate→contract** 三阶段,不一次切
- [ ] 大表加索引用 `CREATE INDEX CONCURRENTLY`;大批量回填走 BullMQ 分批任务,不塞进 migration
- [ ] 高危但确需的 DDL 已加 `-- migration-allow:<原因>` 留痕,并在下方回滚方案说明
- [ ] 非开发环境只用 `migrate deploy`(禁止 `db push` / 线上手动 ALTER);发布前 `pnpm db:migrate:status` 无 drift
### 实时 / 队列
- [ ] 不涉及
- [ ] 关键业务事件进入 BullMQ 或持久化事件表(未仅依赖 Redis Pub/Sub)
- [ ] 写库事件与真实写操作在同一 tx 写入 outbox,未在 commit 后旁路 publish
- [ ] 实时通道选型符合规范(订单/看板/通知用 SSE;设备在线/包间控制/IM 用 WebSocket)
### 质量与发布
- [ ] 通过 `pnpm lint` 与 `pnpm typecheck`
- [ ] 通过 `pnpm check:governance`,`reports/*.latest.json` 已刷新且无棘轮回退
- [ ] 涉及写链 / DB / 租户 / 状态机时,通过 `DATABASE_URL=... pnpm check:runtime`,`reports/runtime-acceptance.latest.json` 已刷新
- [ ] 涉及页面或浏览器行为时,`pnpm check:ui` 与 `pnpm check:ui:fastify` 均通过,未只验证一个后端
- [ ] 已补充/更新必要的测试
- [ ] 不需要回滚方案
- [ ] 需要回滚方案,已在下方说明
## 回滚方案 / 其他说明
-
...
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1793099401
|
1793099408
|
1793099408
|
0
|
0
|
0
|
Edit
Delete
|
|
849
|
83
|
6
|
5
|
|
0
|
feat(integration): AI 人事系统与企业智能OS各层对接——0.19.6、OS D feat(integration): AI 人事系统与企业智能OS各层对接——0.19.6、OS D3 单宿主验收链、OS 装载器注册证据与各层对接材料...
|
## 概要
把 AI 人事系统(`juhai.hr`)与企业智能OS各层(02 业务中台 / ## 概要
把 AI 人事系统(`juhai.hr`)与企业智能OS各层(02 业务中台 / 03 数字员工 OS / 04 技术中台 / 00 工程框架)的对接推进到「HR 侧能独立完成的都已完成」,其余项给出材料并列为待裁。完整记录见 `docs/domain/enterprise-control-plane-integration-blueprint-2026-10-27.md` §4–§5(取代 09-26 版)。
## 主要改动
- **产品真源收回 HR 仓,发布 0.19.6**:回灌 OS 已登记的 0.19.5;逐字节收录 OS 已执行的整表授权迁移 `20261010000000`,并以 `20261027000000` 前向收窄回 relay 两张表的精确列授权。产品迁移治理按全序列模拟最终授权,缺少或绕过收窄都会判红。
- **D3 受控升级台账**:`docs/post-d3-product-updates.json` 让 D3 冻结的产品字节和 `readiness.json` 只能按链放行(readiness 自干净复验值起链),C4 历史锁不变。
- **验收链跟进 OS D3(单 NestJS)**:宿主范围以目标 OS `backend-profile.json` 为唯一来源(`scripts/lib/os-host-backends.mjs`),拒绝加载残留的 Fastify 构建物;兼容锁对齐 OS `1b8ae0d7`(contracts 3.0.0);D-6 按锚定换算表把 12 项按后端累加的宿主证据地板换算为单后端。
- **注册证据改接 OS 装载器(D-5)**:lock v2 目标的 O20/O24/O26 只认 `pnpm audit:os-product:loader` 的只读证据(plan / apply 预演 / reconcile、4 个负向探针、目标提交回滚测试、目标写入 0);HR v1 写入器只留给 lock v1 目标。
- **O27 与发布证据**:按锁定后端数与注册路径取证;O27 转绿。
- **各层对接材料(草案,未改他层仓)**:人域对照表、事实登记 CHG 草案、应用清单镜像同步材料、权限决策答复草稿、框架同步差额评估、给 OS Owner 的交接说明。
- **仓内不一致修正**:app-manifest 仓库路径用工作区别名 `企业领域应用层/AI人事系统`;`authoritativeEntities` 去掉 IdentityLink(enterprise-idp 拥有);补 `ees.domain.thing` 依赖;`governance/framework-consumer.json` 地板改为 D3 换算后的 471/452。
- 已合并当前 `main`(含 CI 与 O18 显式 OS 根目录改动),冲突处两边规则都保留。
## 验证(本地工作区)
- 静态子门禁、`check:d3`、`check:app-manifest`、lint、typecheck 通过。
- HR 全量验收在合并后 HEAD 上通过:`check:runtime` 452/452、`check:ui` 46/46(一次性 PostgreSQL/Redis,跑完已删)。
- OS 产品层证据在 OS `1b8ae0d7` 快照上:产品迁移 17/17、ProductSqlRuntime、宿主运行 1/1 后端、浏览器 1/1 后端、升级审计 READY、装载器审计 passed。真实 OS 仓 0 处改动。
- 远端 CI 结果以本 PR 的运行为准,本地结果不外推。
## 剩余两项回退(`check:governance`)
1. **`osProductLayerViolations` 0 → 1(O22)**:OS main 尚不含 0.19.6。需显式授权(`OS_PRODUCT_REGISTRATION_APPLY=1`)用 OS `product:apply` 写入并进入 OS main,再复跑装载器 / 升级 / 发布审计。
2. **`osProductReleaseTargetRemotes` 2 → 1**:快照只有一个本机 remote(09-23 的证据跑在带 Gitea/GitHub 两个远端的真实 OS 上)。
本地不带 `DIGITAL_EMPLOYEE_OS_ROOT` 跑时,O18 也会按 main 上的新规则提示需要显式 OS 根目录;CI 已传入该变量。
## 待裁决
| 编号 | 问题 | 建议 |
| --- | --- | --- |
| D-2 | Scope→HR 来源授权是否续期 | 续期是 01 BA-01 首片(HR→Scope→OS 组织视图复验)的前提 |
| D-3 | 如何答复 04「HR 先接权限决策」 | 维持 F1 权限自治;可做不切真源的只读决策对照实验(草稿见 `docs/domain/reply-draft-04-permission-decision-2026-10-27.md`) |
| D-4 | F2(平台模式试点)是否重议 | 前置条件不成立:OS 未用叠加仓、未接 platform 端口模式;暂不重议 |
| D-7 | O27「拒绝 4 个目标敏感投影」的历史语义 | 定性为历史决定,审计区分观测命中与待拒绝面 |
| D-8 | O22 写入前是否区分「目标落后、准备发布」 | 维持现规则,不放宽;随写入授权一起解 |
| D-9 | `osProductReleaseTargetRemotes` 2→1 | 发布审计改为只读读取真实 OS 的远端,不设为不计棘轮 |
| D-10 | HR API 默认监听 `0.0.0.0` | 默认改为 `127.0.0.1`、需暴露时显式设 `HOST`,同步 00 框架;改前实测 04 容器可达 |
| D-11 | 框架 0.27.0 安全基线差额 | 单独一片升级 next / vitest / Capacitor 与平台 rc 包;按框架 `COMPATIBILITY.md:36` 登记 Zod 3 残余风险 |
另有新登记缺口:H20 relay 写死事实类型(扩事实前须先改)、H21 04 Scope 消费端写死组织事实来源(需 04 改)。
🤖 Generated with [Claude Code](https://claude.com/claude-code)...
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1793102425
|
1793111425
|
1793103977
|
0
|
0
|
0
|
Edit
Delete
|
|
850
|
83
|
7
|
5
|
|
0
|
ci: per-run docker PostgreSQL/Redis for acceptance ci: per-run docker PostgreSQL/Redis for acceptance, with reports rebound to e8591c7...
|
Two commits:
- e8591c7 ci: the runtime job no l Two commits:
- e8591c7 ci: the runtime job no longer uses `services:` (never started on this host-mode runner; 127.0.0.1:5432 reached an unrelated PostgreSQL on the runner host in run 26519). scripts/ci-acceptance-services.sh fails without docker; otherwise it starts per-run PostgreSQL/Redis containers on docker-assigned high ports with a random masked password and removes them in an if: always() step. G14 updated.
- 8cf50a6 chore(reports): runtime, UI and static reports rerun on the clean final source e8591c7.
Local evidence (isolated containers, recreated database):
- check:runtime 452/452 (floor 452), frozen oracle 12, outbox 1 scenario / 0 duplicates, outage health 2.
- check:ui 46/46.
- pnpm check with DIGITAL_EMPLOYEE_OS_ROOT at e12d0f2: exit 0, provenance violations 0.
- Script checks: start/connect/stop with no leftovers, repeated stop, and failures for missing docker, a non-prefixed database name and an invalid run id.
Not yet verified: docker on the runner host and its ability to pull postgres:16 / redis:7 (override with CI_POSTGRES_IMAGE / CI_REDIS_IMAGE repository variables).
🤖 Generated with [Claude Code](https://claude.com/claude-code)...
|
0
|
0
|
0
|
1
|
0
|
|
0
|
1793102531
|
1793190011
|
0
|
0
|
0
|
0
|
Edit
Delete
|
|
853
|
83
|
10
|
5
|
|
0
|
chore(deps): H23 根与 apps/* 对齐框架 0.27.0 安全基线
|
<!--
PR 治理模板。提交前请逐项确认,确保符合 docs/standards 下的 <!--
PR 治理模板。提交前请逐项确认,确保符合 docs/standards 下的工程规范。
CI 会执行:pnpm check(命名 + 单源漂移 + 治理棘轮 + lint + typecheck);
有测试 DB 的流水线另执行 DATABASE_URL=... pnpm check:runtime。
-->
## 变更内容
<!-- 简述这次改了什么、为什么改(聚焦 why) -->
-
## 涉及业务概念
<!-- 列出涉及的业务词典英文名,例如 store / order / verification。参见 docs/domain-glossary.md -->
-
## 检查清单
### 命名一致性
- [ ] 业务概念使用了词典中的标准英文名(未出现 shop/branch/seller/voucher/writeOff 等禁用词)
- [ ] 数据库 snake_case + 复数表名;API/JSON 字段 camelCase;类型 PascalCase;常量 SCREAMING_SNAKE_CASE
- [ ] `pnpm check:naming` 通过
- [ ] `pnpm check:schema` 通过,未新增第二份状态/契约真源
### API / 契约
- [ ] 不涉及 API 变更
- [ ] 新增/修改了 API,路由符合当前生命周期规范:既有 Personnel Core 保持 `/api/personnel/*`,HR v2 领域使用 `/api/v2/{domain}/*`,身份协议使用标准 OIDC 端点
- [ ] 已更新 `packages/contracts` 中的 Zod schema / DTO / 类型(前后端共用同一份)
- [ ] 无破坏前端兼容的字段删除/重命名(如有,已在描述中说明迁移方案)
### 数据库
- [ ] 不涉及数据库变更
- [ ] 新增/修改了表或字段,已通过 migration review(表名复数、字段 snake_case、外键 xxx_id、时间 _at、状态 status)
- [ ] 高增长表已考虑分区;涉及多租户的表带 tenant_id
- [ ] 写链显式带 tenant_id;跨租户读写按 404/隔离口径处理
### 数据库迁移(迁移即代码:版本/顺序/内容/环境/发布/回滚一致)
- [ ] 改 schema.prisma 的同时**已生成并提交 migration**(`pnpm db:migrate:dev --name <change>`),未只改 schema 不落迁移
- [ ] **未修改已发布过的历史 migration 文件**(内容一致:历史不可变,新变更走新迁移)
- [ ] `pnpm check:migrations` 通过(迁移历史在位 / 无未豁免高危 DDL / schema 表、enum、`@map` 列均已落迁移)
- [ ] 破坏性变更(删表/删列/改名/改类型/加 NOT NULL/加唯一约束)走 **expand→migrate→contract** 三阶段,不一次切
- [ ] 大表加索引用 `CREATE INDEX CONCURRENTLY`;大批量回填走 BullMQ 分批任务,不塞进 migration
- [ ] 高危但确需的 DDL 已加 `-- migration-allow:<原因>` 留痕,并在下方回滚方案说明
- [ ] 非开发环境只用 `migrate deploy`(禁止 `db push` / 线上手动 ALTER);发布前 `pnpm db:migrate:status` 无 drift
### 实时 / 队列
- [ ] 不涉及
- [ ] 关键业务事件进入 BullMQ 或持久化事件表(未仅依赖 Redis Pub/Sub)
- [ ] 写库事件与真实写操作在同一 tx 写入 outbox,未在 commit 后旁路 publish
- [ ] 实时通道选型符合规范(订单/看板/通知用 SSE;设备在线/包间控制/IM 用 WebSocket)
### 质量与发布
- [ ] 通过 `pnpm lint` 与 `pnpm typecheck`
- [ ] 通过 `pnpm check:governance`,`reports/*.latest.json` 已刷新且无棘轮回退
- [ ] 涉及写链 / DB / 租户 / 状态机时,通过 `DATABASE_URL=... pnpm check:runtime`,`reports/runtime-acceptance.latest.json` 已刷新
- [ ] 涉及页面或浏览器行为时,`pnpm check:ui` 与 `pnpm check:ui:fastify` 均通过,未只验证一个后端
- [ ] 已补充/更新必要的测试
- [ ] 不需要回滚方案
- [ ] 需要回滚方案,已在下方说明
## 回滚方案 / 其他说明
-
...
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1793114286
|
1793115451
|
1793114295
|
0
|
0
|
0
|
Edit
Delete
|
|
854
|
83
|
11
|
5
|
|
0
|
docs(os-product): 回灌 OS 侧 0.19.6 导入结果与 relay 整表授权放 docs(os-product): 回灌 OS 侧 0.19.6 导入结果与 relay 整表授权放宽原因(H11)...
|
<!--
PR 治理模板。提交前请逐项确认,确保符合 docs/standards 下的 <!--
PR 治理模板。提交前请逐项确认,确保符合 docs/standards 下的工程规范。
CI 会执行:pnpm check(命名 + 单源漂移 + 治理棘轮 + lint + typecheck);
有测试 DB 的流水线另执行 DATABASE_URL=... pnpm check:runtime。
-->
## 变更内容
<!-- 简述这次改了什么、为什么改(聚焦 why) -->
-
## 涉及业务概念
<!-- 列出涉及的业务词典英文名,例如 store / order / verification。参见 docs/domain-glossary.md -->
-
## 检查清单
### 命名一致性
- [ ] 业务概念使用了词典中的标准英文名(未出现 shop/branch/seller/voucher/writeOff 等禁用词)
- [ ] 数据库 snake_case + 复数表名;API/JSON 字段 camelCase;类型 PascalCase;常量 SCREAMING_SNAKE_CASE
- [ ] `pnpm check:naming` 通过
- [ ] `pnpm check:schema` 通过,未新增第二份状态/契约真源
### API / 契约
- [ ] 不涉及 API 变更
- [ ] 新增/修改了 API,路由符合当前生命周期规范:既有 Personnel Core 保持 `/api/personnel/*`,HR v2 领域使用 `/api/v2/{domain}/*`,身份协议使用标准 OIDC 端点
- [ ] 已更新 `packages/contracts` 中的 Zod schema / DTO / 类型(前后端共用同一份)
- [ ] 无破坏前端兼容的字段删除/重命名(如有,已在描述中说明迁移方案)
### 数据库
- [ ] 不涉及数据库变更
- [ ] 新增/修改了表或字段,已通过 migration review(表名复数、字段 snake_case、外键 xxx_id、时间 _at、状态 status)
- [ ] 高增长表已考虑分区;涉及多租户的表带 tenant_id
- [ ] 写链显式带 tenant_id;跨租户读写按 404/隔离口径处理
### 数据库迁移(迁移即代码:版本/顺序/内容/环境/发布/回滚一致)
- [ ] 改 schema.prisma 的同时**已生成并提交 migration**(`pnpm db:migrate:dev --name <change>`),未只改 schema 不落迁移
- [ ] **未修改已发布过的历史 migration 文件**(内容一致:历史不可变,新变更走新迁移)
- [ ] `pnpm check:migrations` 通过(迁移历史在位 / 无未豁免高危 DDL / schema 表、enum、`@map` 列均已落迁移)
- [ ] 破坏性变更(删表/删列/改名/改类型/加 NOT NULL/加唯一约束)走 **expand→migrate→contract** 三阶段,不一次切
- [ ] 大表加索引用 `CREATE INDEX CONCURRENTLY`;大批量回填走 BullMQ 分批任务,不塞进 migration
- [ ] 高危但确需的 DDL 已加 `-- migration-allow:<原因>` 留痕,并在下方回滚方案说明
- [ ] 非开发环境只用 `migrate deploy`(禁止 `db push` / 线上手动 ALTER);发布前 `pnpm db:migrate:status` 无 drift
### 实时 / 队列
- [ ] 不涉及
- [ ] 关键业务事件进入 BullMQ 或持久化事件表(未仅依赖 Redis Pub/Sub)
- [ ] 写库事件与真实写操作在同一 tx 写入 outbox,未在 commit 后旁路 publish
- [ ] 实时通道选型符合规范(订单/看板/通知用 SSE;设备在线/包间控制/IM 用 WebSocket)
### 质量与发布
- [ ] 通过 `pnpm lint` 与 `pnpm typecheck`
- [ ] 通过 `pnpm check:governance`,`reports/*.latest.json` 已刷新且无棘轮回退
- [ ] 涉及写链 / DB / 租户 / 状态机时,通过 `DATABASE_URL=... pnpm check:runtime`,`reports/runtime-acceptance.latest.json` 已刷新
- [ ] 涉及页面或浏览器行为时,`pnpm check:ui` 与 `pnpm check:ui:fastify` 均通过,未只验证一个后端
- [ ] 已补充/更新必要的测试
- [ ] 不需要回滚方案
- [ ] 需要回滚方案,已在下方说明
## 回滚方案 / 其他说明
-
...
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1793143165
|
1793143171
|
1793143171
|
0
|
0
|
0
|
Edit
Delete
|
|
855
|
83
|
12
|
5
|
|
0
|
fix(os-product): D-9 发布审计沿快照本机远端解析到真实 OS 仓,只读 ls-r fix(os-product): D-9 发布审计沿快照本机远端解析到真实 OS 仓,只读 ls-remote 其发布远端...
|
<!--
PR 治理模板。提交前请逐项确认,确保符合 docs/standards 下的 <!--
PR 治理模板。提交前请逐项确认,确保符合 docs/standards 下的工程规范。
CI 会执行:pnpm check(命名 + 单源漂移 + 治理棘轮 + lint + typecheck);
有测试 DB 的流水线另执行 DATABASE_URL=... pnpm check:runtime。
-->
## 变更内容
<!-- 简述这次改了什么、为什么改(聚焦 why) -->
-
## 涉及业务概念
<!-- 列出涉及的业务词典英文名,例如 store / order / verification。参见 docs/domain-glossary.md -->
-
## 检查清单
### 命名一致性
- [ ] 业务概念使用了词典中的标准英文名(未出现 shop/branch/seller/voucher/writeOff 等禁用词)
- [ ] 数据库 snake_case + 复数表名;API/JSON 字段 camelCase;类型 PascalCase;常量 SCREAMING_SNAKE_CASE
- [ ] `pnpm check:naming` 通过
- [ ] `pnpm check:schema` 通过,未新增第二份状态/契约真源
### API / 契约
- [ ] 不涉及 API 变更
- [ ] 新增/修改了 API,路由符合当前生命周期规范:既有 Personnel Core 保持 `/api/personnel/*`,HR v2 领域使用 `/api/v2/{domain}/*`,身份协议使用标准 OIDC 端点
- [ ] 已更新 `packages/contracts` 中的 Zod schema / DTO / 类型(前后端共用同一份)
- [ ] 无破坏前端兼容的字段删除/重命名(如有,已在描述中说明迁移方案)
### 数据库
- [ ] 不涉及数据库变更
- [ ] 新增/修改了表或字段,已通过 migration review(表名复数、字段 snake_case、外键 xxx_id、时间 _at、状态 status)
- [ ] 高增长表已考虑分区;涉及多租户的表带 tenant_id
- [ ] 写链显式带 tenant_id;跨租户读写按 404/隔离口径处理
### 数据库迁移(迁移即代码:版本/顺序/内容/环境/发布/回滚一致)
- [ ] 改 schema.prisma 的同时**已生成并提交 migration**(`pnpm db:migrate:dev --name <change>`),未只改 schema 不落迁移
- [ ] **未修改已发布过的历史 migration 文件**(内容一致:历史不可变,新变更走新迁移)
- [ ] `pnpm check:migrations` 通过(迁移历史在位 / 无未豁免高危 DDL / schema 表、enum、`@map` 列均已落迁移)
- [ ] 破坏性变更(删表/删列/改名/改类型/加 NOT NULL/加唯一约束)走 **expand→migrate→contract** 三阶段,不一次切
- [ ] 大表加索引用 `CREATE INDEX CONCURRENTLY`;大批量回填走 BullMQ 分批任务,不塞进 migration
- [ ] 高危但确需的 DDL 已加 `-- migration-allow:<原因>` 留痕,并在下方回滚方案说明
- [ ] 非开发环境只用 `migrate deploy`(禁止 `db push` / 线上手动 ALTER);发布前 `pnpm db:migrate:status` 无 drift
### 实时 / 队列
- [ ] 不涉及
- [ ] 关键业务事件进入 BullMQ 或持久化事件表(未仅依赖 Redis Pub/Sub)
- [ ] 写库事件与真实写操作在同一 tx 写入 outbox,未在 commit 后旁路 publish
- [ ] 实时通道选型符合规范(订单/看板/通知用 SSE;设备在线/包间控制/IM 用 WebSocket)
### 质量与发布
- [ ] 通过 `pnpm lint` 与 `pnpm typecheck`
- [ ] 通过 `pnpm check:governance`,`reports/*.latest.json` 已刷新且无棘轮回退
- [ ] 涉及写链 / DB / 租户 / 状态机时,通过 `DATABASE_URL=... pnpm check:runtime`,`reports/runtime-acceptance.latest.json` 已刷新
- [ ] 涉及页面或浏览器行为时,`pnpm check:ui` 与 `pnpm check:ui:fastify` 均通过,未只验证一个后端
- [ ] 已补充/更新必要的测试
- [ ] 不需要回滚方案
- [ ] 需要回滚方案,已在下方说明
## 回滚方案 / 其他说明
-
...
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1793145336
|
1793145343
|
1793145343
|
0
|
0
|
0
|
Edit
Delete
|
|
857
|
83
|
14
|
5
|
|
0
|
含五件事:H20 台账收敛的记录、H11 回灌、PKG-002 vitest 升级、D-9,以及这次 含五件事:H20 台账收敛的记录、H11 回灌、PKG-002 vitest 升级、D-9,以及这次的冻结测试放行加 PKG-003。...
|
<!--
PR 治理模板。提交前请逐项确认,确保符合 docs/standards 下的 <!--
PR 治理模板。提交前请逐项确认,确保符合 docs/standards 下的工程规范。
CI 会执行:pnpm check(命名 + 单源漂移 + 治理棘轮 + lint + typecheck);
有测试 DB 的流水线另执行 DATABASE_URL=... pnpm check:runtime。
-->
## 变更内容
<!-- 简述这次改了什么、为什么改(聚焦 why) -->
-
## 涉及业务概念
<!-- 列出涉及的业务词典英文名,例如 store / order / verification。参见 docs/domain-glossary.md -->
-
## 检查清单
### 命名一致性
- [ ] 业务概念使用了词典中的标准英文名(未出现 shop/branch/seller/voucher/writeOff 等禁用词)
- [ ] 数据库 snake_case + 复数表名;API/JSON 字段 camelCase;类型 PascalCase;常量 SCREAMING_SNAKE_CASE
- [ ] `pnpm check:naming` 通过
- [ ] `pnpm check:schema` 通过,未新增第二份状态/契约真源
### API / 契约
- [ ] 不涉及 API 变更
- [ ] 新增/修改了 API,路由符合当前生命周期规范:既有 Personnel Core 保持 `/api/personnel/*`,HR v2 领域使用 `/api/v2/{domain}/*`,身份协议使用标准 OIDC 端点
- [ ] 已更新 `packages/contracts` 中的 Zod schema / DTO / 类型(前后端共用同一份)
- [ ] 无破坏前端兼容的字段删除/重命名(如有,已在描述中说明迁移方案)
### 数据库
- [ ] 不涉及数据库变更
- [ ] 新增/修改了表或字段,已通过 migration review(表名复数、字段 snake_case、外键 xxx_id、时间 _at、状态 status)
- [ ] 高增长表已考虑分区;涉及多租户的表带 tenant_id
- [ ] 写链显式带 tenant_id;跨租户读写按 404/隔离口径处理
### 数据库迁移(迁移即代码:版本/顺序/内容/环境/发布/回滚一致)
- [ ] 改 schema.prisma 的同时**已生成并提交 migration**(`pnpm db:migrate:dev --name <change>`),未只改 schema 不落迁移
- [ ] **未修改已发布过的历史 migration 文件**(内容一致:历史不可变,新变更走新迁移)
- [ ] `pnpm check:migrations` 通过(迁移历史在位 / 无未豁免高危 DDL / schema 表、enum、`@map` 列均已落迁移)
- [ ] 破坏性变更(删表/删列/改名/改类型/加 NOT NULL/加唯一约束)走 **expand→migrate→contract** 三阶段,不一次切
- [ ] 大表加索引用 `CREATE INDEX CONCURRENTLY`;大批量回填走 BullMQ 分批任务,不塞进 migration
- [ ] 高危但确需的 DDL 已加 `-- migration-allow:<原因>` 留痕,并在下方回滚方案说明
- [ ] 非开发环境只用 `migrate deploy`(禁止 `db push` / 线上手动 ALTER);发布前 `pnpm db:migrate:status` 无 drift
### 实时 / 队列
- [ ] 不涉及
- [ ] 关键业务事件进入 BullMQ 或持久化事件表(未仅依赖 Redis Pub/Sub)
- [ ] 写库事件与真实写操作在同一 tx 写入 outbox,未在 commit 后旁路 publish
- [ ] 实时通道选型符合规范(订单/看板/通知用 SSE;设备在线/包间控制/IM 用 WebSocket)
### 质量与发布
- [ ] 通过 `pnpm lint` 与 `pnpm typecheck`
- [ ] 通过 `pnpm check:governance`,`reports/*.latest.json` 已刷新且无棘轮回退
- [ ] 涉及写链 / DB / 租户 / 状态机时,通过 `DATABASE_URL=... pnpm check:runtime`,`reports/runtime-acceptance.latest.json` 已刷新
- [ ] 涉及页面或浏览器行为时,`pnpm check:ui` 与 `pnpm check:ui:fastify` 均通过,未只验证一个后端
- [ ] 已补充/更新必要的测试
- [ ] 不需要回滚方案
- [ ] 需要回滚方案,已在下方说明
## 回滚方案 / 其他说明
-
...
|
0
|
0
|
0
|
1
|
0
|
|
0
|
1793147366
|
1793147366
|
0
|
0
|
0
|
0
|
Edit
Delete
|
|
858
|
83
|
15
|
5
|
|
0
|
feat(contracts): 出站事实来源域按事实类型收紧(V-04,PKG-004)
|
CHG-061 独立核验 V-04:通用 Intent 记录 Schema 把 `sourceDom CHG-061 独立核验 V-04:通用 Intent 记录 Schema 把 `sourceDomain` 写死为 `hr`,CHG-061 登记的组织事实(Catalog 与 04 Scope 要求 `source_domain = organization`)即使登记进注册表也无法出站。
## 改动(D-12 台账 PKG-004,`packages/*` 冻结字节链式放行)
- 通用记录 Schema 的 `sourceDomain` 只校验非空字符串;来源域由注册表条目的信封 Schema 按事实类型收紧,`ENTERPRISE_FACT_ENVELOPE_SCHEMAS` 的类型约束要求每个条目 `source_domain` 为字面量。
- `resolveEnterpriseFactEnvelopeSchema` / `buildEnterpriseFactEnvelope` 增加默认为生产注册表的可选注册表参数;relay 调用不变。
- 生产注册表仍只有 `EmploymentTransferred@1`,行为不变;未登记类型仍以 `FACT_TYPE_UNREGISTERED` 失败关闭。
- contracts 追加 4 例(测试用注册表下 organization 来源域封装通过、hr 来源域被拒;未登记组织事实失败关闭;EmploymentTransferred 仍只接受 hr)。负向:记录 Schema 改回 `z.literal("hr")`,新增 2 例判红。
- 文档:对接蓝图 H1 / H21 / P1 按 CHG-061 落地订正并新增 §4.15;`CLAUDE.md` 真源地图与 G23 动态区同步。
## 验证(本地工作区,clean `11adf0f`,一次性 PostgreSQL / Redis)
- `check:d3` 0 问题;contracts 219/219;`check:app-manifest` 通过;lint、typecheck 通过。
- `check:runtime` 466 / 0(地板 452);`check:ui` 46 / 46;报告回绑提交 `e51fd28`。
- `check:governance` 只剩 main 上既有的 O22(OS main 不含 0.19.6,H12 / D-8)。远端 CI 未查验。
## 未包含
生产注册表登记新事实、`app-manifest.json` 的 `facts.owns`、`@juhai/contracts` 升 pin(rc.7 的 Catalog 为 11 条)、组织 / 用工事实的 producer 与生效事务写意图。
🤖 Generated with [Claude Code](https://claude.com/claude-code)
...
|
0
|
0
|
0
|
1
|
0
|
|
0
|
1793150819
|
1793150819
|
0
|
0
|
0
|
0
|
Edit
Delete
|
|
859
|
83
|
16
|
5
|
|
0
|
feat(contracts): 出站事实来源域按事实类型收紧(V-04,D-12 台账 PKG-0 feat(contracts): 出站事实来源域按事实类型收紧(V-04,D-12 台账 PKG-004)...
|
<!--
PR 治理模板。提交前请逐项确认,确保符合 docs/standards 下的 <!--
PR 治理模板。提交前请逐项确认,确保符合 docs/standards 下的工程规范。
CI 会执行:pnpm check(命名 + 单源漂移 + 治理棘轮 + lint + typecheck);
有测试 DB 的流水线另执行 DATABASE_URL=... pnpm check:runtime。
-->
## 变更内容
<!-- 简述这次改了什么、为什么改(聚焦 why) -->
-
## 涉及业务概念
<!-- 列出涉及的业务词典英文名,例如 store / order / verification。参见 docs/domain-glossary.md -->
-
## 检查清单
### 命名一致性
- [ ] 业务概念使用了词典中的标准英文名(未出现 shop/branch/seller/voucher/writeOff 等禁用词)
- [ ] 数据库 snake_case + 复数表名;API/JSON 字段 camelCase;类型 PascalCase;常量 SCREAMING_SNAKE_CASE
- [ ] `pnpm check:naming` 通过
- [ ] `pnpm check:schema` 通过,未新增第二份状态/契约真源
### API / 契约
- [ ] 不涉及 API 变更
- [ ] 新增/修改了 API,路由符合当前生命周期规范:既有 Personnel Core 保持 `/api/personnel/*`,HR v2 领域使用 `/api/v2/{domain}/*`,身份协议使用标准 OIDC 端点
- [ ] 已更新 `packages/contracts` 中的 Zod schema / DTO / 类型(前后端共用同一份)
- [ ] 无破坏前端兼容的字段删除/重命名(如有,已在描述中说明迁移方案)
### 数据库
- [ ] 不涉及数据库变更
- [ ] 新增/修改了表或字段,已通过 migration review(表名复数、字段 snake_case、外键 xxx_id、时间 _at、状态 status)
- [ ] 高增长表已考虑分区;涉及多租户的表带 tenant_id
- [ ] 写链显式带 tenant_id;跨租户读写按 404/隔离口径处理
### 数据库迁移(迁移即代码:版本/顺序/内容/环境/发布/回滚一致)
- [ ] 改 schema.prisma 的同时**已生成并提交 migration**(`pnpm db:migrate:dev --name <change>`),未只改 schema 不落迁移
- [ ] **未修改已发布过的历史 migration 文件**(内容一致:历史不可变,新变更走新迁移)
- [ ] `pnpm check:migrations` 通过(迁移历史在位 / 无未豁免高危 DDL / schema 表、enum、`@map` 列均已落迁移)
- [ ] 破坏性变更(删表/删列/改名/改类型/加 NOT NULL/加唯一约束)走 **expand→migrate→contract** 三阶段,不一次切
- [ ] 大表加索引用 `CREATE INDEX CONCURRENTLY`;大批量回填走 BullMQ 分批任务,不塞进 migration
- [ ] 高危但确需的 DDL 已加 `-- migration-allow:<原因>` 留痕,并在下方回滚方案说明
- [ ] 非开发环境只用 `migrate deploy`(禁止 `db push` / 线上手动 ALTER);发布前 `pnpm db:migrate:status` 无 drift
### 实时 / 队列
- [ ] 不涉及
- [ ] 关键业务事件进入 BullMQ 或持久化事件表(未仅依赖 Redis Pub/Sub)
- [ ] 写库事件与真实写操作在同一 tx 写入 outbox,未在 commit 后旁路 publish
- [ ] 实时通道选型符合规范(订单/看板/通知用 SSE;设备在线/包间控制/IM 用 WebSocket)
### 质量与发布
- [ ] 通过 `pnpm lint` 与 `pnpm typecheck`
- [ ] 通过 `pnpm check:governance`,`reports/*.latest.json` 已刷新且无棘轮回退
- [ ] 涉及写链 / DB / 租户 / 状态机时,通过 `DATABASE_URL=... pnpm check:runtime`,`reports/runtime-acceptance.latest.json` 已刷新
- [ ] 涉及页面或浏览器行为时,`pnpm check:ui` 与 `pnpm check:ui:fastify` 均通过,未只验证一个后端
- [ ] 已补充/更新必要的测试
- [ ] 不需要回滚方案
- [ ] 需要回滚方案,已在下方说明
## 回滚方案 / 其他说明
-
...
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1793153388
|
1793191535
|
1793153395
|
0
|
0
|
0
|
Edit
Delete
|
|
860
|
23
|
66
|
1
|
|
0
|
包厢列表导出改由前端生成Excel
|
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1793153586
|
1793153620
|
1793153620
|
0
|
0
|
0
|
Edit
Delete
|
|
862
|
23
|
67
|
1
|
|
0
|
1111
|
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1793153904
|
1793153911
|
1793153911
|
0
|
0
|
0
|
Edit
Delete
|
|
863
|
23
|
68
|
1
|
|
0
|
1111
|
|
0
|
0
|
1
|
1
|
0
|
|
0
|
1793154047
|
1793154053
|
1793154053
|
0
|
0
|
0
|
Edit
Delete
|