| event_payload |
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"d3fbd4067795e6e683483f03dad85573cd6a7cd1","after":"9cc15150d067694c6a44837fe08ccbaf47d84767","compare_url":"https://gitea.g-hi.com/luoanwu/image-generation/compare/d3fbd4067795e6e683483f03dad85573cd6a7cd1...9cc15150d067694c6a44837fe08ccbaf47d84767","commits":[{"id":"9cc15150d067694c6a44837fe08ccbaf47d84767","message":"test(gates): re-run all eight heavy gates at the new fingerprint\n\nThe earlier claim that heavy gates could not run in this session was wrong.\nWhat auto mode blocks is reading the production stack's credentials -- and the\nexisting runner never needed them: it provisions its own isolated postgres,\nredis and minio containers with self-generated passwords and copies the virus\ndatabase out of hi-atelier-clamav-1 into a private clamd. Reused that recipe\nwith distinct container names and ports.\n\nAll eight gates pass: runtime, public-file, inference, script, shijie,\nproduction, ui, deps. clamd probe is real (PING/PONG, EICAR FOUND, clean OK).\nPer the repo's own lesson that ALL_GATES_PASSED does not by itself prove the\nreports are current, each report's sourceFingerprint was machine-compared\nagainst the working tree: all eight equal b9a349f9 with status=passed.\n\ncheck:ui is the evidence that matters here -- with the demo-button click gone,\nthe OCR and export assertions now run against the instance left by the real\nCreativeOperation path, and the browser run confirms that instance still has no\nrendered asset, so the assertions keep their meaning.\n\nThe 12 baseline rows marked OPEN in the previous commit are restored to GREEN\non this fresh evidence. check:governance exits 0 with heavyGateDocDrift 0.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/image-generation/commit/9cc15150d067694c6a44837fe08ccbaf47d84767","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-09-13T21:26:25-07:00","added":[],"removed":[],"modified":["CLAUDE.md","docs/governance/log/2026-09-13-appearance-edit-queued-audit.md","reports/admin-brands.desktop.png","reports/admin-brands.mobile.png","reports/admin-mobile.png","reports/content-detail.plans-desktop.png","reports/contract-consumers.latest.json","reports/creative-history-hidden.desktop.png","reports/creative-history-restore.mobile.png","reports/creative-quality.desktop.png","reports/dependency-audit.latest.json","reports/director-workbench.desktop.png","reports/governance-docs.latest.json","reports/governance.latest.json","reports/image-creation-1440.png","reports/image-edit-1135.png","reports/image-edit-1440.png","reports/image-edit-390.png","reports/image-edit-768.png","reports/image-edit-result.png","reports/inference-acceptance.latest.json","reports/material-review-concurrency-guard.latest.json","reports/migrations.latest.json","reports/model-api-key-saved.png","reports/model-credential-error.desktop.png","reports/model-credential-error.mobile.png","reports/module-boundary.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/prd-retry.mobile.png","reports/prd-review.desktop.png","reports/production-acceptance.latest.json","reports/production-delivery-released.desktop.png","reports/production-delivery-revoked.mobile.png","reports/production-pagination.desktop.png","reports/production-pagination.mobile.png","reports/production-review-preview.desktop.png","reports/production-security.latest.json","reports/production-single-tenant-create.desktop.png","reports/production-single-tenant-separation.desktop.png","reports/public-file-acceptance.latest.json","reports/public-file-integration.latest.json","reports/render-job-drainability.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/script-acceptance.latest.json","reports/script-generation-queue.png","reports/shijie-acceptance.latest.json","reports/sidecar-tests.latest.json","reports/storyboard-asset-dialog.desktop.png","reports/storyboard-director-guard.latest.json","reports/storyboard-frame-dialog.desktop.first.png","reports/storyboard-frame-dialog.desktop.last.png","reports/storyboard-frame-dialog.mobile.saved.png","reports/template-making.1135.png","reports/template-making.1280.png","reports/template-making.1440.png","reports/template-making.390.png","reports/template-making.768.png","reports/template-preview.templates.png","reports/template-saved-master.APPLICATION.png","reports/template-saved-master.GENERAL.png","reports/template-types.desktop.png","reports/template-types.mobile.png","reports/toolchain.latest.json","reports/ui-acceptance.desktop.png","reports/ui-acceptance.draft-import.png","reports/ui-acceptance.latest.json","reports/ui-acceptance.mobile.png","reports/ui-acceptance.production.png","reports/ux-edit.desktop.png","reports/ux-home.desktop.png","reports/ux-home.mobile.png","reports/ux-intake.desktop.png","reports/validation-source.latest.json","reports/video-batch-paused.mobile.png","reports/video-regenerate-2026-09-08/desktop.png","reports/video-regenerate-2026-09-08/mobile.png"]},{"id":"befdfea0383f867d23cae49c9b3288b18ff39c1d","message":"docs(governance): ratchet the new gate and mark stale heavy rows OPEN\n\nRegisters renderJobDrainabilityViolations and\nrenderJobDrainabilitySelftestFailures in reports/baseline.json at 0 (the\nstrictest value for a down ratchet; --update-baseline validates before\nwriting so it cannot bootstrap a brand-new metric), and adds the gate to the\nCLAUDE.md baseline table plus a source-map row naming\nexecuteCreativeOperation as the single outward render entry point.\n\nThis round touched apps/ and scripts/, so the source fingerprint moved from\nf368d571 to b9a349f9 and 12 baseline rows bound to the old evidence went\nstale. Auto mode blocked re-running the heavy gates (reading MinIO/ClamAV\ncredentials and provisioning an isolated database are both denied), so those\nrows are marked 🟡 OPEN rather than left claiming ✅ on stale evidence.\nheavyGateDocDrift returns to 0 because the doc no longer outruns the machine\nevidence, not because the evidence is fresh.\n\ncheck:governance now exits 0; check:scripts 94/94 pass. check:ui still needs\na real re-run before this round can be called ready.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/image-generation/commit/befdfea0383f867d23cae49c9b3288b18ff39c1d","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-09-13T21:12:50-07:00","added":[],"removed":[],"modified":["CLAUDE.md","docs/governance/log/2026-09-13-appearance-edit-queued-audit.md","reports/baseline.json","reports/contract-consumers.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/material-review-concurrency-guard.latest.json","reports/migrations.latest.json","reports/module-boundary.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/production-security.latest.json","reports/public-file-integration.latest.json","reports/render-job-drainability.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/storyboard-director-guard.latest.json","reports/toolchain.latest.json","reports/validation-source.latest.json"]},{"id":"75ab917550cf4fc78362fcd8672127bff55fddb5","message":"fix(material): retire the registration-only render-jobs entry point\n\nPOST /material-factory/instances/:id/render-jobs created a RenderJob at the\nschema default QUEUED and returned. Nothing in the repo drains a factory-path\nQUEUED row: render-worker only claims productionId+revisionId+CLAIMED, no\nBullMQ queue scans them, the outbox dispatcher only publishes to Redis, and\npoll-on-read filters sourceAssetId/maskAssetId NOT NULL which that path never\nsets. Every call therefore minted a permanently stuck row -- 39 of them in the\nlocal production database.\n\nRemoved the route from both backends, the enqueueRenderJob web wrapper, and the\ndemo-gated \"create demo instance\" button that the UI acceptance script clicked\nonce per run. requestRenderJob stays as the internal first step of\nrunRenderPipeline, which transitions QUEUED-\u003eRUNNING synchronously; the real\nuser path (executeCreativeOperation -\u003e creative worker) is unchanged.\n\nAdded check:render-drainability, a static gate with 8 negative injections that\nfails if any route, web wrapper, demo button or acceptance click comes back, or\nif either backend's runRenderPipeline loses its synchronous QUEUED-\u003eRUNNING\ntransition. Registered in governance-report with a violations + selftest\nratchet.\n\nVerified: turbo typecheck 23/23, turbo lint 11/11, naming/validation/\ncontract-consumers/module-boundary/schema gates pass, gate selftest 8/8 red.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/image-generation/commit/75ab917550cf4fc78362fcd8672127bff55fddb5","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-09-13T21:03:03-07:00","added":["reports/render-job-drainability.latest.json","scripts/check-render-job-drainability.mjs"],"removed":[],"modified":["apps/api-fastify/src/modules/material-factory/material-factory.service.ts","apps/api-fastify/src/routes/material-factory.ts","apps/api-nestjs/src/material-factory/material-factory.controller.ts","apps/api-nestjs/src/material-factory/material-factory.service.ts","apps/web/src/components/material-factory/EditStudio.tsx","apps/web/src/lib/api.ts","package.json","reports/contract-consumers.latest.json","reports/module-boundary.latest.json","reports/naming.latest.json","reports/schema-sync.latest.json","reports/validation-source.latest.json","scripts/check-ui-acceptance.mjs","scripts/governance-report.mjs"]},{"id":"9ae843f023c4987a566a4c92e0011fe0caf49c70","message":"docs(governance): audit the 39 abandoned APPEARANCE_EDIT QUEUED rows\n\nRead-only investigation; no production rows were mutated.\n\nRoot cause: POST /instances/:id/render-jobs (requestRenderJob) is a\nregistration-only endpoint by design and has never had a consumer. The\nrender worker requires productionId+revisionId+CLAIMED, no BullMQ queue\nscans factory QUEUED rows, the outbox dispatcher only publishes to Redis,\nand poll-on-read filters sourceAssetId/maskAssetId NOT NULL -- which these\nrows never have. QUEUED is effectively terminal on that path.\n\nThe rows come from the demo-gated \"create demo instance\" button in\nEditStudio, clicked by check-ui-acceptance.mjs; all 39 tenants match the\nui-acceptance-\u003cts\u003e-\u003crunid\u003e format. Not a dispatcher regression: both the\nbutton and its acceptance click date to the initial commit fc2ce503. They\nstopped on 09-05 because heavy gates moved to an isolated database, not\nbecause of a code fix.\n\nThe real user path (run-real-pipeline -\u003e CreativeOperation -\u003e creative\nworker) drains normally, and prod runs SINGLE_TENANT so the demo button is\nnot rendered for real users.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/image-generation/commit/9ae843f023c4987a566a4c92e0011fe0caf49c70","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-09-13T20:57:21-07:00","added":["docs/governance/log/2026-09-13-appearance-edit-queued-audit.md"],"removed":[],"modified":[]}],"total_commits":0,"head_commit":{"id":"9cc15150d067694c6a44837fe08ccbaf47d84767","message":"test(gates): re-run all eight heavy gates at the new fingerprint\n\nThe earlier claim that heavy gates could not run in this session was wrong.\nWhat auto mode blocks is reading the production stack's credentials -- and the\nexisting runner never needed them: it provisions its own isolated postgres,\nredis and minio containers with self-generated passwords and copies the virus\ndatabase out of hi-atelier-clamav-1 into a private clamd. Reused that recipe\nwith distinct container names and ports.\n\nAll eight gates pass: runtime, public-file, inference, script, shijie,\nproduction, ui, deps. clamd probe is real (PING/PONG, EICAR FOUND, clean OK).\nPer the repo's own lesson that ALL_GATES_PASSED does not by itself prove the\nreports are current, each report's sourceFingerprint was machine-compared\nagainst the working tree: all eight equal b9a349f9 with status=passed.\n\ncheck:ui is the evidence that matters here -- with the demo-button click gone,\nthe OCR and export assertions now run against the instance left by the real\nCreativeOperation path, and the browser run confirms that instance still has no\nrendered asset, so the assertions keep their meaning.\n\nThe 12 baseline rows marked OPEN in the previous commit are restored to GREEN\non this fresh evidence. check:governance exits 0 with heavyGateDocDrift 0.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/image-generation/commit/9cc15150d067694c6a44837fe08ccbaf47d84767","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-09-13T21:26:25-07:00","added":[],"removed":[],"modified":["CLAUDE.md","docs/governance/log/2026-09-13-appearance-edit-queued-audit.md","reports/admin-brands.desktop.png","reports/admin-brands.mobile.png","reports/admin-mobile.png","reports/content-detail.plans-desktop.png","reports/contract-consumers.latest.json","reports/creative-history-hidden.desktop.png","reports/creative-history-restore.mobile.png","reports/creative-quality.desktop.png","reports/dependency-audit.latest.json","reports/director-workbench.desktop.png","reports/governance-docs.latest.json","reports/governance.latest.json","reports/image-creation-1440.png","reports/image-edit-1135.png","reports/image-edit-1440.png","reports/image-edit-390.png","reports/image-edit-768.png","reports/image-edit-result.png","reports/inference-acceptance.latest.json","reports/material-review-concurrency-guard.latest.json","reports/migrations.latest.json","reports/model-api-key-saved.png","reports/model-credential-error.desktop.png","reports/model-credential-error.mobile.png","reports/module-boundary.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/prd-retry.mobile.png","reports/prd-review.desktop.png","reports/production-acceptance.latest.json","reports/production-delivery-released.desktop.png","reports/production-delivery-revoked.mobile.png","reports/production-pagination.desktop.png","reports/production-pagination.mobile.png","reports/production-review-preview.desktop.png","reports/production-security.latest.json","reports/production-single-tenant-create.desktop.png","reports/production-single-tenant-separation.desktop.png","reports/public-file-acceptance.latest.json","reports/public-file-integration.latest.json","reports/render-job-drainability.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/script-acceptance.latest.json","reports/script-generation-queue.png","reports/shijie-acceptance.latest.json","reports/sidecar-tests.latest.json","reports/storyboard-asset-dialog.desktop.png","reports/storyboard-director-guard.latest.json","reports/storyboard-frame-dialog.desktop.first.png","reports/storyboard-frame-dialog.desktop.last.png","reports/storyboard-frame-dialog.mobile.saved.png","reports/template-making.1135.png","reports/template-making.1280.png","reports/template-making.1440.png","reports/template-making.390.png","reports/template-making.768.png","reports/template-preview.templates.png","reports/template-saved-master.APPLICATION.png","reports/template-saved-master.GENERAL.png","reports/template-types.desktop.png","reports/template-types.mobile.png","reports/toolchain.latest.json","reports/ui-acceptance.desktop.png","reports/ui-acceptance.draft-import.png","reports/ui-acceptance.latest.json","reports/ui-acceptance.mobile.png","reports/ui-acceptance.production.png","reports/ux-edit.desktop.png","reports/ux-home.desktop.png","reports/ux-home.mobile.png","reports/ux-intake.desktop.png","reports/validation-source.latest.json","reports/video-batch-paused.mobile.png","reports/video-regenerate-2026-09-08/desktop.png","reports/video-regenerate-2026-09-08/mobile.png"]},"repository":{"id":57,"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":"image-generation","full_name":"luoanwu/image-generation","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":956436,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/image-generation/languages","html_url":"https://gitea.g-hi.com/luoanwu/image-generation","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/image-generation","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/image-generation.git","clone_url":"https://gitea.g-hi.com/luoanwu/image-generation.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":15,"open_issues_count":0,"open_pr_counter":1,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-07-06T17:04:22+08:00","updated_at":"2026-09-14T11:39:52+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}... |