| event_payload |
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"02d24022fda89d1dff23f9dd7a203e584cf8c72c","after":"470030609c843e1a22422efc24a95566f1210d0f","compare_url":"https://gitea.g-hi.com/luoanwu/juhai-quotation-system/compare/02d24022fda89d1dff23f9dd7a203e584cf8c72c...470030609c843e1a22422efc24a95566f1210d0f","commits":[{"id":"470030609c843e1a22422efc24a95566f1210d0f","message":"docs(evidence): bind quotation D3 to clean full acceptance\n","url":"https://gitea.g-hi.com/luoanwu/juhai-quotation-system/commit/470030609c843e1a22422efc24a95566f1210d0f","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-24T03:37:15-07:00","added":[],"removed":[],"modified":["reports/api-route-contract.latest.json","reports/approval-payload-contract.latest.json","reports/component-size.latest.json","reports/contract-consumers.latest.json","reports/d3-convergence.latest.json","reports/design-tokens.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/gate-selftest.latest.json","reports/governance-docs.latest.json","reports/governance-kit.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/module-integration.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/prisma-client.latest.json","reports/queue-isolation.latest.json","reports/role-permissions.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/sites-governance.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","reports/vm-deploy.latest.json","reports/workspace-hygiene.latest.json"]},{"id":"56519ef48177ef38a86bd0e38e568dc25773a04c","message":"refactor(d3): converge quotation onto NestJS FastifyAdapter\n","url":"https://gitea.g-hi.com/luoanwu/juhai-quotation-system/commit/56519ef48177ef38a86bd0e38e568dc25773a04c","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-24T03:26:48-07:00","added":["apps/api-nestjs/src/storage/multipart-image.ts","apps/api-nestjs/test/fastify-adapter.acceptance.test.ts","backend-profile.json","docs/nestjs-convergence-evidence/README.md","docs/nestjs-convergence-evidence/baseline-gate-selftest.latest.json","docs/nestjs-convergence-evidence/baseline-governance.latest.json","docs/nestjs-convergence-evidence/baseline-runtime-acceptance.latest.json","docs/nestjs-convergence-evidence/baseline-ui-acceptance.latest.json","docs/nestjs-convergence-evidence/deployment-tooling.json","docs/nestjs-convergence-evidence/gate-probes.json","docs/nestjs-convergence-evidence/protected-source-hashes.json","docs/nestjs-convergence-evidence/test-crosswalk.json","docs/nestjs-convergence.md","packages/enterprise-integration/test/enterprise-host/source-provenance.test.mjs","reports/d3-convergence.latest.json","scripts/lib/backend-profile.mjs","scripts/lib/backend-profile.test.mjs"],"removed":["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/20260730120000_quotation_core/migration.sql","apps/api-fastify/prisma/migrations/20260730210000_order_fulfillment/migration.sql","apps/api-fastify/prisma/migrations/20260730230000_product_accessories_stocktake/migration.sql","apps/api-fastify/prisma/migrations/20260731000000_procurement_customer_service_enums/migration.sql","apps/api-fastify/prisma/migrations/20260731010000_procurement_customer_service/migration.sql","apps/api-fastify/prisma/migrations/20260731020000_business_event_trace/migration.sql","apps/api-fastify/prisma/migrations/20260731021000_business_trace_relation_unique/migration.sql","apps/api-fastify/prisma/migrations/20260731030000_customer_solution_design/migration.sql","apps/api-fastify/prisma/migrations/20260731040000_receivables_slice_one/migration.sql","apps/api-fastify/prisma/migrations/20260731050000_receivables_slice_two/migration.sql","apps/api-fastify/prisma/migrations/20260731060000_receivables_slice_three/migration.sql","apps/api-fastify/prisma/migrations/20260731070000_solution_project_number/migration.sql","apps/api-fastify/prisma/migrations/20260731080000_quotation_public_policy/migration.sql","apps/api-fastify/prisma/migrations/20260731090000_solution_target_segment_tags/migration.sql","apps/api-fastify/prisma/migrations/20260801120000_approval_requester_columns/migration.sql","apps/api-fastify/prisma/migrations/20260801130000_approval_request_requested_by/migration.sql","apps/api-fastify/prisma/migrations/20260802100000_contract_request_rejection/migration.sql","apps/api-fastify/prisma/migrations/20260802150000_user_access_management/migration.sql","apps/api-fastify/prisma/migrations/20260802170000_solution_technical_reviewer_invitation/migration.sql","apps/api-fastify/prisma/migrations/20260803100000_user_multi_role/migration.sql","apps/api-fastify/prisma/migrations/20260803140000_contract_documents/migration.sql","apps/api-fastify/prisma/migrations/20260803160000_solution_survey_submission/migration.sql","apps/api-fastify/prisma/migrations/20260803180000_delivery_training/migration.sql","apps/api-fastify/prisma/migrations/20260803193000_after_sales_lifecycle/migration.sql","apps/api-fastify/prisma/migrations/20260804090000_purchase_close_and_installation_rework/migration.sql","apps/api-fastify/prisma/migrations/20260805120000_product_image_thumbnail/migration.sql","apps/api-fastify/prisma/migrations/20260807120000_quotation_void_and_restore/migration.sql","apps/api-fastify/prisma/migrations/20260831230000_outbox_replay_operations/migration.sql","apps/api-fastify/prisma/migrations/20260901120000_quotation_notification_delivery/migration.sql","apps/api-fastify/prisma/migrations/20261022120000_business_trace_source_payload_digest/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/queue-prefix.ts","apps/api-fastify/src/lib/statemachine.ts","apps/api-fastify/src/modules/after-sales/after-sales.service.ts","apps/api-fastify/src/modules/approval-inbox/approval-inbox.service.ts","apps/api-fastify/src/modules/contracts/contracts.service.ts","apps/api-fastify/src/modules/customer-solutions/customer-solutions.service.ts","apps/api-fastify/src/modules/customers/customers.service.ts","apps/api-fastify/src/modules/enterprise/enterprise.service.ts","apps/api-fastify/src/modules/fulfillment/fulfillment.service.ts","apps/api-fastify/src/modules/notification-delivery/notification-delivery.service.ts","apps/api-fastify/src/modules/orders/orders.service.ts","apps/api-fastify/src/modules/outbox-operations/outbox-operations.service.ts","apps/api-fastify/src/modules/products/products.service.ts","apps/api-fastify/src/modules/quotations/quotations.service.ts","apps/api-fastify/src/modules/receivables/receivables.service.ts","apps/api-fastify/src/modules/storage/object-storage.ts","apps/api-fastify/src/modules/tenant.ts","apps/api-fastify/src/modules/users/users.service.ts","apps/api-fastify/src/plugins/auth.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/receivables-scheduler.ts","apps/api-fastify/src/plugins/redis.ts","apps/api-fastify/src/plugins/request-context.ts","apps/api-fastify/src/routes/after-sales.ts","apps/api-fastify/src/routes/approval-inbox.ts","apps/api-fastify/src/routes/contracts.ts","apps/api-fastify/src/routes/customer-solutions.ts","apps/api-fastify/src/routes/customers.ts","apps/api-fastify/src/routes/enterprise.ts","apps/api-fastify/src/routes/files.ts","apps/api-fastify/src/routes/fulfillment.ts","apps/api-fastify/src/routes/health.ts","apps/api-fastify/src/routes/jobs.ts","apps/api-fastify/src/routes/local-auth.ts","apps/api-fastify/src/routes/notification-delivery.ts","apps/api-fastify/src/routes/orders.ts","apps/api-fastify/src/routes/outbox-operations.ts","apps/api-fastify/src/routes/products.ts","apps/api-fastify/src/routes/quotations.ts","apps/api-fastify/src/routes/receivables.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/enterprise.http.test.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-fastify/test/notification-delivery.integration.test.ts","apps/api-fastify/test/orders.integration.test.ts","apps/api-fastify/test/outbox-operations.http.test.ts","apps/api-fastify/test/outbox.deadletter.test.ts","apps/api-fastify/test/quotation-source.http.test.ts","apps/api-fastify/test/realtime.tenant.test.ts","apps/api-fastify/test/users.integration.test.ts","apps/api-fastify/tsconfig.json","apps/api-fastify/vitest.config.ts"],"modified":[".agents/skills/business-module-intake/SKILL.md",".agents/skills/fullstack-7layer-react/SKILL.md",".claude/agents/acceptance-runner.md",".claude/agents/module-blueprint.md",".claude/launch.json",".claude/skills/business-module-intake/SKILL.md",".claude/skills/fullstack-7layer-react/SKILL.md","CLAUDE.md","README.md","apps/api-nestjs/package.json","apps/api-nestjs/src/create-app.ts","apps/api-nestjs/src/enterprise/enterprise.controller.ts","apps/api-nestjs/src/events/events.gateway.ts","apps/api-nestjs/src/events/fanout.service.ts","apps/api-nestjs/src/products/products.controller.ts","apps/api-nestjs/src/redis/redis.module.ts","apps/api-nestjs/src/sse/sse.controller.ts","apps/api-nestjs/src/storage/files.controller.ts","apps/api-nestjs/test/realtime.tenant.test.ts","apps/web/e2e/acceptance.spec.ts","apps/web/src/features/fulfillment/components/FulfillmentWorkbench.tsx","deploy/vm/Dockerfile","deploy/vm/compose.yaml","docs/adr/0009-dual-backend-governance-parity.md","docs/deployment/local-vm.md","docs/domain/business-flow-overview.md","docs/enterprise/README.md","docs/enterprise/contracts.md","docs/standards/api-standard.md","docs/standards/backend-standard.md","docs/standards/database-standard.md","docs/standards/git-standard.md","docs/standards/naming-standard.md","package.json","packages/enterprise-integration/src/entity-mapping.test.ts","packages/enterprise-integration/test/enterprise-host/support.mjs","pnpm-lock.yaml","reports/baseline.json","scripts/check-api-route-contract.mjs","scripts/check-approval-payload-contract.mjs","scripts/check-contract-consumers.mjs","scripts/check-docs-truth.mjs","scripts/check-dual-backend-parity.mjs","scripts/check-migrations.mjs","scripts/check-module-integration.mjs","scripts/check-order-concurrency-guard.mjs","scripts/check-prisma-client.mjs","scripts/check-queue-isolation.mjs","scripts/check-role-permissions.mjs","scripts/check-runtime-acceptance.mjs","scripts/check-schema-sync.mjs","scripts/check-validation-source.mjs","scripts/check-vm-deploy.mjs","scripts/governance-report.mjs","scripts/lib/api-route-contract.test.mjs","scripts/lib/approval-payload-contract.test.mjs","scripts/lib/auth-source.mjs","scripts/lib/auth-source.test.mjs","scripts/lib/contract-integration.test.mjs","scripts/lib/docs-truth.test.mjs","scripts/lib/prisma-client-freshness.mjs","scripts/lib/prisma-client-freshness.test.mjs","scripts/lib/redis-url-failclosed.test.mjs","scripts/vm-deploy.sh"]}],"total_commits":0,"head_commit":{"id":"470030609c843e1a22422efc24a95566f1210d0f","message":"docs(evidence): bind quotation D3 to clean full acceptance\n","url":"https://gitea.g-hi.com/luoanwu/juhai-quotation-system/commit/470030609c843e1a22422efc24a95566f1210d0f","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-24T03:37:15-07:00","added":[],"removed":[],"modified":["reports/api-route-contract.latest.json","reports/approval-payload-contract.latest.json","reports/component-size.latest.json","reports/contract-consumers.latest.json","reports/d3-convergence.latest.json","reports/design-tokens.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/gate-selftest.latest.json","reports/governance-docs.latest.json","reports/governance-kit.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/module-integration.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/prisma-client.latest.json","reports/queue-isolation.latest.json","reports/role-permissions.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/sites-governance.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json","reports/vm-deploy.latest.json","reports/workspace-hygiene.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":38272,"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-24T15:23:11+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"}}... |