|
1953
|
3
|
14
|
1
|
18
|
39
|
0
|
|
0
|
88|
|
1778573638
|
Edit
Delete
|
|
1954
|
7
|
14
|
1
|
18
|
39
|
0
|
|
0
|
88|
|
1778573638
|
Edit
Delete
|
|
1955
|
8
|
14
|
1
|
18
|
39
|
0
|
|
0
|
88|
|
1778573638
|
Edit
Delete
|
|
1956
|
10
|
14
|
1
|
18
|
39
|
0
|
|
0
|
88|
|
1778573638
|
Edit
Delete
|
|
1957
|
11
|
14
|
1
|
18
|
39
|
0
|
|
0
|
88|
|
1778573638
|
Edit
Delete
|
|
1958
|
1
|
14
|
1
|
18
|
40
|
0
|
|
0
|
7|
|
1778573645
|
Edit
Delete
|
|
1959
|
9
|
14
|
1
|
18
|
40
|
0
|
|
0
|
7|
|
1778573645
|
Edit
Delete
|
|
1960
|
3
|
14
|
1
|
18
|
40
|
0
|
|
0
|
7|
|
1778573645
|
Edit
Delete
|
|
1961
|
7
|
14
|
1
|
18
|
40
|
0
|
|
0
|
7|
|
1778573645
|
Edit
Delete
|
|
1962
|
8
|
14
|
1
|
18
|
40
|
0
|
|
0
|
7|
|
1778573645
|
Edit
Delete
|
|
1963
|
10
|
14
|
1
|
18
|
40
|
0
|
|
0
|
7|
|
1778573645
|
Edit
Delete
|
|
1964
|
11
|
14
|
1
|
18
|
40
|
0
|
|
0
|
7|
|
1778573645
|
Edit
Delete
|
|
1965
|
1
|
14
|
1
|
18
|
41
|
0
|
|
0
|
87|
|
1778573646
|
Edit
Delete
|
|
1966
|
9
|
14
|
1
|
18
|
41
|
0
|
|
0
|
87|
|
1778573646
|
Edit
Delete
|
|
1967
|
3
|
14
|
1
|
18
|
41
|
0
|
|
0
|
87|
|
1778573646
|
Edit
Delete
|
|
1968
|
7
|
14
|
1
|
18
|
41
|
0
|
|
0
|
87|
|
1778573646
|
Edit
Delete
|
|
1969
|
8
|
14
|
1
|
18
|
41
|
0
|
|
0
|
87|
|
1778573646
|
Edit
Delete
|
|
1970
|
10
|
14
|
1
|
18
|
41
|
0
|
|
0
|
87|
|
1778573646
|
Edit
Delete
|
|
1971
|
11
|
14
|
1
|
18
|
41
|
0
|
|
0
|
87|
|
1778573646
|
Edit
Delete
|
|
1972
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"cf8ca525a {"Commits":[{"Sha1":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","Message":"Refresh outbox atomicity audit report\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-11T09:43:33-07:00"},{"Sha1":"6fda10921d20ba6f6dd1594727c9f38a6f10af2e","Message":"Update migration governance and deploy gate\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-11T08:19:05-07:00"},{"Sha1":"31f7c23c6c02ab971f239702e6379e1cce991ae7","Message":"Update backbone evidence and review queue contracts\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-11T07:30:02-07:00"},{"Sha1":"fb31eb4edf1efdac80568bb37a05d8003d6ad876","Message":"Enable pg_stat_statements and harden port checks\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-10T06:18:40-07:00"},{"Sha1":"da6251405efb0c4825f1305efcb1f17d8d931349","Message":"Remove broken stray submodule entries from .claude/worktrees\n\n历史 commit 1f8ccb4bb 误把 4 个临时 worktree 目录作为 gitlink (mode 160000)\n登记进 index,但既无 .gitmodules 配置也无对应 .git 文件,是破损 submodule。\n本提交从 index 移除这 4 项,恢复 .claude/worktrees/ 仅承载真实 git worktree\n的状态。本地目录保留为空占位,不影响日常 worktree 创建与清理。\n\nRemoved:\n- .claude/worktrees/amazing-bhaskara-130540\n- .claude/worktrees/epic-jang\n- .claude/worktrees/hungry-montalcini-932ea7\n- .claude/worktrees/magical-blackburn\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-10T06:01:11-07:00"}],"HeadCommit":{"Sha1":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","Message":"Refresh outbox atomicity audit report\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-11T09:43:33-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/468c7319f39e251cdf8eb96c3aa63f4db200a7db...cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","Len":353}...
|
1778598486
|
Edit
Delete
|
|
1973
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/claude/crazy-elbakyan-b674fa
|
0
|
|
1778624145
|
Edit
Delete
|
|
1974
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/claude/crazy-elbakyan-b674fa
|
0
|
{"Commits":[],"HeadCommit":{"S {"Commits":[],"HeadCommit":{"Sha1":"cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","Message":"Refresh outbox atomicity audit report\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-11T09:43:33-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/main...cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a","Len":0}...
|
1778624145
|
Edit
Delete
|
|
1975
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/claude/priceless-carson-04e20a
|
0
|
|
1778624230
|
Edit
Delete
|
|
1976
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/claude/priceless-carson-04e20a
|
0
|
{"Commits":[{"Sha1":"501c3efd5 {"Commits":[{"Sha1":"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","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-12T00:10:59-07:00"},{"Sha1":"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","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-11T23:25:10-07:00"},{"Sha1":"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","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-11T18:42:55-07:00"},{"Sha1":"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","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-11T18:38:51-07:00"},{"Sha1":"8646d3b729bb6681e134c2dc5b21056b741e7aae","Message":"fix(ci): 修复依赖安全 + Prisma 验证 + 性能基准 + Playwright 安装\n\n- 依赖安全扫描:\n - axios 1.6.3 → 1.15.2 (3 个 package)\n - @opentelemetry/auto-instrumentations-node 0.71 → 0.75\n - @opentelemetry/sdk-node + exporter-trace-otlp-http 0.213 → 0.217\n - mobile vite-plugin-pwa 0.17.4 → 1.0\n - pnpm overrides 加 protobufjs/fast-uri/fast-xml-builder/babel-transform 强制升级\n - workflow 过滤 xlsx GHSA-4r6h-8v6p-xvw6 / GHSA-5pgg-2g8v-p4x9\n (SheetJS 已迁出 npm,等 owner 决定迁移到 exceljs)\n- 后端静态检查:Prisma Schema 验证 + 生成 Client 步骤补 DATABASE_URL/DIRECT_URL\n- 📊 API 基准测试 + 负载 + 压力:build → build:fast(esbuild),避免 tsc OOM\n- pr-validation E2E: npx playwright install → pnpm --filter @juhi/e2e exec playwright\n\nLocal verify: pnpm audit --audit-level high → 0 blocking advisories\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-11T18:20:11-07:00"}],"HeadCommit":{"Sha1":"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","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-12T00:10:59-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/24c2c0d6c3340c8e14544240c340e83a759c4eba...501c3efd550add8ef7a9b2a306f4641141eabec8","Len":5}...
|
1778624230
|
Edit
Delete
|
|
1977
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/claude/zen-tharp-b03a6f
|
0
|
|
1778624231
|
Edit
Delete
|
|
1978
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/claude/zen-tharp-b03a6f
|
0
|
{"Commits":[{"Sha1":"75c32172a {"Commits":[{"Sha1":"75c32172af80b8afc83b0c684b9d65fba5cf9d7e","Message":"Add tenantCode field with quick switch to login page\n\n- Promote tenantCode from hidden form payload to visible required input as\n the first field, defaulted to `JUHI` (or `VITE_TENANT_CODE` env override).\n- Auto-uppercase and strip non `[A-Z0-9_-]` chars on input, matching the\n case-sensitive seed convention.\n- Required validation, max 50 chars, and pattern guard.\n- Dev-only quick-switch chips for the seeded tenants (`JUHI`, `E2E_A`,\n `E2E_B`) sourced from `E2E_TENANTS` so devs can flip tenants in one click\n without retyping.\n\nVerified end-to-end via Vite dev preview: default render shows the new\nfield with `JUHI` prefilled, chip switching updates the value, lowercase\ninput normalizes to uppercase, and login still succeeds against the live\nbackend.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-11T17:08:23-07:00"},{"Sha1":"596389b5aeb675885405569942e57d2879305d55","Message":"Document required tenantCode for default admin login\n\nThe default admin login requires `tenantCode: JUHI` (case-sensitive). Without it,\ndirect `/v1/auth/login` calls return `E1001 tenant not found`, which has been\nmisdiagnosed as a database failure during fresh dev startups.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-10T06:25:52-07:00"}],"HeadCommit":{"Sha1":"75c32172af80b8afc83b0c684b9d65fba5cf9d7e","Message":"Add tenantCode field with quick switch to login page\n\n- Promote tenantCode from hidden form payload to visible required input as\n the first field, defaulted to `JUHI` (or `VITE_TENANT_CODE` env override).\n- Auto-uppercase and strip non `[A-Z0-9_-]` chars on input, matching the\n case-sensitive seed convention.\n- Required validation, max 50 chars, and pattern guard.\n- Dev-only quick-switch chips for the seeded tenants (`JUHI`, `E2E_A`,\n `E2E_B`) sourced from `E2E_TENANTS` so devs can flip tenants in one click\n without retyping.\n\nVerified end-to-end via Vite dev preview: default render shows the new\nfield with `JUHI` prefilled, chip switching updates the value, lowercase\ninput normalizes to uppercase, and login still succeeds against the live\nbackend.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-11T17:08:23-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...75c32172af80b8afc83b0c684b9d65fba5cf9d7e","Len":2}...
|
1778624231
|
Edit
Delete
|
|
1979
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/codex/pr-50-ci-fix
|
0
|
|
1778624233
|
Edit
Delete
|
|
1980
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/codex/pr-50-ci-fix
|
0
|
{"Commits":[],"HeadCommit":{"S {"Commits":[],"HeadCommit":{"Sha1":"85cd40595e2c98d260cdd65cf2d7dd0f4d4fdd01","Message":"ci: stabilize PR validation gates\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-11T17:32:16-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/main...85cd40595e2c98d260cdd65cf2d7dd0f4d4fdd01","Len":0}...
|
1778624233
|
Edit
Delete
|
|
1981
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/codex/pr-50-ci-followup
|
0
|
|
1778624233
|
Edit
Delete
|
|
1982
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/codex/pr-50-ci-followup
|
0
|
{"Commits":[],"HeadCommit":{"S {"Commits":[],"HeadCommit":{"Sha1":"24c2c0d6c3340c8e14544240c340e83a759c4eba","Message":"ci: harden validation workflows\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-11T18:11:29-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/main...24c2c0d6c3340c8e14544240c340e83a759c4eba","Len":0}...
|
1778624233
|
Edit
Delete
|
|
1983
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"534799e0b {"Commits":[{"Sha1":"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","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-12T15:26:28-07:00"},{"Sha1":"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","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-12T00:10:59-07:00"},{"Sha1":"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","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-11T23:25:10-07:00"},{"Sha1":"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","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-11T18:42:55-07:00"},{"Sha1":"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","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-11T18:38:51-07:00"}],"HeadCommit":{"Sha1":"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","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-12T15:26:28-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/cf8ca525a24f7e8f7f02481cf1c6e72f68c3788a...534799e0b1707368df37aff7b3df545a6ca1064a","Len":31}...
|
1778624985
|
Edit
Delete
|
|
1984
|
5
|
17
|
5
|
6
|
0
|
0
|
refs/heads/chore/outbox-d-class-audit
|
0
|
|
1778625302
|
Edit
Delete
|
|
1985
|
5
|
17
|
5
|
6
|
0
|
0
|
refs/heads/chore/release-rollback-orchestrator
|
0
|
|
1778625302
|
Edit
Delete
|
|
1986
|
5
|
17
|
5
|
6
|
0
|
0
|
refs/heads/claude/fervent-kirch-e2a254
|
0
|
|
1778625303
|
Edit
Delete
|
|
1987
|
5
|
14
|
5
|
6
|
42
|
0
|
|
0
|
3|
|
1778625303
|
Edit
Delete
|
|
1988
|
5
|
17
|
5
|
6
|
0
|
0
|
refs/heads/claude/priceless-carson-04e20a
|
0
|
|
1778625303
|
Edit
Delete
|
|
1989
|
5
|
17
|
5
|
6
|
0
|
0
|
refs/heads/claude/zen-tharp-b03a6f
|
0
|
|
1778625303
|
Edit
Delete
|
|
1990
|
5
|
17
|
5
|
6
|
0
|
0
|
refs/heads/codex-ai-assist-action-packs
|
0
|
|
1778625303
|
Edit
Delete
|
|
1991
|
5
|
17
|
5
|
6
|
0
|
0
|
refs/heads/codex-module-detail-closure-governance
|
0
|
|
1778625303
|
Edit
Delete
|
|
1992
|
5
|
17
|
5
|
6
|
0
|
0
|
refs/heads/codex/finance-mainline-gitea-main-20260 refs/heads/codex/finance-mainline-gitea-main-20260331...
|
0
|
|
1778625303
|
Edit
Delete
|
|
1993
|
5
|
14
|
5
|
6
|
44
|
0
|
|
0
|
1|
|
1778625303
|
Edit
Delete
|
|
1994
|
5
|
17
|
5
|
6
|
0
|
0
|
refs/heads/codex/finance-smoke-sync-20260331
|
0
|
|
1778625303
|
Edit
Delete
|
|
1995
|
5
|
17
|
5
|
6
|
0
|
0
|
refs/heads/codex/pr-50-ci-fix
|
0
|
|
1778625303
|
Edit
Delete
|
|
1996
|
5
|
17
|
5
|
6
|
0
|
0
|
refs/heads/codex/pr-50-ci-followup
|
0
|
|
1778625303
|
Edit
Delete
|
|
1997
|
5
|
17
|
5
|
6
|
0
|
0
|
refs/heads/codex/push-recovery-20260328
|
0
|
|
1778625303
|
Edit
Delete
|
|
1998
|
5
|
17
|
5
|
6
|
0
|
0
|
refs/heads/docs/base-service-atomicity-rfc
|
0
|
|
1778625303
|
Edit
Delete
|
|
1999
|
5
|
17
|
5
|
6
|
0
|
0
|
refs/heads/docs/q2-2026-landing-plan
|
0
|
|
1778625303
|
Edit
Delete
|
|
2000
|
5
|
17
|
5
|
6
|
0
|
0
|
refs/heads/docs/sprint-1-retro
|
0
|
|
1778625303
|
Edit
Delete
|
|
2001
|
5
|
17
|
5
|
6
|
0
|
0
|
refs/heads/docs/tx-bound-write-samples
|
0
|
|
1778625303
|
Edit
Delete
|
|
2002
|
5
|
17
|
5
|
6
|
0
|
0
|
refs/heads/feat/api-tests-bom-crud
|
0
|
|
1778625303
|
Edit
Delete
|