| event_payload |
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"c32dc69661d18fedc3e6939936535f3f5906bf7d","after":"477ff5abe896dde2ca37b98b02bde71079b3de31","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/c32dc69661d18fedc3e6939936535f3f5906bf7d...477ff5abe896dde2ca37b98b02bde71079b3de31","commits":[{"id":"477ff5abe896dde2ca37b98b02bde71079b3de31","message":"feat(store-performance): 新增只读经营视图读适配接缝(RO-T03 候选,默认全关闭)\n\n新增 GET /store-performance/operating-view 与 OperatingViewV1 合同候选,\n按企业智能OS 02 层 RO 切片 §1.5—§1.9 与 02 包外只读接缝合同(c13a78f4)实现:\n\n- 六分区(customers/opportunities/quotations/service/knowledge/storeMetrics)逐区返回\n sourceRef、sourceVersion 或 observedAt、projectionWatermark(DIRECT_READ)、status/quality 与稳定原因码;\n snapshot 标明 FEDERATED_NON_ATOMIC\n- RO-T02 最小:门店上下文须经显式映射精确匹配,缺失/歧义/过期/外租户/目标不在本租户均 409;\n Site 未获准 403;query 不得携带 tenantId/actorId/role/allowedSites/cursor\n- 宿主装配默认全关闭:无映射、无 Site 准入、六区 NOT_CONNECTED,不回退演示数据;\n 租户级分区须显式批准(RO-Q02 未裁定前关闭)\n- 来源端口:按 02 合同重写的 EES CustomerAccount 按 ID 窄读客户端;本地商机、旧本地知识\n Top-K、门店经营分源指标只读端口(只用 find*,不经 KnowledgeService.getById,不写计数)\n- 金额:不经 number,未知币种不默认 CNY;GMV/退款/核销金额/预算/实支/结算分列,\n storeProfit 等旧组合口径隐藏并标明不是净利润\n- 单源超时、整请求预算、并发上限、无重试;全部已开通来源失败 503;返回前重验准入与映射\n\n原 operating-read-model 口径与类型不变;无迁移、无新表、无事件、无权限变更;未接通任何真实来源。\n本仓在企业智能OS中的角色未裁定,接缝可整体拆除。说明见\ndocs/architecture/omni-ro-operating-view-read-adapter-2026-10-22.md。\n\n验证(起点 c32dc69661d18fedc3e6939936535f3f5906bf7d):\n- vitest unit store-performance:6 文件 89 通过(新增 5 文件 80 例)\n- npm run test:unit:635 文件,8685 通过 / 16 失败;16 失败与改动前基线(630 文件,8605 通过 / 16 失败)逐项相同\n- 隔离库 integration(自建 pgvector/pg16,prisma migrate deploy 全部迁移,786 表语句级审计触发器):\n 3 通过(RO-03 正向零写、getById 负对照必写、RO-02 拒绝零写);未设 OMNI_RO_ISOLATED_DB 时 3 跳过\n- npm run type-check:1 错误,位于 marketing-chatbot.service.ts:1050,改动前基线同样存在\n- npm run lint:0 错误 / 3207 警告,与基线相同\n- audit:route-contract 覆盖率 100%、audit:route-registration 无重复、audit:tenant 无问题(报告文件未提交)\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/477ff5abe896dde2ca37b98b02bde71079b3de31","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-22T10:56:23-07:00","added":["backend/src/modules/store-performance/operating-view-ref-map.ts","backend/src/modules/store-performance/operating-view-scope.ts","backend/src/modules/store-performance/operating-view.adapters.test.ts","backend/src/modules/store-performance/operating-view.adapters.ts","backend/src/modules/store-performance/operating-view.contract.test.ts","backend/src/modules/store-performance/operating-view.contract.ts","backend/src/modules/store-performance/operating-view.controller.test.ts","backend/src/modules/store-performance/operating-view.read-repository.test.ts","backend/src/modules/store-performance/operating-view.read-repository.ts","backend/src/modules/store-performance/operating-view.service.test.ts","backend/src/modules/store-performance/operating-view.service.ts","backend/tests-integration/operating-view-readonly.integration.test.ts","docs/architecture/omni-ro-operating-view-read-adapter-2026-10-22.md"],"removed":[],"modified":["backend/src/modules/store-performance/store-performance.controller.ts","backend/src/modules/store-performance/store-performance.docs.ts","backend/src/modules/store-performance/store-performance.routes.ts","backend/src/modules/store-performance/store-performance.schema.ts"]}],"total_commits":0,"head_commit":{"id":"477ff5abe896dde2ca37b98b02bde71079b3de31","message":"feat(store-performance): 新增只读经营视图读适配接缝(RO-T03 候选,默认全关闭)\n\n新增 GET /store-performance/operating-view 与 OperatingViewV1 合同候选,\n按企业智能OS 02 层 RO 切片 §1.5—§1.9 与 02 包外只读接缝合同(c13a78f4)实现:\n\n- 六分区(customers/opportunities/quotations/service/knowledge/storeMetrics)逐区返回\n sourceRef、sourceVersion 或 observedAt、projectionWatermark(DIRECT_READ)、status/quality 与稳定原因码;\n snapshot 标明 FEDERATED_NON_ATOMIC\n- RO-T02 最小:门店上下文须经显式映射精确匹配,缺失/歧义/过期/外租户/目标不在本租户均 409;\n Site 未获准 403;query 不得携带 tenantId/actorId/role/allowedSites/cursor\n- 宿主装配默认全关闭:无映射、无 Site 准入、六区 NOT_CONNECTED,不回退演示数据;\n 租户级分区须显式批准(RO-Q02 未裁定前关闭)\n- 来源端口:按 02 合同重写的 EES CustomerAccount 按 ID 窄读客户端;本地商机、旧本地知识\n Top-K、门店经营分源指标只读端口(只用 find*,不经 KnowledgeService.getById,不写计数)\n- 金额:不经 number,未知币种不默认 CNY;GMV/退款/核销金额/预算/实支/结算分列,\n storeProfit 等旧组合口径隐藏并标明不是净利润\n- 单源超时、整请求预算、并发上限、无重试;全部已开通来源失败 503;返回前重验准入与映射\n\n原 operating-read-model 口径与类型不变;无迁移、无新表、无事件、无权限变更;未接通任何真实来源。\n本仓在企业智能OS中的角色未裁定,接缝可整体拆除。说明见\ndocs/architecture/omni-ro-operating-view-read-adapter-2026-10-22.md。\n\n验证(起点 c32dc69661d18fedc3e6939936535f3f5906bf7d):\n- vitest unit store-performance:6 文件 89 通过(新增 5 文件 80 例)\n- npm run test:unit:635 文件,8685 通过 / 16 失败;16 失败与改动前基线(630 文件,8605 通过 / 16 失败)逐项相同\n- 隔离库 integration(自建 pgvector/pg16,prisma migrate deploy 全部迁移,786 表语句级审计触发器):\n 3 通过(RO-03 正向零写、getById 负对照必写、RO-02 拒绝零写);未设 OMNI_RO_ISOLATED_DB 时 3 跳过\n- npm run type-check:1 错误,位于 marketing-chatbot.service.ts:1050,改动前基线同样存在\n- npm run lint:0 错误 / 3207 警告,与基线相同\n- audit:route-contract 覆盖率 100%、audit:route-registration 无重复、audit:tenant 无问题(报告文件未提交)\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/477ff5abe896dde2ca37b98b02bde71079b3de31","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-22T10:56:23-07:00","added":["backend/src/modules/store-performance/operating-view-ref-map.ts","backend/src/modules/store-performance/operating-view-scope.ts","backend/src/modules/store-performance/operating-view.adapters.test.ts","backend/src/modules/store-performance/operating-view.adapters.ts","backend/src/modules/store-performance/operating-view.contract.test.ts","backend/src/modules/store-performance/operating-view.contract.ts","backend/src/modules/store-performance/operating-view.controller.test.ts","backend/src/modules/store-performance/operating-view.read-repository.test.ts","backend/src/modules/store-performance/operating-view.read-repository.ts","backend/src/modules/store-performance/operating-view.service.test.ts","backend/src/modules/store-performance/operating-view.service.ts","backend/tests-integration/operating-view-readonly.integration.test.ts","docs/architecture/omni-ro-operating-view-read-adapter-2026-10-22.md"],"removed":[],"modified":["backend/src/modules/store-performance/store-performance.controller.ts","backend/src/modules/store-performance/store-performance.docs.ts","backend/src/modules/store-performance/store-performance.routes.ts","backend/src/modules/store-performance/store-performance.schema.ts"]},"repository":{"id":6,"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":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":2143481,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":14,"open_issues_count":0,"open_pr_counter":4,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-08-24T00:07:10+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":false,"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"}}... |