|
23321
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23239
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778879729
|
1778879729
|
0
|
1778879728
|
1778879729
|
|
|
0
|
Edit
Delete
|
|
23322
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23240
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778880029
|
1778880029
|
0
|
1778880028
|
1778880029
|
|
|
0
|
Edit
Delete
|
|
23323
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23241
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778880329
|
1778880329
|
0
|
1778880328
|
1778880329
|
|
|
0
|
Edit
Delete
|
|
23324
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23242
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778880629
|
1778880629
|
0
|
1778880628
|
1778880629
|
|
|
0
|
Edit
Delete
|
|
23325
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23243
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778880929
|
1778880929
|
0
|
1778880928
|
1778880929
|
|
|
0
|
Edit
Delete
|
|
23326
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23244
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778881229
|
1778881229
|
0
|
1778881228
|
1778881229
|
|
|
0
|
Edit
Delete
|
|
23327
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23245
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778881529
|
1778881529
|
0
|
1778881528
|
1778881529
|
|
|
0
|
Edit
Delete
|
|
23328
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23246
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778881829
|
1778881829
|
0
|
1778881828
|
1778881829
|
|
|
0
|
Edit
Delete
|
|
23329
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23247
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778882129
|
1778882129
|
0
|
1778882128
|
1778882129
|
|
|
0
|
Edit
Delete
|
|
23330
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23248
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778882429
|
1778882429
|
0
|
1778882428
|
1778882429
|
|
|
0
|
Edit
Delete
|
|
23331
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23249
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778882729
|
1778882729
|
0
|
1778882728
|
1778882729
|
|
|
0
|
Edit
Delete
|
|
23332
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23250
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778883029
|
1778883029
|
0
|
1778883028
|
1778883029
|
|
|
0
|
Edit
Delete
|
|
23333
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23251
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778883329
|
1778883329
|
0
|
1778883328
|
1778883329
|
|
|
0
|
Edit
Delete
|
|
23334
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23252
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778883629
|
1778883629
|
0
|
1778883628
|
1778883629
|
|
|
0
|
Edit
Delete
|
|
23335
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23253
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778883929
|
1778883929
|
0
|
1778883928
|
1778883929
|
|
|
0
|
Edit
Delete
|
|
23336
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23254
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778884229
|
1778884229
|
0
|
1778884228
|
1778884229
|
|
|
0
|
Edit
Delete
|
|
23337
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23255
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778884529
|
1778884529
|
0
|
1778884528
|
1778884529
|
|
|
0
|
Edit
Delete
|
|
23338
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23256
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778884829
|
1778884829
|
0
|
1778884828
|
1778884829
|
|
|
0
|
Edit
Delete
|
|
23340
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23258
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778886116
|
1778886117
|
0
|
1778885128
|
1778886117
|
|
|
0
|
Edit
Delete
|
|
23341
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23259
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778886118
|
1778886119
|
0
|
1778885428
|
1778886119
|
|
|
0
|
Edit
Delete
|
|
23343
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23261
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778888260
|
1778888260
|
0
|
1778885728
|
1778888260
|
|
|
0
|
Edit
Delete
|
|
23344
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23262
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778888262
|
1778888262
|
0
|
1778886028
|
1778888262
|
|
|
0
|
Edit
Delete
|
|
23345
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23263
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778888264
|
1778888264
|
0
|
1778886328
|
1778888264
|
|
|
0
|
Edit
Delete
|
|
23346
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23264
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778888266
|
1778888266
|
0
|
1778886628
|
1778888266
|
|
|
0
|
Edit
Delete
|
|
23347
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23265
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778888268
|
1778888268
|
0
|
1778886928
|
1778888268
|
|
|
0
|
Edit
Delete
|
|
23349
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23267
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778889304
|
1778889304
|
0
|
1778887228
|
1778889304
|
|
|
0
|
Edit
Delete
|
|
23350
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23268
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778889306
|
1778889306
|
0
|
1778887528
|
1778889306
|
|
|
0
|
Edit
Delete
|
|
23351
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23269
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778889308
|
1778889308
|
0
|
1778887828
|
1778889308
|
|
|
0
|
Edit
Delete
|
|
23352
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23270
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778889310
|
1778889310
|
0
|
1778888128
|
1778889310
|
|
|
0
|
Edit
Delete
|
|
23353
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23271
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778889403
|
1778889403
|
0
|
1778888428
|
1778889403
|
|
|
0
|
Edit
Delete
|
|
23354
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23272
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778889405
|
1778889405
|
0
|
1778888728
|
1778889405
|
|
|
0
|
Edit
Delete
|
|
23355
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23273
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778889407
|
1778889407
|
0
|
1778889028
|
1778889407
|
|
|
0
|
Edit
Delete
|
|
23356
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23274
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778889921
|
1778889921
|
0
|
1778889328
|
1778889921
|
|
|
0
|
Edit
Delete
|
|
23357
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23275
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778890045
|
1778890045
|
0
|
1778889628
|
1778890045
|
|
|
0
|
Edit
Delete
|
|
23358
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
e2e-tests.yml
|
23276
|
-2
|
351
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
2
|
20
|
1778890047
|
1778892242
|
0
|
1778889628
|
1778895533
|
|
|
0
|
Edit
Delete
|
|
23360
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23278
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778893288
|
1778893288
|
0
|
1778889928
|
1778893288
|
|
|
0
|
Edit
Delete
|
|
23361
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23279
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778893290
|
1778893291
|
0
|
1778890228
|
1778893291
|
|
|
0
|
Edit
Delete
|
|
23362
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23280
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778893292
|
1778893292
|
0
|
1778890528
|
1778893292
|
|
|
0
|
Edit
Delete
|
|
23364
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23282
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"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":5302792,"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":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+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"}}...
|
schedule
|
4
|
4
|
1778893356
|
1778893357
|
0
|
1778890828
|
1778893357
|
|
|
0
|
Edit
Delete
|
|
23381
|
build: 完善Release版本构建配置
|
13
|
5
|
codeql-analysis.yml
|
15
|
-2
|
46
|
refs/heads/main
|
6c80c00976d1c5ac4aaa5f76d10cf1e7b4f59448
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"0000000000000000000000000000000000000000","after":"6c80c00976d1c5ac4aaa5f76d10cf1e7b4f59448","compare_url":"https://gitea.g-hi.com/luoanwu/printer-server/compare/c254333cc45c082124d3d4fd01a4a3fc3fda7296...6c80c00976d1c5ac4aaa5f76d10cf1e7b4f59448","commits":[{"id":"6c80c00976d1c5ac4aaa5f76d10cf1e7b4f59448","message":"build: 完善Release版本构建配置\n\n变更内容:\n- 优化版本管理: 使用语义化版本号 (versionMajor.versionMinor.versionPatch)\n- 修复签名配置路径: 使用相对路径读取keystore.properties\n- 添加V1+V2签名: 兼容Android 7+设备\n- 添加getBuildNumber()函数: 基于日期生成构建号\n- 重构测试目录: 迁移至标准src/test/java结构\n\n构建优化效果:\n- Debug版本: 8.1 MB\n- Release版本: 4.1 MB (优化48%)\n- ProGuard混淆 + 资源压缩生效\n\nCo-Authored-By: Claude Opus 4.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/printer-server/commit/6c80c00976d1c5ac4aaa5f76d10cf1e7b4f59448","author":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"committer":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-01-21T00:05:33+08:00","added":["printer-redesign/src/test/java/com/juhai/printer/application/service/PrintTaskProcessorTest.java","printer-redesign/src/test/java/com/juhai/printer/domain/service/OrderFormatterServiceTest.java","printer-redesign/src/test/java/com/juhai/printer/domain/service/PrinterSelectorTest.java","printer-redesign/src/test/java/com/juhai/printer/test/AllTestsRunner.java","printer-redesign/src/test/java/com/juhai/printer/test/BillDomainTest.java","printer-redesign/src/test/java/com/juhai/printer/test/OrderDomainTest.java","printer-redesign/src/test/java/com/juhai/printer/test/PrintApiTest.java","printer-redesign/src/test/java/com/juhai/printer/test/PrintFunctionTest.java","printer-redesign/src/test/java/com/juhai/printer/test/PrintReliabilityTest.java","printer-redesign/src/test/java/com/juhai/printer/test/TemplateEngineTest.java","printer-redesign/src/test/java/com/juhai/printer/test/WebSocketCommunicationTest.java"],"removed":["printer-redesign/test/AllTestsRunner.java","printer-redesign/test/BillDomainTest.java","printer-redesign/test/OrderDomainTest.java","printer-redesign/test/PrintApiTest.java","printer-redesign/test/PrintFunctionTest.java","printer-redesign/test/PrintReliabilityTest.java","printer-redesign/test/TemplateEngineTest.java","printer-redesign/test/WebSocketCommunicationTest.java","printer-redesign/test/com/juhai/printer/application/service/PrintTaskProcessorTest.java","printer-redesign/test/com/juhai/printer/domain/service/OrderFormatterServiceTest.java","printer-redesign/test/com/juhai/printer/domain/service/PrinterSelectorTest.java"],"modified":["printer-redesign/build.gradle"]},{"id":"b44b6415c67f54b2d1bcd688757fec2aaf1686f4","message":"fix: 修复PrintJob状态转换和数据库初始化崩溃问题\n\n1. PrinterDatabase.optimizeDatabase()\n - 将PRAGMA命令从execSQL改为query()方法\n - Room的SupportSQLiteDatabase对PRAGMA有限制\n - 添加异常处理确保数据库优化失败不影响启动\n\n2. PrinterService.onTaskFailed()\n - 添加状态检查逻辑,根据当前状态决定处理方式\n - FAILED状态:执行重试逻辑\n - PRINTING状态:先转换为FAILED再重试\n - 其他状态:直接重新调度执行\n\n3. PrintingApplicationService.executePrintJob()\n - 新增prepareJobForPrinting()确保状态正确转换\n - CREATED -\u003e QUEUED -\u003e PRINTING 状态流转\n - 新增handleJobFailure()安全处理失败\n\nCo-Authored-By: Claude Opus 4.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/printer-server/commit/b44b6415c67f54b2d1bcd688757fec2aaf1686f4","author":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"committer":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-01-20T23:54:24+08:00","added":[],"removed":[],"modified":["printer-redesign/application/service/PrinterService.java","printer-redesign/application/service/PrintingApplicationService.java","printer-redesign/infrastructure/database/PrinterDatabase.java","printer-redesign/scripts/build-release.sh"]},{"id":"d2d0385e8b5c1b06d7e59f108c6e9f845905c841","message":"fix: 修复编译错误并成功构建APK\n\n修复内容:\n- PrintTestActivity: 重写以修复API兼容性问题\n - observeEnabled()替代getEnabledPrinters()\n - 移除PrinterApplication依赖\n - 修复Priority/PrintType方法调用\n - 修复rawContent类型(String→byte[])\n- OrderFormatterService: 补充shouldBeep()方法闭合括号\n- TemplateRenderEngine: 修复方法调用\n - getSummary()→toString()\n - setFontSize()→setSize()\n - setWidth()→setLength()\n- PrintJobDao: 添加getActiveJobs()方法\n- QueueViewModel: 修复RxJava包装和cancel()参数\n- MainViewModel: 移除totalCount()调用\n- PrinterConfigDTO: 修复fromEntity()方法兼容性\n\n构建结果:APK 7.8MB\n\nCo-Authored-By: Claude Opus 4.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/printer-server/commit/d2d0385e8b5c1b06d7e59f108c6e9f845905c841","author":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"committer":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-01-20T23:38:29+08:00","added":[],"removed":[],"modified":["printer-redesign/application/dto/PrinterConfigDTO.java","printer-redesign/application/engine/TemplateRenderEngine.java","printer-redesign/application/engine/TemplateValidator.java","printer-redesign/domain/service/OrderFormatterService.java","printer-redesign/infrastructure/database/dao/PrintJobDao.java","printer-redesign/infrastructure/device/EscPosExecutor.java","printer-redesign/infrastructure/device/PrinterCommandExecutor.java","printer-redesign/infrastructure/device/TsplExecutor.java","printer-redesign/infrastructure/device/driver/SystemPrintDriver.java","printer-redesign/presentation/PrintTestActivity.java","printer-redesign/presentation/viewmodel/MainViewModel.java","printer-redesign/presentation/viewmodel/QueueViewModel.java"]},{"id":"f8bc615170b4f10a4c9e1ec5261191268d6b7f0a","message":"feat: 增强应用架构与测试功能\n\n- 新增 CQRS 模式支持 (command/query/dto)\n- 添加 PrintTestActivity 测试界面\n- 新增 MainViewModel 和 QueueViewModel\n- 完善 build.gradle 配置与签名设置\n- 优化 MainActivity 功能与交互\n- 增强 PrintTaskAdapter 适配逻辑\n- 添加 proguard 混淆规则和构建脚本\n- 更新 UI 资源文件\n\nCo-Authored-By: Claude Opus 4.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/printer-server/commit/f8bc615170b4f10a4c9e1ec5261191268d6b7f0a","author":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"committer":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-01-20T23:28:57+08:00","added":["printer-redesign/application/command/ConfigurePrinterCommand.java","printer-redesign/application/command/RecoverDeadLetterCommand.java","printer-redesign/application/command/SubmitPrintJobCommand.java","printer-redesign/application/dto/PrintJobDTO.java","printer-redesign/application/dto/PrinterConfigDTO.java","printer-redesign/application/dto/QueueStatsDTO.java","printer-redesign/application/query/GetPrintJobsQuery.java","printer-redesign/application/query/GetQueueStatsQuery.java","printer-redesign/keystore.properties.template","printer-redesign/presentation/PrintTestActivity.java","printer-redesign/presentation/viewmodel/MainViewModel.java","printer-redesign/presentation/viewmodel/QueueViewModel.java","printer-redesign/proguard-rules.pro","printer-redesign/scripts/build-release.sh","printer-redesign/scripts/generate-keystore.sh","printer-redesign/src/main/res/drawable/ic_help.xml","printer-redesign/src/main/res/layout/activity_print_test.xml"],"removed":[],"modified":[".gitignore","printer-redesign/build.gradle","printer-redesign/domain/expression/ExpressionEvaluator.java","printer-redesign/migration/BillStyleAdapter.java","printer-redesign/migration/PrintTaskAdapter.java","printer-redesign/presentation/MainActivity.java","printer-redesign/src/main/AndroidManifest.xml","printer-redesign/src/main/res/values/colors.xml","printer-redesign/src/main/res/values/strings.xml"]},{"id":"4052be41183584c726cd84d2f9d9cb5c371da83b","message":"feat: 完善模板引擎系统与UI优化\n\n模板引擎增强:\n- 新增 ExpressionEvaluator 表达式求值器,支持复杂条件判断\n- 新增 FormatPipeline 格式化管道,支持货币/日期/截断等格式化\n- 新增 ContextDataEnhanced 增强上下文,支持嵌套路径和管道\n- 新增 GroupElement 分组元素,支持条件渲染和循环渲染\n- 新增 TableElementEnhanced 增强表格,支持分组/小计/合计\n- 新增 ImageElement 图片元素,支持URL/Base64/本地文件\n- 新增 TemplateValidator 模板验证器\n- 新增 TemplateRenderEngineEnhanced 增强渲染引擎\n- 完善 TemplateManager 模板管理器\n\nUI和功能优化:\n- 新增 HealthCheckActivity 健康检查详情页\n- 新增 LogViewerActivity 日志查看页面\n- 新增 QueueDetailActivity 队列详情页面\n- 优化 MainActivity 界面布局和状态显示\n- 精简 SystemPrintDriver 代码结构\n- 新增相关资源文件和菜单\n\nCo-Authored-By: Claude Opus 4.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/printer-server/commit/4052be41183584c726cd84d2f9d9cb5c371da83b","author":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"committer":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-01-20T23:12:50+08:00","added":["printer-redesign/application/engine/TemplateRenderEngineEnhanced.java","printer-redesign/application/engine/TemplateValidator.java","printer-redesign/docs/TEMPLATE_ENHANCEMENT_GUIDE.md","printer-redesign/domain/expression/ExpressionEvaluator.java","printer-redesign/domain/service/formatter/StrategyRegistry.java","printer-redesign/domain/template/ContextDataEnhanced.java","printer-redesign/domain/template/CutElement.java","printer-redesign/domain/template/FormatPipeline.java","printer-redesign/domain/template/GroupElement.java","printer-redesign/domain/template/ImageElement.java","printer-redesign/domain/template/QRCodeElement.java","printer-redesign/domain/template/SpacerElement.java","printer-redesign/domain/template/TableElementEnhanced.java","printer-redesign/infrastructure/device/utils/BitmapToEscPosUtil.java","printer-redesign/presentation/HealthCheckActivity.java","printer-redesign/presentation/LogViewerActivity.java","printer-redesign/presentation/QueueDetailActivity.java","printer-redesign/src/main/res/drawable/bg_error_message.xml","printer-redesign/src/main/res/drawable/bg_status_chip.xml","printer-redesign/src/main/res/drawable/ic_check_circle.xml","printer-redesign/src/main/res/drawable/ic_error.xml","printer-redesign/src/main/res/drawable/ic_print_type.xml","printer-redesign/src/main/res/drawable/ic_recover.xml","printer-redesign/src/main/res/drawable/ic_warning.xml","printer-redesign/src/main/res/layout/activity_health_check.xml","printer-redesign/src/main/res/layout/activity_log_viewer.xml","printer-redesign/src/main/res/layout/activity_queue_detail.xml","printer-redesign/src/main/res/layout/item_health_component.xml","printer-redesign/src/main/res/layout/item_print_log.xml","printer-redesign/src/main/res/layout/item_queue_job.xml","printer-redesign/src/main/res/menu/menu_log_viewer.xml","printer-redesign/src/main/res/menu/menu_queue_detail.xml"],"removed":[],"modified":["ARCHITECTURE_COMPARISON.md","CLAUDE.md","printer-redesign/ARCHITECTURE.md","printer-redesign/application/engine/TemplateManager.java","printer-redesign/application/engine/TemplateRenderEngine.java","printer-redesign/build.gradle","printer-redesign/domain/template/BarcodeElement.java","printer-redesign/domain/template/BaseElement.java","printer-redesign/domain/template/ContextData.java","printer-redesign/domain/template/LineElement.java","printer-redesign/domain/template/PrintElement.java","printer-redesign/domain/template/TableElement.java","printer-redesign/domain/template/TextElement.java","printer-redesign/infrastructure/device/driver/SystemPrintDriver.java","printer-redesign/presentation/MainActivity.java","printer-redesign/src/main/AndroidManifest.xml","printer-redesign/src/main/res/layout/activity_main.xml","printer-redesign/src/main/res/values/colors.xml"]}],"total_commits":0,"head_commit":{"id":"6c80c00976d1c5ac4aaa5f76d10cf1e7b4f59448","message":"build: 完善Release版本构建配置\n\n变更内容:\n- 优化版本管理: 使用语义化版本号 (versionMajor.versionMinor.versionPatch)\n- 修复签名配置路径: 使用相对路径读取keystore.properties\n- 添加V1+V2签名: 兼容Android 7+设备\n- 添加getBuildNumber()函数: 基于日期生成构建号\n- 重构测试目录: 迁移至标准src/test/java结构\n\n构建优化效果:\n- Debug版本: 8.1 MB\n- Release版本: 4.1 MB (优化48%)\n- ProGuard混淆 + 资源压缩生效\n\nCo-Authored-By: Claude Opus 4.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/printer-server/commit/6c80c00976d1c5ac4aaa5f76d10cf1e7b4f59448","author":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"committer":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-01-21T00:05:33+08:00","added":["printer-redesign/src/test/java/com/juhai/printer/application/service/PrintTaskProcessorTest.java","printer-redesign/src/test/java/com/juhai/printer/domain/service/OrderFormatterServiceTest.java","printer-redesign/src/test/java/com/juhai/printer/domain/service/PrinterSelectorTest.java","printer-redesign/src/test/java/com/juhai/printer/test/AllTestsRunner.java","printer-redesign/src/test/java/com/juhai/printer/test/BillDomainTest.java","printer-redesign/src/test/java/com/juhai/printer/test/OrderDomainTest.java","printer-redesign/src/test/java/com/juhai/printer/test/PrintApiTest.java","printer-redesign/src/test/java/com/juhai/printer/test/PrintFunctionTest.java","printer-redesign/src/test/java/com/juhai/printer/test/PrintReliabilityTest.java","printer-redesign/src/test/java/com/juhai/printer/test/TemplateEngineTest.java","printer-redesign/src/test/java/com/juhai/printer/test/WebSocketCommunicationTest.java"],"removed":["printer-redesign/test/AllTestsRunner.java","printer-redesign/test/BillDomainTest.java","printer-redesign/test/OrderDomainTest.java","printer-redesign/test/PrintApiTest.java","printer-redesign/test/PrintFunctionTest.java","printer-redesign/test/PrintReliabilityTest.java","printer-redesign/test/TemplateEngineTest.java","printer-redesign/test/WebSocketCommunicationTest.java","printer-redesign/test/com/juhai/printer/application/service/PrintTaskProcessorTest.java","printer-redesign/test/com/juhai/printer/domain/service/OrderFormatterServiceTest.java","printer-redesign/test/com/juhai/printer/domain/service/PrinterSelectorTest.java"],"modified":["printer-redesign/build.gradle"]},"repository":{"id":13,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatars/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":"printer-server","full_name":"luoanwu/printer-server","description":"KTV打印服务器 - DDD架构重构","empty":false,"private":false,"fork":false,"template":false,"parent":null,"mirror":false,"size":27,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/printer-server/languages","html_url":"https://gitea.g-hi.com/luoanwu/printer-server","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/printer-server","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/printer-server.git","clone_url":"https://gitea.g-hi.com/luoanwu/printer-server.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-28T11:06:40+08:00","updated_at":"2026-02-28T11:06:54+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":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,"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","repo_transfer":null},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatars/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":"luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatars/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"}}...
|
schedule
|
2
|
4
|
1779073403
|
1779073438
|
0
|
1779073228
|
1779073438
|
|
|
0
|
Edit
Delete
|
|
23387
|
build: 完善Release版本构建配置
|
13
|
5
|
codeql-analysis.yml
|
16
|
-2
|
46
|
refs/heads/main
|
6c80c00976d1c5ac4aaa5f76d10cf1e7b4f59448
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"0000000000000000000000000000000000000000","after":"6c80c00976d1c5ac4aaa5f76d10cf1e7b4f59448","compare_url":"https://gitea.g-hi.com/luoanwu/printer-server/compare/c254333cc45c082124d3d4fd01a4a3fc3fda7296...6c80c00976d1c5ac4aaa5f76d10cf1e7b4f59448","commits":[{"id":"6c80c00976d1c5ac4aaa5f76d10cf1e7b4f59448","message":"build: 完善Release版本构建配置\n\n变更内容:\n- 优化版本管理: 使用语义化版本号 (versionMajor.versionMinor.versionPatch)\n- 修复签名配置路径: 使用相对路径读取keystore.properties\n- 添加V1+V2签名: 兼容Android 7+设备\n- 添加getBuildNumber()函数: 基于日期生成构建号\n- 重构测试目录: 迁移至标准src/test/java结构\n\n构建优化效果:\n- Debug版本: 8.1 MB\n- Release版本: 4.1 MB (优化48%)\n- ProGuard混淆 + 资源压缩生效\n\nCo-Authored-By: Claude Opus 4.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/printer-server/commit/6c80c00976d1c5ac4aaa5f76d10cf1e7b4f59448","author":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"committer":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-01-21T00:05:33+08:00","added":["printer-redesign/src/test/java/com/juhai/printer/application/service/PrintTaskProcessorTest.java","printer-redesign/src/test/java/com/juhai/printer/domain/service/OrderFormatterServiceTest.java","printer-redesign/src/test/java/com/juhai/printer/domain/service/PrinterSelectorTest.java","printer-redesign/src/test/java/com/juhai/printer/test/AllTestsRunner.java","printer-redesign/src/test/java/com/juhai/printer/test/BillDomainTest.java","printer-redesign/src/test/java/com/juhai/printer/test/OrderDomainTest.java","printer-redesign/src/test/java/com/juhai/printer/test/PrintApiTest.java","printer-redesign/src/test/java/com/juhai/printer/test/PrintFunctionTest.java","printer-redesign/src/test/java/com/juhai/printer/test/PrintReliabilityTest.java","printer-redesign/src/test/java/com/juhai/printer/test/TemplateEngineTest.java","printer-redesign/src/test/java/com/juhai/printer/test/WebSocketCommunicationTest.java"],"removed":["printer-redesign/test/AllTestsRunner.java","printer-redesign/test/BillDomainTest.java","printer-redesign/test/OrderDomainTest.java","printer-redesign/test/PrintApiTest.java","printer-redesign/test/PrintFunctionTest.java","printer-redesign/test/PrintReliabilityTest.java","printer-redesign/test/TemplateEngineTest.java","printer-redesign/test/WebSocketCommunicationTest.java","printer-redesign/test/com/juhai/printer/application/service/PrintTaskProcessorTest.java","printer-redesign/test/com/juhai/printer/domain/service/OrderFormatterServiceTest.java","printer-redesign/test/com/juhai/printer/domain/service/PrinterSelectorTest.java"],"modified":["printer-redesign/build.gradle"]},{"id":"b44b6415c67f54b2d1bcd688757fec2aaf1686f4","message":"fix: 修复PrintJob状态转换和数据库初始化崩溃问题\n\n1. PrinterDatabase.optimizeDatabase()\n - 将PRAGMA命令从execSQL改为query()方法\n - Room的SupportSQLiteDatabase对PRAGMA有限制\n - 添加异常处理确保数据库优化失败不影响启动\n\n2. PrinterService.onTaskFailed()\n - 添加状态检查逻辑,根据当前状态决定处理方式\n - FAILED状态:执行重试逻辑\n - PRINTING状态:先转换为FAILED再重试\n - 其他状态:直接重新调度执行\n\n3. PrintingApplicationService.executePrintJob()\n - 新增prepareJobForPrinting()确保状态正确转换\n - CREATED -\u003e QUEUED -\u003e PRINTING 状态流转\n - 新增handleJobFailure()安全处理失败\n\nCo-Authored-By: Claude Opus 4.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/printer-server/commit/b44b6415c67f54b2d1bcd688757fec2aaf1686f4","author":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"committer":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-01-20T23:54:24+08:00","added":[],"removed":[],"modified":["printer-redesign/application/service/PrinterService.java","printer-redesign/application/service/PrintingApplicationService.java","printer-redesign/infrastructure/database/PrinterDatabase.java","printer-redesign/scripts/build-release.sh"]},{"id":"d2d0385e8b5c1b06d7e59f108c6e9f845905c841","message":"fix: 修复编译错误并成功构建APK\n\n修复内容:\n- PrintTestActivity: 重写以修复API兼容性问题\n - observeEnabled()替代getEnabledPrinters()\n - 移除PrinterApplication依赖\n - 修复Priority/PrintType方法调用\n - 修复rawContent类型(String→byte[])\n- OrderFormatterService: 补充shouldBeep()方法闭合括号\n- TemplateRenderEngine: 修复方法调用\n - getSummary()→toString()\n - setFontSize()→setSize()\n - setWidth()→setLength()\n- PrintJobDao: 添加getActiveJobs()方法\n- QueueViewModel: 修复RxJava包装和cancel()参数\n- MainViewModel: 移除totalCount()调用\n- PrinterConfigDTO: 修复fromEntity()方法兼容性\n\n构建结果:APK 7.8MB\n\nCo-Authored-By: Claude Opus 4.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/printer-server/commit/d2d0385e8b5c1b06d7e59f108c6e9f845905c841","author":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"committer":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-01-20T23:38:29+08:00","added":[],"removed":[],"modified":["printer-redesign/application/dto/PrinterConfigDTO.java","printer-redesign/application/engine/TemplateRenderEngine.java","printer-redesign/application/engine/TemplateValidator.java","printer-redesign/domain/service/OrderFormatterService.java","printer-redesign/infrastructure/database/dao/PrintJobDao.java","printer-redesign/infrastructure/device/EscPosExecutor.java","printer-redesign/infrastructure/device/PrinterCommandExecutor.java","printer-redesign/infrastructure/device/TsplExecutor.java","printer-redesign/infrastructure/device/driver/SystemPrintDriver.java","printer-redesign/presentation/PrintTestActivity.java","printer-redesign/presentation/viewmodel/MainViewModel.java","printer-redesign/presentation/viewmodel/QueueViewModel.java"]},{"id":"f8bc615170b4f10a4c9e1ec5261191268d6b7f0a","message":"feat: 增强应用架构与测试功能\n\n- 新增 CQRS 模式支持 (command/query/dto)\n- 添加 PrintTestActivity 测试界面\n- 新增 MainViewModel 和 QueueViewModel\n- 完善 build.gradle 配置与签名设置\n- 优化 MainActivity 功能与交互\n- 增强 PrintTaskAdapter 适配逻辑\n- 添加 proguard 混淆规则和构建脚本\n- 更新 UI 资源文件\n\nCo-Authored-By: Claude Opus 4.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/printer-server/commit/f8bc615170b4f10a4c9e1ec5261191268d6b7f0a","author":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"committer":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-01-20T23:28:57+08:00","added":["printer-redesign/application/command/ConfigurePrinterCommand.java","printer-redesign/application/command/RecoverDeadLetterCommand.java","printer-redesign/application/command/SubmitPrintJobCommand.java","printer-redesign/application/dto/PrintJobDTO.java","printer-redesign/application/dto/PrinterConfigDTO.java","printer-redesign/application/dto/QueueStatsDTO.java","printer-redesign/application/query/GetPrintJobsQuery.java","printer-redesign/application/query/GetQueueStatsQuery.java","printer-redesign/keystore.properties.template","printer-redesign/presentation/PrintTestActivity.java","printer-redesign/presentation/viewmodel/MainViewModel.java","printer-redesign/presentation/viewmodel/QueueViewModel.java","printer-redesign/proguard-rules.pro","printer-redesign/scripts/build-release.sh","printer-redesign/scripts/generate-keystore.sh","printer-redesign/src/main/res/drawable/ic_help.xml","printer-redesign/src/main/res/layout/activity_print_test.xml"],"removed":[],"modified":[".gitignore","printer-redesign/build.gradle","printer-redesign/domain/expression/ExpressionEvaluator.java","printer-redesign/migration/BillStyleAdapter.java","printer-redesign/migration/PrintTaskAdapter.java","printer-redesign/presentation/MainActivity.java","printer-redesign/src/main/AndroidManifest.xml","printer-redesign/src/main/res/values/colors.xml","printer-redesign/src/main/res/values/strings.xml"]},{"id":"4052be41183584c726cd84d2f9d9cb5c371da83b","message":"feat: 完善模板引擎系统与UI优化\n\n模板引擎增强:\n- 新增 ExpressionEvaluator 表达式求值器,支持复杂条件判断\n- 新增 FormatPipeline 格式化管道,支持货币/日期/截断等格式化\n- 新增 ContextDataEnhanced 增强上下文,支持嵌套路径和管道\n- 新增 GroupElement 分组元素,支持条件渲染和循环渲染\n- 新增 TableElementEnhanced 增强表格,支持分组/小计/合计\n- 新增 ImageElement 图片元素,支持URL/Base64/本地文件\n- 新增 TemplateValidator 模板验证器\n- 新增 TemplateRenderEngineEnhanced 增强渲染引擎\n- 完善 TemplateManager 模板管理器\n\nUI和功能优化:\n- 新增 HealthCheckActivity 健康检查详情页\n- 新增 LogViewerActivity 日志查看页面\n- 新增 QueueDetailActivity 队列详情页面\n- 优化 MainActivity 界面布局和状态显示\n- 精简 SystemPrintDriver 代码结构\n- 新增相关资源文件和菜单\n\nCo-Authored-By: Claude Opus 4.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/printer-server/commit/4052be41183584c726cd84d2f9d9cb5c371da83b","author":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"committer":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-01-20T23:12:50+08:00","added":["printer-redesign/application/engine/TemplateRenderEngineEnhanced.java","printer-redesign/application/engine/TemplateValidator.java","printer-redesign/docs/TEMPLATE_ENHANCEMENT_GUIDE.md","printer-redesign/domain/expression/ExpressionEvaluator.java","printer-redesign/domain/service/formatter/StrategyRegistry.java","printer-redesign/domain/template/ContextDataEnhanced.java","printer-redesign/domain/template/CutElement.java","printer-redesign/domain/template/FormatPipeline.java","printer-redesign/domain/template/GroupElement.java","printer-redesign/domain/template/ImageElement.java","printer-redesign/domain/template/QRCodeElement.java","printer-redesign/domain/template/SpacerElement.java","printer-redesign/domain/template/TableElementEnhanced.java","printer-redesign/infrastructure/device/utils/BitmapToEscPosUtil.java","printer-redesign/presentation/HealthCheckActivity.java","printer-redesign/presentation/LogViewerActivity.java","printer-redesign/presentation/QueueDetailActivity.java","printer-redesign/src/main/res/drawable/bg_error_message.xml","printer-redesign/src/main/res/drawable/bg_status_chip.xml","printer-redesign/src/main/res/drawable/ic_check_circle.xml","printer-redesign/src/main/res/drawable/ic_error.xml","printer-redesign/src/main/res/drawable/ic_print_type.xml","printer-redesign/src/main/res/drawable/ic_recover.xml","printer-redesign/src/main/res/drawable/ic_warning.xml","printer-redesign/src/main/res/layout/activity_health_check.xml","printer-redesign/src/main/res/layout/activity_log_viewer.xml","printer-redesign/src/main/res/layout/activity_queue_detail.xml","printer-redesign/src/main/res/layout/item_health_component.xml","printer-redesign/src/main/res/layout/item_print_log.xml","printer-redesign/src/main/res/layout/item_queue_job.xml","printer-redesign/src/main/res/menu/menu_log_viewer.xml","printer-redesign/src/main/res/menu/menu_queue_detail.xml"],"removed":[],"modified":["ARCHITECTURE_COMPARISON.md","CLAUDE.md","printer-redesign/ARCHITECTURE.md","printer-redesign/application/engine/TemplateManager.java","printer-redesign/application/engine/TemplateRenderEngine.java","printer-redesign/build.gradle","printer-redesign/domain/template/BarcodeElement.java","printer-redesign/domain/template/BaseElement.java","printer-redesign/domain/template/ContextData.java","printer-redesign/domain/template/LineElement.java","printer-redesign/domain/template/PrintElement.java","printer-redesign/domain/template/TableElement.java","printer-redesign/domain/template/TextElement.java","printer-redesign/infrastructure/device/driver/SystemPrintDriver.java","printer-redesign/presentation/MainActivity.java","printer-redesign/src/main/AndroidManifest.xml","printer-redesign/src/main/res/layout/activity_main.xml","printer-redesign/src/main/res/values/colors.xml"]}],"total_commits":0,"head_commit":{"id":"6c80c00976d1c5ac4aaa5f76d10cf1e7b4f59448","message":"build: 完善Release版本构建配置\n\n变更内容:\n- 优化版本管理: 使用语义化版本号 (versionMajor.versionMinor.versionPatch)\n- 修复签名配置路径: 使用相对路径读取keystore.properties\n- 添加V1+V2签名: 兼容Android 7+设备\n- 添加getBuildNumber()函数: 基于日期生成构建号\n- 重构测试目录: 迁移至标准src/test/java结构\n\n构建优化效果:\n- Debug版本: 8.1 MB\n- Release版本: 4.1 MB (优化48%)\n- ProGuard混淆 + 资源压缩生效\n\nCo-Authored-By: Claude Opus 4.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/printer-server/commit/6c80c00976d1c5ac4aaa5f76d10cf1e7b4f59448","author":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"committer":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-01-21T00:05:33+08:00","added":["printer-redesign/src/test/java/com/juhai/printer/application/service/PrintTaskProcessorTest.java","printer-redesign/src/test/java/com/juhai/printer/domain/service/OrderFormatterServiceTest.java","printer-redesign/src/test/java/com/juhai/printer/domain/service/PrinterSelectorTest.java","printer-redesign/src/test/java/com/juhai/printer/test/AllTestsRunner.java","printer-redesign/src/test/java/com/juhai/printer/test/BillDomainTest.java","printer-redesign/src/test/java/com/juhai/printer/test/OrderDomainTest.java","printer-redesign/src/test/java/com/juhai/printer/test/PrintApiTest.java","printer-redesign/src/test/java/com/juhai/printer/test/PrintFunctionTest.java","printer-redesign/src/test/java/com/juhai/printer/test/PrintReliabilityTest.java","printer-redesign/src/test/java/com/juhai/printer/test/TemplateEngineTest.java","printer-redesign/src/test/java/com/juhai/printer/test/WebSocketCommunicationTest.java"],"removed":["printer-redesign/test/AllTestsRunner.java","printer-redesign/test/BillDomainTest.java","printer-redesign/test/OrderDomainTest.java","printer-redesign/test/PrintApiTest.java","printer-redesign/test/PrintFunctionTest.java","printer-redesign/test/PrintReliabilityTest.java","printer-redesign/test/TemplateEngineTest.java","printer-redesign/test/WebSocketCommunicationTest.java","printer-redesign/test/com/juhai/printer/application/service/PrintTaskProcessorTest.java","printer-redesign/test/com/juhai/printer/domain/service/OrderFormatterServiceTest.java","printer-redesign/test/com/juhai/printer/domain/service/PrinterSelectorTest.java"],"modified":["printer-redesign/build.gradle"]},"repository":{"id":13,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatars/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":"printer-server","full_name":"luoanwu/printer-server","description":"KTV打印服务器 - DDD架构重构","empty":false,"private":false,"fork":false,"template":false,"parent":null,"mirror":false,"size":27,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/printer-server/languages","html_url":"https://gitea.g-hi.com/luoanwu/printer-server","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/printer-server","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/printer-server.git","clone_url":"https://gitea.g-hi.com/luoanwu/printer-server.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-28T11:06:40+08:00","updated_at":"2026-02-28T11:06:54+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":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,"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","repo_transfer":null},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatars/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":"luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatars/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"}}...
|
schedule
|
2
|
4
|
1779678028
|
1779678119
|
0
|
1779678028
|
1779678119
|
|
|
0
|
Edit
Delete
|
|
23391
|
build: 完善Release版本构建配置
|
13
|
5
|
codeql-analysis.yml
|
17
|
-2
|
46
|
refs/heads/main
|
6c80c00976d1c5ac4aaa5f76d10cf1e7b4f59448
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"0000000000000000000000000000000000000000","after":"6c80c00976d1c5ac4aaa5f76d10cf1e7b4f59448","compare_url":"https://gitea.g-hi.com/luoanwu/printer-server/compare/c254333cc45c082124d3d4fd01a4a3fc3fda7296...6c80c00976d1c5ac4aaa5f76d10cf1e7b4f59448","commits":[{"id":"6c80c00976d1c5ac4aaa5f76d10cf1e7b4f59448","message":"build: 完善Release版本构建配置\n\n变更内容:\n- 优化版本管理: 使用语义化版本号 (versionMajor.versionMinor.versionPatch)\n- 修复签名配置路径: 使用相对路径读取keystore.properties\n- 添加V1+V2签名: 兼容Android 7+设备\n- 添加getBuildNumber()函数: 基于日期生成构建号\n- 重构测试目录: 迁移至标准src/test/java结构\n\n构建优化效果:\n- Debug版本: 8.1 MB\n- Release版本: 4.1 MB (优化48%)\n- ProGuard混淆 + 资源压缩生效\n\nCo-Authored-By: Claude Opus 4.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/printer-server/commit/6c80c00976d1c5ac4aaa5f76d10cf1e7b4f59448","author":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"committer":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-01-21T00:05:33+08:00","added":["printer-redesign/src/test/java/com/juhai/printer/application/service/PrintTaskProcessorTest.java","printer-redesign/src/test/java/com/juhai/printer/domain/service/OrderFormatterServiceTest.java","printer-redesign/src/test/java/com/juhai/printer/domain/service/PrinterSelectorTest.java","printer-redesign/src/test/java/com/juhai/printer/test/AllTestsRunner.java","printer-redesign/src/test/java/com/juhai/printer/test/BillDomainTest.java","printer-redesign/src/test/java/com/juhai/printer/test/OrderDomainTest.java","printer-redesign/src/test/java/com/juhai/printer/test/PrintApiTest.java","printer-redesign/src/test/java/com/juhai/printer/test/PrintFunctionTest.java","printer-redesign/src/test/java/com/juhai/printer/test/PrintReliabilityTest.java","printer-redesign/src/test/java/com/juhai/printer/test/TemplateEngineTest.java","printer-redesign/src/test/java/com/juhai/printer/test/WebSocketCommunicationTest.java"],"removed":["printer-redesign/test/AllTestsRunner.java","printer-redesign/test/BillDomainTest.java","printer-redesign/test/OrderDomainTest.java","printer-redesign/test/PrintApiTest.java","printer-redesign/test/PrintFunctionTest.java","printer-redesign/test/PrintReliabilityTest.java","printer-redesign/test/TemplateEngineTest.java","printer-redesign/test/WebSocketCommunicationTest.java","printer-redesign/test/com/juhai/printer/application/service/PrintTaskProcessorTest.java","printer-redesign/test/com/juhai/printer/domain/service/OrderFormatterServiceTest.java","printer-redesign/test/com/juhai/printer/domain/service/PrinterSelectorTest.java"],"modified":["printer-redesign/build.gradle"]},{"id":"b44b6415c67f54b2d1bcd688757fec2aaf1686f4","message":"fix: 修复PrintJob状态转换和数据库初始化崩溃问题\n\n1. PrinterDatabase.optimizeDatabase()\n - 将PRAGMA命令从execSQL改为query()方法\n - Room的SupportSQLiteDatabase对PRAGMA有限制\n - 添加异常处理确保数据库优化失败不影响启动\n\n2. PrinterService.onTaskFailed()\n - 添加状态检查逻辑,根据当前状态决定处理方式\n - FAILED状态:执行重试逻辑\n - PRINTING状态:先转换为FAILED再重试\n - 其他状态:直接重新调度执行\n\n3. PrintingApplicationService.executePrintJob()\n - 新增prepareJobForPrinting()确保状态正确转换\n - CREATED -\u003e QUEUED -\u003e PRINTING 状态流转\n - 新增handleJobFailure()安全处理失败\n\nCo-Authored-By: Claude Opus 4.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/printer-server/commit/b44b6415c67f54b2d1bcd688757fec2aaf1686f4","author":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"committer":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-01-20T23:54:24+08:00","added":[],"removed":[],"modified":["printer-redesign/application/service/PrinterService.java","printer-redesign/application/service/PrintingApplicationService.java","printer-redesign/infrastructure/database/PrinterDatabase.java","printer-redesign/scripts/build-release.sh"]},{"id":"d2d0385e8b5c1b06d7e59f108c6e9f845905c841","message":"fix: 修复编译错误并成功构建APK\n\n修复内容:\n- PrintTestActivity: 重写以修复API兼容性问题\n - observeEnabled()替代getEnabledPrinters()\n - 移除PrinterApplication依赖\n - 修复Priority/PrintType方法调用\n - 修复rawContent类型(String→byte[])\n- OrderFormatterService: 补充shouldBeep()方法闭合括号\n- TemplateRenderEngine: 修复方法调用\n - getSummary()→toString()\n - setFontSize()→setSize()\n - setWidth()→setLength()\n- PrintJobDao: 添加getActiveJobs()方法\n- QueueViewModel: 修复RxJava包装和cancel()参数\n- MainViewModel: 移除totalCount()调用\n- PrinterConfigDTO: 修复fromEntity()方法兼容性\n\n构建结果:APK 7.8MB\n\nCo-Authored-By: Claude Opus 4.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/printer-server/commit/d2d0385e8b5c1b06d7e59f108c6e9f845905c841","author":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"committer":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-01-20T23:38:29+08:00","added":[],"removed":[],"modified":["printer-redesign/application/dto/PrinterConfigDTO.java","printer-redesign/application/engine/TemplateRenderEngine.java","printer-redesign/application/engine/TemplateValidator.java","printer-redesign/domain/service/OrderFormatterService.java","printer-redesign/infrastructure/database/dao/PrintJobDao.java","printer-redesign/infrastructure/device/EscPosExecutor.java","printer-redesign/infrastructure/device/PrinterCommandExecutor.java","printer-redesign/infrastructure/device/TsplExecutor.java","printer-redesign/infrastructure/device/driver/SystemPrintDriver.java","printer-redesign/presentation/PrintTestActivity.java","printer-redesign/presentation/viewmodel/MainViewModel.java","printer-redesign/presentation/viewmodel/QueueViewModel.java"]},{"id":"f8bc615170b4f10a4c9e1ec5261191268d6b7f0a","message":"feat: 增强应用架构与测试功能\n\n- 新增 CQRS 模式支持 (command/query/dto)\n- 添加 PrintTestActivity 测试界面\n- 新增 MainViewModel 和 QueueViewModel\n- 完善 build.gradle 配置与签名设置\n- 优化 MainActivity 功能与交互\n- 增强 PrintTaskAdapter 适配逻辑\n- 添加 proguard 混淆规则和构建脚本\n- 更新 UI 资源文件\n\nCo-Authored-By: Claude Opus 4.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/printer-server/commit/f8bc615170b4f10a4c9e1ec5261191268d6b7f0a","author":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"committer":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-01-20T23:28:57+08:00","added":["printer-redesign/application/command/ConfigurePrinterCommand.java","printer-redesign/application/command/RecoverDeadLetterCommand.java","printer-redesign/application/command/SubmitPrintJobCommand.java","printer-redesign/application/dto/PrintJobDTO.java","printer-redesign/application/dto/PrinterConfigDTO.java","printer-redesign/application/dto/QueueStatsDTO.java","printer-redesign/application/query/GetPrintJobsQuery.java","printer-redesign/application/query/GetQueueStatsQuery.java","printer-redesign/keystore.properties.template","printer-redesign/presentation/PrintTestActivity.java","printer-redesign/presentation/viewmodel/MainViewModel.java","printer-redesign/presentation/viewmodel/QueueViewModel.java","printer-redesign/proguard-rules.pro","printer-redesign/scripts/build-release.sh","printer-redesign/scripts/generate-keystore.sh","printer-redesign/src/main/res/drawable/ic_help.xml","printer-redesign/src/main/res/layout/activity_print_test.xml"],"removed":[],"modified":[".gitignore","printer-redesign/build.gradle","printer-redesign/domain/expression/ExpressionEvaluator.java","printer-redesign/migration/BillStyleAdapter.java","printer-redesign/migration/PrintTaskAdapter.java","printer-redesign/presentation/MainActivity.java","printer-redesign/src/main/AndroidManifest.xml","printer-redesign/src/main/res/values/colors.xml","printer-redesign/src/main/res/values/strings.xml"]},{"id":"4052be41183584c726cd84d2f9d9cb5c371da83b","message":"feat: 完善模板引擎系统与UI优化\n\n模板引擎增强:\n- 新增 ExpressionEvaluator 表达式求值器,支持复杂条件判断\n- 新增 FormatPipeline 格式化管道,支持货币/日期/截断等格式化\n- 新增 ContextDataEnhanced 增强上下文,支持嵌套路径和管道\n- 新增 GroupElement 分组元素,支持条件渲染和循环渲染\n- 新增 TableElementEnhanced 增强表格,支持分组/小计/合计\n- 新增 ImageElement 图片元素,支持URL/Base64/本地文件\n- 新增 TemplateValidator 模板验证器\n- 新增 TemplateRenderEngineEnhanced 增强渲染引擎\n- 完善 TemplateManager 模板管理器\n\nUI和功能优化:\n- 新增 HealthCheckActivity 健康检查详情页\n- 新增 LogViewerActivity 日志查看页面\n- 新增 QueueDetailActivity 队列详情页面\n- 优化 MainActivity 界面布局和状态显示\n- 精简 SystemPrintDriver 代码结构\n- 新增相关资源文件和菜单\n\nCo-Authored-By: Claude Opus 4.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/printer-server/commit/4052be41183584c726cd84d2f9d9cb5c371da83b","author":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"committer":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-01-20T23:12:50+08:00","added":["printer-redesign/application/engine/TemplateRenderEngineEnhanced.java","printer-redesign/application/engine/TemplateValidator.java","printer-redesign/docs/TEMPLATE_ENHANCEMENT_GUIDE.md","printer-redesign/domain/expression/ExpressionEvaluator.java","printer-redesign/domain/service/formatter/StrategyRegistry.java","printer-redesign/domain/template/ContextDataEnhanced.java","printer-redesign/domain/template/CutElement.java","printer-redesign/domain/template/FormatPipeline.java","printer-redesign/domain/template/GroupElement.java","printer-redesign/domain/template/ImageElement.java","printer-redesign/domain/template/QRCodeElement.java","printer-redesign/domain/template/SpacerElement.java","printer-redesign/domain/template/TableElementEnhanced.java","printer-redesign/infrastructure/device/utils/BitmapToEscPosUtil.java","printer-redesign/presentation/HealthCheckActivity.java","printer-redesign/presentation/LogViewerActivity.java","printer-redesign/presentation/QueueDetailActivity.java","printer-redesign/src/main/res/drawable/bg_error_message.xml","printer-redesign/src/main/res/drawable/bg_status_chip.xml","printer-redesign/src/main/res/drawable/ic_check_circle.xml","printer-redesign/src/main/res/drawable/ic_error.xml","printer-redesign/src/main/res/drawable/ic_print_type.xml","printer-redesign/src/main/res/drawable/ic_recover.xml","printer-redesign/src/main/res/drawable/ic_warning.xml","printer-redesign/src/main/res/layout/activity_health_check.xml","printer-redesign/src/main/res/layout/activity_log_viewer.xml","printer-redesign/src/main/res/layout/activity_queue_detail.xml","printer-redesign/src/main/res/layout/item_health_component.xml","printer-redesign/src/main/res/layout/item_print_log.xml","printer-redesign/src/main/res/layout/item_queue_job.xml","printer-redesign/src/main/res/menu/menu_log_viewer.xml","printer-redesign/src/main/res/menu/menu_queue_detail.xml"],"removed":[],"modified":["ARCHITECTURE_COMPARISON.md","CLAUDE.md","printer-redesign/ARCHITECTURE.md","printer-redesign/application/engine/TemplateManager.java","printer-redesign/application/engine/TemplateRenderEngine.java","printer-redesign/build.gradle","printer-redesign/domain/template/BarcodeElement.java","printer-redesign/domain/template/BaseElement.java","printer-redesign/domain/template/ContextData.java","printer-redesign/domain/template/LineElement.java","printer-redesign/domain/template/PrintElement.java","printer-redesign/domain/template/TableElement.java","printer-redesign/domain/template/TextElement.java","printer-redesign/infrastructure/device/driver/SystemPrintDriver.java","printer-redesign/presentation/MainActivity.java","printer-redesign/src/main/AndroidManifest.xml","printer-redesign/src/main/res/layout/activity_main.xml","printer-redesign/src/main/res/values/colors.xml"]}],"total_commits":0,"head_commit":{"id":"6c80c00976d1c5ac4aaa5f76d10cf1e7b4f59448","message":"build: 完善Release版本构建配置\n\n变更内容:\n- 优化版本管理: 使用语义化版本号 (versionMajor.versionMinor.versionPatch)\n- 修复签名配置路径: 使用相对路径读取keystore.properties\n- 添加V1+V2签名: 兼容Android 7+设备\n- 添加getBuildNumber()函数: 基于日期生成构建号\n- 重构测试目录: 迁移至标准src/test/java结构\n\n构建优化效果:\n- Debug版本: 8.1 MB\n- Release版本: 4.1 MB (优化48%)\n- ProGuard混淆 + 资源压缩生效\n\nCo-Authored-By: Claude Opus 4.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/printer-server/commit/6c80c00976d1c5ac4aaa5f76d10cf1e7b4f59448","author":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"committer":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-01-21T00:05:33+08:00","added":["printer-redesign/src/test/java/com/juhai/printer/application/service/PrintTaskProcessorTest.java","printer-redesign/src/test/java/com/juhai/printer/domain/service/OrderFormatterServiceTest.java","printer-redesign/src/test/java/com/juhai/printer/domain/service/PrinterSelectorTest.java","printer-redesign/src/test/java/com/juhai/printer/test/AllTestsRunner.java","printer-redesign/src/test/java/com/juhai/printer/test/BillDomainTest.java","printer-redesign/src/test/java/com/juhai/printer/test/OrderDomainTest.java","printer-redesign/src/test/java/com/juhai/printer/test/PrintApiTest.java","printer-redesign/src/test/java/com/juhai/printer/test/PrintFunctionTest.java","printer-redesign/src/test/java/com/juhai/printer/test/PrintReliabilityTest.java","printer-redesign/src/test/java/com/juhai/printer/test/TemplateEngineTest.java","printer-redesign/src/test/java/com/juhai/printer/test/WebSocketCommunicationTest.java"],"removed":["printer-redesign/test/AllTestsRunner.java","printer-redesign/test/BillDomainTest.java","printer-redesign/test/OrderDomainTest.java","printer-redesign/test/PrintApiTest.java","printer-redesign/test/PrintFunctionTest.java","printer-redesign/test/PrintReliabilityTest.java","printer-redesign/test/TemplateEngineTest.java","printer-redesign/test/WebSocketCommunicationTest.java","printer-redesign/test/com/juhai/printer/application/service/PrintTaskProcessorTest.java","printer-redesign/test/com/juhai/printer/domain/service/OrderFormatterServiceTest.java","printer-redesign/test/com/juhai/printer/domain/service/PrinterSelectorTest.java"],"modified":["printer-redesign/build.gradle"]},"repository":{"id":13,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatars/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":"printer-server","full_name":"luoanwu/printer-server","description":"KTV打印服务器 - DDD架构重构","empty":false,"private":false,"fork":false,"template":false,"parent":null,"mirror":false,"size":27,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/printer-server/languages","html_url":"https://gitea.g-hi.com/luoanwu/printer-server","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/printer-server","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/printer-server.git","clone_url":"https://gitea.g-hi.com/luoanwu/printer-server.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-28T11:06:40+08:00","updated_at":"2026-02-28T11:06:54+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":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,"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","repo_transfer":null},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatars/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":"luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatars/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"}}...
|
schedule
|
2
|
4
|
1780282828
|
1780282919
|
0
|
1780282828
|
1780282919
|
|
|
0
|
Edit
Delete
|
|
23392
|
build: 完善Release版本构建配置
|
13
|
5
|
codeql-analysis.yml
|
18
|
-2
|
46
|
refs/heads/main
|
6c80c00976d1c5ac4aaa5f76d10cf1e7b4f59448
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"0000000000000000000000000000000000000000","after":"6c80c00976d1c5ac4aaa5f76d10cf1e7b4f59448","compare_url":"https://gitea.g-hi.com/luoanwu/printer-server/compare/c254333cc45c082124d3d4fd01a4a3fc3fda7296...6c80c00976d1c5ac4aaa5f76d10cf1e7b4f59448","commits":[{"id":"6c80c00976d1c5ac4aaa5f76d10cf1e7b4f59448","message":"build: 完善Release版本构建配置\n\n变更内容:\n- 优化版本管理: 使用语义化版本号 (versionMajor.versionMinor.versionPatch)\n- 修复签名配置路径: 使用相对路径读取keystore.properties\n- 添加V1+V2签名: 兼容Android 7+设备\n- 添加getBuildNumber()函数: 基于日期生成构建号\n- 重构测试目录: 迁移至标准src/test/java结构\n\n构建优化效果:\n- Debug版本: 8.1 MB\n- Release版本: 4.1 MB (优化48%)\n- ProGuard混淆 + 资源压缩生效\n\nCo-Authored-By: Claude Opus 4.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/printer-server/commit/6c80c00976d1c5ac4aaa5f76d10cf1e7b4f59448","author":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"committer":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-01-21T00:05:33+08:00","added":["printer-redesign/src/test/java/com/juhai/printer/application/service/PrintTaskProcessorTest.java","printer-redesign/src/test/java/com/juhai/printer/domain/service/OrderFormatterServiceTest.java","printer-redesign/src/test/java/com/juhai/printer/domain/service/PrinterSelectorTest.java","printer-redesign/src/test/java/com/juhai/printer/test/AllTestsRunner.java","printer-redesign/src/test/java/com/juhai/printer/test/BillDomainTest.java","printer-redesign/src/test/java/com/juhai/printer/test/OrderDomainTest.java","printer-redesign/src/test/java/com/juhai/printer/test/PrintApiTest.java","printer-redesign/src/test/java/com/juhai/printer/test/PrintFunctionTest.java","printer-redesign/src/test/java/com/juhai/printer/test/PrintReliabilityTest.java","printer-redesign/src/test/java/com/juhai/printer/test/TemplateEngineTest.java","printer-redesign/src/test/java/com/juhai/printer/test/WebSocketCommunicationTest.java"],"removed":["printer-redesign/test/AllTestsRunner.java","printer-redesign/test/BillDomainTest.java","printer-redesign/test/OrderDomainTest.java","printer-redesign/test/PrintApiTest.java","printer-redesign/test/PrintFunctionTest.java","printer-redesign/test/PrintReliabilityTest.java","printer-redesign/test/TemplateEngineTest.java","printer-redesign/test/WebSocketCommunicationTest.java","printer-redesign/test/com/juhai/printer/application/service/PrintTaskProcessorTest.java","printer-redesign/test/com/juhai/printer/domain/service/OrderFormatterServiceTest.java","printer-redesign/test/com/juhai/printer/domain/service/PrinterSelectorTest.java"],"modified":["printer-redesign/build.gradle"]},{"id":"b44b6415c67f54b2d1bcd688757fec2aaf1686f4","message":"fix: 修复PrintJob状态转换和数据库初始化崩溃问题\n\n1. PrinterDatabase.optimizeDatabase()\n - 将PRAGMA命令从execSQL改为query()方法\n - Room的SupportSQLiteDatabase对PRAGMA有限制\n - 添加异常处理确保数据库优化失败不影响启动\n\n2. PrinterService.onTaskFailed()\n - 添加状态检查逻辑,根据当前状态决定处理方式\n - FAILED状态:执行重试逻辑\n - PRINTING状态:先转换为FAILED再重试\n - 其他状态:直接重新调度执行\n\n3. PrintingApplicationService.executePrintJob()\n - 新增prepareJobForPrinting()确保状态正确转换\n - CREATED -\u003e QUEUED -\u003e PRINTING 状态流转\n - 新增handleJobFailure()安全处理失败\n\nCo-Authored-By: Claude Opus 4.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/printer-server/commit/b44b6415c67f54b2d1bcd688757fec2aaf1686f4","author":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"committer":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-01-20T23:54:24+08:00","added":[],"removed":[],"modified":["printer-redesign/application/service/PrinterService.java","printer-redesign/application/service/PrintingApplicationService.java","printer-redesign/infrastructure/database/PrinterDatabase.java","printer-redesign/scripts/build-release.sh"]},{"id":"d2d0385e8b5c1b06d7e59f108c6e9f845905c841","message":"fix: 修复编译错误并成功构建APK\n\n修复内容:\n- PrintTestActivity: 重写以修复API兼容性问题\n - observeEnabled()替代getEnabledPrinters()\n - 移除PrinterApplication依赖\n - 修复Priority/PrintType方法调用\n - 修复rawContent类型(String→byte[])\n- OrderFormatterService: 补充shouldBeep()方法闭合括号\n- TemplateRenderEngine: 修复方法调用\n - getSummary()→toString()\n - setFontSize()→setSize()\n - setWidth()→setLength()\n- PrintJobDao: 添加getActiveJobs()方法\n- QueueViewModel: 修复RxJava包装和cancel()参数\n- MainViewModel: 移除totalCount()调用\n- PrinterConfigDTO: 修复fromEntity()方法兼容性\n\n构建结果:APK 7.8MB\n\nCo-Authored-By: Claude Opus 4.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/printer-server/commit/d2d0385e8b5c1b06d7e59f108c6e9f845905c841","author":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"committer":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-01-20T23:38:29+08:00","added":[],"removed":[],"modified":["printer-redesign/application/dto/PrinterConfigDTO.java","printer-redesign/application/engine/TemplateRenderEngine.java","printer-redesign/application/engine/TemplateValidator.java","printer-redesign/domain/service/OrderFormatterService.java","printer-redesign/infrastructure/database/dao/PrintJobDao.java","printer-redesign/infrastructure/device/EscPosExecutor.java","printer-redesign/infrastructure/device/PrinterCommandExecutor.java","printer-redesign/infrastructure/device/TsplExecutor.java","printer-redesign/infrastructure/device/driver/SystemPrintDriver.java","printer-redesign/presentation/PrintTestActivity.java","printer-redesign/presentation/viewmodel/MainViewModel.java","printer-redesign/presentation/viewmodel/QueueViewModel.java"]},{"id":"f8bc615170b4f10a4c9e1ec5261191268d6b7f0a","message":"feat: 增强应用架构与测试功能\n\n- 新增 CQRS 模式支持 (command/query/dto)\n- 添加 PrintTestActivity 测试界面\n- 新增 MainViewModel 和 QueueViewModel\n- 完善 build.gradle 配置与签名设置\n- 优化 MainActivity 功能与交互\n- 增强 PrintTaskAdapter 适配逻辑\n- 添加 proguard 混淆规则和构建脚本\n- 更新 UI 资源文件\n\nCo-Authored-By: Claude Opus 4.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/printer-server/commit/f8bc615170b4f10a4c9e1ec5261191268d6b7f0a","author":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"committer":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-01-20T23:28:57+08:00","added":["printer-redesign/application/command/ConfigurePrinterCommand.java","printer-redesign/application/command/RecoverDeadLetterCommand.java","printer-redesign/application/command/SubmitPrintJobCommand.java","printer-redesign/application/dto/PrintJobDTO.java","printer-redesign/application/dto/PrinterConfigDTO.java","printer-redesign/application/dto/QueueStatsDTO.java","printer-redesign/application/query/GetPrintJobsQuery.java","printer-redesign/application/query/GetQueueStatsQuery.java","printer-redesign/keystore.properties.template","printer-redesign/presentation/PrintTestActivity.java","printer-redesign/presentation/viewmodel/MainViewModel.java","printer-redesign/presentation/viewmodel/QueueViewModel.java","printer-redesign/proguard-rules.pro","printer-redesign/scripts/build-release.sh","printer-redesign/scripts/generate-keystore.sh","printer-redesign/src/main/res/drawable/ic_help.xml","printer-redesign/src/main/res/layout/activity_print_test.xml"],"removed":[],"modified":[".gitignore","printer-redesign/build.gradle","printer-redesign/domain/expression/ExpressionEvaluator.java","printer-redesign/migration/BillStyleAdapter.java","printer-redesign/migration/PrintTaskAdapter.java","printer-redesign/presentation/MainActivity.java","printer-redesign/src/main/AndroidManifest.xml","printer-redesign/src/main/res/values/colors.xml","printer-redesign/src/main/res/values/strings.xml"]},{"id":"4052be41183584c726cd84d2f9d9cb5c371da83b","message":"feat: 完善模板引擎系统与UI优化\n\n模板引擎增强:\n- 新增 ExpressionEvaluator 表达式求值器,支持复杂条件判断\n- 新增 FormatPipeline 格式化管道,支持货币/日期/截断等格式化\n- 新增 ContextDataEnhanced 增强上下文,支持嵌套路径和管道\n- 新增 GroupElement 分组元素,支持条件渲染和循环渲染\n- 新增 TableElementEnhanced 增强表格,支持分组/小计/合计\n- 新增 ImageElement 图片元素,支持URL/Base64/本地文件\n- 新增 TemplateValidator 模板验证器\n- 新增 TemplateRenderEngineEnhanced 增强渲染引擎\n- 完善 TemplateManager 模板管理器\n\nUI和功能优化:\n- 新增 HealthCheckActivity 健康检查详情页\n- 新增 LogViewerActivity 日志查看页面\n- 新增 QueueDetailActivity 队列详情页面\n- 优化 MainActivity 界面布局和状态显示\n- 精简 SystemPrintDriver 代码结构\n- 新增相关资源文件和菜单\n\nCo-Authored-By: Claude Opus 4.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/printer-server/commit/4052be41183584c726cd84d2f9d9cb5c371da83b","author":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"committer":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-01-20T23:12:50+08:00","added":["printer-redesign/application/engine/TemplateRenderEngineEnhanced.java","printer-redesign/application/engine/TemplateValidator.java","printer-redesign/docs/TEMPLATE_ENHANCEMENT_GUIDE.md","printer-redesign/domain/expression/ExpressionEvaluator.java","printer-redesign/domain/service/formatter/StrategyRegistry.java","printer-redesign/domain/template/ContextDataEnhanced.java","printer-redesign/domain/template/CutElement.java","printer-redesign/domain/template/FormatPipeline.java","printer-redesign/domain/template/GroupElement.java","printer-redesign/domain/template/ImageElement.java","printer-redesign/domain/template/QRCodeElement.java","printer-redesign/domain/template/SpacerElement.java","printer-redesign/domain/template/TableElementEnhanced.java","printer-redesign/infrastructure/device/utils/BitmapToEscPosUtil.java","printer-redesign/presentation/HealthCheckActivity.java","printer-redesign/presentation/LogViewerActivity.java","printer-redesign/presentation/QueueDetailActivity.java","printer-redesign/src/main/res/drawable/bg_error_message.xml","printer-redesign/src/main/res/drawable/bg_status_chip.xml","printer-redesign/src/main/res/drawable/ic_check_circle.xml","printer-redesign/src/main/res/drawable/ic_error.xml","printer-redesign/src/main/res/drawable/ic_print_type.xml","printer-redesign/src/main/res/drawable/ic_recover.xml","printer-redesign/src/main/res/drawable/ic_warning.xml","printer-redesign/src/main/res/layout/activity_health_check.xml","printer-redesign/src/main/res/layout/activity_log_viewer.xml","printer-redesign/src/main/res/layout/activity_queue_detail.xml","printer-redesign/src/main/res/layout/item_health_component.xml","printer-redesign/src/main/res/layout/item_print_log.xml","printer-redesign/src/main/res/layout/item_queue_job.xml","printer-redesign/src/main/res/menu/menu_log_viewer.xml","printer-redesign/src/main/res/menu/menu_queue_detail.xml"],"removed":[],"modified":["ARCHITECTURE_COMPARISON.md","CLAUDE.md","printer-redesign/ARCHITECTURE.md","printer-redesign/application/engine/TemplateManager.java","printer-redesign/application/engine/TemplateRenderEngine.java","printer-redesign/build.gradle","printer-redesign/domain/template/BarcodeElement.java","printer-redesign/domain/template/BaseElement.java","printer-redesign/domain/template/ContextData.java","printer-redesign/domain/template/LineElement.java","printer-redesign/domain/template/PrintElement.java","printer-redesign/domain/template/TableElement.java","printer-redesign/domain/template/TextElement.java","printer-redesign/infrastructure/device/driver/SystemPrintDriver.java","printer-redesign/presentation/MainActivity.java","printer-redesign/src/main/AndroidManifest.xml","printer-redesign/src/main/res/layout/activity_main.xml","printer-redesign/src/main/res/values/colors.xml"]}],"total_commits":0,"head_commit":{"id":"6c80c00976d1c5ac4aaa5f76d10cf1e7b4f59448","message":"build: 完善Release版本构建配置\n\n变更内容:\n- 优化版本管理: 使用语义化版本号 (versionMajor.versionMinor.versionPatch)\n- 修复签名配置路径: 使用相对路径读取keystore.properties\n- 添加V1+V2签名: 兼容Android 7+设备\n- 添加getBuildNumber()函数: 基于日期生成构建号\n- 重构测试目录: 迁移至标准src/test/java结构\n\n构建优化效果:\n- Debug版本: 8.1 MB\n- Release版本: 4.1 MB (优化48%)\n- ProGuard混淆 + 资源压缩生效\n\nCo-Authored-By: Claude Opus 4.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/printer-server/commit/6c80c00976d1c5ac4aaa5f76d10cf1e7b4f59448","author":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"committer":{"name":"hi.laoluo","email":"hi.laoluo@hilaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-01-21T00:05:33+08:00","added":["printer-redesign/src/test/java/com/juhai/printer/application/service/PrintTaskProcessorTest.java","printer-redesign/src/test/java/com/juhai/printer/domain/service/OrderFormatterServiceTest.java","printer-redesign/src/test/java/com/juhai/printer/domain/service/PrinterSelectorTest.java","printer-redesign/src/test/java/com/juhai/printer/test/AllTestsRunner.java","printer-redesign/src/test/java/com/juhai/printer/test/BillDomainTest.java","printer-redesign/src/test/java/com/juhai/printer/test/OrderDomainTest.java","printer-redesign/src/test/java/com/juhai/printer/test/PrintApiTest.java","printer-redesign/src/test/java/com/juhai/printer/test/PrintFunctionTest.java","printer-redesign/src/test/java/com/juhai/printer/test/PrintReliabilityTest.java","printer-redesign/src/test/java/com/juhai/printer/test/TemplateEngineTest.java","printer-redesign/src/test/java/com/juhai/printer/test/WebSocketCommunicationTest.java"],"removed":["printer-redesign/test/AllTestsRunner.java","printer-redesign/test/BillDomainTest.java","printer-redesign/test/OrderDomainTest.java","printer-redesign/test/PrintApiTest.java","printer-redesign/test/PrintFunctionTest.java","printer-redesign/test/PrintReliabilityTest.java","printer-redesign/test/TemplateEngineTest.java","printer-redesign/test/WebSocketCommunicationTest.java","printer-redesign/test/com/juhai/printer/application/service/PrintTaskProcessorTest.java","printer-redesign/test/com/juhai/printer/domain/service/OrderFormatterServiceTest.java","printer-redesign/test/com/juhai/printer/domain/service/PrinterSelectorTest.java"],"modified":["printer-redesign/build.gradle"]},"repository":{"id":13,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatars/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":"printer-server","full_name":"luoanwu/printer-server","description":"KTV打印服务器 - DDD架构重构","empty":false,"private":false,"fork":false,"template":false,"parent":null,"mirror":false,"size":27,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/printer-server/languages","html_url":"https://gitea.g-hi.com/luoanwu/printer-server","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/printer-server","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/printer-server.git","clone_url":"https://gitea.g-hi.com/luoanwu/printer-server.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-28T11:06:40+08:00","updated_at":"2026-02-28T11:06:54+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":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,"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","repo_transfer":null},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatars/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":"luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatars/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"}}...
|
schedule
|
2
|
4
|
1780887629
|
1780887670
|
0
|
1780887628
|
1780887670
|
|
|
0
|
Edit
Delete
|
|
13812
|
feat: 同步最新代码更改,包括后端API、前端组件、测试和报告更新
|
6
|
5
|
ci.yml
|
13734
|
5
|
0
|
refs/heads/main
|
d2c68b13960de626f7a8d496bf1977d263eb7931
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"98cc8da660b8d4dba9887432490471d976c03f5f","after":"d2c68b13960de626f7a8d496bf1977d263eb7931","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/98cc8da660b8d4dba9887432490471d976c03f5f...d2c68b13960de626f7a8d496bf1977d263eb7931","commits":[{"id":"d2c68b13960de626f7a8d496bf1977d263eb7931","message":"feat: 同步最新代码更改,包括后端API、前端组件、测试和报告更新\n\nCo-authored-by: Qwen-Coder \u003cqwen-coder@alibabacloud.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/d2c68b13960de626f7a8d496bf1977d263eb7931","author":{"name":"Mluo","email":"mluo@MluodeMacBook-Air.local","username":""},"committer":{"name":"Mluo","email":"mluo@MluodeMacBook-Air.local","username":""},"verification":null,"timestamp":"2026-04-13T15:39:52+08:00","added":["backend/prisma/migrations/20260413_add_journey_orchestration_and_store_configs/migration.sql","backend/src/modules/journey-orchestration/journey-orchestration.contract.routes.ts","backend/src/modules/process/process.controller.ts","backend/src/modules/process/process.types.ts","backend/src/modules/revenue/revenue-crud.service.ts","backend/src/modules/stores/store-config.service.ts","backend/src/modules/treasury/treasury-crud.service.ts","e2e/test-results/form-interactions-core-bus-0f529-d-to-Cash-F03-商机表单---编辑回填验证-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-0f529-d-to-Cash-F03-商机表单---编辑回填验证-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-184fa--to-Cash-F01-客户表单---创建成功全流程-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-184fa--to-Cash-F01-客户表单---创建成功全流程-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-4c4ce--to-Cash-F07-客户表单---手机号重复检测-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-4c4ce--to-Cash-F07-客户表单---手机号重复检测-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-64a51-to-Cash-F05-合同表单---复杂字段联动验证-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-64a51-to-Cash-F05-合同表单---复杂字段联动验证-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-80c59-d-to-Cash-F08-报价表单---实时计算验证-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-80c59-d-to-Cash-F08-报价表单---实时计算验证-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-90544-d-to-Cash-F02-线索表单---验证错误提示-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-90544-d-to-Cash-F02-线索表单---验证错误提示-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-a51f4-d-to-Cash-F04-报价表单---草稿自动恢复-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-a51f4-d-to-Cash-F04-报价表单---草稿自动恢复-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-cf0d9--to-Cash-F06-订单表单---动态明细行验证-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-cf0d9--to-Cash-F06-订单表单---动态明细行验证-chromium/test-failed-1.png","e2e/tests/form-interactions/hr-forms.spec.ts","e2e/tests/form-interactions/large-data-performance.spec.ts","e2e/tests/form-interactions/service-center-forms.spec.ts","e2e/tests/form-interactions/supply-chain-forms.spec.ts","frontend/src/views/cpq/components/PoliciesTab.vue","frontend/src/views/marketing-calendar/components/CalendarAgendaView.vue","frontend/src/views/marketing-calendar/components/CalendarMonthView.vue","frontend/src/views/marketing-calendar/components/CalendarWeekView.vue","frontend/src/views/marketing-calendar/components/EventDetailDrawer.vue","frontend/src/views/marketing-calendar/components/EventFormDialog.vue","frontend/src/views/marketing-calendar/composables/useMarketingCalendar.ts","frontend/src/views/marketing-north-star/components/NorthStarAlerts.vue","frontend/src/views/marketing-north-star/components/NorthStarDashboard.vue","frontend/src/views/marketing-north-star/components/NorthStarMetricForm.vue","frontend/src/views/settings/components/integration/IntegrationAdPlatformsPanel.vue","frontend/src/views/settings/components/integration/IntegrationAiConfig.vue","frontend/src/views/settings/components/integration/IntegrationDingtalkConfig.vue","frontend/src/views/settings/components/integration/IntegrationEmailConfig.vue","frontend/src/views/settings/components/integration/IntegrationFeishuConfig.vue","frontend/src/views/settings/components/integration/IntegrationGroupbuyPanel.vue","frontend/src/views/settings/components/integration/IntegrationSmsConfig.vue","frontend/src/views/settings/components/integration/IntegrationWebhookConfig.vue","frontend/src/views/settings/components/integration/IntegrationWechatPublicConfig.vue","frontend/src/views/settings/components/integration/IntegrationWechatWorkConfig.vue","scripts/migrate-to-uselistpage.ts"],"removed":["e2e/test-results/auth.setup.ts-authenticate-as-admin-setup/error-context.md","e2e/test-results/auth.setup.ts-authenticate-as-admin-setup/test-failed-1.png"],"modified":[".github/workflows/e2e-tests.yml","backend/.env.test","backend/prisma/schema/marketing.prisma","backend/prisma/schema/stores.prisma","backend/src/modules/ad-placement/placement.contract.routes.ts","backend/src/modules/ad-placement/placement.controller.ts","backend/src/modules/ad-placement/placement.service.ts","backend/src/modules/channels/channel.contract.routes.ts","backend/src/modules/dimension-transform/dimension-transform.controller.ts","backend/src/modules/dimension-transform/dimension-transform.routes.ts","backend/src/modules/dimension-transform/dimension-transform.service.ts","backend/src/modules/expense/expense.contract.routes.ts","backend/src/modules/expense/expense.controller.ts","backend/src/modules/expense/expense.routes.ts","backend/src/modules/faults/fault.contract.routes.ts","backend/src/modules/faults/fault.service.ts","backend/src/modules/geo-keywords/geo-keyword.contract.routes.ts","backend/src/modules/geo-keywords/geo-keyword.controller.ts","backend/src/modules/geo-keywords/geo-keyword.routes.ts","backend/src/modules/geo-keywords/geo-keyword.schema.ts","backend/src/modules/geo-keywords/geo-keyword.service.ts","backend/src/modules/groupbuy-participants/groupbuy-participant.contract.routes.ts","backend/src/modules/groupbuy-participants/groupbuy-participant.controller.ts","backend/src/modules/groupbuy-participants/groupbuy-participant.routes.ts","backend/src/modules/journey-orchestration/journey-orchestration.service.ts","backend/src/modules/knowledge/knowledge.routes.ts","backend/src/modules/livestream-groupbuy/livestream-groupbuy-conversion.contract.routes.ts","backend/src/modules/livestream-groupbuy/livestream-groupbuy-conversion.controller.ts","backend/src/modules/livestream-groupbuy/livestream-groupbuy-conversion.routes.ts","backend/src/modules/marketing-matrix/matrix.contract.routes.ts","backend/src/modules/marketing-matrix/matrix.controller.ts","backend/src/modules/mdm/mdm.service.ts","backend/src/modules/orders/order.controller.ts","backend/src/modules/process/process.routes.ts","backend/src/modules/process/process.schema.ts","backend/src/modules/process/process.service.test.ts","backend/src/modules/process/process.service.ts","backend/src/modules/realtime/realtime.contract.routes.ts","backend/src/modules/realtime/realtime.controller.ts","backend/src/modules/realtime/realtime.routes.ts","backend/src/modules/revenue/revenue.contract.routes.ts","backend/src/modules/revenue/revenue.controller.ts","backend/src/modules/revenue/revenue.routes.ts","backend/src/modules/search/search.controller.ts","backend/src/modules/search/search.routes.ts","backend/src/modules/search/search.schema.ts","backend/src/modules/search/search.service.ts","backend/src/modules/social-analytics/social-analytics.service.ts","backend/src/modules/stores/store.contract.routes.ts","backend/src/modules/stores/store.controller.ts","backend/src/modules/stores/store.routes.ts","backend/src/modules/stores/store.schema.ts","backend/src/modules/treasury/treasury.contract.routes.ts","backend/src/modules/treasury/treasury.controller.ts","backend/src/modules/treasury/treasury.routes.ts","e2e/.auth/admin.json","e2e/helpers/form-test-helpers.ts","e2e/package.json","e2e/test-results/.last-run.json","e2e/tests/form-interactions/approval-workflow-forms.spec.ts","e2e/tests/form-interactions/core-business-forms.spec.ts","e2e/tests/form-interactions/finance-forms.spec.ts","e2e/tests/form-interactions/marketing-campaign-forms.spec.ts","frontend/src/api/modules/im-channels.ts","frontend/src/composables/useDashboardRealtime.ts","frontend/src/views/ad-accounts/Index.vue","frontend/src/views/ad-audiences/Index.vue","frontend/src/views/ad-biddings/Index.vue","frontend/src/views/ad-campaigns/Index.vue","frontend/src/views/ad-creatives/Index.vue","frontend/src/views/ad-reports/Index.vue","frontend/src/views/alliance-analytics/Index.vue","frontend/src/views/alliance-merchants/Index.vue","frontend/src/views/alliance-products/Index.vue","frontend/src/views/alliance-promotions/Index.vue","frontend/src/views/alliance-referrals/Index.vue","frontend/src/views/alliance-settlements/Index.vue","frontend/src/views/ap-ledger/Index.vue","frontend/src/views/approval-configs/Index.vue","frontend/src/views/approval-templates/Index.vue","frontend/src/views/bom/Index.vue","frontend/src/views/campaign-drafts/Index.vue","frontend/src/views/campaign-use-case-templates/Index.vue","frontend/src/views/channel-integrations/Index.vue","frontend/src/views/cohort-analysis/Index.vue","frontend/src/views/community-activities/Index.vue","frontend/src/views/community-analytics/Index.vue","frontend/src/views/community-groups/Index.vue","frontend/src/views/community-levels/Index.vue","frontend/src/views/community-members/Index.vue","frontend/src/views/community-messages/Index.vue","frontend/src/views/community-points/Index.vue","frontend/src/views/consumer-behavior-analytics/Index.vue","frontend/src/views/content-categories/Index.vue","frontend/src/views/content-copyright/Index.vue","frontend/src/views/content-creation/Index.vue","frontend/src/views/content-distribution/Index.vue","frontend/src/views/content-library/Index.vue","frontend/src/views/content-review/Index.vue","frontend/src/views/content-templates/Index.vue","frontend/src/views/contract-templates/Index.vue","frontend/src/views/cpq/Index.vue","frontend/src/views/cpq/composables/useCpqCommon.ts","frontend/src/views/crm-activities/Index.vue","frontend/src/views/cross-domain-funnel/Index.vue","frontend/src/views/customer-health/Index.vue","frontend/src/views/customer-journey/Index.vue","frontend/src/views/customer-ltv/Index.vue","frontend/src/views/customer-marketing/Index.vue","frontend/src/views/customer-segmentation/Index.vue","frontend/src/views/departments/Index.vue","frontend/src/views/devices/Index.vue","frontend/src/views/dimension-transform/Index.vue","frontend/src/views/email-marketing/Index.vue","frontend/src/views/email-templates/Index.vue","frontend/src/views/event-logs/Index.vue","frontend/src/views/expense-claims/Index.vue","frontend/src/views/faults/Index.vue","frontend/src/views/finance-os/ai/AutoCreditAdjustment.vue","frontend/src/views/finance-os/ai/CashForecastModel.vue","frontend/src/views/finance-os/ai/DefaultProbabilityModel.vue","frontend/src/views/finance-os/ai/ROIEvaluation.vue","frontend/src/views/geo-fences/Index.vue","frontend/src/views/geo-keywords/Detail.vue","frontend/src/views/geo-keywords/Index.vue","frontend/src/views/groupbuy-analytics/Index.vue","frontend/src/views/groupbuy-campaigns/Index.vue","frontend/src/views/groupbuy-orders/Index.vue","frontend/src/views/groupbuy-participants/Detail.vue","frontend/src/views/groupbuy-participants/Form.vue","frontend/src/views/groupbuy-participants/Index.vue","frontend/src/views/groupbuy-products/Index.vue","frontend/src/views/groupbuy-settlements/Index.vue","frontend/src/views/im-channels/Index.vue","frontend/src/views/invoice-requests/Index.vue","frontend/src/views/invoice-verification/Index.vue","frontend/src/views/journey-orchestration/Index.vue","frontend/src/views/knowledge-candidates/Index.vue","frontend/src/views/knowledge-capture/Index.vue","frontend/src/views/knowledge-feedback/Index.vue","frontend/src/views/landing-pages/Index.vue","frontend/src/views/lead-assignment/Index.vue","frontend/src/views/lead-pool/Index.vue","frontend/src/views/lead-pools/Index.vue","frontend/src/views/livestream-analytics/Index.vue","frontend/src/views/livestream-interactions/Index.vue","frontend/src/views/livestream-products/Index.vue","frontend/src/views/livestream-rooms/Index.vue","frontend/src/views/livestream-schedules/Index.vue","frontend/src/views/livestream-scripts/Index.vue","frontend/src/views/livestream/Index.vue","frontend/src/views/local-events/Index.vue","frontend/src/views/local-promotion/Index.vue","frontend/src/views/location-assessments/Index.vue","frontend/src/views/marketing-automation/Index.vue","frontend/src/views/marketing-calendar/Index.vue","frontend/src/views/marketing-content/Index.vue","frontend/src/views/marketing-effectiveness/Index.vue","frontend/src/views/marketing-forms/Index.vue","frontend/src/views/marketing-matrix/Index.vue","frontend/src/views/marketing-north-star/Index.vue","frontend/src/views/marketing-tools/Index.vue","frontend/src/views/member-levels/Index.vue","frontend/src/views/member-points/Index.vue","frontend/src/views/members/Index.vue","frontend/src/views/payment-plans/Index.vue","frontend/src/views/pm/Index.vue","frontend/src/views/positions/Index.vue","frontend/src/views/predictive-analytics/Index.vue","frontend/src/views/product-categories/Index.vue","frontend/src/views/projects/Index.vue","frontend/src/views/purchase-orders/Index.vue","frontend/src/views/realtime-trigger/Index.vue","frontend/src/views/redemptions/Index.vue","frontend/src/views/rfm-analysis/Index.vue","frontend/src/views/roles/Index.vue","frontend/src/views/satisfaction/Index.vue","frontend/src/views/settings/IntegrationServices.vue","frontend/src/views/social-accounts/Index.vue","frontend/src/views/social-auto-replies/Index.vue","frontend/src/views/social-competitors/Index.vue","frontend/src/views/social-followers/Index.vue","frontend/src/views/social-hot-topics/Index.vue","frontend/src/views/social-interactions/Index.vue","frontend/src/views/social-posts/Index.vue","frontend/src/views/spare-parts/Index.vue","frontend/src/views/store-inventory/Index.vue","frontend/src/views/store-settlements/Index.vue","frontend/src/views/store-staff/Index.vue","frontend/src/views/stores/Index.vue","frontend/src/views/supplier-center/Index.vue","frontend/src/views/supplier-payments/Index.vue","frontend/src/views/system-events/Index.vue","frontend/src/views/ticket-workflows/Index.vue","frontend/src/views/users/Index.vue","frontend/src/views/video-calls/Index.vue","frontend/src/views/video-content/Index.vue","reports/api-route-contract-audit.latest.json","reports/api-route-contract-audit.latest.md","reports/approval-governance.latest.json","reports/approval-governance.latest.md","reports/event-publishing-audit.latest.json","reports/event-publishing-audit.latest.md","reports/outbox-atomicity-audit.latest.json"]}],"total_commits":0,"head_commit":{"id":"d2c68b13960de626f7a8d496bf1977d263eb7931","message":"feat: 同步最新代码更改,包括后端API、前端组件、测试和报告更新\n\nCo-authored-by: Qwen-Coder \u003cqwen-coder@alibabacloud.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/d2c68b13960de626f7a8d496bf1977d263eb7931","author":{"name":"Mluo","email":"mluo@MluodeMacBook-Air.local","username":""},"committer":{"name":"Mluo","email":"mluo@MluodeMacBook-Air.local","username":""},"verification":null,"timestamp":"2026-04-13T15:39:52+08:00","added":["backend/prisma/migrations/20260413_add_journey_orchestration_and_store_configs/migration.sql","backend/src/modules/journey-orchestration/journey-orchestration.contract.routes.ts","backend/src/modules/process/process.controller.ts","backend/src/modules/process/process.types.ts","backend/src/modules/revenue/revenue-crud.service.ts","backend/src/modules/stores/store-config.service.ts","backend/src/modules/treasury/treasury-crud.service.ts","e2e/test-results/form-interactions-core-bus-0f529-d-to-Cash-F03-商机表单---编辑回填验证-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-0f529-d-to-Cash-F03-商机表单---编辑回填验证-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-184fa--to-Cash-F01-客户表单---创建成功全流程-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-184fa--to-Cash-F01-客户表单---创建成功全流程-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-4c4ce--to-Cash-F07-客户表单---手机号重复检测-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-4c4ce--to-Cash-F07-客户表单---手机号重复检测-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-64a51-to-Cash-F05-合同表单---复杂字段联动验证-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-64a51-to-Cash-F05-合同表单---复杂字段联动验证-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-80c59-d-to-Cash-F08-报价表单---实时计算验证-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-80c59-d-to-Cash-F08-报价表单---实时计算验证-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-90544-d-to-Cash-F02-线索表单---验证错误提示-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-90544-d-to-Cash-F02-线索表单---验证错误提示-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-a51f4-d-to-Cash-F04-报价表单---草稿自动恢复-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-a51f4-d-to-Cash-F04-报价表单---草稿自动恢复-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-cf0d9--to-Cash-F06-订单表单---动态明细行验证-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-cf0d9--to-Cash-F06-订单表单---动态明细行验证-chromium/test-failed-1.png","e2e/tests/form-interactions/hr-forms.spec.ts","e2e/tests/form-interactions/large-data-performance.spec.ts","e2e/tests/form-interactions/service-center-forms.spec.ts","e2e/tests/form-interactions/supply-chain-forms.spec.ts","frontend/src/views/cpq/components/PoliciesTab.vue","frontend/src/views/marketing-calendar/components/CalendarAgendaView.vue","frontend/src/views/marketing-calendar/components/CalendarMonthView.vue","frontend/src/views/marketing-calendar/components/CalendarWeekView.vue","frontend/src/views/marketing-calendar/components/EventDetailDrawer.vue","frontend/src/views/marketing-calendar/components/EventFormDialog.vue","frontend/src/views/marketing-calendar/composables/useMarketingCalendar.ts","frontend/src/views/marketing-north-star/components/NorthStarAlerts.vue","frontend/src/views/marketing-north-star/components/NorthStarDashboard.vue","frontend/src/views/marketing-north-star/components/NorthStarMetricForm.vue","frontend/src/views/settings/components/integration/IntegrationAdPlatformsPanel.vue","frontend/src/views/settings/components/integration/IntegrationAiConfig.vue","frontend/src/views/settings/components/integration/IntegrationDingtalkConfig.vue","frontend/src/views/settings/components/integration/IntegrationEmailConfig.vue","frontend/src/views/settings/components/integration/IntegrationFeishuConfig.vue","frontend/src/views/settings/components/integration/IntegrationGroupbuyPanel.vue","frontend/src/views/settings/components/integration/IntegrationSmsConfig.vue","frontend/src/views/settings/components/integration/IntegrationWebhookConfig.vue","frontend/src/views/settings/components/integration/IntegrationWechatPublicConfig.vue","frontend/src/views/settings/components/integration/IntegrationWechatWorkConfig.vue","scripts/migrate-to-uselistpage.ts"],"removed":["e2e/test-results/auth.setup.ts-authenticate-as-admin-setup/error-context.md","e2e/test-results/auth.setup.ts-authenticate-as-admin-setup/test-failed-1.png"],"modified":[".github/workflows/e2e-tests.yml","backend/.env.test","backend/prisma/schema/marketing.prisma","backend/prisma/schema/stores.prisma","backend/src/modules/ad-placement/placement.contract.routes.ts","backend/src/modules/ad-placement/placement.controller.ts","backend/src/modules/ad-placement/placement.service.ts","backend/src/modules/channels/channel.contract.routes.ts","backend/src/modules/dimension-transform/dimension-transform.controller.ts","backend/src/modules/dimension-transform/dimension-transform.routes.ts","backend/src/modules/dimension-transform/dimension-transform.service.ts","backend/src/modules/expense/expense.contract.routes.ts","backend/src/modules/expense/expense.controller.ts","backend/src/modules/expense/expense.routes.ts","backend/src/modules/faults/fault.contract.routes.ts","backend/src/modules/faults/fault.service.ts","backend/src/modules/geo-keywords/geo-keyword.contract.routes.ts","backend/src/modules/geo-keywords/geo-keyword.controller.ts","backend/src/modules/geo-keywords/geo-keyword.routes.ts","backend/src/modules/geo-keywords/geo-keyword.schema.ts","backend/src/modules/geo-keywords/geo-keyword.service.ts","backend/src/modules/groupbuy-participants/groupbuy-participant.contract.routes.ts","backend/src/modules/groupbuy-participants/groupbuy-participant.controller.ts","backend/src/modules/groupbuy-participants/groupbuy-participant.routes.ts","backend/src/modules/journey-orchestration/journey-orchestration.service.ts","backend/src/modules/knowledge/knowledge.routes.ts","backend/src/modules/livestream-groupbuy/livestream-groupbuy-conversion.contract.routes.ts","backend/src/modules/livestream-groupbuy/livestream-groupbuy-conversion.controller.ts","backend/src/modules/livestream-groupbuy/livestream-groupbuy-conversion.routes.ts","backend/src/modules/marketing-matrix/matrix.contract.routes.ts","backend/src/modules/marketing-matrix/matrix.controller.ts","backend/src/modules/mdm/mdm.service.ts","backend/src/modules/orders/order.controller.ts","backend/src/modules/process/process.routes.ts","backend/src/modules/process/process.schema.ts","backend/src/modules/process/process.service.test.ts","backend/src/modules/process/process.service.ts","backend/src/modules/realtime/realtime.contract.routes.ts","backend/src/modules/realtime/realtime.controller.ts","backend/src/modules/realtime/realtime.routes.ts","backend/src/modules/revenue/revenue.contract.routes.ts","backend/src/modules/revenue/revenue.controller.ts","backend/src/modules/revenue/revenue.routes.ts","backend/src/modules/search/search.controller.ts","backend/src/modules/search/search.routes.ts","backend/src/modules/search/search.schema.ts","backend/src/modules/search/search.service.ts","backend/src/modules/social-analytics/social-analytics.service.ts","backend/src/modules/stores/store.contract.routes.ts","backend/src/modules/stores/store.controller.ts","backend/src/modules/stores/store.routes.ts","backend/src/modules/stores/store.schema.ts","backend/src/modules/treasury/treasury.contract.routes.ts","backend/src/modules/treasury/treasury.controller.ts","backend/src/modules/treasury/treasury.routes.ts","e2e/.auth/admin.json","e2e/helpers/form-test-helpers.ts","e2e/package.json","e2e/test-results/.last-run.json","e2e/tests/form-interactions/approval-workflow-forms.spec.ts","e2e/tests/form-interactions/core-business-forms.spec.ts","e2e/tests/form-interactions/finance-forms.spec.ts","e2e/tests/form-interactions/marketing-campaign-forms.spec.ts","frontend/src/api/modules/im-channels.ts","frontend/src/composables/useDashboardRealtime.ts","frontend/src/views/ad-accounts/Index.vue","frontend/src/views/ad-audiences/Index.vue","frontend/src/views/ad-biddings/Index.vue","frontend/src/views/ad-campaigns/Index.vue","frontend/src/views/ad-creatives/Index.vue","frontend/src/views/ad-reports/Index.vue","frontend/src/views/alliance-analytics/Index.vue","frontend/src/views/alliance-merchants/Index.vue","frontend/src/views/alliance-products/Index.vue","frontend/src/views/alliance-promotions/Index.vue","frontend/src/views/alliance-referrals/Index.vue","frontend/src/views/alliance-settlements/Index.vue","frontend/src/views/ap-ledger/Index.vue","frontend/src/views/approval-configs/Index.vue","frontend/src/views/approval-templates/Index.vue","frontend/src/views/bom/Index.vue","frontend/src/views/campaign-drafts/Index.vue","frontend/src/views/campaign-use-case-templates/Index.vue","frontend/src/views/channel-integrations/Index.vue","frontend/src/views/cohort-analysis/Index.vue","frontend/src/views/community-activities/Index.vue","frontend/src/views/community-analytics/Index.vue","frontend/src/views/community-groups/Index.vue","frontend/src/views/community-levels/Index.vue","frontend/src/views/community-members/Index.vue","frontend/src/views/community-messages/Index.vue","frontend/src/views/community-points/Index.vue","frontend/src/views/consumer-behavior-analytics/Index.vue","frontend/src/views/content-categories/Index.vue","frontend/src/views/content-copyright/Index.vue","frontend/src/views/content-creation/Index.vue","frontend/src/views/content-distribution/Index.vue","frontend/src/views/content-library/Index.vue","frontend/src/views/content-review/Index.vue","frontend/src/views/content-templates/Index.vue","frontend/src/views/contract-templates/Index.vue","frontend/src/views/cpq/Index.vue","frontend/src/views/cpq/composables/useCpqCommon.ts","frontend/src/views/crm-activities/Index.vue","frontend/src/views/cross-domain-funnel/Index.vue","frontend/src/views/customer-health/Index.vue","frontend/src/views/customer-journey/Index.vue","frontend/src/views/customer-ltv/Index.vue","frontend/src/views/customer-marketing/Index.vue","frontend/src/views/customer-segmentation/Index.vue","frontend/src/views/departments/Index.vue","frontend/src/views/devices/Index.vue","frontend/src/views/dimension-transform/Index.vue","frontend/src/views/email-marketing/Index.vue","frontend/src/views/email-templates/Index.vue","frontend/src/views/event-logs/Index.vue","frontend/src/views/expense-claims/Index.vue","frontend/src/views/faults/Index.vue","frontend/src/views/finance-os/ai/AutoCreditAdjustment.vue","frontend/src/views/finance-os/ai/CashForecastModel.vue","frontend/src/views/finance-os/ai/DefaultProbabilityModel.vue","frontend/src/views/finance-os/ai/ROIEvaluation.vue","frontend/src/views/geo-fences/Index.vue","frontend/src/views/geo-keywords/Detail.vue","frontend/src/views/geo-keywords/Index.vue","frontend/src/views/groupbuy-analytics/Index.vue","frontend/src/views/groupbuy-campaigns/Index.vue","frontend/src/views/groupbuy-orders/Index.vue","frontend/src/views/groupbuy-participants/Detail.vue","frontend/src/views/groupbuy-participants/Form.vue","frontend/src/views/groupbuy-participants/Index.vue","frontend/src/views/groupbuy-products/Index.vue","frontend/src/views/groupbuy-settlements/Index.vue","frontend/src/views/im-channels/Index.vue","frontend/src/views/invoice-requests/Index.vue","frontend/src/views/invoice-verification/Index.vue","frontend/src/views/journey-orchestration/Index.vue","frontend/src/views/knowledge-candidates/Index.vue","frontend/src/views/knowledge-capture/Index.vue","frontend/src/views/knowledge-feedback/Index.vue","frontend/src/views/landing-pages/Index.vue","frontend/src/views/lead-assignment/Index.vue","frontend/src/views/lead-pool/Index.vue","frontend/src/views/lead-pools/Index.vue","frontend/src/views/livestream-analytics/Index.vue","frontend/src/views/livestream-interactions/Index.vue","frontend/src/views/livestream-products/Index.vue","frontend/src/views/livestream-rooms/Index.vue","frontend/src/views/livestream-schedules/Index.vue","frontend/src/views/livestream-scripts/Index.vue","frontend/src/views/livestream/Index.vue","frontend/src/views/local-events/Index.vue","frontend/src/views/local-promotion/Index.vue","frontend/src/views/location-assessments/Index.vue","frontend/src/views/marketing-automation/Index.vue","frontend/src/views/marketing-calendar/Index.vue","frontend/src/views/marketing-content/Index.vue","frontend/src/views/marketing-effectiveness/Index.vue","frontend/src/views/marketing-forms/Index.vue","frontend/src/views/marketing-matrix/Index.vue","frontend/src/views/marketing-north-star/Index.vue","frontend/src/views/marketing-tools/Index.vue","frontend/src/views/member-levels/Index.vue","frontend/src/views/member-points/Index.vue","frontend/src/views/members/Index.vue","frontend/src/views/payment-plans/Index.vue","frontend/src/views/pm/Index.vue","frontend/src/views/positions/Index.vue","frontend/src/views/predictive-analytics/Index.vue","frontend/src/views/product-categories/Index.vue","frontend/src/views/projects/Index.vue","frontend/src/views/purchase-orders/Index.vue","frontend/src/views/realtime-trigger/Index.vue","frontend/src/views/redemptions/Index.vue","frontend/src/views/rfm-analysis/Index.vue","frontend/src/views/roles/Index.vue","frontend/src/views/satisfaction/Index.vue","frontend/src/views/settings/IntegrationServices.vue","frontend/src/views/social-accounts/Index.vue","frontend/src/views/social-auto-replies/Index.vue","frontend/src/views/social-competitors/Index.vue","frontend/src/views/social-followers/Index.vue","frontend/src/views/social-hot-topics/Index.vue","frontend/src/views/social-interactions/Index.vue","frontend/src/views/social-posts/Index.vue","frontend/src/views/spare-parts/Index.vue","frontend/src/views/store-inventory/Index.vue","frontend/src/views/store-settlements/Index.vue","frontend/src/views/store-staff/Index.vue","frontend/src/views/stores/Index.vue","frontend/src/views/supplier-center/Index.vue","frontend/src/views/supplier-payments/Index.vue","frontend/src/views/system-events/Index.vue","frontend/src/views/ticket-workflows/Index.vue","frontend/src/views/users/Index.vue","frontend/src/views/video-calls/Index.vue","frontend/src/views/video-content/Index.vue","reports/api-route-contract-audit.latest.json","reports/api-route-contract-audit.latest.md","reports/approval-governance.latest.json","reports/approval-governance.latest.md","reports/event-publishing-audit.latest.json","reports/event-publishing-audit.latest.md","reports/outbox-atomicity-audit.latest.json"]},"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":5212729,"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":4,"open_issues_count":0,"open_pr_counter":1,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-04-13T00:24:48+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"}}...
|
push
|
2
|
12
|
1776066084
|
1776066121
|
0
|
1776066083
|
1776066559
|
group: ci-${{ github.ref }}
cancel-in-progress: group: ci-${{ github.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|
|
13813
|
feat: 同步最新代码更改,包括后端API、前端组件、测试和报告更新
|
6
|
5
|
e2e-tests.yml
|
13735
|
5
|
0
|
refs/heads/main
|
d2c68b13960de626f7a8d496bf1977d263eb7931
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"98cc8da660b8d4dba9887432490471d976c03f5f","after":"d2c68b13960de626f7a8d496bf1977d263eb7931","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/98cc8da660b8d4dba9887432490471d976c03f5f...d2c68b13960de626f7a8d496bf1977d263eb7931","commits":[{"id":"d2c68b13960de626f7a8d496bf1977d263eb7931","message":"feat: 同步最新代码更改,包括后端API、前端组件、测试和报告更新\n\nCo-authored-by: Qwen-Coder \u003cqwen-coder@alibabacloud.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/d2c68b13960de626f7a8d496bf1977d263eb7931","author":{"name":"Mluo","email":"mluo@MluodeMacBook-Air.local","username":""},"committer":{"name":"Mluo","email":"mluo@MluodeMacBook-Air.local","username":""},"verification":null,"timestamp":"2026-04-13T15:39:52+08:00","added":["backend/prisma/migrations/20260413_add_journey_orchestration_and_store_configs/migration.sql","backend/src/modules/journey-orchestration/journey-orchestration.contract.routes.ts","backend/src/modules/process/process.controller.ts","backend/src/modules/process/process.types.ts","backend/src/modules/revenue/revenue-crud.service.ts","backend/src/modules/stores/store-config.service.ts","backend/src/modules/treasury/treasury-crud.service.ts","e2e/test-results/form-interactions-core-bus-0f529-d-to-Cash-F03-商机表单---编辑回填验证-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-0f529-d-to-Cash-F03-商机表单---编辑回填验证-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-184fa--to-Cash-F01-客户表单---创建成功全流程-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-184fa--to-Cash-F01-客户表单---创建成功全流程-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-4c4ce--to-Cash-F07-客户表单---手机号重复检测-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-4c4ce--to-Cash-F07-客户表单---手机号重复检测-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-64a51-to-Cash-F05-合同表单---复杂字段联动验证-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-64a51-to-Cash-F05-合同表单---复杂字段联动验证-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-80c59-d-to-Cash-F08-报价表单---实时计算验证-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-80c59-d-to-Cash-F08-报价表单---实时计算验证-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-90544-d-to-Cash-F02-线索表单---验证错误提示-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-90544-d-to-Cash-F02-线索表单---验证错误提示-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-a51f4-d-to-Cash-F04-报价表单---草稿自动恢复-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-a51f4-d-to-Cash-F04-报价表单---草稿自动恢复-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-cf0d9--to-Cash-F06-订单表单---动态明细行验证-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-cf0d9--to-Cash-F06-订单表单---动态明细行验证-chromium/test-failed-1.png","e2e/tests/form-interactions/hr-forms.spec.ts","e2e/tests/form-interactions/large-data-performance.spec.ts","e2e/tests/form-interactions/service-center-forms.spec.ts","e2e/tests/form-interactions/supply-chain-forms.spec.ts","frontend/src/views/cpq/components/PoliciesTab.vue","frontend/src/views/marketing-calendar/components/CalendarAgendaView.vue","frontend/src/views/marketing-calendar/components/CalendarMonthView.vue","frontend/src/views/marketing-calendar/components/CalendarWeekView.vue","frontend/src/views/marketing-calendar/components/EventDetailDrawer.vue","frontend/src/views/marketing-calendar/components/EventFormDialog.vue","frontend/src/views/marketing-calendar/composables/useMarketingCalendar.ts","frontend/src/views/marketing-north-star/components/NorthStarAlerts.vue","frontend/src/views/marketing-north-star/components/NorthStarDashboard.vue","frontend/src/views/marketing-north-star/components/NorthStarMetricForm.vue","frontend/src/views/settings/components/integration/IntegrationAdPlatformsPanel.vue","frontend/src/views/settings/components/integration/IntegrationAiConfig.vue","frontend/src/views/settings/components/integration/IntegrationDingtalkConfig.vue","frontend/src/views/settings/components/integration/IntegrationEmailConfig.vue","frontend/src/views/settings/components/integration/IntegrationFeishuConfig.vue","frontend/src/views/settings/components/integration/IntegrationGroupbuyPanel.vue","frontend/src/views/settings/components/integration/IntegrationSmsConfig.vue","frontend/src/views/settings/components/integration/IntegrationWebhookConfig.vue","frontend/src/views/settings/components/integration/IntegrationWechatPublicConfig.vue","frontend/src/views/settings/components/integration/IntegrationWechatWorkConfig.vue","scripts/migrate-to-uselistpage.ts"],"removed":["e2e/test-results/auth.setup.ts-authenticate-as-admin-setup/error-context.md","e2e/test-results/auth.setup.ts-authenticate-as-admin-setup/test-failed-1.png"],"modified":[".github/workflows/e2e-tests.yml","backend/.env.test","backend/prisma/schema/marketing.prisma","backend/prisma/schema/stores.prisma","backend/src/modules/ad-placement/placement.contract.routes.ts","backend/src/modules/ad-placement/placement.controller.ts","backend/src/modules/ad-placement/placement.service.ts","backend/src/modules/channels/channel.contract.routes.ts","backend/src/modules/dimension-transform/dimension-transform.controller.ts","backend/src/modules/dimension-transform/dimension-transform.routes.ts","backend/src/modules/dimension-transform/dimension-transform.service.ts","backend/src/modules/expense/expense.contract.routes.ts","backend/src/modules/expense/expense.controller.ts","backend/src/modules/expense/expense.routes.ts","backend/src/modules/faults/fault.contract.routes.ts","backend/src/modules/faults/fault.service.ts","backend/src/modules/geo-keywords/geo-keyword.contract.routes.ts","backend/src/modules/geo-keywords/geo-keyword.controller.ts","backend/src/modules/geo-keywords/geo-keyword.routes.ts","backend/src/modules/geo-keywords/geo-keyword.schema.ts","backend/src/modules/geo-keywords/geo-keyword.service.ts","backend/src/modules/groupbuy-participants/groupbuy-participant.contract.routes.ts","backend/src/modules/groupbuy-participants/groupbuy-participant.controller.ts","backend/src/modules/groupbuy-participants/groupbuy-participant.routes.ts","backend/src/modules/journey-orchestration/journey-orchestration.service.ts","backend/src/modules/knowledge/knowledge.routes.ts","backend/src/modules/livestream-groupbuy/livestream-groupbuy-conversion.contract.routes.ts","backend/src/modules/livestream-groupbuy/livestream-groupbuy-conversion.controller.ts","backend/src/modules/livestream-groupbuy/livestream-groupbuy-conversion.routes.ts","backend/src/modules/marketing-matrix/matrix.contract.routes.ts","backend/src/modules/marketing-matrix/matrix.controller.ts","backend/src/modules/mdm/mdm.service.ts","backend/src/modules/orders/order.controller.ts","backend/src/modules/process/process.routes.ts","backend/src/modules/process/process.schema.ts","backend/src/modules/process/process.service.test.ts","backend/src/modules/process/process.service.ts","backend/src/modules/realtime/realtime.contract.routes.ts","backend/src/modules/realtime/realtime.controller.ts","backend/src/modules/realtime/realtime.routes.ts","backend/src/modules/revenue/revenue.contract.routes.ts","backend/src/modules/revenue/revenue.controller.ts","backend/src/modules/revenue/revenue.routes.ts","backend/src/modules/search/search.controller.ts","backend/src/modules/search/search.routes.ts","backend/src/modules/search/search.schema.ts","backend/src/modules/search/search.service.ts","backend/src/modules/social-analytics/social-analytics.service.ts","backend/src/modules/stores/store.contract.routes.ts","backend/src/modules/stores/store.controller.ts","backend/src/modules/stores/store.routes.ts","backend/src/modules/stores/store.schema.ts","backend/src/modules/treasury/treasury.contract.routes.ts","backend/src/modules/treasury/treasury.controller.ts","backend/src/modules/treasury/treasury.routes.ts","e2e/.auth/admin.json","e2e/helpers/form-test-helpers.ts","e2e/package.json","e2e/test-results/.last-run.json","e2e/tests/form-interactions/approval-workflow-forms.spec.ts","e2e/tests/form-interactions/core-business-forms.spec.ts","e2e/tests/form-interactions/finance-forms.spec.ts","e2e/tests/form-interactions/marketing-campaign-forms.spec.ts","frontend/src/api/modules/im-channels.ts","frontend/src/composables/useDashboardRealtime.ts","frontend/src/views/ad-accounts/Index.vue","frontend/src/views/ad-audiences/Index.vue","frontend/src/views/ad-biddings/Index.vue","frontend/src/views/ad-campaigns/Index.vue","frontend/src/views/ad-creatives/Index.vue","frontend/src/views/ad-reports/Index.vue","frontend/src/views/alliance-analytics/Index.vue","frontend/src/views/alliance-merchants/Index.vue","frontend/src/views/alliance-products/Index.vue","frontend/src/views/alliance-promotions/Index.vue","frontend/src/views/alliance-referrals/Index.vue","frontend/src/views/alliance-settlements/Index.vue","frontend/src/views/ap-ledger/Index.vue","frontend/src/views/approval-configs/Index.vue","frontend/src/views/approval-templates/Index.vue","frontend/src/views/bom/Index.vue","frontend/src/views/campaign-drafts/Index.vue","frontend/src/views/campaign-use-case-templates/Index.vue","frontend/src/views/channel-integrations/Index.vue","frontend/src/views/cohort-analysis/Index.vue","frontend/src/views/community-activities/Index.vue","frontend/src/views/community-analytics/Index.vue","frontend/src/views/community-groups/Index.vue","frontend/src/views/community-levels/Index.vue","frontend/src/views/community-members/Index.vue","frontend/src/views/community-messages/Index.vue","frontend/src/views/community-points/Index.vue","frontend/src/views/consumer-behavior-analytics/Index.vue","frontend/src/views/content-categories/Index.vue","frontend/src/views/content-copyright/Index.vue","frontend/src/views/content-creation/Index.vue","frontend/src/views/content-distribution/Index.vue","frontend/src/views/content-library/Index.vue","frontend/src/views/content-review/Index.vue","frontend/src/views/content-templates/Index.vue","frontend/src/views/contract-templates/Index.vue","frontend/src/views/cpq/Index.vue","frontend/src/views/cpq/composables/useCpqCommon.ts","frontend/src/views/crm-activities/Index.vue","frontend/src/views/cross-domain-funnel/Index.vue","frontend/src/views/customer-health/Index.vue","frontend/src/views/customer-journey/Index.vue","frontend/src/views/customer-ltv/Index.vue","frontend/src/views/customer-marketing/Index.vue","frontend/src/views/customer-segmentation/Index.vue","frontend/src/views/departments/Index.vue","frontend/src/views/devices/Index.vue","frontend/src/views/dimension-transform/Index.vue","frontend/src/views/email-marketing/Index.vue","frontend/src/views/email-templates/Index.vue","frontend/src/views/event-logs/Index.vue","frontend/src/views/expense-claims/Index.vue","frontend/src/views/faults/Index.vue","frontend/src/views/finance-os/ai/AutoCreditAdjustment.vue","frontend/src/views/finance-os/ai/CashForecastModel.vue","frontend/src/views/finance-os/ai/DefaultProbabilityModel.vue","frontend/src/views/finance-os/ai/ROIEvaluation.vue","frontend/src/views/geo-fences/Index.vue","frontend/src/views/geo-keywords/Detail.vue","frontend/src/views/geo-keywords/Index.vue","frontend/src/views/groupbuy-analytics/Index.vue","frontend/src/views/groupbuy-campaigns/Index.vue","frontend/src/views/groupbuy-orders/Index.vue","frontend/src/views/groupbuy-participants/Detail.vue","frontend/src/views/groupbuy-participants/Form.vue","frontend/src/views/groupbuy-participants/Index.vue","frontend/src/views/groupbuy-products/Index.vue","frontend/src/views/groupbuy-settlements/Index.vue","frontend/src/views/im-channels/Index.vue","frontend/src/views/invoice-requests/Index.vue","frontend/src/views/invoice-verification/Index.vue","frontend/src/views/journey-orchestration/Index.vue","frontend/src/views/knowledge-candidates/Index.vue","frontend/src/views/knowledge-capture/Index.vue","frontend/src/views/knowledge-feedback/Index.vue","frontend/src/views/landing-pages/Index.vue","frontend/src/views/lead-assignment/Index.vue","frontend/src/views/lead-pool/Index.vue","frontend/src/views/lead-pools/Index.vue","frontend/src/views/livestream-analytics/Index.vue","frontend/src/views/livestream-interactions/Index.vue","frontend/src/views/livestream-products/Index.vue","frontend/src/views/livestream-rooms/Index.vue","frontend/src/views/livestream-schedules/Index.vue","frontend/src/views/livestream-scripts/Index.vue","frontend/src/views/livestream/Index.vue","frontend/src/views/local-events/Index.vue","frontend/src/views/local-promotion/Index.vue","frontend/src/views/location-assessments/Index.vue","frontend/src/views/marketing-automation/Index.vue","frontend/src/views/marketing-calendar/Index.vue","frontend/src/views/marketing-content/Index.vue","frontend/src/views/marketing-effectiveness/Index.vue","frontend/src/views/marketing-forms/Index.vue","frontend/src/views/marketing-matrix/Index.vue","frontend/src/views/marketing-north-star/Index.vue","frontend/src/views/marketing-tools/Index.vue","frontend/src/views/member-levels/Index.vue","frontend/src/views/member-points/Index.vue","frontend/src/views/members/Index.vue","frontend/src/views/payment-plans/Index.vue","frontend/src/views/pm/Index.vue","frontend/src/views/positions/Index.vue","frontend/src/views/predictive-analytics/Index.vue","frontend/src/views/product-categories/Index.vue","frontend/src/views/projects/Index.vue","frontend/src/views/purchase-orders/Index.vue","frontend/src/views/realtime-trigger/Index.vue","frontend/src/views/redemptions/Index.vue","frontend/src/views/rfm-analysis/Index.vue","frontend/src/views/roles/Index.vue","frontend/src/views/satisfaction/Index.vue","frontend/src/views/settings/IntegrationServices.vue","frontend/src/views/social-accounts/Index.vue","frontend/src/views/social-auto-replies/Index.vue","frontend/src/views/social-competitors/Index.vue","frontend/src/views/social-followers/Index.vue","frontend/src/views/social-hot-topics/Index.vue","frontend/src/views/social-interactions/Index.vue","frontend/src/views/social-posts/Index.vue","frontend/src/views/spare-parts/Index.vue","frontend/src/views/store-inventory/Index.vue","frontend/src/views/store-settlements/Index.vue","frontend/src/views/store-staff/Index.vue","frontend/src/views/stores/Index.vue","frontend/src/views/supplier-center/Index.vue","frontend/src/views/supplier-payments/Index.vue","frontend/src/views/system-events/Index.vue","frontend/src/views/ticket-workflows/Index.vue","frontend/src/views/users/Index.vue","frontend/src/views/video-calls/Index.vue","frontend/src/views/video-content/Index.vue","reports/api-route-contract-audit.latest.json","reports/api-route-contract-audit.latest.md","reports/approval-governance.latest.json","reports/approval-governance.latest.md","reports/event-publishing-audit.latest.json","reports/event-publishing-audit.latest.md","reports/outbox-atomicity-audit.latest.json"]}],"total_commits":0,"head_commit":{"id":"d2c68b13960de626f7a8d496bf1977d263eb7931","message":"feat: 同步最新代码更改,包括后端API、前端组件、测试和报告更新\n\nCo-authored-by: Qwen-Coder \u003cqwen-coder@alibabacloud.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/d2c68b13960de626f7a8d496bf1977d263eb7931","author":{"name":"Mluo","email":"mluo@MluodeMacBook-Air.local","username":""},"committer":{"name":"Mluo","email":"mluo@MluodeMacBook-Air.local","username":""},"verification":null,"timestamp":"2026-04-13T15:39:52+08:00","added":["backend/prisma/migrations/20260413_add_journey_orchestration_and_store_configs/migration.sql","backend/src/modules/journey-orchestration/journey-orchestration.contract.routes.ts","backend/src/modules/process/process.controller.ts","backend/src/modules/process/process.types.ts","backend/src/modules/revenue/revenue-crud.service.ts","backend/src/modules/stores/store-config.service.ts","backend/src/modules/treasury/treasury-crud.service.ts","e2e/test-results/form-interactions-core-bus-0f529-d-to-Cash-F03-商机表单---编辑回填验证-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-0f529-d-to-Cash-F03-商机表单---编辑回填验证-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-184fa--to-Cash-F01-客户表单---创建成功全流程-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-184fa--to-Cash-F01-客户表单---创建成功全流程-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-4c4ce--to-Cash-F07-客户表单---手机号重复检测-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-4c4ce--to-Cash-F07-客户表单---手机号重复检测-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-64a51-to-Cash-F05-合同表单---复杂字段联动验证-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-64a51-to-Cash-F05-合同表单---复杂字段联动验证-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-80c59-d-to-Cash-F08-报价表单---实时计算验证-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-80c59-d-to-Cash-F08-报价表单---实时计算验证-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-90544-d-to-Cash-F02-线索表单---验证错误提示-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-90544-d-to-Cash-F02-线索表单---验证错误提示-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-a51f4-d-to-Cash-F04-报价表单---草稿自动恢复-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-a51f4-d-to-Cash-F04-报价表单---草稿自动恢复-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-cf0d9--to-Cash-F06-订单表单---动态明细行验证-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-cf0d9--to-Cash-F06-订单表单---动态明细行验证-chromium/test-failed-1.png","e2e/tests/form-interactions/hr-forms.spec.ts","e2e/tests/form-interactions/large-data-performance.spec.ts","e2e/tests/form-interactions/service-center-forms.spec.ts","e2e/tests/form-interactions/supply-chain-forms.spec.ts","frontend/src/views/cpq/components/PoliciesTab.vue","frontend/src/views/marketing-calendar/components/CalendarAgendaView.vue","frontend/src/views/marketing-calendar/components/CalendarMonthView.vue","frontend/src/views/marketing-calendar/components/CalendarWeekView.vue","frontend/src/views/marketing-calendar/components/EventDetailDrawer.vue","frontend/src/views/marketing-calendar/components/EventFormDialog.vue","frontend/src/views/marketing-calendar/composables/useMarketingCalendar.ts","frontend/src/views/marketing-north-star/components/NorthStarAlerts.vue","frontend/src/views/marketing-north-star/components/NorthStarDashboard.vue","frontend/src/views/marketing-north-star/components/NorthStarMetricForm.vue","frontend/src/views/settings/components/integration/IntegrationAdPlatformsPanel.vue","frontend/src/views/settings/components/integration/IntegrationAiConfig.vue","frontend/src/views/settings/components/integration/IntegrationDingtalkConfig.vue","frontend/src/views/settings/components/integration/IntegrationEmailConfig.vue","frontend/src/views/settings/components/integration/IntegrationFeishuConfig.vue","frontend/src/views/settings/components/integration/IntegrationGroupbuyPanel.vue","frontend/src/views/settings/components/integration/IntegrationSmsConfig.vue","frontend/src/views/settings/components/integration/IntegrationWebhookConfig.vue","frontend/src/views/settings/components/integration/IntegrationWechatPublicConfig.vue","frontend/src/views/settings/components/integration/IntegrationWechatWorkConfig.vue","scripts/migrate-to-uselistpage.ts"],"removed":["e2e/test-results/auth.setup.ts-authenticate-as-admin-setup/error-context.md","e2e/test-results/auth.setup.ts-authenticate-as-admin-setup/test-failed-1.png"],"modified":[".github/workflows/e2e-tests.yml","backend/.env.test","backend/prisma/schema/marketing.prisma","backend/prisma/schema/stores.prisma","backend/src/modules/ad-placement/placement.contract.routes.ts","backend/src/modules/ad-placement/placement.controller.ts","backend/src/modules/ad-placement/placement.service.ts","backend/src/modules/channels/channel.contract.routes.ts","backend/src/modules/dimension-transform/dimension-transform.controller.ts","backend/src/modules/dimension-transform/dimension-transform.routes.ts","backend/src/modules/dimension-transform/dimension-transform.service.ts","backend/src/modules/expense/expense.contract.routes.ts","backend/src/modules/expense/expense.controller.ts","backend/src/modules/expense/expense.routes.ts","backend/src/modules/faults/fault.contract.routes.ts","backend/src/modules/faults/fault.service.ts","backend/src/modules/geo-keywords/geo-keyword.contract.routes.ts","backend/src/modules/geo-keywords/geo-keyword.controller.ts","backend/src/modules/geo-keywords/geo-keyword.routes.ts","backend/src/modules/geo-keywords/geo-keyword.schema.ts","backend/src/modules/geo-keywords/geo-keyword.service.ts","backend/src/modules/groupbuy-participants/groupbuy-participant.contract.routes.ts","backend/src/modules/groupbuy-participants/groupbuy-participant.controller.ts","backend/src/modules/groupbuy-participants/groupbuy-participant.routes.ts","backend/src/modules/journey-orchestration/journey-orchestration.service.ts","backend/src/modules/knowledge/knowledge.routes.ts","backend/src/modules/livestream-groupbuy/livestream-groupbuy-conversion.contract.routes.ts","backend/src/modules/livestream-groupbuy/livestream-groupbuy-conversion.controller.ts","backend/src/modules/livestream-groupbuy/livestream-groupbuy-conversion.routes.ts","backend/src/modules/marketing-matrix/matrix.contract.routes.ts","backend/src/modules/marketing-matrix/matrix.controller.ts","backend/src/modules/mdm/mdm.service.ts","backend/src/modules/orders/order.controller.ts","backend/src/modules/process/process.routes.ts","backend/src/modules/process/process.schema.ts","backend/src/modules/process/process.service.test.ts","backend/src/modules/process/process.service.ts","backend/src/modules/realtime/realtime.contract.routes.ts","backend/src/modules/realtime/realtime.controller.ts","backend/src/modules/realtime/realtime.routes.ts","backend/src/modules/revenue/revenue.contract.routes.ts","backend/src/modules/revenue/revenue.controller.ts","backend/src/modules/revenue/revenue.routes.ts","backend/src/modules/search/search.controller.ts","backend/src/modules/search/search.routes.ts","backend/src/modules/search/search.schema.ts","backend/src/modules/search/search.service.ts","backend/src/modules/social-analytics/social-analytics.service.ts","backend/src/modules/stores/store.contract.routes.ts","backend/src/modules/stores/store.controller.ts","backend/src/modules/stores/store.routes.ts","backend/src/modules/stores/store.schema.ts","backend/src/modules/treasury/treasury.contract.routes.ts","backend/src/modules/treasury/treasury.controller.ts","backend/src/modules/treasury/treasury.routes.ts","e2e/.auth/admin.json","e2e/helpers/form-test-helpers.ts","e2e/package.json","e2e/test-results/.last-run.json","e2e/tests/form-interactions/approval-workflow-forms.spec.ts","e2e/tests/form-interactions/core-business-forms.spec.ts","e2e/tests/form-interactions/finance-forms.spec.ts","e2e/tests/form-interactions/marketing-campaign-forms.spec.ts","frontend/src/api/modules/im-channels.ts","frontend/src/composables/useDashboardRealtime.ts","frontend/src/views/ad-accounts/Index.vue","frontend/src/views/ad-audiences/Index.vue","frontend/src/views/ad-biddings/Index.vue","frontend/src/views/ad-campaigns/Index.vue","frontend/src/views/ad-creatives/Index.vue","frontend/src/views/ad-reports/Index.vue","frontend/src/views/alliance-analytics/Index.vue","frontend/src/views/alliance-merchants/Index.vue","frontend/src/views/alliance-products/Index.vue","frontend/src/views/alliance-promotions/Index.vue","frontend/src/views/alliance-referrals/Index.vue","frontend/src/views/alliance-settlements/Index.vue","frontend/src/views/ap-ledger/Index.vue","frontend/src/views/approval-configs/Index.vue","frontend/src/views/approval-templates/Index.vue","frontend/src/views/bom/Index.vue","frontend/src/views/campaign-drafts/Index.vue","frontend/src/views/campaign-use-case-templates/Index.vue","frontend/src/views/channel-integrations/Index.vue","frontend/src/views/cohort-analysis/Index.vue","frontend/src/views/community-activities/Index.vue","frontend/src/views/community-analytics/Index.vue","frontend/src/views/community-groups/Index.vue","frontend/src/views/community-levels/Index.vue","frontend/src/views/community-members/Index.vue","frontend/src/views/community-messages/Index.vue","frontend/src/views/community-points/Index.vue","frontend/src/views/consumer-behavior-analytics/Index.vue","frontend/src/views/content-categories/Index.vue","frontend/src/views/content-copyright/Index.vue","frontend/src/views/content-creation/Index.vue","frontend/src/views/content-distribution/Index.vue","frontend/src/views/content-library/Index.vue","frontend/src/views/content-review/Index.vue","frontend/src/views/content-templates/Index.vue","frontend/src/views/contract-templates/Index.vue","frontend/src/views/cpq/Index.vue","frontend/src/views/cpq/composables/useCpqCommon.ts","frontend/src/views/crm-activities/Index.vue","frontend/src/views/cross-domain-funnel/Index.vue","frontend/src/views/customer-health/Index.vue","frontend/src/views/customer-journey/Index.vue","frontend/src/views/customer-ltv/Index.vue","frontend/src/views/customer-marketing/Index.vue","frontend/src/views/customer-segmentation/Index.vue","frontend/src/views/departments/Index.vue","frontend/src/views/devices/Index.vue","frontend/src/views/dimension-transform/Index.vue","frontend/src/views/email-marketing/Index.vue","frontend/src/views/email-templates/Index.vue","frontend/src/views/event-logs/Index.vue","frontend/src/views/expense-claims/Index.vue","frontend/src/views/faults/Index.vue","frontend/src/views/finance-os/ai/AutoCreditAdjustment.vue","frontend/src/views/finance-os/ai/CashForecastModel.vue","frontend/src/views/finance-os/ai/DefaultProbabilityModel.vue","frontend/src/views/finance-os/ai/ROIEvaluation.vue","frontend/src/views/geo-fences/Index.vue","frontend/src/views/geo-keywords/Detail.vue","frontend/src/views/geo-keywords/Index.vue","frontend/src/views/groupbuy-analytics/Index.vue","frontend/src/views/groupbuy-campaigns/Index.vue","frontend/src/views/groupbuy-orders/Index.vue","frontend/src/views/groupbuy-participants/Detail.vue","frontend/src/views/groupbuy-participants/Form.vue","frontend/src/views/groupbuy-participants/Index.vue","frontend/src/views/groupbuy-products/Index.vue","frontend/src/views/groupbuy-settlements/Index.vue","frontend/src/views/im-channels/Index.vue","frontend/src/views/invoice-requests/Index.vue","frontend/src/views/invoice-verification/Index.vue","frontend/src/views/journey-orchestration/Index.vue","frontend/src/views/knowledge-candidates/Index.vue","frontend/src/views/knowledge-capture/Index.vue","frontend/src/views/knowledge-feedback/Index.vue","frontend/src/views/landing-pages/Index.vue","frontend/src/views/lead-assignment/Index.vue","frontend/src/views/lead-pool/Index.vue","frontend/src/views/lead-pools/Index.vue","frontend/src/views/livestream-analytics/Index.vue","frontend/src/views/livestream-interactions/Index.vue","frontend/src/views/livestream-products/Index.vue","frontend/src/views/livestream-rooms/Index.vue","frontend/src/views/livestream-schedules/Index.vue","frontend/src/views/livestream-scripts/Index.vue","frontend/src/views/livestream/Index.vue","frontend/src/views/local-events/Index.vue","frontend/src/views/local-promotion/Index.vue","frontend/src/views/location-assessments/Index.vue","frontend/src/views/marketing-automation/Index.vue","frontend/src/views/marketing-calendar/Index.vue","frontend/src/views/marketing-content/Index.vue","frontend/src/views/marketing-effectiveness/Index.vue","frontend/src/views/marketing-forms/Index.vue","frontend/src/views/marketing-matrix/Index.vue","frontend/src/views/marketing-north-star/Index.vue","frontend/src/views/marketing-tools/Index.vue","frontend/src/views/member-levels/Index.vue","frontend/src/views/member-points/Index.vue","frontend/src/views/members/Index.vue","frontend/src/views/payment-plans/Index.vue","frontend/src/views/pm/Index.vue","frontend/src/views/positions/Index.vue","frontend/src/views/predictive-analytics/Index.vue","frontend/src/views/product-categories/Index.vue","frontend/src/views/projects/Index.vue","frontend/src/views/purchase-orders/Index.vue","frontend/src/views/realtime-trigger/Index.vue","frontend/src/views/redemptions/Index.vue","frontend/src/views/rfm-analysis/Index.vue","frontend/src/views/roles/Index.vue","frontend/src/views/satisfaction/Index.vue","frontend/src/views/settings/IntegrationServices.vue","frontend/src/views/social-accounts/Index.vue","frontend/src/views/social-auto-replies/Index.vue","frontend/src/views/social-competitors/Index.vue","frontend/src/views/social-followers/Index.vue","frontend/src/views/social-hot-topics/Index.vue","frontend/src/views/social-interactions/Index.vue","frontend/src/views/social-posts/Index.vue","frontend/src/views/spare-parts/Index.vue","frontend/src/views/store-inventory/Index.vue","frontend/src/views/store-settlements/Index.vue","frontend/src/views/store-staff/Index.vue","frontend/src/views/stores/Index.vue","frontend/src/views/supplier-center/Index.vue","frontend/src/views/supplier-payments/Index.vue","frontend/src/views/system-events/Index.vue","frontend/src/views/ticket-workflows/Index.vue","frontend/src/views/users/Index.vue","frontend/src/views/video-calls/Index.vue","frontend/src/views/video-content/Index.vue","reports/api-route-contract-audit.latest.json","reports/api-route-contract-audit.latest.md","reports/approval-governance.latest.json","reports/approval-governance.latest.md","reports/event-publishing-audit.latest.json","reports/event-publishing-audit.latest.md","reports/outbox-atomicity-audit.latest.json"]},"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":5212729,"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":4,"open_issues_count":0,"open_pr_counter":1,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-04-13T00:24:48+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"}}...
|
push
|
2
|
20
|
1776066121
|
1776066496
|
0
|
1776066084
|
1776066744
|
|
|
0
|
Edit
Delete
|
|
13814
|
feat: 同步最新代码更改,包括后端API、前端组件、测试和报告更新
|
6
|
5
|
test-pipeline.yml
|
13736
|
5
|
0
|
refs/heads/main
|
d2c68b13960de626f7a8d496bf1977d263eb7931
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"98cc8da660b8d4dba9887432490471d976c03f5f","after":"d2c68b13960de626f7a8d496bf1977d263eb7931","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/98cc8da660b8d4dba9887432490471d976c03f5f...d2c68b13960de626f7a8d496bf1977d263eb7931","commits":[{"id":"d2c68b13960de626f7a8d496bf1977d263eb7931","message":"feat: 同步最新代码更改,包括后端API、前端组件、测试和报告更新\n\nCo-authored-by: Qwen-Coder \u003cqwen-coder@alibabacloud.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/d2c68b13960de626f7a8d496bf1977d263eb7931","author":{"name":"Mluo","email":"mluo@MluodeMacBook-Air.local","username":""},"committer":{"name":"Mluo","email":"mluo@MluodeMacBook-Air.local","username":""},"verification":null,"timestamp":"2026-04-13T15:39:52+08:00","added":["backend/prisma/migrations/20260413_add_journey_orchestration_and_store_configs/migration.sql","backend/src/modules/journey-orchestration/journey-orchestration.contract.routes.ts","backend/src/modules/process/process.controller.ts","backend/src/modules/process/process.types.ts","backend/src/modules/revenue/revenue-crud.service.ts","backend/src/modules/stores/store-config.service.ts","backend/src/modules/treasury/treasury-crud.service.ts","e2e/test-results/form-interactions-core-bus-0f529-d-to-Cash-F03-商机表单---编辑回填验证-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-0f529-d-to-Cash-F03-商机表单---编辑回填验证-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-184fa--to-Cash-F01-客户表单---创建成功全流程-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-184fa--to-Cash-F01-客户表单---创建成功全流程-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-4c4ce--to-Cash-F07-客户表单---手机号重复检测-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-4c4ce--to-Cash-F07-客户表单---手机号重复检测-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-64a51-to-Cash-F05-合同表单---复杂字段联动验证-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-64a51-to-Cash-F05-合同表单---复杂字段联动验证-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-80c59-d-to-Cash-F08-报价表单---实时计算验证-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-80c59-d-to-Cash-F08-报价表单---实时计算验证-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-90544-d-to-Cash-F02-线索表单---验证错误提示-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-90544-d-to-Cash-F02-线索表单---验证错误提示-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-a51f4-d-to-Cash-F04-报价表单---草稿自动恢复-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-a51f4-d-to-Cash-F04-报价表单---草稿自动恢复-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-cf0d9--to-Cash-F06-订单表单---动态明细行验证-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-cf0d9--to-Cash-F06-订单表单---动态明细行验证-chromium/test-failed-1.png","e2e/tests/form-interactions/hr-forms.spec.ts","e2e/tests/form-interactions/large-data-performance.spec.ts","e2e/tests/form-interactions/service-center-forms.spec.ts","e2e/tests/form-interactions/supply-chain-forms.spec.ts","frontend/src/views/cpq/components/PoliciesTab.vue","frontend/src/views/marketing-calendar/components/CalendarAgendaView.vue","frontend/src/views/marketing-calendar/components/CalendarMonthView.vue","frontend/src/views/marketing-calendar/components/CalendarWeekView.vue","frontend/src/views/marketing-calendar/components/EventDetailDrawer.vue","frontend/src/views/marketing-calendar/components/EventFormDialog.vue","frontend/src/views/marketing-calendar/composables/useMarketingCalendar.ts","frontend/src/views/marketing-north-star/components/NorthStarAlerts.vue","frontend/src/views/marketing-north-star/components/NorthStarDashboard.vue","frontend/src/views/marketing-north-star/components/NorthStarMetricForm.vue","frontend/src/views/settings/components/integration/IntegrationAdPlatformsPanel.vue","frontend/src/views/settings/components/integration/IntegrationAiConfig.vue","frontend/src/views/settings/components/integration/IntegrationDingtalkConfig.vue","frontend/src/views/settings/components/integration/IntegrationEmailConfig.vue","frontend/src/views/settings/components/integration/IntegrationFeishuConfig.vue","frontend/src/views/settings/components/integration/IntegrationGroupbuyPanel.vue","frontend/src/views/settings/components/integration/IntegrationSmsConfig.vue","frontend/src/views/settings/components/integration/IntegrationWebhookConfig.vue","frontend/src/views/settings/components/integration/IntegrationWechatPublicConfig.vue","frontend/src/views/settings/components/integration/IntegrationWechatWorkConfig.vue","scripts/migrate-to-uselistpage.ts"],"removed":["e2e/test-results/auth.setup.ts-authenticate-as-admin-setup/error-context.md","e2e/test-results/auth.setup.ts-authenticate-as-admin-setup/test-failed-1.png"],"modified":[".github/workflows/e2e-tests.yml","backend/.env.test","backend/prisma/schema/marketing.prisma","backend/prisma/schema/stores.prisma","backend/src/modules/ad-placement/placement.contract.routes.ts","backend/src/modules/ad-placement/placement.controller.ts","backend/src/modules/ad-placement/placement.service.ts","backend/src/modules/channels/channel.contract.routes.ts","backend/src/modules/dimension-transform/dimension-transform.controller.ts","backend/src/modules/dimension-transform/dimension-transform.routes.ts","backend/src/modules/dimension-transform/dimension-transform.service.ts","backend/src/modules/expense/expense.contract.routes.ts","backend/src/modules/expense/expense.controller.ts","backend/src/modules/expense/expense.routes.ts","backend/src/modules/faults/fault.contract.routes.ts","backend/src/modules/faults/fault.service.ts","backend/src/modules/geo-keywords/geo-keyword.contract.routes.ts","backend/src/modules/geo-keywords/geo-keyword.controller.ts","backend/src/modules/geo-keywords/geo-keyword.routes.ts","backend/src/modules/geo-keywords/geo-keyword.schema.ts","backend/src/modules/geo-keywords/geo-keyword.service.ts","backend/src/modules/groupbuy-participants/groupbuy-participant.contract.routes.ts","backend/src/modules/groupbuy-participants/groupbuy-participant.controller.ts","backend/src/modules/groupbuy-participants/groupbuy-participant.routes.ts","backend/src/modules/journey-orchestration/journey-orchestration.service.ts","backend/src/modules/knowledge/knowledge.routes.ts","backend/src/modules/livestream-groupbuy/livestream-groupbuy-conversion.contract.routes.ts","backend/src/modules/livestream-groupbuy/livestream-groupbuy-conversion.controller.ts","backend/src/modules/livestream-groupbuy/livestream-groupbuy-conversion.routes.ts","backend/src/modules/marketing-matrix/matrix.contract.routes.ts","backend/src/modules/marketing-matrix/matrix.controller.ts","backend/src/modules/mdm/mdm.service.ts","backend/src/modules/orders/order.controller.ts","backend/src/modules/process/process.routes.ts","backend/src/modules/process/process.schema.ts","backend/src/modules/process/process.service.test.ts","backend/src/modules/process/process.service.ts","backend/src/modules/realtime/realtime.contract.routes.ts","backend/src/modules/realtime/realtime.controller.ts","backend/src/modules/realtime/realtime.routes.ts","backend/src/modules/revenue/revenue.contract.routes.ts","backend/src/modules/revenue/revenue.controller.ts","backend/src/modules/revenue/revenue.routes.ts","backend/src/modules/search/search.controller.ts","backend/src/modules/search/search.routes.ts","backend/src/modules/search/search.schema.ts","backend/src/modules/search/search.service.ts","backend/src/modules/social-analytics/social-analytics.service.ts","backend/src/modules/stores/store.contract.routes.ts","backend/src/modules/stores/store.controller.ts","backend/src/modules/stores/store.routes.ts","backend/src/modules/stores/store.schema.ts","backend/src/modules/treasury/treasury.contract.routes.ts","backend/src/modules/treasury/treasury.controller.ts","backend/src/modules/treasury/treasury.routes.ts","e2e/.auth/admin.json","e2e/helpers/form-test-helpers.ts","e2e/package.json","e2e/test-results/.last-run.json","e2e/tests/form-interactions/approval-workflow-forms.spec.ts","e2e/tests/form-interactions/core-business-forms.spec.ts","e2e/tests/form-interactions/finance-forms.spec.ts","e2e/tests/form-interactions/marketing-campaign-forms.spec.ts","frontend/src/api/modules/im-channels.ts","frontend/src/composables/useDashboardRealtime.ts","frontend/src/views/ad-accounts/Index.vue","frontend/src/views/ad-audiences/Index.vue","frontend/src/views/ad-biddings/Index.vue","frontend/src/views/ad-campaigns/Index.vue","frontend/src/views/ad-creatives/Index.vue","frontend/src/views/ad-reports/Index.vue","frontend/src/views/alliance-analytics/Index.vue","frontend/src/views/alliance-merchants/Index.vue","frontend/src/views/alliance-products/Index.vue","frontend/src/views/alliance-promotions/Index.vue","frontend/src/views/alliance-referrals/Index.vue","frontend/src/views/alliance-settlements/Index.vue","frontend/src/views/ap-ledger/Index.vue","frontend/src/views/approval-configs/Index.vue","frontend/src/views/approval-templates/Index.vue","frontend/src/views/bom/Index.vue","frontend/src/views/campaign-drafts/Index.vue","frontend/src/views/campaign-use-case-templates/Index.vue","frontend/src/views/channel-integrations/Index.vue","frontend/src/views/cohort-analysis/Index.vue","frontend/src/views/community-activities/Index.vue","frontend/src/views/community-analytics/Index.vue","frontend/src/views/community-groups/Index.vue","frontend/src/views/community-levels/Index.vue","frontend/src/views/community-members/Index.vue","frontend/src/views/community-messages/Index.vue","frontend/src/views/community-points/Index.vue","frontend/src/views/consumer-behavior-analytics/Index.vue","frontend/src/views/content-categories/Index.vue","frontend/src/views/content-copyright/Index.vue","frontend/src/views/content-creation/Index.vue","frontend/src/views/content-distribution/Index.vue","frontend/src/views/content-library/Index.vue","frontend/src/views/content-review/Index.vue","frontend/src/views/content-templates/Index.vue","frontend/src/views/contract-templates/Index.vue","frontend/src/views/cpq/Index.vue","frontend/src/views/cpq/composables/useCpqCommon.ts","frontend/src/views/crm-activities/Index.vue","frontend/src/views/cross-domain-funnel/Index.vue","frontend/src/views/customer-health/Index.vue","frontend/src/views/customer-journey/Index.vue","frontend/src/views/customer-ltv/Index.vue","frontend/src/views/customer-marketing/Index.vue","frontend/src/views/customer-segmentation/Index.vue","frontend/src/views/departments/Index.vue","frontend/src/views/devices/Index.vue","frontend/src/views/dimension-transform/Index.vue","frontend/src/views/email-marketing/Index.vue","frontend/src/views/email-templates/Index.vue","frontend/src/views/event-logs/Index.vue","frontend/src/views/expense-claims/Index.vue","frontend/src/views/faults/Index.vue","frontend/src/views/finance-os/ai/AutoCreditAdjustment.vue","frontend/src/views/finance-os/ai/CashForecastModel.vue","frontend/src/views/finance-os/ai/DefaultProbabilityModel.vue","frontend/src/views/finance-os/ai/ROIEvaluation.vue","frontend/src/views/geo-fences/Index.vue","frontend/src/views/geo-keywords/Detail.vue","frontend/src/views/geo-keywords/Index.vue","frontend/src/views/groupbuy-analytics/Index.vue","frontend/src/views/groupbuy-campaigns/Index.vue","frontend/src/views/groupbuy-orders/Index.vue","frontend/src/views/groupbuy-participants/Detail.vue","frontend/src/views/groupbuy-participants/Form.vue","frontend/src/views/groupbuy-participants/Index.vue","frontend/src/views/groupbuy-products/Index.vue","frontend/src/views/groupbuy-settlements/Index.vue","frontend/src/views/im-channels/Index.vue","frontend/src/views/invoice-requests/Index.vue","frontend/src/views/invoice-verification/Index.vue","frontend/src/views/journey-orchestration/Index.vue","frontend/src/views/knowledge-candidates/Index.vue","frontend/src/views/knowledge-capture/Index.vue","frontend/src/views/knowledge-feedback/Index.vue","frontend/src/views/landing-pages/Index.vue","frontend/src/views/lead-assignment/Index.vue","frontend/src/views/lead-pool/Index.vue","frontend/src/views/lead-pools/Index.vue","frontend/src/views/livestream-analytics/Index.vue","frontend/src/views/livestream-interactions/Index.vue","frontend/src/views/livestream-products/Index.vue","frontend/src/views/livestream-rooms/Index.vue","frontend/src/views/livestream-schedules/Index.vue","frontend/src/views/livestream-scripts/Index.vue","frontend/src/views/livestream/Index.vue","frontend/src/views/local-events/Index.vue","frontend/src/views/local-promotion/Index.vue","frontend/src/views/location-assessments/Index.vue","frontend/src/views/marketing-automation/Index.vue","frontend/src/views/marketing-calendar/Index.vue","frontend/src/views/marketing-content/Index.vue","frontend/src/views/marketing-effectiveness/Index.vue","frontend/src/views/marketing-forms/Index.vue","frontend/src/views/marketing-matrix/Index.vue","frontend/src/views/marketing-north-star/Index.vue","frontend/src/views/marketing-tools/Index.vue","frontend/src/views/member-levels/Index.vue","frontend/src/views/member-points/Index.vue","frontend/src/views/members/Index.vue","frontend/src/views/payment-plans/Index.vue","frontend/src/views/pm/Index.vue","frontend/src/views/positions/Index.vue","frontend/src/views/predictive-analytics/Index.vue","frontend/src/views/product-categories/Index.vue","frontend/src/views/projects/Index.vue","frontend/src/views/purchase-orders/Index.vue","frontend/src/views/realtime-trigger/Index.vue","frontend/src/views/redemptions/Index.vue","frontend/src/views/rfm-analysis/Index.vue","frontend/src/views/roles/Index.vue","frontend/src/views/satisfaction/Index.vue","frontend/src/views/settings/IntegrationServices.vue","frontend/src/views/social-accounts/Index.vue","frontend/src/views/social-auto-replies/Index.vue","frontend/src/views/social-competitors/Index.vue","frontend/src/views/social-followers/Index.vue","frontend/src/views/social-hot-topics/Index.vue","frontend/src/views/social-interactions/Index.vue","frontend/src/views/social-posts/Index.vue","frontend/src/views/spare-parts/Index.vue","frontend/src/views/store-inventory/Index.vue","frontend/src/views/store-settlements/Index.vue","frontend/src/views/store-staff/Index.vue","frontend/src/views/stores/Index.vue","frontend/src/views/supplier-center/Index.vue","frontend/src/views/supplier-payments/Index.vue","frontend/src/views/system-events/Index.vue","frontend/src/views/ticket-workflows/Index.vue","frontend/src/views/users/Index.vue","frontend/src/views/video-calls/Index.vue","frontend/src/views/video-content/Index.vue","reports/api-route-contract-audit.latest.json","reports/api-route-contract-audit.latest.md","reports/approval-governance.latest.json","reports/approval-governance.latest.md","reports/event-publishing-audit.latest.json","reports/event-publishing-audit.latest.md","reports/outbox-atomicity-audit.latest.json"]}],"total_commits":0,"head_commit":{"id":"d2c68b13960de626f7a8d496bf1977d263eb7931","message":"feat: 同步最新代码更改,包括后端API、前端组件、测试和报告更新\n\nCo-authored-by: Qwen-Coder \u003cqwen-coder@alibabacloud.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/d2c68b13960de626f7a8d496bf1977d263eb7931","author":{"name":"Mluo","email":"mluo@MluodeMacBook-Air.local","username":""},"committer":{"name":"Mluo","email":"mluo@MluodeMacBook-Air.local","username":""},"verification":null,"timestamp":"2026-04-13T15:39:52+08:00","added":["backend/prisma/migrations/20260413_add_journey_orchestration_and_store_configs/migration.sql","backend/src/modules/journey-orchestration/journey-orchestration.contract.routes.ts","backend/src/modules/process/process.controller.ts","backend/src/modules/process/process.types.ts","backend/src/modules/revenue/revenue-crud.service.ts","backend/src/modules/stores/store-config.service.ts","backend/src/modules/treasury/treasury-crud.service.ts","e2e/test-results/form-interactions-core-bus-0f529-d-to-Cash-F03-商机表单---编辑回填验证-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-0f529-d-to-Cash-F03-商机表单---编辑回填验证-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-184fa--to-Cash-F01-客户表单---创建成功全流程-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-184fa--to-Cash-F01-客户表单---创建成功全流程-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-4c4ce--to-Cash-F07-客户表单---手机号重复检测-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-4c4ce--to-Cash-F07-客户表单---手机号重复检测-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-64a51-to-Cash-F05-合同表单---复杂字段联动验证-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-64a51-to-Cash-F05-合同表单---复杂字段联动验证-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-80c59-d-to-Cash-F08-报价表单---实时计算验证-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-80c59-d-to-Cash-F08-报价表单---实时计算验证-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-90544-d-to-Cash-F02-线索表单---验证错误提示-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-90544-d-to-Cash-F02-线索表单---验证错误提示-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-a51f4-d-to-Cash-F04-报价表单---草稿自动恢复-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-a51f4-d-to-Cash-F04-报价表单---草稿自动恢复-chromium/test-failed-1.png","e2e/test-results/form-interactions-core-bus-cf0d9--to-Cash-F06-订单表单---动态明细行验证-chromium/error-context.md","e2e/test-results/form-interactions-core-bus-cf0d9--to-Cash-F06-订单表单---动态明细行验证-chromium/test-failed-1.png","e2e/tests/form-interactions/hr-forms.spec.ts","e2e/tests/form-interactions/large-data-performance.spec.ts","e2e/tests/form-interactions/service-center-forms.spec.ts","e2e/tests/form-interactions/supply-chain-forms.spec.ts","frontend/src/views/cpq/components/PoliciesTab.vue","frontend/src/views/marketing-calendar/components/CalendarAgendaView.vue","frontend/src/views/marketing-calendar/components/CalendarMonthView.vue","frontend/src/views/marketing-calendar/components/CalendarWeekView.vue","frontend/src/views/marketing-calendar/components/EventDetailDrawer.vue","frontend/src/views/marketing-calendar/components/EventFormDialog.vue","frontend/src/views/marketing-calendar/composables/useMarketingCalendar.ts","frontend/src/views/marketing-north-star/components/NorthStarAlerts.vue","frontend/src/views/marketing-north-star/components/NorthStarDashboard.vue","frontend/src/views/marketing-north-star/components/NorthStarMetricForm.vue","frontend/src/views/settings/components/integration/IntegrationAdPlatformsPanel.vue","frontend/src/views/settings/components/integration/IntegrationAiConfig.vue","frontend/src/views/settings/components/integration/IntegrationDingtalkConfig.vue","frontend/src/views/settings/components/integration/IntegrationEmailConfig.vue","frontend/src/views/settings/components/integration/IntegrationFeishuConfig.vue","frontend/src/views/settings/components/integration/IntegrationGroupbuyPanel.vue","frontend/src/views/settings/components/integration/IntegrationSmsConfig.vue","frontend/src/views/settings/components/integration/IntegrationWebhookConfig.vue","frontend/src/views/settings/components/integration/IntegrationWechatPublicConfig.vue","frontend/src/views/settings/components/integration/IntegrationWechatWorkConfig.vue","scripts/migrate-to-uselistpage.ts"],"removed":["e2e/test-results/auth.setup.ts-authenticate-as-admin-setup/error-context.md","e2e/test-results/auth.setup.ts-authenticate-as-admin-setup/test-failed-1.png"],"modified":[".github/workflows/e2e-tests.yml","backend/.env.test","backend/prisma/schema/marketing.prisma","backend/prisma/schema/stores.prisma","backend/src/modules/ad-placement/placement.contract.routes.ts","backend/src/modules/ad-placement/placement.controller.ts","backend/src/modules/ad-placement/placement.service.ts","backend/src/modules/channels/channel.contract.routes.ts","backend/src/modules/dimension-transform/dimension-transform.controller.ts","backend/src/modules/dimension-transform/dimension-transform.routes.ts","backend/src/modules/dimension-transform/dimension-transform.service.ts","backend/src/modules/expense/expense.contract.routes.ts","backend/src/modules/expense/expense.controller.ts","backend/src/modules/expense/expense.routes.ts","backend/src/modules/faults/fault.contract.routes.ts","backend/src/modules/faults/fault.service.ts","backend/src/modules/geo-keywords/geo-keyword.contract.routes.ts","backend/src/modules/geo-keywords/geo-keyword.controller.ts","backend/src/modules/geo-keywords/geo-keyword.routes.ts","backend/src/modules/geo-keywords/geo-keyword.schema.ts","backend/src/modules/geo-keywords/geo-keyword.service.ts","backend/src/modules/groupbuy-participants/groupbuy-participant.contract.routes.ts","backend/src/modules/groupbuy-participants/groupbuy-participant.controller.ts","backend/src/modules/groupbuy-participants/groupbuy-participant.routes.ts","backend/src/modules/journey-orchestration/journey-orchestration.service.ts","backend/src/modules/knowledge/knowledge.routes.ts","backend/src/modules/livestream-groupbuy/livestream-groupbuy-conversion.contract.routes.ts","backend/src/modules/livestream-groupbuy/livestream-groupbuy-conversion.controller.ts","backend/src/modules/livestream-groupbuy/livestream-groupbuy-conversion.routes.ts","backend/src/modules/marketing-matrix/matrix.contract.routes.ts","backend/src/modules/marketing-matrix/matrix.controller.ts","backend/src/modules/mdm/mdm.service.ts","backend/src/modules/orders/order.controller.ts","backend/src/modules/process/process.routes.ts","backend/src/modules/process/process.schema.ts","backend/src/modules/process/process.service.test.ts","backend/src/modules/process/process.service.ts","backend/src/modules/realtime/realtime.contract.routes.ts","backend/src/modules/realtime/realtime.controller.ts","backend/src/modules/realtime/realtime.routes.ts","backend/src/modules/revenue/revenue.contract.routes.ts","backend/src/modules/revenue/revenue.controller.ts","backend/src/modules/revenue/revenue.routes.ts","backend/src/modules/search/search.controller.ts","backend/src/modules/search/search.routes.ts","backend/src/modules/search/search.schema.ts","backend/src/modules/search/search.service.ts","backend/src/modules/social-analytics/social-analytics.service.ts","backend/src/modules/stores/store.contract.routes.ts","backend/src/modules/stores/store.controller.ts","backend/src/modules/stores/store.routes.ts","backend/src/modules/stores/store.schema.ts","backend/src/modules/treasury/treasury.contract.routes.ts","backend/src/modules/treasury/treasury.controller.ts","backend/src/modules/treasury/treasury.routes.ts","e2e/.auth/admin.json","e2e/helpers/form-test-helpers.ts","e2e/package.json","e2e/test-results/.last-run.json","e2e/tests/form-interactions/approval-workflow-forms.spec.ts","e2e/tests/form-interactions/core-business-forms.spec.ts","e2e/tests/form-interactions/finance-forms.spec.ts","e2e/tests/form-interactions/marketing-campaign-forms.spec.ts","frontend/src/api/modules/im-channels.ts","frontend/src/composables/useDashboardRealtime.ts","frontend/src/views/ad-accounts/Index.vue","frontend/src/views/ad-audiences/Index.vue","frontend/src/views/ad-biddings/Index.vue","frontend/src/views/ad-campaigns/Index.vue","frontend/src/views/ad-creatives/Index.vue","frontend/src/views/ad-reports/Index.vue","frontend/src/views/alliance-analytics/Index.vue","frontend/src/views/alliance-merchants/Index.vue","frontend/src/views/alliance-products/Index.vue","frontend/src/views/alliance-promotions/Index.vue","frontend/src/views/alliance-referrals/Index.vue","frontend/src/views/alliance-settlements/Index.vue","frontend/src/views/ap-ledger/Index.vue","frontend/src/views/approval-configs/Index.vue","frontend/src/views/approval-templates/Index.vue","frontend/src/views/bom/Index.vue","frontend/src/views/campaign-drafts/Index.vue","frontend/src/views/campaign-use-case-templates/Index.vue","frontend/src/views/channel-integrations/Index.vue","frontend/src/views/cohort-analysis/Index.vue","frontend/src/views/community-activities/Index.vue","frontend/src/views/community-analytics/Index.vue","frontend/src/views/community-groups/Index.vue","frontend/src/views/community-levels/Index.vue","frontend/src/views/community-members/Index.vue","frontend/src/views/community-messages/Index.vue","frontend/src/views/community-points/Index.vue","frontend/src/views/consumer-behavior-analytics/Index.vue","frontend/src/views/content-categories/Index.vue","frontend/src/views/content-copyright/Index.vue","frontend/src/views/content-creation/Index.vue","frontend/src/views/content-distribution/Index.vue","frontend/src/views/content-library/Index.vue","frontend/src/views/content-review/Index.vue","frontend/src/views/content-templates/Index.vue","frontend/src/views/contract-templates/Index.vue","frontend/src/views/cpq/Index.vue","frontend/src/views/cpq/composables/useCpqCommon.ts","frontend/src/views/crm-activities/Index.vue","frontend/src/views/cross-domain-funnel/Index.vue","frontend/src/views/customer-health/Index.vue","frontend/src/views/customer-journey/Index.vue","frontend/src/views/customer-ltv/Index.vue","frontend/src/views/customer-marketing/Index.vue","frontend/src/views/customer-segmentation/Index.vue","frontend/src/views/departments/Index.vue","frontend/src/views/devices/Index.vue","frontend/src/views/dimension-transform/Index.vue","frontend/src/views/email-marketing/Index.vue","frontend/src/views/email-templates/Index.vue","frontend/src/views/event-logs/Index.vue","frontend/src/views/expense-claims/Index.vue","frontend/src/views/faults/Index.vue","frontend/src/views/finance-os/ai/AutoCreditAdjustment.vue","frontend/src/views/finance-os/ai/CashForecastModel.vue","frontend/src/views/finance-os/ai/DefaultProbabilityModel.vue","frontend/src/views/finance-os/ai/ROIEvaluation.vue","frontend/src/views/geo-fences/Index.vue","frontend/src/views/geo-keywords/Detail.vue","frontend/src/views/geo-keywords/Index.vue","frontend/src/views/groupbuy-analytics/Index.vue","frontend/src/views/groupbuy-campaigns/Index.vue","frontend/src/views/groupbuy-orders/Index.vue","frontend/src/views/groupbuy-participants/Detail.vue","frontend/src/views/groupbuy-participants/Form.vue","frontend/src/views/groupbuy-participants/Index.vue","frontend/src/views/groupbuy-products/Index.vue","frontend/src/views/groupbuy-settlements/Index.vue","frontend/src/views/im-channels/Index.vue","frontend/src/views/invoice-requests/Index.vue","frontend/src/views/invoice-verification/Index.vue","frontend/src/views/journey-orchestration/Index.vue","frontend/src/views/knowledge-candidates/Index.vue","frontend/src/views/knowledge-capture/Index.vue","frontend/src/views/knowledge-feedback/Index.vue","frontend/src/views/landing-pages/Index.vue","frontend/src/views/lead-assignment/Index.vue","frontend/src/views/lead-pool/Index.vue","frontend/src/views/lead-pools/Index.vue","frontend/src/views/livestream-analytics/Index.vue","frontend/src/views/livestream-interactions/Index.vue","frontend/src/views/livestream-products/Index.vue","frontend/src/views/livestream-rooms/Index.vue","frontend/src/views/livestream-schedules/Index.vue","frontend/src/views/livestream-scripts/Index.vue","frontend/src/views/livestream/Index.vue","frontend/src/views/local-events/Index.vue","frontend/src/views/local-promotion/Index.vue","frontend/src/views/location-assessments/Index.vue","frontend/src/views/marketing-automation/Index.vue","frontend/src/views/marketing-calendar/Index.vue","frontend/src/views/marketing-content/Index.vue","frontend/src/views/marketing-effectiveness/Index.vue","frontend/src/views/marketing-forms/Index.vue","frontend/src/views/marketing-matrix/Index.vue","frontend/src/views/marketing-north-star/Index.vue","frontend/src/views/marketing-tools/Index.vue","frontend/src/views/member-levels/Index.vue","frontend/src/views/member-points/Index.vue","frontend/src/views/members/Index.vue","frontend/src/views/payment-plans/Index.vue","frontend/src/views/pm/Index.vue","frontend/src/views/positions/Index.vue","frontend/src/views/predictive-analytics/Index.vue","frontend/src/views/product-categories/Index.vue","frontend/src/views/projects/Index.vue","frontend/src/views/purchase-orders/Index.vue","frontend/src/views/realtime-trigger/Index.vue","frontend/src/views/redemptions/Index.vue","frontend/src/views/rfm-analysis/Index.vue","frontend/src/views/roles/Index.vue","frontend/src/views/satisfaction/Index.vue","frontend/src/views/settings/IntegrationServices.vue","frontend/src/views/social-accounts/Index.vue","frontend/src/views/social-auto-replies/Index.vue","frontend/src/views/social-competitors/Index.vue","frontend/src/views/social-followers/Index.vue","frontend/src/views/social-hot-topics/Index.vue","frontend/src/views/social-interactions/Index.vue","frontend/src/views/social-posts/Index.vue","frontend/src/views/spare-parts/Index.vue","frontend/src/views/store-inventory/Index.vue","frontend/src/views/store-settlements/Index.vue","frontend/src/views/store-staff/Index.vue","frontend/src/views/stores/Index.vue","frontend/src/views/supplier-center/Index.vue","frontend/src/views/supplier-payments/Index.vue","frontend/src/views/system-events/Index.vue","frontend/src/views/ticket-workflows/Index.vue","frontend/src/views/users/Index.vue","frontend/src/views/video-calls/Index.vue","frontend/src/views/video-content/Index.vue","reports/api-route-contract-audit.latest.json","reports/api-route-contract-audit.latest.md","reports/approval-governance.latest.json","reports/approval-governance.latest.md","reports/event-publishing-audit.latest.json","reports/event-publishing-audit.latest.md","reports/outbox-atomicity-audit.latest.json"]},"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":5212729,"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":4,"open_issues_count":0,"open_pr_counter":1,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-04-13T00:24:48+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"}}...
|
push
|
2
|
68
|
1776066496
|
1776066558
|
0
|
1776066085
|
1776067928
|
group: test-pipeline-${{ github.ref }}
cancel-in-p group: test-pipeline-${{ github.ref }}
cancel-in-progress: "true"
...
|
test-pipeline-refs/heads/main
|
1
|
Edit
Delete
|
|
14171
|
fix(database): improve migration system with dedup fix(database): improve migration system with dedup, rollback strategy, and CI/CD...
|
6
|
5
|
ci.yml
|
14093
|
5
|
0
|
refs/heads/main
|
7c66dac1fd83d4b9dc05198d7589827309ba5922
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"d2c68b13960de626f7a8d496bf1977d263eb7931","after":"7c66dac1fd83d4b9dc05198d7589827309ba5922","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/d2c68b13960de626f7a8d496bf1977d263eb7931...7c66dac1fd83d4b9dc05198d7589827309ba5922","commits":[{"id":"7c66dac1fd83d4b9dc05198d7589827309ba5922","message":"fix(database): improve migration system with dedup, rollback strategy, and CI/CD\n\n- Fix 6 duplicate migration timestamps by adding _a/_b suffixes for deterministic ordering\n- Remove nested backend/backend/ directory anomaly (accidental copy)\n- Deprecate process-designer.prisma (models already merged in main schema)\n- Deprecate machine-specific create-extension.sh, point to portable alternatives\n- Create database-migration-guide-v2.md as single source of truth\n- Add rollback strategy generator for recent migrations (cross-platform)\n- Add CI/CD migration safety checks (7-point validation)\n- Add GitHub Actions workflow for automatic migration validation\n- Add legacy migration cleanup script to standardize on Prisma\n- Archive old migration guide with deprecation notice\n\nCo-authored-by: Qwen-Coder \u003cqwen-coder@alibabacloud.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7c66dac1fd83d4b9dc05198d7589827309ba5922","author":{"name":"jh.sj","email":"jh.sj@jhsjdeMac-Studio.local","username":""},"committer":{"name":"jh.sj","email":"jh.sj@jhsjdeMac-Studio.local","username":""},"verification":null,"timestamp":"2026-04-14T20:18:15+08:00","added":[".github/workflows/migration-safety.yml","backend/prisma/migrations/20260103100000_a_add_bom_and_assembly/migration.sql","backend/prisma/migrations/20260103100000_b_add_customer_tags_meta/migration.sql","backend/prisma/migrations/20260104100000_a_add_im_channel_bindings/migration.sql","backend/prisma/migrations/20260104100000_b_add_performance_indexes/migration.sql","backend/prisma/migrations/20260124000000_a_add_ai_agents/migration.sql","backend/prisma/migrations/20260124000000_b_add_ai_agents_module/migration.sql","backend/prisma/migrations/rollback-strategy.sql","docs/guides/database-migration-guide-v2.md","docs/reports/database-migration-improvements-2026-04-14.md","scripts/ci-migration-check.sh","scripts/cleanup-legacy-migrations.sh","scripts/fix-duplicate-migrations.sh","scripts/generate-rollback-strategy.sh"],"removed":["backend/backend/prisma/migrations/20260123235959_create_missing_tables/migration.sql","backend/prisma/migrations/20260103100000_add_bom_and_assembly/migration.sql","backend/prisma/migrations/20260103100000_add_customer_tags_meta/migration.sql","backend/prisma/migrations/20260104100000_add_im_channel_bindings/migration.sql","backend/prisma/migrations/20260104100000_add_performance_indexes/migration.sql","backend/prisma/migrations/20260124000000_add_ai_agents/migration.sql","backend/prisma/migrations/20260124000000_add_ai_agents_module/migration.sql"],"modified":[".dockerignore","backend/prisma/process-designer.prisma","create-extension.sh","docs/guides/database-migration-guide.md"]}],"total_commits":0,"head_commit":{"id":"7c66dac1fd83d4b9dc05198d7589827309ba5922","message":"fix(database): improve migration system with dedup, rollback strategy, and CI/CD\n\n- Fix 6 duplicate migration timestamps by adding _a/_b suffixes for deterministic ordering\n- Remove nested backend/backend/ directory anomaly (accidental copy)\n- Deprecate process-designer.prisma (models already merged in main schema)\n- Deprecate machine-specific create-extension.sh, point to portable alternatives\n- Create database-migration-guide-v2.md as single source of truth\n- Add rollback strategy generator for recent migrations (cross-platform)\n- Add CI/CD migration safety checks (7-point validation)\n- Add GitHub Actions workflow for automatic migration validation\n- Add legacy migration cleanup script to standardize on Prisma\n- Archive old migration guide with deprecation notice\n\nCo-authored-by: Qwen-Coder \u003cqwen-coder@alibabacloud.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7c66dac1fd83d4b9dc05198d7589827309ba5922","author":{"name":"jh.sj","email":"jh.sj@jhsjdeMac-Studio.local","username":""},"committer":{"name":"jh.sj","email":"jh.sj@jhsjdeMac-Studio.local","username":""},"verification":null,"timestamp":"2026-04-14T20:18:15+08:00","added":[".github/workflows/migration-safety.yml","backend/prisma/migrations/20260103100000_a_add_bom_and_assembly/migration.sql","backend/prisma/migrations/20260103100000_b_add_customer_tags_meta/migration.sql","backend/prisma/migrations/20260104100000_a_add_im_channel_bindings/migration.sql","backend/prisma/migrations/20260104100000_b_add_performance_indexes/migration.sql","backend/prisma/migrations/20260124000000_a_add_ai_agents/migration.sql","backend/prisma/migrations/20260124000000_b_add_ai_agents_module/migration.sql","backend/prisma/migrations/rollback-strategy.sql","docs/guides/database-migration-guide-v2.md","docs/reports/database-migration-improvements-2026-04-14.md","scripts/ci-migration-check.sh","scripts/cleanup-legacy-migrations.sh","scripts/fix-duplicate-migrations.sh","scripts/generate-rollback-strategy.sh"],"removed":["backend/backend/prisma/migrations/20260123235959_create_missing_tables/migration.sql","backend/prisma/migrations/20260103100000_add_bom_and_assembly/migration.sql","backend/prisma/migrations/20260103100000_add_customer_tags_meta/migration.sql","backend/prisma/migrations/20260104100000_add_im_channel_bindings/migration.sql","backend/prisma/migrations/20260104100000_add_performance_indexes/migration.sql","backend/prisma/migrations/20260124000000_add_ai_agents/migration.sql","backend/prisma/migrations/20260124000000_add_ai_agents_module/migration.sql"],"modified":[".dockerignore","backend/prisma/process-designer.prisma","create-extension.sh","docs/guides/database-migration-guide.md"]},"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":5215537,"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":4,"open_issues_count":0,"open_pr_counter":1,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-04-13T15:41:26+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"}}...
|
push
|
3
|
7
|
1776170068
|
1776170075
|
0
|
1776170068
|
1776170076
|
group: ci-${{ github.ref }}
cancel-in-progress: group: ci-${{ github.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|
|
14172
|
fix(database): improve migration system with dedup fix(database): improve migration system with dedup, rollback strategy, and CI/CD...
|
6
|
5
|
e2e-tests.yml
|
14094
|
5
|
0
|
refs/heads/main
|
7c66dac1fd83d4b9dc05198d7589827309ba5922
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"d2c68b13960de626f7a8d496bf1977d263eb7931","after":"7c66dac1fd83d4b9dc05198d7589827309ba5922","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/d2c68b13960de626f7a8d496bf1977d263eb7931...7c66dac1fd83d4b9dc05198d7589827309ba5922","commits":[{"id":"7c66dac1fd83d4b9dc05198d7589827309ba5922","message":"fix(database): improve migration system with dedup, rollback strategy, and CI/CD\n\n- Fix 6 duplicate migration timestamps by adding _a/_b suffixes for deterministic ordering\n- Remove nested backend/backend/ directory anomaly (accidental copy)\n- Deprecate process-designer.prisma (models already merged in main schema)\n- Deprecate machine-specific create-extension.sh, point to portable alternatives\n- Create database-migration-guide-v2.md as single source of truth\n- Add rollback strategy generator for recent migrations (cross-platform)\n- Add CI/CD migration safety checks (7-point validation)\n- Add GitHub Actions workflow for automatic migration validation\n- Add legacy migration cleanup script to standardize on Prisma\n- Archive old migration guide with deprecation notice\n\nCo-authored-by: Qwen-Coder \u003cqwen-coder@alibabacloud.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7c66dac1fd83d4b9dc05198d7589827309ba5922","author":{"name":"jh.sj","email":"jh.sj@jhsjdeMac-Studio.local","username":""},"committer":{"name":"jh.sj","email":"jh.sj@jhsjdeMac-Studio.local","username":""},"verification":null,"timestamp":"2026-04-14T20:18:15+08:00","added":[".github/workflows/migration-safety.yml","backend/prisma/migrations/20260103100000_a_add_bom_and_assembly/migration.sql","backend/prisma/migrations/20260103100000_b_add_customer_tags_meta/migration.sql","backend/prisma/migrations/20260104100000_a_add_im_channel_bindings/migration.sql","backend/prisma/migrations/20260104100000_b_add_performance_indexes/migration.sql","backend/prisma/migrations/20260124000000_a_add_ai_agents/migration.sql","backend/prisma/migrations/20260124000000_b_add_ai_agents_module/migration.sql","backend/prisma/migrations/rollback-strategy.sql","docs/guides/database-migration-guide-v2.md","docs/reports/database-migration-improvements-2026-04-14.md","scripts/ci-migration-check.sh","scripts/cleanup-legacy-migrations.sh","scripts/fix-duplicate-migrations.sh","scripts/generate-rollback-strategy.sh"],"removed":["backend/backend/prisma/migrations/20260123235959_create_missing_tables/migration.sql","backend/prisma/migrations/20260103100000_add_bom_and_assembly/migration.sql","backend/prisma/migrations/20260103100000_add_customer_tags_meta/migration.sql","backend/prisma/migrations/20260104100000_add_im_channel_bindings/migration.sql","backend/prisma/migrations/20260104100000_add_performance_indexes/migration.sql","backend/prisma/migrations/20260124000000_add_ai_agents/migration.sql","backend/prisma/migrations/20260124000000_add_ai_agents_module/migration.sql"],"modified":[".dockerignore","backend/prisma/process-designer.prisma","create-extension.sh","docs/guides/database-migration-guide.md"]}],"total_commits":0,"head_commit":{"id":"7c66dac1fd83d4b9dc05198d7589827309ba5922","message":"fix(database): improve migration system with dedup, rollback strategy, and CI/CD\n\n- Fix 6 duplicate migration timestamps by adding _a/_b suffixes for deterministic ordering\n- Remove nested backend/backend/ directory anomaly (accidental copy)\n- Deprecate process-designer.prisma (models already merged in main schema)\n- Deprecate machine-specific create-extension.sh, point to portable alternatives\n- Create database-migration-guide-v2.md as single source of truth\n- Add rollback strategy generator for recent migrations (cross-platform)\n- Add CI/CD migration safety checks (7-point validation)\n- Add GitHub Actions workflow for automatic migration validation\n- Add legacy migration cleanup script to standardize on Prisma\n- Archive old migration guide with deprecation notice\n\nCo-authored-by: Qwen-Coder \u003cqwen-coder@alibabacloud.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7c66dac1fd83d4b9dc05198d7589827309ba5922","author":{"name":"jh.sj","email":"jh.sj@jhsjdeMac-Studio.local","username":""},"committer":{"name":"jh.sj","email":"jh.sj@jhsjdeMac-Studio.local","username":""},"verification":null,"timestamp":"2026-04-14T20:18:15+08:00","added":[".github/workflows/migration-safety.yml","backend/prisma/migrations/20260103100000_a_add_bom_and_assembly/migration.sql","backend/prisma/migrations/20260103100000_b_add_customer_tags_meta/migration.sql","backend/prisma/migrations/20260104100000_a_add_im_channel_bindings/migration.sql","backend/prisma/migrations/20260104100000_b_add_performance_indexes/migration.sql","backend/prisma/migrations/20260124000000_a_add_ai_agents/migration.sql","backend/prisma/migrations/20260124000000_b_add_ai_agents_module/migration.sql","backend/prisma/migrations/rollback-strategy.sql","docs/guides/database-migration-guide-v2.md","docs/reports/database-migration-improvements-2026-04-14.md","scripts/ci-migration-check.sh","scripts/cleanup-legacy-migrations.sh","scripts/fix-duplicate-migrations.sh","scripts/generate-rollback-strategy.sh"],"removed":["backend/backend/prisma/migrations/20260123235959_create_missing_tables/migration.sql","backend/prisma/migrations/20260103100000_add_bom_and_assembly/migration.sql","backend/prisma/migrations/20260103100000_add_customer_tags_meta/migration.sql","backend/prisma/migrations/20260104100000_add_im_channel_bindings/migration.sql","backend/prisma/migrations/20260104100000_add_performance_indexes/migration.sql","backend/prisma/migrations/20260124000000_add_ai_agents/migration.sql","backend/prisma/migrations/20260124000000_add_ai_agents_module/migration.sql"],"modified":[".dockerignore","backend/prisma/process-designer.prisma","create-extension.sh","docs/guides/database-migration-guide.md"]},"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":5215537,"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":4,"open_issues_count":0,"open_pr_counter":1,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-04-13T15:41:26+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"}}...
|
push
|
2
|
20
|
1776170129
|
1776170318
|
0
|
1776170069
|
1776173367
|
|
|
0
|
Edit
Delete
|
|
14173
|
fix(database): improve migration system with dedup fix(database): improve migration system with dedup, rollback strategy, and CI/CD...
|
6
|
5
|
test-pipeline.yml
|
14095
|
5
|
0
|
refs/heads/main
|
7c66dac1fd83d4b9dc05198d7589827309ba5922
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"d2c68b13960de626f7a8d496bf1977d263eb7931","after":"7c66dac1fd83d4b9dc05198d7589827309ba5922","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/d2c68b13960de626f7a8d496bf1977d263eb7931...7c66dac1fd83d4b9dc05198d7589827309ba5922","commits":[{"id":"7c66dac1fd83d4b9dc05198d7589827309ba5922","message":"fix(database): improve migration system with dedup, rollback strategy, and CI/CD\n\n- Fix 6 duplicate migration timestamps by adding _a/_b suffixes for deterministic ordering\n- Remove nested backend/backend/ directory anomaly (accidental copy)\n- Deprecate process-designer.prisma (models already merged in main schema)\n- Deprecate machine-specific create-extension.sh, point to portable alternatives\n- Create database-migration-guide-v2.md as single source of truth\n- Add rollback strategy generator for recent migrations (cross-platform)\n- Add CI/CD migration safety checks (7-point validation)\n- Add GitHub Actions workflow for automatic migration validation\n- Add legacy migration cleanup script to standardize on Prisma\n- Archive old migration guide with deprecation notice\n\nCo-authored-by: Qwen-Coder \u003cqwen-coder@alibabacloud.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7c66dac1fd83d4b9dc05198d7589827309ba5922","author":{"name":"jh.sj","email":"jh.sj@jhsjdeMac-Studio.local","username":""},"committer":{"name":"jh.sj","email":"jh.sj@jhsjdeMac-Studio.local","username":""},"verification":null,"timestamp":"2026-04-14T20:18:15+08:00","added":[".github/workflows/migration-safety.yml","backend/prisma/migrations/20260103100000_a_add_bom_and_assembly/migration.sql","backend/prisma/migrations/20260103100000_b_add_customer_tags_meta/migration.sql","backend/prisma/migrations/20260104100000_a_add_im_channel_bindings/migration.sql","backend/prisma/migrations/20260104100000_b_add_performance_indexes/migration.sql","backend/prisma/migrations/20260124000000_a_add_ai_agents/migration.sql","backend/prisma/migrations/20260124000000_b_add_ai_agents_module/migration.sql","backend/prisma/migrations/rollback-strategy.sql","docs/guides/database-migration-guide-v2.md","docs/reports/database-migration-improvements-2026-04-14.md","scripts/ci-migration-check.sh","scripts/cleanup-legacy-migrations.sh","scripts/fix-duplicate-migrations.sh","scripts/generate-rollback-strategy.sh"],"removed":["backend/backend/prisma/migrations/20260123235959_create_missing_tables/migration.sql","backend/prisma/migrations/20260103100000_add_bom_and_assembly/migration.sql","backend/prisma/migrations/20260103100000_add_customer_tags_meta/migration.sql","backend/prisma/migrations/20260104100000_add_im_channel_bindings/migration.sql","backend/prisma/migrations/20260104100000_add_performance_indexes/migration.sql","backend/prisma/migrations/20260124000000_add_ai_agents/migration.sql","backend/prisma/migrations/20260124000000_add_ai_agents_module/migration.sql"],"modified":[".dockerignore","backend/prisma/process-designer.prisma","create-extension.sh","docs/guides/database-migration-guide.md"]}],"total_commits":0,"head_commit":{"id":"7c66dac1fd83d4b9dc05198d7589827309ba5922","message":"fix(database): improve migration system with dedup, rollback strategy, and CI/CD\n\n- Fix 6 duplicate migration timestamps by adding _a/_b suffixes for deterministic ordering\n- Remove nested backend/backend/ directory anomaly (accidental copy)\n- Deprecate process-designer.prisma (models already merged in main schema)\n- Deprecate machine-specific create-extension.sh, point to portable alternatives\n- Create database-migration-guide-v2.md as single source of truth\n- Add rollback strategy generator for recent migrations (cross-platform)\n- Add CI/CD migration safety checks (7-point validation)\n- Add GitHub Actions workflow for automatic migration validation\n- Add legacy migration cleanup script to standardize on Prisma\n- Archive old migration guide with deprecation notice\n\nCo-authored-by: Qwen-Coder \u003cqwen-coder@alibabacloud.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7c66dac1fd83d4b9dc05198d7589827309ba5922","author":{"name":"jh.sj","email":"jh.sj@jhsjdeMac-Studio.local","username":""},"committer":{"name":"jh.sj","email":"jh.sj@jhsjdeMac-Studio.local","username":""},"verification":null,"timestamp":"2026-04-14T20:18:15+08:00","added":[".github/workflows/migration-safety.yml","backend/prisma/migrations/20260103100000_a_add_bom_and_assembly/migration.sql","backend/prisma/migrations/20260103100000_b_add_customer_tags_meta/migration.sql","backend/prisma/migrations/20260104100000_a_add_im_channel_bindings/migration.sql","backend/prisma/migrations/20260104100000_b_add_performance_indexes/migration.sql","backend/prisma/migrations/20260124000000_a_add_ai_agents/migration.sql","backend/prisma/migrations/20260124000000_b_add_ai_agents_module/migration.sql","backend/prisma/migrations/rollback-strategy.sql","docs/guides/database-migration-guide-v2.md","docs/reports/database-migration-improvements-2026-04-14.md","scripts/ci-migration-check.sh","scripts/cleanup-legacy-migrations.sh","scripts/fix-duplicate-migrations.sh","scripts/generate-rollback-strategy.sh"],"removed":["backend/backend/prisma/migrations/20260123235959_create_missing_tables/migration.sql","backend/prisma/migrations/20260103100000_add_bom_and_assembly/migration.sql","backend/prisma/migrations/20260103100000_add_customer_tags_meta/migration.sql","backend/prisma/migrations/20260104100000_add_im_channel_bindings/migration.sql","backend/prisma/migrations/20260104100000_add_performance_indexes/migration.sql","backend/prisma/migrations/20260124000000_add_ai_agents/migration.sql","backend/prisma/migrations/20260124000000_add_ai_agents_module/migration.sql"],"modified":[".dockerignore","backend/prisma/process-designer.prisma","create-extension.sh","docs/guides/database-migration-guide.md"]},"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":5215537,"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":4,"open_issues_count":0,"open_pr_counter":1,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-04-13T15:41:26+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"}}...
|
push
|
3
|
24
|
0
|
1776170077
|
0
|
1776170070
|
1776170081
|
group: test-pipeline-${{ github.ref }}
cancel-in-p group: test-pipeline-${{ github.ref }}
cancel-in-progress: "true"
...
|
test-pipeline-refs/heads/main
|
1
|
Edit
Delete
|
|
14174
|
chore: add backend .env configuration
|
6
|
5
|
ci.yml
|
14096
|
5
|
0
|
refs/heads/main
|
204e3356f50776130b4976cf96f4deedfe36ab5f
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"7c66dac1fd83d4b9dc05198d7589827309ba5922","after":"204e3356f50776130b4976cf96f4deedfe36ab5f","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/7c66dac1fd83d4b9dc05198d7589827309ba5922...204e3356f50776130b4976cf96f4deedfe36ab5f","commits":[{"id":"204e3356f50776130b4976cf96f4deedfe36ab5f","message":"chore: add backend .env configuration\n\nCo-authored-by: Qwen-Coder \u003cqwen-coder@alibabacloud.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/204e3356f50776130b4976cf96f4deedfe36ab5f","author":{"name":"jh.sj","email":"jh.sj@jhsjdeMac-Studio.local","username":""},"committer":{"name":"jh.sj","email":"jh.sj@jhsjdeMac-Studio.local","username":""},"verification":null,"timestamp":"2026-04-14T20:34:24+08:00","added":["backend/.env"],"removed":[],"modified":[]}],"total_commits":0,"head_commit":{"id":"204e3356f50776130b4976cf96f4deedfe36ab5f","message":"chore: add backend .env configuration\n\nCo-authored-by: Qwen-Coder \u003cqwen-coder@alibabacloud.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/204e3356f50776130b4976cf96f4deedfe36ab5f","author":{"name":"jh.sj","email":"jh.sj@jhsjdeMac-Studio.local","username":""},"committer":{"name":"jh.sj","email":"jh.sj@jhsjdeMac-Studio.local","username":""},"verification":null,"timestamp":"2026-04-14T20:34:24+08:00","added":["backend/.env"],"removed":[],"modified":[]},"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":5215579,"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":4,"open_issues_count":0,"open_pr_counter":1,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-04-14T20:34:31+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"}}...
|
push
|
3
|
6
|
0
|
1776170150
|
0
|
1776170076
|
1776170151
|
group: ci-${{ github.ref }}
cancel-in-progress: group: ci-${{ github.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|