|
19853
|
17
|
5
|
17
|
69
|
0
|
0
|
refs/heads/main
|
1
|
{"Commits":[{"Sha1":"ed70a93bb {"Commits":[{"Sha1":"ed70a93bbf190028b8d3ee1b2555cf3e92313d1c","Message":"清理旧版原型文件\n","AuthorEmail":"linmingzhang@g-hi.com","AuthorName":"linmingzhang","CommitterEmail":"linmingzhang@g-hi.com","CommitterName":"linmingzhang","Timestamp":"2026-07-30T13:28:28+08:00"}],"HeadCommit":{"Sha1":"ed70a93bbf190028b8d3ee1b2555cf3e92313d1c","Message":"清理旧版原型文件\n","AuthorEmail":"linmingzhang@g-hi.com","AuthorName":"linmingzhang","CommitterEmail":"linmingzhang@g-hi.com","CommitterName":"linmingzhang","Timestamp":"2026-07-30T13:28:28+08:00"},"CompareURL":"linmingzhang/ktv-booking-prototype/compare/d77c102ef4f2f528669d20e991527cc205dc3cf7...ed70a93bbf190028b8d3ee1b2555cf3e92313d1c","Len":1}...
|
1785389309
|
Edit
Delete
|
|
19852
|
17
|
5
|
17
|
69
|
0
|
0
|
refs/heads/main
|
1
|
{"Commits":[{"Sha1":"d77c102ef {"Commits":[{"Sha1":"d77c102ef4f2f528669d20e991527cc205dc3cf7","Message":"清理旧版原型文件\n","AuthorEmail":"linmingzhang@g-hi.com","AuthorName":"linmingzhang","CommitterEmail":"linmingzhang@g-hi.com","CommitterName":"linmingzhang","Timestamp":"2026-07-30T13:28:27+08:00"}],"HeadCommit":{"Sha1":"d77c102ef4f2f528669d20e991527cc205dc3cf7","Message":"清理旧版原型文件\n","AuthorEmail":"linmingzhang@g-hi.com","AuthorName":"linmingzhang","CommitterEmail":"linmingzhang@g-hi.com","CommitterName":"linmingzhang","Timestamp":"2026-07-30T13:28:27+08:00"},"CompareURL":"linmingzhang/ktv-booking-prototype/compare/601a745e6de4760bb87edc8e09b386336718cf94...d77c102ef4f2f528669d20e991527cc205dc3cf7","Len":1}...
|
1785389308
|
Edit
Delete
|
|
19851
|
17
|
5
|
17
|
69
|
0
|
0
|
refs/heads/main
|
1
|
{"Commits":[{"Sha1":"601a745e6 {"Commits":[{"Sha1":"601a745e6de4760bb87edc8e09b386336718cf94","Message":"清理旧版原型文件\n","AuthorEmail":"linmingzhang@g-hi.com","AuthorName":"linmingzhang","CommitterEmail":"linmingzhang@g-hi.com","CommitterName":"linmingzhang","Timestamp":"2026-07-30T13:28:26+08:00"}],"HeadCommit":{"Sha1":"601a745e6de4760bb87edc8e09b386336718cf94","Message":"清理旧版原型文件\n","AuthorEmail":"linmingzhang@g-hi.com","AuthorName":"linmingzhang","CommitterEmail":"linmingzhang@g-hi.com","CommitterName":"linmingzhang","Timestamp":"2026-07-30T13:28:26+08:00"},"CompareURL":"linmingzhang/ktv-booking-prototype/compare/c2fc636e5d4134cfb2587f23a6350c981225b076...601a745e6de4760bb87edc8e09b386336718cf94","Len":1}...
|
1785389307
|
Edit
Delete
|
|
19850
|
17
|
5
|
17
|
69
|
0
|
0
|
refs/heads/main
|
1
|
{"Commits":[{"Sha1":"c2fc636e5 {"Commits":[{"Sha1":"c2fc636e5d4134cfb2587f23a6350c981225b076","Message":"清理旧版原型文件\n","AuthorEmail":"linmingzhang@g-hi.com","AuthorName":"linmingzhang","CommitterEmail":"linmingzhang@g-hi.com","CommitterName":"linmingzhang","Timestamp":"2026-07-30T13:28:25+08:00"}],"HeadCommit":{"Sha1":"c2fc636e5d4134cfb2587f23a6350c981225b076","Message":"清理旧版原型文件\n","AuthorEmail":"linmingzhang@g-hi.com","AuthorName":"linmingzhang","CommitterEmail":"linmingzhang@g-hi.com","CommitterName":"linmingzhang","Timestamp":"2026-07-30T13:28:25+08:00"},"CompareURL":"linmingzhang/ktv-booking-prototype/compare/54fbe887771fc67dcc93c4691e84e33ab54875ef...c2fc636e5d4134cfb2587f23a6350c981225b076","Len":1}...
|
1785389307
|
Edit
Delete
|
|
19849
|
17
|
17
|
17
|
69
|
0
|
0
|
refs/heads/20260908
|
1
|
|
1785389260
|
Edit
Delete
|
|
19848
|
17
|
17
|
17
|
69
|
0
|
0
|
refs/heads/20260818
|
1
|
|
1785389219
|
Edit
Delete
|
|
19846
|
17
|
5
|
17
|
69
|
0
|
0
|
refs/heads/20260908
|
1
|
{"Commits":[],"HeadCommit":{"S {"Commits":[],"HeadCommit":{"Sha1":"54fbe887771fc67dcc93c4691e84e33ab54875ef","Message":"员工预订码\n","AuthorEmail":"linmingzhang@g-hi.com","AuthorName":"linmingzhang","CommitterEmail":"linmingzhang@g-hi.com","CommitterName":"linmingzhang","Timestamp":"2026-07-30T11:19:43+08:00"},"CompareURL":"linmingzhang/ktv-booking-prototype/compare/main...54fbe887771fc67dcc93c4691e84e33ab54875ef","Len":0}...
|
1785389090
|
Edit
Delete
|
|
19845
|
17
|
5
|
17
|
69
|
0
|
0
|
refs/heads/20260908
|
1
|
|
1785389090
|
Edit
Delete
|
|
19844
|
17
|
5
|
17
|
69
|
0
|
0
|
refs/heads/20260818
|
1
|
{"Commits":[],"HeadCommit":{"S {"Commits":[],"HeadCommit":{"Sha1":"54fbe887771fc67dcc93c4691e84e33ab54875ef","Message":"员工预订码\n","AuthorEmail":"linmingzhang@g-hi.com","AuthorName":"linmingzhang","CommitterEmail":"linmingzhang@g-hi.com","CommitterName":"linmingzhang","Timestamp":"2026-07-30T11:19:43+08:00"},"CompareURL":"linmingzhang/ktv-booking-prototype/compare/main...54fbe887771fc67dcc93c4691e84e33ab54875ef","Len":0}...
|
1785389071
|
Edit
Delete
|
|
19843
|
17
|
5
|
17
|
69
|
0
|
0
|
refs/heads/20260818
|
1
|
|
1785389071
|
Edit
Delete
|
|
19834
|
17
|
5
|
17
|
69
|
0
|
0
|
refs/heads/main
|
1
|
{"Commits":[{"Sha1":"54fbe8877 {"Commits":[{"Sha1":"54fbe887771fc67dcc93c4691e84e33ab54875ef","Message":"员工预订码\n","AuthorEmail":"linmingzhang@g-hi.com","AuthorName":"linmingzhang","CommitterEmail":"linmingzhang@g-hi.com","CommitterName":"linmingzhang","Timestamp":"2026-07-30T11:19:43+08:00"}],"HeadCommit":{"Sha1":"54fbe887771fc67dcc93c4691e84e33ab54875ef","Message":"员工预订码\n","AuthorEmail":"linmingzhang@g-hi.com","AuthorName":"linmingzhang","CommitterEmail":"linmingzhang@g-hi.com","CommitterName":"linmingzhang","Timestamp":"2026-07-30T11:19:43+08:00"},"CompareURL":"linmingzhang/ktv-booking-prototype/compare/09820e44a6711740e074fca2d3c9197fe3762a9d...54fbe887771fc67dcc93c4691e84e33ab54875ef","Len":1}...
|
1785381584
|
Edit
Delete
|
|
19833
|
17
|
5
|
17
|
69
|
0
|
0
|
refs/heads/main
|
1
|
{"Commits":[{"Sha1":"09820e44a {"Commits":[{"Sha1":"09820e44a6711740e074fca2d3c9197fe3762a9d","Message":"上传 HTML 原型(第 3 批)\n","AuthorEmail":"linmingzhang@g-hi.com","AuthorName":"linmingzhang","CommitterEmail":"linmingzhang@g-hi.com","CommitterName":"linmingzhang","Timestamp":"2026-07-30T11:12:14+08:00"}],"HeadCommit":{"Sha1":"09820e44a6711740e074fca2d3c9197fe3762a9d","Message":"上传 HTML 原型(第 3 批)\n","AuthorEmail":"linmingzhang@g-hi.com","AuthorName":"linmingzhang","CommitterEmail":"linmingzhang@g-hi.com","CommitterName":"linmingzhang","Timestamp":"2026-07-30T11:12:14+08:00"},"CompareURL":"linmingzhang/ktv-booking-prototype/compare/e9c03212c50a2db8f6985ace88276542e977e243...09820e44a6711740e074fca2d3c9197fe3762a9d","Len":1}...
|
1785381136
|
Edit
Delete
|
|
19831
|
17
|
5
|
17
|
69
|
0
|
0
|
refs/heads/main
|
1
|
{"Commits":[{"Sha1":"e9c03212c {"Commits":[{"Sha1":"e9c03212c50a2db8f6985ace88276542e977e243","Message":"上传 HTML 原型(第 2 批)\n","AuthorEmail":"linmingzhang@g-hi.com","AuthorName":"linmingzhang","CommitterEmail":"linmingzhang@g-hi.com","CommitterName":"linmingzhang","Timestamp":"2026-07-30T11:07:57+08:00"}],"HeadCommit":{"Sha1":"e9c03212c50a2db8f6985ace88276542e977e243","Message":"上传 HTML 原型(第 2 批)\n","AuthorEmail":"linmingzhang@g-hi.com","AuthorName":"linmingzhang","CommitterEmail":"linmingzhang@g-hi.com","CommitterName":"linmingzhang","Timestamp":"2026-07-30T11:07:57+08:00"},"CompareURL":"linmingzhang/ktv-booking-prototype/compare/3ab0e02a22d94463e7ead19d58cbed4b8b42a8ab...e9c03212c50a2db8f6985ace88276542e977e243","Len":1}...
|
1785380878
|
Edit
Delete
|
|
19830
|
17
|
5
|
17
|
69
|
0
|
0
|
refs/heads/main
|
1
|
{"Commits":[{"Sha1":"3ab0e02a2 {"Commits":[{"Sha1":"3ab0e02a22d94463e7ead19d58cbed4b8b42a8ab","Message":"上传 HTML 原型(第 1 批)\n","AuthorEmail":"linmingzhang@g-hi.com","AuthorName":"linmingzhang","CommitterEmail":"linmingzhang@g-hi.com","CommitterName":"linmingzhang","Timestamp":"2026-07-30T11:04:59+08:00"}],"HeadCommit":{"Sha1":"3ab0e02a22d94463e7ead19d58cbed4b8b42a8ab","Message":"上传 HTML 原型(第 1 批)\n","AuthorEmail":"linmingzhang@g-hi.com","AuthorName":"linmingzhang","CommitterEmail":"linmingzhang@g-hi.com","CommitterName":"linmingzhang","Timestamp":"2026-07-30T11:04:59+08:00"},"CompareURL":"linmingzhang/ktv-booking-prototype/compare/9791a9c2985a7fff3ad9fc2f352dde3738a4b823...3ab0e02a22d94463e7ead19d58cbed4b8b42a8ab","Len":1}...
|
1785380701
|
Edit
Delete
|
|
19829
|
17
|
1
|
17
|
69
|
0
|
0
|
|
1
|
|
1785380320
|
Edit
Delete
|
|
46104
|
16
|
5
|
16
|
86
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"3a7664a40 {"Commits":[{"Sha1":"3a7664a40c551d425a44a82af63db027b4605a05","Message":"fix(devices): 支持 4000 万像素效果图并修复 8K 绘制崩溃\n\n- 同步提高桌面端和设备端像素上限,保留 20 MB 文件限制\n- 等比适配按屏幕采样解码,原尺寸仅解码中心可见区域,限制绘制位图大小\n- 首帧绘制成功后确认展示,绘制失败或进程退出时返回明确错误\n- 将设备组件升级为 0.3.6(versionCode 9),同步最低版本和验收文档\n\n验证:\n- npm run typecheck 通过\n- 4 个相关测试文件、36 项测试通过\n- Java 解码尺寸回归测试通过\n- 签名 APK 构建、版本及摘要检查通过,证书与原安装包一致\n- 用户确认 8K 图片展示修复实机测试通过\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"gamebyte","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"gamebyte","Timestamp":"2026-11-04T14:17:17+08:00"}],"HeadCommit":{"Sha1":"3a7664a40c551d425a44a82af63db027b4605a05","Message":"fix(devices): 支持 4000 万像素效果图并修复 8K 绘制崩溃\n\n- 同步提高桌面端和设备端像素上限,保留 20 MB 文件限制\n- 等比适配按屏幕采样解码,原尺寸仅解码中心可见区域,限制绘制位图大小\n- 首帧绘制成功后确认展示,绘制失败或进程退出时返回明确错误\n- 将设备组件升级为 0.3.6(versionCode 9),同步最低版本和验收文档\n\n验证:\n- npm run typecheck 通过\n- 4 个相关测试文件、36 项测试通过\n- Java 解码尺寸回归测试通过\n- 签名 APK 构建、版本及摘要检查通过,证书与原安装包一致\n- 用户确认 8K 图片展示修复实机测试通过\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"gamebyte","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"gamebyte","Timestamp":"2026-11-04T14:17:17+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/0ea0040f582142d0070d608f38851351261e81cd...3a7664a40c551d425a44a82af63db027b4605a05","Len":1}...
|
1793773259
|
Edit
Delete
|
|
44630
|
16
|
5
|
16
|
86
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"0ea0040f5 {"Commits":[{"Sha1":"0ea0040f582142d0070d608f38851351261e81cd","Message":"build(app): 更新桌面版本并记录效果图验收结果\n\n- 将桌面应用及依赖锁文件的版本统一更新为 0.3.0\n- 记录设备组件 0.3.4 的构建摘要、签名核对及用户实机验收结果\n- 补充停止展示、不自动关闭和跨电脑补齐 APK 资源的操作说明\n\n验证:\n- npm run build 通过(使用临时 Go 缓存目录)\n- 8 个相关测试文件、49 项测试通过\n- APK、摘要清单和其他构建产物保持 Git 忽略\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"gamebyte","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"gamebyte","Timestamp":"2026-10-30T17:41:27+08:00"},{"Sha1":"27cf1bb826f8288525ca12abb6d135846f55f51a","Message":"feat(renderer): 增加效果图工作台与展示参数控制\n\n- 增加效果图入口、功能开关、图片选择预览及设备展示状态\n- 支持触摸屏与 TV、缩放、旋转、定时及不自动关闭选项\n- 在顶栏统一停止展示,并提示参数需更新展示后生效\n- 补齐浅色、深色和自动主题变量及窄屏布局\n\n验证:\n- npm run typecheck 与 npm run build 通过\n- 效果图页面、工作台配置和功能偏好相关测试通过\n- 用户确认实机验证无问题\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"gamebyte","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"gamebyte","Timestamp":"2026-10-30T17:41:09+08:00"},{"Sha1":"34121f51f3b45a7847d0daddaeeda4ecf1cae40d","Message":"feat(electron): 接入效果图上传展示与会话回收\n\n- 通过受控文件选择器读取 PNG/JPG,校验图片尺寸并上传到设备私有目录\n- 增加明确类型的展示协议与 IPC,复用账号、团队授权及设备锁校验\n- 按设备串行处理展示和停止,使用会话回执确认状态,断线保持未知\n- 关闭操作台、删除设备或退出应用时回收所属展示会话\n\n验证:\n- npm run typecheck 与 npm run build 通过\n- 展示协议、会话生命周期及关闭协调器相关测试通过\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"gamebyte","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"gamebyte","Timestamp":"2026-10-30T17:40:59+08:00"},{"Sha1":"729c752dee61846dd7651f1c569e8b34c5671c9b","Message":"feat(devices): 增加设备效果图覆盖层与组件按需升级\n\n- 在现有驻留组件的独立进程中展示图片,支持触摸屏与外接屏、旋转和尺寸模式\n- 支持定时退出及不自动关闭,移除设备画面关闭按钮,由运维工具统一停止\n- 发布设备组件 0.3.4(versionCode 7),按最低版本同签名升级并保留连接配置\n- 构建脚本自动编译驻留组件中的 Java 源文件\n\n验证:\n- npm run build:resident 与 npm run check:resident 通过\n- APK 版本及原签名证书核对通过,用户确认实机验证无问题\n- 设备安装器相关测试通过\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"gamebyte","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"gamebyte","Timestamp":"2026-10-30T17:40:41+08:00"},{"Sha1":"e67eb50dd14a458afc4f4da6a5ec4412dae737a8","Message":"feat(devices): 优化设备详情后台连接服务面板布局与样式\n\n- 状态改为彩色胶囊和状态点,在线、读取中、待处理、失败各有独立色调\n- 开关改用设置页滑动开关并做成磁贴,下方说明随设备配置变化\n- 当前线路改为标签展示,忙碌、错误和待重试合并为提示条并内置重试按钮\n- 同步说明收为一行脚注,完整说明移入悬停提示\n- 面板样式独立为 resident-access 类名并集中到 device-detail.css\n- 新增 --motion-status-pulse 动效变量,减弱动效偏好下关闭动画\n\n验证:\n- npm run typecheck\n- 设备详情界面已人工确认\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"gamebyte","Timestamp":"2026-10-24T21:29:27+08:00"}],"HeadCommit":{"Sha1":"0ea0040f582142d0070d608f38851351261e81cd","Message":"build(app): 更新桌面版本并记录效果图验收结果\n\n- 将桌面应用及依赖锁文件的版本统一更新为 0.3.0\n- 记录设备组件 0.3.4 的构建摘要、签名核对及用户实机验收结果\n- 补充停止展示、不自动关闭和跨电脑补齐 APK 资源的操作说明\n\n验证:\n- npm run build 通过(使用临时 Go 缓存目录)\n- 8 个相关测试文件、49 项测试通过\n- APK、摘要清单和其他构建产物保持 Git 忽略\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"gamebyte","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"gamebyte","Timestamp":"2026-10-30T17:41:27+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/c6d0dac6a9e8074cbac252aef62e41af416ccb76...0ea0040f582142d0070d608f38851351261e81cd","Len":5}...
|
1793353462
|
Edit
Delete
|
|
43498
|
16
|
5
|
16
|
150
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"8d9a8e38b {"Commits":[{"Sha1":"8d9a8e38b88898cacacf80024bcb9f3f903a2387","Message":"docs: 提交 T-004 报告并记录 T-002 暂缓\n\n背景:容器环境和离线制品通道已完成,官方 MinIO 镜像作为已知例外由验证期同版本源码构建补齐;用户明确域名稍后处理。\n\n实现内容:收录 R-004、R-004-2 和 R-002-1,记录环境、镜像校验、病毒库、磁盘与 MinIO 独立验收结果,给出 T-003 的镜像和健康检查交接;任务一览将 T-004 标为已完成、T-002 第一段标为暂缓。\n\n验证:报告模板、仓内相对链接、实际制品摘要、源码提交绑定及敏感信息检查通过;git diff --check 通过。原 Compose 和中台执行验收目录未修改;完整治理检查受缺失依赖限制,报告保留该事实。\n\nFork-Change: FK-001\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"gamebyte","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"gamebyte","Timestamp":"2026-10-28T18:23:06+08:00"},{"Sha1":"d198b2ba115b4419ba38e3d2b9e0908fd8bb7040","Message":"build: 新增 MinIO 验证期源码镜像\n\n背景:DEP-04 中原固定 MinIO 预构建镜像已不可获取,用户确定验证期从同版本官方固定提交构建。\n\n实现内容:新增独立构建目录,交叉编译 linux/amd64 镜像,保留源码及许可证标签;加入静态 readiness 探针和无端口发布的隔离 S3 验收脚本;登记 FK-003。原 Compose 和中台执行验收镜像目录保持原样。\n\n验证:构建及探针正反例测试通过;服务器两端 SHA-256 一致,固定摘要离线导入成功;独立健康检查、建桶、对象写入读回及清理通过。只读证据检查因缺少治理依赖未通过,未作为完整治理验收。\n\nFork-Change: FK-003\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"gamebyte","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"gamebyte","Timestamp":"2026-10-28T18:19:17+08:00"},{"Sha1":"da296f37fa51886e233b2e3b640e2584b3ea132f","Message":"docs: 登记 MinIO 固定镜像失效问题并补充自建任务\n\nCodex 执行 T-004 时发现 MinIO 固定镜像从 Quay 和 Docker Hub 都无法获取。公开资料显示官方已停止发布社区版镜像、代码仓库已归档;用户决定验证期用官方源码自建同一版本。本次登记问题并调整相关任务单。\n\n实现内容:\n- 中台问题清单:新增 DEP-04(现象、公开资料中的原因、中台 10-10 已有记录、影响范围、A~E 方向及用户决定),DEP 来源说明区分 DEP-01~03 与 DEP-04\n- T-004:已定事项与\"不要做\"注明 MinIO 例外;新增\"补充\"一节,要求用官方提交 a6c538c5(RELEASE.2025-06-13T11-33-47Z)按 linux/amd64 自建,解决精简镜像缺少 mc 导致的健康检查问题,沿用 R-004 离线通道,单独启动验证读写,保留 AGPL 来源标签,报告写 R-004-2\n- T-003:前置补 R-004-2;部署时换用自建 MinIO 指纹并调整健康检查,建议 fork 专用部署调整集中到一份覆盖文件;文件扫描步骤说明临时签名链接的访问地址留到切片 2\n- README:§10 已定事项新增 MinIO 验证期方案;§6 公共文件行补 DEP-04\n- 改动留痕:FK-001 行补本次内容\n\n验证:\n- 本次 5 个文件内 54 个相对链接逐一核对目标存在:通过\n- DEP-04 引用的 6 处行号(compose.yaml:36、:42、:306,test-minio/README.md:3,attachment-infrastructure.ts:235、:281)在基线 e61280ffa 上核对:通过\n- git diff --check:通过\n- 只提交本次 5 个文件;Codex 未提交的报告、任务一览修改和 stack/minio-validation/ 未纳入\n- pnpm check 等仓库门禁:未运行(本目录不在 governance/evidence-scopes.json 的证据范围内)\n\nFork-Change: FK-001\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"gamebyte","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"gamebyte","Timestamp":"2026-10-28T18:08:25+08:00"},{"Sha1":"e6e79e266227d21d31439d44e0d049071ffe6c80","Message":"docs: 仓根协作规则补充报告存放位置\n\nCodex 的 R-001 报告写到了工作区根仓,任务一览里用了跨仓相对路径,在 Gitea 上会失效。用户确定报告统一放本仓约定目录,并同意在给 Codex 的规则摘要里写明,防止再次写错位置。\n\n实现内容:\n- AGENTS.md「任务单与报告」:新增一条,报告只写在 docs/售后应用驱动完善/协作/报告/,不写到工作区根仓或其他仓库;任务一览的报告链接用本仓内相对路径\n- 改动留痕.md:FK-002 行补充本次修改说明\n- 与《分工与协作》§3 的同一说明保持一致(该文件已在 FK-001 提交中更新)\n\n验证:\n- AGENTS.md 内相对链接逐一核对目标存在:通过\n- git diff --cached --check:通过\n- pnpm check 等仓库门禁:未运行(仓根 AGENTS.md 不在 governance/evidence-scopes.json 的作用域内)\n\nFork-Change: FK-002\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"gamebyte","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"gamebyte","Timestamp":"2026-10-28T17:30:34+08:00"},{"Sha1":"047ff22b07ea150768c88a0491982a130e7ebe2c","Message":"docs: 收录服务器核查报告并起草域名、容器环境与部署任务单\n\nCodex 完成 T-001 服务器只读核查,但报告写在了工作区根仓,任务一览里的链接是跨仓相对路径。本次把报告移入约定目录,据报告补齐方案资料,并起草下一批可直接交给 Codex 执行的任务单。\n\n实现内容:\n- 协作/报告/R-001-服务器就绪核查.md:从工作区根仓原样移入,内容未改(前后 sha256 一致)\n- 协作/README.md:T-001 标为已完成,报告链接改为仓内相对路径;新增 T-002~T-004 及前置列和执行顺序(T-002 第一段与 T-004 并行,之后 T-002 第二段,最后 T-003);写明报告只放本目录\n- 任务单 T-002 域名与 HTTPS:第一段为解析与安全组清单、临时监听测入站、确认无依赖后关闭 111 端口公网访问;第二段为网关支持两个主机名、先测试环境后正式签发证书、检查跳转、HSTS 与续期\n- 任务单 T-003 部署 fork 版中台并核查 18 个模块健康:本机按 linux/amd64 构建 Runtime、身份 Web 与工作台;预发布方式部署、建库迁移、--pull never 启动;18 模块逐行列出装载与服务能力、重启恢复、对外只开 80/443、EICAR 扫描验证;不建正式租户、不走正式晋级\n- 任务单 T-004 容器环境与离线制品通道:Docker 安装前检查 XFS ftype 与网段冲突;第三方镜像逐个核对 amd64 与固定指纹,校验上传前后 sha256,验证离线导入后不触发下载;ClamAV 初始库与持续更新方案;短时磁盘测速;说明单列成任务的理由\n- 中台问题清单:新增 DEP 类,登记 DEP-01 Runtime 无重启策略、DEP-02 身份登录页无部署方式、DEP-03 预发布网关只支持一个对外主机名,均为静态核对,状态待验证;原 BUG 节顺延为第 5 节\n- README:§10 记录 2026-10-28 新定事项(本机下载再上传、控制台由用户操作、关闭 111 端口公网访问、报告位置),待定项改为主域名执行 T-002 时提供;§11 补 R-001 实测值与判定、整体判断、80 端口用途及 DEP-02/03 提示,新增 11.4 部署路线\n- 分工与协作 §3:写明报告只放本仓约定目录、链接用仓内相对路径\n- 改动留痕:FK-001 行补本次内容\n\n验证:\n- 资料内 78 个相对链接逐一核对目标存在:通过\n- DEP-01~03 与任务单引用的 6 处配置行号在基线 e61280ffa 上逐行核对:通过(基线后只改文档)\n- R-001 移入前后 sha256 比对:一致\n- git diff --cached --check:通过;IP、邮箱、域名形态扫描:只命中占位符和 Docker 默认网段\n- pnpm check 等仓库门禁:未运行(本目录不在 governance/evidence-scopes.json 的证据范围内)\n\nFork-Change: FK-001\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"gamebyte","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"gamebyte","Timestamp":"2026-10-28T17:30:14+08:00"}],"HeadCommit":{"Sha1":"8d9a8e38b88898cacacf80024bcb9f3f903a2387","Message":"docs: 提交 T-004 报告并记录 T-002 暂缓\n\n背景:容器环境和离线制品通道已完成,官方 MinIO 镜像作为已知例外由验证期同版本源码构建补齐;用户明确域名稍后处理。\n\n实现内容:收录 R-004、R-004-2 和 R-002-1,记录环境、镜像校验、病毒库、磁盘与 MinIO 独立验收结果,给出 T-003 的镜像和健康检查交接;任务一览将 T-004 标为已完成、T-002 第一段标为暂缓。\n\n验证:报告模板、仓内相对链接、实际制品摘要、源码提交绑定及敏感信息检查通过;git diff --check 通过。原 Compose 和中台执行验收目录未修改;完整治理检查受缺失依赖限制,报告保留该事实。\n\nFork-Change: FK-001\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"gamebyte","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"gamebyte","Timestamp":"2026-10-28T18:23:06+08:00"},"CompareURL":"pengzhiyu/enterprise-platform/compare/59ef51da943e48a9475c76da21679815e29350f3...8d9a8e38b88898cacacf80024bcb9f3f903a2387","Len":5}...
|
1793183330
|
Edit
Delete
|
|
43387
|
16
|
5
|
16
|
150
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"59ef51da9 {"Commits":[{"Sha1":"59ef51da943e48a9475c76da21679815e29350f3","Message":"docs: 新增仓根协作规则供 Codex 读取\n\nCodex 的全局规则为空、本仓根目录也没有给 Codex 的规则文件,Codex 读不到分工和脱敏约定。在仓根放一份规则摘要,Codex 进入本仓时会自动读取。\n\n实现内容:\n- 新增仓根 AGENTS.md:分工(Codex 负责后端、服务器、域名、运维与服务器上的后端测试,不改前端代码;Claude 负责方案架构与前端;方案均为建议,分歧由用户决定)、任务单与报告的位置和模板、脱敏规则、FK 编号与 Fork-Change 尾注、upstream 只读与推送由用户安排;代码、门禁和治理规则仍以 CLAUDE.md、runtime/AGENTS.md、identity/AGENTS.md 为准\n- 分工与协作.md:说明仓根 AGENTS.md 是规则摘要、以本文为准且修改时同步;目录归属表新增仓根 AGENTS.md\n- 改动留痕.md:登记 FK-002,合并建议为默认不合入\n\n验证:\n- 三个文件内 13 个相对链接逐一核对目标存在:通过\n- 仓根 AGENTS.md 不在 governance/evidence-scopes.json 的作用域内(只登记了 runtime/AGENTS.md):已核对\n- git diff --cached --check:通过;凭据与 IP 形态扫描:未发现\n- pnpm check 等仓库门禁:未运行\n\nFork-Change: FK-002\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"gamebyte","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"gamebyte","Timestamp":"2026-10-28T16:43:42+08:00"},{"Sha1":"d235c4d318658447a174d661d8e08b76f84971bf","Message":"docs: 补充点歌售后平台分工协作约定与服务器核查任务单\n\n已确定由 Claude 负责整体方案与前端、Codex 负责后端与服务器相关工作,需要书面约定双方的分工、交接方式和脱敏要求,并给出第一张交给 Codex 的任务单。\n\n实现内容:\n- 新增 分工与协作.md:三方分工(前端的设计、实现和前端测试全部归 Claude;后端、服务器、域名、运维与服务器上的后端测试归 Codex)、前端上服务器的交接建议、两个仓库的目录归属、任务单与报告的流转方式和模板、脱敏规则与占位符、可索取的测试结果类型\n- 新增 协作/README.md 任务一览,以及 协作/任务单/T-001-服务器就绪核查.md:只读核查硬件、系统、Docker、端口、网络、地区与备案、时间同步,附建议值和地区信息的三个用途\n- README.md:写入分工;仓库骨架由双方分别搭建;服务器与域名一节改为由 Codex 执行和核查,补充地区信息影响备案、网络和数据合规;文件索引新增两项\n- 改动留痕.md:FK-001 行补充本次新增内容\n\n验证:\n- 资料内 31 个相对链接逐一核对目标存在:通过\n- git diff --cached --check:通过;凭据与 IP 形态扫描:未发现\n- pnpm check 等仓库门禁:未运行(新目录不在 governance/evidence-scopes.json 的证据范围内)\n\nFork-Change: FK-001\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"gamebyte","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"gamebyte","Timestamp":"2026-10-28T16:42:37+08:00"}],"HeadCommit":{"Sha1":"59ef51da943e48a9475c76da21679815e29350f3","Message":"docs: 新增仓根协作规则供 Codex 读取\n\nCodex 的全局规则为空、本仓根目录也没有给 Codex 的规则文件,Codex 读不到分工和脱敏约定。在仓根放一份规则摘要,Codex 进入本仓时会自动读取。\n\n实现内容:\n- 新增仓根 AGENTS.md:分工(Codex 负责后端、服务器、域名、运维与服务器上的后端测试,不改前端代码;Claude 负责方案架构与前端;方案均为建议,分歧由用户决定)、任务单与报告的位置和模板、脱敏规则、FK 编号与 Fork-Change 尾注、upstream 只读与推送由用户安排;代码、门禁和治理规则仍以 CLAUDE.md、runtime/AGENTS.md、identity/AGENTS.md 为准\n- 分工与协作.md:说明仓根 AGENTS.md 是规则摘要、以本文为准且修改时同步;目录归属表新增仓根 AGENTS.md\n- 改动留痕.md:登记 FK-002,合并建议为默认不合入\n\n验证:\n- 三个文件内 13 个相对链接逐一核对目标存在:通过\n- 仓根 AGENTS.md 不在 governance/evidence-scopes.json 的作用域内(只登记了 runtime/AGENTS.md):已核对\n- git diff --cached --check:通过;凭据与 IP 形态扫描:未发现\n- pnpm check 等仓库门禁:未运行\n\nFork-Change: FK-002\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"gamebyte","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"gamebyte","Timestamp":"2026-10-28T16:43:42+08:00"},"CompareURL":"pengzhiyu/enterprise-platform/compare/3976cd9703baa2e598361f99c3fbf6affe0642f7...59ef51da943e48a9475c76da21679815e29350f3","Len":2}...
|
1793177099
|
Edit
Delete
|
|
43367
|
16
|
5
|
16
|
150
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"3976cd970 {"Commits":[{"Sha1":"3976cd9703baa2e598361f99c3fbf6affe0642f7","Message":"docs: 新增点歌售后平台驱动中台完善资料\n\n技术中台 18 个服务缺少真实使用方,部分服务按设计依赖 02/03 层或人事系统,单独接入时会卡住。新增 fork 仓专用资料,记录用点歌售后平台驱动中台完善的方案、已发现的独立使用问题和 fork 改动的留痕规则。\n\n实现内容:\n- README.md:点歌售后平台的做法口径、术语解释、角色与功能范围、18 个服务对照、切片 0–5 顺序、技术选型建议、2026-10-28 已定决定与待定事项、服务器与域名需求\n- 中台问题清单.md:IND-01~14 独立使用问题(证据指向基线 e61280ffa 的文件与行号);IND-02~04、IND-14 附 IAM 五种范围对照及已定方向;IND-08 关闭;BUG 登记表\n- 改动留痕.md:基线 e61280ffa 与标签 fork-baseline-2026-10-28、只读 upstream 远端、FK 编号与 Fork-Change 尾注规则、两仓差异对比命令、合并回主仓步骤及 FK-000/FK-001 台账\n- 组织与权限关系图.html:IAM、企业智能OS 原设计、点歌售后平台验证期三种组织与权限分工的对比图\n- 只新增 docs/售后应用驱动完善/ 下 4 个文件,不改代码、契约、配置或报告;默认不合入主仓\n\n验证:\n- 资料内 17 个相对链接逐一核对目标存在:通过\n- 问题清单引用的 17 个源码与说明文件在当前 HEAD 存在:通过\n- 关系图 HTML 标签闭合检查:通过\n- git diff --cached --check:通过;凭据形态扫描:未发现\n- pnpm check 等仓库门禁:未运行(新目录不在 governance/evidence-scopes.json 的证据范围内)\n\nFork-Change: FK-001\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"gamebyte","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"gamebyte","Timestamp":"2026-10-28T16:14:41+08:00"}],"HeadCommit":{"Sha1":"3976cd9703baa2e598361f99c3fbf6affe0642f7","Message":"docs: 新增点歌售后平台驱动中台完善资料\n\n技术中台 18 个服务缺少真实使用方,部分服务按设计依赖 02/03 层或人事系统,单独接入时会卡住。新增 fork 仓专用资料,记录用点歌售后平台驱动中台完善的方案、已发现的独立使用问题和 fork 改动的留痕规则。\n\n实现内容:\n- README.md:点歌售后平台的做法口径、术语解释、角色与功能范围、18 个服务对照、切片 0–5 顺序、技术选型建议、2026-10-28 已定决定与待定事项、服务器与域名需求\n- 中台问题清单.md:IND-01~14 独立使用问题(证据指向基线 e61280ffa 的文件与行号);IND-02~04、IND-14 附 IAM 五种范围对照及已定方向;IND-08 关闭;BUG 登记表\n- 改动留痕.md:基线 e61280ffa 与标签 fork-baseline-2026-10-28、只读 upstream 远端、FK 编号与 Fork-Change 尾注规则、两仓差异对比命令、合并回主仓步骤及 FK-000/FK-001 台账\n- 组织与权限关系图.html:IAM、企业智能OS 原设计、点歌售后平台验证期三种组织与权限分工的对比图\n- 只新增 docs/售后应用驱动完善/ 下 4 个文件,不改代码、契约、配置或报告;默认不合入主仓\n\n验证:\n- 资料内 17 个相对链接逐一核对目标存在:通过\n- 问题清单引用的 17 个源码与说明文件在当前 HEAD 存在:通过\n- 关系图 HTML 标签闭合检查:通过\n- git diff --cached --check:通过;凭据形态扫描:未发现\n- pnpm check 等仓库门禁:未运行(新目录不在 governance/evidence-scopes.json 的证据范围内)\n\nFork-Change: FK-001\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"gamebyte","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"gamebyte","Timestamp":"2026-10-28T16:14:41+08:00"},"CompareURL":"pengzhiyu/enterprise-platform/compare/e61280ffabf6678a6454de6472ddd6057ded3601...3976cd9703baa2e598361f99c3fbf6affe0642f7","Len":1}...
|
1793175545
|
Edit
Delete
|
|
43055
|
16
|
5
|
16
|
150
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"e61280ffa {"Commits":[{"Sha1":"e61280ffabf6678a6454de6472ddd6057ded3601","Message":"chore(reports): CHG-065/066 落地工作台快照回绑 @ a0e38ec2f(S2,嵌入最新证据新鲜度)\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-10-27T19:24:43-07:00"},{"Sha1":"a0e38ec2fba59eb277a11f2baecdcff39a15a826","Message":"chore(reports): CHG-065/066 落地证据新鲜度回绑 @ 9f9ace704(partial 54 fresh / 15 warn / 0 error)\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-10-27T19:24:42-07:00"},{"Sha1":"9f9ace704747a42f2ecd8785673597d06c818163","Message":"chore(reports): CHG-065/066 落地 port-conformance 回绑 @ 85d16d998(95/0)\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-10-27T19:24:35-07:00"},{"Sha1":"85d16d998d3f795789cd7459ac421b783f1a87ab","Message":"chore(reports): CHG-065/066 落地工作台快照回绑 @ abc9d5831(S2,嵌入最新证据新鲜度)\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-10-27T19:24:04-07:00"},{"Sha1":"abc9d5831c50bd269f3099dc60d1510fbd1bbb29","Message":"chore(reports): CHG-065/066 落地证据新鲜度回绑 @ 74470dab7(partial 53 fresh / 16 warn / 0 error)\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-10-27T19:24:03-07:00"}],"HeadCommit":{"Sha1":"e61280ffabf6678a6454de6472ddd6057ded3601","Message":"chore(reports): CHG-065/066 落地工作台快照回绑 @ a0e38ec2f(S2,嵌入最新证据新鲜度)\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-10-27T19:24:43-07:00"},"CompareURL":"pengzhiyu/enterprise-platform/compare/8bc7e3f076de0eac5fbb5cd378aa290a1fb37dc0...e61280ffabf6678a6454de6472ddd6057ded3601","Len":26}...
|
1793164566
|
Edit
Delete
|
|
42803
|
16
|
5
|
16
|
150
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"8bc7e3f07 {"Commits":[{"Sha1":"8bc7e3f076de0eac5fbb5cd378aa290a1fb37dc0","Message":"chore(reports): 工作台快照回绑 @ 7ddb92f1a(S2,嵌入最新证据新鲜度)\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-10-27T17:58:15-07:00"},{"Sha1":"7ddb92f1a2db42e0f449a85b269b774e850a2fbc","Message":"chore(reports): 证据新鲜度回绑 @ 35a2851ad(partial 52 fresh / 17 warn / 0 error)\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-10-27T17:58:14-07:00"},{"Sha1":"35a2851ade2794f861209db758ae66fe95a9479e","Message":"chore(reports): 工作台快照回绑 @ 65c633b96(S1)\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-10-27T17:58:00-07:00"},{"Sha1":"65c633b9689b7fe88da93db65ba30d0f3a700b15","Message":"chore(reports): 根链静态报告、runtime 静态子报告与 port-conformance 回绑 @ 8fc9dcf31(port-conformance @ 3c7f3bc7a)\n\n根 pnpm check 在 clean 8fc9dcf31 上第 1–31 环通过(治理测试 1364/0),第 32 环 check:evidence 仅报两份工作台快照过期(待 S1)。check:port-conformance 在 clean 3c7f3bc7a 通过 95/0,其后 8fc9dcf31 只改 EES journal 合同,不在其作用域。release-drift 列车 21→22 包;canonical-ids idPatterns 234→235。check:runtime 未跑:runtime 作用域内只改了 runtime/clients/README.md 文档,无运行时代码或镜像输入变更。\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-10-27T17:57:46-07:00"},{"Sha1":"8fc9dcf31e83dcb559d7f8c98524e78a5d92b4b6","Message":"fix(ees): journal 合同租户号改用 canonical ULID 形态(与两份提交契约一致,check:canonical-ids)\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-10-27T17:54:21-07:00"}],"HeadCommit":{"Sha1":"8bc7e3f076de0eac5fbb5cd378aa290a1fb37dc0","Message":"chore(reports): 工作台快照回绑 @ 7ddb92f1a(S2,嵌入最新证据新鲜度)\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-10-27T17:58:15-07:00"},"CompareURL":"pengzhiyu/enterprise-platform/compare/a46c2d82c7fe086c264ae27ef532ae03cb6300aa...8bc7e3f076de0eac5fbb5cd378aa290a1fb37dc0","Len":101}...
|
1793155011
|
Edit
Delete
|
|
42152
|
16
|
1
|
16
|
150
|
0
|
0
|
|
0
|
|
1793070538
|
Edit
Delete
|
|
40023
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"154f25a42 {"Commits":[{"Sha1":"154f25a42bccc6762747d810cb99510a7fce2c9b","Message":"docs: 记录 P12 冻结及冻结候选 2986e41 的未解决项\n\n开诊断云测单轮已回答真实到达下拒绝瞬间的持有者阶段、名额首次空出与重试到达三个诊断问题,用户按路线图决定 P12 冻结;两份任务文档需要记录冻结候选身份、主区状态、已证实结论与未解决项,供解冻时接续。本次把两份文档状态改为 FROZEN,追加软件优化文档第七十二步与归因设计文档第70节。\n\n实现内容:\n- 顶部状态改为 FROZEN:冻结候选 main HEAD 2986e41(JAR d94a9d62…7890、SDK 源码 ab34bba9…、工具 2c9c7738…90ed),P12 相关产品改动 32b6833/f8a1e54/5435f06 与容量工具 b892d79/dd8a73c 均已在主区并随 2986e41 推送;列出冻结时已证实结论与未解决项;解冻、再跑一轮与设计改动均须另行授权\n- 第七十二步记录候选身份与保留的材料包/结果包/私有记录、主区与推送状态、六项已证实结论、未解决项 U1–U10(正式样本 0、20,000 门槛未检查、AUTH_BUSY 未解决、起始 10 秒集中未归因、重试到达开销未拆分、守护器临时容器竞争未修、E2d 可回收数无新值、设计改动未评估、产品全量测试未重跑、请求诊断偶发丢 1 条、L1/L2/P13 与稳定性未验收)、解冻后建议顺序与边界\n- 第70节按第 3 节待验证项逐项汇总归因结论,记录一次短重试、有界等待准入、降低持有时长/客户端认证不占协议池连接、扩大名额或池、退出通知空轮询避锁、守护器缺陷六项设计问题的冻结状态与解冻评估顺序\n- 说明 docs/02-IAM开发计划.md 第 16 节的 P12 记录仍停在 2026-10-10,本次未改\n\n验证:\n- 纯文档改动,数字与提交号来自第七十步、第七十一步、结果包 README 及 git log;未运行代码检查\n- git diff --check 通过;新增相对链接指向的 release README 与任务文档均存在\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-20T19:27:31-07:00"},{"Sha1":"96769399cda4f51393de8e045b6d1f1edd64d2dd","Message":"docs: 记录 P12 开诊断云测单轮结果并收录脱敏结果交接\n\n开诊断云测唯一一轮 hmac-pg4-ledger1(候选 main HEAD 2986e41)已执行并提前停止:守护器读取失败使恢复预热在第 90/270 秒停止、正式样本 0,但取得真实到达下 81 次入口拒绝的完整台账证据。两份任务文档没有本轮结果、本地复验与归因的记录,脱敏的结果交接也未收入仓库。本次更新两份任务文档的顶部状态,追加软件优化文档第七十一步与归因设计文档第69节,并收录结果交接文档。\n\n实现内容:\n- 顶部状态改为开诊断云测唯一一轮已执行并提前停止:初始预热 9,450/9,450、恢复预热 90/270 秒 host_guard_failed、正式样本 0;81 次首次 503 全部关联台账,持有者阶段 CLIENT_AUTH 38.4%/LIFECYCLE_WAIT 13.4%/TRANSACTION_BEGIN 13.1%,首次空出中位 15.74ms、重试到达中位 +55.6ms、恢复 63/81(77.8%);建议进入 P12 冻结\n- 第七十一步记录执行时间线、46 份公开证据本地复验与报告重算、104 次 503 指标/台账/HTTP 三方对账与采集完整性、三个诊断问题在真实到达下的数据、与第六十九步及 E2d 的对照、守护器停测归因(services() 全量 docker ps 与一次性 docker inspect 之间基线外临时容器消失)、边界与下一步\n- 第69节只讨论本轮对第三节假设与第65–68节设计问题的含义:人为屏障下的 4+4 形态未重现、E2d 可回收 21–24/30 推算的前提不成立、设计改动预期收益应下修、再云测前守护器须改为逐容器读取\n- docs/handoff/P12-ledger-cloud-test-result-01.md:脱敏的结果与前端交接,含阶段结果、拒绝/恢复/会话存量、台账结论、验证与收尾状态、后续记录口径;本轮无接口变化,不产生前端任务\n\n验证:\n- 内容来自结果包 release/p12-cloud-ledger-20261020-2986e41 的 46 份公开证据(verify-transfer.py download 复验通过)与本地重算(recovery-report.json 逐字段一致、两份逐阶段台账报告除 generated_at 外逐字段一致、逐拒绝表逐字节一致);纯文档改动,未运行代码检查\n- git diff --check 通过\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-20T19:21:39-07:00"},{"Sha1":"f75a2485b0347e217d0ccaaa546436f109f797a3","Message":"docs: 记录 P12 开诊断云测材料准备并新增 Codex 云测交接\n\nP12 暂停后恢复推进,用户指定 main HEAD 2986e41 为云测候选;两份任务文档没有候选回归与开诊断云测材料的记录,Codex 也没有执行与回收本轮云测的交接说明。本次更新两份任务文档的顶部状态与日期,追加软件优化文档第七十步与归因设计文档第68节,并新增交接文档。\n\n实现内容:\n- 顶部状态改为台账与合同已随 main 推送、2026-10-20 以候选 2986e41 备好开诊断云测材料并交 Codex 执行、云端未执行;历史 19970/20000 与正式样本 0 保持\n- 第七十步记录候选定向回归(单测 59、集成 32、容量工具 70)、候选 JAR 构建与逐字节核对、材料包 release/p12-ledger-cloud-plan-20261020-2986e41 的执行覆盖与脚本、本地验证(覆盖后 98、材料包 16、唯一一次 prepare)、三次辅助失误、交付与边界\n- 第68节记录候选与 E2d 的产品差异、执行方式四处差异、新增门禁与工具(台账采集就绪门禁、permit_ledger_report 第 2 版、finish-ledger 混合格式台账重放)、预期与边界\n- docs/handoff/P12-ledger-cloud-test-01.md:以建议口吻交给 Codex 的云测执行与回收说明,含背景、已完成内容、执行顺序、所需测试数据(全部由工具合成)、需带回的结果文件与重点字段、验收标准、禁止事项与未解决问题\n\n验证:\n- 内容来自同日本地回归日志与材料包核对记录(local-regression/java-tests.json、tool-identity-check.json、delivery-check.json 等);纯文档改动,未运行代码检查\n- git diff --check 通过\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-20T08:27:22-07:00"}],"HeadCommit":{"Sha1":"154f25a42bccc6762747d810cb99510a7fce2c9b","Message":"docs: 记录 P12 冻结及冻结候选 2986e41 的未解决项\n\n开诊断云测单轮已回答真实到达下拒绝瞬间的持有者阶段、名额首次空出与重试到达三个诊断问题,用户按路线图决定 P12 冻结;两份任务文档需要记录冻结候选身份、主区状态、已证实结论与未解决项,供解冻时接续。本次把两份文档状态改为 FROZEN,追加软件优化文档第七十二步与归因设计文档第70节。\n\n实现内容:\n- 顶部状态改为 FROZEN:冻结候选 main HEAD 2986e41(JAR d94a9d62…7890、SDK 源码 ab34bba9…、工具 2c9c7738…90ed),P12 相关产品改动 32b6833/f8a1e54/5435f06 与容量工具 b892d79/dd8a73c 均已在主区并随 2986e41 推送;列出冻结时已证实结论与未解决项;解冻、再跑一轮与设计改动均须另行授权\n- 第七十二步记录候选身份与保留的材料包/结果包/私有记录、主区与推送状态、六项已证实结论、未解决项 U1–U10(正式样本 0、20,000 门槛未检查、AUTH_BUSY 未解决、起始 10 秒集中未归因、重试到达开销未拆分、守护器临时容器竞争未修、E2d 可回收数无新值、设计改动未评估、产品全量测试未重跑、请求诊断偶发丢 1 条、L1/L2/P13 与稳定性未验收)、解冻后建议顺序与边界\n- 第70节按第 3 节待验证项逐项汇总归因结论,记录一次短重试、有界等待准入、降低持有时长/客户端认证不占协议池连接、扩大名额或池、退出通知空轮询避锁、守护器缺陷六项设计问题的冻结状态与解冻评估顺序\n- 说明 docs/02-IAM开发计划.md 第 16 节的 P12 记录仍停在 2026-10-10,本次未改\n\n验证:\n- 纯文档改动,数字与提交号来自第七十步、第七十一步、结果包 README 及 git log;未运行代码检查\n- git diff --check 通过;新增相对链接指向的 release README 与任务文档均存在\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-20T19:27:31-07:00"},"CompareURL":"pengzhiyu/IAM/compare/2986e411b9c9cdae18aab1a2529a2297f33420f6...154f25a42bccc6762747d810cb99510a7fce2c9b","Len":3}...
|
1792549917
|
Edit
Delete
|
|
39776
|
16
|
24
|
16
|
86
|
0
|
0
|
refs/tags/v0.3.0
|
0
|
Juhai OpsDesk v0.3.0 · 后台连接与工作台体验升级
|
1792487779
|
Edit
Delete
|
|
39775
|
16
|
9
|
16
|
86
|
0
|
0
|
refs/tags/v0.3.0
|
0
|
{"Commits":null,"HeadCommit":{" {"Commits":null,"HeadCommit":{"Sha1":"c6d0dac6a9e8074cbac252aef62e41af416ccb76","Message":"fix(electron): 修复后台连接缺少本机凭据时误开启共享状态\n\n- 开启后台连接前校验本机 SSH 凭据,失败时不修改共享开关和登记\n- 校验后再次检查账号与设备锁,关闭后台连接仍无需本机 SSH 凭据\n- 明确提示本机私钥路径不会随设备同步,并说明配置入口\n- 补充快速连接保存、跨电脑同步及后台启停的回归测试\n\n验证:\n- 4 个相关测试文件共 90 项测试通过\n- npm run typecheck\n- GOCACHE=/private/tmp/juhai-opsdesk-preview-go-cache npm run build\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-10-20T17:01:59+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/0000000000000000000000000000000000000000...c6d0dac6a9e8074cbac252aef62e41af416ccb76","Len":0}...
|
1792487779
|
Edit
Delete
|
|
39774
|
16
|
5
|
16
|
86
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"c6d0dac6a {"Commits":[{"Sha1":"c6d0dac6a9e8074cbac252aef62e41af416ccb76","Message":"fix(electron): 修复后台连接缺少本机凭据时误开启共享状态\n\n- 开启后台连接前校验本机 SSH 凭据,失败时不修改共享开关和登记\n- 校验后再次检查账号与设备锁,关闭后台连接仍无需本机 SSH 凭据\n- 明确提示本机私钥路径不会随设备同步,并说明配置入口\n- 补充快速连接保存、跨电脑同步及后台启停的回归测试\n\n验证:\n- 4 个相关测试文件共 90 项测试通过\n- npm run typecheck\n- GOCACHE=/private/tmp/juhai-opsdesk-preview-go-cache npm run build\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-10-20T17:01:59+08:00"},{"Sha1":"bdf5444ab0be89ddd5637e39df7558943cf09464","Message":"feat(devices): 实现设备后台连接状态跨客户端同步\n\n- 运维 API 提供设备共享状态,查询校验访问权限,修改额外校验操作锁\n- 正式后台服务持久化设备启停状态,保留既有登记与凭据,拒绝旧缓存直接恢复授权\n- 桌面端按服务端状态选择连接线路,详情页轮询及聚焦刷新并阻止过期响应覆盖状态\n- 使用系统 restorecon 修复部分 Android 固件私有配置标签设置失败\n- 补充跨账号、缓存失效、权限和持久化测试及部署记录\n\n验证:\n- 113 项相关自动测试通过\n- 两个 Go 模块 go test -race ./... 通过\n- npm run build(包含类型检查)通过\n- 云端部署后健康与鉴权检查通过,原在线设备自动恢复,既有状态与凭据未变\n- Windows 原生打包及跨电脑界面同步待人工验证\n\nBREAKING CHANGE: 正式设备不再接受客户端直连 /lab/enable 和 /lab/stop,修改后台连接开关需同步更新桌面客户端\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-10-20T16:38:37+08:00"},{"Sha1":"993633f948c594829ca5d8e08cc3a7c632238c2d","Message":"build(build): 增加后台连接安装资源完整性校验\n\n- 在常规构建和 electron-builder 打包前校验签名 APK 与 SHA-256 清单\n- 缺包或摘要不匹配时停止构建,避免 Windows 发布缺少首次安装能力的客户端\n- 支持复用原签名构建产物并兼容 Windows 换行格式\n\n验证:\n- 5 项资源校验回归测试通过\n- electron-builder 钩子加载验证通过\n- npm run build(包含类型检查)通过\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-10-20T16:38:18+08:00"},{"Sha1":"b813680800fb568e0653e3dc5e2f08326a179c8b","Message":"fix(app): 修复快速连接预览密钥发现并显示降级原因\n\n快速连接已能通过本机私钥建立 SSH,但公网远程自动发现遗漏快速记录和默认认证,导致 WebRTC 缺少操作员密钥并回退到仅观看通道。\n\n- 将当前账号的快速连接及默认密钥引用纳入自动发现,保留显式全局密钥配置和原有优先级\n- 展示主进程返回的预览降级原因,补充公网远程设置引导并通过安全 IPC 打开主页设置\n- 增加密钥发现、账号隔离、配置保护和降级提示回归测试\n\n验证:\n- 140 项相关自动化测试通过\n- npm run typecheck 通过\n- npm run build 通过(Go 缓存使用临时目录)\n- 用户确认 Windows 实机验证修复成功\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-10-20T14:42:37+08:00"},{"Sha1":"ad2f05394e686aa3eb76ba446a22cfa4b7dc6baa","Message":"fix(renderer): 统一海外路线选项文案\n\n- 将实时预览与日志共用的设备路线选项改为海外路线\n- 同步设置页默认中继选项、海外节点名称及类型注释\n\n验证:\n- npm run typecheck\n- GOCACHE=/private/tmp/opsdesk-resident-go-cache npm run build\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-10-20T14:30:27+08:00"}],"HeadCommit":{"Sha1":"c6d0dac6a9e8074cbac252aef62e41af416ccb76","Message":"fix(electron): 修复后台连接缺少本机凭据时误开启共享状态\n\n- 开启后台连接前校验本机 SSH 凭据,失败时不修改共享开关和登记\n- 校验后再次检查账号与设备锁,关闭后台连接仍无需本机 SSH 凭据\n- 明确提示本机私钥路径不会随设备同步,并说明配置入口\n- 补充快速连接保存、跨电脑同步及后台启停的回归测试\n\n验证:\n- 4 个相关测试文件共 90 项测试通过\n- npm run typecheck\n- GOCACHE=/private/tmp/juhai-opsdesk-preview-go-cache npm run build\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-10-20T17:01:59+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/b997e4920cd56dcad7895b11b9b44670a8610a6e...c6d0dac6a9e8074cbac252aef62e41af416ccb76","Len":18}...
|
1792487562
|
Edit
Delete
|
|
39672
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"2986e411b {"Commits":[{"Sha1":"2986e411b9c9cdae18aab1a2529a2297f33420f6","Message":"feat: 合并业务应用接入免重启的前端接入\n\n后端 5a6b2c0(V37 通知在线登记)与 9409c5e(V38 应用级权限查询凭据)已支持接入新应用或新企业不重启。现合并 feat/console-layout 上对应的前端接入与选型记录更新。\n\n实现内容:\n- 合入 da944e5:客户端详情新增「通知地址」分区,可登记、修改、停用退出通知与权限变化通知(地址加固定 IP,可自动跟随开通企业或只发给指定企业),只有平台管理员读写;登录设置不再修改退出通知地址,保存时原样带回;权限查询接入先选查询范围,应用共享时提交不带 tenantId,空企业显示为所有已开通企业;启用应用时说明两种接入方式\n- 合入 bda169a:演示前端为 CALLER_CREDENTIAL_EXPIRED 提示联系管理员更新凭据\n- 合入 1c6f705:选型记录补记 Codex 的评估与实现结果及前端提交\n- 只修改 iam-admin-web、iam-demo-web 与 docs/app-onboarding-no-restart.md;未改动后端代码\n\n验证:\n- 合并前在 feat/console-layout 上运行 npm run check:iam-admin-web 39 个测试文件 349 项及格式、lint、类型检查、构建通过;iam-demo-web 3 个测试文件 31 项及构建通过\n- 合并前核对前端读取字段与交接文档 docs/handoff/app-onboarding-no-restart-frontend-01.md 及后端 NotificationRegistry 一致\n- 未与真实后端联调,未做浏览器走查,验收脚本未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-19T23:04:02-07:00"},{"Sha1":"1c6f705b52f953bd1d12115a2de52e2b34a5d9d8","Message":"docs: 补记业务应用接入免重启的实现结果\n\n选型记录原先停在\"已转交 Codex、尚未回传\"。现在后端(5a6b2c0、9409c5e,A39)和前端接入均已完成,补记最终结论,方便以后查证。\n\n实现内容:\n- 状态改为后端已实现,并指向 A39\n- 2.5、3.5 节补充 Codex 的评估与实现结果:固定 IP 采用方案 (a)、部署边界不热加载、只有平台管理员可登记、目标数量上限,以及 tenantId 可空、按调用方×企业计算额度、重叠登记加热切换的轮换流程、演示应用调整与回退限制\n- 后续事项表更新为已完成,注明前端提交 da944e5、bda169a,以及未联调、未浏览器走查\n- 依据一节注明\"现状\"中的代码行号描述的是改造前的代码\n\n验证:\n- 核对文档引用的 A39 等文件存在,检查无行尾空白\n- 纯文档改动,未运行代码测试\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-19T23:02:34-07:00"},{"Sha1":"bda169adab261d90a8a87c87925667167acb5469","Message":"feat(iam-demo-web): 提示权限查询凭据已过期\n\nSDK 改用可热切换的凭据文件后,文件过期时业务接口返回 503 CALLER_CREDENTIAL_EXPIRED。演示前端原先按通用 503 提示稍后再试,但重试不会恢复,需要管理员更新凭据。\n\n实现内容:\n- errors.ts 为 CALLER_CREDENTIAL_EXPIRED 增加专门说明,提示联系管理员更新凭据\n- shared.test.tsx 增加对应用例,确认不再按服务暂时不可用提示\n\n验证:\n- npm --prefix iam-demo-web run check:格式、lint、类型检查通过,3 个测试文件 31 项通过,两个应用构建通过\n- 未与真实演示后端联调\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-19T23:02:15-07:00"},{"Sha1":"da944e55f7ca67d7b4d2076a0bd8148bfb2af6a8","Message":"feat(console): 接入通知地址在线登记与应用共享的权限查询登记\n\n后端已支持在控制台登记通知地址(V37)和不限企业的权限查询凭据(V38),接入新应用或新企业不再需要重启。控制台此前只能在登录设置里填写部署白名单内的退出通知地址,权限查询登记也只能选一家企业,现按新接口接入。\n\n实现内容:\n- 客户端详情新增「通知地址」分区(ClientNotifications.tsx),可登记、修改、停用退出通知和权限变化通知;必须同时填写地址和连接用的固定 IP,并说明证书仍按域名验证\n- 权限变化通知默认自动跟随开通企业、不提交企业名单,也可只发给指定企业(最多 1000 家);未在线登记时说明部署配置可能仍在生效\n- 只有平台管理员读写通知登记;应用管理员只看到当前退出通知地址,不请求平台专属接口\n- 登录设置去掉退出通知地址输入框,保存时原样带回 backchannel_uri;通知修改期间暂停登录设置与停用、归档,避免互相让客户端版本过期\n- 地址被拒、数量上限、退出通知已迁移导致的冲突及部署配置不再允许旧地址,分别给出说明\n- 权限查询接入先明确选择查询范围(所有开通企业或只限一家企业),应用共享时从平台应用中选择且提交不带 tenantId;tenant_id 为空显示为所有已开通企业,不去读取企业\n- 密钥更换与停用说明改为先登记新的一份、换好后再停用旧份;启用应用时说明共用接入与单独部署接入的区别\n- 新增 app-onboarding 组件测试 10 项,调整调用方登记与客户端名称的原有用例\n\n验证:\n- npm --prefix iam-admin-web run check:格式、lint、类型检查通过,39 个测试文件 349 项通过,构建通过\n- 未与真实后端联调,未做浏览器走查\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-19T23:02:04-07:00"},{"Sha1":"9409c5e622fe925b3974bed3ab8dd2742d5e12fe","Message":"feat(authorization): 支持应用级决策凭据与免重启轮换\n\n共享应用接入新企业时无需追加企业调用秘密或重启BFF,同时保留专属实例单企业范围。\n\n实现内容:\n- V38支持可空企业限定,保持历史凭据范围和主体当前开通、准入及生命周期复核\n- 调用预算按调用方与企业隔离,通知企业从当前开通关系计算\n- SDK兼容旧映射,支持应用凭据和私有文件热切换,坏文件保留旧值至原截止\n- 使用独立登记两份凭据完成重叠切换,缓存按调用秘密摘要隔离\n- 演示机器交付从机器配置与旧映射发现企业,并保留每轮32家处理上限\n- 补充通知退出边界、迁移回退、安全取舍、部署示例及前端交接\n\n验证:\n- Java25、Maven Wrapper定向verify与补充边界复验:110项不重复计数测试全部通过\n- 覆盖SDK文件安全/缓存/通知、固定IP与TLS、真实PG/Redis新企业授权与预算、管理HTTP、V36至V38非空迁移、演示业务\n- Spotless、编译打包与git diff --check通过\n- 未执行全仓库全部测试,未部署预览或生产;人员快照、默认部门和机器身份仍需独立配置\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-19T22:35:25-07:00"}],"HeadCommit":{"Sha1":"2986e411b9c9cdae18aab1a2529a2297f33420f6","Message":"feat: 合并业务应用接入免重启的前端接入\n\n后端 5a6b2c0(V37 通知在线登记)与 9409c5e(V38 应用级权限查询凭据)已支持接入新应用或新企业不重启。现合并 feat/console-layout 上对应的前端接入与选型记录更新。\n\n实现内容:\n- 合入 da944e5:客户端详情新增「通知地址」分区,可登记、修改、停用退出通知与权限变化通知(地址加固定 IP,可自动跟随开通企业或只发给指定企业),只有平台管理员读写;登录设置不再修改退出通知地址,保存时原样带回;权限查询接入先选查询范围,应用共享时提交不带 tenantId,空企业显示为所有已开通企业;启用应用时说明两种接入方式\n- 合入 bda169a:演示前端为 CALLER_CREDENTIAL_EXPIRED 提示联系管理员更新凭据\n- 合入 1c6f705:选型记录补记 Codex 的评估与实现结果及前端提交\n- 只修改 iam-admin-web、iam-demo-web 与 docs/app-onboarding-no-restart.md;未改动后端代码\n\n验证:\n- 合并前在 feat/console-layout 上运行 npm run check:iam-admin-web 39 个测试文件 349 项及格式、lint、类型检查、构建通过;iam-demo-web 3 个测试文件 31 项及构建通过\n- 合并前核对前端读取字段与交接文档 docs/handoff/app-onboarding-no-restart-frontend-01.md 及后端 NotificationRegistry 一致\n- 未与真实后端联调,未做浏览器走查,验收脚本未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-19T23:04:02-07:00"},"CompareURL":"pengzhiyu/IAM/compare/68a0d5d096ae12cb8cb23b6684467b0276dede4a...2986e411b9c9cdae18aab1a2529a2297f33420f6","Len":7}...
|
1792476926
|
Edit
Delete
|
|
39671
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/feat/console-layout
|
0
|
{"Commits":[{"Sha1":"2986e411b {"Commits":[{"Sha1":"2986e411b9c9cdae18aab1a2529a2297f33420f6","Message":"feat: 合并业务应用接入免重启的前端接入\n\n后端 5a6b2c0(V37 通知在线登记)与 9409c5e(V38 应用级权限查询凭据)已支持接入新应用或新企业不重启。现合并 feat/console-layout 上对应的前端接入与选型记录更新。\n\n实现内容:\n- 合入 da944e5:客户端详情新增「通知地址」分区,可登记、修改、停用退出通知与权限变化通知(地址加固定 IP,可自动跟随开通企业或只发给指定企业),只有平台管理员读写;登录设置不再修改退出通知地址,保存时原样带回;权限查询接入先选查询范围,应用共享时提交不带 tenantId,空企业显示为所有已开通企业;启用应用时说明两种接入方式\n- 合入 bda169a:演示前端为 CALLER_CREDENTIAL_EXPIRED 提示联系管理员更新凭据\n- 合入 1c6f705:选型记录补记 Codex 的评估与实现结果及前端提交\n- 只修改 iam-admin-web、iam-demo-web 与 docs/app-onboarding-no-restart.md;未改动后端代码\n\n验证:\n- 合并前在 feat/console-layout 上运行 npm run check:iam-admin-web 39 个测试文件 349 项及格式、lint、类型检查、构建通过;iam-demo-web 3 个测试文件 31 项及构建通过\n- 合并前核对前端读取字段与交接文档 docs/handoff/app-onboarding-no-restart-frontend-01.md 及后端 NotificationRegistry 一致\n- 未与真实后端联调,未做浏览器走查,验收脚本未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-19T23:04:02-07:00"},{"Sha1":"1c6f705b52f953bd1d12115a2de52e2b34a5d9d8","Message":"docs: 补记业务应用接入免重启的实现结果\n\n选型记录原先停在\"已转交 Codex、尚未回传\"。现在后端(5a6b2c0、9409c5e,A39)和前端接入均已完成,补记最终结论,方便以后查证。\n\n实现内容:\n- 状态改为后端已实现,并指向 A39\n- 2.5、3.5 节补充 Codex 的评估与实现结果:固定 IP 采用方案 (a)、部署边界不热加载、只有平台管理员可登记、目标数量上限,以及 tenantId 可空、按调用方×企业计算额度、重叠登记加热切换的轮换流程、演示应用调整与回退限制\n- 后续事项表更新为已完成,注明前端提交 da944e5、bda169a,以及未联调、未浏览器走查\n- 依据一节注明\"现状\"中的代码行号描述的是改造前的代码\n\n验证:\n- 核对文档引用的 A39 等文件存在,检查无行尾空白\n- 纯文档改动,未运行代码测试\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-19T23:02:34-07:00"},{"Sha1":"bda169adab261d90a8a87c87925667167acb5469","Message":"feat(iam-demo-web): 提示权限查询凭据已过期\n\nSDK 改用可热切换的凭据文件后,文件过期时业务接口返回 503 CALLER_CREDENTIAL_EXPIRED。演示前端原先按通用 503 提示稍后再试,但重试不会恢复,需要管理员更新凭据。\n\n实现内容:\n- errors.ts 为 CALLER_CREDENTIAL_EXPIRED 增加专门说明,提示联系管理员更新凭据\n- shared.test.tsx 增加对应用例,确认不再按服务暂时不可用提示\n\n验证:\n- npm --prefix iam-demo-web run check:格式、lint、类型检查通过,3 个测试文件 31 项通过,两个应用构建通过\n- 未与真实演示后端联调\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-19T23:02:15-07:00"},{"Sha1":"da944e55f7ca67d7b4d2076a0bd8148bfb2af6a8","Message":"feat(console): 接入通知地址在线登记与应用共享的权限查询登记\n\n后端已支持在控制台登记通知地址(V37)和不限企业的权限查询凭据(V38),接入新应用或新企业不再需要重启。控制台此前只能在登录设置里填写部署白名单内的退出通知地址,权限查询登记也只能选一家企业,现按新接口接入。\n\n实现内容:\n- 客户端详情新增「通知地址」分区(ClientNotifications.tsx),可登记、修改、停用退出通知和权限变化通知;必须同时填写地址和连接用的固定 IP,并说明证书仍按域名验证\n- 权限变化通知默认自动跟随开通企业、不提交企业名单,也可只发给指定企业(最多 1000 家);未在线登记时说明部署配置可能仍在生效\n- 只有平台管理员读写通知登记;应用管理员只看到当前退出通知地址,不请求平台专属接口\n- 登录设置去掉退出通知地址输入框,保存时原样带回 backchannel_uri;通知修改期间暂停登录设置与停用、归档,避免互相让客户端版本过期\n- 地址被拒、数量上限、退出通知已迁移导致的冲突及部署配置不再允许旧地址,分别给出说明\n- 权限查询接入先明确选择查询范围(所有开通企业或只限一家企业),应用共享时从平台应用中选择且提交不带 tenantId;tenant_id 为空显示为所有已开通企业,不去读取企业\n- 密钥更换与停用说明改为先登记新的一份、换好后再停用旧份;启用应用时说明共用接入与单独部署接入的区别\n- 新增 app-onboarding 组件测试 10 项,调整调用方登记与客户端名称的原有用例\n\n验证:\n- npm --prefix iam-admin-web run check:格式、lint、类型检查通过,39 个测试文件 349 项通过,构建通过\n- 未与真实后端联调,未做浏览器走查\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-19T23:02:04-07:00"},{"Sha1":"9409c5e622fe925b3974bed3ab8dd2742d5e12fe","Message":"feat(authorization): 支持应用级决策凭据与免重启轮换\n\n共享应用接入新企业时无需追加企业调用秘密或重启BFF,同时保留专属实例单企业范围。\n\n实现内容:\n- V38支持可空企业限定,保持历史凭据范围和主体当前开通、准入及生命周期复核\n- 调用预算按调用方与企业隔离,通知企业从当前开通关系计算\n- SDK兼容旧映射,支持应用凭据和私有文件热切换,坏文件保留旧值至原截止\n- 使用独立登记两份凭据完成重叠切换,缓存按调用秘密摘要隔离\n- 演示机器交付从机器配置与旧映射发现企业,并保留每轮32家处理上限\n- 补充通知退出边界、迁移回退、安全取舍、部署示例及前端交接\n\n验证:\n- Java25、Maven Wrapper定向verify与补充边界复验:110项不重复计数测试全部通过\n- 覆盖SDK文件安全/缓存/通知、固定IP与TLS、真实PG/Redis新企业授权与预算、管理HTTP、V36至V38非空迁移、演示业务\n- Spotless、编译打包与git diff --check通过\n- 未执行全仓库全部测试,未部署预览或生产;人员快照、默认部门和机器身份仍需独立配置\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-19T22:35:25-07:00"}],"HeadCommit":{"Sha1":"2986e411b9c9cdae18aab1a2529a2297f33420f6","Message":"feat: 合并业务应用接入免重启的前端接入\n\n后端 5a6b2c0(V37 通知在线登记)与 9409c5e(V38 应用级权限查询凭据)已支持接入新应用或新企业不重启。现合并 feat/console-layout 上对应的前端接入与选型记录更新。\n\n实现内容:\n- 合入 da944e5:客户端详情新增「通知地址」分区,可登记、修改、停用退出通知与权限变化通知(地址加固定 IP,可自动跟随开通企业或只发给指定企业),只有平台管理员读写;登录设置不再修改退出通知地址,保存时原样带回;权限查询接入先选查询范围,应用共享时提交不带 tenantId,空企业显示为所有已开通企业;启用应用时说明两种接入方式\n- 合入 bda169a:演示前端为 CALLER_CREDENTIAL_EXPIRED 提示联系管理员更新凭据\n- 合入 1c6f705:选型记录补记 Codex 的评估与实现结果及前端提交\n- 只修改 iam-admin-web、iam-demo-web 与 docs/app-onboarding-no-restart.md;未改动后端代码\n\n验证:\n- 合并前在 feat/console-layout 上运行 npm run check:iam-admin-web 39 个测试文件 349 项及格式、lint、类型检查、构建通过;iam-demo-web 3 个测试文件 31 项及构建通过\n- 合并前核对前端读取字段与交接文档 docs/handoff/app-onboarding-no-restart-frontend-01.md 及后端 NotificationRegistry 一致\n- 未与真实后端联调,未做浏览器走查,验收脚本未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-19T23:04:02-07:00"},"CompareURL":"pengzhiyu/IAM/compare/68a0d5d096ae12cb8cb23b6684467b0276dede4a...2986e411b9c9cdae18aab1a2529a2297f33420f6","Len":7}...
|
1792476926
|
Edit
Delete
|
|
39387
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"68a0d5d09 {"Commits":[{"Sha1":"68a0d5d096ae12cb8cb23b6684467b0276dede4a","Message":"feat: 合并角色分配与用户组成员姓名显示的前端接入\n\n后端 b6c5512 已为业务角色分配、成员候选和用户组详情补齐姓名。合并 feat/console-layout 上对应的前端接入,让应用「角色分配」和用户组成员不再只显示成员代码。\n\n实现内容:\n- 合入 6f2d8cf:角色分配列表、分配候选、用户组成员清单与勾选器显示「姓名 + 成员代码」,姓名未确认时提示,搜索框改为可按姓名或成员代码搜索;用户组详情改用只读 members 数组,删除前 100 个候选反查\n- 合入 354be5b:用户组改名 403/404 测试改为等待错误块聚焦后再断言\n- 只修改 iam-admin-web;写入接口、UUID、版本与 CSRF 处理不变\n\n验证:\n- 合并前在 feat/console-layout 上运行 npm run check:38 个测试文件 339 项测试及格式、lint、类型检查、构建全部通过\n- 合并前核对 main 上 b6c5512 的交接文档与查询字段(subject_name、subject_name_set、display_name_set、members)与前端读取一致;b6c5512 未修改 iam-admin-web\n- 未与真实后端联调,相关验收脚本未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-19T01:03:02-07:00"},{"Sha1":"b6c5512d570e29949a14257b436fc1de35d8e73b","Message":"fix(auth): 补齐委派授权与用户组成员姓名\n\n授权管理员需要通过姓名辨认分配对象,组详情也不能依赖前一页候选反查成员。\n\n实现内容:\n- 业务角色绑定及成员候选返回姓名和确认标记,支持姓名与成员代码搜索\n- 用户组详情增加完整只读 members 数组,与 memberships 共用查询结果\n- 保留原企业和应用权限、隐私边界及停用撤权规则\n- 补充权限、搜索、历史状态和完整成员回归测试,同步接口合同与前端交接文档\n\n验证:\n- Maven verify:319 项单元测试、51 项指定集成测试通过,失败、错误和跳过均为 0\n- verify 包含 Spotless 格式检查、编译、架构检查及后端打包;git diff --check 通过\n- 未执行全量集成测试、前端构建及浏览器验收\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-19T00:51:53-07:00"},{"Sha1":"6f2d8cf8392a3c27d5e1806729e2342ef040a621","Message":"feat(console): 角色分配与用户组成员显示姓名\n\n应用「角色分配」和用户组成员原先只能显示成员代码,管理员认不出分配对象。后端已按 docs/console/delegated-member-names-handoff.md 为业务角色分配、成员候选和用户组详情补齐姓名,前端随之接入。\n\n实现内容:\n- 角色分配列表与详情的成员显示姓名,副信息「成员 · 成员代码」,subject_name_set=false 时提示「姓名未确认」;用户组分配 subject_name 为 null,继续显示组名称\n- 分配角色的成员候选显示姓名与成员代码,搜索框改为「搜索姓名或成员代码」,用户组候选为「搜索用户组名称或代码」;CandidatePicker 新增 searchLabel,企业管理员候选同样使用成员文案;分配记录搜索框改为「搜索姓名、成员代码、用户组或角色」\n- 用户组详情直接使用只读 members 数组显示全部成员(含本人、第 101 人以后),删除先读前 100 个候选反查代码的逻辑;新加入的人用勾选器看到的候选信息显示;停用成员注明「成员已停用」\n- 用户组清单与勾选器显示「姓名 + 成员代码」,按钮无障碍名称为「移除成员 姓名(代码)」以区分同名成员;搜索框改为「搜索姓名或成员代码」\n- 写入保持不变:组成员全量替换仍只提交 {version,memberships},不发送 members,姓名不作为标识或写入值;后端不返回 members 或姓名时回退显示代码或标识缩写\n- 同步类型注释、单元测试,以及 acceptance-t02、acceptance-t04、acceptance-group-lifecycle 的搜索框名称与候选定位(改为按行内成员代码定位)\n\n验证:\n- npm run check:格式、lint、类型检查、38 个测试文件 339 项测试与构建全部通过\n- 新增或改写测试覆盖:业务分配姓名、组绑定名称、姓名未确认、两类候选搜索框;组详情 25 人全部显示姓名与代码、停用成员、打开勾选器前不请求候选;勾选器姓名显示及新加入成员的显示\n- 浏览器经本地模拟接口验证:角色分配列表与候选显示姓名、按姓名搜索出两名同名成员并以代码区分;用户组清单与勾选器显示姓名,勾选前后被点行位置与高度不变\n- 后端改动目前仍是主目录未提交改动,未与真实后端联调;三个验收脚本未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-19T00:49:30-07:00"},{"Sha1":"354be5b9c9f80a7bb5d750274e0aaaa736016416","Message":"test(console): 等待用户组改名错误块聚焦后再断言\n\n用户组改名返回 403/404 的用例在错误文案出现后立即断言焦点,而错误块是在提交后的 effect 里才聚焦,多文件并行运行时偶发先断言、后聚焦而失败。\n\n实现内容:\n- group-lifecycle 的 403/404 用例改为 waitFor 等待焦点落到 .write-error 后再断言,界面行为不变\n\n验证:\n- 此前该用例在多文件并行运行中出现过 2 次失败;在修改前的 6bd108d 与当前代码上分别用同一组 5 个测试文件连续运行 8 轮,均未复现\n- 修改后 group-lifecycle、group-editor、display-name-reads、authorization-management 共 40 项测试通过\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-19T00:49:14-07:00"},{"Sha1":"130a9ed5ceca7be71baed1ddecd2c4b085bd7ea6","Message":"fix: 合并用户组成员布局改造\n\n用户组详情勾选候选成员时,上方「已选成员」列表随勾选变高,页面看起来一直在自己滚动。合并 feat/console-layout 上的前端修复,把成员清单与「添加成员」勾选器分开显示。\n\n实现内容:\n- 合入 9ca3197:成员清单与勾选器二选一显示,勾选时上方内容高度不变;待加入、待移除在清单原位标注并可撤销,新增「还原」\n- 只修改 iam-admin-web 下的页面、样式、单元测试与 acceptance-t02 选择器,不涉及后端与接口合同\n\n验证:\n- 合并前在 feat/console-layout 上运行 npm run check:38 个测试文件 337 项测试及格式、lint、类型检查、构建全部通过\n- 合并结果与 9ca3197 的文件树一致(合并前 main 即为该提交的父提交)\n- acceptance-t02 未运行;未与真实后端联调\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-19T00:39:13-07:00"}],"HeadCommit":{"Sha1":"68a0d5d096ae12cb8cb23b6684467b0276dede4a","Message":"feat: 合并角色分配与用户组成员姓名显示的前端接入\n\n后端 b6c5512 已为业务角色分配、成员候选和用户组详情补齐姓名。合并 feat/console-layout 上对应的前端接入,让应用「角色分配」和用户组成员不再只显示成员代码。\n\n实现内容:\n- 合入 6f2d8cf:角色分配列表、分配候选、用户组成员清单与勾选器显示「姓名 + 成员代码」,姓名未确认时提示,搜索框改为可按姓名或成员代码搜索;用户组详情改用只读 members 数组,删除前 100 个候选反查\n- 合入 354be5b:用户组改名 403/404 测试改为等待错误块聚焦后再断言\n- 只修改 iam-admin-web;写入接口、UUID、版本与 CSRF 处理不变\n\n验证:\n- 合并前在 feat/console-layout 上运行 npm run check:38 个测试文件 339 项测试及格式、lint、类型检查、构建全部通过\n- 合并前核对 main 上 b6c5512 的交接文档与查询字段(subject_name、subject_name_set、display_name_set、members)与前端读取一致;b6c5512 未修改 iam-admin-web\n- 未与真实后端联调,相关验收脚本未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-19T01:03:02-07:00"},"CompareURL":"pengzhiyu/IAM/compare/6bd108ddfd20351569b88f276ed8cfa90e7f6f3b...68a0d5d096ae12cb8cb23b6684467b0276dede4a","Len":6}...
|
1792397097
|
Edit
Delete
|
|
39386
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/feat/console-layout
|
0
|
{"Commits":[{"Sha1":"68a0d5d09 {"Commits":[{"Sha1":"68a0d5d096ae12cb8cb23b6684467b0276dede4a","Message":"feat: 合并角色分配与用户组成员姓名显示的前端接入\n\n后端 b6c5512 已为业务角色分配、成员候选和用户组详情补齐姓名。合并 feat/console-layout 上对应的前端接入,让应用「角色分配」和用户组成员不再只显示成员代码。\n\n实现内容:\n- 合入 6f2d8cf:角色分配列表、分配候选、用户组成员清单与勾选器显示「姓名 + 成员代码」,姓名未确认时提示,搜索框改为可按姓名或成员代码搜索;用户组详情改用只读 members 数组,删除前 100 个候选反查\n- 合入 354be5b:用户组改名 403/404 测试改为等待错误块聚焦后再断言\n- 只修改 iam-admin-web;写入接口、UUID、版本与 CSRF 处理不变\n\n验证:\n- 合并前在 feat/console-layout 上运行 npm run check:38 个测试文件 339 项测试及格式、lint、类型检查、构建全部通过\n- 合并前核对 main 上 b6c5512 的交接文档与查询字段(subject_name、subject_name_set、display_name_set、members)与前端读取一致;b6c5512 未修改 iam-admin-web\n- 未与真实后端联调,相关验收脚本未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-19T01:03:02-07:00"},{"Sha1":"b6c5512d570e29949a14257b436fc1de35d8e73b","Message":"fix(auth): 补齐委派授权与用户组成员姓名\n\n授权管理员需要通过姓名辨认分配对象,组详情也不能依赖前一页候选反查成员。\n\n实现内容:\n- 业务角色绑定及成员候选返回姓名和确认标记,支持姓名与成员代码搜索\n- 用户组详情增加完整只读 members 数组,与 memberships 共用查询结果\n- 保留原企业和应用权限、隐私边界及停用撤权规则\n- 补充权限、搜索、历史状态和完整成员回归测试,同步接口合同与前端交接文档\n\n验证:\n- Maven verify:319 项单元测试、51 项指定集成测试通过,失败、错误和跳过均为 0\n- verify 包含 Spotless 格式检查、编译、架构检查及后端打包;git diff --check 通过\n- 未执行全量集成测试、前端构建及浏览器验收\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-19T00:51:53-07:00"},{"Sha1":"6f2d8cf8392a3c27d5e1806729e2342ef040a621","Message":"feat(console): 角色分配与用户组成员显示姓名\n\n应用「角色分配」和用户组成员原先只能显示成员代码,管理员认不出分配对象。后端已按 docs/console/delegated-member-names-handoff.md 为业务角色分配、成员候选和用户组详情补齐姓名,前端随之接入。\n\n实现内容:\n- 角色分配列表与详情的成员显示姓名,副信息「成员 · 成员代码」,subject_name_set=false 时提示「姓名未确认」;用户组分配 subject_name 为 null,继续显示组名称\n- 分配角色的成员候选显示姓名与成员代码,搜索框改为「搜索姓名或成员代码」,用户组候选为「搜索用户组名称或代码」;CandidatePicker 新增 searchLabel,企业管理员候选同样使用成员文案;分配记录搜索框改为「搜索姓名、成员代码、用户组或角色」\n- 用户组详情直接使用只读 members 数组显示全部成员(含本人、第 101 人以后),删除先读前 100 个候选反查代码的逻辑;新加入的人用勾选器看到的候选信息显示;停用成员注明「成员已停用」\n- 用户组清单与勾选器显示「姓名 + 成员代码」,按钮无障碍名称为「移除成员 姓名(代码)」以区分同名成员;搜索框改为「搜索姓名或成员代码」\n- 写入保持不变:组成员全量替换仍只提交 {version,memberships},不发送 members,姓名不作为标识或写入值;后端不返回 members 或姓名时回退显示代码或标识缩写\n- 同步类型注释、单元测试,以及 acceptance-t02、acceptance-t04、acceptance-group-lifecycle 的搜索框名称与候选定位(改为按行内成员代码定位)\n\n验证:\n- npm run check:格式、lint、类型检查、38 个测试文件 339 项测试与构建全部通过\n- 新增或改写测试覆盖:业务分配姓名、组绑定名称、姓名未确认、两类候选搜索框;组详情 25 人全部显示姓名与代码、停用成员、打开勾选器前不请求候选;勾选器姓名显示及新加入成员的显示\n- 浏览器经本地模拟接口验证:角色分配列表与候选显示姓名、按姓名搜索出两名同名成员并以代码区分;用户组清单与勾选器显示姓名,勾选前后被点行位置与高度不变\n- 后端改动目前仍是主目录未提交改动,未与真实后端联调;三个验收脚本未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-19T00:49:30-07:00"},{"Sha1":"354be5b9c9f80a7bb5d750274e0aaaa736016416","Message":"test(console): 等待用户组改名错误块聚焦后再断言\n\n用户组改名返回 403/404 的用例在错误文案出现后立即断言焦点,而错误块是在提交后的 effect 里才聚焦,多文件并行运行时偶发先断言、后聚焦而失败。\n\n实现内容:\n- group-lifecycle 的 403/404 用例改为 waitFor 等待焦点落到 .write-error 后再断言,界面行为不变\n\n验证:\n- 此前该用例在多文件并行运行中出现过 2 次失败;在修改前的 6bd108d 与当前代码上分别用同一组 5 个测试文件连续运行 8 轮,均未复现\n- 修改后 group-lifecycle、group-editor、display-name-reads、authorization-management 共 40 项测试通过\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-19T00:49:14-07:00"},{"Sha1":"130a9ed5ceca7be71baed1ddecd2c4b085bd7ea6","Message":"fix: 合并用户组成员布局改造\n\n用户组详情勾选候选成员时,上方「已选成员」列表随勾选变高,页面看起来一直在自己滚动。合并 feat/console-layout 上的前端修复,把成员清单与「添加成员」勾选器分开显示。\n\n实现内容:\n- 合入 9ca3197:成员清单与勾选器二选一显示,勾选时上方内容高度不变;待加入、待移除在清单原位标注并可撤销,新增「还原」\n- 只修改 iam-admin-web 下的页面、样式、单元测试与 acceptance-t02 选择器,不涉及后端与接口合同\n\n验证:\n- 合并前在 feat/console-layout 上运行 npm run check:38 个测试文件 337 项测试及格式、lint、类型检查、构建全部通过\n- 合并结果与 9ca3197 的文件树一致(合并前 main 即为该提交的父提交)\n- acceptance-t02 未运行;未与真实后端联调\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-19T00:39:13-07:00"}],"HeadCommit":{"Sha1":"68a0d5d096ae12cb8cb23b6684467b0276dede4a","Message":"feat: 合并角色分配与用户组成员姓名显示的前端接入\n\n后端 b6c5512 已为业务角色分配、成员候选和用户组详情补齐姓名。合并 feat/console-layout 上对应的前端接入,让应用「角色分配」和用户组成员不再只显示成员代码。\n\n实现内容:\n- 合入 6f2d8cf:角色分配列表、分配候选、用户组成员清单与勾选器显示「姓名 + 成员代码」,姓名未确认时提示,搜索框改为可按姓名或成员代码搜索;用户组详情改用只读 members 数组,删除前 100 个候选反查\n- 合入 354be5b:用户组改名 403/404 测试改为等待错误块聚焦后再断言\n- 只修改 iam-admin-web;写入接口、UUID、版本与 CSRF 处理不变\n\n验证:\n- 合并前在 feat/console-layout 上运行 npm run check:38 个测试文件 339 项测试及格式、lint、类型检查、构建全部通过\n- 合并前核对 main 上 b6c5512 的交接文档与查询字段(subject_name、subject_name_set、display_name_set、members)与前端读取一致;b6c5512 未修改 iam-admin-web\n- 未与真实后端联调,相关验收脚本未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-19T01:03:02-07:00"},"CompareURL":"pengzhiyu/IAM/compare/6bd108ddfd20351569b88f276ed8cfa90e7f6f3b...68a0d5d096ae12cb8cb23b6684467b0276dede4a","Len":6}...
|
1792397097
|
Edit
Delete
|
|
39316
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"6bd108ddf {"Commits":[{"Sha1":"6bd108ddfd20351569b88f276ed8cfa90e7f6f3b","Message":"feat: 合并邀请登录账号可见性的前端接入\n\n用户发现被邀请人打开邀请链接后只能输入密码,不知道自己的登录账号是什么,管理后台也看不到用户用什么登录。后端已在 dd37c0e 提供邀请只读检查、成员邀请邮箱快照与平台账号登录标识,本次合入 feat/console-layout 上的前端接入。\n\n实现内容:\n- 接受邀请页(c88c7be):独立的 InvitationPage 落地后自动只读检查一次,显示登录账号与邀请内容;新账号设置并确认 12—128 个字符的密码,已有账号输入当前密码并提供忘记密码入口;检查与激活按错误码反馈,429 按 Retry-After 倒计时,不自动重试;换链接时旧结果作废;成功后经路由状态把账号预填到登录页,不进网址\n- 管理详情(8209c1b):成员详情显示“邀请邮箱(加入时)”快照,null 显示“无记录”;平台账号详情显示登录标识,只有邮箱显示验证状态;两处列表不变\n- 登录页入口(8f406dc):“收到邀请?接受邀请”改为指向控制台邀请页,没有邮件链接时引导打开邀请邮件\n\n验证:\n- 合并前确认分支基于 06daf4a,main 之后只有后端提交 dd37c0e,与三个前端提交没有共同文件;主目录未提交改动仅在 scripts/experience/、docs/handoff/ 与 iam-demo-video/,与本次合并没有共同文件\n- 核对 dd37c0e 中的交接文档与 InvitationInspectionController,与前端接入所依据的接口路径、字段和错误码一致\n- 分支上 iam-admin-web npm run check 通过(格式、lint、类型检查、Vitest 38 个文件 334 项、构建)\n- 未运行:合并后的前端检查与后端测试、浏览器对真实后端的联调与部署环境验收\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-19T00:00:38-07:00"},{"Sha1":"8f406dc1a007ea3a5b9a37a79322a9308c2d6559","Message":"fix(console): 登录页邀请入口改为指向控制台邀请页\n\n登录页底部“收到邀请?接受邀请”原先链到服务端简易页 /activate,那里要手动粘贴邀请凭据,也看不到登录账号。改为指向控制台邀请页,没带邮件链接时由该页引导打开邀请邮件。\n\n实现内容:\n- LoginPage 的“接受邀请”链接改为 /console/activate,与同页“忘记密码?”一样使用完整路径的普通链接\n- 邀请页没有链接时的说明改为“接受邀请需要从邀请邮件中的链接进入”,并说明页面隐藏或停留超过 30 分钟时链接会被清除、需要重新打开;不显示表单,也不发起检查或激活\n\n验证:\n- npm --prefix iam-admin-web run check:格式、lint、类型检查通过,Vitest 38 个文件 334 项通过,构建成功\n- 新增 login-protection.test.tsx 1 项(入口地址)、invitation.test.tsx 1 项(无链接时只引导、不发请求)\n- 未运行:浏览器检查与真实后端联调\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-18T23:57:38-07:00"},{"Sha1":"8209c1bfd928ce9ab6d645b51ff9dc76a544db99","Message":"feat(console): 成员详情与平台账号详情显示邀请邮箱和登录标识\n\n企业管理员和平台管理员此前都看不到用户用什么登录,无法在对方忘记账号时告知。按后端交接文档接入成员详情的 invitation_email 快照与平台账号详情的 login_identifiers。\n\n实现内容:\n- Member 新增可选 invitation_email;成员详情显示“邀请邮箱(加入时)”并可复制,说明它是接受本企业邀请时的快照、不随账号邮箱变化;null 显示“无记录”,旧后端不返回时不显示该行;成员列表不变\n- PlatformUser 新增可选 login_identifiers;平台账号详情显示“登录账号”,逐行列出邮箱或用户名并可复制,只有邮箱显示已验证/未验证;没有标识时显示“无登录标识”,旧后端不返回时不显示该行;账号列表不变\n- management.css 新增 .login-ids 样式,窄屏整行折行\n\n验证:\n- npm --prefix iam-admin-web run check(含上一提交):格式、lint、类型检查通过,Vitest 38 个文件 332 项通过,构建成功;之后只改了成员详情的一处注释,重新运行 format:check 通过\n- management-integration.test.tsx 新增 2 项:邀请邮箱的有值、null、缺失三种情况,登录标识列表与邮箱验证状态\n- 未运行:浏览器检查与真实后端联调(后端改动尚未提交,演示环境仍为旧版本)\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-18T23:52:57-07:00"},{"Sha1":"c88c7be70cb41dac8c5b962f958b76e8c7ced3f4","Message":"feat(console): 接受邀请页显示登录账号并区分新旧账号\n\n接受邀请页原先只有一个密码框,不告诉被邀请人要注册或关联的是哪个登录账号,也分不清新账号与已有账号。按后端交接文档 docs/console/invitation-login-account-handoff.md 接入 POST /api/v1/invitations/inspect,并把接受邀请拆成独立页面。\n\n实现内容:\n- 新增 pages/InvitationPage.tsx:拿到链接后自动只读检查一次(StrictMode 下也只调用一次,令牌只放在请求体),显示登录账号、邀请内容(企业名称、平台管理员或应用管理员及应用名称)、新账号的邀请姓名与有效期;响应缺少登录账号或账号状态、邀请类型取值未知时按检查失败处理,不猜测新旧账号\n- NEW 显示设置密码与确认密码,前端校验 12—128 个字符及两次一致;EXISTING 只输入当前密码,不设最短长度,并提供忘记密码入口;隐藏的 username 字段供密码管理器关联账号\n- 检查失败按错误码反馈:INVALID_INVITATION、INVITATION_NOT_APPLICABLE 不再提供重新检查;401/403 丢弃缓存的 CSRF 令牌;429 按 Retry-After 倒计时(缺失时 60 秒),结束后由用户手动重新检查;5xx、网络异常与无法识别的响应允许重新检查;不自动重试\n- 激活提交沿用 urlencoded 表单与 HTML 成功响应;503 AUTH_BUSY 提示未提交,INVALID_ACTIVATION 按检查时的账号状态给出提示,激活 429 同样在提交按钮上倒计时;网络异常与其他 5xx 仍提示结果未知\n- 同文档收到新链接时用新 key 重建流程组件,旧链接晚到的检查或提交结果随旧组件作废;页面隐藏、离开或 30 分钟后清除邀请秘密与已输入的密码\n- 成功页写明登录账号;“前往登录”经路由状态把账号预填到登录页,不放进网址,登录页预填时焦点直接落到密码框\n- 链接接收与新密码规则抽到 lib/emailLink.ts;EmailLinkPage 只保留重置密码与验证邮箱,移除激活分支\n- 结果块程序聚焦时一并去掉全局 box-shadow 焦点环,与原注释“不画焦点环”一致;重置密码、验证邮箱的成功块同样受益\n\n验证:\n- npm --prefix iam-admin-web run check(暂时收起管理详情改动,仅含本提交):格式、lint、类型检查通过,Vitest 38 个文件 330 项通过,构建成功\n- 新增 invitation.test.tsx 9 项、login-protection.test.tsx 2 项,覆盖检查一次、新旧账号表单、服务端密码错误、链接不可用、无法识别的账号状态、429 倒计时、旧链接晚到结果、页面隐藏清除秘密与登录预填\n- Vite 开发服务器加页面内模拟检查与激活接口,在内置浏览器查看新账号、已有账号、限流倒计时、链接不可用、成功页与登录预填;手机宽度无横向滚动,深色模式正常\n- 未运行:与真实后端联调(后端改动尚未提交,演示环境仍为旧版本)\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-18T23:52:13-07:00"},{"Sha1":"dd37c0e1718f50bee4b88148471b6fc1259a572d","Message":"fix(accounts): 补齐邀请登录账号信息的受控展示\n\n邀请收件人和管理员缺少辨认登录账号的信息,增加受权限约束的展示入口,并保留原密码证明与企业隔离边界。\n\n实现内容:\n- 新增匿名邀请检查接口,要求 CSRF,限制来源和令牌预算,不消费邀请\n- 邀请邮件展示登录邮箱及加入对象,保存对象名称快照并过滤控制字符\n- V36 记录成员加入时的邀请邮箱,历史无可靠关联的数据保留为空\n- 平台账号详情返回登录标识,成员详情返回本企业邀请快照,列表及搜索范围不变\n- 同步账号、邮件合同与前端接入交接文档,补充权限、激活及迁移测试\n\n验证:\n- Java 25 下执行 Maven verify:服务端 224 项单元测试通过\n- 邀请、管理读取、邮件、账号及数据库迁移共 7 类 73 项集成用例分批通过,无跳过\n- 最后针对性 verify:29 项单元测试及 6 项邀请检查集成测试通过\n- 提交前重新执行 ./mvnw -B -ntp -pl iam-server -am spotless:check:通过\n- git diff --check 与 git diff --cached --check:通过\n- 前端接入、真实邮件供应商及部署环境验收尚未执行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-18T23:41:10-07:00"}],"HeadCommit":{"Sha1":"6bd108ddfd20351569b88f276ed8cfa90e7f6f3b","Message":"feat: 合并邀请登录账号可见性的前端接入\n\n用户发现被邀请人打开邀请链接后只能输入密码,不知道自己的登录账号是什么,管理后台也看不到用户用什么登录。后端已在 dd37c0e 提供邀请只读检查、成员邀请邮箱快照与平台账号登录标识,本次合入 feat/console-layout 上的前端接入。\n\n实现内容:\n- 接受邀请页(c88c7be):独立的 InvitationPage 落地后自动只读检查一次,显示登录账号与邀请内容;新账号设置并确认 12—128 个字符的密码,已有账号输入当前密码并提供忘记密码入口;检查与激活按错误码反馈,429 按 Retry-After 倒计时,不自动重试;换链接时旧结果作废;成功后经路由状态把账号预填到登录页,不进网址\n- 管理详情(8209c1b):成员详情显示“邀请邮箱(加入时)”快照,null 显示“无记录”;平台账号详情显示登录标识,只有邮箱显示验证状态;两处列表不变\n- 登录页入口(8f406dc):“收到邀请?接受邀请”改为指向控制台邀请页,没有邮件链接时引导打开邀请邮件\n\n验证:\n- 合并前确认分支基于 06daf4a,main 之后只有后端提交 dd37c0e,与三个前端提交没有共同文件;主目录未提交改动仅在 scripts/experience/、docs/handoff/ 与 iam-demo-video/,与本次合并没有共同文件\n- 核对 dd37c0e 中的交接文档与 InvitationInspectionController,与前端接入所依据的接口路径、字段和错误码一致\n- 分支上 iam-admin-web npm run check 通过(格式、lint、类型检查、Vitest 38 个文件 334 项、构建)\n- 未运行:合并后的前端检查与后端测试、浏览器对真实后端的联调与部署环境验收\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-19T00:00:38-07:00"},"CompareURL":"pengzhiyu/IAM/compare/06daf4a651e1a490ace181ac708099def39e8de0...6bd108ddfd20351569b88f276ed8cfa90e7f6f3b","Len":5}...
|
1792393307
|
Edit
Delete
|
|
39315
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/feat/console-layout
|
0
|
{"Commits":[{"Sha1":"6bd108ddf {"Commits":[{"Sha1":"6bd108ddfd20351569b88f276ed8cfa90e7f6f3b","Message":"feat: 合并邀请登录账号可见性的前端接入\n\n用户发现被邀请人打开邀请链接后只能输入密码,不知道自己的登录账号是什么,管理后台也看不到用户用什么登录。后端已在 dd37c0e 提供邀请只读检查、成员邀请邮箱快照与平台账号登录标识,本次合入 feat/console-layout 上的前端接入。\n\n实现内容:\n- 接受邀请页(c88c7be):独立的 InvitationPage 落地后自动只读检查一次,显示登录账号与邀请内容;新账号设置并确认 12—128 个字符的密码,已有账号输入当前密码并提供忘记密码入口;检查与激活按错误码反馈,429 按 Retry-After 倒计时,不自动重试;换链接时旧结果作废;成功后经路由状态把账号预填到登录页,不进网址\n- 管理详情(8209c1b):成员详情显示“邀请邮箱(加入时)”快照,null 显示“无记录”;平台账号详情显示登录标识,只有邮箱显示验证状态;两处列表不变\n- 登录页入口(8f406dc):“收到邀请?接受邀请”改为指向控制台邀请页,没有邮件链接时引导打开邀请邮件\n\n验证:\n- 合并前确认分支基于 06daf4a,main 之后只有后端提交 dd37c0e,与三个前端提交没有共同文件;主目录未提交改动仅在 scripts/experience/、docs/handoff/ 与 iam-demo-video/,与本次合并没有共同文件\n- 核对 dd37c0e 中的交接文档与 InvitationInspectionController,与前端接入所依据的接口路径、字段和错误码一致\n- 分支上 iam-admin-web npm run check 通过(格式、lint、类型检查、Vitest 38 个文件 334 项、构建)\n- 未运行:合并后的前端检查与后端测试、浏览器对真实后端的联调与部署环境验收\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-19T00:00:38-07:00"},{"Sha1":"8f406dc1a007ea3a5b9a37a79322a9308c2d6559","Message":"fix(console): 登录页邀请入口改为指向控制台邀请页\n\n登录页底部“收到邀请?接受邀请”原先链到服务端简易页 /activate,那里要手动粘贴邀请凭据,也看不到登录账号。改为指向控制台邀请页,没带邮件链接时由该页引导打开邀请邮件。\n\n实现内容:\n- LoginPage 的“接受邀请”链接改为 /console/activate,与同页“忘记密码?”一样使用完整路径的普通链接\n- 邀请页没有链接时的说明改为“接受邀请需要从邀请邮件中的链接进入”,并说明页面隐藏或停留超过 30 分钟时链接会被清除、需要重新打开;不显示表单,也不发起检查或激活\n\n验证:\n- npm --prefix iam-admin-web run check:格式、lint、类型检查通过,Vitest 38 个文件 334 项通过,构建成功\n- 新增 login-protection.test.tsx 1 项(入口地址)、invitation.test.tsx 1 项(无链接时只引导、不发请求)\n- 未运行:浏览器检查与真实后端联调\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-18T23:57:38-07:00"},{"Sha1":"8209c1bfd928ce9ab6d645b51ff9dc76a544db99","Message":"feat(console): 成员详情与平台账号详情显示邀请邮箱和登录标识\n\n企业管理员和平台管理员此前都看不到用户用什么登录,无法在对方忘记账号时告知。按后端交接文档接入成员详情的 invitation_email 快照与平台账号详情的 login_identifiers。\n\n实现内容:\n- Member 新增可选 invitation_email;成员详情显示“邀请邮箱(加入时)”并可复制,说明它是接受本企业邀请时的快照、不随账号邮箱变化;null 显示“无记录”,旧后端不返回时不显示该行;成员列表不变\n- PlatformUser 新增可选 login_identifiers;平台账号详情显示“登录账号”,逐行列出邮箱或用户名并可复制,只有邮箱显示已验证/未验证;没有标识时显示“无登录标识”,旧后端不返回时不显示该行;账号列表不变\n- management.css 新增 .login-ids 样式,窄屏整行折行\n\n验证:\n- npm --prefix iam-admin-web run check(含上一提交):格式、lint、类型检查通过,Vitest 38 个文件 332 项通过,构建成功;之后只改了成员详情的一处注释,重新运行 format:check 通过\n- management-integration.test.tsx 新增 2 项:邀请邮箱的有值、null、缺失三种情况,登录标识列表与邮箱验证状态\n- 未运行:浏览器检查与真实后端联调(后端改动尚未提交,演示环境仍为旧版本)\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-18T23:52:57-07:00"},{"Sha1":"c88c7be70cb41dac8c5b962f958b76e8c7ced3f4","Message":"feat(console): 接受邀请页显示登录账号并区分新旧账号\n\n接受邀请页原先只有一个密码框,不告诉被邀请人要注册或关联的是哪个登录账号,也分不清新账号与已有账号。按后端交接文档 docs/console/invitation-login-account-handoff.md 接入 POST /api/v1/invitations/inspect,并把接受邀请拆成独立页面。\n\n实现内容:\n- 新增 pages/InvitationPage.tsx:拿到链接后自动只读检查一次(StrictMode 下也只调用一次,令牌只放在请求体),显示登录账号、邀请内容(企业名称、平台管理员或应用管理员及应用名称)、新账号的邀请姓名与有效期;响应缺少登录账号或账号状态、邀请类型取值未知时按检查失败处理,不猜测新旧账号\n- NEW 显示设置密码与确认密码,前端校验 12—128 个字符及两次一致;EXISTING 只输入当前密码,不设最短长度,并提供忘记密码入口;隐藏的 username 字段供密码管理器关联账号\n- 检查失败按错误码反馈:INVALID_INVITATION、INVITATION_NOT_APPLICABLE 不再提供重新检查;401/403 丢弃缓存的 CSRF 令牌;429 按 Retry-After 倒计时(缺失时 60 秒),结束后由用户手动重新检查;5xx、网络异常与无法识别的响应允许重新检查;不自动重试\n- 激活提交沿用 urlencoded 表单与 HTML 成功响应;503 AUTH_BUSY 提示未提交,INVALID_ACTIVATION 按检查时的账号状态给出提示,激活 429 同样在提交按钮上倒计时;网络异常与其他 5xx 仍提示结果未知\n- 同文档收到新链接时用新 key 重建流程组件,旧链接晚到的检查或提交结果随旧组件作废;页面隐藏、离开或 30 分钟后清除邀请秘密与已输入的密码\n- 成功页写明登录账号;“前往登录”经路由状态把账号预填到登录页,不放进网址,登录页预填时焦点直接落到密码框\n- 链接接收与新密码规则抽到 lib/emailLink.ts;EmailLinkPage 只保留重置密码与验证邮箱,移除激活分支\n- 结果块程序聚焦时一并去掉全局 box-shadow 焦点环,与原注释“不画焦点环”一致;重置密码、验证邮箱的成功块同样受益\n\n验证:\n- npm --prefix iam-admin-web run check(暂时收起管理详情改动,仅含本提交):格式、lint、类型检查通过,Vitest 38 个文件 330 项通过,构建成功\n- 新增 invitation.test.tsx 9 项、login-protection.test.tsx 2 项,覆盖检查一次、新旧账号表单、服务端密码错误、链接不可用、无法识别的账号状态、429 倒计时、旧链接晚到结果、页面隐藏清除秘密与登录预填\n- Vite 开发服务器加页面内模拟检查与激活接口,在内置浏览器查看新账号、已有账号、限流倒计时、链接不可用、成功页与登录预填;手机宽度无横向滚动,深色模式正常\n- 未运行:与真实后端联调(后端改动尚未提交,演示环境仍为旧版本)\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-18T23:52:13-07:00"},{"Sha1":"dd37c0e1718f50bee4b88148471b6fc1259a572d","Message":"fix(accounts): 补齐邀请登录账号信息的受控展示\n\n邀请收件人和管理员缺少辨认登录账号的信息,增加受权限约束的展示入口,并保留原密码证明与企业隔离边界。\n\n实现内容:\n- 新增匿名邀请检查接口,要求 CSRF,限制来源和令牌预算,不消费邀请\n- 邀请邮件展示登录邮箱及加入对象,保存对象名称快照并过滤控制字符\n- V36 记录成员加入时的邀请邮箱,历史无可靠关联的数据保留为空\n- 平台账号详情返回登录标识,成员详情返回本企业邀请快照,列表及搜索范围不变\n- 同步账号、邮件合同与前端接入交接文档,补充权限、激活及迁移测试\n\n验证:\n- Java 25 下执行 Maven verify:服务端 224 项单元测试通过\n- 邀请、管理读取、邮件、账号及数据库迁移共 7 类 73 项集成用例分批通过,无跳过\n- 最后针对性 verify:29 项单元测试及 6 项邀请检查集成测试通过\n- 提交前重新执行 ./mvnw -B -ntp -pl iam-server -am spotless:check:通过\n- git diff --check 与 git diff --cached --check:通过\n- 前端接入、真实邮件供应商及部署环境验收尚未执行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-18T23:41:10-07:00"}],"HeadCommit":{"Sha1":"6bd108ddfd20351569b88f276ed8cfa90e7f6f3b","Message":"feat: 合并邀请登录账号可见性的前端接入\n\n用户发现被邀请人打开邀请链接后只能输入密码,不知道自己的登录账号是什么,管理后台也看不到用户用什么登录。后端已在 dd37c0e 提供邀请只读检查、成员邀请邮箱快照与平台账号登录标识,本次合入 feat/console-layout 上的前端接入。\n\n实现内容:\n- 接受邀请页(c88c7be):独立的 InvitationPage 落地后自动只读检查一次,显示登录账号与邀请内容;新账号设置并确认 12—128 个字符的密码,已有账号输入当前密码并提供忘记密码入口;检查与激活按错误码反馈,429 按 Retry-After 倒计时,不自动重试;换链接时旧结果作废;成功后经路由状态把账号预填到登录页,不进网址\n- 管理详情(8209c1b):成员详情显示“邀请邮箱(加入时)”快照,null 显示“无记录”;平台账号详情显示登录标识,只有邮箱显示验证状态;两处列表不变\n- 登录页入口(8f406dc):“收到邀请?接受邀请”改为指向控制台邀请页,没有邮件链接时引导打开邀请邮件\n\n验证:\n- 合并前确认分支基于 06daf4a,main 之后只有后端提交 dd37c0e,与三个前端提交没有共同文件;主目录未提交改动仅在 scripts/experience/、docs/handoff/ 与 iam-demo-video/,与本次合并没有共同文件\n- 核对 dd37c0e 中的交接文档与 InvitationInspectionController,与前端接入所依据的接口路径、字段和错误码一致\n- 分支上 iam-admin-web npm run check 通过(格式、lint、类型检查、Vitest 38 个文件 334 项、构建)\n- 未运行:合并后的前端检查与后端测试、浏览器对真实后端的联调与部署环境验收\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-19T00:00:38-07:00"},"CompareURL":"pengzhiyu/IAM/compare/06daf4a651e1a490ace181ac708099def39e8de0...6bd108ddfd20351569b88f276ed8cfa90e7f6f3b","Len":5}...
|
1792393307
|
Edit
Delete
|
|
39272
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/feat/console-layout
|
0
|
{"Commits":[{"Sha1":"06daf4a65 {"Commits":[{"Sha1":"06daf4a651e1a490ace181ac708099def39e8de0","Message":"fix: 合并邀请页密码要求说明与激活错误反馈修复\n\n用户发现从邀请邮件进入接受邀请页时,设置过短的新密码只会看到\"请求未完成,安全令牌失效时刷新页面重试\"的通用提示。本次合入 feat/console-layout 上的前端修复,让用户能按提示修改后重新提交。\n\n实现内容:\n- 邀请页修复(765bf82):api.ts 导出 apiErrorFromResponse 供 /activate 失败时复用错误体解析;激活仍以 urlencoded 表单提交、只按状态码判定 HTML 成功响应;密码字段说明新账号须为 12—128 个字符,不对已有账号原密码做最短长度拦截;INVALID_PASSWORD 显示在密码字段下方并聚焦,INVALID_ACTIVATION、INVITATION_NOT_APPLICABLE、CONFLICT、401/403、429、网络异常与 5xx 分别给出固定安全文案\n\n验证:\n- 合并前确认分支基于 main 63544c6,main 在其后没有新提交;主目录未提交改动仅在 scripts/experience/、docs/handoff/demo-video-env-01.md 与 iam-demo-video/,与本次合并没有共同文件\n- 分支上 iam-admin-web 的 format:check、typecheck、lint 通过\n- 未运行:Vitest 单元测试、构建、后端测试、浏览器检查与真实邀请激活\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-18T20:58:53-07:00"},{"Sha1":"765bf820452bc4d64f63ed449b249fafcfc1f60d","Message":"fix(console): 邀请页说明新密码要求并按错误码反馈激活失败\n\n接受邀请页没有说明新账号密码须为 12—128 个字符;激活失败时直接构造不带错误码的 ApiError,INVALID_PASSWORD 等错误码丢失,页面只能显示\"请求未完成,安全令牌失效时刷新页面重试\"的通用提示。\n\n实现内容:\n- api.ts 将内部 toApiError 改名并导出为 apiErrorFromResponse,供成功时返回 HTML 的 /activate 在失败时复用错误体解析;request 的行为不变\n- 激活改由 submitActivation 提交:保持 urlencoded 表单,不设 Accept: application/json,只按状态码判定成功、不解析 HTML 正文;失败时保留 HTTP 状态、code、trace_id 与纯数字 Retry-After;401/403 丢弃缓存的 CSRF 令牌,供用户手动重新提交;不自动重试\n- 密码字段说明改为\"已有 IAM 账号请填写原密码;新账号请设置 12—128 个字符的密码\";因页面分不清新旧账号,不设 minLength、不在提交前拦截短密码,只拦截空密码\n- 新增 activationFailure 映射:INVALID_PASSWORD 显示在密码字段下方并在渲染后聚焦,不叠加顶部告警;INVALID_ACTIVATION、INVITATION_NOT_APPLICABLE、CONFLICT 使用固定文案,不判断账号是否存在;401/403 只说明未通过安全校验,不断言令牌失效;404/409 其他情况与未知错误码安全回退;429 使用有效的 Retry-After;网络异常与 5xx 显示\"提交结果未知\";获取安全令牌失败显示\"邀请尚未提交\"\n- 告警标题随反馈类型变化并显示追踪编号;找回密码、验证邮箱页继续使用原有 failureCopy 文案\n\n验证:\n- npm --prefix iam-admin-web run format:check:通过\n- npm --prefix iam-admin-web run typecheck:通过\n- npm --prefix iam-admin-web run lint:通过\n- 本地演示 IAM 上用 curl 以无效凭据 POST /activate:返回 400 JSON,含 code=INVALID_ACTIVATION、message、trace_id,确认失败响应可按错误码解析\n- 单元测试、浏览器检查与真实邀请激活:未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-18T20:58:01-07:00"},{"Sha1":"63544c67bb5cd377f09d6696006f02363a77353a","Message":"fix(auth): 修复会话过期后刷新页面返回认证错误\n\n过期身份在页面路由执行前被统一返回 401 JSON,导致首次刷新无法进入登录页。\n\n实现内容:\n- 控制台页面清理失效会话后跳转登录页,携带过期提示和安全编码的返回地址\n- 公开页面和静态资源按匿名继续处理,API 保留原 401 JSON 响应\n- 协议授权 GET 请求恢复原匿名登录流程,保留其他协议端点的错误契约\n- 补充地址边界、空闲与绝对到期、账号失效及跨实例身份清理回归测试\n\n验证:\n- Java 25 下服务端 223 项及依赖模块 95 项单元测试通过\n- SessionPageIT、SessionLifecycleIT、LoginSelectionIT、ProtocolIT、PackagedConsoleIT、BrowserSecurityIT 共 69 项集成测试最终通过\n- 新增用例修正绝对跳转地址断言和双时钟测试准备后,重跑 SessionPageIT 17 项全部通过\n- Maven 编译、Spotless 格式检查及 git diff --check 通过\n- 未运行全部集成测试,未进行真实浏览器等待过期后的人工验收\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-18T20:32:14-07:00"},{"Sha1":"6ab56b752dc0439c6c33c0e9943e2ede21a3f5b7","Message":"feat: 合并隐藏无权进入的平台与应用入口\n\n用户验收后提出,只负责企业的管理员不应看到平台管理与应用列表入口。按“进不去的入口一律不显示”的统一规则,合入 feat/console-layout 上的前端调整。\n\n实现内容:\n- 入口隐藏(3ddc9da):侧栏无权分组整组隐藏;切换弹窗的平台入口只对平台管理员显示;工作台入口卡只渲染可进入的入口(平台管理员 3 个、应用管理员 2 个、只负责企业的管理员 1 个,单入口整行横排);工作台账号卡不再显示“没有平台管理身份”\n\n验证:\n- 合并前确认分支基于 28fda4f,main 在其后只有合并提交 58745d8,与分支内容无冲突;主目录未提交改动仅在 scripts/experience/,与本次合并没有共同文件\n- 分支上 iam-admin-web npm run check 通过(格式、lint、类型检查、Vitest 37 个文件 319 项、构建)\n- 未运行:后端测试;真实企业管理员、应用管理员账号的整页走查与部署环境验收\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T20:38:26-07:00"},{"Sha1":"58745d8c25c809411e3c9cb00249b911ba89d5db","Message":"fix: 合并业务应用登录回跳与管理工作台门禁修复\n\n演示部署后发现两个问题:从业务应用登录并完成 MFA 后会先进入 IAM 控制台首页再回到业务应用;只能登录业务应用的普通员工也能进入管理工作台外壳。本次合入 feat/console-layout 上的前端修复与交接说明。\n\n实现内容:\n- MFA 回跳(a328b99):完成回执带受控续办地址时成功标记停留后直接整页跳回 /oidc/select,不刷新控制台身份,只有一次导航;refresh 增加 quiet 选项避免流程中页面重挂\n- 认证页文案(c7966f8):品牌字样改为“IAM 统一身份认证”,MFA 副标题由“进入控制台”改为“完成登录”\n- 管理工作台门禁(443dc01):平台角色或任一企业管理角色(逐页读完本人企业)才渲染管理工作台;没有管理身份只显示“IAM 账号中心”个人账号页,读取失败可重试且不放行\n- 交接说明(28fda4f):docs/handoff/login-return-and-console-gate.md,含给后端的部署与改进建议\n\n验证:\n- 合并前确认 main 为分支起点 0c74265,无分叉;主目录未提交改动仅在 scripts/experience/,与本次合并没有共同文件\n- 分支上 iam-admin-web npm run check 通过(格式、lint、类型检查、Vitest 36 个文件 314 项、构建)\n- 未运行:后端测试;真实账号 MFA、业务应用全链路与部署环境浏览器验收\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T19:44:05-07:00"}],"HeadCommit":{"Sha1":"06daf4a651e1a490ace181ac708099def39e8de0","Message":"fix: 合并邀请页密码要求说明与激活错误反馈修复\n\n用户发现从邀请邮件进入接受邀请页时,设置过短的新密码只会看到\"请求未完成,安全令牌失效时刷新页面重试\"的通用提示。本次合入 feat/console-layout 上的前端修复,让用户能按提示修改后重新提交。\n\n实现内容:\n- 邀请页修复(765bf82):api.ts 导出 apiErrorFromResponse 供 /activate 失败时复用错误体解析;激活仍以 urlencoded 表单提交、只按状态码判定 HTML 成功响应;密码字段说明新账号须为 12—128 个字符,不对已有账号原密码做最短长度拦截;INVALID_PASSWORD 显示在密码字段下方并聚焦,INVALID_ACTIVATION、INVITATION_NOT_APPLICABLE、CONFLICT、401/403、429、网络异常与 5xx 分别给出固定安全文案\n\n验证:\n- 合并前确认分支基于 main 63544c6,main 在其后没有新提交;主目录未提交改动仅在 scripts/experience/、docs/handoff/demo-video-env-01.md 与 iam-demo-video/,与本次合并没有共同文件\n- 分支上 iam-admin-web 的 format:check、typecheck、lint 通过\n- 未运行:Vitest 单元测试、构建、后端测试、浏览器检查与真实邀请激活\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-18T20:58:53-07:00"},"CompareURL":"pengzhiyu/IAM/compare/3ddc9da392e7b9a38e98ddb4e6b71fa6f8a0b48f...06daf4a651e1a490ace181ac708099def39e8de0","Len":5}...
|
1792382363
|
Edit
Delete
|
|
39271
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"06daf4a65 {"Commits":[{"Sha1":"06daf4a651e1a490ace181ac708099def39e8de0","Message":"fix: 合并邀请页密码要求说明与激活错误反馈修复\n\n用户发现从邀请邮件进入接受邀请页时,设置过短的新密码只会看到\"请求未完成,安全令牌失效时刷新页面重试\"的通用提示。本次合入 feat/console-layout 上的前端修复,让用户能按提示修改后重新提交。\n\n实现内容:\n- 邀请页修复(765bf82):api.ts 导出 apiErrorFromResponse 供 /activate 失败时复用错误体解析;激活仍以 urlencoded 表单提交、只按状态码判定 HTML 成功响应;密码字段说明新账号须为 12—128 个字符,不对已有账号原密码做最短长度拦截;INVALID_PASSWORD 显示在密码字段下方并聚焦,INVALID_ACTIVATION、INVITATION_NOT_APPLICABLE、CONFLICT、401/403、429、网络异常与 5xx 分别给出固定安全文案\n\n验证:\n- 合并前确认分支基于 main 63544c6,main 在其后没有新提交;主目录未提交改动仅在 scripts/experience/、docs/handoff/demo-video-env-01.md 与 iam-demo-video/,与本次合并没有共同文件\n- 分支上 iam-admin-web 的 format:check、typecheck、lint 通过\n- 未运行:Vitest 单元测试、构建、后端测试、浏览器检查与真实邀请激活\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-18T20:58:53-07:00"},{"Sha1":"765bf820452bc4d64f63ed449b249fafcfc1f60d","Message":"fix(console): 邀请页说明新密码要求并按错误码反馈激活失败\n\n接受邀请页没有说明新账号密码须为 12—128 个字符;激活失败时直接构造不带错误码的 ApiError,INVALID_PASSWORD 等错误码丢失,页面只能显示\"请求未完成,安全令牌失效时刷新页面重试\"的通用提示。\n\n实现内容:\n- api.ts 将内部 toApiError 改名并导出为 apiErrorFromResponse,供成功时返回 HTML 的 /activate 在失败时复用错误体解析;request 的行为不变\n- 激活改由 submitActivation 提交:保持 urlencoded 表单,不设 Accept: application/json,只按状态码判定成功、不解析 HTML 正文;失败时保留 HTTP 状态、code、trace_id 与纯数字 Retry-After;401/403 丢弃缓存的 CSRF 令牌,供用户手动重新提交;不自动重试\n- 密码字段说明改为\"已有 IAM 账号请填写原密码;新账号请设置 12—128 个字符的密码\";因页面分不清新旧账号,不设 minLength、不在提交前拦截短密码,只拦截空密码\n- 新增 activationFailure 映射:INVALID_PASSWORD 显示在密码字段下方并在渲染后聚焦,不叠加顶部告警;INVALID_ACTIVATION、INVITATION_NOT_APPLICABLE、CONFLICT 使用固定文案,不判断账号是否存在;401/403 只说明未通过安全校验,不断言令牌失效;404/409 其他情况与未知错误码安全回退;429 使用有效的 Retry-After;网络异常与 5xx 显示\"提交结果未知\";获取安全令牌失败显示\"邀请尚未提交\"\n- 告警标题随反馈类型变化并显示追踪编号;找回密码、验证邮箱页继续使用原有 failureCopy 文案\n\n验证:\n- npm --prefix iam-admin-web run format:check:通过\n- npm --prefix iam-admin-web run typecheck:通过\n- npm --prefix iam-admin-web run lint:通过\n- 本地演示 IAM 上用 curl 以无效凭据 POST /activate:返回 400 JSON,含 code=INVALID_ACTIVATION、message、trace_id,确认失败响应可按错误码解析\n- 单元测试、浏览器检查与真实邀请激活:未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-18T20:58:01-07:00"},{"Sha1":"63544c67bb5cd377f09d6696006f02363a77353a","Message":"fix(auth): 修复会话过期后刷新页面返回认证错误\n\n过期身份在页面路由执行前被统一返回 401 JSON,导致首次刷新无法进入登录页。\n\n实现内容:\n- 控制台页面清理失效会话后跳转登录页,携带过期提示和安全编码的返回地址\n- 公开页面和静态资源按匿名继续处理,API 保留原 401 JSON 响应\n- 协议授权 GET 请求恢复原匿名登录流程,保留其他协议端点的错误契约\n- 补充地址边界、空闲与绝对到期、账号失效及跨实例身份清理回归测试\n\n验证:\n- Java 25 下服务端 223 项及依赖模块 95 项单元测试通过\n- SessionPageIT、SessionLifecycleIT、LoginSelectionIT、ProtocolIT、PackagedConsoleIT、BrowserSecurityIT 共 69 项集成测试最终通过\n- 新增用例修正绝对跳转地址断言和双时钟测试准备后,重跑 SessionPageIT 17 项全部通过\n- Maven 编译、Spotless 格式检查及 git diff --check 通过\n- 未运行全部集成测试,未进行真实浏览器等待过期后的人工验收\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-18T20:32:14-07:00"}],"HeadCommit":{"Sha1":"06daf4a651e1a490ace181ac708099def39e8de0","Message":"fix: 合并邀请页密码要求说明与激活错误反馈修复\n\n用户发现从邀请邮件进入接受邀请页时,设置过短的新密码只会看到\"请求未完成,安全令牌失效时刷新页面重试\"的通用提示。本次合入 feat/console-layout 上的前端修复,让用户能按提示修改后重新提交。\n\n实现内容:\n- 邀请页修复(765bf82):api.ts 导出 apiErrorFromResponse 供 /activate 失败时复用错误体解析;激活仍以 urlencoded 表单提交、只按状态码判定 HTML 成功响应;密码字段说明新账号须为 12—128 个字符,不对已有账号原密码做最短长度拦截;INVALID_PASSWORD 显示在密码字段下方并聚焦,INVALID_ACTIVATION、INVITATION_NOT_APPLICABLE、CONFLICT、401/403、429、网络异常与 5xx 分别给出固定安全文案\n\n验证:\n- 合并前确认分支基于 main 63544c6,main 在其后没有新提交;主目录未提交改动仅在 scripts/experience/、docs/handoff/demo-video-env-01.md 与 iam-demo-video/,与本次合并没有共同文件\n- 分支上 iam-admin-web 的 format:check、typecheck、lint 通过\n- 未运行:Vitest 单元测试、构建、后端测试、浏览器检查与真实邀请激活\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-18T20:58:53-07:00"},"CompareURL":"pengzhiyu/IAM/compare/6ab56b752dc0439c6c33c0e9943e2ede21a3f5b7...06daf4a651e1a490ace181ac708099def39e8de0","Len":3}...
|
1792382356
|
Edit
Delete
|
|
39165
|
16
|
5
|
16
|
86
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"b997e4920 {"Commits":[{"Sha1":"b997e4920cd56dcad7895b11b9b44670a8610a6e","Message":"feat(renderer): 优化团队管理与改密弹窗\n\n实现内容:重整团队创建、邀请、成员和设备共享界面;为改密表单增加密码显示开关、字节长度与规则实时反馈,并补充改密规则测试。\n\n验证:npm test(190 个测试文件、1739 项测试通过);npm run build(含 TypeScript 类型检查)通过。\n","AuthorEmail":"contributor-1@users.noreply.invalid","AuthorName":"Contributor 1","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-10-18T07:54:07-07:00"},{"Sha1":"04550f8728f80bf07b8c3336a9794409d2917b06","Message":"feat(audit): 优化操作记录窗口与活动概览\n\n实现内容:增加近 14 天活动走势、结果统计、对象筛选和记录耗时展示;调整记录列表与详情布局,并补充日期分桶和耗时测试。\n\n验证:npm test(190 个测试文件、1739 项测试通过);npm run build(含 TypeScript 类型检查)通过。\n","AuthorEmail":"contributor-1@users.noreply.invalid","AuthorName":"Contributor 1","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-10-18T07:53:44-07:00"},{"Sha1":"30e758b96550aad4b09052f8ccb4235f36079f52","Message":"feat(renderer): 优化主页配置弹窗交互\n\n实现内容:重整设备分组、密钥、快捷指令和快速连接保存弹窗;支持弹窗挂到页面顶层,补充分组命名、公钥展示与脚本统计逻辑及测试,并统一主页弹窗样式。\n\n验证:npm test(189 个测试文件、1733 项测试通过);npm run build(含 TypeScript 类型检查)通过。\n","AuthorEmail":"contributor-1@users.noreply.invalid","AuthorName":"Contributor 1","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-10-18T07:24:39-07:00"},{"Sha1":"1a5c065052ad496448fa50192658f55b75fc7b0c","Message":"feat(udp): 优化抓包监控与报文浏览\n\n实现内容:重整 UDP 抓包状态、端口输入、流量走势、筛选和报文详情界面;抽出端口解析与流量统计逻辑,并补充对应测试。\n\n验证:npm test(188 个测试文件、1727 项测试通过);npm run build(含 TypeScript 类型检查)通过。\n","AuthorEmail":"contributor-1@users.noreply.invalid","AuthorName":"Contributor 1","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-10-18T06:51:51-07:00"},{"Sha1":"bd98c7a638421c569af90e4e37bd684849ce6ab2","Message":"test(devices): 覆盖不同公网主机的快速连接迁移\n\n实现内容:\n- 使用与当前构建地址不同的示例主机模拟旧连接记录\n- 保留历史迁移与损坏记录的验证范围\n\n验证:\n- npm run typecheck\n- vitest run electron/quickConnectStore.test.ts(23 项通过)\n","AuthorEmail":"contributor-1@users.noreply.invalid","AuthorName":"Contributor 1","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-10-18T06:11:53-07:00"}],"HeadCommit":{"Sha1":"b997e4920cd56dcad7895b11b9b44670a8610a6e","Message":"feat(renderer): 优化团队管理与改密弹窗\n\n实现内容:重整团队创建、邀请、成员和设备共享界面;为改密表单增加密码显示开关、字节长度与规则实时反馈,并补充改密规则测试。\n\n验证:npm test(190 个测试文件、1739 项测试通过);npm run build(含 TypeScript 类型检查)通过。\n","AuthorEmail":"contributor-1@users.noreply.invalid","AuthorName":"Contributor 1","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-10-18T07:54:07-07:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/629bde5b6dbae87108816cd5a18339073b2e41de...b997e4920cd56dcad7895b11b9b44670a8610a6e","Len":25}...
|
1792376740
|
Edit
Delete
|
|
38824
|
16
|
17
|
16
|
125
|
0
|
0
|
refs/heads/fix/display-name-reads
|
0
|
|
1792208480
|
Edit
Delete
|
|
38823
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/feat/console-layout
|
0
|
{"Commits":[{"Sha1":"3ddc9da39 {"Commits":[{"Sha1":"3ddc9da392e7b9a38e98ddb4e6b71fa6f8a0b48f","Message":"feat(console): 隐藏没有权限进入的平台与应用入口\n\n只负责企业的管理员原先仍能在侧栏、切换弹窗和工作台看到上锁的“平台管理”“应用”入口及说明,容易分散注意力、引出“是否缺少权限”的疑问。统一改为“进不去的入口一律不显示”,让各角色只看到与自己职责相关的入口。\n\n实现内容:\n- 侧栏:分组按 visible 过滤,平台分组只对平台管理员、应用分组只对平台管理员与应用管理员显示;展开与收起形态一致,删除不再使用的锁定说明与 .side-group__note 样式\n- 切换弹窗:平台入口与“或进入企业”分隔只对 PLATFORM_ADMIN 显示;应用管理员与只负责企业的管理员直接从企业列表开始,初始焦点回退到弹窗内第一个可聚焦元素\n- 工作台:入口卡只渲染可进入的(平台管理员 3 个、应用管理员 2 个、只负责企业的管理员 1 个),去掉锁定样式;入口数量写入 data-entrance-group 决定列数与入场顺延;单入口整行横排,600px 以下改回竖排;账号卡没有平台角色时不再显示“没有平台管理身份”\n- 测试:新增 context-switcher.test.tsx 3 项;sidebar.test.tsx 增加只负责企业的管理员展开/收起 2 项并改写应用管理员用例;home.test.tsx 按新规则改写 3 项\n\n验证:\n- npm run check:Prettier、ESLint、tsc -b、Vitest 37 个文件 319 项、Vite 构建全部通过\n- 将侧栏、切换弹窗、工作台三个组件临时还原为修改前版本时,新增与改写的 7 项测试失败,能发现旧行为\n- 浏览器:在本机 Vite 开发服务器页面临时插入入口卡样例标记,检查 1280、800、375 宽度与暗色模式下单入口与双入口布局;375 宽度发现单入口对齐错误并已修正\n- 未运行:真实企业管理员、应用管理员账号的整页走查\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T20:32:27-07:00"}],"HeadCommit":{"Sha1":"3ddc9da392e7b9a38e98ddb4e6b71fa6f8a0b48f","Message":"feat(console): 隐藏没有权限进入的平台与应用入口\n\n只负责企业的管理员原先仍能在侧栏、切换弹窗和工作台看到上锁的“平台管理”“应用”入口及说明,容易分散注意力、引出“是否缺少权限”的疑问。统一改为“进不去的入口一律不显示”,让各角色只看到与自己职责相关的入口。\n\n实现内容:\n- 侧栏:分组按 visible 过滤,平台分组只对平台管理员、应用分组只对平台管理员与应用管理员显示;展开与收起形态一致,删除不再使用的锁定说明与 .side-group__note 样式\n- 切换弹窗:平台入口与“或进入企业”分隔只对 PLATFORM_ADMIN 显示;应用管理员与只负责企业的管理员直接从企业列表开始,初始焦点回退到弹窗内第一个可聚焦元素\n- 工作台:入口卡只渲染可进入的(平台管理员 3 个、应用管理员 2 个、只负责企业的管理员 1 个),去掉锁定样式;入口数量写入 data-entrance-group 决定列数与入场顺延;单入口整行横排,600px 以下改回竖排;账号卡没有平台角色时不再显示“没有平台管理身份”\n- 测试:新增 context-switcher.test.tsx 3 项;sidebar.test.tsx 增加只负责企业的管理员展开/收起 2 项并改写应用管理员用例;home.test.tsx 按新规则改写 3 项\n\n验证:\n- npm run check:Prettier、ESLint、tsc -b、Vitest 37 个文件 319 项、Vite 构建全部通过\n- 将侧栏、切换弹窗、工作台三个组件临时还原为修改前版本时,新增与改写的 7 项测试失败,能发现旧行为\n- 浏览器:在本机 Vite 开发服务器页面临时插入入口卡样例标记,检查 1280、800、375 宽度与暗色模式下单入口与双入口布局;375 宽度发现单入口对齐错误并已修正\n- 未运行:真实企业管理员、应用管理员账号的整页走查\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T20:32:27-07:00"},"CompareURL":"pengzhiyu/IAM/compare/28fda4f953efc9cdb31bad0fae81ae1b074efce4...3ddc9da392e7b9a38e98ddb4e6b71fa6f8a0b48f","Len":1}...
|
1792208469
|
Edit
Delete
|
|
38822
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/fix/display-name-reads
|
0
|
{"Commits":[],"HeadCommit":{"S {"Commits":[],"HeadCommit":{"Sha1":"63f1e0d5fd0dac58c74be467a927e4f5cab3ce06","Message":"fix: 补齐管理读接口的应用名称与成员姓名\n\n修复启用新应用候选仅显示代码的问题,并补齐原有姓名读取权限内的管理目录展示字段。\n\n实现内容:\n- 补齐应用候选、应用关系、管理员分配及程序身份的应用名称与相关名称搜索\n- 为成员准入、负责人、管理员候选和分配提供姓名及确认标记,保留独立代码字段\n- 保持用户组候选、业务授权候选和业务角色绑定的姓名最小披露边界,不改变权限判断、错误码与排序\n- 增加字段、搜索及权限边界回归测试,同步接口合同并提供九项建议的前端接入交接\n\n验证:\n- Java 25 执行 ./mvnw -B -ntp -pl iam-server -am verify -Dit.test=DisplayNameReadIT,ApplicationManagementIT,AuthorizationManagementIT,ManagementReadIT,ServicePrincipalIT,ManagedDisplayNamesIT -Dfailsafe.failIfNoSpecifiedTests=false:BUILD SUCCESS\n- 291 项单元测试、50 项集成测试通过,失败、错误和跳过均为 0;格式检查、编译、架构检查及后端打包通过\n- git diff --check 与暂存区差异检查通过,交接文档 10 个 JSON 示例解析有效\n- 未运行全部集成测试、性能对照、安全漏洞扫描或前端验收\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T02:02:27-07:00"},"CompareURL":"pengzhiyu/IAM/compare/main...63f1e0d5fd0dac58c74be467a927e4f5cab3ce06","Len":0}...
|
1792208460
|
Edit
Delete
|
|
38821
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/fix/display-name-reads
|
0
|
|
1792208460
|
Edit
Delete
|
|
38819
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"6ab56b752 {"Commits":[{"Sha1":"6ab56b752dc0439c6c33c0e9943e2ede21a3f5b7","Message":"feat: 合并隐藏无权进入的平台与应用入口\n\n用户验收后提出,只负责企业的管理员不应看到平台管理与应用列表入口。按“进不去的入口一律不显示”的统一规则,合入 feat/console-layout 上的前端调整。\n\n实现内容:\n- 入口隐藏(3ddc9da):侧栏无权分组整组隐藏;切换弹窗的平台入口只对平台管理员显示;工作台入口卡只渲染可进入的入口(平台管理员 3 个、应用管理员 2 个、只负责企业的管理员 1 个,单入口整行横排);工作台账号卡不再显示“没有平台管理身份”\n\n验证:\n- 合并前确认分支基于 28fda4f,main 在其后只有合并提交 58745d8,与分支内容无冲突;主目录未提交改动仅在 scripts/experience/,与本次合并没有共同文件\n- 分支上 iam-admin-web npm run check 通过(格式、lint、类型检查、Vitest 37 个文件 319 项、构建)\n- 未运行:后端测试;真实企业管理员、应用管理员账号的整页走查与部署环境验收\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T20:38:26-07:00"},{"Sha1":"3ddc9da392e7b9a38e98ddb4e6b71fa6f8a0b48f","Message":"feat(console): 隐藏没有权限进入的平台与应用入口\n\n只负责企业的管理员原先仍能在侧栏、切换弹窗和工作台看到上锁的“平台管理”“应用”入口及说明,容易分散注意力、引出“是否缺少权限”的疑问。统一改为“进不去的入口一律不显示”,让各角色只看到与自己职责相关的入口。\n\n实现内容:\n- 侧栏:分组按 visible 过滤,平台分组只对平台管理员、应用分组只对平台管理员与应用管理员显示;展开与收起形态一致,删除不再使用的锁定说明与 .side-group__note 样式\n- 切换弹窗:平台入口与“或进入企业”分隔只对 PLATFORM_ADMIN 显示;应用管理员与只负责企业的管理员直接从企业列表开始,初始焦点回退到弹窗内第一个可聚焦元素\n- 工作台:入口卡只渲染可进入的(平台管理员 3 个、应用管理员 2 个、只负责企业的管理员 1 个),去掉锁定样式;入口数量写入 data-entrance-group 决定列数与入场顺延;单入口整行横排,600px 以下改回竖排;账号卡没有平台角色时不再显示“没有平台管理身份”\n- 测试:新增 context-switcher.test.tsx 3 项;sidebar.test.tsx 增加只负责企业的管理员展开/收起 2 项并改写应用管理员用例;home.test.tsx 按新规则改写 3 项\n\n验证:\n- npm run check:Prettier、ESLint、tsc -b、Vitest 37 个文件 319 项、Vite 构建全部通过\n- 将侧栏、切换弹窗、工作台三个组件临时还原为修改前版本时,新增与改写的 7 项测试失败,能发现旧行为\n- 浏览器:在本机 Vite 开发服务器页面临时插入入口卡样例标记,检查 1280、800、375 宽度与暗色模式下单入口与双入口布局;375 宽度发现单入口对齐错误并已修正\n- 未运行:真实企业管理员、应用管理员账号的整页走查\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T20:32:27-07:00"}],"HeadCommit":{"Sha1":"6ab56b752dc0439c6c33c0e9943e2ede21a3f5b7","Message":"feat: 合并隐藏无权进入的平台与应用入口\n\n用户验收后提出,只负责企业的管理员不应看到平台管理与应用列表入口。按“进不去的入口一律不显示”的统一规则,合入 feat/console-layout 上的前端调整。\n\n实现内容:\n- 入口隐藏(3ddc9da):侧栏无权分组整组隐藏;切换弹窗的平台入口只对平台管理员显示;工作台入口卡只渲染可进入的入口(平台管理员 3 个、应用管理员 2 个、只负责企业的管理员 1 个,单入口整行横排);工作台账号卡不再显示“没有平台管理身份”\n\n验证:\n- 合并前确认分支基于 28fda4f,main 在其后只有合并提交 58745d8,与分支内容无冲突;主目录未提交改动仅在 scripts/experience/,与本次合并没有共同文件\n- 分支上 iam-admin-web npm run check 通过(格式、lint、类型检查、Vitest 37 个文件 319 项、构建)\n- 未运行:后端测试;真实企业管理员、应用管理员账号的整页走查与部署环境验收\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T20:38:26-07:00"},"CompareURL":"pengzhiyu/IAM/compare/58745d8c25c809411e3c9cb00249b911ba89d5db...6ab56b752dc0439c6c33c0e9943e2ede21a3f5b7","Len":2}...
|
1792208454
|
Edit
Delete
|
|
38804
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/feat/console-layout
|
0
|
{"Commits":[{"Sha1":"28fda4f95 {"Commits":[{"Sha1":"28fda4f953efc9cdb31bad0fae81ae1b074efce4","Message":"docs(handoff): 补充登录回跳与管理工作台门禁的交接说明\n\n记录演示部署后两个问题的根因、前端修复与验证结果,并整理给后端的部署与改进建议,供 Codex 对照实际项目判断后执行。\n\n实现内容:\n- 说明 MFA 完成后双导航竞争与缺少管理身份门禁两个根因,以及对应的三个前端提交\n- 给后端的建议:重新打包部署控制台、服务端 /login 页品牌文案、可选的统一控制台准入结果接口、可选的 MFA 续办提示\n- 列出部署后人工验收项\n\n验证:\n- 文档内容与 a328b99、c7966f8、443dc01 的实际改动及测试结果逐项核对\n- 文档无可运行检查;未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T19:43:06-07:00"},{"Sha1":"443dc01bf44b0bb0a93a6e9ff2f715adacb09ab9","Message":"feat(console): 没有管理身份的账号只显示个人账号页\n\n原先只要能登录就渲染管理工作台壳层,只能登录业务应用的普通员工也能看到侧栏、工作台和企业入口(管理数据由后端逐接口拒绝)。增加管理身份门禁,普通员工只保留本人账号安全设置。\n\n实现内容:\n- 新增 shell/admission.ts:平台角色非空直接放行,不发请求;否则逐页读取 /api/v1/me/tenants?limit=100(不只看第一页,偏移上限 100000),任一企业 admin_roles 非空即放行并停止读取;业务应用角色不计入\n- ProtectedRoute 已登录后经 AdminGate:读取中显示加载页,读取失败显示可重试的故障页(不放行也不降级),有管理身份渲染 AppShell,否则渲染 MemberShell;登录、MFA、邮件链接路由不受门禁影响\n- 新增 MemberShell:顶部为“IAM 账号中心”品牌、主题切换与账号菜单,内容为个人中心;不渲染侧栏、上下文切换和命令面板,其他控制台地址一律改到 /me\n- 新增 useOptionalScope;PersonalPage 不在控制台壳层内时隐藏“切换企业”并改用不提管理功能的企业说明\n- layout.css 增加个人账号页顶部条样式与 600px 以下窄屏留白\n- login-handoff.test.tsx 增加 4 项门禁测试,personal.test.tsx 补充 useOptionalScope 模拟\n\n验证:\n- npm run check:Prettier、ESLint、tsc -b、Vitest 36 个文件 314 项、Vite 构建全部通过\n- 新增测试覆盖:普通员工被改到 /me 且企业读两页、第二页才有管理角色时放行、有平台角色时不为门禁读取企业、读取失败可重试\n- 真实员工账号与部署环境浏览器验收:未运行;角色在会话中途被撤销时,界面在下次身份复核或重新登录后才切换,期间仍由后端拒绝管理接口\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T19:42:55-07:00"},{"Sha1":"c7966f8b5cfc3fb5a6b26c349ecb7d84b9cb7f30","Message":"fix(console): 认证页品牌与 MFA 提示不再写成进入控制台\n\n从业务应用登录的员工同样经过登录与 MFA 页面,原文案“IAM 控制台”“即可进入控制台”会让人误以为要进入管理后台。改为对两种登录目的都成立的中性说法。\n\n实现内容:\n- AuthShell 顶部品牌字样由“IAM 控制台”改为“IAM 统一身份认证”,同步更新组件注释\n- MFA 页三处副标题由“进入控制台”改为“完成登录”;标题、步骤与按钮不变\n\n验证:\n- npx vitest run:36 个文件 310 项通过;首次全量运行时 group-lifecycle.test.tsx 的“404显示可聚焦完整错误”偶发失败 1 次,该文件单独连续运行 3 次及全量重跑均通过,与本次文案无关\n- npx prettier --check、npx eslint(本次文件)、npx tsc -b:通过\n- 浏览器:本机 Vite 开发服务器登录页已显示新品牌字样;服务端渲染的 /login 页面不在本次范围\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T19:42:20-07:00"},{"Sha1":"a328b990fc462631d30a0a07378f2ee4fe39c0bf","Message":"fix(console): 业务应用登录完成 MFA 后只回跳一次\n\n从业务应用登录并完成 MFA 后,页面会先进入 IAM 控制台首页,过一会儿才回到业务应用。原因是完成回调先刷新身份(状态切到 checking 卸载了 MFA 面板),身份读回后重新挂载的面板拿不到续办地址,把人导航到首页;随后旧回调才整页跳回 /oidc/select,形成两个导航负责人竞争。\n\n实现内容:\n- MfaPage 完成回执带受控续办地址(只接受 /oidc/select?transaction=\u003cuuid\u003e)时,成功标记停留后直接整页跳转,不刷新控制台身份,全程只有这一次导航\n- 没有续办地址(直接登录控制台)时才刷新身份并进入工作台;恢复码仍须勾选已保存后才继续,外部 next 仍不接受\n- AuthProvider 的 refresh 增加 quiet 选项:读取期间不切到 checking,只在拿到结果后一次性更新,避免流程中页面被卸载重挂\n- 新增 login-handoff.test.tsx:用正式路由树与真实 AuthProvider 覆盖已绑定验证、首次绑定并保存恢复码、减少动态效果三种情况\n\n验证:\n- npx vitest run:36 个文件 310 项通过;新增 3 项在 MfaPage 还原为修复前版本时有 2 项失败,能复现原问题\n- npx prettier --check、npx eslint(本次文件)、npx tsc -b:通过\n- 真实账号 MFA 与业务应用全链路浏览器验收:未运行,需重新部署后人工验收\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T19:41:39-07:00"}],"HeadCommit":{"Sha1":"28fda4f953efc9cdb31bad0fae81ae1b074efce4","Message":"docs(handoff): 补充登录回跳与管理工作台门禁的交接说明\n\n记录演示部署后两个问题的根因、前端修复与验证结果,并整理给后端的部署与改进建议,供 Codex 对照实际项目判断后执行。\n\n实现内容:\n- 说明 MFA 完成后双导航竞争与缺少管理身份门禁两个根因,以及对应的三个前端提交\n- 给后端的建议:重新打包部署控制台、服务端 /login 页品牌文案、可选的统一控制台准入结果接口、可选的 MFA 续办提示\n- 列出部署后人工验收项\n\n验证:\n- 文档内容与 a328b99、c7966f8、443dc01 的实际改动及测试结果逐项核对\n- 文档无可运行检查;未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T19:43:06-07:00"},"CompareURL":"pengzhiyu/IAM/compare/0c742655b78b87ea5d7cd9c43028ad20e7527e25...28fda4f953efc9cdb31bad0fae81ae1b074efce4","Len":4}...
|
1792205228
|
Edit
Delete
|
|
38803
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"58745d8c2 {"Commits":[{"Sha1":"58745d8c25c809411e3c9cb00249b911ba89d5db","Message":"fix: 合并业务应用登录回跳与管理工作台门禁修复\n\n演示部署后发现两个问题:从业务应用登录并完成 MFA 后会先进入 IAM 控制台首页再回到业务应用;只能登录业务应用的普通员工也能进入管理工作台外壳。本次合入 feat/console-layout 上的前端修复与交接说明。\n\n实现内容:\n- MFA 回跳(a328b99):完成回执带受控续办地址时成功标记停留后直接整页跳回 /oidc/select,不刷新控制台身份,只有一次导航;refresh 增加 quiet 选项避免流程中页面重挂\n- 认证页文案(c7966f8):品牌字样改为“IAM 统一身份认证”,MFA 副标题由“进入控制台”改为“完成登录”\n- 管理工作台门禁(443dc01):平台角色或任一企业管理角色(逐页读完本人企业)才渲染管理工作台;没有管理身份只显示“IAM 账号中心”个人账号页,读取失败可重试且不放行\n- 交接说明(28fda4f):docs/handoff/login-return-and-console-gate.md,含给后端的部署与改进建议\n\n验证:\n- 合并前确认 main 为分支起点 0c74265,无分叉;主目录未提交改动仅在 scripts/experience/,与本次合并没有共同文件\n- 分支上 iam-admin-web npm run check 通过(格式、lint、类型检查、Vitest 36 个文件 314 项、构建)\n- 未运行:后端测试;真实账号 MFA、业务应用全链路与部署环境浏览器验收\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T19:44:05-07:00"},{"Sha1":"28fda4f953efc9cdb31bad0fae81ae1b074efce4","Message":"docs(handoff): 补充登录回跳与管理工作台门禁的交接说明\n\n记录演示部署后两个问题的根因、前端修复与验证结果,并整理给后端的部署与改进建议,供 Codex 对照实际项目判断后执行。\n\n实现内容:\n- 说明 MFA 完成后双导航竞争与缺少管理身份门禁两个根因,以及对应的三个前端提交\n- 给后端的建议:重新打包部署控制台、服务端 /login 页品牌文案、可选的统一控制台准入结果接口、可选的 MFA 续办提示\n- 列出部署后人工验收项\n\n验证:\n- 文档内容与 a328b99、c7966f8、443dc01 的实际改动及测试结果逐项核对\n- 文档无可运行检查;未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T19:43:06-07:00"},{"Sha1":"443dc01bf44b0bb0a93a6e9ff2f715adacb09ab9","Message":"feat(console): 没有管理身份的账号只显示个人账号页\n\n原先只要能登录就渲染管理工作台壳层,只能登录业务应用的普通员工也能看到侧栏、工作台和企业入口(管理数据由后端逐接口拒绝)。增加管理身份门禁,普通员工只保留本人账号安全设置。\n\n实现内容:\n- 新增 shell/admission.ts:平台角色非空直接放行,不发请求;否则逐页读取 /api/v1/me/tenants?limit=100(不只看第一页,偏移上限 100000),任一企业 admin_roles 非空即放行并停止读取;业务应用角色不计入\n- ProtectedRoute 已登录后经 AdminGate:读取中显示加载页,读取失败显示可重试的故障页(不放行也不降级),有管理身份渲染 AppShell,否则渲染 MemberShell;登录、MFA、邮件链接路由不受门禁影响\n- 新增 MemberShell:顶部为“IAM 账号中心”品牌、主题切换与账号菜单,内容为个人中心;不渲染侧栏、上下文切换和命令面板,其他控制台地址一律改到 /me\n- 新增 useOptionalScope;PersonalPage 不在控制台壳层内时隐藏“切换企业”并改用不提管理功能的企业说明\n- layout.css 增加个人账号页顶部条样式与 600px 以下窄屏留白\n- login-handoff.test.tsx 增加 4 项门禁测试,personal.test.tsx 补充 useOptionalScope 模拟\n\n验证:\n- npm run check:Prettier、ESLint、tsc -b、Vitest 36 个文件 314 项、Vite 构建全部通过\n- 新增测试覆盖:普通员工被改到 /me 且企业读两页、第二页才有管理角色时放行、有平台角色时不为门禁读取企业、读取失败可重试\n- 真实员工账号与部署环境浏览器验收:未运行;角色在会话中途被撤销时,界面在下次身份复核或重新登录后才切换,期间仍由后端拒绝管理接口\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T19:42:55-07:00"},{"Sha1":"c7966f8b5cfc3fb5a6b26c349ecb7d84b9cb7f30","Message":"fix(console): 认证页品牌与 MFA 提示不再写成进入控制台\n\n从业务应用登录的员工同样经过登录与 MFA 页面,原文案“IAM 控制台”“即可进入控制台”会让人误以为要进入管理后台。改为对两种登录目的都成立的中性说法。\n\n实现内容:\n- AuthShell 顶部品牌字样由“IAM 控制台”改为“IAM 统一身份认证”,同步更新组件注释\n- MFA 页三处副标题由“进入控制台”改为“完成登录”;标题、步骤与按钮不变\n\n验证:\n- npx vitest run:36 个文件 310 项通过;首次全量运行时 group-lifecycle.test.tsx 的“404显示可聚焦完整错误”偶发失败 1 次,该文件单独连续运行 3 次及全量重跑均通过,与本次文案无关\n- npx prettier --check、npx eslint(本次文件)、npx tsc -b:通过\n- 浏览器:本机 Vite 开发服务器登录页已显示新品牌字样;服务端渲染的 /login 页面不在本次范围\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T19:42:20-07:00"},{"Sha1":"a328b990fc462631d30a0a07378f2ee4fe39c0bf","Message":"fix(console): 业务应用登录完成 MFA 后只回跳一次\n\n从业务应用登录并完成 MFA 后,页面会先进入 IAM 控制台首页,过一会儿才回到业务应用。原因是完成回调先刷新身份(状态切到 checking 卸载了 MFA 面板),身份读回后重新挂载的面板拿不到续办地址,把人导航到首页;随后旧回调才整页跳回 /oidc/select,形成两个导航负责人竞争。\n\n实现内容:\n- MfaPage 完成回执带受控续办地址(只接受 /oidc/select?transaction=\u003cuuid\u003e)时,成功标记停留后直接整页跳转,不刷新控制台身份,全程只有这一次导航\n- 没有续办地址(直接登录控制台)时才刷新身份并进入工作台;恢复码仍须勾选已保存后才继续,外部 next 仍不接受\n- AuthProvider 的 refresh 增加 quiet 选项:读取期间不切到 checking,只在拿到结果后一次性更新,避免流程中页面被卸载重挂\n- 新增 login-handoff.test.tsx:用正式路由树与真实 AuthProvider 覆盖已绑定验证、首次绑定并保存恢复码、减少动态效果三种情况\n\n验证:\n- npx vitest run:36 个文件 310 项通过;新增 3 项在 MfaPage 还原为修复前版本时有 2 项失败,能复现原问题\n- npx prettier --check、npx eslint(本次文件)、npx tsc -b:通过\n- 真实账号 MFA 与业务应用全链路浏览器验收:未运行,需重新部署后人工验收\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T19:41:39-07:00"}],"HeadCommit":{"Sha1":"58745d8c25c809411e3c9cb00249b911ba89d5db","Message":"fix: 合并业务应用登录回跳与管理工作台门禁修复\n\n演示部署后发现两个问题:从业务应用登录并完成 MFA 后会先进入 IAM 控制台首页再回到业务应用;只能登录业务应用的普通员工也能进入管理工作台外壳。本次合入 feat/console-layout 上的前端修复与交接说明。\n\n实现内容:\n- MFA 回跳(a328b99):完成回执带受控续办地址时成功标记停留后直接整页跳回 /oidc/select,不刷新控制台身份,只有一次导航;refresh 增加 quiet 选项避免流程中页面重挂\n- 认证页文案(c7966f8):品牌字样改为“IAM 统一身份认证”,MFA 副标题由“进入控制台”改为“完成登录”\n- 管理工作台门禁(443dc01):平台角色或任一企业管理角色(逐页读完本人企业)才渲染管理工作台;没有管理身份只显示“IAM 账号中心”个人账号页,读取失败可重试且不放行\n- 交接说明(28fda4f):docs/handoff/login-return-and-console-gate.md,含给后端的部署与改进建议\n\n验证:\n- 合并前确认 main 为分支起点 0c74265,无分叉;主目录未提交改动仅在 scripts/experience/,与本次合并没有共同文件\n- 分支上 iam-admin-web npm run check 通过(格式、lint、类型检查、Vitest 36 个文件 314 项、构建)\n- 未运行:后端测试;真实账号 MFA、业务应用全链路与部署环境浏览器验收\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T19:44:05-07:00"},"CompareURL":"pengzhiyu/IAM/compare/0c742655b78b87ea5d7cd9c43028ad20e7527e25...58745d8c25c809411e3c9cb00249b911ba89d5db","Len":5}...
|
1792205215
|
Edit
Delete
|
|
38661
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/feat/console-layout
|
0
|
{"Commits":[{"Sha1":"0c742655b {"Commits":[{"Sha1":"0c742655b78b87ea5d7cd9c43028ad20e7527e25","Message":"fix: 合并控制台应用名称与成员姓名显示修复\n\n企业「应用开通 → 启用新应用」候选列表原先只显示应用代码,管理员分配、按成员设置、程序身份负责人等处也只显示代码。后端 63f1e0d 已补齐读接口名称字段,本次合入 feat/console-layout 上的前端接入。\n\n实现内容:\n- 控制台名称显示(c2dc522):应用候选与应用详情显示应用名称;成员准入、管理员分配、管理员候选、程序身份负责人显示姓名与成员代码,姓名未确认时提示;业务授权候选、用户组候选、业务角色分配按最小披露合同继续只显示成员代码\n\n验证:\n- 合并前确认 main 为分支起点 63f1e0d,无分叉;主目录未提交改动仅在 scripts/experience/,与本次合并没有共同文件\n- 分支上 iam-admin-web npm run check 通过(格式、lint、类型检查、Vitest 307 项、构建)\n- 未运行:后端测试;浏览器检查与真实后端联调\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T02:24:14-07:00"},{"Sha1":"c2dc52296ef54797419f350f43456e973fadc03c","Message":"fix(console): 显示应用名称与成员姓名而不只显示代码\n\n企业「应用开通 → 启用新应用」候选列表只显示应用代码,管理员分配、按成员设置、程序身份负责人等处也只显示代码。后端 63f1e0d 已补齐这些读接口的名称字段,本次在控制台接入。\n\n实现内容:\n- 新增 memberNaming:姓名为主、成员代码为辅;没有姓名或姓名等于代码时只显示代码,仅在 display_name_set 明确为 false 时提示「姓名未确认」\n- 应用开通:候选列表显示应用名称并附代码,搜索提示改为「搜索应用名称或代码」;应用详情优先使用详情接口的 application_name;按成员设置的列表与单人设置显示姓名和成员代码,搜索提示改为按姓名或成员代码查找\n- 企业/平台管理员分配:负责范围显示应用名称(详情补充应用代码),分配对象姓名未确认时提示\n- 管理员候选显示姓名未确认提示;业务授权候选、用户组候选、业务角色分配按后端最小披露合同继续只显示成员代码,不联查成员目录\n- 程序身份:负责人列表、详情、候选显示姓名与成员代码,候选搜索提示改为「搜索姓名或成员代码」;技术细节中企业、应用显示名称(括号内为代码)\n- 新增字段均按可缺失处理,较早的后端不返回时回退显示代码\n\n验证:\n- npm run check:格式、lint、类型检查、307 项测试、构建均通过\n- 新增 display-name-reads.test.tsx 7 项:候选名称与旧后端回退、详情名称优先、成员准入姓名、管理员分配、候选最小披露、负责人候选\n- 未运行:浏览器检查与真实后端联调(需重建 jar 并重启演示环境,本次未做)\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T02:22:03-07:00"},{"Sha1":"63f1e0d5fd0dac58c74be467a927e4f5cab3ce06","Message":"fix: 补齐管理读接口的应用名称与成员姓名\n\n修复启用新应用候选仅显示代码的问题,并补齐原有姓名读取权限内的管理目录展示字段。\n\n实现内容:\n- 补齐应用候选、应用关系、管理员分配及程序身份的应用名称与相关名称搜索\n- 为成员准入、负责人、管理员候选和分配提供姓名及确认标记,保留独立代码字段\n- 保持用户组候选、业务授权候选和业务角色绑定的姓名最小披露边界,不改变权限判断、错误码与排序\n- 增加字段、搜索及权限边界回归测试,同步接口合同并提供九项建议的前端接入交接\n\n验证:\n- Java 25 执行 ./mvnw -B -ntp -pl iam-server -am verify -Dit.test=DisplayNameReadIT,ApplicationManagementIT,AuthorizationManagementIT,ManagementReadIT,ServicePrincipalIT,ManagedDisplayNamesIT -Dfailsafe.failIfNoSpecifiedTests=false:BUILD SUCCESS\n- 291 项单元测试、50 项集成测试通过,失败、错误和跳过均为 0;格式检查、编译、架构检查及后端打包通过\n- git diff --check 与暂存区差异检查通过,交接文档 10 个 JSON 示例解析有效\n- 未运行全部集成测试、性能对照、安全漏洞扫描或前端验收\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T02:02:27-07:00"}],"HeadCommit":{"Sha1":"0c742655b78b87ea5d7cd9c43028ad20e7527e25","Message":"fix: 合并控制台应用名称与成员姓名显示修复\n\n企业「应用开通 → 启用新应用」候选列表原先只显示应用代码,管理员分配、按成员设置、程序身份负责人等处也只显示代码。后端 63f1e0d 已补齐读接口名称字段,本次合入 feat/console-layout 上的前端接入。\n\n实现内容:\n- 控制台名称显示(c2dc522):应用候选与应用详情显示应用名称;成员准入、管理员分配、管理员候选、程序身份负责人显示姓名与成员代码,姓名未确认时提示;业务授权候选、用户组候选、业务角色分配按最小披露合同继续只显示成员代码\n\n验证:\n- 合并前确认 main 为分支起点 63f1e0d,无分叉;主目录未提交改动仅在 scripts/experience/,与本次合并没有共同文件\n- 分支上 iam-admin-web npm run check 通过(格式、lint、类型检查、Vitest 307 项、构建)\n- 未运行:后端测试;浏览器检查与真实后端联调\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T02:24:14-07:00"},"CompareURL":"pengzhiyu/IAM/compare/fd4d21c62aca9d27e2056be38444fb25cecd9ef5...0c742655b78b87ea5d7cd9c43028ad20e7527e25","Len":3}...
|
1792142767
|
Edit
Delete
|
|
38660
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"0c742655b {"Commits":[{"Sha1":"0c742655b78b87ea5d7cd9c43028ad20e7527e25","Message":"fix: 合并控制台应用名称与成员姓名显示修复\n\n企业「应用开通 → 启用新应用」候选列表原先只显示应用代码,管理员分配、按成员设置、程序身份负责人等处也只显示代码。后端 63f1e0d 已补齐读接口名称字段,本次合入 feat/console-layout 上的前端接入。\n\n实现内容:\n- 控制台名称显示(c2dc522):应用候选与应用详情显示应用名称;成员准入、管理员分配、管理员候选、程序身份负责人显示姓名与成员代码,姓名未确认时提示;业务授权候选、用户组候选、业务角色分配按最小披露合同继续只显示成员代码\n\n验证:\n- 合并前确认 main 为分支起点 63f1e0d,无分叉;主目录未提交改动仅在 scripts/experience/,与本次合并没有共同文件\n- 分支上 iam-admin-web npm run check 通过(格式、lint、类型检查、Vitest 307 项、构建)\n- 未运行:后端测试;浏览器检查与真实后端联调\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T02:24:14-07:00"},{"Sha1":"c2dc52296ef54797419f350f43456e973fadc03c","Message":"fix(console): 显示应用名称与成员姓名而不只显示代码\n\n企业「应用开通 → 启用新应用」候选列表只显示应用代码,管理员分配、按成员设置、程序身份负责人等处也只显示代码。后端 63f1e0d 已补齐这些读接口的名称字段,本次在控制台接入。\n\n实现内容:\n- 新增 memberNaming:姓名为主、成员代码为辅;没有姓名或姓名等于代码时只显示代码,仅在 display_name_set 明确为 false 时提示「姓名未确认」\n- 应用开通:候选列表显示应用名称并附代码,搜索提示改为「搜索应用名称或代码」;应用详情优先使用详情接口的 application_name;按成员设置的列表与单人设置显示姓名和成员代码,搜索提示改为按姓名或成员代码查找\n- 企业/平台管理员分配:负责范围显示应用名称(详情补充应用代码),分配对象姓名未确认时提示\n- 管理员候选显示姓名未确认提示;业务授权候选、用户组候选、业务角色分配按后端最小披露合同继续只显示成员代码,不联查成员目录\n- 程序身份:负责人列表、详情、候选显示姓名与成员代码,候选搜索提示改为「搜索姓名或成员代码」;技术细节中企业、应用显示名称(括号内为代码)\n- 新增字段均按可缺失处理,较早的后端不返回时回退显示代码\n\n验证:\n- npm run check:格式、lint、类型检查、307 项测试、构建均通过\n- 新增 display-name-reads.test.tsx 7 项:候选名称与旧后端回退、详情名称优先、成员准入姓名、管理员分配、候选最小披露、负责人候选\n- 未运行:浏览器检查与真实后端联调(需重建 jar 并重启演示环境,本次未做)\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T02:22:03-07:00"},{"Sha1":"63f1e0d5fd0dac58c74be467a927e4f5cab3ce06","Message":"fix: 补齐管理读接口的应用名称与成员姓名\n\n修复启用新应用候选仅显示代码的问题,并补齐原有姓名读取权限内的管理目录展示字段。\n\n实现内容:\n- 补齐应用候选、应用关系、管理员分配及程序身份的应用名称与相关名称搜索\n- 为成员准入、负责人、管理员候选和分配提供姓名及确认标记,保留独立代码字段\n- 保持用户组候选、业务授权候选和业务角色绑定的姓名最小披露边界,不改变权限判断、错误码与排序\n- 增加字段、搜索及权限边界回归测试,同步接口合同并提供九项建议的前端接入交接\n\n验证:\n- Java 25 执行 ./mvnw -B -ntp -pl iam-server -am verify -Dit.test=DisplayNameReadIT,ApplicationManagementIT,AuthorizationManagementIT,ManagementReadIT,ServicePrincipalIT,ManagedDisplayNamesIT -Dfailsafe.failIfNoSpecifiedTests=false:BUILD SUCCESS\n- 291 项单元测试、50 项集成测试通过,失败、错误和跳过均为 0;格式检查、编译、架构检查及后端打包通过\n- git diff --check 与暂存区差异检查通过,交接文档 10 个 JSON 示例解析有效\n- 未运行全部集成测试、性能对照、安全漏洞扫描或前端验收\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T02:02:27-07:00"}],"HeadCommit":{"Sha1":"0c742655b78b87ea5d7cd9c43028ad20e7527e25","Message":"fix: 合并控制台应用名称与成员姓名显示修复\n\n企业「应用开通 → 启用新应用」候选列表原先只显示应用代码,管理员分配、按成员设置、程序身份负责人等处也只显示代码。后端 63f1e0d 已补齐读接口名称字段,本次合入 feat/console-layout 上的前端接入。\n\n实现内容:\n- 控制台名称显示(c2dc522):应用候选与应用详情显示应用名称;成员准入、管理员分配、管理员候选、程序身份负责人显示姓名与成员代码,姓名未确认时提示;业务授权候选、用户组候选、业务角色分配按最小披露合同继续只显示成员代码\n\n验证:\n- 合并前确认 main 为分支起点 63f1e0d,无分叉;主目录未提交改动仅在 scripts/experience/,与本次合并没有共同文件\n- 分支上 iam-admin-web npm run check 通过(格式、lint、类型检查、Vitest 307 项、构建)\n- 未运行:后端测试;浏览器检查与真实后端联调\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T02:24:14-07:00"},"CompareURL":"pengzhiyu/IAM/compare/fd4d21c62aca9d27e2056be38444fb25cecd9ef5...0c742655b78b87ea5d7cd9c43028ad20e7527e25","Len":3}...
|
1792142761
|
Edit
Delete
|
|
38656
|
16
|
24
|
16
|
86
|
0
|
0
|
refs/tags/v0.2.1
|
0
|
Juhai OpsDesk v0.2.1 · 日志采集与实时预览优化
|
1792142026
|
Edit
Delete
|
|
38655
|
16
|
9
|
16
|
86
|
0
|
0
|
refs/tags/v0.2.1
|
0
|
{"Commits":null,"HeadCommit":{" {"Commits":null,"HeadCommit":{"Sha1":"629bde5b6dbae87108816cd5a18339073b2e41de","Message":"feat(renderer): 实现实时预览后台保活\n\n切换操作台功能标签后保持预览会话,返回实时预览页继续查看画面。\n\n- 保留媒体视图挂载,将标签可见性与会话生命周期分离\n- 允许启动和故障回退在后台完成,切页时取消触摸输入并关闭远程操作\n- 保留停止、功能关闭、操作台卸载和断开连接时的资源清理\n- 补充生命周期回归测试,并同步预览知识库说明\n\n验证:\n- 109 项预览相关测试通过\n- npm run typecheck\n- npm exec electron-vite build\n- npm run check:knowledge\n- git diff --check\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-10-09T17:30:17+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/0000000000000000000000000000000000000000...629bde5b6dbae87108816cd5a18339073b2e41de","Len":0}...
|
1792142026
|
Edit
Delete
|
|
38628
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/feat/console-layout
|
0
|
{"Commits":[{"Sha1":"fd4d21c62 {"Commits":[{"Sha1":"fd4d21c62aca9d27e2056be38444fb25cecd9ef5","Message":"feat: 合并组织架构图拖动平移、全屏与滚轮缩放\n\n组织架构图原先只能拉动滚动条查看,部门多时不便浏览,也无法铺满屏幕查看。本次合入 feat/console-layout 上的组织架构图交互增强。\n\n实现内容:\n- 组织架构图(e40df4d):按住鼠标拖动平移且松手不误开详情;「全屏」立即铺满窗口并尝试浏览器原生全屏,Esc 或「退出全屏」返回;全屏下沿用缩放按钮;鼠标滚轮以指针为中心放大缩小(50%–150%),Shift + 滚轮与横向滑动保留横向滚动\n\n验证:\n- 合并前确认 main 为分支起点 ff21ad9,无分叉;主目录未提交改动仅在 scripts/experience/,与本次合并没有共同文件\n- 分支上 iam-admin-web format:check、lint、typecheck、build 通过,Vitest 34 个文件 300 项通过\n- 未运行:后端测试;浏览器原生全屏与真实 Mac 触控板手势未实测\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T01:13:04-07:00"},{"Sha1":"e40df4d323d530d8e43f53c49c898f046ca59719","Message":"feat(console): 组织架构图支持拖动平移、全屏与滚轮缩放\n\n组织架构图原先只能拉动滚动条查看超出范围的部门,部门多时不便浏览,也无法放大到整个屏幕查看。增加直接拖动、全屏展示和鼠标滚轮缩放。\n\n实现内容:\n- 按住鼠标左键拖动图即可平移,移动超过 4 像素才算拖动,松手时不会误开部门详情;触屏保留原生滚动\n- 新增「全屏」按钮:点击后立即铺满浏览器窗口,并尝试浏览器原生全屏;原生全屏不可用、被拒绝或请求无回应时保持铺满窗口,按 Esc 或「退出全屏」返回\n- 全屏下沿用缩小、放大、原始大小按钮,进出全屏时保持原来位于中心的部门\n- 鼠标滚轮向上放大、向下缩小,以指针为中心,范围仍为 50%–150%;按住 Shift 或横向滑动时保留浏览器原有的横向滚动,并阻止 Ctrl + 滚轮放大整个网页\n- 新增 maximize、minimize 图标,更新页面与全屏提示文案\n- 补充拖动平移、窗口铺满、原生全屏请求无回应、原生全屏 Esc 退出、滚轮缩放共 5 条单测\n\n验证:\n- npm run format:check、lint、typecheck:通过\n- npm run test:34 个测试文件 300 项全部通过\n- npm run build:通过\n- 内置浏览器连接演示环境 p08-alpha 实测:拖动平移与点击、全屏铺满窗口与退出、全屏下按钮与滚轮缩放、滚轮以指针为中心、375 宽窄屏与暗色均正常\n- 未验证:浏览器原生全屏(内置浏览器中原生全屏请求无回应)及真实 Mac 触控板手势\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T01:11:56-07:00"},{"Sha1":"ff21ad957d0a9077aaf58390df732d1fce85afb1","Message":"feat(auth): 统一认证页样式与控制台登录页一致\n\n业务应用走统一登录时,用户看到的 /login、/oidc/select、/activate 由服务端直接输出,原样式为绿色配色、没有品牌标识,企业选择的每家企业都是同样的实心主按钮,登录失败只有一行红字,与控制台登录页风格不一致。本次只调整 auth.css,不改服务端 HTML、表单字段与 CSP。\n\n实现内容:\n- 配色改为控制台“暖石与墨”:暖白方格底、白色卡片、墨黑主按钮,陶土色只用于链接;焦点环用墨黑,避免与错误红混淆\n- 页面 CSP 为 default-src 'none'; style-src 'self',不能加载图片与字体,左上角品牌标识用伪元素与渐变绘制(墨黑圆角方块内绘锁孔 + “IAM 统一身份认证”),卡片底部统一显示“由 IAM 统一身份认证保护”\n- 企业选择的每家企业改为可点击的列表行(左侧企业名、右侧“进入 →”),悬停描边加深;无可选企业时显示虚线说明框\n- 登录失败提示改为带浅红底色与左侧强调条的提示块;输入框 44px 高,悬停与聚焦有明确状态\n- 暗色跟随系统设置;窄屏(≤520px)缩小留白;卡片入场只做 6px 上移,不从透明淡入,动画未执行时也始终可见,减少动态效果时不播放\n- 同步 docs/handoff/demo-apps-frontend.md:记录本次样式改动、验证方式与部署后的检查项\n\n验证:\n- 按 AccountController 与 ProtocolController 的输出复刻登录、登录失败、选择企业、无可选企业、接受邀请、激活成功 6 种页面,以与服务端相同的 CSP 本地预览,检查亮色、暗色与 375px 宽度,浏览器控制台无 CSP 拦截\n- 核对 LoginSelectionIT 只断言页面引用 /auth.css 且返回 200,不依赖样式内容\n- 未运行:后端测试、IAM 制品构建与真实登录流程中的页面检查\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T00:46:38-07:00"},{"Sha1":"4ee4225dec2523e41b58301645a83bb63532ce61","Message":"feat: 合并客户与商机管理和售后服务台演示前端\n\n演示后端 iam-demo-app 已在 main,但缺少前端,-Pdemo-web 无法打包完整页面。本次合入演示前端、控制台“创建交付工单”选项以及方案与交接文档,供后端打包、部署与联调。\n\n实现内容:\n- 演示前端(58e3700):新增 iam-demo-web,CRM 与工单台两套入口,构建输出 iam-demo-web/dist/crm、dist/support,与 demo-web profile 读取路径一致;接入会话门禁、“我的权限”抽屉、tenant_hint 跳转、切换企业与两种退出、客户/商机/跟进/交付、工单流转/转派/处理记录与报表导出\n- 控制台(e295811):平台可批准的程序操作增加 ticket:create(创建交付工单)\n- 文档(efc7c1a):docs/demo-apps.md 原始方案,docs/handoff/demo-apps-backend-01.md 当初的后端建议,docs/handoff/demo-apps-frontend.md 前端交付与部署联调建议\n\n验证:\n- 合并前确认 main 为分支起点 3451213,无分叉;主目录未提交改动仅在 scripts/experience/,与本次合并没有共同文件\n- iam-demo-web npm run check 通过(Vitest 30 项);iam-admin-web npm run check 通过(Vitest 295 项)\n- 未运行:-Pdemo-web 打包、后端测试、真实后端联调与内网部署\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T00:29:48-07:00"},{"Sha1":"efc7c1a07ab3e7fe97ffe18fb71071f10d41d045","Message":"docs(demo): 补充演示应用方案与前后端交接文档\n\n演示应用的原始方案和给后端的建议此前只在本地,前端完成后也缺少交付说明与部署联调的交接。补齐三份文档,记录方案、已确认的决定、前端实际交付与待后端执行的事项。\n\n实现内容:\n- docs/demo-apps.md:CRM 与工单台的功能、页面、权限映射、登录与企业选择体验、阶段二赢单自动建单设计、演示脚本与验收标准;状态标为“原始方案,已据此实现”,与交接文档冲突时以交接文档为准\n- docs/handoff/demo-apps-backend-01.md:当初交给后端评估的建议提示词,保留用于追溯\n- docs/handoff/demo-apps-frontend.md:前端实际交付、对后端合同的处理、前端验证结果与未执行项,以及给后端的打包、部署与联调测试建议\n\n验证:\n- 文档中的命令、路径与测试数量对照本次 iam-demo-web 与 iam-admin-web 的实际检查结果核对\n- 未运行:文档所述的打包、部署与真实联调步骤\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T00:29:00-07:00"}],"HeadCommit":{"Sha1":"fd4d21c62aca9d27e2056be38444fb25cecd9ef5","Message":"feat: 合并组织架构图拖动平移、全屏与滚轮缩放\n\n组织架构图原先只能拉动滚动条查看,部门多时不便浏览,也无法铺满屏幕查看。本次合入 feat/console-layout 上的组织架构图交互增强。\n\n实现内容:\n- 组织架构图(e40df4d):按住鼠标拖动平移且松手不误开详情;「全屏」立即铺满窗口并尝试浏览器原生全屏,Esc 或「退出全屏」返回;全屏下沿用缩放按钮;鼠标滚轮以指针为中心放大缩小(50%–150%),Shift + 滚轮与横向滑动保留横向滚动\n\n验证:\n- 合并前确认 main 为分支起点 ff21ad9,无分叉;主目录未提交改动仅在 scripts/experience/,与本次合并没有共同文件\n- 分支上 iam-admin-web format:check、lint、typecheck、build 通过,Vitest 34 个文件 300 项通过\n- 未运行:后端测试;浏览器原生全屏与真实 Mac 触控板手势未实测\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T01:13:04-07:00"},"CompareURL":"pengzhiyu/IAM/compare/36fd0536408149355981d06096633ca3249a035e...fd4d21c62aca9d27e2056be38444fb25cecd9ef5","Len":15}...
|
1792138442
|
Edit
Delete
|
|
38627
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"fd4d21c62 {"Commits":[{"Sha1":"fd4d21c62aca9d27e2056be38444fb25cecd9ef5","Message":"feat: 合并组织架构图拖动平移、全屏与滚轮缩放\n\n组织架构图原先只能拉动滚动条查看,部门多时不便浏览,也无法铺满屏幕查看。本次合入 feat/console-layout 上的组织架构图交互增强。\n\n实现内容:\n- 组织架构图(e40df4d):按住鼠标拖动平移且松手不误开详情;「全屏」立即铺满窗口并尝试浏览器原生全屏,Esc 或「退出全屏」返回;全屏下沿用缩放按钮;鼠标滚轮以指针为中心放大缩小(50%–150%),Shift + 滚轮与横向滑动保留横向滚动\n\n验证:\n- 合并前确认 main 为分支起点 ff21ad9,无分叉;主目录未提交改动仅在 scripts/experience/,与本次合并没有共同文件\n- 分支上 iam-admin-web format:check、lint、typecheck、build 通过,Vitest 34 个文件 300 项通过\n- 未运行:后端测试;浏览器原生全屏与真实 Mac 触控板手势未实测\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T01:13:04-07:00"},{"Sha1":"e40df4d323d530d8e43f53c49c898f046ca59719","Message":"feat(console): 组织架构图支持拖动平移、全屏与滚轮缩放\n\n组织架构图原先只能拉动滚动条查看超出范围的部门,部门多时不便浏览,也无法放大到整个屏幕查看。增加直接拖动、全屏展示和鼠标滚轮缩放。\n\n实现内容:\n- 按住鼠标左键拖动图即可平移,移动超过 4 像素才算拖动,松手时不会误开部门详情;触屏保留原生滚动\n- 新增「全屏」按钮:点击后立即铺满浏览器窗口,并尝试浏览器原生全屏;原生全屏不可用、被拒绝或请求无回应时保持铺满窗口,按 Esc 或「退出全屏」返回\n- 全屏下沿用缩小、放大、原始大小按钮,进出全屏时保持原来位于中心的部门\n- 鼠标滚轮向上放大、向下缩小,以指针为中心,范围仍为 50%–150%;按住 Shift 或横向滑动时保留浏览器原有的横向滚动,并阻止 Ctrl + 滚轮放大整个网页\n- 新增 maximize、minimize 图标,更新页面与全屏提示文案\n- 补充拖动平移、窗口铺满、原生全屏请求无回应、原生全屏 Esc 退出、滚轮缩放共 5 条单测\n\n验证:\n- npm run format:check、lint、typecheck:通过\n- npm run test:34 个测试文件 300 项全部通过\n- npm run build:通过\n- 内置浏览器连接演示环境 p08-alpha 实测:拖动平移与点击、全屏铺满窗口与退出、全屏下按钮与滚轮缩放、滚轮以指针为中心、375 宽窄屏与暗色均正常\n- 未验证:浏览器原生全屏(内置浏览器中原生全屏请求无回应)及真实 Mac 触控板手势\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T01:11:56-07:00"},{"Sha1":"ff21ad957d0a9077aaf58390df732d1fce85afb1","Message":"feat(auth): 统一认证页样式与控制台登录页一致\n\n业务应用走统一登录时,用户看到的 /login、/oidc/select、/activate 由服务端直接输出,原样式为绿色配色、没有品牌标识,企业选择的每家企业都是同样的实心主按钮,登录失败只有一行红字,与控制台登录页风格不一致。本次只调整 auth.css,不改服务端 HTML、表单字段与 CSP。\n\n实现内容:\n- 配色改为控制台“暖石与墨”:暖白方格底、白色卡片、墨黑主按钮,陶土色只用于链接;焦点环用墨黑,避免与错误红混淆\n- 页面 CSP 为 default-src 'none'; style-src 'self',不能加载图片与字体,左上角品牌标识用伪元素与渐变绘制(墨黑圆角方块内绘锁孔 + “IAM 统一身份认证”),卡片底部统一显示“由 IAM 统一身份认证保护”\n- 企业选择的每家企业改为可点击的列表行(左侧企业名、右侧“进入 →”),悬停描边加深;无可选企业时显示虚线说明框\n- 登录失败提示改为带浅红底色与左侧强调条的提示块;输入框 44px 高,悬停与聚焦有明确状态\n- 暗色跟随系统设置;窄屏(≤520px)缩小留白;卡片入场只做 6px 上移,不从透明淡入,动画未执行时也始终可见,减少动态效果时不播放\n- 同步 docs/handoff/demo-apps-frontend.md:记录本次样式改动、验证方式与部署后的检查项\n\n验证:\n- 按 AccountController 与 ProtocolController 的输出复刻登录、登录失败、选择企业、无可选企业、接受邀请、激活成功 6 种页面,以与服务端相同的 CSP 本地预览,检查亮色、暗色与 375px 宽度,浏览器控制台无 CSP 拦截\n- 核对 LoginSelectionIT 只断言页面引用 /auth.css 且返回 200,不依赖样式内容\n- 未运行:后端测试、IAM 制品构建与真实登录流程中的页面检查\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T00:46:38-07:00"},{"Sha1":"4ee4225dec2523e41b58301645a83bb63532ce61","Message":"feat: 合并客户与商机管理和售后服务台演示前端\n\n演示后端 iam-demo-app 已在 main,但缺少前端,-Pdemo-web 无法打包完整页面。本次合入演示前端、控制台“创建交付工单”选项以及方案与交接文档,供后端打包、部署与联调。\n\n实现内容:\n- 演示前端(58e3700):新增 iam-demo-web,CRM 与工单台两套入口,构建输出 iam-demo-web/dist/crm、dist/support,与 demo-web profile 读取路径一致;接入会话门禁、“我的权限”抽屉、tenant_hint 跳转、切换企业与两种退出、客户/商机/跟进/交付、工单流转/转派/处理记录与报表导出\n- 控制台(e295811):平台可批准的程序操作增加 ticket:create(创建交付工单)\n- 文档(efc7c1a):docs/demo-apps.md 原始方案,docs/handoff/demo-apps-backend-01.md 当初的后端建议,docs/handoff/demo-apps-frontend.md 前端交付与部署联调建议\n\n验证:\n- 合并前确认 main 为分支起点 3451213,无分叉;主目录未提交改动仅在 scripts/experience/,与本次合并没有共同文件\n- iam-demo-web npm run check 通过(Vitest 30 项);iam-admin-web npm run check 通过(Vitest 295 项)\n- 未运行:-Pdemo-web 打包、后端测试、真实后端联调与内网部署\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T00:29:48-07:00"},{"Sha1":"efc7c1a07ab3e7fe97ffe18fb71071f10d41d045","Message":"docs(demo): 补充演示应用方案与前后端交接文档\n\n演示应用的原始方案和给后端的建议此前只在本地,前端完成后也缺少交付说明与部署联调的交接。补齐三份文档,记录方案、已确认的决定、前端实际交付与待后端执行的事项。\n\n实现内容:\n- docs/demo-apps.md:CRM 与工单台的功能、页面、权限映射、登录与企业选择体验、阶段二赢单自动建单设计、演示脚本与验收标准;状态标为“原始方案,已据此实现”,与交接文档冲突时以交接文档为准\n- docs/handoff/demo-apps-backend-01.md:当初交给后端评估的建议提示词,保留用于追溯\n- docs/handoff/demo-apps-frontend.md:前端实际交付、对后端合同的处理、前端验证结果与未执行项,以及给后端的打包、部署与联调测试建议\n\n验证:\n- 文档中的命令、路径与测试数量对照本次 iam-demo-web 与 iam-admin-web 的实际检查结果核对\n- 未运行:文档所述的打包、部署与真实联调步骤\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T00:29:00-07:00"}],"HeadCommit":{"Sha1":"fd4d21c62aca9d27e2056be38444fb25cecd9ef5","Message":"feat: 合并组织架构图拖动平移、全屏与滚轮缩放\n\n组织架构图原先只能拉动滚动条查看,部门多时不便浏览,也无法铺满屏幕查看。本次合入 feat/console-layout 上的组织架构图交互增强。\n\n实现内容:\n- 组织架构图(e40df4d):按住鼠标拖动平移且松手不误开详情;「全屏」立即铺满窗口并尝试浏览器原生全屏,Esc 或「退出全屏」返回;全屏下沿用缩放按钮;鼠标滚轮以指针为中心放大缩小(50%–150%),Shift + 滚轮与横向滑动保留横向滚动\n\n验证:\n- 合并前确认 main 为分支起点 ff21ad9,无分叉;主目录未提交改动仅在 scripts/experience/,与本次合并没有共同文件\n- 分支上 iam-admin-web format:check、lint、typecheck、build 通过,Vitest 34 个文件 300 项通过\n- 未运行:后端测试;浏览器原生全屏与真实 Mac 触控板手势未实测\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T01:13:04-07:00"},"CompareURL":"pengzhiyu/IAM/compare/90fdca65cfd995e173023f259957080c0318a3d3...fd4d21c62aca9d27e2056be38444fb25cecd9ef5","Len":11}...
|
1792138433
|
Edit
Delete
|
|
38547
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"90fdca65c {"Commits":[{"Sha1":"90fdca65cfd995e173023f259957080c0318a3d3","Message":"docs: 补记 P12 入口名额服务端台账诊断并更新候选合同合入状态\n\n两份 P12 任务文档顶部状态仍写“候选合同未合入”,且没有服务端名额台账诊断的记录。本次更新顶部状态,追加软件优化文档第六十九步与归因设计文档第67节。\n\n实现内容:\n- 顶部状态改为台账诊断已完成,并写明恢复合同已以 f8a1e54、b892d79 合入主区,不改变诊断边界\n- 第六十九步 / 第67节记录诊断设计、验证过程、对账、三个问题的服务端直接答案(229 次拒绝快照恰 8 持有者;186 次 CLIENT_AUTH×4 + LIFECYCLE_WAIT×4;名额首次空出中位 80.3ms;重试到达 25.8–40.9ms,55 次恢复与“首次空出早于到达”逐条等价)、与第六十八步 E2d 复算的对照(可回收约 21–24/30)、边界与下一步\n\n验证:\n- 内容来自 release/p12-permit-ledger-congestion-local-20261015-8fe8eb8b 公开包 README 与报告;纯文档改动,未运行代码检查\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T22:29:30-07:00"},{"Sha1":"dd8a73c4b76dc7dd380609cc7d1caff21a01cee1","Message":"test(capacity): 采集入口名额台账并支持按需开启服务端诊断\n\n容量脚本此前不开启产品的 iam.auth.diagnostics.enabled,观察器也没有读取新增的入口名额台账,无法把服务端拒绝瞬间的持有者阶段与驱动样本按 X-Request-Id 关联。本次让本地诊断轮可按需开启该开关并以固定周期拉取台账,正式容量命令路径不变。\n\n实现内容:\n- round.py 新增 --server-diagnostics,environment.py 据此在两实例启动参数末尾追加 --iam.auth.diagnostics.enabled=true,默认不加并记入 environment.json 与 round.json\n- CapacityMeters 新增 PermitLedgerCollector(按游标拉取直到追平,每次最多 16 页,缺口/重启/截断显式记录,每文件 16MiB 上限)与 validatePermitLedgerPage(页、held、rejected、持有者字段白名单,阶段名只接受固定枚举)\n- CapacityObserver 新增独立线程每 2 秒拉取两实例台账写 permit-ledger-iam0/1.jsonl,状态写 permit-ledger-collector.jsonl,停止标记后再拉取一次保留收尾记录\n- 新增 AuthIngressPermitLedgerIT:真实双实例 PG 屏障下第九个到达的 503 与合同头不变、busy 恰加 1、台账快照恰为 8 个真实持有者(含 LIFECYCLE_WAIT)、释放全部晚于拒绝、每实例只暴露一个只读 read 的台账 MBean,页面同时通过工具侧白名单校验\n- 新增 test_server_diagnostics.py 4 项;README 补“入口名额台账”一节\n\n验证:\n- ./mvnw -o -pl iam-server -am verify -Dit.test=AuthIngressPermitLedgerIT,AuthIngressLifecycleIT,RefreshRecoveryContractIT,SdkRefreshRecoveryIT:21 项通过(AuthIngressPermitLedgerIT 2 项)\n- python3 -m unittest discover -s scripts/capacity -p 'test_*.py':70 项通过\n- 本地受控拥塞一轮(刷新 83/s、池 20000、屏障 200/300/400ms × 20 窗口):229 次首次 503 全部关联到台账,dropped/slot_misses/overwritten 均 0,公开包 release/p12-permit-ledger-congestion-local-20261015-8fe8eb8b\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T22:29:30-07:00"},{"Sha1":"5435f06bd1327ad91bcf3d7f58438a53502b9dd1","Message":"feat(security): 新增默认关闭的认证入口名额台账诊断\n\n入口 8 个名额被占满时只有 503 计数与客户端时间线可查,无法知道拒绝瞬间 8 个持有者各在服务端哪个阶段、名额多久空出、带未执行标记的重试到达时名额是否仍满。本次在既有 iam.auth.diagnostics.enabled 开关下补采有界的服务端台账,默认关闭,不改变名额数、tryAcquire/release 顺序、指标与响应。\n\n实现内容:\n- 新增 AuthIngressPermitLedger:8 个持有者槽位(与 Semaphore(8) 对应)、4096 条无锁环形缓冲、read(after) 每页最多 512 条、单条上限 1800 字符;只记录既有 TraceIds 规范化的随机关联号、端点、阶段枚举名、纳秒计数与状态码,时钟故障或超长整条丢弃并计数\n- 每个 token/internal 请求取得名额后登记(取得时刻、取得前可用名额、槽位),释放后写 held;每次 AUTH_BUSY 紧跟 tryAcquire 失败写 rejected,快照至多 8 个持有者的关联号、端点、当前阶段与已持有时长\n- AttackProtectionConfiguration.attackIngress 新增带台账参数的 @Bean 重载,原 3 参方法保留为关闭台账的非 @Bean 重载;释放时先腾槽位、再释放名额、记录指标,最后登记释放时刻\n- AuthRequestDiagnostics 新增同包 current(),供台账读取当前上下文的关联号与阶段,不创建上下文\n- 新增 AuthIngressPermitLedgerConfiguration:台账 bean 随开关创建;开启时注册只读 MBean com.iam:type=AuthIngressPermitLedger,复用既有隔离 JMX 通道\n- 新增 AuthIngressPermitLedgerTest(受控时钟:拒绝快照、释放复用槽位、环形覆盖与分页、时钟故障丢弃)与 IngressPermitLedgerContractTest(台账开启、关闭、旧重载三种构造的状态码、正文、合同头、ingress 指标与预算调用次数逐项一致)\n\n验证:\n- ./mvnw -o -pl iam-server -am test(AuthIngressPermitLedgerTest、IngressPermitLedgerContractTest、IngressOutcomeContractTest、AttackIngressMetricsTest、AuthRequestDiagnosticsTest、AuthDiagnosticsTestProbeTest 等 15 类):104 项通过\n- ./mvnw -o -pl iam-server,iam-java-sdk spotless:check:通过\n- 仅含前一提交与本提交改动的临时工作树 ./mvnw -o -pl iam-server -am test-compile:通过\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T22:29:30-07:00"},{"Sha1":"27e4c1c46a88cef96d65a275f0a70def221813b0","Message":"test(protocol): 适配 ApplicationRegistry.client 新增的 displayName 参数\n\n36fd053 为 ApplicationRegistry.client 增加 displayName 参数并更新了 ProtocolFixture,但同期合入的 RefreshRecoveryContractIT 与 SdkRefreshRecoveryIT 仍按旧签名调用,iam-server 测试源码自 36fd053 起无法编译。\n\n实现内容:\n- 两处 registry.client(...) 调用在 clientId 之后补传 displayName 为 null,与 ProtocolFixture 的写法一致;测试逻辑不变\n\n验证:\n- ./mvnw -o -pl iam-server -am verify -Dit.test=RefreshRecoveryContractIT,SdkRefreshRecoveryIT,AuthIngressLifecycleIT,AuthIngressPermitLedgerIT:21 项通过(修正前 iam-server 测试源码在 testCompile 阶段失败)\n- ./mvnw -o -pl iam-server,iam-java-sdk spotless:check:通过\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T22:29:30-07:00"}],"HeadCommit":{"Sha1":"90fdca65cfd995e173023f259957080c0318a3d3","Message":"docs: 补记 P12 入口名额服务端台账诊断并更新候选合同合入状态\n\n两份 P12 任务文档顶部状态仍写“候选合同未合入”,且没有服务端名额台账诊断的记录。本次更新顶部状态,追加软件优化文档第六十九步与归因设计文档第67节。\n\n实现内容:\n- 顶部状态改为台账诊断已完成,并写明恢复合同已以 f8a1e54、b892d79 合入主区,不改变诊断边界\n- 第六十九步 / 第67节记录诊断设计、验证过程、对账、三个问题的服务端直接答案(229 次拒绝快照恰 8 持有者;186 次 CLIENT_AUTH×4 + LIFECYCLE_WAIT×4;名额首次空出中位 80.3ms;重试到达 25.8–40.9ms,55 次恢复与“首次空出早于到达”逐条等价)、与第六十八步 E2d 复算的对照(可回收约 21–24/30)、边界与下一步\n\n验证:\n- 内容来自 release/p12-permit-ledger-congestion-local-20261015-8fe8eb8b 公开包 README 与报告;纯文档改动,未运行代码检查\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T22:29:30-07:00"},"CompareURL":"pengzhiyu/IAM/compare/36fd0536408149355981d06096633ca3249a035e...90fdca65cfd995e173023f259957080c0318a3d3","Len":4}...
|
1792128686
|
Edit
Delete
|