|
20287
|
5
|
5
|
5
|
72
|
0
|
0
|
refs/heads/feat/solution-tier-multi-product
|
0
|
{"Commits":[{"Sha1":"bc5d9cc90 {"Commits":[{"Sha1":"bc5d9cc90007b3602ccd809110887ba581f0e4b0","Message":"docs(truth): 清除 docs/README.md 三处幽灵资产 + 两条断言机器化\n\nREADME「配套的工程工具」表长期把 commitlint 与 Husky 列成已有工具\n(\"本地 commit 时自动触发 lint + commitlint\"),实测两者从未存在:\n无 commitlint.config.js、无 .husky/、package.json 也无相关依赖。\n实锤旁证——本轮真实提交 fb6c5ad 未触发任何 hook。\n\n**\"以为有门禁\"比\"知道没有\"更危险**:读者据此跳过手工检查,等于文档\n凭空注销了一道本就不存在的卡口。故两行改为 🟡 规划未落地并写明\n\"提交前请手工跑 pnpm check\",落地模板指回 git-standard。\n\n同表第三处:`scripts/check-naming` 缺扩展名,真身是 check-naming.mjs。\n另把该表补一列「状态」,让已落地/未落地在结构上就分得开。\n\n机器化(C14 纪律:只为已实锤的漂移加断言):\n- commitlint-husky-honesty 从只扫 git-standard 扩到同时扫 README,\n 触发条件同时看 commitlint.config.js 与 .husky 两者是否存在\n- 新增 no-phantom-script-path:README 反引号里的 scripts/xxx 必须真实存在;\n 只扫反引号内且路径后至少一个字符,正文\"scripts/ + CI\"这类泛指不参与判定\n\n负向证据(scripts/lib/docs-truth.test.mjs,由 check:gate-selftest 重跑):\n- 抹掉 README / git-standard 的未落地标注 → 各自判红并命中对应断言 id\n (用 replaceAll,避免只替换第一处而静默拔牙)\n- README 写入不存在的脚本路径 → 判红命中 no-phantom-script-path\n- 泛指目录 \"scripts/ 目录\" → 保持绿,确认新断言够窄不误杀\n\npnpm check exit 0;check:gate-selftest 5 组全绿。作用域:本地工作区\ndirty(并发会话 approval-inbox 切片二在途),本提交只含这 3 个文件。\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-08-01T20:09:57-07:00"}],"HeadCommit":{"Sha1":"bc5d9cc90007b3602ccd809110887ba581f0e4b0","Message":"docs(truth): 清除 docs/README.md 三处幽灵资产 + 两条断言机器化\n\nREADME「配套的工程工具」表长期把 commitlint 与 Husky 列成已有工具\n(\"本地 commit 时自动触发 lint + commitlint\"),实测两者从未存在:\n无 commitlint.config.js、无 .husky/、package.json 也无相关依赖。\n实锤旁证——本轮真实提交 fb6c5ad 未触发任何 hook。\n\n**\"以为有门禁\"比\"知道没有\"更危险**:读者据此跳过手工检查,等于文档\n凭空注销了一道本就不存在的卡口。故两行改为 🟡 规划未落地并写明\n\"提交前请手工跑 pnpm check\",落地模板指回 git-standard。\n\n同表第三处:`scripts/check-naming` 缺扩展名,真身是 check-naming.mjs。\n另把该表补一列「状态」,让已落地/未落地在结构上就分得开。\n\n机器化(C14 纪律:只为已实锤的漂移加断言):\n- commitlint-husky-honesty 从只扫 git-standard 扩到同时扫 README,\n 触发条件同时看 commitlint.config.js 与 .husky 两者是否存在\n- 新增 no-phantom-script-path:README 反引号里的 scripts/xxx 必须真实存在;\n 只扫反引号内且路径后至少一个字符,正文\"scripts/ + CI\"这类泛指不参与判定\n\n负向证据(scripts/lib/docs-truth.test.mjs,由 check:gate-selftest 重跑):\n- 抹掉 README / git-standard 的未落地标注 → 各自判红并命中对应断言 id\n (用 replaceAll,避免只替换第一处而静默拔牙)\n- README 写入不存在的脚本路径 → 判红命中 no-phantom-script-path\n- 泛指目录 \"scripts/ 目录\" → 保持绿,确认新断言够窄不误杀\n\npnpm check exit 0;check:gate-selftest 5 组全绿。作用域:本地工作区\ndirty(并发会话 approval-inbox 切片二在途),本提交只含这 3 个文件。\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-08-01T20:09:57-07:00"},"CompareURL":"luoanwu/juhai-quotation-system/compare/fb6c5ad390153c534787dc66d90284ff257d28d1...bc5d9cc90007b3602ccd809110887ba581f0e4b0","Len":1}...
|
1785640209
|
Edit
Delete
|
|
20288
|
5
|
5
|
5
|
72
|
0
|
0
|
refs/heads/feat/solution-tier-multi-product
|
0
|
{"Commits":[{"Sha1":"b15cb5471 {"Commits":[{"Sha1":"b15cb54710ee5d1849b806adc01fcdddcaff5484","Message":"Merge remote-tracking branch 'github/feat/solution-tier-multi-product' into feat/solution-tier-multi-product\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-08-01T20:10:47-07:00"},{"Sha1":"7b9d30ff91324ab64ec0c115a0f05c0c503f81b6","Message":"Merge branch 'main' into feat/solution-tier-multi-product","AuthorEmail":"158980461+laoluojuhai@users.noreply.github.com","AuthorName":"laoluojuhai","CommitterEmail":"noreply@github.com","CommitterName":"GitHub","Timestamp":"2026-08-01T20:02:59-07:00"},{"Sha1":"ab8275d49416872ad2c720a1274d8d59068d2495","Message":"Merge pull request #5 from laoluojuhai/feat/g24-list-pagination-and-options\n\nfeat(g24): 列表分页 + 选择器 options 双读路径(关闭 G24)","AuthorEmail":"158980461+laoluojuhai@users.noreply.github.com","AuthorName":"laoluojuhai","CommitterEmail":"noreply@github.com","CommitterName":"GitHub","Timestamp":"2026-08-01T20:01:54-07:00"},{"Sha1":"ad018e731c9be66721d9bae55dde85574d03e6c2","Message":"Merge pull request #4 from laoluojuhai/chore/governance-c25-c26-c27\n\n治理修复:关闭 C25/C26/C27 —— 幽灵 UI 资产、partial schema 丢失的不变量、浏览器端 KPI","AuthorEmail":"158980461+laoluojuhai@users.noreply.github.com","AuthorName":"laoluojuhai","CommitterEmail":"noreply@github.com","CommitterName":"GitHub","Timestamp":"2026-08-01T20:01:33-07:00"},{"Sha1":"c1777844395fa1863bec92d95284c2f74250136b","Message":"Merge pull request #3 from laoluojuhai/chore/close-g14-remote-gate\n\ndocs: 关闭 G14——远端门禁从「能绿」推进到「会拦」","AuthorEmail":"158980461+laoluojuhai@users.noreply.github.com","AuthorName":"laoluojuhai","CommitterEmail":"noreply@github.com","CommitterName":"GitHub","Timestamp":"2026-08-01T20:00:23-07:00"}],"HeadCommit":{"Sha1":"b15cb54710ee5d1849b806adc01fcdddcaff5484","Message":"Merge remote-tracking branch 'github/feat/solution-tier-multi-product' into feat/solution-tier-multi-product\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-08-01T20:10:47-07:00"},"CompareURL":"luoanwu/juhai-quotation-system/compare/bc5d9cc90007b3602ccd809110887ba581f0e4b0...b15cb54710ee5d1849b806adc01fcdddcaff5484","Len":5}...
|
1785640342
|
Edit
Delete
|
|
20289
|
5
|
5
|
5
|
72
|
0
|
0
|
refs/heads/feat/solution-tier-multi-product
|
0
|
{"Commits":[{"Sha1":"3a22776ed {"Commits":[{"Sha1":"3a22776ed81118bba6b93bfb50d5b36a70b2ee35","Message":"feat(approval-inbox): 切片二(4/5 域)——补发起人字段与不可自批硬校验\n\n蓝图 §7 裁决的方案 B:中心先落地、内控另立一片。本片补齐 5 个缺发起人的域中的 4 个。\n\n## 新增字段(两后端 schema 对等 + 迁移)\n- SolutionProject.reviewRequestedBy —— **把方案推进到当前待审状态的人**。\n 单列足够:同一时刻只有一个待审阶段。技术复核阶段=提交人、经理批准阶段=技术复核人,\n 正好都是各自阶段该被禁止自批的那一个。\n- PurchaseOrder.acceptedBy —— 接单人\n- Stocktake.submittedBy —— 提交盘点的人\n\n三列一律 nullable:迁移前的存量行无从追溯发起人,**判不了就不判**。\n给个假默认值会让不可自批看起来生效、实际保护不了任何一行。\n\n## 不可自批硬校验(两后端对等)\n方案技术复核 / 方案经理批准 / 采购审批 / 盘点审批各加 approver ≠ requester 校验,\n403 + code=SELF_APPROVAL_FORBIDDEN,与红冲/退款既有口径一致。\n角色分离挡不住 ADMIN(持全部 capability),所以必须按 actor 再判一次——两层缺一不可。\n\nactor 串进 5 条写链(两后端各自的 controller/route 补 RequestActor/requestActor)。\n\n## 契约与聚合\nselfRequestedKnown 对这 4 类转 true;聚合把 requestedBy 带出来,\n自批过滤随之在这 4 类上真正生效。UI 文案改为点名「报价审批暂未记录发起人」。\n\n## E2E 随内控调整(这些红盘是闸门在正确工作,不是回归)\n原用例里同一个 ADMIN 既提交又审批——正是不可自批要禁的。浏览器会话取不到身份时\nactor 兜底为 `role:\u003cROLE\u003e`(同角色视为同一人,刻意 fail-closed,不得为测试放宽)。\n故改为:先在浏览器断言「点了没推进」(这是该闸门唯一的浏览器级证据),\n再换一个审批人身份走 API 放行。覆盖方案双审核、采购审批、盘点审批三处。\n\n## 证据(本地工作区 2026-08-01)\n- pnpm check 0 / check:runtime 296(地板 294→296)/ check:ui 10(地板 9→10)\n- 两后端各 +1 条自批 403 断言;contracts 单测覆盖 selfRequestedKnown 全集\n- 负向实跑判红后恢复:拔掉采购不可自批校验 → 期望 403 实得 200 判红\n\n## 仍未闭环\n报价审批(ApprovalRequest 无 requestedBy)**本片未做**——并发会话正在改报价域,\n避让以免卡住对方。中心因此仍**不得**笼统宣称「已保证不可自批」。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-08-01T20:15:14-07:00"}],"HeadCommit":{"Sha1":"3a22776ed81118bba6b93bfb50d5b36a70b2ee35","Message":"feat(approval-inbox): 切片二(4/5 域)——补发起人字段与不可自批硬校验\n\n蓝图 §7 裁决的方案 B:中心先落地、内控另立一片。本片补齐 5 个缺发起人的域中的 4 个。\n\n## 新增字段(两后端 schema 对等 + 迁移)\n- SolutionProject.reviewRequestedBy —— **把方案推进到当前待审状态的人**。\n 单列足够:同一时刻只有一个待审阶段。技术复核阶段=提交人、经理批准阶段=技术复核人,\n 正好都是各自阶段该被禁止自批的那一个。\n- PurchaseOrder.acceptedBy —— 接单人\n- Stocktake.submittedBy —— 提交盘点的人\n\n三列一律 nullable:迁移前的存量行无从追溯发起人,**判不了就不判**。\n给个假默认值会让不可自批看起来生效、实际保护不了任何一行。\n\n## 不可自批硬校验(两后端对等)\n方案技术复核 / 方案经理批准 / 采购审批 / 盘点审批各加 approver ≠ requester 校验,\n403 + code=SELF_APPROVAL_FORBIDDEN,与红冲/退款既有口径一致。\n角色分离挡不住 ADMIN(持全部 capability),所以必须按 actor 再判一次——两层缺一不可。\n\nactor 串进 5 条写链(两后端各自的 controller/route 补 RequestActor/requestActor)。\n\n## 契约与聚合\nselfRequestedKnown 对这 4 类转 true;聚合把 requestedBy 带出来,\n自批过滤随之在这 4 类上真正生效。UI 文案改为点名「报价审批暂未记录发起人」。\n\n## E2E 随内控调整(这些红盘是闸门在正确工作,不是回归)\n原用例里同一个 ADMIN 既提交又审批——正是不可自批要禁的。浏览器会话取不到身份时\nactor 兜底为 `role:\u003cROLE\u003e`(同角色视为同一人,刻意 fail-closed,不得为测试放宽)。\n故改为:先在浏览器断言「点了没推进」(这是该闸门唯一的浏览器级证据),\n再换一个审批人身份走 API 放行。覆盖方案双审核、采购审批、盘点审批三处。\n\n## 证据(本地工作区 2026-08-01)\n- pnpm check 0 / check:runtime 296(地板 294→296)/ check:ui 10(地板 9→10)\n- 两后端各 +1 条自批 403 断言;contracts 单测覆盖 selfRequestedKnown 全集\n- 负向实跑判红后恢复:拔掉采购不可自批校验 → 期望 403 实得 200 判红\n\n## 仍未闭环\n报价审批(ApprovalRequest 无 requestedBy)**本片未做**——并发会话正在改报价域,\n避让以免卡住对方。中心因此仍**不得**笼统宣称「已保证不可自批」。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-08-01T20:15:14-07:00"},"CompareURL":"luoanwu/juhai-quotation-system/compare/b15cb54710ee5d1849b806adc01fcdddcaff5484...3a22776ed81118bba6b93bfb50d5b36a70b2ee35","Len":1}...
|
1785640521
|
Edit
Delete
|
|
20290
|
5
|
5
|
5
|
72
|
0
|
0
|
refs/heads/feat/solution-tier-multi-product
|
0
|
{"Commits":[{"Sha1":"fbdc3680f {"Commits":[{"Sha1":"fbdc3680f4ef53e824738ca8cbf8f0e6deefce55","Message":"fix(gate): 文档诚实注收窄到行——文件级标注不该赦免同文件里的另一句谎话\n\ngit-standard 导语长期写「Conventional Commits 规范 + commitlint 自动校验」,\n而同文件 §三 已标注「🟡 规划未落地」。上一轮加的 commitlint-husky-honesty\n是**文件级**判定(文件里出现「规划未落地」即算诚实),因此绿着放行了这句\n自相矛盾的导语——而读者读的正是导语,不会翻到第三节。\n\n粒度选得比缺陷粗一级,门禁就会用\"文件里有免责声明\"赦免\"文件里另一句谎话\"。\n读者是按句子受骗的,断言就得按句子判。\n\n改动:\n- git-standard 导语改为如实描述:校验靠人、无 hook、提交前手工跑 pnpm check\n- 新增 commitlint-husky-no-auto-claim:同一行既点名 commitlint/husky\n 又宣称\"自动\"、且该行无未落地字样 → 判红。收窄到行是为了不误咬 CI 侧\n 合法的\"自动\"表述(C14:宁可窄,不造模糊规则)\n\n负向证据(scripts/lib/docs-truth.test.mjs,由 check:gate-selftest 重跑):\n- 向两份文件各写回**那句历史原文** → 各自 exit 恰为 1 且命中\n [commitlint-husky-no-auto-claim:\u003cfile\u003e],确认红在点子上而非撞上别的断言\n- 同行带未落地标注的「自动」表述 → 仍绿,锁住新断言的窄边界。\n 只有红测试的门禁会朝越咬越宽漂移,直到有人为了让它闭嘴而删掉它\n\npnpm check exit 0;check:gate-selftest 5 组全绿。作用域:本地工作区 dirty\n(并发会话 approval-inbox 切片二在途),本提交只含这 3 个文件。\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-08-01T20:18:46-07:00"}],"HeadCommit":{"Sha1":"fbdc3680f4ef53e824738ca8cbf8f0e6deefce55","Message":"fix(gate): 文档诚实注收窄到行——文件级标注不该赦免同文件里的另一句谎话\n\ngit-standard 导语长期写「Conventional Commits 规范 + commitlint 自动校验」,\n而同文件 §三 已标注「🟡 规划未落地」。上一轮加的 commitlint-husky-honesty\n是**文件级**判定(文件里出现「规划未落地」即算诚实),因此绿着放行了这句\n自相矛盾的导语——而读者读的正是导语,不会翻到第三节。\n\n粒度选得比缺陷粗一级,门禁就会用\"文件里有免责声明\"赦免\"文件里另一句谎话\"。\n读者是按句子受骗的,断言就得按句子判。\n\n改动:\n- git-standard 导语改为如实描述:校验靠人、无 hook、提交前手工跑 pnpm check\n- 新增 commitlint-husky-no-auto-claim:同一行既点名 commitlint/husky\n 又宣称\"自动\"、且该行无未落地字样 → 判红。收窄到行是为了不误咬 CI 侧\n 合法的\"自动\"表述(C14:宁可窄,不造模糊规则)\n\n负向证据(scripts/lib/docs-truth.test.mjs,由 check:gate-selftest 重跑):\n- 向两份文件各写回**那句历史原文** → 各自 exit 恰为 1 且命中\n [commitlint-husky-no-auto-claim:\u003cfile\u003e],确认红在点子上而非撞上别的断言\n- 同行带未落地标注的「自动」表述 → 仍绿,锁住新断言的窄边界。\n 只有红测试的门禁会朝越咬越宽漂移,直到有人为了让它闭嘴而删掉它\n\npnpm check exit 0;check:gate-selftest 5 组全绿。作用域:本地工作区 dirty\n(并发会话 approval-inbox 切片二在途),本提交只含这 3 个文件。\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-08-01T20:18:46-07:00"},"CompareURL":"luoanwu/juhai-quotation-system/compare/3a22776ed81118bba6b93bfb50d5b36a70b2ee35...fbdc3680f4ef53e824738ca8cbf8f0e6deefce55","Len":1}...
|
1785640746
|
Edit
Delete
|
|
20291
|
5
|
5
|
5
|
72
|
0
|
0
|
refs/heads/feat/solution-tier-multi-product
|
0
|
{"Commits":[{"Sha1":"479c74220 {"Commits":[{"Sha1":"479c742208b50c7e788cb4eea1b6b878fcfe615e","Message":"feat(approval-inbox): 切片二收口——报价审批补发起人,不可自批 6/6 道闭环\n\n上一轮避让并发会话对报价域的改动,留下 ApprovalRequest 这最后一道。\n现该域已干净(其工作已合入 b15cb54),补齐收口。\n\n## 改动\n- ApprovalRequest.requestedBy(两后端 schema 对等 + 迁移,nullable)\n- requestApproval 落发起人;decideApproval 校验 approver ≠ requester\n → 403 + code=SELF_APPROVAL_FORBIDDEN,与其余五道口径一致\n- actor 串进两后端的 request-approval / approve / reject-approval\n (Fastify 的 request-approval 因此脱离无 actor 的 noBodyAction)\n- contracts 描述表 QUOTATION_APPROVAL.selfRequestedKnown → true;\n 聚合把 PENDING 子行的 requestedBy 带出来,自批过滤在报价审批上真正生效\n- UI 文案去掉「报价审批暂未记录发起人」的例外说明\n\n## 至此不可自批覆盖 6/6 道真审批\n报价 / 方案技术复核 / 方案经理批准 / 采购 / 盘点 / 红冲 / 退款\n(仅剩的两类 selfRequestedKnown=false 是「客户决定后的待办」,本就无发起人概念)\n\n## 诚实边界(未因本片改变)\n- 列均 nullable:建列前的存量行判不了就不判,**不假装判过**\n- 仍受 G8 制约:Bearer 未验签、actor 取不到时兜底 `role:\u003cROLE\u003e`,\n 所以这是「防误操作」不是「防抵赖」,**不得宣称为审计级职责分离**\n\n## 证据(本地工作区 2026-08-01)\n- pnpm check 0 / check:runtime 296 / check:ui 10\n- 两后端各 +1 条报价自批 403 断言,并各配一条「换个审批人即通过」的反证\n ——只断言 403 无法区分「拦对了」与「谁都批不了」的误杀\n- 负向实跑判红后恢复:拔掉报价不可自批校验 → 期望 403 实得 200\n- 回灌:CLAUDE.md 真源地图新增「跨域待办审批与不可自批」条目 +\n 证据新鲜度/棘轮行更新;蓝图 §4 缺口 1、2 标记闭环\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-08-01T20:28:00-07:00"}],"HeadCommit":{"Sha1":"479c742208b50c7e788cb4eea1b6b878fcfe615e","Message":"feat(approval-inbox): 切片二收口——报价审批补发起人,不可自批 6/6 道闭环\n\n上一轮避让并发会话对报价域的改动,留下 ApprovalRequest 这最后一道。\n现该域已干净(其工作已合入 b15cb54),补齐收口。\n\n## 改动\n- ApprovalRequest.requestedBy(两后端 schema 对等 + 迁移,nullable)\n- requestApproval 落发起人;decideApproval 校验 approver ≠ requester\n → 403 + code=SELF_APPROVAL_FORBIDDEN,与其余五道口径一致\n- actor 串进两后端的 request-approval / approve / reject-approval\n (Fastify 的 request-approval 因此脱离无 actor 的 noBodyAction)\n- contracts 描述表 QUOTATION_APPROVAL.selfRequestedKnown → true;\n 聚合把 PENDING 子行的 requestedBy 带出来,自批过滤在报价审批上真正生效\n- UI 文案去掉「报价审批暂未记录发起人」的例外说明\n\n## 至此不可自批覆盖 6/6 道真审批\n报价 / 方案技术复核 / 方案经理批准 / 采购 / 盘点 / 红冲 / 退款\n(仅剩的两类 selfRequestedKnown=false 是「客户决定后的待办」,本就无发起人概念)\n\n## 诚实边界(未因本片改变)\n- 列均 nullable:建列前的存量行判不了就不判,**不假装判过**\n- 仍受 G8 制约:Bearer 未验签、actor 取不到时兜底 `role:\u003cROLE\u003e`,\n 所以这是「防误操作」不是「防抵赖」,**不得宣称为审计级职责分离**\n\n## 证据(本地工作区 2026-08-01)\n- pnpm check 0 / check:runtime 296 / check:ui 10\n- 两后端各 +1 条报价自批 403 断言,并各配一条「换个审批人即通过」的反证\n ——只断言 403 无法区分「拦对了」与「谁都批不了」的误杀\n- 负向实跑判红后恢复:拔掉报价不可自批校验 → 期望 403 实得 200\n- 回灌:CLAUDE.md 真源地图新增「跨域待办审批与不可自批」条目 +\n 证据新鲜度/棘轮行更新;蓝图 §4 缺口 1、2 标记闭环\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-08-01T20:28:00-07:00"},"CompareURL":"luoanwu/juhai-quotation-system/compare/fbdc3680f4ef53e824738ca8cbf8f0e6deefce55...479c742208b50c7e788cb4eea1b6b878fcfe615e","Len":1}...
|
1785641286
|
Edit
Delete
|
|
20292
|
5
|
5
|
5
|
72
|
0
|
0
|
refs/heads/feat/solution-tier-multi-product
|
0
|
{"Commits":[{"Sha1":"06495232f {"Commits":[{"Sha1":"06495232f1936d9e221f7745216962379994b261","Message":"chore: 合并 main 后刷新治理报告\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-08-01T20:45:47-07:00"},{"Sha1":"ae1046edf9b030e1a67c30235ddd345590e61fdf","Message":"Merge remote-tracking branch 'github/main' into feat/solution-tier-multi-product\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-08-01T20:42:40-07:00"},{"Sha1":"8ab2314d69f1885d49bbbf1fc3c5b3c6cccb6711","Message":"Merge pull request #6 from laoluojuhai/feat/solution-tier-multi-product\n\nfeat(solution): 三档方案每档多商品 + 数量默认取包房总数","AuthorEmail":"158980461+laoluojuhai@users.noreply.github.com","AuthorName":"laoluojuhai","CommitterEmail":"noreply@github.com","CommitterName":"GitHub","Timestamp":"2026-08-01T20:09:43-07:00"}],"HeadCommit":{"Sha1":"06495232f1936d9e221f7745216962379994b261","Message":"chore: 合并 main 后刷新治理报告\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-08-01T20:45:47-07:00"},"CompareURL":"luoanwu/juhai-quotation-system/compare/479c742208b50c7e788cb4eea1b6b878fcfe615e...06495232f1936d9e221f7745216962379994b261","Len":3}...
|
1785642353
|
Edit
Delete
|
|
20293
|
5
|
5
|
5
|
72
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"7619cf796 {"Commits":[{"Sha1":"7619cf79681794bf28a8dceeb606c9dcfec21a5c","Message":"Merge pull request #7 from laoluojuhai/feat/solution-tier-multi-product\n\nfeat(approval-inbox): 跨域待办审批中心切片二——不可自批 6/6 道闭环","AuthorEmail":"158980461+laoluojuhai@users.noreply.github.com","AuthorName":"laoluojuhai","CommitterEmail":"noreply@github.com","CommitterName":"GitHub","Timestamp":"2026-08-01T22:08:17-07:00"},{"Sha1":"06495232f1936d9e221f7745216962379994b261","Message":"chore: 合并 main 后刷新治理报告\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-08-01T20:45:47-07:00"},{"Sha1":"ae1046edf9b030e1a67c30235ddd345590e61fdf","Message":"Merge remote-tracking branch 'github/main' into feat/solution-tier-multi-product\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-08-01T20:42:40-07:00"},{"Sha1":"479c742208b50c7e788cb4eea1b6b878fcfe615e","Message":"feat(approval-inbox): 切片二收口——报价审批补发起人,不可自批 6/6 道闭环\n\n上一轮避让并发会话对报价域的改动,留下 ApprovalRequest 这最后一道。\n现该域已干净(其工作已合入 b15cb54),补齐收口。\n\n## 改动\n- ApprovalRequest.requestedBy(两后端 schema 对等 + 迁移,nullable)\n- requestApproval 落发起人;decideApproval 校验 approver ≠ requester\n → 403 + code=SELF_APPROVAL_FORBIDDEN,与其余五道口径一致\n- actor 串进两后端的 request-approval / approve / reject-approval\n (Fastify 的 request-approval 因此脱离无 actor 的 noBodyAction)\n- contracts 描述表 QUOTATION_APPROVAL.selfRequestedKnown → true;\n 聚合把 PENDING 子行的 requestedBy 带出来,自批过滤在报价审批上真正生效\n- UI 文案去掉「报价审批暂未记录发起人」的例外说明\n\n## 至此不可自批覆盖 6/6 道真审批\n报价 / 方案技术复核 / 方案经理批准 / 采购 / 盘点 / 红冲 / 退款\n(仅剩的两类 selfRequestedKnown=false 是「客户决定后的待办」,本就无发起人概念)\n\n## 诚实边界(未因本片改变)\n- 列均 nullable:建列前的存量行判不了就不判,**不假装判过**\n- 仍受 G8 制约:Bearer 未验签、actor 取不到时兜底 `role:\u003cROLE\u003e`,\n 所以这是「防误操作」不是「防抵赖」,**不得宣称为审计级职责分离**\n\n## 证据(本地工作区 2026-08-01)\n- pnpm check 0 / check:runtime 296 / check:ui 10\n- 两后端各 +1 条报价自批 403 断言,并各配一条「换个审批人即通过」的反证\n ——只断言 403 无法区分「拦对了」与「谁都批不了」的误杀\n- 负向实跑判红后恢复:拔掉报价不可自批校验 → 期望 403 实得 200\n- 回灌:CLAUDE.md 真源地图新增「跨域待办审批与不可自批」条目 +\n 证据新鲜度/棘轮行更新;蓝图 §4 缺口 1、2 标记闭环\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-08-01T20:28:00-07:00"},{"Sha1":"fbdc3680f4ef53e824738ca8cbf8f0e6deefce55","Message":"fix(gate): 文档诚实注收窄到行——文件级标注不该赦免同文件里的另一句谎话\n\ngit-standard 导语长期写「Conventional Commits 规范 + commitlint 自动校验」,\n而同文件 §三 已标注「🟡 规划未落地」。上一轮加的 commitlint-husky-honesty\n是**文件级**判定(文件里出现「规划未落地」即算诚实),因此绿着放行了这句\n自相矛盾的导语——而读者读的正是导语,不会翻到第三节。\n\n粒度选得比缺陷粗一级,门禁就会用\"文件里有免责声明\"赦免\"文件里另一句谎话\"。\n读者是按句子受骗的,断言就得按句子判。\n\n改动:\n- git-standard 导语改为如实描述:校验靠人、无 hook、提交前手工跑 pnpm check\n- 新增 commitlint-husky-no-auto-claim:同一行既点名 commitlint/husky\n 又宣称\"自动\"、且该行无未落地字样 → 判红。收窄到行是为了不误咬 CI 侧\n 合法的\"自动\"表述(C14:宁可窄,不造模糊规则)\n\n负向证据(scripts/lib/docs-truth.test.mjs,由 check:gate-selftest 重跑):\n- 向两份文件各写回**那句历史原文** → 各自 exit 恰为 1 且命中\n [commitlint-husky-no-auto-claim:\u003cfile\u003e],确认红在点子上而非撞上别的断言\n- 同行带未落地标注的「自动」表述 → 仍绿,锁住新断言的窄边界。\n 只有红测试的门禁会朝越咬越宽漂移,直到有人为了让它闭嘴而删掉它\n\npnpm check exit 0;check:gate-selftest 5 组全绿。作用域:本地工作区 dirty\n(并发会话 approval-inbox 切片二在途),本提交只含这 3 个文件。\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-08-01T20:18:46-07:00"}],"HeadCommit":{"Sha1":"7619cf79681794bf28a8dceeb606c9dcfec21a5c","Message":"Merge pull request #7 from laoluojuhai/feat/solution-tier-multi-product\n\nfeat(approval-inbox): 跨域待办审批中心切片二——不可自批 6/6 道闭环","AuthorEmail":"158980461+laoluojuhai@users.noreply.github.com","AuthorName":"laoluojuhai","CommitterEmail":"noreply@github.com","CommitterName":"GitHub","Timestamp":"2026-08-01T22:08:17-07:00"},"CompareURL":"luoanwu/juhai-quotation-system/compare/9618d78da3e668f14e3c1611d7090f45eef0c085...7619cf79681794bf28a8dceeb606c9dcfec21a5c","Len":31}...
|
1785647350
|
Edit
Delete
|
|
20294
|
5
|
5
|
5
|
67
|
0
|
0
|
refs/heads/governance/adversarial-audit-fixes-2026 refs/heads/governance/adversarial-audit-fixes-20260728...
|
0
|
{"Commits":[{"Sha1":"88df9fddc {"Commits":[{"Sha1":"88df9fddc74d13ebbc389e8ca265c8953c06bc22","Message":"治理: /review 首个自动化验收——fixture 注入 + G29 null 字芯片用例,UI 地板 6→7\n\n- REVIEW_WORKDIR 注入点 + 仓内确定性 fixture(fixture-song,含 G29 null 时间字)\n- check:ui 第 7 例:字级时间面板渲染 / null 字禁用虚线芯片(title 无对齐证据)/\n 有证据字可点击试听\n- 负向测试:fixture 缺失整轮红且 e2e-results 显示仅新用例 ok:false(其余 6 绿)\n- 地板 uiTestsPassed 6→7、ownTestCases 62→63;报告绑定 gitSha 348939f5\n- 边界如实记:执行链路(C24 重跑刷新)仍无自动化,fixture 用例覆盖不到\n\ncheck / check:ui(7) 本机全绿。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-08-01T22:14:08-07:00"},{"Sha1":"348939f512d2bc10165e5bcb98597837828a63f2","Message":"治理: G29 关闭——null 时间字契约落地,导出契约账本清零\n\n用户拍板选 A:无对齐证据的官方字保留、时间置 null(官方字全覆盖)。\n\n- phase2 三处修复:发射点保留 null 字 / VAD 尾延长落最后一个有时间字 /\n 全局换算透传 null;TDD 2 用例先红后绿,pytest 地板 137→139\n- 导出层 groupTimedChars:null 字并入相邻有时间段(行首并后、其余并前、\n 全 null 回落行级),elrc/ass/kas 渲染零改动消费分组结果\n- 工作台 null 字虚线禁用芯片(不参与高亮/试听),类型 start/end 允许 null\n- 4 首债务歌复跑(GUNCHARLIE/有你有我/爱情一阵风/素颜):\n check:export-contract 账本 23 行→0,存量冻结清空\n- 浏览器实证(web-verify:3131 隔离 distDir):素颜 elrc\n \u003c00:20.33\u003e的很\u003c00:20.35\u003e 文本完整、X-Export-Per-Char-Downgraded 4→0、\n 工作台 13 个 null 芯片正确渲染、控制台零错误\n\ncheck / pipeline(139) / export-contract(账本清零) 本机全绿。\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-08-01T20:51:41-07:00"},{"Sha1":"54d0518408a1fdeae63f4fb61a3d5fb885e09c0c","Message":"治理: G25 关闭——7 首债务歌定源重跑 phase2 清账,残余分类转出 G29\n\n- 定源纪律:qingtian×2 靠人声时长 314.57s 逐位比对定源晴天 full_mix,\n 分析对齐靠歌词 grep + 230.24s 时长吻合定源魏翔时差(比对而非猜);\n 爱情一阵风/素颜 现场重分离(demucs worker)\n- 7 首 phase2 重跑(52-89s/首):陈旧产物债 90 行→23 行全清\n (qingtian×2 22→0、分析对齐 21→0、GUNCHARLIE 48→1)\n- 剩余 4 首 23 行重跑不可清:实为现行代码缺口——phase2 丢弃无对齐\n 证据的官方字(素颜 L3「很」抽查推翻 roman 空预设),违反双轨契约\n 官方字全覆盖意图,登记 G29 待契约拍板\n- 冻结账本收紧 7 首→4 首;门禁 INFO 文案改指 G29(重跑不可清)\n- 词元化修复(C18/G27/C26)借清账首次过真歌产物级验证(泰/闽/国语)\n\ncheck / pipeline(137) / export-contract(存量4+新增0) 本机全绿。\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-08-01T20:33:19-07:00"},{"Sha1":"2a22686cab5028a364debbc9aad9ffeaed40d20f","Message":"治理: 语言判定/词元化单源收口 + 报告 provenance 与导出契约账本\n\n- C23 运行时单源 config/structure-modes.v1.json 入库(fresh clone 实证必红)+\n check:pipeline 入库绊网(git ls-files 而非 existsSync)\n- C24 工作台同曲重跑面板不刷新:dataToken 令牌驱动重取\n- C25 vote_language/resolve_structure_languages 标签归一 + 拉丁票白名单\n fail-closed(用户拍板),策略收口 _latin_script_language 单源\n- G27+C26 worker 词元化三处对齐 services + NFD 谚文/假名修复(分组保码位、\n 罗马化走 NFC 合成);check:pipeline 升级为跨 venv 行为比对(11 组多语言用例\n + 词元拼接无损不变量)\n- C27 phase1 CLI 声明通道接通(run/align 均传 declared_language)+\n resolve_structure_languages 对 detected/fallback/declared 入口统一归一\n- G22 主体:scripts/lib/provenance.mjs 单源,15 处报告写点统一携带\n gitSha/worktreeDirty,check:governance 强制校验(含 runtime/ui 转强制)\n- G25 半闭环:check:export-contract 门禁 + 冻结账本(首跑盘出存量债 7 首,\n 新增即阻塞、账本缺失 fail-closed)\n\npytest 地板 124→137;check / runtime(56) / ui(6) / pipeline(137) /\nexport-contract 五级门禁本机全绿;全部修复先红后绿负向测试取证。\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-08-01T20:13:48-07:00"},{"Sha1":"eb6956a03b3a63cf459aade2c4538b9a3e992e91","Message":"feat: default review runs to vocal-fast\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-30T19:52:34-07:00"}],"HeadCommit":{"Sha1":"88df9fddc74d13ebbc389e8ca265c8953c06bc22","Message":"治理: /review 首个自动化验收——fixture 注入 + G29 null 字芯片用例,UI 地板 6→7\n\n- REVIEW_WORKDIR 注入点 + 仓内确定性 fixture(fixture-song,含 G29 null 时间字)\n- check:ui 第 7 例:字级时间面板渲染 / null 字禁用虚线芯片(title 无对齐证据)/\n 有证据字可点击试听\n- 负向测试:fixture 缺失整轮红且 e2e-results 显示仅新用例 ok:false(其余 6 绿)\n- 地板 uiTestsPassed 6→7、ownTestCases 62→63;报告绑定 gitSha 348939f5\n- 边界如实记:执行链路(C24 重跑刷新)仍无自动化,fixture 用例覆盖不到\n\ncheck / check:ui(7) 本机全绿。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-08-01T22:14:08-07:00"},"CompareURL":"luoanwu/songformer-structure-lyrics/compare/7d093d6ffa01151af6a18fbd41e0d3d8fb82e9ed...88df9fddc74d13ebbc389e8ca265c8953c06bc22","Len":5}...
|
1785651775
|
Edit
Delete
|
|
20295
|
5
|
5
|
5
|
72
|
0
|
0
|
refs/heads/feat/g8-verified-auth
|
0
|
|
1785690034
|
Edit
Delete
|
|
20296
|
5
|
5
|
5
|
72
|
0
|
0
|
refs/heads/feat/g8-verified-auth
|
0
|
{"Commits":[{"Sha1":"90cb8a411 {"Commits":[{"Sha1":"90cb8a4111b88f700b2dba5913e7a1e29c9666b6","Message":"feat(auth): 用户与权限管理落地——登录、受管理令牌吊销、本地身份切换\n\n承接 G8 验签切片(已合入的 auth.ts 单源),把「令牌从哪来」这一半补上:\n此前只解决了「后端是否验签」,令牌仍靠带外发放、没有账号也无从吊销。\n\n## 用户与访问管理\n- 新增 `packages/password-auth`:口令哈希与校验独立成包,不与业务代码混在一起\n- 迁移 `20260802150000_user_access_management`(两后端对等)\n- 登录端点 + `/login` 页面 + `features/users` 管理界面\n- **受管理令牌**:claims 带 `authVersion`,每次鉴权比对 DB 快照\n (同租户/同用户/同角色/ACTIVE/版本一致),任一不符即 REVOKED——\n 这让「停用账号」「改角色」能**立即生效**,而不是等令牌自然过期;\n 未带 authVersion 的 bootstrap/local 令牌走原有受控接缝,不受影响\n- 蓝图见 docs/domain/user-access-management-blueprint.md\n\n## 本地身份切换(开发接缝,非生产能力)\n`LOCAL_DEVELOPMENT_IDENTITIES` 固定目录 + 显式开关,双后端仅在非生产签发;\nWeb 用同一 cookie 同步 SSR / REST / 实时连接。**只为职责分离验收而存在**\n(不可自批需要两个不同的 sub,而浏览器会话只有一个身份),生产模式无条件关闭。\n契约层单测钉住:目录 id/sub 唯一、不含 UNAUTHENTICATED、只接受目录内身份。\n\n## 方案技术复核邀请\n迁移 `20260802170000_solution_technical_reviewer_invitation` + 两后端服务与路由,\n配套 SolutionStatusBadge;owner-matrix 与方案蓝图同步登记。\n\n## 文档\n新增 docs/spatiotemporal-fact-model.md(时空事实模型范式规范);\n词典、角色权限蓝图、待办审批蓝图、操作手册、治理经验库同步更新;\nG8 交接文档转为已完成归档,并保留四条诚实边界(RLS 未做、令牌分发非生产级、\naccess_token 进 log 的残留风险、验签可信才谈防抵赖)。\n\n## 证据(本地工作区,dirty)\n`pnpm check` exit 0。runtime/ui 由本轮实现方记录于交接文档:\n312/312 与 11/11,其中浏览器真实完成管理员→技术→管理员切换。\n该证据绑定本地工作区,不外推为远端 CI、部署或生产签收。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-08-02T09:40:29-07:00"},{"Sha1":"b1e5c5e57f3d4075b12289f9de89ae616d909b7e","Message":"feat(governance): 业务闭环五切片——事件如实、配货可取消复活、退款可撤回、合同申请可拒绝、过期报价可续期\n\n跨域闭环分析(2026-08-02)定位的死路与半接线修复:\n- A1 客户「暂缓」(DEFER)事件错标成 customer_selected → 契约新增 solution.customer_deferred,两后端按 action 如实发布\n- A2 配货单 cancel 死边接线:补 cancel 端点与订单取消级联;salesOrderId 唯一 → 取消后重配走 CANCELLED--recreate--\u003eDRAFT 同行复活,明细重建实拣归零\n- A3 退款撤回补 UI 入口 + 双后端「申请→撤回→冻结额度释放」验收\n- B1 合同申请拒绝:ContractRequestStatus 增 REJECTED(留痕三列),报价同 tx contract_reject→ACCEPTED,复活重申请;连带拆开 CONTRACT_REQUESTED 的语义混叠,新增 CONTRACT_EFFECTIVE 终态由 activateContract 同 tx 迁移(不变量测试逼出的裁决)\n- B2 过期报价续期:SENT 增 send 自环,重发=完整 send 流程(版本+1/刷新有效期/重快照开关),配件冻结幂等\n\n迁移:20260802100000_contract_request_rejection(两后端,ALTER TYPE ADD VALUE + 加列,均 additive)\n证据(本地 dirty 工作区,2026-08-02):pnpm check EXIT=0;check:runtime 330 用例全绿(地板312);check:ui 11/12——唯一红盘为并发会话 skip_technical_review WIP 与其 E2E 不同步,非本切片所致\n文档:business-flow-overview 状态机索引与主干分支、quotation-blueprint §10、inventory-blueprint §9\n\n注:本提交经 hunk 级分离,不含同工作区并发会话的用户管理/技术复核指派 WIP;\n快照缺 MobileOverview 的 CONTRACT_EFFECTIVE 标签一行(属对方文件),合并后自愈\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-08-02T09:21:45-07:00"},{"Sha1":"7b3c8328178440e90c3a332dfbbd563401c44edc","Message":"feat(g8): 验签切片完成——前端单 token、测试夹具真签、本地身份切换、auth-source 门禁与文档回灌\n\n本地三级门禁证据(2026-08-02, dirty 工作区): check 绿 / check:runtime 312 用例 / check:ui 11 用例。\n剩余 G8 边界(生产 IdP、令牌吊销轮换、RLS)见 docs/handoff/g8-verified-auth.md 与 CLAUDE.md 动态区。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-08-02T08:31:43-07:00"},{"Sha1":"83498209dddd46dfc21f45b1806b94e18d903552","Message":"docs(handoff): G8 验签改造交接文档——已裁决/已完成/剩余四步/诚实边界/已踩的坑\n\n上下文将满,把接手所需信息落盘:两项用户裁决、已完成范围、剩余四步的具体做法\n(含「测试 helper 签名保持不变、只换内部实现」这个让上百处调用点零改动的关键做法)、\n必须保留的诚实边界(RLS 未做、令牌分发非生产级、access_token 进 log 的残留风险),\n以及两个已踩过的坑(pnpm store 错位会触发清空重装;contracts lib 刻意不含 DOM)。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-08-02T00:21:26-07:00"},{"Sha1":"5f8b521692f93344dd494d71fdcfe3cd3786fa6f","Message":"feat(g8/wip): 访问令牌验签单源 + 两后端强制验签(进行中,测试与前端未改完)\n\n⚠️ **本提交是 WIP,尚未通过 runtime/ui 门禁**——两套 HTTP 验收与 E2E 仍在发\ndemo 头,必然红。推上来是为了不丢这批安全改造,勿合并。\n\n## 已完成\n- contracts 新增 auth.ts:HS256 验签单源\n · verifyAccessToken(token, secret):**显式限定 algorithms**(不写就允许\n alg:none / 算法混淆);密钥 \u003c32 字符当场抛 CONFIG 而非降级放行\n · secret 由调用方显式传入——contracts 会被打进浏览器包,自己读 env\n 就有把密钥内联进前端产物的风险\n · decodeAccessTokenClaimsUnverified 仅供 UI 门控,名字写明它不是安全校验\n · 11 条对抗性单测:alg:none / HS512 混淆 / 篡改租户 / 过期 / 弱密钥 / 非法角色\n- 两后端改为**每请求验签一次**(NestJS 全局 APP_GUARD、Fastify onRequest 钩子),\n claims 挂 req 供下游同步读取\n- 身份三件套(tenantId/role/sub)全部改从已验签 claims 取;\n **删除全部回退分支**——验签失败即 401,绝不落回 x-tenant-id/x-user-role/x-user-id\n (那条兼容路径在验签落地后就是降级攻击面,G8 原文点名)\n- SSE/WS 的 ?access_token= 同样验签;删除 ?tenantId= 明文参数\n (它等于让任何人自称任意租户)\n- 免认证白名单只有 /api/health 与 /api/public/**,默认拒绝\n\n## 一并暴露的既有问题\nCLAUDE.md 只记了「租户未验签」,实际**角色也未验签**:x-user-role 同样是\n客户端自报,整个 capability 体系建立在后端信任这个头之上。现已一并收进 token。\n\n## 未完成(下一步)\n- 前端与导入脚本仍发 demo 头\n- 两套 HTTP 验收 + E2E 需改用 jose 现签 token,并补 401 判责断言\n- contracts/tenant.ts 的旧未验签 seam 待删\n- 门禁断言(禁止 demo 头回退回潮)+ 治理回灌\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-08-02T00:07:43-07:00"}],"HeadCommit":{"Sha1":"90cb8a4111b88f700b2dba5913e7a1e29c9666b6","Message":"feat(auth): 用户与权限管理落地——登录、受管理令牌吊销、本地身份切换\n\n承接 G8 验签切片(已合入的 auth.ts 单源),把「令牌从哪来」这一半补上:\n此前只解决了「后端是否验签」,令牌仍靠带外发放、没有账号也无从吊销。\n\n## 用户与访问管理\n- 新增 `packages/password-auth`:口令哈希与校验独立成包,不与业务代码混在一起\n- 迁移 `20260802150000_user_access_management`(两后端对等)\n- 登录端点 + `/login` 页面 + `features/users` 管理界面\n- **受管理令牌**:claims 带 `authVersion`,每次鉴权比对 DB 快照\n (同租户/同用户/同角色/ACTIVE/版本一致),任一不符即 REVOKED——\n 这让「停用账号」「改角色」能**立即生效**,而不是等令牌自然过期;\n 未带 authVersion 的 bootstrap/local 令牌走原有受控接缝,不受影响\n- 蓝图见 docs/domain/user-access-management-blueprint.md\n\n## 本地身份切换(开发接缝,非生产能力)\n`LOCAL_DEVELOPMENT_IDENTITIES` 固定目录 + 显式开关,双后端仅在非生产签发;\nWeb 用同一 cookie 同步 SSR / REST / 实时连接。**只为职责分离验收而存在**\n(不可自批需要两个不同的 sub,而浏览器会话只有一个身份),生产模式无条件关闭。\n契约层单测钉住:目录 id/sub 唯一、不含 UNAUTHENTICATED、只接受目录内身份。\n\n## 方案技术复核邀请\n迁移 `20260802170000_solution_technical_reviewer_invitation` + 两后端服务与路由,\n配套 SolutionStatusBadge;owner-matrix 与方案蓝图同步登记。\n\n## 文档\n新增 docs/spatiotemporal-fact-model.md(时空事实模型范式规范);\n词典、角色权限蓝图、待办审批蓝图、操作手册、治理经验库同步更新;\nG8 交接文档转为已完成归档,并保留四条诚实边界(RLS 未做、令牌分发非生产级、\naccess_token 进 log 的残留风险、验签可信才谈防抵赖)。\n\n## 证据(本地工作区,dirty)\n`pnpm check` exit 0。runtime/ui 由本轮实现方记录于交接文档:\n312/312 与 11/11,其中浏览器真实完成管理员→技术→管理员切换。\n该证据绑定本地工作区,不外推为远端 CI、部署或生产签收。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-08-02T09:40:29-07:00"},"CompareURL":"luoanwu/juhai-quotation-system/compare/7619cf79681794bf28a8dceeb606c9dcfec21a5c...90cb8a4111b88f700b2dba5913e7a1e29c9666b6","Len":5}...
|
1785690034
|
Edit
Delete
|
|
20297
|
5
|
5
|
5
|
72
|
0
|
0
|
refs/heads/feat/g8-verified-auth
|
0
|
{"Commits":[{"Sha1":"9f1ea88bc {"Commits":[{"Sha1":"9f1ea88bcf8f55b6a1d25f0c5e5d0e282fd09a56","Message":"fix(dev): 本地启动链补齐 G8 验签所需 env——launch.json 与 README 都停在验签之前\n\n## 症状\n`preview_start` 起 web 后页面能开、功能全死:每个 API 请求 500 AUTH_NOT_CONFIGURED。\n(同时出现的 corepack `Invalid package.json` 是另一回事——那三次重试恰好撞在\n上一个 cherry-pick 的冲突窗口里,`package.json` 当时带着冲突标记,确实不是合法 JSON。\n冲突收干净后自动消失,不是配置问题。)\n\n## 根因\n`.claude/launch.json` 与 README 的「快速开始」都写于 G8 落地之前。\nG8 之后两个后端每请求都要 verifyAccessToken,缺 AUTH_JWT_SECRET 即 fail-closed 500\n——刻意不回 401:密钥没配是服务端故障,回 401 会把运维问题伪装成调用方的凭证问题。\n而 `.env.example` 双端其实都已补过密钥,漏的只有这两个**启动入口**。\n\n## 改动\n- launch.json 四个配置:后端补 AUTH_JWT_SECRET + LOCAL_IDENTITY_SWITCH_ENABLED\n- web 侧现签引导令牌:本地身份切换接口自己也要验签,没有引导令牌就是先有鸡还是\n 先有蛋。令牌用 contracts 的 signAccessToken 现签——**与后端同一份密钥、同一个\n 函数**,不另造第二条签发路径(那正是 P1 禁止的双真源形态)\n- 加 `test -n \"$NEXT_PUBLIC_AUTH_TOKEN\"`:签发失败当场退出,不让「令牌为空」\n 静默退化成满屏 401——那种失败看起来和「没登录」一模一样,最难判责\n- 顺手修 api-nestjs 的 `port` 字段:原为 3099,与实际监听的 3097 对不上\n- README 第 3 步补 AUTH_JWT_SECRET / NEXT_PUBLIC_AUTH_TOKEN 及其 fail-closed 语义;\n 命令表补 4 个已存在却从未登记的门禁(api-routes / approval-payload /\n workspace-hygiene / gate-selftest)\n\n## 证据(本地工作区,Fastify + PG:55432 + Redis:6382)\n- /api/health → `{\"status\":\"ok\",\"checks\":{\"database\":\"up\",\"redis\":\"up\"}}`\n- 无令牌 GET /api/quotations → 401;签名令牌 → 200 带真实数据;\n 令牌改一个字符 → 401(验签真的参与判定,不是摆设)\n- 浏览器 http://localhost:3098:demo-tenant 工作台渲染,KPI ¥2,733,893.60 / 5 份报价,\n 实时通道在线,本地身份切换 10 个角色可用,控制台零报错\n- `pnpm check` exit 0\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-08-02T18:24:48-07:00"},{"Sha1":"44a51eebab6962f641bdf6d95eb2742d082d0a32","Message":"fix(gate): 捡回工作区卫生门禁(C28)——check:ui 的 tsconfig 残留会自愈\n\n`34635aa` 是 2026-07-31 落在一个 detached worktree 里、**从未合入也未被重新实现**的\n改进。经核查:三个脚本文件在 main 血脉里全都不存在,棘轮无 workspaceHygieneViolations,\n而它修的 bug 至今仍在(restoreWebTypeArtifacts 仍是快照式还原)。故 cherry-pick 捡回。\n\n## 解决的问题\ncheck:ui 为规避 manifest/EMFILE 假 404(C17)给 Next 用独立 distDir `.next-ui-\u003cpid\u003e`,\nNext dev 会把该路径写进**被跟踪的** apps/web/tsconfig.json。\n此前的备份/还原是**快照式**——把启动前就存在的残留原样写回,永不自愈;\n而残留恰恰来自还原逻辑捕获不到的退出路径(SIGKILL / 并发轮次互相复活死条目)。\n本仓有并发会话共用 checkout,这条路径不是假想。\n\n## 修法两层\n- runner 还原后**无条件剥离** `.next-ui-*`:干净工作区上是恒等变换,仍严格净零\n- 独立门禁 `check:workspace-hygiene` 作第二道防线,入棘轮\n 判据刻意收窄防假门禁:只查 include 不查 exclude(node_modules 天然 gitignore,\n 一并查会注册即红,重蹈 C1);合法性只看首个路径段而非字面量白名单,\n 以免随 Next 版本增删而变成维护跑步机\n\n## 落地时的两处调整\n1. **编号 C25 → C28**:并行工作里已有另一个 C25(孤儿组件 `OrdersPanel`/`UsersPanel`),\n 撞车。按「编号只用于定位、不复用」的约定改为空号 C28。\n2. **只取代码不取报告**:原提交带的 baseline 与 20 份 report 快照已全部过期\n (gateSelftests 地板当时 2→3,现已是 6),直接取会把棘轮改坏。\n 报告全部还原为当前 HEAD,改由本轮重跑生成。\n\n## 门禁上线即抓到 5 处真实残留\n`.next-manual-10560` / `.next-ui-{49228,61102,94609}` / `.next-dev-3098`\n——比原提交记录的面更广:除 check:ui 外,手册截图 runner 与开发服务器同样会写入。\n已清理;runner 侧自愈只覆盖 `.next-ui-*`,其余 runner 若再产生仍由本门禁兜住。\n\n## 证据(本地工作区)\n`pnpm check` exit 0(含新门禁);`check:gate-selftest` 7 组负向全绿;\n真实链路负向:注入 `.next-ui-99999` → exit 1,移除后 → exit 0。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-08-02T18:13:12-07:00"}],"HeadCommit":{"Sha1":"9f1ea88bcf8f55b6a1d25f0c5e5d0e282fd09a56","Message":"fix(dev): 本地启动链补齐 G8 验签所需 env——launch.json 与 README 都停在验签之前\n\n## 症状\n`preview_start` 起 web 后页面能开、功能全死:每个 API 请求 500 AUTH_NOT_CONFIGURED。\n(同时出现的 corepack `Invalid package.json` 是另一回事——那三次重试恰好撞在\n上一个 cherry-pick 的冲突窗口里,`package.json` 当时带着冲突标记,确实不是合法 JSON。\n冲突收干净后自动消失,不是配置问题。)\n\n## 根因\n`.claude/launch.json` 与 README 的「快速开始」都写于 G8 落地之前。\nG8 之后两个后端每请求都要 verifyAccessToken,缺 AUTH_JWT_SECRET 即 fail-closed 500\n——刻意不回 401:密钥没配是服务端故障,回 401 会把运维问题伪装成调用方的凭证问题。\n而 `.env.example` 双端其实都已补过密钥,漏的只有这两个**启动入口**。\n\n## 改动\n- launch.json 四个配置:后端补 AUTH_JWT_SECRET + LOCAL_IDENTITY_SWITCH_ENABLED\n- web 侧现签引导令牌:本地身份切换接口自己也要验签,没有引导令牌就是先有鸡还是\n 先有蛋。令牌用 contracts 的 signAccessToken 现签——**与后端同一份密钥、同一个\n 函数**,不另造第二条签发路径(那正是 P1 禁止的双真源形态)\n- 加 `test -n \"$NEXT_PUBLIC_AUTH_TOKEN\"`:签发失败当场退出,不让「令牌为空」\n 静默退化成满屏 401——那种失败看起来和「没登录」一模一样,最难判责\n- 顺手修 api-nestjs 的 `port` 字段:原为 3099,与实际监听的 3097 对不上\n- README 第 3 步补 AUTH_JWT_SECRET / NEXT_PUBLIC_AUTH_TOKEN 及其 fail-closed 语义;\n 命令表补 4 个已存在却从未登记的门禁(api-routes / approval-payload /\n workspace-hygiene / gate-selftest)\n\n## 证据(本地工作区,Fastify + PG:55432 + Redis:6382)\n- /api/health → `{\"status\":\"ok\",\"checks\":{\"database\":\"up\",\"redis\":\"up\"}}`\n- 无令牌 GET /api/quotations → 401;签名令牌 → 200 带真实数据;\n 令牌改一个字符 → 401(验签真的参与判定,不是摆设)\n- 浏览器 http://localhost:3098:demo-tenant 工作台渲染,KPI ¥2,733,893.60 / 5 份报价,\n 实时通道在线,本地身份切换 10 个角色可用,控制台零报错\n- `pnpm check` exit 0\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-08-02T18:24:48-07:00"},"CompareURL":"luoanwu/juhai-quotation-system/compare/90cb8a4111b88f700b2dba5913e7a1e29c9666b6...9f1ea88bcf8f55b6a1d25f0c5e5d0e282fd09a56","Len":2}...
|
1785720302
|
Edit
Delete
|
|
20298
|
7
|
5
|
7
|
21
|
0
|
0
|
refs/heads/pay-260728
|
0
|
{"Commits":[{"Sha1":"7ee8e3d1d {"Commits":[{"Sha1":"7ee8e3d1db4d40902bb03c6461699ffde77b7ca8","Message":"卡券兑换开房金额\n","AuthorEmail":"11833999+littlemaidi@user.noreply.gitee.com","AuthorName":"LITTLEMAIDI","CommitterEmail":"11833999+littlemaidi@user.noreply.gitee.com","CommitterName":"LITTLEMAIDI","Timestamp":"2026-08-03T09:28:55+08:00"}],"HeadCommit":{"Sha1":"7ee8e3d1db4d40902bb03c6461699ffde77b7ca8","Message":"卡券兑换开房金额\n","AuthorEmail":"11833999+littlemaidi@user.noreply.gitee.com","AuthorName":"LITTLEMAIDI","CommitterEmail":"11833999+littlemaidi@user.noreply.gitee.com","CommitterName":"LITTLEMAIDI","Timestamp":"2026-08-03T09:28:55+08:00"},"CompareURL":"vodtest/pay/compare/0410249ac51e03ef64c190cacc1b78a4393f9496...7ee8e3d1db4d40902bb03c6461699ffde77b7ca8","Len":1}...
|
1785720541
|
Edit
Delete
|
|
20299
|
9
|
5
|
7
|
21
|
0
|
0
|
refs/heads/pay-260728
|
0
|
{"Commits":[{"Sha1":"7ee8e3d1d {"Commits":[{"Sha1":"7ee8e3d1db4d40902bb03c6461699ffde77b7ca8","Message":"卡券兑换开房金额\n","AuthorEmail":"11833999+littlemaidi@user.noreply.gitee.com","AuthorName":"LITTLEMAIDI","CommitterEmail":"11833999+littlemaidi@user.noreply.gitee.com","CommitterName":"LITTLEMAIDI","Timestamp":"2026-08-03T09:28:55+08:00"}],"HeadCommit":{"Sha1":"7ee8e3d1db4d40902bb03c6461699ffde77b7ca8","Message":"卡券兑换开房金额\n","AuthorEmail":"11833999+littlemaidi@user.noreply.gitee.com","AuthorName":"LITTLEMAIDI","CommitterEmail":"11833999+littlemaidi@user.noreply.gitee.com","CommitterName":"LITTLEMAIDI","Timestamp":"2026-08-03T09:28:55+08:00"},"CompareURL":"vodtest/pay/compare/0410249ac51e03ef64c190cacc1b78a4393f9496...7ee8e3d1db4d40902bb03c6461699ffde77b7ca8","Len":1}...
|
1785720541
|
Edit
Delete
|
|
20300
|
1
|
5
|
7
|
21
|
0
|
0
|
refs/heads/pay-260728
|
0
|
{"Commits":[{"Sha1":"7ee8e3d1d {"Commits":[{"Sha1":"7ee8e3d1db4d40902bb03c6461699ffde77b7ca8","Message":"卡券兑换开房金额\n","AuthorEmail":"11833999+littlemaidi@user.noreply.gitee.com","AuthorName":"LITTLEMAIDI","CommitterEmail":"11833999+littlemaidi@user.noreply.gitee.com","CommitterName":"LITTLEMAIDI","Timestamp":"2026-08-03T09:28:55+08:00"}],"HeadCommit":{"Sha1":"7ee8e3d1db4d40902bb03c6461699ffde77b7ca8","Message":"卡券兑换开房金额\n","AuthorEmail":"11833999+littlemaidi@user.noreply.gitee.com","AuthorName":"LITTLEMAIDI","CommitterEmail":"11833999+littlemaidi@user.noreply.gitee.com","CommitterName":"LITTLEMAIDI","Timestamp":"2026-08-03T09:28:55+08:00"},"CompareURL":"vodtest/pay/compare/0410249ac51e03ef64c190cacc1b78a4393f9496...7ee8e3d1db4d40902bb03c6461699ffde77b7ca8","Len":1}...
|
1785720541
|
Edit
Delete
|
|
20301
|
3
|
5
|
7
|
21
|
0
|
0
|
refs/heads/pay-260728
|
0
|
{"Commits":[{"Sha1":"7ee8e3d1d {"Commits":[{"Sha1":"7ee8e3d1db4d40902bb03c6461699ffde77b7ca8","Message":"卡券兑换开房金额\n","AuthorEmail":"11833999+littlemaidi@user.noreply.gitee.com","AuthorName":"LITTLEMAIDI","CommitterEmail":"11833999+littlemaidi@user.noreply.gitee.com","CommitterName":"LITTLEMAIDI","Timestamp":"2026-08-03T09:28:55+08:00"}],"HeadCommit":{"Sha1":"7ee8e3d1db4d40902bb03c6461699ffde77b7ca8","Message":"卡券兑换开房金额\n","AuthorEmail":"11833999+littlemaidi@user.noreply.gitee.com","AuthorName":"LITTLEMAIDI","CommitterEmail":"11833999+littlemaidi@user.noreply.gitee.com","CommitterName":"LITTLEMAIDI","Timestamp":"2026-08-03T09:28:55+08:00"},"CompareURL":"vodtest/pay/compare/0410249ac51e03ef64c190cacc1b78a4393f9496...7ee8e3d1db4d40902bb03c6461699ffde77b7ca8","Len":1}...
|
1785720541
|
Edit
Delete
|
|
20302
|
4
|
5
|
7
|
21
|
0
|
0
|
refs/heads/pay-260728
|
0
|
{"Commits":[{"Sha1":"7ee8e3d1d {"Commits":[{"Sha1":"7ee8e3d1db4d40902bb03c6461699ffde77b7ca8","Message":"卡券兑换开房金额\n","AuthorEmail":"11833999+littlemaidi@user.noreply.gitee.com","AuthorName":"LITTLEMAIDI","CommitterEmail":"11833999+littlemaidi@user.noreply.gitee.com","CommitterName":"LITTLEMAIDI","Timestamp":"2026-08-03T09:28:55+08:00"}],"HeadCommit":{"Sha1":"7ee8e3d1db4d40902bb03c6461699ffde77b7ca8","Message":"卡券兑换开房金额\n","AuthorEmail":"11833999+littlemaidi@user.noreply.gitee.com","AuthorName":"LITTLEMAIDI","CommitterEmail":"11833999+littlemaidi@user.noreply.gitee.com","CommitterName":"LITTLEMAIDI","Timestamp":"2026-08-03T09:28:55+08:00"},"CompareURL":"vodtest/pay/compare/0410249ac51e03ef64c190cacc1b78a4393f9496...7ee8e3d1db4d40902bb03c6461699ffde77b7ca8","Len":1}...
|
1785720541
|
Edit
Delete
|
|
20303
|
8
|
5
|
7
|
21
|
0
|
0
|
refs/heads/pay-260728
|
0
|
{"Commits":[{"Sha1":"7ee8e3d1d {"Commits":[{"Sha1":"7ee8e3d1db4d40902bb03c6461699ffde77b7ca8","Message":"卡券兑换开房金额\n","AuthorEmail":"11833999+littlemaidi@user.noreply.gitee.com","AuthorName":"LITTLEMAIDI","CommitterEmail":"11833999+littlemaidi@user.noreply.gitee.com","CommitterName":"LITTLEMAIDI","Timestamp":"2026-08-03T09:28:55+08:00"}],"HeadCommit":{"Sha1":"7ee8e3d1db4d40902bb03c6461699ffde77b7ca8","Message":"卡券兑换开房金额\n","AuthorEmail":"11833999+littlemaidi@user.noreply.gitee.com","AuthorName":"LITTLEMAIDI","CommitterEmail":"11833999+littlemaidi@user.noreply.gitee.com","CommitterName":"LITTLEMAIDI","Timestamp":"2026-08-03T09:28:55+08:00"},"CompareURL":"vodtest/pay/compare/0410249ac51e03ef64c190cacc1b78a4393f9496...7ee8e3d1db4d40902bb03c6461699ffde77b7ca8","Len":1}...
|
1785720541
|
Edit
Delete
|
|
20304
|
10
|
5
|
7
|
21
|
0
|
0
|
refs/heads/pay-260728
|
0
|
{"Commits":[{"Sha1":"7ee8e3d1d {"Commits":[{"Sha1":"7ee8e3d1db4d40902bb03c6461699ffde77b7ca8","Message":"卡券兑换开房金额\n","AuthorEmail":"11833999+littlemaidi@user.noreply.gitee.com","AuthorName":"LITTLEMAIDI","CommitterEmail":"11833999+littlemaidi@user.noreply.gitee.com","CommitterName":"LITTLEMAIDI","Timestamp":"2026-08-03T09:28:55+08:00"}],"HeadCommit":{"Sha1":"7ee8e3d1db4d40902bb03c6461699ffde77b7ca8","Message":"卡券兑换开房金额\n","AuthorEmail":"11833999+littlemaidi@user.noreply.gitee.com","AuthorName":"LITTLEMAIDI","CommitterEmail":"11833999+littlemaidi@user.noreply.gitee.com","CommitterName":"LITTLEMAIDI","Timestamp":"2026-08-03T09:28:55+08:00"},"CompareURL":"vodtest/pay/compare/0410249ac51e03ef64c190cacc1b78a4393f9496...7ee8e3d1db4d40902bb03c6461699ffde77b7ca8","Len":1}...
|
1785720541
|
Edit
Delete
|
|
20305
|
11
|
5
|
7
|
21
|
0
|
0
|
refs/heads/pay-260728
|
0
|
{"Commits":[{"Sha1":"7ee8e3d1d {"Commits":[{"Sha1":"7ee8e3d1db4d40902bb03c6461699ffde77b7ca8","Message":"卡券兑换开房金额\n","AuthorEmail":"11833999+littlemaidi@user.noreply.gitee.com","AuthorName":"LITTLEMAIDI","CommitterEmail":"11833999+littlemaidi@user.noreply.gitee.com","CommitterName":"LITTLEMAIDI","Timestamp":"2026-08-03T09:28:55+08:00"}],"HeadCommit":{"Sha1":"7ee8e3d1db4d40902bb03c6461699ffde77b7ca8","Message":"卡券兑换开房金额\n","AuthorEmail":"11833999+littlemaidi@user.noreply.gitee.com","AuthorName":"LITTLEMAIDI","CommitterEmail":"11833999+littlemaidi@user.noreply.gitee.com","CommitterName":"LITTLEMAIDI","Timestamp":"2026-08-03T09:28:55+08:00"},"CompareURL":"vodtest/pay/compare/0410249ac51e03ef64c190cacc1b78a4393f9496...7ee8e3d1db4d40902bb03c6461699ffde77b7ca8","Len":1}...
|
1785720541
|
Edit
Delete
|
|
20306
|
5
|
5
|
5
|
72
|
0
|
0
|
refs/heads/feat/g8-verified-auth
|
0
|
{"Commits":[{"Sha1":"4e06b6263 {"Commits":[{"Sha1":"4e06b62635319faead311e0b6799c2e47877f859","Message":"feat(fulfillment): 履约五模块 UI 优化——分批发运、采购看板、交接中文标签与终态确认\n\n- 契约单源:新增 SHIPMENT_STATE_LABELS 与 CONTRACT_REQUEST_STATUS_LABELS,\n 补齐发运/合同状态此前缺失的中文标签定义\n- 履约协同:订单卡显示下单时间与「当前责任人」指引(与安装页口径一致)\n- 采购协同:消费服务端 /purchase-orders/summary 聚合做看板指标(不在浏览器\n reduce,C27 口径);补加载/空态;四段进度条与明细待收展示\n- 物流发运:发运表单支持逐行下调本批数量(分批发运蓝图承诺补齐 UI 端);\n 新增「发运记录」区展示含已送达在内的全部发运单;配货清单补加载/空态\n- 技术履约:工单生成/开始/完成时间恒显(此前仅完工后可见)\n- 客服交接:发运/安装/合同状态全部改用 contracts 中文标签(消除英文枚举\n 直出);新增服务进度时间线;「关闭服务」终态动作补二次确认;显示交接备注\n\n证据:pnpm check 19 项全绿;contracts 240/240;check:ui 12/12 全绿\n(履约闭环用例覆盖新版发运表单/采购流转/交接卡;此前并行红项未复现)。\nCLAUDE.md 动态区证据行已同步。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-08-02T19:32:04-07:00"}],"HeadCommit":{"Sha1":"4e06b62635319faead311e0b6799c2e47877f859","Message":"feat(fulfillment): 履约五模块 UI 优化——分批发运、采购看板、交接中文标签与终态确认\n\n- 契约单源:新增 SHIPMENT_STATE_LABELS 与 CONTRACT_REQUEST_STATUS_LABELS,\n 补齐发运/合同状态此前缺失的中文标签定义\n- 履约协同:订单卡显示下单时间与「当前责任人」指引(与安装页口径一致)\n- 采购协同:消费服务端 /purchase-orders/summary 聚合做看板指标(不在浏览器\n reduce,C27 口径);补加载/空态;四段进度条与明细待收展示\n- 物流发运:发运表单支持逐行下调本批数量(分批发运蓝图承诺补齐 UI 端);\n 新增「发运记录」区展示含已送达在内的全部发运单;配货清单补加载/空态\n- 技术履约:工单生成/开始/完成时间恒显(此前仅完工后可见)\n- 客服交接:发运/安装/合同状态全部改用 contracts 中文标签(消除英文枚举\n 直出);新增服务进度时间线;「关闭服务」终态动作补二次确认;显示交接备注\n\n证据:pnpm check 19 项全绿;contracts 240/240;check:ui 12/12 全绿\n(履约闭环用例覆盖新版发运表单/采购流转/交接卡;此前并行红项未复现)。\nCLAUDE.md 动态区证据行已同步。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-08-02T19:32:04-07:00"},"CompareURL":"luoanwu/juhai-quotation-system/compare/9f1ea88bcf8f55b6a1d25f0c5e5d0e282fd09a56...4e06b62635319faead311e0b6799c2e47877f859","Len":1}...
|
1785724341
|
Edit
Delete
|
|
20307
|
1
|
5
|
1
|
21
|
0
|
0
|
refs/heads/pay-260818
|
0
|
{"Commits":[{"Sha1":"8369aa48b {"Commits":[{"Sha1":"8369aa48be0585d3ca208631afb31324ff9347f5","Message":"呼叫服务修改\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T10:47:29+08:00"}],"HeadCommit":{"Sha1":"8369aa48be0585d3ca208631afb31324ff9347f5","Message":"呼叫服务修改\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T10:47:29+08:00"},"CompareURL":"vodtest/pay/compare/d9209b1249b238a263a32f250dac950aff509511...8369aa48be0585d3ca208631afb31324ff9347f5","Len":1}...
|
1785725267
|
Edit
Delete
|
|
20308
|
9
|
5
|
1
|
21
|
0
|
0
|
refs/heads/pay-260818
|
0
|
{"Commits":[{"Sha1":"8369aa48b {"Commits":[{"Sha1":"8369aa48be0585d3ca208631afb31324ff9347f5","Message":"呼叫服务修改\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T10:47:29+08:00"}],"HeadCommit":{"Sha1":"8369aa48be0585d3ca208631afb31324ff9347f5","Message":"呼叫服务修改\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T10:47:29+08:00"},"CompareURL":"vodtest/pay/compare/d9209b1249b238a263a32f250dac950aff509511...8369aa48be0585d3ca208631afb31324ff9347f5","Len":1}...
|
1785725267
|
Edit
Delete
|
|
20309
|
3
|
5
|
1
|
21
|
0
|
0
|
refs/heads/pay-260818
|
0
|
{"Commits":[{"Sha1":"8369aa48b {"Commits":[{"Sha1":"8369aa48be0585d3ca208631afb31324ff9347f5","Message":"呼叫服务修改\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T10:47:29+08:00"}],"HeadCommit":{"Sha1":"8369aa48be0585d3ca208631afb31324ff9347f5","Message":"呼叫服务修改\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T10:47:29+08:00"},"CompareURL":"vodtest/pay/compare/d9209b1249b238a263a32f250dac950aff509511...8369aa48be0585d3ca208631afb31324ff9347f5","Len":1}...
|
1785725267
|
Edit
Delete
|
|
20310
|
4
|
5
|
1
|
21
|
0
|
0
|
refs/heads/pay-260818
|
0
|
{"Commits":[{"Sha1":"8369aa48b {"Commits":[{"Sha1":"8369aa48be0585d3ca208631afb31324ff9347f5","Message":"呼叫服务修改\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T10:47:29+08:00"}],"HeadCommit":{"Sha1":"8369aa48be0585d3ca208631afb31324ff9347f5","Message":"呼叫服务修改\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T10:47:29+08:00"},"CompareURL":"vodtest/pay/compare/d9209b1249b238a263a32f250dac950aff509511...8369aa48be0585d3ca208631afb31324ff9347f5","Len":1}...
|
1785725267
|
Edit
Delete
|
|
20311
|
7
|
5
|
1
|
21
|
0
|
0
|
refs/heads/pay-260818
|
0
|
{"Commits":[{"Sha1":"8369aa48b {"Commits":[{"Sha1":"8369aa48be0585d3ca208631afb31324ff9347f5","Message":"呼叫服务修改\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T10:47:29+08:00"}],"HeadCommit":{"Sha1":"8369aa48be0585d3ca208631afb31324ff9347f5","Message":"呼叫服务修改\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T10:47:29+08:00"},"CompareURL":"vodtest/pay/compare/d9209b1249b238a263a32f250dac950aff509511...8369aa48be0585d3ca208631afb31324ff9347f5","Len":1}...
|
1785725267
|
Edit
Delete
|
|
20312
|
8
|
5
|
1
|
21
|
0
|
0
|
refs/heads/pay-260818
|
0
|
{"Commits":[{"Sha1":"8369aa48b {"Commits":[{"Sha1":"8369aa48be0585d3ca208631afb31324ff9347f5","Message":"呼叫服务修改\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T10:47:29+08:00"}],"HeadCommit":{"Sha1":"8369aa48be0585d3ca208631afb31324ff9347f5","Message":"呼叫服务修改\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T10:47:29+08:00"},"CompareURL":"vodtest/pay/compare/d9209b1249b238a263a32f250dac950aff509511...8369aa48be0585d3ca208631afb31324ff9347f5","Len":1}...
|
1785725267
|
Edit
Delete
|
|
20313
|
10
|
5
|
1
|
21
|
0
|
0
|
refs/heads/pay-260818
|
0
|
{"Commits":[{"Sha1":"8369aa48b {"Commits":[{"Sha1":"8369aa48be0585d3ca208631afb31324ff9347f5","Message":"呼叫服务修改\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T10:47:29+08:00"}],"HeadCommit":{"Sha1":"8369aa48be0585d3ca208631afb31324ff9347f5","Message":"呼叫服务修改\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T10:47:29+08:00"},"CompareURL":"vodtest/pay/compare/d9209b1249b238a263a32f250dac950aff509511...8369aa48be0585d3ca208631afb31324ff9347f5","Len":1}...
|
1785725267
|
Edit
Delete
|
|
20314
|
11
|
5
|
1
|
21
|
0
|
0
|
refs/heads/pay-260818
|
0
|
{"Commits":[{"Sha1":"8369aa48b {"Commits":[{"Sha1":"8369aa48be0585d3ca208631afb31324ff9347f5","Message":"呼叫服务修改\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T10:47:29+08:00"}],"HeadCommit":{"Sha1":"8369aa48be0585d3ca208631afb31324ff9347f5","Message":"呼叫服务修改\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T10:47:29+08:00"},"CompareURL":"vodtest/pay/compare/d9209b1249b238a263a32f250dac950aff509511...8369aa48be0585d3ca208631afb31324ff9347f5","Len":1}...
|
1785725267
|
Edit
Delete
|
|
20315
|
18
|
5
|
18
|
69
|
0
|
0
|
refs/heads/dianbo-20260908
|
0
|
{"Commits":[{"Sha1":"26063c6f9 {"Commits":[{"Sha1":"26063c6f920b0f1fb3b6c5102bf2ff02dbec870c","Message":"Add dianbo PC admin prototype\n","AuthorEmail":"codex@local","AuthorName":"Codex","CommitterEmail":"codex@local","CommitterName":"Codex","Timestamp":"2026-08-03T11:06:52+08:00"},{"Sha1":"23289e2aff52e5687809b2872d8581973dbf4a43","Message":"Add PC admin shell prototype\n","AuthorEmail":"codex@local","AuthorName":"Codex","CommitterEmail":"codex@local","CommitterName":"Codex","Timestamp":"2026-08-03T11:02:55+08:00"}],"HeadCommit":{"Sha1":"26063c6f920b0f1fb3b6c5102bf2ff02dbec870c","Message":"Add dianbo PC admin prototype\n","AuthorEmail":"codex@local","AuthorName":"Codex","CommitterEmail":"codex@local","CommitterName":"Codex","Timestamp":"2026-08-03T11:06:52+08:00"},"CompareURL":"linmingzhang/ktv-booking-prototype/compare/118664e6981801698ab55547322ee9cd1fe1fbf6...26063c6f920b0f1fb3b6c5102bf2ff02dbec870c","Len":2}...
|
1785726422
|
Edit
Delete
|
|
20316
|
17
|
5
|
18
|
69
|
0
|
0
|
refs/heads/dianbo-20260908
|
0
|
{"Commits":[{"Sha1":"26063c6f9 {"Commits":[{"Sha1":"26063c6f920b0f1fb3b6c5102bf2ff02dbec870c","Message":"Add dianbo PC admin prototype\n","AuthorEmail":"codex@local","AuthorName":"Codex","CommitterEmail":"codex@local","CommitterName":"Codex","Timestamp":"2026-08-03T11:06:52+08:00"},{"Sha1":"23289e2aff52e5687809b2872d8581973dbf4a43","Message":"Add PC admin shell prototype\n","AuthorEmail":"codex@local","AuthorName":"Codex","CommitterEmail":"codex@local","CommitterName":"Codex","Timestamp":"2026-08-03T11:02:55+08:00"}],"HeadCommit":{"Sha1":"26063c6f920b0f1fb3b6c5102bf2ff02dbec870c","Message":"Add dianbo PC admin prototype\n","AuthorEmail":"codex@local","AuthorName":"Codex","CommitterEmail":"codex@local","CommitterName":"Codex","Timestamp":"2026-08-03T11:06:52+08:00"},"CompareURL":"linmingzhang/ktv-booking-prototype/compare/118664e6981801698ab55547322ee9cd1fe1fbf6...26063c6f920b0f1fb3b6c5102bf2ff02dbec870c","Len":2}...
|
1785726422
|
Edit
Delete
|
|
20317
|
8
|
5
|
8
|
21
|
0
|
0
|
refs/heads/pay-260818
|
0
|
{"Commits":[{"Sha1":"ed2aba950 {"Commits":[{"Sha1":"ed2aba9509e54b8dc151eeea011554a5213b7f8c","Message":"需求 派对任务新版 16701\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-08-03T13:18:46+08:00"}],"HeadCommit":{"Sha1":"ed2aba9509e54b8dc151eeea011554a5213b7f8c","Message":"需求 派对任务新版 16701\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-08-03T13:18:46+08:00"},"CompareURL":"vodtest/pay/compare/8369aa48be0585d3ca208631afb31324ff9347f5...ed2aba9509e54b8dc151eeea011554a5213b7f8c","Len":1}...
|
1785734330
|
Edit
Delete
|
|
20318
|
9
|
5
|
8
|
21
|
0
|
0
|
refs/heads/pay-260818
|
0
|
{"Commits":[{"Sha1":"ed2aba950 {"Commits":[{"Sha1":"ed2aba9509e54b8dc151eeea011554a5213b7f8c","Message":"需求 派对任务新版 16701\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-08-03T13:18:46+08:00"}],"HeadCommit":{"Sha1":"ed2aba9509e54b8dc151eeea011554a5213b7f8c","Message":"需求 派对任务新版 16701\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-08-03T13:18:46+08:00"},"CompareURL":"vodtest/pay/compare/8369aa48be0585d3ca208631afb31324ff9347f5...ed2aba9509e54b8dc151eeea011554a5213b7f8c","Len":1}...
|
1785734330
|
Edit
Delete
|
|
20319
|
1
|
5
|
8
|
21
|
0
|
0
|
refs/heads/pay-260818
|
0
|
{"Commits":[{"Sha1":"ed2aba950 {"Commits":[{"Sha1":"ed2aba9509e54b8dc151eeea011554a5213b7f8c","Message":"需求 派对任务新版 16701\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-08-03T13:18:46+08:00"}],"HeadCommit":{"Sha1":"ed2aba9509e54b8dc151eeea011554a5213b7f8c","Message":"需求 派对任务新版 16701\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-08-03T13:18:46+08:00"},"CompareURL":"vodtest/pay/compare/8369aa48be0585d3ca208631afb31324ff9347f5...ed2aba9509e54b8dc151eeea011554a5213b7f8c","Len":1}...
|
1785734330
|
Edit
Delete
|
|
20320
|
3
|
5
|
8
|
21
|
0
|
0
|
refs/heads/pay-260818
|
0
|
{"Commits":[{"Sha1":"ed2aba950 {"Commits":[{"Sha1":"ed2aba9509e54b8dc151eeea011554a5213b7f8c","Message":"需求 派对任务新版 16701\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-08-03T13:18:46+08:00"}],"HeadCommit":{"Sha1":"ed2aba9509e54b8dc151eeea011554a5213b7f8c","Message":"需求 派对任务新版 16701\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-08-03T13:18:46+08:00"},"CompareURL":"vodtest/pay/compare/8369aa48be0585d3ca208631afb31324ff9347f5...ed2aba9509e54b8dc151eeea011554a5213b7f8c","Len":1}...
|
1785734330
|
Edit
Delete
|
|
20321
|
4
|
5
|
8
|
21
|
0
|
0
|
refs/heads/pay-260818
|
0
|
{"Commits":[{"Sha1":"ed2aba950 {"Commits":[{"Sha1":"ed2aba9509e54b8dc151eeea011554a5213b7f8c","Message":"需求 派对任务新版 16701\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-08-03T13:18:46+08:00"}],"HeadCommit":{"Sha1":"ed2aba9509e54b8dc151eeea011554a5213b7f8c","Message":"需求 派对任务新版 16701\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-08-03T13:18:46+08:00"},"CompareURL":"vodtest/pay/compare/8369aa48be0585d3ca208631afb31324ff9347f5...ed2aba9509e54b8dc151eeea011554a5213b7f8c","Len":1}...
|
1785734330
|
Edit
Delete
|
|
20322
|
7
|
5
|
8
|
21
|
0
|
0
|
refs/heads/pay-260818
|
0
|
{"Commits":[{"Sha1":"ed2aba950 {"Commits":[{"Sha1":"ed2aba9509e54b8dc151eeea011554a5213b7f8c","Message":"需求 派对任务新版 16701\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-08-03T13:18:46+08:00"}],"HeadCommit":{"Sha1":"ed2aba9509e54b8dc151eeea011554a5213b7f8c","Message":"需求 派对任务新版 16701\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-08-03T13:18:46+08:00"},"CompareURL":"vodtest/pay/compare/8369aa48be0585d3ca208631afb31324ff9347f5...ed2aba9509e54b8dc151eeea011554a5213b7f8c","Len":1}...
|
1785734330
|
Edit
Delete
|
|
20323
|
10
|
5
|
8
|
21
|
0
|
0
|
refs/heads/pay-260818
|
0
|
{"Commits":[{"Sha1":"ed2aba950 {"Commits":[{"Sha1":"ed2aba9509e54b8dc151eeea011554a5213b7f8c","Message":"需求 派对任务新版 16701\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-08-03T13:18:46+08:00"}],"HeadCommit":{"Sha1":"ed2aba9509e54b8dc151eeea011554a5213b7f8c","Message":"需求 派对任务新版 16701\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-08-03T13:18:46+08:00"},"CompareURL":"vodtest/pay/compare/8369aa48be0585d3ca208631afb31324ff9347f5...ed2aba9509e54b8dc151eeea011554a5213b7f8c","Len":1}...
|
1785734330
|
Edit
Delete
|
|
20324
|
11
|
5
|
8
|
21
|
0
|
0
|
refs/heads/pay-260818
|
0
|
{"Commits":[{"Sha1":"ed2aba950 {"Commits":[{"Sha1":"ed2aba9509e54b8dc151eeea011554a5213b7f8c","Message":"需求 派对任务新版 16701\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-08-03T13:18:46+08:00"}],"HeadCommit":{"Sha1":"ed2aba9509e54b8dc151eeea011554a5213b7f8c","Message":"需求 派对任务新版 16701\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-08-03T13:18:46+08:00"},"CompareURL":"vodtest/pay/compare/8369aa48be0585d3ca208631afb31324ff9347f5...ed2aba9509e54b8dc151eeea011554a5213b7f8c","Len":1}...
|
1785734330
|
Edit
Delete
|
|
20325
|
17
|
5
|
17
|
69
|
0
|
0
|
refs/heads/chanpin-20260818
|
0
|
{"Commits":[{"Sha1":"e31432190 {"Commits":[{"Sha1":"e314321900da3bcb401c05894127135f436e8174","Message":"同步本地最新美团预订原型\n","AuthorEmail":"linmingzhang@g-hi.com","AuthorName":"linmingzhang","CommitterEmail":"linmingzhang@g-hi.com","CommitterName":"linmingzhang","Timestamp":"2026-08-03T13:23:15+08:00"}],"HeadCommit":{"Sha1":"e314321900da3bcb401c05894127135f436e8174","Message":"同步本地最新美团预订原型\n","AuthorEmail":"linmingzhang@g-hi.com","AuthorName":"linmingzhang","CommitterEmail":"linmingzhang@g-hi.com","CommitterName":"linmingzhang","Timestamp":"2026-08-03T13:23:15+08:00"},"CompareURL":"linmingzhang/ktv-booking-prototype/compare/0315b2b689d430da7d4f3360bde84c4225f2630e...e314321900da3bcb401c05894127135f436e8174","Len":1}...
|
1785734598
|
Edit
Delete
|
|
20326
|
18
|
5
|
17
|
69
|
0
|
0
|
refs/heads/chanpin-20260818
|
0
|
{"Commits":[{"Sha1":"e31432190 {"Commits":[{"Sha1":"e314321900da3bcb401c05894127135f436e8174","Message":"同步本地最新美团预订原型\n","AuthorEmail":"linmingzhang@g-hi.com","AuthorName":"linmingzhang","CommitterEmail":"linmingzhang@g-hi.com","CommitterName":"linmingzhang","Timestamp":"2026-08-03T13:23:15+08:00"}],"HeadCommit":{"Sha1":"e314321900da3bcb401c05894127135f436e8174","Message":"同步本地最新美团预订原型\n","AuthorEmail":"linmingzhang@g-hi.com","AuthorName":"linmingzhang","CommitterEmail":"linmingzhang@g-hi.com","CommitterName":"linmingzhang","Timestamp":"2026-08-03T13:23:15+08:00"},"CompareURL":"linmingzhang/ktv-booking-prototype/compare/0315b2b689d430da7d4f3360bde84c4225f2630e...e314321900da3bcb401c05894127135f436e8174","Len":1}...
|
1785734598
|
Edit
Delete
|
|
20327
|
17
|
5
|
17
|
69
|
0
|
0
|
refs/heads/chanpin-20260818
|
0
|
{"Commits":[{"Sha1":"0c864d39e {"Commits":[{"Sha1":"0c864d39e209af9d8e13c8015163dd23f5eeeda8","Message":"删除本地已移除的重复美团预订原型\n","AuthorEmail":"linmingzhang@g-hi.com","AuthorName":"linmingzhang","CommitterEmail":"linmingzhang@g-hi.com","CommitterName":"linmingzhang","Timestamp":"2026-08-03T13:24:10+08:00"}],"HeadCommit":{"Sha1":"0c864d39e209af9d8e13c8015163dd23f5eeeda8","Message":"删除本地已移除的重复美团预订原型\n","AuthorEmail":"linmingzhang@g-hi.com","AuthorName":"linmingzhang","CommitterEmail":"linmingzhang@g-hi.com","CommitterName":"linmingzhang","Timestamp":"2026-08-03T13:24:10+08:00"},"CompareURL":"linmingzhang/ktv-booking-prototype/compare/e314321900da3bcb401c05894127135f436e8174...0c864d39e209af9d8e13c8015163dd23f5eeeda8","Len":1}...
|
1785734651
|
Edit
Delete
|
|
20328
|
18
|
5
|
17
|
69
|
0
|
0
|
refs/heads/chanpin-20260818
|
0
|
{"Commits":[{"Sha1":"0c864d39e {"Commits":[{"Sha1":"0c864d39e209af9d8e13c8015163dd23f5eeeda8","Message":"删除本地已移除的重复美团预订原型\n","AuthorEmail":"linmingzhang@g-hi.com","AuthorName":"linmingzhang","CommitterEmail":"linmingzhang@g-hi.com","CommitterName":"linmingzhang","Timestamp":"2026-08-03T13:24:10+08:00"}],"HeadCommit":{"Sha1":"0c864d39e209af9d8e13c8015163dd23f5eeeda8","Message":"删除本地已移除的重复美团预订原型\n","AuthorEmail":"linmingzhang@g-hi.com","AuthorName":"linmingzhang","CommitterEmail":"linmingzhang@g-hi.com","CommitterName":"linmingzhang","Timestamp":"2026-08-03T13:24:10+08:00"},"CompareURL":"linmingzhang/ktv-booking-prototype/compare/e314321900da3bcb401c05894127135f436e8174...0c864d39e209af9d8e13c8015163dd23f5eeeda8","Len":1}...
|
1785734651
|
Edit
Delete
|
|
20329
|
1
|
5
|
1
|
23
|
0
|
0
|
refs/heads/admin-260728
|
0
|
{"Commits":[{"Sha1":"470a86559 {"Commits":[{"Sha1":"470a86559c4f0fc146afd3d0bae92f9b4127a36f","Message":"111\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T13:23:53+08:00"}],"HeadCommit":{"Sha1":"470a86559c4f0fc146afd3d0bae92f9b4127a36f","Message":"111\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T13:23:53+08:00"},"CompareURL":"vodtest/admin/compare/4b57367781446858ec84a40c0a8704ba39b77e8e...470a86559c4f0fc146afd3d0bae92f9b4127a36f","Len":1}...
|
1785734652
|
Edit
Delete
|
|
20330
|
9
|
5
|
1
|
23
|
0
|
0
|
refs/heads/admin-260728
|
0
|
{"Commits":[{"Sha1":"470a86559 {"Commits":[{"Sha1":"470a86559c4f0fc146afd3d0bae92f9b4127a36f","Message":"111\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T13:23:53+08:00"}],"HeadCommit":{"Sha1":"470a86559c4f0fc146afd3d0bae92f9b4127a36f","Message":"111\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T13:23:53+08:00"},"CompareURL":"vodtest/admin/compare/4b57367781446858ec84a40c0a8704ba39b77e8e...470a86559c4f0fc146afd3d0bae92f9b4127a36f","Len":1}...
|
1785734652
|
Edit
Delete
|
|
20331
|
3
|
5
|
1
|
23
|
0
|
0
|
refs/heads/admin-260728
|
0
|
{"Commits":[{"Sha1":"470a86559 {"Commits":[{"Sha1":"470a86559c4f0fc146afd3d0bae92f9b4127a36f","Message":"111\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T13:23:53+08:00"}],"HeadCommit":{"Sha1":"470a86559c4f0fc146afd3d0bae92f9b4127a36f","Message":"111\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T13:23:53+08:00"},"CompareURL":"vodtest/admin/compare/4b57367781446858ec84a40c0a8704ba39b77e8e...470a86559c4f0fc146afd3d0bae92f9b4127a36f","Len":1}...
|
1785734652
|
Edit
Delete
|
|
20332
|
4
|
5
|
1
|
23
|
0
|
0
|
refs/heads/admin-260728
|
0
|
{"Commits":[{"Sha1":"470a86559 {"Commits":[{"Sha1":"470a86559c4f0fc146afd3d0bae92f9b4127a36f","Message":"111\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T13:23:53+08:00"}],"HeadCommit":{"Sha1":"470a86559c4f0fc146afd3d0bae92f9b4127a36f","Message":"111\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T13:23:53+08:00"},"CompareURL":"vodtest/admin/compare/4b57367781446858ec84a40c0a8704ba39b77e8e...470a86559c4f0fc146afd3d0bae92f9b4127a36f","Len":1}...
|
1785734652
|
Edit
Delete
|
|
20333
|
7
|
5
|
1
|
23
|
0
|
0
|
refs/heads/admin-260728
|
0
|
{"Commits":[{"Sha1":"470a86559 {"Commits":[{"Sha1":"470a86559c4f0fc146afd3d0bae92f9b4127a36f","Message":"111\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T13:23:53+08:00"}],"HeadCommit":{"Sha1":"470a86559c4f0fc146afd3d0bae92f9b4127a36f","Message":"111\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T13:23:53+08:00"},"CompareURL":"vodtest/admin/compare/4b57367781446858ec84a40c0a8704ba39b77e8e...470a86559c4f0fc146afd3d0bae92f9b4127a36f","Len":1}...
|
1785734652
|
Edit
Delete
|
|
20334
|
8
|
5
|
1
|
23
|
0
|
0
|
refs/heads/admin-260728
|
0
|
{"Commits":[{"Sha1":"470a86559 {"Commits":[{"Sha1":"470a86559c4f0fc146afd3d0bae92f9b4127a36f","Message":"111\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T13:23:53+08:00"}],"HeadCommit":{"Sha1":"470a86559c4f0fc146afd3d0bae92f9b4127a36f","Message":"111\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T13:23:53+08:00"},"CompareURL":"vodtest/admin/compare/4b57367781446858ec84a40c0a8704ba39b77e8e...470a86559c4f0fc146afd3d0bae92f9b4127a36f","Len":1}...
|
1785734652
|
Edit
Delete
|
|
20335
|
10
|
5
|
1
|
23
|
0
|
0
|
refs/heads/admin-260728
|
0
|
{"Commits":[{"Sha1":"470a86559 {"Commits":[{"Sha1":"470a86559c4f0fc146afd3d0bae92f9b4127a36f","Message":"111\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T13:23:53+08:00"}],"HeadCommit":{"Sha1":"470a86559c4f0fc146afd3d0bae92f9b4127a36f","Message":"111\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T13:23:53+08:00"},"CompareURL":"vodtest/admin/compare/4b57367781446858ec84a40c0a8704ba39b77e8e...470a86559c4f0fc146afd3d0bae92f9b4127a36f","Len":1}...
|
1785734652
|
Edit
Delete
|
|
20336
|
11
|
5
|
1
|
23
|
0
|
0
|
refs/heads/admin-260728
|
0
|
{"Commits":[{"Sha1":"470a86559 {"Commits":[{"Sha1":"470a86559c4f0fc146afd3d0bae92f9b4127a36f","Message":"111\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T13:23:53+08:00"}],"HeadCommit":{"Sha1":"470a86559c4f0fc146afd3d0bae92f9b4127a36f","Message":"111\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-08-03T13:23:53+08:00"},"CompareURL":"vodtest/admin/compare/4b57367781446858ec84a40c0a8704ba39b77e8e...470a86559c4f0fc146afd3d0bae92f9b4127a36f","Len":1}...
|
1785734652
|
Edit
Delete
|