|
23404
|
feat: initialize SiteScout workspace
|
56
|
5
|
governance.yml
|
1
|
5
|
0
|
refs/heads/main
|
e65fc3036083a4118e0c909bd6a58914e6b33fef
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"0000000000000000000000000000000000000000","after":"e65fc3036083a4118e0c909bd6a58914e6b33fef","compare_url":"https://gitea.g-hi.com/","commits":[{"id":"e65fc3036083a4118e0c909bd6a58914e6b33fef","message":"feat: initialize SiteScout workspace\n","url":"https://gitea.g-hi.com/luoanwu/hidian-site-selection/commit/e65fc3036083a4118e0c909bd6a58914e6b33fef","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-06T01:31:18-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/20260705000100_add_site_selection/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/sites/sites.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/sites.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/realtime.tenant.test.ts","apps/api-fastify/test/sites.integration.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/20260705000100_add_site_selection/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/sites/sites.controller.ts","apps/api-nestjs/src/sites/sites.module.ts","apps/api-nestjs/src/sites/sites.service.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/realtime.tenant.test.ts","apps/api-nestjs/test/sites.integration.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/public/fonts/sitescout/Inter-400-0000-f6cd3edd.woff2","apps/web/public/fonts/sitescout/Inter-400-0100-61bfcdb2.woff2","apps/web/public/fonts/sitescout/Inter-400-0102-d53fe561.woff2","apps/web/public/fonts/sitescout/Inter-400-0301-502cf6f3.woff2","apps/web/public/fonts/sitescout/Inter-400-0370-d3230b38.woff2","apps/web/public/fonts/sitescout/Inter-400-0460-f617bd9e.woff2","apps/web/public/fonts/sitescout/Inter-400-1F00-89268580.woff2","apps/web/public/fonts/sitescout/Inter-500-0000-f6cd3edd.woff2","apps/web/public/fonts/sitescout/Inter-500-0100-61bfcdb2.woff2","apps/web/public/fonts/sitescout/Inter-500-0102-d53fe561.woff2","apps/web/public/fonts/sitescout/Inter-500-0301-502cf6f3.woff2","apps/web/public/fonts/sitescout/Inter-500-0370-d3230b38.woff2","apps/web/public/fonts/sitescout/Inter-500-0460-f617bd9e.woff2","apps/web/public/fonts/sitescout/Inter-500-1F00-89268580.woff2","apps/web/public/fonts/sitescout/Inter-600-0000-f6cd3edd.woff2","apps/web/public/fonts/sitescout/Inter-600-0100-61bfcdb2.woff2","apps/web/public/fonts/sitescout/Inter-600-0102-d53fe561.woff2","apps/web/public/fonts/sitescout/Inter-600-0301-502cf6f3.woff2","apps/web/public/fonts/sitescout/Inter-600-0370-d3230b38.woff2","apps/web/public/fonts/sitescout/Inter-600-0460-f617bd9e.woff2","apps/web/public/fonts/sitescout/Inter-600-1F00-89268580.woff2","apps/web/public/fonts/sitescout/Inter-700-0000-f6cd3edd.woff2","apps/web/public/fonts/sitescout/Inter-700-0100-61bfcdb2.woff2","apps/web/public/fonts/sitescout/Inter-700-0102-d53fe561.woff2","apps/web/public/fonts/sitescout/Inter-700-0301-502cf6f3.woff2","apps/web/public/fonts/sitescout/Inter-700-0370-d3230b38.woff2","apps/web/public/fonts/sitescout/Inter-700-0460-f617bd9e.woff2","apps/web/public/fonts/sitescout/Inter-700-1F00-89268580.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-400-0000-d60a3608.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-400-0100-58d40118.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-400-0102-5731ccc1.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-400-0301-933d4a8c.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-400-0370-7e45a756.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-400-0460-c34028be.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-500-0000-d60a3608.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-500-0100-58d40118.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-500-0102-5731ccc1.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-500-0301-933d4a8c.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-500-0370-7e45a756.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-500-0460-c34028be.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-600-0000-d60a3608.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-600-0100-58d40118.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-600-0102-5731ccc1.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-600-0301-933d4a8c.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-600-0370-7e45a756.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-600-0460-c34028be.woff2","apps/web/src/app/console/page.tsx","apps/web/src/app/globals.css","apps/web/src/app/layout.tsx","apps/web/src/app/page.tsx","apps/web/src/components/EventFeed.tsx","apps/web/src/components/OrdersPanel.tsx","apps/web/src/components/RealtimeBar.tsx","apps/web/src/components/UsersPanel.tsx","apps/web/src/components/sitescout/AcceptanceCenter.tsx","apps/web/src/components/sitescout/CityMap.tsx","apps/web/src/components/sitescout/CompareModal.tsx","apps/web/src/components/sitescout/CompetitorSection.tsx","apps/web/src/components/sitescout/ComplianceSection.tsx","apps/web/src/components/sitescout/ScoreSection.tsx","apps/web/src/components/sitescout/SiteScoutApp.tsx","apps/web/src/components/sitescout/StakeoutSection.tsx","apps/web/src/components/sitescout/TierSection.tsx","apps/web/src/components/sitescout/sitescout.css","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/hooks/useSSE.ts","apps/web/src/hooks/useWebSocket.ts","apps/web/src/lib/api.ts","apps/web/src/lib/providers.tsx","apps/web/src/lib/sitescout-labels.ts","apps/web/src/lib/sitescout-types.ts","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/base-framework-migration.md","docs/domain-glossary.md","docs/domain/owner-matrix.md","docs/domain/site-selection-blueprint.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/site-fixtures.ts","packages/contracts/src/site.test.ts","packages/contracts/src/site.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/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-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","tsconfig.base.json","turbo.json"],"removed":[],"modified":[]}],"total_commits":0,"head_commit":{"id":"e65fc3036083a4118e0c909bd6a58914e6b33fef","message":"feat: initialize SiteScout workspace\n","url":"https://gitea.g-hi.com/luoanwu/hidian-site-selection/commit/e65fc3036083a4118e0c909bd6a58914e6b33fef","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-06T01:31:18-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/20260705000100_add_site_selection/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/sites/sites.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/sites.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/realtime.tenant.test.ts","apps/api-fastify/test/sites.integration.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/20260705000100_add_site_selection/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/sites/sites.controller.ts","apps/api-nestjs/src/sites/sites.module.ts","apps/api-nestjs/src/sites/sites.service.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/realtime.tenant.test.ts","apps/api-nestjs/test/sites.integration.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/public/fonts/sitescout/Inter-400-0000-f6cd3edd.woff2","apps/web/public/fonts/sitescout/Inter-400-0100-61bfcdb2.woff2","apps/web/public/fonts/sitescout/Inter-400-0102-d53fe561.woff2","apps/web/public/fonts/sitescout/Inter-400-0301-502cf6f3.woff2","apps/web/public/fonts/sitescout/Inter-400-0370-d3230b38.woff2","apps/web/public/fonts/sitescout/Inter-400-0460-f617bd9e.woff2","apps/web/public/fonts/sitescout/Inter-400-1F00-89268580.woff2","apps/web/public/fonts/sitescout/Inter-500-0000-f6cd3edd.woff2","apps/web/public/fonts/sitescout/Inter-500-0100-61bfcdb2.woff2","apps/web/public/fonts/sitescout/Inter-500-0102-d53fe561.woff2","apps/web/public/fonts/sitescout/Inter-500-0301-502cf6f3.woff2","apps/web/public/fonts/sitescout/Inter-500-0370-d3230b38.woff2","apps/web/public/fonts/sitescout/Inter-500-0460-f617bd9e.woff2","apps/web/public/fonts/sitescout/Inter-500-1F00-89268580.woff2","apps/web/public/fonts/sitescout/Inter-600-0000-f6cd3edd.woff2","apps/web/public/fonts/sitescout/Inter-600-0100-61bfcdb2.woff2","apps/web/public/fonts/sitescout/Inter-600-0102-d53fe561.woff2","apps/web/public/fonts/sitescout/Inter-600-0301-502cf6f3.woff2","apps/web/public/fonts/sitescout/Inter-600-0370-d3230b38.woff2","apps/web/public/fonts/sitescout/Inter-600-0460-f617bd9e.woff2","apps/web/public/fonts/sitescout/Inter-600-1F00-89268580.woff2","apps/web/public/fonts/sitescout/Inter-700-0000-f6cd3edd.woff2","apps/web/public/fonts/sitescout/Inter-700-0100-61bfcdb2.woff2","apps/web/public/fonts/sitescout/Inter-700-0102-d53fe561.woff2","apps/web/public/fonts/sitescout/Inter-700-0301-502cf6f3.woff2","apps/web/public/fonts/sitescout/Inter-700-0370-d3230b38.woff2","apps/web/public/fonts/sitescout/Inter-700-0460-f617bd9e.woff2","apps/web/public/fonts/sitescout/Inter-700-1F00-89268580.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-400-0000-d60a3608.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-400-0100-58d40118.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-400-0102-5731ccc1.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-400-0301-933d4a8c.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-400-0370-7e45a756.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-400-0460-c34028be.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-500-0000-d60a3608.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-500-0100-58d40118.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-500-0102-5731ccc1.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-500-0301-933d4a8c.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-500-0370-7e45a756.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-500-0460-c34028be.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-600-0000-d60a3608.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-600-0100-58d40118.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-600-0102-5731ccc1.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-600-0301-933d4a8c.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-600-0370-7e45a756.woff2","apps/web/public/fonts/sitescout/JetBrainsMono-600-0460-c34028be.woff2","apps/web/src/app/console/page.tsx","apps/web/src/app/globals.css","apps/web/src/app/layout.tsx","apps/web/src/app/page.tsx","apps/web/src/components/EventFeed.tsx","apps/web/src/components/OrdersPanel.tsx","apps/web/src/components/RealtimeBar.tsx","apps/web/src/components/UsersPanel.tsx","apps/web/src/components/sitescout/AcceptanceCenter.tsx","apps/web/src/components/sitescout/CityMap.tsx","apps/web/src/components/sitescout/CompareModal.tsx","apps/web/src/components/sitescout/CompetitorSection.tsx","apps/web/src/components/sitescout/ComplianceSection.tsx","apps/web/src/components/sitescout/ScoreSection.tsx","apps/web/src/components/sitescout/SiteScoutApp.tsx","apps/web/src/components/sitescout/StakeoutSection.tsx","apps/web/src/components/sitescout/TierSection.tsx","apps/web/src/components/sitescout/sitescout.css","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/hooks/useSSE.ts","apps/web/src/hooks/useWebSocket.ts","apps/web/src/lib/api.ts","apps/web/src/lib/providers.tsx","apps/web/src/lib/sitescout-labels.ts","apps/web/src/lib/sitescout-types.ts","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/base-framework-migration.md","docs/domain-glossary.md","docs/domain/owner-matrix.md","docs/domain/site-selection-blueprint.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/site-fixtures.ts","packages/contracts/src/site.test.ts","packages/contracts/src/site.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/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-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","tsconfig.base.json","turbo.json"],"removed":[],"modified":[]},"repository":{"id":56,"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":"hidian-site-selection","full_name":"luoanwu/hidian-site-selection","description":"嗨点选址 / SiteScout monorepo","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":27,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/hidian-site-selection/languages","html_url":"https://gitea.g-hi.com/luoanwu/hidian-site-selection","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/hidian-site-selection","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/hidian-site-selection.git","clone_url":"https://gitea.g-hi.com/luoanwu/hidian-site-selection.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-06T16:32:39+08:00","updated_at":"2026-07-06T16:33: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
|
8
|
1783326795
|
1783326922
|
0
|
1783326783
|
1783326922
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23403
|
chore: initialize data analysis scaffold
|
55
|
5
|
governance.yml
|
1
|
5
|
0
|
refs/heads/main
|
8b9d81d390dac8db76b755c9d7a25f7439e2a59b
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"0000000000000000000000000000000000000000","after":"8b9d81d390dac8db76b755c9d7a25f7439e2a59b","compare_url":"https://gitea.g-hi.com/","commits":[{"id":"8b9d81d390dac8db76b755c9d7a25f7439e2a59b","message":"chore: initialize data analysis scaffold\n","url":"https://gitea.g-hi.com/luoanwu/data-analysis/commit/8b9d81d390dac8db76b755c9d7a25f7439e2a59b","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-06T01:29:19-07:00","added":[".claude/agents/acceptance-runner.md",".claude/agents/module-blueprint.md",".claude/launch.json",".claude/skills/business-module-intake/SKILL.md",".claude/skills/frontend-api-react/SKILL.md",".claude/skills/frontend-view-react/SKILL.md",".claude/skills/frontend-view-react/references/view-templates.md",".claude/skills/fullstack-7layer-react/SKILL.md",".claude/skills/fullstack-7layer-react/references/fullstack-react-templates.md",".claude/skills/zustand-store/SKILL.md",".github/pull_request_template.md",".github/workflows/governance.yml",".gitignore","AGENTS.md","CLAUDE.md","README.md","apps/api-fastify/.env.example","apps/api-fastify/.gitignore","apps/api-fastify/package.json","apps/api-fastify/pnpm-lock.yaml","apps/api-fastify/prisma/migrations/20260608150500_init/migration.sql","apps/api-fastify/prisma/migrations/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/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/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/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/e2e/juxi.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/scripts/sync-duckdb-assets.mjs","apps/web/src/app/api/llm/chart-spec/route.ts","apps/web/src/app/globals.css","apps/web/src/app/juxi/JuxiApp.tsx","apps/web/src/app/juxi/JuxiWorkbench.tsx","apps/web/src/app/juxi/juxi.css","apps/web/src/app/juxi/page.tsx","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/hooks/useSSE.ts","apps/web/src/hooks/useWebSocket.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/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","package.json","packages/chart-dsl/README.md","packages/chart-dsl/package.json","packages/chart-dsl/src/AnalyticsCanvas.tsx","packages/chart-dsl/src/ChartCard.css","packages/chart-dsl/src/ChartCard.tsx","packages/chart-dsl/src/compile.test.ts","packages/chart-dsl/src/compile.ts","packages/chart-dsl/src/css.d.ts","packages/chart-dsl/src/duckdb.ts","packages/chart-dsl/src/hooks.ts","packages/chart-dsl/src/index.ts","packages/chart-dsl/src/llm.ts","packages/chart-dsl/src/schema.test.ts","packages/chart-dsl/src/schema.ts","packages/chart-dsl/src/theme.ts","packages/chart-dsl/tsconfig.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/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-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","tsconfig.base.json","turbo.json"],"removed":[],"modified":[]}],"total_commits":0,"head_commit":{"id":"8b9d81d390dac8db76b755c9d7a25f7439e2a59b","message":"chore: initialize data analysis scaffold\n","url":"https://gitea.g-hi.com/luoanwu/data-analysis/commit/8b9d81d390dac8db76b755c9d7a25f7439e2a59b","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-06T01:29:19-07:00","added":[".claude/agents/acceptance-runner.md",".claude/agents/module-blueprint.md",".claude/launch.json",".claude/skills/business-module-intake/SKILL.md",".claude/skills/frontend-api-react/SKILL.md",".claude/skills/frontend-view-react/SKILL.md",".claude/skills/frontend-view-react/references/view-templates.md",".claude/skills/fullstack-7layer-react/SKILL.md",".claude/skills/fullstack-7layer-react/references/fullstack-react-templates.md",".claude/skills/zustand-store/SKILL.md",".github/pull_request_template.md",".github/workflows/governance.yml",".gitignore","AGENTS.md","CLAUDE.md","README.md","apps/api-fastify/.env.example","apps/api-fastify/.gitignore","apps/api-fastify/package.json","apps/api-fastify/pnpm-lock.yaml","apps/api-fastify/prisma/migrations/20260608150500_init/migration.sql","apps/api-fastify/prisma/migrations/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/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/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/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/e2e/juxi.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/scripts/sync-duckdb-assets.mjs","apps/web/src/app/api/llm/chart-spec/route.ts","apps/web/src/app/globals.css","apps/web/src/app/juxi/JuxiApp.tsx","apps/web/src/app/juxi/JuxiWorkbench.tsx","apps/web/src/app/juxi/juxi.css","apps/web/src/app/juxi/page.tsx","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/hooks/useSSE.ts","apps/web/src/hooks/useWebSocket.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/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","package.json","packages/chart-dsl/README.md","packages/chart-dsl/package.json","packages/chart-dsl/src/AnalyticsCanvas.tsx","packages/chart-dsl/src/ChartCard.css","packages/chart-dsl/src/ChartCard.tsx","packages/chart-dsl/src/compile.test.ts","packages/chart-dsl/src/compile.ts","packages/chart-dsl/src/css.d.ts","packages/chart-dsl/src/duckdb.ts","packages/chart-dsl/src/hooks.ts","packages/chart-dsl/src/index.ts","packages/chart-dsl/src/llm.ts","packages/chart-dsl/src/schema.test.ts","packages/chart-dsl/src/schema.ts","packages/chart-dsl/src/theme.ts","packages/chart-dsl/tsconfig.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/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-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","tsconfig.base.json","turbo.json"],"removed":[],"modified":[]},"repository":{"id":55,"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":"data-analysis","full_name":"luoanwu/data-analysis","description":"数据分析项目 / Data Analysis monorepo","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":27,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/data-analysis/languages","html_url":"https://gitea.g-hi.com/luoanwu/data-analysis","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/data-analysis","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/data-analysis.git","clone_url":"https://gitea.g-hi.com/luoanwu/data-analysis.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-06T16:30:36+08:00","updated_at":"2026-07-06T16:30:47+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}...
|
push
|
2
|
8
|
1783326647
|
1783326795
|
0
|
1783326647
|
1783326795
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
23398
|
chore(models): track model weights with lfs
|
50
|
5
|
lyra-production-governance.yml
|
1
|
5
|
0
|
refs/heads/main
|
87bcbf6ebbf43784219f8e6a5a40d6cd8fc3041c
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"0000000000000000000000000000000000000000","after":"87bcbf6ebbf43784219f8e6a5a40d6cd8fc3041c","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-song-library-alignment/compare/dc908e7f6ad95ec3d1714681645cb710e622941b...87bcbf6ebbf43784219f8e6a5a40d6cd8fc3041c","commits":[{"id":"87bcbf6ebbf43784219f8e6a5a40d6cd8fc3041c","message":"chore(models): track model weights with lfs\n","url":"https://gitea.g-hi.com/luoanwu/juhi-song-library-alignment/commit/87bcbf6ebbf43784219f8e6a5a40d6cd8fc3041c","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-02T01:00:28-07:00","added":[".gitattributes","models/BTC-ISMIR19/test/btc_model.pt","models/BTC-ISMIR19/test/btc_model_large_voca.pt","models/DeepChorus/model/Deepchorus_2021.h5","models/EDGE/checkpoint.pt","models/SongFormer/model.safetensors","models/audio-separator/model_bs_roformer_ep_317_sdr_12.9755.ckpt","models/hf-home/models--OpenMuQ--MuQ-MuLan-large/blobs/d42ae3f7cb9b66759ee0089ddc70e2f28b130c2d8ba621457358272d32dd0444","models/larsnet/pretrained_larsnet_models/cymbals/pretrained_cymbals_unet.pth","models/larsnet/pretrained_larsnet_models/hihat/pretrained_hihat_unet.pth","models/larsnet/pretrained_larsnet_models/kick/pretrained_kick_unet.pth","models/larsnet/pretrained_larsnet_models/snare/pretrained_snare_unet.pth","models/larsnet/pretrained_larsnet_models/toms/pretrained_toms_unet.pth","models/singing-alignment/hubertfa/1218_hfa_model_new_dict/model.onnx","models/torch-home/hub/checkpoints/955717e8-8726e21a.th","models/torch-home/hub/checkpoints/beat_this-final0.ckpt"],"removed":[],"modified":[]},{"id":"b7aa37d866f7d33bedbd680cabc5cfd0038e359e","message":"feat(lyra): harden validation queue acceptance\n","url":"https://gitea.g-hi.com/luoanwu/juhi-song-library-alignment/commit/b7aa37d866f7d33bedbd680cabc5cfd0038e359e","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-02T00:37:29-07:00","added":["apps/api-fastify/src/modules/alignment/alignment-validation.ts","apps/api-fastify/test/alignment-validation.test.ts","apps/api-fastify/test/cors.test.ts","packages/contracts/src/alignment-validation.ts"],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/src/app.ts","apps/api-fastify/src/plugins/alignment-queue.ts","apps/api-fastify/test/alignment-queue.test.ts","apps/web/src/components/lyra/LyraWorkstation.tsx","apps/web/src/lib/api.ts","apps/web/src/lib/lyra-data.ts","packages/contracts/src/alignment-run.ts","packages/contracts/src/alignment.ts","packages/contracts/src/index.ts","reports/analysis-artifacts.latest.json","reports/deployment-readiness.latest.json","reports/experience-enhancements.latest.json","reports/frontend-contracts-sync.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/http-ui-acceptance.latest.json","reports/lyra-domain.latest.json","reports/migrations.latest.json","reports/model-assets.latest.json","reports/muq-mulan-artifacts.latest.json","reports/naming.latest.json","reports/production-readiness.latest.json","reports/project-gap-analysis.latest.md","reports/project-independence.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/service-deployment.latest.json","reports/stem-assets.latest.json","reports/ui-click-acceptance.latest.json","reports/validation-source.latest.json","reports/vtc.latest.json","scripts/check-http-ui-acceptance.mjs","scripts/check-service-deployment.mjs","scripts/check-ui-click-acceptance.mjs","scripts/start-independent-stack.mjs","曲库/Codex-点击导入验收/song.manifest.json","曲库/Codex-点击导入验收/stem-comparison.latest.json","曲库/Codex-点击导入验收/拆解音轨/bs_polarformer/stem-manifest.json","曲库/Codex-点击导入验收/拆解音轨/bs_roformer/stem-manifest.json","曲库/Codex-点击导入验收/拆解音轨/htdemucs/stem-manifest.json","曲库/周杰伦-晴天(mtv)/song.manifest.json","曲库/周杰伦-晴天(mtv)/stem-comparison.latest.json","曲库/周杰伦-晴天(mtv)/拆解音轨/bs_polarformer/stem-manifest.json","曲库/周杰伦-晴天(mtv)/拆解音轨/bs_roformer/stem-manifest.json","曲库/周杰伦-晴天(mtv)/拆解音轨/htdemucs/stem-manifest.json","曲库/街道办、欧阳耀莹-春娇与志明-粤语_/song.manifest.json","曲库/街道办、欧阳耀莹-春娇与志明-粤语_/stem-comparison.latest.json","曲库/街道办、欧阳耀莹-春娇与志明-粤语_/拆解音轨/bs_polarformer/stem-manifest.json","曲库/街道办、欧阳耀莹-春娇与志明-粤语_/拆解音轨/bs_roformer/stem-manifest.json","曲库/街道办、欧阳耀莹-春娇与志明-粤语_/拆解音轨/htdemucs/stem-manifest.json","曲库/魏翔--时差(音乐缘计划)/song.manifest.json","曲库/魏翔--时差(音乐缘计划)/stem-comparison.latest.json","曲库/魏翔--时差(音乐缘计划)/拆解音轨/bs_polarformer/stem-manifest.json","曲库/魏翔--时差(音乐缘计划)/拆解音轨/bs_roformer/stem-manifest.json","曲库/魏翔--时差(音乐缘计划)/拆解音轨/htdemucs/stem-manifest.json"]},{"id":"d650b66cb8913288b66b796d00c13751802588e3","message":"chore: media-sync lag 平滑 + 门禁/文档/报告快照同步(工作树聚合提交)\n\n非本轮 Track A/B 作者的并发在制改动 + 报告/曲库 manifest churn,聚合提交上传:\n- LyraWorkstation.tsx / lyra-data.ts:媒体同步 lag 平滑(normalizeMediaSyncLagMs +\n 节流 + 仅暂停态回读),降低抖动\n- scripts/check-{experience,http-ui,lyra-business,ui-clicks}.mjs:门禁模式微调\n- docs/product-prd.md、reports/*.latest.json、reports/product-audit-prd-20260701、\n 曲库 stem-manifest:快照/文案同步(含 project-gap-analysis P1-2 BS-RoFormer qingtian ready)\n\n验证:web+api tsc 0 错、check:governance-docs 通过、check:{lyra-business,experience,\nfrontend-contracts,analysis} 静态门禁全绿。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-song-library-alignment/commit/d650b66cb8913288b66b796d00c13751802588e3","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-01T19:48:00-07:00","added":[],"removed":[],"modified":["CLAUDE.md","apps/web/src/components/lyra/LyraWorkstation.tsx","apps/web/src/lib/lyra-data.ts","docs/product-prd.md","reports/analysis-artifacts.latest.json","reports/deployment-readiness.latest.json","reports/experience-enhancements.latest.json","reports/frontend-contracts-sync.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/lyra-domain.latest.json","reports/migrations.latest.json","reports/model-assets.latest.json","reports/muq-mulan-artifacts.latest.json","reports/naming.latest.json","reports/product-audit-prd-20260701/audit-report.md","reports/production-readiness.latest.json","reports/project-gap-analysis.latest.md","reports/project-independence.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/stem-assets.latest.json","reports/validation-source.latest.json","reports/vtc.latest.json","scripts/check-experience-enhancements.mjs","scripts/check-http-ui-acceptance.mjs","scripts/check-lyra-business.mjs","scripts/check-ui-click-acceptance.mjs","曲库/Codex-点击导入验收/song.manifest.json","曲库/Codex-点击导入验收/stem-comparison.latest.json","曲库/Codex-点击导入验收/拆解音轨/bs_polarformer/stem-manifest.json","曲库/Codex-点击导入验收/拆解音轨/bs_roformer/stem-manifest.json","曲库/Codex-点击导入验收/拆解音轨/htdemucs/stem-manifest.json","曲库/周杰伦-晴天(mtv)/song.manifest.json","曲库/周杰伦-晴天(mtv)/stem-comparison.latest.json","曲库/周杰伦-晴天(mtv)/拆解音轨/bs_polarformer/stem-manifest.json","曲库/周杰伦-晴天(mtv)/拆解音轨/bs_roformer/stem-manifest.json","曲库/周杰伦-晴天(mtv)/拆解音轨/htdemucs/stem-manifest.json","曲库/街道办、欧阳耀莹-春娇与志明-粤语_/song.manifest.json","曲库/街道办、欧阳耀莹-春娇与志明-粤语_/stem-comparison.latest.json","曲库/街道办、欧阳耀莹-春娇与志明-粤语_/拆解音轨/bs_polarformer/stem-manifest.json","曲库/街道办、欧阳耀莹-春娇与志明-粤语_/拆解音轨/bs_roformer/stem-manifest.json","曲库/街道办、欧阳耀莹-春娇与志明-粤语_/拆解音轨/htdemucs/stem-manifest.json","曲库/魏翔--时差(音乐缘计划)/song.manifest.json","曲库/魏翔--时差(音乐缘计划)/stem-comparison.latest.json","曲库/魏翔--时差(音乐缘计划)/拆解音轨/bs_polarformer/stem-manifest.json","曲库/魏翔--时差(音乐缘计划)/拆解音轨/bs_roformer/stem-manifest.json","曲库/魏翔--时差(音乐缘计划)/拆解音轨/htdemucs/stem-manifest.json"]},{"id":"ab7d6c4bf6431eb83fe45443edb7cd60757973aa","message":"test(ui-clicks): 稳定鼓件 console 测试竞态 + 补 analysis-runs gitignore + 治理回灌\n\n- check-ui-click-acceptance.mjs:console 测试在断言初始窗口鼓件状态前,先 waitForFunction\n 等鼓件 lane 段渲染出任一 cue/跳转/间隙 marker(lane 在 stem 就绪徽标之后挂载,Track A\n mount 成本放大了这个 latent race)。修后 check:ui-clicks 稳定 14/14\n- .gitignore 补 reports/analysis-runs/(analysis/run 每次运行产物,不入库)\n- CLAUDE.md 回灌 DD-步骤-fix 关闭记录(Track A 七步真实操作+重置 + Track B producer 翻转),\n 含活体 /analysis/run 424 blocked 冒烟与 check:ui-clicks 14/14 证据、producer runtime\n spawnSync 残留登记\n\n验证:check:ui-clicks 14/14(JUHI_WEB_URL=3000 + 当前代码全栈)、check:governance-docs 通过。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-song-library-alignment/commit/ab7d6c4bf6431eb83fe45443edb7cd60757973aa","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-01T18:50:17-07:00","added":[],"removed":[],"modified":[".gitignore","CLAUDE.md","reports/governance-docs.latest.json","reports/ui-click-acceptance.latest.json","scripts/check-ui-click-acceptance.mjs"]},{"id":"ae55256379c94671172dad140d495e999bacf3b4","message":"feat(analysis): 步骤3 本仓真跑 beat/chord/structure producer + 门禁翻转(Track B)\n\n翻转 A1 import-only 边界:本仓接入真实整轨分析 producer(runtime 需用户显式批准安装,\n未装诚实 blocked,绝不假绿)。\n\n- workers/{beat-this,btc-chords,songformer}/scripts/run_*.py:调本机 models/{SongFormer,\n BTC-ISMIR19} + beat_this-final0.ckpt 做真实推理,输出合 contracts 消费 schema\n (songformer.sections / beat-this.report / btc-chords,秒制)。全部 guarded import:\n 缺依赖时 --smoke / 真跑诚实报 {status:blocked, issues},不抛未捕获异常\n- POST /library/songs/:id/analysis/run(tenant-scoped)+ contracts analysisRunRequest/Result;\n 子进程执行集中在 apps/api-fastify/src/modules/analysis-producers(library.service 不直接\n 起子进程,守住 check:experience 的 EDGE/library 请求路径规则);覆盖写 曲库/\u003csong\u003e/分析/*.json\n- check-analysis-artifacts.mjs 翻转:移除「禁止 producer 文件」红守卫,改为「producer 脚本\n 必须存在 + --smoke 可运行(缺失/崩溃/输出不可解析即红;blocked=runtime 未装是诚实态)+\n 触发端点接线」;report 加 producerRuntime 段(当前 ready 0 / blocked 3)\n- 前端步骤3「运行歌曲分析 (beat/chord/structure)」按钮 + 状态串(runStemSeparation 同款\n ok/blocked 诚实呈现);api.ts runSongAnalysis helper\n- 治理回灌:docs/model-boundaries.md(import-only → 有 producer,runtime 经批准安装前 blocked)、\n CLAUDE.md A1 边界翻转 + 真源地图 + 基线表 analysis-artifacts 行\n\n验证:pnpm check exit 0、web+api tsc 0 错、Fastify 真实 DB 63+1 tests(新增 analysis/run\n blocked 路径 + tenant 守卫)、三 producer --smoke 均诚实 blocked、门禁有牙(隐藏 producer\n 脚本→红,还原→绿)。边界:producer runtime 未装(外部代码执行需用户显式批准),当前不产出。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-song-library-alignment/commit/ae55256379c94671172dad140d495e999bacf3b4","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-01T18:34:52-07:00","added":["apps/api-fastify/src/modules/analysis-producers/analysis-producers.service.ts","workers/beat-this/requirements_beat_this.txt","workers/beat-this/scripts/run_beat_this.py","workers/btc-chords/requirements_btc_chords.txt","workers/btc-chords/scripts/run_btc_chords.py","workers/songformer/requirements_songformer.txt","workers/songformer/scripts/run_songformer_structure.py"],"removed":[],"modified":[".gitignore","CLAUDE.md","apps/api-fastify/src/modules/library/library.service.ts","apps/api-fastify/src/routes/library.ts","apps/api-fastify/test/library.route.test.ts","apps/web/src/components/lyra/LyraWorkstation.tsx","apps/web/src/lib/api.ts","docs/model-boundaries.md","packages/contracts/src/library.ts","reports/analysis-artifacts.latest.json","reports/deployment-readiness.latest.json","reports/experience-enhancements.latest.json","reports/frontend-contracts-sync.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/lyra-domain.latest.json","reports/migrations.latest.json","reports/model-assets.latest.json","reports/muq-mulan-artifacts.latest.json","reports/naming.latest.json","reports/production-readiness.latest.json","reports/project-independence.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/stem-assets.latest.json","reports/validation-source.latest.json","reports/vtc.latest.json","scripts/check-analysis-artifacts.mjs","曲库/Codex-点击导入验收/song.manifest.json","曲库/Codex-点击导入验收/stem-comparison.latest.json","曲库/Codex-点击导入验收/拆解音轨/bs_polarformer/stem-manifest.json","曲库/Codex-点击导入验收/拆解音轨/bs_roformer/stem-manifest.json","曲库/Codex-点击导入验收/拆解音轨/htdemucs/stem-manifest.json","曲库/周杰伦-晴天(mtv)/song.manifest.json","曲库/周杰伦-晴天(mtv)/stem-comparison.latest.json","曲库/周杰伦-晴天(mtv)/拆解音轨/bs_polarformer/stem-manifest.json","曲库/周杰伦-晴天(mtv)/拆解音轨/bs_roformer/stem-manifest.json","曲库/周杰伦-晴天(mtv)/拆解音轨/htdemucs/stem-manifest.json","曲库/街道办、欧阳耀莹-春娇与志明-粤语_/song.manifest.json","曲库/街道办、欧阳耀莹-春娇与志明-粤语_/stem-comparison.latest.json","曲库/街道办、欧阳耀莹-春娇与志明-粤语_/拆解音轨/bs_polarformer/stem-manifest.json","曲库/街道办、欧阳耀莹-春娇与志明-粤语_/拆解音轨/bs_roformer/stem-manifest.json","曲库/街道办、欧阳耀莹-春娇与志明-粤语_/拆解音轨/htdemucs/stem-manifest.json","曲库/魏翔--时差(音乐缘计划)/song.manifest.json","曲库/魏翔--时差(音乐缘计划)/stem-comparison.latest.json","曲库/魏翔--时差(音乐缘计划)/拆解音轨/bs_polarformer/stem-manifest.json","曲库/魏翔--时差(音乐缘计划)/拆解音轨/bs_roformer/stem-manifest.json","曲库/魏翔--时差(音乐缘计划)/拆解音轨/htdemucs/stem-manifest.json"]}],"total_commits":0,"head_commit":{"id":"87bcbf6ebbf43784219f8e6a5a40d6cd8fc3041c","message":"chore(models): track model weights with lfs\n","url":"https://gitea.g-hi.com/luoanwu/juhi-song-library-alignment/commit/87bcbf6ebbf43784219f8e6a5a40d6cd8fc3041c","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-02T01:00:28-07:00","added":[".gitattributes","models/BTC-ISMIR19/test/btc_model.pt","models/BTC-ISMIR19/test/btc_model_large_voca.pt","models/DeepChorus/model/Deepchorus_2021.h5","models/EDGE/checkpoint.pt","models/SongFormer/model.safetensors","models/audio-separator/model_bs_roformer_ep_317_sdr_12.9755.ckpt","models/hf-home/models--OpenMuQ--MuQ-MuLan-large/blobs/d42ae3f7cb9b66759ee0089ddc70e2f28b130c2d8ba621457358272d32dd0444","models/larsnet/pretrained_larsnet_models/cymbals/pretrained_cymbals_unet.pth","models/larsnet/pretrained_larsnet_models/hihat/pretrained_hihat_unet.pth","models/larsnet/pretrained_larsnet_models/kick/pretrained_kick_unet.pth","models/larsnet/pretrained_larsnet_models/snare/pretrained_snare_unet.pth","models/larsnet/pretrained_larsnet_models/toms/pretrained_toms_unet.pth","models/singing-alignment/hubertfa/1218_hfa_model_new_dict/model.onnx","models/torch-home/hub/checkpoints/955717e8-8726e21a.th","models/torch-home/hub/checkpoints/beat_this-final0.ckpt"],"removed":[],"modified":[]},"repository":{"id":50,"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":"juhi-song-library-alignment","full_name":"luoanwu/juhi-song-library-alignment","description":"巨嗨曲库分析对齐独立项目","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":27,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-song-library-alignment/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-song-library-alignment","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-song-library-alignment","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-song-library-alignment.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-song-library-alignment.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-07-02T15:51:41+08:00","updated_at":"2026-07-02T17:09: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
|
1
|
4
|
1782983354
|
1782983489
|
0
|
1782983352
|
1782983489
|
|
|
0
|
Edit
Delete
|
|
23397
|
fix(auth): enforce refresh token single-use
|
51
|
5
|
ci.yml
|
1
|
5
|
0
|
refs/heads/main
|
6c1f58f4c1c7dce5c443bbe14d34521de581cbf6
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"0000000000000000000000000000000000000000","after":"6c1f58f4c1c7dce5c443bbe14d34521de581cbf6","compare_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/compare/2ab8a33db6a5502c09b6b494d5e4d5ddf1e9379b...6c1f58f4c1c7dce5c443bbe14d34521de581cbf6","commits":[{"id":"6c1f58f4c1c7dce5c443bbe14d34521de581cbf6","message":"fix(auth): enforce refresh token single-use\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/6c1f58f4c1c7dce5c443bbe14d34521de581cbf6","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-01T19:52:00-07:00","added":[],"removed":[],"modified":["server/src/modules/auth/service.ts"]},{"id":"757fc19dca988dd04267e33145f1856f840992ab","message":"docs: 项目进展分析(完成/未完成/待优化/待修BUG) + README 分析文档索引\n\n进展分析:六步闭环通4.5步、automation 4孤岛未接、真AI/平台/支付均Mock、\n安全运维层空白;确认真BUG:refresh竞态无事务、revokeAll死代码损坏、JWT min(8)。\nREADME 加 2026-07-01 四份分析文档索引(治理/技术体检/进展/商业)交叉导航。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/757fc19dca988dd04267e33145f1856f840992ab","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-01T17:40:12-07:00","added":["项目进展分析_2026-07-01.md"],"removed":[],"modified":["README.md"]},{"id":"0e5d32056f62c86524f780fc97e189f276ea9e5d","message":"fix(caliber): 前后端字段口径全量收口 — 平台大写泄漏×2 + 手写/100×6 清零,棘轮门禁上线\n\n后端:metrics getPlatforms / merchant 概览 platform 出口补 toId() 小写(前端 PLATFORMS 查表不再渲染空);\ngroupbuy/audit/booking/platforms 手写 Cents/100 统一走 lib/money.ts centsToYuan。\n前端:新增 caliber.js(window.Caliber:centsToYuan/fmtCents/platformId,先于 screens 加载);\nscreens-member 私有 yuan()、screens-more OCR /100、screens-data ×2 toLowerCase 兜底全部收口。\n门禁:scripts/field-caliber-audit.mjs 四类不变式(金额命名诚实/禁手写除法/平台 toId 出口/端点双向对账)\n棘轮基线全 0,挂进前端 npm test 链(CI frontend-static 自动执行)。\n文档:治理经验库 G-010/G-011;CLAUDE.md 红线段同步;分析报告附第二轮收口记录。\n\n验证:tsc 0 错 · 单测 36/36 · 全量集成 235/235 绿 · 前端静态+治理+口径审计+AOT 构建全绿。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/0e5d32056f62c86524f780fc97e189f276ea9e5d","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-01T17:02:53-07:00","added":["scripts/field-caliber-audit.mjs","scripts/field-caliber.baseline.json","团购本地生活AI运营App/caliber.js"],"removed":[],"modified":["CLAUDE.md","server/src/modules/audit/service.ts","server/src/modules/booking/service.ts","server/src/modules/groupbuy/service.ts","server/src/modules/merchant/service.ts","server/src/modules/metrics/service.ts","server/src/modules/platforms/service.ts","团购本地生活AI运营App/index.html","团购本地生活AI运营App/package.json","团购本地生活AI运营App/screens-data.jsx","团购本地生活AI运营App/screens-member.jsx","团购本地生活AI运营App/screens-more.jsx","治理经验库.md","项目深挖分析与完善建议_2026-07-01.md"]},{"id":"46eb4e5d004553fff2c36ce1ff2f8e923f904d87","message":"fix(test): r16/r22 时间炸弹拆除 — startAt 写死 2026-06-05 致凭证 6/12 起全体过期翻红\n\n凭证 validUntil = startAt + 7 天,固定日期写下当天即注定翻红;改相对 Date.now() 生成(futureAt helper)。\n主分支集成门禁已红近三周(停摆连带伤害),非近期改动引入。教训沉淀治理经验库 G-011。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/46eb4e5d004553fff2c36ce1ff2f8e923f904d87","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-01T17:02:38-07:00","added":[],"removed":[],"modified":["server/test/r16-booking.test.ts","server/test/r22-booking-settle.test.ts"]},{"id":"f9bf497a5ea0da0da007d09b8370a5f4bf898f83","message":"docs(governance): 2026-07-01 深挖对账收口 — 数字机器对账 + 判定刷新 + 经验库补全\n\n- 新增 scripts/docs-metrics.mjs(G-006 落地):端点153/模块32/model64/迁移22/用例235/屏40,README+CLAUDE.md 全量对齐并标快照 SHA\n- README 归因口径纠偏:三处「置信区间」→「启发式参考区间」(对齐 CLAUDE.md 诚实边界红线)\n- 开发计划 v1.4 状态对齐块置顶;v1.1 过期误判就地标注;过时「未提交」状态更新\n- 阻塞点分析 v1.3:B1-B6 刷新 + 补 B7/B8/B9;最大发现=停摆4周,新排序置顶「重启节奏」\n- 治理经验库补 G-006~G-009 + G-005 复发记录\n- 新增深挖分析报告(矛盾裁定/缺口分类/owner 决策清单)\n\n验证:server test:unit 36/36 绿;screen-governance verify 40 屏绿。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/f9bf497a5ea0da0da007d09b8370a5f4bf898f83","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-01T16:39:40-07:00","added":["scripts/docs-metrics.mjs","项目深挖分析与完善建议_2026-07-01.md"],"removed":[],"modified":["CLAUDE.md","README.md","开发计划.md","治理经验库.md","项目阻塞点分析.md"]}],"total_commits":0,"head_commit":{"id":"6c1f58f4c1c7dce5c443bbe14d34521de581cbf6","message":"fix(auth): enforce refresh token single-use\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/6c1f58f4c1c7dce5c443bbe14d34521de581cbf6","author":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"luoguoguo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-07-01T19:52:00-07:00","added":[],"removed":[],"modified":["server/src/modules/auth/service.ts"]},"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":true,"fork":false,"template":false,"mirror":false,"size":27,"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-07-02T16:02:55+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
|
8
|
1782979376
|
1782979588
|
0
|
1782979375
|
1782979588
|
group: ci-${{ github.ref }}
cancel-in-progress: group: ci-${{ github.ref }}
cancel-in-progress: "true"
...
|
ci-refs/heads/main
|
1
|
Edit
Delete
|