|
26597
|
chore(evidence): record C50/C51 deployment 17 and chore(evidence): record C50/C51 deployment 17 and production 17 artifact steps on 756ce30...
|
82
|
5
|
governance.yml
|
13
|
5
|
0
|
refs/heads/main
|
74600c013eaaba8a404534b49f5d731134e37be9
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"756ce30a7133fe68054a5b580db709d915246968","after":"74600c013eaaba8a404534b49f5d731134e37be9","compare_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/compare/756ce30a7133fe68054a5b580db709d915246968...74600c013eaaba8a404534b49f5d731134e37be9","commits":[{"id":"74600c013eaaba8a404534b49f5d731134e37be9","message":"chore(evidence): record C50/C51 deployment 17 and production 17 artifact steps on 756ce30\n\nFour images built with ENV HOST=0.0.0.0 in the api-nestjs target; owned\nlabeled fixture network (pgvector/Redis/MinIO/ClamAV, no published ports)\nremoved with its volumes afterwards.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/commit/74600c013eaaba8a404534b49f5d731134e37be9","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-27T19:11:44-07:00","added":[],"removed":[],"modified":["reports/deployment-acceptance.latest.json","reports/production-acceptance.latest.json"]}],"total_commits":0,"head_commit":{"id":"74600c013eaaba8a404534b49f5d731134e37be9","message":"chore(evidence): record C50/C51 deployment 17 and production 17 artifact steps on 756ce30\n\nFour images built with ENV HOST=0.0.0.0 in the api-nestjs target; owned\nlabeled fixture network (pgvector/Redis/MinIO/ClamAV, no published ports)\nremoved with its volumes afterwards.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/commit/74600c013eaaba8a404534b49f5d731134e37be9","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-27T19:11:44-07:00","added":[],"removed":[],"modified":["reports/deployment-acceptance.latest.json","reports/production-acceptance.latest.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":false,"fork":false,"template":false,"mirror":false,"size":3819,"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":4,"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-10-28T09:58: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
|
1793153510
|
1793153518
|
0
|
1793153510
|
1793153519
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
26598
|
chore(reports): P1 前置片后 HR 全量 runtime/UI 验收与静态报告回绑 chore(reports): P1 前置片后 HR 全量 runtime/UI 验收与静态报告回绑 @ 7faad2a...
|
83
|
5
|
governance.yml
|
168
|
5
|
0
|
refs/pull/17/head
|
19128add543bbc36904689dda5eed46dca88f461
|
0
|
0
|
0
|
pull_request
|
{"action":"opened","number" {"action":"opened","number":17,"pull_request":{"id":234,"url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/pulls/17","number":17,"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":"feat(contracts): P1 前置片——CHG-061 三条 HR 事实的载荷与信封 Schema,V-04 放宽来源域(PKG-004)","body":"\u003e **叠在 #13 之上,请先合 #13。** 本 PR 自身只有最后 2 个提交:`7faad2a`(P1 前置片)与 `19128ad`(报告回绑);其余提交属 #13。#13 合入后这里的差异会只剩这两项。\r\n\r\n## 内容(对接蓝图 §4.15,P1 / H5)\r\n\r\n- **contracts**(`packages/contracts/src/enterprise-fact.ts`,台账 PKG-004)\r\n - 新增 `organizationCanonicalIdSchema`(`org_`)。\r\n - 新增 `EmploymentStarted`、`EmploymentTerminated`、`OrganizationUnitStatusChanged` v1 的载荷 Schema,逐字段对应 04 `contracts/schemas/facts/*.v1.json`(CHG-061)。\r\n - 新增三份信封 Schema,固定事实类型、实体(Employment / Organization)、来源域(hr / organization)与 `juhai.hr`。另加生产侧交叉约束:\r\n - 载荷里的实体 ID 必须等于 `entity_id`;\r\n - 组织事实的 `valid_from` 必须等于 `effective_at`;\r\n - `change_kind` 与 `state_after` 必须一致。\r\n - V-04:Intent 记录的 `sourceDomain` 放宽为 `hr` / `organization`,具体取值仍由注册表里的信封 Schema 收紧。\r\n- **刻意不做**:出站注册表、`facts.owns`、生效事务写 Intent。原因是 `check:app-manifest` M6 只认 pinned `@juhai/contracts` 的 Catalog,而含 CHG-061 的版本尚未发布(Registry 最新是 rc.7,Catalog 只有 11 条)。为此起草了给 04 的发版请求:`docs/domain/request-draft-04-contracts-release-chg061-2026-10-28.md`,未转交。\r\n- **另受阻断**:`OrganizationUnitMoved` 受 Catalog Q5 阻断。`unit_type` 是必填项,但 HR 组织没有类型字段,词表要等 02 定。\r\n- **文档**:蓝图 §4.15 与 H5 / P1 行、CLAUDE.md G23、CHG 草案的实现进度。\r\n\r\n## 验证(本地,报告绑定 `7faad2a`、clean)\r\n\r\n- contracts 223/223(enterprise-fact 共 20 例,其中新增 8 例)。\r\n- 4 个变异探针各使 1 例判红:分别去掉实体 ID 一致、状态一致、`valid_from` 一致三条约束,以及回退 V-04。\r\n- `check:d3` 通过;去掉 PKG-004 后判红(6 项)。\r\n- `check:app-manifest` 14/14,`check:contract-consumers`、`check:validation`、`check:naming`、lint、typecheck 通过。\r\n- `check:runtime` 470/470、`check:ui` 46/46,用一次性 PostgreSQL / Redis,跑完已删。\r\n- 静态链如实停在 O22(OS main 尚无 0.19.6),`check:governance` 只剩 O22。\r\n- 远端 CI 见本页。\r\n\r\n🤖 Generated with [Claude Code](https://claude.com/claude-code)","labels":[],"milestone":null,"assignee":null,"assignees":[],"requested_reviewers":[],"requested_reviewers_teams":[],"state":"open","draft":false,"is_locked":false,"comments":0,"additions":572,"deletions":188,"changed_files":36,"html_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/pulls/17","diff_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/pulls/17.diff","patch_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/pulls/17.patch","mergeable":false,"merged":false,"merged_at":null,"merge_commit_sha":null,"merged_by":null,"allow_maintainer_edit":false,"base":{"label":"main","ref":"main","sha":"66f2c92a78aa66944a048aa02fb288de2ce2a6a2","repo_id":83,"repo":{"id":83,"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-hr-system","full_name":"luoanwu/juhai-ai-hr-system","description":"巨嗨 AI 人事系统:受治理全栈基础框架","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":18311,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-ai-hr-system.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":11,"open_issues_count":0,"open_pr_counter":5,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-26T09:35:18+08:00","updated_at":"2026-10-28T10:13:56+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":false,"push":false,"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":[]}},"head":{"label":"claude/hr-p1-fact-contracts-20261028","ref":"claude/hr-p1-fact-contracts-20261028","sha":"19128add543bbc36904689dda5eed46dca88f461","repo_id":83,"repo":{"id":83,"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-hr-system","full_name":"luoanwu/juhai-ai-hr-system","description":"巨嗨 AI 人事系统:受治理全栈基础框架","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":18311,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-ai-hr-system.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":11,"open_issues_count":0,"open_pr_counter":5,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-26T09:35:18+08:00","updated_at":"2026-10-28T10:13:56+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":false,"push":false,"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":[]}},"merge_base":"46da4296a3481dbabadf5422f27043a6d27efa52","due_date":null,"created_at":"2026-10-28T10:14:41+08:00","updated_at":"2026-10-28T10:14:41+08:00","closed_at":null,"pin_order":0},"requested_reviewer":null,"repository":{"id":83,"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-hr-system","full_name":"luoanwu/juhai-ai-hr-system","description":"巨嗨 AI 人事系统:受治理全栈基础框架","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":18311,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-ai-hr-system.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":11,"open_issues_count":0,"open_pr_counter":5,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-26T09:35:18+08:00","updated_at":"2026-10-28T10:13:56+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
|
1793153682
|
1793153979
|
0
|
1793153681
|
1793153981
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/pull/17/head
|
1
|
Edit
Delete
|
|
26600
|
chore(evidence): record C50/C51 runtime 593 and UI chore(evidence): record C50/C51 runtime 593 and UI 14 on clean 7a94d61...
|
72
|
5
|
governance.yml
|
22
|
5
|
0
|
refs/heads/main
|
43b264fdef470bbb7342458c63be104369fb9d7c
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"470030609c843e1a22422efc24a95566f1210d0f","after":"43b264fdef470bbb7342458c63be104369fb9d7c","compare_url":"https://gitea.g-hi.com/luoanwu/juhai-quotation-system/compare/470030609c843e1a22422efc24a95566f1210d0f...43b264fdef470bbb7342458c63be104369fb9d7c","commits":[{"id":"43b264fdef470bbb7342458c63be104369fb9d7c","message":"chore(evidence): record C50/C51 runtime 593 and UI 14 on clean 7a94d61\n\nIsolated loopback-bound PG/Redis/MinIO/ClamAV.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-quotation-system/commit/43b264fdef470bbb7342458c63be104369fb9d7c","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-27T19:18:35-07:00","added":[],"removed":[],"modified":["reports/runtime-acceptance.latest.json","reports/ui-acceptance.latest.json"]},{"id":"7a94d6163065ef2e74a3a7ab82f681b18dd8926a","message":"fix(security): adopt framework C50/C51 loopback defaults for listen host and dev data stores\n\nFrom base-framework main 26212ad (2026-10-27):\n- API defaults to 127.0.0.1 when HOST is unset or empty; the VM image's\n runtime-base stage already sets HOST=0.0.0.0 and the VM compose only\n publishes the nginx gateway.\n- Dev base binds PostgreSQL/Redis to 127.0.0.1; Redis host port becomes\n overridable.\n- check:dual-backend gains the listen-default check, a stage-aware check\n that the api-nestjs image (or its parent stage) sets HOST=0.0.0.0, and\n the data-store loopback check (framework compose-ports module, tests in\n test:governance-kit).\n\nNegative: entry back to 0.0.0.0, HOST removed from runtime-base, Redis\nwithout loopback each exit 1; green after restore. pnpm check passed on\nthe dirty worktree.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-quotation-system/commit/7a94d6163065ef2e74a3a7ab82f681b18dd8926a","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-27T18:57:21-07:00","added":["scripts/lib/compose-ports.mjs","scripts/lib/compose-ports.test.mjs"],"removed":[],"modified":["apps/api-nestjs/docker-compose.yml","apps/api-nestjs/src/main.ts","package.json","scripts/check-dual-backend-parity.mjs"]}],"total_commits":0,"head_commit":{"id":"43b264fdef470bbb7342458c63be104369fb9d7c","message":"chore(evidence): record C50/C51 runtime 593 and UI 14 on clean 7a94d61\n\nIsolated loopback-bound PG/Redis/MinIO/ClamAV.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-quotation-system/commit/43b264fdef470bbb7342458c63be104369fb9d7c","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-27T19:18:35-07:00","added":[],"removed":[],"modified":["reports/runtime-acceptance.latest.json","reports/ui-acceptance.latest.json"]},"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":38937,"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":1,"watchers_count":1,"branch_count":13,"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-10-24T18:37: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
|
1793154113
|
1793155048
|
0
|
1793154112
|
1793155049
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
26601
|
chore(evidence): record C50/C51 runtime 199 and UI chore(evidence): record C50/C51 runtime 199 and UI 8 on clean 64bb658...
|
81
|
5
|
governance.yml
|
18
|
5
|
0
|
refs/heads/main
|
20244490cfc40096f29b48531eca5d3e0d7f19db
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"bf6d6773eeef3bcab14c1c2a8845a90bc8b2d38e","after":"20244490cfc40096f29b48531eca5d3e0d7f19db","compare_url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system/compare/bf6d6773eeef3bcab14c1c2a8845a90bc8b2d38e...20244490cfc40096f29b48531eca5d3e0d7f19db","commits":[{"id":"20244490cfc40096f29b48531eca5d3e0d7f19db","message":"chore(evidence): record C50/C51 runtime 199 and UI 8 on clean 64bb658\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system/commit/20244490cfc40096f29b48531eca5d3e0d7f19db","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-27T19:24:47-07:00","added":[],"removed":[],"modified":["reports/runtime-acceptance.latest.json","reports/ui-acceptance.latest.json"]},{"id":"64bb658ec69e2d0254b40cd5cb79f3ed28478761","message":"fix(security): adopt framework C50/C51 loopback defaults for listen host and dev data stores\n\nFrom base-framework main 26212ad (2026-10-27):\n- API defaults to 127.0.0.1 when HOST is unset or empty (no container\n image in this repo).\n- Dev base binds PostgreSQL/Redis to 127.0.0.1; Redis host port becomes\n overridable.\n- check:dual-backend gains the listen-default and data-store loopback\n checks (framework compose-ports module, tests in test:governance-kit).\n\nNegative: entry back to 0.0.0.0 and PG without loopback each exit 1;\ngreen after restore.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system/commit/64bb658ec69e2d0254b40cd5cb79f3ed28478761","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-27T19:16:31-07:00","added":["scripts/lib/compose-ports.mjs","scripts/lib/compose-ports.test.mjs"],"removed":[],"modified":["apps/api-nestjs/docker-compose.yml","apps/api-nestjs/src/main.ts","package.json","scripts/check-dual-backend-parity.mjs"]}],"total_commits":0,"head_commit":{"id":"20244490cfc40096f29b48531eca5d3e0d7f19db","message":"chore(evidence): record C50/C51 runtime 199 and UI 8 on clean 64bb658\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system/commit/20244490cfc40096f29b48531eca5d3e0d7f19db","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-27T19:24:47-07:00","added":[],"removed":[],"modified":["reports/runtime-acceptance.latest.json","reports/ui-acceptance.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":false,"fork":false,"template":false,"mirror":false,"size":4773,"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":3,"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-10-24T17:54:22+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
|
1793155049
|
1793155058
|
0
|
1793154335
|
1793155058
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
26602
|
test: record U2 + C50/C51 integration acceptance o test: record U2 + C50/C51 integration acceptance on merge 1c1491f (runtime 288/floor 282, UI 14/floor 13)...
|
82
|
5
|
governance.yml
|
14
|
5
|
0
|
refs/heads/main
|
42c886ed5e5d0a6a4d5bd1d7f6b3a99a9fc1316e
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"74600c013eaaba8a404534b49f5d731134e37be9","after":"42c886ed5e5d0a6a4d5bd1d7f6b3a99a9fc1316e","compare_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/compare/74600c013eaaba8a404534b49f5d731134e37be9...42c886ed5e5d0a6a4d5bd1d7f6b3a99a9fc1316e","commits":[{"id":"42c886ed5e5d0a6a4d5bd1d7f6b3a99a9fc1316e","message":"test: record U2 + C50/C51 integration acceptance on merge 1c1491f (runtime 288/floor 282, UI 14/floor 13)\n\nGates run on the clean merge commit 1c1491f (provenance gitSha=1c1491f,\nworktreeDirty=false): pnpm check, check:runtime with isolated\npgvector/Redis/MinIO/ClamAV and real C16 (04 6ae2a13 isolated clone,\nlifecycle audit retract/moderate re-registered as\nplatform.collaboration-messaging in the isolated audit DB),\nC16_BROWSER_ACCEPTANCE=1 check:ui (12 demo incl. the C16 case + 2 Keycloak\nOIDC) and required check:governance (ownTests 41, ownTestCases 298).\nOnly reports/*.latest.json change in this commit; deployment and\nproduction acceptance reports stay as recorded on 756ce30.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/commit/42c886ed5e5d0a6a4d5bd1d7f6b3a99a9fc1316e","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-27T19:26:37-07:00","added":[],"removed":[],"modified":["reports/agent-workflow-parity.latest.json","reports/backend-behavior-parity.latest.json","reports/configuration-consumer.latest.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-kit.latest.json","reports/governance.latest.json","reports/identity-boundary.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","reports/write-governance.latest.json"]},{"id":"1c1491f3ab81d42345edb0f574e5a2a2c299bd28","message":"merge: U2 ticket object-relation authorization (codex/work-order-u2-object-scope-20261027 @1438d92) into main 74600c0\n\nCandidate 1438d92 (verifier round-3 PASS) merged --no-ff onto main\n74600c0 (C50/C51 loopback defaults plus its deployment/production\nevidence). No source conflicts; the three reports/*.latest.json conflicts\n(backend-behavior-parity, runtime-acceptance, ui-acceptance) were resolved\nmechanically by taking the candidate side and are regenerated on this\nmerge commit by the gates.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/commit/1c1491f3ab81d42345edb0f574e5a2a2c299bd28","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-27T19:22:19-07:00","added":["apps/api-nestjs/src/tickets/ticket-object-scope.ts","apps/api-nestjs/test/ticket-object-scope.acceptance.test.ts","docs/U2对象关系授权实施记录-2026-10-27.md"],"removed":[],"modified":["CLAUDE.md","apps/api-nestjs/src/projects/projects.service.ts","apps/api-nestjs/src/ticket-discussion/discussion-membership-sync.service.ts","apps/api-nestjs/src/ticket-discussion/ticket-discussion.service.ts","apps/api-nestjs/src/tickets/tickets.service.ts","apps/api-nestjs/test/ticket-discussion.platform-real.test.ts","docs/domain/owner-matrix.md","docs/domain/ticket-discussion-blueprint.md","docs/domain/ticket-system-blueprint.md","governance.registry.json","governance/d3-test-scope.json","packages/collaboration-conversation/src/fake-ledger.ts","reports/agent-workflow-parity.latest.json","reports/backend-behavior-parity.latest.json","reports/configuration-consumer.latest.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-kit.latest.json","reports/governance.latest.json","reports/identity-boundary.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","reports/write-governance.latest.json","scripts/lib/governance-baseline.test.mjs"]},{"id":"1438d928e45f4d04376b227651933cef6a09706c","message":"test: record U2 round-3 acceptance on 6f561e2 (runtime 288/floor 282, UI 14)\n\nReport-only commit: every changed path is reports/*.latest.json; source,\ndocs, registry and ratchet are byte-identical to 6f561e296 (clean).\nOn 6f561e2: pnpm check exit 0; check:runtime exit 0, 288 passed\n(packages 164, NestJS 124 incl. 6 real C16 against an isolated platform\nat 04 6ae2a13; 1 notification opt-in skipped), floor 282;\ncheck:ui exit 0, 14 passed (12 demo incl. real C16 + 2 Keycloak OIDC),\nfloor 13; check:governance required exit 0, no regressions or blocking\nviolations, ownTests 41 / ownTestCases 298. Supersedes c92abd6 reports.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/commit/1438d928e45f4d04376b227651933cef6a09706c","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-27T18:34:03-07:00","added":[],"removed":[],"modified":["reports/agent-workflow-parity.latest.json","reports/backend-behavior-parity.latest.json","reports/configuration-consumer.latest.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-kit.latest.json","reports/governance.latest.json","reports/identity-boundary.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","reports/write-governance.latest.json"]},{"id":"6f561e296b9b9d7a4382f0985f5bcc84f6046931","message":"test(governance): pin current floors 41/298/282/13 in the baseline self-test (V11)\n\nThe previous self-test only required live floors to equal the recorded\nratchet, so lowering or deleting the ratchet silently reverted floors.\nIt now pins ownTests 41, ownTestCases 298, testsPassed 282 (mandatory\nscope without 6 opt-in real C16 cases) and uiTestsPassed 13, while still\nproving the D3 minimum on a ratchet-stripped copy. Lowering\ntestsPassed/ownTestCases, deleting the ratchet, and deleting it together\nwith the U2 test all fail check:d3-baseline; below-minimum still fails\nboth check:d3-baseline and governance.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/commit/6f561e296b9b9d7a4382f0985f5bcc84f6046931","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-27T18:28:02-07:00","added":[],"removed":[],"modified":["governance/d3-test-scope.json","scripts/lib/governance-baseline.test.mjs"]},{"id":"6af4c883a4b1ac9110d062664ab5eacd3da90afd","message":"fix(projects): close U2 round-2 findings V10 and V12\n\nV10: linking a ticket to a project now also requires the linker's own\noriginal ticket relation to carry comment rights (manager/tenantAdmin,\nassignee, requester, COLLABORATOR); a FOLLOWER-only linker gets 403\nTICKET_LINK_RELATION_FORBIDDEN, no relation stays 404. Link-time\nvalidation semantics (access survives the linker losing theirs) are\nrecorded as pending business confirmation.\nV12: removing another project member is limited to the project owner,\nOWNER/MANAGER members or tenant-wide roles; anyone may leave. Existing\nNestJS suite unchanged (118 passed); both new cases red on c92abd6 src.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/commit/6af4c883a4b1ac9110d062664ab5eacd3da90afd","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-27T18:28:02-07:00","added":[],"removed":[],"modified":["apps/api-nestjs/src/projects/projects.service.ts","apps/api-nestjs/test/ticket-object-scope.acceptance.test.ts","docs/U2对象关系授权实施记录-2026-10-27.md","docs/domain/owner-matrix.md","docs/domain/ticket-discussion-blueprint.md"]}],"total_commits":0,"head_commit":{"id":"42c886ed5e5d0a6a4d5bd1d7f6b3a99a9fc1316e","message":"test: record U2 + C50/C51 integration acceptance on merge 1c1491f (runtime 288/floor 282, UI 14/floor 13)\n\nGates run on the clean merge commit 1c1491f (provenance gitSha=1c1491f,\nworktreeDirty=false): pnpm check, check:runtime with isolated\npgvector/Redis/MinIO/ClamAV and real C16 (04 6ae2a13 isolated clone,\nlifecycle audit retract/moderate re-registered as\nplatform.collaboration-messaging in the isolated audit DB),\nC16_BROWSER_ACCEPTANCE=1 check:ui (12 demo incl. the C16 case + 2 Keycloak\nOIDC) and required check:governance (ownTests 41, ownTestCases 298).\nOnly reports/*.latest.json change in this commit; deployment and\nproduction acceptance reports stay as recorded on 756ce30.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/commit/42c886ed5e5d0a6a4d5bd1d7f6b3a99a9fc1316e","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-27T19:26:37-07:00","added":[],"removed":[],"modified":["reports/agent-workflow-parity.latest.json","reports/backend-behavior-parity.latest.json","reports/configuration-consumer.latest.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-kit.latest.json","reports/governance.latest.json","reports/identity-boundary.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","reports/write-governance.latest.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":false,"fork":false,"template":false,"mirror":false,"size":3826,"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":4,"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-10-28T10:11: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
|
1793155058
|
1793155065
|
0
|
1793154554
|
1793155065
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
26611
|
test: record review-fix acceptance on clean 470894 test: record review-fix acceptance on clean 4708949 (runtime 298/floor 292, UI 14/floor 13)...
|
82
|
5
|
governance.yml
|
15
|
5
|
0
|
refs/heads/main
|
80c8bdabb7ff33364f9d270d4a771bf25a2cad71
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"42c886ed5e5d0a6a4d5bd1d7f6b3a99a9fc1316e","after":"80c8bdabb7ff33364f9d270d4a771bf25a2cad71","compare_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/compare/42c886ed5e5d0a6a4d5bd1d7f6b3a99a9fc1316e...80c8bdabb7ff33364f9d270d4a771bf25a2cad71","commits":[{"id":"80c8bdabb7ff33364f9d270d4a771bf25a2cad71","message":"test: record review-fix acceptance on clean 4708949 (runtime 298/floor 292, UI 14/floor 13)\n\nSupersedes the 68e37c0 reports. All reports come from committed 4708949\n(worktreeDirty=false):\n- pnpm check: pass; lint/typecheck re-run with turbo --force 19/19\n- pnpm check:runtime: 298 passed / 0 failed, floor 292; includes the 6 real\n C16 cases against an isolated 04 enterprise-platform 6ae2a13 shared clone\n- C16_BROWSER_ACCEPTANCE=1 pnpm check:ui: 14 passed (12 demo incl. real C16\n browser + 2 Keycloak OIDC) / 0 failed, floor 13\n- pnpm check:governance (required): passed, no regressions\nD3 preservation manifest: 65 files (25 SQL) sha256-identical; no migration.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/commit/80c8bdabb7ff33364f9d270d4a771bf25a2cad71","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-28T01:00:48-07:00","added":[],"removed":[],"modified":["reports/agent-workflow-parity.latest.json","reports/backend-behavior-parity.latest.json","reports/configuration-consumer.latest.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-kit.latest.json","reports/governance.latest.json","reports/identity-boundary.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","reports/write-governance.latest.json"]},{"id":"4708949f3d90ebf2490bc90a2baf32d3d58850f2","message":"fix(realtime): route permission before tenant-level bypass; replay and AST guard coverage (review WO-RT-F1..F4)\n\n- F1: unanchored (permission-class) envelopes are now checked against the\n HTTP route permission before the tenant-level shortcut, so manager without\n tenant:manage no longer receives user/order/job/inbound/notification/\n knowledge/projection-rebuild envelopes (same as HTTP 403); tenantAdmin and\n holders of the permission unchanged; ticket/project/unclassified behaviour\n for tenant-level roles unchanged. New acceptance case (SSE+WS, live+replay)\n fails on 68e37c0.\n- F2: new replay case: requester role and project-derived member reconnecting\n with a cursor on SSE and WS get hint fields only; WS and SSE \"send raw\n envelope when visible\" replay mutations both turn it red.\n- F3: guard scan now uses the TypeScript AST (same parser as\n check:write-chain); outbox.create/createMany/upsert and eventBus.publish\n calls must expose a literal, literal ternary or enumerated type, indirect\n forms such as create({ data: row }) fail.\n- F4: dated note in docs/governance-experience.md; known drift (CLAUDE.md\n stable lines, D3-preserved contracts comments, 01 layer docs) registered\n in the implementation record.\nRatchet 43/308/292/13 with pin. D3 preservation files unchanged.\nVerified so far on dirty tree: targeted tests, full api-nestjs suite,\npnpm check; full gates on this commit next.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/commit/4708949f3d90ebf2490bc90a2baf32d3d58850f2","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-28T00:54:13-07:00","added":[],"removed":[],"modified":["CLAUDE.md","README.md","apps/api-nestjs/src/events/realtime-visibility.ts","apps/api-nestjs/test/realtime.object-scope.acceptance.test.ts","apps/api-nestjs/test/realtime.visibility-guard.test.ts","docs/governance-experience.md","docs/实时通道对象授权实施记录-2026-10-27.md","governance/d3-test-scope.json","scripts/lib/governance-baseline.test.mjs"]},{"id":"68e37c0e4e8cdcd99f9d60bae36eee08556bfa7f","message":"test: record PM-06 realtime object-scope acceptance on clean 563f3d3 (runtime 296/floor 290, UI 14/floor 13)\n\nSupersedes the 2b49b0f reports (bound to a5817fa, before the D3\npreservation fix). All reports come from committed 563f3d3\n(worktreeDirty=false):\n- pnpm check: pass; lint/typecheck re-run with turbo --force 19/19\n- pnpm check:runtime: 296 passed / 0 failed, floor 290; includes the 6 real\n C16 cases against an isolated 04 enterprise-platform 6ae2a13 shared clone\n- C16_BROWSER_ACCEPTANCE=1 pnpm check:ui: 14 passed (12 demo incl. real C16\n browser + 2 Keycloak OIDC) / 0 failed, floor 13\n- pnpm check:governance (required): passed, no regressions\nD3 preservation manifest: 65 files (25 SQL) sha256-identical; no migration.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/commit/68e37c0e4e8cdcd99f9d60bae36eee08556bfa7f","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-28T00:11:01-07:00","added":[],"removed":[],"modified":["reports/agent-workflow-parity.latest.json","reports/backend-behavior-parity.latest.json","reports/configuration-consumer.latest.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-kit.latest.json","reports/governance.latest.json","reports/identity-boundary.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","reports/write-governance.latest.json"]},{"id":"563f3d3841ee758cb82b4c6a242021bec9b0efd2","message":"fix(realtime): keep D3 preservation files byte-identical (revert contracts comment edits)\n\npackages/contracts/src/realtime.ts and subscription.ts are in the D3\npreservation manifest (65 files incl. 25 SQL, sha256-pinned). The previous\ncommit edited only their header comments; restore them to 42c886e bytes and\nrecord in CLAUDE.md dynamic region and the implementation record that those\ncomments still describe tenant-only filtering and are superseded by the\nrealtime object-scope record. No behaviour change; full gates re-run next.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/commit/563f3d3841ee758cb82b4c6a242021bec9b0efd2","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-28T00:06:33-07:00","added":[],"removed":[],"modified":["CLAUDE.md","docs/实时通道对象授权实施记录-2026-10-27.md","packages/contracts/src/realtime.ts","packages/contracts/src/subscription.ts"]},{"id":"2b49b0f07582f43ef225a525ae004c4df93461ff","message":"test: record PM-06 realtime object-scope acceptance on clean a5817fa (runtime 296/floor 290, UI 14/floor 13)\n\nAll reports come from the committed candidate a5817fa (worktreeDirty=false):\n- pnpm check: pass (lint/typecheck also re-run with turbo --force, 19/19)\n- pnpm check:runtime: 296 passed / 0 failed, floor 290; includes the 6 real\n C16 cases against an isolated 04 enterprise-platform 6ae2a13 shared clone\n (permission/audit/collaboration-messaging, loopback, test-only fixtures)\n- C16_BROWSER_ACCEPTANCE=1 pnpm check:ui: 14 passed (12 demo incl. real C16\n browser + 2 Keycloak OIDC) / 0 failed, floor 13\n- pnpm check:governance (required): passed, no regressions\n\nTwo earlier check:ui attempts on the same SHA failed because of gate-env\nmistakes (platform tenant map missing the -nestjs suffix; reused UI tenant\nleft a previous run's ticket selected); both reports kept outside the repo.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/commit/2b49b0f07582f43ef225a525ae004c4df93461ff","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-28T00:05:21-07:00","added":[],"removed":[],"modified":["reports/agent-workflow-parity.latest.json","reports/backend-behavior-parity.latest.json","reports/configuration-consumer.latest.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-kit.latest.json","reports/governance.latest.json","reports/identity-boundary.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","reports/write-governance.latest.json"]}],"total_commits":0,"head_commit":{"id":"80c8bdabb7ff33364f9d270d4a771bf25a2cad71","message":"test: record review-fix acceptance on clean 4708949 (runtime 298/floor 292, UI 14/floor 13)\n\nSupersedes the 68e37c0 reports. All reports come from committed 4708949\n(worktreeDirty=false):\n- pnpm check: pass; lint/typecheck re-run with turbo --force 19/19\n- pnpm check:runtime: 298 passed / 0 failed, floor 292; includes the 6 real\n C16 cases against an isolated 04 enterprise-platform 6ae2a13 shared clone\n- C16_BROWSER_ACCEPTANCE=1 pnpm check:ui: 14 passed (12 demo incl. real C16\n browser + 2 Keycloak OIDC) / 0 failed, floor 13\n- pnpm check:governance (required): passed, no regressions\nD3 preservation manifest: 65 files (25 SQL) sha256-identical; no migration.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/commit/80c8bdabb7ff33364f9d270d4a771bf25a2cad71","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-28T01:00:48-07:00","added":[],"removed":[],"modified":["reports/agent-workflow-parity.latest.json","reports/backend-behavior-parity.latest.json","reports/configuration-consumer.latest.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-kit.latest.json","reports/governance.latest.json","reports/identity-boundary.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","reports/write-governance.latest.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":false,"fork":false,"template":false,"mirror":false,"size":4047,"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":4,"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-10-28T10:29:14+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
|
1793175876
|
1793175885
|
0
|
1793175876
|
1793175885
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
26614
|
chore(reports): 合入 main(含 #16 V-04)后 HR 全量 runtime chore(reports): 合入 main(含 #16 V-04)后 HR 全量 runtime/UI 验收与静态报告回绑 @ ea4c7e9...
|
83
|
5
|
governance.yml
|
176
|
5
|
0
|
refs/pull/13/head
|
b0cc541c42f3f17a6571291b673ac39cc1e5e189
|
0
|
0
|
0
|
pull_request_sync
|
{"action":"synchronized","numb {"action":"synchronized","number":13,"pull_request":{"id":229,"url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/pulls/13","number":13,"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":"docs(integration): 蓝图补服务级对接矩阵,按 04 CHG-061 订正镜像与 H1/H5/H21","body":"## 内容\n\n- 对接蓝图新增 §2.5 服务级对接矩阵:HR 与 02/03/04 共 20 个对接点,HR 侧写到 file:line,并标明 dev 实际跑通过的只有 3 条:事实写入、Scope 来源、OS 装载产品包。\n- 按 04 `e50aad416`(CHG-061)订正:\n - 应用清单镜像已合到 0.19.6,工作区镜像剩 5 处差异(H1);\n - 4 条 HR 事实已在 Catalog 登记为 draft,H5 的 Catalog 半边完成;\n - Scope 改按 Catalog producer 接受 `juhai.hr` 组织事实,H21 部分关闭,剩载荷约束与投影器现场摄取。\n- 新增缺口:\n - H25:OS 清单契约仍强制双后端,HR 清单里的 Fastify 声明是占位,不能单方删除;\n - H26:门店归属事实没有生产者;\n - H27:IdP 令牌 `aud` 是生成的 UUID,不是 `juhai.hr`;\n - H28:数字智能层自带一份 0.19.5 副本。\n- §2.5 补本机现场读数(2026-10-28 00:35 UTC 前后):\n - HR API 未运行;\n - 04 runtime 开了事实受理但缺 `FACT_APPLICATION_BINDINGS_JSON`,IdP 签发的机器令牌会被拒;\n - Scope 来源 65281 不可达;\n - OS 0.19.6 分支只在本机、未推 Gitea。\n- 已确认三项:\n - client-fact rc.3 与 rc.8 摘要实现逐行相同(H7 只剩发布);\n - EES 运行时以 `READ_ONLY_PROJECTION` 拒绝已撤回人域命令;\n - Scope 证据 `owner: juhai.hr` 由 04 按 HR 签名组装。\n- H22:本机开发基座容器已于 00:40 UTC 重建为只绑回环,数据卷沿用。\n- **CI 修复**(`a174e46`):本 PR 首次运行 26581 停在「Build locked OS compatibility sources」,原因是兼容锁指向 D3 后的 OS `1b8ae0d7`,该步却仍写死 `--filter=api-fastify`。\n - 现改为经 `scripts/lib/os-host-backends.mjs` 读锁定 OS 的 `backend-profile.json` 决定宿主范围;\n - `check:docs-truth` 新增 `ci-os-host-backends` 断言防回潮,对旧工作流负向判红。\n- 同步落地状态:CLAUDE.md G23 / G14、两份 CHG 草稿、人域对照表。\n- 已合入 `main` `46da429`:CLAUDE.md 冲突以 main 为准,只叠加本分支的 H21 订正。\n\n## 验证(本地,PR 头 `25aecd7`,报告绑定 `a174e46`、clean)\n\n- 通过:`check:runtime` 462/462(地板 452)、`check:ui` 46/46。用的是一次性 PostgreSQL 16 / Redis 7,只绑回环,跑完已删。\n- 静态链如实停在 O22(OS main 尚无 0.19.6)。其后 governance-docs、docs-truth、lint、typecheck 通过。`check:governance` 只剩 O22,`reportProvenanceViolations` 0。\n- CI 构建步骤:本地覆盖 5 种情形(nestjs-production、D3 前双宿主、缺 profile、非法 profile、profile 与 Fastify 冲突),以及锁定 OS 快照上的 turbo dry-run。\n- 远端 CI 见本页检查结果。\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)","labels":[],"milestone":null,"assignee":null,"assignees":[],"requested_reviewers":[],"requested_reviewers_teams":[],"state":"open","draft":false,"is_locked":false,"comments":0,"additions":271,"deletions":182,"changed_files":32,"html_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/pulls/13","diff_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/pulls/13.diff","patch_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/pulls/13.patch","mergeable":false,"merged":false,"merged_at":null,"merge_commit_sha":null,"merged_by":null,"allow_maintainer_edit":false,"base":{"label":"main","ref":"main","sha":"66f2c92a78aa66944a048aa02fb288de2ce2a6a2","repo_id":83,"repo":{"id":83,"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-hr-system","full_name":"luoanwu/juhai-ai-hr-system","description":"巨嗨 AI 人事系统:受治理全栈基础框架","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":19076,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-ai-hr-system.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":11,"open_issues_count":0,"open_pr_counter":6,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-26T09:35:18+08:00","updated_at":"2026-10-28T20:20:12+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":false,"push":false,"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":[]}},"head":{"label":"claude/ai-hr-system-integration-analysis-380fcb","ref":"claude/ai-hr-system-integration-analysis-380fcb","sha":"b0cc541c42f3f17a6571291b673ac39cc1e5e189","repo_id":83,"repo":{"id":83,"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-hr-system","full_name":"luoanwu/juhai-ai-hr-system","description":"巨嗨 AI 人事系统:受治理全栈基础框架","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":19076,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-ai-hr-system.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":11,"open_issues_count":0,"open_pr_counter":6,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-26T09:35:18+08:00","updated_at":"2026-10-28T20:20:12+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":false,"push":false,"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":[]}},"merge_base":"66f2c92a78aa66944a048aa02fb288de2ce2a6a2","due_date":null,"created_at":"2026-10-28T08:02:30+08:00","updated_at":"2026-10-28T20:27:37+08:00","closed_at":null,"pin_order":0},"requested_reviewer":null,"repository":{"id":83,"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":"juhai-ai-hr-system","full_name":"luoanwu/juhai-ai-hr-system","description":"巨嗨 AI 人事系统:受治理全栈基础框架","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":19076,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-ai-hr-system.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":11,"open_issues_count":0,"open_pr_counter":6,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-26T09:35:18+08:00","updated_at":"2026-10-28T20:20:12+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":[]},"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
|
1793190730
|
1793191003
|
0
|
1793190457
|
1793191003
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/pull/13/head
|
1
|
Edit
Delete
|
|
26617
|
chore(reports): P1 前置片按 #16 重建后 HR 全量 runtime/UI 验 chore(reports): P1 前置片按 #16 重建后 HR 全量 runtime/UI 验收与静态报告回绑 @ b8f85d3...
|
83
|
5
|
governance.yml
|
178
|
5
|
0
|
refs/pull/17/head
|
9b967eef931e938e222311235385d2e9844edd50
|
0
|
0
|
0
|
pull_request_sync
|
{"action":"synchronized","numb {"action":"synchronized","number":17,"pull_request":{"id":234,"url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/pulls/17","number":17,"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":"feat(contracts): P1 前置片——CHG-061 三条 HR 事实的载荷与信封 Schema,V-04 放宽来源域(PKG-004)","body":"\u003e **叠在 #13 之上,请先合 #13。** 本 PR 自身只有最后 2 个提交:`7faad2a`(P1 前置片)与 `19128ad`(报告回绑);其余提交属 #13。#13 合入后这里的差异会只剩这两项。\r\n\r\n## 内容(对接蓝图 §4.15,P1 / H5)\r\n\r\n- **contracts**(`packages/contracts/src/enterprise-fact.ts`,台账 PKG-004)\r\n - 新增 `organizationCanonicalIdSchema`(`org_`)。\r\n - 新增 `EmploymentStarted`、`EmploymentTerminated`、`OrganizationUnitStatusChanged` v1 的载荷 Schema,逐字段对应 04 `contracts/schemas/facts/*.v1.json`(CHG-061)。\r\n - 新增三份信封 Schema,固定事实类型、实体(Employment / Organization)、来源域(hr / organization)与 `juhai.hr`。另加生产侧交叉约束:\r\n - 载荷里的实体 ID 必须等于 `entity_id`;\r\n - 组织事实的 `valid_from` 必须等于 `effective_at`;\r\n - `change_kind` 与 `state_after` 必须一致。\r\n - V-04:Intent 记录的 `sourceDomain` 放宽为 `hr` / `organization`,具体取值仍由注册表里的信封 Schema 收紧。\r\n- **刻意不做**:出站注册表、`facts.owns`、生效事务写 Intent。原因是 `check:app-manifest` M6 只认 pinned `@juhai/contracts` 的 Catalog,而含 CHG-061 的版本尚未发布(Registry 最新是 rc.7,Catalog 只有 11 条)。为此起草了给 04 的发版请求:`docs/domain/request-draft-04-contracts-release-chg061-2026-10-28.md`,未转交。\r\n- **另受阻断**:`OrganizationUnitMoved` 受 Catalog Q5 阻断。`unit_type` 是必填项,但 HR 组织没有类型字段,词表要等 02 定。\r\n- **文档**:蓝图 §4.15 与 H5 / P1 行、CLAUDE.md G23、CHG 草案的实现进度。\r\n\r\n## 验证(本地,报告绑定 `7faad2a`、clean)\r\n\r\n- contracts 223/223(enterprise-fact 共 20 例,其中新增 8 例)。\r\n- 4 个变异探针各使 1 例判红:分别去掉实体 ID 一致、状态一致、`valid_from` 一致三条约束,以及回退 V-04。\r\n- `check:d3` 通过;去掉 PKG-004 后判红(6 项)。\r\n- `check:app-manifest` 14/14,`check:contract-consumers`、`check:validation`、`check:naming`、lint、typecheck 通过。\r\n- `check:runtime` 470/470、`check:ui` 46/46,用一次性 PostgreSQL / Redis,跑完已删。\r\n- 静态链如实停在 O22(OS main 尚无 0.19.6),`check:governance` 只剩 O22。\r\n- 远端 CI 见本页。\r\n\r\n🤖 Generated with [Claude Code](https://claude.com/claude-code)","labels":[],"milestone":null,"assignee":null,"assignees":[],"requested_reviewers":[],"requested_reviewers_teams":[],"state":"open","draft":false,"is_locked":false,"comments":0,"additions":586,"deletions":188,"changed_files":36,"html_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/pulls/17","diff_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/pulls/17.diff","patch_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/pulls/17.patch","mergeable":false,"merged":false,"merged_at":null,"merge_commit_sha":null,"merged_by":null,"allow_maintainer_edit":false,"base":{"label":"main","ref":"main","sha":"66f2c92a78aa66944a048aa02fb288de2ce2a6a2","repo_id":83,"repo":{"id":83,"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-hr-system","full_name":"luoanwu/juhai-ai-hr-system","description":"巨嗨 AI 人事系统:受治理全栈基础框架","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":19255,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-ai-hr-system.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":11,"open_issues_count":0,"open_pr_counter":6,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-26T09:35:18+08:00","updated_at":"2026-10-28T20:27:37+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":false,"push":false,"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":[]}},"head":{"label":"claude/hr-p1-fact-contracts-20261028","ref":"claude/hr-p1-fact-contracts-20261028","sha":"9b967eef931e938e222311235385d2e9844edd50","repo_id":83,"repo":{"id":83,"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-hr-system","full_name":"luoanwu/juhai-ai-hr-system","description":"巨嗨 AI 人事系统:受治理全栈基础框架","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":19255,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-ai-hr-system.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":11,"open_issues_count":0,"open_pr_counter":6,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-26T09:35:18+08:00","updated_at":"2026-10-28T20:27:37+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":false,"push":false,"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":[]}},"merge_base":"66f2c92a78aa66944a048aa02fb288de2ce2a6a2","due_date":null,"created_at":"2026-10-28T10:14:41+08:00","updated_at":"2026-10-28T20:41:35+08:00","closed_at":null,"pin_order":0},"requested_reviewer":null,"repository":{"id":83,"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":"juhai-ai-hr-system","full_name":"luoanwu/juhai-ai-hr-system","description":"巨嗨 AI 人事系统:受治理全栈基础框架","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":19255,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-ai-hr-system.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":11,"open_issues_count":0,"open_pr_counter":6,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-26T09:35:18+08:00","updated_at":"2026-10-28T20:27:37+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":[]},"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
|
1793191297
|
1793191578
|
0
|
1793191295
|
1793191580
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/pull/17/head
|
1
|
Edit
Delete
|
|
26619
|
chore(reports): D-13 组织类型字段后 HR 全量 runtime/UI 验收与静 chore(reports): D-13 组织类型字段后 HR 全量 runtime/UI 验收与静态报告回绑 @ 4fa64f1...
|
83
|
5
|
governance.yml
|
180
|
5
|
0
|
refs/pull/18/head
|
6912ab71329fa9311d7074bf81a8c4ea32a23ea0
|
0
|
0
|
0
|
pull_request
|
{"action":"opened","number" {"action":"opened","number":18,"pull_request":{"id":244,"url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/pulls/18","number":18,"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":"feat(personnel): D-13 组织类型字段与宿主 Schema 受控通道(PKG-006)","body":"\u003e **叠在 #17 之上(#17 又叠在 #13 之上),请按 #13 → #17 → 本 PR 的顺序合入。** 本 PR 自身只有最后 2 个提交:`4fa64f1`(D-13)、`6912ab7`(报告回绑)。\r\n\r\n## 背景\r\n\r\n- F1 `OrganizationUnitMoved` 要求 `unit_type` 必填(CHG-061 Q5),而 HR 组织原本没有类型字段。\r\n- 02 已于 10-27 定下词表(D73):采用 CHG-061 的三值,02 侧分别映射为 `BUSINESS_UNIT` / `DEPARTMENT` / `TEAM`。\r\n- 加字段要改 D3 冻结的宿主 `schema.prisma`。用户 2026-10-28 裁定 D-13:开受控通道并实现。\r\n\r\n## 内容(对接蓝图 §4.17)\r\n\r\n- **D3 受控通道**(`scripts/lib/d3-protection.mjs`):`packageUpdates` 只多放行一个文件,即宿主 `apps/api-nestjs/prisma/schema.prisma`。既有迁移、`migration_lock.toml` 和已退役的 Fastify schema 仍不得登记;结构变更一律以新迁移追加。\r\n- **字段**:组织新增可空的 `unitType`(`ORGANIZATION` / `DEPARTMENT` / `TEAM`)。迁移 `20261028090000_organization_unit_type` 只追加这一列;已有组织的值为 null,不做推断。\r\n- **contracts**(台账 PKG-006):\r\n - 创建时可选,缺省为 null;\r\n - 编辑时省略即保留原值,显式传 null 则清除;\r\n - 命令视图与组织摘要必带该字段;\r\n - 双时间快照读取该字段,D-13 之前的快照读为 null。\r\n- **服务**:创建和编辑写入该字段,仍沿用原有乐观锁和 outbox;当前读取与双时间读取两条路径都输出该字段。\r\n- **Web**:组织增改表单新增「组织类型」,组织详情显示类型。\r\n- **未做**:\r\n - OS 产品副本还没有这一列,登记为 H29。0.19.6 尚未进入 OS main,0.19.7 现在注册不了,等它进入后再随产品版本补上。\r\n - F1 本身:等 contracts 发版后,与 F2–F4 一起实现。\r\n - 已有组织的类型补录:需要业务按实际情况登记。\r\n\r\n## 验证(本地,报告绑定 `4fa64f1`、clean)\r\n\r\n- `d3-protection` 27/27,新增 2 例;2 个变异探针(去掉放行、放宽到整个 prisma 目录)都判红。\r\n- contracts 232/232,新增 5 例。\r\n- 真实 DB 的 HTTP 测试 3/3,覆盖:带类型 / 不带类型创建;编辑时省略保留、修改、清除;词表外取值返回 400 且不落库;用 `knownAt` 能回看到旧类型。另有 3 个服务层变异探针都判红。\r\n- `check:runtime` 482/482,`check:ui` 46/46(在原有组织增改场景里加入了类型选择和读回),用一次性 PostgreSQL / Redis 跑,跑完已删。\r\n- 静态检查:D3 / schema / migrations / RLS / write-guard 等门禁全部通过;静态链在 O22 处如实停止,`check:governance` 只剩 O22。\r\n- 远端 CI 见本页。\r\n\r\n🤖 Generated with [Claude Code](https://claude.com/claude-code)","labels":[],"milestone":null,"assignee":null,"assignees":[],"requested_reviewers":[],"requested_reviewers_teams":[],"state":"open","draft":false,"is_locked":false,"comments":0,"additions":946,"deletions":195,"changed_files":48,"html_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/pulls/18","diff_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/pulls/18.diff","patch_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/pulls/18.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":"66f2c92a78aa66944a048aa02fb288de2ce2a6a2","repo_id":83,"repo":{"id":83,"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-hr-system","full_name":"luoanwu/juhai-ai-hr-system","description":"巨嗨 AI 人事系统:受治理全栈基础框架","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":19653,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-ai-hr-system.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":12,"open_issues_count":0,"open_pr_counter":6,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-26T09:35:18+08:00","updated_at":"2026-10-28T21:33:00+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":false,"push":false,"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":[]}},"head":{"label":"claude/hr-d13-org-unit-type-20261028","ref":"claude/hr-d13-org-unit-type-20261028","sha":"6912ab71329fa9311d7074bf81a8c4ea32a23ea0","repo_id":83,"repo":{"id":83,"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-hr-system","full_name":"luoanwu/juhai-ai-hr-system","description":"巨嗨 AI 人事系统:受治理全栈基础框架","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":19653,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-ai-hr-system.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":12,"open_issues_count":0,"open_pr_counter":6,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-26T09:35:18+08:00","updated_at":"2026-10-28T21:33:00+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":false,"push":false,"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":[]}},"merge_base":"66f2c92a78aa66944a048aa02fb288de2ce2a6a2","due_date":null,"created_at":"2026-10-28T21:33:36+08:00","updated_at":"2026-10-28T21:33:36+08:00","closed_at":null,"pin_order":0},"requested_reviewer":null,"repository":{"id":83,"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-hr-system","full_name":"luoanwu/juhai-ai-hr-system","description":"巨嗨 AI 人事系统:受治理全栈基础框架","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":19653,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-ai-hr-system.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":12,"open_issues_count":0,"open_pr_counter":6,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-26T09:35:18+08:00","updated_at":"2026-10-28T21:33: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":[]},"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
|
1793194417
|
1793194710
|
0
|
1793194416
|
1793194710
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/pull/18/head
|
1
|
Edit
Delete
|
|
26622
|
chore(evidence): rebind seven native levels to doc chore(evidence): rebind seven native levels to docs-only commit 6ab5636 (KC-SR-V4-F10)...
|
84
|
5
|
governance.yml
|
11
|
5
|
0
|
refs/heads/main
|
a4f30da58c8016b72afc8fe44d54723abd5266c0
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"883a3e660c313ea02daba8067ed6bb9208d31a25","after":"a4f30da58c8016b72afc8fe44d54723abd5266c0","compare_url":"https://gitea.g-hi.com/luoanwu/juhai-knowledge-cloud/compare/883a3e660c313ea02daba8067ed6bb9208d31a25...a4f30da58c8016b72afc8fe44d54723abd5266c0","commits":[{"id":"a4f30da58c8016b72afc8fe44d54723abd5266c0","message":"chore(evidence): rebind seven native levels to docs-only commit 6ab5636 (KC-SR-V4-F10)\n\nThe doc change in 6ab5636 is a provenance input and evidence is inherited\nonly across report-only commits, so pnpm check went red with 7 stale\nreports. Reran on clean 6ab5636: runtime 276/0, parity 28/0, UI 5/5,\nDR 11 tables, containers, deployment 13 steps, production acceptance 14\nsteps all exit 0; pnpm check exit 0 (0 stale / 0 failed); lint+typecheck\n--force exit 0. Image levels used a zero-byte npm config (no credentials)\nand the local BuildKit cache. No source changed versus 39dd298.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-knowledge-cloud/commit/a4f30da58c8016b72afc8fe44d54723abd5266c0","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-28T09:59:08-07:00","added":[],"removed":[],"modified":["reports/agent-skill-sync.latest.json","reports/auth-governance.latest.json","reports/backend-behavior-parity.latest.json","reports/container-acceptance.latest.json","reports/contract-consumers.latest.json","reports/deployment-acceptance.latest.json","reports/disaster-recovery.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-kit.latest.json","reports/governance.latest.json","reports/knowledge-index.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/observability.latest.json","reports/os-product.latest.json","reports/outbox-operations.latest.json","reports/production-acceptance.latest.json","reports/production-operations.latest.json","reports/report-provenance.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-failure-coverage.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/session-revalidation.latest.json","reports/statemachine-write-guard.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json"]},{"id":"6ab563608644cb458237bdeffa8a8e8e9fd9911c","message":"docs(realtime): fix JWKS cache TTL statement and register forged-kid JWKS amplification (KC-SR-V4-F10)\n\nDocs only. The batch section no longer claims AUTH_JWKS_CACHE_TTL_MS only\naffects HTTP and the handshake: since KC-SR-V3-F9 the periodic revalidation\nshares the same cache rule during an IdP outage. The \"未覆盖与后续\" section\nnow actually registers the pre-existing issue (claimed but missing in the\nprevious round): an unknown kid forces one JWKS fetch per handshake / HTTP\nrequest with no single-flight or rate limit, amplifying IdP load; suggested\nfollow-up is a separate @repo/auth slice (single-flight + minimum interval).\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-knowledge-cloud/commit/6ab563608644cb458237bdeffa8a8e8e9fd9911c","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-28T09:51:23-07:00","added":[],"removed":[],"modified":["docs/realtime-session-revalidation.md"]},{"id":"9d75e2a6b50943c283f80b15c43f8a80fdad57ca","message":"chore(evidence): session revalidation round 4 — seven native levels on clean 39dd298\n\nReport-only successor of 39dd298 (verifier finding KC-SR-V3-F9).\nRuntime 276/0 (floor 207), parity 28/0, UI 5/5, DR 11 tables, containers,\ndeployment 13 steps, production acceptance 14 steps all exit 0; pnpm check\nexit 0 with 0 stale / 0 failed; lint+typecheck --force exit 0. Image levels\nused a zero-byte npm config (no credentials) and the local BuildKit cache.\nReceipt: reports/session-revalidation.latest.json (round 4; rounds 1-3 kept).\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-knowledge-cloud/commit/9d75e2a6b50943c283f80b15c43f8a80fdad57ca","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-28T09:19:28-07:00","added":[],"removed":[],"modified":["reports/agent-skill-sync.latest.json","reports/auth-governance.latest.json","reports/backend-behavior-parity.latest.json","reports/container-acceptance.latest.json","reports/contract-consumers.latest.json","reports/deployment-acceptance.latest.json","reports/disaster-recovery.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-kit.latest.json","reports/governance.latest.json","reports/knowledge-index.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/observability.latest.json","reports/os-product.latest.json","reports/outbox-operations.latest.json","reports/production-acceptance.latest.json","reports/production-operations.latest.json","reports/report-provenance.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-failure-coverage.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/session-revalidation.latest.json","reports/statemachine-write-guard.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json"]},{"id":"39dd2985bf54b7a2ccc7019dc2f3516f5aef5d07","message":"fix(realtime): one outage rule for revalidation and handshake; no backoff reset on brief opens (KC-SR-V3-F9)\n\nDuring a persistent JWKS outage the batch revalidation closed every\nconnection 1013 while the handshake still accepted cached-kid tokens for up\nto AUTH_JWKS_CACHE_TTL_MS, so clients churned connect -\u003e 1013 -\u003e reconnect.\nNow @repo/auth refreshSigningKeys({ tolerateCachedOnFailure }) keeps a\ncached key set that is still within its TTL (returns \"cached\"), and\nfetchKeys:false treats an expired cache as unavailable. Revalidation uses\nit: while the cache is valid connections stay open (same rule as HTTP and\nthe handshake); after expiry WS closes 1013 / SSE ends without a named\nevent and new handshakes are also 1013. The web client's backoff no longer\nresets on open: only a stable open of \u003e= 30 s followed by a non-outage close\nresets it (contracts realtimeReconnectAttempt / realtimeReconnectDelayMs).\nDoc records the outage behaviour and registers the pre-existing unthrottled\nJWKS fetch on forged kids (not fixed here).\n\nRed first on 19989d2: contracts 3, auth 1, integration 1 failed.\nOwn round-1 demo assertion updated: refreshSigningKeys now reports \"fresh\".\nDirty-tree feedback: runtime 276/0, docs-truth/auth gates and\nlint/typecheck --force green; native levels follow on this commit.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-knowledge-cloud/commit/39dd2985bf54b7a2ccc7019dc2f3516f5aef5d07","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-28T09:11:44-07:00","added":[],"removed":[],"modified":["CLAUDE.md","apps/api-nestjs/src/auth/auth.service.ts","apps/api-nestjs/src/events/realtime-session.service.ts","apps/api-nestjs/test/realtime.session-revalidation.test.ts","apps/web/src/hooks/useRealtime.ts","docs/realtime-session-revalidation.md","packages/auth/src/auth.test.ts","packages/auth/src/index.ts","packages/contracts/src/realtime-session.test.ts","packages/contracts/src/realtime-session.ts"]},{"id":"19989d2ec5c008128c1ed29e9cbf36cf11e538fd","message":"chore(evidence): session revalidation round 3 — seven native levels on clean 1a0a8bb\n\nReport-only successor of 1a0a8bb (verifier findings KC-SR-V2-F7/F8).\nRuntime 272/0 (floor 207), parity 28/0, UI 5/5, DR 11 tables, containers,\ndeployment 13 steps, production acceptance 14 steps all exit 0; pnpm check\nexit 0 with 0 stale / 0 failed; lint+typecheck --force exit 0. Image levels\nused a zero-byte npm config (no credentials) and the local BuildKit cache.\nReceipt: reports/session-revalidation.latest.json (round 3; rounds 1-2 kept).\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-knowledge-cloud/commit/19989d2ec5c008128c1ed29e9cbf36cf11e538fd","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-28T08:29:03-07:00","added":[],"removed":[],"modified":["reports/agent-skill-sync.latest.json","reports/auth-governance.latest.json","reports/backend-behavior-parity.latest.json","reports/container-acceptance.latest.json","reports/contract-consumers.latest.json","reports/deployment-acceptance.latest.json","reports/disaster-recovery.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-kit.latest.json","reports/governance.latest.json","reports/knowledge-index.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/observability.latest.json","reports/os-product.latest.json","reports/outbox-operations.latest.json","reports/production-acceptance.latest.json","reports/production-operations.latest.json","reports/report-provenance.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-failure-coverage.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/session-revalidation.latest.json","reports/statemachine-write-guard.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json"]}],"total_commits":0,"head_commit":{"id":"a4f30da58c8016b72afc8fe44d54723abd5266c0","message":"chore(evidence): rebind seven native levels to docs-only commit 6ab5636 (KC-SR-V4-F10)\n\nThe doc change in 6ab5636 is a provenance input and evidence is inherited\nonly across report-only commits, so pnpm check went red with 7 stale\nreports. Reran on clean 6ab5636: runtime 276/0, parity 28/0, UI 5/5,\nDR 11 tables, containers, deployment 13 steps, production acceptance 14\nsteps all exit 0; pnpm check exit 0 (0 stale / 0 failed); lint+typecheck\n--force exit 0. Image levels used a zero-byte npm config (no credentials)\nand the local BuildKit cache. No source changed versus 39dd298.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-knowledge-cloud/commit/a4f30da58c8016b72afc8fe44d54723abd5266c0","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-28T09:59:08-07:00","added":[],"removed":[],"modified":["reports/agent-skill-sync.latest.json","reports/auth-governance.latest.json","reports/backend-behavior-parity.latest.json","reports/container-acceptance.latest.json","reports/contract-consumers.latest.json","reports/deployment-acceptance.latest.json","reports/disaster-recovery.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-kit.latest.json","reports/governance.latest.json","reports/knowledge-index.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/observability.latest.json","reports/os-product.latest.json","reports/outbox-operations.latest.json","reports/production-acceptance.latest.json","reports/production-operations.latest.json","reports/report-provenance.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-failure-coverage.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/session-revalidation.latest.json","reports/statemachine-write-guard.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.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":false,"fork":false,"template":false,"mirror":false,"size":2799,"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-10-28T09:16:14+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
|
1793207226
|
1793207317
|
0
|
1793207225
|
1793207318
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
26623
|
test: record WO-SR-F9 acceptance on clean ffdfb13 test: record WO-SR-F9 acceptance on clean ffdfb13 (runtime 325/floor 319, UI 18/floor 16)...
|
82
|
5
|
governance.yml
|
16
|
5
|
0
|
refs/heads/main
|
3b2c4c0d307dde46aec78598cce4fb8b25372657
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"80c8bdabb7ff33364f9d270d4a771bf25a2cad71","after":"3b2c4c0d307dde46aec78598cce4fb8b25372657","compare_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/compare/80c8bdabb7ff33364f9d270d4a771bf25a2cad71...3b2c4c0d307dde46aec78598cce4fb8b25372657","commits":[{"id":"3b2c4c0d307dde46aec78598cce4fb8b25372657","message":"test: record WO-SR-F9 acceptance on clean ffdfb13 (runtime 325/floor 319, UI 18/floor 16)\n\nAll reports come from committed ffdfb13 (worktreeDirty=false); gates ran\n17:15-17:21Z (outside the WO-SR-F7 15:00-16:00 UTC window):\n- pnpm check: pass; lint/typecheck re-run with turbo --force 19/19\n- pnpm check:runtime: 325 passed / 0 failed, floor 319, including the 6 real\n C16 cases against an isolated 04 enterprise-platform 6ae2a13 shared clone\n (rerun because the source fingerprint changed; only e2e and the UI script did)\n- C16_BROWSER_ACCEPTANCE=1 E2E_REDIS_CONTAINER=\u003cisolated redis\u003e pnpm check:ui\n (OIDC web with REALTIME_SESSION_RECHECK_SECONDS=5): 18 passed / 0 failed,\n floor 16\n- pnpm check:governance (required): passed, no regressions\nD3 preservation manifest: 65 files (25 SQL) sha256-identical; no migration.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/commit/3b2c4c0d307dde46aec78598cce4fb8b25372657","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-28T10:21:15-07:00","added":[],"removed":[],"modified":["reports/agent-workflow-parity.latest.json","reports/backend-behavior-parity.latest.json","reports/configuration-consumer.latest.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-kit.latest.json","reports/governance.latest.json","reports/identity-boundary.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","reports/write-governance.latest.json"]},{"id":"ffdfb134364ad609c213f98ea675b938133ac29d","message":"test(web): run the OIDC browser stage with a 5s session recheck and assert by it (WO-SR-F9); register F10\n\n- scripts/check-ui-acceptance.mjs passes REALTIME_SESSION_RECHECK_SECONDS=5 to\n the OIDC web server and to Playwright only (production default stays 30s).\n- Logout and role-change cases assert revocation latency against the\n configured interval (\u003c= interval + 2s) and still require session.revoked as\n the first terminator; previously the 30s default left 3-4s against the 35s\n token.\n- WO-SR-F10 (logout during a Redis outage reports success while the server\n session survives) recorded in the implementation record and CLAUDE.md G8.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/commit/ffdfb134364ad609c213f98ea675b938133ac29d","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-28T10:14:36-07:00","added":[],"removed":[],"modified":["CLAUDE.md","apps/web/e2e/oidc.acceptance.spec.ts","docs/长连接在线复核实施记录-2026-10-28.md","scripts/check-ui-acceptance.mjs"]},{"id":"762e9e42f6d425247623bc89c1934f366bae746f","message":"test: record WO-SR-F8 fix acceptance on clean f8477be (runtime 325/floor 319 x2, UI 18/floor 16)\n\nAll reports come from committed f8477be (worktreeDirty=false); gates ran\n16:26-16:34Z (outside the WO-SR-F7 15:00-16:00 UTC window):\n- pnpm check: pass; lint/typecheck re-run with turbo --force 19/19\n- pnpm check:runtime run 1: 325 passed / 0 failed, floor 319 (kept outside the\n repo); run 2 (these reports): 325 passed / 0 failed; both include the 6 real\n C16 cases against an isolated 04 enterprise-platform 6ae2a13 shared clone\n- C16_BROWSER_ACCEPTANCE=1 E2E_REDIS_CONTAINER=\u003cisolated redis\u003e pnpm check:ui:\n 18 passed (12 demo incl. real C16 browser + 6 Keycloak OIDC incl. role change\n and Redis outage recovery) / 0 failed, floor 16\n- pnpm check:governance (required): passed, no regressions\nD3 preservation manifest: 65 files (25 SQL) sha256-identical; no migration.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/commit/762e9e42f6d425247623bc89c1934f366bae746f","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-28T09:35:19-07:00","added":[],"removed":[],"modified":["reports/agent-workflow-parity.latest.json","reports/backend-behavior-parity.latest.json","reports/configuration-consumer.latest.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-kit.latest.json","reports/governance.latest.json","reports/identity-boundary.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","reports/write-governance.latest.json"]},{"id":"f8477be5d68457c21f62006d0da78cb470a2ffcd","message":"fix(realtime): treat an unavailable session store as retryable, not logout (WO-SR-F8); register F7\n\n- SessionRevalidator reports an end reason: missing session or principal/role\n change -\u003e revoked; store error or lookup timeout -\u003e unavailable. The BFF guard\n still ends the stream (fail-closed) but sends session.unavailable for the latter.\n- useRealtime: on any session end or a refused EventSource handshake, read\n /auth/session directly; only an explicit unauthenticated view goes to login,\n otherwise (incl. 503/network) reconnect with 1-10s backoff and the last cursor.\n page.tsx keeps the workspace when a session refetch fails and auto-retries\n when there is no data yet.\n- Tests: identity end-reason + unavailable-frame units; real Keycloak role-change\n case (covers the BFF wiring of the role comparison); Redis outage/recovery\n browser case (opt-in via E2E_REDIS_CONTAINER).\n- WO-SR-F7 (addBusinessMinutes cross-day rounding, preserved contract) recorded\n in the implementation record and CLAUDE.md G18; not fixed here.\nRatchet 46 files / 339 cases / 319 runtime / 16 UI. Gates run separately.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/commit/f8477be5d68457c21f62006d0da78cb470a2ffcd","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-28T09:25:47-07:00","added":[],"removed":[],"modified":["CLAUDE.md","README.md","apps/web/e2e/oidc.acceptance.spec.ts","apps/web/src/app/page.tsx","apps/web/src/hooks/useRealtime.ts","docs/长连接在线复核实施记录-2026-10-28.md","governance/d3-test-scope.json","packages/identity/src/index.ts","packages/identity/src/realtime-session.test.ts","packages/identity/src/realtime-session.ts","packages/identity/src/sse-session-guard.test.ts","packages/identity/src/sse-session-guard.ts","scripts/lib/governance-baseline.test.mjs"]},{"id":"b1b104490cc720ddd2e4f116bf65bca66dbf4e4d","message":"test: record WO-SR-F1..F6 review-fix acceptance on clean 204e988 (runtime 323/floor 317 x2, UI 16/floor 15)\n\nAll reports come from committed 204e988 (worktreeDirty=false):\n- pnpm check: pass; lint/typecheck re-run with turbo --force 19/19\n- pnpm check:runtime run 1: 323 passed / 0 failed, floor 317 (kept outside the\n repo); run 2 (these reports): 323 passed / 0 failed; both include the 6 real\n C16 cases against an isolated 04 enterprise-platform 6ae2a13 shared clone\n (AUTH_MODE=jwt, PLATFORM_PERSISTENCE_ENABLED=1)\n- C16_BROWSER_ACCEPTANCE=1 pnpm check:ui: 16 passed (12 demo incl. real C16\n browser + 4 Keycloak OIDC) / 0 failed, floor 15\n- pnpm check:governance (required): passed, no regressions\nD3 preservation manifest: 65 files (25 SQL) sha256-identical; no migration.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/commit/b1b104490cc720ddd2e4f116bf65bca66dbf4e4d","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-28T08:30:07-07:00","added":[],"removed":[],"modified":["reports/agent-workflow-parity.latest.json","reports/backend-behavior-parity.latest.json","reports/configuration-consumer.latest.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-kit.latest.json","reports/governance.latest.json","reports/identity-boundary.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","reports/write-governance.latest.json"]}],"total_commits":0,"head_commit":{"id":"3b2c4c0d307dde46aec78598cce4fb8b25372657","message":"test: record WO-SR-F9 acceptance on clean ffdfb13 (runtime 325/floor 319, UI 18/floor 16)\n\nAll reports come from committed ffdfb13 (worktreeDirty=false); gates ran\n17:15-17:21Z (outside the WO-SR-F7 15:00-16:00 UTC window):\n- pnpm check: pass; lint/typecheck re-run with turbo --force 19/19\n- pnpm check:runtime: 325 passed / 0 failed, floor 319, including the 6 real\n C16 cases against an isolated 04 enterprise-platform 6ae2a13 shared clone\n (rerun because the source fingerprint changed; only e2e and the UI script did)\n- C16_BROWSER_ACCEPTANCE=1 E2E_REDIS_CONTAINER=\u003cisolated redis\u003e pnpm check:ui\n (OIDC web with REALTIME_SESSION_RECHECK_SECONDS=5): 18 passed / 0 failed,\n floor 16\n- pnpm check:governance (required): passed, no regressions\nD3 preservation manifest: 65 files (25 SQL) sha256-identical; no migration.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/commit/3b2c4c0d307dde46aec78598cce4fb8b25372657","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-28T10:21:15-07:00","added":[],"removed":[],"modified":["reports/agent-workflow-parity.latest.json","reports/backend-behavior-parity.latest.json","reports/configuration-consumer.latest.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-kit.latest.json","reports/governance.latest.json","reports/identity-boundary.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","reports/write-governance.latest.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":false,"fork":false,"template":false,"mirror":false,"size":4222,"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":4,"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-10-28T16:24:36+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
|
1793209151
|
1793209164
|
0
|
1793209151
|
1793209166
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
26637
|
chore(reports): bind final HR gates and resolved O chore(reports): bind final HR gates and resolved O22 at b0af7ab...
|
83
|
5
|
governance.yml
|
182
|
5
|
0
|
refs/heads/main
|
ad8fd2979994468cd41a3d13e628cca5bf4949ad
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"66f2c92a78aa66944a048aa02fb288de2ce2a6a2","after":"ad8fd2979994468cd41a3d13e628cca5bf4949ad","compare_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/compare/66f2c92a78aa66944a048aa02fb288de2ce2a6a2...ad8fd2979994468cd41a3d13e628cca5bf4949ad","commits":[{"id":"ad8fd2979994468cd41a3d13e628cca5bf4949ad","message":"chore(reports): bind final HR gates and resolved O22 at b0af7ab\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/commit/ad8fd2979994468cd41a3d13e628cca5bf4949ad","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-28T19:52:11-07:00","added":["reports/hr-chain-delivery.latest.json"],"removed":[],"modified":["reports/app-manifest.latest.json","reports/contract-consumers.latest.json","reports/database-rls.latest.json","reports/docs-truth.latest.json","reports/dual-backend-behavior.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance-kit.latest.json","reports/governance.latest.json","reports/health-dependency-failure.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/os-product-bundle.latest.json","reports/os-product-compat.latest.json","reports/os-product-distribution.latest.json","reports/os-product-layer.latest.json","reports/os-product-release-readiness.latest.json","reports/os-product-release-reproduction.latest.json","reports/outbox-multi-instance.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":"b0af7ab9a67614a012970ffda1457cf43f9dff26","message":"docs(hr): link stage-bound integration delivery receipt\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/commit/b0af7ab9a67614a012970ffda1457cf43f9dff26","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-28T19:43:29-07:00","added":[],"removed":[],"modified":["docs/domain/os-product-layer-blueprint.md"]},{"id":"b2e2dded42b10544174c907ee98a73e309f3dac4","message":"docs(governance): clarify fixed checkout without business reserved term\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/commit/b2e2dded42b10544174c907ee98a73e309f3dac4","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-28T19:35:52-07:00","added":[],"removed":[],"modified":["scripts/lib/os-product-release-evidence.mjs"]},{"id":"dcbe2e556ced4fc46ec3290d60fc9c419d65780f","message":"docs(hr): reconcile exact remote OS bundle through D3 readiness chain\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/commit/dcbe2e556ced4fc46ec3290d60fc9c419d65780f","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-28T19:34:33-07:00","added":[],"removed":[],"modified":["docs/domain/os-product-layer-blueprint.md","docs/post-d3-product-updates.json","products/juhai.hr/readiness.json"]},{"id":"3940879693f07048e63049735fe258d83c469c43","message":"fix(governance): 干净复现检出证据固定OS提交而非浮动main\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/commit/3940879693f07048e63049735fe258d83c469c43","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-28T18:34:21-07:00","added":[],"removed":[],"modified":["docs/domain/os-product-layer-blueprint.md","scripts/audit-os-product-release-reproduction.mjs","scripts/lib/os-product-release-evidence.mjs","scripts/lib/os-product-release-evidence.test.mjs"]}],"total_commits":0,"head_commit":{"id":"ad8fd2979994468cd41a3d13e628cca5bf4949ad","message":"chore(reports): bind final HR gates and resolved O22 at b0af7ab\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/commit/ad8fd2979994468cd41a3d13e628cca5bf4949ad","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-28T19:52:11-07:00","added":["reports/hr-chain-delivery.latest.json"],"removed":[],"modified":["reports/app-manifest.latest.json","reports/contract-consumers.latest.json","reports/database-rls.latest.json","reports/docs-truth.latest.json","reports/dual-backend-behavior.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance-kit.latest.json","reports/governance.latest.json","reports/health-dependency-failure.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/os-product-bundle.latest.json","reports/os-product-compat.latest.json","reports/os-product-distribution.latest.json","reports/os-product-layer.latest.json","reports/os-product-release-readiness.latest.json","reports/os-product-release-reproduction.latest.json","reports/outbox-multi-instance.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":83,"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-hr-system","full_name":"luoanwu/juhai-ai-hr-system","description":"巨嗨 AI 人事系统:受治理全栈基础框架","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":19653,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-ai-hr-system.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":12,"open_issues_count":0,"open_pr_counter":7,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-26T09:35:18+08:00","updated_at":"2026-10-28T21:33: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
|
1793242360
|
1793242388
|
0
|
1793242360
|
1793242388
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
26639
|
chore(reports): record fixed HR deployment and nat chore(reports): record fixed HR deployment and native Owner verification...
|
83
|
5
|
governance.yml
|
184
|
5
|
0
|
refs/heads/main
|
152a1eb9978cd9eb8e2a16820f4037df05e9f339
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"ad8fd2979994468cd41a3d13e628cca5bf4949ad","after":"152a1eb9978cd9eb8e2a16820f4037df05e9f339","compare_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/compare/ad8fd2979994468cd41a3d13e628cca5bf4949ad...152a1eb9978cd9eb8e2a16820f4037df05e9f339","commits":[{"id":"152a1eb9978cd9eb8e2a16820f4037df05e9f339","message":"chore(reports): record fixed HR deployment and native Owner verification\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/commit/152a1eb9978cd9eb8e2a16820f4037df05e9f339","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-28T20:02:08-07:00","added":[],"removed":[],"modified":["reports/hr-chain-delivery.latest.json"]}],"total_commits":0,"head_commit":{"id":"152a1eb9978cd9eb8e2a16820f4037df05e9f339","message":"chore(reports): record fixed HR deployment and native Owner verification\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/commit/152a1eb9978cd9eb8e2a16820f4037df05e9f339","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-28T20:02:08-07:00","added":[],"removed":[],"modified":["reports/hr-chain-delivery.latest.json"]},"repository":{"id":83,"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-hr-system","full_name":"luoanwu/juhai-ai-hr-system","description":"巨嗨 AI 人事系统:受治理全栈基础框架","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":19794,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-ai-hr-system.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":12,"open_issues_count":0,"open_pr_counter":7,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-26T09:35:18+08:00","updated_at":"2026-10-29T10:52:40+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
|
1793242935
|
1793242960
|
0
|
1793242935
|
1793242962
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
26714
|
docs(devbase): record isolated dev base usage and docs(devbase): record isolated dev base usage and 10-31 evidence...
|
133
|
5
|
infra.yml
|
19
|
5
|
0
|
refs/heads/main
|
daa895b4214fda43d73bcadb8d3bf0fbf9f7f981
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"ef8462aaf0469bdba862c3dadf5b8b71538d1420","after":"daa895b4214fda43d73bcadb8d3bf0fbf9f7f981","compare_url":"https://gitea.g-hi.com/luoanwu/infra/compare/ef8462aaf0469bdba862c3dadf5b8b71538d1420...daa895b4214fda43d73bcadb8d3bf0fbf9f7f981","commits":[{"id":"daa895b4214fda43d73bcadb8d3bf0fbf9f7f981","message":"docs(devbase): record isolated dev base usage and 10-31 evidence\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/infra/commit/daa895b4214fda43d73bcadb8d3bf0fbf9f7f981","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-31T07:17:42-07:00","added":["reports/isolated-dev-base-2026-10-31/README.md","reports/isolated-dev-base-2026-10-31/check.txt","reports/isolated-dev-base-2026-10-31/down-1.json","reports/isolated-dev-base-2026-10-31/receipt.json","reports/isolated-dev-base-2026-10-31/run.log"],"removed":[],"modified":["README.md"]},{"id":"d1904dbab71a8295613b544b773d24f277dd2fef","message":"feat(devbase): long-lived isolated PG/Redis base with owned teardown\n\nscripts/isolated-dev-base.py up|status|down gives one task a uniquely\nnamed project: digest-pinned PG/Redis on reserved 127.0.0.1 ports (stable\nacross restarts), PG data in a project-owned volume, declared databases\nprovisioned with least-privilege roles, Redis behind requirepass. The\nreceipt carries no secrets; credentials go to a 0600 file. down removes\nonly resources carrying the project's ownership label and refuses\notherwise. Same-machine only; does not close staging or off-site DR.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/infra/commit/d1904dbab71a8295613b544b773d24f277dd2fef","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-31T07:16:16-07:00","added":["scripts/isolated-dev-base.py","test/isolated-dev-base.test.mjs"],"removed":[],"modified":[]},{"id":"7d411cfa34062279978ace7ef8b0361656337e24","message":"chore(declarations): sync snapshot to control plane 3fdcfbaf\n\nRegenerated with scripts/sync-declarations.mjs from 04 enterprise-platform\nmain 3fdcfbaf (adds master-data-registry module and DEC-067); clears the\nDECLARATIONS_DRIFT gate failure present on infra main.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/infra/commit/7d411cfa34062279978ace7ef8b0361656337e24","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-31T07:16:16-07:00","added":[],"removed":[],"modified":["declarations/SOURCE.json","declarations/caddy-routes.json","declarations/modules.json","declarations/otel-attributes.json"]}],"total_commits":0,"head_commit":{"id":"daa895b4214fda43d73bcadb8d3bf0fbf9f7f981","message":"docs(devbase): record isolated dev base usage and 10-31 evidence\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/infra/commit/daa895b4214fda43d73bcadb8d3bf0fbf9f7f981","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-31T07:17:42-07:00","added":["reports/isolated-dev-base-2026-10-31/README.md","reports/isolated-dev-base-2026-10-31/check.txt","reports/isolated-dev-base-2026-10-31/down-1.json","reports/isolated-dev-base-2026-10-31/receipt.json","reports/isolated-dev-base-2026-10-31/run.log"],"removed":[],"modified":["README.md"]},"repository":{"id":133,"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":"infra","full_name":"luoanwu/infra","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":1336,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/infra/languages","html_url":"https://gitea.g-hi.com/luoanwu/infra","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/infra","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/infra.git","clone_url":"https://gitea.g-hi.com/luoanwu/infra.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-10-11T21:11:15+08:00","updated_at":"2026-10-24T17:03:02+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
|
1793456297
|
1793456809
|
0
|
1793456296
|
1793456809
|
|
|
0
|
Edit
Delete
|
|
26715
|
docs(devbase): record broker and object-store evid docs(devbase): record broker and object-store evidence (50 checks, restart, zero residue)...
|
133
|
5
|
infra.yml
|
20
|
5
|
0
|
refs/heads/main
|
64cf7ffa531c8cfb8c14b77bc42f27265daaf4ef
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"daa895b4214fda43d73bcadb8d3bf0fbf9f7f981","after":"64cf7ffa531c8cfb8c14b77bc42f27265daaf4ef","compare_url":"https://gitea.g-hi.com/luoanwu/infra/compare/daa895b4214fda43d73bcadb8d3bf0fbf9f7f981...64cf7ffa531c8cfb8c14b77bc42f27265daaf4ef","commits":[{"id":"64cf7ffa531c8cfb8c14b77bc42f27265daaf4ef","message":"docs(devbase): record broker and object-store evidence (50 checks, restart, zero residue)\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/infra/commit/64cf7ffa531c8cfb8c14b77bc42f27265daaf4ef","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-31T08:11:59-07:00","added":["reports/isolated-dev-base-2026-10-31-broker-objects/README.md","reports/isolated-dev-base-2026-10-31-broker-objects/check.txt","reports/isolated-dev-base-2026-10-31-broker-objects/down-1.json","reports/isolated-dev-base-2026-10-31-broker-objects/receipt.json","reports/isolated-dev-base-2026-10-31-broker-objects/run.log"],"removed":[],"modified":["README.md"]},{"id":"c3f88e083ab7c6b66b8d6ce9e7906ecf736b8575","message":"docs(devbase): document optional broker and object store\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/infra/commit/c3f88e083ab7c6b66b8d6ce9e7906ecf736b8575","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-31T08:10:15-07:00","added":[],"removed":[],"modified":["README.md","scripts/isolated-dev-base.py"]},{"id":"e4b4f2a692b10e145151241e824f69b03b05a7ad","message":"feat(devbase): optional authenticated broker and bucket-scoped object store\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/infra/commit/e4b4f2a692b10e145151241e824f69b03b05a7ad","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-31T08:08:00-07:00","added":["scripts/devbase-broker-probe.mjs"],"removed":[],"modified":["scripts/isolated-dev-base.py","test/isolated-dev-base.test.mjs"]}],"total_commits":0,"head_commit":{"id":"64cf7ffa531c8cfb8c14b77bc42f27265daaf4ef","message":"docs(devbase): record broker and object-store evidence (50 checks, restart, zero residue)\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/infra/commit/64cf7ffa531c8cfb8c14b77bc42f27265daaf4ef","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-31T08:11:59-07:00","added":["reports/isolated-dev-base-2026-10-31-broker-objects/README.md","reports/isolated-dev-base-2026-10-31-broker-objects/check.txt","reports/isolated-dev-base-2026-10-31-broker-objects/down-1.json","reports/isolated-dev-base-2026-10-31-broker-objects/receipt.json","reports/isolated-dev-base-2026-10-31-broker-objects/run.log"],"removed":[],"modified":["README.md"]},"repository":{"id":133,"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":"infra","full_name":"luoanwu/infra","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":1386,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/infra/languages","html_url":"https://gitea.g-hi.com/luoanwu/infra","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/infra","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/infra.git","clone_url":"https://gitea.g-hi.com/luoanwu/infra.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-10-11T21:11:15+08:00","updated_at":"2026-10-31T22:18: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"}}...
|
push
|
2
|
6
|
1793459534
|
1793459715
|
0
|
1793459532
|
1793459715
|
|
|
0
|
Edit
Delete
|
|
26730
|
test(scope): bind serial runtime UI and static gat test(scope): bind serial runtime UI and static gates to merged tenant view...
|
83
|
5
|
governance.yml
|
186
|
5
|
0
|
refs/heads/main
|
5fde73a0bef06f57d7a26283eeb369c65cf309e0
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"152a1eb9978cd9eb8e2a16820f4037df05e9f339","after":"5fde73a0bef06f57d7a26283eeb369c65cf309e0","compare_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/compare/152a1eb9978cd9eb8e2a16820f4037df05e9f339...5fde73a0bef06f57d7a26283eeb369c65cf309e0","commits":[{"id":"5fde73a0bef06f57d7a26283eeb369c65cf309e0","message":"test(scope): bind serial runtime UI and static gates to merged tenant view\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/commit/5fde73a0bef06f57d7a26283eeb369c65cf309e0","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-31T22:31:52-07:00","added":["docs/evidence/juhai-scope-tenant-merge-2026-10-31.json"],"removed":[],"modified":["reports/app-manifest.latest.json","reports/contract-consumers.latest.json","reports/database-rls.latest.json","reports/docs-truth.latest.json","reports/dual-backend-behavior.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance-kit.latest.json","reports/governance.latest.json","reports/health-dependency-failure.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/os-product-bundle.latest.json","reports/os-product-compat.latest.json","reports/os-product-distribution.latest.json","reports/os-product-layer.latest.json","reports/outbox-multi-instance.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":"657f00e196c01239ca20c5c01971fa73fa814a88","message":"merge: add bounded juhai Scope view over current main\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/commit/657f00e196c01239ca20c5c01971fa73fa814a88","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-31T22:22:10-07:00","added":["apps/api-nestjs/src/scope-source/partition-reader.ts","packages/scope-source/src/errors.ts","packages/scope-source/src/tenant-partitions.test.ts","packages/scope-source/src/tenant-partitions.ts"],"removed":[],"modified":["apps/api-nestjs/src/scope-source/organization-bootstrap-delivery.ts","apps/api-nestjs/src/scope-source/scope-source.module.ts","docs/post-d3-product-updates.json","docs/scope-source-integration.md","packages/scope-source/src/index.ts"]},{"id":"69e4314a120dc0c254fa7d80e9ecec0d10b98ceb","message":"feat(scope): add Owner bounded same snapshot tenant merge view\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/commit/69e4314a120dc0c254fa7d80e9ecec0d10b98ceb","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-31T22:22:10-07:00","added":["apps/api-nestjs/src/scope-source/partition-reader.ts","packages/scope-source/src/errors.ts","packages/scope-source/src/tenant-partitions.test.ts","packages/scope-source/src/tenant-partitions.ts"],"removed":[],"modified":["apps/api-nestjs/src/scope-source/organization-bootstrap-delivery.ts","apps/api-nestjs/src/scope-source/scope-source.module.ts","docs/post-d3-product-updates.json","docs/scope-source-integration.md","packages/scope-source/src/index.ts"]}],"total_commits":0,"head_commit":{"id":"5fde73a0bef06f57d7a26283eeb369c65cf309e0","message":"test(scope): bind serial runtime UI and static gates to merged tenant view\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/commit/5fde73a0bef06f57d7a26283eeb369c65cf309e0","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-31T22:31:52-07:00","added":["docs/evidence/juhai-scope-tenant-merge-2026-10-31.json"],"removed":[],"modified":["reports/app-manifest.latest.json","reports/contract-consumers.latest.json","reports/database-rls.latest.json","reports/docs-truth.latest.json","reports/dual-backend-behavior.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance-kit.latest.json","reports/governance.latest.json","reports/health-dependency-failure.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/os-product-bundle.latest.json","reports/os-product-compat.latest.json","reports/os-product-distribution.latest.json","reports/os-product-layer.latest.json","reports/outbox-multi-instance.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":83,"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-hr-system","full_name":"luoanwu/juhai-ai-hr-system","description":"巨嗨 AI 人事系统:受治理全栈基础框架","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":19993,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-ai-hr-system.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":12,"open_issues_count":0,"open_pr_counter":7,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-26T09:35:18+08:00","updated_at":"2026-10-29T11:02: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"}}...
|
push
|
2
|
6
|
1793511146
|
1793511169
|
0
|
1793511145
|
1793511171
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
26738
|
docs(scope): record controlled juhai enablement an docs(scope): record controlled juhai enablement and signed live chain...
|
83
|
5
|
governance.yml
|
188
|
5
|
0
|
refs/heads/main
|
993f9bcc5a826fea26e142210fc6a8670e9e7b90
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"5fde73a0bef06f57d7a26283eeb369c65cf309e0","after":"993f9bcc5a826fea26e142210fc6a8670e9e7b90","compare_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/compare/5fde73a0bef06f57d7a26283eeb369c65cf309e0...993f9bcc5a826fea26e142210fc6a8670e9e7b90","commits":[{"id":"993f9bcc5a826fea26e142210fc6a8670e9e7b90","message":"docs(scope): record controlled juhai enablement and signed live chain\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/commit/993f9bcc5a826fea26e142210fc6a8670e9e7b90","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-31T23:39:09-07:00","added":[],"removed":[],"modified":["docs/evidence/juhai-scope-tenant-merge-2026-10-31.json","docs/scope-source-integration.md"]}],"total_commits":0,"head_commit":{"id":"993f9bcc5a826fea26e142210fc6a8670e9e7b90","message":"docs(scope): record controlled juhai enablement and signed live chain\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/commit/993f9bcc5a826fea26e142210fc6a8670e9e7b90","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-31T23:39:09-07:00","added":[],"removed":[],"modified":["docs/evidence/juhai-scope-tenant-merge-2026-10-31.json","docs/scope-source-integration.md"]},"repository":{"id":83,"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-hr-system","full_name":"luoanwu/juhai-ai-hr-system","description":"巨嗨 AI 人事系统:受治理全栈基础框架","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":20243,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-ai-hr-system.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":12,"open_issues_count":0,"open_pr_counter":7,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-26T09:35:18+08:00","updated_at":"2026-11-01T13:32: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
|
1793516124
|
1793516147
|
0
|
1793516086
|
1793516148
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
26759
|
ci(diagnostic): 核对定制迁移编号和实际表结构
|
116
|
5
|
gitea-migration-identity.yml
|
1172
|
5
|
0
|
refs/heads/codex/runner-maintenance-diagnostic-202 refs/heads/codex/runner-maintenance-diagnostic-20261101...
|
246c4232d67843cc6f47fd8e49d04eb906873ecd
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/codex/runner-mainte {"ref":"refs/heads/codex/runner-maintenance-diagnostic-20261101","before":"02740b6b7da73e4541fa136c6ef7a6ae003c0f67","after":"246c4232d67843cc6f47fd8e49d04eb906873ecd","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/02740b6b7da73e4541fa136c6ef7a6ae003c0f67...246c4232d67843cc6f47fd8e49d04eb906873ecd","commits":[{"id":"246c4232d67843cc6f47fd8e49d04eb906873ecd","message":"ci(diagnostic): 核对定制迁移编号和实际表结构\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/246c4232d67843cc6f47fd8e49d04eb906873ecd","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-11-01T01:27:25-07:00","added":[".gitea/workflows/gitea-migration-identity.yml"],"removed":[],"modified":[]}],"total_commits":0,"head_commit":{"id":"246c4232d67843cc6f47fd8e49d04eb906873ecd","message":"ci(diagnostic): 核对定制迁移编号和实际表结构\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/246c4232d67843cc6f47fd8e49d04eb906873ecd","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-11-01T01:27:25-07:00","added":[".gitea/workflows/gitea-migration-identity.yml"],"removed":[],"modified":[]},"repository":{"id":116,"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":"enterprise-platform","full_name":"luoanwu/enterprise-platform","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":108916,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/enterprise-platform/languages","html_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/enterprise-platform","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/enterprise-platform.git","clone_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform.git","original_url":"","website":"","stars_count":0,"forks_count":1,"watchers_count":1,"branch_count":168,"open_issues_count":0,"open_pr_counter":3,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-09-11T07:33:25+08:00","updated_at":"2026-11-01T16:25:59+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
|
1
|
6
|
1793522135
|
1793522136
|
0
|
1793521654
|
1793522136
|
group: runner-maintenance-readonly
cancel-in-progr group: runner-maintenance-readonly
cancel-in-progress: "false"
...
|
runner-maintenance-readonly
|
0
|
Edit
Delete
|
|
26904
|
docs(infra): align runtime role and Redis persiste docs(infra): align runtime role and Redis persistence examples...
|
133
|
5
|
infra.yml
|
21
|
5
|
0
|
refs/heads/main
|
8a0189100c6edafe263a42bf866057f69195e538
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"64cf7ffa531c8cfb8c14b77bc42f27265daaf4ef","after":"8a0189100c6edafe263a42bf866057f69195e538","compare_url":"https://gitea.g-hi.com/luoanwu/infra/compare/64cf7ffa531c8cfb8c14b77bc42f27265daaf4ef...8a0189100c6edafe263a42bf866057f69195e538","commits":[{"id":"8a0189100c6edafe263a42bf866057f69195e538","message":"docs(infra): align runtime role and Redis persistence examples\n","url":"https://gitea.g-hi.com/luoanwu/infra/commit/8a0189100c6edafe263a42bf866057f69195e538","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-11-01T16:09:03-08:00","added":[],"removed":[],"modified":["README.md"]}],"total_commits":0,"head_commit":{"id":"8a0189100c6edafe263a42bf866057f69195e538","message":"docs(infra): align runtime role and Redis persistence examples\n","url":"https://gitea.g-hi.com/luoanwu/infra/commit/8a0189100c6edafe263a42bf866057f69195e538","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-11-01T16:09:03-08:00","added":[],"removed":[],"modified":["README.md"]},"repository":{"id":133,"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":"infra","full_name":"luoanwu/infra","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":1459,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/infra/languages","html_url":"https://gitea.g-hi.com/luoanwu/infra","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/infra","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/infra.git","clone_url":"https://gitea.g-hi.com/luoanwu/infra.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-10-11T21:11:15+08:00","updated_at":"2026-10-31T23:12:12+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
|
1793578190
|
1793578232
|
0
|
1793578190
|
1793578232
|
|
|
0
|
Edit
Delete
|
|
27057
|
docs(infra): record control-plane staging secrets docs(infra): record control-plane staging secrets landing...
|
133
|
5
|
infra.yml
|
22
|
5
|
0
|
refs/heads/main
|
abac9719e7d634761d231826aacb46792209c054
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"8a0189100c6edafe263a42bf866057f69195e538","after":"abac9719e7d634761d231826aacb46792209c054","compare_url":"https://gitea.g-hi.com/luoanwu/infra/compare/8a0189100c6edafe263a42bf866057f69195e538...abac9719e7d634761d231826aacb46792209c054","commits":[{"id":"abac9719e7d634761d231826aacb46792209c054","message":"docs(infra): record control-plane staging secrets landing\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/infra/commit/abac9719e7d634761d231826aacb46792209c054","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-11-04T18:32:01-08:00","added":[],"removed":[],"modified":["README.md"]},{"id":"d7697c875c8aae80f8b0198ec1a2c2ee2db5f7e1","message":"fix(staging): require secrets and sync declarations to control plane\n\nstaging 缺数据库、对象存储、Grafana 口令或 LiteLLM 主密钥时配置直接失败,\n不再沿用基线开发默认值;dev/test 默认值不变。声明快照同步到控制面 1df501663。\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/infra/commit/d7697c875c8aae80f8b0198ec1a2c2ee2db5f7e1","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-11-04T18:16:35-08:00","added":["test/staging-fail-closed.test.mjs"],"removed":[],"modified":["README.md","declarations/SOURCE.json","declarations/caddy-routes.json","declarations/modules.json","overlays/staging.yaml"]}],"total_commits":0,"head_commit":{"id":"abac9719e7d634761d231826aacb46792209c054","message":"docs(infra): record control-plane staging secrets landing\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/infra/commit/abac9719e7d634761d231826aacb46792209c054","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-11-04T18:32:01-08:00","added":[],"removed":[],"modified":["README.md"]},"repository":{"id":133,"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":"infra","full_name":"luoanwu/infra","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":1477,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/infra/languages","html_url":"https://gitea.g-hi.com/luoanwu/infra","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/infra","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/infra.git","clone_url":"https://gitea.g-hi.com/luoanwu/infra.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-10-11T21:11:15+08:00","updated_at":"2026-11-02T08:09: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
|
1793846745
|
1793846813
|
0
|
1793845954
|
1793846813
|
|
|
0
|
Edit
Delete
|
|
23436
|
docs: refresh published SHA snapshot
|
64
|
5
|
governance.yml
|
1
|
5
|
0
|
refs/heads/main
|
07bdfd6b5c1898d76a113986ab5a6e7ade243839
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"0000000000000000000000000000000000000000","after":"07bdfd6b5c1898d76a113986ab5a6e7ade243839","compare_url":"https://gitea.g-hi.com/","commits":[{"id":"07bdfd6b5c1898d76a113986ab5a6e7ade243839","message":"docs: refresh published SHA snapshot\n","url":"https://gitea.g-hi.com/luoanwu/voice-conversion/commit/07bdfd6b5c1898d76a113986ab5a6e7ade243839","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-21T23:33:33-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/docs-truth.latest.json","reports/governance-docs.latest.json"]},{"id":"515f82aceaa7057454f2b135a8c82e980cef442d","message":"feat(svc): 音色军火库三件套——CFM/CFG 全链旋钮 + 参考自动去混响 + 多段拼接\n\n- nSteps/cfgScale:contracts 限幅 coerce → cover_jobs 增量列(迁移)→ 双后端\n 持久化+worker 透传 → sidecar 表单 → 前端「高级参数」区(含一直未露出的移调)\n- 音色参考默认走 分离+去混响 增强链(enhance_timbre 可关);干录音≈无损通过\n- build_prompt_multiseg:按静音切段→时长×能量排序→时间序 50ms 交叉淡化拼接,\n 合成用例验证三段唱段拿满 29.9s、段间静音全剔除(单窗口法会夹带静音)\n- 门禁:check exit 0 / runtime 87 tests(地板 87)/ ui 6 用例;参数贯通冒烟\n 实证(nSteps=8 存库→sidecar 接收;越界 400;垃圾文件秒级人话错误)\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/voice-conversion/commit/515f82aceaa7057454f2b135a8c82e980cef442d","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-21T23:32:27-07:00","added":["apps/api-fastify/prisma/migrations/20260722100000_cover_job_infer_params/migration.sql","apps/api-nestjs/prisma/migrations/20260722100000_cover_job_infer_params/migration.sql","reports/ui-acceptance-svc-files/ui-acceptance-mrvpbprt/jobs/dec89f00-288c-4793-a3e6-83f87e8a55d7/song.wav","reports/ui-acceptance-svc-files/ui-acceptance-mrvpbprt/timbres/a84c1bc4-8b4e-4911-9c75-8fd0271f886c.wav","reports/ui-acceptance-svc-files/ui-acceptance-mrvpbprt/timbres/db8e34cb-e986-4c76-81d4-f9aba530afcd.wav"],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/modules/svc/cover-jobs.service.ts","apps/api-fastify/src/modules/svc/sidecar.client.ts","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/src/svc/cover-jobs.service.ts","apps/api-nestjs/src/svc/sidecar.client.ts","apps/web/src/components/SvcPanel.tsx","apps/web/src/lib/api.ts","docs/domain/svc-cover-blueprint.md","packages/contracts/src/cover.test.ts","packages/contracts/src/cover.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","sidecars/soulx-singer/__pycache__/svc_pipeline.cpython-310.pyc","sidecars/soulx-singer/server.py","sidecars/soulx-singer/svc_pipeline.py"]},{"id":"8c2000bfc0f0f515f3e85cc32184c5e64aeeb1c8","message":"feat(svc): 音色获取质量三连修——录音关通话处理 + 参考智能选段 + 上限30s\n\n- 浏览器录音显式关闭 echoCancellation/noiseSuppression/autoGainControl:\n 通话向处理会削唱声谐波/抽压动态,是音色相似度的隐形杀手\n- sidecar prepare_timbre 智能选段:去首尾静音 + 选「有声占比×能量」最高的\n 连续窗口(合成用例验证:25s 静音开头场景有效信息 2.4×于盲取开头)\n- 音色参考上限 20s→30s;UI 文案建议 20-30 秒清唱;蓝图已知约束同步\n\ncheck:ui 6/6 全绿(假麦克风带新约束)\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/voice-conversion/commit/8c2000bfc0f0f515f3e85cc32184c5e64aeeb1c8","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-21T23:20:33-07:00","added":[".agents/skills/business-module-intake/SKILL.md",".codex/agents/acceptance-runner.toml",".codex/agents/module-blueprint.toml","reports/ui-acceptance-svc-files/ui-acceptance-mrvp0i9x/jobs/721ef856-6cc6-4a99-8791-40ebb6a2f621/song.wav","reports/ui-acceptance-svc-files/ui-acceptance-mrvp0i9x/timbres/3ba94b55-4664-4066-9c03-8ba48a8f1a6f.wav","reports/ui-acceptance-svc-files/ui-acceptance-mrvp0i9x/timbres/fab7db0b-8d46-4586-a881-633467fe20da.wav"],"removed":[],"modified":["CLAUDE.md","apps/web/src/components/SvcPanel.tsx","apps/web/src/lib/audio-record.ts","docs/domain/svc-cover-blueprint.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","sidecars/soulx-singer/__pycache__/svc_pipeline.cpython-310.pyc","sidecars/soulx-singer/svc_pipeline.py"]},{"id":"e019e32157a468c1e93b874228ee37bf39989c9f","message":"docs: 发布快照登记双远端状态(GitHub 已核对,Gitea 待建仓)\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/voice-conversion/commit/e019e32157a468c1e93b874228ee37bf39989c9f","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-21T22:27:08-07:00","added":[],"removed":[],"modified":["CLAUDE.md"]},{"id":"6614c0cee2254d7cf2c4e081e816642cc2c8aff7","message":"docs: 发布状态快照登记首提交 b13df4a(远端待建立)\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/voice-conversion/commit/6614c0cee2254d7cf2c4e081e816642cc2c8aff7","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-21T22:18:59-07:00","added":[],"removed":[],"modified":["CLAUDE.md"]}],"total_commits":0,"head_commit":{"id":"07bdfd6b5c1898d76a113986ab5a6e7ade243839","message":"docs: refresh published SHA snapshot\n","url":"https://gitea.g-hi.com/luoanwu/voice-conversion/commit/07bdfd6b5c1898d76a113986ab5a6e7ade243839","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-21T23:33:33-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":27,"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
|
3
|
5
|
1784702256
|
1784702338
|
0
|
1784702255
|
1784702338
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23454
|
初始提交:SongFormer 结构时间歌词行(治理底座 + 双阶段流水线 + 复核工作台)
|
67
|
5
|
governance.yml
|
1
|
5
|
0
|
refs/heads/main
|
3f76d2e5e9efe72c7ebe9d9faa2f335ccd2dbf4f
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"0000000000000000000000000000000000000000","after":"3f76d2e5e9efe72c7ebe9d9faa2f335ccd2dbf4f","compare_url":"https://gitea.g-hi.com/","commits":[{"id":"3f76d2e5e9efe72c7ebe9d9faa2f335ccd2dbf4f","message":"初始提交:SongFormer 结构时间歌词行(治理底座 + 双阶段流水线 + 复核工作台)\n\n- 基础框架迁移(git archive 受管文件 + 身份改造 + 三级门禁,静态 pnpm check 全绿)\n- phase1 结构→歌词行全局单调 DP 对齐:以官方歌词为准强制覆盖、非演唱结构防幻听先验、\n 六语种语音层(拼音/jyutping/kakasi读音/jamo/metaphone/拉丁)、多块投票定语言、\n 异体字读音等价;phase2 MMS 三句滑窗 + VAD 尾校验产出行/字级时间\n- 四模型本地部署(SongFormer/Qwen3-ASR-1.7B/mms-fa/HTDemucs,权重不进 git,\n manifest SHA256 + check:model-assets 门禁 + smoke 证据)\n- Web 复核工作台 /review:载入/一键执行/重跑、试听/连续播放/逐字对比、问题行过滤、\n 语言徽标、错配警示;run_song 一键编排(缺歌声自动分离,产物落原目录复用)\n- pytest 48/48;真歌验证:晴天×3路径、后来、日语/粤语曲目(精度未做人工金标验收)\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics/commit/3f76d2e5e9efe72c7ebe9d9faa2f335ccd2dbf4f","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-27T23:15:09-07:00","added":[".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",".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/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/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/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.deadletter.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/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/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/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/api/review/audio/route.ts","apps/web/src/app/api/review/browse/route.ts","apps/web/src/app/api/review/route.ts","apps/web/src/app/api/review/run/route.ts","apps/web/src/app/globals.css","apps/web/src/app/layout.tsx","apps/web/src/app/page.tsx","apps/web/src/app/review/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/domain/structure-lyrics-phase1-blueprint.md","docs/governance-experience.md","docs/migration-notes.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","models/model-assets.v1.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/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/tsconfig.json","pnpm-lock.yaml","pnpm-workspace.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/model-assets.latest.json","reports/model-evidence/htdemucs-smoke.latest.json","reports/model-evidence/mms-fa-smoke.latest.json","reports/model-evidence/qwen3-asr-smoke.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-contract-consumers.mjs","scripts/check-docs-truth.mjs","scripts/check-dual-backend-parity.mjs","scripts/check-governance-docs.mjs","scripts/check-migrations.mjs","scripts/check-model-assets.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/governance-report.mjs","services/structure_lyrics/README.md","services/structure_lyrics/examples/demo_song/asr.json","services/structure_lyrics/examples/demo_song/lyrics.txt","services/structure_lyrics/examples/demo_song/structure.json","services/structure_lyrics/phase1/__init__.py","services/structure_lyrics/phase1/align.py","services/structure_lyrics/phase1/asr.py","services/structure_lyrics/phase1/audio.py","services/structure_lyrics/phase1/cli.py","services/structure_lyrics/phase1/lyrics.py","services/structure_lyrics/phase1/models.py","services/structure_lyrics/phase1/pipeline.py","services/structure_lyrics/phase1/similarity.py","services/structure_lyrics/phase1/structure.py","services/structure_lyrics/phase1/textnorm.py","services/structure_lyrics/phase2/__init__.py","services/structure_lyrics/phase2/audio_io.py","services/structure_lyrics/phase2/backend.py","services/structure_lyrics/phase2/cli.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_align.py","services/structure_lyrics/tests/test_language.py","services/structure_lyrics/tests/test_multilang.py","services/structure_lyrics/tests/test_phase2.py","tsconfig.base.json","turbo.json","workers/demucs/requirements_demucs.txt","workers/demucs/run_separate.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/README.md","workers/qwen3-asr/requirements_qwen3_asr.txt","workers/qwen3-asr/run_qwen3_asr.py","workers/qwen3-asr/testdata/asr_zh.txt","workers/qwen3-asr/testdata/asr_zh.wav","workers/qwen3-asr/vendor/qwen3_asr/__init__.py","workers/qwen3-asr/vendor/qwen3_asr/align/__init__.py","workers/qwen3-asr/vendor/qwen3_asr/align/boundary.py","workers/qwen3-asr/vendor/qwen3_asr/align/chars.py","workers/qwen3-asr/vendor/qwen3_asr/align/monotonic.py","workers/qwen3-asr/vendor/qwen3_asr/align/observation.py","workers/qwen3-asr/vendor/qwen3_asr/align/pcenter.py","workers/qwen3-asr/vendor/qwen3_asr/align/pipeline.py","workers/qwen3-asr/vendor/qwen3_asr/align/progress.py","workers/qwen3-asr/vendor/qwen3_asr/align/tail.py","workers/qwen3-asr/vendor/qwen3_asr/align/text.py","workers/qwen3-asr/vendor/qwen3_asr/align/windows.py","workers/qwen3-asr/vendor/qwen3_asr/align/wordless.py","workers/qwen3-asr/vendor/qwen3_asr/align_cli.py","workers/qwen3-asr/vendor/qwen3_asr/audio.py","workers/qwen3-asr/vendor/qwen3_asr/cache.py","workers/qwen3-asr/vendor/qwen3_asr/cli.py","workers/qwen3-asr/vendor/qwen3_asr/config.py","workers/qwen3-asr/vendor/qwen3_asr/diagnostics_cli.py","workers/qwen3-asr/vendor/qwen3_asr/engine.py","workers/qwen3-asr/vendor/qwen3_asr/forced_aligner.py","workers/qwen3-asr/vendor/qwen3_asr/service.py","workers/qwen3-asr/vendor/qwen3_asr/stream.py","workers/qwen3-asr/vendor/qwen3_asr/stream_cli.py","workers/qwen3-asr/vendor/qwen3_asr/structure.py","workers/qwen3-asr/vendor/qwen3_asr/textutil.py","workers/qwen3-asr/vendor/qwen3_asr/unowned_voice_review.py","workers/qwen3-asr/vendor/qwen3_asr/unowned_voice_review_cli.py","workers/qwen3-asr/vendor/qwen3_asr/unowned_voice_score.py","workers/qwen3-asr/vendor/qwen3_asr/unowned_voice_score_cli.py","workers/qwen3-asr/vendor/qwen3_asr/voice_diagnostics.py","workers/structure/README.md","workers/structure/requirements_structure.txt","workers/structure/run_structure.py","workers/structure/vendor/wav2vec2-conformer-rope-large-960h-ft.config.json"],"removed":[],"modified":[]}],"total_commits":0,"head_commit":{"id":"3f76d2e5e9efe72c7ebe9d9faa2f335ccd2dbf4f","message":"初始提交:SongFormer 结构时间歌词行(治理底座 + 双阶段流水线 + 复核工作台)\n\n- 基础框架迁移(git archive 受管文件 + 身份改造 + 三级门禁,静态 pnpm check 全绿)\n- phase1 结构→歌词行全局单调 DP 对齐:以官方歌词为准强制覆盖、非演唱结构防幻听先验、\n 六语种语音层(拼音/jyutping/kakasi读音/jamo/metaphone/拉丁)、多块投票定语言、\n 异体字读音等价;phase2 MMS 三句滑窗 + VAD 尾校验产出行/字级时间\n- 四模型本地部署(SongFormer/Qwen3-ASR-1.7B/mms-fa/HTDemucs,权重不进 git,\n manifest SHA256 + check:model-assets 门禁 + smoke 证据)\n- Web 复核工作台 /review:载入/一键执行/重跑、试听/连续播放/逐字对比、问题行过滤、\n 语言徽标、错配警示;run_song 一键编排(缺歌声自动分离,产物落原目录复用)\n- pytest 48/48;真歌验证:晴天×3路径、后来、日语/粤语曲目(精度未做人工金标验收)\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics/commit/3f76d2e5e9efe72c7ebe9d9faa2f335ccd2dbf4f","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-27T23:15:09-07:00","added":[".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",".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/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/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/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.deadletter.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/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/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/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/api/review/audio/route.ts","apps/web/src/app/api/review/browse/route.ts","apps/web/src/app/api/review/route.ts","apps/web/src/app/api/review/run/route.ts","apps/web/src/app/globals.css","apps/web/src/app/layout.tsx","apps/web/src/app/page.tsx","apps/web/src/app/review/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/domain/structure-lyrics-phase1-blueprint.md","docs/governance-experience.md","docs/migration-notes.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","models/model-assets.v1.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/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/tsconfig.json","pnpm-lock.yaml","pnpm-workspace.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/model-assets.latest.json","reports/model-evidence/htdemucs-smoke.latest.json","reports/model-evidence/mms-fa-smoke.latest.json","reports/model-evidence/qwen3-asr-smoke.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-contract-consumers.mjs","scripts/check-docs-truth.mjs","scripts/check-dual-backend-parity.mjs","scripts/check-governance-docs.mjs","scripts/check-migrations.mjs","scripts/check-model-assets.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/governance-report.mjs","services/structure_lyrics/README.md","services/structure_lyrics/examples/demo_song/asr.json","services/structure_lyrics/examples/demo_song/lyrics.txt","services/structure_lyrics/examples/demo_song/structure.json","services/structure_lyrics/phase1/__init__.py","services/structure_lyrics/phase1/align.py","services/structure_lyrics/phase1/asr.py","services/structure_lyrics/phase1/audio.py","services/structure_lyrics/phase1/cli.py","services/structure_lyrics/phase1/lyrics.py","services/structure_lyrics/phase1/models.py","services/structure_lyrics/phase1/pipeline.py","services/structure_lyrics/phase1/similarity.py","services/structure_lyrics/phase1/structure.py","services/structure_lyrics/phase1/textnorm.py","services/structure_lyrics/phase2/__init__.py","services/structure_lyrics/phase2/audio_io.py","services/structure_lyrics/phase2/backend.py","services/structure_lyrics/phase2/cli.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_align.py","services/structure_lyrics/tests/test_language.py","services/structure_lyrics/tests/test_multilang.py","services/structure_lyrics/tests/test_phase2.py","tsconfig.base.json","turbo.json","workers/demucs/requirements_demucs.txt","workers/demucs/run_separate.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/README.md","workers/qwen3-asr/requirements_qwen3_asr.txt","workers/qwen3-asr/run_qwen3_asr.py","workers/qwen3-asr/testdata/asr_zh.txt","workers/qwen3-asr/testdata/asr_zh.wav","workers/qwen3-asr/vendor/qwen3_asr/__init__.py","workers/qwen3-asr/vendor/qwen3_asr/align/__init__.py","workers/qwen3-asr/vendor/qwen3_asr/align/boundary.py","workers/qwen3-asr/vendor/qwen3_asr/align/chars.py","workers/qwen3-asr/vendor/qwen3_asr/align/monotonic.py","workers/qwen3-asr/vendor/qwen3_asr/align/observation.py","workers/qwen3-asr/vendor/qwen3_asr/align/pcenter.py","workers/qwen3-asr/vendor/qwen3_asr/align/pipeline.py","workers/qwen3-asr/vendor/qwen3_asr/align/progress.py","workers/qwen3-asr/vendor/qwen3_asr/align/tail.py","workers/qwen3-asr/vendor/qwen3_asr/align/text.py","workers/qwen3-asr/vendor/qwen3_asr/align/windows.py","workers/qwen3-asr/vendor/qwen3_asr/align/wordless.py","workers/qwen3-asr/vendor/qwen3_asr/align_cli.py","workers/qwen3-asr/vendor/qwen3_asr/audio.py","workers/qwen3-asr/vendor/qwen3_asr/cache.py","workers/qwen3-asr/vendor/qwen3_asr/cli.py","workers/qwen3-asr/vendor/qwen3_asr/config.py","workers/qwen3-asr/vendor/qwen3_asr/diagnostics_cli.py","workers/qwen3-asr/vendor/qwen3_asr/engine.py","workers/qwen3-asr/vendor/qwen3_asr/forced_aligner.py","workers/qwen3-asr/vendor/qwen3_asr/service.py","workers/qwen3-asr/vendor/qwen3_asr/stream.py","workers/qwen3-asr/vendor/qwen3_asr/stream_cli.py","workers/qwen3-asr/vendor/qwen3_asr/structure.py","workers/qwen3-asr/vendor/qwen3_asr/textutil.py","workers/qwen3-asr/vendor/qwen3_asr/unowned_voice_review.py","workers/qwen3-asr/vendor/qwen3_asr/unowned_voice_review_cli.py","workers/qwen3-asr/vendor/qwen3_asr/unowned_voice_score.py","workers/qwen3-asr/vendor/qwen3_asr/unowned_voice_score_cli.py","workers/qwen3-asr/vendor/qwen3_asr/voice_diagnostics.py","workers/structure/README.md","workers/structure/requirements_structure.txt","workers/structure/run_structure.py","workers/structure/vendor/wav2vec2-conformer-rope-large-960h-ft.config.json"],"removed":[],"modified":[]},"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":27,"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
|
3
|
5
|
1785219618
|
1785219660
|
0
|
1785219617
|
1785219660
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23462
|
chore: refresh quotation acceptance evidence
|
72
|
5
|
governance.yml
|
1
|
5
|
0
|
refs/heads/main
|
5e1d3d6748f60f625f7cd20b8a5defc957497e81
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"0000000000000000000000000000000000000000","after":"5e1d3d6748f60f625f7cd20b8a5defc957497e81","compare_url":"https://gitea.g-hi.com/","commits":[{"id":"5e1d3d6748f60f625f7cd20b8a5defc957497e81","message":"chore: refresh quotation acceptance evidence\n","url":"https://gitea.g-hi.com/luoanwu/juhai-quotation-system/commit/5e1d3d6748f60f625f7cd20b8a5defc957497e81","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-30T12:53:13-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-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json"]},{"id":"ce6add1f419d50f150baffe78acbc6adc81b0ea3","message":"feat: implement quotation core workflow\n","url":"https://gitea.g-hi.com/luoanwu/juhai-quotation-system/commit/ce6add1f419d50f150baffe78acbc6adc81b0ea3","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-30T12:52:01-07:00","added":["apps/api-fastify/prisma/migrations/20260730120000_quotation_core/migration.sql","apps/api-fastify/src/modules/customers/customers.service.ts","apps/api-fastify/src/modules/products/products.service.ts","apps/api-fastify/src/modules/quotations/quotations.service.ts","apps/api-fastify/src/routes/customers.ts","apps/api-fastify/src/routes/products.ts","apps/api-fastify/src/routes/quotations.ts","apps/api-nestjs/prisma/migrations/20260730120000_quotation_core/migration.sql","apps/api-nestjs/src/customers/customers.controller.ts","apps/api-nestjs/src/customers/customers.module.ts","apps/api-nestjs/src/customers/customers.service.ts","apps/api-nestjs/src/products/products.controller.ts","apps/api-nestjs/src/products/products.module.ts","apps/api-nestjs/src/products/products.service.ts","apps/api-nestjs/src/quotations/quotations.controller.ts","apps/api-nestjs/src/quotations/quotations.module.ts","apps/api-nestjs/src/quotations/quotations.service.ts","apps/web/src/app/quote/[accessToken]/page.tsx","apps/web/src/app/quote/[accessToken]/print/page.tsx","apps/web/src/features/customers/api/customers-api.ts","apps/web/src/features/customers/components/CustomerLibrary.tsx","apps/web/src/features/customers/hooks/use-customers.ts","apps/web/src/features/products/api/products-api.ts","apps/web/src/features/products/components/ProductLibrary.tsx","apps/web/src/features/products/hooks/use-products.ts","apps/web/src/features/quotations/api/quotations-api.ts","apps/web/src/features/quotations/components/PublicQuotationView.tsx","apps/web/src/features/quotations/components/QuotationWorkbench.tsx","apps/web/src/features/quotations/hooks/use-quotations.ts","docs/domain/quotation-blueprint.md","packages/contracts/src/quotation.ts"],"removed":[],"modified":["CLAUDE.md","README.md","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/app.ts","apps/api-fastify/src/modules/tenant.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/common/tenant.decorator.ts","apps/api-nestjs/test/http.acceptance.test.ts","apps/web/e2e/acceptance.spec.ts","apps/web/package.json","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/utils.ts","docs/domain-glossary.md","docs/domain/owner-matrix.md","packages/contracts/src/contracts.test.ts","packages/contracts/src/index.ts","packages/contracts/src/realtime.ts","pnpm-lock.yaml","reports/baseline.json","scripts/check-ui-acceptance.mjs"]},{"id":"4285699248e5f7d702171ee66f7ea2d5e57a4aed","message":"chore: refresh local acceptance reports\n","url":"https://gitea.g-hi.com/luoanwu/juhai-quotation-system/commit/4285699248e5f7d702171ee66f7ea2d5e57a4aed","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-30T12:22:09-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-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json"]},{"id":"37e3a10e3f530299526a984beacd597b13ab098a","message":"chore: refresh migration evidence\n","url":"https://gitea.g-hi.com/luoanwu/juhai-quotation-system/commit/37e3a10e3f530299526a984beacd597b13ab098a","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-30T07:55:08-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"]},{"id":"e6336ca3f8154422a56269945d3f39343dd952fa","message":"chore: migrate base framework\n","url":"https://gitea.g-hi.com/luoanwu/juhai-quotation-system/commit/e6336ca3f8154422a56269945d3f39343dd952fa","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-30T07:42:32-07:00","added":[".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",".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/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/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/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.deadletter.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/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/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/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/governance-experience.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/tsconfig.json","pnpm-lock.yaml","pnpm-workspace.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-contract-consumers.mjs","scripts/check-docs-truth.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/governance-report.mjs","scripts/lib/report-provenance.mjs","tsconfig.base.json","turbo.json"],"removed":[],"modified":[]}],"total_commits":0,"head_commit":{"id":"5e1d3d6748f60f625f7cd20b8a5defc957497e81","message":"chore: refresh quotation acceptance evidence\n","url":"https://gitea.g-hi.com/luoanwu/juhai-quotation-system/commit/5e1d3d6748f60f625f7cd20b8a5defc957497e81","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-30T12:53:13-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-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":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":27,"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":1,"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-07-31T03:57: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
|
3
|
5
|
1785441431
|
1785441505
|
0
|
1785441430
|
1785441505
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23495
|
chore(reports): 刷新治理证据,绑定提交 5acf362——容器化落地后三级重跑
|
74
|
5
|
governance.yml
|
9
|
5
|
0
|
refs/heads/main
|
b33f650552dbc4adad6df5ee670b6d9eba8eb125
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"15248a4a041b4e0b1716d65ce7327315a8d39176","after":"b33f650552dbc4adad6df5ee670b6d9eba8eb125","compare_url":"https://gitea.g-hi.com/luoanwu/haimate/compare/15248a4a041b4e0b1716d65ce7327315a8d39176...b33f650552dbc4adad6df5ee670b6d9eba8eb125","commits":[{"id":"b33f650552dbc4adad6df5ee670b6d9eba8eb125","message":"chore(reports): 刷新治理证据,绑定提交 5acf362——容器化落地后三级重跑\n\n三份报告 provenance 均为 gitSha=5acf362 + worktreeDirty=false。\n\n- 静态 pnpm check 00:32Z 16 道门禁 + 棘轮 + lint + typecheck 全绿\n- 真实 DB check:runtime 00:33Z status=passed, 380 tests / 0 failures (floor 380)\n- 浏览器 check:ui 00:34Z status=passed, 14 用例 / 0 unexpected (floor 14)\n\n本轮为什么必须重跑而不能沿用上一份(fe9a6ae)绿盘:\nCI 修复 b673ff8 改动了双端 security.http.test.ts 与 scripts/check-runtime-acceptance.mjs\n——被测代码与测试运行器都变了,旧 runtime 证据随即失效。已把这条判据写进 CLAUDE.md:\n凡 apps/*/test、packages/contracts/src、apps/*/src、prisma 或验收 runner 自身发生改动,\n对应等级的证据一律作废重跑,不得沿用。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/haimate/commit/b33f650552dbc4adad6df5ee670b6d9eba8eb125","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-17T17:35:11-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-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/security-boundary.latest.json","reports/tailwind-tokens.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json"]},{"id":"5acf36269dc9ac57017fb9d77c43ac28fca73395","message":"feat(ops): 容器化全栈——三份应用 Dockerfile + compose 编排,G20 部分推进\n\nG20 此前记为\"生产运维平面为空:无应用 Dockerfile / 生产 compose 或编排\"。\n本次把容器化这一段做实并实测跑通,其余运维项仍 OPEN。\n\n新增\n- docker/Dockerfile.api-{fastify,nestjs} / .web:node:20-slim + openssl 基座\n (Prisma engine 在 musl 上需另一套二进制目标,alpine 极易出现\"本机能跑、容器里\n engine 找不到\");多阶段构建,依赖层只拷 manifest 以命中缓存\n- compose.yml:PG/Redis + 双后端各自的迁移 job + 双后端 + 前端;\n healthcheck 打 /api/health(真探 DB+Redis,非探活);端口用 +100 段,\n 可与本机 dev 栈同时运行\n- .dockerignore:仓库 1.7G 中 node_modules 占 1.5G,不排除会撑爆构建上下文;\n 宿主机依赖含平台相关二进制,拷进 linux 镜像必然是错的\n\n两个构建期参数(写错不报错、只静默坏掉,已写进 Dockerfile 顶部)\n- API_PROXY_TARGET:next rewrites 在 next build 时序列化进 routes-manifest,\n 是构建参数不是运行时变量;取值走 compose 内网服务名\n- NEXT_PUBLIC_WS_URL:NEXT_PUBLIC_* 构建期内联进客户端 bundle,而 WebSocket 由\n 浏览器直连(rewrites 只代理 /api 与 /sse),取值必须是宿主机可达地址\n 两者取值域相反,搞混的症状是\"页面能开、实时永远未连接\"\n\n迁移刻意拆成两个 job 不合并:双后端各有自己的 prisma/migrations,\"跑一个等于跑两个\"\n是 check:schema / check:migrations 保证的结论,不是编排可以预设的前提。\n实测 migrate-nestjs 独立复核报\"6 个迁移、无待应用\",一致性是被验证而非被假设的。\n\n本地实测证据\n- 五服务全部 healthy;双端容器内 /api/health 均 database/redis: up\n- 租户边界在容器栈同样生效:带租户 200 / 不带 400\n- 浏览器写入后 user.created 经 outbox→Redis→WS 落到 EventFeed(含 tenantId/eventId)\n- web 容器 /api/health 返回 service: fastify,证明内网代理参数正确\n- 容器栈与本机 dev 栈同时运行、数据互不可见\n\n仍 OPEN(CLAUDE.md G20 已按实分栏,不得据此宣称可上生产)\n镜像各约 2.1GB 未裁剪(pnpm 符号链接虚拟 store 与 node_modules/.prisma 耦合,\nprod-only 裁剪易做出\"能构建但运行时缺 engine\"的镜像,首版优先保证真能跑);\n安全模式仍 demo 且 DB 口令明文;无灰度回滚 Runbook / OTel / 限流熔断 / 审计日志 /\n备份恢复演练 / SLO 告警 / 镜像仓库与版本策略;未在任何非本机环境部署过。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/haimate/commit/5acf36269dc9ac57017fb9d77c43ac28fca73395","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-17T17:31:42-07:00","added":[".dockerignore","compose.yml","docker/Dockerfile.api-fastify","docker/Dockerfile.api-nestjs","docker/Dockerfile.web"],"removed":[],"modified":["CLAUDE.md"]},{"id":"b0b189c813b46ab3b6903cc4a13cd1ce1ad34d81","message":"fix(dev): launch.json 指向本仓专属库,并补齐 demo 模式与 worker 开关\n\n启动本地开发栈时发现三处会让人\"跑起来了但其实是坏的\"的问题:\n\n1. DATABASE_URL 原先指向 base_framework_dev——实测该库里同时装着另一个项目的\n 8 个迁移(material_factory / brand_kit_profile / voiceprint_tasks / voice_cloning 等),\n 且缺本仓最新的 20260817090000_add_crew_engagement。按原配置启动会把本仓迁移\n 打进别的项目的库,正是 CLAUDE.md G15 记录的\"本机 PG:55432 被多项目共用\"事故模式。\n 改为本仓专属库 base_framework_haimate_dev(已建库并应用 6 个迁移),\n 对 base_framework_dev 未执行任何写操作。\n\n2. 缺 HAIMATE_SECURITY_MODE=demo——非测试环境默认 signed,缺 JWT 配置时 fail closed,\n 不显式开 demo 则本地所有请求 401(ADR-0011)。\n\n3. 缺 PLATFORM_WORKERS_ENABLED=1——不开则 KB 投影 / Trust 投影 / 审批过期等 worker\n 不运行,页面看起来能用但异步链路是死的。\n\n顺带记录一处认知缺口:G15 的机器防线只装在验收链上(check:runtime / check:ui 强制\n显式 URL + 库名前缀守卫),而开发启动路径没有守卫——launch.json 是手写配置,没人检查\n它指向哪。于是\"验收比开发更安全\",而开发才是每天都在跑的那条路径。已在文件内写明原因,\n机器化守卫列为后续项。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/haimate/commit/b0b189c813b46ab3b6903cc4a13cd1ce1ad34d81","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-17T17:31:16-07:00","added":[],"removed":[],"modified":[".claude/launch.json"]}],"total_commits":0,"head_commit":{"id":"b33f650552dbc4adad6df5ee670b6d9eba8eb125","message":"chore(reports): 刷新治理证据,绑定提交 5acf362——容器化落地后三级重跑\n\n三份报告 provenance 均为 gitSha=5acf362 + worktreeDirty=false。\n\n- 静态 pnpm check 00:32Z 16 道门禁 + 棘轮 + lint + typecheck 全绿\n- 真实 DB check:runtime 00:33Z status=passed, 380 tests / 0 failures (floor 380)\n- 浏览器 check:ui 00:34Z status=passed, 14 用例 / 0 unexpected (floor 14)\n\n本轮为什么必须重跑而不能沿用上一份(fe9a6ae)绿盘:\nCI 修复 b673ff8 改动了双端 security.http.test.ts 与 scripts/check-runtime-acceptance.mjs\n——被测代码与测试运行器都变了,旧 runtime 证据随即失效。已把这条判据写进 CLAUDE.md:\n凡 apps/*/test、packages/contracts/src、apps/*/src、prisma 或验收 runner 自身发生改动,\n对应等级的证据一律作废重跑,不得沿用。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/haimate/commit/b33f650552dbc4adad6df5ee670b6d9eba8eb125","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-17T17:35:11-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-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/security-boundary.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":5719,"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:02: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
|
3
|
5
|
1787013327
|
1787013419
|
0
|
1787013326
|
1787013419
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23510
|
merge: 汇合远端治理修复轮(PR #1/#2/#3,e4b6a5e..c0ed754)与本地 merge: 汇合远端治理修复轮(PR #1/#2/#3,e4b6a5e..c0ed754)与本地 C45–C68 大波次...
|
76
|
5
|
governance.yml
|
11
|
5
|
0
|
refs/heads/main
|
55b9c2a0af78b6998bac3614dedc7187e37057ea
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"c0ed7540c137f2a6828d24503a4c396156996f33","after":"55b9c2a0af78b6998bac3614dedc7187e37057ea","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/c0ed7540c137f2a6828d24503a4c396156996f33...55b9c2a0af78b6998bac3614dedc7187e37057ea","commits":[{"id":"55b9c2a0af78b6998bac3614dedc7187e37057ea","message":"merge: 汇合远端治理修复轮(PR #1/#2/#3,e4b6a5e..c0ed754)与本地 C45–C68 大波次\n\n冲突决议(24 文件):\n- reports/baseline:取本地 08-22 棘轮(458 tests / 66 files / 456 cases / 19×2 UI,为远端严格超集)\n- jobs.processor / work.module / queue.ts(fastify):取本地 C26 JobIntent 同事务链(远端 commit 后 queue.add + defaultJobOptions 兜底已被结构性取代;嫁接远端 Redis db NaN 守卫到 Fastify 侧保持双后端对等)\n- roles.service ×2:取本地 C42 审计事务版 + 嫁接远端 RoleAssignmentDto 返回类型接线(PR #3 拍板资产)\n- page.tsx:取本地 C53 会话身份(auth-identity testid,Playwright 依赖)\n- check-ui-acceptance:本地 OIDC 编排 + 远端 F8 注释并集\n- CLAUDE.md:本地 C45–C68 动态区为基底,嫁接远端 F8 行、五层 CI 假红叙事、结果裁决角色闸(G8 ⑫)、own-tests git-tracked 口径注记,快照更新为两远端对齐 c0ed754(run 32380591807 绿)\n\n编号撞号收口:两条时间线独立分配了 C25/C26/C1——远端线三个战役重编号为 C69(runner 自含 contracts 构建 + F8)/ C70(地板采集只认 git 已跟踪)/ C71(队列双注册策略显式化),经验库标题、脚本注释、测试注释同步改引;本地 C25(迟到成功)/C26(JobIntent)/C1(check-naming)编号不变。\n\n合并树证据:静态 pnpm check 全绿(Node 22,本地 dirty 工作区 2026-08-22);双后端 UI 聚合 38/38 绿(伙伴会话实跑,指纹绑定本合并内容)。合并提交自身的远端 CI 以 headSha 定位的 run 为准。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/55b9c2a0af78b6998bac3614dedc7187e37057ea","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-22T08:10:56-07:00","added":[],"removed":["apps/api-fastify/pnpm-lock.yaml","apps/api-nestjs/pnpm-lock.yaml","apps/web/pnpm-lock.yaml"],"modified":["CLAUDE.md","apps/api-fastify/.env.example","apps/api-fastify/src/modules/learning.service.ts","apps/api-fastify/src/modules/roles.service.ts","apps/api-fastify/src/modules/triggers.service.ts","apps/api-fastify/src/routes/health.ts","apps/api-fastify/src/routes/outcomes.ts","apps/api-fastify/src/routes/sse.ts","apps/api-fastify/test/auth.roles.acceptance.test.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-fastify/test/outcomes.integration.test.ts","apps/api-nestjs/.env.example","apps/api-nestjs/src/app.module.ts","apps/api-nestjs/src/learning/learning.service.ts","apps/api-nestjs/src/outcomes/outcomes.controller.ts","apps/api-nestjs/src/outcomes/outcomes.module.ts","apps/api-nestjs/src/roles/roles.service.ts","apps/api-nestjs/src/triggers/trigger-engine.service.ts","apps/api-nestjs/test/auth.roles.acceptance.test.ts","apps/api-nestjs/test/http.acceptance.test.ts","apps/api-nestjs/test/outcomes.integration.test.ts","apps/web/src/app/layout.tsx","apps/web/src/store/useAppStore.ts","docs/README.md","docs/adr/README.md","docs/governance-experience.md","docs/migration-playbook.md","packages/contracts/package.json","packages/contracts/src/contracts.test.ts","packages/contracts/src/index.ts","packages/contracts/src/job.ts","packages/contracts/src/learning.ts","packages/contracts/src/outcome.ts","packages/contracts/src/realtime-command.ts","packages/contracts/src/tenant.ts","packages/contracts/tsconfig.json","scripts/check-contract-consumers.mjs","scripts/check-fork-readiness.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-ui-acceptance.mjs","scripts/governance-report.mjs","turbo.json"]},{"id":"f79d0b0b172086ad5ae0954bd2f27a4e640398a1","message":"feat(security)+feat(ops)+feat(mobile): 生产安全与运维深水区大波次——权限/OIDC/RLS/凭据隔离/追踪/韧性/容量/移动端双平台\n\n- 权限与身份:C52 PermissionAssignment 细粒度权限(ALLOW/DENY 覆盖 + 迁移 CHECK)+ C53 Web OIDC PKCE 真实登录态(mock IdP + BFF code exchange + 会话复核)+ C51 生产启动 fail-closed(check:auth-startup)\n- 数据库纵深:C54 22 租户表 FORCE RLS 双策略与 ALS Prisma bridge + C55/C56 migration/API/dispatcher 三凭据分离、独立 dispatcher 入口(check:db-credentials / check:rls)\n- 可观测与韧性:C57 OTLP/W3C 四进程分布式追踪(packages/observability tracing + otel-collector/tempo 参考编排)+ C58/C63/C64/C65 依赖断链/半开黑洞/超时延迟/池饱和 14 fault 恢复(check:dependency-resilience)\n- 容量包络:C61 双 API 真实依赖探测 480 次(check:capacity)+ C66 双后端业务写链 40 主链持久积压无损排空(check:write-capacity)\n- 多实例与 Redis:C49 四 OS 进程真实竞争领取(check:multi-instance)+ C50 requirepass/非零 DB live 认证链(check:redis-auth)\n- 数字员工体验:C46 Actor 入职状态机与六步配置 + C45 health 单源 + C47 SSE 浏览器验收 + 工作台响应式设计收口(design-qa 验收记录 + PageMetricStrip + 头像资产)\n- 移动端:C59/C60 Capacitor 8 Android/iOS 双平台受版本控制工程 + 静态导出 runner(check:mobile)+ Android debug APK/emulator 验收 + 移动 runbook\n- 治理回灌:CLAUDE.md/AGENTS.md 动态区 C45–C67 战役索引、baseline 棘轮(458 tests / 127 行为对比点 / 19×2 UI 用例)、全量 reports 证据刷新\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/f79d0b0b172086ad5ae0954bd2f27a4e640398a1","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-22T07:42:56-07:00","added":["apps/api-fastify/prisma/migrations/20260826000000_actor_lifecycle/migration.sql","apps/api-fastify/prisma/migrations/20260827000000_permission_assignments/migration.sql","apps/api-fastify/prisma/migrations/20260828000000_tenant_rls/migration.sql","apps/api-fastify/src/dispatcher.ts","apps/api-fastify/src/modules/permissions.service.ts","apps/api-fastify/src/plugins/rls-context.ts","apps/api-fastify/src/plugins/rls-prisma.ts","apps/api-fastify/src/routes/permissions.ts","apps/api-fastify/test/auth.permissions.acceptance.test.ts","apps/api-fastify/test/rls.acceptance.test.ts","apps/api-nestjs/prisma/migrations/20260826000000_actor_lifecycle/migration.sql","apps/api-nestjs/prisma/migrations/20260827000000_permission_assignments/migration.sql","apps/api-nestjs/prisma/migrations/20260828000000_tenant_rls/migration.sql","apps/api-nestjs/src/dispatcher.ts","apps/api-nestjs/src/permissions/permissions.controller.ts","apps/api-nestjs/src/permissions/permissions.module.ts","apps/api-nestjs/src/permissions/permissions.service.ts","apps/api-nestjs/src/prisma/rls-context.ts","apps/api-nestjs/src/prisma/rls-prisma.ts","apps/api-nestjs/test/auth.permissions.acceptance.test.ts","apps/api-nestjs/test/rls.acceptance.test.ts","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/debug/AndroidManifest.xml","apps/web/android/app/src/main/AndroidManifest.xml","apps/web/android/app/src/main/java/com/highpraise/digitalemployeeos/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/public/assets/digital-employees/operations-specialist.png","apps/web/src/app/api/auth/config/route.ts","apps/web/src/app/api/auth/exchange/route.ts","apps/web/src/components/workbench/PageMetricStrip.tsx","apps/web/src/features/actors/api/actors-api.ts","apps/web/src/features/actors/components/DigitalEmployeeOnboarding.tsx","apps/web/src/features/actors/hooks/use-actor-mutations.ts","apps/web/src/features/actors/hooks/use-actors.ts","apps/web/src/features/auth/api/auth-api.ts","apps/web/src/features/auth/components/AuthGate.tsx","apps/web/src/features/auth/lib/oidc.ts","apps/web/src/features/permissions/api/permissions-api.ts","apps/web/src/features/permissions/components/PermissionAssignmentsPanel.tsx","apps/web/src/features/permissions/hooks/use-permissions.ts","apps/web/src/store/useAuthStore.ts","deploy/production/otel-collector.yml","deploy/production/tempo.yml","design-qa.md","docs/operations/mobile-android-runbook.md","packages/contracts/src/actor.test.ts","packages/contracts/src/health.test.ts","packages/contracts/src/health.ts","packages/contracts/src/rls.test.ts","packages/contracts/src/rls.ts","packages/observability/src/http-route.ts","packages/observability/src/tracing.test.ts","packages/observability/src/tracing.ts","reports/auth-startup.latest.json","reports/capacity-envelope.latest.json","reports/db-credential-separation.latest.json","reports/dependency-resilience.latest.json","reports/mobile-android.latest.json","reports/mobile-export.latest.json","reports/multi-instance.latest.json","reports/redis-auth-live.latest.json","reports/rls.latest.json","reports/trace-backend.latest.json","reports/tracing.latest.json","reports/write-capacity.latest.json","scripts/build-mobile-export.mjs","scripts/check-auth-startup.mjs","scripts/check-capacity-envelope.mjs","scripts/check-db-credential-separation.mjs","scripts/check-dependency-resilience.mjs","scripts/check-mobile-export.mjs","scripts/check-multi-instance.mjs","scripts/check-redis-auth-live.mjs","scripts/check-rls.mjs","scripts/check-trace-backend.mjs","scripts/check-tracing.mjs","scripts/check-write-capacity.mjs","scripts/lib/db-runtime-role.mjs","scripts/mock-oidc-idp.mjs","scripts/provision-runtime-role.mjs"],"removed":[],"modified":[".github/workflows/governance.yml","CLAUDE.md","README.md","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/app.ts","apps/api-fastify/src/modules/actors.ts","apps/api-fastify/src/modules/tenant.ts","apps/api-fastify/src/modules/work/runtimes.service.ts","apps/api-fastify/src/modules/work/tasks.service.ts","apps/api-fastify/src/plugins/job-intent-dispatcher.ts","apps/api-fastify/src/plugins/operations.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/trigger-engine.ts","apps/api-fastify/src/routes/actors.ts","apps/api-fastify/src/routes/health.ts","apps/api-fastify/src/routes/jobs.ts","apps/api-fastify/src/routes/realtime-stats.ts","apps/api-fastify/src/routes/roles.ts","apps/api-fastify/src/routes/sse.ts","apps/api-fastify/src/routes/users.ts","apps/api-fastify/src/routes/work.ts","apps/api-fastify/src/server.ts","apps/api-fastify/src/types.ts","apps/api-fastify/test/actor-events.integration.test.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-fastify/test/job-intent.dispatcher.test.ts","apps/api-fastify/test/outbox.deadletter.test.ts","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/scripts/behavior-parity-snapshot.mjs","apps/api-nestjs/src/actors/actors.controller.ts","apps/api-nestjs/src/actors/actors.service.ts","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.module.ts","apps/api-nestjs/src/events/outbox-dispatcher.service.ts","apps/api-nestjs/src/events/realtime-stats.controller.ts","apps/api-nestjs/src/health/health.controller.ts","apps/api-nestjs/src/main.ts","apps/api-nestjs/src/operations/operations.module.ts","apps/api-nestjs/src/prisma/prisma.service.ts","apps/api-nestjs/src/queue/job-intent-dispatcher.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/roles/roles.controller.ts","apps/api-nestjs/src/roles/roles.module.ts","apps/api-nestjs/src/triggers/trigger-engine.service.ts","apps/api-nestjs/src/users/users.controller.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/actor-events.integration.test.ts","apps/api-nestjs/test/http.acceptance.test.ts","apps/api-nestjs/test/job-intent.dispatcher.test.ts","apps/api-nestjs/test/outbox.deadletter.test.ts","apps/web/e2e/acceptance.spec.ts","apps/web/eslint.config.mjs","apps/web/next.config.ts","apps/web/package.json","apps/web/src/app/page.tsx","apps/web/src/components/ProjectsPanel.tsx","apps/web/src/components/RoleAssignmentsPanel.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/TaskDetail.tsx","apps/web/src/hooks/useRealtime.ts","apps/web/src/lib/api.ts","apps/web/src/lib/state-theme.ts","apps/web/src/lib/types.ts","apps/web/src/store/realtime.ts","deploy/production/.env.production.example","deploy/production/Dockerfile","deploy/production/alerts.yml","deploy/production/compose.yml","deploy/production/prometheus.yml","docs/adr/0009-dual-backend-governance-parity.md","docs/domain/owner-matrix.md","docs/domain/work-blueprint.md","docs/governance-experience.md","docs/operations/production-runbook.md","docs/standards/database-standard.md","governance.registry.json","governance.registry.schema.json","output/pdf/任务驱动的数字员工执行闭环.pdf","package.json","packages/contracts/src/actor.ts","packages/contracts/src/contracts.test.ts","packages/contracts/src/index.ts","packages/contracts/src/job.ts","packages/contracts/src/realtime.ts","packages/contracts/src/tenant.ts","packages/contracts/src/user.ts","packages/observability/package.json","packages/observability/src/index.test.ts","packages/observability/src/index.ts","pnpm-lock.yaml","reports/agent-adapters.latest.json","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-behavior.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/operations.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/ui-fastify-acceptance.latest.json","reports/ui-nestjs-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-dual-backend-behavior.mjs","scripts/check-dual-backend-parity.mjs","scripts/check-fork-readiness.mjs","scripts/check-operations.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-ui-acceptance.mjs","scripts/governance-report.mjs","scripts/lib/scan-ignore.mjs","tmp/pdfs/generate_task_loop_pdf.py"]},{"id":"4f2e17b9c3aa4745c5acebadabdd979e0a7ee7f4","message":"Harden governance runtime and acceptance coverage\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/4f2e17b9c3aa4745c5acebadabdd979e0a7ee7f4","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-21T08:36:22-07:00","added":[".dockerignore","apps/api-fastify/prisma/migrations/20260825030000_skill_activation/migration.sql","apps/api-fastify/src/plugins/operations.ts","apps/api-nestjs/prisma/migrations/20260825030000_skill_activation/migration.sql","apps/api-nestjs/scripts/behavior-parity-snapshot.mjs","apps/api-nestjs/src/common/api-http-exception.filter.ts","apps/api-nestjs/src/operations/operations.module.ts","apps/web/src/features/skills/api/skills-api.ts","apps/web/src/features/skills/components/SkillManagementPanel.tsx","apps/web/src/features/skills/hooks/use-skills.ts","deploy/production/.env.production.example","deploy/production/Dockerfile","deploy/production/alertmanager.yml","deploy/production/alerts.yml","deploy/production/compose.yml","deploy/production/nginx.conf.template","deploy/production/prometheus.yml","docs/operations/production-runbook.md","packages/observability/package.json","packages/observability/src/index.test.ts","packages/observability/src/index.ts","packages/observability/tsconfig.json","packages/skill-runtime/package.json","packages/skill-runtime/src/implementations/analysis-v1.ts","packages/skill-runtime/src/implementations/customer-research-v1.ts","packages/skill-runtime/src/implementations/knowledge-synthesis-v1-1.ts","packages/skill-runtime/src/implementations/knowledge-synthesis-v1-2.ts","packages/skill-runtime/src/implementations/reporting-v1.ts","packages/skill-runtime/src/implementations/reporting-v2.ts","packages/skill-runtime/src/index.test.ts","packages/skill-runtime/src/index.ts","packages/skill-runtime/src/prompt.ts","packages/skill-runtime/src/types.ts","packages/skill-runtime/tsconfig.json","reports/dual-backend-behavior.latest.json","reports/operations.latest.json","reports/ui-fastify-acceptance.latest.json","reports/ui-nestjs-acceptance.latest.json","scripts/check-dual-backend-behavior.mjs","scripts/check-operations.mjs","scripts/check-ui-all.mjs","scripts/ops/backup.sh","scripts/ops/paging-relay.mjs","scripts/ops/restore.sh","scripts/replay-dead-letter.mjs","tmp/deploy-probe-nestjs/.env.example","tmp/deploy-probe-nestjs/docker-compose.yml","tmp/deploy-probe-nestjs/nest-cli.json","tmp/deploy-probe-nestjs/package.json","tmp/deploy-probe-nestjs/prisma/migrations/20260818000000_init/migration.sql","tmp/deploy-probe-nestjs/prisma/migrations/20260819000000_outbox_replay_cursor/migration.sql","tmp/deploy-probe-nestjs/prisma/migrations/20260820000000_work_slice/migration.sql","tmp/deploy-probe-nestjs/prisma/migrations/20260821000000_learning_slice/migration.sql","tmp/deploy-probe-nestjs/prisma/migrations/20260822000000_trigger_slice/migration.sql","tmp/deploy-probe-nestjs/prisma/migrations/20260823000000_outcome_slice/migration.sql","tmp/deploy-probe-nestjs/prisma/migrations/20260824000000_attribution_slice/migration.sql","tmp/deploy-probe-nestjs/prisma/migrations/20260825000000_role_assignment/migration.sql","tmp/deploy-probe-nestjs/prisma/migrations/20260825010000_workgraph_slice/migration.sql","tmp/deploy-probe-nestjs/prisma/migrations/20260825020000_job_intent/migration.sql","tmp/deploy-probe-nestjs/prisma/migrations/20260825030000_skill_activation/migration.sql","tmp/deploy-probe-nestjs/prisma/migrations/migration_lock.toml","tmp/deploy-probe-nestjs/prisma/schema.prisma","tmp/deploy-probe-nestjs/prisma/seed.ts","tmp/deploy-probe-nestjs/scripts/behavior-parity-snapshot.mjs","tmp/deploy-probe-nestjs/src/actors/actor-events.service.ts","tmp/deploy-probe-nestjs/src/actors/actors.controller.ts","tmp/deploy-probe-nestjs/src/actors/actors.module.ts","tmp/deploy-probe-nestjs/src/actors/actors.service.ts","tmp/deploy-probe-nestjs/src/app.module.ts","tmp/deploy-probe-nestjs/src/common/api-http-exception.filter.ts","tmp/deploy-probe-nestjs/src/common/envelope.ts","tmp/deploy-probe-nestjs/src/common/tenant.decorator.ts","tmp/deploy-probe-nestjs/src/common/zod-validation.pipe.ts","tmp/deploy-probe-nestjs/src/create-app.ts","tmp/deploy-probe-nestjs/src/events/connection-registry.service.ts","tmp/deploy-probe-nestjs/src/events/event-bus.service.ts","tmp/deploy-probe-nestjs/src/events/events.gateway.ts","tmp/deploy-probe-nestjs/src/events/events.module.ts","tmp/deploy-probe-nestjs/src/events/fanout.service.ts","tmp/deploy-probe-nestjs/src/events/outbox-dispatcher.service.ts","tmp/deploy-probe-nestjs/src/events/realtime-stats.controller.ts","tmp/deploy-probe-nestjs/src/events/replay.service.ts","tmp/deploy-probe-nestjs/src/health/health.controller.ts","tmp/deploy-probe-nestjs/src/health/health.module.ts","tmp/deploy-probe-nestjs/src/learning/learning.module.ts","tmp/deploy-probe-nestjs/src/learning/learning.service.ts","tmp/deploy-probe-nestjs/src/main.ts","tmp/deploy-probe-nestjs/src/outcomes/outcomes.controller.ts","tmp/deploy-probe-nestjs/src/outcomes/outcomes.module.ts","tmp/deploy-probe-nestjs/src/outcomes/outcomes.service.ts","tmp/deploy-probe-nestjs/src/prisma/prisma.module.ts","tmp/deploy-probe-nestjs/src/prisma/prisma.service.ts","tmp/deploy-probe-nestjs/src/queue/job-intent-dispatcher.service.ts","tmp/deploy-probe-nestjs/src/queue/jobs.controller.ts","tmp/deploy-probe-nestjs/src/queue/jobs.processor.ts","tmp/deploy-probe-nestjs/src/queue/queue.module.ts","tmp/deploy-probe-nestjs/src/queue/queue.types.ts","tmp/deploy-probe-nestjs/src/redis/redis.module.ts","tmp/deploy-probe-nestjs/src/roles/roles.controller.ts","tmp/deploy-probe-nestjs/src/roles/roles.module.ts","tmp/deploy-probe-nestjs/src/roles/roles.service.ts","tmp/deploy-probe-nestjs/src/sse/sse.controller.ts","tmp/deploy-probe-nestjs/src/sse/sse.module.ts","tmp/deploy-probe-nestjs/src/statemachine/index.ts","tmp/deploy-probe-nestjs/src/statemachine/statemachine.engine.ts","tmp/deploy-probe-nestjs/src/statemachine/statemachine.types.ts","tmp/deploy-probe-nestjs/src/triggers/trigger-engine.service.ts","tmp/deploy-probe-nestjs/src/triggers/triggers.controller.ts","tmp/deploy-probe-nestjs/src/triggers/triggers.module.ts","tmp/deploy-probe-nestjs/src/triggers/triggers.service.ts","tmp/deploy-probe-nestjs/src/users/users.controller.ts","tmp/deploy-probe-nestjs/src/users/users.module.ts","tmp/deploy-probe-nestjs/src/users/users.service.ts","tmp/deploy-probe-nestjs/src/work/grants.service.ts","tmp/deploy-probe-nestjs/src/work/projects.controller.ts","tmp/deploy-probe-nestjs/src/work/projects.service.ts","tmp/deploy-probe-nestjs/src/work/runtimes.service.ts","tmp/deploy-probe-nestjs/src/work/skills.controller.ts","tmp/deploy-probe-nestjs/src/work/skills.service.ts","tmp/deploy-probe-nestjs/src/work/task-events.service.ts","tmp/deploy-probe-nestjs/src/work/tasks.controller.ts","tmp/deploy-probe-nestjs/src/work/tasks.service.ts","tmp/deploy-probe-nestjs/src/work/work.module.ts","tmp/deploy-probe-nestjs/test/actor-events.integration.test.ts","tmp/deploy-probe-nestjs/test/auth.acceptance.test.ts","tmp/deploy-probe-nestjs/test/auth.jwks.acceptance.test.ts","tmp/deploy-probe-nestjs/test/auth.roles.acceptance.test.ts","tmp/deploy-probe-nestjs/test/auth.rs256.acceptance.test.ts","tmp/deploy-probe-nestjs/test/dead-letters.integration.test.ts","tmp/deploy-probe-nestjs/test/http.acceptance.test.ts","tmp/deploy-probe-nestjs/test/job-intent.dispatcher.test.ts","tmp/deploy-probe-nestjs/test/learning.concurrency.test.ts","tmp/deploy-probe-nestjs/test/llm.acceptance.test.ts","tmp/deploy-probe-nestjs/test/llm.anthropic.acceptance.test.ts","tmp/deploy-probe-nestjs/test/outbox.concurrency.test.ts","tmp/deploy-probe-nestjs/test/outbox.deadletter.test.ts","tmp/deploy-probe-nestjs/test/outcomes.integration.test.ts","tmp/deploy-probe-nestjs/test/realtime.command.test.ts","tmp/deploy-probe-nestjs/test/realtime.replay.test.ts","tmp/deploy-probe-nestjs/test/realtime.stats.test.ts","tmp/deploy-probe-nestjs/test/realtime.subscription.test.ts","tmp/deploy-probe-nestjs/test/realtime.tenant.test.ts","tmp/deploy-probe-nestjs/test/task-events.integration.test.ts","tmp/deploy-probe-nestjs/test/triggers.integration.test.ts","tmp/deploy-probe-nestjs/test/work.integration.test.ts","tmp/deploy-probe-nestjs/tsconfig.build.json","tmp/deploy-probe-nestjs/tsconfig.json","tmp/deploy-probe-nestjs/vitest.config.ts","tmp/ops-config/.env.production","tmp/ops-config/metrics-token.txt","tmp/pdfs/generate_task_loop_pdf.py","tmp/pdfs/task-loop-qa-v2/page-01.png","tmp/pdfs/task-loop-qa-v2/page-02.png","tmp/pdfs/task-loop-qa-v2/page-03.png","tmp/pdfs/task-loop-qa-v2/page-04.png","tmp/pdfs/task-loop-qa-v2/page-05.png","tmp/pdfs/task-loop-qa-v2/page-06.png","tmp/pdfs/task-loop-qa-v2/page-07.png","tmp/pdfs/task-loop-qa-v2/page-08.png","tmp/pdfs/task-loop-qa-v2/page-09.png","tmp/pdfs/task-loop-qa-v2/page-10.png","tmp/pdfs/task-loop-qa-v2/page-11.png","tmp/pdfs/task-loop-qa-v2/page-12.png","tmp/pdfs/task-loop-qa-v2/page-13.png","tmp/pdfs/task-loop-qa-v2/page-14.png","tmp/pdfs/task-loop-qa-v2/page-15.png","tmp/pdfs/task-loop-qa-v3/contact-sheet.png","tmp/pdfs/task-loop-qa-v3/delivery-01.png","tmp/pdfs/task-loop-qa-v3/delivery-02.png","tmp/pdfs/task-loop-qa-v3/delivery-03.png","tmp/pdfs/task-loop-qa-v3/delivery-04.png","tmp/pdfs/task-loop-qa-v3/delivery-05.png","tmp/pdfs/task-loop-qa-v3/delivery-06.png","tmp/pdfs/task-loop-qa-v3/delivery-07.png","tmp/pdfs/task-loop-qa-v3/delivery-08.png","tmp/pdfs/task-loop-qa-v3/delivery-09.png","tmp/pdfs/task-loop-qa-v3/delivery-10.png","tmp/pdfs/task-loop-qa-v3/delivery-11.png","tmp/pdfs/task-loop-qa-v3/delivery-12.png","tmp/pdfs/task-loop-qa-v3/delivery-13.png","tmp/pdfs/task-loop-qa-v3/delivery-14.png","tmp/pdfs/task-loop-qa-v3/delivery-15.png","tmp/pdfs/task-loop-qa-v3/delivery-contact-sheet.png","tmp/pdfs/task-loop-qa-v3/final-01.png","tmp/pdfs/task-loop-qa-v3/final-02.png","tmp/pdfs/task-loop-qa-v3/final-03.png","tmp/pdfs/task-loop-qa-v3/final-04.png","tmp/pdfs/task-loop-qa-v3/final-05.png","tmp/pdfs/task-loop-qa-v3/final-06.png","tmp/pdfs/task-loop-qa-v3/final-07.png","tmp/pdfs/task-loop-qa-v3/final-08.png","tmp/pdfs/task-loop-qa-v3/final-09.png","tmp/pdfs/task-loop-qa-v3/final-10.png","tmp/pdfs/task-loop-qa-v3/final-11.png","tmp/pdfs/task-loop-qa-v3/final-12.png","tmp/pdfs/task-loop-qa-v3/final-13.png","tmp/pdfs/task-loop-qa-v3/final-14.png","tmp/pdfs/task-loop-qa-v3/final-15.png","tmp/pdfs/task-loop-qa-v3/final-contact-sheet.png","tmp/pdfs/task-loop-qa-v3/final-page-13.png","tmp/pdfs/task-loop-qa-v3/page-01.png","tmp/pdfs/task-loop-qa-v3/page-02.png","tmp/pdfs/task-loop-qa-v3/page-03.png","tmp/pdfs/task-loop-qa-v3/page-04.png","tmp/pdfs/task-loop-qa-v3/page-05.png","tmp/pdfs/task-loop-qa-v3/page-06.png","tmp/pdfs/task-loop-qa-v3/page-07.png","tmp/pdfs/task-loop-qa-v3/page-08.png","tmp/pdfs/task-loop-qa-v3/page-09.png","tmp/pdfs/task-loop-qa-v3/page-10.png","tmp/pdfs/task-loop-qa-v3/page-11.png","tmp/pdfs/task-loop-qa-v3/page-12.png","tmp/pdfs/task-loop-qa-v3/page-13.png","tmp/pdfs/task-loop-qa-v3/page-14.png","tmp/pdfs/task-loop-qa-v3/page-15.png","tmp/pdfs/task-loop-qa/page-01.png","tmp/pdfs/task-loop-qa/page-02.png","tmp/pdfs/task-loop-qa/page-03.png","tmp/pdfs/task-loop-qa/page-04.png","tmp/pdfs/task-loop-qa/page-05.png","tmp/pdfs/task-loop-qa/page-06.png","tmp/pdfs/task-loop-qa/page-07.png","tmp/pdfs/task-loop-qa/page-08.png","tmp/pdfs/task-loop-qa/page-09.png","tmp/pdfs/task-loop-qa/page-10.png","tmp/pdfs/task-loop-qa/page-11.png","tmp/pdfs/task-loop-qa/page-12.png","tmp/pdfs/task-loop-qa/page-13.png"],"removed":[],"modified":[".gitignore","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/modules/learning.service.ts","apps/api-fastify/src/modules/roles.service.ts","apps/api-fastify/src/modules/work/runtimes.service.ts","apps/api-fastify/src/modules/work/skills.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/plugins/trigger-engine.ts","apps/api-fastify/src/routes/realtime-stats.ts","apps/api-fastify/src/routes/roles.ts","apps/api-fastify/src/routes/skills.ts","apps/api-fastify/src/server.ts","apps/api-fastify/src/types.ts","apps/api-fastify/test/auth.roles.acceptance.test.ts","apps/api-fastify/test/dead-letters.integration.test.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-fastify/test/llm.acceptance.test.ts","apps/api-fastify/test/realtime.stats.test.ts","apps/api-fastify/test/work.integration.test.ts","apps/api-nestjs/package.json","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/prisma/seed.ts","apps/api-nestjs/src/app.module.ts","apps/api-nestjs/src/create-app.ts","apps/api-nestjs/src/events/events.module.ts","apps/api-nestjs/src/events/realtime-stats.controller.ts","apps/api-nestjs/src/learning/learning.service.ts","apps/api-nestjs/src/main.ts","apps/api-nestjs/src/queue/jobs.processor.ts","apps/api-nestjs/src/roles/roles.controller.ts","apps/api-nestjs/src/roles/roles.service.ts","apps/api-nestjs/src/triggers/trigger-engine.service.ts","apps/api-nestjs/src/triggers/triggers.service.ts","apps/api-nestjs/src/work/runtimes.service.ts","apps/api-nestjs/src/work/skills.controller.ts","apps/api-nestjs/src/work/skills.service.ts","apps/api-nestjs/test/auth.roles.acceptance.test.ts","apps/api-nestjs/test/dead-letters.integration.test.ts","apps/api-nestjs/test/http.acceptance.test.ts","apps/api-nestjs/test/llm.acceptance.test.ts","apps/api-nestjs/test/realtime.stats.test.ts","apps/api-nestjs/test/work.integration.test.ts","apps/web/e2e/acceptance.spec.ts","apps/web/next.config.ts","apps/web/package.json","apps/web/playwright.config.ts","apps/web/src/components/views/SystemView.tsx","apps/web/src/components/views/TeamView.tsx","apps/web/src/hooks/useRealtime.ts","apps/web/src/lib/api.ts","apps/web/src/lib/state-theme.ts","apps/web/src/lib/types.ts","docs/adr/0009-dual-backend-governance-parity.md","docs/domain-glossary.md","docs/domain/learning-blueprint.md","docs/domain/llm-execution-blueprint.md","docs/domain/owner-matrix.md","docs/domain/work-blueprint.md","docs/governance-experience.md","governance.registry.json","governance.registry.schema.json","output/pdf/任务驱动的数字员工执行闭环.pdf","package.json","packages/contracts/src/contracts.test.ts","packages/contracts/src/learning.test.ts","packages/contracts/src/learning.ts","packages/contracts/src/llm.test.ts","packages/contracts/src/llm.ts","packages/contracts/src/realtime-stats.ts","packages/contracts/src/realtime.ts","packages/contracts/src/skill.test.ts","packages/contracts/src/skill.ts","packages/contracts/src/tenant.ts","pnpm-lock.yaml","reports/agent-adapters.latest.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/ui-acceptance.latest.json","reports/validation-source.latest.json","scripts/check-dual-backend-parity.mjs","scripts/check-fork-readiness.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-ui-acceptance.mjs","scripts/governance-report.mjs","turbo.json"]},{"id":"f6ea2efbccafe9df16c29fd2f3ee80cedd159338","message":"feat: 完善可靠作业交接与产品手册\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/f6ea2efbccafe9df16c29fd2f3ee80cedd159338","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-20T06:47:23-07:00","added":["apps/api-fastify/prisma/migrations/20260825020000_job_intent/migration.sql","apps/api-fastify/src/plugins/job-intent-dispatcher.ts","apps/api-fastify/test/job-intent.dispatcher.test.ts","apps/api-nestjs/prisma/migrations/20260825020000_job_intent/migration.sql","apps/api-nestjs/src/queue/job-intent-dispatcher.service.ts","apps/api-nestjs/test/job-intent.dispatcher.test.ts","output/pdf/任务驱动的数字员工执行闭环.pdf","outputs/Digital_Employee_OS_产品使用手册_V1.0.docx","outputs/Digital_Employee_OS_产品说明书_V1.0.docx","work/product-manual/build_user_manual.py","work/product-manual/render-final/page-1.png","work/product-manual/render-final/page-10.png","work/product-manual/render-final/page-11.png","work/product-manual/render-final/page-12.png","work/product-manual/render-final/page-13.png","work/product-manual/render-final/page-14.png","work/product-manual/render-final/page-15.png","work/product-manual/render-final/page-16.png","work/product-manual/render-final/page-17.png","work/product-manual/render-final/page-18.png","work/product-manual/render-final/page-19.png","work/product-manual/render-final/page-2.png","work/product-manual/render-final/page-20.png","work/product-manual/render-final/page-21.png","work/product-manual/render-final/page-22.png","work/product-manual/render-final/page-23.png","work/product-manual/render-final/page-24.png","work/product-manual/render-final/page-25.png","work/product-manual/render-final/page-26.png","work/product-manual/render-final/page-3.png","work/product-manual/render-final/page-4.png","work/product-manual/render-final/page-5.png","work/product-manual/render-final/page-6.png","work/product-manual/render-final/page-7.png","work/product-manual/render-final/page-8.png","work/product-manual/render-final/page-9.png","work/product-manual/render-v1/Digital_Employee_OS_产品使用手册_V1.0.pdf","work/product-manual/render-v1/page-1.png","work/product-manual/render-v1/page-10.png","work/product-manual/render-v1/page-11.png","work/product-manual/render-v1/page-12.png","work/product-manual/render-v1/page-13.png","work/product-manual/render-v1/page-14.png","work/product-manual/render-v1/page-15.png","work/product-manual/render-v1/page-16.png","work/product-manual/render-v1/page-17.png","work/product-manual/render-v1/page-18.png","work/product-manual/render-v1/page-19.png","work/product-manual/render-v1/page-2.png","work/product-manual/render-v1/page-20.png","work/product-manual/render-v1/page-21.png","work/product-manual/render-v1/page-22.png","work/product-manual/render-v1/page-23.png","work/product-manual/render-v1/page-24.png","work/product-manual/render-v1/page-25.png","work/product-manual/render-v1/page-26.png","work/product-manual/render-v1/page-27.png","work/product-manual/render-v1/page-28.png","work/product-manual/render-v1/page-29.png","work/product-manual/render-v1/page-3.png","work/product-manual/render-v1/page-30.png","work/product-manual/render-v1/page-31.png","work/product-manual/render-v1/page-4.png","work/product-manual/render-v1/page-5.png","work/product-manual/render-v1/page-6.png","work/product-manual/render-v1/page-7.png","work/product-manual/render-v1/page-8.png","work/product-manual/render-v1/page-9.png","work/product-manual/render-v2/Digital_Employee_OS_产品使用手册_V1.0.pdf","work/product-manual/render-v2/page-1.png","work/product-manual/render-v2/page-10.png","work/product-manual/render-v2/page-11.png","work/product-manual/render-v2/page-12.png","work/product-manual/render-v2/page-13.png","work/product-manual/render-v2/page-14.png","work/product-manual/render-v2/page-15.png","work/product-manual/render-v2/page-16.png","work/product-manual/render-v2/page-17.png","work/product-manual/render-v2/page-18.png","work/product-manual/render-v2/page-19.png","work/product-manual/render-v2/page-2.png","work/product-manual/render-v2/page-20.png","work/product-manual/render-v2/page-21.png","work/product-manual/render-v2/page-22.png","work/product-manual/render-v2/page-23.png","work/product-manual/render-v2/page-24.png","work/product-manual/render-v2/page-25.png","work/product-manual/render-v2/page-3.png","work/product-manual/render-v2/page-4.png","work/product-manual/render-v2/page-5.png","work/product-manual/render-v2/page-6.png","work/product-manual/render-v2/page-7.png","work/product-manual/render-v2/page-8.png","work/product-manual/render-v2/page-9.png","work/product-manual/render-v3/page-1.png","work/product-manual/render-v3/page-10.png","work/product-manual/render-v3/page-11.png","work/product-manual/render-v3/page-12.png","work/product-manual/render-v3/page-13.png","work/product-manual/render-v3/page-14.png","work/product-manual/render-v3/page-15.png","work/product-manual/render-v3/page-16.png","work/product-manual/render-v3/page-17.png","work/product-manual/render-v3/page-18.png","work/product-manual/render-v3/page-19.png","work/product-manual/render-v3/page-2.png","work/product-manual/render-v3/page-20.png","work/product-manual/render-v3/page-21.png","work/product-manual/render-v3/page-22.png","work/product-manual/render-v3/page-23.png","work/product-manual/render-v3/page-24.png","work/product-manual/render-v3/page-25.png","work/product-manual/render-v3/page-26.png","work/product-manual/render-v3/page-27.png","work/product-manual/render-v3/page-28.png","work/product-manual/render-v3/page-29.png","work/product-manual/render-v3/page-3.png","work/product-manual/render-v3/page-4.png","work/product-manual/render-v3/page-5.png","work/product-manual/render-v3/page-6.png","work/product-manual/render-v3/page-7.png","work/product-manual/render-v3/page-8.png","work/product-manual/render-v3/page-9.png","work/product-manual/render-v4/page-1.png","work/product-manual/render-v4/page-10.png","work/product-manual/render-v4/page-11.png","work/product-manual/render-v4/page-12.png","work/product-manual/render-v4/page-13.png","work/product-manual/render-v4/page-14.png","work/product-manual/render-v4/page-15.png","work/product-manual/render-v4/page-16.png","work/product-manual/render-v4/page-17.png","work/product-manual/render-v4/page-18.png","work/product-manual/render-v4/page-19.png","work/product-manual/render-v4/page-2.png","work/product-manual/render-v4/page-20.png","work/product-manual/render-v4/page-21.png","work/product-manual/render-v4/page-22.png","work/product-manual/render-v4/page-23.png","work/product-manual/render-v4/page-24.png","work/product-manual/render-v4/page-25.png","work/product-manual/render-v4/page-26.png","work/product-manual/render-v4/page-27.png","work/product-manual/render-v4/page-28.png","work/product-manual/render-v4/page-3.png","work/product-manual/render-v4/page-4.png","work/product-manual/render-v4/page-5.png","work/product-manual/render-v4/page-6.png","work/product-manual/render-v4/page-7.png","work/product-manual/render-v4/page-8.png","work/product-manual/render-v4/page-9.png","work/product-manual/render-v5/page-1.png","work/product-manual/render-v5/page-10.png","work/product-manual/render-v5/page-11.png","work/product-manual/render-v5/page-12.png","work/product-manual/render-v5/page-13.png","work/product-manual/render-v5/page-14.png","work/product-manual/render-v5/page-15.png","work/product-manual/render-v5/page-16.png","work/product-manual/render-v5/page-17.png","work/product-manual/render-v5/page-18.png","work/product-manual/render-v5/page-19.png","work/product-manual/render-v5/page-2.png","work/product-manual/render-v5/page-20.png","work/product-manual/render-v5/page-21.png","work/product-manual/render-v5/page-22.png","work/product-manual/render-v5/page-23.png","work/product-manual/render-v5/page-24.png","work/product-manual/render-v5/page-25.png","work/product-manual/render-v5/page-26.png","work/product-manual/render-v5/page-3.png","work/product-manual/render-v5/page-4.png","work/product-manual/render-v5/page-5.png","work/product-manual/render-v5/page-6.png","work/product-manual/render-v5/page-7.png","work/product-manual/render-v5/page-8.png","work/product-manual/render-v5/page-9.png","work/product-manual/screenshots/01-workbench.png","work/product-manual/screenshots/02-team.png","work/product-manual/screenshots/03-automation.png","work/product-manual/screenshots/04-system.png","work/product-manual/screenshots/05-task-detail-crop.png","work/product-manual/screenshots/05-task-detail.png","work/product-manual/screenshots/06-execution-records-crop.png","work/product-manual/screenshots/06-execution-records.png","work/product-manual/screenshots/07-task-create.png","work/product-manual/screenshots/08-task-more-options.png","work/product-manual/screenshots/09-mobile-workbench.png","work/product_manual/__pycache__/build_product_manual.cpython-312.pyc","work/product_manual/build_product_manual.py","work/product_manual/figure_closed_loop.png","work/product_manual/figure_product_ia.png","work/product_manual/figure_technical_layers.png","work/product_manual/qa_v1/Digital_Employee_OS_产品说明书_V1.0.pdf","work/product_manual/qa_v1/page-1.png","work/product_manual/qa_v1/page-10.png","work/product_manual/qa_v1/page-11.png","work/product_manual/qa_v1/page-12.png","work/product_manual/qa_v1/page-13.png","work/product_manual/qa_v1/page-14.png","work/product_manual/qa_v1/page-15.png","work/product_manual/qa_v1/page-16.png","work/product_manual/qa_v1/page-17.png","work/product_manual/qa_v1/page-18.png","work/product_manual/qa_v1/page-19.png","work/product_manual/qa_v1/page-2.png","work/product_manual/qa_v1/page-3.png","work/product_manual/qa_v1/page-4.png","work/product_manual/qa_v1/page-5.png","work/product_manual/qa_v1/page-6.png","work/product_manual/qa_v1/page-7.png","work/product_manual/qa_v1/page-8.png","work/product_manual/qa_v1/page-9.png","work/product_manual/qa_v10/Digital_Employee_OS_产品说明书_V1.0.pdf","work/product_manual/qa_v10/page-1.png","work/product_manual/qa_v10/page-10.png","work/product_manual/qa_v10/page-11.png","work/product_manual/qa_v10/page-12.png","work/product_manual/qa_v10/page-13.png","work/product_manual/qa_v10/page-14.png","work/product_manual/qa_v10/page-15.png","work/product_manual/qa_v10/page-16.png","work/product_manual/qa_v10/page-17.png","work/product_manual/qa_v10/page-18.png","work/product_manual/qa_v10/page-19.png","work/product_manual/qa_v10/page-2.png","work/product_manual/qa_v10/page-20.png","work/product_manual/qa_v10/page-21.png","work/product_manual/qa_v10/page-22.png","work/product_manual/qa_v10/page-23.png","work/product_manual/qa_v10/page-24.png","work/product_manual/qa_v10/page-25.png","work/product_manual/qa_v10/page-26.png","work/product_manual/qa_v10/page-27.png","work/product_manual/qa_v10/page-28.png","work/product_manual/qa_v10/page-3.png","work/product_manual/qa_v10/page-4.png","work/product_manual/qa_v10/page-5.png","work/product_manual/qa_v10/page-6.png","work/product_manual/qa_v10/page-7.png","work/product_manual/qa_v10/page-8.png","work/product_manual/qa_v10/page-9.png","work/product_manual/qa_v11/Digital_Employee_OS_产品说明书_V1.0.pdf","work/product_manual/qa_v11/a11y.json","work/product_manual/qa_v11/page-1.png","work/product_manual/qa_v11/page-10.png","work/product_manual/qa_v11/page-11.png","work/product_manual/qa_v11/page-12.png","work/product_manual/qa_v11/page-13.png","work/product_manual/qa_v11/page-14.png","work/product_manual/qa_v11/page-15.png","work/product_manual/qa_v11/page-16.png","work/product_manual/qa_v11/page-17.png","work/product_manual/qa_v11/page-18.png","work/product_manual/qa_v11/page-19.png","work/product_manual/qa_v11/page-2.png","work/product_manual/qa_v11/page-20.png","work/product_manual/qa_v11/page-21.png","work/product_manual/qa_v11/page-22.png","work/product_manual/qa_v11/page-23.png","work/product_manual/qa_v11/page-24.png","work/product_manual/qa_v11/page-25.png","work/product_manual/qa_v11/page-26.png","work/product_manual/qa_v11/page-27.png","work/product_manual/qa_v11/page-28.png","work/product_manual/qa_v11/page-29.png","work/product_manual/qa_v11/page-3.png","work/product_manual/qa_v11/page-4.png","work/product_manual/qa_v11/page-5.png","work/product_manual/qa_v11/page-6.png","work/product_manual/qa_v11/page-7.png","work/product_manual/qa_v11/page-8.png","work/product_manual/qa_v11/page-9.png","work/product_manual/qa_v11/style-lint.json","work/product_manual/qa_v2/Digital_Employee_OS_产品说明书_V1.0.pdf","work/product_manual/qa_v2/page-1.png","work/product_manual/qa_v2/page-10.png","work/product_manual/qa_v2/page-11.png","work/product_manual/qa_v2/page-12.png","work/product_manual/qa_v2/page-13.png","work/product_manual/qa_v2/page-14.png","work/product_manual/qa_v2/page-15.png","work/product_manual/qa_v2/page-16.png","work/product_manual/qa_v2/page-17.png","work/product_manual/qa_v2/page-18.png","work/product_manual/qa_v2/page-19.png","work/product_manual/qa_v2/page-2.png","work/product_manual/qa_v2/page-3.png","work/product_manual/qa_v2/page-4.png","work/product_manual/qa_v2/page-5.png","work/product_manual/qa_v2/page-6.png","work/product_manual/qa_v2/page-7.png","work/product_manual/qa_v2/page-8.png","work/product_manual/qa_v2/page-9.png","work/product_manual/qa_v3/Digital_Employee_OS_产品说明书_V1.0.pdf","work/product_manual/qa_v3/page-1.png","work/product_manual/qa_v3/page-10.png","work/product_manual/qa_v3/page-11.png","work/product_manual/qa_v3/page-12.png","work/product_manual/qa_v3/page-13.png","work/product_manual/qa_v3/page-14.png","work/product_manual/qa_v3/page-15.png","work/product_manual/qa_v3/page-16.png","work/product_manual/qa_v3/page-17.png","work/product_manual/qa_v3/page-18.png","work/product_manual/qa_v3/page-19.png","work/product_manual/qa_v3/page-2.png","work/product_manual/qa_v3/page-3.png","work/product_manual/qa_v3/page-4.png","work/product_manual/qa_v3/page-5.png","work/product_manual/qa_v3/page-6.png","work/product_manual/qa_v3/page-7.png","work/product_manual/qa_v3/page-8.png","work/product_manual/qa_v3/page-9.png","work/product_manual/qa_v4/Digital_Employee_OS_产品说明书_V1.0.pdf","work/product_manual/qa_v4/page-1.png","work/product_manual/qa_v4/page-10.png","work/product_manual/qa_v4/page-11.png","work/product_manual/qa_v4/page-12.png","work/product_manual/qa_v4/page-13.png","work/product_manual/qa_v4/page-14.png","work/product_manual/qa_v4/page-15.png","work/product_manual/qa_v4/page-16.png","work/product_manual/qa_v4/page-17.png","work/product_manual/qa_v4/page-18.png","work/product_manual/qa_v4/page-19.png","work/product_manual/qa_v4/page-2.png","work/product_manual/qa_v4/page-3.png","work/product_manual/qa_v4/page-4.png","work/product_manual/qa_v4/page-5.png","work/product_manual/qa_v4/page-6.png","work/product_manual/qa_v4/page-7.png","work/product_manual/qa_v4/page-8.png","work/product_manual/qa_v4/page-9.png","work/product_manual/qa_v5/Digital_Employee_OS_产品说明书_V1.0.pdf","work/product_manual/qa_v5/page-1.png","work/product_manual/qa_v5/page-10.png","work/product_manual/qa_v5/page-11.png","work/product_manual/qa_v5/page-12.png","work/product_manual/qa_v5/page-13.png","work/product_manual/qa_v5/page-14.png","work/product_manual/qa_v5/page-15.png","work/product_manual/qa_v5/page-16.png","work/product_manual/qa_v5/page-17.png","work/product_manual/qa_v5/page-18.png","work/product_manual/qa_v5/page-19.png","work/product_manual/qa_v5/page-2.png","work/product_manual/qa_v5/page-20.png","work/product_manual/qa_v5/page-21.png","work/product_manual/qa_v5/page-22.png","work/product_manual/qa_v5/page-23.png","work/product_manual/qa_v5/page-24.png","work/product_manual/qa_v5/page-25.png","work/product_manual/qa_v5/page-26.png","work/product_manual/qa_v5/page-27.png","work/product_manual/qa_v5/page-28.png","work/product_manual/qa_v5/page-3.png","work/product_manual/qa_v5/page-4.png","work/product_manual/qa_v5/page-5.png","work/product_manual/qa_v5/page-6.png","work/product_manual/qa_v5/page-7.png","work/product_manual/qa_v5/page-8.png","work/product_manual/qa_v5/page-9.png","work/product_manual/qa_v6/Digital_Employee_OS_产品说明书_V1.0.pdf","work/product_manual/qa_v6/page-1.png","work/product_manual/qa_v6/page-10.png","work/product_manual/qa_v6/page-11.png","work/product_manual/qa_v6/page-12.png","work/product_manual/qa_v6/page-13.png","work/product_manual/qa_v6/page-14.png","work/product_manual/qa_v6/page-15.png","work/product_manual/qa_v6/page-16.png","work/product_manual/qa_v6/page-17.png","work/product_manual/qa_v6/page-18.png","work/product_manual/qa_v6/page-19.png","work/product_manual/qa_v6/page-2.png","work/product_manual/qa_v6/page-20.png","work/product_manual/qa_v6/page-21.png","work/product_manual/qa_v6/page-22.png","work/product_manual/qa_v6/page-23.png","work/product_manual/qa_v6/page-24.png","work/product_manual/qa_v6/page-25.png","work/product_manual/qa_v6/page-26.png","work/product_manual/qa_v6/page-27.png","work/product_manual/qa_v6/page-28.png","work/product_manual/qa_v6/page-3.png","work/product_manual/qa_v6/page-4.png","work/product_manual/qa_v6/page-5.png","work/product_manual/qa_v6/page-6.png","work/product_manual/qa_v6/page-7.png","work/product_manual/qa_v6/page-8.png","work/product_manual/qa_v6/page-9.png","work/product_manual/qa_v7/Digital_Employee_OS_产品说明书_V1.0.pdf","work/product_manual/qa_v7/page-1.png","work/product_manual/qa_v7/page-10.png","work/product_manual/qa_v7/page-11.png","work/product_manual/qa_v7/page-12.png","work/product_manual/qa_v7/page-13.png","work/product_manual/qa_v7/page-14.png","work/product_manual/qa_v7/page-15.png","work/product_manual/qa_v7/page-16.png","work/product_manual/qa_v7/page-17.png","work/product_manual/qa_v7/page-18.png","work/product_manual/qa_v7/page-19.png","work/product_manual/qa_v7/page-2.png","work/product_manual/qa_v7/page-20.png","work/product_manual/qa_v7/page-21.png","work/product_manual/qa_v7/page-22.png","work/product_manual/qa_v7/page-23.png","work/product_manual/qa_v7/page-24.png","work/product_manual/qa_v7/page-25.png","work/product_manual/qa_v7/page-26.png","work/product_manual/qa_v7/page-27.png","work/product_manual/qa_v7/page-28.png","work/product_manual/qa_v7/page-3.png","work/product_manual/qa_v7/page-4.png","work/product_manual/qa_v7/page-5.png","work/product_manual/qa_v7/page-6.png","work/product_manual/qa_v7/page-7.png","work/product_manual/qa_v7/page-8.png","work/product_manual/qa_v7/page-9.png","work/product_manual/qa_v8/Digital_Employee_OS_产品说明书_V1.0.pdf","work/product_manual/qa_v8/page-1.png","work/product_manual/qa_v8/page-10.png","work/product_manual/qa_v8/page-11.png","work/product_manual/qa_v8/page-12.png","work/product_manual/qa_v8/page-13.png","work/product_manual/qa_v8/page-14.png","work/product_manual/qa_v8/page-15.png","work/product_manual/qa_v8/page-16.png","work/product_manual/qa_v8/page-17.png","work/product_manual/qa_v8/page-18.png","work/product_manual/qa_v8/page-19.png","work/product_manual/qa_v8/page-2.png","work/product_manual/qa_v8/page-20.png","work/product_manual/qa_v8/page-21.png","work/product_manual/qa_v8/page-22.png","work/product_manual/qa_v8/page-23.png","work/product_manual/qa_v8/page-24.png","work/product_manual/qa_v8/page-25.png","work/product_manual/qa_v8/page-26.png","work/product_manual/qa_v8/page-27.png","work/product_manual/qa_v8/page-28.png","work/product_manual/qa_v8/page-3.png","work/product_manual/qa_v8/page-4.png","work/product_manual/qa_v8/page-5.png","work/product_manual/qa_v8/page-6.png","work/product_manual/qa_v8/page-7.png","work/product_manual/qa_v8/page-8.png","work/product_manual/qa_v8/page-9.png","work/product_manual/qa_v9/Digital_Employee_OS_产品说明书_V1.0.pdf","work/product_manual/qa_v9/page-1.png","work/product_manual/qa_v9/page-10.png","work/product_manual/qa_v9/page-11.png","work/product_manual/qa_v9/page-12.png","work/product_manual/qa_v9/page-13.png","work/product_manual/qa_v9/page-14.png","work/product_manual/qa_v9/page-15.png","work/product_manual/qa_v9/page-16.png","work/product_manual/qa_v9/page-17.png","work/product_manual/qa_v9/page-18.png","work/product_manual/qa_v9/page-19.png","work/product_manual/qa_v9/page-2.png","work/product_manual/qa_v9/page-20.png","work/product_manual/qa_v9/page-21.png","work/product_manual/qa_v9/page-22.png","work/product_manual/qa_v9/page-23.png","work/product_manual/qa_v9/page-24.png","work/product_manual/qa_v9/page-25.png","work/product_manual/qa_v9/page-26.png","work/product_manual/qa_v9/page-27.png","work/product_manual/qa_v9/page-28.png","work/product_manual/qa_v9/page-29.png","work/product_manual/qa_v9/page-3.png","work/product_manual/qa_v9/page-30.png","work/product_manual/qa_v9/page-4.png","work/product_manual/qa_v9/page-5.png","work/product_manual/qa_v9/page-6.png","work/product_manual/qa_v9/page-7.png","work/product_manual/qa_v9/page-8.png","work/product_manual/qa_v9/page-9.png","work/product_manual/render_with_cjk_font.py"],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/app.ts","apps/api-fastify/src/modules/triggers.service.ts","apps/api-fastify/src/modules/work/runtimes.service.ts","apps/api-fastify/src/plugins/queue.ts","apps/api-fastify/src/routes/work.ts","apps/api-fastify/test/actor-events.integration.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/prisma/schema.prisma","apps/api-nestjs/src/queue/jobs.processor.ts","apps/api-nestjs/src/queue/queue.module.ts","apps/api-nestjs/src/work/runtimes.service.ts","apps/api-nestjs/src/work/work.module.ts","apps/api-nestjs/test/actor-events.integration.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","docs/domain/owner-matrix.md","docs/domain/work-blueprint.md","docs/governance-experience.md","governance.registry.json","packages/contracts/src/contracts.test.ts","packages/contracts/src/job.ts","packages/contracts/src/runtime.ts","packages/contracts/src/work.test.ts","reports/agent-adapters.latest.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/ui-acceptance.latest.json","reports/validation-source.latest.json"]}],"total_commits":0,"head_commit":{"id":"55b9c2a0af78b6998bac3614dedc7187e37057ea","message":"merge: 汇合远端治理修复轮(PR #1/#2/#3,e4b6a5e..c0ed754)与本地 C45–C68 大波次\n\n冲突决议(24 文件):\n- reports/baseline:取本地 08-22 棘轮(458 tests / 66 files / 456 cases / 19×2 UI,为远端严格超集)\n- jobs.processor / work.module / queue.ts(fastify):取本地 C26 JobIntent 同事务链(远端 commit 后 queue.add + defaultJobOptions 兜底已被结构性取代;嫁接远端 Redis db NaN 守卫到 Fastify 侧保持双后端对等)\n- roles.service ×2:取本地 C42 审计事务版 + 嫁接远端 RoleAssignmentDto 返回类型接线(PR #3 拍板资产)\n- page.tsx:取本地 C53 会话身份(auth-identity testid,Playwright 依赖)\n- check-ui-acceptance:本地 OIDC 编排 + 远端 F8 注释并集\n- CLAUDE.md:本地 C45–C68 动态区为基底,嫁接远端 F8 行、五层 CI 假红叙事、结果裁决角色闸(G8 ⑫)、own-tests git-tracked 口径注记,快照更新为两远端对齐 c0ed754(run 32380591807 绿)\n\n编号撞号收口:两条时间线独立分配了 C25/C26/C1——远端线三个战役重编号为 C69(runner 自含 contracts 构建 + F8)/ C70(地板采集只认 git 已跟踪)/ C71(队列双注册策略显式化),经验库标题、脚本注释、测试注释同步改引;本地 C25(迟到成功)/C26(JobIntent)/C1(check-naming)编号不变。\n\n合并树证据:静态 pnpm check 全绿(Node 22,本地 dirty 工作区 2026-08-22);双后端 UI 聚合 38/38 绿(伙伴会话实跑,指纹绑定本合并内容)。合并提交自身的远端 CI 以 headSha 定位的 run 为准。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/55b9c2a0af78b6998bac3614dedc7187e37057ea","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-22T08:10:56-07:00","added":[],"removed":["apps/api-fastify/pnpm-lock.yaml","apps/api-nestjs/pnpm-lock.yaml","apps/web/pnpm-lock.yaml"],"modified":["CLAUDE.md","apps/api-fastify/.env.example","apps/api-fastify/src/modules/learning.service.ts","apps/api-fastify/src/modules/roles.service.ts","apps/api-fastify/src/modules/triggers.service.ts","apps/api-fastify/src/routes/health.ts","apps/api-fastify/src/routes/outcomes.ts","apps/api-fastify/src/routes/sse.ts","apps/api-fastify/test/auth.roles.acceptance.test.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-fastify/test/outcomes.integration.test.ts","apps/api-nestjs/.env.example","apps/api-nestjs/src/app.module.ts","apps/api-nestjs/src/learning/learning.service.ts","apps/api-nestjs/src/outcomes/outcomes.controller.ts","apps/api-nestjs/src/outcomes/outcomes.module.ts","apps/api-nestjs/src/roles/roles.service.ts","apps/api-nestjs/src/triggers/trigger-engine.service.ts","apps/api-nestjs/test/auth.roles.acceptance.test.ts","apps/api-nestjs/test/http.acceptance.test.ts","apps/api-nestjs/test/outcomes.integration.test.ts","apps/web/src/app/layout.tsx","apps/web/src/store/useAppStore.ts","docs/README.md","docs/adr/README.md","docs/governance-experience.md","docs/migration-playbook.md","packages/contracts/package.json","packages/contracts/src/contracts.test.ts","packages/contracts/src/index.ts","packages/contracts/src/job.ts","packages/contracts/src/learning.ts","packages/contracts/src/outcome.ts","packages/contracts/src/realtime-command.ts","packages/contracts/src/tenant.ts","packages/contracts/tsconfig.json","scripts/check-contract-consumers.mjs","scripts/check-fork-readiness.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-ui-acceptance.mjs","scripts/governance-report.mjs","turbo.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":1901,"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-21T23:43: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
|
3
|
5
|
1787411590
|
1787411987
|
0
|
1787411590
|
1787411987
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23511
|
fix(governance): mobile export runner 自含 contracts fix(governance): mobile export runner 自含 contracts 构建——C69 的 mobile 化身在首轮合并推送 CI 实锤...
|
76
|
5
|
governance.yml
|
12
|
5
|
0
|
refs/heads/main
|
28ea42cca5364bd425358f803436ae5c8f9bc687
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"55b9c2a0af78b6998bac3614dedc7187e37057ea","after":"28ea42cca5364bd425358f803436ae5c8f9bc687","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/55b9c2a0af78b6998bac3614dedc7187e37057ea...28ea42cca5364bd425358f803436ae5c8f9bc687","commits":[{"id":"28ea42cca5364bd425358f803436ae5c8f9bc687","message":"fix(governance): mobile export runner 自含 contracts 构建——C69 的 mobile 化身在首轮合并推送 CI 实锤\n\nrun 32580980619 静态 job 红判责:check-mobile-export 的正向静态导出直跑 next build,\nweb 运行时入口依赖 @repo/contracts dist;干净 checkout 无残留构建产物即秒崩\n(violations 1 / staticFiles 0 / synced 0),本机因开发期残留 dist 恒绿——与 C69\n「本机恒绿 ≠ 干净环境能跑」同构,是该教训的第三次现身(runtime → UI → mobile)。\n\n- check-mobile-export.mjs:正向导出前自含 `pnpm --filter @repo/contracts build` +\n dist/index.js 存在性断言(M9,防 tsbuildinfo 静默空转),与两验收 runner 同款\n- check-fork-readiness.mjs:F8 绊网从两 runner 扩至三 runner(含 mobile export);\n 负向已验证(拆掉 mobile 构建步 → F8 精确 1 红 → 恢复复绿)\n- CLAUDE.md/AGENTS.md:C69 行与 G14 ② 叙事回灌三 runner 口径与本次实锤\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/28ea42cca5364bd425358f803436ae5c8f9bc687","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-22T08:19:42-07:00","added":[],"removed":[],"modified":["CLAUDE.md","scripts/check-fork-readiness.mjs","scripts/check-mobile-export.mjs"]}],"total_commits":0,"head_commit":{"id":"28ea42cca5364bd425358f803436ae5c8f9bc687","message":"fix(governance): mobile export runner 自含 contracts 构建——C69 的 mobile 化身在首轮合并推送 CI 实锤\n\nrun 32580980619 静态 job 红判责:check-mobile-export 的正向静态导出直跑 next build,\nweb 运行时入口依赖 @repo/contracts dist;干净 checkout 无残留构建产物即秒崩\n(violations 1 / staticFiles 0 / synced 0),本机因开发期残留 dist 恒绿——与 C69\n「本机恒绿 ≠ 干净环境能跑」同构,是该教训的第三次现身(runtime → UI → mobile)。\n\n- check-mobile-export.mjs:正向导出前自含 `pnpm --filter @repo/contracts build` +\n dist/index.js 存在性断言(M9,防 tsbuildinfo 静默空转),与两验收 runner 同款\n- check-fork-readiness.mjs:F8 绊网从两 runner 扩至三 runner(含 mobile export);\n 负向已验证(拆掉 mobile 构建步 → F8 精确 1 红 → 恢复复绿)\n- CLAUDE.md/AGENTS.md:C69 行与 G14 ② 叙事回灌三 runner 口径与本次实锤\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/28ea42cca5364bd425358f803436ae5c8f9bc687","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-22T08:19:42-07:00","added":[],"removed":[],"modified":["CLAUDE.md","scripts/check-fork-readiness.mjs","scripts/check-mobile-export.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":51118,"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:13: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
|
3
|
5
|
1787411988
|
1787412510
|
0
|
1787411987
|
1787412510
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23604
|
Merge branch 'governance/consolidate-20260902& Merge branch 'governance/consolidate-20260902'(整合治理分支 f77fe27 + C29 手工合入 + C31–C36/G21/G30 关闭)...
|
67
|
5
|
governance.yml
|
5
|
5
|
0
|
refs/heads/main
|
03d95db096af66a1e7af7708a99156f194f2c702
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"205116d7e6e0ff602d1773c2ec986b02223b1e0e","after":"03d95db096af66a1e7af7708a99156f194f2c702","compare_url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics/compare/205116d7e6e0ff602d1773c2ec986b02223b1e0e...03d95db096af66a1e7af7708a99156f194f2c702","commits":[{"id":"03d95db096af66a1e7af7708a99156f194f2c702","message":"Merge branch 'governance/consolidate-20260902'(整合治理分支 f77fe27 + C29 手工合入 + C31–C36/G21/G30 关闭)\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics/commit/03d95db096af66a1e7af7708a99156f194f2c702","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-02T16:39:01-07:00","added":[".agents/skills/business-module-intake/SKILL.md","apps/web/e2e/fixtures/review-workdir/audio-probe-song/alignment.json","apps/web/e2e/fixtures/review-workdir/audio-probe-song/lyrics.txt","apps/web/e2e/fixtures/review-workdir/audio-probe-song/run_inputs.json","apps/web/e2e/fixtures/review-workdir/audio-probe-song/segments/vocal_1.wav","apps/web/e2e/fixtures/review-workdir/audio-probe-song/segments/vocal_2.wav","apps/web/e2e/fixtures/review-workdir/audio-probe-song/status.json","apps/web/e2e/fixtures/review-workdir/audio-probe-song/vocals.wav","apps/web/e2e/fixtures/review-workdir/audio-probe-song_p2/line_times.json","apps/web/e2e/fixtures/review-workdir/fixture-song/alignment.json","apps/web/e2e/fixtures/review-workdir/fixture-song_p2/line_times.json","apps/web/e2e/fixtures/review-workdir/nonaudio-source-probe/run_inputs.json","apps/web/src/app/api/review/edits/route.ts","apps/web/src/app/api/review/full-audio/route.ts","apps/web/src/lib/audio-range.test.ts","apps/web/src/lib/audio-range.ts","apps/web/src/lib/audio-source.ts","apps/web/src/lib/export-format.test.ts","apps/web/src/lib/export-format.ts","apps/web/src/lib/manual-edits.ts","apps/web/src/lib/review-artifacts.test.ts","apps/web/src/lib/review-artifacts.ts","apps/web/src/lib/structure-mode.ts","apps/web/vitest.config.ts","config/structure-modes.v1.json","docs/domain/review-manual-timing-blueprint.md","reports/export-contract.freeze.json","reports/export-contract.latest.json","scripts/check-export-contract.mjs","scripts/download-model-assets.mjs","scripts/lib/agent-adapters.mjs","scripts/lib/provenance.mjs","scripts/normalize-model-manifest.mjs","scripts/setup-model-workers.mjs","scripts/sync-agent-skills.mjs","services/structure_lyrics/phase1/vocal_structure.py","services/structure_lyrics/tests/test_cli_declared.py","services/structure_lyrics/tests/test_ffmpeg_resolution.py","services/structure_lyrics/tests/test_vocal_structure.py","workers/demucs/README.md","复核工作台.dc.html"],"removed":["apps/web/pnpm-lock.yaml"],"modified":[".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/zustand-store/SKILL.md",".claude/agents/acceptance-runner.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/zustand-store/SKILL.md",".github/pull_request_template.md",".gitignore","CLAUDE.md","README.md","apps/web/e2e/acceptance.spec.ts","apps/web/package.json","apps/web/playwright.config.ts","apps/web/src/app/api/review/audio/route.ts","apps/web/src/app/api/review/browse/route.ts","apps/web/src/app/api/review/export/route.ts","apps/web/src/app/api/review/route.ts","apps/web/src/app/api/review/run/route.ts","apps/web/src/app/layout.tsx","apps/web/src/app/review/page.tsx","apps/web/src/lib/song-name.ts","apps/web/tailwind.config.ts","apps/web/tsconfig.json","docs/README.md","docs/adr/0001-use-typescript-fullstack.md","docs/adr/0005-use-prisma.md","docs/adr/0008-monorepo-pnpm-turborepo.md","docs/adr/README.md","docs/domain-glossary.md","docs/domain/owner-matrix.md","docs/domain/structure-lyrics-phase1-blueprint.md","docs/governance-experience.md","docs/migration-notes.md","docs/standards/api-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","models/model-assets.v1.json","package.json","packages/contracts/package.json","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/model-assets.latest.json","reports/model-evidence/htdemucs-smoke.latest.json","reports/model-evidence/mms-fa-smoke.latest.json","reports/model-evidence/qwen3-asr-smoke.latest.json","reports/model-evidence/structure-smoke.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/pipeline-tests.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-governance-docs.mjs","scripts/check-migrations.mjs","scripts/check-model-assets.mjs","scripts/check-naming.mjs","scripts/check-order-concurrency-guard.mjs","scripts/check-pipeline-tests.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","services/structure_lyrics/README.md","services/structure_lyrics/phase1/asr.py","services/structure_lyrics/phase1/audio.py","services/structure_lyrics/phase1/cli.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_language.py","services/structure_lyrics/tests/test_phase2.py","services/structure_lyrics/tests/test_tokenize.py","workers/demucs/requirements_demucs.txt","workers/demucs/run_separate.py","workers/mms-fa/run_mms_fa.py","workers/structure/README.md","workers/structure/run_structure.py"]},{"id":"7a871ea9c56ab4dfbb000e4f806a3759a5e962be","message":"治理: 整合三条工作线 + 关闭 C31–C36/G21/G30 + 手工合入 C29(第二台机器 runtime 93 / ui 12 首绿)\n\n整合:本分支基于 origin/governance/adversarial-audit-fixes-20260728(f77fe27),叠加\n2026-08-30 本地模型可移植性工作(models:download / models:verify / models:setup-workers /\nmodels:normalize-manifest;manifest 钉 revision 并剔除 .cache 条目;demucs 捆绑 imageio-ffmpeg;\nstructure worker HF_MODULES_CACHE),并按「不另立第二份查找」手工合入\nclaude/clever-morse-0c9e45(20f1c2e,C29):export-format.ts 纯函数层 + vitest,\nreview-paths.ts 收口进既有 review-artifacts.ts(resolveArtifactPath 泛化,audio 路由同用)。\n\n关闭:\n- C31 治理聚合器 fail-open:runGate() 要求子门禁报告本轮新鲜/可解析/带指标,否则 [gate-failed] 红;\n 禁 `?? -1`/`?? 0` 折算。负向:写报告前 throw、exit 0 不写报告 均精确红\n- C32 模型资产入棘轮(违规只降、资产/文件数只升)+ 磁盘→manifest 未登记即红 + 可复现下载 revision∨uri\n- C33 docs-truth 扩到全部面向人的文档与无反引号 prose,八类新断言;models/ 按 manifest+git 判定\n (防干净检出必红,同时覆盖 G30);首跑 60 处漂移全部逐条订正\n- C34 ffmpeg 解析单源 resolve_ffmpeg(系统 PATH→imageio-ffmpeg),check:pipeline 干净机器不再必红,\n pytest 地板 139→143\n- C35 /api/review/audio 无 Range 致跟播死锁:lib/audio-range.ts 单源,两条音频路由共用,6 例 vitest\n- C36 验收链宿主机污染四连:prisma:generate --concurrency=1 + 验收前置 prisma-generate;脚本钉空\n NEXT_PUBLIC_API_URL/AUTH_TOKEN;删多余 apps/web/pnpm-lock.yaml;Playwright --disable-audio-output\n- G21 多代理适配器同源:.claude/skills 唯一真源,sync:agent-skills 生成 .agents/skills,\n check:governance-docs 比对(缺失/多出/漂移即红);幽灵 PROJECT-PROFILE 引用与假调用文案订正\n- G30 由 C33 覆盖关闭\n\n证据(本地工作区,dirty 状态生成):pnpm check exit 0;check:pipeline 143/143;\ncheck:runtime 93/93(testsPassed 地板 56→93,含 apps/web vitest 37 例);check:ui 12/12\n(UI_WEB_PORT=3141 / UI_API_PORT=3247);MODEL_ASSETS_FULL_HASH=1 42 文件全量哈希绿;\nown-tests 14 / own-test-cases 106。所有负向测试见 docs/governance-experience.md 各条。\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics/commit/7a871ea9c56ab4dfbb000e4f806a3759a5e962be","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-02T16:38:59-07:00","added":[".agents/skills/business-module-intake/SKILL.md","apps/web/src/lib/audio-range.test.ts","apps/web/src/lib/audio-range.ts","apps/web/src/lib/export-format.test.ts","apps/web/src/lib/export-format.ts","apps/web/src/lib/review-artifacts.test.ts","apps/web/vitest.config.ts","scripts/download-model-assets.mjs","scripts/lib/agent-adapters.mjs","scripts/normalize-model-manifest.mjs","scripts/setup-model-workers.mjs","scripts/sync-agent-skills.mjs","services/structure_lyrics/tests/test_ffmpeg_resolution.py","workers/demucs/README.md"],"removed":["apps/web/pnpm-lock.yaml"],"modified":[".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/zustand-store/SKILL.md",".claude/agents/acceptance-runner.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/zustand-store/SKILL.md",".github/pull_request_template.md","CLAUDE.md","README.md","apps/web/package.json","apps/web/playwright.config.ts","apps/web/src/app/api/review/audio/route.ts","apps/web/src/app/api/review/browse/route.ts","apps/web/src/app/api/review/export/route.ts","apps/web/src/app/api/review/full-audio/route.ts","apps/web/src/lib/review-artifacts.ts","apps/web/tailwind.config.ts","apps/web/tsconfig.json","docs/README.md","docs/adr/0001-use-typescript-fullstack.md","docs/adr/0005-use-prisma.md","docs/adr/0008-monorepo-pnpm-turborepo.md","docs/adr/README.md","docs/domain-glossary.md","docs/domain/structure-lyrics-phase1-blueprint.md","docs/governance-experience.md","docs/migration-notes.md","docs/standards/api-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","models/model-assets.v1.json","package.json","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/model-assets.latest.json","reports/model-evidence/htdemucs-smoke.latest.json","reports/model-evidence/mms-fa-smoke.latest.json","reports/model-evidence/qwen3-asr-smoke.latest.json","reports/model-evidence/structure-smoke.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/pipeline-tests.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-governance-docs.mjs","scripts/check-model-assets.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-ui-acceptance.mjs","scripts/governance-report.mjs","services/structure_lyrics/README.md","services/structure_lyrics/phase1/audio.py","services/structure_lyrics/phase1/vocal_structure.py","services/structure_lyrics/requirements.txt","workers/demucs/requirements_demucs.txt","workers/demucs/run_separate.py","workers/structure/README.md","workers/structure/run_structure.py"]},{"id":"f77fe276fc4f6336bb58132bef8e01e83b4c9ea1","message":"fix: 对抗验收 C30——键口径双源静默失败 / 导出与手改不同源 / 会计头幽灵声称;并补视图精度\n\n对刚落地的手改写链做对抗性验收(try-to-break-it),当场抓到三处、全部修复并接入回归:\n- C30①【数据完整性】编辑键口径双源:校验用 Number(\"01\")=1 找得到行、应用用\n String(line_id)=\"1\" 查不到该键 → \"01\" 判合法却不落盘(响应 ok:true/manualLines:0);\n 该行本已有手改时更会被 apply 当\"缺席\"**静默还原**(实测本意改 end=14.5、磁盘回退 13.2)。\n 修法:键统一 ^(0|[1-9]\\d*)$ fail closed,校验与应用共用同一把钥匙\n- C30②【双出口矛盾】export 只查 \u003csong\u003e_p2/ 而手改按两级查找写入 → cli 直跑产出的\n \u003csong\u003e/line_times.json 会「页面看得到手改、导出读不到」。修法:export 收口\n resolveLineTimesPath(与读/写路由同源)\n- C30③【幽灵声称】蓝图两处写 X-Export-Manual-Edits「M1 随做」实则从未实现 → 真加会计头\n- 视图精度(用户新需求):刻度加亚秒档(短歌 16× 从 0 个标签 → 56 个 0.1s 刻度)+\n 标签带小数;zoom-to-line 改「最接近目标占比 1/3」(长拖腔行 19%→38%);字条加刻度栅格\n + 走带上画字条窗口投影(两个时间视图互相定位);读数精度随每像素秒数自适应到 ms 级;\n 字条字块同步逐字高亮 + 播放头;修字条头部窄栏文案与读数交错换行\n- 验收:check:ui 12 用例全绿(新增导出一致性、走带精度两例 + 非规范化键负向断言),\n 地板 ui 10→12、ownTestCases 66→69;pnpm check 静态全链绿;负向测试实证:\n 退回键守卫缺陷形态即精确红在该断言、恢复复绿\n- 判读纪律实证入册:后台通知 exit code 被管道 tail 吞掉(通知 exit 0 / 报告 failed),\n 只认 runner report status 或显式 set -o pipefail\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics/commit/f77fe276fc4f6336bb58132bef8e01e83b4c9ea1","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-08T11:32:01-07:00","added":[],"removed":[],"modified":["CLAUDE.md","apps/web/e2e/acceptance.spec.ts","apps/web/src/app/api/review/export/route.ts","apps/web/src/app/layout.tsx","apps/web/src/app/review/page.tsx","apps/web/src/lib/manual-edits.ts","docs/domain/review-manual-timing-blueprint.md","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/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"]},{"id":"3fdb4053791bac065674586a5173a8a41aa5a0c4","message":"feat: 复核工作台手改写链 M1——直改产物+留档+拖动/打点/快捷键;走带播放链路补齐机器验收\n\n- 手改(ManualTimingEdit,2026-08-08 六项拍板落地):编辑态(E)走带行区间双手柄拖动、\n 字时间编辑条(局部波形+字块拖动+联动边界+播放同步逐字高亮与播放头)、G29 null 字赋时、\n T 逐字打点(回补 100ms)、[ ] ; ' , . I O 微调与 ⌘Z/⌘S;保存=整卷 PUT 直改\n line_times.json + manual.original 留档(沿 clamped_from 纪律),指纹乐观锁 409 +\n 执行中 409(文件双写者显式登记);重跑 fail closed(409 MANUAL_EDITS_PRESENT →\n confirmDiscardManualEdits)+ 自动备份 .manual-backups/(永不自动套用);reconcile 单源\n lib/manual-edits.ts、产物定位单源 lib/review-artifacts.ts(读/写/守卫共用 _p2 优先);\n 蓝图 docs/domain/review-manual-timing-blueprint.md + owner-matrix 登记\n- 走带整曲播放链路(前一轮未提交部分随本提交入库):/api/review/full-audio(HTTP Range +\n 扩展名白名单,C28 收口)+ audio-source 单源 + audio-probe fixture + 真波形/seek/跟播/\n 双音源互斥 e2e + 深色三栏工作台改版余量\n- 验收:check:ui 10 用例全绿(新增手改用例:真实鼠标拖字块+真实键盘 [+落盘留档回读+\n 重跑 409+还原清 manual+指纹/非法/穿越负向矩阵),地板 ui 7→10、ownTestCases 62→66;\n pnpm check 静态全链绿;备份路径 live 实证(confirm→备份含手改值)\n- 教训入册(G18):浏览器面板按键注入不带 e.code,快捷键实测须真键盘/Playwright;\n 拖动手势收 buttons===0 悬停移动防\"粘手\"(pointerup 窗外丢失实锤)\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics/commit/3fdb4053791bac065674586a5173a8a41aa5a0c4","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-08T11:10:41-07:00","added":["apps/web/e2e/fixtures/review-workdir/audio-probe-song/alignment.json","apps/web/e2e/fixtures/review-workdir/audio-probe-song/lyrics.txt","apps/web/e2e/fixtures/review-workdir/audio-probe-song/run_inputs.json","apps/web/e2e/fixtures/review-workdir/audio-probe-song/segments/vocal_1.wav","apps/web/e2e/fixtures/review-workdir/audio-probe-song/segments/vocal_2.wav","apps/web/e2e/fixtures/review-workdir/audio-probe-song/status.json","apps/web/e2e/fixtures/review-workdir/audio-probe-song/vocals.wav","apps/web/e2e/fixtures/review-workdir/audio-probe-song_p2/line_times.json","apps/web/e2e/fixtures/review-workdir/nonaudio-source-probe/run_inputs.json","apps/web/src/app/api/review/edits/route.ts","apps/web/src/app/api/review/full-audio/route.ts","apps/web/src/lib/audio-source.ts","apps/web/src/lib/manual-edits.ts","apps/web/src/lib/review-artifacts.ts","docs/domain/review-manual-timing-blueprint.md","复核工作台.dc.html"],"removed":[],"modified":[".claude/launch.json",".gitignore","CLAUDE.md","apps/web/e2e/acceptance.spec.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/domain/owner-matrix.md","packages/contracts/package.json","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/model-assets.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"]},{"id":"88df9fddc74d13ebbc389e8ca265c8953c06bc22","message":"治理: /review 首个自动化验收——fixture 注入 + G29 null 字芯片用例,UI 地板 6→7\n\n- REVIEW_WORKDIR 注入点 + 仓内确定性 fixture(fixture-song,含 G29 null 时间字)\n- check:ui 第 7 例:字级时间面板渲染 / null 字禁用虚线芯片(title 无对齐证据)/\n 有证据字可点击试听\n- 负向测试:fixture 缺失整轮红且 e2e-results 显示仅新用例 ok:false(其余 6 绿)\n- 地板 uiTestsPassed 6→7、ownTestCases 62→63;报告绑定 gitSha 348939f5\n- 边界如实记:执行链路(C24 重跑刷新)仍无自动化,fixture 用例覆盖不到\n\ncheck / check:ui(7) 本机全绿。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics/commit/88df9fddc74d13ebbc389e8ca265c8953c06bc22","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-01T22:14:08-07:00","added":["apps/web/e2e/fixtures/review-workdir/fixture-song/alignment.json","apps/web/e2e/fixtures/review-workdir/fixture-song_p2/line_times.json"],"removed":[],"modified":["CLAUDE.md","apps/web/e2e/acceptance.spec.ts","docs/governance-experience.md","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/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":"03d95db096af66a1e7af7708a99156f194f2c702","message":"Merge branch 'governance/consolidate-20260902'(整合治理分支 f77fe27 + C29 手工合入 + C31–C36/G21/G30 关闭)\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/songformer-structure-lyrics/commit/03d95db096af66a1e7af7708a99156f194f2c702","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-02T16:39:01-07:00","added":[".agents/skills/business-module-intake/SKILL.md","apps/web/e2e/fixtures/review-workdir/audio-probe-song/alignment.json","apps/web/e2e/fixtures/review-workdir/audio-probe-song/lyrics.txt","apps/web/e2e/fixtures/review-workdir/audio-probe-song/run_inputs.json","apps/web/e2e/fixtures/review-workdir/audio-probe-song/segments/vocal_1.wav","apps/web/e2e/fixtures/review-workdir/audio-probe-song/segments/vocal_2.wav","apps/web/e2e/fixtures/review-workdir/audio-probe-song/status.json","apps/web/e2e/fixtures/review-workdir/audio-probe-song/vocals.wav","apps/web/e2e/fixtures/review-workdir/audio-probe-song_p2/line_times.json","apps/web/e2e/fixtures/review-workdir/fixture-song/alignment.json","apps/web/e2e/fixtures/review-workdir/fixture-song_p2/line_times.json","apps/web/e2e/fixtures/review-workdir/nonaudio-source-probe/run_inputs.json","apps/web/src/app/api/review/edits/route.ts","apps/web/src/app/api/review/full-audio/route.ts","apps/web/src/lib/audio-range.test.ts","apps/web/src/lib/audio-range.ts","apps/web/src/lib/audio-source.ts","apps/web/src/lib/export-format.test.ts","apps/web/src/lib/export-format.ts","apps/web/src/lib/manual-edits.ts","apps/web/src/lib/review-artifacts.test.ts","apps/web/src/lib/review-artifacts.ts","apps/web/src/lib/structure-mode.ts","apps/web/vitest.config.ts","config/structure-modes.v1.json","docs/domain/review-manual-timing-blueprint.md","reports/export-contract.freeze.json","reports/export-contract.latest.json","scripts/check-export-contract.mjs","scripts/download-model-assets.mjs","scripts/lib/agent-adapters.mjs","scripts/lib/provenance.mjs","scripts/normalize-model-manifest.mjs","scripts/setup-model-workers.mjs","scripts/sync-agent-skills.mjs","services/structure_lyrics/phase1/vocal_structure.py","services/structure_lyrics/tests/test_cli_declared.py","services/structure_lyrics/tests/test_ffmpeg_resolution.py","services/structure_lyrics/tests/test_vocal_structure.py","workers/demucs/README.md","复核工作台.dc.html"],"removed":["apps/web/pnpm-lock.yaml"],"modified":[".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/zustand-store/SKILL.md",".claude/agents/acceptance-runner.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/zustand-store/SKILL.md",".github/pull_request_template.md",".gitignore","CLAUDE.md","README.md","apps/web/e2e/acceptance.spec.ts","apps/web/package.json","apps/web/playwright.config.ts","apps/web/src/app/api/review/audio/route.ts","apps/web/src/app/api/review/browse/route.ts","apps/web/src/app/api/review/export/route.ts","apps/web/src/app/api/review/route.ts","apps/web/src/app/api/review/run/route.ts","apps/web/src/app/layout.tsx","apps/web/src/app/review/page.tsx","apps/web/src/lib/song-name.ts","apps/web/tailwind.config.ts","apps/web/tsconfig.json","docs/README.md","docs/adr/0001-use-typescript-fullstack.md","docs/adr/0005-use-prisma.md","docs/adr/0008-monorepo-pnpm-turborepo.md","docs/adr/README.md","docs/domain-glossary.md","docs/domain/owner-matrix.md","docs/domain/structure-lyrics-phase1-blueprint.md","docs/governance-experience.md","docs/migration-notes.md","docs/standards/api-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","models/model-assets.v1.json","package.json","packages/contracts/package.json","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/model-assets.latest.json","reports/model-evidence/htdemucs-smoke.latest.json","reports/model-evidence/mms-fa-smoke.latest.json","reports/model-evidence/qwen3-asr-smoke.latest.json","reports/model-evidence/structure-smoke.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/pipeline-tests.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-governance-docs.mjs","scripts/check-migrations.mjs","scripts/check-model-assets.mjs","scripts/check-naming.mjs","scripts/check-order-concurrency-guard.mjs","scripts/check-pipeline-tests.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","services/structure_lyrics/README.md","services/structure_lyrics/phase1/asr.py","services/structure_lyrics/phase1/audio.py","services/structure_lyrics/phase1/cli.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_language.py","services/structure_lyrics/tests/test_phase2.py","services/structure_lyrics/tests/test_tokenize.py","workers/demucs/requirements_demucs.txt","workers/demucs/run_separate.py","workers/mms-fa/run_mms_fa.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":false,"fork":false,"template":false,"mirror":false,"size":2585,"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":4,"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-09-03T07:39:02+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
|
3
|
5
|
1788392344
|
1788392386
|
0
|
1788392344
|
1788392386
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
24429
|
chore(reports): record 0.19.4 final acceptance
|
83
|
5
|
governance.yml
|
38
|
5
|
0
|
refs/heads/main
|
ade7e0c56c80d6d58fff7f4f3c7878fb8dc67bdd
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"d338bf17fb78f3f187688413c617d03cfe737750","after":"ade7e0c56c80d6d58fff7f4f3c7878fb8dc67bdd","compare_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/compare/d338bf17fb78f3f187688413c617d03cfe737750...ade7e0c56c80d6d58fff7f4f3c7878fb8dc67bdd","commits":[{"id":"ade7e0c56c80d6d58fff7f4f3c7878fb8dc67bdd","message":"chore(reports): record 0.19.4 final acceptance\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/commit/ade7e0c56c80d6d58fff7f4f3c7878fb8dc67bdd","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-23T08:37:24-07:00","added":[],"removed":[],"modified":["reports/contract-consumers.latest.json","reports/database-rls.latest.json","reports/docs-truth.latest.json","reports/dual-backend-behavior.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/health-dependency-failure.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/os-product-bundle.latest.json","reports/os-product-distribution.latest.json","reports/os-product-layer.latest.json","reports/outbox-multi-instance.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/ui-fastify-acceptance.latest.json","reports/validation-source.latest.json"]}],"total_commits":0,"head_commit":{"id":"ade7e0c56c80d6d58fff7f4f3c7878fb8dc67bdd","message":"chore(reports): record 0.19.4 final acceptance\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system/commit/ade7e0c56c80d6d58fff7f4f3c7878fb8dc67bdd","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-23T08:37:24-07:00","added":[],"removed":[],"modified":["reports/contract-consumers.latest.json","reports/database-rls.latest.json","reports/docs-truth.latest.json","reports/dual-backend-behavior.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/health-dependency-failure.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/os-product-bundle.latest.json","reports/os-product-distribution.latest.json","reports/os-product-layer.latest.json","reports/outbox-multi-instance.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/ui-fastify-acceptance.latest.json","reports/validation-source.latest.json"]},"repository":{"id":83,"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-hr-system","full_name":"luoanwu/juhai-ai-hr-system","description":"巨嗨 AI 人事系统:受治理全栈基础框架","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":7686,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-hr-system","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-ai-hr-system.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-hr-system.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":3,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-26T09:35:18+08:00","updated_at":"2026-09-23T23:28: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
|
3
|
5
|
1790177855
|
1790177904
|
0
|
1790177854
|
1790177904
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
25145
|
docs: 自动化执行与规模数字对齐代码(2026-10-03 订正)
|
51
|
5
|
ci.yml
|
15
|
5
|
0
|
refs/heads/main
|
22f20cb11e78f095552807569b78ee87e2516829
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"0f790bee5ab0fb5277c79c3667cf513fabd074b5","after":"22f20cb11e78f095552807569b78ee87e2516829","compare_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/compare/0f790bee5ab0fb5277c79c3667cf513fabd074b5...22f20cb11e78f095552807569b78ee87e2516829","commits":[{"id":"22f20cb11e78f095552807569b78ee87e2516829","message":"docs: 自动化执行与规模数字对齐代码(2026-10-03 订正)\n\n- 开发计划 v1.5 补「自动化执行」行并订正待拍板 ③:六项能力 WIRED 全 FULL(automation-runner,ebee195 于 07-16 并入 main),手动触发、只落本地库与审计;待拍的是自动调度与对外出站。v1.3 台账加订正注记,原文保留\n- 项目进展分析 07-01、项目阻塞点分析 B8、PRD 顶部各加订正注记,指回开发计划\n- CLAUDE.md / README:迁移 22→29、前端 API 方法 ~145→186、集成测试轮次 R0–R27、screens 文件 18→19,同步标签改为 2026-10-03 · 0f790be\n- 证据:docs-metrics 扫库;TEST_USE_CONTAINER=1 npm test 45 文件 324/324 @ 0f790be\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/22f20cb11e78f095552807569b78ee87e2516829","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T07:48:12-07:00","added":[],"removed":[],"modified":["CLAUDE.md","README.md","尤克特拉产品设计PRD.md","开发计划.md","项目进展分析_2026-07-01.md","项目阻塞点分析.md"]},{"id":"39defafd2e115f9b8dcad280a08dee3ba97d44d4","message":"fix(scripts): colima-start.sh --skip-colima 不再要求装 colima;COLIMA.md 按 Docker Desktop 实跑订正\n\n- 启动脚本只在要管理 Colima 时才检查 colima 命令,--skip-colima 可在只有 Docker Desktop 的机器上用\n- COLIMA.md:栈不依赖 Colima;补「已有 Docker 运行时」路径、重复启动需 --skip-port-check、停止用 --skip-context、端口取值两条路、地址池占满的排障\n- 证据:2026-10-03 Docker Desktop 29.7.2,隔离项目名 + 备用端口实跑,四项健康等待通过,--skip-context --volumes 收尾\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/39defafd2e115f9b8dcad280a08dee3ba97d44d4","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T07:48:12-07:00","added":[],"removed":[],"modified":["COLIMA.md","scripts/colima-start.sh"]}],"total_commits":0,"head_commit":{"id":"22f20cb11e78f095552807569b78ee87e2516829","message":"docs: 自动化执行与规模数字对齐代码(2026-10-03 订正)\n\n- 开发计划 v1.5 补「自动化执行」行并订正待拍板 ③:六项能力 WIRED 全 FULL(automation-runner,ebee195 于 07-16 并入 main),手动触发、只落本地库与审计;待拍的是自动调度与对外出站。v1.3 台账加订正注记,原文保留\n- 项目进展分析 07-01、项目阻塞点分析 B8、PRD 顶部各加订正注记,指回开发计划\n- CLAUDE.md / README:迁移 22→29、前端 API 方法 ~145→186、集成测试轮次 R0–R27、screens 文件 18→19,同步标签改为 2026-10-03 · 0f790be\n- 证据:docs-metrics 扫库;TEST_USE_CONTAINER=1 npm test 45 文件 324/324 @ 0f790be\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/22f20cb11e78f095552807569b78ee87e2516829","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T07:48:12-07:00","added":[],"removed":[],"modified":["CLAUDE.md","README.md","尤克特拉产品设计PRD.md","开发计划.md","项目进展分析_2026-07-01.md","项目阻塞点分析.md"]},"repository":{"id":51,"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":"yggdrasil-local-life-tools","full_name":"luoanwu/yggdrasil-local-life-tools","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":87680,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools/languages","html_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/yggdrasil-local-life-tools.git","clone_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools.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-02T16:02:07+08:00","updated_at":"2026-09-16T18:44:57+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
|
3
|
5
|
0
|
1791041752
|
0
|
1791039191
|
1791041752
|
group: ci-${{ github.ref }}
cancel-in-progress: group: ci-${{ github.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|
|
25146
|
merge: include completed project feature skill exp merge: include completed project feature skill experience...
|
51
|
5
|
ci.yml
|
16
|
5
|
0
|
refs/heads/main
|
ef60e0581c3f779fd3a9d709a18073882bceb9aa
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"22f20cb11e78f095552807569b78ee87e2516829","after":"ef60e0581c3f779fd3a9d709a18073882bceb9aa","compare_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/compare/22f20cb11e78f095552807569b78ee87e2516829...ef60e0581c3f779fd3a9d709a18073882bceb9aa","commits":[{"id":"ef60e0581c3f779fd3a9d709a18073882bceb9aa","message":"merge: include completed project feature skill experience\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/ef60e0581c3f779fd3a9d709a18073882bceb9aa","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T08:35:01-07:00","added":[],"removed":[],"modified":[".claude/skills/ygg-fullstack-feature/SKILL.md"]},{"id":"3bc8cedb095eb05b022cfb43edd3bc442fdf709d","message":"merge: include final credential log redaction and align security documentation\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/3bc8cedb095eb05b022cfb43edd3bc442fdf709d","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T08:35:01-07:00","added":["server/src/middleware/request-log.ts","server/test/request-log.unit.test.ts"],"removed":[],"modified":["CLAUDE.md","README.md","docs/merge-all-branches-2026-10-03.md","docs/platform-onboarding.md","docs/security-hardening-2026-10-03.md","server/.env.example","server/README.md","server/src/app.ts","团购本地生活AI运营App/WEB.md","开发计划.md","项目进展分析_2026-07-01.md"]},{"id":"3c84944cfb4940fb5bdf1c66d21f0c230cbf8cbd","message":"merge: reconcile both security hardening branches and contracts\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/3c84944cfb4940fb5bdf1c66d21f0c230cbf8cbd","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T08:24:04-07:00","added":["docs/merge-all-branches-2026-10-03.md","server/src/lib/session.ts","server/test/env-production-guard.unit.test.ts","server/test/error-sanitize.unit.test.ts","server/test/r28-auth-session.test.ts","server/test/r29-security-baseline.test.ts"],"removed":[],"modified":["e2e/playwright.config.ts","server/src/app.ts","server/src/config/env.ts","server/src/index.ts","server/src/lib/context.ts","server/src/lib/errors.ts","server/src/lib/jwt.ts","server/src/middleware/error.ts","server/src/middleware/security.ts","server/src/modules/auth/routes.ts","server/src/modules/auth/schema.ts","server/src/modules/auth/service.ts","server/src/openapi.ts","server/test/jwt-trust-boundary.unit.test.ts","server/test/r0-r1-auth.test.ts","server/test/security-http.unit.test.ts","团购本地生活AI运营App/api.js"]},{"id":"73dce48a6d8ae51bd55cfe1ede0e95d018e4ce1d","message":"docs(skills): ygg-fullstack-feature 补两条经验——api.js 方法前注释只能一行;鉴权改动的三层验证与 e2e 临时库跑法\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/73dce48a6d8ae51bd55cfe1ede0e95d018e4ce1d","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T08:23:45-07:00","added":[],"removed":[],"modified":[".claude/skills/ygg-fullstack-feature/SKILL.md"]},{"id":"f397db7cbfc55a20c2c877cc5da48771c5da5367","message":"docs: 加固冲刺落文档——安全基线说明、环境变量样例、开发计划登记\n\n- CLAUDE.md:会话绑定的鉴权约定、安全基线一节(生产配置拦截 / 限流 / 反向代理 / 错误体 / 健康检查);规模数字 185 端点 / 370 用例 / R0–R29\n- server/README:「安全基线与生产部署」一节,鉴权端点补 logout / logout-all,OpenAPI 158 paths / 185 operations\n- server/.env.example:TRUST_PROXY、限流与就绪探针变量,JWT_SECRET / CORS_ORIGINS 的生产要求\n- WEB.md 上线清单、platform-onboarding 身份一行同步\n- 开发计划 v1.5 表补「生产加固」行与证据;项目进展分析 07-01 的两处清单加订正\n- 证据:TEST_USE_CONTAINER=1 npm test 50 文件 370/370;Playwright 116/116 @ 82cbed1\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/f397db7cbfc55a20c2c877cc5da48771c5da5367","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T08:22:59-07:00","added":[],"removed":[],"modified":["CLAUDE.md","README.md","docs/platform-onboarding.md","server/.env.example","server/README.md","团购本地生活AI运营App/WEB.md","开发计划.md","项目进展分析_2026-07-01.md"]}],"total_commits":0,"head_commit":{"id":"ef60e0581c3f779fd3a9d709a18073882bceb9aa","message":"merge: include completed project feature skill experience\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/ef60e0581c3f779fd3a9d709a18073882bceb9aa","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T08:35:01-07:00","added":[],"removed":[],"modified":[".claude/skills/ygg-fullstack-feature/SKILL.md"]},"repository":{"id":51,"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":"yggdrasil-local-life-tools","full_name":"luoanwu/yggdrasil-local-life-tools","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":88091,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools/languages","html_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/yggdrasil-local-life-tools.git","clone_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools.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-02T16:02:07+08:00","updated_at":"2026-10-03T23:11: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
|
3
|
5
|
0
|
1791041861
|
0
|
1791041752
|
1791041861
|
group: ci-${{ github.ref }}
cancel-in-progress: group: ci-${{ github.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|
|
25148
|
docs: record all-branch merge acceptance and no-de docs: record all-branch merge acceptance and no-deployment boundary...
|
51
|
5
|
ci.yml
|
18
|
5
|
0
|
refs/heads/main
|
91baf1dd946e0668898de426705f1bd8added1d4
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"ef60e0581c3f779fd3a9d709a18073882bceb9aa","after":"91baf1dd946e0668898de426705f1bd8added1d4","compare_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/compare/ef60e0581c3f779fd3a9d709a18073882bceb9aa...91baf1dd946e0668898de426705f1bd8added1d4","commits":[{"id":"91baf1dd946e0668898de426705f1bd8added1d4","message":"docs: record all-branch merge acceptance and no-deployment boundary\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/91baf1dd946e0668898de426705f1bd8added1d4","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T08:37:38-07:00","added":[],"removed":[],"modified":["docs/merge-all-branches-2026-10-03.md"]}],"total_commits":0,"head_commit":{"id":"91baf1dd946e0668898de426705f1bd8added1d4","message":"docs: record all-branch merge acceptance and no-deployment boundary\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/91baf1dd946e0668898de426705f1bd8added1d4","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T08:37:38-07:00","added":[],"removed":[],"modified":["docs/merge-all-branches-2026-10-03.md"]},"repository":{"id":51,"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":"yggdrasil-local-life-tools","full_name":"luoanwu/yggdrasil-local-life-tools","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":88345,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools/languages","html_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/yggdrasil-local-life-tools.git","clone_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools.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-02T16:02:07+08:00","updated_at":"2026-10-03T23:35:52+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
|
3
|
5
|
0
|
1791043713
|
0
|
1791041861
|
1791043713
|
group: ci-${{ github.ref }}
cancel-in-progress: group: ci-${{ github.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|
|
25150
|
fix: govern real platform ingestion and database a fix: govern real platform ingestion and database audit integrity...
|
51
|
5
|
ci.yml
|
20
|
5
|
0
|
refs/heads/main
|
87f4c793c5c2e68cc8979412b7b1bd8ca5c527ea
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"91baf1dd946e0668898de426705f1bd8added1d4","after":"87f4c793c5c2e68cc8979412b7b1bd8ca5c527ea","compare_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/compare/91baf1dd946e0668898de426705f1bd8added1d4...87f4c793c5c2e68cc8979412b7b1bd8ca5c527ea","commits":[{"id":"87f4c793c5c2e68cc8979412b7b1bd8ca5c527ea","message":"fix: govern real platform ingestion and database audit integrity\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/87f4c793c5c2e68cc8979412b7b1bd8ca5c527ea","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T09:08:08-07:00","added":["docs/real-implementation-governance-2026-10-03.md","e2e/tests/06-platform-truth.spec.ts","server/test/platform-ingest-integrity.unit.test.ts","server/test/r30-platform-http-integrity.test.ts"],"removed":[],"modified":["CLAUDE.md","README.md","docs/reports/production-capability-truth-matrix-2026-06-12.md","e2e/README.md","e2e/package.json","server/README.md","server/src/adapters/platform/http.ts","server/src/modules/platforms/routes.ts","server/src/modules/platforms/schema.ts","server/src/modules/platforms/service.ts","server/src/openapi.ts","server/test/contract-schema.unit.test.ts","server/test/platform-adapter.unit.test.ts","团购本地生活AI运营App/ui.jsx","团购本地生活AI运营App/upgrades.jsx","开发计划.md","治理经验库.md","真实链路与状态机审计矩阵.md","项目阻塞点分析.md"]}],"total_commits":0,"head_commit":{"id":"87f4c793c5c2e68cc8979412b7b1bd8ca5c527ea","message":"fix: govern real platform ingestion and database audit integrity\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/87f4c793c5c2e68cc8979412b7b1bd8ca5c527ea","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T09:08:08-07:00","added":["docs/real-implementation-governance-2026-10-03.md","e2e/tests/06-platform-truth.spec.ts","server/test/platform-ingest-integrity.unit.test.ts","server/test/r30-platform-http-integrity.test.ts"],"removed":[],"modified":["CLAUDE.md","README.md","docs/reports/production-capability-truth-matrix-2026-06-12.md","e2e/README.md","e2e/package.json","server/README.md","server/src/adapters/platform/http.ts","server/src/modules/platforms/routes.ts","server/src/modules/platforms/schema.ts","server/src/modules/platforms/service.ts","server/src/openapi.ts","server/test/contract-schema.unit.test.ts","server/test/platform-adapter.unit.test.ts","团购本地生活AI运营App/ui.jsx","团购本地生活AI运营App/upgrades.jsx","开发计划.md","治理经验库.md","真实链路与状态机审计矩阵.md","项目阻塞点分析.md"]},"repository":{"id":51,"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":"yggdrasil-local-life-tools","full_name":"luoanwu/yggdrasil-local-life-tools","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":88351,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools/languages","html_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/yggdrasil-local-life-tools.git","clone_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools.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-02T16:02:07+08:00","updated_at":"2026-10-03T23:37: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
|
3
|
5
|
0
|
1791043768
|
0
|
1791043713
|
1791043768
|
group: ci-${{ github.ref }}
cancel-in-progress: group: ci-${{ github.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|
|
25152
|
docs: record real implementation acceptance and cl docs: record real implementation acceptance and cloud synchronization...
|
51
|
5
|
ci.yml
|
22
|
5
|
0
|
refs/heads/main
|
14faa2a20bbc99dda66a446ac86f9f304b3bd264
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"87f4c793c5c2e68cc8979412b7b1bd8ca5c527ea","after":"14faa2a20bbc99dda66a446ac86f9f304b3bd264","compare_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/compare/87f4c793c5c2e68cc8979412b7b1bd8ca5c527ea...14faa2a20bbc99dda66a446ac86f9f304b3bd264","commits":[{"id":"14faa2a20bbc99dda66a446ac86f9f304b3bd264","message":"docs: record real implementation acceptance and cloud synchronization\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/14faa2a20bbc99dda66a446ac86f9f304b3bd264","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T09:09:11-07:00","added":[],"removed":[],"modified":["docs/real-implementation-governance-2026-10-03.md"]}],"total_commits":0,"head_commit":{"id":"14faa2a20bbc99dda66a446ac86f9f304b3bd264","message":"docs: record real implementation acceptance and cloud synchronization\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/14faa2a20bbc99dda66a446ac86f9f304b3bd264","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T09:09:11-07:00","added":[],"removed":[],"modified":["docs/real-implementation-governance-2026-10-03.md"]},"repository":{"id":51,"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":"yggdrasil-local-life-tools","full_name":"luoanwu/yggdrasil-local-life-tools","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":88494,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools/languages","html_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/yggdrasil-local-life-tools.git","clone_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools.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-02T16:02:07+08:00","updated_at":"2026-10-04T00:08:33+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
|
3
|
5
|
0
|
1791068442
|
0
|
1791043768
|
1791068442
|
group: ci-${{ github.ref }}
cancel-in-progress: group: ci-${{ github.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|
|
25154
|
docs: 真实实现治理第二批落文档——范围、问题与修法、数据层约束、验收与未做项
|
51
|
5
|
ci.yml
|
24
|
5
|
0
|
refs/heads/main
|
bd2d1f6a36311732377749ff7387004fa7eb6fe2
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"14faa2a20bbc99dda66a446ac86f9f304b3bd264","after":"bd2d1f6a36311732377749ff7387004fa7eb6fe2","compare_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/compare/14faa2a20bbc99dda66a446ac86f9f304b3bd264...bd2d1f6a36311732377749ff7387004fa7eb6fe2","commits":[{"id":"bd2d1f6a36311732377749ff7387004fa7eb6fe2","message":"docs: 真实实现治理第二批落文档——范围、问题与修法、数据层约束、验收与未做项\n\n- docs/real-implementation-governance-batch2-2026-10-03.md:本批记录\n- 开发计划 v1.8 表补「第二批」行与指针;项目进展分析 07-01 数据层一节加订正\n- CLAUDE.md:查询参数走 lib/query.ts、状态变更必须 CAS、CHECK 约束迁移的做法、接口覆盖棘轮;规模数字 30 迁移 / 484 用例 / R0–R35\n- README / server README 数字同步\n- 治理经验库 G-014(量成功调用的接口)/ G-015(CAS 与同事务)/ G-016(不变式下沉数据库)\n- ygg-seed-migration-guard 技能补 CHECK 约束迁移的例外做法\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/bd2d1f6a36311732377749ff7387004fa7eb6fe2","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T09:38:15-07:00","added":["docs/real-implementation-governance-batch2-2026-10-03.md"],"removed":[],"modified":[".claude/skills/ygg-seed-migration-guard/SKILL.md","CLAUDE.md","README.md","server/README.md","开发计划.md","治理经验库.md","项目进展分析_2026-07-01.md"]},{"id":"acf778ab0ebebc39ad5f880a8305dc3ad212bf9b","message":"test(coverage): 接口覆盖棘轮 npm run test:routes——量「被测试成功调用过的接口」\n\n- test/helpers.ts:设了 ROUTE_COVERAGE_LOG 时记录每个请求的方法 / 路径 / 状态码,不设时行为不变\n- scripts/route-coverage.mjs:对照 OpenAPI 全部接口,列出没有任何 2xx 调用的;基线 test/route-coverage.baseline.json 只许变短\n- 首次测量(main 91baf1d)147 / 185;本分支补测后 181 / 185,余下 4 个都是平台授权 / 写回,原因写在基线里\n- r35 再补 AI 会话详情与装修实验删除两条;r33 的用例表改为内联字面量,docs-metrics 与 vitest 口径一致(484)\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/acf778ab0ebebc39ad5f880a8305dc3ad212bf9b","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T09:36:35-07:00","added":["server/scripts/route-coverage.mjs","server/test/route-coverage.baseline.json"],"removed":[],"modified":[".gitignore","server/package.json","server/test/helpers.ts","server/test/r33-data-integrity.test.ts","server/test/r35-uncovered-writes.test.ts"]},{"id":"b3c6eabc670e6f6e277643f41d4b865d446e3668","message":"fix(api): 门店与运维入参加上界;巡检负责人须是本店成员\n\n- POST/PATCH /stores:名称 / 分店 / 地址此前没有长度上限\n- 运维工单、巡检、卫生打卡的字符串与数组同样补上界\n- POST /ops/inspections 的 assigneeId 此前不校验归属,可以把别的租户的用户挂到本店巡检上;现与任务模块同口径,非本店成员 400\n- 新增 r35 13 例:门店管理、会员画像与流水、按会员归户、任务修改、预算迁移、巡检 / 工单升级 / 设备下架 / 卫生打卡,\n 以及几个只读接口——这些接口此前没有成功路径的真实库测试\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/b3c6eabc670e6f6e277643f41d4b865d446e3668","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T09:25:17-07:00","added":["server/test/r35-uncovered-writes.test.ts"],"removed":[],"modified":["server/src/modules/ops/schema.ts","server/src/modules/ops/service.ts","server/src/modules/store/schema.ts"]},{"id":"6c2876f40383761e808cd58d60cffea601383397","message":"fix(api): 看板与核销的查询参数加边界,非法值 400 而不是 500 或静默兜底\n\n- 新增 lib/query.ts:intQuery / dateQuery / assertDateRange\n- /orders?limit 封顶 200(此前原样当 take 传给数据库,limit=100000000 即全表读取)\n- period 限 1–366;此前 period=999999999 让 /orders/top-deals、/metrics/funnel 直接 500\n- /metrics/daily 的 from / to:非法日期此前 500,现在 400;起止颠倒、跨度超过 366 天同样 400\n- 非数字、小数、负数、重复参数不再被悄悄换成默认值\n- 新增 r34 17 例;前端只传 7 / 30 且不传 limit,不受影响\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/6c2876f40383761e808cd58d60cffea601383397","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T09:21:01-07:00","added":["server/src/lib/query.ts","server/test/r34-query-bounds.test.ts"],"removed":[],"modified":["server/src/modules/metrics/routes.ts","server/src/modules/orders/routes.ts"]},{"id":"90523e8d28d9c250c555d78e0d56818117497df7","message":"feat(db): 金额 / 次数 / 名额的不变式下沉为数据库 CHECK 约束\n\n- 新迁移 20261003161609_data_integrity_checks:21 条 CHECK,覆盖钱包余额与流水方向、次卡次数、拼团名额(不超卖)、\n 订单 / SKU / 门店价 / 投放 / 补救 / 竞品金额、资源容量与低消、预约时间范围\n- 应用层原本已用 zod + CAS 守着;这是第二道,应用 bug、脚本或手工 SQL 也写不进非法值\n- 迁移经 prisma migrate dev --create-only 生成后手写 SQL(Prisma schema 表达不了 CHECK);schema.prisma 无变化,migrate diff 无漂移\n- 现有种子与全量测试(55 文件 428 例)均不触发约束\n- WalletTxn 的 REFUND 方向不约束:schema 注释写记正、种子写记负、应用代码不写这一类型,口径待定\n- 新增 r33 18 例:绕过 API 直接写库,逐条验证被拒并点名约束\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/90523e8d28d9c250c555d78e0d56818117497df7","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T09:20:37-07:00","added":["server/prisma/migrations/20261003161609_data_integrity_checks/migration.sql","server/test/r33-data-integrity.test.ts"],"removed":[],"modified":[]}],"total_commits":0,"head_commit":{"id":"bd2d1f6a36311732377749ff7387004fa7eb6fe2","message":"docs: 真实实现治理第二批落文档——范围、问题与修法、数据层约束、验收与未做项\n\n- docs/real-implementation-governance-batch2-2026-10-03.md:本批记录\n- 开发计划 v1.8 表补「第二批」行与指针;项目进展分析 07-01 数据层一节加订正\n- CLAUDE.md:查询参数走 lib/query.ts、状态变更必须 CAS、CHECK 约束迁移的做法、接口覆盖棘轮;规模数字 30 迁移 / 484 用例 / R0–R35\n- README / server README 数字同步\n- 治理经验库 G-014(量成功调用的接口)/ G-015(CAS 与同事务)/ G-016(不变式下沉数据库)\n- ygg-seed-migration-guard 技能补 CHECK 约束迁移的例外做法\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/bd2d1f6a36311732377749ff7387004fa7eb6fe2","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T09:38:15-07:00","added":["docs/real-implementation-governance-batch2-2026-10-03.md"],"removed":[],"modified":[".claude/skills/ygg-seed-migration-guard/SKILL.md","CLAUDE.md","README.md","server/README.md","开发计划.md","治理经验库.md","项目进展分析_2026-07-01.md"]},"repository":{"id":51,"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":"yggdrasil-local-life-tools","full_name":"luoanwu/yggdrasil-local-life-tools","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":88503,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools/languages","html_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/yggdrasil-local-life-tools.git","clone_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools.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-02T16:02:07+08:00","updated_at":"2026-10-04T00:09: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
|
3
|
5
|
0
|
1791068467
|
0
|
1791068442
|
1791068467
|
group: ci-${{ github.ref }}
cancel-in-progress: group: ci-${{ github.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|
|
25156
|
docs: 记录真实实现治理第二批已并入 main 并推 Gitea
|
51
|
5
|
ci.yml
|
26
|
5
|
0
|
refs/heads/main
|
eec3099126197721a5d2437962c531943e5a90b1
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"bd2d1f6a36311732377749ff7387004fa7eb6fe2","after":"eec3099126197721a5d2437962c531943e5a90b1","compare_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/compare/bd2d1f6a36311732377749ff7387004fa7eb6fe2...eec3099126197721a5d2437962c531943e5a90b1","commits":[{"id":"eec3099126197721a5d2437962c531943e5a90b1","message":"docs: 记录真实实现治理第二批已并入 main 并推 Gitea\n\n快进合入,远端 main 读数 bd2d1f6 与本地一致;合入的树即验收时的树。原分支已删除,未部署。\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/eec3099126197721a5d2437962c531943e5a90b1","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T16:01:04-07:00","added":[],"removed":[],"modified":["docs/real-implementation-governance-batch2-2026-10-03.md","开发计划.md"]}],"total_commits":0,"head_commit":{"id":"eec3099126197721a5d2437962c531943e5a90b1","message":"docs: 记录真实实现治理第二批已并入 main 并推 Gitea\n\n快进合入,远端 main 读数 bd2d1f6 与本地一致;合入的树即验收时的树。原分支已删除,未部署。\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/eec3099126197721a5d2437962c531943e5a90b1","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T16:01:04-07:00","added":[],"removed":[],"modified":["docs/real-implementation-governance-batch2-2026-10-03.md","开发计划.md"]},"repository":{"id":51,"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":"yggdrasil-local-life-tools","full_name":"luoanwu/yggdrasil-local-life-tools","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":88671,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools/languages","html_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/yggdrasil-local-life-tools.git","clone_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools.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-02T16:02:07+08:00","updated_at":"2026-10-04T07:00:42+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
|
3
|
5
|
0
|
1791070492
|
0
|
1791068467
|
1791070492
|
group: ci-${{ github.ref }}
cancel-in-progress: group: ci-${{ github.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|
|
25159
|
docs: 记录两条口径裁定及其落地——退款流水记正、装修实验任何状态可删
|
51
|
5
|
ci.yml
|
28
|
5
|
0
|
refs/heads/main
|
ae09f6d0bf9de0927efc51dde6cd8acc4811c9b3
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"eec3099126197721a5d2437962c531943e5a90b1","after":"ae09f6d0bf9de0927efc51dde6cd8acc4811c9b3","compare_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/compare/eec3099126197721a5d2437962c531943e5a90b1...ae09f6d0bf9de0927efc51dde6cd8acc4811c9b3","commits":[{"id":"ae09f6d0bf9de0927efc51dde6cd8acc4811c9b3","message":"docs: 记录两条口径裁定及其落地——退款流水记正、装修实验任何状态可删\n\n- 第二批治理记录补「口径裁定后的补充」一节:迁移对已有数据的处理、种子订正、审计、验收\n- 开发计划第二批行与规模读数(31 迁移)、CLAUDE.md 迁移数、治理经验库 G-016 证据同步\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/ae09f6d0bf9de0927efc51dde6cd8acc4811c9b3","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T16:25:44-07:00","added":[],"removed":[],"modified":["CLAUDE.md","docs/real-implementation-governance-batch2-2026-10-03.md","开发计划.md","治理经验库.md"]},{"id":"5bc6a053018e97e55e272f9fa4b7aeff8df69eb5","message":"feat(decor): 删除装修实验留审计;「任何状态可删」用测试固定\n\n用户 2026-10-03 裁定:进行中或已采纳的装修实验可以删。行为不变。\n\n- 删除与一条审计(名称、被测要素、删除时状态、赢家变体、变体数)同事务:实验与变体删了就没了,审计是唯一痕迹\n- r35 对应用例扩为草稿 / 进行中 / 已采纳各删一遍,断言三条审计、已采纳写回门面的值不回退、别的租户删不了(用例数不变)\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/5bc6a053018e97e55e272f9fa4b7aeff8df69eb5","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T16:25:44-07:00","added":[],"removed":[],"modified":["server/src/modules/decor/abtest.ts","server/test/r35-uncovered-writes.test.ts"]},{"id":"6507b0c80e396f5d4bf0ca1dbf9de495f9538802","message":"feat(db): 钱包退款流水记正——约束收紧到「只有抵扣记负」,订正种子\n\n用户 2026-10-03 裁定:REFUND = 退款回滚,把此前抵扣的钱退回钱包,记正。\n\n- 新迁移 20261003231916_wallet_refund_positive:WalletTxn_amount_sign 改为只有 DEDUCT 可为负,其余类型(含 REFUND)不得为负\n- 先 NOT VALID 加上(立刻约束此后的写入),库里没有旧的负数退款行时紧接着校验;有旧行的库不回改数据\n- 实测两条路径:全新库 convalidated = t;旧种子灌过的库(4 条负数退款行)迁移正常应用、新写入被拒、重新 seed 后手工 VALIDATE 成功\n- 种子此前把退款当扣减算余额,改为加回;两个品类的赵女士各补一笔 ¥128 抵扣,让 ¥50 退款回滚有东西可退\n- r33 对应用例改为:负数退款被拒、正数可写、种子退款为正且余额等于流水之和(用例数不变)\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/6507b0c80e396f5d4bf0ca1dbf9de495f9538802","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T16:25:44-07:00","added":["server/prisma/migrations/20261003231916_wallet_refund_positive/migration.sql"],"removed":[],"modified":["server/prisma/seed.ts","server/test/r33-data-integrity.test.ts"]}],"total_commits":0,"head_commit":{"id":"ae09f6d0bf9de0927efc51dde6cd8acc4811c9b3","message":"docs: 记录两条口径裁定及其落地——退款流水记正、装修实验任何状态可删\n\n- 第二批治理记录补「口径裁定后的补充」一节:迁移对已有数据的处理、种子订正、审计、验收\n- 开发计划第二批行与规模读数(31 迁移)、CLAUDE.md 迁移数、治理经验库 G-016 证据同步\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/ae09f6d0bf9de0927efc51dde6cd8acc4811c9b3","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T16:25:44-07:00","added":[],"removed":[],"modified":["CLAUDE.md","docs/real-implementation-governance-batch2-2026-10-03.md","开发计划.md","治理经验库.md"]},"repository":{"id":51,"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":"yggdrasil-local-life-tools","full_name":"luoanwu/yggdrasil-local-life-tools","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":88697,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools/languages","html_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/yggdrasil-local-life-tools.git","clone_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools.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-02T16:02:07+08:00","updated_at":"2026-10-04T07:01:07+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
|
3
|
5
|
0
|
1791070515
|
0
|
1791070492
|
1791070515
|
group: ci-${{ github.ref }}
cancel-in-progress: group: ci-${{ github.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|
|
25161
|
docs: 记录口径裁定两项已并入 main 并推 Gitea
|
51
|
5
|
ci.yml
|
30
|
5
|
0
|
refs/heads/main
|
50f92bc0038f667e701d2a53120e2691a831f381
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"ae09f6d0bf9de0927efc51dde6cd8acc4811c9b3","after":"50f92bc0038f667e701d2a53120e2691a831f381","compare_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/compare/ae09f6d0bf9de0927efc51dde6cd8acc4811c9b3...50f92bc0038f667e701d2a53120e2691a831f381","commits":[{"id":"50f92bc0038f667e701d2a53120e2691a831f381","message":"docs: 记录口径裁定两项已并入 main 并推 Gitea\n\n快进合入,远端 main 读数 ae09f6d 与本地一致;主检出里另一会话的在途改动未受影响。未部署。\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/50f92bc0038f667e701d2a53120e2691a831f381","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T16:35:11-07:00","added":[],"removed":[],"modified":["docs/real-implementation-governance-batch2-2026-10-03.md"]}],"total_commits":0,"head_commit":{"id":"50f92bc0038f667e701d2a53120e2691a831f381","message":"docs: 记录口径裁定两项已并入 main 并推 Gitea\n\n快进合入,远端 main 读数 ae09f6d 与本地一致;主检出里另一会话的在途改动未受影响。未部署。\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/50f92bc0038f667e701d2a53120e2691a831f381","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T16:35:11-07:00","added":[],"removed":[],"modified":["docs/real-implementation-governance-batch2-2026-10-03.md"]},"repository":{"id":51,"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":"yggdrasil-local-life-tools","full_name":"luoanwu/yggdrasil-local-life-tools","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":88802,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools/languages","html_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/yggdrasil-local-life-tools.git","clone_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools.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-02T16:02:07+08:00","updated_at":"2026-10-04T07:34:52+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
|
3
|
5
|
0
|
1791071298
|
0
|
1791070515
|
1791071298
|
group: ci-${{ github.ref }}
cancel-in-progress: group: ci-${{ github.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|
|
25164
|
merge: preserve approved refund governance alongsi merge: preserve approved refund governance alongside external integrations...
|
51
|
5
|
ci.yml
|
32
|
5
|
0
|
refs/heads/main
|
3c9ccff1ba6415660a29cb99c8a4b4b1ce6eccc2
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"50f92bc0038f667e701d2a53120e2691a831f381","after":"3c9ccff1ba6415660a29cb99c8a4b4b1ce6eccc2","compare_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/compare/50f92bc0038f667e701d2a53120e2691a831f381...3c9ccff1ba6415660a29cb99c8a4b4b1ce6eccc2","commits":[{"id":"3c9ccff1ba6415660a29cb99c8a4b4b1ce6eccc2","message":"merge: preserve approved refund governance alongside external integrations\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/3c9ccff1ba6415660a29cb99c8a4b4b1ce6eccc2","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T16:48:13-07:00","added":["server/prisma/migrations/20261003231916_wallet_refund_positive/migration.sql"],"removed":[],"modified":["CLAUDE.md","docs/external-integrations-2026-10-03.md","docs/real-implementation-governance-batch2-2026-10-03.md","server/README.md","server/prisma/seed.ts","server/src/modules/decor/abtest.ts","server/test/r33-data-integrity.test.ts","server/test/r35-uncovered-writes.test.ts","开发计划.md","治理经验库.md","真实链路与状态机审计矩阵.md"]},{"id":"06920096ee8e9d4502e10f2e6c941485ef20f3d0","message":"fix(integrations): guard payment amounts and finalize protocol regression coverage\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/06920096ee8e9d4502e10f2e6c941485ef20f3d0","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T16:43:36-07:00","added":["server/prisma/migrations/20261003233431_wechat_payment_amount_checks/migration.sql"],"removed":[],"modified":["CLAUDE.md","README.md","docs/external-integrations-2026-10-03.md","docs/loop-engineering/acceptance-checklist.md","docs/loop-engineering/api-contract.md","docs/reports/production-capability-truth-matrix-2026-06-12.md","server/.env.example","server/README.md","server/src/adapters/ai/real.ts","server/src/modules/platforms/service.ts","server/test/ai-real-http.unit.test.ts","server/test/helpers.ts","server/test/r30-platform-http-integrity.test.ts","server/test/r33-data-integrity.test.ts","server/test/r36-wechat-native.test.ts","server/test/route-coverage.baseline.json","团购本地生活AI运营App/README.md","开发计划.md","治理经验库.md","真实链路与状态机审计矩阵.md"]},{"id":"ea791b4795fec986c2a985d5ac1c68f26b4fce9f","message":"Merge branch 'main' into codex/external-integrations-20261003\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/ea791b4795fec986c2a985d5ac1c68f26b4fce9f","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T16:31:04-07:00","added":["docs/real-implementation-governance-batch2-2026-10-03.md","server/prisma/migrations/20261003161609_data_integrity_checks/migration.sql","server/scripts/route-coverage.mjs","server/src/lib/query.ts","server/test/r31-leads.test.ts","server/test/r32-resources.test.ts","server/test/r33-data-integrity.test.ts","server/test/r34-query-bounds.test.ts","server/test/r35-uncovered-writes.test.ts","server/test/route-coverage.baseline.json"],"removed":[],"modified":[".claude/skills/ygg-seed-migration-guard/SKILL.md",".gitignore","CLAUDE.md","README.md","server/README.md","server/package.json","server/src/modules/booking/service.ts","server/src/modules/leads/service.ts","server/src/modules/metrics/routes.ts","server/src/modules/ops/schema.ts","server/src/modules/ops/service.ts","server/src/modules/orders/routes.ts","server/src/modules/resources/schema.ts","server/src/modules/store/schema.ts","server/src/modules/wallet/service.ts","server/test/helpers.ts","开发计划.md","治理经验库.md","项目进展分析_2026-07-01.md"]},{"id":"a0d31127ccede37badd24d82386f64b5b4fef95a","message":"feat(integrations): add verified WeChat Native topups and bounded AI/platform transport\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/a0d31127ccede37badd24d82386f64b5b4fef95a","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T16:31:04-07:00","added":["docs/external-integrations-2026-10-03.md","e2e/tests/07-payment-topup.spec.ts","server/prisma/migrations/20261003231027_wechat_native_topups/migration.sql","server/src/adapters/payment/wechatpay.ts","server/src/lib/external-http.ts","server/src/modules/payments/routes.ts","server/src/modules/payments/schema.ts","server/src/modules/payments/service.ts","server/test/ai-real-http.unit.test.ts","server/test/external-http.unit.test.ts","server/test/payment-contract.unit.test.ts","server/test/r36-wechat-native.test.ts","server/test/wechatpay.unit.test.ts"],"removed":[],"modified":["e2e/package.json","server/.env.example","server/package-lock.json","server/package.json","server/prisma/schema.prisma","server/src/adapters/ai/real.ts","server/src/adapters/ocr/vision.ts","server/src/adapters/platform/http.ts","server/src/app.ts","server/src/config/env.ts","server/src/index.ts","server/src/lib/errors.ts","server/src/middleware/request-log.ts","server/src/modules/platforms/service.ts","server/src/modules/wallet/service.ts","server/src/openapi.ts","server/src/routes.ts","server/test/ai-provider.unit.test.ts","server/test/env-production-guard.unit.test.ts","server/test/ocr-provider.unit.test.ts","server/test/platform-adapter.unit.test.ts","server/test/platform-ingest-integrity.unit.test.ts","server/test/request-log.unit.test.ts","团购本地生活AI运营App/api.js","团购本地生活AI运营App/screen-governance.generated.json","团购本地生活AI运营App/screens-member.jsx","团购本地生活AI运营App/scripts/screen-governance.mjs","团购本地生活AI运营App/scripts/test-static.mjs"]}],"total_commits":0,"head_commit":{"id":"3c9ccff1ba6415660a29cb99c8a4b4b1ce6eccc2","message":"merge: preserve approved refund governance alongside external integrations\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/3c9ccff1ba6415660a29cb99c8a4b4b1ce6eccc2","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T16:48:13-07:00","added":["server/prisma/migrations/20261003231916_wallet_refund_positive/migration.sql"],"removed":[],"modified":["CLAUDE.md","docs/external-integrations-2026-10-03.md","docs/real-implementation-governance-batch2-2026-10-03.md","server/README.md","server/prisma/seed.ts","server/src/modules/decor/abtest.ts","server/test/r33-data-integrity.test.ts","server/test/r35-uncovered-writes.test.ts","开发计划.md","治理经验库.md","真实链路与状态机审计矩阵.md"]},"repository":{"id":51,"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":"yggdrasil-local-life-tools","full_name":"luoanwu/yggdrasil-local-life-tools","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":88810,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools/languages","html_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/yggdrasil-local-life-tools.git","clone_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools.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-02T16:02:07+08:00","updated_at":"2026-10-04T07:35:15+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
|
3
|
5
|
0
|
1791071397
|
0
|
1791071298
|
1791071397
|
group: ci-${{ github.ref }}
cancel-in-progress: group: ci-${{ github.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|
|
25166
|
docs: record verified integrations and cloud-main docs: record verified integrations and cloud-main synchronization boundaries...
|
51
|
5
|
ci.yml
|
34
|
5
|
0
|
refs/heads/main
|
c847b8b9be80c7c5cef0f97d9c9838442e1cb2cb
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"3c9ccff1ba6415660a29cb99c8a4b4b1ce6eccc2","after":"c847b8b9be80c7c5cef0f97d9c9838442e1cb2cb","compare_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/compare/3c9ccff1ba6415660a29cb99c8a4b4b1ce6eccc2...c847b8b9be80c7c5cef0f97d9c9838442e1cb2cb","commits":[{"id":"c847b8b9be80c7c5cef0f97d9c9838442e1cb2cb","message":"docs: record verified integrations and cloud-main synchronization boundaries\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/c847b8b9be80c7c5cef0f97d9c9838442e1cb2cb","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T16:49:53-07:00","added":[],"removed":[],"modified":["docs/external-integrations-2026-10-03.md"]}],"total_commits":0,"head_commit":{"id":"c847b8b9be80c7c5cef0f97d9c9838442e1cb2cb","message":"docs: record verified integrations and cloud-main synchronization boundaries\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/c847b8b9be80c7c5cef0f97d9c9838442e1cb2cb","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T16:49:53-07:00","added":[],"removed":[],"modified":["docs/external-integrations-2026-10-03.md"]},"repository":{"id":51,"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":"yggdrasil-local-life-tools","full_name":"luoanwu/yggdrasil-local-life-tools","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":89160,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools/languages","html_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/yggdrasil-local-life-tools.git","clone_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools.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-02T16:02:07+08:00","updated_at":"2026-10-04T07:48:18+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
|
3
|
5
|
0
|
1791071672
|
0
|
1791071397
|
1791071672
|
group: ci-${{ github.ref }}
cancel-in-progress: group: ci-${{ github.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|
|
25168
|
merge: 并入本地 main 的文档订正(约束条数 21 → 18、开发库应用记录)
|
51
|
5
|
ci.yml
|
36
|
5
|
0
|
refs/heads/main
|
ee7e038fc69366df08ed6e33d0c64b391e68169f
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"c847b8b9be80c7c5cef0f97d9c9838442e1cb2cb","after":"ee7e038fc69366df08ed6e33d0c64b391e68169f","compare_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/compare/c847b8b9be80c7c5cef0f97d9c9838442e1cb2cb...ee7e038fc69366df08ed6e33d0c64b391e68169f","commits":[{"id":"ee7e038fc69366df08ed6e33d0c64b391e68169f","message":"merge: 并入本地 main 的文档订正(约束条数 21 → 18、开发库应用记录)\n\n远端 main 在本地提交 ab1252f 之后又进了外部对接的提交,两边分叉。合并而不变基,双方提交 SHA 不变。\n\n- 唯一冲突在 治理经验库.md 末尾:远端在 G-016 之后追加了 G-017 / G-018,本地订正了 G-016 的证据行。保留远端追加的内容,并应用订正\n- docs/external-integrations-2026-10-03.md 引用的「21 条约束」同样订正为 18(该数字出自第二批记录的错误)\n- 第二批记录补一句:开发库已一并应用外部对接的两个迁移,现为 33 个迁移、26 条 CHECK 全部已校验\n\n相对 origin/main 只改文档,不含代码。\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/ee7e038fc69366df08ed6e33d0c64b391e68169f","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T16:52:57-07:00","added":[],"removed":[],"modified":["docs/external-integrations-2026-10-03.md","docs/real-implementation-governance-batch2-2026-10-03.md","开发计划.md","治理经验库.md","项目进展分析_2026-07-01.md"]},{"id":"ab1252fb4af1376318a11cef1dc94bee26bce682","message":"docs: 订正约束条数(21 → 18),记录开发库已应用迁移并重新灌种子\n\n- 第一批完整性迁移实际新增 18 条 CHECK 约束;此前写作 21,是把库里别处的约束一并数了进去。四处文档同步订正\n- 其中门店价非负一条与 20260603223000 迁移里已有的 StoreSkuPrice_priceCents_nonnegative 同义,属重复,无害,如实记下\n- 开发库(yggdrasil-colima 数据卷)2026-10-03 已应用 31 个迁移并重新灌种子:先整库备份;public 下 23 条 CHECK 全部已校验;余额等于流水之和;当前代码连库 /health 200、可登录\n\n开发计划.md 与 治理经验库.md 另有并行会话未提交的在途改动,本提交只含上述订正那一行,不带它们的内容。\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/ab1252fb4af1376318a11cef1dc94bee26bce682","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T16:48:01-07:00","added":[],"removed":[],"modified":["docs/real-implementation-governance-batch2-2026-10-03.md","开发计划.md","治理经验库.md","项目进展分析_2026-07-01.md"]}],"total_commits":0,"head_commit":{"id":"ee7e038fc69366df08ed6e33d0c64b391e68169f","message":"merge: 并入本地 main 的文档订正(约束条数 21 → 18、开发库应用记录)\n\n远端 main 在本地提交 ab1252f 之后又进了外部对接的提交,两边分叉。合并而不变基,双方提交 SHA 不变。\n\n- 唯一冲突在 治理经验库.md 末尾:远端在 G-016 之后追加了 G-017 / G-018,本地订正了 G-016 的证据行。保留远端追加的内容,并应用订正\n- docs/external-integrations-2026-10-03.md 引用的「21 条约束」同样订正为 18(该数字出自第二批记录的错误)\n- 第二批记录补一句:开发库已一并应用外部对接的两个迁移,现为 33 个迁移、26 条 CHECK 全部已校验\n\n相对 origin/main 只改文档,不含代码。\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/ee7e038fc69366df08ed6e33d0c64b391e68169f","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T16:52:57-07:00","added":[],"removed":[],"modified":["docs/external-integrations-2026-10-03.md","docs/real-implementation-governance-batch2-2026-10-03.md","开发计划.md","治理经验库.md","项目进展分析_2026-07-01.md"]},"repository":{"id":51,"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":"yggdrasil-local-life-tools","full_name":"luoanwu/yggdrasil-local-life-tools","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":89172,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools/languages","html_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/yggdrasil-local-life-tools.git","clone_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools.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-02T16:02:07+08:00","updated_at":"2026-10-04T07:49:57+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
|
3
|
5
|
0
|
1791072563
|
0
|
1791071672
|
1791072563
|
group: ci-${{ github.ref }}
cancel-in-progress: group: ci-${{ github.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|
|
25171
|
merge: preserve synchronized deployment and constr merge: preserve synchronized deployment and constraint records...
|
51
|
5
|
ci.yml
|
38
|
5
|
0
|
refs/heads/main
|
a244264ab360d733e9cdc0bd5573a49bc6e7a570
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"ee7e038fc69366df08ed6e33d0c64b391e68169f","after":"a244264ab360d733e9cdc0bd5573a49bc6e7a570","compare_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/compare/ee7e038fc69366df08ed6e33d0c64b391e68169f...a244264ab360d733e9cdc0bd5573a49bc6e7a570","commits":[{"id":"a244264ab360d733e9cdc0bd5573a49bc6e7a570","message":"merge: preserve synchronized deployment and constraint records\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/a244264ab360d733e9cdc0bd5573a49bc6e7a570","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T17:09:19-07:00","added":[],"removed":[],"modified":["docs/real-implementation-governance-batch2-2026-10-03.md"]},{"id":"cff582baff68de685f6a7fc797447145ecfe064a","message":"merge: complete module governance with native payments and guarded automation\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/cff582baff68de685f6a7fc797447145ecfe064a","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T17:08:57-07:00","added":["docs/deployments/missing-module-local-2026-10-03.md","docs/external-integrations-2026-10-03.md","e2e/tests/07-payment-topup.spec.ts","server/prisma/migrations/20261003231027_wechat_native_topups/migration.sql","server/prisma/migrations/20261003233431_wechat_payment_amount_checks/migration.sql","server/src/adapters/payment/wechatpay.ts","server/src/lib/automation-lock.ts","server/src/lib/external-http.ts","server/src/modules/payments/routes.ts","server/src/modules/payments/schema.ts","server/src/modules/payments/service.ts","server/test/ai-real-http.unit.test.ts","server/test/external-http.unit.test.ts","server/test/payment-contract.unit.test.ts","server/test/r36-wechat-native.test.ts","server/test/r40-automation-lock.test.ts","server/test/wechatpay.unit.test.ts"],"removed":[],"modified":["CLAUDE.md","README.md","docs/loop-engineering/acceptance-checklist.md","docs/loop-engineering/api-contract.md","docs/missing-module-governance-2026-10-03.md","docs/reports/production-capability-truth-matrix-2026-06-12.md","e2e/package.json","e2e/tests/07-governance.spec.ts","scripts/docs-metrics.mjs","server/.env.example","server/README.md","server/package-lock.json","server/package.json","server/prisma/schema.prisma","server/src/adapters/ai/real.ts","server/src/adapters/competitor/vendor.ts","server/src/adapters/ocr/vision.ts","server/src/adapters/platform/http.ts","server/src/adapters/weather/index.ts","server/src/app.ts","server/src/config/env.ts","server/src/index.ts","server/src/lib/errors.ts","server/src/middleware/request-log.ts","server/src/modules/automation-runner/service.ts","server/src/modules/billing/service.ts","server/src/modules/campaigns/service.ts","server/src/modules/operations/notifications.ts","server/src/modules/platforms/service.ts","server/src/modules/pricing/service.ts","server/src/modules/reviews/service.ts","server/src/modules/wallet/service.ts","server/src/openapi.ts","server/src/routes.ts","server/test/ai-provider.unit.test.ts","server/test/env-production-guard.unit.test.ts","server/test/external-data-adapters.unit.test.ts","server/test/helpers.ts","server/test/ocr-provider.unit.test.ts","server/test/platform-adapter.unit.test.ts","server/test/platform-ingest-integrity.unit.test.ts","server/test/r30-platform-http-integrity.test.ts","server/test/r33-data-integrity.test.ts","server/test/request-log.unit.test.ts","server/test/route-coverage.baseline.json","团购本地生活AI运营App/README.md","团购本地生活AI运营App/api.js","团购本地生活AI运营App/screen-governance.generated.json","团购本地生活AI运营App/screens-member.jsx","团购本地生活AI运营App/screens-more.jsx","团购本地生活AI运营App/scripts/screen-governance.mjs","团购本地生活AI运营App/scripts/test-static.mjs","开发计划.md","治理经验库.md","真实链路与状态机审计矩阵.md"]},{"id":"8b6616eb0a800d4478bb8e3d2038c33d7f8914a4","message":"feat: govern missing identity billing and durable operations modules\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/8b6616eb0a800d4478bb8e3d2038c33d7f8914a4","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T16:52:38-07:00","added":["docs/contracts/billing-governance.md","docs/contracts/external-data-adapters.md","docs/contracts/identity-governance.md","docs/contracts/operational-governance.md","docs/missing-module-governance-2026-10-03.md","e2e/tests/07-governance.spec.ts","server/prisma/migrations/20261003233848_missing_module_governance/migration.sql","server/src/adapters/competitor/vendor.ts","server/src/middleware/entitlement.ts","server/src/modules/billing/routes.ts","server/src/modules/billing/schema.ts","server/src/modules/billing/service.ts","server/src/modules/operations/notifications.ts","server/src/modules/operations/routes.ts","server/src/modules/operations/schema.ts","server/src/modules/operations/service.ts","server/src/modules/support/routes.ts","server/src/modules/support/schema.ts","server/src/modules/support/service.ts","server/src/modules/team/routes.ts","server/src/modules/team/schema.ts","server/src/modules/team/service.ts","server/test/external-data-adapters.unit.test.ts","server/test/r36-identity.test.ts","server/test/r37-billing.test.ts","server/test/r38-operations.test.ts","server/test/r39-entitlement.test.ts","团购本地生活AI运营App/scripts/test-auth-governance.mjs"],"removed":[],"modified":["CLAUDE.md","README.md","e2e/package.json","e2e/utils/app.ts","server/.env.example","server/prisma/schema.prisma","server/prisma/seed.ts","server/src/adapters/competitor/index.ts","server/src/adapters/competitor/manual.ts","server/src/adapters/competitor/provider.ts","server/src/adapters/weather/index.ts","server/src/app.ts","server/src/config/env.ts","server/src/index.ts","server/src/middleware/auth.ts","server/src/middleware/request-log.ts","server/src/modules/auth/routes.ts","server/src/modules/auth/schema.ts","server/src/modules/auth/service.ts","server/src/modules/automation-runner/service.ts","server/src/modules/briefing/service.ts","server/src/modules/leads/service.ts","server/src/modules/ops/service.ts","server/src/modules/periphery/competitor-intel.ts","server/src/modules/store/routes.ts","server/src/modules/store/service.ts","server/src/modules/subscription/service.ts","server/src/modules/tasks/service.ts","server/src/openapi.ts","server/src/routes.ts","server/test/request-log.unit.test.ts","团购本地生活AI运营App/api.js","团购本地生活AI运营App/app.jsx","团购本地生活AI运营App/package.json","团购本地生活AI运营App/screen-governance.generated.json","团购本地生活AI运营App/screens-more.jsx","团购本地生活AI运营App/screens-p1.jsx","团购本地生活AI运营App/scripts/screen-governance.mjs","团购本地生活AI运营App/scripts/test-static.mjs","尤克特拉产品设计PRD.md","开发计划.md","治理经验库.md","项目阻塞点分析.md"]}],"total_commits":0,"head_commit":{"id":"a244264ab360d733e9cdc0bd5573a49bc6e7a570","message":"merge: preserve synchronized deployment and constraint records\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/a244264ab360d733e9cdc0bd5573a49bc6e7a570","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T17:09:19-07:00","added":[],"removed":[],"modified":["docs/real-implementation-governance-batch2-2026-10-03.md"]},"repository":{"id":51,"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":"yggdrasil-local-life-tools","full_name":"luoanwu/yggdrasil-local-life-tools","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":89258,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools/languages","html_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/yggdrasil-local-life-tools.git","clone_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools.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-02T16:02:07+08:00","updated_at":"2026-10-04T07:54: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
|
3
|
5
|
0
|
1791073270
|
0
|
1791072563
|
1791073270
|
group: ci-${{ github.ref }}
cancel-in-progress: group: ci-${{ github.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|
|
25173
|
fix: label unverified AI connections and demo entr fix: label unverified AI connections and demo entry metrics...
|
51
|
5
|
ci.yml
|
40
|
5
|
0
|
refs/heads/main
|
e4707f5103774002317675ea148dbd5f8b89c599
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"a244264ab360d733e9cdc0bd5573a49bc6e7a570","after":"e4707f5103774002317675ea148dbd5f8b89c599","compare_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/compare/a244264ab360d733e9cdc0bd5573a49bc6e7a570...e4707f5103774002317675ea148dbd5f8b89c599","commits":[{"id":"e4707f5103774002317675ea148dbd5f8b89c599","message":"fix: label unverified AI connections and demo entry metrics\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/e4707f5103774002317675ea148dbd5f8b89c599","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T17:21:06-07:00","added":[],"removed":[],"modified":["docs/deployments/missing-module-local-2026-10-03.md","docs/external-integrations-2026-10-03.md","docs/missing-module-governance-2026-10-03.md","e2e/playwright.config.ts","e2e/tests/07-governance.spec.ts","团购本地生活AI运营App/app.jsx","团购本地生活AI运营App/screens-ai.jsx","团购本地生活AI运营App/scripts/test-static.mjs"]}],"total_commits":0,"head_commit":{"id":"e4707f5103774002317675ea148dbd5f8b89c599","message":"fix: label unverified AI connections and demo entry metrics\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/e4707f5103774002317675ea148dbd5f8b89c599","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T17:21:06-07:00","added":[],"removed":[],"modified":["docs/deployments/missing-module-local-2026-10-03.md","docs/external-integrations-2026-10-03.md","docs/missing-module-governance-2026-10-03.md","e2e/playwright.config.ts","e2e/tests/07-governance.spec.ts","团购本地生活AI运营App/app.jsx","团购本地生活AI运营App/screens-ai.jsx","团购本地生活AI运营App/scripts/test-static.mjs"]},"repository":{"id":51,"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":"yggdrasil-local-life-tools","full_name":"luoanwu/yggdrasil-local-life-tools","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":89826,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools/languages","html_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/yggdrasil-local-life-tools.git","clone_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools.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-02T16:02:07+08:00","updated_at":"2026-10-04T08:09:23+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
|
3
|
5
|
0
|
1791073468
|
0
|
1791073270
|
1791073468
|
group: ci-${{ github.ref }}
cancel-in-progress: group: ci-${{ github.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|
|
25176
|
docs: record final module governance verification docs: record final module governance verification and local release...
|
51
|
5
|
ci.yml
|
42
|
5
|
0
|
refs/heads/main
|
ca4022d7692cfbd6b667348aae3bc4697fe523ca
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"e4707f5103774002317675ea148dbd5f8b89c599","after":"ca4022d7692cfbd6b667348aae3bc4697fe523ca","compare_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/compare/e4707f5103774002317675ea148dbd5f8b89c599...ca4022d7692cfbd6b667348aae3bc4697fe523ca","commits":[{"id":"ca4022d7692cfbd6b667348aae3bc4697fe523ca","message":"docs: record final module governance verification and local release\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/ca4022d7692cfbd6b667348aae3bc4697fe523ca","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T17:24:26-07:00","added":[],"removed":[],"modified":["docs/deployments/missing-module-local-2026-10-03.md","docs/external-integrations-2026-10-03.md","docs/missing-module-governance-2026-10-03.md"]}],"total_commits":0,"head_commit":{"id":"ca4022d7692cfbd6b667348aae3bc4697fe523ca","message":"docs: record final module governance verification and local release\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/ca4022d7692cfbd6b667348aae3bc4697fe523ca","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T17:24:26-07:00","added":[],"removed":[],"modified":["docs/deployments/missing-module-local-2026-10-03.md","docs/external-integrations-2026-10-03.md","docs/missing-module-governance-2026-10-03.md"]},"repository":{"id":51,"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":"yggdrasil-local-life-tools","full_name":"luoanwu/yggdrasil-local-life-tools","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":89960,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools/languages","html_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/yggdrasil-local-life-tools.git","clone_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools.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-02T16:02:07+08:00","updated_at":"2026-10-04T08:21: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
|
3
|
5
|
0
|
1791074440
|
0
|
1791073468
|
1791074440
|
group: ci-${{ github.ref }}
cancel-in-progress: group: ci-${{ github.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|
|
25179
|
feat(fission): 裂变屏补开团、代客参团、成员详情与转介绍绑定 / 手动发奖入口
|
51
|
5
|
ci.yml
|
44
|
5
|
0
|
refs/heads/main
|
eccbba06b493fe3de7a10ea2522cd8ca9fd09bc9
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"ca4022d7692cfbd6b667348aae3bc4697fe523ca","after":"eccbba06b493fe3de7a10ea2522cd8ca9fd09bc9","compare_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/compare/ca4022d7692cfbd6b667348aae3bc4697fe523ca...eccbba06b493fe3de7a10ea2522cd8ca9fd09bc9","commits":[{"id":"eccbba06b493fe3de7a10ea2522cd8ca9fd09bc9","message":"feat(fission): 裂变屏补开团、代客参团、成员详情与转介绍绑定 / 手动发奖入口\n\n后端 /group-buys 与 /referrals 的写接口早已就绪并有并发防护,但裂变屏只调了\n列表、结算、退回三个接口,开团、参团、绑定邀请关系、手动发奖都没有界面入口。\n本次只动前端,不改后端与 api.js(五个方法原本就在)。\n\n- 发起拼团:选在售套餐、成团人数、团价、团名、奖励方式、招募有效期、可选团长;\n 校验口径同后端 createGroupBuySchema,非法值在页面拦下不发请求\n- 代客参团:招募中的团可替到店会员占名额,已在团内的会员不出现在选项里;\n 已过截止时间的团不再放行参团(后端目前不校验截止时间,见下)\n- 成员详情:展开时取 /group-buys/:id 的最新成员、团长与获奖标记、各时间点\n- 绑定邀请关系:邀请人 / 被邀人下拉,已选邀请人与已绑定过的会员不可选作被邀人\n- 手动发放转介绍奖励:列出被邀人的已核销订单作为首单凭据,没有则说明原因并禁用\n- 权限同后端 requireRole:店员只见代客参团与绑定,不见开团 / 结算 / 退回 / 发奖\n- 会员、套餐下拉在首次打开表单时才加载;加载失败明示,不显示成「暂无」\n- 写操作防重复提交;成功与失败后都重新拉列表;结果提示固定在视口内\n- 离线样例模式表单可打开,提交只提示、不发请求\n\n验证(一次性 PG + 本分支自起的后端与静态服,桌面 + 手机两个浏览器项目):\n- 前端 npm test / lint / build 通过\n- e2e 新增 4 条深度流程:开团到结算、绑定与无首单不可发奖、凭已核销订单手动发奖、\n 店员入口可见性\n- 基线 a244264 上全量 150 条:147 通过、1 条按设计跳过(种子里可手动发奖的那一对\n 同库只能发一次,第二个浏览器项目跳过)、2 条失败为 07-governance 自助注册用例缺\n ENABLE_SELF_REGISTRATION 开关,主线随后在 e4707f5 的 Playwright 配置里补上\n- rebase 到 ca4022d 后重跑深度流程 + 裂变冒烟 + 注册用例共 24 条:23 通过、\n 1 条按设计跳过;未在 ca4022d 上重跑全量\n\n未做(已另行登记):奖励券码无接口可查、后端不校验拼团截止时间也不自动过期、\n储值赠金团在获奖人无钱包时卡在已满员、团价无上限。\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/eccbba06b493fe3de7a10ea2522cd8ca9fd09bc9","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T17:17:45-07:00","added":[],"removed":[],"modified":["e2e/tests/02-deep-flows.spec.ts","团购本地生活AI运营App/screen-governance.generated.json","团购本地生活AI运营App/screens-fission.jsx"]}],"total_commits":0,"head_commit":{"id":"eccbba06b493fe3de7a10ea2522cd8ca9fd09bc9","message":"feat(fission): 裂变屏补开团、代客参团、成员详情与转介绍绑定 / 手动发奖入口\n\n后端 /group-buys 与 /referrals 的写接口早已就绪并有并发防护,但裂变屏只调了\n列表、结算、退回三个接口,开团、参团、绑定邀请关系、手动发奖都没有界面入口。\n本次只动前端,不改后端与 api.js(五个方法原本就在)。\n\n- 发起拼团:选在售套餐、成团人数、团价、团名、奖励方式、招募有效期、可选团长;\n 校验口径同后端 createGroupBuySchema,非法值在页面拦下不发请求\n- 代客参团:招募中的团可替到店会员占名额,已在团内的会员不出现在选项里;\n 已过截止时间的团不再放行参团(后端目前不校验截止时间,见下)\n- 成员详情:展开时取 /group-buys/:id 的最新成员、团长与获奖标记、各时间点\n- 绑定邀请关系:邀请人 / 被邀人下拉,已选邀请人与已绑定过的会员不可选作被邀人\n- 手动发放转介绍奖励:列出被邀人的已核销订单作为首单凭据,没有则说明原因并禁用\n- 权限同后端 requireRole:店员只见代客参团与绑定,不见开团 / 结算 / 退回 / 发奖\n- 会员、套餐下拉在首次打开表单时才加载;加载失败明示,不显示成「暂无」\n- 写操作防重复提交;成功与失败后都重新拉列表;结果提示固定在视口内\n- 离线样例模式表单可打开,提交只提示、不发请求\n\n验证(一次性 PG + 本分支自起的后端与静态服,桌面 + 手机两个浏览器项目):\n- 前端 npm test / lint / build 通过\n- e2e 新增 4 条深度流程:开团到结算、绑定与无首单不可发奖、凭已核销订单手动发奖、\n 店员入口可见性\n- 基线 a244264 上全量 150 条:147 通过、1 条按设计跳过(种子里可手动发奖的那一对\n 同库只能发一次,第二个浏览器项目跳过)、2 条失败为 07-governance 自助注册用例缺\n ENABLE_SELF_REGISTRATION 开关,主线随后在 e4707f5 的 Playwright 配置里补上\n- rebase 到 ca4022d 后重跑深度流程 + 裂变冒烟 + 注册用例共 24 条:23 通过、\n 1 条按设计跳过;未在 ca4022d 上重跑全量\n\n未做(已另行登记):奖励券码无接口可查、后端不校验拼团截止时间也不自动过期、\n储值赠金团在获奖人无钱包时卡在已满员、团价无上限。\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/eccbba06b493fe3de7a10ea2522cd8ca9fd09bc9","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T17:17:45-07:00","added":[],"removed":[],"modified":["e2e/tests/02-deep-flows.spec.ts","团购本地生活AI运营App/screen-governance.generated.json","团购本地生活AI运营App/screens-fission.jsx"]},"repository":{"id":51,"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":"yggdrasil-local-life-tools","full_name":"luoanwu/yggdrasil-local-life-tools","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":89987,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools/languages","html_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/yggdrasil-local-life-tools.git","clone_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools.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-02T16:02:07+08:00","updated_at":"2026-10-04T08:24: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
|
3
|
5
|
0
|
1791075933
|
0
|
1791074440
|
1791075933
|
group: ci-${{ github.ref }}
cancel-in-progress: group: ci-${{ github.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|
|
25184
|
feat: implement consumer self-service and live mar feat: implement consumer self-service and live market IoT modules...
|
51
|
5
|
ci.yml
|
46
|
5
|
0
|
refs/heads/main
|
4e729d975177f19aff25f2005c586e995aafe556
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"eccbba06b493fe3de7a10ea2522cd8ca9fd09bc9","after":"4e729d975177f19aff25f2005c586e995aafe556","compare_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/compare/eccbba06b493fe3de7a10ea2522cd8ca9fd09bc9...4e729d975177f19aff25f2005c586e995aafe556","commits":[{"id":"4e729d975177f19aff25f2005c586e995aafe556","message":"feat: implement consumer self-service and live market IoT modules\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/4e729d975177f19aff25f2005c586e995aafe556","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T18:05:29-07:00","added":["docs/contracts/consumer-self-service.md","docs/contracts/iot-protocol.md","docs/contracts/live-market.md","docs/deployments/real-modules-local-2026-10-03.md","docs/real-module-completion-2026-10-03.md","e2e/tests/09-real-modules.spec.ts","server/prisma/migrations/20261004003250_real_consumer_live_market_iot/migration.sql","server/src/lib/consumer-token.ts","server/src/middleware/consumer-auth.ts","server/src/modules/consumer/routes.ts","server/src/modules/consumer/schema.ts","server/src/modules/consumer/service.ts","server/src/modules/iot/routes.ts","server/src/modules/iot/schema.ts","server/src/modules/iot/service.ts","server/src/modules/live/routes.ts","server/src/modules/live/schema.ts","server/src/modules/live/service.ts","server/src/modules/market/routes.ts","server/src/modules/market/schema.ts","server/src/modules/market/service.ts","server/test/r41-consumer.test.ts","server/test/r42-live-market.test.ts","server/test/r43-iot.test.ts","团购本地生活AI运营App/consumer-api.js","团购本地生活AI运营App/consumer-app.jsx","团购本地生活AI运营App/consumer.html","团购本地生活AI运营App/screens-real-modules.jsx","团购本地生活AI运营App/scripts/test-consumer-auth.mjs","团购本地生活AI运营App/scripts/test-consumer-static.mjs","团购本地生活AI运营App/scripts/test-real-modules.mjs"],"removed":[],"modified":["CLAUDE.md","README.md","e2e/package.json","server/prisma/schema.prisma","server/prisma/seed.ts","server/src/app.ts","server/src/middleware/request-log.ts","server/src/middleware/security.ts","server/src/modules/booking/service.ts","server/src/modules/ops/service.ts","server/src/modules/resources/service.ts","server/src/openapi.ts","server/src/routes.ts","server/test/r33-data-integrity.test.ts","团购本地生活AI运营App/README.md","团购本地生活AI运营App/api.js","团购本地生活AI运营App/app.jsx","团购本地生活AI运营App/index.html","团购本地生活AI运营App/package.json","团购本地生活AI运营App/screen-governance.generated.json","团购本地生活AI运营App/screens-facility.jsx","团购本地生活AI运营App/screens-live.jsx","团购本地生活AI运营App/screens-member.jsx","团购本地生活AI运营App/screens-p2.jsx","团购本地生活AI运营App/scripts/build.mjs","团购本地生活AI运营App/scripts/screen-governance.mjs","团购本地生活AI运营App/scripts/test-static.mjs","尤克特拉产品设计PRD.md","开发计划.md","治理经验库.md"]}],"total_commits":0,"head_commit":{"id":"4e729d975177f19aff25f2005c586e995aafe556","message":"feat: implement consumer self-service and live market IoT modules\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/4e729d975177f19aff25f2005c586e995aafe556","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T18:05:29-07:00","added":["docs/contracts/consumer-self-service.md","docs/contracts/iot-protocol.md","docs/contracts/live-market.md","docs/deployments/real-modules-local-2026-10-03.md","docs/real-module-completion-2026-10-03.md","e2e/tests/09-real-modules.spec.ts","server/prisma/migrations/20261004003250_real_consumer_live_market_iot/migration.sql","server/src/lib/consumer-token.ts","server/src/middleware/consumer-auth.ts","server/src/modules/consumer/routes.ts","server/src/modules/consumer/schema.ts","server/src/modules/consumer/service.ts","server/src/modules/iot/routes.ts","server/src/modules/iot/schema.ts","server/src/modules/iot/service.ts","server/src/modules/live/routes.ts","server/src/modules/live/schema.ts","server/src/modules/live/service.ts","server/src/modules/market/routes.ts","server/src/modules/market/schema.ts","server/src/modules/market/service.ts","server/test/r41-consumer.test.ts","server/test/r42-live-market.test.ts","server/test/r43-iot.test.ts","团购本地生活AI运营App/consumer-api.js","团购本地生活AI运营App/consumer-app.jsx","团购本地生活AI运营App/consumer.html","团购本地生活AI运营App/screens-real-modules.jsx","团购本地生活AI运营App/scripts/test-consumer-auth.mjs","团购本地生活AI运营App/scripts/test-consumer-static.mjs","团购本地生活AI运营App/scripts/test-real-modules.mjs"],"removed":[],"modified":["CLAUDE.md","README.md","e2e/package.json","server/prisma/schema.prisma","server/prisma/seed.ts","server/src/app.ts","server/src/middleware/request-log.ts","server/src/middleware/security.ts","server/src/modules/booking/service.ts","server/src/modules/ops/service.ts","server/src/modules/resources/service.ts","server/src/openapi.ts","server/src/routes.ts","server/test/r33-data-integrity.test.ts","团购本地生活AI运营App/README.md","团购本地生活AI运营App/api.js","团购本地生活AI运营App/app.jsx","团购本地生活AI运营App/index.html","团购本地生活AI运营App/package.json","团购本地生活AI运营App/screen-governance.generated.json","团购本地生活AI运营App/screens-facility.jsx","团购本地生活AI运营App/screens-live.jsx","团购本地生活AI运营App/screens-member.jsx","团购本地生活AI运营App/screens-p2.jsx","团购本地生活AI运营App/scripts/build.mjs","团购本地生活AI运营App/scripts/screen-governance.mjs","团购本地生活AI运营App/scripts/test-static.mjs","尤克特拉产品设计PRD.md","开发计划.md","治理经验库.md"]},"repository":{"id":51,"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":"yggdrasil-local-life-tools","full_name":"luoanwu/yggdrasil-local-life-tools","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":90016,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools/languages","html_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/yggdrasil-local-life-tools.git","clone_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools.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-02T16:02:07+08:00","updated_at":"2026-10-04T08:40:40+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
|
3
|
5
|
0
|
1791076100
|
0
|
1791075933
|
1791076100
|
group: ci-${{ github.ref }}
cancel-in-progress: group: ci-${{ github.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|
|
25186
|
docs: record verified real-module tests and local docs: record verified real-module tests and local deployment...
|
51
|
5
|
ci.yml
|
48
|
5
|
0
|
refs/heads/main
|
d2c63f918ffbd04ed438448039a81bf97038aaf6
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"4e729d975177f19aff25f2005c586e995aafe556","after":"d2c63f918ffbd04ed438448039a81bf97038aaf6","compare_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/compare/4e729d975177f19aff25f2005c586e995aafe556...d2c63f918ffbd04ed438448039a81bf97038aaf6","commits":[{"id":"d2c63f918ffbd04ed438448039a81bf97038aaf6","message":"docs: record verified real-module tests and local deployment\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/d2c63f918ffbd04ed438448039a81bf97038aaf6","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T18:08:16-07:00","added":[],"removed":[],"modified":["docs/deployments/real-modules-local-2026-10-03.md","docs/real-module-completion-2026-10-03.md"]}],"total_commits":0,"head_commit":{"id":"d2c63f918ffbd04ed438448039a81bf97038aaf6","message":"docs: record verified real-module tests and local deployment\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/d2c63f918ffbd04ed438448039a81bf97038aaf6","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T18:08:16-07:00","added":[],"removed":[],"modified":["docs/deployments/real-modules-local-2026-10-03.md","docs/real-module-completion-2026-10-03.md"]},"repository":{"id":51,"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":"yggdrasil-local-life-tools","full_name":"luoanwu/yggdrasil-local-life-tools","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":90446,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools/languages","html_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/yggdrasil-local-life-tools.git","clone_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools.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-02T16:02:07+08:00","updated_at":"2026-10-04T09:05:33+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
|
3
|
5
|
0
|
1791077318
|
0
|
1791076100
|
1791077318
|
group: ci-${{ github.ref }}
cancel-in-progress: group: ci-${{ github.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|
|
25188
|
docs: record merged OAuth verification and align o docs: record merged OAuth verification and align operating guidance...
|
51
|
5
|
ci.yml
|
50
|
5
|
0
|
refs/heads/main
|
0746a1b10d72f6847a59544afe22685b2ab9a0dc
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"d2c63f918ffbd04ed438448039a81bf97038aaf6","after":"0746a1b10d72f6847a59544afe22685b2ab9a0dc","compare_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/compare/d2c63f918ffbd04ed438448039a81bf97038aaf6...0746a1b10d72f6847a59544afe22685b2ab9a0dc","commits":[{"id":"0746a1b10d72f6847a59544afe22685b2ab9a0dc","message":"docs: record merged OAuth verification and align operating guidance\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/0746a1b10d72f6847a59544afe22685b2ab9a0dc","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T18:28:35-07:00","added":[],"removed":[],"modified":["CLAUDE.md","README.md","docs/platform-oauth-hardening-2026-10-03.md","server/README.md","团购本地生活AI运营App/WEB.md","开发计划.md","治理经验库.md","项目阻塞点分析.md"]},{"id":"1fd48a1451e2493281951207445c593068411fb9","message":"Merge remote-tracking branch 'origin/main' into codex/external-integrations-20261003\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/1fd48a1451e2493281951207445c593068411fb9","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T18:20:37-07:00","added":["docs/contracts/consumer-self-service.md","docs/contracts/iot-protocol.md","docs/contracts/live-market.md","docs/deployments/real-modules-local-2026-10-03.md","docs/real-module-completion-2026-10-03.md","e2e/tests/09-real-modules.spec.ts","server/prisma/migrations/20261004003250_real_consumer_live_market_iot/migration.sql","server/src/lib/consumer-token.ts","server/src/middleware/consumer-auth.ts","server/src/modules/consumer/routes.ts","server/src/modules/consumer/schema.ts","server/src/modules/consumer/service.ts","server/src/modules/iot/routes.ts","server/src/modules/iot/schema.ts","server/src/modules/iot/service.ts","server/src/modules/live/routes.ts","server/src/modules/live/schema.ts","server/src/modules/live/service.ts","server/src/modules/market/routes.ts","server/src/modules/market/schema.ts","server/src/modules/market/service.ts","server/test/r41-consumer.test.ts","server/test/r42-live-market.test.ts","server/test/r43-iot.test.ts","团购本地生活AI运营App/consumer-api.js","团购本地生活AI运营App/consumer-app.jsx","团购本地生活AI运营App/consumer.html","团购本地生活AI运营App/screens-real-modules.jsx","团购本地生活AI运营App/scripts/test-consumer-auth.mjs","团购本地生活AI运营App/scripts/test-consumer-static.mjs","团购本地生活AI运营App/scripts/test-real-modules.mjs"],"removed":[],"modified":["CLAUDE.md","README.md","e2e/package.json","server/prisma/schema.prisma","server/prisma/seed.ts","server/src/app.ts","server/src/middleware/request-log.ts","server/src/middleware/security.ts","server/src/modules/booking/service.ts","server/src/modules/ops/service.ts","server/src/modules/resources/service.ts","server/src/openapi.ts","server/src/routes.ts","server/test/r33-data-integrity.test.ts","团购本地生活AI运营App/README.md","团购本地生活AI运营App/api.js","团购本地生活AI运营App/app.jsx","团购本地生活AI运营App/index.html","团购本地生活AI运营App/package.json","团购本地生活AI运营App/screen-governance.generated.json","团购本地生活AI运营App/screens-facility.jsx","团购本地生活AI运营App/screens-live.jsx","团购本地生活AI运营App/screens-member.jsx","团购本地生活AI运营App/screens-p2.jsx","团购本地生活AI运营App/scripts/build.mjs","团购本地生活AI运营App/scripts/screen-governance.mjs","团购本地生活AI运营App/scripts/test-static.mjs","尤克特拉产品设计PRD.md","开发计划.md","治理经验库.md"]},{"id":"b3168d64dfd12640cfaeef3e62242b7e6c4a909c","message":"fix(platforms): verify signed authorization and consume OAuth states atomically\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/b3168d64dfd12640cfaeef3e62242b7e6c4a909c","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T18:20:35-07:00","added":["docs/contracts/platform-oauth.md","docs/platform-oauth-hardening-2026-10-03.md","server/src/adapters/platform/authorization.ts","server/test/platform-oauth-protocol.unit.test.ts"],"removed":[],"modified":["server/.env.example","server/src/modules/platforms/schema.ts","server/src/modules/platforms/service.ts","server/src/openapi.ts","server/test/external-http.unit.test.ts","server/test/r16-platforms.test.ts","server/test/route-coverage.baseline.json"]}],"total_commits":0,"head_commit":{"id":"0746a1b10d72f6847a59544afe22685b2ab9a0dc","message":"docs: record merged OAuth verification and align operating guidance\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/0746a1b10d72f6847a59544afe22685b2ab9a0dc","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T18:28:35-07:00","added":[],"removed":[],"modified":["CLAUDE.md","README.md","docs/platform-oauth-hardening-2026-10-03.md","server/README.md","团购本地生活AI运营App/WEB.md","开发计划.md","治理经验库.md","项目阻塞点分析.md"]},"repository":{"id":51,"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":"yggdrasil-local-life-tools","full_name":"luoanwu/yggdrasil-local-life-tools","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":90457,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools/languages","html_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/yggdrasil-local-life-tools.git","clone_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools.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-02T16:02:07+08:00","updated_at":"2026-10-04T09:08: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
|
3
|
5
|
0
|
1791077373
|
0
|
1791077318
|
1791077373
|
group: ci-${{ github.ref }}
cancel-in-progress: group: ci-${{ github.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|
|
25190
|
docs: record verified main sync and preserved conc docs: record verified main sync and preserved concurrent workspace...
|
51
|
5
|
ci.yml
|
52
|
5
|
0
|
refs/heads/main
|
0a9ca6505150a0eaa81de69fec53b2b9350cfcbe
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"0746a1b10d72f6847a59544afe22685b2ab9a0dc","after":"0a9ca6505150a0eaa81de69fec53b2b9350cfcbe","compare_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/compare/0746a1b10d72f6847a59544afe22685b2ab9a0dc...0a9ca6505150a0eaa81de69fec53b2b9350cfcbe","commits":[{"id":"0a9ca6505150a0eaa81de69fec53b2b9350cfcbe","message":"docs: record verified main sync and preserved concurrent workspace\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/0a9ca6505150a0eaa81de69fec53b2b9350cfcbe","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T18:29:29-07:00","added":[],"removed":[],"modified":["docs/platform-oauth-hardening-2026-10-03.md"]}],"total_commits":0,"head_commit":{"id":"0a9ca6505150a0eaa81de69fec53b2b9350cfcbe","message":"docs: record verified main sync and preserved concurrent workspace\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/0a9ca6505150a0eaa81de69fec53b2b9350cfcbe","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T18:29:29-07:00","added":[],"removed":[],"modified":["docs/platform-oauth-hardening-2026-10-03.md"]},"repository":{"id":51,"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":"yggdrasil-local-life-tools","full_name":"luoanwu/yggdrasil-local-life-tools","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":90620,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools/languages","html_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/yggdrasil-local-life-tools.git","clone_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools.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-02T16:02:07+08:00","updated_at":"2026-10-04T09:28:38+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
|
3
|
5
|
0
|
1791078394
|
0
|
1791077373
|
1791078394
|
group: ci-${{ github.ref }}
cancel-in-progress: group: ci-${{ github.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|
|
25192
|
feat: settle consumer bookings with wallet and met feat: settle consumer bookings with wallet and meter AI usage...
|
51
|
5
|
ci.yml
|
54
|
5
|
0
|
refs/heads/main
|
cf6aff7010515877acb32311e7ca99f8cd243d0b
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"0a9ca6505150a0eaa81de69fec53b2b9350cfcbe","after":"cf6aff7010515877acb32311e7ca99f8cd243d0b","compare_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/compare/0a9ca6505150a0eaa81de69fec53b2b9350cfcbe...cf6aff7010515877acb32311e7ca99f8cd243d0b","commits":[{"id":"cf6aff7010515877acb32311e7ca99f8cd243d0b","message":"feat: settle consumer bookings with wallet and meter AI usage\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/cf6aff7010515877acb32311e7ca99f8cd243d0b","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T18:46:25-07:00","added":["docs/consumer-checkout-usage-2026-10-03.md","docs/contracts/ai-usage.md","docs/contracts/consumer-checkout.md","docs/deployments/consumer-checkout-usage-local-2026-10-03.md","e2e/tests/10-checkout-usage.spec.ts","server/prisma/migrations/20261004011448_consumer_checkout_ai_usage/migration.sql","server/src/lib/ai-usage-context.ts","server/src/modules/consumer-checkout/schema.ts","server/src/modules/consumer-checkout/service.ts","server/src/modules/usage/routes.ts","server/src/modules/usage/schema.ts","server/src/modules/usage/service.ts","server/test/ai-usage.unit.test.ts","server/test/r44-consumer-checkout.test.ts","server/test/r45-ai-usage.test.ts","server/test/r46-wallet-link-integrity.test.ts","团购本地生活AI运营App/screens-checkout-usage.jsx","团购本地生活AI运营App/scripts/test-checkout-usage.mjs"],"removed":[],"modified":["CLAUDE.md","README.md","docs/contracts/consumer-self-service.md","e2e/package.json","e2e/tests/09-real-modules.spec.ts","server/README.md","server/prisma/schema.prisma","server/prisma/seed.ts","server/src/adapters/ai/index.ts","server/src/adapters/ai/real.ts","server/src/adapters/ocr/index.ts","server/src/adapters/ocr/vision.ts","server/src/app.ts","server/src/modules/automation-runner/service.ts","server/src/modules/booking/routes.ts","server/src/modules/booking/schema.ts","server/src/modules/booking/service.ts","server/src/modules/compliance/routes.ts","server/src/modules/compliance/service.ts","server/src/modules/consumer/routes.ts","server/src/modules/consumer/service.ts","server/src/modules/content/service.ts","server/src/modules/decor/service.ts","server/src/modules/metrics/routes.ts","server/src/modules/periphery/routes.ts","server/src/modules/reviews/routes.ts","server/src/modules/reviews/service.ts","server/src/modules/wallet/service.ts","server/src/openapi.ts","server/src/routes.ts","server/test/ai-provider.unit.test.ts","server/test/ocr-provider.unit.test.ts","server/test/r41-consumer.test.ts","团购本地生活AI运营App/WEB.md","团购本地生活AI运营App/api.js","团购本地生活AI运营App/consumer-api.js","团购本地生活AI运营App/consumer-app.jsx","团购本地生活AI运营App/consumer.html","团购本地生活AI运营App/index.html","团购本地生活AI运营App/package.json","团购本地生活AI运营App/screen-governance.generated.json","团购本地生活AI运营App/screens-fulfillment.jsx","团购本地生活AI运营App/screens-p1.jsx","团购本地生活AI运营App/scripts/test-auth-governance.mjs","团购本地生活AI运营App/scripts/test-consumer-auth.mjs","团购本地生活AI运营App/scripts/test-static.mjs","尤克特拉产品设计PRD.md","开发计划.md","治理经验库.md"]}],"total_commits":0,"head_commit":{"id":"cf6aff7010515877acb32311e7ca99f8cd243d0b","message":"feat: settle consumer bookings with wallet and meter AI usage\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/cf6aff7010515877acb32311e7ca99f8cd243d0b","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T18:46:25-07:00","added":["docs/consumer-checkout-usage-2026-10-03.md","docs/contracts/ai-usage.md","docs/contracts/consumer-checkout.md","docs/deployments/consumer-checkout-usage-local-2026-10-03.md","e2e/tests/10-checkout-usage.spec.ts","server/prisma/migrations/20261004011448_consumer_checkout_ai_usage/migration.sql","server/src/lib/ai-usage-context.ts","server/src/modules/consumer-checkout/schema.ts","server/src/modules/consumer-checkout/service.ts","server/src/modules/usage/routes.ts","server/src/modules/usage/schema.ts","server/src/modules/usage/service.ts","server/test/ai-usage.unit.test.ts","server/test/r44-consumer-checkout.test.ts","server/test/r45-ai-usage.test.ts","server/test/r46-wallet-link-integrity.test.ts","团购本地生活AI运营App/screens-checkout-usage.jsx","团购本地生活AI运营App/scripts/test-checkout-usage.mjs"],"removed":[],"modified":["CLAUDE.md","README.md","docs/contracts/consumer-self-service.md","e2e/package.json","e2e/tests/09-real-modules.spec.ts","server/README.md","server/prisma/schema.prisma","server/prisma/seed.ts","server/src/adapters/ai/index.ts","server/src/adapters/ai/real.ts","server/src/adapters/ocr/index.ts","server/src/adapters/ocr/vision.ts","server/src/app.ts","server/src/modules/automation-runner/service.ts","server/src/modules/booking/routes.ts","server/src/modules/booking/schema.ts","server/src/modules/booking/service.ts","server/src/modules/compliance/routes.ts","server/src/modules/compliance/service.ts","server/src/modules/consumer/routes.ts","server/src/modules/consumer/service.ts","server/src/modules/content/service.ts","server/src/modules/decor/service.ts","server/src/modules/metrics/routes.ts","server/src/modules/periphery/routes.ts","server/src/modules/reviews/routes.ts","server/src/modules/reviews/service.ts","server/src/modules/wallet/service.ts","server/src/openapi.ts","server/src/routes.ts","server/test/ai-provider.unit.test.ts","server/test/ocr-provider.unit.test.ts","server/test/r41-consumer.test.ts","团购本地生活AI运营App/WEB.md","团购本地生活AI运营App/api.js","团购本地生活AI运营App/consumer-api.js","团购本地生活AI运营App/consumer-app.jsx","团购本地生活AI运营App/consumer.html","团购本地生活AI运营App/index.html","团购本地生活AI运营App/package.json","团购本地生活AI运营App/screen-governance.generated.json","团购本地生活AI运营App/screens-fulfillment.jsx","团购本地生活AI运营App/screens-p1.jsx","团购本地生活AI运营App/scripts/test-auth-governance.mjs","团购本地生活AI运营App/scripts/test-consumer-auth.mjs","团购本地生活AI运营App/scripts/test-static.mjs","尤克特拉产品设计PRD.md","开发计划.md","治理经验库.md"]},"repository":{"id":51,"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":"yggdrasil-local-life-tools","full_name":"luoanwu/yggdrasil-local-life-tools","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":90627,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools/languages","html_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/yggdrasil-local-life-tools.git","clone_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools.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-02T16:02:07+08:00","updated_at":"2026-10-04T09:29:33+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
|
3
|
5
|
0
|
1791078823
|
0
|
1791078394
|
1791078823
|
group: ci-${{ github.ref }}
cancel-in-progress: group: ci-${{ github.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|
|
25194
|
docs: record checkout and usage local verification
|
51
|
5
|
ci.yml
|
56
|
5
|
0
|
refs/heads/main
|
55dfcf8071943ca22e462fcd79a103681f9c9090
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf6aff7010515877acb32311e7ca99f8cd243d0b","after":"55dfcf8071943ca22e462fcd79a103681f9c9090","compare_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/compare/cf6aff7010515877acb32311e7ca99f8cd243d0b...55dfcf8071943ca22e462fcd79a103681f9c9090","commits":[{"id":"55dfcf8071943ca22e462fcd79a103681f9c9090","message":"docs: record checkout and usage local verification\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/55dfcf8071943ca22e462fcd79a103681f9c9090","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T18:52:11-07:00","added":[],"removed":[],"modified":["docs/consumer-checkout-usage-2026-10-03.md","docs/deployments/consumer-checkout-usage-local-2026-10-03.md"]}],"total_commits":0,"head_commit":{"id":"55dfcf8071943ca22e462fcd79a103681f9c9090","message":"docs: record checkout and usage local verification\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/55dfcf8071943ca22e462fcd79a103681f9c9090","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T18:52:11-07:00","added":[],"removed":[],"modified":["docs/consumer-checkout-usage-2026-10-03.md","docs/deployments/consumer-checkout-usage-local-2026-10-03.md"]},"repository":{"id":51,"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":"yggdrasil-local-life-tools","full_name":"luoanwu/yggdrasil-local-life-tools","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":91001,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools/languages","html_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/yggdrasil-local-life-tools.git","clone_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools.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-02T16:02:07+08:00","updated_at":"2026-10-04T09:46: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
|
3
|
5
|
0
|
1791082092
|
0
|
1791078823
|
1791082092
|
group: ci-${{ github.ref }}
cancel-in-progress: group: ci-${{ github.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|