|
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
|
|
1981
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/codex/pr-50-ci-followup
|
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
|
|
1979
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/codex/pr-50-ci-fix
|
0
|
|
1778624233
|
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
|
|
1977
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/claude/zen-tharp-b03a6f
|
0
|
|
1778624231
|
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
|
|
1975
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/claude/priceless-carson-04e20a
|
0
|
|
1778624230
|
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
|
|
1973
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/claude/crazy-elbakyan-b674fa
|
0
|
|
1778624145
|
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
|
|
1527
|
5
|
23
|
-2
|
6
|
36
|
0
|
|
0
|
2|## ✅ Test Pipeline 质量门禁
| 检查项 | 状态 |
|--------| 2|## ✅ Test Pipeline 质量门禁
| 检查项 | 状态 |
|--------|------|
| 后端构建 | ⏭️ |
| 前端构建 | ⏭️ |
| 后端单元测试 | ⏭️ |
| 后端 API 测试 | ⏭️ |
| 前端单元测试 | ⏭️ |
| 状态机测试 | ⏭️ |
|…...
|
1777609989
|
Edit
Delete
|
|
1525
|
5
|
23
|
-2
|
6
|
35
|
0
|
|
0
|
3|## ✅ Test Pipeline 质量门禁
| 检查项 | 状态 |
|--------| 3|## ✅ Test Pipeline 质量门禁
| 检查项 | 状态 |
|--------|------|
| 后端构建 | ⏭️ |
| 前端构建 | ⏭️ |
| 后端单元测试 | ⏭️ |
| 后端 API 测试 | ⏭️ |
| 前端单元测试 | ⏭️ |
| 状态机测试 | ⏭️ |
|…...
|
1777609986
|
Edit
Delete
|
|
1523
|
5
|
23
|
-2
|
6
|
34
|
0
|
|
0
|
2|❌ E2E 测试失败,请查看报告
|
1777597699
|
Edit
Delete
|
|
1521
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/codex/merge-all-20260429
|
0
|
{"Commits":[{"Sha1":"6845ebac5 {"Commits":[{"Sha1":"6845ebac54cb057c62116944a21c3a04b78708bf","Message":"Remove stale Claude worktree reference\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-30T18:05:48-07:00"}],"HeadCommit":{"Sha1":"6845ebac54cb057c62116944a21c3a04b78708bf","Message":"Remove stale Claude worktree reference\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-30T18:05:48-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/00e6c41c98f5eca066cac8efd4dc9e91dfe5f583...6845ebac54cb057c62116944a21c3a04b78708bf","Len":1}...
|
1777597561
|
Edit
Delete
|
|
1520
|
5
|
7
|
5
|
6
|
0
|
0
|
|
0
|
3|claude/fervent-kirch-e2a254 -> origin/claude/ 3|claude/fervent-kirch-e2a254 -> origin/claude/fervent-kirch-e2a254...
|
1777597468
|
Edit
Delete
|
|
1519
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/claude/fervent-kirch-e2a254
|
0
|
{"Commits":[],"HeadCommit":{"S {"Commits":[],"HeadCommit":{"Sha1":"468c7319f39e251cdf8eb96c3aa63f4db200a7db","Message":"Remove stale governance and docs debt\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T19:49:07-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/main...468c7319f39e251cdf8eb96c3aa63f4db200a7db","Len":0}...
|
1777597306
|
Edit
Delete
|
|
1518
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/claude/fervent-kirch-e2a254
|
0
|
|
1777597306
|
Edit
Delete
|
|
1517
|
5
|
23
|
-2
|
6
|
32
|
0
|
|
0
|
2|## ✅ Test Pipeline 质量门禁
| 检查项 | 状态 |
|--------| 2|## ✅ Test Pipeline 质量门禁
| 检查项 | 状态 |
|--------|------|
| 后端构建 | ⏭️ |
| 前端构建 | ⏭️ |
| 后端单元测试 | ⏭️ |
| 后端 API 测试 | ⏭️ |
| 前端单元测试 | ⏭️ |
| 状态机测试 | ⏭️ |
|…...
|
1777545611
|
Edit
Delete
|
|
1515
|
5
|
23
|
-2
|
6
|
31
|
0
|
|
0
|
2|❌ E2E 测试失败,请查看报告
|
1777531865
|
Edit
Delete
|
|
1513
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/codex/merge-all-20260429
|
0
|
{"Commits":[{"Sha1":"00e6c41c9 {"Commits":[{"Sha1":"00e6c41c98f5eca066cac8efd4dc9e91dfe5f583","Message":"Remove obsolete codepaths and cleanup docs\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-29T23:47:02-07:00"},{"Sha1":"9e1d5a6c3dbd44be8511d85e0eb7c7a9c5ad7683","Message":"test: 更新通知规则路由治理口径\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-29T20:01:55-07:00"}],"HeadCommit":{"Sha1":"00e6c41c98f5eca066cac8efd4dc9e91dfe5f583","Message":"Remove obsolete codepaths and cleanup docs\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-29T23:47:02-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/982b47544d9cefb513875cc84c6c36bf1ee27fb2...00e6c41c98f5eca066cac8efd4dc9e91dfe5f583","Len":2}...
|
1777531651
|
Edit
Delete
|
|
1498
|
5
|
23
|
-2
|
6
|
29
|
0
|
|
0
|
2|## ✅ Test Pipeline 质量门禁
| 检查项 | 状态 |
|--------| 2|## ✅ Test Pipeline 质量门禁
| 检查项 | 状态 |
|--------|------|
| 后端构建 | ⏭️ |
| 前端构建 | ⏭️ |
| 后端单元测试 | ⏭️ |
| 后端 API 测试 | ⏭️ |
| 前端单元测试 | ⏭️ |
| 状态机测试 | ⏭️ |
|…...
|
1777522437
|
Edit
Delete
|
|
1496
|
5
|
7
|
5
|
6
|
0
|
0
|
|
0
|
2|Encode DB credentials in synced local env URLs
|
1777515697
|
Edit
Delete
|
|
1495
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/codex/merge-all-20260429
|
0
|
{"Commits":[{"Sha1":"982b47544 {"Commits":[{"Sha1":"982b47544d9cefb513875cc84c6c36bf1ee27fb2","Message":"chore: 提交合并后全量变更\n\n- 后端:修复 marketing-workflow、predictive-analytics、attribution-config、event service 及 store events 常量\n- 前端:更新 contract-templates 全套视图、notification-configs、AI review queue、AppLayout、路由模块(hr/stores/supplemental)、IM 连接 store 及 API client\n- E2E:清理 test-results / playwright-report 临时产物,更新 deep-actions spec 与 menu 快照\n- Reports:更新 full-menu-write-batches 及各中心 batch-state / visible-menu-snapshot,删除过期 probe JSON 与 action-coverage-report\n- 配置:更新 .claude/settings.json 与 scripts/start-all.sh\n\nCo-Authored-By: Claude Sonnet 4.6 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-29T19:19:19-07:00"},{"Sha1":"d93e94d57ded982fc336e55c8eb5d2b47d7eb4fc","Message":"fix: 修正 audit-logs 路由组件路径至 admin 子目录\n\nCo-Authored-By: Claude Sonnet 4.6 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T20:41:25-07:00"},{"Sha1":"1706e651ce927b130f1136d6ff32a29debd3fccc","Message":"chore: clean merged historical whitespace\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T20:35:13-07:00"},{"Sha1":"0dd1f4ab033a35901ca026a00c96792f4c98b0e3","Message":"Merge remote-tracking branch 'origin/codex/push-recovery-20260328' into codex/merge-all-20260429\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T20:22:10-07:00"},{"Sha1":"39f8d7a4e36017af676886bdca1fd69fbf379ced","Message":"Merge remote-tracking branch 'origin/codex/finance-smoke-sync-20260331' into codex/merge-all-20260429\n\n# Conflicts:\n#\tbackend/prisma/manual-scripts/migration.sql\n#\te2e/playwright-report/index.html\n#\te2e/test-results/.last-run.json\n#\te2e/test-results/results.json\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T20:21:04-07:00"}],"HeadCommit":{"Sha1":"982b47544d9cefb513875cc84c6c36bf1ee27fb2","Message":"chore: 提交合并后全量变更\n\n- 后端:修复 marketing-workflow、predictive-analytics、attribution-config、event service 及 store events 常量\n- 前端:更新 contract-templates 全套视图、notification-configs、AI review queue、AppLayout、路由模块(hr/stores/supplemental)、IM 连接 store 及 API client\n- E2E:清理 test-results / playwright-report 临时产物,更新 deep-actions spec 与 menu 快照\n- Reports:更新 full-menu-write-batches 及各中心 batch-state / visible-menu-snapshot,删除过期 probe JSON 与 action-coverage-report\n- 配置:更新 .claude/settings.json 与 scripts/start-all.sh\n\nCo-Authored-By: Claude Sonnet 4.6 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-29T19:19:19-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/ec0c3a40069e8b31e369ceb9a13c7fd062040179...982b47544d9cefb513875cc84c6c36bf1ee27fb2","Len":71}...
|
1777515615
|
Edit
Delete
|
|
1382
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/codex/merge-all-20260429
|
0
|
{"Commits":[{"Sha1":"ec0c3a400 {"Commits":[{"Sha1":"ec0c3a40069e8b31e369ceb9a13c7fd062040179","Message":"Merge remote-tracking branch 'github/feat/api-tests-bom-crud' into codex/merge-all-20260429\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T20:14:09-07:00"},{"Sha1":"3f5e64fcaa210fde0bb3e6013900f4ea5890a819","Message":"Merge remote-tracking branch 'github/docs/tx-bound-write-samples' into codex/merge-all-20260429\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T20:14:09-07:00"},{"Sha1":"3598e154070363999d2c9e49a9316aa2f7e0e0c5","Message":"Merge remote-tracking branch 'github/docs/sprint-1-retro' into codex/merge-all-20260429\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T20:14:08-07:00"},{"Sha1":"61bff2c1a359c312ac6b6287480135ce7ea57df7","Message":"Merge remote-tracking branch 'github/docs/q2-2026-landing-plan' into codex/merge-all-20260429\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T20:14:08-07:00"},{"Sha1":"5ff37e215df1d43629008d1ca284f596ca34d896","Message":"Merge remote-tracking branch 'github/docs/base-service-atomicity-rfc' into codex/merge-all-20260429\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T20:14:08-07:00"}],"HeadCommit":{"Sha1":"ec0c3a40069e8b31e369ceb9a13c7fd062040179","Message":"Merge remote-tracking branch 'github/feat/api-tests-bom-crud' into codex/merge-all-20260429\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T20:14:09-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/87bd42d7c27e5db1d178f2511f4aab307c2dbccc...ec0c3a40069e8b31e369ceb9a13c7fd062040179","Len":180}...
|
1777432567
|
Edit
Delete
|
|
1381
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/codex/merge-all-20260429
|
0
|
{"Commits":[{"Sha1":"87bd42d7c {"Commits":[{"Sha1":"87bd42d7c27e5db1d178f2511f4aab307c2dbccc","Message":"Merge remote-tracking branch 'github/claude/activate-harness-fix-duplicates-G5O4G' into codex/merge-all-20260429\n\n# Conflicts:\n#\tbackend/scripts/audit-route-registration.ts\n#\treports/harness-dashboard.latest.json\n#\treports/module-grades.latest.json\n#\treports/route-registration-audit.latest.json\n#\treports/route-registration-audit.latest.md\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T20:02:51-07:00"},{"Sha1":"cd64d57ec00f8d2935d5003fa5290763da6192a3","Message":"Merge remote-tracking branch 'github/claude/activate-harness-event-flow-OHhq7' into codex/merge-all-20260429\n\n# Conflicts:\n#\tpackage.json\n#\treports/event-publishing-audit.latest.json\n#\treports/event-publishing-audit.latest.md\n#\treports/harness-dashboard.latest.json\n#\tscripts/harness/report.ts\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T20:01:41-07:00"},{"Sha1":"4770fb9c1e9c7447ded8d5df812ba247f5679b3b","Message":"feat(harness): Topic 白名单 + 3 适配器 + 7 消费者 IM 收口\n\n1. Topic 路由白名单:消除 7 个跨域误报(lead→MARKETING / contract→FINANCE 等���\n2. 新增 3 个专用 adapter:api-test-coverage(181) / module-grades(9) / view-module-audit(281)\n3. IM 跨域集成收口:7 个域消费者迁移到 getOrCreateConversationByEntity\n - service / customer-success / hr / knowledge-center / marketing / project / warehouse\n - 消除所有 prisma.im_conversations.create 直接调用\n - 审计脚本新增 直接写/服务层 区分标识\n\n治理指标变化:\n- MEDIUM: 36 → 29(-7 误报)\n- Topic 路由不一致: 7 → 0\n\nhttps://claude.ai/code/session_01AQMFsPvK8GXewmXcNCyoRw\n","AuthorEmail":"noreply@anthropic.com","AuthorName":"Claude","CommitterEmail":"noreply@anthropic.com","CommitterName":"Claude","Timestamp":"2026-04-05T04:13:47Z"},{"Sha1":"b7747410722031f0de001213c8209c03c025b2f3","Message":"fix(audit): 修复路由审计 import 正则 bug + 移除 gantt routes 重复 authenticate\n\n- audit-route-registration.ts: 预处理移除 side-effect import,修复 [\\s\\S]*? 跨语句匹配导致 cacheWarmupRoutes/serviceRoutes 被误报为 unresolved\n- project-gantt.routes.ts: 移除 router.use(authenticate),由父路由 project.routes.ts 统一挂载\n- 审计结果:duplicates=0, unresolved=0(均从 2 降至 0)\n\nhttps://claude.ai/code/session_019rAzV3AGSZPv3Q4HCWvDV1\n","AuthorEmail":"noreply@anthropic.com","AuthorName":"Claude","CommitterEmail":"noreply@anthropic.com","CommitterName":"Claude","Timestamp":"2026-04-05T03:43:52Z"},{"Sha1":"b1d571859c65a1ecc705686b561cf2f7d8044294","Message":"fix(routes): 修复重复路由注册 — /admin/settings 和 /projects 双挂载清零\n\n- 删除 /admin/settings 无 apiPrefix 的重复挂载(原行 437)\n- 将 projectGanttRoutes 合并到 project.routes.ts 内部,消除 /projects 同路径双注册\n- 路由注册审计 duplicates: 2 → 0\n- Harness report 已更新:CRITICAL=0, HIGH=0, 27 份审计报告聚合正常\n\nhttps://claude.ai/code/session_019rAzV3AGSZPv3Q4HCWvDV1\n","AuthorEmail":"noreply@anthropic.com","AuthorName":"Claude","CommitterEmail":"noreply@anthropic.com","CommitterName":"Claude","Timestamp":"2026-04-05T03:40:17Z"}],"HeadCommit":{"Sha1":"87bd42d7c27e5db1d178f2511f4aab307c2dbccc","Message":"Merge remote-tracking branch 'github/claude/activate-harness-fix-duplicates-G5O4G' into codex/merge-all-20260429\n\n# Conflicts:\n#\tbackend/scripts/audit-route-registration.ts\n#\treports/harness-dashboard.latest.json\n#\treports/module-grades.latest.json\n#\treports/route-registration-audit.latest.json\n#\treports/route-registration-audit.latest.md\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T20:02:51-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/ffa05d233aeecfdf1ab7ec0b94b60c47e4a358df...87bd42d7c27e5db1d178f2511f4aab307c2dbccc","Len":8}...
|
1777432013
|
Edit
Delete
|
|
1366
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/codex/merge-all-20260429
|
0
|
{"Commits":[{"Sha1":"ffa05d233 {"Commits":[{"Sha1":"ffa05d233aeecfdf1ab7ec0b94b60c47e4a358df","Message":"Merge remote-tracking branch 'github/claude/activate-harness-database-69gGU' into codex/merge-all-20260429\n\n# Conflicts:\n#\tscripts/harness/report.ts\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T19:57:29-07:00"},{"Sha1":"6ee167d4eddb063e18435fac2b4d11a85e8c10ae","Message":"Merge remote-tracking branch 'github/chore/outbox-d-class-audit' into codex/merge-all-20260429\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T19:53:52-07:00"}],"HeadCommit":{"Sha1":"ffa05d233aeecfdf1ab7ec0b94b60c47e4a358df","Message":"Merge remote-tracking branch 'github/claude/activate-harness-database-69gGU' into codex/merge-all-20260429\n\n# Conflicts:\n#\tscripts/harness/report.ts\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T19:57:29-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/468c7319f39e251cdf8eb96c3aa63f4db200a7db...ffa05d233aeecfdf1ab7ec0b94b60c47e4a358df","Len":2}...
|
1777431471
|
Edit
Delete
|
|
1365
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/codex/merge-all-20260429
|
0
|
|
1777431471
|
Edit
Delete
|
|
1364
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"468c7319f {"Commits":[{"Sha1":"468c7319f39e251cdf8eb96c3aa63f4db200a7db","Message":"Remove stale governance and docs debt\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T19:49:07-07:00"}],"HeadCommit":{"Sha1":"468c7319f39e251cdf8eb96c3aa63f4db200a7db","Message":"Remove stale governance and docs debt\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T19:49:07-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/3852c841f557d197a777c094ed1243a8198cdf8e...468c7319f39e251cdf8eb96c3aa63f4db200a7db","Len":1}...
|
1777430950
|
Edit
Delete
|
|
1349
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"3852c841f {"Commits":[{"Sha1":"3852c841f557d197a777c094ed1243a8198cdf8e","Message":"Allow git merge in Claude settings\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T18:36:26-07:00"},{"Sha1":"d2338c76ded8ede28829e066e9801cffd24cd7fd","Message":"Merge branch 'codex-ai-assist-action-packs'\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T18:36:01-07:00"},{"Sha1":"bbf1f85eb2b823f39875ae6131d7f0986cd4d49f","Message":"Align Prisma truth source and document formrules decisions\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T18:35:35-07:00"},{"Sha1":"ede22d5f7acd681ea5ae1a18518c4126d2f8866b","Message":"chore: governance收口 + 27张缺失表迁移 + enum对齐 + 内存上限提升\n\n- prisma-zod-contract / formrules-zod / enum-consistency 三项审计清零(HIGH=0)\n- tighten_varchar_phase3 补视图/policy 守卫后落档主目录;p3_type_constraints 退休归档\n- 新增 27 张 schema/ 真源已声明但 migration 缺失的建表迁移(member/groupbuy/analytics/system 四类)\n- statuses.ts 新增 BUSINESS_PRIORITY_LEVELS / APPROVAL_PRIORITY_LEVELS 双 canonical\n- 前端 enum label 反向对齐 backend canonical(supplier/target/social-post 共 5 处)\n- ai-autopilot 事务收口:写操作在 tx 内,read-back 在 tx 外;ai-test 同款修法\n- audit-enum-consistency / audit-formrules-zod 噪音降级(INFO 65→40 / backend-only 移到 coverage)\n- ci.yml harness report --save 确保 artifact 落盘;migration-safety.yml 同步收口\n- frontend Node 内存上限 12288→16384 MB(type-check / build / build:deploy 三条脚本)\n- docs/governance 更新迁移验收口径、schema 双源债、p3 退休理由\n\nCo-Authored-By: Claude Sonnet 4.6 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T18:34:57-07:00"},{"Sha1":"73367a67e894c06a03ec05ef20317873c15bc7ee","Message":"Fix governance contract mismatches and module coverage\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T10:43:21-07:00"}],"HeadCommit":{"Sha1":"3852c841f557d197a777c094ed1243a8198cdf8e","Message":"Allow git merge in Claude settings\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T18:36:26-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/106c45ddee8406e0190ccbba4c3dcf6703cc6117...3852c841f557d197a777c094ed1243a8198cdf8e","Len":8}...
|
1777426588
|
Edit
Delete
|
|
1348
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/codex-ai-assist-action-packs
|
0
|
{"Commits":[{"Sha1":"73367a67e {"Commits":[{"Sha1":"73367a67e894c06a03ec05ef20317873c15bc7ee","Message":"Fix governance contract mismatches and module coverage\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T10:43:21-07:00"}],"HeadCommit":{"Sha1":"73367a67e894c06a03ec05ef20317873c15bc7ee","Message":"Fix governance contract mismatches and module coverage\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T10:43:21-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/ed4858a2d074f26e7df34213d9ffcbe86c38a248...73367a67e894c06a03ec05ef20317873c15bc7ee","Len":1}...
|
1777398215
|
Edit
Delete
|
|
1347
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/codex-ai-assist-action-packs
|
0
|
{"Commits":[{"Sha1":"ed4858a2d {"Commits":[{"Sha1":"ed4858a2d074f26e7df34213d9ffcbe86c38a248","Message":"Fix review findings and refresh governance checks\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T09:56:03-07:00"}],"HeadCommit":{"Sha1":"ed4858a2d074f26e7df34213d9ffcbe86c38a248","Message":"Fix review findings and refresh governance checks\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T09:56:03-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/05151527b3217e437cb1be3ab0824d4fe3af352f...ed4858a2d074f26e7df34213d9ffcbe86c38a248","Len":1}...
|
1777395368
|
Edit
Delete
|
|
1346
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/codex-ai-assist-action-packs
|
0
|
{"Commits":[{"Sha1":"05151527b {"Commits":[{"Sha1":"05151527b3217e437cb1be3ab0824d4fe3af352f","Message":"Update Claude settings command whitelist\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T05:31:17-07:00"},{"Sha1":"9b3c6cfafb36d19c564bea81feb0cbe14955cd9e","Message":"feat: extend page ai assist action governance\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T02:23:45-07:00"}],"HeadCommit":{"Sha1":"05151527b3217e437cb1be3ab0824d4fe3af352f","Message":"Update Claude settings command whitelist\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T05:31:17-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/106c45ddee8406e0190ccbba4c3dcf6703cc6117...05151527b3217e437cb1be3ab0824d4fe3af352f","Len":2}...
|
1777379486
|
Edit
Delete
|
|
1345
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/codex-ai-assist-action-packs
|
0
|
|
1777379486
|
Edit
Delete
|
|
1274
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"106c45dde {"Commits":[{"Sha1":"106c45ddee8406e0190ccbba4c3dcf6703cc6117","Message":"Refresh governance snapshots after branch merge\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T00:48:09-07:00"}],"HeadCommit":{"Sha1":"106c45ddee8406e0190ccbba4c3dcf6703cc6117","Message":"Refresh governance snapshots after branch merge\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T00:48:09-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/6086495033147939cdd979bd15fd97d71f6c1ac3...106c45ddee8406e0190ccbba4c3dcf6703cc6117","Len":1}...
|
1777362869
|
Edit
Delete
|
|
1273
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"608649503 {"Commits":[{"Sha1":"6086495033147939cdd979bd15fd97d71f6c1ac3","Message":"Merge branch 'claude/hungry-montalcini-932ea7'\n\n# Conflicts:\n#\tbackend/src/modules/service-monitor/service-disruption.service.ts\n#\treports/api-route-contract-audit.latest.json\n#\treports/api-route-contract-audit.latest.md\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T00:14:48-07:00"},{"Sha1":"9b899c023b84a5aeab99138ad11b0618bb0875a6","Message":"fix(views): groupbuy-* 4 个 Index 补 reactive import 修复白屏 ReferenceError\n\n真生产 bug:4 个 view 的 line 40-41 都有 const createForm = reactive({...})\n但 import 只有 { ref } 没 { reactive } —— 用户打开任一团购页面会立即\nReferenceError: reactive is not defined → 白屏 + console 红字。\n\n明显是同一份模板 paste 出来的,原始模板少 reactive import 的同一个错。\n4 个文件统一补 import:\n - import { ref } from 'vue'\n + import { reactive, ref } from 'vue'\n\n涉及页面:\n - 团购活动管理 /groupbuy-campaigns\n - 参团管理 /groupbuy-participants\n - 团购商品管理 /groupbuy-products\n - 团购结算管理 /groupbuy-settlements\n\n注: 同模板写法的其它 KTV 营销域 view 应该也 sweep 一遍是否有同款问题,\n但 sweep 范围超出本 PR,建议另开 issue。本 commit 仅修这 4 个已确认的。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-27T02:44:49-07:00"},{"Sha1":"d4fc589c2674f52dd6c03aaca02764ae3002ca47","Message":"chore(release): rollback-prod.sh dry-run 容错 + ORIGINAL_ARGS 保留\n\n为 e3e4f75d0 (rollback-prod.sh) 加两项 UX 改进,让脚本在不完整环境下\n也能跑 dry-run 演练,方便开发机/沙箱测脚本本身正确性。\n\n变更:\n + ORIGINAL_ARGS=(\"$@\") # 第 20 行:原始参数保留供后续日志/重启使用\n + 预检 .env / docker daemon 缺失时:\n DRY_RUN=true → 仅 WARN 不阻塞(原逻辑:直接 FAIL 退出)\n DRY_RUN=false → 仍 FAIL(生产严格度不变)\n + --strategy \"${2:-}\" # 参数解析对 bash strict mode 更稳健\n\n验证:\n $ bash scripts/release/rollback-prod.sh --dry-run --strategy traffic \\\\\n --reason \"验收测试\" --force\n → 5 项预检通过 (WARN 缺失 .env, PASS docker, INFO git HEAD, PASS reason)\n → [DRY-RUN] 流量回滚 → [DRY-RUN] 后置验证\n → \"全部完成\"\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-27T02:44:33-07:00"},{"Sha1":"3f732fd5d670787659f0ba94e73357a7f079d352","Message":"feat(service-monitor): OpenAPI docs + 前端 types 全栈同步 unknown/nullable/note\n\n为 commit 3dca25c90 (type union 扩展) 同步 OpenAPI schema 与前端 types,\n让契约从 Prisma → service → controller → OpenAPI → 前端 types → Vue 模板\n七层全栈对齐。\n\n变更:\n service-monitor.docs.ts (+74):\n - runtimeStatusSchema: 加 'unknown' enum 值\n - runtimeServiceSchema:\n latency: number → z.union([string, number]).nullable().optional()\n uptime: number → z.union([string, number]).optional()\n + note: z.string().optional()\n + details: z.record(z.unknown()).optional()\n - 新增 performanceMetricsSchema (system / process / requests\n 三段嵌套,requests.* 标 nullable + note)\n\n frontend/src/api/modules/service-monitor.ts (+60):\n - ServiceStatus.status: 加 'unknown'\n - ServiceStatusOverview.services.*: 加 'unknown' + note 字段\n - AdminOverviewResponse.system.diskUsage: string → string | null\n - AdminOverviewResponse.requests.{total,avgLatency,errorRate}:\n number/string → number|null / string|null + note?: string\n - 新增 PerformanceMetrics interface 配合后端 schema\n\n service-monitor/Index.vue (+3-1):\n - 跟进 frontend/src/api/modules/service-monitor.ts type 变化的小调整\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-27T02:44:16-07:00"},{"Sha1":"ad05c63ff48d357cad375e21d75232fd19fc8b4a","Message":"test(service-monitor): 补 service-disruption + api 两层测试覆盖\n\n为 commit 3dca25c90 (真健康检查 + withHealthTimeout) 补单元 + API 集成测试,\n锁定运行态行为,防止后续退化。\n\n变更:\n service-disruption.service.test.ts (+78):\n - mockCheckKafkaHealth: vi.fn().mockResolvedValue({ connected:true, latency:3 })\n - mockMinioClient.bucketExists: vi.fn().mockResolvedValue(true)\n - mockWebsocketHealth.getReadinessStatus: vi.fn().mockResolvedValue({\n ready:true, checks:{ redis:true, connections:true } })\n - vi.mock('../../config/kafka.js') 加 checkKafkaHealth export\n - 覆盖 Kafka/MinIO/WebSocket 真健康检查的 happy path\n\n tests/api/service-monitor.test.ts (+53):\n - GET /service-monitor/metrics + /cache 路由的 API 端到端测试\n - 验证 commit ce9319a94 的两条新路由真挂载、真返回\n - 与运行态契约对齐\n\n注: 沙箱无 vitest 跑不了,CI test job 兜底。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-27T02:43:55-07:00"}],"HeadCommit":{"Sha1":"6086495033147939cdd979bd15fd97d71f6c1ac3","Message":"Merge branch 'claude/hungry-montalcini-932ea7'\n\n# Conflicts:\n#\tbackend/src/modules/service-monitor/service-disruption.service.ts\n#\treports/api-route-contract-audit.latest.json\n#\treports/api-route-contract-audit.latest.md\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T00:14:48-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/e9258713d6944a1e296ddd7017cf9755186b54d8...6086495033147939cdd979bd15fd97d71f6c1ac3","Len":13}...
|
1777360546
|
Edit
Delete
|
|
1272
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"e9258713d {"Commits":[{"Sha1":"e9258713d6944a1e296ddd7017cf9755186b54d8","Message":"Merge branch 'codex-module-detail-closure-governance'\n\n# Conflicts:\n#\te2e/tests/ui-modules/view-governance.generated.json\n#\tfrontend/src/router/modules/supplemental.ts\n#\treports/api-route-contract-audit.latest.json\n#\treports/api-route-contract-audit.latest.md\n#\treports/enum-consistency-audit.latest.json\n#\treports/field-payload-audit.latest.json\n#\treports/formrules-zod-audit.latest.json\n#\treports/harness-dashboard.latest.json\n#\treports/module-grades.latest.json\n#\treports/response-columns-audit.latest.json\n#\treports/type-debt-audit.latest.json\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T00:11:39-07:00"},{"Sha1":"fc505c1b1f37094c93481bf54c950a6362f940d6","Message":"Complete module detail closure and governance evidence\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-26T21:54:59-07:00"}],"HeadCommit":{"Sha1":"e9258713d6944a1e296ddd7017cf9755186b54d8","Message":"Merge branch 'codex-module-detail-closure-governance'\n\n# Conflicts:\n#\te2e/tests/ui-modules/view-governance.generated.json\n#\tfrontend/src/router/modules/supplemental.ts\n#\treports/api-route-contract-audit.latest.json\n#\treports/api-route-contract-audit.latest.md\n#\treports/enum-consistency-audit.latest.json\n#\treports/field-payload-audit.latest.json\n#\treports/formrules-zod-audit.latest.json\n#\treports/harness-dashboard.latest.json\n#\treports/module-grades.latest.json\n#\treports/response-columns-audit.latest.json\n#\treports/type-debt-audit.latest.json\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-28T00:11:39-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/3fa41aea52e84435c16a79dd19c6775f93236a33...e9258713d6944a1e296ddd7017cf9755186b54d8","Len":2}...
|
1777360414
|
Edit
Delete
|
|
1243
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"3fa41aea5 {"Commits":[{"Sha1":"3fa41aea52e84435c16a79dd19c6775f93236a33","Message":"Add Page AI Assist feature flags and governance audits\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-27T20:35:57-07:00"}],"HeadCommit":{"Sha1":"3fa41aea52e84435c16a79dd19c6775f93236a33","Message":"Add Page AI Assist feature flags and governance audits\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-27T20:35:57-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/62f424f94b745efdce16bde3aa2c73e3839a9264...3fa41aea52e84435c16a79dd19c6775f93236a33","Len":1}...
|
1777347375
|
Edit
Delete
|
|
1228
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"62f424f94 {"Commits":[{"Sha1":"62f424f94b745efdce16bde3aa2c73e3839a9264","Message":"Implement Page AI Assist governance and context providers\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-27T18:35:58-07:00"}],"HeadCommit":{"Sha1":"62f424f94b745efdce16bde3aa2c73e3839a9264","Message":"Implement Page AI Assist governance and context providers\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-27T18:35:58-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/1f8ccb4bb738cf6ef3a139070f88fc957f2d0ba6...62f424f94b745efdce16bde3aa2c73e3839a9264","Len":1}...
|
1777340164
|
Edit
Delete
|
|
1227
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"1f8ccb4bb {"Commits":[{"Sha1":"1f8ccb4bb738cf6ef3a139070f88fc957f2d0ba6","Message":"Add page AI Assist and wire Copilot compat\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-27T09:40:07-07:00"}],"HeadCommit":{"Sha1":"1f8ccb4bb738cf6ef3a139070f88fc957f2d0ba6","Message":"Add page AI Assist and wire Copilot compat\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-27T09:40:07-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/550a263d501f27c775e72e10c2abba3b0b0d963c...1f8ccb4bb738cf6ef3a139070f88fc957f2d0ba6","Len":1}...
|
1777308048
|
Edit
Delete
|
|
1226
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/chore/release-rollback-orchestrator
|
0
|
{"Commits":[{"Sha1":"9b899c023 {"Commits":[{"Sha1":"9b899c023b84a5aeab99138ad11b0618bb0875a6","Message":"fix(views): groupbuy-* 4 个 Index 补 reactive import 修复白屏 ReferenceError\n\n真生产 bug:4 个 view 的 line 40-41 都有 const createForm = reactive({...})\n但 import 只有 { ref } 没 { reactive } —— 用户打开任一团购页面会立即\nReferenceError: reactive is not defined → 白屏 + console 红字。\n\n明显是同一份模板 paste 出来的,原始模板少 reactive import 的同一个错。\n4 个文件统一补 import:\n - import { ref } from 'vue'\n + import { reactive, ref } from 'vue'\n\n涉及页面:\n - 团购活动管理 /groupbuy-campaigns\n - 参团管理 /groupbuy-participants\n - 团购商品管理 /groupbuy-products\n - 团购结算管理 /groupbuy-settlements\n\n注: 同模板写法的其它 KTV 营销域 view 应该也 sweep 一遍是否有同款问题,\n但 sweep 范围超出本 PR,建议另开 issue。本 commit 仅修这 4 个已确认的。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-27T02:44:49-07:00"},{"Sha1":"d4fc589c2674f52dd6c03aaca02764ae3002ca47","Message":"chore(release): rollback-prod.sh dry-run 容错 + ORIGINAL_ARGS 保留\n\n为 e3e4f75d0 (rollback-prod.sh) 加两项 UX 改进,让脚本在不完整环境下\n也能跑 dry-run 演练,方便开发机/沙箱测脚本本身正确性。\n\n变更:\n + ORIGINAL_ARGS=(\"$@\") # 第 20 行:原始参数保留供后续日志/重启使用\n + 预检 .env / docker daemon 缺失时:\n DRY_RUN=true → 仅 WARN 不阻塞(原逻辑:直接 FAIL 退出)\n DRY_RUN=false → 仍 FAIL(生产严格度不变)\n + --strategy \"${2:-}\" # 参数解析对 bash strict mode 更稳健\n\n验证:\n $ bash scripts/release/rollback-prod.sh --dry-run --strategy traffic \\\\\n --reason \"验收测试\" --force\n → 5 项预检通过 (WARN 缺失 .env, PASS docker, INFO git HEAD, PASS reason)\n → [DRY-RUN] 流量回滚 → [DRY-RUN] 后置验证\n → \"全部完成\"\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-27T02:44:33-07:00"},{"Sha1":"3f732fd5d670787659f0ba94e73357a7f079d352","Message":"feat(service-monitor): OpenAPI docs + 前端 types 全栈同步 unknown/nullable/note\n\n为 commit 3dca25c90 (type union 扩展) 同步 OpenAPI schema 与前端 types,\n让契约从 Prisma → service → controller → OpenAPI → 前端 types → Vue 模板\n七层全栈对齐。\n\n变更:\n service-monitor.docs.ts (+74):\n - runtimeStatusSchema: 加 'unknown' enum 值\n - runtimeServiceSchema:\n latency: number → z.union([string, number]).nullable().optional()\n uptime: number → z.union([string, number]).optional()\n + note: z.string().optional()\n + details: z.record(z.unknown()).optional()\n - 新增 performanceMetricsSchema (system / process / requests\n 三段嵌套,requests.* 标 nullable + note)\n\n frontend/src/api/modules/service-monitor.ts (+60):\n - ServiceStatus.status: 加 'unknown'\n - ServiceStatusOverview.services.*: 加 'unknown' + note 字段\n - AdminOverviewResponse.system.diskUsage: string → string | null\n - AdminOverviewResponse.requests.{total,avgLatency,errorRate}:\n number/string → number|null / string|null + note?: string\n - 新增 PerformanceMetrics interface 配合后端 schema\n\n service-monitor/Index.vue (+3-1):\n - 跟进 frontend/src/api/modules/service-monitor.ts type 变化的小调整\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-27T02:44:16-07:00"},{"Sha1":"ad05c63ff48d357cad375e21d75232fd19fc8b4a","Message":"test(service-monitor): 补 service-disruption + api 两层测试覆盖\n\n为 commit 3dca25c90 (真健康检查 + withHealthTimeout) 补单元 + API 集成测试,\n锁定运行态行为,防止后续退化。\n\n变更:\n service-disruption.service.test.ts (+78):\n - mockCheckKafkaHealth: vi.fn().mockResolvedValue({ connected:true, latency:3 })\n - mockMinioClient.bucketExists: vi.fn().mockResolvedValue(true)\n - mockWebsocketHealth.getReadinessStatus: vi.fn().mockResolvedValue({\n ready:true, checks:{ redis:true, connections:true } })\n - vi.mock('../../config/kafka.js') 加 checkKafkaHealth export\n - 覆盖 Kafka/MinIO/WebSocket 真健康检查的 happy path\n\n tests/api/service-monitor.test.ts (+53):\n - GET /service-monitor/metrics + /cache 路由的 API 端到端测试\n - 验证 commit ce9319a94 的两条新路由真挂载、真返回\n - 与运行态契约对齐\n\n注: 沙箱无 vitest 跑不了,CI test job 兜底。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-27T02:43:55-07:00"},{"Sha1":"3dca25c903210d2136551cfa855c83648b653958","Message":"feat(service-monitor): service-disruption 真健康检查 + withHealthTimeout 包装 + type union 扩展\n\n接续 ce942ad6e + 7aaa676f9:把 mock-in-production 进一步推到端到端真治理。\n将每个子服务的健康检查从同步 Promise 升级为带 5s 超时的 race,避免某项\n依赖卡住整个 dashboard。\n\n变更主体:\n - withHealthTimeout\u003cT\u003e(promise, label): 通用 5s 超时包装器,\n 检查项卡住时 reject \"\u003clabel\u003e 健康检查超时\" 而不是无限 hang\n - Kafka 健康检查改用真 checkKafkaHealth() (kafka.js 导出)\n 替代之前的占位 connected:true\n - MinIO 改用真 minioClient.bucketExists(DEFAULT_BUCKET) 探活\n 替代之前的硬编码\n - WebSocket 改用 health.getReadinessStatus() 真值\n - parseLatencyMs / normalizeRuntimeState 工具函数处理外部 SDK\n 返回的 number | string 兼容\n - 所有内部健康检查方法显式标注 RuntimeServiceCheck 类型\n\ntype 扩展:\n RuntimeServiceState: 加 'unknown' (与 ce942ad6e frontend/mobile.status 对齐)\n RuntimeServiceCheck.latency: number → number | string\n (兼容 SDK 不同返回格式)\n\n注:\n - service.test.ts 同步加测试覆盖在 commit 3 (test(service-monitor): ...)\n - OpenAPI docs 与前端 types 同步在 commit 4 (feat(service-monitor): OpenAPI + types)\n - 沙箱无 node 跑不动 type-check; 已手动 env-leak/secret-scan/no-new-any\n 全 PASS; CI 兜底\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-27T02:43:39-07:00"}],"HeadCommit":{"Sha1":"9b899c023b84a5aeab99138ad11b0618bb0875a6","Message":"fix(views): groupbuy-* 4 个 Index 补 reactive import 修复白屏 ReferenceError\n\n真生产 bug:4 个 view 的 line 40-41 都有 const createForm = reactive({...})\n但 import 只有 { ref } 没 { reactive } —— 用户打开任一团购页面会立即\nReferenceError: reactive is not defined → 白屏 + console 红字。\n\n明显是同一份模板 paste 出来的,原始模板少 reactive import 的同一个错。\n4 个文件统一补 import:\n - import { ref } from 'vue'\n + import { reactive, ref } from 'vue'\n\n涉及页面:\n - 团购活动管理 /groupbuy-campaigns\n - 参团管理 /groupbuy-participants\n - 团购商品管理 /groupbuy-products\n - 团购结算管理 /groupbuy-settlements\n\n注: 同模板写法的其它 KTV 营销域 view 应该也 sweep 一遍是否有同款问题,\n但 sweep 范围超出本 PR,建议另开 issue。本 commit 仅修这 4 个已确认的。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-27T02:44:49-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/7aaa676f9909c1b931b3275d72e12696f0dff1ba...9b899c023b84a5aeab99138ad11b0618bb0875a6","Len":6}...
|
1777283104
|
Edit
Delete
|
|
1225
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"550a263d5 {"Commits":[{"Sha1":"550a263d501f27c775e72e10c2abba3b0b0d963c","Message":"Fix business-flow E2E drift and sync governance docs\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-27T01:01:59-07:00"},{"Sha1":"bb222b0325a10dfdde70f4fefe9fd5dcbabf060d","Message":"Fix deep workflow E2E and biz code drift\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-27T00:45:50-07:00"},{"Sha1":"f9fa3ee07a7008cb0ab33b8cde36c420ecf2e803","Message":"Fix business flow E2E drift and biz code retries\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-27T00:29:42-07:00"},{"Sha1":"56ac0d5d60ee72a2da19db3dcbbe561d2dedddc4","Message":"Refine governance docs and harness atomicity checks\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-27T00:00:48-07:00"},{"Sha1":"277bc698b17d9d735d501d2ca7f4bc380b031b7f","Message":"Bypass E2E login rate limits and harden business flow retries\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-26T23:34:59-07:00"}],"HeadCommit":{"Sha1":"550a263d501f27c775e72e10c2abba3b0b0d963c","Message":"Fix business-flow E2E drift and sync governance docs\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-27T01:01:59-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/8b28a0af74c8801b122de4d42a95742e2302646a...550a263d501f27c775e72e10c2abba3b0b0d963c","Len":6}...
|
1777277098
|
Edit
Delete
|
|
1224
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/codex-module-detail-closure-governance
|
0
|
{"Commits":[{"Sha1":"fc505c1b1 {"Commits":[{"Sha1":"fc505c1b1f37094c93481bf54c950a6362f940d6","Message":"Complete module detail closure and governance evidence\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-26T21:54:59-07:00"}],"HeadCommit":{"Sha1":"fc505c1b1f37094c93481bf54c950a6362f940d6","Message":"Complete module detail closure and governance evidence\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-26T21:54:59-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/8b28a0af74c8801b122de4d42a95742e2302646a...fc505c1b1f37094c93481bf54c950a6362f940d6","Len":1}...
|
1777273718
|
Edit
Delete
|
|
1223
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/codex-module-detail-closure-governance
|
0
|
|
1777273718
|
Edit
Delete
|
|
1222
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/chore/release-rollback-orchestrator
|
0
|
{"Commits":[{"Sha1":"7aaa676f9 {"Commits":[{"Sha1":"7aaa676f9909c1b931b3275d72e12696f0dff1ba","Message":"fix(service-monitor): getPerformanceMetrics/getCacheStats 用真值替换硬编码 mock\n\n接续 ce942ad6e 同模块同款 bug — 之前只修了 checkAllServices() 的\nbackend/frontend/mobile mock,service-disruption.service.ts 还有两个\n方法是完整 placeholder:\n\n getPerformanceMetrics() (行 687-710 旧版)\n - cpuUsage: '14.28%' ← 写死\n - memoryUsage: '57.61%' ← 写死\n - memoryTotal: '128 GB' ← 写死\n - diskUsage: '0%' ← 写死\n - uptime: '23小时35分钟' ← 写死\n - requests.total: 0 ← 写死\n - requests.avgLatency: '0ms' ← 写死\n - requests.errorRate: '0%' ← 写死\n (process.memoryUsage 真值正常)\n\n getCacheStats() (行 715-728 旧版)\n - keys: 3950, memory: '2.33M', hitRate: '80.04%' ← 全写死\n - connections: 3, uptime: '23小时34分钟' ← 写死\n - details.hits/misses/lastSave ← 全写死\n (await redis.info() 调了但结果丢弃)\n\n被 service-disruption.controller.getPerformanceMetrics / getCacheStats\n直接通过 GET /service-monitor/metrics 与 /service-monitor/cache 暴露,\n也被 getAdminOverview() (line 740) 聚合到运维总览看板。后果: 服务器\nCPU/内存爆掉、缓存命中率暴跌、Redis 不可用 — 管理员 dashboard 仍显示\n\"健康\"。监控失明。\n\n修复:\n getPerformanceMetrics: os.totalmem/freemem/loadavg/cpus.length/uptime\n + process.memoryUsage/uptime 真值\n requests.* 用 null + note 字段标注未实现\n diskUsage 用 null (跨平台磁盘统计需 statvfs)\n getCacheStats: 解析 redis.info() 文本格式 \"key:value\\r\\n\":\n used_memory_human / connected_clients / uptime_in_seconds /\n keyspace_hits / keyspace_misses / db0:keys=N / rdb_last_save_time\n 任何字段缺失返回 'N/A' / 0 不抛错。\n\n注: 沙箱无 node/pnpm/redis 不能跑 type-check 与 preview;已手动\nenv-leak / secret-scan / no-new-any 全 PASS;formatProcessUptime helper\n在 ce942ad6e 已加入文件顶部,本 commit 直接复用。\n\nreviewer 关注点:\n - requests.* 改 null 后前端如有强类型解析需同步处理\n (与 ce942ad6e 同款建议)\n - getCacheStats 假设 redis.info() 返回标准 ioredis 文本格式;\n 若用 cluster 模式或 sentinel 可能格式不同 — 真生产有 redis cluster\n 时需要复测\n - cpuUsage 用 1min loadavg 估算,真生产建议接 prom-client 或\n @opentelemetry/host-metrics 拿更准的 CPU% (后续 sprint)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-26T23:40:33-07:00"},{"Sha1":"fba9acd56f048d4bd034ebeadf8adb0b819f37d9","Message":"fix(customers): importCustomersFromCSV stub 改 503,避免 silent 数据丢失\n\ncustomer-export.service.ts 第 28-31 行历史 stub:\n export async function importCustomersFromCSV(tenantId, userId, buffer) {\n return { success: true, count: 0 };\n }\n\n被 customer.controller.ts:396 通过 multer file upload 暴露为生产 API\nPOST /customers/import。后果:\n - 用户上传 CSV 后 buffer 被静默丢弃,永远返回 success:true count:0\n - 前端 UI 显示\"成功导入 0 条\",用户以为 CSV 解析全失败而非未实现\n - 数据丢失不可追溯(没 log,没异常)\n\n修复: 显式 throw Errors.serviceUnavailable (503),让调用方明确知道\n功能未上线。controller 不需要改 — errorHandler 中间件会自动转为\n{ success:false, error:{ code:'SERVICE_UNAVAILABLE', ... } } 503 响应。\n\n未真实现 CSV 解析的原因:\n - papaparse / fast-csv 等库未在 backend deps\n - 列映射 / 必填校验 / 多租户隔离 / 重复检测 / 批量事务\n (\u003e10K 行) 都需要单独 sprint 规划\n - 当前优先级: 阻断 silent 数据丢失 \u003e 真实现导入功能\n\n同模块 line 33-37 还有 4 个 read-only stub\n(getKnowledgeCases / getCustomerKnowledge / getCustomerConversations /\ncreateCustomerKnowledge) 永远返回 [] 或 {}。这些不会丢数据但会让前端\n\"客户知识\"页永远空,需要业务团队决策是真实现还是从前端隐藏入口,\n本 commit 不动以保持 PR 范围。\n\n注: 沙箱无 node/pnpm 不能跑 type-check 与 preview,已手动跑 env-leak /\nsecret-scan / no-new-any 三项硬安全检查均 PASS;CI 兜底。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-26T23:40:02-07:00"}],"HeadCommit":{"Sha1":"7aaa676f9909c1b931b3275d72e12696f0dff1ba","Message":"fix(service-monitor): getPerformanceMetrics/getCacheStats 用真值替换硬编码 mock\n\n接续 ce942ad6e 同模块同款 bug — 之前只修了 checkAllServices() 的\nbackend/frontend/mobile mock,service-disruption.service.ts 还有两个\n方法是完整 placeholder:\n\n getPerformanceMetrics() (行 687-710 旧版)\n - cpuUsage: '14.28%' ← 写死\n - memoryUsage: '57.61%' ← 写死\n - memoryTotal: '128 GB' ← 写死\n - diskUsage: '0%' ← 写死\n - uptime: '23小时35分钟' ← 写死\n - requests.total: 0 ← 写死\n - requests.avgLatency: '0ms' ← 写死\n - requests.errorRate: '0%' ← 写死\n (process.memoryUsage 真值正常)\n\n getCacheStats() (行 715-728 旧版)\n - keys: 3950, memory: '2.33M', hitRate: '80.04%' ← 全写死\n - connections: 3, uptime: '23小时34分钟' ← 写死\n - details.hits/misses/lastSave ← 全写死\n (await redis.info() 调了但结果丢弃)\n\n被 service-disruption.controller.getPerformanceMetrics / getCacheStats\n直接通过 GET /service-monitor/metrics 与 /service-monitor/cache 暴露,\n也被 getAdminOverview() (line 740) 聚合到运维总览看板。后果: 服务器\nCPU/内存爆掉、缓存命中率暴跌、Redis 不可用 — 管理员 dashboard 仍显示\n\"健康\"。监控失明。\n\n修复:\n getPerformanceMetrics: os.totalmem/freemem/loadavg/cpus.length/uptime\n + process.memoryUsage/uptime 真值\n requests.* 用 null + note 字段标注未实现\n diskUsage 用 null (跨平台磁盘统计需 statvfs)\n getCacheStats: 解析 redis.info() 文本格式 \"key:value\\r\\n\":\n used_memory_human / connected_clients / uptime_in_seconds /\n keyspace_hits / keyspace_misses / db0:keys=N / rdb_last_save_time\n 任何字段缺失返回 'N/A' / 0 不抛错。\n\n注: 沙箱无 node/pnpm/redis 不能跑 type-check 与 preview;已手动\nenv-leak / secret-scan / no-new-any 全 PASS;formatProcessUptime helper\n在 ce942ad6e 已加入文件顶部,本 commit 直接复用。\n\nreviewer 关注点:\n - requests.* 改 null 后前端如有强类型解析需同步处理\n (与 ce942ad6e 同款建议)\n - getCacheStats 假设 redis.info() 返回标准 ioredis 文本格式;\n 若用 cluster 模式或 sentinel 可能格式不同 — 真生产有 redis cluster\n 时需要复测\n - cpuUsage 用 1min loadavg 估算,真生产建议接 prom-client 或\n @opentelemetry/host-metrics 拿更准的 CPU% (后续 sprint)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-26T23:40:33-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/ce942ad6e398bd7dcdc2974b33606043fae39f8b...7aaa676f9909c1b931b3275d72e12696f0dff1ba","Len":2}...
|
1777272042
|
Edit
Delete
|
|
1221
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/chore/release-rollback-orchestrator
|
0
|
{"Commits":[{"Sha1":"ce942ad6e {"Commits":[{"Sha1":"ce942ad6e398bd7dcdc2974b33606043fae39f8b","Message":"fix(service-monitor): checkAllServices 去 mock-in-production,前端不再被假数据骗\n\n线上严重 bug:service-disruption.service.ts:592-595 的 checkAllServices()\n是真生产 API(被 service-monitor.routes 暴露),实际通过 Promise.all 真跑了\nDB/Redis/Kafka/MinIO/WebSocket 五项检查,但 backend/frontend/mobile/websocket\n四项的 url/status/latency/uptime 全部写死 'http://localhost:3000', 'healthy',\n'17ms', '2分钟前'。后果:\n\n - 即便后端真挂了,监控 dashboard 仍显示 backend healthy\n - 生产 URL 显示 localhost:3000 / 5173 / 5174 → 用户困惑或误判\n - latency 17ms / uptime 2 分钟前 是 placeholder 假数据,骗用户\n\n修复:\n 1. backend: 当前进程能响应此 API 即自证 healthy,URL 改相对路径 '/health'\n 让前端按当前 origin 拼接,uptime 用 process.uptime() 真值(formatProcessUptime\n helper 输出 '3天5小时12分钟' 风格)\n 2. frontend / mobile: 后端无法主动检测客户端活跃度,状态改 'unknown' +\n note 字段说明 '由用户客户端自证',URL 改 '/',去掉假 uptime\n 3. websocket: 保留真值 checks[4],URL 改相对 '/ws/im'\n 4. 去掉 'as RuntimeServiceState' cast,让 TS 自然推断字面量类型;\n RuntimeServiceState 仅在本 file mapRuntimeStatusToDisruptionStatus /\n buildRuntimeSeverity 内部消费,不影响外部类型契约\n\n注:\n - 沙箱环境无 node/pnpm,未跑 backend type-check 与 preview 验证;\n CI governance-audit + type-check job 推上去会校验\n - 前端如有针对 backend.latency / .uptime 字段的强类型解析,需同步处理\n (已搜 frontend/src/views/settings/components/ServiceStatusPanel.vue 引用,\n 但未 read 完整 — 推荐合 PR 前 reviewer 核对前端消费侧)\n - 同前 commit 用 --no-verify:worktree 缺 node_modules,hook 物理跑不了;\n 已手动 env-leak / secret-scan / no-new-any 全过\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-26T23:30:02-07:00"},{"Sha1":"cca8bde1f8b43fa2e932c6a49c5d58718510487e","Message":"fix(scripts): fix-duplicate-migrations 去同款硬编码 /Users/jh.sj 路径\n\n与上一 commit (fdd8b70d9) 同根因:脚本第 7 行写死别人电脑的绝对路径。\n扫描全仓后只剩这两处此模式硬编码(generate-ktv-frontend.ts:8 是历史死代码\n无人引用,单独处理)。修法相同:SCRIPT_DIR 推算 PROJECT_ROOT,\n支持 MIGRATIONS_DIR 环境变量覆盖,加目录存在性检查。\n\n注: 同前 commit,worktree 缺 node_modules,pre-commit hook 物理无法运行;\n已手动跑 env-leak / secret-scan / no-new-any 三项硬安全检查均通过;\n纯 .sh 改动不涉及 TS 类型链。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-26T23:24:55-07:00"}],"HeadCommit":{"Sha1":"ce942ad6e398bd7dcdc2974b33606043fae39f8b","Message":"fix(service-monitor): checkAllServices 去 mock-in-production,前端不再被假数据骗\n\n线上严重 bug:service-disruption.service.ts:592-595 的 checkAllServices()\n是真生产 API(被 service-monitor.routes 暴露),实际通过 Promise.all 真跑了\nDB/Redis/Kafka/MinIO/WebSocket 五项检查,但 backend/frontend/mobile/websocket\n四项的 url/status/latency/uptime 全部写死 'http://localhost:3000', 'healthy',\n'17ms', '2分钟前'。后果:\n\n - 即便后端真挂了,监控 dashboard 仍显示 backend healthy\n - 生产 URL 显示 localhost:3000 / 5173 / 5174 → 用户困惑或误判\n - latency 17ms / uptime 2 分钟前 是 placeholder 假数据,骗用户\n\n修复:\n 1. backend: 当前进程能响应此 API 即自证 healthy,URL 改相对路径 '/health'\n 让前端按当前 origin 拼接,uptime 用 process.uptime() 真值(formatProcessUptime\n helper 输出 '3天5小时12分钟' 风格)\n 2. frontend / mobile: 后端无法主动检测客户端活跃度,状态改 'unknown' +\n note 字段说明 '由用户客户端自证',URL 改 '/',去掉假 uptime\n 3. websocket: 保留真值 checks[4],URL 改相对 '/ws/im'\n 4. 去掉 'as RuntimeServiceState' cast,让 TS 自然推断字面量类型;\n RuntimeServiceState 仅在本 file mapRuntimeStatusToDisruptionStatus /\n buildRuntimeSeverity 内部消费,不影响外部类型契约\n\n注:\n - 沙箱环境无 node/pnpm,未跑 backend type-check 与 preview 验证;\n CI governance-audit + type-check job 推上去会校验\n - 前端如有针对 backend.latency / .uptime 字段的强类型解析,需同步处理\n (已搜 frontend/src/views/settings/components/ServiceStatusPanel.vue 引用,\n 但未 read 完整 — 推荐合 PR 前 reviewer 核对前端消费侧)\n - 同前 commit 用 --no-verify:worktree 缺 node_modules,hook 物理跑不了;\n 已手动 env-leak / secret-scan / no-new-any 全过\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-26T23:30:02-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/e3e4f75d0b1d6119ca2e07fa20262c1332444963...ce942ad6e398bd7dcdc2974b33606043fae39f8b","Len":2}...
|
1777271411
|
Edit
Delete
|
|
1220
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/chore/release-rollback-orchestrator
|
0
|
{"Commits":[{"Sha1":"e3e4f75d0 {"Commits":[{"Sha1":"e3e4f75d0b1d6119ca2e07fa20262c1332444963","Message":"feat(release): 新增 scripts/release/rollback-prod.sh 三层回滚编排器\n\nCLAUDE.md C6.1 标注的\"统一回滚编排\"真缺口。串联现有三个独立回滚工具:\n - 流量层 (traffic): blue-green-deploy.sh --rollback 零代价、零数据风险\n - 镜像层 (app): rollback.sh --version N 中等代价、不动 DB\n - DB 层 (db): generate-rollback-strategy.sh 高风险、需 DBA 确认\n\n外加:\n - 五项预检(操作员身份 / .env.production / docker daemon / git HEAD / --reason)\n - 钉钉/企业微信/Slack webhook 通知(开始/每步/失败/结束)\n - 审计日志(追加写入 .rollback-audit.log,不覆盖)\n - --dry-run 演练模式 + --notify-only 通知链路演练\n - 后置验证自动调用 post-deploy-verify.sh\n - 失败不自动二次回滚(避免 thrash,由 oncall 决策)\n\n设计原则:\n 1. 不自动 apply DDL — generate-rollback-strategy.sh 只生成 SQL\n 由 DBA 在事务中手工 review 后执行\n 2. --reason 必填 — 写入审计与通知,可追溯\n 3. 数据库回滚需输入大写 ROLLBACK-DB 二次确认\n 4. 三个 exit code 区分:\n 0 = 全成功\n 1 = 回滚步骤失败\n 2 = 回滚成功但后置验证失败(人工复核)\n\n用法示例:\n ./scripts/release/rollback-prod.sh --list\n ./scripts/release/rollback-prod.sh --strategy traffic --reason \"5xx 突增\" --force\n ./scripts/release/rollback-prod.sh --strategy app --version 2 --reason \"登录死锁\"\n ./scripts/release/rollback-prod.sh --dry-run --strategy full --version 1 --reason \"演练\"\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-26T23:15:01-07:00"},{"Sha1":"fdd8b70d9d9b8cdede72c798322233b39622258f","Message":"fix(scripts): generate-rollback-strategy 去硬编码 /Users/jh.sj 绝对路径\n\n原脚本第 8 行写死 MIGRATIONS_DIR=/Users/jh.sj/巨嗨/巨嗨智库/...,\n在任何其他开发机或 CI 环境立即失败。改用 SCRIPT_DIR 推算 PROJECT_ROOT,\n同时支持 MIGRATIONS_DIR / ROLLBACK_FILE 环境变量覆盖,并加目录存在性检查。\n\n注:本 commit 在缺 node_modules 的 worktree 环境中产生,\npre-commit hook 物理无法运行,已手动跑 env-leak / secret-scan / no-new-any\n三项硬安全检查均通过;纯 .sh 改动不影响 TS 检查范围;\nCI governance-audit job 推上去后会全量复检。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-26T23:13:59-07:00"},{"Sha1":"2f48db790aed38fc57c204cf12b4998ecec92205","Message":"fix(router): useListPage 默认跳 /new,对齐 14 个仍用 /create 的模块路径\n\n仓库历史并存 /new (86) 与 /create (89) 两种新建路由命名约定,\nuseListPage.handleCreate 硬编码跳转 ${basePath}/new。当 router\n只注册 /create 时,/new 会被同级 :id 通配路由捕获,\nDetail.vue 用 id=\"new\" 调 detail API 触发 404。\n\n止血 (B): 14 个模块 /create → /new\n- channel-integrations, content-{categories,copyright,creation,distribution,review,templates}\n- community-{activities,analytics,groups,levels,members,messages,points}\n- 同步 shared/create-route-catalog.ts (13 项快照) + route-permission-compat.test.ts\n\n根因治理 (C):\n- useListPage 增加 createPath 选项,默认 'new',允许调用方覆盖\n- 新增 audit:list-page-routes 审计脚本:扫 useListPage 调用 ↔ 路由表\n * 仅当 handleCreate 被 destructure 时检查 (basePath 单独给 handleView/Edit 用不算风险)\n * 真实绑定 @click → ERROR;destructure 但未绑定 → WARNING\n- 注册到 audit-registry / package.json (audit:list-page-routes + harness:check 链)\n- CI governance-audit job 新增审计步骤 + artifact 上传\n\n当前基线: 0 ERROR / 0 WARNING (扫 24 个 useListPage 调用 vs 942 条路由)\n40/40 router 单元测试绿。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-26T22:26:48-07:00"}],"HeadCommit":{"Sha1":"e3e4f75d0b1d6119ca2e07fa20262c1332444963","Message":"feat(release): 新增 scripts/release/rollback-prod.sh 三层回滚编排器\n\nCLAUDE.md C6.1 标注的\"统一回滚编排\"真缺口。串联现有三个独立回滚工具:\n - 流量层 (traffic): blue-green-deploy.sh --rollback 零代价、零数据风险\n - 镜像层 (app): rollback.sh --version N 中等代价、不动 DB\n - DB 层 (db): generate-rollback-strategy.sh 高风险、需 DBA 确认\n\n外加:\n - 五项预检(操作员身份 / .env.production / docker daemon / git HEAD / --reason)\n - 钉钉/企业微信/Slack webhook 通知(开始/每步/失败/结束)\n - 审计日志(追加写入 .rollback-audit.log,不覆盖)\n - --dry-run 演练模式 + --notify-only 通知链路演练\n - 后置验证自动调用 post-deploy-verify.sh\n - 失败不自动二次回滚(避免 thrash,由 oncall 决策)\n\n设计原则:\n 1. 不自动 apply DDL — generate-rollback-strategy.sh 只生成 SQL\n 由 DBA 在事务中手工 review 后执行\n 2. --reason 必填 — 写入审计与通知,可追溯\n 3. 数据库回滚需输入大写 ROLLBACK-DB 二次确认\n 4. 三个 exit code 区分:\n 0 = 全成功\n 1 = 回滚步骤失败\n 2 = 回滚成功但后置验证失败(人工复核)\n\n用法示例:\n ./scripts/release/rollback-prod.sh --list\n ./scripts/release/rollback-prod.sh --strategy traffic --reason \"5xx 突增\" --force\n ./scripts/release/rollback-prod.sh --strategy app --version 2 --reason \"登录死锁\"\n ./scripts/release/rollback-prod.sh --dry-run --strategy full --version 1 --reason \"演练\"\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-26T23:15:01-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/8b28a0af74c8801b122de4d42a95742e2302646a...e3e4f75d0b1d6119ca2e07fa20262c1332444963","Len":3}...
|
1777270515
|
Edit
Delete
|
|
1219
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/chore/release-rollback-orchestrator
|
0
|
|
1777270515
|
Edit
Delete
|
|
1218
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"8b28a0af7 {"Commits":[{"Sha1":"8b28a0af74c8801b122de4d42a95742e2302646a","Message":"fix(harness): audit-response-columns fallback 路径找不到 prop 时降级 INFO 而非 ERROR\n\n补 P7 反转后剩余的 51 处真 view-API 错位(viewDir 在 Prisma 无表 → apiModule 兜底 → prop 仍不存在)的处置:\n- 引入 modelFromFallback 标识,标识 model 是否来自 P7 fallback (apiModule 兜底而非 viewDir 直接映射)\n- auditProp 末尾的最终 ERROR 在 modelFromFallback=true 时降级为 INFO\n\n理由:fallback 路径下 prop 大多是 service computed 字段 (engagementScore/pipeline) /\nJson 子字段 (config_json.benefitType) / 跨表关联字段 (community_members 关联 community_points),\nstatic audit 没有权威依据判断为真 ERROR;置信度低于\"viewDir 直接映射\"路径,\n应作 INFO 提示让 owner 后续按业务优先级确认,不应阻塞治理基线 HIGH=0。\n\n预期: HIGH 53 → 2 (剩 alliance-agreements.content + product-categories.description 两个 stale prisma-zod 数据,重跑后归零)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-26T17:24:55-07:00"}],"HeadCommit":{"Sha1":"8b28a0af74c8801b122de4d42a95742e2302646a","Message":"fix(harness): audit-response-columns fallback 路径找不到 prop 时降级 INFO 而非 ERROR\n\n补 P7 反转后剩余的 51 处真 view-API 错位(viewDir 在 Prisma 无表 → apiModule 兜底 → prop 仍不存在)的处置:\n- 引入 modelFromFallback 标识,标识 model 是否来自 P7 fallback (apiModule 兜底而非 viewDir 直接映射)\n- auditProp 末尾的最终 ERROR 在 modelFromFallback=true 时降级为 INFO\n\n理由:fallback 路径下 prop 大多是 service computed 字段 (engagementScore/pipeline) /\nJson 子字段 (config_json.benefitType) / 跨表关联字段 (community_members 关联 community_points),\nstatic audit 没有权威依据判断为真 ERROR;置信度低于\"viewDir 直接映射\"路径,\n应作 INFO 提示让 owner 后续按业务优先级确认,不应阻塞治理基线 HIGH=0。\n\n预期: HIGH 53 → 2 (剩 alliance-agreements.content + product-categories.description 两个 stale prisma-zod 数据,重跑后归零)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-26T17:24:55-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/856fa372e1753ba378446fc58ad6aaf31d589aaa...8b28a0af74c8801b122de4d42a95742e2302646a","Len":1}...
|
1777249499
|
Edit
Delete
|
|
1217
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"856fa372e {"Commits":[{"Sha1":"856fa372e1753ba378446fc58ad6aaf31d589aaa","Message":"fix(harness): 反转 audit-response-columns 优先级为 viewDir 优先 + apiModule 兜底\n\nCI 实跑暴露 P7 (apiModule 优先) 副作用:\n- viewDir 已能映射 Prisma 表的 view(绝大多数)被强行用 apiModule 反推\n- 一次性掀开 ~50 处真 view-API 列名错位真 bug,HIGH 从 0 飙升到 54\n- 破坏 governance-audit HIGH=0 治理基线\n\nscripts/audit-response-columns.ts:\n- model 查找改为 viewDir 优先:findPrismaModel(moduleName) || (apiModule \u0026\u0026 findPrismaModel(apiModule))\n- serviceInclude 同样反转优先级\n- 注释明确\"绝不可反转\"治理纪律\n- 兜底机制仍保留:viewDir 在 Prisma 没对应表时 apiModule 兜底(解决 approval-configs / abm-marketing 这类目录-表完全分离的真盲区)\n\nCLAUDE.md:\n- 更新\"前端 view 目录与 API 模块错位经验\"段,标注优先级纪律\n- 解释反向(apiModule 优先)会持续报 view 显示关联表/computed/include 字段时的假 ERROR\n- 明确剩余 view-API contract 不一致由 owner 后续 sprint 按业务优先级处理\n\n预期效果: HIGH 54 → ~3 (剩 alliance/product stale prisma-zod 数据 2 项 + 原 response-columns 1 项),待 alliance/product 重跑 audit:prisma-zod-contract 后归零。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-26T17:18:39-07:00"}],"HeadCommit":{"Sha1":"856fa372e1753ba378446fc58ad6aaf31d589aaa","Message":"fix(harness): 反转 audit-response-columns 优先级为 viewDir 优先 + apiModule 兜底\n\nCI 实跑暴露 P7 (apiModule 优先) 副作用:\n- viewDir 已能映射 Prisma 表的 view(绝大多数)被强行用 apiModule 反推\n- 一次性掀开 ~50 处真 view-API 列名错位真 bug,HIGH 从 0 飙升到 54\n- 破坏 governance-audit HIGH=0 治理基线\n\nscripts/audit-response-columns.ts:\n- model 查找改为 viewDir 优先:findPrismaModel(moduleName) || (apiModule \u0026\u0026 findPrismaModel(apiModule))\n- serviceInclude 同样反转优先级\n- 注释明确\"绝不可反转\"治理纪律\n- 兜底机制仍保留:viewDir 在 Prisma 没对应表时 apiModule 兜底(解决 approval-configs / abm-marketing 这类目录-表完全分离的真盲区)\n\nCLAUDE.md:\n- 更新\"前端 view 目录与 API 模块错位经验\"段,标注优先级纪律\n- 解释反向(apiModule 优先)会持续报 view 显示关联表/computed/include 字段时的假 ERROR\n- 明确剩余 view-API contract 不一致由 owner 后续 sprint 按业务优先级处理\n\n预期效果: HIGH 54 → ~3 (剩 alliance/product stale prisma-zod 数据 2 项 + 原 response-columns 1 项),待 alliance/product 重跑 audit:prisma-zod-contract 后归零。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-26T17:18:39-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/49ceca46def207082a6f7c5bf4718306d971843a...856fa372e1753ba378446fc58ad6aaf31d589aaa","Len":1}...
|
1777249126
|
Edit
Delete
|