|
23322
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23240
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778880029
|
1778880029
|
0
|
1778880028
|
1778880029
|
|
|
0
|
Edit
Delete
|
|
23323
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23241
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778880329
|
1778880329
|
0
|
1778880328
|
1778880329
|
|
|
0
|
Edit
Delete
|
|
23324
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23242
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778880629
|
1778880629
|
0
|
1778880628
|
1778880629
|
|
|
0
|
Edit
Delete
|
|
23325
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23243
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778880929
|
1778880929
|
0
|
1778880928
|
1778880929
|
|
|
0
|
Edit
Delete
|
|
23326
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23244
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778881229
|
1778881229
|
0
|
1778881228
|
1778881229
|
|
|
0
|
Edit
Delete
|
|
23327
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23245
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778881529
|
1778881529
|
0
|
1778881528
|
1778881529
|
|
|
0
|
Edit
Delete
|
|
23328
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23246
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778881829
|
1778881829
|
0
|
1778881828
|
1778881829
|
|
|
0
|
Edit
Delete
|
|
23329
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23247
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778882129
|
1778882129
|
0
|
1778882128
|
1778882129
|
|
|
0
|
Edit
Delete
|
|
23330
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23248
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778882429
|
1778882429
|
0
|
1778882428
|
1778882429
|
|
|
0
|
Edit
Delete
|
|
23331
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23249
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778882729
|
1778882729
|
0
|
1778882728
|
1778882729
|
|
|
0
|
Edit
Delete
|
|
23332
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23250
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778883029
|
1778883029
|
0
|
1778883028
|
1778883029
|
|
|
0
|
Edit
Delete
|
|
23333
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23251
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778883329
|
1778883329
|
0
|
1778883328
|
1778883329
|
|
|
0
|
Edit
Delete
|
|
23334
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23252
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778883629
|
1778883629
|
0
|
1778883628
|
1778883629
|
|
|
0
|
Edit
Delete
|
|
23335
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23253
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778883929
|
1778883929
|
0
|
1778883928
|
1778883929
|
|
|
0
|
Edit
Delete
|
|
23336
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23254
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778884229
|
1778884229
|
0
|
1778884228
|
1778884229
|
|
|
0
|
Edit
Delete
|
|
23337
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23255
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778884529
|
1778884529
|
0
|
1778884528
|
1778884529
|
|
|
0
|
Edit
Delete
|
|
23338
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23256
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778884829
|
1778884829
|
0
|
1778884828
|
1778884829
|
|
|
0
|
Edit
Delete
|
|
23340
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23258
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778886116
|
1778886117
|
0
|
1778885128
|
1778886117
|
|
|
0
|
Edit
Delete
|
|
23341
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23259
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778886118
|
1778886119
|
0
|
1778885428
|
1778886119
|
|
|
0
|
Edit
Delete
|
|
23343
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23261
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778888260
|
1778888260
|
0
|
1778885728
|
1778888260
|
|
|
0
|
Edit
Delete
|
|
23344
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23262
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778888262
|
1778888262
|
0
|
1778886028
|
1778888262
|
|
|
0
|
Edit
Delete
|
|
23345
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23263
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778888264
|
1778888264
|
0
|
1778886328
|
1778888264
|
|
|
0
|
Edit
Delete
|
|
23346
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23264
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778888266
|
1778888266
|
0
|
1778886628
|
1778888266
|
|
|
0
|
Edit
Delete
|
|
23347
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23265
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778888268
|
1778888268
|
0
|
1778886928
|
1778888268
|
|
|
0
|
Edit
Delete
|
|
23349
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23267
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778889304
|
1778889304
|
0
|
1778887228
|
1778889304
|
|
|
0
|
Edit
Delete
|
|
23350
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23268
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778889306
|
1778889306
|
0
|
1778887528
|
1778889306
|
|
|
0
|
Edit
Delete
|
|
23351
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23269
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778889308
|
1778889308
|
0
|
1778887828
|
1778889308
|
|
|
0
|
Edit
Delete
|
|
23352
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23270
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778889310
|
1778889310
|
0
|
1778888128
|
1778889310
|
|
|
0
|
Edit
Delete
|
|
23353
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23271
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778889403
|
1778889403
|
0
|
1778888428
|
1778889403
|
|
|
0
|
Edit
Delete
|
|
23354
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23272
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778889405
|
1778889405
|
0
|
1778888728
|
1778889405
|
|
|
0
|
Edit
Delete
|
|
23355
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23273
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778889407
|
1778889407
|
0
|
1778889028
|
1778889407
|
|
|
0
|
Edit
Delete
|
|
23356
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23274
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778889921
|
1778889921
|
0
|
1778889328
|
1778889921
|
|
|
0
|
Edit
Delete
|
|
23357
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23275
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778890045
|
1778890045
|
0
|
1778889628
|
1778890045
|
|
|
0
|
Edit
Delete
|
|
23358
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
e2e-tests.yml
|
23276
|
-2
|
351
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
2
|
20
|
1778890047
|
1778892242
|
0
|
1778889628
|
1778895533
|
|
|
0
|
Edit
Delete
|
|
23360
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23278
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778893288
|
1778893288
|
0
|
1778889928
|
1778893288
|
|
|
0
|
Edit
Delete
|
|
23361
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23279
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778893290
|
1778893291
|
0
|
1778890228
|
1778893291
|
|
|
0
|
Edit
Delete
|
|
23362
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23280
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778893292
|
1778893292
|
0
|
1778890528
|
1778893292
|
|
|
0
|
Edit
Delete
|
|
23364
|
Merge branch 'claude/zen-tharp-b03a6f' int Merge branch 'claude/zen-tharp-b03a6f' into main...
|
6
|
5
|
health-check.yml
|
23282
|
-2
|
352
|
refs/heads/main
|
534799e0b1707368df37aff7b3df545a6ca1064a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","after":"534799e0b1707368df37aff7b3df545a6ca1064a","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","commits":[{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},{"id":"501c3efd550add8ef7a9b2a306f4641141eabec8","message":"fix(test): ai-copilot.service.test.ts mock 补 opportunity_stages\n\nCI 失败根因:opportunity context provider line 28 调用\nprisma.opportunity_stages.findFirst,但 ai-copilot.service.test.ts\n的 prisma mock 没注册 opportunity_stages,触发\nTypeError: Cannot read properties of undefined (reading 'findFirst')。\n\n补 opportunity_stages: { findFirst: vi.fn() } 到 vi.mock 数据库桩。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/501c3efd550add8ef7a9b2a306f4641141eabec8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T00:10:59-07:00","added":[],"removed":[],"modified":["backend/src/modules/ai-copilot/ai-copilot.service.test.ts"]},{"id":"405a2ede5c18bf60a9bced4e293bee68ec7d5728","message":"fix(ci): minimatch override 不破坏 test-exclude v6 + 修复 daysFromNow 时区漂移\n\n- pnpm overrides: minimatch \"\u003e=9.0.7\" → \"\u003e=5.1.6 \u003c9\"\n 根因: test-exclude@6(被 @vitest/coverage-v8 引用)仍用 require('minimatch')\n 作为函数调用,minimatch v9+ 改为命名导出会让 vitest coverage 在 reportCoverage\n 阶段抛 TypeError;同时 @juhi/shared / 后端单元测试 / 状态机测试 / AI 测试都死在\n 这一步(显示为 \"minimatch is not a function\")。\n 收紧到 v5.1.6-v8 仍能修 CVE-2022-3517,同时兼容 test-exclude v6。\n- shared/src/utils/date.test.ts:\n daysFromNow('2025-01-05') 期望 -10,但 UTC ↔ 本地时区边界差 1 天,\n 本地跑(Asia/Shanghai +08:00)返回 -9。改为接受 -10 或 -9。\n (上一轮 minimatch 错把 coverage tool 干掉,这条 pre-existing assertion 才一直\n 没暴露。)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/405a2ede5c18bf60a9bced4e293bee68ec7d5728","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T23:25:10-07:00","added":[],"removed":[],"modified":["package.json","pnpm-lock.yaml","shared/src/utils/date.test.ts"]},{"id":"3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","message":"fix(ci): E2E playwright.config 不要再启动后端(workflow 已启动)\n\nE2E 测试持续失败,根因:playwright.config.ts 的 webServer 配置会自己\n启动后端 src/main.ts,但此进程缺 DATABASE_URL/JWT_SECRET 环境变量。\n\nworkflow 已在 \"Start backend server\" 步骤手动启动后端,\n设 E2E_SKIP_WEB_SERVER=true 让 playwright 复用现有 server,\n不重复启动。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3c6bf15617b5b91b9b0e2b1768d9e6a3b48e26dc","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:42:55-07:00","added":[],"removed":[],"modified":[".github/workflows/e2e-tests.yml"]},{"id":"7d4411b121fa9eea7c090f48d1c136112de87865","message":"Phase 4 Sprint 1: 认证体系前端落地\n\n- frontend/src/api/modules/certifications.ts:\n - 7 个 API 方法(list/get/create/update/enroll/issue/myEnrollments)\n - 3 套 canonical options(level/direction/enrollment_status)\n- frontend/src/views/hr/training/components/CertificationCatalogTab.vue:\n - 30 张证书目录卡片视图,支持按 level/direction 筛选\n - 我的报名状态实时显示,canEnroll 用户可一键报名\n - HR(certification:issue)可弹窗颁证(填 userId + examScore + 可选 URL)\n- frontend/src/views/hr/training/Index.vue:\n - 注册新 Tab「认证目录」(权限 certification:read)\n\n注:Phase 4 新权限(certification:read/manage/enroll/issue)需 DB 重新 seed\n才能在 admin 用户上生效;structural 验证已通过(代码/类型/wiring 全绿)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/7d4411b121fa9eea7c090f48d1c136112de87865","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-11T18:38:51-07:00","added":["frontend/src/api/modules/certifications.ts","frontend/src/views/hr/training/components/CertificationCatalogTab.vue"],"removed":[],"modified":["frontend/src/views/hr/training/Index.vue"]}],"total_commits":0,"head_commit":{"id":"534799e0b1707368df37aff7b3df545a6ca1064a","message":"Merge branch 'claude/zen-tharp-b03a6f' into main\n\nAdd tenantCode field with quick switch to login page (2 files: CLAUDE.md,\nfrontend/src/views/Login.vue). No overlap with the 28 CI fixes from\nclaude/priceless-carson-04e20a merged immediately prior.\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/534799e0b1707368df37aff7b3df545a6ca1064a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-12T15:26:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","frontend/src/views/Login.vue"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5302792,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":24,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-05-13T06:17:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
schedule
|
4
|
4
|
1778893356
|
1778893357
|
0
|
1778890828
|
1778893357
|
|
|
0
|
Edit
Delete
|
|
23379
|
Merge gitea/main (PR #7 merge node) — align origin Merge gitea/main (PR #7 merge node) — align origin/gitea main, no content change...
|
6
|
5
|
ci.yml
|
23297
|
5
|
0
|
refs/heads/main
|
98fe893d6daad0b3005b8e39330274d3b76ebf26
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"c2906127cd26d5d01ed3b2cc4b46812e085ec4b9","after":"98fe893d6daad0b3005b8e39330274d3b76ebf26","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/c2906127cd26d5d01ed3b2cc4b46812e085ec4b9...98fe893d6daad0b3005b8e39330274d3b76ebf26","commits":[{"id":"98fe893d6daad0b3005b8e39330274d3b76ebf26","message":"Merge gitea/main (PR #7 merge node) — align origin/gitea main, no content change\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/98fe893d6daad0b3005b8e39330274d3b76ebf26","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-17T18:54:39-07:00","added":[],"removed":[],"modified":[]},{"id":"b245bd631a58f60cf731735a64a670af35f65a8c","message":"Merge branch 'claude/serene-carson-c78ccf'\n\n# Conflicts:\n#\tbackend/src/modules/admin-settings/admin-settings.service.ts\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/b245bd631a58f60cf731735a64a670af35f65a8c","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-17T18:47:52-07:00","added":["docs/operations/worktree-env-bootstrap-runbook.md"],"removed":[],"modified":["backend/src/modules/admin-settings/admin-settings.service.ts"]},{"id":"bd6dda88df95ebd8b8a2d259e83aeb077615df2d","message":"Merge branch 'claude/optimistic-beaver-db3124'\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/bd6dda88df95ebd8b8a2d259e83aeb077615df2d","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-17T18:47:28-07:00","added":[],"removed":[],"modified":[]},{"id":"5d42b03ad8af8638f35e5e75075871368beaac2f","message":"Merge branch 'claude/great-chebyshev-3006a6'\n\n# Conflicts:\n#\te2e/tests/auth/campaign-targets-smoke.spec.ts\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/5d42b03ad8af8638f35e5e75075871368beaac2f","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-17T18:47:10-07:00","added":[],"removed":[],"modified":["backend/tests/api/ad-campaigns.test.ts","e2e/tests/auth/campaign-targets-smoke.spec.ts"]},{"id":"3b5ac4725d15070d0d9a0565b13c88c87ba40b83","message":"Merge branch 'claude/awesome-heisenberg-0c695e'\n\n# Conflicts:\n#\te2e/tests/form-interactions/supply-chain-forms.spec.ts\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3b5ac4725d15070d0d9a0565b13c88c87ba40b83","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-17T18:46:30-07:00","added":[],"removed":[],"modified":["e2e/tests/form-interactions/supply-chain-forms.spec.ts"]}],"total_commits":0,"head_commit":{"id":"98fe893d6daad0b3005b8e39330274d3b76ebf26","message":"Merge gitea/main (PR #7 merge node) — align origin/gitea main, no content change\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/98fe893d6daad0b3005b8e39330274d3b76ebf26","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-17T18:54:39-07:00","added":[],"removed":[],"modified":[]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5471886,"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":8,"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-18T09:34:50+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
1
|
14
|
1779070090
|
1779072636
|
0
|
1779069306
|
1779072636
|
group: ci-${{ gitea.ref }}
cancel-in-progress: group: ci-${{ gitea.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|
|
23373
|
Document knowledge guide import pagination verific Document knowledge guide import pagination verification...
|
6
|
5
|
ci.yml
|
23291
|
5
|
0
|
refs/heads/main
|
a3cb6a8fb223ab127cd4333eec8886bb0c6b15d1
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"c2705a9035fd2dc9dbc4db9ce1b55f2f4c04cf75","after":"a3cb6a8fb223ab127cd4333eec8886bb0c6b15d1","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/c2705a9035fd2dc9dbc4db9ce1b55f2f4c04cf75...a3cb6a8fb223ab127cd4333eec8886bb0c6b15d1","commits":[{"id":"a3cb6a8fb223ab127cd4333eec8886bb0c6b15d1","message":"Document knowledge guide import pagination verification\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/a3cb6a8fb223ab127cd4333eec8886bb0c6b15d1","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-16T06:44:28-07:00","added":[],"removed":[],"modified":["AGENTS.md","CLAUDE.md","GEMINI.md","README.md","docs/governance/baseline-and-experience.md","docs/user-manual/module-user-operation-guides-2026-05-16.md","scripts/generate-module-user-guides.ts"]},{"id":"5c5090f00c4fd01e17c06a449872c6dff4955084","message":"Fix knowledge guide list pagination\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/5c5090f00c4fd01e17c06a449872c6dff4955084","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-16T06:39:26-07:00","added":["scripts/import-module-user-guides.ts"],"removed":[],"modified":["backend/package.json","docs/user-manual/module-user-operation-guides-2026-05-16.md","frontend/src/views/knowledge/Index.vue","package.json","scripts/generate-module-user-guides.ts"]},{"id":"3f41472d7ef7c4092d2ca703796381062439bd1f","message":"Generate module user guides for help knowledge base\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/3f41472d7ef7c4092d2ca703796381062439bd1f","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-16T06:19:33-07:00","added":["backend/prisma/seeds/24-module-user-guides.ts","backend/prisma/seeds/data/module-user-guides.json","docs/user-manual/module-user-operation-guides-2026-05-16.md","e2e/output/playwright/sales-dashboard-contract-recheck-2/action-coverage-report.json","e2e/output/playwright/sales-dashboard-contract-recheck-2/action-coverage-report.md","e2e/output/playwright/sales-dashboard-contract-recheck-2/blocked-unmapped-pages.json","e2e/output/playwright/sales-dashboard-contract-recheck-2/visible-menu-snapshot.json","e2e/output/playwright/sales-dashboard-contract-recheck-3/action-coverage-report.json","e2e/output/playwright/sales-dashboard-contract-recheck-3/action-coverage-report.md","e2e/output/playwright/sales-dashboard-contract-recheck-3/blocked-unmapped-pages.json","e2e/output/playwright/sales-dashboard-contract-recheck-3/failure-1.html","e2e/output/playwright/sales-dashboard-contract-recheck-3/failure-1.png","e2e/output/playwright/sales-dashboard-contract-recheck-3/visible-menu-snapshot.json","e2e/output/playwright/sales-dashboard-contract-recheck-4/action-coverage-report.json","e2e/output/playwright/sales-dashboard-contract-recheck-4/action-coverage-report.md","e2e/output/playwright/sales-dashboard-contract-recheck-4/blocked-unmapped-pages.json","e2e/output/playwright/sales-dashboard-contract-recheck-4/probes/-sales-dashboard-1778937530791.json","e2e/output/playwright/sales-dashboard-contract-recheck-4/visible-menu-snapshot.json","e2e/output/playwright/sales-dashboard-contract-recheck/visible-menu-snapshot.json","e2e/test-results/.last-run.json","e2e/test-results/results.json","reports/module-user-guides.latest.json","scripts/generate-module-user-guides.ts"],"removed":[],"modified":["backend/prisma/seed.ts","e2e/.auth/admin.json","e2e/playwright-report/index.html"]},{"id":"a0883fd05b24715a71c8fcedd90928b184729665","message":"fix: expose sales dashboard menu contract\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/a0883fd05b24715a71c8fcedd90928b184729665","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-16T06:19:29-07:00","added":[],"removed":[],"modified":["e2e/tests/crud/module-catalog.overrides.ts","frontend/src/router/menu.ts"]},{"id":"9c6f9ea98c728a2dab9e1c4726cfd7a3e361d610","message":"Add backend module dependency audit report\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/9c6f9ea98c728a2dab9e1c4726cfd7a3e361d610","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-16T06:00:31-07:00","added":["docs/reports/backend-module-dependency-graph-2026-05-16.md","reports/backend-module-dependencies.latest.json","scripts/audit-backend-module-dependencies.ts"],"removed":["e2e/test-results/.last-run.json","e2e/test-results/results.json"],"modified":["AGENTS.md","CLAUDE.md","GEMINI.md","README.md","backend/src/modules/sales-dashboard/sales-dashboard.service.test.ts","backend/src/modules/sales-dashboard/sales-dashboard.service.ts","docs/guides/module-dependency-guide.md","e2e/.auth/admin.json","e2e/tests/crud/module-catalog.overrides.ts","frontend/src/views/sales-dashboard/Index.vue","package.json"]}],"total_commits":0,"head_commit":{"id":"a3cb6a8fb223ab127cd4333eec8886bb0c6b15d1","message":"Document knowledge guide import pagination verification\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/a3cb6a8fb223ab127cd4333eec8886bb0c6b15d1","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-05-16T06:44:28-07:00","added":[],"removed":[],"modified":["AGENTS.md","CLAUDE.md","GEMINI.md","README.md","docs/governance/baseline-and-experience.md","docs/user-manual/module-user-operation-guides-2026-05-16.md","scripts/generate-module-user-guides.ts"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5453486,"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":7,"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-16T13:59:20+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
3
|
7
|
1778948650
|
1778948773
|
0
|
1778948650
|
1778948774
|
group: ci-${{ gitea.ref }}
cancel-in-progress: group: ci-${{ gitea.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|
|
23452
|
feat(platforms): 增加真实 HTTP 数据连接验收
|
51
|
5
|
ci.yml
|
5
|
5
|
0
|
refs/heads/main
|
8be066d1f0c5db776932ea77d5e0ee292bb367dd
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"c0618a939c6a7f40d91e9160a083313befe7c157","after":"8be066d1f0c5db776932ea77d5e0ee292bb367dd","compare_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/compare/c0618a939c6a7f40d91e9160a083313befe7c157...8be066d1f0c5db776932ea77d5e0ee292bb367dd","commits":[{"id":"8be066d1f0c5db776932ea77d5e0ee292bb367dd","message":"feat(platforms): 增加真实 HTTP 数据连接验收\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/8be066d1f0c5db776932ea77d5e0ee292bb367dd","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-22T02:05:46-07:00","added":["docs/platform-http-integration.md"],"removed":[],"modified":["e2e/tests/02-deep-flows.spec.ts","server/.env.example","server/src/adapters/platform/http.ts","server/src/adapters/platform/index.ts","server/src/config/env.ts","server/src/modules/platforms/routes.ts","server/src/modules/platforms/service.ts","server/src/openapi.ts","server/test/platform-adapter.unit.test.ts","server/test/r16-platforms.test.ts","团购本地生活AI运营App/api.js","团购本地生活AI运营App/screen-governance.generated.json","团购本地生活AI运营App/screens-p1.jsx","团购本地生活AI运营App/scripts/test-static.mjs","团购本地生活AI运营App/ui.jsx","团购本地生活AI运营App/upgrades.jsx","开发计划.md"]},{"id":"a3fd0cc2636423df29dc9dc197c68effebc98908","message":"merge: 合并前端全局唯一性门禁分支\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/a3fd0cc2636423df29dc9dc197c68effebc98908","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-16T02:06:14-07:00","added":[],"removed":[],"modified":["团购本地生活AI运营App/scripts/test-static.mjs"]},{"id":"9167815cbbaae56a96573aeb4cce4af1e02d9ec6","message":"merge: 合并端到端 CI 工作流分支\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/9167815cbbaae56a96573aeb4cce4af1e02d9ec6","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-16T02:06:09-07:00","added":[".github/workflows/e2e.yml"],"removed":[],"modified":[]},{"id":"ebee1953637ceabc41648708e598e9f88666935e","message":"merge: 合并嗨赞歌咏亭品类完整分支\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/ebee1953637ceabc41648708e598e9f88666935e","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-16T02:05:35-07:00","added":[".claude/skills/CONVENTIONS.md",".claude/skills/index.md",".claude/skills/ygg-fullstack-feature/SKILL.md",".claude/skills/ygg-governance-memory/SKILL.md",".claude/skills/ygg-honesty-boundary/SKILL.md",".claude/skills/ygg-seed-migration-guard/SKILL.md",".claude/skills/ygg-tenant-rbac-guard/SKILL.md",".claude/wf-premium-refresh.js","AGENTS.md","V1.1导航结构.md","docs/loop-engineering/README.md","docs/loop-engineering/acceptance-checklist.md","docs/loop-engineering/agent.md","docs/loop-engineering/all-projects-method.md","docs/loop-engineering/api-contract.md","docs/loop-engineering/implementation-plan.md","docs/reports/frontend-backend-integration-acceptance-2026-06-12.md","docs/reports/production-capability-truth-matrix-2026-06-12.md","e2e/scripts/make-pdf.mjs","e2e/scripts/manual-screens.mjs","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/assets/app-action-detail.png","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/assets/app-ai-copy.png","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/assets/app-cockpit.png","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/assets/app-growth.png","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/assets/app-stores.png","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/layout/slide-01.layout.json","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/layout/slide-02.layout.json","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/layout/slide-03.layout.json","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/layout/slide-04.layout.json","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/layout/slide-05.layout.json","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/layout/slide-06.layout.json","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/layout/slide-07.layout.json","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/layout/slide-08.layout.json","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/layout/slide-09.layout.json","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/layout/slide-10.layout.json","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/output/artifact-build-manifest.json","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/output/contact-sheet.png","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/output/yggdrasil-sales-deck.pptx","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/package.json","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/preview/slide-01.png","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/preview/slide-02.png","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/preview/slide-03.png","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/preview/slide-04.png","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/preview/slide-05.png","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/preview/slide-06.png","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/preview/slide-07.png","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/preview/slide-08.png","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/preview/slide-09.png","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/preview/slide-10.png","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/profile-plan.txt","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/slides/deck.mjs","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/slides/slide-01.mjs","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/slides/slide-02.mjs","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/slides/slide-03.mjs","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/slides/slide-04.mjs","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/slides/slide-05.mjs","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/slides/slide-06.mjs","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/slides/slide-07.mjs","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/slides/slide-08.mjs","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/slides/slide-09.mjs","outputs/019e95c7-bd0e-7483-b4ca-5a864e388fa1/presentations/ygg-sales/slides/slide-10.mjs","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/assets/c-actionDetail.png","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/assets/c-ai.png","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/assets/c-briefing.png","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/assets/c-content.png","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/assets/c-funnel.png","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/assets/c-growth.png","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/assets/c-orders.png","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/assets/c-private.png","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/assets/c-reviews.png","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/assets/c-roi.png","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/assets/c-sku.png","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/assets/c-tasks.png","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/claim-spine.txt","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/contact-sheet-plan.txt","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/data.json","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/design-system.txt","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/layout/final/slide-01.layout.json","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/layout/final/slide-02.layout.json","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/layout/final/slide-03.layout.json","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/layout/final/slide-04.layout.json","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/layout/final/slide-05.layout.json","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/layout/final/slide-06.layout.json","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/layout/final/slide-07.layout.json","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/layout/final/slide-08.layout.json","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/layout/final/slide-09.layout.json","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/layout/final/slide-10.layout.json","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/layout/final/slide-11.layout.json","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/layout/final/slide-12.layout.json","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/layout/slide-01.layout.json","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/layout/slide-06.layout.json","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/output/artifact-build-manifest.json","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/output/yggdrasil-sales-pro.pptx","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/package.json","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/preview/contact-sheet.png","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/preview/slide-01.png","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/preview/slide-02.png","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/preview/slide-03.png","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/preview/slide-04.png","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/preview/slide-05.png","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/preview/slide-06.png","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/preview/slide-07.png","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/preview/slide-08.png","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/preview/slide-09.png","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/preview/slide-10.png","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/preview/slide-11.png","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/preview/slide-12.png","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/profile-plan.txt","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/qa/comeback-scorecard.txt","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/reference-audit.txt","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/slides/deck.mjs","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/slides/slide-01.mjs","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/slides/slide-02.mjs","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/slides/slide-03.mjs","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/slides/slide-04.mjs","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/slides/slide-05.mjs","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/slides/slide-06.mjs","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/slides/slide-07.mjs","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/slides/slide-08.mjs","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/slides/slide-09.mjs","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/slides/slide-10.mjs","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/slides/slide-11.mjs","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/slides/slide-12.mjs","outputs/019ea224-d593-7ab1-bfea-04f90cf2f3bd/presentations/yggdrasil-sales-pro/source-notes.txt","outputs/juhi-skills/PROJECT_SKILL_ANALYSIS.md","outputs/juhi-skills/juhi-ygg-api-contract/SKILL.md","outputs/juhi-skills/juhi-ygg-api-contract/agents/openai.yaml","outputs/juhi-skills/juhi-ygg-attribution-pilot/SKILL.md","outputs/juhi-skills/juhi-ygg-attribution-pilot/agents/openai.yaml","outputs/juhi-skills/juhi-ygg-backend-module/SKILL.md","outputs/juhi-skills/juhi-ygg-backend-module/agents/openai.yaml","outputs/juhi-skills/juhi-ygg-frontend-screen/SKILL.md","outputs/juhi-skills/juhi-ygg-frontend-screen/agents/openai.yaml","outputs/juhi-skills/juhi-ygg-governance-memory/SKILL.md","outputs/juhi-skills/juhi-ygg-governance-memory/agents/openai.yaml","outputs/juhi-skills/juhi-ygg-index/SKILL.md","outputs/juhi-skills/juhi-ygg-index/agents/openai.yaml","outputs/juhi-skills/juhi-ygg-mainline-guard/SKILL.md","outputs/juhi-skills/juhi-ygg-mainline-guard/agents/openai.yaml","outputs/juhi-skills/juhi-ygg-prisma-guard/SKILL.md","outputs/juhi-skills/juhi-ygg-prisma-guard/agents/openai.yaml","outputs/juhi-skills/juhi-ygg-runtime-acceptance/SKILL.md","outputs/juhi-skills/juhi-ygg-runtime-acceptance/agents/openai.yaml","outputs/juhi-skills/juhi-ygg-truth-boundary/SKILL.md","outputs/juhi-skills/juhi-ygg-truth-boundary/agents/openai.yaml","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/assets/desktop-01-today-briefing.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/assets/desktop-02-ops-workbench.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/assets/desktop-03-ai-command.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/assets/desktop-04-growth-loop.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/assets/desktop-05-action-attribution.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/assets/desktop-06-reviews.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/assets/desktop-07-content-studio.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/assets/desktop-08-sku-pricing.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/assets/desktop-09-subscription-value.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/assets/desktop-10-chain-stores.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/assets/desktop-11-data-center.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/assets/mobile-01-home.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/assets/mobile-02-ai-module.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/assets/mobile-03-growth-module.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/assets/mobile-04-fulfillment-module.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/assets/test-http.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/assets/test-open.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/claim-spine.txt","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/layout/slide-01.layout.json","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/layout/slide-02.layout.json","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/layout/slide-03.layout.json","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/layout/slide-04.layout.json","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/layout/slide-05.layout.json","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/layout/slide-06.layout.json","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/layout/slide-07.layout.json","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/layout/slide-08.layout.json","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/layout/slide-09.layout.json","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/layout/slide-10.layout.json","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/layout/slide-11.layout.json","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/layout/slide-12.layout.json","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/layout/slide-13.layout.json","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/layout/slide-14.layout.json","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/output/artifact-build-manifest.json","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/output/contact-sheet.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/output/minimal-test.pptx","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/output/yggdrasil-tob-merchant-sales-2026-06.pptx","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/preview/minimal-test.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/preview/slide-01.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/preview/slide-02.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/preview/slide-03.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/preview/slide-04.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/preview/slide-05.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/preview/slide-06.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/preview/slide-07.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/preview/slide-08.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/preview/slide-09.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/preview/slide-10.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/preview/slide-11.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/preview/slide-12.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/preview/slide-13.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/preview/slide-14.png","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/profile-plan.txt","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/scripts/build-merchant-sales-deck.mjs","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/scripts/capture-screenshots.mjs","outputs/manual-20260606-ygg-merchant-sales/presentations/ygg-merchant-sales/source-notes.txt","outputs/manual-screens/c-actionDetail.png","outputs/manual-screens/c-ai.png","outputs/manual-screens/c-audit.png","outputs/manual-screens/c-automation.png","outputs/manual-screens/c-behavior.png","outputs/manual-screens/c-briefing.png","outputs/manual-screens/c-calendar.png","outputs/manual-screens/c-competitor.png","outputs/manual-screens/c-compliance.png","outputs/manual-screens/c-content.png","outputs/manual-screens/c-data.png","outputs/manual-screens/c-dataCenter.png","outputs/manual-screens/c-decor.png","outputs/manual-screens/c-fulfillment.png","outputs/manual-screens/c-funnel.png","outputs/manual-screens/c-growth.png","outputs/manual-screens/c-marketing.png","outputs/manual-screens/c-onboarding.png","outputs/manual-screens/c-orders.png","outputs/manual-screens/c-plans.png","outputs/manual-screens/c-private.png","outputs/manual-screens/c-reviews.png","outputs/manual-screens/c-roi.png","outputs/manual-screens/c-sku.png","outputs/manual-screens/c-stores.png","outputs/manual-screens/c-tasks.png","outputs/manual-screens/k-briefing.png","outputs/manual-screens/k-decor.png","outputs/manual-screens/k-facility.png","outputs/manual-screens/k-fission.png","outputs/manual-screens/k-home.png","outputs/manual-screens/k-member.png","outputs/manual-screens/k-sku.png","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/assets/app-action-detail.png","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/assets/app-ai-copy.png","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/assets/app-cockpit.png","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/assets/app-growth.png","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/assets/app-stores.png","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/claim-spine.txt","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/contact-sheet-plan.txt","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/design-system.txt","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/layout/slide-01.layout.json","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/layout/slide-02.layout.json","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/layout/slide-03.layout.json","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/layout/slide-04.layout.json","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/layout/slide-05.layout.json","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/layout/slide-06.layout.json","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/layout/slide-07.layout.json","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/layout/slide-08.layout.json","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/layout/slide-09.layout.json","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/layout/slide-10.layout.json","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/output/artifact-build-manifest.json","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/output/contact-sheet.png","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/output/yggdrasil-sales-rewrite.pptx","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/package.json","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/preview/slide-01.png","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/preview/slide-02.png","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/preview/slide-03.png","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/preview/slide-04.png","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/preview/slide-05.png","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/preview/slide-06.png","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/preview/slide-07.png","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/preview/slide-08.png","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/preview/slide-09.png","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/preview/slide-10.png","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/profile-plan.txt","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/slides/deck.mjs","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/slides/slide-01.mjs","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/slides/slide-02.mjs","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/slides/slide-03.mjs","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/slides/slide-04.mjs","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/slides/slide-05.mjs","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/slides/slide-06.mjs","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/slides/slide-07.mjs","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/slides/slide-08.mjs","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/slides/slide-09.mjs","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/slides/slide-10.mjs","outputs/manual-ygg-sales-rewrite/presentations/ygg-sales-rewrite/source-notes.txt","outputs/manual-ygg-sales/presentations/ygg-sales/assets/cockpit-rgb.png","outputs/manual-ygg-sales/presentations/ygg-sales/assets/cockpit.png","outputs/manual-ygg-sales/presentations/ygg-sales/package.json","outputs/moodboards/yggdrasil-campaign-trust/brand-system/yggdrasil-brand-tokens.css","outputs/moodboards/yggdrasil-campaign-trust/brand-system/yggdrasil-brand-tokens.json","outputs/moodboards/yggdrasil-campaign-trust/brand-system/尤克特拉品牌系统提取稿.md","outputs/moodboards/yggdrasil-campaign-trust/run/app.js","outputs/moodboards/yggdrasil-campaign-trust/run/assets/export-icons/figma.svg","outputs/moodboards/yggdrasil-campaign-trust/run/assets/export-icons/finder.png","outputs/moodboards/yggdrasil-campaign-trust/run/codex-theme.css","outputs/moodboards/yggdrasil-campaign-trust/run/data/runtime-config.json","outputs/moodboards/yggdrasil-campaign-trust/run/data/stream-static.json","outputs/moodboards/yggdrasil-campaign-trust/run/data/stream.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/0f0e319bb822e52a9a5f6fb8dbb3a9c4.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/13b49db34415b421a99428f36778ac65.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/3946bbaa837631734bdd5f6f4763b9df.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/79ad9f72fd69f57db5518ab2df814080.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/83a2bf2bc49dd13c2fff7ebae69326c8.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/89e9341bd957d2c93dcd2a50db56d748.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/aa8bd14eeefd1527b11be80a4caf5766.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/ab816a218b6a39f01fde317ca3c757b8.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/codex-exec-image-results.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/d64effdd3a17068470cf60295a5cfb59.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/e3162d2ec9314428a25347350c209a72.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/edcea5c7563fe2e52d2888f575c55554.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/jobs.jsonl","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/preflight/last-message.txt","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/preflight/preflight-result.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/ai-top-three-cards/attempt-1/image.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/ai-top-three-cards/attempt-1/last-message.txt","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/ai-top-three-cards/attempt-1/result.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/ai-top-three-cards/attempt-1/state.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/attribution-ledger/attempt-1/image.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/attribution-ledger/attempt-1/last-message.txt","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/attribution-ledger/attempt-1/result.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/attribution-ledger/attempt-1/state.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/campaign-prep-materials/attempt-1/image.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/campaign-prep-materials/attempt-1/last-message.txt","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/campaign-prep-materials/attempt-1/result.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/campaign-prep-materials/attempt-1/state.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/compliance-guardrail/attempt-1/image.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/compliance-guardrail/attempt-1/last-message.txt","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/compliance-guardrail/attempt-1/result.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/compliance-guardrail/attempt-1/state.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/growth-loop-still-life/attempt-1/image.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/growth-loop-still-life/attempt-1/last-message.txt","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/growth-loop-still-life/attempt-1/result.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/growth-loop-still-life/attempt-1/state.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/merchant-morning-proof/attempt-1/image.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/merchant-morning-proof/attempt-1/last-message.txt","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/merchant-morning-proof/attempt-1/result.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/merchant-morning-proof/attempt-1/state.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/multi-platform-orbit/attempt-1/last-message.txt","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/multi-platform-orbit/attempt-1/result.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/multi-platform-orbit/attempt-1/state.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/multi-platform-orbit/attempt-2/state.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/owner-decision-moment/attempt-1/image.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/owner-decision-moment/attempt-1/last-message.txt","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/owner-decision-moment/attempt-1/result.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/owner-decision-moment/attempt-1/state.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/premium-local-commerce/attempt-1/last-message.txt","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/premium-local-commerce/attempt-1/result.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/premium-local-commerce/attempt-1/state.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/premium-local-commerce/attempt-2/image.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/premium-local-commerce/attempt-2/last-message.txt","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/premium-local-commerce/attempt-2/result.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/premium-local-commerce/attempt-2/state.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/product-hero-device/attempt-1/image.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/product-hero-device/attempt-1/last-message.txt","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/product-hero-device/attempt-1/result.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/product-hero-device/attempt-1/state.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/service-detail-hands/attempt-1/last-message.txt","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/service-detail-hands/attempt-1/result.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/service-detail-hands/attempt-1/state.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/service-detail-hands/attempt-2/image.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/service-detail-hands/attempt-2/last-message.txt","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/service-detail-hands/attempt-2/result.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/service-detail-hands/attempt-2/state.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/storefront-threshold/attempt-1/image.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/storefront-threshold/attempt-1/last-message.txt","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/storefront-threshold/attempt-1/result.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/.codex-exec/ce1f8ed8051c30b3/workers/storefront-threshold/attempt-1/state.json","outputs/moodboards/yggdrasil-campaign-trust/run/generated/ai-top-three-cards.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/attribution-ledger.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/campaign-prep-materials.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/compliance-guardrail.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/growth-loop-still-life.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/mcp-thumbs/ai-top-three-cards.jpg","outputs/moodboards/yggdrasil-campaign-trust/run/generated/mcp-thumbs/attribution-ledger.jpg","outputs/moodboards/yggdrasil-campaign-trust/run/generated/mcp-thumbs/campaign-prep-materials.jpg","outputs/moodboards/yggdrasil-campaign-trust/run/generated/mcp-thumbs/compliance-guardrail.jpg","outputs/moodboards/yggdrasil-campaign-trust/run/generated/mcp-thumbs/growth-loop-still-life.jpg","outputs/moodboards/yggdrasil-campaign-trust/run/generated/mcp-thumbs/merchant-morning-proof.jpg","outputs/moodboards/yggdrasil-campaign-trust/run/generated/mcp-thumbs/owner-decision-moment.jpg","outputs/moodboards/yggdrasil-campaign-trust/run/generated/mcp-thumbs/premium-local-commerce.jpg","outputs/moodboards/yggdrasil-campaign-trust/run/generated/mcp-thumbs/product-hero-device.jpg","outputs/moodboards/yggdrasil-campaign-trust/run/generated/mcp-thumbs/service-detail-hands.jpg","outputs/moodboards/yggdrasil-campaign-trust/run/generated/mcp-thumbs/storefront-threshold.jpg","outputs/moodboards/yggdrasil-campaign-trust/run/generated/merchant-morning-proof.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/owner-decision-moment.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/premium-local-commerce.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/product-hero-device.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/service-detail-hands.png","outputs/moodboards/yggdrasil-campaign-trust/run/generated/storefront-threshold.png","outputs/moodboards/yggdrasil-campaign-trust/run/index.html","outputs/moodboards/yggdrasil-campaign-trust/run/latest-action.json","outputs/moodboards/yggdrasil-campaign-trust/run/mood-board.html","outputs/moodboards/yggdrasil-campaign-trust/run/platform-icons.js","outputs/moodboards/yggdrasil-campaign-trust/run/run-state.json","outputs/moodboards/yggdrasil-campaign-trust/run/server.mjs","outputs/moodboards/yggdrasil-campaign-trust/run/styles.css","outputs/moodboards/yggdrasil-campaign-trust/run/theme.js","outputs/moodboards/yggdrasil-campaign-trust/spec.json","outputs/playwright/baseline-desktop.png","outputs/playwright/baseline-mobile.png","outputs/playwright/ui-refresh-desktop.png","outputs/playwright/ui-refresh-mobile.png","outputs/playwright/warm-orange-desktop.png","outputs/playwright/warm-orange-mobile.png","outputs/尤克特拉产品说明书.pdf","server/prisma/migrations/20260605061301_member_profile_segment_tags/migration.sql","server/prisma/migrations/20260605071116_behavior_event_telemetry/migration.sql","server/prisma/migrations/20260605075045_behavior_ops_dims/migration.sql","server/prisma/migrations/20260605081708_booking_source_platform/migration.sql","server/prisma/migrations/20260607021000_resources_state_runs/migration.sql","server/prisma/migrations/20260607093000_add_leads_crm/migration.sql","server/prisma/migrations/20260610015718_add_order_kind/migration.sql","server/src/adapters/platform/http.ts","server/src/lib/dates.ts","server/src/lib/fission.ts","server/src/lib/state-machine.ts","server/src/modules/automation-runner/service.ts","server/src/modules/behavior/routes.ts","server/src/modules/behavior/schema.ts","server/src/modules/behavior/service.ts","server/src/modules/leads/routes.ts","server/src/modules/leads/schema.ts","server/src/modules/leads/service.ts","server/src/modules/resources/routes.ts","server/src/modules/resources/schema.ts","server/src/modules/resources/service.ts","server/src/modules/resources/state.ts","server/src/modules/suggestions/schema.ts","server/src/modules/work-calendar/routes.ts","server/src/modules/work-calendar/service.ts","server/test/contract-schema.unit.test.ts","server/test/leads.unit.test.ts","server/test/platform-connection-truth.unit.test.ts","server/test/r23-work-calendar.test.ts","server/test/r24-behavior.test.ts","server/test/r25-member-resolve.test.ts","server/test/r26-content-rbac.test.ts","server/test/r27-restaurant-live-seed.test.ts","server/test/resource-state.unit.test.ts","业务工作流图谱.md","团购本地生活AI运营App/DESIGN-SPEC-v2.md","团购本地生活AI运营App/IOS.md","团购本地生活AI运营App/android/keystore.properties.example","团购本地生活AI运营App/ios/.gitignore","团购本地生活AI运营App/ios/App/App.xcodeproj/project.pbxproj","团购本地生活AI运营App/ios/App/App.xcworkspace/contents.xcworkspacedata","团购本地生活AI运营App/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist","团购本地生活AI运营App/ios/App/App/AppDelegate.swift","团购本地生活AI运营App/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png","团购本地生活AI运营App/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json","团购本地生活AI运营App/ios/App/App/Assets.xcassets/Contents.json","团购本地生活AI运营App/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json","团购本地生活AI运营App/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png","团购本地生活AI运营App/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png","团购本地生活AI运营App/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png","团购本地生活AI运营App/ios/App/App/Base.lproj/LaunchScreen.storyboard","团购本地生活AI运营App/ios/App/App/Base.lproj/Main.storyboard","团购本地生活AI运营App/ios/App/App/Info.plist","团购本地生活AI运营App/ios/App/Podfile","团购本地生活AI运营App/ios/App/Podfile.lock","团购本地生活AI运营App/screens-behavior.jsx","团购本地生活AI运营App/screens-leads.jsx","团购本地生活AI运营App/scripts/android-deploy-check.mjs","团购本地生活AI运营App/scripts/generate-ios-assets.mjs","团购本地生活AI运营App/scripts/ios-deploy-check.mjs","团购本地生活AI运营App/设计令牌.md","尤克特拉产品说明书.md","尤克特拉项目销售手册.md","模块重复治理.md","真实链路与状态机审计矩阵.md","项目模块关系图谱.md"],"removed":["团购本地生活AI运营App/screens-home.jsx"],"modified":[".claude/launch.json",".github/workflows/ci.yml",".gitignore","e2e/tests/02-deep-flows.spec.ts","e2e/tests/03-role-matrix.spec.ts","e2e/utils/app.ts","server/.env.example","server/README.md","server/docker-compose.yml","server/docker-entrypoint.sh","server/prisma/schema.prisma","server/prisma/seed.ts","server/src/adapters/platform/index.ts","server/src/adapters/platform/mock.ts","server/src/adapters/platform/types.ts","server/src/adapters/weather/index.ts","server/src/config/env.ts","server/src/lib/context.ts","server/src/lib/money.ts","server/src/lib/platform.ts","server/src/lib/prisma.ts","server/src/modules/actions/routes.ts","server/src/modules/actions/service.ts","server/src/modules/attribution/service.ts","server/src/modules/audit/routes.ts","server/src/modules/automation/routes.ts","server/src/modules/automation/service.ts","server/src/modules/booking/routes.ts","server/src/modules/booking/schema.ts","server/src/modules/booking/service.ts","server/src/modules/briefing/service.ts","server/src/modules/compliance/routes.ts","server/src/modules/content/routes.ts","server/src/modules/content/service.ts","server/src/modules/groupbuy/routes.ts","server/src/modules/groupbuy/schema.ts","server/src/modules/groupbuy/service.ts","server/src/modules/merchant/routes.ts","server/src/modules/merchant/service.ts","server/src/modules/metrics/routes.ts","server/src/modules/metrics/service.ts","server/src/modules/ops/routes.ts","server/src/modules/ops/schema.ts","server/src/modules/ops/service.ts","server/src/modules/orders/routes.ts","server/src/modules/orders/service.ts","server/src/modules/periphery/routes.ts","server/src/modules/platforms/routes.ts","server/src/modules/platforms/service.ts","server/src/modules/pricing/service.ts","server/src/modules/referral/routes.ts","server/src/modules/referral/schema.ts","server/src/modules/referral/service.ts","server/src/modules/reviews/routes.ts","server/src/modules/reviews/service.ts","server/src/modules/skus/routes.ts","server/src/modules/skus/schema.ts","server/src/modules/store/service.ts","server/src/modules/suggestions/routes.ts","server/src/modules/suggestions/service.ts","server/src/modules/tasks/routes.ts","server/src/modules/tasks/schema.ts","server/src/modules/tasks/service.ts","server/src/modules/wallet/routes.ts","server/src/modules/wallet/schema.ts","server/src/modules/wallet/service.ts","server/src/openapi.ts","server/src/routes.ts","server/test/competitor-scan.test.ts","server/test/db-url.ts","server/test/global-setup.ts","server/test/helpers.ts","server/test/platform-adapter.unit.test.ts","server/test/r0-r1-auth.test.ts","server/test/r11-review-care.test.ts","server/test/r12-profile.test.ts","server/test/r15-pricing.test.ts","server/test/r16-platforms.test.ts","server/test/r19-referral.test.ts","server/test/r2-ops.test.ts","server/test/r20-ops.test.ts","server/test/r21-platform-ingest.test.ts","server/test/r3-growth.test.ts","server/test/r4-trust.test.ts","server/test/r8-boundary-concurrency.test.ts","server/test/setup-env.ts","团购本地生活AI运营App/ANDROID.md","团购本地生活AI运营App/README.md","团购本地生活AI运营App/WEB.md","团购本地生活AI运营App/android/.gitignore","团购本地生活AI运营App/android/app/build.gradle","团购本地生活AI运营App/api.js","团购本地生活AI运营App/app-config.js","团购本地生活AI运营App/app.jsx","团购本地生活AI运营App/capacitor.config.json","团购本地生活AI运营App/diagnosis.js","团购本地生活AI运营App/eslint.config.mjs","团购本地生活AI运营App/index.html","团购本地生活AI运营App/merchant-profiles.js","团购本地生活AI运营App/package-lock.json","团购本地生活AI运营App/package.json","团购本地生活AI运营App/screen-governance.generated.json","团购本地生活AI运营App/screens-ai.jsx","团购本地生活AI运营App/screens-compliance.jsx","团购本地生活AI运营App/screens-data.jsx","团购本地生活AI运营App/screens-decor.jsx","团购本地生活AI运营App/screens-facility.jsx","团购本地生活AI运营App/screens-fission.jsx","团购本地生活AI运营App/screens-fulfillment.jsx","团购本地生活AI运营App/screens-growth.jsx","团购本地生活AI运营App/screens-live.jsx","团购本地生活AI运营App/screens-member.jsx","团购本地生活AI运营App/screens-more.jsx","团购本地生活AI运营App/screens-ops.jsx","团购本地生活AI运营App/screens-p1.jsx","团购本地生活AI运营App/screens-p2.jsx","团购本地生活AI运营App/screens-private.jsx","团购本地生活AI运营App/screens-strategy.jsx","团购本地生活AI运营App/screens-tasks.jsx","团购本地生活AI运营App/scripts/build.mjs","团购本地生活AI运营App/scripts/screen-governance.mjs","团购本地生活AI运营App/scripts/test-static.mjs","团购本地生活AI运营App/tweaks-panel.jsx","团购本地生活AI运营App/ui.jsx","团购本地生活AI运营App/upgrades.jsx","团购本地生活AI运营App/产品诊断与优化方案.html","尤克特拉业务功能分析.md","尤克特拉商业化与融资一页纸.md"]},{"id":"734393621449932f6b8d21e09bf5f220ec998cc5","message":"fix(booking): verify 去除 validFrom 闸 — 修 r22「未来预约当场核销」被误拦\n\n5f3b333 在 verify 加了 `validFrom \u003e now → 尚未生效`,而券 validFrom=startAt。\nr22/r16 setup 对「明天的预约」当场核销时被此闸拦死 → booking 停 BOOKED、completeBooking 返回 409。\nmain verify 无此闸;去除后与 main 对齐,仅保留 validUntil 过期拦截。无测试依赖「尚未生效」。\ntsc / test:unit 通过;r22 集成待 CI 验证(本机无 DB/Docker)。\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/734393621449932f6b8d21e09bf5f220ec998cc5","author":{"name":"luojuhai","email":"luojuhai@luojuhaideMacBook-Pro.local","username":""},"committer":{"name":"luojuhai","email":"luojuhai@luojuhaideMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-07-07T13:58:42+08:00","added":[],"removed":[],"modified":["server/src/modules/booking/service.ts"]}],"total_commits":0,"head_commit":{"id":"8be066d1f0c5db776932ea77d5e0ee292bb367dd","message":"feat(platforms): 增加真实 HTTP 数据连接验收\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/8be066d1f0c5db776932ea77d5e0ee292bb367dd","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-22T02:05:46-07:00","added":["docs/platform-http-integration.md"],"removed":[],"modified":["e2e/tests/02-deep-flows.spec.ts","server/.env.example","server/src/adapters/platform/http.ts","server/src/adapters/platform/index.ts","server/src/config/env.ts","server/src/modules/platforms/routes.ts","server/src/modules/platforms/service.ts","server/src/openapi.ts","server/test/platform-adapter.unit.test.ts","server/test/r16-platforms.test.ts","团购本地生活AI运营App/api.js","团购本地生活AI运营App/screen-governance.generated.json","团购本地生活AI运营App/screens-p1.jsx","团购本地生活AI运营App/scripts/test-static.mjs","团购本地生活AI运营App/ui.jsx","团购本地生活AI运营App/upgrades.jsx","开发计划.md"]},"repository":{"id":51,"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":"yggdrasil-local-life-tools","full_name":"luoanwu/yggdrasil-local-life-tools","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":6641,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools/languages","html_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/yggdrasil-local-life-tools.git","clone_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-07-02T16:02:07+08:00","updated_at":"2026-07-14T15:54:47+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
8
|
1784712281
|
1784712493
|
0
|
1784712281
|
1784712493
|
group: ci-${{ github.ref }}
cancel-in-progress: group: ci-${{ github.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|
|
17752
|
Tighten CI workflows: Node 20, pnpm 9, lint enforc Tighten CI workflows: Node 20, pnpm 9, lint enforcement, audit gaps...
|
6
|
5
|
ci.yml
|
17673
|
5
|
0
|
refs/heads/main
|
a67a4f5bf6bede6341ed368fb3af3caec8dcd71c
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"c04c1f61a7ca64acf31ed914678656d87ed6e35f","after":"a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/c04c1f61a7ca64acf31ed914678656d87ed6e35f...a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","commits":[{"id":"a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","message":"Tighten CI workflows: Node 20, pnpm 9, lint enforcement, audit gaps\n\nAddresses the gaps surfaced in the CI/CD audit. Each change is minimal\nand validated by yamllint locally:\n\n- ci.yml: drop `|| true` from `pnpm -C backend run lint` so lint\n failures actually block CI instead of silently passing.\n- deploy.yml: bump PNPM_VERSION 8→9 to match ci.yml. The mismatch\n could cause lockfile-format drift and surprise behavior depending\n on which runner picked up the job first.\n- e2e-tests.yml + performance.yml: bump NODE_VERSION 18→20 (Node 18\n is in maintenance / EOL prep), and bump PNPM_VERSION 8→9.\n- e2e-tests.yml: bump pnpm/action-setup@v2→@v4 (4 occurrences) to\n match other workflows.\n- migration-safety.yml: fix duplicate `env:` mapping at the\n \"Create PostgreSQL extensions\" step that yamllint flagged\n (key-duplicates). The first env block's DATABASE_URL was being\n silently dropped; merged both keys into a single env block.\n- e2e-tests.yml + migration-safety.yml: add a header comment\n explaining that the literal `test_password` is a runner-local\n ephemeral PostgreSQL service-container convention, not a real\n secret. Replacing it with secrets.* would break fork-PR CI.\n- test-pipeline.yml: add a new `fullstack-alignment-audit` job\n running the four audits that were previously missing from CI:\n audit:route-contract, audit:field-payload, audit:enum-consistency,\n audit:formrules-zod. Reports uploaded as artifact.\n\nAll six edited files pass yamllint.\n\nNote: `.gitea/workflows/` does not exist — Gitea side runs no CI.\nThat's a separate decision (mirror the GitHub workflows there, or\ndeliberately keep CI on GitHub only) and is out of scope here.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","author":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-04-26T09:21:54-07:00","added":[],"removed":[],"modified":[".github/workflows/ci.yml",".github/workflows/deploy.yml",".github/workflows/e2e-tests.yml",".github/workflows/migration-safety.yml",".github/workflows/performance.yml",".github/workflows/test-pipeline.yml"]}],"total_commits":0,"head_commit":{"id":"a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","message":"Tighten CI workflows: Node 20, pnpm 9, lint enforcement, audit gaps\n\nAddresses the gaps surfaced in the CI/CD audit. Each change is minimal\nand validated by yamllint locally:\n\n- ci.yml: drop `|| true` from `pnpm -C backend run lint` so lint\n failures actually block CI instead of silently passing.\n- deploy.yml: bump PNPM_VERSION 8→9 to match ci.yml. The mismatch\n could cause lockfile-format drift and surprise behavior depending\n on which runner picked up the job first.\n- e2e-tests.yml + performance.yml: bump NODE_VERSION 18→20 (Node 18\n is in maintenance / EOL prep), and bump PNPM_VERSION 8→9.\n- e2e-tests.yml: bump pnpm/action-setup@v2→@v4 (4 occurrences) to\n match other workflows.\n- migration-safety.yml: fix duplicate `env:` mapping at the\n \"Create PostgreSQL extensions\" step that yamllint flagged\n (key-duplicates). The first env block's DATABASE_URL was being\n silently dropped; merged both keys into a single env block.\n- e2e-tests.yml + migration-safety.yml: add a header comment\n explaining that the literal `test_password` is a runner-local\n ephemeral PostgreSQL service-container convention, not a real\n secret. Replacing it with secrets.* would break fork-PR CI.\n- test-pipeline.yml: add a new `fullstack-alignment-audit` job\n running the four audits that were previously missing from CI:\n audit:route-contract, audit:field-payload, audit:enum-consistency,\n audit:formrules-zod. Reports uploaded as artifact.\n\nAll six edited files pass yamllint.\n\nNote: `.gitea/workflows/` does not exist — Gitea side runs no CI.\nThat's a separate decision (mirror the GitHub workflows there, or\ndeliberately keep CI on GitHub only) and is out of scope here.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","author":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-04-26T09:21:54-07:00","added":[],"removed":[],"modified":[".github/workflows/ci.yml",".github/workflows/deploy.yml",".github/workflows/e2e-tests.yml",".github/workflows/migration-safety.yml",".github/workflows/performance.yml",".github/workflows/test-pipeline.yml"]},"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":5218117,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":14,"open_issues_count":0,"open_pr_counter":1,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-04-27T00:13:21+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
3
|
6
|
0
|
1777221953
|
0
|
1777220520
|
1777221953
|
group: ci-${{ github.ref }}
cancel-in-progress: group: ci-${{ github.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|
|
17753
|
Tighten CI workflows: Node 20, pnpm 9, lint enforc Tighten CI workflows: Node 20, pnpm 9, lint enforcement, audit gaps...
|
6
|
5
|
e2e-tests.yml
|
17674
|
5
|
0
|
refs/heads/main
|
a67a4f5bf6bede6341ed368fb3af3caec8dcd71c
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"c04c1f61a7ca64acf31ed914678656d87ed6e35f","after":"a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/c04c1f61a7ca64acf31ed914678656d87ed6e35f...a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","commits":[{"id":"a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","message":"Tighten CI workflows: Node 20, pnpm 9, lint enforcement, audit gaps\n\nAddresses the gaps surfaced in the CI/CD audit. Each change is minimal\nand validated by yamllint locally:\n\n- ci.yml: drop `|| true` from `pnpm -C backend run lint` so lint\n failures actually block CI instead of silently passing.\n- deploy.yml: bump PNPM_VERSION 8→9 to match ci.yml. The mismatch\n could cause lockfile-format drift and surprise behavior depending\n on which runner picked up the job first.\n- e2e-tests.yml + performance.yml: bump NODE_VERSION 18→20 (Node 18\n is in maintenance / EOL prep), and bump PNPM_VERSION 8→9.\n- e2e-tests.yml: bump pnpm/action-setup@v2→@v4 (4 occurrences) to\n match other workflows.\n- migration-safety.yml: fix duplicate `env:` mapping at the\n \"Create PostgreSQL extensions\" step that yamllint flagged\n (key-duplicates). The first env block's DATABASE_URL was being\n silently dropped; merged both keys into a single env block.\n- e2e-tests.yml + migration-safety.yml: add a header comment\n explaining that the literal `test_password` is a runner-local\n ephemeral PostgreSQL service-container convention, not a real\n secret. Replacing it with secrets.* would break fork-PR CI.\n- test-pipeline.yml: add a new `fullstack-alignment-audit` job\n running the four audits that were previously missing from CI:\n audit:route-contract, audit:field-payload, audit:enum-consistency,\n audit:formrules-zod. Reports uploaded as artifact.\n\nAll six edited files pass yamllint.\n\nNote: `.gitea/workflows/` does not exist — Gitea side runs no CI.\nThat's a separate decision (mirror the GitHub workflows there, or\ndeliberately keep CI on GitHub only) and is out of scope here.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","author":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-04-26T09:21:54-07:00","added":[],"removed":[],"modified":[".github/workflows/ci.yml",".github/workflows/deploy.yml",".github/workflows/e2e-tests.yml",".github/workflows/migration-safety.yml",".github/workflows/performance.yml",".github/workflows/test-pipeline.yml"]}],"total_commits":0,"head_commit":{"id":"a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","message":"Tighten CI workflows: Node 20, pnpm 9, lint enforcement, audit gaps\n\nAddresses the gaps surfaced in the CI/CD audit. Each change is minimal\nand validated by yamllint locally:\n\n- ci.yml: drop `|| true` from `pnpm -C backend run lint` so lint\n failures actually block CI instead of silently passing.\n- deploy.yml: bump PNPM_VERSION 8→9 to match ci.yml. The mismatch\n could cause lockfile-format drift and surprise behavior depending\n on which runner picked up the job first.\n- e2e-tests.yml + performance.yml: bump NODE_VERSION 18→20 (Node 18\n is in maintenance / EOL prep), and bump PNPM_VERSION 8→9.\n- e2e-tests.yml: bump pnpm/action-setup@v2→@v4 (4 occurrences) to\n match other workflows.\n- migration-safety.yml: fix duplicate `env:` mapping at the\n \"Create PostgreSQL extensions\" step that yamllint flagged\n (key-duplicates). The first env block's DATABASE_URL was being\n silently dropped; merged both keys into a single env block.\n- e2e-tests.yml + migration-safety.yml: add a header comment\n explaining that the literal `test_password` is a runner-local\n ephemeral PostgreSQL service-container convention, not a real\n secret. Replacing it with secrets.* would break fork-PR CI.\n- test-pipeline.yml: add a new `fullstack-alignment-audit` job\n running the four audits that were previously missing from CI:\n audit:route-contract, audit:field-payload, audit:enum-consistency,\n audit:formrules-zod. Reports uploaded as artifact.\n\nAll six edited files pass yamllint.\n\nNote: `.gitea/workflows/` does not exist — Gitea side runs no CI.\nThat's a separate decision (mirror the GitHub workflows there, or\ndeliberately keep CI on GitHub only) and is out of scope here.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","author":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-04-26T09:21:54-07:00","added":[],"removed":[],"modified":[".github/workflows/ci.yml",".github/workflows/deploy.yml",".github/workflows/e2e-tests.yml",".github/workflows/migration-safety.yml",".github/workflows/performance.yml",".github/workflows/test-pipeline.yml"]},"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":5218117,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":14,"open_issues_count":0,"open_pr_counter":1,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-04-27T00:13:21+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
20
|
1777223834
|
1777223986
|
0
|
1777220520
|
1777225034
|
|
|
0
|
Edit
Delete
|
|
17755
|
Tighten CI workflows: Node 20, pnpm 9, lint enforc Tighten CI workflows: Node 20, pnpm 9, lint enforcement, audit gaps...
|
6
|
5
|
test-pipeline.yml
|
17675
|
5
|
0
|
refs/heads/main
|
a67a4f5bf6bede6341ed368fb3af3caec8dcd71c
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"c04c1f61a7ca64acf31ed914678656d87ed6e35f","after":"a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/c04c1f61a7ca64acf31ed914678656d87ed6e35f...a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","commits":[{"id":"a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","message":"Tighten CI workflows: Node 20, pnpm 9, lint enforcement, audit gaps\n\nAddresses the gaps surfaced in the CI/CD audit. Each change is minimal\nand validated by yamllint locally:\n\n- ci.yml: drop `|| true` from `pnpm -C backend run lint` so lint\n failures actually block CI instead of silently passing.\n- deploy.yml: bump PNPM_VERSION 8→9 to match ci.yml. The mismatch\n could cause lockfile-format drift and surprise behavior depending\n on which runner picked up the job first.\n- e2e-tests.yml + performance.yml: bump NODE_VERSION 18→20 (Node 18\n is in maintenance / EOL prep), and bump PNPM_VERSION 8→9.\n- e2e-tests.yml: bump pnpm/action-setup@v2→@v4 (4 occurrences) to\n match other workflows.\n- migration-safety.yml: fix duplicate `env:` mapping at the\n \"Create PostgreSQL extensions\" step that yamllint flagged\n (key-duplicates). The first env block's DATABASE_URL was being\n silently dropped; merged both keys into a single env block.\n- e2e-tests.yml + migration-safety.yml: add a header comment\n explaining that the literal `test_password` is a runner-local\n ephemeral PostgreSQL service-container convention, not a real\n secret. Replacing it with secrets.* would break fork-PR CI.\n- test-pipeline.yml: add a new `fullstack-alignment-audit` job\n running the four audits that were previously missing from CI:\n audit:route-contract, audit:field-payload, audit:enum-consistency,\n audit:formrules-zod. Reports uploaded as artifact.\n\nAll six edited files pass yamllint.\n\nNote: `.gitea/workflows/` does not exist — Gitea side runs no CI.\nThat's a separate decision (mirror the GitHub workflows there, or\ndeliberately keep CI on GitHub only) and is out of scope here.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","author":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-04-26T09:21:54-07:00","added":[],"removed":[],"modified":[".github/workflows/ci.yml",".github/workflows/deploy.yml",".github/workflows/e2e-tests.yml",".github/workflows/migration-safety.yml",".github/workflows/performance.yml",".github/workflows/test-pipeline.yml"]}],"total_commits":0,"head_commit":{"id":"a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","message":"Tighten CI workflows: Node 20, pnpm 9, lint enforcement, audit gaps\n\nAddresses the gaps surfaced in the CI/CD audit. Each change is minimal\nand validated by yamllint locally:\n\n- ci.yml: drop `|| true` from `pnpm -C backend run lint` so lint\n failures actually block CI instead of silently passing.\n- deploy.yml: bump PNPM_VERSION 8→9 to match ci.yml. The mismatch\n could cause lockfile-format drift and surprise behavior depending\n on which runner picked up the job first.\n- e2e-tests.yml + performance.yml: bump NODE_VERSION 18→20 (Node 18\n is in maintenance / EOL prep), and bump PNPM_VERSION 8→9.\n- e2e-tests.yml: bump pnpm/action-setup@v2→@v4 (4 occurrences) to\n match other workflows.\n- migration-safety.yml: fix duplicate `env:` mapping at the\n \"Create PostgreSQL extensions\" step that yamllint flagged\n (key-duplicates). The first env block's DATABASE_URL was being\n silently dropped; merged both keys into a single env block.\n- e2e-tests.yml + migration-safety.yml: add a header comment\n explaining that the literal `test_password` is a runner-local\n ephemeral PostgreSQL service-container convention, not a real\n secret. Replacing it with secrets.* would break fork-PR CI.\n- test-pipeline.yml: add a new `fullstack-alignment-audit` job\n running the four audits that were previously missing from CI:\n audit:route-contract, audit:field-payload, audit:enum-consistency,\n audit:formrules-zod. Reports uploaded as artifact.\n\nAll six edited files pass yamllint.\n\nNote: `.gitea/workflows/` does not exist — Gitea side runs no CI.\nThat's a separate decision (mirror the GitHub workflows there, or\ndeliberately keep CI on GitHub only) and is out of scope here.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","author":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-04-26T09:21:54-07:00","added":[],"removed":[],"modified":[".github/workflows/ci.yml",".github/workflows/deploy.yml",".github/workflows/e2e-tests.yml",".github/workflows/migration-safety.yml",".github/workflows/performance.yml",".github/workflows/test-pipeline.yml"]},"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":5218117,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":14,"open_issues_count":0,"open_pr_counter":1,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-04-27T00:13:21+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
3
|
25
|
0
|
1777221956
|
0
|
1777220530
|
1777221961
|
group: test-pipeline-${{ github.ref }}
cancel-in-p group: test-pipeline-${{ github.ref }}
cancel-in-progress: "true"
...
|
test-pipeline-refs/heads/main
|
1
|
Edit
Delete
|
|
17756
|
Tighten CI workflows: Node 20, pnpm 9, lint enforc Tighten CI workflows: Node 20, pnpm 9, lint enforcement, audit gaps...
|
6
|
5
|
health-check.yml
|
17677
|
-2
|
304
|
refs/heads/main
|
a67a4f5bf6bede6341ed368fb3af3caec8dcd71c
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"c04c1f61a7ca64acf31ed914678656d87ed6e35f","after":"a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/c04c1f61a7ca64acf31ed914678656d87ed6e35f...a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","commits":[{"id":"a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","message":"Tighten CI workflows: Node 20, pnpm 9, lint enforcement, audit gaps\n\nAddresses the gaps surfaced in the CI/CD audit. Each change is minimal\nand validated by yamllint locally:\n\n- ci.yml: drop `|| true` from `pnpm -C backend run lint` so lint\n failures actually block CI instead of silently passing.\n- deploy.yml: bump PNPM_VERSION 8→9 to match ci.yml. The mismatch\n could cause lockfile-format drift and surprise behavior depending\n on which runner picked up the job first.\n- e2e-tests.yml + performance.yml: bump NODE_VERSION 18→20 (Node 18\n is in maintenance / EOL prep), and bump PNPM_VERSION 8→9.\n- e2e-tests.yml: bump pnpm/action-setup@v2→@v4 (4 occurrences) to\n match other workflows.\n- migration-safety.yml: fix duplicate `env:` mapping at the\n \"Create PostgreSQL extensions\" step that yamllint flagged\n (key-duplicates). The first env block's DATABASE_URL was being\n silently dropped; merged both keys into a single env block.\n- e2e-tests.yml + migration-safety.yml: add a header comment\n explaining that the literal `test_password` is a runner-local\n ephemeral PostgreSQL service-container convention, not a real\n secret. Replacing it with secrets.* would break fork-PR CI.\n- test-pipeline.yml: add a new `fullstack-alignment-audit` job\n running the four audits that were previously missing from CI:\n audit:route-contract, audit:field-payload, audit:enum-consistency,\n audit:formrules-zod. Reports uploaded as artifact.\n\nAll six edited files pass yamllint.\n\nNote: `.gitea/workflows/` does not exist — Gitea side runs no CI.\nThat's a separate decision (mirror the GitHub workflows there, or\ndeliberately keep CI on GitHub only) and is out of scope here.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","author":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-04-26T09:21:54-07:00","added":[],"removed":[],"modified":[".github/workflows/ci.yml",".github/workflows/deploy.yml",".github/workflows/e2e-tests.yml",".github/workflows/migration-safety.yml",".github/workflows/performance.yml",".github/workflows/test-pipeline.yml"]}],"total_commits":0,"head_commit":{"id":"a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","message":"Tighten CI workflows: Node 20, pnpm 9, lint enforcement, audit gaps\n\nAddresses the gaps surfaced in the CI/CD audit. Each change is minimal\nand validated by yamllint locally:\n\n- ci.yml: drop `|| true` from `pnpm -C backend run lint` so lint\n failures actually block CI instead of silently passing.\n- deploy.yml: bump PNPM_VERSION 8→9 to match ci.yml. The mismatch\n could cause lockfile-format drift and surprise behavior depending\n on which runner picked up the job first.\n- e2e-tests.yml + performance.yml: bump NODE_VERSION 18→20 (Node 18\n is in maintenance / EOL prep), and bump PNPM_VERSION 8→9.\n- e2e-tests.yml: bump pnpm/action-setup@v2→@v4 (4 occurrences) to\n match other workflows.\n- migration-safety.yml: fix duplicate `env:` mapping at the\n \"Create PostgreSQL extensions\" step that yamllint flagged\n (key-duplicates). The first env block's DATABASE_URL was being\n silently dropped; merged both keys into a single env block.\n- e2e-tests.yml + migration-safety.yml: add a header comment\n explaining that the literal `test_password` is a runner-local\n ephemeral PostgreSQL service-container convention, not a real\n secret. Replacing it with secrets.* would break fork-PR CI.\n- test-pipeline.yml: add a new `fullstack-alignment-audit` job\n running the four audits that were previously missing from CI:\n audit:route-contract, audit:field-payload, audit:enum-consistency,\n audit:formrules-zod. Reports uploaded as artifact.\n\nAll six edited files pass yamllint.\n\nNote: `.gitea/workflows/` does not exist — Gitea side runs no CI.\nThat's a separate decision (mirror the GitHub workflows there, or\ndeliberately keep CI on GitHub only) and is out of scope here.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","author":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-04-26T09:21:54-07:00","added":[],"removed":[],"modified":[".github/workflows/ci.yml",".github/workflows/deploy.yml",".github/workflows/e2e-tests.yml",".github/workflows/migration-safety.yml",".github/workflows/performance.yml",".github/workflows/test-pipeline.yml"]},"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":5218117,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":14,"open_issues_count":0,"open_pr_counter":1,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-04-27T00:13:21+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
|
1777223993
|
1777223994
|
0
|
1777220810
|
1777223994
|
|
|
0
|
Edit
Delete
|
|
17757
|
Tighten CI workflows: Node 20, pnpm 9, lint enforc Tighten CI workflows: Node 20, pnpm 9, lint enforcement, audit gaps...
|
6
|
5
|
health-check.yml
|
17678
|
-2
|
304
|
refs/heads/main
|
a67a4f5bf6bede6341ed368fb3af3caec8dcd71c
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"c04c1f61a7ca64acf31ed914678656d87ed6e35f","after":"a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/c04c1f61a7ca64acf31ed914678656d87ed6e35f...a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","commits":[{"id":"a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","message":"Tighten CI workflows: Node 20, pnpm 9, lint enforcement, audit gaps\n\nAddresses the gaps surfaced in the CI/CD audit. Each change is minimal\nand validated by yamllint locally:\n\n- ci.yml: drop `|| true` from `pnpm -C backend run lint` so lint\n failures actually block CI instead of silently passing.\n- deploy.yml: bump PNPM_VERSION 8→9 to match ci.yml. The mismatch\n could cause lockfile-format drift and surprise behavior depending\n on which runner picked up the job first.\n- e2e-tests.yml + performance.yml: bump NODE_VERSION 18→20 (Node 18\n is in maintenance / EOL prep), and bump PNPM_VERSION 8→9.\n- e2e-tests.yml: bump pnpm/action-setup@v2→@v4 (4 occurrences) to\n match other workflows.\n- migration-safety.yml: fix duplicate `env:` mapping at the\n \"Create PostgreSQL extensions\" step that yamllint flagged\n (key-duplicates). The first env block's DATABASE_URL was being\n silently dropped; merged both keys into a single env block.\n- e2e-tests.yml + migration-safety.yml: add a header comment\n explaining that the literal `test_password` is a runner-local\n ephemeral PostgreSQL service-container convention, not a real\n secret. Replacing it with secrets.* would break fork-PR CI.\n- test-pipeline.yml: add a new `fullstack-alignment-audit` job\n running the four audits that were previously missing from CI:\n audit:route-contract, audit:field-payload, audit:enum-consistency,\n audit:formrules-zod. Reports uploaded as artifact.\n\nAll six edited files pass yamllint.\n\nNote: `.gitea/workflows/` does not exist — Gitea side runs no CI.\nThat's a separate decision (mirror the GitHub workflows there, or\ndeliberately keep CI on GitHub only) and is out of scope here.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","author":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-04-26T09:21:54-07:00","added":[],"removed":[],"modified":[".github/workflows/ci.yml",".github/workflows/deploy.yml",".github/workflows/e2e-tests.yml",".github/workflows/migration-safety.yml",".github/workflows/performance.yml",".github/workflows/test-pipeline.yml"]}],"total_commits":0,"head_commit":{"id":"a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","message":"Tighten CI workflows: Node 20, pnpm 9, lint enforcement, audit gaps\n\nAddresses the gaps surfaced in the CI/CD audit. Each change is minimal\nand validated by yamllint locally:\n\n- ci.yml: drop `|| true` from `pnpm -C backend run lint` so lint\n failures actually block CI instead of silently passing.\n- deploy.yml: bump PNPM_VERSION 8→9 to match ci.yml. The mismatch\n could cause lockfile-format drift and surprise behavior depending\n on which runner picked up the job first.\n- e2e-tests.yml + performance.yml: bump NODE_VERSION 18→20 (Node 18\n is in maintenance / EOL prep), and bump PNPM_VERSION 8→9.\n- e2e-tests.yml: bump pnpm/action-setup@v2→@v4 (4 occurrences) to\n match other workflows.\n- migration-safety.yml: fix duplicate `env:` mapping at the\n \"Create PostgreSQL extensions\" step that yamllint flagged\n (key-duplicates). The first env block's DATABASE_URL was being\n silently dropped; merged both keys into a single env block.\n- e2e-tests.yml + migration-safety.yml: add a header comment\n explaining that the literal `test_password` is a runner-local\n ephemeral PostgreSQL service-container convention, not a real\n secret. Replacing it with secrets.* would break fork-PR CI.\n- test-pipeline.yml: add a new `fullstack-alignment-audit` job\n running the four audits that were previously missing from CI:\n audit:route-contract, audit:field-payload, audit:enum-consistency,\n audit:formrules-zod. Reports uploaded as artifact.\n\nAll six edited files pass yamllint.\n\nNote: `.gitea/workflows/` does not exist — Gitea side runs no CI.\nThat's a separate decision (mirror the GitHub workflows there, or\ndeliberately keep CI on GitHub only) and is out of scope here.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","author":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-04-26T09:21:54-07:00","added":[],"removed":[],"modified":[".github/workflows/ci.yml",".github/workflows/deploy.yml",".github/workflows/e2e-tests.yml",".github/workflows/migration-safety.yml",".github/workflows/performance.yml",".github/workflows/test-pipeline.yml"]},"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":5218117,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":14,"open_issues_count":0,"open_pr_counter":1,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-04-27T00:13:21+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
|
1777223995
|
1777223995
|
0
|
1777221050
|
1777223995
|
|
|
0
|
Edit
Delete
|
|
17758
|
Tighten CI workflows: Node 20, pnpm 9, lint enforc Tighten CI workflows: Node 20, pnpm 9, lint enforcement, audit gaps...
|
6
|
5
|
health-check.yml
|
17679
|
-2
|
304
|
refs/heads/main
|
a67a4f5bf6bede6341ed368fb3af3caec8dcd71c
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"c04c1f61a7ca64acf31ed914678656d87ed6e35f","after":"a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/c04c1f61a7ca64acf31ed914678656d87ed6e35f...a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","commits":[{"id":"a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","message":"Tighten CI workflows: Node 20, pnpm 9, lint enforcement, audit gaps\n\nAddresses the gaps surfaced in the CI/CD audit. Each change is minimal\nand validated by yamllint locally:\n\n- ci.yml: drop `|| true` from `pnpm -C backend run lint` so lint\n failures actually block CI instead of silently passing.\n- deploy.yml: bump PNPM_VERSION 8→9 to match ci.yml. The mismatch\n could cause lockfile-format drift and surprise behavior depending\n on which runner picked up the job first.\n- e2e-tests.yml + performance.yml: bump NODE_VERSION 18→20 (Node 18\n is in maintenance / EOL prep), and bump PNPM_VERSION 8→9.\n- e2e-tests.yml: bump pnpm/action-setup@v2→@v4 (4 occurrences) to\n match other workflows.\n- migration-safety.yml: fix duplicate `env:` mapping at the\n \"Create PostgreSQL extensions\" step that yamllint flagged\n (key-duplicates). The first env block's DATABASE_URL was being\n silently dropped; merged both keys into a single env block.\n- e2e-tests.yml + migration-safety.yml: add a header comment\n explaining that the literal `test_password` is a runner-local\n ephemeral PostgreSQL service-container convention, not a real\n secret. Replacing it with secrets.* would break fork-PR CI.\n- test-pipeline.yml: add a new `fullstack-alignment-audit` job\n running the four audits that were previously missing from CI:\n audit:route-contract, audit:field-payload, audit:enum-consistency,\n audit:formrules-zod. Reports uploaded as artifact.\n\nAll six edited files pass yamllint.\n\nNote: `.gitea/workflows/` does not exist — Gitea side runs no CI.\nThat's a separate decision (mirror the GitHub workflows there, or\ndeliberately keep CI on GitHub only) and is out of scope here.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","author":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-04-26T09:21:54-07:00","added":[],"removed":[],"modified":[".github/workflows/ci.yml",".github/workflows/deploy.yml",".github/workflows/e2e-tests.yml",".github/workflows/migration-safety.yml",".github/workflows/performance.yml",".github/workflows/test-pipeline.yml"]}],"total_commits":0,"head_commit":{"id":"a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","message":"Tighten CI workflows: Node 20, pnpm 9, lint enforcement, audit gaps\n\nAddresses the gaps surfaced in the CI/CD audit. Each change is minimal\nand validated by yamllint locally:\n\n- ci.yml: drop `|| true` from `pnpm -C backend run lint` so lint\n failures actually block CI instead of silently passing.\n- deploy.yml: bump PNPM_VERSION 8→9 to match ci.yml. The mismatch\n could cause lockfile-format drift and surprise behavior depending\n on which runner picked up the job first.\n- e2e-tests.yml + performance.yml: bump NODE_VERSION 18→20 (Node 18\n is in maintenance / EOL prep), and bump PNPM_VERSION 8→9.\n- e2e-tests.yml: bump pnpm/action-setup@v2→@v4 (4 occurrences) to\n match other workflows.\n- migration-safety.yml: fix duplicate `env:` mapping at the\n \"Create PostgreSQL extensions\" step that yamllint flagged\n (key-duplicates). The first env block's DATABASE_URL was being\n silently dropped; merged both keys into a single env block.\n- e2e-tests.yml + migration-safety.yml: add a header comment\n explaining that the literal `test_password` is a runner-local\n ephemeral PostgreSQL service-container convention, not a real\n secret. Replacing it with secrets.* would break fork-PR CI.\n- test-pipeline.yml: add a new `fullstack-alignment-audit` job\n running the four audits that were previously missing from CI:\n audit:route-contract, audit:field-payload, audit:enum-consistency,\n audit:formrules-zod. Reports uploaded as artifact.\n\nAll six edited files pass yamllint.\n\nNote: `.gitea/workflows/` does not exist — Gitea side runs no CI.\nThat's a separate decision (mirror the GitHub workflows there, or\ndeliberately keep CI on GitHub only) and is out of scope here.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","author":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-04-26T09:21:54-07:00","added":[],"removed":[],"modified":[".github/workflows/ci.yml",".github/workflows/deploy.yml",".github/workflows/e2e-tests.yml",".github/workflows/migration-safety.yml",".github/workflows/performance.yml",".github/workflows/test-pipeline.yml"]},"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":5218117,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":14,"open_issues_count":0,"open_pr_counter":1,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-04-27T00:13:21+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
|
1777223997
|
1777223997
|
0
|
1777221350
|
1777223997
|
|
|
0
|
Edit
Delete
|
|
17759
|
Tighten CI workflows: Node 20, pnpm 9, lint enforc Tighten CI workflows: Node 20, pnpm 9, lint enforcement, audit gaps...
|
6
|
5
|
health-check.yml
|
17680
|
-2
|
304
|
refs/heads/main
|
a67a4f5bf6bede6341ed368fb3af3caec8dcd71c
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"c04c1f61a7ca64acf31ed914678656d87ed6e35f","after":"a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/c04c1f61a7ca64acf31ed914678656d87ed6e35f...a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","commits":[{"id":"a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","message":"Tighten CI workflows: Node 20, pnpm 9, lint enforcement, audit gaps\n\nAddresses the gaps surfaced in the CI/CD audit. Each change is minimal\nand validated by yamllint locally:\n\n- ci.yml: drop `|| true` from `pnpm -C backend run lint` so lint\n failures actually block CI instead of silently passing.\n- deploy.yml: bump PNPM_VERSION 8→9 to match ci.yml. The mismatch\n could cause lockfile-format drift and surprise behavior depending\n on which runner picked up the job first.\n- e2e-tests.yml + performance.yml: bump NODE_VERSION 18→20 (Node 18\n is in maintenance / EOL prep), and bump PNPM_VERSION 8→9.\n- e2e-tests.yml: bump pnpm/action-setup@v2→@v4 (4 occurrences) to\n match other workflows.\n- migration-safety.yml: fix duplicate `env:` mapping at the\n \"Create PostgreSQL extensions\" step that yamllint flagged\n (key-duplicates). The first env block's DATABASE_URL was being\n silently dropped; merged both keys into a single env block.\n- e2e-tests.yml + migration-safety.yml: add a header comment\n explaining that the literal `test_password` is a runner-local\n ephemeral PostgreSQL service-container convention, not a real\n secret. Replacing it with secrets.* would break fork-PR CI.\n- test-pipeline.yml: add a new `fullstack-alignment-audit` job\n running the four audits that were previously missing from CI:\n audit:route-contract, audit:field-payload, audit:enum-consistency,\n audit:formrules-zod. Reports uploaded as artifact.\n\nAll six edited files pass yamllint.\n\nNote: `.gitea/workflows/` does not exist — Gitea side runs no CI.\nThat's a separate decision (mirror the GitHub workflows there, or\ndeliberately keep CI on GitHub only) and is out of scope here.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","author":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-04-26T09:21:54-07:00","added":[],"removed":[],"modified":[".github/workflows/ci.yml",".github/workflows/deploy.yml",".github/workflows/e2e-tests.yml",".github/workflows/migration-safety.yml",".github/workflows/performance.yml",".github/workflows/test-pipeline.yml"]}],"total_commits":0,"head_commit":{"id":"a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","message":"Tighten CI workflows: Node 20, pnpm 9, lint enforcement, audit gaps\n\nAddresses the gaps surfaced in the CI/CD audit. Each change is minimal\nand validated by yamllint locally:\n\n- ci.yml: drop `|| true` from `pnpm -C backend run lint` so lint\n failures actually block CI instead of silently passing.\n- deploy.yml: bump PNPM_VERSION 8→9 to match ci.yml. The mismatch\n could cause lockfile-format drift and surprise behavior depending\n on which runner picked up the job first.\n- e2e-tests.yml + performance.yml: bump NODE_VERSION 18→20 (Node 18\n is in maintenance / EOL prep), and bump PNPM_VERSION 8→9.\n- e2e-tests.yml: bump pnpm/action-setup@v2→@v4 (4 occurrences) to\n match other workflows.\n- migration-safety.yml: fix duplicate `env:` mapping at the\n \"Create PostgreSQL extensions\" step that yamllint flagged\n (key-duplicates). The first env block's DATABASE_URL was being\n silently dropped; merged both keys into a single env block.\n- e2e-tests.yml + migration-safety.yml: add a header comment\n explaining that the literal `test_password` is a runner-local\n ephemeral PostgreSQL service-container convention, not a real\n secret. Replacing it with secrets.* would break fork-PR CI.\n- test-pipeline.yml: add a new `fullstack-alignment-audit` job\n running the four audits that were previously missing from CI:\n audit:route-contract, audit:field-payload, audit:enum-consistency,\n audit:formrules-zod. Reports uploaded as artifact.\n\nAll six edited files pass yamllint.\n\nNote: `.gitea/workflows/` does not exist — Gitea side runs no CI.\nThat's a separate decision (mirror the GitHub workflows there, or\ndeliberately keep CI on GitHub only) and is out of scope here.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","author":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-04-26T09:21:54-07:00","added":[],"removed":[],"modified":[".github/workflows/ci.yml",".github/workflows/deploy.yml",".github/workflows/e2e-tests.yml",".github/workflows/migration-safety.yml",".github/workflows/performance.yml",".github/workflows/test-pipeline.yml"]},"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":5218117,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":14,"open_issues_count":0,"open_pr_counter":1,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-04-27T00:13:21+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
|
1777223999
|
1777223999
|
0
|
1777221650
|
1777223999
|
|
|
0
|
Edit
Delete
|
|
17761
|
Tighten CI workflows: Node 20, pnpm 9, lint enforc Tighten CI workflows: Node 20, pnpm 9, lint enforcement, audit gaps...
|
6
|
5
|
health-check.yml
|
17682
|
-2
|
304
|
refs/heads/main
|
a67a4f5bf6bede6341ed368fb3af3caec8dcd71c
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"c04c1f61a7ca64acf31ed914678656d87ed6e35f","after":"a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/c04c1f61a7ca64acf31ed914678656d87ed6e35f...a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","commits":[{"id":"a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","message":"Tighten CI workflows: Node 20, pnpm 9, lint enforcement, audit gaps\n\nAddresses the gaps surfaced in the CI/CD audit. Each change is minimal\nand validated by yamllint locally:\n\n- ci.yml: drop `|| true` from `pnpm -C backend run lint` so lint\n failures actually block CI instead of silently passing.\n- deploy.yml: bump PNPM_VERSION 8→9 to match ci.yml. The mismatch\n could cause lockfile-format drift and surprise behavior depending\n on which runner picked up the job first.\n- e2e-tests.yml + performance.yml: bump NODE_VERSION 18→20 (Node 18\n is in maintenance / EOL prep), and bump PNPM_VERSION 8→9.\n- e2e-tests.yml: bump pnpm/action-setup@v2→@v4 (4 occurrences) to\n match other workflows.\n- migration-safety.yml: fix duplicate `env:` mapping at the\n \"Create PostgreSQL extensions\" step that yamllint flagged\n (key-duplicates). The first env block's DATABASE_URL was being\n silently dropped; merged both keys into a single env block.\n- e2e-tests.yml + migration-safety.yml: add a header comment\n explaining that the literal `test_password` is a runner-local\n ephemeral PostgreSQL service-container convention, not a real\n secret. Replacing it with secrets.* would break fork-PR CI.\n- test-pipeline.yml: add a new `fullstack-alignment-audit` job\n running the four audits that were previously missing from CI:\n audit:route-contract, audit:field-payload, audit:enum-consistency,\n audit:formrules-zod. Reports uploaded as artifact.\n\nAll six edited files pass yamllint.\n\nNote: `.gitea/workflows/` does not exist — Gitea side runs no CI.\nThat's a separate decision (mirror the GitHub workflows there, or\ndeliberately keep CI on GitHub only) and is out of scope here.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","author":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-04-26T09:21:54-07:00","added":[],"removed":[],"modified":[".github/workflows/ci.yml",".github/workflows/deploy.yml",".github/workflows/e2e-tests.yml",".github/workflows/migration-safety.yml",".github/workflows/performance.yml",".github/workflows/test-pipeline.yml"]}],"total_commits":0,"head_commit":{"id":"a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","message":"Tighten CI workflows: Node 20, pnpm 9, lint enforcement, audit gaps\n\nAddresses the gaps surfaced in the CI/CD audit. Each change is minimal\nand validated by yamllint locally:\n\n- ci.yml: drop `|| true` from `pnpm -C backend run lint` so lint\n failures actually block CI instead of silently passing.\n- deploy.yml: bump PNPM_VERSION 8→9 to match ci.yml. The mismatch\n could cause lockfile-format drift and surprise behavior depending\n on which runner picked up the job first.\n- e2e-tests.yml + performance.yml: bump NODE_VERSION 18→20 (Node 18\n is in maintenance / EOL prep), and bump PNPM_VERSION 8→9.\n- e2e-tests.yml: bump pnpm/action-setup@v2→@v4 (4 occurrences) to\n match other workflows.\n- migration-safety.yml: fix duplicate `env:` mapping at the\n \"Create PostgreSQL extensions\" step that yamllint flagged\n (key-duplicates). The first env block's DATABASE_URL was being\n silently dropped; merged both keys into a single env block.\n- e2e-tests.yml + migration-safety.yml: add a header comment\n explaining that the literal `test_password` is a runner-local\n ephemeral PostgreSQL service-container convention, not a real\n secret. Replacing it with secrets.* would break fork-PR CI.\n- test-pipeline.yml: add a new `fullstack-alignment-audit` job\n running the four audits that were previously missing from CI:\n audit:route-contract, audit:field-payload, audit:enum-consistency,\n audit:formrules-zod. Reports uploaded as artifact.\n\nAll six edited files pass yamllint.\n\nNote: `.gitea/workflows/` does not exist — Gitea side runs no CI.\nThat's a separate decision (mirror the GitHub workflows there, or\ndeliberately keep CI on GitHub only) and is out of scope here.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/a67a4f5bf6bede6341ed368fb3af3caec8dcd71c","author":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@luoguoguodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-04-26T09:21:54-07:00","added":[],"removed":[],"modified":[".github/workflows/ci.yml",".github/workflows/deploy.yml",".github/workflows/e2e-tests.yml",".github/workflows/migration-safety.yml",".github/workflows/performance.yml",".github/workflows/test-pipeline.yml"]},"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":5218117,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":14,"open_issues_count":0,"open_pr_counter":1,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-04-27T00:13:21+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
|
1777224039
|
1777224039
|
0
|
1777221950
|
1777224039
|
|
|
0
|
Edit
Delete
|
|
23471
|
修复局域网访问后端地址解析
|
51
|
5
|
ci.yml
|
9
|
8
|
0
|
refs/heads/main
|
092acb7eb779cf4d784a4aec60f834e797be7e46
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"bef7116148fe61f8cba8207bd921d296cb01883d","after":"092acb7eb779cf4d784a4aec60f834e797be7e46","compare_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/compare/bef7116148fe61f8cba8207bd921d296cb01883d...092acb7eb779cf4d784a4aec60f834e797be7e46","commits":[{"id":"092acb7eb779cf4d784a4aec60f834e797be7e46","message":"修复局域网访问后端地址解析\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/092acb7eb779cf4d784a4aec60f834e797be7e46","author":{"name":"chenjunfeng","email":"developer.jeff.c@gmail.com","username":""},"committer":{"name":"chenjunfeng","email":"developer.jeff.c@gmail.com","username":""},"verification":null,"timestamp":"2026-07-31T15:45:54+08:00","added":[],"removed":[],"modified":["团购本地生活AI运营App/app-config.js","团购本地生活AI运营App/index.html","团购本地生活AI运营App/scripts/test-static.mjs"]}],"total_commits":0,"head_commit":{"id":"092acb7eb779cf4d784a4aec60f834e797be7e46","message":"修复局域网访问后端地址解析\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/092acb7eb779cf4d784a4aec60f834e797be7e46","author":{"name":"chenjunfeng","email":"developer.jeff.c@gmail.com","username":""},"committer":{"name":"chenjunfeng","email":"developer.jeff.c@gmail.com","username":""},"verification":null,"timestamp":"2026-07-31T15:45:54+08:00","added":[],"removed":[],"modified":["团购本地生活AI运营App/app-config.js","团购本地生活AI运营App/index.html","团购本地生活AI运营App/scripts/test-static.mjs"]},"repository":{"id":51,"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":"yggdrasil-local-life-tools","full_name":"luoanwu/yggdrasil-local-life-tools","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":87443,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools/languages","html_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/yggdrasil-local-life-tools.git","clone_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-07-02T16:02:07+08:00","updated_at":"2026-07-31T15:27:05+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":8,"login":"chenjunfeng","login_name":"","source_id":0,"full_name":"","email":"8+chenjunfeng@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/2c6398f22eba2ea6d8f403921eea0967","html_url":"https://gitea.g-hi.com/chenjunfeng","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-03-09T13:22:40+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"chenjunfeng"},"sender":{"id":8,"login":"chenjunfeng","login_name":"","source_id":0,"full_name":"","email":"8+chenjunfeng@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/2c6398f22eba2ea6d8f403921eea0967","html_url":"https://gitea.g-hi.com/chenjunfeng","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-03-09T13:22:40+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"chenjunfeng"}}...
|
push
|
2
|
8
|
1785483987
|
1785484110
|
0
|
1785483985
|
1785484110
|
group: ci-${{ github.ref }}
cancel-in-progress: group: ci-${{ github.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|