| event_payload |
{"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"}}... |