|
13173
|
10
|
5
|
8
|
22
|
0
|
0
|
refs/heads/app-260616
|
0
|
{"Commits":[{"Sha1":"4456683ba {"Commits":[{"Sha1":"4456683bacc43da171b57b009d978778492e9867","Message":"bug 转房订单清扫任务修复\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-17T17:55:52+08:00"}],"HeadCommit":{"Sha1":"4456683bacc43da171b57b009d978778492e9867","Message":"bug 转房订单清扫任务修复\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-17T17:55:52+08:00"},"CompareURL":"vodtest/app/compare/88a1f00e48caf77587631aca8cf2d421b81a8721...4456683bacc43da171b57b009d978778492e9867","Len":1}...
|
1781690157
|
Edit
Delete
|
|
13174
|
11
|
5
|
8
|
22
|
0
|
0
|
refs/heads/app-260616
|
0
|
{"Commits":[{"Sha1":"4456683ba {"Commits":[{"Sha1":"4456683bacc43da171b57b009d978778492e9867","Message":"bug 转房订单清扫任务修复\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-17T17:55:52+08:00"}],"HeadCommit":{"Sha1":"4456683bacc43da171b57b009d978778492e9867","Message":"bug 转房订单清扫任务修复\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-17T17:55:52+08:00"},"CompareURL":"vodtest/app/compare/88a1f00e48caf77587631aca8cf2d421b81a8721...4456683bacc43da171b57b009d978778492e9867","Len":1}...
|
1781690157
|
Edit
Delete
|
|
11295
|
1
|
5
|
1
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
|
1781141760
|
Edit
Delete
|
|
11296
|
9
|
5
|
1
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
|
1781141760
|
Edit
Delete
|
|
11297
|
3
|
5
|
1
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
|
1781141760
|
Edit
Delete
|
|
11298
|
4
|
5
|
1
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
|
1781141760
|
Edit
Delete
|
|
11299
|
7
|
5
|
1
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
|
1781141760
|
Edit
Delete
|
|
11300
|
8
|
5
|
1
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
|
1781141760
|
Edit
Delete
|
|
11301
|
10
|
5
|
1
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
|
1781141760
|
Edit
Delete
|
|
11302
|
11
|
5
|
1
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
|
1781141760
|
Edit
Delete
|
|
11303
|
1
|
5
|
1
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
{"Commits":[],"HeadCommit":{"S {"Commits":[],"HeadCommit":{"Sha1":"741b54895bcb13ed27e230b19b801054a1c1e689","Message":"Merge pull request '0616合并' (#84) from app-260616 into app\n\nReviewed-on: https://gitea.g-hi.com/vodtest/app/pulls/84\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-06-11T09:34:55+08:00"},"CompareURL":"vodtest/app/compare/app...741b54895bcb13ed27e230b19b801054a1c1e689","Len":0}...
|
1781141760
|
Edit
Delete
|
|
11304
|
9
|
5
|
1
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
{"Commits":[],"HeadCommit":{"S {"Commits":[],"HeadCommit":{"Sha1":"741b54895bcb13ed27e230b19b801054a1c1e689","Message":"Merge pull request '0616合并' (#84) from app-260616 into app\n\nReviewed-on: https://gitea.g-hi.com/vodtest/app/pulls/84\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-06-11T09:34:55+08:00"},"CompareURL":"vodtest/app/compare/app...741b54895bcb13ed27e230b19b801054a1c1e689","Len":0}...
|
1781141760
|
Edit
Delete
|
|
11305
|
3
|
5
|
1
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
{"Commits":[],"HeadCommit":{"S {"Commits":[],"HeadCommit":{"Sha1":"741b54895bcb13ed27e230b19b801054a1c1e689","Message":"Merge pull request '0616合并' (#84) from app-260616 into app\n\nReviewed-on: https://gitea.g-hi.com/vodtest/app/pulls/84\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-06-11T09:34:55+08:00"},"CompareURL":"vodtest/app/compare/app...741b54895bcb13ed27e230b19b801054a1c1e689","Len":0}...
|
1781141760
|
Edit
Delete
|
|
11306
|
4
|
5
|
1
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
{"Commits":[],"HeadCommit":{"S {"Commits":[],"HeadCommit":{"Sha1":"741b54895bcb13ed27e230b19b801054a1c1e689","Message":"Merge pull request '0616合并' (#84) from app-260616 into app\n\nReviewed-on: https://gitea.g-hi.com/vodtest/app/pulls/84\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-06-11T09:34:55+08:00"},"CompareURL":"vodtest/app/compare/app...741b54895bcb13ed27e230b19b801054a1c1e689","Len":0}...
|
1781141760
|
Edit
Delete
|
|
11307
|
7
|
5
|
1
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
{"Commits":[],"HeadCommit":{"S {"Commits":[],"HeadCommit":{"Sha1":"741b54895bcb13ed27e230b19b801054a1c1e689","Message":"Merge pull request '0616合并' (#84) from app-260616 into app\n\nReviewed-on: https://gitea.g-hi.com/vodtest/app/pulls/84\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-06-11T09:34:55+08:00"},"CompareURL":"vodtest/app/compare/app...741b54895bcb13ed27e230b19b801054a1c1e689","Len":0}...
|
1781141760
|
Edit
Delete
|
|
11308
|
8
|
5
|
1
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
{"Commits":[],"HeadCommit":{"S {"Commits":[],"HeadCommit":{"Sha1":"741b54895bcb13ed27e230b19b801054a1c1e689","Message":"Merge pull request '0616合并' (#84) from app-260616 into app\n\nReviewed-on: https://gitea.g-hi.com/vodtest/app/pulls/84\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-06-11T09:34:55+08:00"},"CompareURL":"vodtest/app/compare/app...741b54895bcb13ed27e230b19b801054a1c1e689","Len":0}...
|
1781141760
|
Edit
Delete
|
|
11309
|
10
|
5
|
1
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
{"Commits":[],"HeadCommit":{"S {"Commits":[],"HeadCommit":{"Sha1":"741b54895bcb13ed27e230b19b801054a1c1e689","Message":"Merge pull request '0616合并' (#84) from app-260616 into app\n\nReviewed-on: https://gitea.g-hi.com/vodtest/app/pulls/84\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-06-11T09:34:55+08:00"},"CompareURL":"vodtest/app/compare/app...741b54895bcb13ed27e230b19b801054a1c1e689","Len":0}...
|
1781141760
|
Edit
Delete
|
|
11310
|
11
|
5
|
1
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
{"Commits":[],"HeadCommit":{"S {"Commits":[],"HeadCommit":{"Sha1":"741b54895bcb13ed27e230b19b801054a1c1e689","Message":"Merge pull request '0616合并' (#84) from app-260616 into app\n\nReviewed-on: https://gitea.g-hi.com/vodtest/app/pulls/84\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-06-11T09:34:55+08:00"},"CompareURL":"vodtest/app/compare/app...741b54895bcb13ed27e230b19b801054a1c1e689","Len":0}...
|
1781141760
|
Edit
Delete
|
|
11605
|
8
|
5
|
8
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
{"Commits":[{"Sha1":"4d757565f {"Commits":[{"Sha1":"4d757565fe09d386a301bdb75d165ccd5d431ff1","Message":"需求 门店名称限制 16489\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-11T15:27:05+08:00"}],"HeadCommit":{"Sha1":"4d757565fe09d386a301bdb75d165ccd5d431ff1","Message":"需求 门店名称限制 16489\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-11T15:27:05+08:00"},"CompareURL":"vodtest/app/compare/741b54895bcb13ed27e230b19b801054a1c1e689...4d757565fe09d386a301bdb75d165ccd5d431ff1","Len":1}...
|
1781162838
|
Edit
Delete
|
|
11606
|
9
|
5
|
8
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
{"Commits":[{"Sha1":"4d757565f {"Commits":[{"Sha1":"4d757565fe09d386a301bdb75d165ccd5d431ff1","Message":"需求 门店名称限制 16489\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-11T15:27:05+08:00"}],"HeadCommit":{"Sha1":"4d757565fe09d386a301bdb75d165ccd5d431ff1","Message":"需求 门店名称限制 16489\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-11T15:27:05+08:00"},"CompareURL":"vodtest/app/compare/741b54895bcb13ed27e230b19b801054a1c1e689...4d757565fe09d386a301bdb75d165ccd5d431ff1","Len":1}...
|
1781162838
|
Edit
Delete
|
|
11607
|
1
|
5
|
8
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
{"Commits":[{"Sha1":"4d757565f {"Commits":[{"Sha1":"4d757565fe09d386a301bdb75d165ccd5d431ff1","Message":"需求 门店名称限制 16489\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-11T15:27:05+08:00"}],"HeadCommit":{"Sha1":"4d757565fe09d386a301bdb75d165ccd5d431ff1","Message":"需求 门店名称限制 16489\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-11T15:27:05+08:00"},"CompareURL":"vodtest/app/compare/741b54895bcb13ed27e230b19b801054a1c1e689...4d757565fe09d386a301bdb75d165ccd5d431ff1","Len":1}...
|
1781162838
|
Edit
Delete
|
|
11608
|
3
|
5
|
8
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
{"Commits":[{"Sha1":"4d757565f {"Commits":[{"Sha1":"4d757565fe09d386a301bdb75d165ccd5d431ff1","Message":"需求 门店名称限制 16489\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-11T15:27:05+08:00"}],"HeadCommit":{"Sha1":"4d757565fe09d386a301bdb75d165ccd5d431ff1","Message":"需求 门店名称限制 16489\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-11T15:27:05+08:00"},"CompareURL":"vodtest/app/compare/741b54895bcb13ed27e230b19b801054a1c1e689...4d757565fe09d386a301bdb75d165ccd5d431ff1","Len":1}...
|
1781162838
|
Edit
Delete
|
|
11609
|
4
|
5
|
8
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
{"Commits":[{"Sha1":"4d757565f {"Commits":[{"Sha1":"4d757565fe09d386a301bdb75d165ccd5d431ff1","Message":"需求 门店名称限制 16489\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-11T15:27:05+08:00"}],"HeadCommit":{"Sha1":"4d757565fe09d386a301bdb75d165ccd5d431ff1","Message":"需求 门店名称限制 16489\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-11T15:27:05+08:00"},"CompareURL":"vodtest/app/compare/741b54895bcb13ed27e230b19b801054a1c1e689...4d757565fe09d386a301bdb75d165ccd5d431ff1","Len":1}...
|
1781162838
|
Edit
Delete
|
|
11610
|
7
|
5
|
8
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
{"Commits":[{"Sha1":"4d757565f {"Commits":[{"Sha1":"4d757565fe09d386a301bdb75d165ccd5d431ff1","Message":"需求 门店名称限制 16489\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-11T15:27:05+08:00"}],"HeadCommit":{"Sha1":"4d757565fe09d386a301bdb75d165ccd5d431ff1","Message":"需求 门店名称限制 16489\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-11T15:27:05+08:00"},"CompareURL":"vodtest/app/compare/741b54895bcb13ed27e230b19b801054a1c1e689...4d757565fe09d386a301bdb75d165ccd5d431ff1","Len":1}...
|
1781162838
|
Edit
Delete
|
|
11611
|
10
|
5
|
8
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
{"Commits":[{"Sha1":"4d757565f {"Commits":[{"Sha1":"4d757565fe09d386a301bdb75d165ccd5d431ff1","Message":"需求 门店名称限制 16489\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-11T15:27:05+08:00"}],"HeadCommit":{"Sha1":"4d757565fe09d386a301bdb75d165ccd5d431ff1","Message":"需求 门店名称限制 16489\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-11T15:27:05+08:00"},"CompareURL":"vodtest/app/compare/741b54895bcb13ed27e230b19b801054a1c1e689...4d757565fe09d386a301bdb75d165ccd5d431ff1","Len":1}...
|
1781162838
|
Edit
Delete
|
|
11612
|
11
|
5
|
8
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
{"Commits":[{"Sha1":"4d757565f {"Commits":[{"Sha1":"4d757565fe09d386a301bdb75d165ccd5d431ff1","Message":"需求 门店名称限制 16489\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-11T15:27:05+08:00"}],"HeadCommit":{"Sha1":"4d757565fe09d386a301bdb75d165ccd5d431ff1","Message":"需求 门店名称限制 16489\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-11T15:27:05+08:00"},"CompareURL":"vodtest/app/compare/741b54895bcb13ed27e230b19b801054a1c1e689...4d757565fe09d386a301bdb75d165ccd5d431ff1","Len":1}...
|
1781162838
|
Edit
Delete
|
|
13021
|
8
|
5
|
8
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
{"Commits":[{"Sha1":"76d062bb2 {"Commits":[{"Sha1":"76d062bb2825cdb6bc4271009138212e81a741a4","Message":"需求 完成清扫任务时判断有交换机再执行自动落锁\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-17T10:59:42+08:00"}],"HeadCommit":{"Sha1":"76d062bb2825cdb6bc4271009138212e81a741a4","Message":"需求 完成清扫任务时判断有交换机再执行自动落锁\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-17T10:59:42+08:00"},"CompareURL":"vodtest/app/compare/4d757565fe09d386a301bdb75d165ccd5d431ff1...76d062bb2825cdb6bc4271009138212e81a741a4","Len":1}...
|
1781665187
|
Edit
Delete
|
|
13022
|
9
|
5
|
8
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
{"Commits":[{"Sha1":"76d062bb2 {"Commits":[{"Sha1":"76d062bb2825cdb6bc4271009138212e81a741a4","Message":"需求 完成清扫任务时判断有交换机再执行自动落锁\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-17T10:59:42+08:00"}],"HeadCommit":{"Sha1":"76d062bb2825cdb6bc4271009138212e81a741a4","Message":"需求 完成清扫任务时判断有交换机再执行自动落锁\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-17T10:59:42+08:00"},"CompareURL":"vodtest/app/compare/4d757565fe09d386a301bdb75d165ccd5d431ff1...76d062bb2825cdb6bc4271009138212e81a741a4","Len":1}...
|
1781665187
|
Edit
Delete
|
|
13023
|
1
|
5
|
8
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
{"Commits":[{"Sha1":"76d062bb2 {"Commits":[{"Sha1":"76d062bb2825cdb6bc4271009138212e81a741a4","Message":"需求 完成清扫任务时判断有交换机再执行自动落锁\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-17T10:59:42+08:00"}],"HeadCommit":{"Sha1":"76d062bb2825cdb6bc4271009138212e81a741a4","Message":"需求 完成清扫任务时判断有交换机再执行自动落锁\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-17T10:59:42+08:00"},"CompareURL":"vodtest/app/compare/4d757565fe09d386a301bdb75d165ccd5d431ff1...76d062bb2825cdb6bc4271009138212e81a741a4","Len":1}...
|
1781665187
|
Edit
Delete
|
|
13024
|
3
|
5
|
8
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
{"Commits":[{"Sha1":"76d062bb2 {"Commits":[{"Sha1":"76d062bb2825cdb6bc4271009138212e81a741a4","Message":"需求 完成清扫任务时判断有交换机再执行自动落锁\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-17T10:59:42+08:00"}],"HeadCommit":{"Sha1":"76d062bb2825cdb6bc4271009138212e81a741a4","Message":"需求 完成清扫任务时判断有交换机再执行自动落锁\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-17T10:59:42+08:00"},"CompareURL":"vodtest/app/compare/4d757565fe09d386a301bdb75d165ccd5d431ff1...76d062bb2825cdb6bc4271009138212e81a741a4","Len":1}...
|
1781665187
|
Edit
Delete
|
|
13025
|
4
|
5
|
8
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
{"Commits":[{"Sha1":"76d062bb2 {"Commits":[{"Sha1":"76d062bb2825cdb6bc4271009138212e81a741a4","Message":"需求 完成清扫任务时判断有交换机再执行自动落锁\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-17T10:59:42+08:00"}],"HeadCommit":{"Sha1":"76d062bb2825cdb6bc4271009138212e81a741a4","Message":"需求 完成清扫任务时判断有交换机再执行自动落锁\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-17T10:59:42+08:00"},"CompareURL":"vodtest/app/compare/4d757565fe09d386a301bdb75d165ccd5d431ff1...76d062bb2825cdb6bc4271009138212e81a741a4","Len":1}...
|
1781665187
|
Edit
Delete
|
|
13026
|
7
|
5
|
8
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
{"Commits":[{"Sha1":"76d062bb2 {"Commits":[{"Sha1":"76d062bb2825cdb6bc4271009138212e81a741a4","Message":"需求 完成清扫任务时判断有交换机再执行自动落锁\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-17T10:59:42+08:00"}],"HeadCommit":{"Sha1":"76d062bb2825cdb6bc4271009138212e81a741a4","Message":"需求 完成清扫任务时判断有交换机再执行自动落锁\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-17T10:59:42+08:00"},"CompareURL":"vodtest/app/compare/4d757565fe09d386a301bdb75d165ccd5d431ff1...76d062bb2825cdb6bc4271009138212e81a741a4","Len":1}...
|
1781665187
|
Edit
Delete
|
|
13027
|
10
|
5
|
8
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
{"Commits":[{"Sha1":"76d062bb2 {"Commits":[{"Sha1":"76d062bb2825cdb6bc4271009138212e81a741a4","Message":"需求 完成清扫任务时判断有交换机再执行自动落锁\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-17T10:59:42+08:00"}],"HeadCommit":{"Sha1":"76d062bb2825cdb6bc4271009138212e81a741a4","Message":"需求 完成清扫任务时判断有交换机再执行自动落锁\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-17T10:59:42+08:00"},"CompareURL":"vodtest/app/compare/4d757565fe09d386a301bdb75d165ccd5d431ff1...76d062bb2825cdb6bc4271009138212e81a741a4","Len":1}...
|
1781665187
|
Edit
Delete
|
|
13028
|
11
|
5
|
8
|
22
|
0
|
0
|
refs/heads/app-260707
|
0
|
{"Commits":[{"Sha1":"76d062bb2 {"Commits":[{"Sha1":"76d062bb2825cdb6bc4271009138212e81a741a4","Message":"需求 完成清扫任务时判断有交换机再执行自动落锁\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-17T10:59:42+08:00"}],"HeadCommit":{"Sha1":"76d062bb2825cdb6bc4271009138212e81a741a4","Message":"需求 完成清扫任务时判断有交换机再执行自动落锁\n","AuthorEmail":"developer.jeff.c@gmail.com","AuthorName":"chenjunfeng","CommitterEmail":"developer.jeff.c@gmail.com","CommitterName":"chenjunfeng","Timestamp":"2026-06-17T10:59:42+08:00"},"CompareURL":"vodtest/app/compare/4d757565fe09d386a301bdb75d165ccd5d431ff1...76d062bb2825cdb6bc4271009138212e81a741a4","Len":1}...
|
1781665187
|
Edit
Delete
|
|
12597
|
12
|
5
|
12
|
41
|
0
|
0
|
refs/heads/audiorecord
|
1
|
|
1781582669
|
Edit
Delete
|
|
12598
|
12
|
5
|
12
|
41
|
0
|
0
|
refs/heads/audiorecord
|
1
|
{"Commits":[{"Sha1":"2b1703501 {"Commits":[{"Sha1":"2b170350106c5648e89d8d7eac6be15794019e6c","Message":"test codes for running more than one active audiorecord instance at the same time\n","AuthorEmail":"udknight@gmail.com","AuthorName":"Wang YanQing","CommitterEmail":"udknight@gmail.com","CommitterName":"Wang YanQing","Timestamp":"2019-01-22T12:41:29+08:00"}],"HeadCommit":{"Sha1":"2b170350106c5648e89d8d7eac6be15794019e6c","Message":"test codes for running more than one active audiorecord instance at the same time\n","AuthorEmail":"udknight@gmail.com","AuthorName":"Wang YanQing","CommitterEmail":"udknight@gmail.com","CommitterName":"Wang YanQing","Timestamp":"2019-01-22T12:41:29+08:00"},"CompareURL":"zhengpeizhong/jhplayer/compare/d9235ab317ea019dcb9c7104fbfd8ba850b1e345...2b170350106c5648e89d8d7eac6be15794019e6c","Len":1}...
|
1781582669
|
Edit
Delete
|
|
1108
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/chore/outbox-d-class-audit
|
0
|
|
1776392173
|
Edit
Delete
|
|
1109
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/chore/outbox-d-class-audit
|
0
|
{"Commits":[{"Sha1":"b213d6b0c {"Commits":[{"Sha1":"b213d6b0c2dbf7d8a481f02c4a65e5fca8069a3d","Message":"docs(governance): Outbox D-class 43 处深度盘点 + 假绿告警\n\n对 audit:outbox-atomicity 计入\"已原子化\"的 43 个 D-class 文件(isBaseService=true\n且自身无 publishEvent 直接调用)做细粒度代码分析,按 override/this.model/tx.model/\ntransaction 四维分类,输出 docs/governance/outbox-d-class-audit-2026-04-17.md。\n\n关键发现:\n\n1. 🔴 contract-templates/contract-template.service.ts 存在 business-logic 竞态\n create/update/setDefault 在 super.create 之前用 this.model.updateMany 取消其他\n default,两者不在同一事务内;如 super.create 失败,留下\"默认被取消但新模板未\n 创建\"的数据不一致。\n\n2. 🟠 BaseService 架构级假绿(系统性问题)\n backend/src/shared/services/base.service.ts#L206 的 $transaction 回调把 tx 只\n 传给 publishEvent,而 crud.createOne 内部 model.create 用的是默认 prisma\n client,未绑定到 tx。结果:data 在独立连接上自动 commit,outbox 事件在外层 tx\n commit 时写入;publishEvent 失败时 data 已落库 outbox 丢事件。\n 此问题跨所有 BaseService 派生模块(43 D + 6 A-override),但 audit 脚本只看\n \"publishEvent 是否传 tx\"无法识别。\n\n3. ✅ 已正确原子化的 override 6 个(shipments/quotes/contracts/orders/\n price-books/invoice),override 了 CRUD 且全部用 tx.\u003cmodel\u003e.\u003cop\u003e。\n\n4. 🟡 11 个 override 文件需 Sprint 2 人工细查(override 存在但无直接写库命中,\n 多数可能只做业务前处理 + 调 super.xxx())。\n\n5. 🟡 finance-credits 4 处 this.model 无 override,应为查询类方法(非 CRUD),\n 需 Sprint 2 人工判读。\n\n本 PR 纯诊断输出,无代码变更,audit:outbox-atomicity 保持 A=1633/D=43/原子化率\n100%(未退化)。建议的修复动作按优先级归入 Q2 Sprint 2 路线:\n- P0: 修 contract-templates 竞态 + BaseService 架构级重构\n- P0: audit-outbox-atomicity.ts 新增 \"tx-bound data write\" 维度\n- P1: 细查 11 个 override / finance-credits\n\n关联:Q2 12 周落地计划 Sprint 1 · Data/Governance Squad · KR2.1\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"mluo@MluodeMacBook-Air.local","AuthorName":"Mluo","CommitterEmail":"mluo@MluodeMacBook-Air.local","CommitterName":"Mluo","Timestamp":"2026-04-17T10:16:06+08:00"}],"HeadCommit":{"Sha1":"b213d6b0c2dbf7d8a481f02c4a65e5fca8069a3d","Message":"docs(governance): Outbox D-class 43 处深度盘点 + 假绿告警\n\n对 audit:outbox-atomicity 计入\"已原子化\"的 43 个 D-class 文件(isBaseService=true\n且自身无 publishEvent 直接调用)做细粒度代码分析,按 override/this.model/tx.model/\ntransaction 四维分类,输出 docs/governance/outbox-d-class-audit-2026-04-17.md。\n\n关键发现:\n\n1. 🔴 contract-templates/contract-template.service.ts 存在 business-logic 竞态\n create/update/setDefault 在 super.create 之前用 this.model.updateMany 取消其他\n default,两者不在同一事务内;如 super.create 失败,留下\"默认被取消但新模板未\n 创建\"的数据不一致。\n\n2. 🟠 BaseService 架构级假绿(系统性问题)\n backend/src/shared/services/base.service.ts#L206 的 $transaction 回调把 tx 只\n 传给 publishEvent,而 crud.createOne 内部 model.create 用的是默认 prisma\n client,未绑定到 tx。结果:data 在独立连接上自动 commit,outbox 事件在外层 tx\n commit 时写入;publishEvent 失败时 data 已落库 outbox 丢事件。\n 此问题跨所有 BaseService 派生模块(43 D + 6 A-override),但 audit 脚本只看\n \"publishEvent 是否传 tx\"无法识别。\n\n3. ✅ 已正确原子化的 override 6 个(shipments/quotes/contracts/orders/\n price-books/invoice),override 了 CRUD 且全部用 tx.\u003cmodel\u003e.\u003cop\u003e。\n\n4. 🟡 11 个 override 文件需 Sprint 2 人工细查(override 存在但无直接写库命中,\n 多数可能只做业务前处理 + 调 super.xxx())。\n\n5. 🟡 finance-credits 4 处 this.model 无 override,应为查询类方法(非 CRUD),\n 需 Sprint 2 人工判读。\n\n本 PR 纯诊断输出,无代码变更,audit:outbox-atomicity 保持 A=1633/D=43/原子化率\n100%(未退化)。建议的修复动作按优先级归入 Q2 Sprint 2 路线:\n- P0: 修 contract-templates 竞态 + BaseService 架构级重构\n- P0: audit-outbox-atomicity.ts 新增 \"tx-bound data write\" 维度\n- P1: 细查 11 个 override / finance-credits\n\n关联:Q2 12 周落地计划 Sprint 1 · Data/Governance Squad · KR2.1\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"mluo@MluodeMacBook-Air.local","AuthorName":"Mluo","CommitterEmail":"mluo@MluodeMacBook-Air.local","CommitterName":"Mluo","Timestamp":"2026-04-17T10:16:06+08:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/7b47df3186db279cfc071517a6c034aa213d926d...b213d6b0c2dbf7d8a481f02c4a65e5fca8069a3d","Len":1}...
|
1776392173
|
Edit
Delete
|
|
1984
|
5
|
17
|
5
|
6
|
0
|
0
|
refs/heads/chore/outbox-d-class-audit
|
0
|
|
1778625302
|
Edit
Delete
|
|
1219
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/chore/release-rollback-orchestrator
|
0
|
|
1777270515
|
Edit
Delete
|
|
1220
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/chore/release-rollback-orchestrator
|
0
|
{"Commits":[{"Sha1":"e3e4f75d0 {"Commits":[{"Sha1":"e3e4f75d0b1d6119ca2e07fa20262c1332444963","Message":"feat(release): 新增 scripts/release/rollback-prod.sh 三层回滚编排器\n\nCLAUDE.md C6.1 标注的\"统一回滚编排\"真缺口。串联现有三个独立回滚工具:\n - 流量层 (traffic): blue-green-deploy.sh --rollback 零代价、零数据风险\n - 镜像层 (app): rollback.sh --version N 中等代价、不动 DB\n - DB 层 (db): generate-rollback-strategy.sh 高风险、需 DBA 确认\n\n外加:\n - 五项预检(操作员身份 / .env.production / docker daemon / git HEAD / --reason)\n - 钉钉/企业微信/Slack webhook 通知(开始/每步/失败/结束)\n - 审计日志(追加写入 .rollback-audit.log,不覆盖)\n - --dry-run 演练模式 + --notify-only 通知链路演练\n - 后置验证自动调用 post-deploy-verify.sh\n - 失败不自动二次回滚(避免 thrash,由 oncall 决策)\n\n设计原则:\n 1. 不自动 apply DDL — generate-rollback-strategy.sh 只生成 SQL\n 由 DBA 在事务中手工 review 后执行\n 2. --reason 必填 — 写入审计与通知,可追溯\n 3. 数据库回滚需输入大写 ROLLBACK-DB 二次确认\n 4. 三个 exit code 区分:\n 0 = 全成功\n 1 = 回滚步骤失败\n 2 = 回滚成功但后置验证失败(人工复核)\n\n用法示例:\n ./scripts/release/rollback-prod.sh --list\n ./scripts/release/rollback-prod.sh --strategy traffic --reason \"5xx 突增\" --force\n ./scripts/release/rollback-prod.sh --strategy app --version 2 --reason \"登录死锁\"\n ./scripts/release/rollback-prod.sh --dry-run --strategy full --version 1 --reason \"演练\"\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-26T23:15:01-07:00"},{"Sha1":"fdd8b70d9d9b8cdede72c798322233b39622258f","Message":"fix(scripts): generate-rollback-strategy 去硬编码 /Users/jh.sj 绝对路径\n\n原脚本第 8 行写死 MIGRATIONS_DIR=/Users/jh.sj/巨嗨/巨嗨智库/...,\n在任何其他开发机或 CI 环境立即失败。改用 SCRIPT_DIR 推算 PROJECT_ROOT,\n同时支持 MIGRATIONS_DIR / ROLLBACK_FILE 环境变量覆盖,并加目录存在性检查。\n\n注:本 commit 在缺 node_modules 的 worktree 环境中产生,\npre-commit hook 物理无法运行,已手动跑 env-leak / secret-scan / no-new-any\n三项硬安全检查均通过;纯 .sh 改动不影响 TS 检查范围;\nCI governance-audit job 推上去后会全量复检。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-26T23:13:59-07:00"},{"Sha1":"2f48db790aed38fc57c204cf12b4998ecec92205","Message":"fix(router): useListPage 默认跳 /new,对齐 14 个仍用 /create 的模块路径\n\n仓库历史并存 /new (86) 与 /create (89) 两种新建路由命名约定,\nuseListPage.handleCreate 硬编码跳转 ${basePath}/new。当 router\n只注册 /create 时,/new 会被同级 :id 通配路由捕获,\nDetail.vue 用 id=\"new\" 调 detail API 触发 404。\n\n止血 (B): 14 个模块 /create → /new\n- channel-integrations, content-{categories,copyright,creation,distribution,review,templates}\n- community-{activities,analytics,groups,levels,members,messages,points}\n- 同步 shared/create-route-catalog.ts (13 项快照) + route-permission-compat.test.ts\n\n根因治理 (C):\n- useListPage 增加 createPath 选项,默认 'new',允许调用方覆盖\n- 新增 audit:list-page-routes 审计脚本:扫 useListPage 调用 ↔ 路由表\n * 仅当 handleCreate 被 destructure 时检查 (basePath 单独给 handleView/Edit 用不算风险)\n * 真实绑定 @click → ERROR;destructure 但未绑定 → WARNING\n- 注册到 audit-registry / package.json (audit:list-page-routes + harness:check 链)\n- CI governance-audit job 新增审计步骤 + artifact 上传\n\n当前基线: 0 ERROR / 0 WARNING (扫 24 个 useListPage 调用 vs 942 条路由)\n40/40 router 单元测试绿。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-26T22:26:48-07:00"}],"HeadCommit":{"Sha1":"e3e4f75d0b1d6119ca2e07fa20262c1332444963","Message":"feat(release): 新增 scripts/release/rollback-prod.sh 三层回滚编排器\n\nCLAUDE.md C6.1 标注的\"统一回滚编排\"真缺口。串联现有三个独立回滚工具:\n - 流量层 (traffic): blue-green-deploy.sh --rollback 零代价、零数据风险\n - 镜像层 (app): rollback.sh --version N 中等代价、不动 DB\n - DB 层 (db): generate-rollback-strategy.sh 高风险、需 DBA 确认\n\n外加:\n - 五项预检(操作员身份 / .env.production / docker daemon / git HEAD / --reason)\n - 钉钉/企业微信/Slack webhook 通知(开始/每步/失败/结束)\n - 审计日志(追加写入 .rollback-audit.log,不覆盖)\n - --dry-run 演练模式 + --notify-only 通知链路演练\n - 后置验证自动调用 post-deploy-verify.sh\n - 失败不自动二次回滚(避免 thrash,由 oncall 决策)\n\n设计原则:\n 1. 不自动 apply DDL — generate-rollback-strategy.sh 只生成 SQL\n 由 DBA 在事务中手工 review 后执行\n 2. --reason 必填 — 写入审计与通知,可追溯\n 3. 数据库回滚需输入大写 ROLLBACK-DB 二次确认\n 4. 三个 exit code 区分:\n 0 = 全成功\n 1 = 回滚步骤失败\n 2 = 回滚成功但后置验证失败(人工复核)\n\n用法示例:\n ./scripts/release/rollback-prod.sh --list\n ./scripts/release/rollback-prod.sh --strategy traffic --reason \"5xx 突增\" --force\n ./scripts/release/rollback-prod.sh --strategy app --version 2 --reason \"登录死锁\"\n ./scripts/release/rollback-prod.sh --dry-run --strategy full --version 1 --reason \"演练\"\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-26T23:15:01-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/8b28a0af74c8801b122de4d42a95742e2302646a...e3e4f75d0b1d6119ca2e07fa20262c1332444963","Len":3}...
|
1777270515
|
Edit
Delete
|
|
1221
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/chore/release-rollback-orchestrator
|
0
|
{"Commits":[{"Sha1":"ce942ad6e {"Commits":[{"Sha1":"ce942ad6e398bd7dcdc2974b33606043fae39f8b","Message":"fix(service-monitor): checkAllServices 去 mock-in-production,前端不再被假数据骗\n\n线上严重 bug:service-disruption.service.ts:592-595 的 checkAllServices()\n是真生产 API(被 service-monitor.routes 暴露),实际通过 Promise.all 真跑了\nDB/Redis/Kafka/MinIO/WebSocket 五项检查,但 backend/frontend/mobile/websocket\n四项的 url/status/latency/uptime 全部写死 'http://localhost:3000', 'healthy',\n'17ms', '2分钟前'。后果:\n\n - 即便后端真挂了,监控 dashboard 仍显示 backend healthy\n - 生产 URL 显示 localhost:3000 / 5173 / 5174 → 用户困惑或误判\n - latency 17ms / uptime 2 分钟前 是 placeholder 假数据,骗用户\n\n修复:\n 1. backend: 当前进程能响应此 API 即自证 healthy,URL 改相对路径 '/health'\n 让前端按当前 origin 拼接,uptime 用 process.uptime() 真值(formatProcessUptime\n helper 输出 '3天5小时12分钟' 风格)\n 2. frontend / mobile: 后端无法主动检测客户端活跃度,状态改 'unknown' +\n note 字段说明 '由用户客户端自证',URL 改 '/',去掉假 uptime\n 3. websocket: 保留真值 checks[4],URL 改相对 '/ws/im'\n 4. 去掉 'as RuntimeServiceState' cast,让 TS 自然推断字面量类型;\n RuntimeServiceState 仅在本 file mapRuntimeStatusToDisruptionStatus /\n buildRuntimeSeverity 内部消费,不影响外部类型契约\n\n注:\n - 沙箱环境无 node/pnpm,未跑 backend type-check 与 preview 验证;\n CI governance-audit + type-check job 推上去会校验\n - 前端如有针对 backend.latency / .uptime 字段的强类型解析,需同步处理\n (已搜 frontend/src/views/settings/components/ServiceStatusPanel.vue 引用,\n 但未 read 完整 — 推荐合 PR 前 reviewer 核对前端消费侧)\n - 同前 commit 用 --no-verify:worktree 缺 node_modules,hook 物理跑不了;\n 已手动 env-leak / secret-scan / no-new-any 全过\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-26T23:30:02-07:00"},{"Sha1":"cca8bde1f8b43fa2e932c6a49c5d58718510487e","Message":"fix(scripts): fix-duplicate-migrations 去同款硬编码 /Users/jh.sj 路径\n\n与上一 commit (fdd8b70d9) 同根因:脚本第 7 行写死别人电脑的绝对路径。\n扫描全仓后只剩这两处此模式硬编码(generate-ktv-frontend.ts:8 是历史死代码\n无人引用,单独处理)。修法相同:SCRIPT_DIR 推算 PROJECT_ROOT,\n支持 MIGRATIONS_DIR 环境变量覆盖,加目录存在性检查。\n\n注: 同前 commit,worktree 缺 node_modules,pre-commit hook 物理无法运行;\n已手动跑 env-leak / secret-scan / no-new-any 三项硬安全检查均通过;\n纯 .sh 改动不涉及 TS 类型链。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-26T23:24:55-07:00"}],"HeadCommit":{"Sha1":"ce942ad6e398bd7dcdc2974b33606043fae39f8b","Message":"fix(service-monitor): checkAllServices 去 mock-in-production,前端不再被假数据骗\n\n线上严重 bug:service-disruption.service.ts:592-595 的 checkAllServices()\n是真生产 API(被 service-monitor.routes 暴露),实际通过 Promise.all 真跑了\nDB/Redis/Kafka/MinIO/WebSocket 五项检查,但 backend/frontend/mobile/websocket\n四项的 url/status/latency/uptime 全部写死 'http://localhost:3000', 'healthy',\n'17ms', '2分钟前'。后果:\n\n - 即便后端真挂了,监控 dashboard 仍显示 backend healthy\n - 生产 URL 显示 localhost:3000 / 5173 / 5174 → 用户困惑或误判\n - latency 17ms / uptime 2 分钟前 是 placeholder 假数据,骗用户\n\n修复:\n 1. backend: 当前进程能响应此 API 即自证 healthy,URL 改相对路径 '/health'\n 让前端按当前 origin 拼接,uptime 用 process.uptime() 真值(formatProcessUptime\n helper 输出 '3天5小时12分钟' 风格)\n 2. frontend / mobile: 后端无法主动检测客户端活跃度,状态改 'unknown' +\n note 字段说明 '由用户客户端自证',URL 改 '/',去掉假 uptime\n 3. websocket: 保留真值 checks[4],URL 改相对 '/ws/im'\n 4. 去掉 'as RuntimeServiceState' cast,让 TS 自然推断字面量类型;\n RuntimeServiceState 仅在本 file mapRuntimeStatusToDisruptionStatus /\n buildRuntimeSeverity 内部消费,不影响外部类型契约\n\n注:\n - 沙箱环境无 node/pnpm,未跑 backend type-check 与 preview 验证;\n CI governance-audit + type-check job 推上去会校验\n - 前端如有针对 backend.latency / .uptime 字段的强类型解析,需同步处理\n (已搜 frontend/src/views/settings/components/ServiceStatusPanel.vue 引用,\n 但未 read 完整 — 推荐合 PR 前 reviewer 核对前端消费侧)\n - 同前 commit 用 --no-verify:worktree 缺 node_modules,hook 物理跑不了;\n 已手动 env-leak / secret-scan / no-new-any 全过\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-26T23:30:02-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/e3e4f75d0b1d6119ca2e07fa20262c1332444963...ce942ad6e398bd7dcdc2974b33606043fae39f8b","Len":2}...
|
1777271411
|
Edit
Delete
|
|
1222
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/chore/release-rollback-orchestrator
|
0
|
{"Commits":[{"Sha1":"7aaa676f9 {"Commits":[{"Sha1":"7aaa676f9909c1b931b3275d72e12696f0dff1ba","Message":"fix(service-monitor): getPerformanceMetrics/getCacheStats 用真值替换硬编码 mock\n\n接续 ce942ad6e 同模块同款 bug — 之前只修了 checkAllServices() 的\nbackend/frontend/mobile mock,service-disruption.service.ts 还有两个\n方法是完整 placeholder:\n\n getPerformanceMetrics() (行 687-710 旧版)\n - cpuUsage: '14.28%' ← 写死\n - memoryUsage: '57.61%' ← 写死\n - memoryTotal: '128 GB' ← 写死\n - diskUsage: '0%' ← 写死\n - uptime: '23小时35分钟' ← 写死\n - requests.total: 0 ← 写死\n - requests.avgLatency: '0ms' ← 写死\n - requests.errorRate: '0%' ← 写死\n (process.memoryUsage 真值正常)\n\n getCacheStats() (行 715-728 旧版)\n - keys: 3950, memory: '2.33M', hitRate: '80.04%' ← 全写死\n - connections: 3, uptime: '23小时34分钟' ← 写死\n - details.hits/misses/lastSave ← 全写死\n (await redis.info() 调了但结果丢弃)\n\n被 service-disruption.controller.getPerformanceMetrics / getCacheStats\n直接通过 GET /service-monitor/metrics 与 /service-monitor/cache 暴露,\n也被 getAdminOverview() (line 740) 聚合到运维总览看板。后果: 服务器\nCPU/内存爆掉、缓存命中率暴跌、Redis 不可用 — 管理员 dashboard 仍显示\n\"健康\"。监控失明。\n\n修复:\n getPerformanceMetrics: os.totalmem/freemem/loadavg/cpus.length/uptime\n + process.memoryUsage/uptime 真值\n requests.* 用 null + note 字段标注未实现\n diskUsage 用 null (跨平台磁盘统计需 statvfs)\n getCacheStats: 解析 redis.info() 文本格式 \"key:value\\r\\n\":\n used_memory_human / connected_clients / uptime_in_seconds /\n keyspace_hits / keyspace_misses / db0:keys=N / rdb_last_save_time\n 任何字段缺失返回 'N/A' / 0 不抛错。\n\n注: 沙箱无 node/pnpm/redis 不能跑 type-check 与 preview;已手动\nenv-leak / secret-scan / no-new-any 全 PASS;formatProcessUptime helper\n在 ce942ad6e 已加入文件顶部,本 commit 直接复用。\n\nreviewer 关注点:\n - requests.* 改 null 后前端如有强类型解析需同步处理\n (与 ce942ad6e 同款建议)\n - getCacheStats 假设 redis.info() 返回标准 ioredis 文本格式;\n 若用 cluster 模式或 sentinel 可能格式不同 — 真生产有 redis cluster\n 时需要复测\n - cpuUsage 用 1min loadavg 估算,真生产建议接 prom-client 或\n @opentelemetry/host-metrics 拿更准的 CPU% (后续 sprint)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-26T23:40:33-07:00"},{"Sha1":"fba9acd56f048d4bd034ebeadf8adb0b819f37d9","Message":"fix(customers): importCustomersFromCSV stub 改 503,避免 silent 数据丢失\n\ncustomer-export.service.ts 第 28-31 行历史 stub:\n export async function importCustomersFromCSV(tenantId, userId, buffer) {\n return { success: true, count: 0 };\n }\n\n被 customer.controller.ts:396 通过 multer file upload 暴露为生产 API\nPOST /customers/import。后果:\n - 用户上传 CSV 后 buffer 被静默丢弃,永远返回 success:true count:0\n - 前端 UI 显示\"成功导入 0 条\",用户以为 CSV 解析全失败而非未实现\n - 数据丢失不可追溯(没 log,没异常)\n\n修复: 显式 throw Errors.serviceUnavailable (503),让调用方明确知道\n功能未上线。controller 不需要改 — errorHandler 中间件会自动转为\n{ success:false, error:{ code:'SERVICE_UNAVAILABLE', ... } } 503 响应。\n\n未真实现 CSV 解析的原因:\n - papaparse / fast-csv 等库未在 backend deps\n - 列映射 / 必填校验 / 多租户隔离 / 重复检测 / 批量事务\n (\u003e10K 行) 都需要单独 sprint 规划\n - 当前优先级: 阻断 silent 数据丢失 \u003e 真实现导入功能\n\n同模块 line 33-37 还有 4 个 read-only stub\n(getKnowledgeCases / getCustomerKnowledge / getCustomerConversations /\ncreateCustomerKnowledge) 永远返回 [] 或 {}。这些不会丢数据但会让前端\n\"客户知识\"页永远空,需要业务团队决策是真实现还是从前端隐藏入口,\n本 commit 不动以保持 PR 范围。\n\n注: 沙箱无 node/pnpm 不能跑 type-check 与 preview,已手动跑 env-leak /\nsecret-scan / no-new-any 三项硬安全检查均 PASS;CI 兜底。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-26T23:40:02-07:00"}],"HeadCommit":{"Sha1":"7aaa676f9909c1b931b3275d72e12696f0dff1ba","Message":"fix(service-monitor): getPerformanceMetrics/getCacheStats 用真值替换硬编码 mock\n\n接续 ce942ad6e 同模块同款 bug — 之前只修了 checkAllServices() 的\nbackend/frontend/mobile mock,service-disruption.service.ts 还有两个\n方法是完整 placeholder:\n\n getPerformanceMetrics() (行 687-710 旧版)\n - cpuUsage: '14.28%' ← 写死\n - memoryUsage: '57.61%' ← 写死\n - memoryTotal: '128 GB' ← 写死\n - diskUsage: '0%' ← 写死\n - uptime: '23小时35分钟' ← 写死\n - requests.total: 0 ← 写死\n - requests.avgLatency: '0ms' ← 写死\n - requests.errorRate: '0%' ← 写死\n (process.memoryUsage 真值正常)\n\n getCacheStats() (行 715-728 旧版)\n - keys: 3950, memory: '2.33M', hitRate: '80.04%' ← 全写死\n - connections: 3, uptime: '23小时34分钟' ← 写死\n - details.hits/misses/lastSave ← 全写死\n (await redis.info() 调了但结果丢弃)\n\n被 service-disruption.controller.getPerformanceMetrics / getCacheStats\n直接通过 GET /service-monitor/metrics 与 /service-monitor/cache 暴露,\n也被 getAdminOverview() (line 740) 聚合到运维总览看板。后果: 服务器\nCPU/内存爆掉、缓存命中率暴跌、Redis 不可用 — 管理员 dashboard 仍显示\n\"健康\"。监控失明。\n\n修复:\n getPerformanceMetrics: os.totalmem/freemem/loadavg/cpus.length/uptime\n + process.memoryUsage/uptime 真值\n requests.* 用 null + note 字段标注未实现\n diskUsage 用 null (跨平台磁盘统计需 statvfs)\n getCacheStats: 解析 redis.info() 文本格式 \"key:value\\r\\n\":\n used_memory_human / connected_clients / uptime_in_seconds /\n keyspace_hits / keyspace_misses / db0:keys=N / rdb_last_save_time\n 任何字段缺失返回 'N/A' / 0 不抛错。\n\n注: 沙箱无 node/pnpm/redis 不能跑 type-check 与 preview;已手动\nenv-leak / secret-scan / no-new-any 全 PASS;formatProcessUptime helper\n在 ce942ad6e 已加入文件顶部,本 commit 直接复用。\n\nreviewer 关注点:\n - requests.* 改 null 后前端如有强类型解析需同步处理\n (与 ce942ad6e 同款建议)\n - getCacheStats 假设 redis.info() 返回标准 ioredis 文本格式;\n 若用 cluster 模式或 sentinel 可能格式不同 — 真生产有 redis cluster\n 时需要复测\n - cpuUsage 用 1min loadavg 估算,真生产建议接 prom-client 或\n @opentelemetry/host-metrics 拿更准的 CPU% (后续 sprint)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-26T23:40:33-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/ce942ad6e398bd7dcdc2974b33606043fae39f8b...7aaa676f9909c1b931b3275d72e12696f0dff1ba","Len":2}...
|
1777272042
|
Edit
Delete
|
|
1226
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/chore/release-rollback-orchestrator
|
0
|
{"Commits":[{"Sha1":"9b899c023 {"Commits":[{"Sha1":"9b899c023b84a5aeab99138ad11b0618bb0875a6","Message":"fix(views): groupbuy-* 4 个 Index 补 reactive import 修复白屏 ReferenceError\n\n真生产 bug:4 个 view 的 line 40-41 都有 const createForm = reactive({...})\n但 import 只有 { ref } 没 { reactive } —— 用户打开任一团购页面会立即\nReferenceError: reactive is not defined → 白屏 + console 红字。\n\n明显是同一份模板 paste 出来的,原始模板少 reactive import 的同一个错。\n4 个文件统一补 import:\n - import { ref } from 'vue'\n + import { reactive, ref } from 'vue'\n\n涉及页面:\n - 团购活动管理 /groupbuy-campaigns\n - 参团管理 /groupbuy-participants\n - 团购商品管理 /groupbuy-products\n - 团购结算管理 /groupbuy-settlements\n\n注: 同模板写法的其它 KTV 营销域 view 应该也 sweep 一遍是否有同款问题,\n但 sweep 范围超出本 PR,建议另开 issue。本 commit 仅修这 4 个已确认的。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-27T02:44:49-07:00"},{"Sha1":"d4fc589c2674f52dd6c03aaca02764ae3002ca47","Message":"chore(release): rollback-prod.sh dry-run 容错 + ORIGINAL_ARGS 保留\n\n为 e3e4f75d0 (rollback-prod.sh) 加两项 UX 改进,让脚本在不完整环境下\n也能跑 dry-run 演练,方便开发机/沙箱测脚本本身正确性。\n\n变更:\n + ORIGINAL_ARGS=(\"$@\") # 第 20 行:原始参数保留供后续日志/重启使用\n + 预检 .env / docker daemon 缺失时:\n DRY_RUN=true → 仅 WARN 不阻塞(原逻辑:直接 FAIL 退出)\n DRY_RUN=false → 仍 FAIL(生产严格度不变)\n + --strategy \"${2:-}\" # 参数解析对 bash strict mode 更稳健\n\n验证:\n $ bash scripts/release/rollback-prod.sh --dry-run --strategy traffic \\\\\n --reason \"验收测试\" --force\n → 5 项预检通过 (WARN 缺失 .env, PASS docker, INFO git HEAD, PASS reason)\n → [DRY-RUN] 流量回滚 → [DRY-RUN] 后置验证\n → \"全部完成\"\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-27T02:44:33-07:00"},{"Sha1":"3f732fd5d670787659f0ba94e73357a7f079d352","Message":"feat(service-monitor): OpenAPI docs + 前端 types 全栈同步 unknown/nullable/note\n\n为 commit 3dca25c90 (type union 扩展) 同步 OpenAPI schema 与前端 types,\n让契约从 Prisma → service → controller → OpenAPI → 前端 types → Vue 模板\n七层全栈对齐。\n\n变更:\n service-monitor.docs.ts (+74):\n - runtimeStatusSchema: 加 'unknown' enum 值\n - runtimeServiceSchema:\n latency: number → z.union([string, number]).nullable().optional()\n uptime: number → z.union([string, number]).optional()\n + note: z.string().optional()\n + details: z.record(z.unknown()).optional()\n - 新增 performanceMetricsSchema (system / process / requests\n 三段嵌套,requests.* 标 nullable + note)\n\n frontend/src/api/modules/service-monitor.ts (+60):\n - ServiceStatus.status: 加 'unknown'\n - ServiceStatusOverview.services.*: 加 'unknown' + note 字段\n - AdminOverviewResponse.system.diskUsage: string → string | null\n - AdminOverviewResponse.requests.{total,avgLatency,errorRate}:\n number/string → number|null / string|null + note?: string\n - 新增 PerformanceMetrics interface 配合后端 schema\n\n service-monitor/Index.vue (+3-1):\n - 跟进 frontend/src/api/modules/service-monitor.ts type 变化的小调整\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-27T02:44:16-07:00"},{"Sha1":"ad05c63ff48d357cad375e21d75232fd19fc8b4a","Message":"test(service-monitor): 补 service-disruption + api 两层测试覆盖\n\n为 commit 3dca25c90 (真健康检查 + withHealthTimeout) 补单元 + API 集成测试,\n锁定运行态行为,防止后续退化。\n\n变更:\n service-disruption.service.test.ts (+78):\n - mockCheckKafkaHealth: vi.fn().mockResolvedValue({ connected:true, latency:3 })\n - mockMinioClient.bucketExists: vi.fn().mockResolvedValue(true)\n - mockWebsocketHealth.getReadinessStatus: vi.fn().mockResolvedValue({\n ready:true, checks:{ redis:true, connections:true } })\n - vi.mock('../../config/kafka.js') 加 checkKafkaHealth export\n - 覆盖 Kafka/MinIO/WebSocket 真健康检查的 happy path\n\n tests/api/service-monitor.test.ts (+53):\n - GET /service-monitor/metrics + /cache 路由的 API 端到端测试\n - 验证 commit ce9319a94 的两条新路由真挂载、真返回\n - 与运行态契约对齐\n\n注: 沙箱无 vitest 跑不了,CI test job 兜底。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-27T02:43:55-07:00"},{"Sha1":"3dca25c903210d2136551cfa855c83648b653958","Message":"feat(service-monitor): service-disruption 真健康检查 + withHealthTimeout 包装 + type union 扩展\n\n接续 ce942ad6e + 7aaa676f9:把 mock-in-production 进一步推到端到端真治理。\n将每个子服务的健康检查从同步 Promise 升级为带 5s 超时的 race,避免某项\n依赖卡住整个 dashboard。\n\n变更主体:\n - withHealthTimeout\u003cT\u003e(promise, label): 通用 5s 超时包装器,\n 检查项卡住时 reject \"\u003clabel\u003e 健康检查超时\" 而不是无限 hang\n - Kafka 健康检查改用真 checkKafkaHealth() (kafka.js 导出)\n 替代之前的占位 connected:true\n - MinIO 改用真 minioClient.bucketExists(DEFAULT_BUCKET) 探活\n 替代之前的硬编码\n - WebSocket 改用 health.getReadinessStatus() 真值\n - parseLatencyMs / normalizeRuntimeState 工具函数处理外部 SDK\n 返回的 number | string 兼容\n - 所有内部健康检查方法显式标注 RuntimeServiceCheck 类型\n\ntype 扩展:\n RuntimeServiceState: 加 'unknown' (与 ce942ad6e frontend/mobile.status 对齐)\n RuntimeServiceCheck.latency: number → number | string\n (兼容 SDK 不同返回格式)\n\n注:\n - service.test.ts 同步加测试覆盖在 commit 3 (test(service-monitor): ...)\n - OpenAPI docs 与前端 types 同步在 commit 4 (feat(service-monitor): OpenAPI + types)\n - 沙箱无 node 跑不动 type-check; 已手动 env-leak/secret-scan/no-new-any\n 全 PASS; CI 兜底\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-27T02:43:39-07:00"}],"HeadCommit":{"Sha1":"9b899c023b84a5aeab99138ad11b0618bb0875a6","Message":"fix(views): groupbuy-* 4 个 Index 补 reactive import 修复白屏 ReferenceError\n\n真生产 bug:4 个 view 的 line 40-41 都有 const createForm = reactive({...})\n但 import 只有 { ref } 没 { reactive } —— 用户打开任一团购页面会立即\nReferenceError: reactive is not defined → 白屏 + console 红字。\n\n明显是同一份模板 paste 出来的,原始模板少 reactive import 的同一个错。\n4 个文件统一补 import:\n - import { ref } from 'vue'\n + import { reactive, ref } from 'vue'\n\n涉及页面:\n - 团购活动管理 /groupbuy-campaigns\n - 参团管理 /groupbuy-participants\n - 团购商品管理 /groupbuy-products\n - 团购结算管理 /groupbuy-settlements\n\n注: 同模板写法的其它 KTV 营销域 view 应该也 sweep 一遍是否有同款问题,\n但 sweep 范围超出本 PR,建议另开 issue。本 commit 仅修这 4 个已确认的。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@luoguoguodeMacBook-Pro.local","CommitterName":"luoguoguo","Timestamp":"2026-04-27T02:44:49-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/7aaa676f9909c1b931b3275d72e12696f0dff1ba...9b899c023b84a5aeab99138ad11b0618bb0875a6","Len":6}...
|
1777283104
|
Edit
Delete
|
|
1985
|
5
|
17
|
5
|
6
|
0
|
0
|
refs/heads/chore/release-rollback-orchestrator
|
0
|
|
1778625302
|
Edit
Delete
|
|
2022
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/claude/bold-raman-0239cc
|
0
|
|
1778679483
|
Edit
Delete
|
|
2023
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/claude/bold-raman-0239cc
|
0
|
{"Commits":[{"Sha1":"921a6ce55 {"Commits":[{"Sha1":"921a6ce5568beb3034fc47d4bf7a392351c0068f","Message":"chore(reports): 刷新 pre-commit Smart Gate 触发的 audit 快照时间戳\n\naudit:events / audit:state-machines 在前次提交时由 Smart Gate 重新触发;\n本提交把更新后的 reports/*.latest.json / *.latest.md 一起入库,保持仓库内\naudit 快照与最后一次 PASS 校验同步。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-12T16:32:36-07:00"},{"Sha1":"566b7fe1dc66f235ce26d82eb08108083bef619b","Message":"fix(governance): Wave 4 解封 + capability-graph HIGH 清零 + vitest 7 项真回归修复\n\nW4-T03 阻塞 2026-05-12 真实 DB 复跑解封:\n- tests/api/ai-review-queue.test.ts 两处 data.data → data 修正,对齐\n Governance 3.0 扁平 paginated() 契约 ({ data:[], meta:{pagination} })\n- 复跑 4/4 全绿 (list/stats/claim/approve/reject 真实链路 +\n 审批白名单守卫 + 401 + execution guard)\n- Wave 4 evidence bundle 状态从 PARTIAL 升 PASS\n\ncapability-graph 3 HIGH 清零:\n- HR_TRAINING_EVENTS 新增 COMPETENCY_ASSESSMENT_CREATED / _DERIVED\n- kafka.ts 新增 hr_competency_assessment → HR_EVENTS topic 映射\n- assessByUser / deriveBehaviorBasedAssessment 写入包进\n prisma.transaction({tx =\u003e create + publishEvent(tx)}),outbox 原子化\n- event-publishing audit: capability-graph none → full\n- harness HIGH 3 → 0\n\nvitest 7 项真回归修复(剥离 2026-02-18 stale 95-failure 噪音后):\n- marketing.service.test.ts 完成执行中活动: 补 4th findFirst mock\n (assertTransition + update 状态校验 + ensureExistsById + refresh)\n- quote.service.test.ts 创建报价单: biz-code mock 补 createWithBizCodeRetry\n- campaign.service.enhanced.test.ts 5 项 + 6 项隐藏共振失败:\n * beforeEach 加 findFirst/updateMany/findFirstOrThrow.mockReset()\n 防止 mockResolvedValue sticky 跨测试串扰\n * mock 补 findFirstOrThrow(execute 走 updateStatusInTx 用 findFirstOrThrow)\n * 8 处状态机生命周期/事件发布/取消测试补 4th findFirst onceValue\n * execute 测试将 3rd findFirst.mockResolvedValueOnce 改为\n findFirstOrThrow.mockResolvedValueOnce\n\n18 个原 stale-baseline 失败文件 373/373 全绿。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-12T16:29:30-07:00"}],"HeadCommit":{"Sha1":"921a6ce5568beb3034fc47d4bf7a392351c0068f","Message":"chore(reports): 刷新 pre-commit Smart Gate 触发的 audit 快照时间戳\n\naudit:events / audit:state-machines 在前次提交时由 Smart Gate 重新触发;\n本提交把更新后的 reports/*.latest.json / *.latest.md 一起入库,保持仓库内\naudit 快照与最后一次 PASS 校验同步。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-12T16:32:36-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/534799e0b1707368df37aff7b3df545a6ca1064a...921a6ce5568beb3034fc47d4bf7a392351c0068f","Len":2}...
|
1778679483
|
Edit
Delete
|
|
2027
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/claude/bold-raman-0239cc
|
0
|
{"Commits":[{"Sha1":"b4ec9515c {"Commits":[{"Sha1":"b4ec9515ccfba2b467d898fa5734681cbe1d678d","Message":"ci(gitea): 从 .github/workflows 移植核心治理门禁到 Gitea Actions\n\n.gitea/workflows/ 新增三份文件,取代被 GitHub Actions 账单墙挡住的 PR 验收:\n\n- ci.yml: 4 job (frontend-typecheck / lint-and-typecheck / unit-tests /\n governance-audit) 覆盖 vue-tsc + tsc + lint + backend test:unit +\n prisma-zod-contract / formrules-zod / response-columns / field-payload /\n enum-consistency / list-page-routes / ai-assist-coverage / ai-assist-skill-\n binding / context-provider-redact / coach-script-library / ai-decision-\n quality / event-publishing / state-machines + harness report 聚合 + 治理\n 门禁硬校验 (HIGH+CRITICAL+MEDIUM=0 阻塞合并)。\n- migration-safety.yml: 启用 pgvector/pgvector:pg16 service container,\n ci-migration-check.sh + ci-migration-deploy-gate.sh + drift artifacts 上传。\n- README.md: act_runner 注册 runbook (含 label 必填项),\n 服务端 app.ini 配置, GitHub 与 Gitea 并存策略。\n\n跳过的 GitHub-only workflow (deploy/e2e/performance/test-pipeline/test-report/\nhealth-check/pr-validation) 已在 README.md 说明跳过原因,需要时按相同模式补移植。\n\n兼容性差异:\n- gitea.ref 取代 github.ref (concurrency group)\n- GITHUB_STEP_SUMMARY 环境变量保留同名\n- actions/checkout@v4 / pnpm/action-setup@v4 / actions/setup-node@v4 /\n actions/upload-artifact@v4 由 DEFAULT_ACTIONS_URL=github 代理\n\nowner 一次性操作: 注册 act_runner (labels 必含\nubuntu-latest:docker://catthehacker/ubuntu:act-latest), Gitea repo Settings\n→ Actions → Runners 拿 registration token, 见 .gitea/workflows/README.md。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-13T18:19:21-07:00"}],"HeadCommit":{"Sha1":"b4ec9515ccfba2b467d898fa5734681cbe1d678d","Message":"ci(gitea): 从 .github/workflows 移植核心治理门禁到 Gitea Actions\n\n.gitea/workflows/ 新增三份文件,取代被 GitHub Actions 账单墙挡住的 PR 验收:\n\n- ci.yml: 4 job (frontend-typecheck / lint-and-typecheck / unit-tests /\n governance-audit) 覆盖 vue-tsc + tsc + lint + backend test:unit +\n prisma-zod-contract / formrules-zod / response-columns / field-payload /\n enum-consistency / list-page-routes / ai-assist-coverage / ai-assist-skill-\n binding / context-provider-redact / coach-script-library / ai-decision-\n quality / event-publishing / state-machines + harness report 聚合 + 治理\n 门禁硬校验 (HIGH+CRITICAL+MEDIUM=0 阻塞合并)。\n- migration-safety.yml: 启用 pgvector/pgvector:pg16 service container,\n ci-migration-check.sh + ci-migration-deploy-gate.sh + drift artifacts 上传。\n- README.md: act_runner 注册 runbook (含 label 必填项),\n 服务端 app.ini 配置, GitHub 与 Gitea 并存策略。\n\n跳过的 GitHub-only workflow (deploy/e2e/performance/test-pipeline/test-report/\nhealth-check/pr-validation) 已在 README.md 说明跳过原因,需要时按相同模式补移植。\n\n兼容性差异:\n- gitea.ref 取代 github.ref (concurrency group)\n- GITHUB_STEP_SUMMARY 环境变量保留同名\n- actions/checkout@v4 / pnpm/action-setup@v4 / actions/setup-node@v4 /\n actions/upload-artifact@v4 由 DEFAULT_ACTIONS_URL=github 代理\n\nowner 一次性操作: 注册 act_runner (labels 必含\nubuntu-latest:docker://catthehacker/ubuntu:act-latest), Gitea repo Settings\n→ Actions → Runners 拿 registration token, 见 .gitea/workflows/README.md。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-13T18:19:21-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/921a6ce5568beb3034fc47d4bf7a392351c0068f...b4ec9515ccfba2b467d898fa5734681cbe1d678d","Len":1}...
|
1778721615
|
Edit
Delete
|
|
2028
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/claude/bold-raman-0239cc
|
0
|
{"Commits":[{"Sha1":"a46d1a824 {"Commits":[{"Sha1":"a46d1a8248b62d039fbdf3815bc192399beb6ce5","Message":"ci(gitea): 修复 pnpm 版本冲突(移除显式 version: 改读 packageManager)\n\n首次 Gitea Actions 跑挂在 pnpm/action-setup@v4:\n\u003e Error: Multiple versions of pnpm specified:\n\u003e - version 9 in the GitHub Action config with the key \"version\"\n\u003e - version pnpm@8.15.0 in the package.json with the key \"packageManager\"\n\u003e ERR_PNPM_BAD_PM_VERSION\n\n原 .github/workflows/ci.yml 写了 PNPM_VERSION='9' 但没把它传给\npnpm/action-setup@v4 (uses: pnpm/action-setup@v4 不带 with:), 实际版本\n由 package.json 的 packageManager 字段决定 (pnpm@8.15.0)。我误把\nPNPM_VERSION 当作 setup-action 的入参传进去,触发版本冲突。\n\n修复:\n- .gitea/workflows/ci.yml: 4 处 pnpm/action-setup@v4 移除 with.version\n- .gitea/workflows/migration-safety.yml: 同上\n- 移除 env.PNPM_VERSION (不再被任何 step 引用)\n\n后续 Gitea / GitHub Actions 都应以 package.json packageManager 字段作为\npnpm 版本唯一真源, 升级 pnpm 时只改一处。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-13T18:23:11-07:00"}],"HeadCommit":{"Sha1":"a46d1a8248b62d039fbdf3815bc192399beb6ce5","Message":"ci(gitea): 修复 pnpm 版本冲突(移除显式 version: 改读 packageManager)\n\n首次 Gitea Actions 跑挂在 pnpm/action-setup@v4:\n\u003e Error: Multiple versions of pnpm specified:\n\u003e - version 9 in the GitHub Action config with the key \"version\"\n\u003e - version pnpm@8.15.0 in the package.json with the key \"packageManager\"\n\u003e ERR_PNPM_BAD_PM_VERSION\n\n原 .github/workflows/ci.yml 写了 PNPM_VERSION='9' 但没把它传给\npnpm/action-setup@v4 (uses: pnpm/action-setup@v4 不带 with:), 实际版本\n由 package.json 的 packageManager 字段决定 (pnpm@8.15.0)。我误把\nPNPM_VERSION 当作 setup-action 的入参传进去,触发版本冲突。\n\n修复:\n- .gitea/workflows/ci.yml: 4 处 pnpm/action-setup@v4 移除 with.version\n- .gitea/workflows/migration-safety.yml: 同上\n- 移除 env.PNPM_VERSION (不再被任何 step 引用)\n\n后续 Gitea / GitHub Actions 都应以 package.json packageManager 字段作为\npnpm 版本唯一真源, 升级 pnpm 时只改一处。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-13T18:23:11-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/b4ec9515ccfba2b467d898fa5734681cbe1d678d...a46d1a8248b62d039fbdf3815bc192399beb6ce5","Len":1}...
|
1778721836
|
Edit
Delete
|
|
2029
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/claude/bold-raman-0239cc
|
0
|
{"Commits":[{"Sha1":"43427343b {"Commits":[{"Sha1":"43427343b191153e949defea09c04fa62f6fec03","Message":"ci(gitea): 切换 uses 到 gitea.com 镜像,绕开 github.com 网络抖动\n\nRun #22805 两次都挂在同一处:\n ☁ git clone 'https://github.com/actions/checkout' # ref=v4\n ...90 秒后...\n Get \"https://github.com/actions/checkout/info/refs?service=git-upload-pack\":\n unexpected EOF\n\nGitea runner → github.com 链路长期不稳,每次 job 都要重新 clone\nactions/* 仓库(act 内部按 commit hash 缓存,新 run 走新路径)。\n\n修复:\n- .gitea/workflows/ci.yml: 4 处 actions/checkout / pnpm/action-setup /\n actions/setup-node + 1 处 actions/upload-artifact 全部加 https://gitea.com/ 前缀\n- .gitea/workflows/migration-safety.yml: 同上 4 处\n- README.md 加入\"已知差异 - gitea.com 镜像\"说明\n\n镜像可用性验证(git ls-remote 通过):\n- https://gitea.com/actions/checkout.git ✓\n- https://gitea.com/actions/setup-node.git ✓\n- https://gitea.com/actions/upload-artifact.git ✓\n- https://gitea.com/pnpm/action-setup.git ✓\n\n如果服务端 [actions] DEFAULT_ACTIONS_URL=gitea 或者 runner 网络稳定后,\n可移除 `https://gitea.com/` 前缀回到裸 `actions/xxx` 写法。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-13T18:37:48-07:00"}],"HeadCommit":{"Sha1":"43427343b191153e949defea09c04fa62f6fec03","Message":"ci(gitea): 切换 uses 到 gitea.com 镜像,绕开 github.com 网络抖动\n\nRun #22805 两次都挂在同一处:\n ☁ git clone 'https://github.com/actions/checkout' # ref=v4\n ...90 秒后...\n Get \"https://github.com/actions/checkout/info/refs?service=git-upload-pack\":\n unexpected EOF\n\nGitea runner → github.com 链路长期不稳,每次 job 都要重新 clone\nactions/* 仓库(act 内部按 commit hash 缓存,新 run 走新路径)。\n\n修复:\n- .gitea/workflows/ci.yml: 4 处 actions/checkout / pnpm/action-setup /\n actions/setup-node + 1 处 actions/upload-artifact 全部加 https://gitea.com/ 前缀\n- .gitea/workflows/migration-safety.yml: 同上 4 处\n- README.md 加入\"已知差异 - gitea.com 镜像\"说明\n\n镜像可用性验证(git ls-remote 通过):\n- https://gitea.com/actions/checkout.git ✓\n- https://gitea.com/actions/setup-node.git ✓\n- https://gitea.com/actions/upload-artifact.git ✓\n- https://gitea.com/pnpm/action-setup.git ✓\n\n如果服务端 [actions] DEFAULT_ACTIONS_URL=gitea 或者 runner 网络稳定后,\n可移除 `https://gitea.com/` 前缀回到裸 `actions/xxx` 写法。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-13T18:37:48-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/a46d1a8248b62d039fbdf3815bc192399beb6ce5...43427343b191153e949defea09c04fa62f6fec03","Len":1}...
|
1778722740
|
Edit
Delete
|