|
22568
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22486
|
-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
|
1778654101
|
1778654101
|
0
|
1778654101
|
1778654101
|
|
|
0
|
Edit
Delete
|
|
22569
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22487
|
-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
|
1778654401
|
1778654401
|
0
|
1778654401
|
1778654401
|
|
|
0
|
Edit
Delete
|
|
22570
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22488
|
-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
|
1778654701
|
1778654701
|
0
|
1778654701
|
1778654701
|
|
|
0
|
Edit
Delete
|
|
22571
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22489
|
-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
|
1778655001
|
1778655001
|
0
|
1778655001
|
1778655001
|
|
|
0
|
Edit
Delete
|
|
22572
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22490
|
-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
|
1778655301
|
1778655301
|
0
|
1778655301
|
1778655301
|
|
|
0
|
Edit
Delete
|
|
22573
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22491
|
-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
|
1778655601
|
1778655601
|
0
|
1778655601
|
1778655601
|
|
|
0
|
Edit
Delete
|
|
22574
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22492
|
-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
|
1778655901
|
1778655901
|
0
|
1778655901
|
1778655901
|
|
|
0
|
Edit
Delete
|
|
22575
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22493
|
-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
|
1778656201
|
1778656201
|
0
|
1778656201
|
1778656201
|
|
|
0
|
Edit
Delete
|
|
22576
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22494
|
-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
|
1778656501
|
1778656501
|
0
|
1778656501
|
1778656501
|
|
|
0
|
Edit
Delete
|
|
22577
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22495
|
-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
|
1778656801
|
1778656801
|
0
|
1778656801
|
1778656801
|
|
|
0
|
Edit
Delete
|
|
22578
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22496
|
-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
|
1778657101
|
1778657101
|
0
|
1778657101
|
1778657101
|
|
|
0
|
Edit
Delete
|
|
22579
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22497
|
-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
|
1778657401
|
1778657401
|
0
|
1778657401
|
1778657401
|
|
|
0
|
Edit
Delete
|
|
22580
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22498
|
-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
|
1778657701
|
1778657701
|
0
|
1778657701
|
1778657701
|
|
|
0
|
Edit
Delete
|
|
22581
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22499
|
-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
|
1778658001
|
1778658001
|
0
|
1778658001
|
1778658001
|
|
|
0
|
Edit
Delete
|
|
22582
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22500
|
-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
|
1778658301
|
1778658301
|
0
|
1778658301
|
1778658301
|
|
|
0
|
Edit
Delete
|
|
22583
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22501
|
-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
|
1778658601
|
1778658601
|
0
|
1778658601
|
1778658601
|
|
|
0
|
Edit
Delete
|
|
22584
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22502
|
-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
|
1778658901
|
1778658901
|
0
|
1778658901
|
1778658901
|
|
|
0
|
Edit
Delete
|
|
22585
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22503
|
-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
|
1778659201
|
1778659201
|
0
|
1778659201
|
1778659201
|
|
|
0
|
Edit
Delete
|
|
22586
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22504
|
-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
|
1778659501
|
1778659501
|
0
|
1778659501
|
1778659501
|
|
|
0
|
Edit
Delete
|
|
22587
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22505
|
-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
|
1778659801
|
1778659801
|
0
|
1778659801
|
1778659801
|
|
|
0
|
Edit
Delete
|
|
22588
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22506
|
-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
|
1778660101
|
1778660101
|
0
|
1778660101
|
1778660101
|
|
|
0
|
Edit
Delete
|
|
22589
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22507
|
-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
|
1778660401
|
1778660401
|
0
|
1778660401
|
1778660401
|
|
|
0
|
Edit
Delete
|
|
22590
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22508
|
-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
|
1778660701
|
1778660701
|
0
|
1778660701
|
1778660701
|
|
|
0
|
Edit
Delete
|
|
22591
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22509
|
-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
|
1778661001
|
1778661001
|
0
|
1778661001
|
1778661001
|
|
|
0
|
Edit
Delete
|
|
22592
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22510
|
-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
|
1778661301
|
1778661301
|
0
|
1778661301
|
1778661301
|
|
|
0
|
Edit
Delete
|
|
22593
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22511
|
-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
|
1778661601
|
1778661601
|
0
|
1778661601
|
1778661601
|
|
|
0
|
Edit
Delete
|
|
22594
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22512
|
-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
|
1778661901
|
1778661901
|
0
|
1778661901
|
1778661901
|
|
|
0
|
Edit
Delete
|
|
22595
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22513
|
-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
|
1778662201
|
1778662201
|
0
|
1778662201
|
1778662201
|
|
|
0
|
Edit
Delete
|
|
22596
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22514
|
-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
|
1778662501
|
1778662501
|
0
|
1778662501
|
1778662501
|
|
|
0
|
Edit
Delete
|
|
22597
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22515
|
-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
|
1778662801
|
1778662801
|
0
|
1778662801
|
1778662801
|
|
|
0
|
Edit
Delete
|
|
22598
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22516
|
-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
|
1778663101
|
1778663101
|
0
|
1778663101
|
1778663101
|
|
|
0
|
Edit
Delete
|
|
22599
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22517
|
-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
|
1778663401
|
1778663401
|
0
|
1778663401
|
1778663401
|
|
|
0
|
Edit
Delete
|
|
22600
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22518
|
-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
|
1778663701
|
1778663701
|
0
|
1778663701
|
1778663701
|
|
|
0
|
Edit
Delete
|
|
22601
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22519
|
-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
|
1778664001
|
1778664001
|
0
|
1778664001
|
1778664001
|
|
|
0
|
Edit
Delete
|
|
22602
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22520
|
-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
|
1778664301
|
1778664301
|
0
|
1778664301
|
1778664301
|
|
|
0
|
Edit
Delete
|
|
22603
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22521
|
-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
|
1778664601
|
1778664601
|
0
|
1778664601
|
1778664601
|
|
|
0
|
Edit
Delete
|
|
22604
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22522
|
-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
|
1778664901
|
1778664901
|
0
|
1778664901
|
1778664901
|
|
|
0
|
Edit
Delete
|
|
22605
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22523
|
-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
|
1778665201
|
1778665201
|
0
|
1778665201
|
1778665201
|
|
|
0
|
Edit
Delete
|
|
22606
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22524
|
-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
|
1778665501
|
1778665501
|
0
|
1778665501
|
1778665501
|
|
|
0
|
Edit
Delete
|
|
22607
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22525
|
-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
|
1778665801
|
1778665801
|
0
|
1778665801
|
1778665801
|
|
|
0
|
Edit
Delete
|
|
22608
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22526
|
-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
|
1778666101
|
1778666101
|
0
|
1778666101
|
1778666101
|
|
|
0
|
Edit
Delete
|
|
22609
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22527
|
-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
|
1778666401
|
1778666401
|
0
|
1778666401
|
1778666401
|
|
|
0
|
Edit
Delete
|
|
22610
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22528
|
-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
|
1778666701
|
1778666701
|
0
|
1778666701
|
1778666701
|
|
|
0
|
Edit
Delete
|
|
22611
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22529
|
-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
|
1778667001
|
1778667001
|
0
|
1778667001
|
1778667001
|
|
|
0
|
Edit
Delete
|
|
22612
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22530
|
-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
|
1778667301
|
1778667301
|
0
|
1778667301
|
1778667301
|
|
|
0
|
Edit
Delete
|
|
22613
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22531
|
-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
|
1778667601
|
1778667601
|
0
|
1778667601
|
1778667601
|
|
|
0
|
Edit
Delete
|
|
22614
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22532
|
-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
|
1778667901
|
1778667901
|
0
|
1778667901
|
1778667901
|
|
|
0
|
Edit
Delete
|
|
22615
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22533
|
-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
|
1778668201
|
1778668201
|
0
|
1778668201
|
1778668201
|
|
|
0
|
Edit
Delete
|
|
22616
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22534
|
-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
|
1778668501
|
1778668501
|
0
|
1778668501
|
1778668501
|
|
|
0
|
Edit
Delete
|
|
22617
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
22535
|
-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
|
1778668801
|
1778668801
|
0
|
1778668801
|
1778668801
|
|
|
0
|
Edit
Delete
|