| content |
{"Commits":[{"Sha1":"9618d78da {"Commits":[{"Sha1":"9618d78da3e668f14e3c1611d7090f45eef0c085","Message":"Merge pull request #1: 打通契约构建链、补齐方案复核依据,并按真实 CI 证据更正治理记录\n\nfix: 打通契约构建链、补齐方案复核依据,并按真实 CI 证据更正治理记录","AuthorEmail":"158980461+laoluojuhai@users.noreply.github.com","AuthorName":"laoluojuhai","CommitterEmail":"noreply@github.com","CommitterName":"GitHub","Timestamp":"2026-07-31T06:46:17-07:00"},{"Sha1":"de7d09aee2a89208f006bc3ca829f289619a64b7","Message":"docs: 记录首份远端 CI 绿盘证据(PR #1 / run 30634897066)\n\nGitHub run 30634897066(PR #1,head 0d85a3d)两 job 全绿:\nstatic ✅;runtime 83 用例(contracts 31 / nestjs 26 / fastify 26)、\nUI 8 用例,与本地逐项一致,耗时 3m21s。这是本仓第一份远端绿盘证据。\n\n对照上一次 run 30603461723(push main fdf7b59):runtime 失败于\ntests-floor「expected \u003e= 74, got 0」,整步仅 24s。\n\n刻意不把这次转绿归因到本轮任何一个提交:PR #1 含 7 个提交,除本轮 3 个外\n还有 4 个存量提交(283f1bf…7638e94),其中任一都可能是真正修好它的那个,\n且 7638e94 从未单独在 CI 上跑过。要归因需另构造对照 run。\n\nG14 仍 OPEN:绿盘只覆盖该 PR 分支,github main 最近一次 run 仍红;\n尚未用受控失败 PR 证明违规真被阻断,分支保护 / required checks 也未定位。\nci-gate 行同步改写,明确「不得宣称 PR 已被机器拦截」。\n\npnpm check ✅ 绿。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-31T06:39:36-07:00"},{"Sha1":"0d85a3de6efbf4ca42ba1345bfbc66f9d1f9ac0d","Message":"docs: 按真实 CI 证据更正 C23 与 G14\n\n上一提交把一个未经正确验证的结论写进了治理真源,此处更正。\n\nC23 原文断言「全新 clone/CI 上 pnpm check 必红(contracts dist 不存在)」。\n该结论来自 `pnpm --filter \u003capp\u003e typecheck` 的负向测试,而它绕过 turbo;\nCI 实际走 `pnpm typecheck` → `turbo run typecheck`,而 turbo.json 的\ntypecheck/lint/test 均带 dependsOn ^build,contracts 会被自动构建。\nGitHub run 30603461723 的 static job 实际通过,证伪原结论。\nC23 仍然成立的部分:绕过 turbo 的调用路径(.claude/launch.json 直接\npnpm dev、check:ui 的 pnpm --filter build)确实会吃到陈旧 dist——本轮\n409 STALE_VERSION 即由此而来;clean 不删 tsconfig.tsbuildinfo 导致\nclean \u0026\u0026 build 空 emit 是独立真 bug。修复本身保留。\n\nG14 原记「尚无远端 CI 运行证据」已过时。实际已有 run 30603461723\n(push main fdf7b59,2026-07-31T04:10Z):static ✅、runtime ❌\n`tests-floor: expected \u003e= 74, got 0`,整步仅 24s,真实 DB 测试没跑起来。\n地板断言拦住了这次「0 tests 假绿」,但根因未定位,需专项排查 CI 上\nturbo run test --force 为何产不出 vitest 报告。基线表 ci-gate 行同步\n改为「已有远端证据但为红盘」,仍 OPEN。\n\n另记:两个远端 main 不同步(origin 7638e94 / github fdf7b59),\nCI 只挂 github 侧,且只在 pull_request 或 push main 触发。\n\npnpm check ✅ 绿(含 check:governance-docs / check:docs-truth)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-31T06:30:18-07:00"},{"Sha1":"67849d6aad796878e6fd40b2e54307780b01442f","Message":"chore: 重跑三级门禁并绑定干净工作区证据\n\n上一提交的报告生成于 dirty 工作区(gitSha 指向父提交 7638e94、\nworktreeDirty=true),只能支撑「本地工作区通过」。此处在 a015400 的\n干净检出上重跑三级门禁,让三份 latest 报告的 provenance 统一绑定\n该提交且 worktreeDirty=false——可支撑「提交 a015400 在本机干净工作区\n通过三级门禁」。\n\npnpm check ✅ 5/5\npnpm check:runtime ✅ 83 用例 / 0 失败(PG:55432/juhai_quotation_runtime_20260731d + Redis:6382)\npnpm check:ui ✅ 8 用例 / 0 失败(PG:55432/juhai_quotation_ui_20260731d + Redis:6382)\n\n仍不得外推为远端已发布或 CI 已通过:本分支未推送,无远端 run 证据(G14)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-31T06:16:25-07:00"},{"Sha1":"a015400b8aa901246315eb213d20354d6ded3133","Message":"fix: 打通契约构建链并补齐方案复核依据\n\n本提交包含两批改动。工作区里它们已交织到同一行/同一 hunk\n(package.json 的 check 串、next.config.ts 的 output),无法拆开单独提交。\n\n── 批次 A:本轮定位并修复(Claude 作业)────────────────────────────\n\n契约包 src/dist 漂移(C23)——P1「运行时到底读哪一份」的隐藏变体:\ntypecheck 与 contracts 单测读 src,两后端运行时经 package main 读 dist。\n`pnpm --filter` 不走 turbo 的 dependsOn ^build,dist 又被 gitignore,\n于是门禁全绿而运行时按旧契约行为。实测症状:dist 缺 versionNo →\nZod 静默 strip → 技术复核恒返 409 STALE_VERSION。\n负向验证:移走 dist 后 typecheck 立刻 TS2307,证明全新 clone/CI 上必红。\n- package.json: check 前置 build:contracts\n- scripts/check-{runtime,ui}-acceptance.mjs: 各加 contracts 构建步骤\n- .claude/launch.json: 四个配置均前置 contracts 构建\n- packages/contracts/package.json: 补 prepare;clean 补删 tsconfig.tsbuildinfo\n (composite 下留着 buildinfo 会让 clean+build 空 emit)\n\n方案表单默认路径不可用(C24):\n「使用客户主联系人」value 为空串,contactId 契约是 uuid().optional(),\n空串不过校验,导致默认状态下表单永不可提交,错误还被汇总成一句\n指不到联系人的话。register 处归一为 undefined。\n\n客户方案复核依据面板:\n技术复核/经理批准需在同一屏看到客户需求、空间与工区、平面图、逐档配置清单。\n清单只渲染规格字段,刻意不展开 product 以免带出 standardPriceCents\n(角色权限单源里技术角色不继承报价域敏感读取)。缺图纸显式标注但不阻断。\n补填资料入口接上此前零消费者的 useUpdateSolution + PATCH /solutions/:id,\n仅在 DRAFT/NEEDS_INFORMATION/REVISION_REQUIRED 开放——修复「目标客群留空\n的方案走到 APPROVED 后永远发布不了且无处补填」的死路。\n\n契约类型补齐:SolutionProduct 增补 product/surveySpace 嵌套(服务端一直下发,\n此前类型比载荷窄)。\n\nE2E 回归锁:新增专打默认联系人路径的用例,兼测复核依据面板与价格红线。\n负向验证:撤回 contactId 修复 → check:ui 报红;还原 → 8 用例全绿。\n\n附带:next.config.ts 的 output 重复定义(TS2783,本轮之前即存在,\n导致 pnpm check 红)改为三元计算,行为等价;check-vm-deploy 的 standalone\n绊网相应收窄为「字面量或该正确三元」,不放宽成 /output:.*standalone/\n(负向验证:三元写反即红)。\n\n── 批次 B:进入本轮前工作区已有的未提交改动(非本轮作业)──────────\n\nVM 部署强化(Dockerfile/compose/vm-deploy.sh/check-vm-deploy.mjs、restore/\ndrill/rollback)、移动端导航 MobileNav、客户方案域后端与验收测试、\n角色权限与模块对接门禁、方案蓝图与验收记录等。这批未经逐项复核,\n如需单独审阅可 `git reset --soft HEAD~1` 后重新拆分。\n\n── 证据(本地工作区,2026-07-31,工作区 dirty)──────────────────\npnpm check ✅ 5/5\npnpm check:runtime ✅ 83 用例 / 0 失败(地板 79→83)\npnpm check:ui ✅ 8 用例 / 0 失败(地板 7→8)\nownTestCases 地板 90→91。未推送、无远端 CI 运行证据(G14 仍 OPEN)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-31T06:13:59-07:00"}],"HeadCommit":{"Sha1":"9618d78da3e668f14e3c1611d7090f45eef0c085","Message":"Merge pull request #1: 打通契约构建链、补齐方案复核依据,并按真实 CI 证据更正治理记录\n\nfix: 打通契约构建链、补齐方案复核依据,并按真实 CI 证据更正治理记录","AuthorEmail":"158980461+laoluojuhai@users.noreply.github.com","AuthorName":"laoluojuhai","CommitterEmail":"noreply@github.com","CommitterName":"GitHub","Timestamp":"2026-07-31T06:46:17-07:00"},"CompareURL":"luoanwu/juhai-quotation-system/compare/7638e946e8817308b94a23c028a18ac465c342c6...9618d78da3e668f14e3c1611d7090f45eef0c085","Len":5}... |