| event_payload |
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"ca134d5514b10ecb8b367c953c3284aaa5984f8a","after":"550f0c01417925fdf38c4bfe8b949a7fa3ef72e3","compare_url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition/compare/ca134d5514b10ecb8b367c953c3284aaa5984f8a...550f0c01417925fdf38c4bfe8b949a7fa3ef72e3","commits":[{"id":"550f0c01417925fdf38c4bfe8b949a7fa3ef72e3","message":"feat(voiceprint): harden recognition and add frozen evaluation workflow\n\nKeep identity decisions independent of display topK, reject inconsistent\nenrollment, correct activity evidence, and rerank changed scoring weights.\nAdd frozen datasets, open-set evaluation, scoring experiments, and model,\ntemplate, policy and pipeline compatibility checks.\n\nInclude reviewed workspace improvements for tenant fallback rejection,\nbounded sidecar waits, VM Redis capacity and responsive recording workflows.\nUpdate contracts, regressions, documentation and machine evidence together.\nThe change spans the full recognition workflow and its governance assets.\n\nValidation: 84 backend/contracts tests, 83 Python tests, 9 browser tests;\nlint, typecheck, build and diff checks passed.\nGovernance remains blocked by two expired real-model/calibration reports.\nTarget-domain accuracy, model adaptation and production rollout remain open.\nNo production algorithm deployment or calibration activation performed.\n","url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition/commit/550f0c01417925fdf38c4bfe8b949a7fa3ef72e3","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-09-05T02:04:57-07:00","added":["apps/api-fastify/test/sidecar-timeout.test.ts","apps/api-nestjs/test/sidecar-timeout.test.ts","configs/voiceprint-dataset.example.json","docs/analysis/voiceprint-accuracy-2026-09-05/evidence.json","docs/analysis/voiceprint-accuracy-2026-09-05/reproduce.py","docs/voiceprint-accuracy-implementation.md","docs/voiceprint-accuracy-improvement-plan.md","scripts/compare_voiceprint.py","scripts/evaluate_voiceprint.py","scripts/run-python.sh","scripts/validate_voiceprint_dataset.py","src/speaker_embedding/dataset.py","src/speaker_embedding/evaluation.py","src/speaker_embedding/experiments.py","src/speaker_embedding/quality.py","tests/test_accuracy.py"],"removed":[],"modified":["CLAUDE.md","README.md","apps/api-fastify/src/modules/tenant.ts","apps/api-fastify/src/modules/voiceprint/sidecar-client.ts","apps/api-fastify/test/voiceprint.acceptance.test.ts","apps/api-nestjs/src/common/tenant.decorator.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/app/voiceprint/page.tsx","apps/web/src/components/EventFeed.tsx","apps/web/src/components/RealtimeBar.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","deploy/vm/.env.vm.example","deploy/vm/compose.yaml","docs/README.md","docs/deployment-vm.md","docs/domain/voiceprint-blueprint.md","docs/karaoke-singer-personalized-dsp-system-design.md","docs/product-prd.md","package.json","packages/contracts/src/voiceprint.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/calibrate_voiceprint.py","scripts/check_voiceprint_real.py","src/speaker_embedding/calibration.py","src/speaker_embedding/extractor.py","src/speaker_embedding/sidecar.py","src/speaker_embedding/singing_activity.py","src/speaker_embedding/speaker_db.py","tests/test_sidecar.py","tests/test_speaker_db.py"]}],"total_commits":0,"head_commit":{"id":"550f0c01417925fdf38c4bfe8b949a7fa3ef72e3","message":"feat(voiceprint): harden recognition and add frozen evaluation workflow\n\nKeep identity decisions independent of display topK, reject inconsistent\nenrollment, correct activity evidence, and rerank changed scoring weights.\nAdd frozen datasets, open-set evaluation, scoring experiments, and model,\ntemplate, policy and pipeline compatibility checks.\n\nInclude reviewed workspace improvements for tenant fallback rejection,\nbounded sidecar waits, VM Redis capacity and responsive recording workflows.\nUpdate contracts, regressions, documentation and machine evidence together.\nThe change spans the full recognition workflow and its governance assets.\n\nValidation: 84 backend/contracts tests, 83 Python tests, 9 browser tests;\nlint, typecheck, build and diff checks passed.\nGovernance remains blocked by two expired real-model/calibration reports.\nTarget-domain accuracy, model adaptation and production rollout remain open.\nNo production algorithm deployment or calibration activation performed.\n","url":"https://gitea.g-hi.com/luoanwu/voiceprint-recognition/commit/550f0c01417925fdf38c4bfe8b949a7fa3ef72e3","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-09-05T02:04:57-07:00","added":["apps/api-fastify/test/sidecar-timeout.test.ts","apps/api-nestjs/test/sidecar-timeout.test.ts","configs/voiceprint-dataset.example.json","docs/analysis/voiceprint-accuracy-2026-09-05/evidence.json","docs/analysis/voiceprint-accuracy-2026-09-05/reproduce.py","docs/voiceprint-accuracy-implementation.md","docs/voiceprint-accuracy-improvement-plan.md","scripts/compare_voiceprint.py","scripts/evaluate_voiceprint.py","scripts/run-python.sh","scripts/validate_voiceprint_dataset.py","src/speaker_embedding/dataset.py","src/speaker_embedding/evaluation.py","src/speaker_embedding/experiments.py","src/speaker_embedding/quality.py","tests/test_accuracy.py"],"removed":[],"modified":["CLAUDE.md","README.md","apps/api-fastify/src/modules/tenant.ts","apps/api-fastify/src/modules/voiceprint/sidecar-client.ts","apps/api-fastify/test/voiceprint.acceptance.test.ts","apps/api-nestjs/src/common/tenant.decorator.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/app/voiceprint/page.tsx","apps/web/src/components/EventFeed.tsx","apps/web/src/components/RealtimeBar.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","deploy/vm/.env.vm.example","deploy/vm/compose.yaml","docs/README.md","docs/deployment-vm.md","docs/domain/voiceprint-blueprint.md","docs/karaoke-singer-personalized-dsp-system-design.md","docs/product-prd.md","package.json","packages/contracts/src/voiceprint.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/calibrate_voiceprint.py","scripts/check_voiceprint_real.py","src/speaker_embedding/calibration.py","src/speaker_embedding/extractor.py","src/speaker_embedding/sidecar.py","src/speaker_embedding/singing_activity.py","src/speaker_embedding/speaker_db.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":false,"fork":false,"template":false,"mirror":false,"size":1966,"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":3,"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-09-05T17:05:16+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"}}... |