|
23423
|
C68:未接线主对齐器 fail-closed——修复 STARS/mms_fa 挂名造假调度陷阱
|
60
|
5
|
governance.yml
|
12
|
5
|
0
|
refs/heads/main
|
d4524b485b6859714b59ff6e265c6d3cc79941c6
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"226033fd7f9e6266a679a585a26dfb935d56b1e2","after":"d4524b485b6859714b59ff6e265c6d3cc79941c6","compare_url":"https://gitea.g-hi.com/luoanwu/haizan-ai-production-platform/compare/226033fd7f9e6266a679a585a26dfb935d56b1e2...d4524b485b6859714b59ff6e265c6d3cc79941c6","commits":[{"id":"d4524b485b6859714b59ff6e265c6d3cc79941c6","message":"C68:未接线主对齐器 fail-closed——修复 STARS/mms_fa 挂名造假调度陷阱\n\n调度层曾对无 local_align 生产者的主对齐器(STARS/mms_fa)静默回退\nHubertFA CLI:产物挂着所选模型的名字实际是 HubertFA 对齐的。四层收口:\n- contracts:LOCAL_ALIGN_WIRED_MAIN_ALIGNER_IDS 单源 + hasWiredLocalAlignProducer\n + 契约测试锁(默认主对齐器必须已接线)\n- 执行器:resolvePipelineCommand 对未接线 id 抛 SPAWN_FAILED(桩注入不受影响)\n- 双后端:assertPipelineReady 先于状态判责返回 409\n MAIN_ALIGNER_PRODUCER_NOT_WIRED(逐字节对等 + 各 +1 判责用例)\n- UI:LoadModal 未接线模型禁选 + 琥珀徽标「生产者未接线 · 仅 CLI 研究直跑」\n (浏览器实测研究环境 5 模型清单灰显禁选)\n证据:check:runtime 324/324(floor 320→324)、check:ui 34/34、pnpm check 全绿\n\n本提交同时包含并行会话的 C65-C67 工作树改动(SOFA 校验洗绿修复/KAS 校准\n判责治理/HubertFA 直对齐路由)与 alignment-quality 新门禁。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/haizan-ai-production-platform/commit/d4524b485b6859714b59ff6e265c6d3cc79941c6","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-14T04:50:36-07:00","added":["reports/alignment-quality-governance.latest.json","reports/model-evidence/qingtian-human-kas-calibration.artifact.json","reports/model-evidence/qingtian-human-kas-calibration.latest.json","reports/model-evidence/qingtian-human-kas-calibration.report.html","scripts/check-alignment-quality-governance.mjs","workers/pipeline/analyze_kas_calibration.py","workers/pipeline/build_kas_calibration_artifact.py"],"removed":[],"modified":["CLAUDE.md","README.md","apps/api-fastify/src/modules/alignment/alignment-pipeline.ts","apps/api-fastify/src/modules/alignment/alignment-scoring.ts","apps/api-fastify/src/modules/alignment/alignment.service.ts","apps/api-fastify/test/alignment.pipeline.test.ts","apps/api-fastify/test/alignment.scoring.test.ts","apps/api-fastify/test/alignment.verification.test.ts","apps/api-nestjs/src/alignment/alignment.service.ts","apps/api-nestjs/src/queue/jobs.processor.ts","apps/api-nestjs/test/alignment.pipeline.test.ts","apps/api-nestjs/test/alignment.scoring.test.ts","apps/api-nestjs/test/alignment.verification.test.ts","apps/web/e2e/lyra-studio.spec.ts","apps/web/src/features/lyra-studio/components/modals/LoadModal.tsx","apps/web/src/features/lyra-studio/components/modals/StepModal.tsx","apps/web/src/features/lyra-studio/runMapping.ts","docs/domain/lyric-alignment-production-blueprint.md","package.json","packages/contracts/src/alignment-models.test.ts","packages/contracts/src/alignment-models.ts","packages/pipeline-runner/src/index.ts","packages/pipeline-runner/src/runner.test.ts","reports/alignment-models.latest.json","reports/baseline.json","reports/contract-consumers.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/lyra-prototype-parity.latest.json","reports/migrations.latest.json","reports/model-assets.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/project-truth.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/song-library.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-project-truth.mjs","scripts/governance-report.mjs","workers/pipeline/run_pipeline.py"]}],"total_commits":0,"head_commit":{"id":"d4524b485b6859714b59ff6e265c6d3cc79941c6","message":"C68:未接线主对齐器 fail-closed——修复 STARS/mms_fa 挂名造假调度陷阱\n\n调度层曾对无 local_align 生产者的主对齐器(STARS/mms_fa)静默回退\nHubertFA CLI:产物挂着所选模型的名字实际是 HubertFA 对齐的。四层收口:\n- contracts:LOCAL_ALIGN_WIRED_MAIN_ALIGNER_IDS 单源 + hasWiredLocalAlignProducer\n + 契约测试锁(默认主对齐器必须已接线)\n- 执行器:resolvePipelineCommand 对未接线 id 抛 SPAWN_FAILED(桩注入不受影响)\n- 双后端:assertPipelineReady 先于状态判责返回 409\n MAIN_ALIGNER_PRODUCER_NOT_WIRED(逐字节对等 + 各 +1 判责用例)\n- UI:LoadModal 未接线模型禁选 + 琥珀徽标「生产者未接线 · 仅 CLI 研究直跑」\n (浏览器实测研究环境 5 模型清单灰显禁选)\n证据:check:runtime 324/324(floor 320→324)、check:ui 34/34、pnpm check 全绿\n\n本提交同时包含并行会话的 C65-C67 工作树改动(SOFA 校验洗绿修复/KAS 校准\n判责治理/HubertFA 直对齐路由)与 alignment-quality 新门禁。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/haizan-ai-production-platform/commit/d4524b485b6859714b59ff6e265c6d3cc79941c6","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-14T04:50:36-07:00","added":["reports/alignment-quality-governance.latest.json","reports/model-evidence/qingtian-human-kas-calibration.artifact.json","reports/model-evidence/qingtian-human-kas-calibration.latest.json","reports/model-evidence/qingtian-human-kas-calibration.report.html","scripts/check-alignment-quality-governance.mjs","workers/pipeline/analyze_kas_calibration.py","workers/pipeline/build_kas_calibration_artifact.py"],"removed":[],"modified":["CLAUDE.md","README.md","apps/api-fastify/src/modules/alignment/alignment-pipeline.ts","apps/api-fastify/src/modules/alignment/alignment-scoring.ts","apps/api-fastify/src/modules/alignment/alignment.service.ts","apps/api-fastify/test/alignment.pipeline.test.ts","apps/api-fastify/test/alignment.scoring.test.ts","apps/api-fastify/test/alignment.verification.test.ts","apps/api-nestjs/src/alignment/alignment.service.ts","apps/api-nestjs/src/queue/jobs.processor.ts","apps/api-nestjs/test/alignment.pipeline.test.ts","apps/api-nestjs/test/alignment.scoring.test.ts","apps/api-nestjs/test/alignment.verification.test.ts","apps/web/e2e/lyra-studio.spec.ts","apps/web/src/features/lyra-studio/components/modals/LoadModal.tsx","apps/web/src/features/lyra-studio/components/modals/StepModal.tsx","apps/web/src/features/lyra-studio/runMapping.ts","docs/domain/lyric-alignment-production-blueprint.md","package.json","packages/contracts/src/alignment-models.test.ts","packages/contracts/src/alignment-models.ts","packages/pipeline-runner/src/index.ts","packages/pipeline-runner/src/runner.test.ts","reports/alignment-models.latest.json","reports/baseline.json","reports/contract-consumers.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/lyra-prototype-parity.latest.json","reports/migrations.latest.json","reports/model-assets.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/project-truth.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/song-library.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-project-truth.mjs","scripts/governance-report.mjs","workers/pipeline/run_pipeline.py"]},"repository":{"id":60,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"haizan-ai-production-platform","full_name":"luoanwu/haizan-ai-production-platform","description":"嗨赞AI制作平台:音频分离、歌曲结构分析与歌词精对齐生产工作台","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":4063,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/haizan-ai-production-platform/languages","html_url":"https://gitea.g-hi.com/luoanwu/haizan-ai-production-platform","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/haizan-ai-production-platform","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/haizan-ai-production-platform.git","clone_url":"https://gitea.g-hi.com/luoanwu/haizan-ai-production-platform.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-07-14T12:25:49+08:00","updated_at":"2026-07-14T18:48:41+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1784029847
|
1784029937
|
0
|
1784029846
|
1784029937
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23424
|
feat: initialize voiceprint recognition platform
|
62
|
5
|
governance.yml
|
1
|
5
|
0
|
refs/heads/main
|
1847c52407c1b5d6d4734f1b334f782bd4a76641
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"0000000000000000000000000000000000000000","after":"1847c52407c1b5d6d4734f1b334f782bd4a76641","compare_url":"https://gitea.g-hi.com/","commits":[{"id":"1847c52407c1b5d6d4734f1b334f782bd4a76641","message":"feat: initialize voiceprint recognition platform\n","url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition/commit/1847c52407c1b5d6d4734f1b334f782bd4a76641","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-14T17:42:28-07:00","added":[".claude/agents/acceptance-runner.md",".claude/agents/module-blueprint.md",".claude/launch.json",".claude/skills/business-module-intake/SKILL.md",".claude/skills/frontend-api-react/SKILL.md",".claude/skills/frontend-view-react/SKILL.md",".claude/skills/frontend-view-react/references/view-templates.md",".claude/skills/fullstack-7layer-react/SKILL.md",".claude/skills/fullstack-7layer-react/references/fullstack-react-templates.md",".claude/skills/zustand-store/SKILL.md",".dockerignore",".github/pull_request_template.md",".github/workflows/governance.yml",".gitignore","AGENTS.md","CLAUDE.md","ECAPA_WavLM_声纹方案完整包.zip","README.md","apps/api-fastify/.env.example","apps/api-fastify/.gitignore","apps/api-fastify/package.json","apps/api-fastify/pnpm-lock.yaml","apps/api-fastify/prisma/migrations/20260608150500_init/migration.sql","apps/api-fastify/prisma/migrations/20260705080000_outbox_dead_letter/migration.sql","apps/api-fastify/prisma/migrations/20260714120000_voiceprint_tasks/migration.sql","apps/api-fastify/prisma/migrations/migration_lock.toml","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/app.ts","apps/api-fastify/src/lib/orderMachine.ts","apps/api-fastify/src/lib/statemachine.ts","apps/api-fastify/src/modules/orders/orders.service.ts","apps/api-fastify/src/modules/tenant.ts","apps/api-fastify/src/modules/users/users.service.ts","apps/api-fastify/src/modules/voiceprint/sidecar-client.ts","apps/api-fastify/src/modules/voiceprint/tasks.service.ts","apps/api-fastify/src/plugins/events.ts","apps/api-fastify/src/plugins/outbox.ts","apps/api-fastify/src/plugins/prisma.ts","apps/api-fastify/src/plugins/queue.ts","apps/api-fastify/src/plugins/redis.ts","apps/api-fastify/src/plugins/voiceprint.ts","apps/api-fastify/src/routes/health.ts","apps/api-fastify/src/routes/jobs.ts","apps/api-fastify/src/routes/orders.ts","apps/api-fastify/src/routes/sse.ts","apps/api-fastify/src/routes/users.ts","apps/api-fastify/src/routes/voiceprint.ts","apps/api-fastify/src/routes/ws.ts","apps/api-fastify/src/server.ts","apps/api-fastify/src/types.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-fastify/test/orders.integration.test.ts","apps/api-fastify/test/outbox.deadletter.test.ts","apps/api-fastify/test/realtime.tenant.test.ts","apps/api-fastify/test/voiceprint.acceptance.test.ts","apps/api-fastify/tsconfig.json","apps/api-fastify/vitest.config.ts","apps/api-nestjs/.env.example","apps/api-nestjs/.gitignore","apps/api-nestjs/docker-compose.yml","apps/api-nestjs/nest-cli.json","apps/api-nestjs/package.json","apps/api-nestjs/pnpm-lock.yaml","apps/api-nestjs/prisma/migrations/20260608150500_init/migration.sql","apps/api-nestjs/prisma/migrations/20260705080000_outbox_dead_letter/migration.sql","apps/api-nestjs/prisma/migrations/20260714120000_voiceprint_tasks/migration.sql","apps/api-nestjs/prisma/migrations/migration_lock.toml","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/prisma/seed.ts","apps/api-nestjs/src/app.module.ts","apps/api-nestjs/src/common/envelope.ts","apps/api-nestjs/src/common/tenant.decorator.ts","apps/api-nestjs/src/common/zod-validation.pipe.ts","apps/api-nestjs/src/create-app.ts","apps/api-nestjs/src/events/event-bus.service.ts","apps/api-nestjs/src/events/events.gateway.ts","apps/api-nestjs/src/events/events.module.ts","apps/api-nestjs/src/events/fanout.service.ts","apps/api-nestjs/src/events/outbox-dispatcher.service.ts","apps/api-nestjs/src/health/health.controller.ts","apps/api-nestjs/src/health/health.module.ts","apps/api-nestjs/src/main.ts","apps/api-nestjs/src/orders/orders.controller.ts","apps/api-nestjs/src/orders/orders.module.ts","apps/api-nestjs/src/orders/orders.service.ts","apps/api-nestjs/src/prisma/prisma.module.ts","apps/api-nestjs/src/prisma/prisma.service.ts","apps/api-nestjs/src/queue/jobs.controller.ts","apps/api-nestjs/src/queue/jobs.processor.ts","apps/api-nestjs/src/queue/queue.module.ts","apps/api-nestjs/src/queue/queue.types.ts","apps/api-nestjs/src/redis/redis.module.ts","apps/api-nestjs/src/sse/sse.controller.ts","apps/api-nestjs/src/sse/sse.module.ts","apps/api-nestjs/src/statemachine/index.ts","apps/api-nestjs/src/statemachine/order.machine.ts","apps/api-nestjs/src/statemachine/statemachine.engine.ts","apps/api-nestjs/src/statemachine/statemachine.types.ts","apps/api-nestjs/src/users/users.controller.ts","apps/api-nestjs/src/users/users.module.ts","apps/api-nestjs/src/users/users.service.ts","apps/api-nestjs/src/voiceprint/sidecar.client.ts","apps/api-nestjs/src/voiceprint/voiceprint.controller.ts","apps/api-nestjs/src/voiceprint/voiceprint.module.ts","apps/api-nestjs/src/voiceprint/voiceprint.processor.ts","apps/api-nestjs/src/voiceprint/voiceprint.service.ts","apps/api-nestjs/src/voiceprint/voiceprint.types.ts","apps/api-nestjs/test/http.acceptance.test.ts","apps/api-nestjs/test/orders.integration.test.ts","apps/api-nestjs/test/outbox.deadletter.test.ts","apps/api-nestjs/test/realtime.tenant.test.ts","apps/api-nestjs/test/voiceprint.acceptance.test.ts","apps/api-nestjs/tsconfig.build.json","apps/api-nestjs/tsconfig.json","apps/api-nestjs/vitest.config.ts","apps/web/.env.example","apps/web/.gitignore","apps/web/components.json","apps/web/e2e/acceptance.spec.ts","apps/web/eslint.config.mjs","apps/web/next.config.ts","apps/web/package.json","apps/web/playwright.config.ts","apps/web/pnpm-lock.yaml","apps/web/postcss.config.js","apps/web/src/app/globals.css","apps/web/src/app/layout.tsx","apps/web/src/app/page.tsx","apps/web/src/app/voiceprint/page.tsx","apps/web/src/components/EventFeed.tsx","apps/web/src/components/OrdersPanel.tsx","apps/web/src/components/RealtimeBar.tsx","apps/web/src/components/UsersPanel.tsx","apps/web/src/components/ui/badge.tsx","apps/web/src/components/ui/button.tsx","apps/web/src/components/ui/card.tsx","apps/web/src/components/ui/input.tsx","apps/web/src/components/ui/label.tsx","apps/web/src/components/ui/separator.tsx","apps/web/src/components/voiceprint/AudioPicker.tsx","apps/web/src/components/voiceprint/EnrollPanel.tsx","apps/web/src/components/voiceprint/IdentifyPanel.tsx","apps/web/src/components/voiceprint/SpeakersPanel.tsx","apps/web/src/components/voiceprint/TasksPanel.tsx","apps/web/src/components/voiceprint/useVoiceprintTask.ts","apps/web/src/hooks/useRealtime.ts","apps/web/src/lib/api.ts","apps/web/src/lib/providers.tsx","apps/web/src/lib/types.ts","apps/web/src/lib/utils.ts","apps/web/src/store/realtime.ts","apps/web/src/store/useAppStore.ts","apps/web/tailwind.config.ts","apps/web/tsconfig.json","deploy/vm/.env.vm.example","deploy/vm/Caddyfile","deploy/vm/Dockerfile.node","deploy/vm/Dockerfile.research","deploy/vm/compose.yaml","deploy/vm/requirements-research.txt","deploy/vm/systemd/voiceprint-compose.service","docs/README.md","docs/adr/0001-use-typescript-fullstack.md","docs/adr/0002-use-nextjs-app-router.md","docs/adr/0003-use-nestjs-with-fastify-adapter.md","docs/adr/0004-use-postgresql.md","docs/adr/0005-use-prisma.md","docs/adr/0006-realtime-sse-and-websocket.md","docs/adr/0007-use-bullmq-queue.md","docs/adr/0008-monorepo-pnpm-turborepo.md","docs/adr/0009-dual-backend-governance-parity.md","docs/deployment-vm.md","docs/domain-glossary.md","docs/domain/owner-matrix.md","docs/domain/voiceprint-blueprint.md","docs/karaoke-singer-personalized-dsp-system-design.md","docs/migration-notes.md","docs/product-prd.md","docs/research-age-gender.md","docs/standards/api-standard.md","docs/standards/backend-standard.md","docs/standards/database-standard.md","docs/standards/frontend-standard.md","docs/standards/git-standard.md","docs/standards/naming-standard.md","docs/standards/review-standard.md","package.json","packages/config/eslint/base.mjs","packages/config/package.json","packages/config/prettier/index.json","packages/config/tsconfig/base.json","packages/config/tsconfig/nextjs.json","packages/config/tsconfig/node.json","packages/contracts/package.json","packages/contracts/src/contracts.test.ts","packages/contracts/src/index.ts","packages/contracts/src/order.ts","packages/contracts/src/realtime.ts","packages/contracts/src/statemachine.test.ts","packages/contracts/src/statemachine.ts","packages/contracts/src/tenant.ts","packages/contracts/src/user.ts","packages/contracts/src/voiceprint.test.ts","packages/contracts/src/voiceprint.ts","packages/contracts/tsconfig.json","pnpm-lock.yaml","pnpm-workspace.yaml","pyproject.toml","reports/baseline.json","reports/contract-consumers.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/research-age-gender.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","reports/voiceprint-real-acceptance.latest.json","scripts/backup-vm.sh","scripts/check-contract-consumers.mjs","scripts/check-dual-backend-parity.mjs","scripts/check-governance-docs.mjs","scripts/check-migrations.mjs","scripts/check-naming.mjs","scripts/check-order-concurrency-guard.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-schema-sync.mjs","scripts/check-ui-acceptance.mjs","scripts/check-validation-source.mjs","scripts/check_voiceprint_real.py","scripts/deploy-vm.sh","scripts/fix-macos-faiss-libomp.sh","scripts/governance-report.mjs","scripts/init-vm-env.sh","scripts/stop-vm.sh","scripts/vm-status.sh","src/speaker_embedding/__init__.py","src/speaker_embedding/age_gender_cli.py","src/speaker_embedding/age_gender_research.py","src/speaker_embedding/cli.py","src/speaker_embedding/extractor.py","src/speaker_embedding/profile_cli.py","src/speaker_embedding/sidecar.py","src/speaker_embedding/singing_activity.py","src/speaker_embedding/speaker_db.py","src/speaker_embedding/speaker_id_cli.py","src/speaker_embedding/timbre.py","tests/test_age_gender_research.py","tests/test_aggregation.py","tests/test_sidecar.py","tests/test_singing_activity.py","tests/test_speaker_db.py","tsconfig.base.json","turbo.json","声纹识别.zip"],"removed":[],"modified":[]}],"total_commits":0,"head_commit":{"id":"1847c52407c1b5d6d4734f1b334f782bd4a76641","message":"feat: initialize voiceprint recognition platform\n","url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition/commit/1847c52407c1b5d6d4734f1b334f782bd4a76641","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-14T17:42:28-07:00","added":[".claude/agents/acceptance-runner.md",".claude/agents/module-blueprint.md",".claude/launch.json",".claude/skills/business-module-intake/SKILL.md",".claude/skills/frontend-api-react/SKILL.md",".claude/skills/frontend-view-react/SKILL.md",".claude/skills/frontend-view-react/references/view-templates.md",".claude/skills/fullstack-7layer-react/SKILL.md",".claude/skills/fullstack-7layer-react/references/fullstack-react-templates.md",".claude/skills/zustand-store/SKILL.md",".dockerignore",".github/pull_request_template.md",".github/workflows/governance.yml",".gitignore","AGENTS.md","CLAUDE.md","ECAPA_WavLM_声纹方案完整包.zip","README.md","apps/api-fastify/.env.example","apps/api-fastify/.gitignore","apps/api-fastify/package.json","apps/api-fastify/pnpm-lock.yaml","apps/api-fastify/prisma/migrations/20260608150500_init/migration.sql","apps/api-fastify/prisma/migrations/20260705080000_outbox_dead_letter/migration.sql","apps/api-fastify/prisma/migrations/20260714120000_voiceprint_tasks/migration.sql","apps/api-fastify/prisma/migrations/migration_lock.toml","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/app.ts","apps/api-fastify/src/lib/orderMachine.ts","apps/api-fastify/src/lib/statemachine.ts","apps/api-fastify/src/modules/orders/orders.service.ts","apps/api-fastify/src/modules/tenant.ts","apps/api-fastify/src/modules/users/users.service.ts","apps/api-fastify/src/modules/voiceprint/sidecar-client.ts","apps/api-fastify/src/modules/voiceprint/tasks.service.ts","apps/api-fastify/src/plugins/events.ts","apps/api-fastify/src/plugins/outbox.ts","apps/api-fastify/src/plugins/prisma.ts","apps/api-fastify/src/plugins/queue.ts","apps/api-fastify/src/plugins/redis.ts","apps/api-fastify/src/plugins/voiceprint.ts","apps/api-fastify/src/routes/health.ts","apps/api-fastify/src/routes/jobs.ts","apps/api-fastify/src/routes/orders.ts","apps/api-fastify/src/routes/sse.ts","apps/api-fastify/src/routes/users.ts","apps/api-fastify/src/routes/voiceprint.ts","apps/api-fastify/src/routes/ws.ts","apps/api-fastify/src/server.ts","apps/api-fastify/src/types.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-fastify/test/orders.integration.test.ts","apps/api-fastify/test/outbox.deadletter.test.ts","apps/api-fastify/test/realtime.tenant.test.ts","apps/api-fastify/test/voiceprint.acceptance.test.ts","apps/api-fastify/tsconfig.json","apps/api-fastify/vitest.config.ts","apps/api-nestjs/.env.example","apps/api-nestjs/.gitignore","apps/api-nestjs/docker-compose.yml","apps/api-nestjs/nest-cli.json","apps/api-nestjs/package.json","apps/api-nestjs/pnpm-lock.yaml","apps/api-nestjs/prisma/migrations/20260608150500_init/migration.sql","apps/api-nestjs/prisma/migrations/20260705080000_outbox_dead_letter/migration.sql","apps/api-nestjs/prisma/migrations/20260714120000_voiceprint_tasks/migration.sql","apps/api-nestjs/prisma/migrations/migration_lock.toml","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/prisma/seed.ts","apps/api-nestjs/src/app.module.ts","apps/api-nestjs/src/common/envelope.ts","apps/api-nestjs/src/common/tenant.decorator.ts","apps/api-nestjs/src/common/zod-validation.pipe.ts","apps/api-nestjs/src/create-app.ts","apps/api-nestjs/src/events/event-bus.service.ts","apps/api-nestjs/src/events/events.gateway.ts","apps/api-nestjs/src/events/events.module.ts","apps/api-nestjs/src/events/fanout.service.ts","apps/api-nestjs/src/events/outbox-dispatcher.service.ts","apps/api-nestjs/src/health/health.controller.ts","apps/api-nestjs/src/health/health.module.ts","apps/api-nestjs/src/main.ts","apps/api-nestjs/src/orders/orders.controller.ts","apps/api-nestjs/src/orders/orders.module.ts","apps/api-nestjs/src/orders/orders.service.ts","apps/api-nestjs/src/prisma/prisma.module.ts","apps/api-nestjs/src/prisma/prisma.service.ts","apps/api-nestjs/src/queue/jobs.controller.ts","apps/api-nestjs/src/queue/jobs.processor.ts","apps/api-nestjs/src/queue/queue.module.ts","apps/api-nestjs/src/queue/queue.types.ts","apps/api-nestjs/src/redis/redis.module.ts","apps/api-nestjs/src/sse/sse.controller.ts","apps/api-nestjs/src/sse/sse.module.ts","apps/api-nestjs/src/statemachine/index.ts","apps/api-nestjs/src/statemachine/order.machine.ts","apps/api-nestjs/src/statemachine/statemachine.engine.ts","apps/api-nestjs/src/statemachine/statemachine.types.ts","apps/api-nestjs/src/users/users.controller.ts","apps/api-nestjs/src/users/users.module.ts","apps/api-nestjs/src/users/users.service.ts","apps/api-nestjs/src/voiceprint/sidecar.client.ts","apps/api-nestjs/src/voiceprint/voiceprint.controller.ts","apps/api-nestjs/src/voiceprint/voiceprint.module.ts","apps/api-nestjs/src/voiceprint/voiceprint.processor.ts","apps/api-nestjs/src/voiceprint/voiceprint.service.ts","apps/api-nestjs/src/voiceprint/voiceprint.types.ts","apps/api-nestjs/test/http.acceptance.test.ts","apps/api-nestjs/test/orders.integration.test.ts","apps/api-nestjs/test/outbox.deadletter.test.ts","apps/api-nestjs/test/realtime.tenant.test.ts","apps/api-nestjs/test/voiceprint.acceptance.test.ts","apps/api-nestjs/tsconfig.build.json","apps/api-nestjs/tsconfig.json","apps/api-nestjs/vitest.config.ts","apps/web/.env.example","apps/web/.gitignore","apps/web/components.json","apps/web/e2e/acceptance.spec.ts","apps/web/eslint.config.mjs","apps/web/next.config.ts","apps/web/package.json","apps/web/playwright.config.ts","apps/web/pnpm-lock.yaml","apps/web/postcss.config.js","apps/web/src/app/globals.css","apps/web/src/app/layout.tsx","apps/web/src/app/page.tsx","apps/web/src/app/voiceprint/page.tsx","apps/web/src/components/EventFeed.tsx","apps/web/src/components/OrdersPanel.tsx","apps/web/src/components/RealtimeBar.tsx","apps/web/src/components/UsersPanel.tsx","apps/web/src/components/ui/badge.tsx","apps/web/src/components/ui/button.tsx","apps/web/src/components/ui/card.tsx","apps/web/src/components/ui/input.tsx","apps/web/src/components/ui/label.tsx","apps/web/src/components/ui/separator.tsx","apps/web/src/components/voiceprint/AudioPicker.tsx","apps/web/src/components/voiceprint/EnrollPanel.tsx","apps/web/src/components/voiceprint/IdentifyPanel.tsx","apps/web/src/components/voiceprint/SpeakersPanel.tsx","apps/web/src/components/voiceprint/TasksPanel.tsx","apps/web/src/components/voiceprint/useVoiceprintTask.ts","apps/web/src/hooks/useRealtime.ts","apps/web/src/lib/api.ts","apps/web/src/lib/providers.tsx","apps/web/src/lib/types.ts","apps/web/src/lib/utils.ts","apps/web/src/store/realtime.ts","apps/web/src/store/useAppStore.ts","apps/web/tailwind.config.ts","apps/web/tsconfig.json","deploy/vm/.env.vm.example","deploy/vm/Caddyfile","deploy/vm/Dockerfile.node","deploy/vm/Dockerfile.research","deploy/vm/compose.yaml","deploy/vm/requirements-research.txt","deploy/vm/systemd/voiceprint-compose.service","docs/README.md","docs/adr/0001-use-typescript-fullstack.md","docs/adr/0002-use-nextjs-app-router.md","docs/adr/0003-use-nestjs-with-fastify-adapter.md","docs/adr/0004-use-postgresql.md","docs/adr/0005-use-prisma.md","docs/adr/0006-realtime-sse-and-websocket.md","docs/adr/0007-use-bullmq-queue.md","docs/adr/0008-monorepo-pnpm-turborepo.md","docs/adr/0009-dual-backend-governance-parity.md","docs/deployment-vm.md","docs/domain-glossary.md","docs/domain/owner-matrix.md","docs/domain/voiceprint-blueprint.md","docs/karaoke-singer-personalized-dsp-system-design.md","docs/migration-notes.md","docs/product-prd.md","docs/research-age-gender.md","docs/standards/api-standard.md","docs/standards/backend-standard.md","docs/standards/database-standard.md","docs/standards/frontend-standard.md","docs/standards/git-standard.md","docs/standards/naming-standard.md","docs/standards/review-standard.md","package.json","packages/config/eslint/base.mjs","packages/config/package.json","packages/config/prettier/index.json","packages/config/tsconfig/base.json","packages/config/tsconfig/nextjs.json","packages/config/tsconfig/node.json","packages/contracts/package.json","packages/contracts/src/contracts.test.ts","packages/contracts/src/index.ts","packages/contracts/src/order.ts","packages/contracts/src/realtime.ts","packages/contracts/src/statemachine.test.ts","packages/contracts/src/statemachine.ts","packages/contracts/src/tenant.ts","packages/contracts/src/user.ts","packages/contracts/src/voiceprint.test.ts","packages/contracts/src/voiceprint.ts","packages/contracts/tsconfig.json","pnpm-lock.yaml","pnpm-workspace.yaml","pyproject.toml","reports/baseline.json","reports/contract-consumers.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/research-age-gender.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","reports/voiceprint-real-acceptance.latest.json","scripts/backup-vm.sh","scripts/check-contract-consumers.mjs","scripts/check-dual-backend-parity.mjs","scripts/check-governance-docs.mjs","scripts/check-migrations.mjs","scripts/check-naming.mjs","scripts/check-order-concurrency-guard.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-schema-sync.mjs","scripts/check-ui-acceptance.mjs","scripts/check-validation-source.mjs","scripts/check_voiceprint_real.py","scripts/deploy-vm.sh","scripts/fix-macos-faiss-libomp.sh","scripts/governance-report.mjs","scripts/init-vm-env.sh","scripts/stop-vm.sh","scripts/vm-status.sh","src/speaker_embedding/__init__.py","src/speaker_embedding/age_gender_cli.py","src/speaker_embedding/age_gender_research.py","src/speaker_embedding/cli.py","src/speaker_embedding/extractor.py","src/speaker_embedding/profile_cli.py","src/speaker_embedding/sidecar.py","src/speaker_embedding/singing_activity.py","src/speaker_embedding/speaker_db.py","src/speaker_embedding/speaker_id_cli.py","src/speaker_embedding/timbre.py","tests/test_age_gender_research.py","tests/test_aggregation.py","tests/test_sidecar.py","tests/test_singing_activity.py","tests/test_speaker_db.py","tsconfig.base.json","turbo.json","声纹识别.zip"],"removed":[],"modified":[]},"repository":{"id":62,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"voiceprint-recognition","full_name":"luoanwu/voiceprint-recognition","description":"ECAPA+WavLM 声纹注册识别、1:N ANN 检索与声音特征画像平台","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":27,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/voiceprint-recognition/languages","html_url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/voiceprint-recognition","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/voiceprint-recognition.git","clone_url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-07-15T08:42:42+08:00","updated_at":"2026-07-15T08:43:03+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1784076185
|
1784076276
|
0
|
1784076183
|
1784076277
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23425
|
feat: add governed voice profile acoustics
|
62
|
5
|
governance.yml
|
2
|
5
|
0
|
refs/heads/main
|
64bd1beaac8e1a4c1063707c3d0bbf5f7e466c76
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"1847c52407c1b5d6d4734f1b334f782bd4a76641","after":"64bd1beaac8e1a4c1063707c3d0bbf5f7e466c76","compare_url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition/compare/1847c52407c1b5d6d4734f1b334f782bd4a76641...64bd1beaac8e1a4c1063707c3d0bbf5f7e466c76","commits":[{"id":"64bd1beaac8e1a4c1063707c3d0bbf5f7e466c76","message":"feat: add governed voice profile acoustics\n","url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition/commit/64bd1beaac8e1a4c1063707c3d0bbf5f7e466c76","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-14T18:10:48-07:00","added":["tests/test_timbre.py"],"removed":[],"modified":["CLAUDE.md","docs/domain/voiceprint-blueprint.md","docs/karaoke-singer-personalized-dsp-system-design.md","docs/product-prd.md","reports/baseline.json","reports/contract-consumers.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/validation-source.latest.json","reports/voiceprint-real-acceptance.latest.json","scripts/check_voiceprint_real.py","scripts/governance-report.mjs","src/speaker_embedding/speaker_db.py","src/speaker_embedding/timbre.py","tests/test_speaker_db.py"]}],"total_commits":0,"head_commit":{"id":"64bd1beaac8e1a4c1063707c3d0bbf5f7e466c76","message":"feat: add governed voice profile acoustics\n","url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition/commit/64bd1beaac8e1a4c1063707c3d0bbf5f7e466c76","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-14T18:10:48-07:00","added":["tests/test_timbre.py"],"removed":[],"modified":["CLAUDE.md","docs/domain/voiceprint-blueprint.md","docs/karaoke-singer-personalized-dsp-system-design.md","docs/product-prd.md","reports/baseline.json","reports/contract-consumers.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/validation-source.latest.json","reports/voiceprint-real-acceptance.latest.json","scripts/check_voiceprint_real.py","scripts/governance-report.mjs","src/speaker_embedding/speaker_db.py","src/speaker_embedding/timbre.py","tests/test_speaker_db.py"]},"repository":{"id":62,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"voiceprint-recognition","full_name":"luoanwu/voiceprint-recognition","description":"ECAPA+WavLM 声纹注册识别、1:N ANN 检索与声音特征画像平台","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":645,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/voiceprint-recognition/languages","html_url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/voiceprint-recognition","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/voiceprint-recognition.git","clone_url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-07-15T08:42:42+08:00","updated_at":"2026-07-15T08:43:03+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1784077862
|
1784077952
|
0
|
1784077861
|
1784077953
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23428
|
fix: harden microphone recording fallback
|
62
|
5
|
governance.yml
|
5
|
5
|
0
|
refs/heads/main
|
99c0c69becb251d64b434b6ab315d0562888ad8d
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"32c70bb2198cf25b362a49e4f74387dd1a47768a","after":"99c0c69becb251d64b434b6ab315d0562888ad8d","compare_url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition/compare/32c70bb2198cf25b362a49e4f74387dd1a47768a...99c0c69becb251d64b434b6ab315d0562888ad8d","commits":[{"id":"99c0c69becb251d64b434b6ab315d0562888ad8d","message":"fix: harden microphone recording fallback\n","url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition/commit/99c0c69becb251d64b434b6ab315d0562888ad8d","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-15T21:03:36-07:00","added":[],"removed":[],"modified":["CLAUDE.md","apps/web/e2e/acceptance.spec.ts","apps/web/src/components/voiceprint/AudioPicker.tsx","docs/deployment-vm.md","docs/domain/voiceprint-blueprint.md","docs/karaoke-singer-personalized-dsp-system-design.md","docs/product-prd.md","reports/baseline.json","reports/contract-consumers.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-ui-acceptance.mjs"]}],"total_commits":0,"head_commit":{"id":"99c0c69becb251d64b434b6ab315d0562888ad8d","message":"fix: harden microphone recording fallback\n","url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition/commit/99c0c69becb251d64b434b6ab315d0562888ad8d","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-15T21:03:36-07:00","added":[],"removed":[],"modified":["CLAUDE.md","apps/web/e2e/acceptance.spec.ts","apps/web/src/components/voiceprint/AudioPicker.tsx","docs/deployment-vm.md","docs/domain/voiceprint-blueprint.md","docs/karaoke-singer-personalized-dsp-system-design.md","docs/product-prd.md","reports/baseline.json","reports/contract-consumers.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-ui-acceptance.mjs"]},"repository":{"id":62,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"voiceprint-recognition","full_name":"luoanwu/voiceprint-recognition","description":"ECAPA+WavLM 声纹注册识别、1:N ANN 检索与声音特征画像平台","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":1195,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/voiceprint-recognition/languages","html_url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/voiceprint-recognition","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/voiceprint-recognition.git","clone_url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-07-15T08:42:42+08:00","updated_at":"2026-07-15T13:19:41+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1784174640
|
1784174731
|
0
|
1784174638
|
1784174731
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23430
|
Strengthen voiceprint governance and runtime accep Strengthen voiceprint governance and runtime acceptance...
|
62
|
5
|
governance.yml
|
6
|
5
|
0
|
refs/heads/main
|
73bd623dfedff79a02fac961d1c16f106137e2df
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"99c0c69becb251d64b434b6ab315d0562888ad8d","after":"73bd623dfedff79a02fac961d1c16f106137e2df","compare_url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition/compare/99c0c69becb251d64b434b6ab315d0562888ad8d...73bd623dfedff79a02fac961d1c16f106137e2df","commits":[{"id":"73bd623dfedff79a02fac961d1c16f106137e2df","message":"Strengthen voiceprint governance and runtime acceptance\n","url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition/commit/73bd623dfedff79a02fac961d1c16f106137e2df","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-21T10:13:40-07:00","added":[],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/src/modules/voiceprint/sidecar-client.ts","apps/api-fastify/test/voiceprint.acceptance.test.ts","apps/api-nestjs/src/voiceprint/sidecar.client.ts","apps/api-nestjs/test/voiceprint.acceptance.test.ts","apps/web/e2e/acceptance.spec.ts","apps/web/src/components/voiceprint/IdentifyPanel.tsx","docs/domain/voiceprint-blueprint.md","docs/product-prd.md","packages/contracts/src/voiceprint.test.ts","packages/contracts/src/voiceprint.ts","reports/contract-consumers.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/voiceprint-sidecar-ui-stub.mjs","src/speaker_embedding/age_gender_research.py","src/speaker_embedding/age_gender_sidecar.py","src/speaker_embedding/extractor.py","src/speaker_embedding/sidecar.py","src/speaker_embedding/speaker_db.py","src/speaker_embedding/timbre.py","tests/test_age_gender_research.py","tests/test_age_gender_sidecar.py","tests/test_sidecar.py","tests/test_speaker_db.py"]},{"id":"40a5c4ef3404ccd2f51b8244626d95d1b5939512","message":"fix: stabilize UI acceptance runner\n","url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition/commit/40a5c4ef3404ccd2f51b8244626d95d1b5939512","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-18T23:52:59-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/contract-consumers.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-ui-acceptance.mjs"]}],"total_commits":0,"head_commit":{"id":"73bd623dfedff79a02fac961d1c16f106137e2df","message":"Strengthen voiceprint governance and runtime acceptance\n","url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition/commit/73bd623dfedff79a02fac961d1c16f106137e2df","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-21T10:13:40-07:00","added":[],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/src/modules/voiceprint/sidecar-client.ts","apps/api-fastify/test/voiceprint.acceptance.test.ts","apps/api-nestjs/src/voiceprint/sidecar.client.ts","apps/api-nestjs/test/voiceprint.acceptance.test.ts","apps/web/e2e/acceptance.spec.ts","apps/web/src/components/voiceprint/IdentifyPanel.tsx","docs/domain/voiceprint-blueprint.md","docs/product-prd.md","packages/contracts/src/voiceprint.test.ts","packages/contracts/src/voiceprint.ts","reports/contract-consumers.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/voiceprint-sidecar-ui-stub.mjs","src/speaker_embedding/age_gender_research.py","src/speaker_embedding/age_gender_sidecar.py","src/speaker_embedding/extractor.py","src/speaker_embedding/sidecar.py","src/speaker_embedding/speaker_db.py","src/speaker_embedding/timbre.py","tests/test_age_gender_research.py","tests/test_age_gender_sidecar.py","tests/test_sidecar.py","tests/test_speaker_db.py"]},"repository":{"id":62,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"voiceprint-recognition","full_name":"luoanwu/voiceprint-recognition","description":"ECAPA+WavLM 声纹注册识别、1:N ANN 检索与声音特征画像平台","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":1293,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/voiceprint-recognition/languages","html_url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/voiceprint-recognition","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/voiceprint-recognition.git","clone_url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":2,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-07-15T08:42:42+08:00","updated_at":"2026-07-16T12:03:58+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1784654024
|
1784655050
|
0
|
1784654024
|
1784655050
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23433
|
feat: 歌唱域质量治理与全面治理收口(C16/C17)
|
63
|
5
|
governance.yml
|
2
|
5
|
0
|
refs/heads/main
|
1b55d1eece101ec72f25af96f62713da05ae06ff
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"f7f58401d267fffa37e2c7282f531354478eeebf","after":"1b55d1eece101ec72f25af96f62713da05ae06ff","compare_url":"https://gitea.g-hi.com/luoanwu/forced-alignment/compare/f7f58401d267fffa37e2c7282f531354478eeebf...1b55d1eece101ec72f25af96f62713da05ae06ff","commits":[{"id":"1b55d1eece101ec72f25af96f62713da05ae06ff","message":"feat: 歌唱域质量治理与全面治理收口(C16/C17)\n\n- 工作台:无词音频隔离(叶子字区间单源激活)+ 波形 1-16x 视窗缩放;e2e +2(共 7 用例)\n- contracts:Qwen3 域受限/演唱序列冲突 fail-closed 归一化;complete 契约补索引唯一/\n 按 index 时间单调/跨句跨字无重叠 fail-closed(蓝图 §6);asr_anchor 留档进 qualityData\n- C16:alignment 域纳入全部写链行为门禁(writeModels/租户入口/outbox/旁路 publish/\n 并发守护/校验单源/双后端红线+测试覆盖绊网),逐门禁负向验红;样板面板挂 /samples 回运行路径\n- C17:governance-report --update-baseline 改 merge 写入,保住 testsPassed/uiTestsPassed 地板\n- 两后端:complete/fail/accept 目标态收敛 assertTransition 单源;alignment 非法迁移补\n 409 INVALID_TRANSITION 判责(原 500);新增 fail/retry/409 判责验收用例\n- 文档:G20 如实改述(docs-truth 断言机器锁定)、G23 登记(工作台前端栈差距)、\n owner-matrix/蓝图口径修正、C16/C17 战役回灌经验库\n- 棘轮收紧:testsPassed 61→67、ownTestCases 68→74、uiTestsPassed 7;三级门禁\n 2026-07-21 本仓实跑全绿(check / check:runtime / check:ui)\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/forced-alignment/commit/1b55d1eece101ec72f25af96f62713da05ae06ff","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-21T19:55:12-07:00","added":["apps/web/src/app/samples/page.tsx"],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/src/modules/alignment/alignment.service.ts","apps/api-fastify/src/routes/alignment-runs.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-nestjs/src/alignment/alignment.service.ts","apps/api-nestjs/test/http.acceptance.test.ts","apps/web/e2e/acceptance.spec.ts","apps/web/src/app/api/alignment/align/route.ts","apps/web/src/app/globals.css","apps/web/src/features/alignment/api/alignment.ts","apps/web/src/features/alignment/components/AlignmentWorkbench.tsx","deploy/.env.vm.example","deploy/docker-compose.vm.yml","docs/domain/forced-alignment-workbench-blueprint.md","docs/domain/owner-matrix.md","docs/governance-experience.md","packages/contracts/src/alignment.ts","packages/contracts/src/contracts.test.ts","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-docs-truth.mjs","scripts/check-dual-backend-parity.mjs","scripts/check-order-concurrency-guard.mjs","scripts/check-validation-source.mjs","scripts/governance-report.mjs"]}],"total_commits":0,"head_commit":{"id":"1b55d1eece101ec72f25af96f62713da05ae06ff","message":"feat: 歌唱域质量治理与全面治理收口(C16/C17)\n\n- 工作台:无词音频隔离(叶子字区间单源激活)+ 波形 1-16x 视窗缩放;e2e +2(共 7 用例)\n- contracts:Qwen3 域受限/演唱序列冲突 fail-closed 归一化;complete 契约补索引唯一/\n 按 index 时间单调/跨句跨字无重叠 fail-closed(蓝图 §6);asr_anchor 留档进 qualityData\n- C16:alignment 域纳入全部写链行为门禁(writeModels/租户入口/outbox/旁路 publish/\n 并发守护/校验单源/双后端红线+测试覆盖绊网),逐门禁负向验红;样板面板挂 /samples 回运行路径\n- C17:governance-report --update-baseline 改 merge 写入,保住 testsPassed/uiTestsPassed 地板\n- 两后端:complete/fail/accept 目标态收敛 assertTransition 单源;alignment 非法迁移补\n 409 INVALID_TRANSITION 判责(原 500);新增 fail/retry/409 判责验收用例\n- 文档:G20 如实改述(docs-truth 断言机器锁定)、G23 登记(工作台前端栈差距)、\n owner-matrix/蓝图口径修正、C16/C17 战役回灌经验库\n- 棘轮收紧:testsPassed 61→67、ownTestCases 68→74、uiTestsPassed 7;三级门禁\n 2026-07-21 本仓实跑全绿(check / check:runtime / check:ui)\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/forced-alignment/commit/1b55d1eece101ec72f25af96f62713da05ae06ff","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-21T19:55:12-07:00","added":["apps/web/src/app/samples/page.tsx"],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/src/modules/alignment/alignment.service.ts","apps/api-fastify/src/routes/alignment-runs.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-nestjs/src/alignment/alignment.service.ts","apps/api-nestjs/test/http.acceptance.test.ts","apps/web/e2e/acceptance.spec.ts","apps/web/src/app/api/alignment/align/route.ts","apps/web/src/app/globals.css","apps/web/src/features/alignment/api/alignment.ts","apps/web/src/features/alignment/components/AlignmentWorkbench.tsx","deploy/.env.vm.example","deploy/docker-compose.vm.yml","docs/domain/forced-alignment-workbench-blueprint.md","docs/domain/owner-matrix.md","docs/governance-experience.md","packages/contracts/src/alignment.ts","packages/contracts/src/contracts.test.ts","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-docs-truth.mjs","scripts/check-dual-backend-parity.mjs","scripts/check-order-concurrency-guard.mjs","scripts/check-validation-source.mjs","scripts/governance-report.mjs"]},"repository":{"id":63,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"forced-alignment","full_name":"luoanwu/forced-alignment","description":"纯人声与歌词精准强制对齐工作台","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":29497,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/forced-alignment/languages","html_url":"https://gitea.g-hi.com/luoanwu/forced-alignment","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/forced-alignment","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/forced-alignment.git","clone_url":"https://gitea.g-hi.com/luoanwu/forced-alignment.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-07-22T08:56:49+08:00","updated_at":"2026-07-22T08:59:29+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1784688944
|
1784689972
|
0
|
1784688944
|
1784689973
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23434
|
fix: 工作台展示与激活解耦修复播放闪烁;移除引擎标识显示
|
63
|
5
|
governance.yml
|
3
|
5
|
0
|
refs/heads/main
|
e35b3d57744e6178a7c3fdeae0aab051c6f2408f
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"1b55d1eece101ec72f25af96f62713da05ae06ff","after":"e35b3d57744e6178a7c3fdeae0aab051c6f2408f","compare_url":"https://gitea.g-hi.com/luoanwu/forced-alignment/compare/1b55d1eece101ec72f25af96f62713da05ae06ff...e35b3d57744e6178a7c3fdeae0aab051c6f2408f","commits":[{"id":"e35b3d57744e6178a7c3fdeae0aab051c6f2408f","message":"fix: 工作台展示与激活解耦修复播放闪烁;移除引擎标识显示\n\n- 闪烁根因:激活与展示耦合在叶子字区间判定,播放穿过字间空洞时\n 三句上下文/字级轨道/KTV/检查器整块逐帧卸载重挂\n- 修法:展示层改句包络定位当前句;激活层仍只认叶子字区间\n (空洞内零字扫色、data-lyric-active=false,蓝图不变量保持),\n 句间空档三层空态不变(e2e 无词隔离用例语义原样)\n- 波形画布改 layout-effect 与播头同帧提交,仅尺寸变化时重设像素\n- 头部「Qwen3 FA · 80ms grid」与错误兜底文案中的引擎标识不再显示\n (engine/runtimeContract 数据层保留,审计不受影响)\n- 证据:typecheck 绿;check:ui 7/7(2026-07-21 实跑);\n 真实空洞点实测(句内 52.40s 整行保持、句间 63.88s 三层空态)\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/forced-alignment/commit/e35b3d57744e6178a7c3fdeae0aab051c6f2408f","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-21T20:43:46-07:00","added":[],"removed":[],"modified":["apps/web/src/features/alignment/api/alignment.ts","apps/web/src/features/alignment/components/AlignmentWorkbench.tsx","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json"]}],"total_commits":0,"head_commit":{"id":"e35b3d57744e6178a7c3fdeae0aab051c6f2408f","message":"fix: 工作台展示与激活解耦修复播放闪烁;移除引擎标识显示\n\n- 闪烁根因:激活与展示耦合在叶子字区间判定,播放穿过字间空洞时\n 三句上下文/字级轨道/KTV/检查器整块逐帧卸载重挂\n- 修法:展示层改句包络定位当前句;激活层仍只认叶子字区间\n (空洞内零字扫色、data-lyric-active=false,蓝图不变量保持),\n 句间空档三层空态不变(e2e 无词隔离用例语义原样)\n- 波形画布改 layout-effect 与播头同帧提交,仅尺寸变化时重设像素\n- 头部「Qwen3 FA · 80ms grid」与错误兜底文案中的引擎标识不再显示\n (engine/runtimeContract 数据层保留,审计不受影响)\n- 证据:typecheck 绿;check:ui 7/7(2026-07-21 实跑);\n 真实空洞点实测(句内 52.40s 整行保持、句间 63.88s 三层空态)\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/forced-alignment/commit/e35b3d57744e6178a7c3fdeae0aab051c6f2408f","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-21T20:43:46-07:00","added":[],"removed":[],"modified":["apps/web/src/features/alignment/api/alignment.ts","apps/web/src/features/alignment/components/AlignmentWorkbench.tsx","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json"]},"repository":{"id":63,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"forced-alignment","full_name":"luoanwu/forced-alignment","description":"纯人声与歌词精准强制对齐工作台","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":29611,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/forced-alignment/languages","html_url":"https://gitea.g-hi.com/luoanwu/forced-alignment","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/forced-alignment","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/forced-alignment.git","clone_url":"https://gitea.g-hi.com/luoanwu/forced-alignment.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-07-22T08:56:49+08:00","updated_at":"2026-07-22T10:55:44+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1784691828
|
1784691919
|
0
|
1784691828
|
1784691920
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23435
|
Add Cantonese support and language contract valida Add Cantonese support and language contract validation...
|
63
|
5
|
governance.yml
|
4
|
5
|
0
|
refs/heads/main
|
bbe7744fc0df50ca87397478731523692d59a867
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"e35b3d57744e6178a7c3fdeae0aab051c6f2408f","after":"bbe7744fc0df50ca87397478731523692d59a867","compare_url":"https://gitea.g-hi.com/luoanwu/forced-alignment/compare/e35b3d57744e6178a7c3fdeae0aab051c6f2408f...bbe7744fc0df50ca87397478731523692d59a867","commits":[{"id":"bbe7744fc0df50ca87397478731523692d59a867","message":"Add Cantonese support and language contract validation\n","url":"https://gitea.g-hi.com/luoanwu/forced-alignment/commit/bbe7744fc0df50ca87397478731523692d59a867","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-21T21:35:50-07:00","added":[],"removed":[],"modified":["CLAUDE.md","apps/web/e2e/acceptance.spec.ts","apps/web/src/features/alignment/components/AlignmentWorkbench.tsx","packages/contracts/src/alignment.ts","packages/contracts/src/contracts.test.ts","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json"]}],"total_commits":0,"head_commit":{"id":"bbe7744fc0df50ca87397478731523692d59a867","message":"Add Cantonese support and language contract validation\n","url":"https://gitea.g-hi.com/luoanwu/forced-alignment/commit/bbe7744fc0df50ca87397478731523692d59a867","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-21T21:35:50-07:00","added":[],"removed":[],"modified":["CLAUDE.md","apps/web/e2e/acceptance.spec.ts","apps/web/src/features/alignment/components/AlignmentWorkbench.tsx","packages/contracts/src/alignment.ts","packages/contracts/src/contracts.test.ts","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json"]},"repository":{"id":63,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"forced-alignment","full_name":"luoanwu/forced-alignment","description":"纯人声与歌词精准强制对齐工作台","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":29630,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/forced-alignment/languages","html_url":"https://gitea.g-hi.com/luoanwu/forced-alignment","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/forced-alignment","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/forced-alignment.git","clone_url":"https://gitea.g-hi.com/luoanwu/forced-alignment.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-07-22T08:56:49+08:00","updated_at":"2026-07-22T11:43:48+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1784694955
|
1784695046
|
0
|
1784694954
|
1784695047
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23437
|
docs: record dual-remote publication
|
64
|
5
|
governance.yml
|
2
|
5
|
0
|
refs/heads/main
|
fbc7ad83338fb810bc574c8b00a6679b8ed3ca0c
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"07bdfd6b5c1898d76a113986ab5a6e7ade243839","after":"fbc7ad83338fb810bc574c8b00a6679b8ed3ca0c","compare_url":"https://gitea.g-hi.com/luoanwu/voice-conversion/compare/07bdfd6b5c1898d76a113986ab5a6e7ade243839...fbc7ad83338fb810bc574c8b00a6679b8ed3ca0c","commits":[{"id":"fbc7ad83338fb810bc574c8b00a6679b8ed3ca0c","message":"docs: record dual-remote publication\n","url":"https://gitea.g-hi.com/luoanwu/voice-conversion/commit/fbc7ad83338fb810bc574c8b00a6679b8ed3ca0c","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-21T23:38:36-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/docs-truth.latest.json","reports/governance-docs.latest.json"]}],"total_commits":0,"head_commit":{"id":"fbc7ad83338fb810bc574c8b00a6679b8ed3ca0c","message":"docs: record dual-remote publication\n","url":"https://gitea.g-hi.com/luoanwu/voice-conversion/commit/fbc7ad83338fb810bc574c8b00a6679b8ed3ca0c","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-21T23:38:36-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/docs-truth.latest.json","reports/governance-docs.latest.json"]},"repository":{"id":64,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"voice-conversion","full_name":"luoanwu/voice-conversion","description":"SoulX-Singer personal singing voice conversion platform","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":683,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/voice-conversion/languages","html_url":"https://gitea.g-hi.com/luoanwu/voice-conversion","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/voice-conversion","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/voice-conversion.git","clone_url":"https://gitea.g-hi.com/luoanwu/voice-conversion.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-07-22T14:37:12+08:00","updated_at":"2026-07-22T14:37:35+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1784702346
|
1784702437
|
0
|
1784702338
|
1784702438
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23445
|
fix: align 代理层超时预算被 undici 默认 headersTimeout 静默吞掉( fix: align 代理层超时预算被 undici 默认 headersTimeout 静默吞掉(C18)...
|
63
|
5
|
governance.yml
|
6
|
5
|
0
|
refs/heads/main
|
dbb8444dc97bba3e8ebc715efb82d803001981cd
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"7c3af0f0e3e5d33e89cc59a0e2d727e1641b6cdf","after":"dbb8444dc97bba3e8ebc715efb82d803001981cd","compare_url":"https://gitea.g-hi.com/luoanwu/forced-alignment/compare/7c3af0f0e3e5d33e89cc59a0e2d727e1641b6cdf...dbb8444dc97bba3e8ebc715efb82d803001981cd","commits":[{"id":"dbb8444dc97bba3e8ebc715efb82d803001981cd","message":"fix: align 代理层超时预算被 undici 默认 headersTimeout 静默吞掉(C18)\n\n- 根因:Node 内置 fetch()(undici)自带 headersTimeout/bodyTimeout 默认\n 300000ms(5 分钟),优先级高于应用层 AbortController——route.ts 精心\n 设计的按音频时长预算(最长 55 分钟)从未真正掌管过请求,sidecar 真实\n 计算超 5 分钟即被静默掐断为 fetch failed,sidecar 进程本身无异常\n- 生产实测复现:用户单句重跑报错 fetch failed;日志显示\n POST /api/alignment/align 502 in 303388ms(卡在整 5 分钟),同一时间\n sidecar 侧无任何异常/Traceback\n- 修复:显式装 undici 依赖,建 Agent({ headersTimeout: 0, bodyTimeout: 0 })\n 作为 dispatcher 传入 fetch,超时决定权完全收回给自建 AbortController\n- 验证:本地短耗时对照实验复现同一故障(headersTimeout 2s 下 2.5s 抛出\n 一致的 fetch failed)并验证修复(headersTimeout:0 下等过 5s 拿到真实\n 响应)——非模拟,真实 HTTP 服务器 + 真实 undici Agent\n- 无自动化回归(apps/web 无 vitest 基座);已回灌 CLAUDE.md 缺口索引与\n 治理经验库,登记「未来任何长耗时出站 fetch 须显式归零 undici 超时」\n 的通用教训\n\nCo-Authored-By: Claude Sonnet 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/forced-alignment/commit/dbb8444dc97bba3e8ebc715efb82d803001981cd","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-22T00:53:29-07:00","added":[],"removed":[],"modified":["CLAUDE.md","apps/web/package.json","apps/web/src/app/api/alignment/align/route.ts","docs/governance-experience.md","pnpm-lock.yaml","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/validation-source.latest.json"]}],"total_commits":0,"head_commit":{"id":"dbb8444dc97bba3e8ebc715efb82d803001981cd","message":"fix: align 代理层超时预算被 undici 默认 headersTimeout 静默吞掉(C18)\n\n- 根因:Node 内置 fetch()(undici)自带 headersTimeout/bodyTimeout 默认\n 300000ms(5 分钟),优先级高于应用层 AbortController——route.ts 精心\n 设计的按音频时长预算(最长 55 分钟)从未真正掌管过请求,sidecar 真实\n 计算超 5 分钟即被静默掐断为 fetch failed,sidecar 进程本身无异常\n- 生产实测复现:用户单句重跑报错 fetch failed;日志显示\n POST /api/alignment/align 502 in 303388ms(卡在整 5 分钟),同一时间\n sidecar 侧无任何异常/Traceback\n- 修复:显式装 undici 依赖,建 Agent({ headersTimeout: 0, bodyTimeout: 0 })\n 作为 dispatcher 传入 fetch,超时决定权完全收回给自建 AbortController\n- 验证:本地短耗时对照实验复现同一故障(headersTimeout 2s 下 2.5s 抛出\n 一致的 fetch failed)并验证修复(headersTimeout:0 下等过 5s 拿到真实\n 响应)——非模拟,真实 HTTP 服务器 + 真实 undici Agent\n- 无自动化回归(apps/web 无 vitest 基座);已回灌 CLAUDE.md 缺口索引与\n 治理经验库,登记「未来任何长耗时出站 fetch 须显式归零 undici 超时」\n 的通用教训\n\nCo-Authored-By: Claude Sonnet 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/forced-alignment/commit/dbb8444dc97bba3e8ebc715efb82d803001981cd","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-22T00:53:29-07:00","added":[],"removed":[],"modified":["CLAUDE.md","apps/web/package.json","apps/web/src/app/api/alignment/align/route.ts","docs/governance-experience.md","pnpm-lock.yaml","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/validation-source.latest.json"]},"repository":{"id":63,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"forced-alignment","full_name":"luoanwu/forced-alignment","description":"纯人声与歌词精准强制对齐工作台","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":29769,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/forced-alignment/languages","html_url":"https://gitea.g-hi.com/luoanwu/forced-alignment","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/forced-alignment","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/forced-alignment.git","clone_url":"https://gitea.g-hi.com/luoanwu/forced-alignment.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-07-22T08:56:49+08:00","updated_at":"2026-07-22T15:40:47+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1784706813
|
1784706904
|
0
|
1784706813
|
1784706905
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23446
|
feat(governance): machineize docs-truth gate, fix feat(governance): machineize docs-truth gate, fix Fastify Redis parsing, harden test-base guard...
|
54
|
5
|
governance.yml
|
1
|
5
|
0
|
refs/heads/main
|
2fa1666f6bb69b7784199199afde715a54856ac8
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"f98acd04c6fe50956d8cf89552a352c8893f037d","after":"2fa1666f6bb69b7784199199afde715a54856ac8","compare_url":"https://gitea.g-hi.com/luoanwu/base-framework/compare/f98acd04c6fe50956d8cf89552a352c8893f037d...2fa1666f6bb69b7784199199afde715a54856ac8","commits":[{"id":"2fa1666f6bb69b7784199199afde715a54856ac8","message":"feat(governance): machineize docs-truth gate, fix Fastify Redis parsing, harden test-base guard\n\n- Add check:docs-truth (C14 machineized): targeted assertions catching README/standards\n drift from runtime truth (dual-backend positioning, tenant-aware envelope shape, NestJS\n HTTP engine, ghost assets like commitlint/RHF), wired into pnpm check + governance ratchet.\n- Fix Fastify BullMQ Redis URL parsing to include password/db (C15), matching NestJS's\n parseRedisConnection; adds a check:dual-backend tripwire so this can't silently regress.\n Without this, authenticated/non-zero-db Redis environments would split pub/sub and\n BullMQ onto different logical Redis instances.\n- Close G15: check:runtime / check:ui preflight now requires explicit REDIS_URL (no more\n silent localhost:6379 default) and enforces a base_framework* db name convention, with\n GOVERNANCE_DB_NAME_OVERRIDE=1 as an explicit escape hatch.\n- Correct stale doc claims across README/docs/standards to match actual code (Fastify is a\n full dual-backend peer per ADR-0009, not an optional fallback; envelope carries tenantId;\n NestJS uses platform-express not the Fastify adapter; annotate unimplemented commitlint/RHF\n plans as not-yet-landed).\n- Refresh governance reports/baseline after re-running pnpm check and check:runtime (56/56).\n\nCo-Authored-By: Claude Sonnet 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/base-framework/commit/2fa1666f6bb69b7784199199afde715a54856ac8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-22T01:11:05-07:00","added":["reports/docs-truth.latest.json","scripts/check-docs-truth.mjs"],"removed":[],"modified":["CLAUDE.md","README.md","apps/api-fastify/src/plugins/queue.ts","docs/README.md","docs/governance-experience.md","docs/standards/backend-standard.md","docs/standards/database-standard.md","docs/standards/frontend-standard.md","docs/standards/git-standard.md","package.json","reports/baseline.json","reports/contract-consumers.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/validation-source.latest.json","scripts/check-dual-backend-parity.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-ui-acceptance.mjs","scripts/governance-report.mjs"]},{"id":"8501dc9731b4f0f44ea36d2ffe557577354ebb31","message":"Refactor governance documentation structure\n","url":"https://gitea.g-hi.com/luoanwu/base-framework/commit/8501dc9731b4f0f44ea36d2ffe557577354ebb31","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-21T08:01:24-07:00","added":["docs/governance-experience.md"],"removed":[],"modified":["CLAUDE.md","reports/contract-consumers.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/validation-source.latest.json"]},{"id":"d799b176f2db4f3e538563eeb8228543d24ca639","message":"feat(runtime): close outbox failure governance gaps\n","url":"https://gitea.g-hi.com/luoanwu/base-framework/commit/d799b176f2db4f3e538563eeb8228543d24ca639","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-05T07:03:20-07:00","added":["apps/api-fastify/prisma/migrations/20260705080000_outbox_dead_letter/migration.sql","apps/api-fastify/test/outbox.deadletter.test.ts","apps/api-nestjs/prisma/migrations/20260705080000_outbox_dead_letter/migration.sql","apps/api-nestjs/test/outbox.deadletter.test.ts"],"removed":["apps/web/src/hooks/useSSE.ts","apps/web/src/hooks/useWebSocket.ts"],"modified":[".claude/launch.json","CLAUDE.md","apps/api-fastify/.env.example","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/modules/tenant.ts","apps/api-fastify/src/plugins/outbox.ts","apps/api-fastify/src/plugins/queue.ts","apps/api-fastify/src/routes/jobs.ts","apps/api-fastify/src/routes/orders.ts","apps/api-fastify/src/routes/sse.ts","apps/api-fastify/src/routes/users.ts","apps/api-nestjs/.env.example","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/src/common/zod-validation.pipe.ts","apps/api-nestjs/src/events/outbox-dispatcher.service.ts","apps/api-nestjs/src/orders/orders.service.ts","apps/api-nestjs/src/queue/jobs.processor.ts","apps/web/e2e/acceptance.spec.ts","apps/web/src/components/EventFeed.tsx","apps/web/src/hooks/useRealtime.ts","apps/web/src/lib/api.ts","apps/web/src/store/realtime.ts","packages/contracts/src/contracts.test.ts","packages/contracts/src/index.ts","packages/contracts/src/realtime.ts","packages/contracts/src/tenant.ts","reports/baseline.json","reports/contract-consumers.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-migrations.mjs","scripts/check-ui-acceptance.mjs"]},{"id":"43b8c8c943c406733084427f3ad27d836ae75681","message":"Update governance baseline for UI acceptance\n","url":"https://gitea.g-hi.com/luoanwu/base-framework/commit/43b8c8c943c406733084427f3ad27d836ae75681","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-04T23:37:30-07:00","added":[".claude/agents/acceptance-runner.md",".claude/agents/module-blueprint.md",".claude/skills/business-module-intake/SKILL.md",".github/workflows/governance.yml","apps/api-fastify/test/realtime.tenant.test.ts","apps/api-nestjs/test/realtime.tenant.test.ts","apps/web/e2e/acceptance.spec.ts","apps/web/playwright.config.ts","docs/domain/owner-matrix.md","packages/contracts/src/contracts.test.ts","packages/contracts/src/tenant.ts","reports/dual-backend-parity.latest.json","reports/ui-acceptance.latest.json","scripts/check-dual-backend-parity.mjs","scripts/check-ui-acceptance.mjs"],"removed":[],"modified":[".gitignore","CLAUDE.md","apps/api-fastify/.env.example","apps/api-fastify/src/modules/tenant.ts","apps/api-fastify/src/modules/users/users.service.ts","apps/api-fastify/src/plugins/events.ts","apps/api-fastify/src/plugins/outbox.ts","apps/api-fastify/src/plugins/queue.ts","apps/api-fastify/src/routes/sse.ts","apps/api-fastify/src/routes/ws.ts","apps/api-fastify/src/types.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-nestjs/.env.example","apps/api-nestjs/src/common/tenant.decorator.ts","apps/api-nestjs/src/events/event-bus.service.ts","apps/api-nestjs/src/events/events.gateway.ts","apps/api-nestjs/src/events/outbox-dispatcher.service.ts","apps/api-nestjs/src/queue/jobs.controller.ts","apps/api-nestjs/src/queue/jobs.processor.ts","apps/api-nestjs/src/sse/sse.controller.ts","apps/api-nestjs/src/users/users.service.ts","apps/api-nestjs/test/http.acceptance.test.ts","apps/web/.env.example","apps/web/package.json","apps/web/src/components/EventFeed.tsx","apps/web/src/components/OrdersPanel.tsx","apps/web/src/hooks/useRealtime.ts","apps/web/src/lib/api.ts","docs/adr/0009-dual-backend-governance-parity.md","package.json","packages/contracts/src/index.ts","packages/contracts/src/order.ts","packages/contracts/src/realtime.ts","pnpm-lock.yaml","pnpm-workspace.yaml","reports/baseline.json","reports/contract-consumers.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/validation-source.latest.json","scripts/check-migrations.mjs","scripts/check-runtime-acceptance.mjs","scripts/governance-report.mjs"]}],"total_commits":0,"head_commit":{"id":"2fa1666f6bb69b7784199199afde715a54856ac8","message":"feat(governance): machineize docs-truth gate, fix Fastify Redis parsing, harden test-base guard\n\n- Add check:docs-truth (C14 machineized): targeted assertions catching README/standards\n drift from runtime truth (dual-backend positioning, tenant-aware envelope shape, NestJS\n HTTP engine, ghost assets like commitlint/RHF), wired into pnpm check + governance ratchet.\n- Fix Fastify BullMQ Redis URL parsing to include password/db (C15), matching NestJS's\n parseRedisConnection; adds a check:dual-backend tripwire so this can't silently regress.\n Without this, authenticated/non-zero-db Redis environments would split pub/sub and\n BullMQ onto different logical Redis instances.\n- Close G15: check:runtime / check:ui preflight now requires explicit REDIS_URL (no more\n silent localhost:6379 default) and enforces a base_framework* db name convention, with\n GOVERNANCE_DB_NAME_OVERRIDE=1 as an explicit escape hatch.\n- Correct stale doc claims across README/docs/standards to match actual code (Fastify is a\n full dual-backend peer per ADR-0009, not an optional fallback; envelope carries tenantId;\n NestJS uses platform-express not the Fastify adapter; annotate unimplemented commitlint/RHF\n plans as not-yet-landed).\n- Refresh governance reports/baseline after re-running pnpm check and check:runtime (56/56).\n\nCo-Authored-By: Claude Sonnet 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/base-framework/commit/2fa1666f6bb69b7784199199afde715a54856ac8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-22T01:11:05-07:00","added":["reports/docs-truth.latest.json","scripts/check-docs-truth.mjs"],"removed":[],"modified":["CLAUDE.md","README.md","apps/api-fastify/src/plugins/queue.ts","docs/README.md","docs/governance-experience.md","docs/standards/backend-standard.md","docs/standards/database-standard.md","docs/standards/frontend-standard.md","docs/standards/git-standard.md","package.json","reports/baseline.json","reports/contract-consumers.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/validation-source.latest.json","scripts/check-dual-backend-parity.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-ui-acceptance.mjs","scripts/governance-report.mjs"]},"repository":{"id":54,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"base-framework","full_name":"luoanwu/base-framework","description":"基础框架 monorepo","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":468,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/base-framework/languages","html_url":"https://gitea.g-hi.com/luoanwu/base-framework","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/base-framework","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/base-framework.git","clone_url":"https://gitea.g-hi.com/luoanwu/base-framework.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-07-03T12:24:18+08:00","updated_at":"2026-07-03T12:24:32+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1784707904
|
1784708025
|
0
|
1784707902
|
1784708027
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23448
|
chore(reports): refresh publish acceptance evidenc chore(reports): refresh publish acceptance evidence...
|
54
|
5
|
governance.yml
|
3
|
5
|
0
|
refs/heads/main
|
4e0ae0a55bf748faaa3a1f2b937b4375c1cf7fa8
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"d846832ebbe1d481019744f038672b935ad09937","after":"4e0ae0a55bf748faaa3a1f2b937b4375c1cf7fa8","compare_url":"https://gitea.g-hi.com/luoanwu/base-framework/compare/d846832ebbe1d481019744f038672b935ad09937...4e0ae0a55bf748faaa3a1f2b937b4375c1cf7fa8","commits":[{"id":"4e0ae0a55bf748faaa3a1f2b937b4375c1cf7fa8","message":"chore(reports): refresh publish acceptance evidence\n","url":"https://gitea.g-hi.com/luoanwu/base-framework/commit/4e0ae0a55bf748faaa3a1f2b937b4375c1cf7fa8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-22T01:26:24-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json"]}],"total_commits":0,"head_commit":{"id":"4e0ae0a55bf748faaa3a1f2b937b4375c1cf7fa8","message":"chore(reports): refresh publish acceptance evidence\n","url":"https://gitea.g-hi.com/luoanwu/base-framework/commit/4e0ae0a55bf748faaa3a1f2b937b4375c1cf7fa8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-22T01:26:24-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json"]},"repository":{"id":54,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"base-framework","full_name":"luoanwu/base-framework","description":"基础框架 monorepo","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":836,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/base-framework/languages","html_url":"https://gitea.g-hi.com/luoanwu/base-framework","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/base-framework","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/base-framework.git","clone_url":"https://gitea.g-hi.com/luoanwu/base-framework.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-07-03T12:24:18+08:00","updated_at":"2026-07-22T16:23:26+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1784708794
|
1784708884
|
0
|
1784708793
|
1784708885
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23455
|
docs: 发布状态快照更新为已推送 gitea/main(3f76d2e)
|
67
|
5
|
governance.yml
|
2
|
5
|
0
|
refs/heads/main
|
9d1500477039a937bafd4451d5b557515fc6fe23
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"3f76d2e5e9efe72c7ebe9d9faa2f335ccd2dbf4f","after":"9d1500477039a937bafd4451d5b557515fc6fe23","compare_url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics/compare/3f76d2e5e9efe72c7ebe9d9faa2f335ccd2dbf4f...9d1500477039a937bafd4451d5b557515fc6fe23","commits":[{"id":"9d1500477039a937bafd4451d5b557515fc6fe23","message":"docs: 发布状态快照更新为已推送 gitea/main(3f76d2e)\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics/commit/9d1500477039a937bafd4451d5b557515fc6fe23","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-27T23:20:56-07:00","added":[],"removed":[],"modified":["CLAUDE.md"]}],"total_commits":0,"head_commit":{"id":"9d1500477039a937bafd4451d5b557515fc6fe23","message":"docs: 发布状态快照更新为已推送 gitea/main(3f76d2e)\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics/commit/9d1500477039a937bafd4451d5b557515fc6fe23","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-27T23:20:56-07:00","added":[],"removed":[],"modified":["CLAUDE.md"]},"repository":{"id":67,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"songformer-structure-lyrics","full_name":"luoanwu/songformer-structure-lyrics","description":"SongFormer 结构时间歌词行:结构→歌词行→字级时间流水线 + 治理底座","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":801,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/songformer-structure-lyrics/languages","html_url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/songformer-structure-lyrics","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/songformer-structure-lyrics.git","clone_url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-07-28T14:19:19+08:00","updated_at":"2026-07-28T14:20:17+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1785219709
|
1785219799
|
0
|
1785219660
|
1785219801
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23456
|
韩语真歌首跑入基线 + 流水线阶段耗时 stage_timings 落盘与工作台展示
|
67
|
5
|
governance.yml
|
3
|
5
|
0
|
refs/pull/1/head
|
ada639232a2eaf958115b36b989295eff4c75eff
|
0
|
0
|
0
|
pull_request
|
{"action":"opened","number" {"action":"opened","number":1,"pull_request":{"id":96,"url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics/pulls/1","number":1,"user":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"title":"治理: 关闭对抗性验收发现的假绿装置、导出层静默数据损坏与文档幽灵资产","body":"\u003c!--\r\n PR 治理模板。提交前请逐项确认,确保符合 docs/standards 下的工程规范。\r\n CI 会执行:pnpm check(命名 + 单源漂移 + 治理棘轮 + lint + typecheck);\r\n 有测试 DB 的流水线另执行 DATABASE_URL=... pnpm check:runtime。\r\n--\u003e\r\n\r\n## 变更内容\r\n\u003c!-- 简述这次改了什么、为什么改(聚焦 why) --\u003e\r\n-\r\n\r\n## 涉及业务概念\r\n\u003c!-- 列出涉及的业务词典英文名,例如 store / order / verification。参见 docs/domain-glossary.md --\u003e\r\n-\r\n\r\n## 检查清单\r\n\r\n### 命名一致性\r\n- [ ] 业务概念使用了词典中的标准英文名(未出现 shop/branch/seller/voucher/writeOff 等禁用词)\r\n- [ ] 数据库 snake_case + 复数表名;API/JSON 字段 camelCase;类型 PascalCase;常量 SCREAMING_SNAKE_CASE\r\n- [ ] `pnpm check:naming` 通过\r\n- [ ] `pnpm check:schema` 通过,未新增第二份状态/契约真源\r\n\r\n### API / 契约\r\n- [ ] 不涉及 API 变更\r\n- [ ] 新增/修改了 API,路由符合 `/api/v1/{resources}` 规范\r\n- [ ] 已更新 `packages/contracts` 中的 Zod schema / DTO / 类型(前后端共用同一份)\r\n- [ ] 无破坏前端兼容的字段删除/重命名(如有,已在描述中说明迁移方案)\r\n\r\n### 数据库\r\n- [ ] 不涉及数据库变更\r\n- [ ] 新增/修改了表或字段,已通过 migration review(表名复数、字段 snake_case、外键 xxx_id、时间 _at、状态 status)\r\n- [ ] 高增长表已考虑分区;涉及多租户的表带 tenant_id\r\n- [ ] 写链显式带 tenant_id;跨租户读写按 404/隔离口径处理\r\n\r\n### 数据库迁移(迁移即代码:版本/顺序/内容/环境/发布/回滚一致)\r\n- [ ] 改 schema.prisma 的同时**已生成并提交 migration**(`pnpm db:migrate:dev --name \u003cchange\u003e`),未只改 schema 不落迁移\r\n- [ ] **未修改已发布过的历史 migration 文件**(内容一致:历史不可变,新变更走新迁移)\r\n- [ ] `pnpm check:migrations` 通过(迁移历史在位 / 无未豁免高危 DDL / schema 表、enum、`@map` 列均已落迁移)\r\n- [ ] 破坏性变更(删表/删列/改名/改类型/加 NOT NULL/加唯一约束)走 **expand→migrate→contract** 三阶段,不一次切\r\n- [ ] 大表加索引用 `CREATE INDEX CONCURRENTLY`;大批量回填走 BullMQ 分批任务,不塞进 migration\r\n- [ ] 高危但确需的 DDL 已加 `-- migration-allow:\u003c原因\u003e` 留痕,并在下方回滚方案说明\r\n- [ ] 非开发环境只用 `migrate deploy`(禁止 `db push` / 线上手动 ALTER);发布前 `pnpm db:migrate:status` 无 drift\r\n\r\n### 实时 / 队列\r\n- [ ] 不涉及\r\n- [ ] 关键业务事件进入 BullMQ 或持久化事件表(未仅依赖 Redis Pub/Sub)\r\n- [ ] 写库事件与真实写操作在同一 tx 写入 outbox,未在 commit 后旁路 publish\r\n- [ ] 实时通道选型符合规范(订单/看板/通知用 SSE;设备在线/包间控制/IM 用 WebSocket)\r\n\r\n### 质量与发布\r\n- [ ] 通过 `pnpm lint` 与 `pnpm typecheck`\r\n- [ ] 通过 `pnpm check:governance`,`reports/*.latest.json` 已刷新且无棘轮回退\r\n- [ ] 涉及写链 / DB / 租户 / 状态机时,通过 `DATABASE_URL=... pnpm check:runtime`,`reports/runtime-acceptance.latest.json` 已刷新\r\n- [ ] 已补充/更新必要的测试\r\n- [ ] 不需要回滚方案\r\n- [ ] 需要回滚方案,已在下方说明\r\n\r\n## 回滚方案 / 其他说明\r\n-\r\n","labels":[],"milestone":null,"assignee":null,"assignees":[],"requested_reviewers":[],"requested_reviewers_teams":[],"state":"open","draft":false,"is_locked":false,"comments":0,"additions":3228,"deletions":261,"changed_files":63,"html_url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics/pulls/1","diff_url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics/pulls/1.diff","patch_url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics/pulls/1.patch","mergeable":true,"merged":false,"merged_at":null,"merge_commit_sha":null,"merged_by":null,"allow_maintainer_edit":false,"base":{"label":"main","ref":"main","sha":"9d1500477039a937bafd4451d5b557515fc6fe23","repo_id":67,"repo":{"id":67,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"songformer-structure-lyrics","full_name":"luoanwu/songformer-structure-lyrics","description":"SongFormer 结构时间歌词行:结构→歌词行→字级时间流水线 + 治理底座","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":1079,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/songformer-structure-lyrics/languages","html_url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/songformer-structure-lyrics","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/songformer-structure-lyrics.git","clone_url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":2,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-07-28T14:19:19+08:00","updated_at":"2026-07-29T02:12:54+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":false,"push":false,"pull":false},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]}},"head":{"label":"governance/adversarial-audit-fixes-20260728","ref":"governance/adversarial-audit-fixes-20260728","sha":"ada639232a2eaf958115b36b989295eff4c75eff","repo_id":67,"repo":{"id":67,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"songformer-structure-lyrics","full_name":"luoanwu/songformer-structure-lyrics","description":"SongFormer 结构时间歌词行:结构→歌词行→字级时间流水线 + 治理底座","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":1079,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/songformer-structure-lyrics/languages","html_url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/songformer-structure-lyrics","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/songformer-structure-lyrics.git","clone_url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":2,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-07-28T14:19:19+08:00","updated_at":"2026-07-29T02:12:54+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":false,"push":false,"pull":false},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]}},"merge_base":"9d1500477039a937bafd4451d5b557515fc6fe23","due_date":null,"created_at":"2026-07-29T08:39:40+08:00","updated_at":"2026-07-29T08:39:41+08:00","closed_at":null,"pin_order":0},"requested_reviewer":null,"repository":{"id":67,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"songformer-structure-lyrics","full_name":"luoanwu/songformer-structure-lyrics","description":"SongFormer 结构时间歌词行:结构→歌词行→字级时间流水线 + 治理底座","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":1079,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/songformer-structure-lyrics/languages","html_url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/songformer-structure-lyrics","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/songformer-structure-lyrics.git","clone_url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":2,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-07-28T14:19:19+08:00","updated_at":"2026-07-29T02:12:54+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"commit_id":"","review":null}...
|
pull_request
|
2
|
6
|
1785285581
|
1785285672
|
0
|
1785285581
|
1785285674
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/pull/1/head
|
1
|
Edit
Delete
|
|
23457
|
Merge pull request '治理: 关闭对抗性验收发现的假绿装置、导出层静默数据 Merge pull request '治理: 关闭对抗性验收发现的假绿装置、导出层静默数据损坏与文档幽灵资产' (#1) from governance/adversarial-audit-fixes-20260728 into main...
|
67
|
5
|
governance.yml
|
4
|
5
|
0
|
refs/heads/main
|
205116d7e6e0ff602d1773c2ec986b02223b1e0e
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"9d1500477039a937bafd4451d5b557515fc6fe23","after":"205116d7e6e0ff602d1773c2ec986b02223b1e0e","compare_url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics/compare/9d1500477039a937bafd4451d5b557515fc6fe23...205116d7e6e0ff602d1773c2ec986b02223b1e0e","commits":[{"id":"205116d7e6e0ff602d1773c2ec986b02223b1e0e","message":"Merge pull request '治理: 关闭对抗性验收发现的假绿装置、导出层静默数据损坏与文档幽灵资产' (#1) from governance/adversarial-audit-fixes-20260728 into main\n\nReviewed-on: https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics/pulls/1\n","url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics/commit/205116d7e6e0ff602d1773c2ec986b02223b1e0e","author":{"name":"luoanwu","email":"law@g-hi.com","username":"luoanwu"},"committer":{"name":"luoanwu","email":"law@g-hi.com","username":"luoanwu"},"verification":null,"timestamp":"2026-07-29T08:39:53+08:00","added":["apps/web/src/app/api/review/export/kas-template.json","apps/web/src/app/api/review/export/route.ts","apps/web/src/app/error.tsx","apps/web/src/app/global-error.tsx","apps/web/src/lib/song-name.ts","reports/model-evidence/structure-mps-sdpa-ab.latest.json","reports/pipeline-tests.latest.json","reports/runtime-acceptance.latest.json","reports/ui-acceptance.latest.json","scripts/check-pipeline-tests.mjs","services/structure_lyrics/tests/test_tokenize.py"],"removed":[],"modified":[".claude/launch.json",".github/workflows/governance.yml",".gitignore","CLAUDE.md","apps/web/.gitignore","apps/web/eslint.config.mjs","apps/web/next.config.ts","apps/web/src/app/api/review/audio/route.ts","apps/web/src/app/api/review/route.ts","apps/web/src/app/api/review/run/route.ts","apps/web/src/app/review/page.tsx","apps/web/tsconfig.json","docs/governance-experience.md","package.json","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/model-assets.latest.json","reports/model-evidence/structure-smoke.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/validation-source.latest.json","scripts/check-docs-truth.mjs","scripts/check-model-assets.mjs","scripts/check-naming.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-ui-acceptance.mjs","scripts/governance-report.mjs","services/structure_lyrics/phase1/align.py","services/structure_lyrics/phase1/asr.py","services/structure_lyrics/phase1/models.py","services/structure_lyrics/phase1/pipeline.py","services/structure_lyrics/phase1/similarity.py","services/structure_lyrics/phase2/pipeline.py","services/structure_lyrics/phase2/refine.py","services/structure_lyrics/requirements.txt","services/structure_lyrics/run_song.py","services/structure_lyrics/tests/test_multilang.py","services/structure_lyrics/tests/test_phase2.py","workers/mms-fa/README.md","workers/mms-fa/align_tasks.py","workers/mms-fa/requirements_mms_fa.txt","workers/mms-fa/run_mms_fa.py","workers/qwen3-asr/run_qwen3_asr.py","workers/structure/README.md","workers/structure/run_structure.py"]},{"id":"ada639232a2eaf958115b36b989295eff4c75eff","message":"韩语真歌首跑入基线 + 流水线阶段耗时 stage_timings 落盘与工作台展示\n\n- CLAUDE.md 动态区:韩语真歌首跑(SINGASONG 声明 ko)✅——谚文 g2pk 音变\n jamo-RR 字级时间真歌闭环、ASR 跨语言滑移韩语第二例(官方文本入 CTC 防线再兑现);\n 本轮新抓两缺陷已识别未修(工作台重跑同曲面板不刷新、声明污染独立投票),\n 同步 G18 盲区清单与「真歌未验证清单」(仅剩越南语)\n- run_song.py:enter() 逐阶段记录耗时秒数落 stage_timings(含模型加载;\n error 时保留失败前已跑时长),状态文件对外可见\n- review/page.tsx:轮询状态展示各阶段耗时与总时长(执行中/完成/失败均带)\n- reports/governance-docs.latest.json:check:governance-docs 复跑刷新\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics/commit/ada639232a2eaf958115b36b989295eff4c75eff","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-28T11:12:50-07:00","added":[],"removed":[],"modified":["CLAUDE.md","apps/web/src/app/review/page.tsx","reports/governance-docs.latest.json","services/structure_lyrics/run_song.py"]},{"id":"8d1868d15b122595a29dd35b7684035b285d0d6c","message":"治理: 关闭对抗性验收发现的假绿装置、导出层静默数据损坏与文档幽灵资产\n\n对抗性验收审计(2026-07-28)发现并关闭 5 个问题,每条都留下机器防线且做了负向测试。\n\nG23 假绿装置(三层防线)\n 三个运行链地板(testsPassed/uiTestsPassed/pipelineTestsPassed)由各自 runner 消费、\n 却存放在 governance-report 托管的 baseline.json 里,而后者写基线是整体替换——\n 一次 --update-baseline 即静默抹掉;抹掉后 runtime/ui 消费端的 `?? 0` 让 x\u003c0 恒 false\n 即永绿。修:写入端改合并 + 消费端缺地板即红 + 棘轮端 EXTERNAL_FLOORS 存在性校验。\n\nC17 导出层三类静默数据损坏\n 丢行不报数(24 首真歌 1368 行丢 157)、全丢仍回 200 空文件、行级与逐字格式导出\n 两份不同歌词(1292 行中 155 行不一致)、未对齐字被跳过导致缺字歌词行。\n 修:export_stats + X-Export-* 会计、全丢判责 409、逐字忠实性判据 perCharIsFaithful\n (只用 Unicode \\p{L}/\\p{M},不复刻 phase2 分词策略以免造第二真源)不忠实即降级。\n 另修判责错层:format 校验前置,避免非法 format 被报成 409。\n\nC18 line_words 吃掉 Unicode 组合标记\n isalpha() 判字使 Mn/Mc 落入 else 被丢弃:泰文 สวัสดี 丢 2 码位、NFD 越南语丢声调\n 且连段被劈开导致下游 chars[] 下标偏移。判据陷阱:combining() 对泰文 ั/ี 返回 0,\n 必须用 category in (Mn,Mc,Me)。新增 tests/test_tokenize.py 30 用例(先红后绿已验证)。\n\nC19 文档幽灵资产\n worker 文档整段描述兄弟仓架构(点名本仓不存在的 workers/hubertfa、\n packages/contracts/src/alignment-models.ts),断言 apps/ 下无实现且与现行许可口径\n 冲突的 ALLOW_NON_COMMERCIAL_MODELS 门禁,引用不可定位的跨仓编号 C23/C28/C29。\n 修:docs-truth 新增四条断言(资产计数/幽灵门禁/跨仓编号/幽灵路径),加入即抓到\n 两处人工 grep 漏掉的编号。\n\nG24 CI 结构性必红(非\"未验证\")\n 真实 clone 实证:权重被 gitignore 排除而 check:model-assets 无模式开关 → 静态 job\n 必红 98 项 → runtime/ui job 因 needs 永不启动;库名 base_framework_ci 亦被 G15 拒。\n 修:MODEL_ASSETS_MANIFEST_ONLY 真检查模式(结构/许可/SHA 格式/字节自洽,非 skip,\n 报告写明 weightsVerified:false)+ 库名改 songformer_lyrics_ci。\n\n门禁卫生:eslint 忽略从枚举 .next/** 改为模式 .next*/**(.next-verify 构建产物曾\n以 736 个 error 打红 lint);.gitignore 同步模式化。\n\n同时包含并发会话的第一/二阶段流水线改进(phase1 语言路由、phase2 双轨映射与统计、\nqwen3-asr / mms-fa / structure worker 更新、曲名单源 song-name.ts、错误边界页面)。\n\n证据(均绑定本地工作区,工作区 dirty,未绑定 commit SHA,见 G22):\n pnpm check exit 0\n pnpm check:runtime exit 0 56 tests / 地板 56\n pnpm check:ui exit 0 4 用例 / 地板 4\n pnpm check:pipeline exit 0 114 tests / 地板 114\n负向测试:G23 三层、C19 四条断言、G24 七例,均确认先红后绿并恢复现场。\n\n新登记 OPEN:G25 存量陈旧 phase2 产物需重跑(GUNCHARLIE 48/48、有你有我 10/39)、\nG26 demucs 无正向离线强制、G27 worker 单曲 CLI 仍有 C18 同款缺陷、G28 CI 侧权重\n真伪永不校验。G14 远端 CI 拦截仍未验证——本轮只解除本地可推理的阻塞点。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics/commit/8d1868d15b122595a29dd35b7684035b285d0d6c","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-28T10:50:48-07:00","added":["apps/web/src/app/api/review/export/kas-template.json","apps/web/src/app/api/review/export/route.ts","apps/web/src/app/error.tsx","apps/web/src/app/global-error.tsx","apps/web/src/lib/song-name.ts","reports/model-evidence/structure-mps-sdpa-ab.latest.json","reports/pipeline-tests.latest.json","reports/runtime-acceptance.latest.json","reports/ui-acceptance.latest.json","scripts/check-pipeline-tests.mjs","services/structure_lyrics/tests/test_tokenize.py"],"removed":[],"modified":[".claude/launch.json",".github/workflows/governance.yml",".gitignore","CLAUDE.md","apps/web/.gitignore","apps/web/eslint.config.mjs","apps/web/next.config.ts","apps/web/src/app/api/review/audio/route.ts","apps/web/src/app/api/review/route.ts","apps/web/src/app/api/review/run/route.ts","apps/web/src/app/review/page.tsx","apps/web/tsconfig.json","docs/governance-experience.md","package.json","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/model-assets.latest.json","reports/model-evidence/structure-smoke.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/validation-source.latest.json","scripts/check-docs-truth.mjs","scripts/check-model-assets.mjs","scripts/check-naming.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-ui-acceptance.mjs","scripts/governance-report.mjs","services/structure_lyrics/phase1/align.py","services/structure_lyrics/phase1/asr.py","services/structure_lyrics/phase1/models.py","services/structure_lyrics/phase1/pipeline.py","services/structure_lyrics/phase1/similarity.py","services/structure_lyrics/phase2/pipeline.py","services/structure_lyrics/phase2/refine.py","services/structure_lyrics/requirements.txt","services/structure_lyrics/run_song.py","services/structure_lyrics/tests/test_multilang.py","services/structure_lyrics/tests/test_phase2.py","workers/mms-fa/README.md","workers/mms-fa/align_tasks.py","workers/mms-fa/requirements_mms_fa.txt","workers/mms-fa/run_mms_fa.py","workers/qwen3-asr/run_qwen3_asr.py","workers/structure/README.md","workers/structure/run_structure.py"]}],"total_commits":0,"head_commit":{"id":"205116d7e6e0ff602d1773c2ec986b02223b1e0e","message":"Merge pull request '治理: 关闭对抗性验收发现的假绿装置、导出层静默数据损坏与文档幽灵资产' (#1) from governance/adversarial-audit-fixes-20260728 into main\n\nReviewed-on: https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics/pulls/1\n","url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics/commit/205116d7e6e0ff602d1773c2ec986b02223b1e0e","author":{"name":"luoanwu","email":"law@g-hi.com","username":"luoanwu"},"committer":{"name":"luoanwu","email":"law@g-hi.com","username":"luoanwu"},"verification":null,"timestamp":"2026-07-29T08:39:53+08:00","added":["apps/web/src/app/api/review/export/kas-template.json","apps/web/src/app/api/review/export/route.ts","apps/web/src/app/error.tsx","apps/web/src/app/global-error.tsx","apps/web/src/lib/song-name.ts","reports/model-evidence/structure-mps-sdpa-ab.latest.json","reports/pipeline-tests.latest.json","reports/runtime-acceptance.latest.json","reports/ui-acceptance.latest.json","scripts/check-pipeline-tests.mjs","services/structure_lyrics/tests/test_tokenize.py"],"removed":[],"modified":[".claude/launch.json",".github/workflows/governance.yml",".gitignore","CLAUDE.md","apps/web/.gitignore","apps/web/eslint.config.mjs","apps/web/next.config.ts","apps/web/src/app/api/review/audio/route.ts","apps/web/src/app/api/review/route.ts","apps/web/src/app/api/review/run/route.ts","apps/web/src/app/review/page.tsx","apps/web/tsconfig.json","docs/governance-experience.md","package.json","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/model-assets.latest.json","reports/model-evidence/structure-smoke.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/validation-source.latest.json","scripts/check-docs-truth.mjs","scripts/check-model-assets.mjs","scripts/check-naming.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-ui-acceptance.mjs","scripts/governance-report.mjs","services/structure_lyrics/phase1/align.py","services/structure_lyrics/phase1/asr.py","services/structure_lyrics/phase1/models.py","services/structure_lyrics/phase1/pipeline.py","services/structure_lyrics/phase1/similarity.py","services/structure_lyrics/phase2/pipeline.py","services/structure_lyrics/phase2/refine.py","services/structure_lyrics/requirements.txt","services/structure_lyrics/run_song.py","services/structure_lyrics/tests/test_multilang.py","services/structure_lyrics/tests/test_phase2.py","workers/mms-fa/README.md","workers/mms-fa/align_tasks.py","workers/mms-fa/requirements_mms_fa.txt","workers/mms-fa/run_mms_fa.py","workers/qwen3-asr/run_qwen3_asr.py","workers/structure/README.md","workers/structure/run_structure.py"]},"repository":{"id":67,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"songformer-structure-lyrics","full_name":"luoanwu/songformer-structure-lyrics","description":"SongFormer 结构时间歌词行:结构→歌词行→字级时间流水线 + 治理底座","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":1079,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/songformer-structure-lyrics/languages","html_url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/songformer-structure-lyrics","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/songformer-structure-lyrics.git","clone_url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":2,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-07-28T14:19:19+08:00","updated_at":"2026-07-29T02:12:54+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1785285672
|
1785285762
|
0
|
1785285594
|
1785285763
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23479
|
feat(content-analysis): integrate canonical vocal feat(content-analysis): integrate canonical vocal score metrics...
|
73
|
5
|
governance.yml
|
1
|
5
|
0
|
refs/heads/main
|
5adfbb1177c24e9a9ddb95ab1b5e5865baa60642
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"0000000000000000000000000000000000000000","after":"5adfbb1177c24e9a9ddb95ab1b5e5865baa60642","compare_url":"https://gitea.g-hi.com/","commits":[{"id":"5adfbb1177c24e9a9ddb95ab1b5e5865baa60642","message":"feat(content-analysis): integrate canonical vocal score metrics\n","url":"https://gitea.g-hi.com/luoanwu/highpraise-content-management-platform/commit/5adfbb1177c24e9a9ddb95ab1b5e5865baa60642","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-13T01:35:39-07:00","added":["modules/content-analysis/schemas/vocal-score-evaluation-dataset.v3.schema.json","modules/content-analysis/schemas/vocal-score-evaluation-report.v3.schema.json"],"removed":[],"modified":["CLAUDE.md","apps/web/src/data/module-registry.v2.json","docs/domain/content-analysis-blueprint.md","docs/domain/content-platform-blueprint.md","docs/domain/owner-matrix.md","docs/framework-migration.md","modules/content-analysis/DEPLOYMENT.md","modules/content-analysis/README.md","modules/content-analysis/evaluation/vocal-score/datasets/p0-risk20.manifest.json","modules/content-analysis/reports/vocal-score-evaluation.latest.json","modules/content-analysis/reports/vocal-score-fixture-metrics.latest.json","modules/content-analysis/scripts/check_self_contained.py","modules/content-analysis/scripts/run_vocal_score_evaluation.py","modules/content-analysis/tests/test_self_check.py","modules/content-analysis/tests/test_vocal_score_evaluation.py","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/platform-boundaries.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/validation-source.latest.json","scripts/check-platform-boundaries.mjs"]},{"id":"e64a62b0b11460ac8ac0965fa3f755a6e23963a5","message":"feat(content-analysis): add isolated vocal score gold metrics\n","url":"https://gitea.g-hi.com/luoanwu/highpraise-content-management-platform/commit/e64a62b0b11460ac8ac0965fa3f755a6e23963a5","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-13T00:43:04-07:00","added":["modules/content-analysis/evaluation/vocal-score/datasets/synthetic-fixture-metrics.v1.json","modules/content-analysis/evaluation/vocal-score/gold/synthetic-fixture-001.adjudicated.v2.json","modules/content-analysis/evaluation/vocal-score/gold/synthetic-fixture-001.annotator-a.v2.json","modules/content-analysis/evaluation/vocal-score/gold/synthetic-fixture-001.annotator-b.v2.json","modules/content-analysis/evaluation/vocal-score/gold/synthetic-fixture-002.adjudicated.v2.json","modules/content-analysis/evaluation/vocal-score/gold/synthetic-fixture-002.annotator-a.v2.json","modules/content-analysis/evaluation/vocal-score/gold/synthetic-fixture-002.annotator-b.v2.json","modules/content-analysis/evaluation/vocal-score/policies/synthetic-fixture-metric-policy.v1.json","modules/content-analysis/examples/vocal-score-compile-request-002.json","modules/content-analysis/reports/vocal-score-fixture-metrics.latest.json","modules/content-analysis/schemas/vocal-score-gold-annotation.v2.schema.json","modules/content-analysis/schemas/vocal-score-synthetic-fixture-metric-policy.v1.schema.json","modules/content-analysis/schemas/vocal-score-synthetic-fixture-metrics-dataset.v1.schema.json","modules/content-analysis/schemas/vocal-score-synthetic-fixture-metrics-report.v1.schema.json","modules/content-analysis/scripts/run_vocal_score_fixture_metrics.py","modules/content-analysis/src/content_analysis/vocal_score_evaluation/__init__.py","modules/content-analysis/src/content_analysis/vocal_score_evaluation/gold_semantics.py","modules/content-analysis/src/content_analysis/vocal_score_evaluation/metrics.py","modules/content-analysis/tests/test_vocal_score_fixture_metrics.py","modules/content-analysis/tests/test_vocal_score_gold_semantics.py","modules/content-analysis/tests/test_vocal_score_metrics.py"],"removed":[],"modified":["CLAUDE.md","apps/web/src/data/module-registry.v2.json","docs/domain/content-analysis-blueprint.md","docs/domain/content-platform-blueprint.md","docs/domain/owner-matrix.md","docs/framework-migration.md","modules/content-analysis/DEPLOYMENT.md","modules/content-analysis/README.md","modules/content-analysis/reports/vocal-score-evaluation.latest.json","modules/content-analysis/scripts/check_self_contained.py","modules/content-analysis/scripts/run_vocal_score_evaluation.py","modules/content-analysis/tests/test_self_check.py","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/platform-boundaries.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/validation-source.latest.json","scripts/check-platform-boundaries.mjs"]},{"id":"43f31bf8615c32aa70532927d9f34fcdcce68717","message":"feat(score): harden evaluation eligibility\n","url":"https://gitea.g-hi.com/luoanwu/highpraise-content-management-platform/commit/43f31bf8615c32aa70532927d9f34fcdcce68717","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-12T23:10:30-07:00","added":["modules/content-analysis/evaluation/vocal-score/trust/rights-trusted-keyring.v1.json","modules/content-analysis/schemas/vocal-score-evaluation-dataset.v2.schema.json","modules/content-analysis/schemas/vocal-score-evaluation-evidence-bundle.v1.schema.json","modules/content-analysis/schemas/vocal-score-evaluation-report.v2.schema.json","modules/content-analysis/schemas/vocal-score-rights-attestation.v1.schema.json","modules/content-analysis/schemas/vocal-score-rights-trusted-keyring.v1.schema.json"],"removed":[],"modified":["CLAUDE.md","apps/web/src/data/module-registry.v2.json","docs/domain/content-analysis-blueprint.md","docs/domain/content-platform-blueprint.md","docs/domain/owner-matrix.md","docs/framework-migration.md","modules/content-alignment/reports/model-assets.latest.json","modules/content-alignment/reports/self-contained.latest.json","modules/content-analysis/DEPLOYMENT.md","modules/content-analysis/README.md","modules/content-analysis/content_analysis_service/schema_validation.py","modules/content-analysis/evaluation/vocal-score/datasets/p0-risk20.manifest.json","modules/content-analysis/reports/vocal-score-evaluation.latest.json","modules/content-analysis/scripts/check_self_contained.py","modules/content-analysis/scripts/run_vocal_score_evaluation.py","modules/content-analysis/src/content_analysis/vocal_score/__init__.py","modules/content-analysis/tests/test_self_check.py","modules/content-analysis/tests/test_vocal_score_evaluation.py","modules/content-stem-preparation/reports/self-contained.latest.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/platform-boundaries.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/validation-source.latest.json","scripts/check-platform-boundaries.mjs"]},{"id":"5f47fc13a7039417186241b5f6d2a6fe60f0a0f8","message":"fix(stem): align realtime endpoint and seal publish evidence\n","url":"https://gitea.g-hi.com/luoanwu/highpraise-content-management-platform/commit/5f47fc13a7039417186241b5f6d2a6fe60f0a0f8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-12T21:20:21-07:00","added":["modules/content-stem-preparation/reports/contract-consumers.latest.json","modules/content-stem-preparation/reports/dual-backend-parity.latest.json","modules/content-stem-preparation/reports/governance.latest.json","modules/content-stem-preparation/reports/migrations.latest.json","modules/content-stem-preparation/reports/order-concurrency-guard.latest.json","modules/content-stem-preparation/reports/runtime-governance.latest.json","modules/content-stem-preparation/reports/schema-sync.latest.json","modules/content-stem-preparation/reports/validation-source.latest.json"],"removed":["apps/web/.next-vocal-score-3342/BUILD_ID","apps/web/.next-vocal-score-3342/app-build-manifest.json","apps/web/.next-vocal-score-3342/app-path-routes-manifest.json","apps/web/.next-vocal-score-3342/build-manifest.json","apps/web/.next-vocal-score-3342/cache/.previewinfo","apps/web/.next-vocal-score-3342/cache/.rscinfo","apps/web/.next-vocal-score-3342/cache/eslint/.cache_c1u5dj","apps/web/.next-vocal-score-3342/cache/webpack/client-production/0.pack","apps/web/.next-vocal-score-3342/cache/webpack/client-production/1.pack","apps/web/.next-vocal-score-3342/cache/webpack/client-production/2.pack","apps/web/.next-vocal-score-3342/cache/webpack/client-production/index.pack","apps/web/.next-vocal-score-3342/cache/webpack/client-production/index.pack.old","apps/web/.next-vocal-score-3342/cache/webpack/edge-server-production/0.pack","apps/web/.next-vocal-score-3342/cache/webpack/edge-server-production/index.pack","apps/web/.next-vocal-score-3342/cache/webpack/server-production/0.pack","apps/web/.next-vocal-score-3342/cache/webpack/server-production/1.pack","apps/web/.next-vocal-score-3342/cache/webpack/server-production/index.pack","apps/web/.next-vocal-score-3342/cache/webpack/server-production/index.pack.old","apps/web/.next-vocal-score-3342/diagnostics/build-diagnostics.json","apps/web/.next-vocal-score-3342/diagnostics/framework.json","apps/web/.next-vocal-score-3342/export-marker.json","apps/web/.next-vocal-score-3342/images-manifest.json","apps/web/.next-vocal-score-3342/next-minimal-server.js.nft.json","apps/web/.next-vocal-score-3342/next-server.js.nft.json","apps/web/.next-vocal-score-3342/package.json","apps/web/.next-vocal-score-3342/prerender-manifest.json","apps/web/.next-vocal-score-3342/react-loadable-manifest.json","apps/web/.next-vocal-score-3342/required-server-files.json","apps/web/.next-vocal-score-3342/routes-manifest.json","apps/web/.next-vocal-score-3342/server/app-paths-manifest.json","apps/web/.next-vocal-score-3342/server/app/_not-found.html","apps/web/.next-vocal-score-3342/server/app/_not-found.meta","apps/web/.next-vocal-score-3342/server/app/_not-found.rsc","apps/web/.next-vocal-score-3342/server/app/_not-found/page.js","apps/web/.next-vocal-score-3342/server/app/_not-found/page.js.nft.json","apps/web/.next-vocal-score-3342/server/app/_not-found/page_client-reference-manifest.js","apps/web/.next-vocal-score-3342/server/app/content-analysis/dance.html","apps/web/.next-vocal-score-3342/server/app/content-analysis/dance.meta","apps/web/.next-vocal-score-3342/server/app/content-analysis/dance.rsc","apps/web/.next-vocal-score-3342/server/app/content-analysis/dance/page.js","apps/web/.next-vocal-score-3342/server/app/content-analysis/dance/page.js.nft.json","apps/web/.next-vocal-score-3342/server/app/content-analysis/dance/page_client-reference-manifest.js","apps/web/.next-vocal-score-3342/server/app/content-analysis/vocal-score.html","apps/web/.next-vocal-score-3342/server/app/content-analysis/vocal-score.meta","apps/web/.next-vocal-score-3342/server/app/content-analysis/vocal-score.rsc","apps/web/.next-vocal-score-3342/server/app/content-analysis/vocal-score/page.js","apps/web/.next-vocal-score-3342/server/app/content-analysis/vocal-score/page.js.nft.json","apps/web/.next-vocal-score-3342/server/app/content-analysis/vocal-score/page_client-reference-manifest.js","apps/web/.next-vocal-score-3342/server/app/framework-demo.html","apps/web/.next-vocal-score-3342/server/app/framework-demo.meta","apps/web/.next-vocal-score-3342/server/app/framework-demo.rsc","apps/web/.next-vocal-score-3342/server/app/framework-demo/page.js","apps/web/.next-vocal-score-3342/server/app/framework-demo/page.js.nft.json","apps/web/.next-vocal-score-3342/server/app/framework-demo/page_client-reference-manifest.js","apps/web/.next-vocal-score-3342/server/app/index.html","apps/web/.next-vocal-score-3342/server/app/index.meta","apps/web/.next-vocal-score-3342/server/app/index.rsc","apps/web/.next-vocal-score-3342/server/app/page.js","apps/web/.next-vocal-score-3342/server/app/page.js.nft.json","apps/web/.next-vocal-score-3342/server/app/page_client-reference-manifest.js","apps/web/.next-vocal-score-3342/server/chunks/293.js","apps/web/.next-vocal-score-3342/server/chunks/700.js","apps/web/.next-vocal-score-3342/server/chunks/758.js","apps/web/.next-vocal-score-3342/server/chunks/759.js","apps/web/.next-vocal-score-3342/server/chunks/874.js","apps/web/.next-vocal-score-3342/server/chunks/988.js","apps/web/.next-vocal-score-3342/server/functions-config-manifest.json","apps/web/.next-vocal-score-3342/server/interception-route-rewrite-manifest.js","apps/web/.next-vocal-score-3342/server/middleware-build-manifest.js","apps/web/.next-vocal-score-3342/server/middleware-manifest.json","apps/web/.next-vocal-score-3342/server/middleware-react-loadable-manifest.js","apps/web/.next-vocal-score-3342/server/next-font-manifest.js","apps/web/.next-vocal-score-3342/server/next-font-manifest.json","apps/web/.next-vocal-score-3342/server/pages-manifest.json","apps/web/.next-vocal-score-3342/server/pages/404.html","apps/web/.next-vocal-score-3342/server/pages/500.html","apps/web/.next-vocal-score-3342/server/pages/_app.js","apps/web/.next-vocal-score-3342/server/pages/_app.js.nft.json","apps/web/.next-vocal-score-3342/server/pages/_document.js","apps/web/.next-vocal-score-3342/server/pages/_document.js.nft.json","apps/web/.next-vocal-score-3342/server/pages/_error.js","apps/web/.next-vocal-score-3342/server/pages/_error.js.nft.json","apps/web/.next-vocal-score-3342/server/server-reference-manifest.js","apps/web/.next-vocal-score-3342/server/server-reference-manifest.json","apps/web/.next-vocal-score-3342/server/webpack-runtime.js","apps/web/.next-vocal-score-3342/static/5NNXTvJBCgs4K7INy7Fpq/_buildManifest.js","apps/web/.next-vocal-score-3342/static/5NNXTvJBCgs4K7INy7Fpq/_ssgManifest.js","apps/web/.next-vocal-score-3342/static/chunks/163-4182d870276e7df5.js","apps/web/.next-vocal-score-3342/static/chunks/217-5b22b4a8ae06a033.js","apps/web/.next-vocal-score-3342/static/chunks/41-d27e51d7dd7ff4a7.js","apps/web/.next-vocal-score-3342/static/chunks/504-ee652f8b5f8a89d3.js","apps/web/.next-vocal-score-3342/static/chunks/534-4be3e987f33ff5a5.js","apps/web/.next-vocal-score-3342/static/chunks/71-3af3b75fe2fcd7f3.js","apps/web/.next-vocal-score-3342/static/chunks/905-453d1b960e406ca8.js","apps/web/.next-vocal-score-3342/static/chunks/app/_not-found/page-10e1f63fb8237c46.js","apps/web/.next-vocal-score-3342/static/chunks/app/content-analysis/dance/page-d8fffbe188a1d6c8.js","apps/web/.next-vocal-score-3342/static/chunks/app/content-analysis/vocal-score/page-c9a5dd18742e1b39.js","apps/web/.next-vocal-score-3342/static/chunks/app/framework-demo/page-2fd7a8c7cf2a8011.js","apps/web/.next-vocal-score-3342/static/chunks/app/layout-c44d369f2a2959d7.js","apps/web/.next-vocal-score-3342/static/chunks/app/page-93bec44208fa8836.js","apps/web/.next-vocal-score-3342/static/chunks/c517231d-185cbf474551c2c3.js","apps/web/.next-vocal-score-3342/static/chunks/framework-0f89e0ec90ba9475.js","apps/web/.next-vocal-score-3342/static/chunks/main-3b3858801ae3affb.js","apps/web/.next-vocal-score-3342/static/chunks/main-app-ccd42aea3b5e793f.js","apps/web/.next-vocal-score-3342/static/chunks/pages/_app-eb4d2c012bed6c26.js","apps/web/.next-vocal-score-3342/static/chunks/pages/_error-bd4452cfe7d79031.js","apps/web/.next-vocal-score-3342/static/chunks/polyfills-42372ed130431b0a.js","apps/web/.next-vocal-score-3342/static/chunks/webpack-ff80d384c0a39e27.js","apps/web/.next-vocal-score-3342/static/css/d0594d8d528af107.css","apps/web/.next-vocal-score-3342/trace","apps/web/.next-vocal-score-3342/types/app/content-analysis/dance/page.ts","apps/web/.next-vocal-score-3342/types/app/content-analysis/vocal-score/page.ts","apps/web/.next-vocal-score-3342/types/app/framework-demo/page.ts","apps/web/.next-vocal-score-3342/types/app/layout.ts","apps/web/.next-vocal-score-3342/types/app/page.ts","apps/web/.next-vocal-score-3342/types/cache-life.d.ts","apps/web/.next-vocal-score-3342/types/package.json","apps/web/.next-vocal-score-3342/types/routes.d.ts","apps/web/.next-vocal-score-3342/types/validator.ts"],"modified":[".gitignore","CLAUDE.md","docs/framework-migration.md","modules/content-alignment/reports/model-assets.latest.json","modules/content-alignment/reports/self-contained.latest.json","modules/content-analysis/reports/vocal-score-evaluation.latest.json","modules/content-stem-preparation/.gitignore","modules/content-stem-preparation/CLAUDE.md","modules/content-stem-preparation/apps/web/src/hooks/useRealtime.ts","modules/content-stem-preparation/docs/governance-experience.md","modules/content-stem-preparation/reports/docs-truth.latest.json","modules/content-stem-preparation/reports/governance-docs.latest.json","modules/content-stem-preparation/reports/naming.latest.json","modules/content-stem-preparation/reports/self-contained.latest.json","modules/content-stem-preparation/scripts/check-docs-truth.mjs","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/platform-boundaries.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json"]},{"id":"3eb89b087903c1657bca1927cf18941a303029a1","message":"feat(三线完善): run 工作台 + 评分真实链 + 舞谱回放对拍 + 灯谱修订对比;全量门禁首绿\n\n- Web:/content-analysis/runs 持久编排工作台(素材载入/歌词证据浏览器内容寻址/实时列表与详情)\n- 评分工作台接通 WAV→3351→DSP→P0 真实链(补 next.config DSP rewrite),DSP 成熟度徽标不弱化诚实边界\n- 舞谱工作台本地回放对拍(SHA 绑定回放源 + 播放头 + 越拍高亮)\n- 灯谱 RevisionDiffPanel(基准快照 cue 级 diff + 修订链视图)+ A–E 报告钻取\n- 注册表/门禁成对更新(integrationStatus、runs 工作台、activeScope)\n- 修复三处历史死断言(首页 spec 漂移)+ C16 式容器锚定;首页 runs 链接标签\n- 目标仓首次全绿:check:runtime 80 tests、check:ui 15 用例、pnpm check 含棘轮全通过,\n reportProvenanceViolations 13→0,棘轮地板收紧至 15 文件/95 用例/80 tests/15 UI 用例\n- CLAUDE.md 动态区 8 行基线表 + 4 段说明同步为目标仓新鲜证据口径\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/highpraise-content-management-platform/commit/3eb89b087903c1657bca1927cf18941a303029a1","author":{"name":"ailaoluo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"ailaoluo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-12T08:26:31-07:00","added":["apps/web/src/app/content-analysis/runs/page.tsx","apps/web/src/components/content-analysis/AnalysisRunWorkbench.tsx","apps/web/src/components/content-analysis/lighting/RevisionDiffPanel.tsx","apps/web/src/lib/analysis-runs-api.ts","modules/content-stem-preparation/reports/naming.latest.json","reports/runtime-acceptance.latest.json","reports/ui-acceptance.latest.json"],"removed":["modules/content-stem-preparation/apps/web/.next-verify/BUILD_ID","modules/content-stem-preparation/apps/web/.next-verify/app-build-manifest.json","modules/content-stem-preparation/apps/web/.next-verify/app-path-routes-manifest.json","modules/content-stem-preparation/apps/web/.next-verify/build-manifest.json","modules/content-stem-preparation/apps/web/.next-verify/cache/.previewinfo","modules/content-stem-preparation/apps/web/.next-verify/cache/.rscinfo","modules/content-stem-preparation/apps/web/.next-verify/cache/eslint/.cache_k8kj8v","modules/content-stem-preparation/apps/web/.next-verify/cache/webpack/client-production/0.pack","modules/content-stem-preparation/apps/web/.next-verify/cache/webpack/client-production/index.pack","modules/content-stem-preparation/apps/web/.next-verify/cache/webpack/edge-server-production/0.pack","modules/content-stem-preparation/apps/web/.next-verify/cache/webpack/edge-server-production/index.pack","modules/content-stem-preparation/apps/web/.next-verify/cache/webpack/server-production/0.pack","modules/content-stem-preparation/apps/web/.next-verify/cache/webpack/server-production/index.pack","modules/content-stem-preparation/apps/web/.next-verify/diagnostics/build-diagnostics.json","modules/content-stem-preparation/apps/web/.next-verify/diagnostics/framework.json","modules/content-stem-preparation/apps/web/.next-verify/export-marker.json","modules/content-stem-preparation/apps/web/.next-verify/images-manifest.json","modules/content-stem-preparation/apps/web/.next-verify/next-minimal-server.js.nft.json","modules/content-stem-preparation/apps/web/.next-verify/next-server.js.nft.json","modules/content-stem-preparation/apps/web/.next-verify/package.json","modules/content-stem-preparation/apps/web/.next-verify/prerender-manifest.json","modules/content-stem-preparation/apps/web/.next-verify/react-loadable-manifest.json","modules/content-stem-preparation/apps/web/.next-verify/required-server-files.json","modules/content-stem-preparation/apps/web/.next-verify/routes-manifest.json","modules/content-stem-preparation/apps/web/.next-verify/server/app-paths-manifest.json","modules/content-stem-preparation/apps/web/.next-verify/server/app/_not-found.html","modules/content-stem-preparation/apps/web/.next-verify/server/app/_not-found.meta","modules/content-stem-preparation/apps/web/.next-verify/server/app/_not-found.rsc","modules/content-stem-preparation/apps/web/.next-verify/server/app/_not-found/page.js","modules/content-stem-preparation/apps/web/.next-verify/server/app/_not-found/page.js.nft.json","modules/content-stem-preparation/apps/web/.next-verify/server/app/_not-found/page_client-reference-manifest.js","modules/content-stem-preparation/apps/web/.next-verify/server/app/framework-demo.html","modules/content-stem-preparation/apps/web/.next-verify/server/app/framework-demo.meta","modules/content-stem-preparation/apps/web/.next-verify/server/app/framework-demo.rsc","modules/content-stem-preparation/apps/web/.next-verify/server/app/framework-demo/page.js","modules/content-stem-preparation/apps/web/.next-verify/server/app/framework-demo/page.js.nft.json","modules/content-stem-preparation/apps/web/.next-verify/server/app/framework-demo/page_client-reference-manifest.js","modules/content-stem-preparation/apps/web/.next-verify/server/app/index.html","modules/content-stem-preparation/apps/web/.next-verify/server/app/index.meta","modules/content-stem-preparation/apps/web/.next-verify/server/app/index.rsc","modules/content-stem-preparation/apps/web/.next-verify/server/app/page.js","modules/content-stem-preparation/apps/web/.next-verify/server/app/page.js.nft.json","modules/content-stem-preparation/apps/web/.next-verify/server/app/page_client-reference-manifest.js","modules/content-stem-preparation/apps/web/.next-verify/server/chunks/294.js","modules/content-stem-preparation/apps/web/.next-verify/server/chunks/700.js","modules/content-stem-preparation/apps/web/.next-verify/server/chunks/759.js","modules/content-stem-preparation/apps/web/.next-verify/server/chunks/923.js","modules/content-stem-preparation/apps/web/.next-verify/server/functions-config-manifest.json","modules/content-stem-preparation/apps/web/.next-verify/server/interception-route-rewrite-manifest.js","modules/content-stem-preparation/apps/web/.next-verify/server/middleware-build-manifest.js","modules/content-stem-preparation/apps/web/.next-verify/server/middleware-manifest.json","modules/content-stem-preparation/apps/web/.next-verify/server/middleware-react-loadable-manifest.js","modules/content-stem-preparation/apps/web/.next-verify/server/next-font-manifest.js","modules/content-stem-preparation/apps/web/.next-verify/server/next-font-manifest.json","modules/content-stem-preparation/apps/web/.next-verify/server/pages-manifest.json","modules/content-stem-preparation/apps/web/.next-verify/server/pages/404.html","modules/content-stem-preparation/apps/web/.next-verify/server/pages/500.html","modules/content-stem-preparation/apps/web/.next-verify/server/pages/_app.js","modules/content-stem-preparation/apps/web/.next-verify/server/pages/_app.js.nft.json","modules/content-stem-preparation/apps/web/.next-verify/server/pages/_document.js","modules/content-stem-preparation/apps/web/.next-verify/server/pages/_document.js.nft.json","modules/content-stem-preparation/apps/web/.next-verify/server/pages/_error.js","modules/content-stem-preparation/apps/web/.next-verify/server/pages/_error.js.nft.json","modules/content-stem-preparation/apps/web/.next-verify/server/server-reference-manifest.js","modules/content-stem-preparation/apps/web/.next-verify/server/server-reference-manifest.json","modules/content-stem-preparation/apps/web/.next-verify/server/webpack-runtime.js","modules/content-stem-preparation/apps/web/.next-verify/static/chunks/109-4a398a1aabac154c.js","modules/content-stem-preparation/apps/web/.next-verify/static/chunks/124-692e8da73cdcab4b.js","modules/content-stem-preparation/apps/web/.next-verify/static/chunks/172-44918854a4062715.js","modules/content-stem-preparation/apps/web/.next-verify/static/chunks/217-e2b42b639026e59f.js","modules/content-stem-preparation/apps/web/.next-verify/static/chunks/265-4b882205b2304362.js","modules/content-stem-preparation/apps/web/.next-verify/static/chunks/821-e944e0ab408c8858.js","modules/content-stem-preparation/apps/web/.next-verify/static/chunks/app/_not-found/page-ac01c90bb011e9a7.js","modules/content-stem-preparation/apps/web/.next-verify/static/chunks/app/framework-demo/page-6d105e8b3c472b05.js","modules/content-stem-preparation/apps/web/.next-verify/static/chunks/app/layout-08a44ec4bb450a0d.js","modules/content-stem-preparation/apps/web/.next-verify/static/chunks/app/page-e5a204342568e618.js","modules/content-stem-preparation/apps/web/.next-verify/static/chunks/c517231d-18aae8278ad011c0.js","modules/content-stem-preparation/apps/web/.next-verify/static/chunks/framework-b5223c1542334872.js","modules/content-stem-preparation/apps/web/.next-verify/static/chunks/main-49772dad59bb9d08.js","modules/content-stem-preparation/apps/web/.next-verify/static/chunks/main-app-94f808d3908405ad.js","modules/content-stem-preparation/apps/web/.next-verify/static/chunks/pages/_app-eb4d2c012bed6c26.js","modules/content-stem-preparation/apps/web/.next-verify/static/chunks/pages/_error-bd4452cfe7d79031.js","modules/content-stem-preparation/apps/web/.next-verify/static/chunks/polyfills-42372ed130431b0a.js","modules/content-stem-preparation/apps/web/.next-verify/static/chunks/webpack-949f95d056406c6e.js","modules/content-stem-preparation/apps/web/.next-verify/static/css/7459b3fd99e18208.css","modules/content-stem-preparation/apps/web/.next-verify/static/x7YQ2qtUVCXdNc6QPxoTE/_buildManifest.js","modules/content-stem-preparation/apps/web/.next-verify/static/x7YQ2qtUVCXdNc6QPxoTE/_ssgManifest.js","modules/content-stem-preparation/apps/web/.next-verify/trace","modules/content-stem-preparation/apps/web/.next-verify/types/app/framework-demo/page.ts","modules/content-stem-preparation/apps/web/.next-verify/types/app/layout.ts","modules/content-stem-preparation/apps/web/.next-verify/types/app/page.ts","modules/content-stem-preparation/apps/web/.next-verify/types/cache-life.d.ts","modules/content-stem-preparation/apps/web/.next-verify/types/package.json","modules/content-stem-preparation/apps/web/.next-verify/types/routes.d.ts","modules/content-stem-preparation/apps/web/.next-verify/types/validator.ts"],"modified":[".claude/launch.json","CLAUDE.md","README.md","apps/web/e2e/acceptance.spec.ts","apps/web/next.config.ts","apps/web/src/app/page.tsx","apps/web/src/components/EventFeed.tsx","apps/web/src/components/content-analysis/DanceLaneTimeline.tsx","apps/web/src/components/content-analysis/DanceWorkbench.tsx","apps/web/src/components/content-analysis/VocalScoreWorkbench.tsx","apps/web/src/components/content-analysis/lighting/LightingWorkbench.tsx","apps/web/src/data/module-registry.v2.json","apps/web/src/hooks/useRealtime.ts","apps/web/src/lib/content-analysis-api.ts","modules/content-alignment/CLAUDE.md","modules/content-alignment/apps/web/src/app/page.tsx","modules/content-alignment/reports/docs-truth.latest.json","modules/content-alignment/reports/governance-docs.latest.json","modules/content-alignment/reports/model-assets.latest.json","modules/content-alignment/reports/naming.latest.json","modules/content-alignment/reports/self-contained.latest.json","modules/content-analysis/reports/vocal-score-evaluation.latest.json","modules/content-stem-preparation/CLAUDE.md","modules/content-stem-preparation/README.md","modules/content-stem-preparation/apps/web/.env.example","modules/content-stem-preparation/apps/web/next.config.ts","modules/content-stem-preparation/reports/docs-truth.latest.json","modules/content-stem-preparation/reports/governance-docs.latest.json","modules/content-stem-preparation/reports/self-contained.latest.json","modules/content-stem-preparation/scripts/check-docs-truth.mjs","packages/contracts/src/analysis-run.test.ts","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/platform-boundaries.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/validation-source.latest.json","scripts/check-platform-boundaries.mjs"]}],"total_commits":0,"head_commit":{"id":"5adfbb1177c24e9a9ddb95ab1b5e5865baa60642","message":"feat(content-analysis): integrate canonical vocal score metrics\n","url":"https://gitea.g-hi.com/luoanwu/highpraise-content-management-platform/commit/5adfbb1177c24e9a9ddb95ab1b5e5865baa60642","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-13T01:35:39-07:00","added":["modules/content-analysis/schemas/vocal-score-evaluation-dataset.v3.schema.json","modules/content-analysis/schemas/vocal-score-evaluation-report.v3.schema.json"],"removed":[],"modified":["CLAUDE.md","apps/web/src/data/module-registry.v2.json","docs/domain/content-analysis-blueprint.md","docs/domain/content-platform-blueprint.md","docs/domain/owner-matrix.md","docs/framework-migration.md","modules/content-analysis/DEPLOYMENT.md","modules/content-analysis/README.md","modules/content-analysis/evaluation/vocal-score/datasets/p0-risk20.manifest.json","modules/content-analysis/reports/vocal-score-evaluation.latest.json","modules/content-analysis/reports/vocal-score-fixture-metrics.latest.json","modules/content-analysis/scripts/check_self_contained.py","modules/content-analysis/scripts/run_vocal_score_evaluation.py","modules/content-analysis/tests/test_self_check.py","modules/content-analysis/tests/test_vocal_score_evaluation.py","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/platform-boundaries.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/validation-source.latest.json","scripts/check-platform-boundaries.mjs"]},"repository":{"id":73,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"highpraise-content-management-platform","full_name":"luoanwu/highpraise-content-management-platform","description":"嗨赞内容管理平台:六模块治理底座与独立内容服务","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":27,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/highpraise-content-management-platform/languages","html_url":"https://gitea.g-hi.com/luoanwu/highpraise-content-management-platform","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/highpraise-content-management-platform","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/highpraise-content-management-platform.git","clone_url":"https://gitea.g-hi.com/luoanwu/highpraise-content-management-platform.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-13T12:09:29+08:00","updated_at":"2026-08-13T17:12:48+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1786612368
|
1786612459
|
0
|
1786612368
|
1786612461
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23480
|
feat(content-analysis): add vocal score physical p feat(content-analysis): add vocal score physical projection...
|
73
|
5
|
governance.yml
|
2
|
5
|
0
|
refs/heads/main
|
5756bf3650630520be67b4d5373a82937d065311
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"5adfbb1177c24e9a9ddb95ab1b5e5865baa60642","after":"5756bf3650630520be67b4d5373a82937d065311","compare_url":"https://gitea.g-hi.com/luoanwu/highpraise-content-management-platform/compare/5adfbb1177c24e9a9ddb95ab1b5e5865baa60642...5756bf3650630520be67b4d5373a82937d065311","commits":[{"id":"5756bf3650630520be67b4d5373a82937d065311","message":"feat(content-analysis): add vocal score physical projection\n","url":"https://gitea.g-hi.com/luoanwu/highpraise-content-management-platform/commit/5756bf3650630520be67b4d5373a82937d065311","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-13T03:30:36-07:00","added":["modules/content-analysis/schemas/canonical-alignment-bundle.v1.schema.json","modules/content-analysis/schemas/official-lyric-timing-evidence.v1.schema.json","modules/content-analysis/schemas/prepared-track-set.v1.schema.json","modules/content-analysis/schemas/vocal-pitch-evidence.v1.schema.json","modules/content-analysis/schemas/vocal-score-physical-projection-receipt.v1.schema.json","modules/content-analysis/schemas/vocal-score-physical-projection-request.v1.schema.json","modules/content-analysis/src/content_analysis/vocal_score_projection/__init__.py","modules/content-analysis/src/content_analysis/vocal_score_projection/projector.py","modules/content-analysis/src/content_analysis/vocal_score_projection/snapshot.py","modules/content-analysis/tests/test_vocal_score_projection.py"],"removed":[],"modified":["CLAUDE.md","apps/web/src/data/module-registry.v2.json","docs/domain/content-analysis-blueprint.md","docs/domain/content-platform-blueprint.md","docs/domain/owner-matrix.md","docs/framework-migration.md","modules/content-analysis/DEPLOYMENT.md","modules/content-analysis/README.md","modules/content-analysis/reports/vocal-score-evaluation.latest.json","modules/content-analysis/reports/vocal-score-fixture-metrics.latest.json","modules/content-analysis/schemas/vocal-score-compile-request.v1.schema.json","modules/content-analysis/schemas/vocal-score-dsp-candidate-request.v1.schema.json","modules/content-analysis/schemas/vocal-score-dsp-candidate-response.v1.schema.json","modules/content-analysis/scripts/check_self_contained.py","modules/content-analysis/tests/test_self_check.py","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/platform-boundaries.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/validation-source.latest.json","scripts/check-platform-boundaries.mjs"]}],"total_commits":0,"head_commit":{"id":"5756bf3650630520be67b4d5373a82937d065311","message":"feat(content-analysis): add vocal score physical projection\n","url":"https://gitea.g-hi.com/luoanwu/highpraise-content-management-platform/commit/5756bf3650630520be67b4d5373a82937d065311","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-13T03:30:36-07:00","added":["modules/content-analysis/schemas/canonical-alignment-bundle.v1.schema.json","modules/content-analysis/schemas/official-lyric-timing-evidence.v1.schema.json","modules/content-analysis/schemas/prepared-track-set.v1.schema.json","modules/content-analysis/schemas/vocal-pitch-evidence.v1.schema.json","modules/content-analysis/schemas/vocal-score-physical-projection-receipt.v1.schema.json","modules/content-analysis/schemas/vocal-score-physical-projection-request.v1.schema.json","modules/content-analysis/src/content_analysis/vocal_score_projection/__init__.py","modules/content-analysis/src/content_analysis/vocal_score_projection/projector.py","modules/content-analysis/src/content_analysis/vocal_score_projection/snapshot.py","modules/content-analysis/tests/test_vocal_score_projection.py"],"removed":[],"modified":["CLAUDE.md","apps/web/src/data/module-registry.v2.json","docs/domain/content-analysis-blueprint.md","docs/domain/content-platform-blueprint.md","docs/domain/owner-matrix.md","docs/framework-migration.md","modules/content-analysis/DEPLOYMENT.md","modules/content-analysis/README.md","modules/content-analysis/reports/vocal-score-evaluation.latest.json","modules/content-analysis/reports/vocal-score-fixture-metrics.latest.json","modules/content-analysis/schemas/vocal-score-compile-request.v1.schema.json","modules/content-analysis/schemas/vocal-score-dsp-candidate-request.v1.schema.json","modules/content-analysis/schemas/vocal-score-dsp-candidate-response.v1.schema.json","modules/content-analysis/scripts/check_self_contained.py","modules/content-analysis/tests/test_self_check.py","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/platform-boundaries.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/validation-source.latest.json","scripts/check-platform-boundaries.mjs"]},"repository":{"id":73,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"highpraise-content-management-platform","full_name":"luoanwu/highpraise-content-management-platform","description":"嗨赞内容管理平台:六模块治理底座与独立内容服务","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":1532176,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/highpraise-content-management-platform/languages","html_url":"https://gitea.g-hi.com/luoanwu/highpraise-content-management-platform","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/highpraise-content-management-platform","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/highpraise-content-management-platform.git","clone_url":"https://gitea.g-hi.com/luoanwu/highpraise-content-management-platform.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-13T12:09:29+08:00","updated_at":"2026-08-13T17:12:48+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1786617045
|
1786617302
|
0
|
1786617045
|
1786617304
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23489
|
Merge pull request #12 from laoluojuhai/fix/vm-doc Merge pull request #12 from laoluojuhai/fix/vm-dockerfile-build-path...
|
72
|
5
|
governance.yml
|
10
|
5
|
0
|
refs/heads/main
|
125c54d328d3da221b5d91c0a2dd0475712c6e96
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"8ae98649e077fa188f8e9c1b0a11b78a2377c836","after":"125c54d328d3da221b5d91c0a2dd0475712c6e96","compare_url":"https://gitea.g-hi.com/luoanwu/juhai-quotation-system/compare/8ae98649e077fa188f8e9c1b0a11b78a2377c836...125c54d328d3da221b5d91c0a2dd0475712c6e96","commits":[{"id":"125c54d328d3da221b5d91c0a2dd0475712c6e96","message":"Merge pull request #12 from laoluojuhai/fix/vm-dockerfile-build-path\n\nfix(vm): 打通容器构建路径——保住 slim 运行镜像,不靠放宽红线换构建成功","url":"https://gitea.g-hi.com/luoanwu/juhai-quotation-system/commit/125c54d328d3da221b5d91c0a2dd0475712c6e96","author":{"name":"laoluojuhai","email":"158980461+laoluojuhai@users.noreply.github.com","username":""},"committer":{"name":"GitHub","email":"noreply@github.com","username":""},"verification":null,"timestamp":"2026-08-17T07:09:44-07:00","added":[],"removed":[],"modified":[".dockerignore","deploy/vm/.env.example","deploy/vm/Dockerfile","reports/api-route-contract.latest.json","reports/approval-payload-contract.latest.json","reports/component-size.latest.json","reports/contract-consumers.latest.json","reports/design-tokens.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/gate-selftest.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/module-integration.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/queue-isolation.latest.json","reports/role-permissions.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/sites-governance.latest.json","reports/validation-source.latest.json","reports/vm-deploy.latest.json","reports/workspace-hygiene.latest.json","scripts/vm-deploy.sh"]},{"id":"6f13a78de9c02ae6a36fcebfb4bde63fbd092158","message":"fix(vm): 打通容器构建路径——保住 slim 运行镜像,不靠放宽红线换构建成功\n\n`deploy/vm/Dockerfile` 的构建路径从未真正跑通过(并发治理会话只用 pnpm/turbo 跑门禁,\n从不 docker build)。而 check:vm-deploy 一直是绿的——它查 Dockerfile 的**结构**\n(每个 stage 用哪个 FROM、有没有 fat runtime),不查它**能不能构建出来**。\n于是棘轮报告写着「镜像瘦身非 root、可回滚、备份可恢复」✅,而那个镜像根本产不出来。\n\n5 处构建 bug:\n1. contracts 的 `prepare`(tsc) 在只有 manifest 的依赖层里跑,找不到 tsconfig/src → TS5058。\n 先 COPY contracts 的 tsconfig + src 给它当输入。\n2. 新 workspace 包 @repo/password-auth(两后端 runtime 依赖)未进 manifest COPY、\n 也没被显式 build。\n3. `pnpm deploy --prod --legacy`:pnpm 9.15.9 不认 `--legacy`(Unknown option)。\n 旧注释称「未开启 inject-workspace-packages 时需要 --legacy」——实测在本仓版本上\n 不成立,去掉即可正常打平 workspace 包(sharp 这类 lockfile 原生依赖也照常带出)。\n4. `pnpm deploy` 只按 lockfile 物化依赖,而 .prisma/client(含平台相关 query engine)\n 是 `prisma generate` **生成**的、不在任何 lockfile 里,永远不会被带出去 →\n 新增一步从 build 树复制。路径由 @prisma/client 的解析结果反推,不硬编码 pnpm store\n 的哈希目录名;且必须从 app 目录解析(workspace 根 node_modules 里没有它)。\n5. web stage `COPY apps/web/public` 失败——git 未跟踪任何 public 资产。\n ⚠️ 本机可能有个空的 public/(git 不跟踪空目录),docker build 读本地上下文因而能过,\n CI 与全新 clone 上必挂,注释已写明这个陷阱。\n\n**刻意不采用**此前 `dockerfile-vm-deploy-fixes-ec411c0.patch` 的策略(放弃 slim、\n运行镜像改 FROM build):那会撞 4 条门禁红线(runtime-from-base-* / no-fat-runtime-*),\n而实测 slim 路径的两个阻塞点(3、4)都可解,「镜像瘦身作为后续项不阻塞」的前提不成立。\n体积实测:api-nestjs 741MB / api-fastify 695MB / web 546MB,\n对照 fat 方案 8.46GB、2026-08-06 实际部署的 2.69GB。非 root 由镜像层 USER node 保证,\n而非仅靠 compose 的 user: 覆盖。\n\n顺带两处断链(均为 MinIO 进 compose 后没人跟上):\n- .env.example 与 vm:init 都不认识 S3_*,而它们是 compose 的必填变量 → 新机器\n `vm:init` 后 `vm:up` 必然卡在变量插值。已补占位符 + 随机生成 + 存量 .env 自愈。\n- .dockerignore 只写 `**/.next`,匹配不到本仓工具链自建的 distDir\n (.next-ui-* / .next-dev-* / .next-manual-*),也没排除 sites/(G26 那套独立\n Cloudflare 系统,其 .sites-runtime 本机 1.0GB)→ COPY . . 层 3.79GB → 270MB。\n\n证据(作用域=本地工作区):\n- docker build 四个 target 全部 EXIT=0(api-nestjs / api-fastify / web / migrate)\n- 镜像内实测 @prisma/client 与原生模块 sharp 均可加载、dist 入口就位、uid=1000 非 root\n- Dockerfile 里那条「Prisma Client 缺失即构建失败」的断言**首次真正执行并通过**\n- pnpm vm:config EXIT=0(7 个服务解析通过)\n- pnpm check 22 项全绿 exit=0\n\n未验证:未跑 vm:up / vm:smoke(整栈起停与真实写链冒烟),故不得宣称「可部署」。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-quotation-system/commit/6f13a78de9c02ae6a36fcebfb4bde63fbd092158","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-17T06:57:55-07:00","added":[],"removed":[],"modified":[".dockerignore","deploy/vm/.env.example","deploy/vm/Dockerfile","reports/api-route-contract.latest.json","reports/approval-payload-contract.latest.json","reports/component-size.latest.json","reports/contract-consumers.latest.json","reports/design-tokens.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/gate-selftest.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/module-integration.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/queue-isolation.latest.json","reports/role-permissions.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/sites-governance.latest.json","reports/validation-source.latest.json","reports/vm-deploy.latest.json","reports/workspace-hygiene.latest.json","scripts/vm-deploy.sh"]}],"total_commits":0,"head_commit":{"id":"125c54d328d3da221b5d91c0a2dd0475712c6e96","message":"Merge pull request #12 from laoluojuhai/fix/vm-dockerfile-build-path\n\nfix(vm): 打通容器构建路径——保住 slim 运行镜像,不靠放宽红线换构建成功","url":"https://gitea.g-hi.com/luoanwu/juhai-quotation-system/commit/125c54d328d3da221b5d91c0a2dd0475712c6e96","author":{"name":"laoluojuhai","email":"158980461+laoluojuhai@users.noreply.github.com","username":""},"committer":{"name":"GitHub","email":"noreply@github.com","username":""},"verification":null,"timestamp":"2026-08-17T07:09:44-07:00","added":[],"removed":[],"modified":[".dockerignore","deploy/vm/.env.example","deploy/vm/Dockerfile","reports/api-route-contract.latest.json","reports/approval-payload-contract.latest.json","reports/component-size.latest.json","reports/contract-consumers.latest.json","reports/design-tokens.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/gate-selftest.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/module-integration.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/queue-isolation.latest.json","reports/role-permissions.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/sites-governance.latest.json","reports/validation-source.latest.json","reports/vm-deploy.latest.json","reports/workspace-hygiene.latest.json","scripts/vm-deploy.sh"]},"repository":{"id":72,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhai-quotation-system","full_name":"luoanwu/juhai-quotation-system","description":"巨嗨报价系统:Next.js + NestJS/Fastify 双后端治理型报价业务底座","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":33684,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-quotation-system/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-quotation-system","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-quotation-system","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-quotation-system.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-quotation-system.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":9,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-07-31T03:51:09+08:00","updated_at":"2026-08-17T19:18:19+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1786975808
|
1786975899
|
0
|
1786975808
|
1786975900
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23490
|
chore(reports): 刷新治理证据,绑定提交 b0d8e83
|
74
|
5
|
governance.yml
|
4
|
5
|
0
|
refs/heads/main
|
6b3be1dafc25b3d82703595f7542769eae6b7744
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"66f0513cfb65a0eb27fe77ff8b5bd158c0901623","after":"6b3be1dafc25b3d82703595f7542769eae6b7744","compare_url":"https://gitea.g-hi.com/luoanwu/haimate/compare/66f0513cfb65a0eb27fe77ff8b5bd158c0901623...6b3be1dafc25b3d82703595f7542769eae6b7744","commits":[{"id":"6b3be1dafc25b3d82703595f7542769eae6b7744","message":"chore(reports): 刷新治理证据,绑定提交 b0d8e83\n\n三级门禁在 b0d8e83 上重跑后的报告:\n- pnpm check exit 0(16 项静态门禁)\n- check:runtime passed:380 tests / 0 failures\n- check:ui passed:14 用例 / 0 失败\n\n诚实标注:provenance 的 worktreeDirty 仍为 true。原因不是本提交遗漏了文件,\n而是**同一工作区存在并发会话**,其在制品(CLAUDE.md、两端 approval-tickets.service、\nweb/src/lib/types.ts、check-order-concurrency-guard.mjs、check-owner-matrix.mjs)\n在重跑期间处于未提交状态,已刻意不纳入本提交。\n\n因此本组报告只能宣称「本地工作区(含上述并发在制品)在 2026-08-17 通过三级门禁」,\n不得外推为 clean checkout 通过、远端已发布或 CI 已拦截。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/haimate/commit/6b3be1dafc25b3d82703595f7542769eae6b7744","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-17T16:16:17-07:00","added":["reports/outbox-lease.latest.json","reports/partner-truth.latest.json","reports/security-boundary.latest.json"],"removed":[],"modified":["reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/hallucination-guard.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/owner-matrix.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/tailwind-tokens.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json"]},{"id":"b0d8e837396f6e0f15c0ceeb46b236f14f40f5c9","message":"feat: 合并提交长期未落库的批次——Finance Phase A、安全边界、outbox 租约与 crew 雇佣纵切\n\n本次是一次「补提交」:工作区此前累积了大量从未进入任何提交的成果,\n其中包含三个只存在于本地的门禁脚本(partner-truth / security-boundary /\noutbox-lease),clean checkout 根本跑不出当前的治理结论。一并落库。\n\n主要内容\n- Finance 对账 Phase A:12 个 model、双后端服务与 worker、/finance 工作面与 e2e\n- 应用安全边界(C21):显式 demo/signed 分界、principal 取 tenant/actor、\n 治理动作 RBAC、支付 webhook raw-body HMAC\n- Outbox 多实例租约(C22):CTE + FOR UPDATE SKIP LOCKED 原子领取、行锁 fencing、\n 租约过期崩溃恢复\n- crew 雇佣纵切(L7,新):crewEngagementMachine 落 contracts 单源,双后端对等写链\n (updateMany + stage/version 双前置条件,0 行即 409),两端迁移逐字一致,\n /team 的 employment 由写死的 UNKNOWN 变为 crew_engagements 真实阶段\n- 新门禁:check:partner-truth / check:security-boundary / check:outbox-lease /\n check:owner-matrix,并把 crew 写链接入 check:concurrency-guard(20→22 条)\n- a11y 与 Tailwind token 修复及其静默失效门禁\n\ncrew 纵切的两个设计要点\n- 无行即未雇佣,不设 NOT_HIRED 状态(与 TrustState 缺行=UNCONFIGURED 同构)\n- 实习期强制人审、转正后才准进入信任爬坡放行:商业分层直接就是授权分层,\n 实习期本质上是在攒 approval.decided 样本,转正把信任兑现为自治\n- PLANNED 的 SKU 不可雇佣,避免造出「实习中却没有任何工作面」的假雇佣事实\n\n验收(本地 dirty 工作区,2026-08-17;不得外推为远端已发布或生产就绪)\n- pnpm check exit 0(16 项静态门禁;新增并发写链守卫已做负向测试,确认会红)\n- check:runtime passed:380 tests / 0 failures(地板 355→380)\n- check:ui passed:14 用例 / 0 失败(地板 13→14)\n\n按 CLAUDE.md 提交纪律,baseline.json 的地板与支撑它的测试文件在同一提交内。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/haimate/commit/b0d8e837396f6e0f15c0ceeb46b236f14f40f5c9","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-17T16:09:30-07:00","added":["apps/api-fastify/prisma/migrations/20260814233000_add_finance_reconciliation_phase_a/migration.sql","apps/api-fastify/prisma/migrations/20260815033000_add_outbox_dispatch_leases/migration.sql","apps/api-fastify/prisma/migrations/20260817090000_add_crew_engagement/migration.sql","apps/api-fastify/src/modules/crew/crew.service.ts","apps/api-fastify/src/modules/finance/errors.ts","apps/api-fastify/src/modules/finance/finance-jobs.service.ts","apps/api-fastify/src/modules/finance/finance-jobs.types.ts","apps/api-fastify/src/modules/finance/finance-json.ts","apps/api-fastify/src/modules/finance/finance-payment-transaction.ts","apps/api-fastify/src/modules/finance/finance-sweep.service.ts","apps/api-fastify/src/modules/finance/finance-transaction.ts","apps/api-fastify/src/modules/finance/finance.service.ts","apps/api-fastify/src/modules/finance/integrity.ts","apps/api-fastify/src/modules/security.ts","apps/api-fastify/src/plugins/finance-workers.ts","apps/api-fastify/src/routes/crew.ts","apps/api-fastify/src/routes/finance.ts","apps/api-fastify/test/crew.integration.test.ts","apps/api-fastify/test/finance-workers.integration.test.ts","apps/api-fastify/test/finance.integration.test.ts","apps/api-fastify/test/security.http.test.ts","apps/api-nestjs/prisma/migrations/20260814233000_add_finance_reconciliation_phase_a/migration.sql","apps/api-nestjs/prisma/migrations/20260815033000_add_outbox_dispatch_leases/migration.sql","apps/api-nestjs/prisma/migrations/20260817090000_add_crew_engagement/migration.sql","apps/api-nestjs/src/common/security/security.decorators.ts","apps/api-nestjs/src/common/security/security.guard.ts","apps/api-nestjs/src/common/security/security.module.ts","apps/api-nestjs/src/common/security/security.service.ts","apps/api-nestjs/src/crew/crew.controller.ts","apps/api-nestjs/src/crew/crew.module.ts","apps/api-nestjs/src/crew/crew.service.ts","apps/api-nestjs/src/finance/finance-jobs.service.ts","apps/api-nestjs/src/finance/finance-jobs.types.ts","apps/api-nestjs/src/finance/finance-json.ts","apps/api-nestjs/src/finance/finance-payment-transaction.ts","apps/api-nestjs/src/finance/finance-reconciliation.processor.ts","apps/api-nestjs/src/finance/finance-sweep.service.ts","apps/api-nestjs/src/finance/finance-transaction.ts","apps/api-nestjs/src/finance/finance-worker-lifecycle.ts","apps/api-nestjs/src/finance/finance.controller.ts","apps/api-nestjs/src/finance/finance.module.ts","apps/api-nestjs/src/finance/finance.service.ts","apps/api-nestjs/test/crew.integration.test.ts","apps/api-nestjs/test/finance-workers.integration.test.ts","apps/api-nestjs/test/finance.http.test.ts","apps/api-nestjs/test/finance.integration.test.ts","apps/api-nestjs/test/security.http.test.ts","apps/web/e2e/finance-p0.spec.ts","apps/web/public/haimate-mark.png","apps/web/src/app/finance/page.tsx","apps/web/src/app/team/page.tsx","apps/web/src/features/finance/api/finance-api.ts","apps/web/src/features/finance/components/FinanceCoveragePanel.tsx","apps/web/src/features/finance/components/FinanceDailyReportPanel.tsx","apps/web/src/features/finance/components/FinanceImportPanel.tsx","apps/web/src/features/finance/components/FinanceWorkspace.tsx","apps/web/src/features/finance/components/ReconciliationCasesPanel.tsx","apps/web/src/features/finance/components/ReconciliationPanel.tsx","apps/web/src/features/finance/components/finance-presenters.tsx","apps/web/src/features/finance/hooks/use-finance.ts","apps/web/src/features/finance/types/index.ts","apps/web/src/features/team/api/team-api.ts","apps/web/src/features/team/components/ConversationWorkspace.tsx","apps/web/src/features/team/components/EmployeeRoster.tsx","apps/web/src/features/team/components/EngagementPanel.tsx","apps/web/src/features/team/components/SecondaryEmployeePanel.tsx","apps/web/src/features/team/components/TeamInsights.tsx","apps/web/src/features/team/hooks/use-team-workspace.ts","apps/web/src/features/team/lib/presenters.ts","apps/web/src/features/team/types.ts","design-qa.md","docs/adr/0011-explicit-demo-and-signed-application-security.md","docs/domain/crew-substrate-blueprint.md","packages/contracts/dist/crew.d.ts","packages/contracts/dist/crew.d.ts.map","packages/contracts/dist/crew.js","packages/contracts/dist/crew.js.map","packages/contracts/dist/finance.d.ts","packages/contracts/dist/finance.d.ts.map","packages/contracts/dist/finance.js","packages/contracts/dist/finance.js.map","packages/contracts/dist/security.d.ts","packages/contracts/dist/security.d.ts.map","packages/contracts/dist/security.js","packages/contracts/dist/security.js.map","packages/contracts/src/finance.test.ts","packages/contracts/src/finance.ts","packages/contracts/src/security.test.ts","packages/contracts/src/security.ts","reports/design-qa/haimate-team-comparison-final.png","reports/design-qa/haimate-team-final-1440x1024.jpg","reports/design-qa/haimate-team-mobile-390x844.jpg","reports/design-qa/haimate-team-workspace-comparison-final.png","reports/owner-matrix.latest.json","scripts/check-outbox-lease.mjs","scripts/check-owner-matrix.mjs","scripts/check-partner-truth.mjs","scripts/check-security-boundary.mjs"],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/.env.example","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/app.ts","apps/api-fastify/src/modules/bookings/booking-transaction.ts","apps/api-fastify/src/modules/bookings/bookings.service.ts","apps/api-fastify/src/modules/conversations/booking-effects.service.ts","apps/api-fastify/src/modules/conversations/conversation-transaction.ts","apps/api-fastify/src/modules/conversations/conversations.service.ts","apps/api-fastify/src/modules/conversations/room-unavailable.consumer.ts","apps/api-fastify/src/modules/payments/payments.service.ts","apps/api-fastify/src/modules/platform/approval-ticket-transaction.ts","apps/api-fastify/src/modules/platform/approval-tickets.service.ts","apps/api-fastify/src/modules/platform/http-support.ts","apps/api-fastify/src/modules/platform/knowledge.service.ts","apps/api-fastify/src/modules/platform/tool-gateway.service.ts","apps/api-fastify/src/modules/platform/trust.service.ts","apps/api-fastify/src/modules/ports/availability.service.ts","apps/api-fastify/src/modules/ports/payment.service.ts","apps/api-fastify/src/modules/tenant.ts","apps/api-fastify/src/plugins/outbox.ts","apps/api-fastify/src/routes/approval-tickets.ts","apps/api-fastify/src/routes/bookings.ts","apps/api-fastify/src/routes/conversations.ts","apps/api-fastify/src/routes/knowledge.ts","apps/api-fastify/src/routes/payments.ts","apps/api-fastify/src/routes/sse.ts","apps/api-fastify/src/routes/tools.ts","apps/api-fastify/src/routes/trust.ts","apps/api-fastify/src/routes/ws.ts","apps/api-fastify/src/types.ts","apps/api-fastify/test/booking.http.test.ts","apps/api-fastify/test/booking.integration.test.ts","apps/api-fastify/test/booking.workers.test.ts","apps/api-fastify/test/outbox.deadletter.test.ts","apps/api-fastify/test/platform.http.test.ts","apps/api-fastify/test/platform.integration.test.ts","apps/api-fastify/vitest.config.ts","apps/api-nestjs/.env.example","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/src/app.module.ts","apps/api-nestjs/src/availability/availability.service.ts","apps/api-nestjs/src/bookings/booking-transaction.ts","apps/api-nestjs/src/bookings/bookings.controller.ts","apps/api-nestjs/src/bookings/bookings.service.ts","apps/api-nestjs/src/common/tenant.decorator.ts","apps/api-nestjs/src/conversations/booking-effects.processor.ts","apps/api-nestjs/src/conversations/conversation-transaction.ts","apps/api-nestjs/src/conversations/conversations.controller.ts","apps/api-nestjs/src/conversations/conversations.service.ts","apps/api-nestjs/src/create-app.ts","apps/api-nestjs/src/events/events.gateway.ts","apps/api-nestjs/src/events/outbox-dispatcher.service.ts","apps/api-nestjs/src/health/health.controller.ts","apps/api-nestjs/src/orders/orders.controller.ts","apps/api-nestjs/src/payments/payment-port.service.ts","apps/api-nestjs/src/payments/payments.controller.ts","apps/api-nestjs/src/payments/payments.module.ts","apps/api-nestjs/src/payments/payments.service.ts","apps/api-nestjs/src/platform/approval-ticket-transaction.ts","apps/api-nestjs/src/platform/approval-tickets.controller.ts","apps/api-nestjs/src/platform/approval-tickets.service.ts","apps/api-nestjs/src/platform/knowledge.controller.ts","apps/api-nestjs/src/platform/knowledge.service.ts","apps/api-nestjs/src/platform/tool-gateway.controller.ts","apps/api-nestjs/src/platform/tool-gateway.service.ts","apps/api-nestjs/src/platform/tools.controller.ts","apps/api-nestjs/src/platform/trust.controller.ts","apps/api-nestjs/src/platform/trust.service.ts","apps/api-nestjs/src/redis/redis.module.ts","apps/api-nestjs/src/sse/sse.controller.ts","apps/api-nestjs/test/booking.http.test.ts","apps/api-nestjs/test/booking.integration.test.ts","apps/api-nestjs/test/booking.workers.test.ts","apps/api-nestjs/test/outbox.deadletter.test.ts","apps/api-nestjs/test/platform-workers.integration.test.ts","apps/api-nestjs/test/platform.http.test.ts","apps/api-nestjs/test/platform.integration.test.ts","apps/api-nestjs/vitest.config.ts","apps/web/.env.example","apps/web/e2e/haimate-p0.spec.ts","apps/web/e2e/realtime-store.spec.ts","apps/web/package.json","apps/web/src/app/layout.tsx","apps/web/src/components/ApprovalsPanel.tsx","apps/web/src/components/BookingsPanel.tsx","apps/web/src/components/EventFeed.tsx","apps/web/src/components/ToolCallsPanel.tsx","apps/web/src/features/team/components/TeamLedgerBoard.tsx","apps/web/src/features/team/components/TeamWorkspace.tsx","apps/web/src/hooks/useRealtime.ts","apps/web/src/lib/api.ts","apps/web/src/lib/types.ts","apps/web/src/lib/utils.ts","apps/web/src/store/realtime.ts","docs/adr/0010-finance-money-source-completeness-and-event-identity.md","docs/adr/README.md","docs/domain/booking-reception-blueprint.md","docs/domain/finance-reconciliation-blueprint.md","docs/domain/haimate-p0-grill-alignment.md","docs/domain/owner-matrix.md","docs/domain/platform-core-blueprint.md","docs/governance-experience.md","docs/product/haimate-pricing-and-gtm.md","docs/product/haimate-strategy-corpus.md","package.json","packages/contracts/dist/approval.d.ts","packages/contracts/dist/approval.d.ts.map","packages/contracts/dist/approval.js","packages/contracts/dist/approval.js.map","packages/contracts/dist/booking.d.ts","packages/contracts/dist/booking.d.ts.map","packages/contracts/dist/booking.js","packages/contracts/dist/booking.js.map","packages/contracts/dist/conversation.d.ts","packages/contracts/dist/index.d.ts","packages/contracts/dist/index.d.ts.map","packages/contracts/dist/index.js","packages/contracts/dist/index.js.map","packages/contracts/dist/money.d.ts","packages/contracts/dist/money.d.ts.map","packages/contracts/dist/money.js","packages/contracts/dist/money.js.map","packages/contracts/dist/ports.d.ts","packages/contracts/dist/ports.d.ts.map","packages/contracts/dist/ports.js.map","packages/contracts/dist/quote.d.ts","packages/contracts/dist/quote.d.ts.map","packages/contracts/dist/quote.js","packages/contracts/dist/quote.js.map","packages/contracts/dist/realtime.d.ts","packages/contracts/dist/realtime.d.ts.map","packages/contracts/dist/realtime.js","packages/contracts/dist/realtime.js.map","packages/contracts/dist/tenant.d.ts","packages/contracts/dist/tenant.d.ts.map","packages/contracts/dist/tenant.js","packages/contracts/dist/tenant.js.map","packages/contracts/dist/tool.d.ts","packages/contracts/dist/tool.d.ts.map","packages/contracts/dist/tool.js","packages/contracts/dist/tool.js.map","packages/contracts/src/approval.ts","packages/contracts/src/booking.ts","packages/contracts/src/contracts.test.ts","packages/contracts/src/crew.test.ts","packages/contracts/src/crew.ts","packages/contracts/src/haimate-contracts.test.ts","packages/contracts/src/index.ts","packages/contracts/src/money.ts","packages/contracts/src/ports.ts","packages/contracts/src/quote.ts","packages/contracts/src/realtime.ts","packages/contracts/src/tenant.ts","packages/contracts/src/tool.ts","pnpm-lock.yaml","reports/baseline.json","scripts/check-contract-consumers.mjs","scripts/check-dual-backend-parity.mjs","scripts/check-migrations.mjs","scripts/check-order-concurrency-guard.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-schema-sync.mjs","scripts/check-ui-acceptance.mjs","scripts/check-validation-source.mjs","scripts/governance-report.mjs","turbo.json"]},{"id":"44fed27603c1bd264192d1ce05016c1cd5b1c8ea","message":"fix(a11y): 修复侧栏隐形导航 + 颜色 token 全面达标 AA,并新增 Tailwind 静默失效门禁\n\n根因:Tailwind 颜色类透明度修饰符只有落在预设刻度(5 的倍数)或方括号任意值\n才生成 CSS。侧栏写 text-white/68 属死类,文字回退继承 --hm-ink 压在深蓝\n--hm-nav 上,实测对比度 1.02——导航区在浏览器里等于隐形,而 TypeScript\n与 ESLint 均不报,只有量计算样式才暴露。\n\n- 侧栏 6 处非法透明度(/38 /58 /68 /78)改为合法刻度,导航项对比度 1.02 → 5.18~17.64,6/6 达标\n- 全站实测 187 个文本节点原有 45 处不达 AA,根因集中在 token 自身取值偏浅;\n 按 token 层修复(text-tertiary/warning/success/danger/ai),每个新值在白底与\n 各自浅色底双双达标才采用,注释写进 globals.css。结果 45 → 0\n- 新增 check:tailwind-tokens 绊网并接入 pnpm check 与棘轮(地板 0);\n 负向测试已验证:注入 text-white/68 即 exit 1,恢复即 exit 0\n- 团队总览按用户拍板退回外壳设计语言(--hm-* / 12px 圆角 / 无衬线),\n 补回此前被重构弄丢的「昨天那一页」与雇佣价目,触控目标统一 44px\n- 花名册单源 contracts CREW_ROSTER + deriveCrewStatus(计费跳档将复用同一口径)\n- e2e 重写为一条覆盖全模块的用例(旧两条因 testid 重命名已失效)\n- CLAUDE.md 基线表 + 治理经验库 ⑬ 回灌\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/haimate/commit/44fed27603c1bd264192d1ce05016c1cd5b1c8ea","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-14T19:18:43-07:00","added":["apps/web/src/components/layout/HaiMateShell.tsx","apps/web/src/features/team/components/TeamLedgerBoard.tsx","apps/web/src/features/team/components/TeamWorkspace.tsx","packages/contracts/src/crew.test.ts","packages/contracts/src/crew.ts","reports/tailwind-tokens.latest.json","scripts/check-tailwind-tokens.mjs"],"removed":[],"modified":["CLAUDE.md","apps/web/e2e/haimate-p0.spec.ts","apps/web/src/app/globals.css","docs/governance-experience.md","package.json","packages/contracts/src/index.ts","reports/baseline.json","scripts/governance-report.mjs"]}],"total_commits":0,"head_commit":{"id":"6b3be1dafc25b3d82703595f7542769eae6b7744","message":"chore(reports): 刷新治理证据,绑定提交 b0d8e83\n\n三级门禁在 b0d8e83 上重跑后的报告:\n- pnpm check exit 0(16 项静态门禁)\n- check:runtime passed:380 tests / 0 failures\n- check:ui passed:14 用例 / 0 失败\n\n诚实标注:provenance 的 worktreeDirty 仍为 true。原因不是本提交遗漏了文件,\n而是**同一工作区存在并发会话**,其在制品(CLAUDE.md、两端 approval-tickets.service、\nweb/src/lib/types.ts、check-order-concurrency-guard.mjs、check-owner-matrix.mjs)\n在重跑期间处于未提交状态,已刻意不纳入本提交。\n\n因此本组报告只能宣称「本地工作区(含上述并发在制品)在 2026-08-17 通过三级门禁」,\n不得外推为 clean checkout 通过、远端已发布或 CI 已拦截。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/haimate/commit/6b3be1dafc25b3d82703595f7542769eae6b7744","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-17T16:16:17-07:00","added":["reports/outbox-lease.latest.json","reports/partner-truth.latest.json","reports/security-boundary.latest.json"],"removed":[],"modified":["reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/hallucination-guard.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/owner-matrix.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/tailwind-tokens.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json"]},"repository":{"id":74,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"haimate","full_name":"luoanwu/haimate","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":1121,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/haimate/languages","html_url":"https://gitea.g-hi.com/luoanwu/haimate","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/haimate","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/haimate.git","clone_url":"https://gitea.g-hi.com/luoanwu/haimate.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-15T06:22:30+08:00","updated_at":"2026-08-15T07:09:04+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1787008617
|
1787009037
|
0
|
1787008617
|
1787009038
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23496
|
fix(governance): 更正上一提交的证据绑定声明——静态那一级当时并非 clean-bo fix(governance): 更正上一提交的证据绑定声明——静态那一级当时并非 clean-bound...
|
74
|
5
|
governance.yml
|
10
|
5
|
0
|
refs/heads/main
|
c6049fee7c14933da0e4ff1e6a534eb44cfe1a03
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"b33f650552dbc4adad6df5ee670b6d9eba8eb125","after":"c6049fee7c14933da0e4ff1e6a534eb44cfe1a03","compare_url":"https://gitea.g-hi.com/luoanwu/haimate/compare/b33f650552dbc4adad6df5ee670b6d9eba8eb125...c6049fee7c14933da0e4ff1e6a534eb44cfe1a03","commits":[{"id":"c6049fee7c14933da0e4ff1e6a534eb44cfe1a03","message":"fix(governance): 更正上一提交的证据绑定声明——静态那一级当时并非 clean-bound\n\nb33f650 的提交信息与 CLAUDE.md 都写「三份报告均 worktreeDirty=false」,实测不成立:\n当时 17 份静态报告是 dirty=true,只有 runtime / UI 两份是 false。\n\n根因是执行顺序错了:先改 CLAUDE.md、再跑 pnpm check——那一刻工作区已因文档改动而脏,\n静态报告的 dirty 位被如实记成 true,而提交信息照抄了改动前的说法。\n\n本次在工作区 clean 状态下重跑静态门禁,现状态:\n- 静态 17 份:gitSha=b33f650 + worktreeDirty=false\n- runtime / UI 2 份:gitSha=5acf362 + worktreeDirty=false\n两个 SHA 是刻意如此:5acf362→b33f650 的差异只有 CLAUDE.md 一个文件\n(git diff --name-only 实测),不含任何 apps/ packages/ scripts/ 改动,\n因此 runtime / UI 证据仍绑定当前代码。\n\n已把这条教训写进 CLAUDE.md:报告的 dirty 位由**跑它那一刻的工作区**决定,\n不由你想宣称什么决定;正确顺序是代码与文档先提交干净,再跑门禁,再提交报告。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/haimate/commit/c6049fee7c14933da0e4ff1e6a534eb44cfe1a03","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-17T17:36:54-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/hallucination-guard.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/outbox-lease.latest.json","reports/owner-matrix.latest.json","reports/partner-truth.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/security-boundary.latest.json","reports/tailwind-tokens.latest.json","reports/validation-source.latest.json"]}],"total_commits":0,"head_commit":{"id":"c6049fee7c14933da0e4ff1e6a534eb44cfe1a03","message":"fix(governance): 更正上一提交的证据绑定声明——静态那一级当时并非 clean-bound\n\nb33f650 的提交信息与 CLAUDE.md 都写「三份报告均 worktreeDirty=false」,实测不成立:\n当时 17 份静态报告是 dirty=true,只有 runtime / UI 两份是 false。\n\n根因是执行顺序错了:先改 CLAUDE.md、再跑 pnpm check——那一刻工作区已因文档改动而脏,\n静态报告的 dirty 位被如实记成 true,而提交信息照抄了改动前的说法。\n\n本次在工作区 clean 状态下重跑静态门禁,现状态:\n- 静态 17 份:gitSha=b33f650 + worktreeDirty=false\n- runtime / UI 2 份:gitSha=5acf362 + worktreeDirty=false\n两个 SHA 是刻意如此:5acf362→b33f650 的差异只有 CLAUDE.md 一个文件\n(git diff --name-only 实测),不含任何 apps/ packages/ scripts/ 改动,\n因此 runtime / UI 证据仍绑定当前代码。\n\n已把这条教训写进 CLAUDE.md:报告的 dirty 位由**跑它那一刻的工作区**决定,\n不由你想宣称什么决定;正确顺序是代码与文档先提交干净,再跑门禁,再提交报告。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/haimate/commit/c6049fee7c14933da0e4ff1e6a534eb44cfe1a03","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-17T17:36:54-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/hallucination-guard.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/outbox-lease.latest.json","reports/owner-matrix.latest.json","reports/partner-truth.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/security-boundary.latest.json","reports/tailwind-tokens.latest.json","reports/validation-source.latest.json"]},"repository":{"id":74,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"haimate","full_name":"luoanwu/haimate","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":5802,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/haimate/languages","html_url":"https://gitea.g-hi.com/luoanwu/haimate","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/haimate","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/haimate.git","clone_url":"https://gitea.g-hi.com/luoanwu/haimate.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-15T06:22:30+08:00","updated_at":"2026-08-18T08:35:26+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1787013756
|
1787014203
|
0
|
1787013419
|
1787014204
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23497
|
chore(reports): refresh clean publish evidence for chore(reports): refresh clean publish evidence for realtime work...
|
54
|
5
|
governance.yml
|
9
|
5
|
0
|
refs/heads/main
|
4d95adb2ebe583e4dddbd233cbb4ffb574b17862
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"03ef2eb6d9d8f94868d95821c22f3c23f7dc7f38","after":"4d95adb2ebe583e4dddbd233cbb4ffb574b17862","compare_url":"https://gitea.g-hi.com/luoanwu/base-framework/compare/03ef2eb6d9d8f94868d95821c22f3c23f7dc7f38...4d95adb2ebe583e4dddbd233cbb4ffb574b17862","commits":[{"id":"4d95adb2ebe583e4dddbd233cbb4ffb574b17862","message":"chore(reports): refresh clean publish evidence for realtime work\n\n三级门禁在 clean commit c223f35 上重跑,所有 reports/*.latest.json 的\nprovenance 记为 gitSha=c223f35 / worktreeDirty=false——证据自此绑定具体\n提交,而非「某次本地 dirty 运行」。\n\nCLAUDE.md 证据新鲜度同步改为绑定该提交,并显式声明这只证明「该提交在\n本机通过三级门禁」,推不出远端 CI 已拦截或已部署(G14 仍 OPEN)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/base-framework/commit/4d95adb2ebe583e4dddbd233cbb4ffb574b17862","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-19T04:35:15-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json"]},{"id":"c223f35e380114edfe1331619928f405cf77eee2","message":"feat(realtime): 可靠投递 + 定向推送 + 双向控制帧 + 连接可观测\n\n把实时通讯从单向广播推进到「可靠 + 定向 + 双向 + 可观测」四块,\n两后端对等实现,判定逻辑统一收敛到 @repo/contracts 单源。\n\nA 可靠投递闭环(G16 主体闭环)\n- 信封加 id(= outbox 行 id,稳定幂等键)与 seq(自增重放游标);\n 前端去重从内容指纹改为 envelope.id——指纹依赖「重投时 ts 不变」\n 这个不成立的假设,补发路径上必然误判。\n- dispatcher 改 SELECT ... FOR UPDATE SKIP LOCKED 领取,publish 在同一\n 事务内完成;先提交再 publish 会从 at-least-once 退化成 at-most-once。\n- 断线重放:SSE 走标准 Last-Event-ID,WS 走 ?since=;补不齐时回\n replay.gap 让客户端全量重取,绝不静默截断。\n- 新增 outbox.seq 迁移(显式建序列,DEFAULT 在 SQL 里可见)。\n\nB 定向推送(订阅过滤)\n- matchesSubscription / parseSubscription 单源在 contracts;\n types 前缀 + ids 维度,未声明 = 收本租户全部。\n- 定位是租户内的带宽减法,不是权限边界;租户隔离仍是唯一安全边界。\n- ping / replay.gap / connection.* 为连接级消息,无视订阅条件必送。\n\nC 双向通讯(刻意限定为连接控制平面)\n- WS 接受 subscribe / ping 控制帧,应答 connection.ack / connection.error。\n- 红线:控制帧不承载任何业务写入。HTTP 写链上挂着 Zod、状态机守卫、\n 租户绑定、outbox 同事务(P4 四同边界),WS 若能写业务,要么重实现\n 一遍那套保证(P1 双真源),要么绕过(写链治理失守)。\n- 三道闸按成本排序:限流 → 大小/解析 → 应用。\n\nD 连接可观测与背压\n- GET /api/realtime/stats 按请求方租户收口:租户只从鉴权上下文取,\n 不接受 ?tenantId= 覆盖,也不返回全局/分租户明细。\n- 单租户连接上限背压:超限 WS 回 1013、SSE 回 429;被拒连接不登记计数。\n\n验收(本地工作区,PG:55432 + Redis:6382)\n- pnpm check 全绿;pnpm check:runtime 155 tests / 0 failures;\n pnpm check:ui 4 用例 / 0 失败。\n- 棘轮收紧:ownTests 11→24、ownTestCases 60→146、testsPassed 56→155。\n- 负向测试已验证有牙:退回裸 findMany → 20 行被投递 40 次;摘掉订阅\n 过滤 → types/ids 断言红;stats 接受调用方指定租户 → 越权探测红。\n\n治理回灌:CLAUDE.md 真源地图新增 5 条实时口径、基线表新增 5 行指标、\nG16 改为「部分闭环」并列明仍缺的死信告警与多实例端到端验收;\n战役叙事外迁 docs/governance-experience.md。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/base-framework/commit/c223f35e380114edfe1331619928f405cf77eee2","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-19T04:33:54-07:00","added":["apps/api-fastify/prisma/migrations/20260818090000_outbox_replay_cursor/migration.sql","apps/api-fastify/src/modules/replay.ts","apps/api-fastify/src/routes/realtime-stats.ts","apps/api-fastify/test/outbox.concurrency.test.ts","apps/api-fastify/test/realtime.command.test.ts","apps/api-fastify/test/realtime.replay.test.ts","apps/api-fastify/test/realtime.stats.test.ts","apps/api-fastify/test/realtime.subscription.test.ts","apps/api-nestjs/prisma/migrations/20260818090000_outbox_replay_cursor/migration.sql","apps/api-nestjs/src/events/connection-registry.service.ts","apps/api-nestjs/src/events/realtime-stats.controller.ts","apps/api-nestjs/src/events/replay.service.ts","apps/api-nestjs/test/outbox.concurrency.test.ts","apps/api-nestjs/test/realtime.command.test.ts","apps/api-nestjs/test/realtime.replay.test.ts","apps/api-nestjs/test/realtime.stats.test.ts","apps/api-nestjs/test/realtime.subscription.test.ts","docs/migration-playbook.md","governance.registry.json","governance.registry.schema.json","packages/contracts/src/job.ts","packages/contracts/src/realtime-command.test.ts","packages/contracts/src/realtime-command.ts","packages/contracts/src/realtime-stats.ts","packages/contracts/src/replay.test.ts","packages/contracts/src/replay.ts","packages/contracts/src/subscription.test.ts","packages/contracts/src/subscription.ts","reports/fork-readiness.latest.json","reports/statemachine-write-guard.latest.json","scripts/check-fork-readiness.mjs","scripts/check-statemachine-write-guard.mjs"],"removed":["reports/order-concurrency-guard.latest.json","scripts/check-order-concurrency-guard.mjs"],"modified":["CLAUDE.md","README.md","apps/api-fastify/package.json","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/app.ts","apps/api-fastify/src/plugins/events.ts","apps/api-fastify/src/plugins/outbox.ts","apps/api-fastify/src/routes/sse.ts","apps/api-fastify/src/routes/ws.ts","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/src/events/events.gateway.ts","apps/api-nestjs/src/events/events.module.ts","apps/api-nestjs/src/events/outbox-dispatcher.service.ts","apps/api-nestjs/src/sse/sse.controller.ts","apps/web/src/components/EventFeed.tsx","apps/web/src/hooks/useRealtime.ts","apps/web/src/store/realtime.ts","docs/README.md","docs/domain-glossary.md","docs/governance-experience.md","package.json","packages/contracts/src/index.ts","packages/contracts/src/order.ts","packages/contracts/src/realtime.ts","pnpm-lock.yaml","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-contract-consumers.mjs","scripts/check-docs-truth.mjs","scripts/check-dual-backend-parity.mjs","scripts/check-migrations.mjs","scripts/check-naming.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-schema-sync.mjs","scripts/check-ui-acceptance.mjs","scripts/check-validation-source.mjs","scripts/governance-report.mjs"]}],"total_commits":0,"head_commit":{"id":"4d95adb2ebe583e4dddbd233cbb4ffb574b17862","message":"chore(reports): refresh clean publish evidence for realtime work\n\n三级门禁在 clean commit c223f35 上重跑,所有 reports/*.latest.json 的\nprovenance 记为 gitSha=c223f35 / worktreeDirty=false——证据自此绑定具体\n提交,而非「某次本地 dirty 运行」。\n\nCLAUDE.md 证据新鲜度同步改为绑定该提交,并显式声明这只证明「该提交在\n本机通过三级门禁」,推不出远端 CI 已拦截或已部署(G14 仍 OPEN)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/base-framework/commit/4d95adb2ebe583e4dddbd233cbb4ffb574b17862","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-19T04:35:15-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json"]},"repository":{"id":54,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"base-framework","full_name":"luoanwu/base-framework","description":"基础框架 monorepo","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":1028,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/base-framework/languages","html_url":"https://gitea.g-hi.com/luoanwu/base-framework","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/base-framework","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/base-framework.git","clone_url":"https://gitea.g-hi.com/luoanwu/base-framework.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-07-03T12:24:18+08:00","updated_at":"2026-07-30T22:43:20+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1787139337
|
1787139361
|
0
|
1787139335
|
1787139361
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23498
|
docs(migration): 回灌 P9——文档内部数字自相矛盾
|
54
|
5
|
governance.yml
|
10
|
5
|
0
|
refs/heads/main
|
ccbc413eaf556c59a5c14707ce87d264c050180f
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"4d95adb2ebe583e4dddbd233cbb4ffb574b17862","after":"ccbc413eaf556c59a5c14707ce87d264c050180f","compare_url":"https://gitea.g-hi.com/luoanwu/base-framework/compare/4d95adb2ebe583e4dddbd233cbb4ffb574b17862...ccbc413eaf556c59a5c14707ce87d264c050180f","commits":[{"id":"ccbc413eaf556c59a5c14707ce87d264c050180f","message":"docs(migration): 回灌 P9——文档内部数字自相矛盾\n\n下游 Digital Employee OS 移植时实测:只改了 CLAUDE.md 的「证据新鲜度」块\n(49 tests),漏了下方 GOVERNANCE-BASELINE 表(仍是源仓的 11/60/56),\n同一份文件里两个数字互相矛盾,而三级门禁全绿。\n\ncheck:docs-truth 是 targeted 断言集,不覆盖数字类事实,抓不到这类漂移。\n数字矛盾比数字过时更险:过时只是陈旧,矛盾意味着至少有一个是编的,\n而读者无从判断是哪个。\n\n按 §5 回灌纪律(「换个移植目标还会再踩吗」→ 会 → 回灌上游),三处同步补齐:\n- 踩坑档案新增 P9\n- 步骤 8 显式点名 GOVERNANCE-BASELINE 表每个数字与发布状态快照,\n 并加警告说明 check:docs-truth 的覆盖边界\n- 验收标准把「证据日期」扩为「证据日期 + 基线表每个数字」\n\n暂未机器化:数字类断言仍靠人工核对,属手册明记的已知缺口。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/base-framework/commit/ccbc413eaf556c59a5c14707ce87d264c050180f","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-19T05:10:13-07:00","added":[],"removed":[],"modified":["docs/migration-playbook.md","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]}],"total_commits":0,"head_commit":{"id":"ccbc413eaf556c59a5c14707ce87d264c050180f","message":"docs(migration): 回灌 P9——文档内部数字自相矛盾\n\n下游 Digital Employee OS 移植时实测:只改了 CLAUDE.md 的「证据新鲜度」块\n(49 tests),漏了下方 GOVERNANCE-BASELINE 表(仍是源仓的 11/60/56),\n同一份文件里两个数字互相矛盾,而三级门禁全绿。\n\ncheck:docs-truth 是 targeted 断言集,不覆盖数字类事实,抓不到这类漂移。\n数字矛盾比数字过时更险:过时只是陈旧,矛盾意味着至少有一个是编的,\n而读者无从判断是哪个。\n\n按 §5 回灌纪律(「换个移植目标还会再踩吗」→ 会 → 回灌上游),三处同步补齐:\n- 踩坑档案新增 P9\n- 步骤 8 显式点名 GOVERNANCE-BASELINE 表每个数字与发布状态快照,\n 并加警告说明 check:docs-truth 的覆盖边界\n- 验收标准把「证据日期」扩为「证据日期 + 基线表每个数字」\n\n暂未机器化:数字类断言仍靠人工核对,属手册明记的已知缺口。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/base-framework/commit/ccbc413eaf556c59a5c14707ce87d264c050180f","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-19T05:10:13-07:00","added":[],"removed":[],"modified":["docs/migration-playbook.md","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},"repository":{"id":54,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"base-framework","full_name":"luoanwu/base-framework","description":"基础框架 monorepo","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":1362,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/base-framework/languages","html_url":"https://gitea.g-hi.com/luoanwu/base-framework","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/base-framework","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/base-framework.git","clone_url":"https://gitea.g-hi.com/luoanwu/base-framework.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-07-03T12:24:18+08:00","updated_at":"2026-08-19T19:35:35+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1787141425
|
1787141444
|
0
|
1787141425
|
1787141445
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23499
|
chore(reports): 刷新静态门禁证据至 e15fa81
|
54
|
5
|
governance.yml
|
11
|
5
|
0
|
refs/heads/main
|
9513a941af257b779d7d2c095dff71172edcefaf
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"ccbc413eaf556c59a5c14707ce87d264c050180f","after":"9513a941af257b779d7d2c095dff71172edcefaf","compare_url":"https://gitea.g-hi.com/luoanwu/base-framework/compare/ccbc413eaf556c59a5c14707ce87d264c050180f...9513a941af257b779d7d2c095dff71172edcefaf","commits":[{"id":"9513a941af257b779d7d2c095dff71172edcefaf","message":"chore(reports): 刷新静态门禁证据至 e15fa81\n\nCLAUDE.md 改动后静态子报告的 provenance 仍指向 ccbc413,与当前 checkout\n不一致(report-provenance 门禁会红)。在 clean commit 上重跑 pnpm check,\n14 份静态报告统一记为 gitSha=e15fa81 / worktreeDirty=false。\n\nruntime/ui 报告未重跑:本轮为纯文档改动,未触碰任何被它们覆盖的代码,\n其证据仍诚实绑定 c223f35 的实跑,不做无意义刷新。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/base-framework/commit/9513a941af257b779d7d2c095dff71172edcefaf","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-19T08:53:15-07:00","added":[],"removed":[],"modified":["reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},{"id":"e15fa814108637f2484a5be50900fd35a0f05d9d","message":"docs(claude): 补齐常用命令与运行时拓扑,收敛验证命令双源\n\n对照 /init 的两条标准补齐本文件的实际缺口,治理正文一字未动(纯增量)。\n\n1) 新增「常用命令」小节\n原先只有文件最末尾一个块(install / generate / 三级门禁),缺三类信息:\n- 开发入口与端口(web:3000 / NestJS:3001 / Fastify:3002)\n- 单个测试怎么跑(单文件 / -t 按用例名 / watch)\n- 13 个 check:* 子门禁只写了聚合入口,未说明可单独执行\n同时记入两条本机实证的判责提示:\n- pnpm 锁定 9.15.9,被 pnpm 10 装过会写 store v11,须全量重装 + prisma:generate\n- G15 基座守卫只校验库名前缀、**不校验端口**,故「端口连得上」推不出\n 「基座正确」(2026-08-19 在下游 Digital Employee OS 实际踩到:误用上游\n 容器 PG:55432/Redis:6382 通过守卫,共用 Redis 导致两次时序偶发红)\n\n2) 新增「运行时拓扑」小节\n「真源地图」回答的是「哪份文件说了算」,不回答「请求怎么流」。补一条从\nHTTP 写请求到前端缓存失效的完整事件通路,以及两条读单个文件发现不了的约定:\nNestJS 全局前缀 /api 但 GET /sse/events 被 exclude;WS 用原生 ws 而非\nsocket.io,故协议与 Fastify 侧兼容。\n\n3) 收敛验证命令双源\n文末旧「验证命令」块与新章节重复——同一事实两处维护正是 P1 禁止的漂移温床。\n改为指回顶部,只保留各级门禁的覆盖范围差异(含 check:ui 不覆盖 Fastify\n链路这条 G17 事实)。\n\nAGENTS.md 符号链接完好,check:governance-docs / check:docs-truth 均绿。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/base-framework/commit/e15fa814108637f2484a5be50900fd35a0f05d9d","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-19T08:52:41-07:00","added":[],"removed":[],"modified":["CLAUDE.md"]}],"total_commits":0,"head_commit":{"id":"9513a941af257b779d7d2c095dff71172edcefaf","message":"chore(reports): 刷新静态门禁证据至 e15fa81\n\nCLAUDE.md 改动后静态子报告的 provenance 仍指向 ccbc413,与当前 checkout\n不一致(report-provenance 门禁会红)。在 clean commit 上重跑 pnpm check,\n14 份静态报告统一记为 gitSha=e15fa81 / worktreeDirty=false。\n\nruntime/ui 报告未重跑:本轮为纯文档改动,未触碰任何被它们覆盖的代码,\n其证据仍诚实绑定 c223f35 的实跑,不做无意义刷新。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/base-framework/commit/9513a941af257b779d7d2c095dff71172edcefaf","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-19T08:53:15-07:00","added":[],"removed":[],"modified":["reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},"repository":{"id":54,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"base-framework","full_name":"luoanwu/base-framework","description":"基础框架 monorepo","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":1375,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/base-framework/languages","html_url":"https://gitea.g-hi.com/luoanwu/base-framework","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/base-framework","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/base-framework.git","clone_url":"https://gitea.g-hi.com/luoanwu/base-framework.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-07-03T12:24:18+08:00","updated_at":"2026-08-19T20:10:25+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1787154808
|
1787154828
|
0
|
1787154807
|
1787154829
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23500
|
feat(kernel): integrate governed LLM execution and feat(kernel): integrate governed LLM execution and operations UI...
|
76
|
5
|
governance.yml
|
1
|
5
|
0
|
refs/heads/main
|
d66fbcbb48ca0e0fc2b252b67accac472b8d800f
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"0000000000000000000000000000000000000000","after":"d66fbcbb48ca0e0fc2b252b67accac472b8d800f","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/84afc39d2571c2e7d74673572e81fb737d36e271...d66fbcbb48ca0e0fc2b252b67accac472b8d800f","commits":[{"id":"d66fbcbb48ca0e0fc2b252b67accac472b8d800f","message":"feat(kernel): integrate governed LLM execution and operations UI\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/d66fbcbb48ca0e0fc2b252b67accac472b8d800f","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-19T23:36:38-07:00","added":["apps/api-fastify/src/modules/actor-events.service.ts","apps/api-fastify/src/modules/work/task-events.service.ts","apps/api-fastify/test/actor-events.integration.test.ts","apps/api-fastify/test/dead-letters.integration.test.ts","apps/api-fastify/test/llm.acceptance.test.ts","apps/api-fastify/test/task-events.integration.test.ts","apps/api-nestjs/src/actors/actor-events.service.ts","apps/api-nestjs/src/work/task-events.service.ts","apps/api-nestjs/test/actor-events.integration.test.ts","apps/api-nestjs/test/dead-letters.integration.test.ts","apps/api-nestjs/test/llm.acceptance.test.ts","apps/api-nestjs/test/task-events.integration.test.ts","apps/web/src/components/workbench/ActorAvatar.tsx","apps/web/src/components/workbench/ToastHost.tsx","apps/web/src/lib/ui-copy.ts","docs/domain/llm-execution-blueprint.md","packages/contracts/src/llm.test.ts","packages/contracts/src/llm.ts"],"removed":[],"modified":[".claude/launch.json","CLAUDE.md","apps/api-fastify/.env.example","apps/api-fastify/src/modules/outcomes.service.ts","apps/api-fastify/src/modules/triggers.service.ts","apps/api-fastify/src/modules/work/runtimes.service.ts","apps/api-fastify/src/modules/work/tasks.service.ts","apps/api-fastify/src/plugins/queue.ts","apps/api-fastify/src/routes/actors.ts","apps/api-fastify/src/routes/outcomes.ts","apps/api-fastify/src/routes/realtime-stats.ts","apps/api-fastify/src/routes/triggers.ts","apps/api-fastify/src/routes/work.ts","apps/api-fastify/test/outbox.concurrency.test.ts","apps/api-fastify/test/outcomes.integration.test.ts","apps/api-fastify/test/triggers.integration.test.ts","apps/api-fastify/test/work.integration.test.ts","apps/api-nestjs/.env.example","apps/api-nestjs/src/actors/actors.controller.ts","apps/api-nestjs/src/actors/actors.module.ts","apps/api-nestjs/src/events/realtime-stats.controller.ts","apps/api-nestjs/src/outcomes/outcomes.controller.ts","apps/api-nestjs/src/outcomes/outcomes.service.ts","apps/api-nestjs/src/queue/jobs.controller.ts","apps/api-nestjs/src/queue/jobs.processor.ts","apps/api-nestjs/src/queue/queue.module.ts","apps/api-nestjs/src/redis/redis.module.ts","apps/api-nestjs/src/triggers/triggers.controller.ts","apps/api-nestjs/src/triggers/triggers.service.ts","apps/api-nestjs/src/work/runtimes.service.ts","apps/api-nestjs/src/work/tasks.controller.ts","apps/api-nestjs/src/work/tasks.service.ts","apps/api-nestjs/src/work/work.module.ts","apps/api-nestjs/test/outbox.concurrency.test.ts","apps/api-nestjs/test/outcomes.integration.test.ts","apps/api-nestjs/test/triggers.integration.test.ts","apps/api-nestjs/test/work.integration.test.ts","apps/web/e2e/acceptance.spec.ts","apps/web/eslint.config.mjs","apps/web/next.config.ts","apps/web/src/app/page.tsx","apps/web/src/components/EventFeed.tsx","apps/web/src/components/JobsPanel.tsx","apps/web/src/components/ProjectsPanel.tsx","apps/web/src/components/UsersPanel.tsx","apps/web/src/components/views/AutomationView.tsx","apps/web/src/components/views/SystemView.tsx","apps/web/src/components/views/TeamView.tsx","apps/web/src/components/views/WorkbenchView.tsx","apps/web/src/components/workbench/ConnectionCapsule.tsx","apps/web/src/components/workbench/TaskCreateForm.tsx","apps/web/src/components/workbench/TaskDetail.tsx","apps/web/src/components/workbench/TaskList.tsx","apps/web/src/components/workbench/Timeline.tsx","apps/web/src/hooks/useRealtime.ts","apps/web/src/lib/api.ts","apps/web/src/lib/attention.ts","apps/web/src/lib/journey.ts","apps/web/src/lib/types.ts","apps/web/tsconfig.json","docs/governance-experience.md","packages/contracts/src/actor.ts","packages/contracts/src/index.ts","packages/contracts/src/job.ts","packages/contracts/src/outcome.ts","packages/contracts/src/realtime-stats.ts","packages/contracts/src/runtime.ts","packages/contracts/src/task.ts","packages/contracts/src/trigger.ts","packages/contracts/src/work.test.ts","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-dual-backend-parity.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-ui-acceptance.mjs"]},{"id":"6f6027d4e97cd6dfc976f129ce62cf9e51786c1b","message":"feat(governance): C19 报告内容指纹 worktreeHash + 扫描器排除单源 scan-ignore\n\n- provenance schema v2:dirty 工作区内容指纹(跟踪 diff + 未跟踪内容哈希,clean 恒 null),\n 取材边界与 worktreeDirty 完全同源;静态子报告六字段同 run 对账,伪造 env / dirty-指纹\n 不相干 / 聚合期间内容变化 均即红;验收报告陈旧性 staleAcceptanceReports 显式记录不阻断\n (提交动作必然产生新 SHA,硬闸在 CI 干净 checkout 下恒红,判责理由见 CLAUDE.md 事实作用域)\n- 六门禁扫描器 IGNORE 表收口单源 scripts/lib/scan-ignore.mjs:.next* 前缀统一按产物豁免\n (NEXT_DIST_DIR=.next-fastify 曾被判 17 条 naming + 3 条 F7 假红);.gitignore 补 .next-*\n- 负向测试已实跑:伪造指纹 env exit1;v1 旧 schema 验收报告 schemaVersion+相干性双红\n (换 schema 必须重新出证);植入禁用词红→复原绿;植入空目录红→复原绿\n- 后续:runtime/ui 验收需在稳定树上重跑一次升级到 v2 provenance;在那之前\n check:governance 对旧 v1 验收报告红盘属预期换证语义\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/6f6027d4e97cd6dfc976f129ce62cf9e51786c1b","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-19T22:20:41-07:00","added":["scripts/lib/scan-ignore.mjs"],"removed":[],"modified":[".gitignore","CLAUDE.md","docs/governance-experience.md","scripts/check-fork-readiness.mjs","scripts/check-naming.mjs","scripts/check-statemachine-write-guard.mjs","scripts/check-validation-source.mjs","scripts/governance-report.mjs","scripts/lib/report-provenance.mjs"]},{"id":"e3696a9352f893fbdbb954f1ec03fb14185d6b53","message":"fix(e2e): Work Graph 用例断言收窄 first()(goal 默认同名双命中)+ 验收报告刷新\n\n并行会话重写 spec 时回退了 strict-mode 修复;同时刷新 clean 基线后的\nruntime(292)/ui(11) 报告。views 半成品留给并行会话,本提交不含。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/e3696a9352f893fbdbb954f1ec03fb14185d6b53","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-19T08:58:53-07:00","added":[],"removed":[],"modified":["apps/web/e2e/acceptance.spec.ts","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json"]},{"id":"d7b2d631cf58dd9dcfcf8f2466d43680ea3ea4f3","message":"feat(workgraph): Project 实体化 + Work Graph 依赖门闸 + 读时进度(§12/§14/§103)\n\n- contracts: project.ts(createProjectSchema/ProjectDto/ProjectProgress,无百分比字段)、\n createTaskSchema.dependsOnTaskIds(max16 默认[])、project.created 事件类型\n- DB: TaskDependency(unique[tenantId,taskId,dependsOnTaskId])+ Project 表,\n 双后端同 SQL 迁移 20260825010000_workgraph_slice\n- 双后端: projects 服务(读时 groupBy 进度:total/succeeded/running/blockedByDeps)+\n Task 创建事务内依赖声明(构造性无环,坏依赖 404)+ ready 门闸\n (409 DEPENDENCIES_NOT_MET + unmet 清单,迁移事务内判定)\n- web: ProjectsPanel + 建任务表单 project/依赖选择 + useRealtime project 分支;\n 含并行会话 workbench/views 面板重构收敛(TaskCreateForm 已吸收依赖字段)\n- 验收: check 绿;check:runtime 292 tests(地板 277→292);check:ui 11 用例(地板 10→11)\n ——2026-08-19 本地实跑,PG:55447 + Redis:6397/2、/3\n- 治理: registry 登记 TaskDependency/projects 入口;CLAUDE.md 真源地图/基线表/新鲜度同步;\n 经验库 workgraph 记录(构造性无环、行为断言防 UI 重构碎测)\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/d7b2d631cf58dd9dcfcf8f2466d43680ea3ea4f3","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-19T08:55:25-07:00","added":["apps/api-fastify/prisma/migrations/20260825010000_workgraph_slice/migration.sql","apps/api-fastify/src/modules/work/projects.service.ts","apps/api-nestjs/prisma/migrations/20260825010000_workgraph_slice/migration.sql","apps/api-nestjs/src/work/projects.controller.ts","apps/api-nestjs/src/work/projects.service.ts","apps/web/src/components/ProjectsPanel.tsx","apps/web/src/components/views/AutomationView.tsx","apps/web/src/components/views/SystemView.tsx","apps/web/src/components/views/TeamView.tsx","apps/web/src/components/views/WorkbenchView.tsx","apps/web/src/components/workbench/ActionErrorBanner.tsx","apps/web/src/components/workbench/AttentionInbox.tsx","apps/web/src/components/workbench/ConnectionCapsule.tsx","apps/web/src/components/workbench/EmptyState.tsx","apps/web/src/components/workbench/JourneyRail.tsx","apps/web/src/components/workbench/StateBadge.tsx","apps/web/src/components/workbench/TaskCreateForm.tsx","apps/web/src/components/workbench/TaskDetail.tsx","apps/web/src/components/workbench/TaskList.tsx","apps/web/src/components/workbench/Timeline.tsx","apps/web/src/components/workbench/useTaskActions.ts","apps/web/src/lib/attention.ts","apps/web/src/lib/journey.ts","apps/web/src/lib/state-theme.ts","packages/contracts/src/project.ts"],"removed":["apps/web/src/components/ActorsPanel.tsx","apps/web/src/components/RealtimeBar.tsx","apps/web/src/components/RuntimeInspectorPanel.tsx","apps/web/src/components/TasksPanel.tsx","apps/web/src/components/TriggersPanel.tsx"],"modified":["CLAUDE.md","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/modules/work/tasks.service.ts","apps/api-fastify/src/routes/work.ts","apps/api-fastify/test/work.integration.test.ts","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/src/work/tasks.service.ts","apps/api-nestjs/src/work/work.module.ts","apps/api-nestjs/test/work.integration.test.ts","apps/web/e2e/acceptance.spec.ts","apps/web/src/app/page.tsx","apps/web/src/components/EventFeed.tsx","apps/web/src/hooks/useRealtime.ts","apps/web/src/lib/api.ts","apps/web/src/lib/types.ts","docs/domain-glossary.md","docs/domain/owner-matrix.md","docs/domain/work-blueprint.md","docs/governance-experience.md","governance.registry.json","packages/contracts/src/index.ts","packages/contracts/src/realtime.ts","packages/contracts/src/task.ts","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json"]},{"id":"2763d474f9fc47991ce52ca1f718685d04a1f2d9","message":"feat(auth): G8 持久化角色表——resolveEffectiveRole「DB 覆盖 claim」+ admin 端点 + bootstrap\n\n用户拍板三决策落地:① 生效角色 = DB 覆盖已验签 claim(可降可升、本地可吊销\nIdP 签发的角色;DB 非法值按无记录 fail-safe,claim 兜底);② 两后端对等\nadmin-only /api/roles(GET/PUT upsert/DELETE 204,admin 判定同样走生效角色)+\nAUTH_BOOTSTRAP_ADMIN=\"tenantId:subject\" 虚拟授予解鸡生蛋;③ cancel 特权闸与\napprove 同步改查生效角色(非特权事件不查 DB)。\n\n- contracts:roleAssignmentSchema / resolveEffectiveRole / isBootstrapAdmin 单源;\n subject 取 JWT sub claim(TenantAuthResult/双后端 TenantAuthContext 透传——\n 实测抓获「contracts 产出 subject 而消费端丢弃」断链,403 全链复现后修复)\n- 表:role_assignments([tenantId,subject] 唯一)+ 两侧逐字节一致迁移;\n owner-matrix 先登记后建表;registry 登记 auth 域(validation/tenant 门禁自动覆盖)\n- 验收:contracts 27/27;两后端全 auth 套件各 20/20(真实 DB,核心负向:\n claim=admin 而 DB 记 member → 403);migrations/schema/validation/write-guard/\n dual-backend/naming/fork-readiness 七门禁绿(全量 check 待伙伴会话 Projects\n 切片收敛后随快照重跑)\n- schema.prisma / registry / owner-matrix / work 路由含伙伴会话 Projects 半成品,\n 本提交不含,随其扫荡入库\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/2763d474f9fc47991ce52ca1f718685d04a1f2d9","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-19T08:44:55-07:00","added":["apps/api-fastify/prisma/migrations/20260825000000_role_assignment/migration.sql","apps/api-fastify/src/modules/roles.service.ts","apps/api-fastify/src/routes/roles.ts","apps/api-fastify/test/auth.roles.acceptance.test.ts","apps/api-nestjs/prisma/migrations/20260825000000_role_assignment/migration.sql","apps/api-nestjs/src/roles/roles.controller.ts","apps/api-nestjs/src/roles/roles.module.ts","apps/api-nestjs/src/roles/roles.service.ts","apps/api-nestjs/test/auth.roles.acceptance.test.ts"],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/src/app.ts","apps/api-fastify/src/modules/tenant.ts","apps/api-nestjs/src/app.module.ts","apps/api-nestjs/src/common/tenant.decorator.ts","apps/api-nestjs/src/work/tasks.controller.ts","packages/contracts/src/contracts.test.ts","packages/contracts/src/tenant.ts"]}],"total_commits":0,"head_commit":{"id":"d66fbcbb48ca0e0fc2b252b67accac472b8d800f","message":"feat(kernel): integrate governed LLM execution and operations UI\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/d66fbcbb48ca0e0fc2b252b67accac472b8d800f","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-19T23:36:38-07:00","added":["apps/api-fastify/src/modules/actor-events.service.ts","apps/api-fastify/src/modules/work/task-events.service.ts","apps/api-fastify/test/actor-events.integration.test.ts","apps/api-fastify/test/dead-letters.integration.test.ts","apps/api-fastify/test/llm.acceptance.test.ts","apps/api-fastify/test/task-events.integration.test.ts","apps/api-nestjs/src/actors/actor-events.service.ts","apps/api-nestjs/src/work/task-events.service.ts","apps/api-nestjs/test/actor-events.integration.test.ts","apps/api-nestjs/test/dead-letters.integration.test.ts","apps/api-nestjs/test/llm.acceptance.test.ts","apps/api-nestjs/test/task-events.integration.test.ts","apps/web/src/components/workbench/ActorAvatar.tsx","apps/web/src/components/workbench/ToastHost.tsx","apps/web/src/lib/ui-copy.ts","docs/domain/llm-execution-blueprint.md","packages/contracts/src/llm.test.ts","packages/contracts/src/llm.ts"],"removed":[],"modified":[".claude/launch.json","CLAUDE.md","apps/api-fastify/.env.example","apps/api-fastify/src/modules/outcomes.service.ts","apps/api-fastify/src/modules/triggers.service.ts","apps/api-fastify/src/modules/work/runtimes.service.ts","apps/api-fastify/src/modules/work/tasks.service.ts","apps/api-fastify/src/plugins/queue.ts","apps/api-fastify/src/routes/actors.ts","apps/api-fastify/src/routes/outcomes.ts","apps/api-fastify/src/routes/realtime-stats.ts","apps/api-fastify/src/routes/triggers.ts","apps/api-fastify/src/routes/work.ts","apps/api-fastify/test/outbox.concurrency.test.ts","apps/api-fastify/test/outcomes.integration.test.ts","apps/api-fastify/test/triggers.integration.test.ts","apps/api-fastify/test/work.integration.test.ts","apps/api-nestjs/.env.example","apps/api-nestjs/src/actors/actors.controller.ts","apps/api-nestjs/src/actors/actors.module.ts","apps/api-nestjs/src/events/realtime-stats.controller.ts","apps/api-nestjs/src/outcomes/outcomes.controller.ts","apps/api-nestjs/src/outcomes/outcomes.service.ts","apps/api-nestjs/src/queue/jobs.controller.ts","apps/api-nestjs/src/queue/jobs.processor.ts","apps/api-nestjs/src/queue/queue.module.ts","apps/api-nestjs/src/redis/redis.module.ts","apps/api-nestjs/src/triggers/triggers.controller.ts","apps/api-nestjs/src/triggers/triggers.service.ts","apps/api-nestjs/src/work/runtimes.service.ts","apps/api-nestjs/src/work/tasks.controller.ts","apps/api-nestjs/src/work/tasks.service.ts","apps/api-nestjs/src/work/work.module.ts","apps/api-nestjs/test/outbox.concurrency.test.ts","apps/api-nestjs/test/outcomes.integration.test.ts","apps/api-nestjs/test/triggers.integration.test.ts","apps/api-nestjs/test/work.integration.test.ts","apps/web/e2e/acceptance.spec.ts","apps/web/eslint.config.mjs","apps/web/next.config.ts","apps/web/src/app/page.tsx","apps/web/src/components/EventFeed.tsx","apps/web/src/components/JobsPanel.tsx","apps/web/src/components/ProjectsPanel.tsx","apps/web/src/components/UsersPanel.tsx","apps/web/src/components/views/AutomationView.tsx","apps/web/src/components/views/SystemView.tsx","apps/web/src/components/views/TeamView.tsx","apps/web/src/components/views/WorkbenchView.tsx","apps/web/src/components/workbench/ConnectionCapsule.tsx","apps/web/src/components/workbench/TaskCreateForm.tsx","apps/web/src/components/workbench/TaskDetail.tsx","apps/web/src/components/workbench/TaskList.tsx","apps/web/src/components/workbench/Timeline.tsx","apps/web/src/hooks/useRealtime.ts","apps/web/src/lib/api.ts","apps/web/src/lib/attention.ts","apps/web/src/lib/journey.ts","apps/web/src/lib/types.ts","apps/web/tsconfig.json","docs/governance-experience.md","packages/contracts/src/actor.ts","packages/contracts/src/index.ts","packages/contracts/src/job.ts","packages/contracts/src/outcome.ts","packages/contracts/src/realtime-stats.ts","packages/contracts/src/runtime.ts","packages/contracts/src/task.ts","packages/contracts/src/trigger.ts","packages/contracts/src/work.test.ts","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-dual-backend-parity.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-ui-acceptance.mjs"]},"repository":{"id":76,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"digital-employee-os","full_name":"luoanwu/digital-employee-os","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":27,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os/languages","html_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/digital-employee-os.git","clone_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-20T14:46:28+08:00","updated_at":"2026-08-20T14:47:09+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1787208431
|
1787208453
|
0
|
1787208429
|
1787208455
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23501
|
test(llm): anthropic 协议后端验收 + 真实超时重试链 + live smoke test(llm): anthropic 协议后端验收 + 真实超时重试链 + live smoke 脚本(关闭 G18 两盲区)...
|
76
|
5
|
governance.yml
|
2
|
5
|
0
|
refs/heads/main
|
31591db0504c787ba6162697ffd05e2a3fe9f1ec
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"d66fbcbb48ca0e0fc2b252b67accac472b8d800f","after":"31591db0504c787ba6162697ffd05e2a3fe9f1ec","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/d66fbcbb48ca0e0fc2b252b67accac472b8d800f...31591db0504c787ba6162697ffd05e2a3fe9f1ec","commits":[{"id":"31591db0504c787ba6162697ffd05e2a3fe9f1ec","message":"test(llm): anthropic 协议后端验收 + 真实超时重试链 + live smoke 脚本(关闭 G18 两盲区)\n\n- 两后端各增 llm.anthropic.acceptance.test.ts(独立文件防 env 串扰,沿 auth.rs256 先例):\n /messages + x-api-key + anthropic-version 协议头、usage 从 input/output_tokens 归一化、\n 响应慢于 LLM_TIMEOUT_MS → AbortController abort → transient → BullMQ 重试收敛\n- scripts/llm-live-smoke.mjs(pnpm llm:smoke):真 key 冒烟,env 与后端同源复用\n runAnalysisLlm 策略体;三条退出路径(0 通过/1 失败带分类/2 桩姿态)均已本地实证;\n 不进门禁不写 reports/\n- check:dual-backend LLM 绊网扩展:anthropic 验收文件存在性红线(负向已验证)\n- 地板棘轮:testsPassed 350→354(--update-baseline 全绿后收紧,专属基座\n runtime_llm+Redis/8)、ownTests 49→51、ownTestCases 339→343\n- G18 关闭 anthropic/超时两条盲区,live smoke 更新为「脚本已备待真 key 实跑」\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/31591db0504c787ba6162697ffd05e2a3fe9f1ec","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-19T23:48:00-07:00","added":["apps/api-fastify/test/llm.anthropic.acceptance.test.ts","apps/api-nestjs/test/llm.anthropic.acceptance.test.ts","scripts/llm-live-smoke.mjs"],"removed":[],"modified":["CLAUDE.md","docs/domain/llm-execution-blueprint.md","package.json","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json","scripts/check-dual-backend-parity.mjs"]}],"total_commits":0,"head_commit":{"id":"31591db0504c787ba6162697ffd05e2a3fe9f1ec","message":"test(llm): anthropic 协议后端验收 + 真实超时重试链 + live smoke 脚本(关闭 G18 两盲区)\n\n- 两后端各增 llm.anthropic.acceptance.test.ts(独立文件防 env 串扰,沿 auth.rs256 先例):\n /messages + x-api-key + anthropic-version 协议头、usage 从 input/output_tokens 归一化、\n 响应慢于 LLM_TIMEOUT_MS → AbortController abort → transient → BullMQ 重试收敛\n- scripts/llm-live-smoke.mjs(pnpm llm:smoke):真 key 冒烟,env 与后端同源复用\n runAnalysisLlm 策略体;三条退出路径(0 通过/1 失败带分类/2 桩姿态)均已本地实证;\n 不进门禁不写 reports/\n- check:dual-backend LLM 绊网扩展:anthropic 验收文件存在性红线(负向已验证)\n- 地板棘轮:testsPassed 350→354(--update-baseline 全绿后收紧,专属基座\n runtime_llm+Redis/8)、ownTests 49→51、ownTestCases 339→343\n- G18 关闭 anthropic/超时两条盲区,live smoke 更新为「脚本已备待真 key 实跑」\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/31591db0504c787ba6162697ffd05e2a3fe9f1ec","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-19T23:48:00-07:00","added":["apps/api-fastify/test/llm.anthropic.acceptance.test.ts","apps/api-nestjs/test/llm.anthropic.acceptance.test.ts","scripts/llm-live-smoke.mjs"],"removed":[],"modified":["CLAUDE.md","docs/domain/llm-execution-blueprint.md","package.json","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json","scripts/check-dual-backend-parity.mjs"]},"repository":{"id":76,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"digital-employee-os","full_name":"luoanwu/digital-employee-os","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":1036,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os/languages","html_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/digital-employee-os.git","clone_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":2,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-20T14:46:28+08:00","updated_at":"2026-08-20T14:47:10+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1787208722
|
1787208752
|
0
|
1787208720
|
1787208752
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23504
|
fix(ci): tests-passing 解析器剥 ANSI——CI 彩色输出把 354 数成 fix(ci): tests-passing 解析器剥 ANSI——CI 彩色输出把 354 数成 0 触发地板假红...
|
76
|
5
|
governance.yml
|
5
|
5
|
0
|
refs/heads/main
|
6a3d263e9c83ec102cd45c7a7303926821bf02cf
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"e17e315f20a61059ab3b48375897c5f5b6213bdc","after":"6a3d263e9c83ec102cd45c7a7303926821bf02cf","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/e17e315f20a61059ab3b48375897c5f5b6213bdc...6a3d263e9c83ec102cd45c7a7303926821bf02cf","commits":[{"id":"6a3d263e9c83ec102cd45c7a7303926821bf02cf","message":"fix(ci): tests-passing 解析器剥 ANSI——CI 彩色输出把 354 数成 0 触发地板假红\n\nGITHUB_ACTIONS 下 vitest 强制彩色,`Tests` 与数字间夹 \\x1b[1m\\x1b[32m 序列,\n裸正则失配(run 32343375378:三步测试全绿、地板却报 got 0)。\n干净房以 GITHUB_ACTIONS=true CI=true FORCE_COLOR=1 复现并验证:剥色后 354/passed。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/6a3d263e9c83ec102cd45c7a7303926821bf02cf","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-20T00:33:52-07:00","added":[],"removed":[],"modified":["scripts/check-runtime-acceptance.mjs"]}],"total_commits":0,"head_commit":{"id":"6a3d263e9c83ec102cd45c7a7303926821bf02cf","message":"fix(ci): tests-passing 解析器剥 ANSI——CI 彩色输出把 354 数成 0 触发地板假红\n\nGITHUB_ACTIONS 下 vitest 强制彩色,`Tests` 与数字间夹 \\x1b[1m\\x1b[32m 序列,\n裸正则失配(run 32343375378:三步测试全绿、地板却报 got 0)。\n干净房以 GITHUB_ACTIONS=true CI=true FORCE_COLOR=1 复现并验证:剥色后 354/passed。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/6a3d263e9c83ec102cd45c7a7303926821bf02cf","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-20T00:33:52-07:00","added":[],"removed":[],"modified":["scripts/check-runtime-acceptance.mjs"]},"repository":{"id":76,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"digital-employee-os","full_name":"luoanwu/digital-employee-os","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":1123,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os/languages","html_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/digital-employee-os.git","clone_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":2,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-20T14:46:28+08:00","updated_at":"2026-08-20T15:18:10+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1787211237
|
1787211658
|
0
|
1787211236
|
1787211659
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23506
|
fix(events)+test(learning): dispatcher 关闭等待在途 tick fix(events)+test(learning): dispatcher 关闭等待在途 tick + ActorSkillState 并发学习用例(G18 盲区)...
|
76
|
5
|
governance.yml
|
7
|
5
|
0
|
refs/heads/main
|
29718124b1918bbc4d17c98875c6043ec5fa3048
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"66900427c855e2ce43d634de9c6107dd6e8d1224","after":"29718124b1918bbc4d17c98875c6043ec5fa3048","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/66900427c855e2ce43d634de9c6107dd6e8d1224...29718124b1918bbc4d17c98875c6043ec5fa3048","commits":[{"id":"29718124b1918bbc4d17c98875c6043ec5fa3048","message":"fix(events)+test(learning): dispatcher 关闭等待在途 tick + ActorSkillState 并发学习用例(G18 盲区)\n\n- 两后端 outbox dispatcher close 原来只 clearInterval、不等在途 tick——\n tick 可越过 redis.quit() 撞死连接(CI 收尾竞态实锤形态之一);\n 现 clearInterval + await inFlight(收窄竞态面,不宣称根治偶发)\n- 两后端各 +2 真实 DB 双事务并发用例(行锁定序确定性编排):\n 乐观锁 0 行拒绝 / 经验恰好 +1 防双记账 / 失败侧全量回滚(P4)/\n 全新技能并发首建 P2002 防双行\n- 地板棘轮:testsPassed 354→358(专属基座 runtime_g18+Redis/12 全量 358/358)、\n ownTests→54、ownTestCases→354\n- CI run 32345463489(docs-only 提交偶发红)复跑即绿,判责=偶发成立,形态已记 G18\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/29718124b1918bbc4d17c98875c6043ec5fa3048","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-20T01:09:40-07:00","added":["apps/api-fastify/test/learning.concurrency.test.ts","apps/api-nestjs/test/learning.concurrency.test.ts"],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/src/plugins/outbox.ts","apps/api-nestjs/src/events/outbox-dispatcher.service.ts","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json"]}],"total_commits":0,"head_commit":{"id":"29718124b1918bbc4d17c98875c6043ec5fa3048","message":"fix(events)+test(learning): dispatcher 关闭等待在途 tick + ActorSkillState 并发学习用例(G18 盲区)\n\n- 两后端 outbox dispatcher close 原来只 clearInterval、不等在途 tick——\n tick 可越过 redis.quit() 撞死连接(CI 收尾竞态实锤形态之一);\n 现 clearInterval + await inFlight(收窄竞态面,不宣称根治偶发)\n- 两后端各 +2 真实 DB 双事务并发用例(行锁定序确定性编排):\n 乐观锁 0 行拒绝 / 经验恰好 +1 防双记账 / 失败侧全量回滚(P4)/\n 全新技能并发首建 P2002 防双行\n- 地板棘轮:testsPassed 354→358(专属基座 runtime_g18+Redis/12 全量 358/358)、\n ownTests→54、ownTestCases→354\n- CI run 32345463489(docs-only 提交偶发红)复跑即绿,判责=偶发成立,形态已记 G18\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/29718124b1918bbc4d17c98875c6043ec5fa3048","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-20T01:09:40-07:00","added":["apps/api-fastify/test/learning.concurrency.test.ts","apps/api-nestjs/test/learning.concurrency.test.ts"],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/src/plugins/outbox.ts","apps/api-nestjs/src/events/outbox-dispatcher.service.ts","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json"]},"repository":{"id":76,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"digital-employee-os","full_name":"luoanwu/digital-employee-os","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":1181,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os/languages","html_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/digital-employee-os.git","clone_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":2,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-20T14:46:28+08:00","updated_at":"2026-08-20T15:45:09+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1787213385
|
1787213410
|
0
|
1787213384
|
1787213411
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23507
|
feat(skills)+feat(web): 技能目录治理与熟练度真实对接 + 响应式工作台 + feat(skills)+feat(web): 技能目录治理与熟练度真实对接 + 响应式工作台 + G18/G21 收口...
|
76
|
5
|
governance.yml
|
8
|
5
|
0
|
refs/heads/main
|
5e0044558f1104cbbaefb759bd0d70c3a5049418
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"29718124b1918bbc4d17c98875c6043ec5fa3048","after":"5e0044558f1104cbbaefb759bd0d70c3a5049418","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/29718124b1918bbc4d17c98875c6043ec5fa3048...5e0044558f1104cbbaefb759bd0d70c3a5049418","commits":[{"id":"5e0044558f1104cbbaefb759bd0d70c3a5049418","message":"feat(skills)+feat(web): 技能目录治理与熟练度真实对接 + 响应式工作台 + G18/G21 收口\n\n技能管理治理(先登记后使用):\n- contracts 新增 skill.ts 单源:SKILL_NAME_PATTERN / registerSkillSchema /\n findUnknownSkills / toSkillProficiencySnapshot(两后端只做框架胶水,防 G17 漂移)\n- 两后端对等 GET/POST /api/skills 幂等登记(新建 201 + 同 tx 发 skill.registered,\n 重复 200 同行;P2002 窄捕获);任务/触发器模板 requiredSkills 构造性校验,\n 未登记 400 UNKNOWN_SKILLS 附清单(TaskDependency 同款先例,负向已验证:\n 拼错名不建任务、不污染目录、不再静默铸造 ActorSkillState 履历)\n- web SkillPicker 目录化表单(任务/自动化共用;显式登记新技能名)\n\n熟练度真实对接(修复蓝图与代码漂移):\n- 装配事务内读 ActorSkillState → 快照 skillProficiency → LLM prompt 渲染执行者履历\n (ANALYSIS_PROMPT_VERSION=2);两后端「二次装配快照携带 count=1」断言钉死\n\nG18 盲区收口:两后端 learning.concurrency.test.ts(行锁定序双事务:乐观锁 0 行拒绝\n+ 整事务回滚计数不丢不重 + 全新技能并发首建 P2002 防双行)\n\n响应式工作台改版:手机端底部导航 / PC 端侧栏 + 2 个响应式 e2e 用例;\nRoleAssignmentsPanel(G8 角色管理只读面);G21 agent-adapters 生成器与比对门禁接入\n\n治理回灌:registry 登记 skills 资产(fork-readiness/dual-backend/validation/outbox\n接管)、owner-matrix/work/learning 蓝图/词典/CLAUDE.md 动态区同步、\n棘轮收紧 testsPassed=368 / ownTests=54 / ownTestCases=360\n\n证据(本地工作区,2026-08-20):pnpm check 静态 12 项全绿;check:runtime 368/368\n(PG:55447/digital_employee_os_skills_20260820 + Redis:6397/9);check:ui 13/13\n(含 SkillPicker 全链路与响应式用例,端口 3151/3253)\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/5e0044558f1104cbbaefb759bd0d70c3a5049418","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-20T02:49:23-07:00","added":[".agents/skills/business-module-intake/SKILL.md","apps/api-fastify/src/modules/work/skills.service.ts","apps/api-fastify/src/routes/skills.ts","apps/api-nestjs/src/work/skills.controller.ts","apps/api-nestjs/src/work/skills.service.ts","apps/web/src/components/RoleAssignmentsPanel.tsx","apps/web/src/components/workbench/SkillPicker.tsx","packages/contracts/src/skill.test.ts","packages/contracts/src/skill.ts","reports/agent-adapters.latest.json","scripts/check-agent-adapters.mjs"],"removed":[],"modified":[".agents/skills/frontend-api-react/SKILL.md",".agents/skills/fullstack-7layer-react/SKILL.md","CLAUDE.md","apps/api-fastify/src/app.ts","apps/api-fastify/src/modules/triggers.service.ts","apps/api-fastify/src/modules/work/errors.ts","apps/api-fastify/src/modules/work/runtimes.service.ts","apps/api-fastify/src/modules/work/tasks.service.ts","apps/api-fastify/src/routes/triggers.ts","apps/api-fastify/src/routes/work.ts","apps/api-fastify/test/actor-events.integration.test.ts","apps/api-fastify/test/learning.concurrency.test.ts","apps/api-fastify/test/llm.acceptance.test.ts","apps/api-fastify/test/llm.anthropic.acceptance.test.ts","apps/api-fastify/test/outcomes.integration.test.ts","apps/api-fastify/test/task-events.integration.test.ts","apps/api-fastify/test/triggers.integration.test.ts","apps/api-fastify/test/work.integration.test.ts","apps/api-nestjs/src/triggers/triggers.service.ts","apps/api-nestjs/src/work/runtimes.service.ts","apps/api-nestjs/src/work/tasks.service.ts","apps/api-nestjs/src/work/work.module.ts","apps/api-nestjs/test/actor-events.integration.test.ts","apps/api-nestjs/test/learning.concurrency.test.ts","apps/api-nestjs/test/llm.acceptance.test.ts","apps/api-nestjs/test/llm.anthropic.acceptance.test.ts","apps/api-nestjs/test/outcomes.integration.test.ts","apps/api-nestjs/test/task-events.integration.test.ts","apps/api-nestjs/test/triggers.integration.test.ts","apps/api-nestjs/test/work.integration.test.ts","apps/web/e2e/acceptance.spec.ts","apps/web/src/app/page.tsx","apps/web/src/components/JobsPanel.tsx","apps/web/src/components/ProjectsPanel.tsx","apps/web/src/components/UsersPanel.tsx","apps/web/src/components/views/AutomationView.tsx","apps/web/src/components/views/SystemView.tsx","apps/web/src/components/views/TeamView.tsx","apps/web/src/components/views/WorkbenchView.tsx","apps/web/src/components/workbench/StateBadge.tsx","apps/web/src/components/workbench/TaskCreateForm.tsx","apps/web/src/components/workbench/TaskDetail.tsx","apps/web/src/components/workbench/TaskList.tsx","apps/web/src/lib/api.ts","apps/web/src/lib/providers.tsx","apps/web/src/lib/state-theme.ts","apps/web/src/lib/types.ts","docs/domain-glossary.md","docs/domain/learning-blueprint.md","docs/domain/owner-matrix.md","docs/domain/work-blueprint.md","docs/governance-experience.md","governance.registry.json","package.json","packages/contracts/src/index.ts","packages/contracts/src/llm.test.ts","packages/contracts/src/llm.ts","packages/contracts/src/realtime.ts","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/governance-report.mjs"]}],"total_commits":0,"head_commit":{"id":"5e0044558f1104cbbaefb759bd0d70c3a5049418","message":"feat(skills)+feat(web): 技能目录治理与熟练度真实对接 + 响应式工作台 + G18/G21 收口\n\n技能管理治理(先登记后使用):\n- contracts 新增 skill.ts 单源:SKILL_NAME_PATTERN / registerSkillSchema /\n findUnknownSkills / toSkillProficiencySnapshot(两后端只做框架胶水,防 G17 漂移)\n- 两后端对等 GET/POST /api/skills 幂等登记(新建 201 + 同 tx 发 skill.registered,\n 重复 200 同行;P2002 窄捕获);任务/触发器模板 requiredSkills 构造性校验,\n 未登记 400 UNKNOWN_SKILLS 附清单(TaskDependency 同款先例,负向已验证:\n 拼错名不建任务、不污染目录、不再静默铸造 ActorSkillState 履历)\n- web SkillPicker 目录化表单(任务/自动化共用;显式登记新技能名)\n\n熟练度真实对接(修复蓝图与代码漂移):\n- 装配事务内读 ActorSkillState → 快照 skillProficiency → LLM prompt 渲染执行者履历\n (ANALYSIS_PROMPT_VERSION=2);两后端「二次装配快照携带 count=1」断言钉死\n\nG18 盲区收口:两后端 learning.concurrency.test.ts(行锁定序双事务:乐观锁 0 行拒绝\n+ 整事务回滚计数不丢不重 + 全新技能并发首建 P2002 防双行)\n\n响应式工作台改版:手机端底部导航 / PC 端侧栏 + 2 个响应式 e2e 用例;\nRoleAssignmentsPanel(G8 角色管理只读面);G21 agent-adapters 生成器与比对门禁接入\n\n治理回灌:registry 登记 skills 资产(fork-readiness/dual-backend/validation/outbox\n接管)、owner-matrix/work/learning 蓝图/词典/CLAUDE.md 动态区同步、\n棘轮收紧 testsPassed=368 / ownTests=54 / ownTestCases=360\n\n证据(本地工作区,2026-08-20):pnpm check 静态 12 项全绿;check:runtime 368/368\n(PG:55447/digital_employee_os_skills_20260820 + Redis:6397/9);check:ui 13/13\n(含 SkillPicker 全链路与响应式用例,端口 3151/3253)\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/5e0044558f1104cbbaefb759bd0d70c3a5049418","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-20T02:49:23-07:00","added":[".agents/skills/business-module-intake/SKILL.md","apps/api-fastify/src/modules/work/skills.service.ts","apps/api-fastify/src/routes/skills.ts","apps/api-nestjs/src/work/skills.controller.ts","apps/api-nestjs/src/work/skills.service.ts","apps/web/src/components/RoleAssignmentsPanel.tsx","apps/web/src/components/workbench/SkillPicker.tsx","packages/contracts/src/skill.test.ts","packages/contracts/src/skill.ts","reports/agent-adapters.latest.json","scripts/check-agent-adapters.mjs"],"removed":[],"modified":[".agents/skills/frontend-api-react/SKILL.md",".agents/skills/fullstack-7layer-react/SKILL.md","CLAUDE.md","apps/api-fastify/src/app.ts","apps/api-fastify/src/modules/triggers.service.ts","apps/api-fastify/src/modules/work/errors.ts","apps/api-fastify/src/modules/work/runtimes.service.ts","apps/api-fastify/src/modules/work/tasks.service.ts","apps/api-fastify/src/routes/triggers.ts","apps/api-fastify/src/routes/work.ts","apps/api-fastify/test/actor-events.integration.test.ts","apps/api-fastify/test/learning.concurrency.test.ts","apps/api-fastify/test/llm.acceptance.test.ts","apps/api-fastify/test/llm.anthropic.acceptance.test.ts","apps/api-fastify/test/outcomes.integration.test.ts","apps/api-fastify/test/task-events.integration.test.ts","apps/api-fastify/test/triggers.integration.test.ts","apps/api-fastify/test/work.integration.test.ts","apps/api-nestjs/src/triggers/triggers.service.ts","apps/api-nestjs/src/work/runtimes.service.ts","apps/api-nestjs/src/work/tasks.service.ts","apps/api-nestjs/src/work/work.module.ts","apps/api-nestjs/test/actor-events.integration.test.ts","apps/api-nestjs/test/learning.concurrency.test.ts","apps/api-nestjs/test/llm.acceptance.test.ts","apps/api-nestjs/test/llm.anthropic.acceptance.test.ts","apps/api-nestjs/test/outcomes.integration.test.ts","apps/api-nestjs/test/task-events.integration.test.ts","apps/api-nestjs/test/triggers.integration.test.ts","apps/api-nestjs/test/work.integration.test.ts","apps/web/e2e/acceptance.spec.ts","apps/web/src/app/page.tsx","apps/web/src/components/JobsPanel.tsx","apps/web/src/components/ProjectsPanel.tsx","apps/web/src/components/UsersPanel.tsx","apps/web/src/components/views/AutomationView.tsx","apps/web/src/components/views/SystemView.tsx","apps/web/src/components/views/TeamView.tsx","apps/web/src/components/views/WorkbenchView.tsx","apps/web/src/components/workbench/StateBadge.tsx","apps/web/src/components/workbench/TaskCreateForm.tsx","apps/web/src/components/workbench/TaskDetail.tsx","apps/web/src/components/workbench/TaskList.tsx","apps/web/src/lib/api.ts","apps/web/src/lib/providers.tsx","apps/web/src/lib/state-theme.ts","apps/web/src/lib/types.ts","docs/domain-glossary.md","docs/domain/learning-blueprint.md","docs/domain/owner-matrix.md","docs/domain/work-blueprint.md","docs/governance-experience.md","governance.registry.json","package.json","packages/contracts/src/index.ts","packages/contracts/src/llm.test.ts","packages/contracts/src/llm.ts","packages/contracts/src/realtime.ts","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/governance-report.mjs"]},"repository":{"id":76,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"digital-employee-os","full_name":"luoanwu/digital-employee-os","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":1248,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os/languages","html_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/digital-employee-os.git","clone_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":2,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-20T14:46:28+08:00","updated_at":"2026-08-20T16:09:44+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1787219402
|
1787219846
|
0
|
1787219402
|
1787219847
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23512
|
fix(test): auth.roles 升权审计断言按 subject 收窄——合并组合暴露的语 fix(test): auth.roles 升权审计断言按 subject 收窄——合并组合暴露的语义冲突...
|
76
|
5
|
governance.yml
|
13
|
5
|
0
|
refs/heads/main
|
d0abf16e0287850cbb497074a866f1b35074dbb1
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"28ea42cca5364bd425358f803436ae5c8f9bc687","after":"d0abf16e0287850cbb497074a866f1b35074dbb1","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/28ea42cca5364bd425358f803436ae5c8f9bc687...d0abf16e0287850cbb497074a866f1b35074dbb1","commits":[{"id":"d0abf16e0287850cbb497074a866f1b35074dbb1","message":"fix(test): auth.roles 升权审计断言按 subject 收窄——合并组合暴露的语义冲突\n\nCI run 32581362188 判责:本地线 C42 审计断言(查询租户全量 role.assigned 并断言恰好 2 条)\n与远端线 PR #3 新增的结果裁决闸用例(同租户内先授过一次 approver)在两条时间线上各自全绿,\n合并后首次同文件运行即互相污染——第 3 条审计事件令断言 3≠2 红。git 无冲突 ≠ 语义无冲突。\n\n修复由并行会话完成、本提交收编(两侧同款):审计断言先 filter(subject === \"u-upgrade\")\n再 toMatchObject——断言收窄到被测 subject,与其他用例的角色授予解耦。\n双端 auth.roles 已在一次性专属库(PG 55447 + Redis 6397/9)各 6/6 复现通过。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/d0abf16e0287850cbb497074a866f1b35074dbb1","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-22T08:28:23-07:00","added":[],"removed":[],"modified":["apps/api-fastify/test/auth.roles.acceptance.test.ts","apps/api-nestjs/test/auth.roles.acceptance.test.ts"]}],"total_commits":0,"head_commit":{"id":"d0abf16e0287850cbb497074a866f1b35074dbb1","message":"fix(test): auth.roles 升权审计断言按 subject 收窄——合并组合暴露的语义冲突\n\nCI run 32581362188 判责:本地线 C42 审计断言(查询租户全量 role.assigned 并断言恰好 2 条)\n与远端线 PR #3 新增的结果裁决闸用例(同租户内先授过一次 approver)在两条时间线上各自全绿,\n合并后首次同文件运行即互相污染——第 3 条审计事件令断言 3≠2 红。git 无冲突 ≠ 语义无冲突。\n\n修复由并行会话完成、本提交收编(两侧同款):审计断言先 filter(subject === \"u-upgrade\")\n再 toMatchObject——断言收窄到被测 subject,与其他用例的角色授予解耦。\n双端 auth.roles 已在一次性专属库(PG 55447 + Redis 6397/9)各 6/6 复现通过。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/d0abf16e0287850cbb497074a866f1b35074dbb1","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-22T08:28:23-07:00","added":[],"removed":[],"modified":["apps/api-fastify/test/auth.roles.acceptance.test.ts","apps/api-nestjs/test/auth.roles.acceptance.test.ts"]},"repository":{"id":76,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"digital-employee-os","full_name":"luoanwu/digital-employee-os","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":51197,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os/languages","html_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/digital-employee-os.git","clone_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":2,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-20T14:46:28+08:00","updated_at":"2026-08-22T23:19:47+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1787412511
|
1787412602
|
0
|
1787412510
|
1787412602
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23517
|
chore: record post-merge acceptance evidence
|
62
|
5
|
governance.yml
|
9
|
5
|
0
|
refs/heads/main
|
ca134d5514b10ecb8b367c953c3284aaa5984f8a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"3e9e11cd8aef1d8572f13e41bfc4a9ad091cea59","after":"ca134d5514b10ecb8b367c953c3284aaa5984f8a","compare_url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition/compare/3e9e11cd8aef1d8572f13e41bfc4a9ad091cea59...ca134d5514b10ecb8b367c953c3284aaa5984f8a","commits":[{"id":"ca134d5514b10ecb8b367c953c3284aaa5984f8a","message":"chore: record post-merge acceptance evidence\n","url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition/commit/ca134d5514b10ecb8b367c953c3284aaa5984f8a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-24T02:39:15-07:00","added":[],"removed":[],"modified":["reports/contract-consumers.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json"]},{"id":"d674e4aa3b5af117d85713a1e9d05ccb6b82ce3f","message":"merge: consolidate voiceprint UI branch\n","url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition/commit/d674e4aa3b5af117d85713a1e9d05ccb6b82ce3f","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-24T02:34:29-07:00","added":[],"removed":[],"modified":["apps/web/e2e/acceptance.spec.ts","apps/web/src/app/page.tsx","apps/web/src/app/voiceprint/page.tsx","apps/web/src/components/voiceprint/IdentifyPanel.tsx","packages/contracts/src/voiceprint.ts","reports/contract-consumers.latest.json","reports/naming.latest.json","reports/ui-acceptance.latest.json"]},{"id":"e9053d78ad792bc6dc023b7e1cc96fd2d7d9ea9a","message":"test: 补齐候选分项分数的 UI 断言覆盖\n\n反证发现:把候选行「证据A」改回「W」后 check:ui 仍然 8/8 全绿——\n说明分项分数那一行此前零断言覆盖,改文案不会红。既有断言只覆盖了\n判定原因文案、证据分歧徽章和底栏两条权重。\n\n新增一条对 identify-result 的 toContainText,锁住标签与数值:\n「证据A 0.920 · 证据B 0.900 · 分歧 0.020」(对应 stub match 分支\nwavlmScore=0.92 / ecapaScore=0.90 / scoreDisagreement=0.02)。\n\n断言有牙已实证:源码停在旧标签时该用例红(uiTestsPassed 7/8,\nReceived「W 0.920 · 证据B 0.900」),还原后 8/8 绿。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition/commit/e9053d78ad792bc6dc023b7e1cc96fd2d7d9ea9a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-05T21:07:07-07:00","added":[],"removed":[],"modified":["apps/web/e2e/acceptance.spec.ts","reports/ui-acceptance.latest.json"]},{"id":"ccf8759df88298d325908e7a56837fe1c7778736","message":"feat: 声纹 UI 改用中性证据标签与巨嗨品牌口径\n\n展示层不再出现模型名,技术真源保持不变。\n\n- 候选分项 W/E → 证据A/证据B,「差」→「分歧」,徽章「模型分歧」→「证据分歧」\n- 底栏决策有效权重 / 召回投影 W../E.. → A../B..\n- 判定原因单源(contracts)「WavLM 与 ECAPA 证据分歧过大」→「两路声纹证据分歧过大」\n- 页面主标题与首页入口「声纹工作台」→「巨嗨声音画像工作台」\n- 副标题「WavLM + ECAPA 融合」→「双路证据融合」\n\n刻意不动的部分:contracts 字段名(wavlmScore / retrievalWavlmWeight 等)与\nsidecar JSON 逐字对齐,改名会打断三层真源并触发 check:contract-consumers;\n路由段 /voiceprint 与组件名保持不变。分项分数继续展示,兑现\n「双模型可观测、不能只看黑盒融合分」的既有承诺。\n\nE2E 四条硬编码断言同步(分歧原因文案、证据分歧徽章、两条权重正则)。\n验证:typecheck 5/5、lint、check:naming、check:contract-consumers 全绿;\n真实运行服务上复验 7 人库与历史辨认结果渲染正确,控制台 0 错误。\ncheck:ui 未跑(需独立测试库 PG:55432 + Redis:6382)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition/commit/ccf8759df88298d325908e7a56837fe1c7778736","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-05T21:00:27-07:00","added":[],"removed":[],"modified":["apps/web/e2e/acceptance.spec.ts","apps/web/src/app/page.tsx","apps/web/src/app/voiceprint/page.tsx","apps/web/src/components/voiceprint/IdentifyPanel.tsx","packages/contracts/src/voiceprint.ts","reports/contract-consumers.latest.json","reports/naming.latest.json"]}],"total_commits":0,"head_commit":{"id":"ca134d5514b10ecb8b367c953c3284aaa5984f8a","message":"chore: record post-merge acceptance evidence\n","url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition/commit/ca134d5514b10ecb8b367c953c3284aaa5984f8a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-24T02:39:15-07:00","added":[],"removed":[],"modified":["reports/contract-consumers.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json"]},"repository":{"id":62,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"voiceprint-recognition","full_name":"luoanwu/voiceprint-recognition","description":"ECAPA+WavLM 声纹注册识别、1:N ANN 检索与声音特征画像平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":1713,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/voiceprint-recognition/languages","html_url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/voiceprint-recognition","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/voiceprint-recognition.git","clone_url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":2,"branch_count":2,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-07-15T08:42:42+08:00","updated_at":"2026-08-24T17:33:05+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1787564571
|
1787564661
|
0
|
1787564570
|
1787564662
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23520
|
feat: implement governed device cloud V1
|
80
|
5
|
governance.yml
|
1
|
5
|
0
|
refs/heads/main
|
49e97bd63c64e1d0484db4acffd63d40ab27bbbe
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"0000000000000000000000000000000000000000","after":"49e97bd63c64e1d0484db4acffd63d40ab27bbbe","compare_url":"https://gitea.g-hi.com/","commits":[{"id":"49e97bd63c64e1d0484db4acffd63d40ab27bbbe","message":"feat: implement governed device cloud V1\n","url":"https://gitea.g-hi.com/luoanwu/juhai-device-cloud/commit/49e97bd63c64e1d0484db4acffd63d40ab27bbbe","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-25T08:46:32-07:00","added":["apps/api-fastify/prisma/migrations/20260824163000_device_v1a/migration.sql","apps/api-fastify/prisma/migrations/20260825100000_device_v1b_activation/migration.sql","apps/api-fastify/prisma/migrations/20260825143000_device_v1b_transfer/migration.sql","apps/api-fastify/prisma/migrations/20260825150000_device_v1b_topology/migration.sql","apps/api-fastify/prisma/migrations/20260825162000_device_v1b_grant_revocation/migration.sql","apps/api-fastify/src/modules/device-v1a/device-v1a.service.ts","apps/api-fastify/src/modules/device-v1b/device-v1b.service.ts","apps/api-fastify/src/routes/device-v1a.ts","apps/api-fastify/src/routes/device-v1b.ts","apps/api-fastify/test/device-v1a.integration.test.ts","apps/api-fastify/test/device-v1b.integration.test.ts","apps/api-nestjs/prisma/migrations/20260824163000_device_v1a/migration.sql","apps/api-nestjs/prisma/migrations/20260825100000_device_v1b_activation/migration.sql","apps/api-nestjs/prisma/migrations/20260825143000_device_v1b_transfer/migration.sql","apps/api-nestjs/prisma/migrations/20260825150000_device_v1b_topology/migration.sql","apps/api-nestjs/prisma/migrations/20260825162000_device_v1b_grant_revocation/migration.sql","apps/api-nestjs/src/device-v1a/device-v1a.controller.ts","apps/api-nestjs/src/device-v1a/device-v1a.module.ts","apps/api-nestjs/src/device-v1a/device-v1a.service.ts","apps/api-nestjs/src/device-v1b/device-v1b.controller.ts","apps/api-nestjs/src/device-v1b/device-v1b.module.ts","apps/api-nestjs/src/device-v1b/device-v1b.service.ts","apps/api-nestjs/test/device-v1a.integration.test.ts","apps/api-nestjs/test/device-v1b.integration.test.ts","apps/web/src/components/DeviceV1aWorkspace.tsx","apps/web/src/components/DeviceV1bActivationWorkspace.tsx","docs/domain/customer-service-product-blueprint.md","docs/domain/device-cloud-blueprint.md","docs/domain/device-cloud-review.md","kernel.products.json","packages/contracts/src/device-v1a.test.ts","packages/contracts/src/device-v1a.ts","packages/contracts/src/device-v1b.test.ts","packages/contracts/src/device-v1b.ts","products/juhai.support/README.md","products/juhai.support/acceptance/juhai.support.case.acceptance.mjs","products/juhai.support/migrations/juhai.support.case/20260825090000_create_support_cases.sql","products/juhai.support/migrations/juhai.support.case/20260825091000_create_support_case_actions.sql","products/juhai.support/package.json","products/juhai.support/product.manifest.json","products/juhai.support/src/case-repository.ts","products/juhai.support/src/contracts.ts","products/juhai.support/src/fastify.ts","products/juhai.support/src/host.ts","products/juhai.support/src/index.ts","products/juhai.support/src/manifest.ts","products/juhai.support/src/nestjs.ts","products/juhai.support/src/tools.ts","products/juhai.support/src/web.tsx","products/juhai.support/test/os-host.runtime.test.ts","products/juhai.support/tsconfig.os-host.json","products/juhai.support/vitest.os-host.config.ts","reports/os-product-compat.latest.json","reports/os-product-runtime.latest.json","scripts/check-os-product-compat.mjs","scripts/check-os-product-runtime.mjs"],"removed":[],"modified":["CLAUDE.md","README.md","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/app.ts","apps/api-nestjs/package.json","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/src/app.module.ts","apps/api-nestjs/src/redis/redis.module.ts","apps/web/e2e/acceptance.spec.ts","apps/web/src/app/globals.css","apps/web/src/app/page.tsx","apps/web/src/components/EventFeed.tsx","apps/web/src/hooks/useRealtime.ts","apps/web/src/lib/api.ts","apps/web/src/lib/types.ts","docs/README.md","docs/domain-glossary.md","docs/domain/owner-matrix.md","docs/governance-experience.md","governance.registry.json","governance.registry.schema.json","package.json","packages/contracts/src/index.ts","packages/contracts/src/realtime.ts","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-docs-truth.mjs","scripts/check-migrations.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-statemachine-write-guard.mjs","scripts/check-ui-acceptance.mjs","scripts/governance-report.mjs"]},{"id":"670a202de86da74457bd91abf25430d04ee6cbbf","message":"chore: bind static governance evidence\n","url":"https://gitea.g-hi.com/luoanwu/juhai-device-cloud/commit/670a202de86da74457bd91abf25430d04ee6cbbf","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-24T06:38:40-07:00","added":[],"removed":[],"modified":["reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},{"id":"47401905d7dfd16ce4c6564b881bffd3083ef847","message":"docs: record device cloud local acceptance\n","url":"https://gitea.g-hi.com/luoanwu/juhai-device-cloud/commit/47401905d7dfd16ce4c6564b881bffd3083ef847","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-24T06:38:16-07:00","added":["reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json"],"removed":[],"modified":["CLAUDE.md","docs/framework-migration.md"]},{"id":"659ea41dd717401cf8c2a12eb36ec4add68ba15d","message":"chore: migrate governed framework to device cloud\n","url":"https://gitea.g-hi.com/luoanwu/juhai-device-cloud/commit/659ea41dd717401cf8c2a12eb36ec4add68ba15d","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-24T06:17:21-07:00","added":[".claude/agents/acceptance-runner.md",".claude/agents/module-blueprint.md",".claude/launch.json",".claude/skills/business-module-intake/SKILL.md",".claude/skills/frontend-api-react/SKILL.md",".claude/skills/frontend-view-react/SKILL.md",".claude/skills/frontend-view-react/references/view-templates.md",".claude/skills/fullstack-7layer-react/SKILL.md",".claude/skills/fullstack-7layer-react/references/fullstack-react-templates.md",".claude/skills/zustand-store/SKILL.md",".github/pull_request_template.md",".github/workflows/governance.yml",".gitignore","AGENTS.md","CLAUDE.md","README.md","apps/api-fastify/.env.example","apps/api-fastify/.gitignore","apps/api-fastify/package.json","apps/api-fastify/pnpm-lock.yaml","apps/api-fastify/prisma/migrations/20260608150500_init/migration.sql","apps/api-fastify/prisma/migrations/20260705080000_outbox_dead_letter/migration.sql","apps/api-fastify/prisma/migrations/20260818090000_outbox_replay_cursor/migration.sql","apps/api-fastify/prisma/migrations/migration_lock.toml","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/app.ts","apps/api-fastify/src/lib/orderMachine.ts","apps/api-fastify/src/lib/statemachine.ts","apps/api-fastify/src/modules/orders/orders.service.ts","apps/api-fastify/src/modules/replay.ts","apps/api-fastify/src/modules/tenant.ts","apps/api-fastify/src/modules/users/users.service.ts","apps/api-fastify/src/plugins/events.ts","apps/api-fastify/src/plugins/outbox.ts","apps/api-fastify/src/plugins/prisma.ts","apps/api-fastify/src/plugins/queue.ts","apps/api-fastify/src/plugins/redis.ts","apps/api-fastify/src/routes/health.ts","apps/api-fastify/src/routes/jobs.ts","apps/api-fastify/src/routes/orders.ts","apps/api-fastify/src/routes/realtime-stats.ts","apps/api-fastify/src/routes/sse.ts","apps/api-fastify/src/routes/users.ts","apps/api-fastify/src/routes/ws.ts","apps/api-fastify/src/server.ts","apps/api-fastify/src/types.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-fastify/test/orders.integration.test.ts","apps/api-fastify/test/outbox.concurrency.test.ts","apps/api-fastify/test/outbox.deadletter.test.ts","apps/api-fastify/test/realtime.command.test.ts","apps/api-fastify/test/realtime.replay.test.ts","apps/api-fastify/test/realtime.stats.test.ts","apps/api-fastify/test/realtime.subscription.test.ts","apps/api-fastify/test/realtime.tenant.test.ts","apps/api-fastify/tsconfig.json","apps/api-fastify/vitest.config.ts","apps/api-nestjs/.env.example","apps/api-nestjs/.gitignore","apps/api-nestjs/docker-compose.yml","apps/api-nestjs/nest-cli.json","apps/api-nestjs/package.json","apps/api-nestjs/pnpm-lock.yaml","apps/api-nestjs/prisma/migrations/20260608150500_init/migration.sql","apps/api-nestjs/prisma/migrations/20260705080000_outbox_dead_letter/migration.sql","apps/api-nestjs/prisma/migrations/20260818090000_outbox_replay_cursor/migration.sql","apps/api-nestjs/prisma/migrations/migration_lock.toml","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/prisma/seed.ts","apps/api-nestjs/src/app.module.ts","apps/api-nestjs/src/common/envelope.ts","apps/api-nestjs/src/common/tenant.decorator.ts","apps/api-nestjs/src/common/zod-validation.pipe.ts","apps/api-nestjs/src/create-app.ts","apps/api-nestjs/src/events/connection-registry.service.ts","apps/api-nestjs/src/events/event-bus.service.ts","apps/api-nestjs/src/events/events.gateway.ts","apps/api-nestjs/src/events/events.module.ts","apps/api-nestjs/src/events/fanout.service.ts","apps/api-nestjs/src/events/outbox-dispatcher.service.ts","apps/api-nestjs/src/events/realtime-stats.controller.ts","apps/api-nestjs/src/events/replay.service.ts","apps/api-nestjs/src/health/health.controller.ts","apps/api-nestjs/src/health/health.module.ts","apps/api-nestjs/src/main.ts","apps/api-nestjs/src/orders/orders.controller.ts","apps/api-nestjs/src/orders/orders.module.ts","apps/api-nestjs/src/orders/orders.service.ts","apps/api-nestjs/src/prisma/prisma.module.ts","apps/api-nestjs/src/prisma/prisma.service.ts","apps/api-nestjs/src/queue/jobs.controller.ts","apps/api-nestjs/src/queue/jobs.processor.ts","apps/api-nestjs/src/queue/queue.module.ts","apps/api-nestjs/src/queue/queue.types.ts","apps/api-nestjs/src/redis/redis.module.ts","apps/api-nestjs/src/sse/sse.controller.ts","apps/api-nestjs/src/sse/sse.module.ts","apps/api-nestjs/src/statemachine/index.ts","apps/api-nestjs/src/statemachine/order.machine.ts","apps/api-nestjs/src/statemachine/statemachine.engine.ts","apps/api-nestjs/src/statemachine/statemachine.types.ts","apps/api-nestjs/src/users/users.controller.ts","apps/api-nestjs/src/users/users.module.ts","apps/api-nestjs/src/users/users.service.ts","apps/api-nestjs/test/http.acceptance.test.ts","apps/api-nestjs/test/orders.integration.test.ts","apps/api-nestjs/test/outbox.concurrency.test.ts","apps/api-nestjs/test/outbox.deadletter.test.ts","apps/api-nestjs/test/realtime.command.test.ts","apps/api-nestjs/test/realtime.replay.test.ts","apps/api-nestjs/test/realtime.stats.test.ts","apps/api-nestjs/test/realtime.subscription.test.ts","apps/api-nestjs/test/realtime.tenant.test.ts","apps/api-nestjs/tsconfig.build.json","apps/api-nestjs/tsconfig.json","apps/api-nestjs/vitest.config.ts","apps/web/.env.example","apps/web/.gitignore","apps/web/components.json","apps/web/e2e/acceptance.spec.ts","apps/web/eslint.config.mjs","apps/web/next.config.ts","apps/web/package.json","apps/web/playwright.config.ts","apps/web/pnpm-lock.yaml","apps/web/postcss.config.js","apps/web/src/app/globals.css","apps/web/src/app/layout.tsx","apps/web/src/app/page.tsx","apps/web/src/components/EventFeed.tsx","apps/web/src/components/OrdersPanel.tsx","apps/web/src/components/RealtimeBar.tsx","apps/web/src/components/UsersPanel.tsx","apps/web/src/components/ui/badge.tsx","apps/web/src/components/ui/button.tsx","apps/web/src/components/ui/card.tsx","apps/web/src/components/ui/input.tsx","apps/web/src/components/ui/label.tsx","apps/web/src/components/ui/separator.tsx","apps/web/src/hooks/useRealtime.ts","apps/web/src/lib/api.ts","apps/web/src/lib/providers.tsx","apps/web/src/lib/types.ts","apps/web/src/lib/utils.ts","apps/web/src/store/realtime.ts","apps/web/src/store/useAppStore.ts","apps/web/tailwind.config.ts","apps/web/tsconfig.json","docs/README.md","docs/adr/0001-use-typescript-fullstack.md","docs/adr/0002-use-nextjs-app-router.md","docs/adr/0003-use-nestjs-with-fastify-adapter.md","docs/adr/0004-use-postgresql.md","docs/adr/0005-use-prisma.md","docs/adr/0006-realtime-sse-and-websocket.md","docs/adr/0007-use-bullmq-queue.md","docs/adr/0008-monorepo-pnpm-turborepo.md","docs/adr/0009-dual-backend-governance-parity.md","docs/adr/README.md","docs/domain-glossary.md","docs/domain/owner-matrix.md","docs/framework-migration.md","docs/governance-experience.md","docs/migration-playbook.md","docs/standards/api-standard.md","docs/standards/backend-standard.md","docs/standards/database-standard.md","docs/standards/frontend-standard.md","docs/standards/git-standard.md","docs/standards/naming-standard.md","docs/standards/review-standard.md","governance.registry.json","governance.registry.schema.json","package.json","packages/config/eslint/base.mjs","packages/config/package.json","packages/config/prettier/index.json","packages/config/tsconfig/base.json","packages/config/tsconfig/nextjs.json","packages/config/tsconfig/node.json","packages/contracts/package.json","packages/contracts/src/contracts.test.ts","packages/contracts/src/index.ts","packages/contracts/src/job.ts","packages/contracts/src/order.ts","packages/contracts/src/realtime-command.test.ts","packages/contracts/src/realtime-command.ts","packages/contracts/src/realtime-stats.ts","packages/contracts/src/realtime.ts","packages/contracts/src/replay.test.ts","packages/contracts/src/replay.ts","packages/contracts/src/statemachine.test.ts","packages/contracts/src/statemachine.ts","packages/contracts/src/subscription.test.ts","packages/contracts/src/subscription.ts","packages/contracts/src/tenant.ts","packages/contracts/src/user.ts","packages/contracts/tsconfig.json","pnpm-lock.yaml","pnpm-workspace.yaml","reports/baseline.json","scripts/check-contract-consumers.mjs","scripts/check-docs-truth.mjs","scripts/check-dual-backend-parity.mjs","scripts/check-fork-readiness.mjs","scripts/check-governance-docs.mjs","scripts/check-migrations.mjs","scripts/check-naming.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-schema-sync.mjs","scripts/check-statemachine-write-guard.mjs","scripts/check-ui-acceptance.mjs","scripts/check-validation-source.mjs","scripts/governance-report.mjs","scripts/lib/report-provenance.mjs","tsconfig.base.json","turbo.json"],"removed":[],"modified":[]}],"total_commits":0,"head_commit":{"id":"49e97bd63c64e1d0484db4acffd63d40ab27bbbe","message":"feat: implement governed device cloud V1\n","url":"https://gitea.g-hi.com/luoanwu/juhai-device-cloud/commit/49e97bd63c64e1d0484db4acffd63d40ab27bbbe","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-25T08:46:32-07:00","added":["apps/api-fastify/prisma/migrations/20260824163000_device_v1a/migration.sql","apps/api-fastify/prisma/migrations/20260825100000_device_v1b_activation/migration.sql","apps/api-fastify/prisma/migrations/20260825143000_device_v1b_transfer/migration.sql","apps/api-fastify/prisma/migrations/20260825150000_device_v1b_topology/migration.sql","apps/api-fastify/prisma/migrations/20260825162000_device_v1b_grant_revocation/migration.sql","apps/api-fastify/src/modules/device-v1a/device-v1a.service.ts","apps/api-fastify/src/modules/device-v1b/device-v1b.service.ts","apps/api-fastify/src/routes/device-v1a.ts","apps/api-fastify/src/routes/device-v1b.ts","apps/api-fastify/test/device-v1a.integration.test.ts","apps/api-fastify/test/device-v1b.integration.test.ts","apps/api-nestjs/prisma/migrations/20260824163000_device_v1a/migration.sql","apps/api-nestjs/prisma/migrations/20260825100000_device_v1b_activation/migration.sql","apps/api-nestjs/prisma/migrations/20260825143000_device_v1b_transfer/migration.sql","apps/api-nestjs/prisma/migrations/20260825150000_device_v1b_topology/migration.sql","apps/api-nestjs/prisma/migrations/20260825162000_device_v1b_grant_revocation/migration.sql","apps/api-nestjs/src/device-v1a/device-v1a.controller.ts","apps/api-nestjs/src/device-v1a/device-v1a.module.ts","apps/api-nestjs/src/device-v1a/device-v1a.service.ts","apps/api-nestjs/src/device-v1b/device-v1b.controller.ts","apps/api-nestjs/src/device-v1b/device-v1b.module.ts","apps/api-nestjs/src/device-v1b/device-v1b.service.ts","apps/api-nestjs/test/device-v1a.integration.test.ts","apps/api-nestjs/test/device-v1b.integration.test.ts","apps/web/src/components/DeviceV1aWorkspace.tsx","apps/web/src/components/DeviceV1bActivationWorkspace.tsx","docs/domain/customer-service-product-blueprint.md","docs/domain/device-cloud-blueprint.md","docs/domain/device-cloud-review.md","kernel.products.json","packages/contracts/src/device-v1a.test.ts","packages/contracts/src/device-v1a.ts","packages/contracts/src/device-v1b.test.ts","packages/contracts/src/device-v1b.ts","products/juhai.support/README.md","products/juhai.support/acceptance/juhai.support.case.acceptance.mjs","products/juhai.support/migrations/juhai.support.case/20260825090000_create_support_cases.sql","products/juhai.support/migrations/juhai.support.case/20260825091000_create_support_case_actions.sql","products/juhai.support/package.json","products/juhai.support/product.manifest.json","products/juhai.support/src/case-repository.ts","products/juhai.support/src/contracts.ts","products/juhai.support/src/fastify.ts","products/juhai.support/src/host.ts","products/juhai.support/src/index.ts","products/juhai.support/src/manifest.ts","products/juhai.support/src/nestjs.ts","products/juhai.support/src/tools.ts","products/juhai.support/src/web.tsx","products/juhai.support/test/os-host.runtime.test.ts","products/juhai.support/tsconfig.os-host.json","products/juhai.support/vitest.os-host.config.ts","reports/os-product-compat.latest.json","reports/os-product-runtime.latest.json","scripts/check-os-product-compat.mjs","scripts/check-os-product-runtime.mjs"],"removed":[],"modified":["CLAUDE.md","README.md","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/app.ts","apps/api-nestjs/package.json","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/src/app.module.ts","apps/api-nestjs/src/redis/redis.module.ts","apps/web/e2e/acceptance.spec.ts","apps/web/src/app/globals.css","apps/web/src/app/page.tsx","apps/web/src/components/EventFeed.tsx","apps/web/src/hooks/useRealtime.ts","apps/web/src/lib/api.ts","apps/web/src/lib/types.ts","docs/README.md","docs/domain-glossary.md","docs/domain/owner-matrix.md","docs/governance-experience.md","governance.registry.json","governance.registry.schema.json","package.json","packages/contracts/src/index.ts","packages/contracts/src/realtime.ts","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-docs-truth.mjs","scripts/check-migrations.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-statemachine-write-guard.mjs","scripts/check-ui-acceptance.mjs","scripts/governance-report.mjs"]},"repository":{"id":80,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhai-device-cloud","full_name":"luoanwu/juhai-device-cloud","description":"巨嗨设备云:永久设备身份、激活调拨、可信换板与授权治理","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":27,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-device-cloud/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-device-cloud","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-device-cloud","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-device-cloud.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-device-cloud.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-25T23:52:33+08:00","updated_at":"2026-08-25T23:52:50+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1787673172
|
1787673196
|
0
|
1787673170
|
1787673197
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23524
|
chore(governance): refresh clean static evidence
|
81
|
5
|
governance.yml
|
1
|
5
|
0
|
refs/heads/main
|
464b90ba5bf51536276468811aac396e51d66892
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"0000000000000000000000000000000000000000","after":"464b90ba5bf51536276468811aac396e51d66892","compare_url":"https://gitea.g-hi.com/","commits":[{"id":"464b90ba5bf51536276468811aac396e51d66892","message":"chore(governance): refresh clean static evidence\n","url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system/commit/464b90ba5bf51536276468811aac396e51d66892","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-25T17:47:04-07:00","added":[],"removed":[],"modified":["reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/os-product.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/service-contracts.latest.json","reports/validation-source.latest.json"]},{"id":"3f5170b91355e6726ead25e98deb98ea406508a8","message":"fix: close diagnosis and governance gaps\n","url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system/commit/3f5170b91355e6726ead25e98deb98ea406508a8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-25T17:09:26-07:00","added":["reports/service-contracts.latest.json"],"removed":[],"modified":[".github/workflows/governance.yml","CLAUDE.md","apps/api-fastify/src/modules/service-cases/service-cases.service.ts","apps/api-fastify/test/service-cases.integration.test.ts","apps/api-nestjs/src/service-cases/service-cases.service.ts","apps/api-nestjs/test/service-cases.integration.test.ts","apps/web/e2e/acceptance.spec.ts","apps/web/src/components/ServiceCaseWorkbench.tsx","docs/domain/service-case-blueprint.md","docs/governance-experience.md","package.json","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/os-product.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-os-product.mjs","scripts/check-service-contracts.mjs","scripts/check-ui-acceptance.mjs","scripts/governance-report.mjs"]},{"id":"92324df6f0d200c66af7c2f378b471888405b358","message":"feat: add governed juhai service product layer\n","url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system/commit/92324df6f0d200c66af7c2f378b471888405b358","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-25T08:56:28-07:00","added":["apps/api-fastify/prisma/migrations/20260824090000_service_case_p0/migration.sql","apps/api-fastify/prisma/migrations/20260824120000_service_operations/migration.sql","apps/api-fastify/prisma/migrations/20260824150000_os_tool_receipts/migration.sql","apps/api-fastify/prisma/migrations/20260824160000_os_product_activations/migration.sql","apps/api-fastify/src/modules/service-cases/service-cases.service.ts","apps/api-fastify/src/modules/service-operations/service-operations.service.ts","apps/api-fastify/src/plugins/os-activation.ts","apps/api-fastify/src/routes/service-cases.ts","apps/api-fastify/src/routes/service-operations.ts","apps/api-fastify/test/service-cases.integration.test.ts","apps/api-fastify/test/service-operations.integration.test.ts","apps/api-nestjs/prisma/migrations/20260824090000_service_case_p0/migration.sql","apps/api-nestjs/prisma/migrations/20260824120000_service_operations/migration.sql","apps/api-nestjs/prisma/migrations/20260824150000_os_tool_receipts/migration.sql","apps/api-nestjs/prisma/migrations/20260824160000_os_product_activations/migration.sql","apps/api-nestjs/src/service-cases/os-activation-dispatcher.service.ts","apps/api-nestjs/src/service-cases/service-cases.controller.ts","apps/api-nestjs/src/service-cases/service-cases.module.ts","apps/api-nestjs/src/service-cases/service-cases.service.ts","apps/api-nestjs/src/service-operations/service-operations.controller.ts","apps/api-nestjs/src/service-operations/service-operations.module.ts","apps/api-nestjs/src/service-operations/service-operations.service.ts","apps/api-nestjs/test/service-cases.integration.test.ts","apps/api-nestjs/test/service-operations.integration.test.ts","apps/web/src/app/icon.svg","apps/web/src/app/service/[token]/page.tsx","apps/web/src/components/ServiceCaseWorkbench.tsx","apps/web/src/components/ServiceOperationsPanels.tsx","artifacts/contracts/.gitkeep","artifacts/contracts/juhai-service-contracts-0.1.0.tgz","artifacts/contracts/juhai-service-contracts-0.2.0.tgz","artifacts/contracts/juhai-service-contracts-0.3.0.tgz","artifacts/contracts/juhai-service-contracts-0.4.0.tgz","artifacts/contracts/service-contracts.lock.json","artifacts/os-products/juhai-service-os-product-0.1.0.tgz","artifacts/os-products/juhai-service-os-product-0.2.0.tgz","artifacts/os-products/juhai-service-os-product.lock.json","docs/domain/digital-employee-os-product-blueprint.md","docs/domain/service-case-blueprint.md","docs/domain/service-operations-blueprint.md","os-products/juhai.service/README.md","os-products/juhai.service/acceptance/juhai.service.product.acceptance.acceptance.mjs","os-products/juhai.service/manifest.json","os-products/juhai.service/package.json","os-products/juhai.service/product.lock.json","os-products/juhai.service/src/contracts.ts","os-products/juhai.service/src/index.ts","os-products/juhai.service/src/manifest.ts","os-products/juhai.service/src/skills.ts","os-products/juhai.service/src/tools.ts","output/playwright/juhai-knowledge-center-final.png","output/playwright/juhai-knowledge-published-final.png","output/playwright/juhai-operations-dashboard-final.png","output/playwright/juhai-pilot-control-final.png","output/playwright/juhai-service-h5-390x844-before-acceptance.png","output/playwright/juhai-service-h5-390x844-completed.png","output/playwright/juhai-service-workbench-live-final.png","output/playwright/juhai-service-workbench-live.png","packages/contracts/src/digital-employee-os.ts","packages/contracts/src/service-case.test.ts","packages/contracts/src/service-case.ts","packages/contracts/src/service-operations.ts","packages/service-contracts/package.json","packages/service-contracts/src/digital-employee-os.ts","packages/service-contracts/src/index.test.ts","packages/service-contracts/src/index.ts","packages/service-contracts/src/service-case.ts","packages/service-contracts/src/service-operations.ts","packages/service-contracts/tsconfig.json","reports/os-product.latest.json","scripts/check-os-product.mjs","scripts/check-service-contracts.mjs","scripts/pack-os-product.mjs"],"removed":[],"modified":[".gitignore","CLAUDE.md","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/app.ts","apps/api-fastify/src/plugins/outbox.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/src/app.module.ts","apps/api-nestjs/src/events/outbox-dispatcher.service.ts","apps/api-nestjs/test/http.acceptance.test.ts","apps/web/e2e/acceptance.spec.ts","apps/web/next.config.ts","apps/web/src/app/globals.css","apps/web/src/app/layout.tsx","apps/web/src/app/page.tsx","apps/web/src/components/EventFeed.tsx","apps/web/src/hooks/useRealtime.ts","apps/web/src/lib/api.ts","apps/web/src/lib/types.ts","docs/domain-glossary.md","docs/domain/owner-matrix.md","docs/governance-experience.md","package.json","packages/contracts/package.json","packages/contracts/src/index.ts","packages/contracts/src/realtime.ts","pnpm-lock.yaml","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-dual-backend-parity.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-schema-sync.mjs","scripts/check-ui-acceptance.mjs","scripts/governance-report.mjs"]},{"id":"24e5dc292b0ac0acc47c0c900388cebb20cf6d07","message":"chore: refresh clean static evidence\n","url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system/commit/24e5dc292b0ac0acc47c0c900388cebb20cf6d07","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-03T21:01:59-07:00","added":[],"removed":[],"modified":["reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/validation-source.latest.json"]},{"id":"be316e46e829c58a7cf449d2a0d1f80de6986bf5","message":"chore: record migration evidence\n","url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system/commit/be316e46e829c58a7cf449d2a0d1f80de6986bf5","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-03T21:01:32-07:00","added":["reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json"],"removed":[],"modified":["CLAUDE.md","docs/framework-migration.md"]}],"total_commits":0,"head_commit":{"id":"464b90ba5bf51536276468811aac396e51d66892","message":"chore(governance): refresh clean static evidence\n","url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system/commit/464b90ba5bf51536276468811aac396e51d66892","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-25T17:47:04-07:00","added":[],"removed":[],"modified":["reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/os-product.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/service-contracts.latest.json","reports/validation-source.latest.json"]},"repository":{"id":81,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhai-after-sales-service-system","full_name":"luoanwu/juhai-after-sales-service-system","description":"巨嗨智服:受治理的 AI 售后服务系统","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":27,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-after-sales-service-system/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-after-sales-service-system","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-after-sales-service-system.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-26T08:47:15+08:00","updated_at":"2026-08-26T08:48:00+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1787705287
|
1787705295
|
0
|
1787705280
|
1787705295
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23526
|
feat: harden device cloud governance
|
80
|
5
|
governance.yml
|
2
|
5
|
0
|
refs/heads/main
|
7307924582aa9ace4042b51463833ebd9bc9d17e
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"49e97bd63c64e1d0484db4acffd63d40ab27bbbe","after":"7307924582aa9ace4042b51463833ebd9bc9d17e","compare_url":"https://gitea.g-hi.com/luoanwu/juhai-device-cloud/compare/49e97bd63c64e1d0484db4acffd63d40ab27bbbe...7307924582aa9ace4042b51463833ebd9bc9d17e","commits":[{"id":"7307924582aa9ace4042b51463833ebd9bc9d17e","message":"feat: harden device cloud governance\n","url":"https://gitea.g-hi.com/luoanwu/juhai-device-cloud/commit/7307924582aa9ace4042b51463833ebd9bc9d17e","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-25T17:19:11-07:00","added":["reports/ci-evidence.latest.json","reports/device-boundaries.latest.json","reports/evidence-current.latest.json","scripts/check-ci-evidence.mjs","scripts/check-device-boundaries.mjs","scripts/check-evidence-current.mjs"],"removed":[],"modified":[".github/pull_request_template.md",".github/workflows/governance.yml","CLAUDE.md","apps/api-fastify/src/modules/device-v1a/device-v1a.service.ts","apps/api-fastify/src/routes/device-v1a.ts","apps/api-fastify/test/device-v1a.integration.test.ts","apps/api-nestjs/src/device-v1a/device-v1a.service.ts","apps/api-nestjs/test/device-v1a.integration.test.ts","apps/web/e2e/acceptance.spec.ts","docs/standards/api-standard.md","governance.registry.json","governance.registry.schema.json","package.json","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/os-product-compat.latest.json","reports/os-product-runtime.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-docs-truth.mjs","scripts/check-fork-readiness.mjs","scripts/check-os-product-compat.mjs","scripts/check-os-product-runtime.mjs","scripts/governance-report.mjs","scripts/lib/report-provenance.mjs"]}],"total_commits":0,"head_commit":{"id":"7307924582aa9ace4042b51463833ebd9bc9d17e","message":"feat: harden device cloud governance\n","url":"https://gitea.g-hi.com/luoanwu/juhai-device-cloud/commit/7307924582aa9ace4042b51463833ebd9bc9d17e","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-25T17:19:11-07:00","added":["reports/ci-evidence.latest.json","reports/device-boundaries.latest.json","reports/evidence-current.latest.json","scripts/check-ci-evidence.mjs","scripts/check-device-boundaries.mjs","scripts/check-evidence-current.mjs"],"removed":[],"modified":[".github/pull_request_template.md",".github/workflows/governance.yml","CLAUDE.md","apps/api-fastify/src/modules/device-v1a/device-v1a.service.ts","apps/api-fastify/src/routes/device-v1a.ts","apps/api-fastify/test/device-v1a.integration.test.ts","apps/api-nestjs/src/device-v1a/device-v1a.service.ts","apps/api-nestjs/test/device-v1a.integration.test.ts","apps/web/e2e/acceptance.spec.ts","docs/standards/api-standard.md","governance.registry.json","governance.registry.schema.json","package.json","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/os-product-compat.latest.json","reports/os-product-runtime.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-docs-truth.mjs","scripts/check-fork-readiness.mjs","scripts/check-os-product-compat.mjs","scripts/check-os-product-runtime.mjs","scripts/governance-report.mjs","scripts/lib/report-provenance.mjs"]},"repository":{"id":80,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhai-device-cloud","full_name":"luoanwu/juhai-device-cloud","description":"巨嗨设备云:永久设备身份、激活调拨、可信换板与授权治理","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":776,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-device-cloud/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-device-cloud","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-device-cloud","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-device-cloud.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-device-cloud.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-25T23:52:33+08:00","updated_at":"2026-08-25T23:52:51+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1787706495
|
1787706585
|
0
|
1787706493
|
1787706586
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23527
|
feat: establish governed AI ticket system core
|
82
|
5
|
governance.yml
|
1
|
5
|
0
|
refs/heads/main
|
343e79d764ae566372808d0d922fcef7ca12a30e
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"0000000000000000000000000000000000000000","after":"343e79d764ae566372808d0d922fcef7ca12a30e","compare_url":"https://gitea.g-hi.com/","commits":[{"id":"343e79d764ae566372808d0d922fcef7ca12a30e","message":"feat: establish governed AI ticket system core\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/commit/343e79d764ae566372808d0d922fcef7ca12a30e","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-25T17:10:23-07:00","added":["apps/api-fastify/prisma/migrations/20260825170000_ticket_core/migration.sql","apps/api-fastify/src/modules/tickets/tickets.service.ts","apps/api-fastify/src/routes/tickets.ts","apps/api-fastify/test/tickets.integration.test.ts","apps/api-nestjs/prisma/migrations/20260825170000_ticket_core/migration.sql","apps/api-nestjs/src/tickets/tickets.controller.ts","apps/api-nestjs/src/tickets/tickets.module.ts","apps/api-nestjs/src/tickets/tickets.service.ts","apps/api-nestjs/test/tickets.integration.test.ts","apps/web/src/components/TicketsPanel.tsx","packages/contracts/src/ticket.ts","products/juhai.ai.ticket/README.md","products/juhai.ai.ticket/acceptance/juhai.ai.ticket.core.acceptance.mjs","products/juhai.ai.ticket/acceptance/juhai.ai.ticket.web.acceptance.ts","products/juhai.ai.ticket/kernel.products.entry.json","products/juhai.ai.ticket/manifest.ts","products/juhai.ai.ticket/migrations/juhai.ai.ticket.core/20260825183000_create_ticket_core.sql","products/juhai.ai.ticket/package.json","products/juhai.ai.ticket/src/contracts/runtime-contracts.ts","products/juhai.ai.ticket/src/extensions-web.ts","products/juhai.ai.ticket/src/extensions.ts","products/juhai.ai.ticket/src/fastify/ticket-plugin.ts","products/juhai.ai.ticket/src/index.ts","products/juhai.ai.ticket/src/nestjs/ticket.module.ts","products/juhai.ai.ticket/src/repositories/ticket-repository.ts","products/juhai.ai.ticket/src/skills/ticket-triage-skill.ts","products/juhai.ai.ticket/src/tools/ticket-tools.ts","products/juhai.ai.ticket/src/web.ts","products/juhai.ai.ticket/src/web/ticket-workspace.tsx","products/juhai.ai.ticket/tsconfig.build.json","products/juhai.ai.ticket/tsconfig.json","reports/transactional-write-chain.latest.json","scripts/check-transactional-write-chain.mjs"],"removed":[],"modified":[".github/workflows/governance.yml",".gitignore","CLAUDE.md","README.md","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/app.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/src/app.module.ts","apps/api-nestjs/test/http.acceptance.test.ts","apps/web/e2e/acceptance.spec.ts","apps/web/src/app/page.tsx","apps/web/src/components/EventFeed.tsx","apps/web/src/components/RealtimeBar.tsx","apps/web/src/hooks/useRealtime.ts","apps/web/src/lib/api.ts","apps/web/src/lib/types.ts","docs/domain/owner-matrix.md","docs/domain/ticket-system-blueprint.md","docs/governance-experience.md","governance.registry.json","governance.registry.schema.json","package.json","packages/contracts/src/contracts.test.ts","packages/contracts/src/index.ts","packages/contracts/src/realtime.ts","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-fork-readiness.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-ui-acceptance.mjs","scripts/governance-report.mjs","scripts/lib/report-provenance.mjs","turbo.json"]},{"id":"93598cc86c43b217c9b9b5dde7b8275bada3775b","message":"chore: refresh OS product blueprint reports\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/commit/93598cc86c43b217c9b9b5dde7b8275bada3775b","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-25T09:37:52-07:00","added":[],"removed":[],"modified":["reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},{"id":"5901fddaa4fb03678e2367fea9ed81797de20f0f","message":"docs: define Digital Employee OS ticket product layer\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/commit/5901fddaa4fb03678e2367fea9ed81797de20f0f","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-25T09:37:25-07:00","added":[],"removed":[],"modified":["README.md","docs/domain/owner-matrix.md","docs/domain/ticket-system-blueprint.md"]},{"id":"d5c3cef1b42519c622d95937f43d70be5b48edf3","message":"chore: refresh governance reports\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/commit/d5c3cef1b42519c622d95937f43d70be5b48edf3","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-25T09:31:10-07:00","added":[],"removed":[],"modified":["reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},{"id":"5a163aff14d43326f49ea9fe6876edfccaca2052","message":"docs: define standalone ticket system blueprint\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/commit/5a163aff14d43326f49ea9fe6876edfccaca2052","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-25T09:30:46-07:00","added":["docs/domain/ticket-system-blueprint.md"],"removed":[],"modified":["README.md","docs/README.md","docs/domain-glossary.md","docs/domain/owner-matrix.md"]}],"total_commits":0,"head_commit":{"id":"343e79d764ae566372808d0d922fcef7ca12a30e","message":"feat: establish governed AI ticket system core\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/commit/343e79d764ae566372808d0d922fcef7ca12a30e","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-25T17:10:23-07:00","added":["apps/api-fastify/prisma/migrations/20260825170000_ticket_core/migration.sql","apps/api-fastify/src/modules/tickets/tickets.service.ts","apps/api-fastify/src/routes/tickets.ts","apps/api-fastify/test/tickets.integration.test.ts","apps/api-nestjs/prisma/migrations/20260825170000_ticket_core/migration.sql","apps/api-nestjs/src/tickets/tickets.controller.ts","apps/api-nestjs/src/tickets/tickets.module.ts","apps/api-nestjs/src/tickets/tickets.service.ts","apps/api-nestjs/test/tickets.integration.test.ts","apps/web/src/components/TicketsPanel.tsx","packages/contracts/src/ticket.ts","products/juhai.ai.ticket/README.md","products/juhai.ai.ticket/acceptance/juhai.ai.ticket.core.acceptance.mjs","products/juhai.ai.ticket/acceptance/juhai.ai.ticket.web.acceptance.ts","products/juhai.ai.ticket/kernel.products.entry.json","products/juhai.ai.ticket/manifest.ts","products/juhai.ai.ticket/migrations/juhai.ai.ticket.core/20260825183000_create_ticket_core.sql","products/juhai.ai.ticket/package.json","products/juhai.ai.ticket/src/contracts/runtime-contracts.ts","products/juhai.ai.ticket/src/extensions-web.ts","products/juhai.ai.ticket/src/extensions.ts","products/juhai.ai.ticket/src/fastify/ticket-plugin.ts","products/juhai.ai.ticket/src/index.ts","products/juhai.ai.ticket/src/nestjs/ticket.module.ts","products/juhai.ai.ticket/src/repositories/ticket-repository.ts","products/juhai.ai.ticket/src/skills/ticket-triage-skill.ts","products/juhai.ai.ticket/src/tools/ticket-tools.ts","products/juhai.ai.ticket/src/web.ts","products/juhai.ai.ticket/src/web/ticket-workspace.tsx","products/juhai.ai.ticket/tsconfig.build.json","products/juhai.ai.ticket/tsconfig.json","reports/transactional-write-chain.latest.json","scripts/check-transactional-write-chain.mjs"],"removed":[],"modified":[".github/workflows/governance.yml",".gitignore","CLAUDE.md","README.md","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/app.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/src/app.module.ts","apps/api-nestjs/test/http.acceptance.test.ts","apps/web/e2e/acceptance.spec.ts","apps/web/src/app/page.tsx","apps/web/src/components/EventFeed.tsx","apps/web/src/components/RealtimeBar.tsx","apps/web/src/hooks/useRealtime.ts","apps/web/src/lib/api.ts","apps/web/src/lib/types.ts","docs/domain/owner-matrix.md","docs/domain/ticket-system-blueprint.md","docs/governance-experience.md","governance.registry.json","governance.registry.schema.json","package.json","packages/contracts/src/contracts.test.ts","packages/contracts/src/index.ts","packages/contracts/src/realtime.ts","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-fork-readiness.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-ui-acceptance.mjs","scripts/governance-report.mjs","scripts/lib/report-provenance.mjs","turbo.json"]},"repository":{"id":82,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhai-ai-work-order-system","full_name":"luoanwu/juhai-ai-work-order-system","description":"巨嗨 AI 工单系统:治理型工单核心与 Digital Employee OS 产品适配层","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":27,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-work-order-system/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-work-order-system","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-ai-work-order-system.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-26T09:08:57+08:00","updated_at":"2026-08-26T09:12:24+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1787706746
|
1787706776
|
0
|
1787706744
|
1787706777
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23529
|
feat(knowledge): add governed hybrid evidence retr feat(knowledge): add governed hybrid evidence retrieval...
|
84
|
5
|
governance.yml
|
1
|
5
|
0
|
refs/heads/main
|
f2a674de3343d5031dee856edd261194709b727f
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"0000000000000000000000000000000000000000","after":"f2a674de3343d5031dee856edd261194709b727f","compare_url":"https://gitea.g-hi.com/","commits":[{"id":"f2a674de3343d5031dee856edd261194709b727f","message":"feat(knowledge): add governed hybrid evidence retrieval\n","url":"https://gitea.g-hi.com/luoanwu/juhai-knowledge-cloud/commit/f2a674de3343d5031dee856edd261194709b727f","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-25T18:39:32-07:00","added":["apps/api-fastify/prisma/migrations/20260826010000_add_knowledge_hybrid_retrieval/migration.sql","apps/api-nestjs/prisma/migrations/20260826010000_add_knowledge_hybrid_retrieval/migration.sql","packages/contracts/src/knowledge-retrieval.test.ts","packages/knowledge-retrieval/package.json","packages/knowledge-retrieval/src/index.test.ts","packages/knowledge-retrieval/src/index.ts","packages/knowledge-retrieval/tsconfig.json","products/juhai.knowledgecloud/migrations/juhai.knowledgecloud.core/20260826030000_add_hybrid_evidence_retrieval.sql","products/juhai.knowledgecloud/src/retrieval.ts"],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/package.json","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/modules/knowledge/knowledge.service.ts","apps/api-fastify/src/routes/knowledge.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-fastify/test/knowledge.integration.test.ts","apps/api-nestjs/package.json","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/src/knowledge/knowledge.controller.ts","apps/api-nestjs/src/knowledge/knowledge.service.ts","apps/api-nestjs/test/http.acceptance.test.ts","apps/api-nestjs/test/knowledge.integration.test.ts","docs/domain/knowledge-cloud-blueprint.md","docs/domain/owner-matrix.md","kernel.products.json","packages/contracts/src/knowledge.ts","pnpm-lock.yaml","products/juhai.knowledgecloud/acceptance/juhai.knowledgecloud.closed-loop.acceptance.mjs","products/juhai.knowledgecloud/package.json","products/juhai.knowledgecloud/src/fastify.ts","products/juhai.knowledgecloud/src/index.ts","products/juhai.knowledgecloud/src/nestjs.ts","products/juhai.knowledgecloud/src/repository.ts","products/juhai.knowledgecloud/src/tools.ts","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/os-product-live.latest.json","reports/os-product.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json","scripts/check-os-product.mjs"]},{"id":"e60d772bc7fba6aba92ee6becbeb1b68b2b28849","message":"feat: establish governed knowledge cloud product\n","url":"https://gitea.g-hi.com/luoanwu/juhai-knowledge-cloud/commit/e60d772bc7fba6aba92ee6becbeb1b68b2b28849","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-25T17:06:03-07:00","added":["apps/api-fastify/prisma/migrations/20260825180000_add_knowledge_cloud_core/migration.sql","apps/api-fastify/src/modules/knowledge/knowledge.service.ts","apps/api-fastify/src/routes/knowledge.ts","apps/api-fastify/test/knowledge.integration.test.ts","apps/api-nestjs/prisma/migrations/20260825180000_add_knowledge_cloud_core/migration.sql","apps/api-nestjs/src/knowledge/knowledge.controller.ts","apps/api-nestjs/src/knowledge/knowledge.module.ts","apps/api-nestjs/src/knowledge/knowledge.service.ts","apps/api-nestjs/test/knowledge.integration.test.ts","apps/web/src/features/knowledge/api/knowledge-api.ts","apps/web/src/features/knowledge/components/KnowledgeWorkbench.tsx","apps/web/src/features/knowledge/hooks/use-knowledge.ts","docs/adr/0010-os-loadable-enterprise-knowledge-product.md","docs/domain/knowledge-cloud-blueprint.md","kernel.products.json","packages/contracts/src/knowledge.ts","products/juhai.knowledgecloud/README.md","products/juhai.knowledgecloud/acceptance/juhai.knowledgecloud.closed-loop.acceptance.mjs","products/juhai.knowledgecloud/migrations/juhai.knowledgecloud.core/20260825190000_create_knowledge_cloud.sql","products/juhai.knowledgecloud/package.json","products/juhai.knowledgecloud/product.manifest.json","products/juhai.knowledgecloud/src/access.ts","products/juhai.knowledgecloud/src/contracts.ts","products/juhai.knowledgecloud/src/fastify.ts","products/juhai.knowledgecloud/src/index.ts","products/juhai.knowledgecloud/src/manifest.ts","products/juhai.knowledgecloud/src/nestjs.ts","products/juhai.knowledgecloud/src/repository.ts","products/juhai.knowledgecloud/src/tools.ts","products/juhai.knowledgecloud/src/web.tsx","reports/os-product-live.latest.json","reports/os-product.latest.json","scripts/check-os-product.mjs"],"removed":[],"modified":["CLAUDE.md","README.md","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/app.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/src/app.module.ts","apps/api-nestjs/test/http.acceptance.test.ts","apps/web/e2e/acceptance.spec.ts","apps/web/src/app/page.tsx","apps/web/src/components/EventFeed.tsx","apps/web/src/hooks/useRealtime.ts","docs/README.md","docs/adr/0009-dual-backend-governance-parity.md","docs/adr/README.md","docs/domain-glossary.md","docs/domain/owner-matrix.md","docs/framework-migration.md","governance.registry.json","package.json","packages/contracts/src/contracts.test.ts","packages/contracts/src/index.ts","packages/contracts/src/realtime.ts","packages/contracts/src/statemachine.test.ts","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-docs-truth.mjs","scripts/check-migrations.mjs","scripts/check-ui-acceptance.mjs","scripts/governance-report.mjs"]},{"id":"64bf2720bce803978337aeabbadf1a88d732fa43","message":"chore: bind static governance evidence\n","url":"https://gitea.g-hi.com/luoanwu/juhai-knowledge-cloud/commit/64bf2720bce803978337aeabbadf1a88d732fa43","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-25T08:18:01-07:00","added":[],"removed":[],"modified":["reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},{"id":"7322783bb7233c3c586f15cb33c7963f0ba605ce","message":"docs: record local framework acceptance\n","url":"https://gitea.g-hi.com/luoanwu/juhai-knowledge-cloud/commit/7322783bb7233c3c586f15cb33c7963f0ba605ce","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-25T08:17:40-07:00","added":["reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json"],"removed":[],"modified":["CLAUDE.md","docs/framework-migration.md"]},{"id":"512b11bc5047f7776f3dde09b0f7344982afd354","message":"chore: migrate governed framework to juhai knowledge cloud\n","url":"https://gitea.g-hi.com/luoanwu/juhai-knowledge-cloud/commit/512b11bc5047f7776f3dde09b0f7344982afd354","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-25T08:08:02-07:00","added":[".claude/agents/acceptance-runner.md",".claude/agents/module-blueprint.md",".claude/launch.json",".claude/skills/business-module-intake/SKILL.md",".claude/skills/frontend-api-react/SKILL.md",".claude/skills/frontend-view-react/SKILL.md",".claude/skills/frontend-view-react/references/view-templates.md",".claude/skills/fullstack-7layer-react/SKILL.md",".claude/skills/fullstack-7layer-react/references/fullstack-react-templates.md",".claude/skills/zustand-store/SKILL.md",".github/pull_request_template.md",".github/workflows/governance.yml",".gitignore","AGENTS.md","CLAUDE.md","README.md","apps/api-fastify/.env.example","apps/api-fastify/.gitignore","apps/api-fastify/package.json","apps/api-fastify/pnpm-lock.yaml","apps/api-fastify/prisma/migrations/20260608150500_init/migration.sql","apps/api-fastify/prisma/migrations/20260705080000_outbox_dead_letter/migration.sql","apps/api-fastify/prisma/migrations/20260818090000_outbox_replay_cursor/migration.sql","apps/api-fastify/prisma/migrations/migration_lock.toml","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/app.ts","apps/api-fastify/src/lib/orderMachine.ts","apps/api-fastify/src/lib/statemachine.ts","apps/api-fastify/src/modules/orders/orders.service.ts","apps/api-fastify/src/modules/replay.ts","apps/api-fastify/src/modules/tenant.ts","apps/api-fastify/src/modules/users/users.service.ts","apps/api-fastify/src/plugins/events.ts","apps/api-fastify/src/plugins/outbox.ts","apps/api-fastify/src/plugins/prisma.ts","apps/api-fastify/src/plugins/queue.ts","apps/api-fastify/src/plugins/redis.ts","apps/api-fastify/src/routes/health.ts","apps/api-fastify/src/routes/jobs.ts","apps/api-fastify/src/routes/orders.ts","apps/api-fastify/src/routes/realtime-stats.ts","apps/api-fastify/src/routes/sse.ts","apps/api-fastify/src/routes/users.ts","apps/api-fastify/src/routes/ws.ts","apps/api-fastify/src/server.ts","apps/api-fastify/src/types.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-fastify/test/orders.integration.test.ts","apps/api-fastify/test/outbox.concurrency.test.ts","apps/api-fastify/test/outbox.deadletter.test.ts","apps/api-fastify/test/realtime.command.test.ts","apps/api-fastify/test/realtime.replay.test.ts","apps/api-fastify/test/realtime.stats.test.ts","apps/api-fastify/test/realtime.subscription.test.ts","apps/api-fastify/test/realtime.tenant.test.ts","apps/api-fastify/tsconfig.json","apps/api-fastify/vitest.config.ts","apps/api-nestjs/.env.example","apps/api-nestjs/.gitignore","apps/api-nestjs/docker-compose.yml","apps/api-nestjs/nest-cli.json","apps/api-nestjs/package.json","apps/api-nestjs/pnpm-lock.yaml","apps/api-nestjs/prisma/migrations/20260608150500_init/migration.sql","apps/api-nestjs/prisma/migrations/20260705080000_outbox_dead_letter/migration.sql","apps/api-nestjs/prisma/migrations/20260818090000_outbox_replay_cursor/migration.sql","apps/api-nestjs/prisma/migrations/migration_lock.toml","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/prisma/seed.ts","apps/api-nestjs/src/app.module.ts","apps/api-nestjs/src/common/envelope.ts","apps/api-nestjs/src/common/tenant.decorator.ts","apps/api-nestjs/src/common/zod-validation.pipe.ts","apps/api-nestjs/src/create-app.ts","apps/api-nestjs/src/events/connection-registry.service.ts","apps/api-nestjs/src/events/event-bus.service.ts","apps/api-nestjs/src/events/events.gateway.ts","apps/api-nestjs/src/events/events.module.ts","apps/api-nestjs/src/events/fanout.service.ts","apps/api-nestjs/src/events/outbox-dispatcher.service.ts","apps/api-nestjs/src/events/realtime-stats.controller.ts","apps/api-nestjs/src/events/replay.service.ts","apps/api-nestjs/src/health/health.controller.ts","apps/api-nestjs/src/health/health.module.ts","apps/api-nestjs/src/main.ts","apps/api-nestjs/src/orders/orders.controller.ts","apps/api-nestjs/src/orders/orders.module.ts","apps/api-nestjs/src/orders/orders.service.ts","apps/api-nestjs/src/prisma/prisma.module.ts","apps/api-nestjs/src/prisma/prisma.service.ts","apps/api-nestjs/src/queue/jobs.controller.ts","apps/api-nestjs/src/queue/jobs.processor.ts","apps/api-nestjs/src/queue/queue.module.ts","apps/api-nestjs/src/queue/queue.types.ts","apps/api-nestjs/src/redis/redis.module.ts","apps/api-nestjs/src/sse/sse.controller.ts","apps/api-nestjs/src/sse/sse.module.ts","apps/api-nestjs/src/statemachine/index.ts","apps/api-nestjs/src/statemachine/order.machine.ts","apps/api-nestjs/src/statemachine/statemachine.engine.ts","apps/api-nestjs/src/statemachine/statemachine.types.ts","apps/api-nestjs/src/users/users.controller.ts","apps/api-nestjs/src/users/users.module.ts","apps/api-nestjs/src/users/users.service.ts","apps/api-nestjs/test/http.acceptance.test.ts","apps/api-nestjs/test/orders.integration.test.ts","apps/api-nestjs/test/outbox.concurrency.test.ts","apps/api-nestjs/test/outbox.deadletter.test.ts","apps/api-nestjs/test/realtime.command.test.ts","apps/api-nestjs/test/realtime.replay.test.ts","apps/api-nestjs/test/realtime.stats.test.ts","apps/api-nestjs/test/realtime.subscription.test.ts","apps/api-nestjs/test/realtime.tenant.test.ts","apps/api-nestjs/tsconfig.build.json","apps/api-nestjs/tsconfig.json","apps/api-nestjs/vitest.config.ts","apps/web/.env.example","apps/web/.gitignore","apps/web/components.json","apps/web/e2e/acceptance.spec.ts","apps/web/eslint.config.mjs","apps/web/next.config.ts","apps/web/package.json","apps/web/playwright.config.ts","apps/web/pnpm-lock.yaml","apps/web/postcss.config.js","apps/web/src/app/globals.css","apps/web/src/app/layout.tsx","apps/web/src/app/page.tsx","apps/web/src/components/EventFeed.tsx","apps/web/src/components/OrdersPanel.tsx","apps/web/src/components/RealtimeBar.tsx","apps/web/src/components/UsersPanel.tsx","apps/web/src/components/ui/badge.tsx","apps/web/src/components/ui/button.tsx","apps/web/src/components/ui/card.tsx","apps/web/src/components/ui/input.tsx","apps/web/src/components/ui/label.tsx","apps/web/src/components/ui/separator.tsx","apps/web/src/hooks/useRealtime.ts","apps/web/src/lib/api.ts","apps/web/src/lib/providers.tsx","apps/web/src/lib/types.ts","apps/web/src/lib/utils.ts","apps/web/src/store/realtime.ts","apps/web/src/store/useAppStore.ts","apps/web/tailwind.config.ts","apps/web/tsconfig.json","docs/README.md","docs/adr/0001-use-typescript-fullstack.md","docs/adr/0002-use-nextjs-app-router.md","docs/adr/0003-use-nestjs-with-fastify-adapter.md","docs/adr/0004-use-postgresql.md","docs/adr/0005-use-prisma.md","docs/adr/0006-realtime-sse-and-websocket.md","docs/adr/0007-use-bullmq-queue.md","docs/adr/0008-monorepo-pnpm-turborepo.md","docs/adr/0009-dual-backend-governance-parity.md","docs/adr/README.md","docs/domain-glossary.md","docs/domain/owner-matrix.md","docs/framework-migration.md","docs/governance-experience.md","docs/migration-playbook.md","docs/standards/api-standard.md","docs/standards/backend-standard.md","docs/standards/database-standard.md","docs/standards/frontend-standard.md","docs/standards/git-standard.md","docs/standards/naming-standard.md","docs/standards/review-standard.md","governance.registry.json","governance.registry.schema.json","package.json","packages/config/eslint/base.mjs","packages/config/package.json","packages/config/prettier/index.json","packages/config/tsconfig/base.json","packages/config/tsconfig/nextjs.json","packages/config/tsconfig/node.json","packages/contracts/package.json","packages/contracts/src/contracts.test.ts","packages/contracts/src/index.ts","packages/contracts/src/job.ts","packages/contracts/src/order.ts","packages/contracts/src/realtime-command.test.ts","packages/contracts/src/realtime-command.ts","packages/contracts/src/realtime-stats.ts","packages/contracts/src/realtime.ts","packages/contracts/src/replay.test.ts","packages/contracts/src/replay.ts","packages/contracts/src/statemachine.test.ts","packages/contracts/src/statemachine.ts","packages/contracts/src/subscription.test.ts","packages/contracts/src/subscription.ts","packages/contracts/src/tenant.ts","packages/contracts/src/user.ts","packages/contracts/tsconfig.json","pnpm-lock.yaml","pnpm-workspace.yaml","reports/baseline.json","scripts/check-contract-consumers.mjs","scripts/check-docs-truth.mjs","scripts/check-dual-backend-parity.mjs","scripts/check-fork-readiness.mjs","scripts/check-governance-docs.mjs","scripts/check-migrations.mjs","scripts/check-naming.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-schema-sync.mjs","scripts/check-statemachine-write-guard.mjs","scripts/check-ui-acceptance.mjs","scripts/check-validation-source.mjs","scripts/governance-report.mjs","scripts/lib/report-provenance.mjs","tsconfig.base.json","turbo.json"],"removed":[],"modified":[]}],"total_commits":0,"head_commit":{"id":"f2a674de3343d5031dee856edd261194709b727f","message":"feat(knowledge): add governed hybrid evidence retrieval\n","url":"https://gitea.g-hi.com/luoanwu/juhai-knowledge-cloud/commit/f2a674de3343d5031dee856edd261194709b727f","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-25T18:39:32-07:00","added":["apps/api-fastify/prisma/migrations/20260826010000_add_knowledge_hybrid_retrieval/migration.sql","apps/api-nestjs/prisma/migrations/20260826010000_add_knowledge_hybrid_retrieval/migration.sql","packages/contracts/src/knowledge-retrieval.test.ts","packages/knowledge-retrieval/package.json","packages/knowledge-retrieval/src/index.test.ts","packages/knowledge-retrieval/src/index.ts","packages/knowledge-retrieval/tsconfig.json","products/juhai.knowledgecloud/migrations/juhai.knowledgecloud.core/20260826030000_add_hybrid_evidence_retrieval.sql","products/juhai.knowledgecloud/src/retrieval.ts"],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/package.json","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/modules/knowledge/knowledge.service.ts","apps/api-fastify/src/routes/knowledge.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-fastify/test/knowledge.integration.test.ts","apps/api-nestjs/package.json","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/src/knowledge/knowledge.controller.ts","apps/api-nestjs/src/knowledge/knowledge.service.ts","apps/api-nestjs/test/http.acceptance.test.ts","apps/api-nestjs/test/knowledge.integration.test.ts","docs/domain/knowledge-cloud-blueprint.md","docs/domain/owner-matrix.md","kernel.products.json","packages/contracts/src/knowledge.ts","pnpm-lock.yaml","products/juhai.knowledgecloud/acceptance/juhai.knowledgecloud.closed-loop.acceptance.mjs","products/juhai.knowledgecloud/package.json","products/juhai.knowledgecloud/src/fastify.ts","products/juhai.knowledgecloud/src/index.ts","products/juhai.knowledgecloud/src/nestjs.ts","products/juhai.knowledgecloud/src/repository.ts","products/juhai.knowledgecloud/src/tools.ts","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/os-product-live.latest.json","reports/os-product.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json","scripts/check-os-product.mjs"]},"repository":{"id":84,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhai-knowledge-cloud","full_name":"luoanwu/juhai-knowledge-cloud","description":"巨嗨知识云:受治理的知识唯一真源与混合证据检索","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":27,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-knowledge-cloud/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-knowledge-cloud","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-knowledge-cloud","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-knowledge-cloud.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-knowledge-cloud.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-26T09:45:53+08:00","updated_at":"2026-08-26T09:47:05+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1787708896
|
1787708917
|
0
|
1787708825
|
1787708918
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23532
|
chore(governance): synchronize agent adapters
|
81
|
5
|
governance.yml
|
3
|
5
|
0
|
refs/heads/main
|
f7f15c92e83a6df0de98d1d5df4dfdd9b63cd284
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"ce807fe941d01cc4a4a399c474be857407d4aed9","after":"f7f15c92e83a6df0de98d1d5df4dfdd9b63cd284","compare_url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system/compare/ce807fe941d01cc4a4a399c474be857407d4aed9...f7f15c92e83a6df0de98d1d5df4dfdd9b63cd284","commits":[{"id":"f7f15c92e83a6df0de98d1d5df4dfdd9b63cd284","message":"chore(governance): synchronize agent adapters\n","url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system/commit/f7f15c92e83a6df0de98d1d5df4dfdd9b63cd284","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-25T18:51:53-07:00","added":[".agents/skills/business-module-intake/SKILL.md",".agents/skills/frontend-api-react/SKILL.md",".agents/skills/frontend-view-react/SKILL.md",".agents/skills/frontend-view-react/references/view-templates.md",".agents/skills/fullstack-7layer-react/SKILL.md",".agents/skills/fullstack-7layer-react/references/fullstack-react-templates.md",".agents/skills/zustand-store/SKILL.md","reports/agent-adapters.latest.json","scripts/check-agent-adapters.mjs"],"removed":[],"modified":["CLAUDE.md","docs/governance-experience.md","package.json","reports/auth-source.latest.json","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/os-product.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/service-contracts.latest.json","reports/validation-source.latest.json","scripts/governance-report.mjs"]}],"total_commits":0,"head_commit":{"id":"f7f15c92e83a6df0de98d1d5df4dfdd9b63cd284","message":"chore(governance): synchronize agent adapters\n","url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system/commit/f7f15c92e83a6df0de98d1d5df4dfdd9b63cd284","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-25T18:51:53-07:00","added":[".agents/skills/business-module-intake/SKILL.md",".agents/skills/frontend-api-react/SKILL.md",".agents/skills/frontend-view-react/SKILL.md",".agents/skills/frontend-view-react/references/view-templates.md",".agents/skills/fullstack-7layer-react/SKILL.md",".agents/skills/fullstack-7layer-react/references/fullstack-react-templates.md",".agents/skills/zustand-store/SKILL.md","reports/agent-adapters.latest.json","scripts/check-agent-adapters.mjs"],"removed":[],"modified":["CLAUDE.md","docs/governance-experience.md","package.json","reports/auth-source.latest.json","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/os-product.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/service-contracts.latest.json","reports/validation-source.latest.json","scripts/governance-report.mjs"]},"repository":{"id":81,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhai-after-sales-service-system","full_name":"luoanwu/juhai-after-sales-service-system","description":"巨嗨智服:受治理的 AI 售后服务系统","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":2061,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-after-sales-service-system/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-after-sales-service-system","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-after-sales-service-system.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-26T08:47:15+08:00","updated_at":"2026-08-26T09:47:20+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1787709144
|
1787709152
|
0
|
1787709129
|
1787709153
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23534
|
feat(operations): govern event recovery and activa feat(operations): govern event recovery and activation leases...
|
81
|
5
|
governance.yml
|
5
|
5
|
0
|
refs/heads/main
|
fbedaf6d0398693dc8466b4b72b6265d2397d93c
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"158a8d0a3ccc575be23117643ac664ec1b6f73dc","after":"fbedaf6d0398693dc8466b4b72b6265d2397d93c","compare_url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system/compare/158a8d0a3ccc575be23117643ac664ec1b6f73dc...fbedaf6d0398693dc8466b4b72b6265d2397d93c","commits":[{"id":"fbedaf6d0398693dc8466b4b72b6265d2397d93c","message":"feat(operations): govern event recovery and activation leases\n","url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system/commit/fbedaf6d0398693dc8466b4b72b6265d2397d93c","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-25T19:30:17-07:00","added":["apps/api-fastify/prisma/migrations/20260825210000_event_delivery_operations/migration.sql","apps/api-fastify/src/modules/service-operations/event-delivery.service.ts","apps/api-nestjs/prisma/migrations/20260825210000_event_delivery_operations/migration.sql","apps/api-nestjs/src/service-operations/event-delivery.service.ts","apps/web/src/features/service-operations/api/event-delivery-api.ts","apps/web/src/features/service-operations/components/EventDeliveryOperations.tsx","apps/web/src/features/service-operations/hooks/use-event-delivery.ts","packages/contracts/src/event-delivery.ts"],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/plugins/os-activation.ts","apps/api-fastify/src/routes/service-operations.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-fastify/test/service-cases.integration.test.ts","apps/api-fastify/test/service-operations.integration.test.ts","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/src/service-cases/os-activation-dispatcher.service.ts","apps/api-nestjs/src/service-operations/service-operations.controller.ts","apps/api-nestjs/src/service-operations/service-operations.module.ts","apps/api-nestjs/test/http.acceptance.test.ts","apps/api-nestjs/test/service-cases.integration.test.ts","apps/api-nestjs/test/service-operations.integration.test.ts","apps/web/e2e/acceptance.spec.ts","apps/web/src/components/ServiceOperationsPanels.tsx","apps/web/src/lib/types.ts","docs/domain-glossary.md","docs/domain/business-logic-map.md","docs/domain/owner-matrix.md","docs/domain/service-operations-blueprint.md","docs/governance-experience.md","packages/contracts/src/auth.test.ts","packages/contracts/src/auth.ts","packages/contracts/src/contracts.test.ts","packages/contracts/src/index.ts","reports/agent-adapters.latest.json","reports/auth-source.latest.json","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/os-product.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/service-contracts.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-auth-source.mjs","scripts/check-dual-backend-parity.mjs","scripts/governance-report.mjs"]}],"total_commits":0,"head_commit":{"id":"fbedaf6d0398693dc8466b4b72b6265d2397d93c","message":"feat(operations): govern event recovery and activation leases\n","url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system/commit/fbedaf6d0398693dc8466b4b72b6265d2397d93c","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-25T19:30:17-07:00","added":["apps/api-fastify/prisma/migrations/20260825210000_event_delivery_operations/migration.sql","apps/api-fastify/src/modules/service-operations/event-delivery.service.ts","apps/api-nestjs/prisma/migrations/20260825210000_event_delivery_operations/migration.sql","apps/api-nestjs/src/service-operations/event-delivery.service.ts","apps/web/src/features/service-operations/api/event-delivery-api.ts","apps/web/src/features/service-operations/components/EventDeliveryOperations.tsx","apps/web/src/features/service-operations/hooks/use-event-delivery.ts","packages/contracts/src/event-delivery.ts"],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/plugins/os-activation.ts","apps/api-fastify/src/routes/service-operations.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-fastify/test/service-cases.integration.test.ts","apps/api-fastify/test/service-operations.integration.test.ts","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/src/service-cases/os-activation-dispatcher.service.ts","apps/api-nestjs/src/service-operations/service-operations.controller.ts","apps/api-nestjs/src/service-operations/service-operations.module.ts","apps/api-nestjs/test/http.acceptance.test.ts","apps/api-nestjs/test/service-cases.integration.test.ts","apps/api-nestjs/test/service-operations.integration.test.ts","apps/web/e2e/acceptance.spec.ts","apps/web/src/components/ServiceOperationsPanels.tsx","apps/web/src/lib/types.ts","docs/domain-glossary.md","docs/domain/business-logic-map.md","docs/domain/owner-matrix.md","docs/domain/service-operations-blueprint.md","docs/governance-experience.md","packages/contracts/src/auth.test.ts","packages/contracts/src/auth.ts","packages/contracts/src/contracts.test.ts","packages/contracts/src/index.ts","reports/agent-adapters.latest.json","reports/auth-source.latest.json","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/os-product.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/service-contracts.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-auth-source.mjs","scripts/check-dual-backend-parity.mjs","scripts/governance-report.mjs"]},"repository":{"id":81,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhai-after-sales-service-system","full_name":"luoanwu/juhai-after-sales-service-system","description":"巨嗨智服:受治理的 AI 售后服务系统","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":2236,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-after-sales-service-system/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-after-sales-service-system","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-after-sales-service-system.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-26T08:47:15+08:00","updated_at":"2026-08-26T10:07:46+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1787712441
|
1787712471
|
0
|
1787711431
|
1787712472
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23535
|
test(governance): close dual-backend runtime blind test(governance): close dual-backend runtime blind spots...
|
81
|
5
|
governance.yml
|
6
|
5
|
0
|
refs/heads/main
|
3d56a9a4fb9cccedf11cfdb53a470fa7f29e94c7
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"fbedaf6d0398693dc8466b4b72b6265d2397d93c","after":"3d56a9a4fb9cccedf11cfdb53a470fa7f29e94c7","compare_url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system/compare/fbedaf6d0398693dc8466b4b72b6265d2397d93c...3d56a9a4fb9cccedf11cfdb53a470fa7f29e94c7","commits":[{"id":"3d56a9a4fb9cccedf11cfdb53a470fa7f29e94c7","message":"test(governance): close dual-backend runtime blind spots\n","url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system/commit/3d56a9a4fb9cccedf11cfdb53a470fa7f29e94c7","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-25T20:18:54-07:00","added":["apps/api-nestjs/test/backend-parity.acceptance.test.ts","apps/api-nestjs/test/health-degraded.acceptance.test.ts","apps/api-nestjs/test/job-failure.acceptance.test.ts"],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/src/routes/sse.ts","apps/api-fastify/src/routes/users.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-fastify/test/realtime.tenant.test.ts","apps/api-nestjs/src/users/users.service.ts","apps/api-nestjs/test/http.acceptance.test.ts","apps/web/e2e/acceptance.spec.ts","apps/web/next.config.ts","apps/web/src/app/page.tsx","apps/web/src/hooks/useRealtime.ts","docs/domain/business-logic-map.md","docs/governance-experience.md","packages/contracts/src/user.ts","reports/agent-adapters.latest.json","reports/auth-source.latest.json","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/os-product.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/service-contracts.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-dual-backend-parity.mjs","scripts/check-ui-acceptance.mjs"]}],"total_commits":0,"head_commit":{"id":"3d56a9a4fb9cccedf11cfdb53a470fa7f29e94c7","message":"test(governance): close dual-backend runtime blind spots\n","url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system/commit/3d56a9a4fb9cccedf11cfdb53a470fa7f29e94c7","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-25T20:18:54-07:00","added":["apps/api-nestjs/test/backend-parity.acceptance.test.ts","apps/api-nestjs/test/health-degraded.acceptance.test.ts","apps/api-nestjs/test/job-failure.acceptance.test.ts"],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/src/routes/sse.ts","apps/api-fastify/src/routes/users.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-fastify/test/realtime.tenant.test.ts","apps/api-nestjs/src/users/users.service.ts","apps/api-nestjs/test/http.acceptance.test.ts","apps/web/e2e/acceptance.spec.ts","apps/web/next.config.ts","apps/web/src/app/page.tsx","apps/web/src/hooks/useRealtime.ts","docs/domain/business-logic-map.md","docs/governance-experience.md","packages/contracts/src/user.ts","reports/agent-adapters.latest.json","reports/auth-source.latest.json","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/os-product.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/service-contracts.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-dual-backend-parity.mjs","scripts/check-ui-acceptance.mjs"]},"repository":{"id":81,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhai-after-sales-service-system","full_name":"luoanwu/juhai-after-sales-service-system","description":"巨嗨智服:受治理的 AI 售后服务系统","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":2395,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-after-sales-service-system/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-after-sales-service-system","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-after-sales-service-system.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-26T08:47:15+08:00","updated_at":"2026-08-26T10:30:31+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1787714350
|
1787714358
|
0
|
1787714348
|
1787714358
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23536
|
chore(reports): 刷新 OS 产品验收证据
|
54
|
5
|
governance.yml
|
12
|
5
|
0
|
refs/heads/main
|
53991090b821b76dff11eee3a2e92806ed3ab173
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"9513a941af257b779d7d2c095dff71172edcefaf","after":"53991090b821b76dff11eee3a2e92806ed3ab173","compare_url":"https://gitea.g-hi.com/luoanwu/base-framework/compare/9513a941af257b779d7d2c095dff71172edcefaf...53991090b821b76dff11eee3a2e92806ed3ab173","commits":[{"id":"53991090b821b76dff11eee3a2e92806ed3ab173","message":"chore(reports): 刷新 OS 产品验收证据\n","url":"https://gitea.g-hi.com/luoanwu/base-framework/commit/53991090b821b76dff11eee3a2e92806ed3ab173","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-26T16:22:27-07:00","added":["reports/os-product-compat.latest.json","reports/os-product-runtime.latest.json"],"removed":[],"modified":["reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},{"id":"71e6ef64d1ee41cb39ffae15a73f049c42fb82b1","message":"feat(os): 增加可装载基础框架产品\n","url":"https://gitea.g-hi.com/luoanwu/base-framework/commit/71e6ef64d1ee41cb39ffae15a73f049c42fb82b1","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-26T16:20:54-07:00","added":[".agents/skills/derived-project-framework-sync/SKILL.md",".agents/skills/derived-project-framework-sync/assets/framework-migration.template.md",".agents/skills/derived-project-framework-sync/references/experience-catalog.md",".agents/skills/derived-project-framework-sync/references/migration-protocol.md",".agents/skills/derived-project-framework-sync/scripts/plan-migration.mjs",".agents/skills/derived-project-framework-sync/scripts/record-migration.mjs","docs/os-product-extension.md","kernel.products.json","products/juhai.baseframework/README.md","products/juhai.baseframework/acceptance/juhai.baseframework.order.acceptance.mjs","products/juhai.baseframework/migrations/juhai.baseframework.order/20260826090000_create_orders.sql","products/juhai.baseframework/migrations/juhai.baseframework.order/20260826091000_create_order_events.sql","products/juhai.baseframework/package.json","products/juhai.baseframework/product.manifest.json","products/juhai.baseframework/src/contracts.ts","products/juhai.baseframework/src/fastify.ts","products/juhai.baseframework/src/host.ts","products/juhai.baseframework/src/index.ts","products/juhai.baseframework/src/manifest.ts","products/juhai.baseframework/src/nestjs.ts","products/juhai.baseframework/src/order-repository.ts","products/juhai.baseframework/src/tools.ts","products/juhai.baseframework/src/web.tsx","products/juhai.baseframework/test/os-host.runtime.test.ts","products/juhai.baseframework/tsconfig.os-host.json","products/juhai.baseframework/vitest.os-host.config.ts","scripts/check-os-product-compat.mjs","scripts/check-os-product-runtime.mjs"],"removed":[],"modified":["CLAUDE.md","docs/README.md","docs/governance-experience.md","docs/migration-playbook.md","package.json","reports/baseline.json","scripts/check-fork-readiness.mjs","scripts/governance-report.mjs"]}],"total_commits":0,"head_commit":{"id":"53991090b821b76dff11eee3a2e92806ed3ab173","message":"chore(reports): 刷新 OS 产品验收证据\n","url":"https://gitea.g-hi.com/luoanwu/base-framework/commit/53991090b821b76dff11eee3a2e92806ed3ab173","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-26T16:22:27-07:00","added":["reports/os-product-compat.latest.json","reports/os-product-runtime.latest.json"],"removed":[],"modified":["reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},"repository":{"id":54,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"base-framework","full_name":"luoanwu/base-framework","description":"基础框架 monorepo","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":1408,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/base-framework/languages","html_url":"https://gitea.g-hi.com/luoanwu/base-framework","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/base-framework","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/base-framework.git","clone_url":"https://gitea.g-hi.com/luoanwu/base-framework.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-07-03T12:24:18+08:00","updated_at":"2026-08-19T23:53:27+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1787787572
|
1787787593
|
0
|
1787787571
|
1787787593
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23537
|
feat(mobile): add governed Capacitor delivery
|
81
|
5
|
governance.yml
|
7
|
5
|
0
|
refs/heads/main
|
466e9752ba0f670d790b5134ff2d12e5b0e974ea
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"3d56a9a4fb9cccedf11cfdb53a470fa7f29e94c7","after":"466e9752ba0f670d790b5134ff2d12e5b0e974ea","compare_url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system/compare/3d56a9a4fb9cccedf11cfdb53a470fa7f29e94c7...466e9752ba0f670d790b5134ff2d12e5b0e974ea","commits":[{"id":"466e9752ba0f670d790b5134ff2d12e5b0e974ea","message":"feat(mobile): add governed Capacitor delivery\n","url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system/commit/466e9752ba0f670d790b5134ff2d12e5b0e974ea","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-27T01:51:00-07:00","added":["apps/web/android/.gitignore","apps/web/android/app/.gitignore","apps/web/android/app/build.gradle","apps/web/android/app/capacitor.build.gradle","apps/web/android/app/proguard-rules.pro","apps/web/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java","apps/web/android/app/src/main/AndroidManifest.xml","apps/web/android/app/src/main/java/com/juhai/service/MainActivity.java","apps/web/android/app/src/main/res/drawable-land-hdpi/splash.png","apps/web/android/app/src/main/res/drawable-land-mdpi/splash.png","apps/web/android/app/src/main/res/drawable-land-xhdpi/splash.png","apps/web/android/app/src/main/res/drawable-land-xxhdpi/splash.png","apps/web/android/app/src/main/res/drawable-land-xxxhdpi/splash.png","apps/web/android/app/src/main/res/drawable-port-hdpi/splash.png","apps/web/android/app/src/main/res/drawable-port-mdpi/splash.png","apps/web/android/app/src/main/res/drawable-port-xhdpi/splash.png","apps/web/android/app/src/main/res/drawable-port-xxhdpi/splash.png","apps/web/android/app/src/main/res/drawable-port-xxxhdpi/splash.png","apps/web/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml","apps/web/android/app/src/main/res/drawable/ic_launcher_background.xml","apps/web/android/app/src/main/res/drawable/splash.png","apps/web/android/app/src/main/res/layout/activity_main.xml","apps/web/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml","apps/web/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml","apps/web/android/app/src/main/res/mipmap-hdpi/ic_launcher.png","apps/web/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png","apps/web/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png","apps/web/android/app/src/main/res/mipmap-mdpi/ic_launcher.png","apps/web/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png","apps/web/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png","apps/web/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png","apps/web/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png","apps/web/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png","apps/web/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png","apps/web/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png","apps/web/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png","apps/web/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png","apps/web/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png","apps/web/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png","apps/web/android/app/src/main/res/values/ic_launcher_background.xml","apps/web/android/app/src/main/res/values/strings.xml","apps/web/android/app/src/main/res/values/styles.xml","apps/web/android/app/src/main/res/xml/file_paths.xml","apps/web/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java","apps/web/android/build.gradle","apps/web/android/capacitor.settings.gradle","apps/web/android/gradle.properties","apps/web/android/gradle/wrapper/gradle-wrapper.jar","apps/web/android/gradle/wrapper/gradle-wrapper.properties","apps/web/android/gradlew","apps/web/android/gradlew.bat","apps/web/android/settings.gradle","apps/web/android/variables.gradle","apps/web/capacitor.config.ts","apps/web/ios/.gitignore","apps/web/ios/App/App.xcodeproj/project.pbxproj","apps/web/ios/App/App.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist","apps/web/ios/App/App/AppDelegate.swift","apps/web/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png","apps/web/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json","apps/web/ios/App/App/Assets.xcassets/Contents.json","apps/web/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json","apps/web/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png","apps/web/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png","apps/web/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png","apps/web/ios/App/App/Base.lproj/LaunchScreen.storyboard","apps/web/ios/App/App/Base.lproj/Main.storyboard","apps/web/ios/App/App/Info.plist","apps/web/ios/App/CapApp-SPM/.gitignore","apps/web/ios/App/CapApp-SPM/Package.swift","apps/web/ios/App/CapApp-SPM/README.md","apps/web/ios/App/CapApp-SPM/Sources/CapApp-SPM/CapApp-SPM.swift","apps/web/ios/debug.xcconfig","apps/web/src/features/service-cases/components/ServiceReportClient.tsx","reports/mobile-delivery.latest.json","scripts/build-mobile-web.mjs","scripts/check-mobile-delivery.mjs"],"removed":[],"modified":[".github/pull_request_template.md",".github/workflows/governance.yml","CLAUDE.md","README.md","apps/web/eslint.config.mjs","apps/web/package.json","apps/web/src/app/service/[token]/page.tsx","docs/domain/business-logic-map.md","package.json","pnpm-lock.yaml","reports/agent-adapters.latest.json","reports/auth-source.latest.json","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/os-product.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/service-contracts.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/governance-report.mjs"]}],"total_commits":0,"head_commit":{"id":"466e9752ba0f670d790b5134ff2d12e5b0e974ea","message":"feat(mobile): add governed Capacitor delivery\n","url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system/commit/466e9752ba0f670d790b5134ff2d12e5b0e974ea","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-27T01:51:00-07:00","added":["apps/web/android/.gitignore","apps/web/android/app/.gitignore","apps/web/android/app/build.gradle","apps/web/android/app/capacitor.build.gradle","apps/web/android/app/proguard-rules.pro","apps/web/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java","apps/web/android/app/src/main/AndroidManifest.xml","apps/web/android/app/src/main/java/com/juhai/service/MainActivity.java","apps/web/android/app/src/main/res/drawable-land-hdpi/splash.png","apps/web/android/app/src/main/res/drawable-land-mdpi/splash.png","apps/web/android/app/src/main/res/drawable-land-xhdpi/splash.png","apps/web/android/app/src/main/res/drawable-land-xxhdpi/splash.png","apps/web/android/app/src/main/res/drawable-land-xxxhdpi/splash.png","apps/web/android/app/src/main/res/drawable-port-hdpi/splash.png","apps/web/android/app/src/main/res/drawable-port-mdpi/splash.png","apps/web/android/app/src/main/res/drawable-port-xhdpi/splash.png","apps/web/android/app/src/main/res/drawable-port-xxhdpi/splash.png","apps/web/android/app/src/main/res/drawable-port-xxxhdpi/splash.png","apps/web/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml","apps/web/android/app/src/main/res/drawable/ic_launcher_background.xml","apps/web/android/app/src/main/res/drawable/splash.png","apps/web/android/app/src/main/res/layout/activity_main.xml","apps/web/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml","apps/web/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml","apps/web/android/app/src/main/res/mipmap-hdpi/ic_launcher.png","apps/web/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png","apps/web/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png","apps/web/android/app/src/main/res/mipmap-mdpi/ic_launcher.png","apps/web/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png","apps/web/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png","apps/web/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png","apps/web/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png","apps/web/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png","apps/web/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png","apps/web/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png","apps/web/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png","apps/web/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png","apps/web/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png","apps/web/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png","apps/web/android/app/src/main/res/values/ic_launcher_background.xml","apps/web/android/app/src/main/res/values/strings.xml","apps/web/android/app/src/main/res/values/styles.xml","apps/web/android/app/src/main/res/xml/file_paths.xml","apps/web/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java","apps/web/android/build.gradle","apps/web/android/capacitor.settings.gradle","apps/web/android/gradle.properties","apps/web/android/gradle/wrapper/gradle-wrapper.jar","apps/web/android/gradle/wrapper/gradle-wrapper.properties","apps/web/android/gradlew","apps/web/android/gradlew.bat","apps/web/android/settings.gradle","apps/web/android/variables.gradle","apps/web/capacitor.config.ts","apps/web/ios/.gitignore","apps/web/ios/App/App.xcodeproj/project.pbxproj","apps/web/ios/App/App.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist","apps/web/ios/App/App/AppDelegate.swift","apps/web/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png","apps/web/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json","apps/web/ios/App/App/Assets.xcassets/Contents.json","apps/web/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json","apps/web/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png","apps/web/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png","apps/web/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png","apps/web/ios/App/App/Base.lproj/LaunchScreen.storyboard","apps/web/ios/App/App/Base.lproj/Main.storyboard","apps/web/ios/App/App/Info.plist","apps/web/ios/App/CapApp-SPM/.gitignore","apps/web/ios/App/CapApp-SPM/Package.swift","apps/web/ios/App/CapApp-SPM/README.md","apps/web/ios/App/CapApp-SPM/Sources/CapApp-SPM/CapApp-SPM.swift","apps/web/ios/debug.xcconfig","apps/web/src/features/service-cases/components/ServiceReportClient.tsx","reports/mobile-delivery.latest.json","scripts/build-mobile-web.mjs","scripts/check-mobile-delivery.mjs"],"removed":[],"modified":[".github/pull_request_template.md",".github/workflows/governance.yml","CLAUDE.md","README.md","apps/web/eslint.config.mjs","apps/web/package.json","apps/web/src/app/service/[token]/page.tsx","docs/domain/business-logic-map.md","package.json","pnpm-lock.yaml","reports/agent-adapters.latest.json","reports/auth-source.latest.json","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/os-product.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/service-contracts.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/governance-report.mjs"]},"repository":{"id":81,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhai-after-sales-service-system","full_name":"luoanwu/juhai-after-sales-service-system","description":"巨嗨智服:受治理的 AI 售后服务系统","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":2514,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-after-sales-service-system/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-after-sales-service-system","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-after-sales-service-system.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-26T08:47:15+08:00","updated_at":"2026-08-26T11:19:08+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1787820687
|
1787820696
|
0
|
1787820687
|
1787820696
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23538
|
Expand governance controls and cross-layer runtime Expand governance controls and cross-layer runtime validation...
|
84
|
5
|
governance.yml
|
2
|
5
|
0
|
refs/heads/main
|
4459ca7bf19df30ae3879f2027b7fb05b3e3ba2d
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"f2a674de3343d5031dee856edd261194709b727f","after":"4459ca7bf19df30ae3879f2027b7fb05b3e3ba2d","compare_url":"https://gitea.g-hi.com/luoanwu/juhai-knowledge-cloud/compare/f2a674de3343d5031dee856edd261194709b727f...4459ca7bf19df30ae3879f2027b7fb05b3e3ba2d","commits":[{"id":"4459ca7bf19df30ae3879f2027b7fb05b3e3ba2d","message":"Expand governance controls and cross-layer runtime validation\n","url":"https://gitea.g-hi.com/luoanwu/juhai-knowledge-cloud/commit/4459ca7bf19df30ae3879f2027b7fb05b3e3ba2d","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-27T06:17:02-07:00","added":[".agents/skills/business-module-intake/SKILL.md",".agents/skills/frontend-api-react/SKILL.md",".agents/skills/frontend-view-react/SKILL.md",".agents/skills/fullstack-7layer-react/SKILL.md",".agents/skills/zustand-store/SKILL.md",".dockerignore","Dockerfile","apps/api-fastify/prisma/migrations/20260827120000_add_knowledge_index_retry/migration.sql","apps/api-fastify/prisma/migrations/20260827150000_add_knowledge_chunks/migration.sql","apps/api-fastify/src/modules/knowledge/knowledge-indexer.ts","apps/api-fastify/src/plugins/api-error-handler.ts","apps/api-fastify/src/plugins/auth.ts","apps/api-fastify/test/auth.jwt.acceptance.test.ts","apps/api-fastify/test/fixtures/outbox-multiprocess-worker.ts","apps/api-fastify/test/health.degraded.test.ts","apps/api-fastify/test/http-rate-limit.redis.test.ts","apps/api-fastify/test/job.failed.exhaustion.test.ts","apps/api-fastify/test/knowledge-index.retry.test.ts","apps/api-fastify/test/observability.otlp.test.ts","apps/api-fastify/test/outbox.lifecycle.test.ts","apps/api-fastify/test/outbox.multiprocess.test.ts","apps/api-nestjs/prisma/migrations/20260827120000_add_knowledge_index_retry/migration.sql","apps/api-nestjs/prisma/migrations/20260827150000_add_knowledge_chunks/migration.sql","apps/api-nestjs/src/auth/auth-request.ts","apps/api-nestjs/src/auth/auth.module.ts","apps/api-nestjs/src/auth/auth.service.ts","apps/api-nestjs/src/auth/authentication.guard.ts","apps/api-nestjs/src/common/api-exception.filter.ts","apps/api-nestjs/src/events/dead-letter-replay.ts","apps/api-nestjs/src/knowledge/knowledge-index.service.ts","apps/api-nestjs/src/observability/observability.service.ts","apps/api-nestjs/src/ops/replay-dead-letter.ts","apps/api-nestjs/test/auth.jwt.acceptance.test.ts","apps/api-nestjs/test/backend.behavior.parity.test.ts","apps/api-nestjs/test/health.degraded.test.ts","apps/api-nestjs/test/job.failed.exhaustion.test.ts","apps/api-nestjs/test/knowledge-index.retry.test.ts","apps/api-nestjs/test/observability.otlp.test.ts","apps/api-nestjs/test/outbox.replay.test.ts","apps/api-nestjs/vitest.parity.config.ts","apps/web/next.config.mjs","compose.production.yml","docs/outbox-operations.md","docs/production-operations.md","packages/auth/package.json","packages/auth/src/auth.test.ts","packages/auth/src/http-rate-limit.ts","packages/auth/src/index.ts","packages/auth/tsconfig.json","packages/contracts/src/knowledge-index.test.ts","packages/contracts/src/redis-connection.test.ts","packages/contracts/src/redis-connection.ts","packages/knowledge-retrieval/src/indexing.test.ts","packages/knowledge-retrieval/src/indexing.ts","packages/observability/package.json","packages/observability/src/index.ts","packages/observability/src/runtime.test.ts","packages/observability/src/runtime.ts","packages/observability/tsconfig.json","products/juhai.knowledgecloud/migrations/juhai.knowledgecloud.core/20260827140000_add_knowledge_index_retry.sql","products/juhai.knowledgecloud/migrations/juhai.knowledgecloud.core/20260827150000_add_knowledge_chunks.sql","products/juhai.knowledgecloud/src/indexing.ts","reports/agent-skill-sync.latest.json","reports/auth-governance.latest.json","reports/backend-behavior-parity.latest.json","reports/container-acceptance.latest.json","reports/disaster-recovery.latest.json","reports/knowledge-index.latest.json","reports/observability.latest.json","reports/outbox-operations.latest.json","reports/production-operations.latest.json","reports/report-provenance.latest.json","reports/runtime-failure-coverage.latest.json","scripts/check-agent-skill-sync.mjs","scripts/check-auth-governance.mjs","scripts/check-backend-behavior-parity.mjs","scripts/check-container-acceptance.mjs","scripts/check-disaster-recovery.mjs","scripts/check-knowledge-index-governance.mjs","scripts/check-observability-governance.mjs","scripts/check-outbox-operations.mjs","scripts/check-production-operations.mjs","scripts/check-report-provenance.mjs","scripts/check-runtime-failure-coverage.mjs","scripts/lib/governance-baseline.mjs"],"removed":["apps/web/next.config.ts"],"modified":[".claude/skills/business-module-intake/SKILL.md",".claude/skills/frontend-api-react/SKILL.md",".claude/skills/frontend-view-react/SKILL.md",".claude/skills/fullstack-7layer-react/SKILL.md",".claude/skills/fullstack-7layer-react/references/fullstack-react-templates.md",".claude/skills/zustand-store/SKILL.md","CLAUDE.md","README.md","apps/api-fastify/.env.example","apps/api-fastify/package.json","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/app.ts","apps/api-fastify/src/modules/knowledge/knowledge.service.ts","apps/api-fastify/src/modules/orders/orders.service.ts","apps/api-fastify/src/modules/tenant.ts","apps/api-fastify/src/plugins/events.ts","apps/api-fastify/src/plugins/outbox.ts","apps/api-fastify/src/plugins/queue.ts","apps/api-fastify/src/routes/jobs.ts","apps/api-fastify/src/routes/knowledge.ts","apps/api-fastify/src/routes/orders.ts","apps/api-fastify/src/routes/realtime-stats.ts","apps/api-fastify/src/routes/sse.ts","apps/api-fastify/src/routes/ws.ts","apps/api-fastify/src/types.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-fastify/test/outbox.concurrency.test.ts","apps/api-fastify/test/outbox.deadletter.test.ts","apps/api-fastify/test/realtime.stats.test.ts","apps/api-fastify/test/realtime.tenant.test.ts","apps/api-nestjs/.env.example","apps/api-nestjs/package.json","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/src/app.module.ts","apps/api-nestjs/src/common/tenant.decorator.ts","apps/api-nestjs/src/create-app.ts","apps/api-nestjs/src/events/events.gateway.ts","apps/api-nestjs/src/events/outbox-dispatcher.service.ts","apps/api-nestjs/src/events/realtime-stats.controller.ts","apps/api-nestjs/src/knowledge/knowledge.controller.ts","apps/api-nestjs/src/knowledge/knowledge.module.ts","apps/api-nestjs/src/knowledge/knowledge.service.ts","apps/api-nestjs/src/orders/orders.service.ts","apps/api-nestjs/src/queue/jobs.controller.ts","apps/api-nestjs/src/queue/jobs.processor.ts","apps/api-nestjs/src/queue/queue.types.ts","apps/api-nestjs/src/redis/redis.module.ts","apps/api-nestjs/src/sse/sse.controller.ts","apps/api-nestjs/src/users/users.service.ts","apps/api-nestjs/test/http.acceptance.test.ts","apps/api-nestjs/test/knowledge.integration.test.ts","apps/api-nestjs/test/outbox.concurrency.test.ts","apps/api-nestjs/test/outbox.deadletter.test.ts","apps/api-nestjs/test/realtime.stats.test.ts","apps/api-nestjs/test/realtime.tenant.test.ts","apps/api-nestjs/vitest.config.ts","apps/web/.env.example","apps/web/e2e/acceptance.spec.ts","apps/web/package.json","apps/web/playwright.config.ts","apps/web/src/components/RealtimeBar.tsx","apps/web/src/features/knowledge/api/knowledge-api.ts","apps/web/src/features/knowledge/components/KnowledgeWorkbench.tsx","apps/web/src/features/knowledge/hooks/use-knowledge.ts","apps/web/src/store/realtime.ts","docs/README.md","docs/adr/0009-dual-backend-governance-parity.md","docs/domain/knowledge-cloud-blueprint.md","docs/domain/owner-matrix.md","docs/governance-experience.md","docs/migration-playbook.md","docs/standards/database-standard.md","governance.registry.json","governance.registry.schema.json","kernel.products.json","package.json","packages/contracts/src/index.ts","packages/contracts/src/knowledge-retrieval.test.ts","packages/contracts/src/knowledge.ts","packages/contracts/src/realtime-stats.ts","packages/contracts/tsconfig.json","packages/knowledge-retrieval/src/index.test.ts","packages/knowledge-retrieval/src/index.ts","pnpm-lock.yaml","products/juhai.knowledgecloud/package.json","products/juhai.knowledgecloud/src/fastify.ts","products/juhai.knowledgecloud/src/index.ts","products/juhai.knowledgecloud/src/nestjs.ts","products/juhai.knowledgecloud/src/repository.ts","products/juhai.knowledgecloud/src/retrieval.ts","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/os-product-live.latest.json","reports/os-product.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-docs-truth.mjs","scripts/check-dual-backend-parity.mjs","scripts/check-fork-readiness.mjs","scripts/check-migrations.mjs","scripts/check-os-product.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-statemachine-write-guard.mjs","scripts/check-ui-acceptance.mjs","scripts/check-validation-source.mjs","scripts/governance-report.mjs","scripts/lib/report-provenance.mjs","turbo.json"]}],"total_commits":0,"head_commit":{"id":"4459ca7bf19df30ae3879f2027b7fb05b3e3ba2d","message":"Expand governance controls and cross-layer runtime validation\n","url":"https://gitea.g-hi.com/luoanwu/juhai-knowledge-cloud/commit/4459ca7bf19df30ae3879f2027b7fb05b3e3ba2d","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-27T06:17:02-07:00","added":[".agents/skills/business-module-intake/SKILL.md",".agents/skills/frontend-api-react/SKILL.md",".agents/skills/frontend-view-react/SKILL.md",".agents/skills/fullstack-7layer-react/SKILL.md",".agents/skills/zustand-store/SKILL.md",".dockerignore","Dockerfile","apps/api-fastify/prisma/migrations/20260827120000_add_knowledge_index_retry/migration.sql","apps/api-fastify/prisma/migrations/20260827150000_add_knowledge_chunks/migration.sql","apps/api-fastify/src/modules/knowledge/knowledge-indexer.ts","apps/api-fastify/src/plugins/api-error-handler.ts","apps/api-fastify/src/plugins/auth.ts","apps/api-fastify/test/auth.jwt.acceptance.test.ts","apps/api-fastify/test/fixtures/outbox-multiprocess-worker.ts","apps/api-fastify/test/health.degraded.test.ts","apps/api-fastify/test/http-rate-limit.redis.test.ts","apps/api-fastify/test/job.failed.exhaustion.test.ts","apps/api-fastify/test/knowledge-index.retry.test.ts","apps/api-fastify/test/observability.otlp.test.ts","apps/api-fastify/test/outbox.lifecycle.test.ts","apps/api-fastify/test/outbox.multiprocess.test.ts","apps/api-nestjs/prisma/migrations/20260827120000_add_knowledge_index_retry/migration.sql","apps/api-nestjs/prisma/migrations/20260827150000_add_knowledge_chunks/migration.sql","apps/api-nestjs/src/auth/auth-request.ts","apps/api-nestjs/src/auth/auth.module.ts","apps/api-nestjs/src/auth/auth.service.ts","apps/api-nestjs/src/auth/authentication.guard.ts","apps/api-nestjs/src/common/api-exception.filter.ts","apps/api-nestjs/src/events/dead-letter-replay.ts","apps/api-nestjs/src/knowledge/knowledge-index.service.ts","apps/api-nestjs/src/observability/observability.service.ts","apps/api-nestjs/src/ops/replay-dead-letter.ts","apps/api-nestjs/test/auth.jwt.acceptance.test.ts","apps/api-nestjs/test/backend.behavior.parity.test.ts","apps/api-nestjs/test/health.degraded.test.ts","apps/api-nestjs/test/job.failed.exhaustion.test.ts","apps/api-nestjs/test/knowledge-index.retry.test.ts","apps/api-nestjs/test/observability.otlp.test.ts","apps/api-nestjs/test/outbox.replay.test.ts","apps/api-nestjs/vitest.parity.config.ts","apps/web/next.config.mjs","compose.production.yml","docs/outbox-operations.md","docs/production-operations.md","packages/auth/package.json","packages/auth/src/auth.test.ts","packages/auth/src/http-rate-limit.ts","packages/auth/src/index.ts","packages/auth/tsconfig.json","packages/contracts/src/knowledge-index.test.ts","packages/contracts/src/redis-connection.test.ts","packages/contracts/src/redis-connection.ts","packages/knowledge-retrieval/src/indexing.test.ts","packages/knowledge-retrieval/src/indexing.ts","packages/observability/package.json","packages/observability/src/index.ts","packages/observability/src/runtime.test.ts","packages/observability/src/runtime.ts","packages/observability/tsconfig.json","products/juhai.knowledgecloud/migrations/juhai.knowledgecloud.core/20260827140000_add_knowledge_index_retry.sql","products/juhai.knowledgecloud/migrations/juhai.knowledgecloud.core/20260827150000_add_knowledge_chunks.sql","products/juhai.knowledgecloud/src/indexing.ts","reports/agent-skill-sync.latest.json","reports/auth-governance.latest.json","reports/backend-behavior-parity.latest.json","reports/container-acceptance.latest.json","reports/disaster-recovery.latest.json","reports/knowledge-index.latest.json","reports/observability.latest.json","reports/outbox-operations.latest.json","reports/production-operations.latest.json","reports/report-provenance.latest.json","reports/runtime-failure-coverage.latest.json","scripts/check-agent-skill-sync.mjs","scripts/check-auth-governance.mjs","scripts/check-backend-behavior-parity.mjs","scripts/check-container-acceptance.mjs","scripts/check-disaster-recovery.mjs","scripts/check-knowledge-index-governance.mjs","scripts/check-observability-governance.mjs","scripts/check-outbox-operations.mjs","scripts/check-production-operations.mjs","scripts/check-report-provenance.mjs","scripts/check-runtime-failure-coverage.mjs","scripts/lib/governance-baseline.mjs"],"removed":["apps/web/next.config.ts"],"modified":[".claude/skills/business-module-intake/SKILL.md",".claude/skills/frontend-api-react/SKILL.md",".claude/skills/frontend-view-react/SKILL.md",".claude/skills/fullstack-7layer-react/SKILL.md",".claude/skills/fullstack-7layer-react/references/fullstack-react-templates.md",".claude/skills/zustand-store/SKILL.md","CLAUDE.md","README.md","apps/api-fastify/.env.example","apps/api-fastify/package.json","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/app.ts","apps/api-fastify/src/modules/knowledge/knowledge.service.ts","apps/api-fastify/src/modules/orders/orders.service.ts","apps/api-fastify/src/modules/tenant.ts","apps/api-fastify/src/plugins/events.ts","apps/api-fastify/src/plugins/outbox.ts","apps/api-fastify/src/plugins/queue.ts","apps/api-fastify/src/routes/jobs.ts","apps/api-fastify/src/routes/knowledge.ts","apps/api-fastify/src/routes/orders.ts","apps/api-fastify/src/routes/realtime-stats.ts","apps/api-fastify/src/routes/sse.ts","apps/api-fastify/src/routes/ws.ts","apps/api-fastify/src/types.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-fastify/test/outbox.concurrency.test.ts","apps/api-fastify/test/outbox.deadletter.test.ts","apps/api-fastify/test/realtime.stats.test.ts","apps/api-fastify/test/realtime.tenant.test.ts","apps/api-nestjs/.env.example","apps/api-nestjs/package.json","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/src/app.module.ts","apps/api-nestjs/src/common/tenant.decorator.ts","apps/api-nestjs/src/create-app.ts","apps/api-nestjs/src/events/events.gateway.ts","apps/api-nestjs/src/events/outbox-dispatcher.service.ts","apps/api-nestjs/src/events/realtime-stats.controller.ts","apps/api-nestjs/src/knowledge/knowledge.controller.ts","apps/api-nestjs/src/knowledge/knowledge.module.ts","apps/api-nestjs/src/knowledge/knowledge.service.ts","apps/api-nestjs/src/orders/orders.service.ts","apps/api-nestjs/src/queue/jobs.controller.ts","apps/api-nestjs/src/queue/jobs.processor.ts","apps/api-nestjs/src/queue/queue.types.ts","apps/api-nestjs/src/redis/redis.module.ts","apps/api-nestjs/src/sse/sse.controller.ts","apps/api-nestjs/src/users/users.service.ts","apps/api-nestjs/test/http.acceptance.test.ts","apps/api-nestjs/test/knowledge.integration.test.ts","apps/api-nestjs/test/outbox.concurrency.test.ts","apps/api-nestjs/test/outbox.deadletter.test.ts","apps/api-nestjs/test/realtime.stats.test.ts","apps/api-nestjs/test/realtime.tenant.test.ts","apps/api-nestjs/vitest.config.ts","apps/web/.env.example","apps/web/e2e/acceptance.spec.ts","apps/web/package.json","apps/web/playwright.config.ts","apps/web/src/components/RealtimeBar.tsx","apps/web/src/features/knowledge/api/knowledge-api.ts","apps/web/src/features/knowledge/components/KnowledgeWorkbench.tsx","apps/web/src/features/knowledge/hooks/use-knowledge.ts","apps/web/src/store/realtime.ts","docs/README.md","docs/adr/0009-dual-backend-governance-parity.md","docs/domain/knowledge-cloud-blueprint.md","docs/domain/owner-matrix.md","docs/governance-experience.md","docs/migration-playbook.md","docs/standards/database-standard.md","governance.registry.json","governance.registry.schema.json","kernel.products.json","package.json","packages/contracts/src/index.ts","packages/contracts/src/knowledge-retrieval.test.ts","packages/contracts/src/knowledge.ts","packages/contracts/src/realtime-stats.ts","packages/contracts/tsconfig.json","packages/knowledge-retrieval/src/index.test.ts","packages/knowledge-retrieval/src/index.ts","pnpm-lock.yaml","products/juhai.knowledgecloud/package.json","products/juhai.knowledgecloud/src/fastify.ts","products/juhai.knowledgecloud/src/index.ts","products/juhai.knowledgecloud/src/nestjs.ts","products/juhai.knowledgecloud/src/repository.ts","products/juhai.knowledgecloud/src/retrieval.ts","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/os-product-live.latest.json","reports/os-product.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-docs-truth.mjs","scripts/check-dual-backend-parity.mjs","scripts/check-fork-readiness.mjs","scripts/check-migrations.mjs","scripts/check-os-product.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-statemachine-write-guard.mjs","scripts/check-ui-acceptance.mjs","scripts/check-validation-source.mjs","scripts/governance-report.mjs","scripts/lib/report-provenance.mjs","turbo.json"]},"repository":{"id":84,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhai-knowledge-cloud","full_name":"luoanwu/juhai-knowledge-cloud","description":"巨嗨知识云:受治理的知识唯一真源与混合证据检索","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":698,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-knowledge-cloud/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-knowledge-cloud","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-knowledge-cloud","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-knowledge-cloud.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-knowledge-cloud.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-26T09:45:53+08:00","updated_at":"2026-08-26T09:47:06+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1787836636
|
1787836653
|
0
|
1787836636
|
1787836655
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23539
|
feat: unify projects and tickets under execution c feat: unify projects and tickets under execution control...
|
82
|
5
|
governance.yml
|
2
|
5
|
0
|
refs/heads/main
|
f78be17ac5fecb9cfa36e167b1e85ea26a48fa45
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"343e79d764ae566372808d0d922fcef7ca12a30e","after":"f78be17ac5fecb9cfa36e167b1e85ea26a48fa45","compare_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/compare/343e79d764ae566372808d0d922fcef7ca12a30e...f78be17ac5fecb9cfa36e167b1e85ea26a48fa45","commits":[{"id":"f78be17ac5fecb9cfa36e167b1e85ea26a48fa45","message":"feat: unify projects and tickets under execution control\n\nEstablish Projects and Tickets as separate owned fact domains coordinated by Execution Control across NestJS, Fastify, and the Next.js BFF.\n\nAdd governed identity, SLA, automation, AI, attachment, operations, deployment, and provenance-bound static/runtime/browser acceptance.\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/commit/f78be17ac5fecb9cfa36e167b1e85ea26a48fa45","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-28T03:46:07-07:00","added":[".agents/skills",".dockerignore",".github/workflows/release-images.yml","Dockerfile","apps/api-fastify/prisma/migrations/20260826165000_tenant_rls/migration.sql","apps/api-fastify/prisma/migrations/20260826171000_audit_idempotency/migration.sql","apps/api-fastify/prisma/migrations/20260826172500_sla_versions/migration.sql","apps/api-fastify/prisma/migrations/20260826174500_inbound_records/migration.sql","apps/api-fastify/prisma/migrations/20260826182000_sla_runtime_facts/migration.sql","apps/api-fastify/prisma/migrations/20260826190000_attachment_quarantine/migration.sql","apps/api-fastify/prisma/migrations/20260826193000_automation_rules/migration.sql","apps/api-fastify/prisma/migrations/20260826201500_automation_retries/migration.sql","apps/api-fastify/prisma/migrations/20260826204000_attachment_retention/migration.sql","apps/api-fastify/prisma/migrations/20260826213000_native_projects/migration.sql","apps/api-fastify/prisma/migrations/20260827015000_ticket_ai_pgvector/migration.sql","apps/api-fastify/prisma/migrations/20260827033000_complete_ticket_project_domains/migration.sql","apps/api-fastify/prisma/migrations/20260827041000_inbound_dead_letters/migration.sql","apps/api-fastify/prisma/migrations/20260827043000_inbound_status_lifecycle/migration.sql","apps/api-fastify/prisma/migrations/20260827050000_service_catalog/migration.sql","apps/api-fastify/prisma/migrations/20260827053000_projection_checkpoint/migration.sql","apps/api-fastify/prisma/migrations/20260827060000_force_rls_all_tenant_tables/migration.sql","apps/api-fastify/prisma/migrations/20260827150000_execution_control/migration.sql","apps/api-fastify/src/modules/ai/ai.service.ts","apps/api-fastify/src/modules/attachments/attachments.service.ts","apps/api-fastify/src/modules/automation/automation.service.ts","apps/api-fastify/src/modules/execution-control/execution-control.service.ts","apps/api-fastify/src/modules/permission.ts","apps/api-fastify/src/modules/projects/projects.service.ts","apps/api-fastify/src/modules/tenant-prisma.ts","apps/api-fastify/src/modules/ticket-operations/ticket-operations.service.ts","apps/api-fastify/src/modules/write-request-context.ts","apps/api-fastify/src/plugins/attachments.ts","apps/api-fastify/src/plugins/automation-worker.ts","apps/api-fastify/src/plugins/identity.ts","apps/api-fastify/src/plugins/ticket-maintenance-worker.ts","apps/api-fastify/src/routes/ai.ts","apps/api-fastify/src/routes/attachments.ts","apps/api-fastify/src/routes/automation.ts","apps/api-fastify/src/routes/execution-control.ts","apps/api-fastify/src/routes/projects.ts","apps/api-fastify/src/routes/ticket-operations.ts","apps/api-fastify/test/auth.oidc.test.ts","apps/api-fastify/test/rls.integration.test.ts","apps/api-nestjs/prisma/migrations/20260826165000_tenant_rls/migration.sql","apps/api-nestjs/prisma/migrations/20260826171000_audit_idempotency/migration.sql","apps/api-nestjs/prisma/migrations/20260826172500_sla_versions/migration.sql","apps/api-nestjs/prisma/migrations/20260826174500_inbound_records/migration.sql","apps/api-nestjs/prisma/migrations/20260826182000_sla_runtime_facts/migration.sql","apps/api-nestjs/prisma/migrations/20260826190000_attachment_quarantine/migration.sql","apps/api-nestjs/prisma/migrations/20260826193000_automation_rules/migration.sql","apps/api-nestjs/prisma/migrations/20260826201500_automation_retries/migration.sql","apps/api-nestjs/prisma/migrations/20260826204000_attachment_retention/migration.sql","apps/api-nestjs/prisma/migrations/20260826213000_native_projects/migration.sql","apps/api-nestjs/prisma/migrations/20260827015000_ticket_ai_pgvector/migration.sql","apps/api-nestjs/prisma/migrations/20260827033000_complete_ticket_project_domains/migration.sql","apps/api-nestjs/prisma/migrations/20260827041000_inbound_dead_letters/migration.sql","apps/api-nestjs/prisma/migrations/20260827043000_inbound_status_lifecycle/migration.sql","apps/api-nestjs/prisma/migrations/20260827050000_service_catalog/migration.sql","apps/api-nestjs/prisma/migrations/20260827053000_projection_checkpoint/migration.sql","apps/api-nestjs/prisma/migrations/20260827060000_force_rls_all_tenant_tables/migration.sql","apps/api-nestjs/prisma/migrations/20260827150000_execution_control/migration.sql","apps/api-nestjs/src/ai/ai.controller.ts","apps/api-nestjs/src/ai/ai.module.ts","apps/api-nestjs/src/ai/ai.service.ts","apps/api-nestjs/src/attachments/attachment-retention-worker.service.ts","apps/api-nestjs/src/attachments/attachments.controller.ts","apps/api-nestjs/src/attachments/attachments.module.ts","apps/api-nestjs/src/attachments/attachments.service.ts","apps/api-nestjs/src/attachments/attachments.tokens.ts","apps/api-nestjs/src/auth/auth.module.ts","apps/api-nestjs/src/auth/identity.middleware.ts","apps/api-nestjs/src/auth/identity.service.ts","apps/api-nestjs/src/auth/permission.guard.ts","apps/api-nestjs/src/auth/require-permission.decorator.ts","apps/api-nestjs/src/automation/automation-event-consumer.service.ts","apps/api-nestjs/src/automation/automation-retry-worker.service.ts","apps/api-nestjs/src/automation/automation.controller.ts","apps/api-nestjs/src/automation/automation.module.ts","apps/api-nestjs/src/automation/automation.service.ts","apps/api-nestjs/src/common/api-exception.filter.ts","apps/api-nestjs/src/common/write-request-context.ts","apps/api-nestjs/src/execution-control/execution-control.controller.ts","apps/api-nestjs/src/execution-control/execution-control.module.ts","apps/api-nestjs/src/execution-control/execution-control.service.ts","apps/api-nestjs/src/projects/projects.controller.ts","apps/api-nestjs/src/projects/projects.module.ts","apps/api-nestjs/src/projects/projects.service.ts","apps/api-nestjs/src/ticket-operations/ticket-maintenance-worker.service.ts","apps/api-nestjs/src/ticket-operations/ticket-operations.controller.ts","apps/api-nestjs/src/ticket-operations/ticket-operations.module.ts","apps/api-nestjs/src/ticket-operations/ticket-operations.service.ts","apps/api-nestjs/test/auth.oidc.test.ts","apps/api-nestjs/test/rls.integration.test.ts","apps/web/e2e/fixtures/keycloak/juhai-execution-acceptance-realm.json","apps/web/e2e/oidc.acceptance.spec.ts","apps/web/public/icon-maskable.svg","apps/web/public/icon.svg","apps/web/public/sw.js","apps/web/src/app/api/[...path]/route.ts","apps/web/src/app/auth/callback/route.ts","apps/web/src/app/auth/login/route.ts","apps/web/src/app/auth/logout/route.ts","apps/web/src/app/auth/session/route.ts","apps/web/src/app/manifest.ts","apps/web/src/app/sse/events/route.ts","apps/web/src/components/OperationsPanel.tsx","apps/web/src/components/ProjectsPanel.tsx","apps/web/src/components/PwaRegistration.tsx","apps/web/src/components/UnifiedCalendarPanel.tsx","apps/web/src/features/execution-control/api/execution-control-api.ts","apps/web/src/features/execution-control/components/ExecutionControlDashboard.tsx","apps/web/src/features/execution-control/hooks/use-execution-control.ts","apps/web/src/lib/auth-session.ts","apps/web/src/lib/auth-types.ts","apps/web/src/lib/i18n.ts","deploy/k8s/README.md","deploy/k8s/base/kustomization.yaml","deploy/k8s/base/otel-collector-config.yaml","deploy/k8s/base/platform.yaml","deploy/otel-collector/acceptance.yaml","docs/domain/execution-control-blueprint.md","docs/domain/project-delivery-blueprint.md","packages/ai-provider/package.json","packages/ai-provider/src/index.test.ts","packages/ai-provider/src/index.ts","packages/ai-provider/src/testing.ts","packages/ai-provider/tsconfig.json","packages/attachments/package.json","packages/attachments/src/index.ts","packages/attachments/src/infrastructure.integration.test.ts","packages/attachments/tsconfig.json","packages/contracts/src/ai.ts","packages/contracts/src/auth.ts","packages/contracts/src/automation.test.ts","packages/contracts/src/automation.ts","packages/contracts/src/business-calendar.test.ts","packages/contracts/src/business-calendar.ts","packages/contracts/src/execution-control.test.ts","packages/contracts/src/execution-control.ts","packages/contracts/src/idempotency.test.ts","packages/contracts/src/idempotency.ts","packages/contracts/src/project.test.ts","packages/contracts/src/project.ts","packages/identity/package.json","packages/identity/src/identity.test.ts","packages/identity/src/index.ts","packages/identity/tsconfig.json","packages/write-governance/package.json","packages/write-governance/src/index.test.ts","packages/write-governance/src/index.ts","packages/write-governance/tsconfig.json","reports/agent-workflow-parity.latest.json","reports/capacity.latest.json","reports/dual-backend-behavior.latest.json","reports/identity-boundary.latest.json","reports/outbox-operations.latest.json","reports/write-governance.latest.json","scripts/backup-postgres.sh","scripts/check-agent-workflow-parity.mjs","scripts/check-capacity.mjs","scripts/check-dual-backend-behavior.mjs","scripts/check-identity-boundary.mjs","scripts/check-outbox-operations.mjs","scripts/check-write-governance.mjs","scripts/replay-outbox-dead-letter.mjs","scripts/restore-postgres-drill.sh","scripts/test-otel-acceptance.mjs","scripts/test-outbox-operations.mjs","scripts/test-redis-auth-db.mjs"],"removed":[],"modified":[".github/workflows/governance.yml",".gitignore","CLAUDE.md","README.md","apps/api-fastify/.env.example","apps/api-fastify/package.json","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/app.ts","apps/api-fastify/src/modules/orders/orders.service.ts","apps/api-fastify/src/modules/replay.ts","apps/api-fastify/src/modules/tenant.ts","apps/api-fastify/src/modules/tickets/tickets.service.ts","apps/api-fastify/src/modules/users/users.service.ts","apps/api-fastify/src/plugins/outbox.ts","apps/api-fastify/src/plugins/prisma.ts","apps/api-fastify/src/plugins/queue.ts","apps/api-fastify/src/routes/jobs.ts","apps/api-fastify/src/routes/orders.ts","apps/api-fastify/src/routes/realtime-stats.ts","apps/api-fastify/src/routes/sse.ts","apps/api-fastify/src/routes/tickets.ts","apps/api-fastify/src/routes/users.ts","apps/api-fastify/src/routes/ws.ts","apps/api-fastify/src/types.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-fastify/test/realtime.tenant.test.ts","apps/api-fastify/test/tickets.integration.test.ts","apps/api-nestjs/.env.example","apps/api-nestjs/docker-compose.yml","apps/api-nestjs/package.json","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/src/app.module.ts","apps/api-nestjs/src/common/tenant.decorator.ts","apps/api-nestjs/src/create-app.ts","apps/api-nestjs/src/events/events.gateway.ts","apps/api-nestjs/src/events/outbox-dispatcher.service.ts","apps/api-nestjs/src/events/realtime-stats.controller.ts","apps/api-nestjs/src/events/replay.service.ts","apps/api-nestjs/src/orders/orders.controller.ts","apps/api-nestjs/src/orders/orders.service.ts","apps/api-nestjs/src/prisma/prisma.service.ts","apps/api-nestjs/src/queue/jobs.controller.ts","apps/api-nestjs/src/redis/redis.module.ts","apps/api-nestjs/src/sse/sse.controller.ts","apps/api-nestjs/src/tickets/tickets.controller.ts","apps/api-nestjs/src/tickets/tickets.module.ts","apps/api-nestjs/src/tickets/tickets.service.ts","apps/api-nestjs/src/users/users.controller.ts","apps/api-nestjs/src/users/users.service.ts","apps/api-nestjs/test/http.acceptance.test.ts","apps/api-nestjs/test/realtime.tenant.test.ts","apps/api-nestjs/test/tickets.integration.test.ts","apps/web/.env.example","apps/web/e2e/acceptance.spec.ts","apps/web/next.config.ts","apps/web/package.json","apps/web/playwright.config.ts","apps/web/src/app/layout.tsx","apps/web/src/app/page.tsx","apps/web/src/components/EventFeed.tsx","apps/web/src/components/RealtimeBar.tsx","apps/web/src/components/TicketsPanel.tsx","apps/web/src/hooks/useRealtime.ts","apps/web/src/lib/api.ts","apps/web/src/store/realtime.ts","apps/web/src/store/useAppStore.ts","docs/README.md","docs/domain-glossary.md","docs/domain/owner-matrix.md","docs/domain/ticket-system-blueprint.md","docs/governance-experience.md","docs/standards/database-standard.md","governance.registry.json","governance.registry.schema.json","package.json","packages/contracts/src/contracts.test.ts","packages/contracts/src/index.ts","packages/contracts/src/realtime.ts","packages/contracts/src/ticket.ts","pnpm-lock.yaml","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/transactional-write-chain.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-contract-consumers.mjs","scripts/check-dual-backend-parity.mjs","scripts/check-migrations.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-statemachine-write-guard.mjs","scripts/check-transactional-write-chain.mjs","scripts/check-ui-acceptance.mjs","scripts/governance-report.mjs","turbo.json"]}],"total_commits":0,"head_commit":{"id":"f78be17ac5fecb9cfa36e167b1e85ea26a48fa45","message":"feat: unify projects and tickets under execution control\n\nEstablish Projects and Tickets as separate owned fact domains coordinated by Execution Control across NestJS, Fastify, and the Next.js BFF.\n\nAdd governed identity, SLA, automation, AI, attachment, operations, deployment, and provenance-bound static/runtime/browser acceptance.\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/commit/f78be17ac5fecb9cfa36e167b1e85ea26a48fa45","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-28T03:46:07-07:00","added":[".agents/skills",".dockerignore",".github/workflows/release-images.yml","Dockerfile","apps/api-fastify/prisma/migrations/20260826165000_tenant_rls/migration.sql","apps/api-fastify/prisma/migrations/20260826171000_audit_idempotency/migration.sql","apps/api-fastify/prisma/migrations/20260826172500_sla_versions/migration.sql","apps/api-fastify/prisma/migrations/20260826174500_inbound_records/migration.sql","apps/api-fastify/prisma/migrations/20260826182000_sla_runtime_facts/migration.sql","apps/api-fastify/prisma/migrations/20260826190000_attachment_quarantine/migration.sql","apps/api-fastify/prisma/migrations/20260826193000_automation_rules/migration.sql","apps/api-fastify/prisma/migrations/20260826201500_automation_retries/migration.sql","apps/api-fastify/prisma/migrations/20260826204000_attachment_retention/migration.sql","apps/api-fastify/prisma/migrations/20260826213000_native_projects/migration.sql","apps/api-fastify/prisma/migrations/20260827015000_ticket_ai_pgvector/migration.sql","apps/api-fastify/prisma/migrations/20260827033000_complete_ticket_project_domains/migration.sql","apps/api-fastify/prisma/migrations/20260827041000_inbound_dead_letters/migration.sql","apps/api-fastify/prisma/migrations/20260827043000_inbound_status_lifecycle/migration.sql","apps/api-fastify/prisma/migrations/20260827050000_service_catalog/migration.sql","apps/api-fastify/prisma/migrations/20260827053000_projection_checkpoint/migration.sql","apps/api-fastify/prisma/migrations/20260827060000_force_rls_all_tenant_tables/migration.sql","apps/api-fastify/prisma/migrations/20260827150000_execution_control/migration.sql","apps/api-fastify/src/modules/ai/ai.service.ts","apps/api-fastify/src/modules/attachments/attachments.service.ts","apps/api-fastify/src/modules/automation/automation.service.ts","apps/api-fastify/src/modules/execution-control/execution-control.service.ts","apps/api-fastify/src/modules/permission.ts","apps/api-fastify/src/modules/projects/projects.service.ts","apps/api-fastify/src/modules/tenant-prisma.ts","apps/api-fastify/src/modules/ticket-operations/ticket-operations.service.ts","apps/api-fastify/src/modules/write-request-context.ts","apps/api-fastify/src/plugins/attachments.ts","apps/api-fastify/src/plugins/automation-worker.ts","apps/api-fastify/src/plugins/identity.ts","apps/api-fastify/src/plugins/ticket-maintenance-worker.ts","apps/api-fastify/src/routes/ai.ts","apps/api-fastify/src/routes/attachments.ts","apps/api-fastify/src/routes/automation.ts","apps/api-fastify/src/routes/execution-control.ts","apps/api-fastify/src/routes/projects.ts","apps/api-fastify/src/routes/ticket-operations.ts","apps/api-fastify/test/auth.oidc.test.ts","apps/api-fastify/test/rls.integration.test.ts","apps/api-nestjs/prisma/migrations/20260826165000_tenant_rls/migration.sql","apps/api-nestjs/prisma/migrations/20260826171000_audit_idempotency/migration.sql","apps/api-nestjs/prisma/migrations/20260826172500_sla_versions/migration.sql","apps/api-nestjs/prisma/migrations/20260826174500_inbound_records/migration.sql","apps/api-nestjs/prisma/migrations/20260826182000_sla_runtime_facts/migration.sql","apps/api-nestjs/prisma/migrations/20260826190000_attachment_quarantine/migration.sql","apps/api-nestjs/prisma/migrations/20260826193000_automation_rules/migration.sql","apps/api-nestjs/prisma/migrations/20260826201500_automation_retries/migration.sql","apps/api-nestjs/prisma/migrations/20260826204000_attachment_retention/migration.sql","apps/api-nestjs/prisma/migrations/20260826213000_native_projects/migration.sql","apps/api-nestjs/prisma/migrations/20260827015000_ticket_ai_pgvector/migration.sql","apps/api-nestjs/prisma/migrations/20260827033000_complete_ticket_project_domains/migration.sql","apps/api-nestjs/prisma/migrations/20260827041000_inbound_dead_letters/migration.sql","apps/api-nestjs/prisma/migrations/20260827043000_inbound_status_lifecycle/migration.sql","apps/api-nestjs/prisma/migrations/20260827050000_service_catalog/migration.sql","apps/api-nestjs/prisma/migrations/20260827053000_projection_checkpoint/migration.sql","apps/api-nestjs/prisma/migrations/20260827060000_force_rls_all_tenant_tables/migration.sql","apps/api-nestjs/prisma/migrations/20260827150000_execution_control/migration.sql","apps/api-nestjs/src/ai/ai.controller.ts","apps/api-nestjs/src/ai/ai.module.ts","apps/api-nestjs/src/ai/ai.service.ts","apps/api-nestjs/src/attachments/attachment-retention-worker.service.ts","apps/api-nestjs/src/attachments/attachments.controller.ts","apps/api-nestjs/src/attachments/attachments.module.ts","apps/api-nestjs/src/attachments/attachments.service.ts","apps/api-nestjs/src/attachments/attachments.tokens.ts","apps/api-nestjs/src/auth/auth.module.ts","apps/api-nestjs/src/auth/identity.middleware.ts","apps/api-nestjs/src/auth/identity.service.ts","apps/api-nestjs/src/auth/permission.guard.ts","apps/api-nestjs/src/auth/require-permission.decorator.ts","apps/api-nestjs/src/automation/automation-event-consumer.service.ts","apps/api-nestjs/src/automation/automation-retry-worker.service.ts","apps/api-nestjs/src/automation/automation.controller.ts","apps/api-nestjs/src/automation/automation.module.ts","apps/api-nestjs/src/automation/automation.service.ts","apps/api-nestjs/src/common/api-exception.filter.ts","apps/api-nestjs/src/common/write-request-context.ts","apps/api-nestjs/src/execution-control/execution-control.controller.ts","apps/api-nestjs/src/execution-control/execution-control.module.ts","apps/api-nestjs/src/execution-control/execution-control.service.ts","apps/api-nestjs/src/projects/projects.controller.ts","apps/api-nestjs/src/projects/projects.module.ts","apps/api-nestjs/src/projects/projects.service.ts","apps/api-nestjs/src/ticket-operations/ticket-maintenance-worker.service.ts","apps/api-nestjs/src/ticket-operations/ticket-operations.controller.ts","apps/api-nestjs/src/ticket-operations/ticket-operations.module.ts","apps/api-nestjs/src/ticket-operations/ticket-operations.service.ts","apps/api-nestjs/test/auth.oidc.test.ts","apps/api-nestjs/test/rls.integration.test.ts","apps/web/e2e/fixtures/keycloak/juhai-execution-acceptance-realm.json","apps/web/e2e/oidc.acceptance.spec.ts","apps/web/public/icon-maskable.svg","apps/web/public/icon.svg","apps/web/public/sw.js","apps/web/src/app/api/[...path]/route.ts","apps/web/src/app/auth/callback/route.ts","apps/web/src/app/auth/login/route.ts","apps/web/src/app/auth/logout/route.ts","apps/web/src/app/auth/session/route.ts","apps/web/src/app/manifest.ts","apps/web/src/app/sse/events/route.ts","apps/web/src/components/OperationsPanel.tsx","apps/web/src/components/ProjectsPanel.tsx","apps/web/src/components/PwaRegistration.tsx","apps/web/src/components/UnifiedCalendarPanel.tsx","apps/web/src/features/execution-control/api/execution-control-api.ts","apps/web/src/features/execution-control/components/ExecutionControlDashboard.tsx","apps/web/src/features/execution-control/hooks/use-execution-control.ts","apps/web/src/lib/auth-session.ts","apps/web/src/lib/auth-types.ts","apps/web/src/lib/i18n.ts","deploy/k8s/README.md","deploy/k8s/base/kustomization.yaml","deploy/k8s/base/otel-collector-config.yaml","deploy/k8s/base/platform.yaml","deploy/otel-collector/acceptance.yaml","docs/domain/execution-control-blueprint.md","docs/domain/project-delivery-blueprint.md","packages/ai-provider/package.json","packages/ai-provider/src/index.test.ts","packages/ai-provider/src/index.ts","packages/ai-provider/src/testing.ts","packages/ai-provider/tsconfig.json","packages/attachments/package.json","packages/attachments/src/index.ts","packages/attachments/src/infrastructure.integration.test.ts","packages/attachments/tsconfig.json","packages/contracts/src/ai.ts","packages/contracts/src/auth.ts","packages/contracts/src/automation.test.ts","packages/contracts/src/automation.ts","packages/contracts/src/business-calendar.test.ts","packages/contracts/src/business-calendar.ts","packages/contracts/src/execution-control.test.ts","packages/contracts/src/execution-control.ts","packages/contracts/src/idempotency.test.ts","packages/contracts/src/idempotency.ts","packages/contracts/src/project.test.ts","packages/contracts/src/project.ts","packages/identity/package.json","packages/identity/src/identity.test.ts","packages/identity/src/index.ts","packages/identity/tsconfig.json","packages/write-governance/package.json","packages/write-governance/src/index.test.ts","packages/write-governance/src/index.ts","packages/write-governance/tsconfig.json","reports/agent-workflow-parity.latest.json","reports/capacity.latest.json","reports/dual-backend-behavior.latest.json","reports/identity-boundary.latest.json","reports/outbox-operations.latest.json","reports/write-governance.latest.json","scripts/backup-postgres.sh","scripts/check-agent-workflow-parity.mjs","scripts/check-capacity.mjs","scripts/check-dual-backend-behavior.mjs","scripts/check-identity-boundary.mjs","scripts/check-outbox-operations.mjs","scripts/check-write-governance.mjs","scripts/replay-outbox-dead-letter.mjs","scripts/restore-postgres-drill.sh","scripts/test-otel-acceptance.mjs","scripts/test-outbox-operations.mjs","scripts/test-redis-auth-db.mjs"],"removed":[],"modified":[".github/workflows/governance.yml",".gitignore","CLAUDE.md","README.md","apps/api-fastify/.env.example","apps/api-fastify/package.json","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/app.ts","apps/api-fastify/src/modules/orders/orders.service.ts","apps/api-fastify/src/modules/replay.ts","apps/api-fastify/src/modules/tenant.ts","apps/api-fastify/src/modules/tickets/tickets.service.ts","apps/api-fastify/src/modules/users/users.service.ts","apps/api-fastify/src/plugins/outbox.ts","apps/api-fastify/src/plugins/prisma.ts","apps/api-fastify/src/plugins/queue.ts","apps/api-fastify/src/routes/jobs.ts","apps/api-fastify/src/routes/orders.ts","apps/api-fastify/src/routes/realtime-stats.ts","apps/api-fastify/src/routes/sse.ts","apps/api-fastify/src/routes/tickets.ts","apps/api-fastify/src/routes/users.ts","apps/api-fastify/src/routes/ws.ts","apps/api-fastify/src/types.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-fastify/test/realtime.tenant.test.ts","apps/api-fastify/test/tickets.integration.test.ts","apps/api-nestjs/.env.example","apps/api-nestjs/docker-compose.yml","apps/api-nestjs/package.json","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/src/app.module.ts","apps/api-nestjs/src/common/tenant.decorator.ts","apps/api-nestjs/src/create-app.ts","apps/api-nestjs/src/events/events.gateway.ts","apps/api-nestjs/src/events/outbox-dispatcher.service.ts","apps/api-nestjs/src/events/realtime-stats.controller.ts","apps/api-nestjs/src/events/replay.service.ts","apps/api-nestjs/src/orders/orders.controller.ts","apps/api-nestjs/src/orders/orders.service.ts","apps/api-nestjs/src/prisma/prisma.service.ts","apps/api-nestjs/src/queue/jobs.controller.ts","apps/api-nestjs/src/redis/redis.module.ts","apps/api-nestjs/src/sse/sse.controller.ts","apps/api-nestjs/src/tickets/tickets.controller.ts","apps/api-nestjs/src/tickets/tickets.module.ts","apps/api-nestjs/src/tickets/tickets.service.ts","apps/api-nestjs/src/users/users.controller.ts","apps/api-nestjs/src/users/users.service.ts","apps/api-nestjs/test/http.acceptance.test.ts","apps/api-nestjs/test/realtime.tenant.test.ts","apps/api-nestjs/test/tickets.integration.test.ts","apps/web/.env.example","apps/web/e2e/acceptance.spec.ts","apps/web/next.config.ts","apps/web/package.json","apps/web/playwright.config.ts","apps/web/src/app/layout.tsx","apps/web/src/app/page.tsx","apps/web/src/components/EventFeed.tsx","apps/web/src/components/RealtimeBar.tsx","apps/web/src/components/TicketsPanel.tsx","apps/web/src/hooks/useRealtime.ts","apps/web/src/lib/api.ts","apps/web/src/store/realtime.ts","apps/web/src/store/useAppStore.ts","docs/README.md","docs/domain-glossary.md","docs/domain/owner-matrix.md","docs/domain/ticket-system-blueprint.md","docs/governance-experience.md","docs/standards/database-standard.md","governance.registry.json","governance.registry.schema.json","package.json","packages/contracts/src/contracts.test.ts","packages/contracts/src/index.ts","packages/contracts/src/realtime.ts","packages/contracts/src/ticket.ts","pnpm-lock.yaml","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/transactional-write-chain.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-contract-consumers.mjs","scripts/check-dual-backend-parity.mjs","scripts/check-migrations.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-statemachine-write-guard.mjs","scripts/check-transactional-write-chain.mjs","scripts/check-ui-acceptance.mjs","scripts/governance-report.mjs","turbo.json"]},"repository":{"id":82,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhai-ai-work-order-system","full_name":"luoanwu/juhai-ai-work-order-system","description":"巨嗨 AI 工单系统:治理型工单核心与 Digital Employee OS 产品适配层","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":712,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-work-order-system/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-work-order-system","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-ai-work-order-system.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-26T09:08:57+08:00","updated_at":"2026-08-26T09:12:25+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1787913991
|
1787914025
|
0
|
1787913990
|
1787914026
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23542
|
docs: 修正基线表用例计数(156)并说明地板归属
|
90
|
5
|
governance.yml
|
1
|
5
|
0
|
refs/heads/main
|
dcd85b10ac06ae862fe3789b6bd548838487b8fe
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"0000000000000000000000000000000000000000","after":"dcd85b10ac06ae862fe3789b6bd548838487b8fe","compare_url":"https://gitea.g-hi.com/","commits":[{"id":"dcd85b10ac06ae862fe3789b6bd548838487b8fe","message":"docs: 修正基线表用例计数(156)并说明地板归属\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/minimax-h3-studio/commit/dcd85b10ac06ae862fe3789b6bd548838487b8fe","author":{"name":"hillao","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"hillao","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-29T18:07:34-07:00","added":[],"removed":[],"modified":["CLAUDE.md"]},{"id":"3de844a88e3c87510517038d98edbb9eeeb6ff30","message":"chore: 收口独立项目启动预检与治理基线\n","url":"https://gitea.g-hi.com/luoanwu/minimax-h3-studio/commit/3de844a88e3c87510517038d98edbb9eeeb6ff30","author":{"name":"hillao","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"hillao","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-29T18:04:03-07:00","added":[],"removed":[],"modified":["CLAUDE.md","scripts/preflight.py","scripts/start.sh"]},{"id":"11cf6a57829c8ce0ff3ccc8dd683d07e5b65b298","message":"feat: 增加 MiniMax H3 一键启动入口\n","url":"https://gitea.g-hi.com/luoanwu/minimax-h3-studio/commit/11cf6a57829c8ce0ff3ccc8dd683d07e5b65b298","author":{"name":"hillao","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"hillao","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-29T18:03:23-07:00","added":["scripts/lib/h3-runtime.sh","scripts/start.sh","start.command"],"removed":[],"modified":["README.md","package.json","scripts/bootstrap.sh"]},{"id":"86a8d3115337fa79d9a3ce48e2dfa51dd07ad44f","message":"feat: 完善 MiniMax H3 独立项目治理与验收\n","url":"https://gitea.g-hi.com/luoanwu/minimax-h3-studio/commit/86a8d3115337fa79d9a3ce48e2dfa51dd07ad44f","author":{"name":"hillao","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"hillao","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-29T18:02:59-07:00","added":["apps/web/src/app/framework/page.tsx","docs/domain/h3-studio-blueprint.md"],"removed":[],"modified":[".gitignore","CLAUDE.md","apps/web/e2e/acceptance.spec.ts","docs/domain-glossary.md","docs/domain/owner-matrix.md"]},{"id":"1337ab5545eee3d0e41f950d4a4617ea325ab916","message":"chore: 初始化 minimax-h3-studio 派生仓(框架迁移 + H3 工作台 + 治理收口)\n\n- 基础框架 bootstrap 迁移产物(源 base-framework@5399109)+ MiniMax H3 生成工作台\n- H3 修复:生成/下载服务端双向互斥锁、任务 id 校验、PID 复用识别、\n Range 视频流、任务删除、采样 ETA、MPS 回退单源、h3 契约测试\n- 治理收口:清除 chat 幽灵空目录、移除源仓 OS 产品载荷(kernel.products.json 空载 +\n os-product 门禁空载分支,负向已验证)、README 对齐文档真相\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/minimax-h3-studio/commit/1337ab5545eee3d0e41f950d4a4617ea325ab916","author":{"name":"hillao","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"hillao","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-29T06:51:24-07:00","added":[".agents/skills/derived-project-framework-sync/SKILL.md",".agents/skills/derived-project-framework-sync/assets/framework-migration.template.md",".agents/skills/derived-project-framework-sync/references/experience-catalog.md",".agents/skills/derived-project-framework-sync/references/migration-protocol.md",".agents/skills/derived-project-framework-sync/scripts/plan-migration.mjs",".agents/skills/derived-project-framework-sync/scripts/record-migration.mjs",".agents/skills/frontend-api-react/SKILL.md",".agents/skills/frontend-view-react/SKILL.md",".agents/skills/frontend-view-react/references/view-templates.md",".agents/skills/fullstack-7layer-react/SKILL.md",".agents/skills/fullstack-7layer-react/references/fullstack-react-templates.md",".agents/skills/zustand-store/SKILL.md",".claude/agents/acceptance-runner.md",".claude/agents/module-blueprint.md",".claude/launch.json",".claude/skills/business-module-intake/SKILL.md",".claude/skills/frontend-api-react/SKILL.md",".claude/skills/frontend-view-react/SKILL.md",".claude/skills/frontend-view-react/references/view-templates.md",".claude/skills/fullstack-7layer-react/SKILL.md",".claude/skills/fullstack-7layer-react/references/fullstack-react-templates.md",".claude/skills/zustand-store/SKILL.md",".env.example",".github/pull_request_template.md",".github/workflows/governance.yml",".gitignore",".venv","AGENTS.md","CLAUDE.md","README.md","apps/api-fastify/.gitignore","apps/api-fastify/package.json","apps/api-fastify/pnpm-lock.yaml","apps/api-fastify/prisma/migrations/20260608150500_init/migration.sql","apps/api-fastify/prisma/migrations/20260705080000_outbox_dead_letter/migration.sql","apps/api-fastify/prisma/migrations/20260818090000_outbox_replay_cursor/migration.sql","apps/api-fastify/prisma/migrations/migration_lock.toml","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/app.ts","apps/api-fastify/src/lib/orderMachine.ts","apps/api-fastify/src/lib/statemachine.ts","apps/api-fastify/src/modules/orders/orders.service.ts","apps/api-fastify/src/modules/replay.ts","apps/api-fastify/src/modules/tenant.ts","apps/api-fastify/src/modules/users/users.service.ts","apps/api-fastify/src/plugins/events.ts","apps/api-fastify/src/plugins/outbox.ts","apps/api-fastify/src/plugins/prisma.ts","apps/api-fastify/src/plugins/queue.ts","apps/api-fastify/src/plugins/redis.ts","apps/api-fastify/src/routes/health.ts","apps/api-fastify/src/routes/jobs.ts","apps/api-fastify/src/routes/orders.ts","apps/api-fastify/src/routes/realtime-stats.ts","apps/api-fastify/src/routes/sse.ts","apps/api-fastify/src/routes/users.ts","apps/api-fastify/src/routes/ws.ts","apps/api-fastify/src/server.ts","apps/api-fastify/src/types.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-fastify/test/orders.integration.test.ts","apps/api-fastify/test/outbox.concurrency.test.ts","apps/api-fastify/test/outbox.deadletter.test.ts","apps/api-fastify/test/realtime.command.test.ts","apps/api-fastify/test/realtime.replay.test.ts","apps/api-fastify/test/realtime.stats.test.ts","apps/api-fastify/test/realtime.subscription.test.ts","apps/api-fastify/test/realtime.tenant.test.ts","apps/api-fastify/tsconfig.json","apps/api-fastify/vitest.config.ts","apps/api-nestjs/.gitignore","apps/api-nestjs/docker-compose.yml","apps/api-nestjs/nest-cli.json","apps/api-nestjs/package.json","apps/api-nestjs/pnpm-lock.yaml","apps/api-nestjs/prisma/migrations/20260608150500_init/migration.sql","apps/api-nestjs/prisma/migrations/20260705080000_outbox_dead_letter/migration.sql","apps/api-nestjs/prisma/migrations/20260818090000_outbox_replay_cursor/migration.sql","apps/api-nestjs/prisma/migrations/migration_lock.toml","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/prisma/seed.ts","apps/api-nestjs/src/app.module.ts","apps/api-nestjs/src/common/envelope.ts","apps/api-nestjs/src/common/tenant.decorator.ts","apps/api-nestjs/src/common/zod-validation.pipe.ts","apps/api-nestjs/src/create-app.ts","apps/api-nestjs/src/events/connection-registry.service.ts","apps/api-nestjs/src/events/event-bus.service.ts","apps/api-nestjs/src/events/events.gateway.ts","apps/api-nestjs/src/events/events.module.ts","apps/api-nestjs/src/events/fanout.service.ts","apps/api-nestjs/src/events/outbox-dispatcher.service.ts","apps/api-nestjs/src/events/realtime-stats.controller.ts","apps/api-nestjs/src/events/replay.service.ts","apps/api-nestjs/src/health/health.controller.ts","apps/api-nestjs/src/health/health.module.ts","apps/api-nestjs/src/main.ts","apps/api-nestjs/src/orders/orders.controller.ts","apps/api-nestjs/src/orders/orders.module.ts","apps/api-nestjs/src/orders/orders.service.ts","apps/api-nestjs/src/prisma/prisma.module.ts","apps/api-nestjs/src/prisma/prisma.service.ts","apps/api-nestjs/src/queue/jobs.controller.ts","apps/api-nestjs/src/queue/jobs.processor.ts","apps/api-nestjs/src/queue/queue.module.ts","apps/api-nestjs/src/queue/queue.types.ts","apps/api-nestjs/src/redis/redis.module.ts","apps/api-nestjs/src/sse/sse.controller.ts","apps/api-nestjs/src/sse/sse.module.ts","apps/api-nestjs/src/statemachine/index.ts","apps/api-nestjs/src/statemachine/order.machine.ts","apps/api-nestjs/src/statemachine/statemachine.engine.ts","apps/api-nestjs/src/statemachine/statemachine.types.ts","apps/api-nestjs/src/users/users.controller.ts","apps/api-nestjs/src/users/users.module.ts","apps/api-nestjs/src/users/users.service.ts","apps/api-nestjs/test/http.acceptance.test.ts","apps/api-nestjs/test/orders.integration.test.ts","apps/api-nestjs/test/outbox.concurrency.test.ts","apps/api-nestjs/test/outbox.deadletter.test.ts","apps/api-nestjs/test/realtime.command.test.ts","apps/api-nestjs/test/realtime.replay.test.ts","apps/api-nestjs/test/realtime.stats.test.ts","apps/api-nestjs/test/realtime.subscription.test.ts","apps/api-nestjs/test/realtime.tenant.test.ts","apps/api-nestjs/tsconfig.build.json","apps/api-nestjs/tsconfig.json","apps/api-nestjs/vitest.config.ts","apps/web/.gitignore","apps/web/components.json","apps/web/e2e/acceptance.spec.ts","apps/web/eslint.config.mjs","apps/web/next.config.ts","apps/web/package.json","apps/web/playwright.config.ts","apps/web/pnpm-lock.yaml","apps/web/postcss.config.js","apps/web/src/app/api/h3/generate/route.ts","apps/web/src/app/api/h3/jobs/[id]/artifact/route.ts","apps/web/src/app/api/h3/jobs/[id]/cancel/route.ts","apps/web/src/app/api/h3/jobs/[id]/log/route.ts","apps/web/src/app/api/h3/jobs/[id]/route.ts","apps/web/src/app/api/h3/jobs/route.ts","apps/web/src/app/api/h3/model/cancel/route.ts","apps/web/src/app/api/h3/model/log/route.ts","apps/web/src/app/api/h3/model/route.ts","apps/web/src/app/api/h3/status/route.ts","apps/web/src/app/globals.css","apps/web/src/app/layout.tsx","apps/web/src/app/page.tsx","apps/web/src/components/EventFeed.tsx","apps/web/src/components/OrdersPanel.tsx","apps/web/src/components/RealtimeBar.tsx","apps/web/src/components/UsersPanel.tsx","apps/web/src/components/ui/badge.tsx","apps/web/src/components/ui/button.tsx","apps/web/src/components/ui/card.tsx","apps/web/src/components/ui/input.tsx","apps/web/src/components/ui/label.tsx","apps/web/src/components/ui/separator.tsx","apps/web/src/features/h3/api/h3-api.ts","apps/web/src/features/h3/components/H3Workspace.tsx","apps/web/src/hooks/useRealtime.ts","apps/web/src/lib/api.ts","apps/web/src/lib/h3-environment.ts","apps/web/src/lib/h3-jobs.ts","apps/web/src/lib/h3-lock.ts","apps/web/src/lib/h3-model-manager.ts","apps/web/src/lib/providers.tsx","apps/web/src/lib/types.ts","apps/web/src/lib/utils.ts","apps/web/src/store/realtime.ts","apps/web/src/store/useAppStore.ts","apps/web/tailwind.config.ts","apps/web/tsconfig.json","docs/README.md","docs/adr/0001-use-typescript-fullstack.md","docs/adr/0002-use-nextjs-app-router.md","docs/adr/0003-use-nestjs-with-fastify-adapter.md","docs/adr/0004-use-postgresql.md","docs/adr/0005-use-prisma.md","docs/adr/0006-realtime-sse-and-websocket.md","docs/adr/0007-use-bullmq-queue.md","docs/adr/0008-monorepo-pnpm-turborepo.md","docs/adr/0009-dual-backend-governance-parity.md","docs/adr/README.md","docs/domain-glossary.md","docs/domain/owner-matrix.md","docs/framework-migration.md","docs/governance-experience.md","docs/migration-playbook.md","docs/os-product-extension.md","docs/standards/api-standard.md","docs/standards/backend-standard.md","docs/standards/database-standard.md","docs/standards/frontend-standard.md","docs/standards/git-standard.md","docs/standards/naming-standard.md","docs/standards/review-standard.md","generate.py","governance.registry.json","governance.registry.schema.json","kernel.products.json","package.json","packages/config/eslint/base.mjs","packages/config/package.json","packages/config/prettier/index.json","packages/config/tsconfig/base.json","packages/config/tsconfig/nextjs.json","packages/config/tsconfig/node.json","packages/contracts/package.json","packages/contracts/src/contracts.test.ts","packages/contracts/src/h3.test.ts","packages/contracts/src/h3.ts","packages/contracts/src/index.ts","packages/contracts/src/job.ts","packages/contracts/src/order.ts","packages/contracts/src/realtime-command.test.ts","packages/contracts/src/realtime-command.ts","packages/contracts/src/realtime-stats.ts","packages/contracts/src/realtime.ts","packages/contracts/src/replay.test.ts","packages/contracts/src/replay.ts","packages/contracts/src/statemachine.test.ts","packages/contracts/src/statemachine.ts","packages/contracts/src/subscription.test.ts","packages/contracts/src/subscription.ts","packages/contracts/src/tenant.ts","packages/contracts/src/user.ts","packages/contracts/tsconfig.json","packages/contracts/tsconfig.tsbuildinfo","pnpm-lock.yaml","pnpm-workspace.yaml","reports/design-audit/01-current-studio.png","reports/design-audit/02-optimized-studio.png","reports/design-audit/03-final-studio.png","requirements.txt","scripts/bootstrap.sh","scripts/check-contract-consumers.mjs","scripts/check-docs-truth.mjs","scripts/check-dual-backend-parity.mjs","scripts/check-fork-readiness.mjs","scripts/check-governance-docs.mjs","scripts/check-migrations.mjs","scripts/check-naming.mjs","scripts/check-os-product-compat.mjs","scripts/check-os-product-runtime.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-schema-sync.mjs","scripts/check-statemachine-write-guard.mjs","scripts/check-ui-acceptance.mjs","scripts/check-validation-source.mjs","scripts/governance-report.mjs","scripts/lib/report-provenance.mjs","scripts/preflight.py","scripts/prepare_model.py","scripts/run.sh","tsconfig.base.json","turbo.json"],"removed":[],"modified":[]}],"total_commits":0,"head_commit":{"id":"dcd85b10ac06ae862fe3789b6bd548838487b8fe","message":"docs: 修正基线表用例计数(156)并说明地板归属\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/minimax-h3-studio/commit/dcd85b10ac06ae862fe3789b6bd548838487b8fe","author":{"name":"hillao","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"hillao","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-29T18:07:34-07:00","added":[],"removed":[],"modified":["CLAUDE.md"]},"repository":{"id":90,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"minimax-h3-studio","full_name":"luoanwu/minimax-h3-studio","description":"MiniMax H3 本地视频生成 Studio:模型下载、管理、加载、采样与交付工作台","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":27,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/minimax-h3-studio/languages","html_url":"https://gitea.g-hi.com/luoanwu/minimax-h3-studio","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/minimax-h3-studio","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/minimax-h3-studio.git","clone_url":"https://gitea.g-hi.com/luoanwu/minimax-h3-studio.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-30T09:07:20+08:00","updated_at":"2026-08-30T09:10:01+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1788052201
|
1788052223
|
0
|
1788052201
|
1788052224
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23543
|
feat: build local Qwen chat workspace
|
91
|
5
|
governance.yml
|
1
|
5
|
0
|
refs/heads/main
|
3c6f499596071037b0035ababe289c015f79d83e
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"0000000000000000000000000000000000000000","after":"3c6f499596071037b0035ababe289c015f79d83e","compare_url":"https://gitea.g-hi.com/","commits":[{"id":"3c6f499596071037b0035ababe289c015f79d83e","message":"feat: build local Qwen chat workspace\n","url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next/commit/3c6f499596071037b0035ababe289c015f79d83e","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-08-29T18:11:39-07:00","added":[".agents/skills/derived-project-framework-sync/SKILL.md",".agents/skills/derived-project-framework-sync/assets/framework-migration.template.md",".agents/skills/derived-project-framework-sync/references/experience-catalog.md",".agents/skills/derived-project-framework-sync/references/migration-protocol.md",".agents/skills/derived-project-framework-sync/scripts/plan-migration.mjs",".agents/skills/derived-project-framework-sync/scripts/record-migration.mjs",".agents/skills/frontend-api-react/SKILL.md",".agents/skills/frontend-view-react/SKILL.md",".agents/skills/frontend-view-react/references/view-templates.md",".agents/skills/fullstack-7layer-react/SKILL.md",".agents/skills/fullstack-7layer-react/references/fullstack-react-templates.md",".agents/skills/zustand-store/SKILL.md",".claude/agents/acceptance-runner.md",".claude/agents/module-blueprint.md",".claude/launch.json",".claude/skills/business-module-intake/SKILL.md",".claude/skills/frontend-api-react/SKILL.md",".claude/skills/frontend-view-react/SKILL.md",".claude/skills/frontend-view-react/references/view-templates.md",".claude/skills/fullstack-7layer-react/SKILL.md",".claude/skills/fullstack-7layer-react/references/fullstack-react-templates.md",".claude/skills/zustand-store/SKILL.md",".env.example",".github/pull_request_template.md",".github/workflows/governance.yml",".gitignore","AGENTS.md","CLAUDE.md","LOCAL_DEPLOYMENT.md","Makefile","apps/api-fastify/.env.example","apps/api-fastify/.gitignore","apps/api-fastify/package.json","apps/api-fastify/prisma/migrations/20260608150500_init/migration.sql","apps/api-fastify/prisma/migrations/20260705080000_outbox_dead_letter/migration.sql","apps/api-fastify/prisma/migrations/20260818090000_outbox_replay_cursor/migration.sql","apps/api-fastify/prisma/migrations/migration_lock.toml","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/app.ts","apps/api-fastify/src/lib/orderMachine.ts","apps/api-fastify/src/lib/statemachine.ts","apps/api-fastify/src/modules/orders/orders.service.ts","apps/api-fastify/src/modules/replay.ts","apps/api-fastify/src/modules/tenant.ts","apps/api-fastify/src/modules/users/users.service.ts","apps/api-fastify/src/plugins/events.ts","apps/api-fastify/src/plugins/outbox.ts","apps/api-fastify/src/plugins/prisma.ts","apps/api-fastify/src/plugins/queue.ts","apps/api-fastify/src/plugins/redis.ts","apps/api-fastify/src/routes/health.ts","apps/api-fastify/src/routes/jobs.ts","apps/api-fastify/src/routes/orders.ts","apps/api-fastify/src/routes/realtime-stats.ts","apps/api-fastify/src/routes/sse.ts","apps/api-fastify/src/routes/users.ts","apps/api-fastify/src/routes/ws.ts","apps/api-fastify/src/server.ts","apps/api-fastify/src/types.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-fastify/test/orders.integration.test.ts","apps/api-fastify/test/outbox.concurrency.test.ts","apps/api-fastify/test/outbox.deadletter.test.ts","apps/api-fastify/test/realtime.command.test.ts","apps/api-fastify/test/realtime.replay.test.ts","apps/api-fastify/test/realtime.stats.test.ts","apps/api-fastify/test/realtime.subscription.test.ts","apps/api-fastify/test/realtime.tenant.test.ts","apps/api-fastify/tsconfig.json","apps/api-fastify/vitest.config.ts","apps/api-nestjs/.env.example","apps/api-nestjs/.gitignore","apps/api-nestjs/docker-compose.yml","apps/api-nestjs/nest-cli.json","apps/api-nestjs/package.json","apps/api-nestjs/prisma/migrations/20260608150500_init/migration.sql","apps/api-nestjs/prisma/migrations/20260705080000_outbox_dead_letter/migration.sql","apps/api-nestjs/prisma/migrations/20260818090000_outbox_replay_cursor/migration.sql","apps/api-nestjs/prisma/migrations/migration_lock.toml","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/prisma/seed.ts","apps/api-nestjs/src/app.module.ts","apps/api-nestjs/src/common/envelope.ts","apps/api-nestjs/src/common/tenant.decorator.ts","apps/api-nestjs/src/common/zod-validation.pipe.ts","apps/api-nestjs/src/create-app.ts","apps/api-nestjs/src/events/connection-registry.service.ts","apps/api-nestjs/src/events/event-bus.service.ts","apps/api-nestjs/src/events/events.gateway.ts","apps/api-nestjs/src/events/events.module.ts","apps/api-nestjs/src/events/fanout.service.ts","apps/api-nestjs/src/events/outbox-dispatcher.service.ts","apps/api-nestjs/src/events/realtime-stats.controller.ts","apps/api-nestjs/src/events/replay.service.ts","apps/api-nestjs/src/health/health.controller.ts","apps/api-nestjs/src/health/health.module.ts","apps/api-nestjs/src/main.ts","apps/api-nestjs/src/orders/orders.controller.ts","apps/api-nestjs/src/orders/orders.module.ts","apps/api-nestjs/src/orders/orders.service.ts","apps/api-nestjs/src/prisma/prisma.module.ts","apps/api-nestjs/src/prisma/prisma.service.ts","apps/api-nestjs/src/queue/jobs.controller.ts","apps/api-nestjs/src/queue/jobs.processor.ts","apps/api-nestjs/src/queue/queue.module.ts","apps/api-nestjs/src/queue/queue.types.ts","apps/api-nestjs/src/redis/redis.module.ts","apps/api-nestjs/src/sse/sse.controller.ts","apps/api-nestjs/src/sse/sse.module.ts","apps/api-nestjs/src/statemachine/index.ts","apps/api-nestjs/src/statemachine/order.machine.ts","apps/api-nestjs/src/statemachine/statemachine.engine.ts","apps/api-nestjs/src/statemachine/statemachine.types.ts","apps/api-nestjs/src/users/users.controller.ts","apps/api-nestjs/src/users/users.module.ts","apps/api-nestjs/src/users/users.service.ts","apps/api-nestjs/test/http.acceptance.test.ts","apps/api-nestjs/test/orders.integration.test.ts","apps/api-nestjs/test/outbox.concurrency.test.ts","apps/api-nestjs/test/outbox.deadletter.test.ts","apps/api-nestjs/test/realtime.command.test.ts","apps/api-nestjs/test/realtime.replay.test.ts","apps/api-nestjs/test/realtime.stats.test.ts","apps/api-nestjs/test/realtime.subscription.test.ts","apps/api-nestjs/test/realtime.tenant.test.ts","apps/api-nestjs/tsconfig.build.json","apps/api-nestjs/tsconfig.json","apps/api-nestjs/vitest.config.ts","apps/web/.env.example","apps/web/.gitignore","apps/web/components.json","apps/web/e2e/acceptance.spec.ts","apps/web/eslint.config.mjs","apps/web/next.config.ts","apps/web/package.json","apps/web/playwright.config.ts","apps/web/postcss.config.js","apps/web/src/app/api/chat/completions/route.ts","apps/web/src/app/api/chat/status/route.ts","apps/web/src/app/api/knowledge/route.ts","apps/web/src/app/api/models/local/route.ts","apps/web/src/app/chat/page.tsx","apps/web/src/app/framework/page.tsx","apps/web/src/app/globals.css","apps/web/src/app/layout.tsx","apps/web/src/app/page.tsx","apps/web/src/components/EventFeed.tsx","apps/web/src/components/OrdersPanel.tsx","apps/web/src/components/RealtimeBar.tsx","apps/web/src/components/UsersPanel.tsx","apps/web/src/components/ui/badge.tsx","apps/web/src/components/ui/button.tsx","apps/web/src/components/ui/card.tsx","apps/web/src/components/ui/input.tsx","apps/web/src/components/ui/label.tsx","apps/web/src/components/ui/separator.tsx","apps/web/src/features/chat/api/chat-api.ts","apps/web/src/features/chat/components/ChatWorkspace.tsx","apps/web/src/features/knowledge/api/knowledge-api.ts","apps/web/src/features/knowledge/hooks/use-knowledge.ts","apps/web/src/hooks/useRealtime.ts","apps/web/src/lib/api.ts","apps/web/src/lib/inference-router.ts","apps/web/src/lib/knowledge-store.ts","apps/web/src/lib/local-origin.ts","apps/web/src/lib/providers.tsx","apps/web/src/lib/types.ts","apps/web/src/lib/utils.ts","apps/web/src/lib/web-search.ts","apps/web/src/store/realtime.ts","apps/web/src/store/useAppStore.ts","apps/web/src/stores/chat-ui-store.ts","apps/web/tailwind.config.ts","apps/web/tsconfig.json","deploy/download_model.sh","deploy/juhai.qwen.web.plist","deploy/local.sh","deploy/model-manifest.json","deploy/model_manager.sh","deploy/smoke_test.py","docs/README.md","docs/adr/0001-use-typescript-fullstack.md","docs/adr/0002-use-nextjs-app-router.md","docs/adr/0003-use-nestjs-with-fastify-adapter.md","docs/adr/0004-use-postgresql.md","docs/adr/0005-use-prisma.md","docs/adr/0006-realtime-sse-and-websocket.md","docs/adr/0007-use-bullmq-queue.md","docs/adr/0008-monorepo-pnpm-turborepo.md","docs/adr/0009-dual-backend-governance-parity.md","docs/adr/README.md","docs/architecture/chat-service.md","docs/domain-glossary.md","docs/domain/chat-blueprint.md","docs/domain/owner-matrix.md","docs/framework-migration.md","docs/governance-experience.md","docs/migration-playbook.md","docs/os-product-extension.md","docs/standards/api-standard.md","docs/standards/backend-standard.md","docs/standards/database-standard.md","docs/standards/frontend-standard.md","docs/standards/git-standard.md","docs/standards/naming-standard.md","docs/standards/review-standard.md","governance.registry.json","governance.registry.schema.json","kernel.products.json","memory/glossary.md","package.json","packages/config/eslint/base.mjs","packages/config/package.json","packages/config/prettier/index.json","packages/config/tsconfig/base.json","packages/config/tsconfig/nextjs.json","packages/config/tsconfig/node.json","packages/contracts/package.json","packages/contracts/src/chat.ts","packages/contracts/src/contracts.test.ts","packages/contracts/src/index.ts","packages/contracts/src/job.ts","packages/contracts/src/order.ts","packages/contracts/src/realtime-command.test.ts","packages/contracts/src/realtime-command.ts","packages/contracts/src/realtime-stats.ts","packages/contracts/src/realtime.ts","packages/contracts/src/replay.test.ts","packages/contracts/src/replay.ts","packages/contracts/src/statemachine.test.ts","packages/contracts/src/statemachine.ts","packages/contracts/src/subscription.test.ts","packages/contracts/src/subscription.ts","packages/contracts/src/tenant.ts","packages/contracts/src/user.ts","packages/contracts/tsconfig.json","pnpm-lock.yaml","pnpm-workspace.yaml","products/juhai.qwen38flashnext/README.md","products/juhai.qwen38flashnext/acceptance/juhai.qwen38flashnext.order.acceptance.mjs","products/juhai.qwen38flashnext/migrations/juhai.qwen38flashnext.order/20260826090000_create_orders.sql","products/juhai.qwen38flashnext/migrations/juhai.qwen38flashnext.order/20260826091000_create_order_events.sql","products/juhai.qwen38flashnext/package.json","products/juhai.qwen38flashnext/product.manifest.json","products/juhai.qwen38flashnext/src/contracts.ts","products/juhai.qwen38flashnext/src/fastify.ts","products/juhai.qwen38flashnext/src/host.ts","products/juhai.qwen38flashnext/src/index.ts","products/juhai.qwen38flashnext/src/manifest.ts","products/juhai.qwen38flashnext/src/nestjs.ts","products/juhai.qwen38flashnext/src/order-repository.ts","products/juhai.qwen38flashnext/src/tools.ts","products/juhai.qwen38flashnext/src/web.tsx","products/juhai.qwen38flashnext/test/os-host.runtime.test.ts","products/juhai.qwen38flashnext/tsconfig.os-host.json","products/juhai.qwen38flashnext/vitest.os-host.config.ts","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/framework-migration.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/os-product-compat.latest.json","reports/os-product-runtime.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-contract-consumers.mjs","scripts/check-docs-truth.mjs","scripts/check-dual-backend-parity.mjs","scripts/check-fork-readiness.mjs","scripts/check-governance-docs.mjs","scripts/check-migrations.mjs","scripts/check-naming.mjs","scripts/check-os-product-compat.mjs","scripts/check-os-product-runtime.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-schema-sync.mjs","scripts/check-statemachine-write-guard.mjs","scripts/check-ui-acceptance.mjs","scripts/check-validation-source.mjs","scripts/governance-env.sh","scripts/governance-report.mjs","scripts/governance-stack.sh","scripts/lib/os-root.mjs","scripts/lib/report-provenance.mjs","tsconfig.base.json","turbo.json"],"removed":[],"modified":["README.md"]},{"id":"69885871a64393807d988b27b1b5e380e8f28526","message":"add mlx-vlm support (#3)","url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next/commit/69885871a64393807d988b27b1b5e380e8f28526","author":{"name":"Ren Xuancheng","email":"jklj077@users.noreply.github.com","username":""},"committer":{"name":"GitHub","email":"noreply@github.com","username":""},"verification":null,"timestamp":"2026-08-27T15:29:26+08:00","added":[],"removed":[],"modified":["README.md"]},{"id":"513aa6e18a335296fc13e538232a8735b230877d","message":"Update README.md (#1)\n\nupdate unsloth guide link","url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next/commit/513aa6e18a335296fc13e538232a8735b230877d","author":{"name":"Ren Xuancheng","email":"jklj077@users.noreply.github.com","username":""},"committer":{"name":"GitHub","email":"noreply@github.com","username":""},"verification":null,"timestamp":"2026-08-26T21:05:07+08:00","added":[],"removed":[],"modified":["README.md"]},{"id":"4f58f4ddd855bedaf7eadcd53bbbb1b3362cecff","message":"Initial commit\n","url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next/commit/4f58f4ddd855bedaf7eadcd53bbbb1b3362cecff","author":{"name":"Ren Xuancheng","email":"jklj077@users.noreply.github.com","username":""},"committer":{"name":"Ren Xuancheng","email":"jklj077@users.noreply.github.com","username":""},"verification":null,"timestamp":"2026-08-26T20:29:38+08:00","added":["README.md","tech_report.pdf"],"removed":[],"modified":[]}],"total_commits":0,"head_commit":{"id":"3c6f499596071037b0035ababe289c015f79d83e","message":"feat: build local Qwen chat workspace\n","url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next/commit/3c6f499596071037b0035ababe289c015f79d83e","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-08-29T18:11:39-07:00","added":[".agents/skills/derived-project-framework-sync/SKILL.md",".agents/skills/derived-project-framework-sync/assets/framework-migration.template.md",".agents/skills/derived-project-framework-sync/references/experience-catalog.md",".agents/skills/derived-project-framework-sync/references/migration-protocol.md",".agents/skills/derived-project-framework-sync/scripts/plan-migration.mjs",".agents/skills/derived-project-framework-sync/scripts/record-migration.mjs",".agents/skills/frontend-api-react/SKILL.md",".agents/skills/frontend-view-react/SKILL.md",".agents/skills/frontend-view-react/references/view-templates.md",".agents/skills/fullstack-7layer-react/SKILL.md",".agents/skills/fullstack-7layer-react/references/fullstack-react-templates.md",".agents/skills/zustand-store/SKILL.md",".claude/agents/acceptance-runner.md",".claude/agents/module-blueprint.md",".claude/launch.json",".claude/skills/business-module-intake/SKILL.md",".claude/skills/frontend-api-react/SKILL.md",".claude/skills/frontend-view-react/SKILL.md",".claude/skills/frontend-view-react/references/view-templates.md",".claude/skills/fullstack-7layer-react/SKILL.md",".claude/skills/fullstack-7layer-react/references/fullstack-react-templates.md",".claude/skills/zustand-store/SKILL.md",".env.example",".github/pull_request_template.md",".github/workflows/governance.yml",".gitignore","AGENTS.md","CLAUDE.md","LOCAL_DEPLOYMENT.md","Makefile","apps/api-fastify/.env.example","apps/api-fastify/.gitignore","apps/api-fastify/package.json","apps/api-fastify/prisma/migrations/20260608150500_init/migration.sql","apps/api-fastify/prisma/migrations/20260705080000_outbox_dead_letter/migration.sql","apps/api-fastify/prisma/migrations/20260818090000_outbox_replay_cursor/migration.sql","apps/api-fastify/prisma/migrations/migration_lock.toml","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/app.ts","apps/api-fastify/src/lib/orderMachine.ts","apps/api-fastify/src/lib/statemachine.ts","apps/api-fastify/src/modules/orders/orders.service.ts","apps/api-fastify/src/modules/replay.ts","apps/api-fastify/src/modules/tenant.ts","apps/api-fastify/src/modules/users/users.service.ts","apps/api-fastify/src/plugins/events.ts","apps/api-fastify/src/plugins/outbox.ts","apps/api-fastify/src/plugins/prisma.ts","apps/api-fastify/src/plugins/queue.ts","apps/api-fastify/src/plugins/redis.ts","apps/api-fastify/src/routes/health.ts","apps/api-fastify/src/routes/jobs.ts","apps/api-fastify/src/routes/orders.ts","apps/api-fastify/src/routes/realtime-stats.ts","apps/api-fastify/src/routes/sse.ts","apps/api-fastify/src/routes/users.ts","apps/api-fastify/src/routes/ws.ts","apps/api-fastify/src/server.ts","apps/api-fastify/src/types.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-fastify/test/orders.integration.test.ts","apps/api-fastify/test/outbox.concurrency.test.ts","apps/api-fastify/test/outbox.deadletter.test.ts","apps/api-fastify/test/realtime.command.test.ts","apps/api-fastify/test/realtime.replay.test.ts","apps/api-fastify/test/realtime.stats.test.ts","apps/api-fastify/test/realtime.subscription.test.ts","apps/api-fastify/test/realtime.tenant.test.ts","apps/api-fastify/tsconfig.json","apps/api-fastify/vitest.config.ts","apps/api-nestjs/.env.example","apps/api-nestjs/.gitignore","apps/api-nestjs/docker-compose.yml","apps/api-nestjs/nest-cli.json","apps/api-nestjs/package.json","apps/api-nestjs/prisma/migrations/20260608150500_init/migration.sql","apps/api-nestjs/prisma/migrations/20260705080000_outbox_dead_letter/migration.sql","apps/api-nestjs/prisma/migrations/20260818090000_outbox_replay_cursor/migration.sql","apps/api-nestjs/prisma/migrations/migration_lock.toml","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/prisma/seed.ts","apps/api-nestjs/src/app.module.ts","apps/api-nestjs/src/common/envelope.ts","apps/api-nestjs/src/common/tenant.decorator.ts","apps/api-nestjs/src/common/zod-validation.pipe.ts","apps/api-nestjs/src/create-app.ts","apps/api-nestjs/src/events/connection-registry.service.ts","apps/api-nestjs/src/events/event-bus.service.ts","apps/api-nestjs/src/events/events.gateway.ts","apps/api-nestjs/src/events/events.module.ts","apps/api-nestjs/src/events/fanout.service.ts","apps/api-nestjs/src/events/outbox-dispatcher.service.ts","apps/api-nestjs/src/events/realtime-stats.controller.ts","apps/api-nestjs/src/events/replay.service.ts","apps/api-nestjs/src/health/health.controller.ts","apps/api-nestjs/src/health/health.module.ts","apps/api-nestjs/src/main.ts","apps/api-nestjs/src/orders/orders.controller.ts","apps/api-nestjs/src/orders/orders.module.ts","apps/api-nestjs/src/orders/orders.service.ts","apps/api-nestjs/src/prisma/prisma.module.ts","apps/api-nestjs/src/prisma/prisma.service.ts","apps/api-nestjs/src/queue/jobs.controller.ts","apps/api-nestjs/src/queue/jobs.processor.ts","apps/api-nestjs/src/queue/queue.module.ts","apps/api-nestjs/src/queue/queue.types.ts","apps/api-nestjs/src/redis/redis.module.ts","apps/api-nestjs/src/sse/sse.controller.ts","apps/api-nestjs/src/sse/sse.module.ts","apps/api-nestjs/src/statemachine/index.ts","apps/api-nestjs/src/statemachine/order.machine.ts","apps/api-nestjs/src/statemachine/statemachine.engine.ts","apps/api-nestjs/src/statemachine/statemachine.types.ts","apps/api-nestjs/src/users/users.controller.ts","apps/api-nestjs/src/users/users.module.ts","apps/api-nestjs/src/users/users.service.ts","apps/api-nestjs/test/http.acceptance.test.ts","apps/api-nestjs/test/orders.integration.test.ts","apps/api-nestjs/test/outbox.concurrency.test.ts","apps/api-nestjs/test/outbox.deadletter.test.ts","apps/api-nestjs/test/realtime.command.test.ts","apps/api-nestjs/test/realtime.replay.test.ts","apps/api-nestjs/test/realtime.stats.test.ts","apps/api-nestjs/test/realtime.subscription.test.ts","apps/api-nestjs/test/realtime.tenant.test.ts","apps/api-nestjs/tsconfig.build.json","apps/api-nestjs/tsconfig.json","apps/api-nestjs/vitest.config.ts","apps/web/.env.example","apps/web/.gitignore","apps/web/components.json","apps/web/e2e/acceptance.spec.ts","apps/web/eslint.config.mjs","apps/web/next.config.ts","apps/web/package.json","apps/web/playwright.config.ts","apps/web/postcss.config.js","apps/web/src/app/api/chat/completions/route.ts","apps/web/src/app/api/chat/status/route.ts","apps/web/src/app/api/knowledge/route.ts","apps/web/src/app/api/models/local/route.ts","apps/web/src/app/chat/page.tsx","apps/web/src/app/framework/page.tsx","apps/web/src/app/globals.css","apps/web/src/app/layout.tsx","apps/web/src/app/page.tsx","apps/web/src/components/EventFeed.tsx","apps/web/src/components/OrdersPanel.tsx","apps/web/src/components/RealtimeBar.tsx","apps/web/src/components/UsersPanel.tsx","apps/web/src/components/ui/badge.tsx","apps/web/src/components/ui/button.tsx","apps/web/src/components/ui/card.tsx","apps/web/src/components/ui/input.tsx","apps/web/src/components/ui/label.tsx","apps/web/src/components/ui/separator.tsx","apps/web/src/features/chat/api/chat-api.ts","apps/web/src/features/chat/components/ChatWorkspace.tsx","apps/web/src/features/knowledge/api/knowledge-api.ts","apps/web/src/features/knowledge/hooks/use-knowledge.ts","apps/web/src/hooks/useRealtime.ts","apps/web/src/lib/api.ts","apps/web/src/lib/inference-router.ts","apps/web/src/lib/knowledge-store.ts","apps/web/src/lib/local-origin.ts","apps/web/src/lib/providers.tsx","apps/web/src/lib/types.ts","apps/web/src/lib/utils.ts","apps/web/src/lib/web-search.ts","apps/web/src/store/realtime.ts","apps/web/src/store/useAppStore.ts","apps/web/src/stores/chat-ui-store.ts","apps/web/tailwind.config.ts","apps/web/tsconfig.json","deploy/download_model.sh","deploy/juhai.qwen.web.plist","deploy/local.sh","deploy/model-manifest.json","deploy/model_manager.sh","deploy/smoke_test.py","docs/README.md","docs/adr/0001-use-typescript-fullstack.md","docs/adr/0002-use-nextjs-app-router.md","docs/adr/0003-use-nestjs-with-fastify-adapter.md","docs/adr/0004-use-postgresql.md","docs/adr/0005-use-prisma.md","docs/adr/0006-realtime-sse-and-websocket.md","docs/adr/0007-use-bullmq-queue.md","docs/adr/0008-monorepo-pnpm-turborepo.md","docs/adr/0009-dual-backend-governance-parity.md","docs/adr/README.md","docs/architecture/chat-service.md","docs/domain-glossary.md","docs/domain/chat-blueprint.md","docs/domain/owner-matrix.md","docs/framework-migration.md","docs/governance-experience.md","docs/migration-playbook.md","docs/os-product-extension.md","docs/standards/api-standard.md","docs/standards/backend-standard.md","docs/standards/database-standard.md","docs/standards/frontend-standard.md","docs/standards/git-standard.md","docs/standards/naming-standard.md","docs/standards/review-standard.md","governance.registry.json","governance.registry.schema.json","kernel.products.json","memory/glossary.md","package.json","packages/config/eslint/base.mjs","packages/config/package.json","packages/config/prettier/index.json","packages/config/tsconfig/base.json","packages/config/tsconfig/nextjs.json","packages/config/tsconfig/node.json","packages/contracts/package.json","packages/contracts/src/chat.ts","packages/contracts/src/contracts.test.ts","packages/contracts/src/index.ts","packages/contracts/src/job.ts","packages/contracts/src/order.ts","packages/contracts/src/realtime-command.test.ts","packages/contracts/src/realtime-command.ts","packages/contracts/src/realtime-stats.ts","packages/contracts/src/realtime.ts","packages/contracts/src/replay.test.ts","packages/contracts/src/replay.ts","packages/contracts/src/statemachine.test.ts","packages/contracts/src/statemachine.ts","packages/contracts/src/subscription.test.ts","packages/contracts/src/subscription.ts","packages/contracts/src/tenant.ts","packages/contracts/src/user.ts","packages/contracts/tsconfig.json","pnpm-lock.yaml","pnpm-workspace.yaml","products/juhai.qwen38flashnext/README.md","products/juhai.qwen38flashnext/acceptance/juhai.qwen38flashnext.order.acceptance.mjs","products/juhai.qwen38flashnext/migrations/juhai.qwen38flashnext.order/20260826090000_create_orders.sql","products/juhai.qwen38flashnext/migrations/juhai.qwen38flashnext.order/20260826091000_create_order_events.sql","products/juhai.qwen38flashnext/package.json","products/juhai.qwen38flashnext/product.manifest.json","products/juhai.qwen38flashnext/src/contracts.ts","products/juhai.qwen38flashnext/src/fastify.ts","products/juhai.qwen38flashnext/src/host.ts","products/juhai.qwen38flashnext/src/index.ts","products/juhai.qwen38flashnext/src/manifest.ts","products/juhai.qwen38flashnext/src/nestjs.ts","products/juhai.qwen38flashnext/src/order-repository.ts","products/juhai.qwen38flashnext/src/tools.ts","products/juhai.qwen38flashnext/src/web.tsx","products/juhai.qwen38flashnext/test/os-host.runtime.test.ts","products/juhai.qwen38flashnext/tsconfig.os-host.json","products/juhai.qwen38flashnext/vitest.os-host.config.ts","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/framework-migration.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/os-product-compat.latest.json","reports/os-product-runtime.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-contract-consumers.mjs","scripts/check-docs-truth.mjs","scripts/check-dual-backend-parity.mjs","scripts/check-fork-readiness.mjs","scripts/check-governance-docs.mjs","scripts/check-migrations.mjs","scripts/check-naming.mjs","scripts/check-os-product-compat.mjs","scripts/check-os-product-runtime.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-schema-sync.mjs","scripts/check-statemachine-write-guard.mjs","scripts/check-ui-acceptance.mjs","scripts/check-validation-source.mjs","scripts/governance-env.sh","scripts/governance-report.mjs","scripts/governance-stack.sh","scripts/lib/os-root.mjs","scripts/lib/report-provenance.mjs","tsconfig.base.json","turbo.json"],"removed":[],"modified":["README.md"]},"repository":{"id":91,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"qwen3-8-flash-next","full_name":"luoanwu/qwen3-8-flash-next","description":"Qwen3.8-Flash-Next 本地部署与多模态 Chat/RAG 工作台","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":27,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/qwen3-8-flash-next/languages","html_url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/qwen3-8-flash-next","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/qwen3-8-flash-next.git","clone_url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-30T09:20:06+08:00","updated_at":"2026-08-30T09:21:20+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1788052881
|
1788052902
|
0
|
1788052880
|
1788052902
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23544
|
chore(governance): refresh static gate reports on chore(governance): refresh static gate reports on clean tree...
|
91
|
5
|
governance.yml
|
2
|
5
|
0
|
refs/heads/main
|
3ace3ff6a846bd8e245bbeb090fd28d683945735
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"3c6f499596071037b0035ababe289c015f79d83e","after":"3ace3ff6a846bd8e245bbeb090fd28d683945735","compare_url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next/compare/3c6f499596071037b0035ababe289c015f79d83e...3ace3ff6a846bd8e245bbeb090fd28d683945735","commits":[{"id":"3ace3ff6a846bd8e245bbeb090fd28d683945735","message":"chore(governance): refresh static gate reports on clean tree\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next/commit/3ace3ff6a846bd8e245bbeb090fd28d683945735","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-08-29T18:31:39-07:00","added":[],"removed":[],"modified":["reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/os-product-compat.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},{"id":"648ba8e93c2bfd882ef75360749ef3565c7d84d9","message":"docs(governance): record clean-commit evidence upgrade and flake triage\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next/commit/648ba8e93c2bfd882ef75360749ef3565c7d84d9","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-08-29T18:31:04-07:00","added":[],"removed":[],"modified":["docs/governance-experience.md","reports/docs-truth.latest.json","reports/naming.latest.json"]},{"id":"957fa8868180fffbb7fdedfe7678a73b978dff55","message":"chore(governance): bind full acceptance evidence to clean commit\n\n四级门禁在 clean tree(166f9b3)上全量实跑:静态 12 门禁 + lint/typecheck、\n真实 DB 155 tests、浏览器 4 cases(新 /framework 探针)、OS 双宿主 8 cases、\n治理棘轮无回退。16 份 gate 报告 provenance 全部 gitSha=166f9b3 /\nworktreeDirty=false——迁移后首批绑定 clean commit 的验收证据。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next/commit/957fa8868180fffbb7fdedfe7678a73b978dff55","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-08-29T18:30:27-07:00","added":[],"removed":[],"modified":["reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/os-product-compat.latest.json","reports/os-product-runtime.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json"]},{"id":"166f9b35fa2a343f6d35562b2f7f5593d42fe982","message":"fix(governance): harden UI gate diagnosis and readiness probe\n\n两次 ERR_EMPTY_RESPONSE 闪失(重跑即绿、与并行会话的 dev server 活动\n时间窗重合)暴露了取证空洞:\n- playwright 失败时自动落盘 api/web 长驻子进程日志(status 0 纯诊断步骤)\n- startChild 记录子进程退出事件,区分「进程退了」与「内部 worker 死了」\n- web 就绪探针从 / 改为 /framework:预热被测路由,worker 静默死亡会\n 落在 web-start 步骤并带日志判责,而非 playwright 无头悬案\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next/commit/166f9b35fa2a343f6d35562b2f7f5593d42fe982","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-08-29T18:28:52-07:00","added":[],"removed":[],"modified":["scripts/check-ui-acceptance.mjs"]},{"id":"836337c72a03c6e23ee92f263fde807fb25d296b","message":"docs(governance): bind baseline scope to committed snapshot\n\n框架快照已入库(3c6f499),GOVERNANCE-BASELINE 作用域从「dirty 工作区」\n升级为「clean commit」;SHA/dirty 绑定以各 reports/*.latest.json 的\nprovenance 字段为准,不再在文档里硬编码易过期的 HEAD。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next/commit/836337c72a03c6e23ee92f263fde807fb25d296b","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-08-29T18:24:28-07:00","added":[],"removed":[],"modified":["CLAUDE.md","docs/framework-migration.md"]}],"total_commits":0,"head_commit":{"id":"3ace3ff6a846bd8e245bbeb090fd28d683945735","message":"chore(governance): refresh static gate reports on clean tree\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next/commit/3ace3ff6a846bd8e245bbeb090fd28d683945735","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-08-29T18:31:39-07:00","added":[],"removed":[],"modified":["reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/os-product-compat.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},"repository":{"id":91,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"qwen3-8-flash-next","full_name":"luoanwu/qwen3-8-flash-next","description":"Qwen3.8-Flash-Next 本地部署与多模态 Chat/RAG 工作台","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":2847,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/qwen3-8-flash-next/languages","html_url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/qwen3-8-flash-next","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/qwen3-8-flash-next.git","clone_url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-30T09:20:06+08:00","updated_at":"2026-08-30T09:21:20+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1788053600
|
1788053619
|
0
|
1788053599
|
1788053621
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23545
|
chore(governance): refresh doc gate reports on cle chore(governance): refresh doc gate reports on clean tree...
|
91
|
5
|
governance.yml
|
3
|
5
|
0
|
refs/heads/main
|
e20004f4776df6413cdfa4d0b49afdd9bea5b69e
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"3ace3ff6a846bd8e245bbeb090fd28d683945735","after":"e20004f4776df6413cdfa4d0b49afdd9bea5b69e","compare_url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next/compare/3ace3ff6a846bd8e245bbeb090fd28d683945735...e20004f4776df6413cdfa4d0b49afdd9bea5b69e","commits":[{"id":"e20004f4776df6413cdfa4d0b49afdd9bea5b69e","message":"chore(governance): refresh doc gate reports on clean tree\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next/commit/e20004f4776df6413cdfa4d0b49afdd9bea5b69e","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-08-29T18:34:18-07:00","added":[],"removed":[],"modified":["reports/docs-truth.latest.json","reports/governance-docs.latest.json"]},{"id":"2c7e739738f706c97e1a03cbb97b227422935b43","message":"docs(governance): record remote publication of 3ace3ff\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next/commit/2c7e739738f706c97e1a03cbb97b227422935b43","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-08-29T18:34:02-07:00","added":[],"removed":[],"modified":["CLAUDE.md"]}],"total_commits":0,"head_commit":{"id":"e20004f4776df6413cdfa4d0b49afdd9bea5b69e","message":"chore(governance): refresh doc gate reports on clean tree\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next/commit/e20004f4776df6413cdfa4d0b49afdd9bea5b69e","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-08-29T18:34:18-07:00","added":[],"removed":[],"modified":["reports/docs-truth.latest.json","reports/governance-docs.latest.json"]},"repository":{"id":91,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"qwen3-8-flash-next","full_name":"luoanwu/qwen3-8-flash-next","description":"Qwen3.8-Flash-Next 本地部署与多模态 Chat/RAG 工作台","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":2932,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/qwen3-8-flash-next/languages","html_url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/qwen3-8-flash-next","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/qwen3-8-flash-next.git","clone_url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-30T09:20:06+08:00","updated_at":"2026-08-30T09:33:19+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1788053742
|
1788053762
|
0
|
1788053741
|
1788053762
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23546
|
chore(governance): refresh gate reports after CI p chore(governance): refresh gate reports after CI provisioning...
|
91
|
5
|
governance.yml
|
4
|
5
|
0
|
refs/heads/main
|
e465f302d62150997d35782bfec2304043dd605d
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"e20004f4776df6413cdfa4d0b49afdd9bea5b69e","after":"e465f302d62150997d35782bfec2304043dd605d","compare_url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next/compare/e20004f4776df6413cdfa4d0b49afdd9bea5b69e...e465f302d62150997d35782bfec2304043dd605d","commits":[{"id":"e465f302d62150997d35782bfec2304043dd605d","message":"chore(governance): refresh gate reports after CI provisioning\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next/commit/e465f302d62150997d35782bfec2304043dd605d","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-08-29T18:45:26-07:00","added":[],"removed":[],"modified":["reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/os-product-compat.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},{"id":"19e459216a9fd617ba77d9ae5242218d511bff0e","message":"feat(ci): provision Digital Employee OS source for check:os-product\n\nCI 的 os-product 门禁曾必然 fail-closed(runner 上无 OS 源码,G14 同族)。\n按拍板方案「提供 OS 源码」落地:\n\n- static-governance job 按 SHA 钉版(fcbd389,与本地验收口径一致)克隆\n 同实例私有仓 luoanwu/digital-employee-os 到 RUNNER_TEMP(工作区外,\n 防 naming/治理扫描误扫),frozen install + 构建 contracts 后跑 pnpm check\n- token 走 secrets.OS_CHECKOUT_TOKEN(GITEA_TOKEN 兜底)\n- 两 job Node 20→22(OS engines \u003e=22 与本仓 \u003e=20 取并集)\n\n冷启动配方已本地彩排(SHA 直取/安装/构建/check:os-product 绿),\n钉版负向已验(错 SHA → O0-SHA 红)。CI 首绿仍需仓库侧配置\nOS_CHECKOUT_TOKEN secret 与可用 runner。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next/commit/19e459216a9fd617ba77d9ae5242218d511bff0e","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-08-29T18:45:03-07:00","added":[],"removed":[],"modified":[".github/workflows/governance.yml","CLAUDE.md"]}],"total_commits":0,"head_commit":{"id":"e465f302d62150997d35782bfec2304043dd605d","message":"chore(governance): refresh gate reports after CI provisioning\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next/commit/e465f302d62150997d35782bfec2304043dd605d","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-08-29T18:45:26-07:00","added":[],"removed":[],"modified":["reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/os-product-compat.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},"repository":{"id":91,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"qwen3-8-flash-next","full_name":"luoanwu/qwen3-8-flash-next","description":"Qwen3.8-Flash-Next 本地部署与多模态 Chat/RAG 工作台","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":2955,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/qwen3-8-flash-next/languages","html_url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/qwen3-8-flash-next","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/qwen3-8-flash-next.git","clone_url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-30T09:20:06+08:00","updated_at":"2026-08-30T09:35:41+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1788054332
|
1788054370
|
0
|
1788054330
|
1788054372
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23548
|
fix(ci): self-provision isolated PG/Redis for host fix(ci): self-provision isolated PG/Redis for host-mode runner...
|
91
|
5
|
governance.yml
|
6
|
5
|
0
|
refs/heads/main
|
625450881bfb787bfa4ac092e11bfe534c340163
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"fed53f136145fe82cb7dc0a4ee7b8b5453bfddd0","after":"625450881bfb787bfa4ac092e11bfe534c340163","compare_url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next/compare/fed53f136145fe82cb7dc0a4ee7b8b5453bfddd0...625450881bfb787bfa4ac092e11bfe534c340163","commits":[{"id":"625450881bfb787bfa4ac092e11bfe534c340163","message":"fix(ci): self-provision isolated PG/Redis for host-mode runner\n\nCI run #5 实锤:act_runner 以 host 模式执行,services 块被静默忽略,\n127.0.0.1:5432 命中 runner 宿主上另一个 postgres(P1000 凭据拒绝)——\n「端口连得上」推不出「基座正确」的远端形态。runtime job 改为步骤内\ndocker 自备基座:随机宿主端口 + run_id 后缀命名 + if:always 清理,\n缺 docker 时显式报错指路。Playwright 下载走 npmmirror(大陆网络直连\nCDN 假死为本机实测教训)。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next/commit/625450881bfb787bfa4ac092e11bfe534c340163","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-08-29T18:56:43-07:00","added":[],"removed":[],"modified":[".github/workflows/governance.yml"]}],"total_commits":0,"head_commit":{"id":"625450881bfb787bfa4ac092e11bfe534c340163","message":"fix(ci): self-provision isolated PG/Redis for host-mode runner\n\nCI run #5 实锤:act_runner 以 host 模式执行,services 块被静默忽略,\n127.0.0.1:5432 命中 runner 宿主上另一个 postgres(P1000 凭据拒绝)——\n「端口连得上」推不出「基座正确」的远端形态。runtime job 改为步骤内\ndocker 自备基座:随机宿主端口 + run_id 后缀命名 + if:always 清理,\n缺 docker 时显式报错指路。Playwright 下载走 npmmirror(大陆网络直连\nCDN 假死为本机实测教训)。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next/commit/625450881bfb787bfa4ac092e11bfe534c340163","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-08-29T18:56:43-07:00","added":[],"removed":[],"modified":[".github/workflows/governance.yml"]},"repository":{"id":91,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"qwen3-8-flash-next","full_name":"luoanwu/qwen3-8-flash-next","description":"Qwen3.8-Flash-Next 本地部署与多模态 Chat/RAG 工作台","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":2989,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/qwen3-8-flash-next/languages","html_url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/qwen3-8-flash-next","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/qwen3-8-flash-next.git","clone_url":"https://gitea.g-hi.com/luoanwu/qwen3-8-flash-next.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-30T09:20:06+08:00","updated_at":"2026-08-30T09:49:53+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1788055008
|
1788055099
|
0
|
1788055006
|
1788055099
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23553
|
fix: runtime 验收测试步串行化 + G18 回灌今晚实时抖动实锤
|
90
|
5
|
governance.yml
|
2
|
5
|
0
|
refs/heads/main
|
46dce73b5cfc83e6e6cfb87922f22faee76fdd28
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"dcd85b10ac06ae862fe3789b6bd548838487b8fe","after":"46dce73b5cfc83e6e6cfb87922f22faee76fdd28","compare_url":"https://gitea.g-hi.com/luoanwu/minimax-h3-studio/compare/dcd85b10ac06ae862fe3789b6bd548838487b8fe...46dce73b5cfc83e6e6cfb87922f22faee76fdd28","commits":[{"id":"46dce73b5cfc83e6e6cfb87922f22faee76fdd28","message":"fix: runtime 验收测试步串行化 + G18 回灌今晚实时抖动实锤\n\n- check-runtime-acceptance 测试步加 --concurrency=1:双后端共库并行时\n TRUNCATE/领取/连接注册在表锁相撞(双进程并发最小复现证实)\n- 串行下仍偶发整文件投递全灭 → 指向 RedisModule 订阅启动竞态,\n 关闭条件(订阅就绪屏障 / 分库恢复并行)记入 G18\n- 基线地板收紧:testsPassed 172 / uiTestsPassed 10\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/minimax-h3-studio/commit/46dce73b5cfc83e6e6cfb87922f22faee76fdd28","author":{"name":"hillao","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"hillao","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-29T19:36:22-07:00","added":[],"removed":[],"modified":["CLAUDE.md","scripts/check-runtime-acceptance.mjs"]},{"id":"fe0779750f85dd39efc62643868fa45a373f2833","message":"feat: 多段分镜工作流(业务模块接待全流程落地 + 真实端到端验证)\n\n- 契约/状态机单源 contracts/h3-storyboard.ts(draft→generating→assembling→completed,\n failed/cancelled 可续跑、completed 仅 restart)+ 11 条契约测试;字段 schema 与\n 17n+5 帧数换算收敛为 h3.ts 单源\n- 编排 lib/h3-storyboards.ts:段状态派生自 H3Job;读时 reconcile + 15s 定时器兜底推进;\n 与单段生成共用互斥(advance 不持锁调 createJob,防自锁死);硬切拼接\n scripts/concat_segments.py(stream-copy 优先,回退重编码)\n- /storyboard 独立工作台页(分段编辑器/队列进度/成片预览)+ 6 个 API 路由 +\n Range 流式单源 http-range.ts;e2e 新增 2 用例(装配+边界提示 / API 生命周期与 409)\n- 真实端到端验证通过(2026-08-29,256²/2 步双段):自动推进、拼接成片 10.38s、\n 互斥/失败/续跑路径全实测——过程中实锤并修复两起环境事故:\n * bootstrap 自动 cp .env.example 把缓存指向空项目目录→触发全量重下(HC1):\n 模板缓存默认改为跟随用户级 + 就绪标记绑定缓存目录与 revision\n * xet/CAS 通道静默挂死(HC2):默认禁用 xet(显式 H3_HF_ENABLE_XET 才启用,\n 三入口 setdefault 单源)+ HF_HUB_ETAG_TIMEOUT=5\n- 蓝图/owner-matrix/词典/README/CLAUDE.md 动态区同步回灌\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/minimax-h3-studio/commit/fe0779750f85dd39efc62643868fa45a373f2833","author":{"name":"hillao","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"hillao","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-29T19:19:57-07:00","added":["apps/web/src/app/api/h3/storyboards/[id]/artifact/route.ts","apps/web/src/app/api/h3/storyboards/[id]/cancel/route.ts","apps/web/src/app/api/h3/storyboards/[id]/route.ts","apps/web/src/app/api/h3/storyboards/[id]/start/route.ts","apps/web/src/app/api/h3/storyboards/route.ts","apps/web/src/app/storyboard/page.tsx","apps/web/src/features/h3/components/StoryboardWorkspace.tsx","apps/web/src/features/h3/components/fields.tsx","apps/web/src/features/h3/lib/display.ts","apps/web/src/lib/h3-storyboards.ts","apps/web/src/lib/http-range.ts","docs/domain/storyboard-blueprint.md","packages/contracts/src/h3-storyboard.test.ts","packages/contracts/src/h3-storyboard.ts","scripts/concat_segments.py"],"removed":[],"modified":[".env.example","CLAUDE.md","README.md","apps/web/e2e/acceptance.spec.ts","apps/web/src/app/api/h3/jobs/[id]/artifact/route.ts","apps/web/src/features/h3/api/h3-api.ts","apps/web/src/features/h3/components/H3Workspace.tsx","apps/web/src/lib/h3-environment.ts","apps/web/src/lib/h3-model-manager.ts","docs/domain-glossary.md","docs/domain/owner-matrix.md","generate.py","packages/contracts/src/h3.ts","packages/contracts/src/index.ts","packages/contracts/tsconfig.tsbuildinfo","scripts/prepare_model.py"]},{"id":"cfdef16f1839583dfdbd8ac3c59ccf966238cdfc","message":"feat: 任务参数摘要与一键复用 + CI 库名重绑定\n\n- 任务行展示 分辨率/帧数/步数/seed 摘要;动作按钮群移至右上(复用参数 + 删除)\n- 复用参数:把历史任务的提示词与全部参数一键填回创作表单(浏览器实测验证)\n- 下载文件名改为 minimax-h3-\u003cid前8位\u003e.mp4\n- .github/workflows/governance.yml 三处 base_framework_ci → minimax_h3_studio_ci\n (否则未来远端 CI 必被 G15 前缀守卫拦截)\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/minimax-h3-studio/commit/cfdef16f1839583dfdbd8ac3c59ccf966238cdfc","author":{"name":"hillao","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"hillao","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-29T18:29:09-07:00","added":[],"removed":[],"modified":[".github/workflows/governance.yml","apps/web/src/features/h3/components/H3Workspace.tsx"]},{"id":"137f4a260ccdcda651cc241c7970efc666042c88","message":"feat: H1 暴露面收窄 + 任务耗时展示 + 清理继承的嵌套 lockfile\n\n- web dev 默认绑定 127.0.0.1(launcher --host 仍可显式覆盖,后者生效已实测)\n- 完成任务在预览区与任务列表展示真实耗时(failed/cancelled 不展示,防 reconcile 虚高)\n- 删除源仓继承的三个嵌套 pnpm-lock.yaml(workspace 只认根 lockfile,\n 嵌套件误导 Next 根目录推断)\n- CLAUDE.md H1 条目按收口事实收窄\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/minimax-h3-studio/commit/137f4a260ccdcda651cc241c7970efc666042c88","author":{"name":"hillao","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"hillao","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-29T18:16:13-07:00","added":[],"removed":["apps/api-fastify/pnpm-lock.yaml","apps/api-nestjs/pnpm-lock.yaml","apps/web/pnpm-lock.yaml"],"modified":[".claude/launch.json","CLAUDE.md","apps/web/package.json","apps/web/src/features/h3/components/H3Workspace.tsx"]}],"total_commits":0,"head_commit":{"id":"46dce73b5cfc83e6e6cfb87922f22faee76fdd28","message":"fix: runtime 验收测试步串行化 + G18 回灌今晚实时抖动实锤\n\n- check-runtime-acceptance 测试步加 --concurrency=1:双后端共库并行时\n TRUNCATE/领取/连接注册在表锁相撞(双进程并发最小复现证实)\n- 串行下仍偶发整文件投递全灭 → 指向 RedisModule 订阅启动竞态,\n 关闭条件(订阅就绪屏障 / 分库恢复并行)记入 G18\n- 基线地板收紧:testsPassed 172 / uiTestsPassed 10\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/minimax-h3-studio/commit/46dce73b5cfc83e6e6cfb87922f22faee76fdd28","author":{"name":"hillao","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"hillao","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-29T19:36:22-07:00","added":[],"removed":[],"modified":["CLAUDE.md","scripts/check-runtime-acceptance.mjs"]},"repository":{"id":90,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"minimax-h3-studio","full_name":"luoanwu/minimax-h3-studio","description":"MiniMax H3 本地视频生成 Studio:模型下载、管理、加载、采样与交付工作台","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":725,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/minimax-h3-studio/languages","html_url":"https://gitea.g-hi.com/luoanwu/minimax-h3-studio","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/minimax-h3-studio","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/minimax-h3-studio.git","clone_url":"https://gitea.g-hi.com/luoanwu/minimax-h3-studio.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-30T09:07:20+08:00","updated_at":"2026-08-30T09:10:01+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1788059669
|
1788059693
|
0
|
1788059668
|
1788059693
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23556
|
docs: 发布状态快照更新——远端已建并 SHA 对齐(G14 收窄到 CI 证据)
|
90
|
5
|
governance.yml
|
3
|
5
|
0
|
refs/heads/main
|
1c5b6ec9fef8d18a24b5bcd6a44665279fb3f493
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"46dce73b5cfc83e6e6cfb87922f22faee76fdd28","after":"1c5b6ec9fef8d18a24b5bcd6a44665279fb3f493","compare_url":"https://gitea.g-hi.com/luoanwu/minimax-h3-studio/compare/46dce73b5cfc83e6e6cfb87922f22faee76fdd28...1c5b6ec9fef8d18a24b5bcd6a44665279fb3f493","commits":[{"id":"1c5b6ec9fef8d18a24b5bcd6a44665279fb3f493","message":"docs: 发布状态快照更新——远端已建并 SHA 对齐(G14 收窄到 CI 证据)\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/minimax-h3-studio/commit/1c5b6ec9fef8d18a24b5bcd6a44665279fb3f493","author":{"name":"hillao","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"hillao","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-29T20:15:44-07:00","added":[],"removed":[],"modified":["CLAUDE.md"]}],"total_commits":0,"head_commit":{"id":"1c5b6ec9fef8d18a24b5bcd6a44665279fb3f493","message":"docs: 发布状态快照更新——远端已建并 SHA 对齐(G14 收窄到 CI 证据)\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/minimax-h3-studio/commit/1c5b6ec9fef8d18a24b5bcd6a44665279fb3f493","author":{"name":"hillao","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"hillao","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-29T20:15:44-07:00","added":[],"removed":[],"modified":["CLAUDE.md"]},"repository":{"id":90,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"minimax-h3-studio","full_name":"luoanwu/minimax-h3-studio","description":"MiniMax H3 本地视频生成 Studio:模型下载、管理、加载、采样与交付工作台","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":906,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/minimax-h3-studio/languages","html_url":"https://gitea.g-hi.com/luoanwu/minimax-h3-studio","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/minimax-h3-studio","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/minimax-h3-studio.git","clone_url":"https://gitea.g-hi.com/luoanwu/minimax-h3-studio.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-30T09:07:20+08:00","updated_at":"2026-08-30T11:14:28+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
6
|
1788059948
|
1788059969
|
0
|
1788059747
|
1788059970
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|