| event_payload |
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"0c9109de87bdf60dd818cf35dbec34de148a28e9","after":"5e74b570d66afa7b74530bcc0264ab3c4abf95ad","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/0c9109de87bdf60dd818cf35dbec34de148a28e9...5e74b570d66afa7b74530bcc0264ab3c4abf95ad","commits":[{"id":"5e74b570d66afa7b74530bcc0264ab3c4abf95ad","message":"feat(experience): C18 企业业务 Shell「企业应用」区(DEC-044 消费侧)\n\n- 契约:@repo/contracts 1.28.0 新增 experience-shell.ts——贡献/来源清单/平台复核结论/入口视图 Zod、\n parseExperienceSources(EXPERIENCE_SOURCES 整组校验,非法即 configured:false)、\n selectDisplayableEntries(只留 DISPLAY_AUTHORIZED 与 STALE_DISPLAY_ONLY(stale),租户/应用不符、\n 深链越站、重复一律丢弃)与两后端共用的编排 readExperienceEntries(传输注入,逐源失败关闭)。\n- 后端:GET /api/experience/entries 两后端对等(NestJS ExperienceModule / Fastify experienceRoute),\n 任意已验签租户成员可读,租户只取鉴权上下文;外呼固定 5s 超时、redirect:\"error\"、有界读取;\n 平台复核体恰为 {contribution},用 OS 服务身份;BLOCKED/REJECT 只进服务端日志;不缓存复核结论、零写入。\n- Web:features/experience(api + TanStack Query hook + EnterpriseAppsNav),挂在 KernelWorkspaceShell\n 桌面侧栏;新标签页 noopener noreferrer,stale 显示「可能已过期」;出错/未配置/无条目整区隐藏。\n- 治理:owner-matrix 登记 ExperienceContributionView + 蓝图 experience-shell-blueprint.md;词典登记\n `experience contribution` 并注明与 learning 域 `experience` 不同义;governance.registry 新增 experience 域\n (6 条 parity 断言);内核边界 Core 归属与 lock、包/下游/导出锁同步;三份 .env.example 记录变量。\n- 接待流程:本运行时未暴露 OS 仓 business-module-intake 技能,按 CLAUDE.md 七维清单手工执行\n (对象归属/闭环/无状态机/无事件/读模型/租户边界/验收口径见蓝图)。\n\n测试:contracts 49 例(全套 393/393)+ 两后端各 8 例注入 fetch 模块测试 + 各 6 例真实路由验收\n(一次性 PG/Redis,本地工作区)。未做与真实企业控制面/工单来源的联调、未跑完整 check:runtime / check:ui。\npnpm check 在 check:rls 红(juhai.hr 两张产品表缺 GRANT,main 上即如此);docs-truth 余两项\n(own-test-cases 当前值、快照锚点滞后)为 main 既有漂移,reports/ 未随本提交刷新。\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/5e74b570d66afa7b74530bcc0264ab3c4abf95ad","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-09-23T11:03:06-07:00","added":["apps/api-fastify/src/modules/experience-shell.service.ts","apps/api-fastify/src/routes/experience.ts","apps/api-fastify/test/experience-shell.test.ts","apps/api-fastify/test/experience.acceptance.test.ts","apps/api-nestjs/src/experience/experience-shell.service.ts","apps/api-nestjs/src/experience/experience.controller.ts","apps/api-nestjs/src/experience/experience.module.ts","apps/api-nestjs/test/experience-shell.test.ts","apps/api-nestjs/test/experience.acceptance.test.ts","apps/web/src/features/experience/api/experience-api.ts","apps/web/src/features/experience/components/EnterpriseAppsNav.tsx","apps/web/src/features/experience/hooks/use-experience-entries.ts","docs/domain/experience-shell-blueprint.md","packages/contracts/src/experience-shell.test.ts","packages/contracts/src/experience-shell.ts"],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/.env.example","apps/api-fastify/src/app.ts","apps/api-nestjs/.env.example","apps/api-nestjs/src/app.module.ts","apps/web/src/components/kernel/KernelWorkspaceShell.tsx","deploy/production/.env.production.example","docs/domain-glossary.md","docs/domain/owner-matrix.md","docs/product-extension-guide.md","governance.registry.json","kernel.boundaries.json","kernel.boundaries.lock.json","kernel.downstream.lock.json","kernel.exports.lock.json","kernel.packages.json","kernel.packages.lock.json","packages/contracts/package.json","packages/contracts/src/index.ts"]}],"total_commits":0,"head_commit":{"id":"5e74b570d66afa7b74530bcc0264ab3c4abf95ad","message":"feat(experience): C18 企业业务 Shell「企业应用」区(DEC-044 消费侧)\n\n- 契约:@repo/contracts 1.28.0 新增 experience-shell.ts——贡献/来源清单/平台复核结论/入口视图 Zod、\n parseExperienceSources(EXPERIENCE_SOURCES 整组校验,非法即 configured:false)、\n selectDisplayableEntries(只留 DISPLAY_AUTHORIZED 与 STALE_DISPLAY_ONLY(stale),租户/应用不符、\n 深链越站、重复一律丢弃)与两后端共用的编排 readExperienceEntries(传输注入,逐源失败关闭)。\n- 后端:GET /api/experience/entries 两后端对等(NestJS ExperienceModule / Fastify experienceRoute),\n 任意已验签租户成员可读,租户只取鉴权上下文;外呼固定 5s 超时、redirect:\"error\"、有界读取;\n 平台复核体恰为 {contribution},用 OS 服务身份;BLOCKED/REJECT 只进服务端日志;不缓存复核结论、零写入。\n- Web:features/experience(api + TanStack Query hook + EnterpriseAppsNav),挂在 KernelWorkspaceShell\n 桌面侧栏;新标签页 noopener noreferrer,stale 显示「可能已过期」;出错/未配置/无条目整区隐藏。\n- 治理:owner-matrix 登记 ExperienceContributionView + 蓝图 experience-shell-blueprint.md;词典登记\n `experience contribution` 并注明与 learning 域 `experience` 不同义;governance.registry 新增 experience 域\n (6 条 parity 断言);内核边界 Core 归属与 lock、包/下游/导出锁同步;三份 .env.example 记录变量。\n- 接待流程:本运行时未暴露 OS 仓 business-module-intake 技能,按 CLAUDE.md 七维清单手工执行\n (对象归属/闭环/无状态机/无事件/读模型/租户边界/验收口径见蓝图)。\n\n测试:contracts 49 例(全套 393/393)+ 两后端各 8 例注入 fetch 模块测试 + 各 6 例真实路由验收\n(一次性 PG/Redis,本地工作区)。未做与真实企业控制面/工单来源的联调、未跑完整 check:runtime / check:ui。\npnpm check 在 check:rls 红(juhai.hr 两张产品表缺 GRANT,main 上即如此);docs-truth 余两项\n(own-test-cases 当前值、快照锚点滞后)为 main 既有漂移,reports/ 未随本提交刷新。\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/5e74b570d66afa7b74530bcc0264ab3c4abf95ad","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-09-23T11:03:06-07:00","added":["apps/api-fastify/src/modules/experience-shell.service.ts","apps/api-fastify/src/routes/experience.ts","apps/api-fastify/test/experience-shell.test.ts","apps/api-fastify/test/experience.acceptance.test.ts","apps/api-nestjs/src/experience/experience-shell.service.ts","apps/api-nestjs/src/experience/experience.controller.ts","apps/api-nestjs/src/experience/experience.module.ts","apps/api-nestjs/test/experience-shell.test.ts","apps/api-nestjs/test/experience.acceptance.test.ts","apps/web/src/features/experience/api/experience-api.ts","apps/web/src/features/experience/components/EnterpriseAppsNav.tsx","apps/web/src/features/experience/hooks/use-experience-entries.ts","docs/domain/experience-shell-blueprint.md","packages/contracts/src/experience-shell.test.ts","packages/contracts/src/experience-shell.ts"],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/.env.example","apps/api-fastify/src/app.ts","apps/api-nestjs/.env.example","apps/api-nestjs/src/app.module.ts","apps/web/src/components/kernel/KernelWorkspaceShell.tsx","deploy/production/.env.production.example","docs/domain-glossary.md","docs/domain/owner-matrix.md","docs/product-extension-guide.md","governance.registry.json","kernel.boundaries.json","kernel.boundaries.lock.json","kernel.downstream.lock.json","kernel.exports.lock.json","kernel.packages.json","kernel.packages.lock.json","packages/contracts/package.json","packages/contracts/src/index.ts"]},"repository":{"id":76,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"digital-employee-os","full_name":"luoanwu/digital-employee-os","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":96085,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os/languages","html_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/digital-employee-os.git","clone_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os.git","original_url":"","website":"","stars_count":0,"forks_count":1,"watchers_count":1,"branch_count":3,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-20T14:46:28+08:00","updated_at":"2026-09-24T07:10:51+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}... |