|
38508
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/feat/console-layout
|
0
|
{"Commits":[{"Sha1":"36fd05364 {"Commits":[{"Sha1":"36fd0536408149355981d06096633ca3249a035e","Message":"feat: 合并成员姓名、应用、登录客户端与资源类型名称\n\n用户测试时发现成员只有成员代码、应用登记只有应用代码,登录客户端和资源类型也只有代码。本次把四项名称的后端实现与前端接入一起合入 main。\n\n实现内容:\n- 后端(feat/display-names):两类邀请必填 displayName,新账号使用邀请姓名、已有账号不覆盖;本人与平台管理员可改姓名(带账号版本,不影响会话与授权),历史默认姓名标记 display_name_set=false;成员列表可按姓名搜索;应用登记必填名称并可改名,管理角色返回 application_name;登录客户端与资源类型新增可选名称及改名接口(资源类型使用独立 name_version);V33 迁移\n- 前端:两类邀请表单加姓名;个人中心确认/修改姓名,所有账号可更正姓名;应用登记填写名称、概况页改名,角色标签与切换器显示应用名称;客户端与资源规则可设置、修改、清除名称,企业侧数据范围显示资源类型名称\n\n验证:\n- 后端:Codex 在功能分支上执行定向 verify,237 项单元测试与 142 项集成测试通过,同步 main 0200f78 后复验 1 项单元测试与 19 项集成测试通过(见交接文档 docs/console/display-names-handoff.md)\n- 前端:npm run check 通过,测试 293 项\n- 合并前核对 main 新增的 P12 提交 f8a1e54、b892d79 与本次合并内容没有共同修改的文件,也没有新增迁移;合并后未重新运行后端测试\n- 未做浏览器检查,未与真实后端联调\n\nBREAKING CHANGE: 企业邀请、平台管理员邀请与应用登记必须提供 displayName,前后端需同时发布;部署前先执行 V33 迁移。\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T20:00:56-07:00"},{"Sha1":"b892d7971af67f4f48c971d89b1a96f4c27d9249","Message":"test(capacity): 驱动支持恢复合同统计、专用报告与受控拥塞诊断\n\n容量驱动原来把任何刷新 503 都记为会话不可用,本地也没有办法制造真实的入口名额占满。本提交合入隔离实验中的驱动恢复选项、专用报告与拥塞辅助;正式容量命令默认路径不变。\n\n实现内容:\n- CapacityDriver 新增默认关闭的恢复选项:仅原 token 端点的完整响应可判定未执行,响应头、长度或 chunk 合同不明确时不授予重试资格;每次刷新最多两次串行尝试、25ms 退避、250ms 预算;原始 503、额外尝试、额外 HTTP 与台账父子耗时分别计入样本与汇总;私有轮换台账按 pending/completed/not_started 配对并 force 落盘,未知 pending 永不被后续记录洗白\n- 新增 CapacityRefreshRecovery(台账状态机与合同判定)、CapacityRecoveryEvidence、CapacityRecoveryExperimentDriver(只通过显式构造器开启恢复的计划入口)以及 CapacityRefreshRecoveryTest 15、CapacityRecoveryStatisticsTest 3;RefreshRecoveryContractIT 用真实双实例与数据库屏障验证 503→200 且旧令牌只消费一次,撤权/到期/已消费/回滚仍按原规则\n- scripts/capacity:recovery_report.py 严格复算恢复样本(业务成功、原始拒绝、额外 HTTP 分别计账,样本/汇总/存量三方对账);http_report.py 对恢复合同样本按设计拒绝;environment.py 与 round.py 新增 --driver-main 白名单;prepare.py 编译清单加入新驱动类;round.py --congestion 与 congestion.py 按日程持有部署独占屏障制造真实入口拥塞(持有 50–1000ms、最多 60 窗口、失败即停);README 补充说明\n- 工具测试:test_recovery_report 28、test_congestion 9、test_tools 新增 2\n\n验证:\n- PYTHONDONTWRITEBYTECODE=1 python3 -I -m unittest discover -s scripts/capacity -p 'test_*.py':66 项通过\n- 单元 283 项与集成回归同上一提交,在同一工作树上执行:12 个类 134 项通过,0 失败(ProtocolIT 14、AttackProtectionIT 12、MachineBudgetIT 6、AuthIngressLifecycleIT 6、AuthIngressConservativeIT 1、AuthIngressTimeContractIT 1、RefreshRecoveryContractIT 5、SdkRefreshRecoveryIT 8、DualApplicationsIT 23、RefreshExpiryLifecycleIT 23、ScopedLifecycleIT 9、SessionLifecycleIT 26),335 秒\n- 本地对照证据见未入库的 release/p12-recovery-contrast-local-20261015-b80658e8(低负载零 503)与 release/p12-congestion-recovery-local-20261015-b9411306(真实 503 下恢复率 21.9%、会话零丢失)\n- 未运行云端容量验收\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T19:59:08-07:00"},{"Sha1":"f8a1e548ef6adf50a225636d7005b3f13cb259da","Message":"feat(protocol): 入口名额拒绝返回未执行标记并由 SDK 有界重试一次\n\n每实例 8 个协议入口名额占满时 POST /oauth2/token 立即 503,客户端无法区分“业务未开始”与“结果未知”,只能丢弃会话重新登录;E2d 云测 30 次此类拒绝使原始可用会话 19970/20000,正式测量未开始。本提交把隔离候选的恢复合同合入主区:服务端只在该分支标记未执行,SDK 据此最多再试一次,其余失败语义不变。\n\n实现内容:\n- AttackProtectionConfiguration:仅 POST /oauth2/token 的 tryAcquire 失败分支,在调用过滤链之前加响应头 IAM-Request-Outcome: not-started-v1;状态 503、Cache-Control: no-store 与正文 {\"error\":\"server_error\"} 不变,/internal/protocol/* 与其他 503 不带标记,名额数与释放逻辑不变\n- iam-java-sdk 新增 RefreshRecovery:只有状态、唯一头、no-store 与固定正文(多读一字节)全部匹配才判定未执行;同一会话串行,最多额外一次,退避 25ms,第二次须在首次发起后 250ms 内发出,每次发起前重查撤销/绝对/闲置期限;BffSessions 第二次仍未执行时保留原代与 lastUse 并返回 503 TOKEN_REQUEST_NOT_STARTED,未知结果、invalid_grant、验签失败仍结束会话\n- 测试:RefreshRecoveryTest 15 项(真实 Spring 协议解析加模拟 HTTP)、IngressOutcomeContractTest(八名额占满时只有拒绝分支带标记且名额全部归还)、SdkRefreshRecoveryIT(真实 Java SDK、浏览器、双 IAM 与数据库屏障:单次/两次拒绝后恢复、撤销/到期/已消费拒绝、提交后丢响应不重放、本地闲置不发第二次)及支撑类 SdkRecoveryTestBridge、SdkLoginDiagnostics、SdkTestClock;测试签名密钥改为 3072 位与生产一致\n- 文档:attack-protection.md 新增“P12 入口拒绝的明确未执行标记”,sdk.md 新增“P12 明确未执行的刷新恢复”并修正刷新尝试次数描述\n\n验证(在同时含后续 test(capacity) 提交内容的同一工作树上执行):\n- ./mvnw -o -B -ntp -pl iam-key-security,iam-java-sdk,iam-server -am test:6 个模块 283 项单元测试通过\n- ./mvnw -o -B -ntp -pl iam-server -am verify -Dit.test=SdkRefreshRecoveryIT,RefreshRecoveryContractIT,AuthIngressLifecycleIT,AuthIngressConservativeIT,AuthIngressTimeContractIT,AttackProtectionIT,MachineBudgetIT,RefreshExpiryLifecycleIT,ScopedLifecycleIT,SessionLifecycleIT,DualApplicationsIT,ProtocolIT(含 spotless:check):12 个类 134 项通过,0 失败(ProtocolIT 14、AttackProtectionIT 12、MachineBudgetIT 6、AuthIngressLifecycleIT 6、AuthIngressConservativeIT 1、AuthIngressTimeContractIT 1、RefreshRecoveryContractIT 5、SdkRefreshRecoveryIT 8、DualApplicationsIT 23、RefreshExpiryLifecycleIT 23、ScopedLifecycleIT 9、SessionLifecycleIT 26),335 秒\n- 本提交单独检出到临时工作树执行 ./mvnw -o -B -ntp -pl iam-server,iam-java-sdk -am test-compile:通过\n- 本地证据见未入库的 release/p12-id-clock-sdk-recovery-local-20261015-87b969eb 与 release/p12-congestion-recovery-local-20261015-b9411306(受控拥塞下开启组 228 次拒绝全部确认未执行、恢复 50 次、会话零丢失)\n- 未运行云端容量验收,P12 正式门槛未变\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T19:58:41-07:00"},{"Sha1":"bcd9b9cd1cc5de30b234888c49738613500d7511","Message":"feat(console): 支持应用、登录客户端与资源类型名称\n\n应用登记原先只能填写代码,登录客户端和资源类型也只有代码,角色标签显示的是「应用管理员 · sales」这类代码。后端已补齐三类名称的写入与读取,控制台同步接入。\n\n实现内容:\n- 应用:登记时名称与代码都必填,提交 displayName;概况页「基本信息」增加设置/修改名称(读取应用版本,归档应用不提供入口);应用列表可按名称或代码搜索\n- 角色标签、工作台、企业切换器与平台入口提示改用 application_name,旧后端未返回时回退为应用代码;权限与路由仍以 application_id 为准\n- 登录客户端:创建时可选填名称(留空不提交该字段);列表以名称为主、代码为辅;详情可就地设置、修改或清除名称(清除提交 null,使用客户端版本)\n- 资源类型:添加资源规则时可选填名称;规则标题以名称为主,可就地改名,改名使用资源类型自己的 name_version,旧后端没有 name_version 时不提供改名;企业侧数据范围与选项显示「名称(代码)」\n- 新增 InlineNameEditor(就地展开的改名表单)与 codeWithName 展示工具\n\n验证:\n- npm run check:格式、lint、类型检查通过,33 个测试文件 293 项测试通过,构建成功\n- 新增 display-names.test.tsx 共 8 项:角色标签回退、可选名称校验、应用登记与改名请求体、客户端创建可选名称与清除名称、资源规则名称提交与按 name_version 改名\n- 未与真实后端联调,未做浏览器检查\n\nBREAKING CHANGE: 登记应用请求新增必填 displayName,须与 V33 及对应后端同时发布\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T19:57:20-07:00"},{"Sha1":"873358da99c3ab27ed78c5f4c87edba00229b960","Message":"feat(console): 邀请时填写姓名并支持本人与平台修改姓名\n\n新账号的姓名原先固定为「成员」,成员列表、所有账号等处只能靠成员代码区分。后端已支持邀请时填写姓名、本人改名和平台代改,控制台同步接入。\n\n实现内容:\n- 企业邀请成员、邀请平台管理员均增加必填「姓名」,提交 displayName;待接受的平台邀请以姓名为主、邮箱为辅显示,旧邀请没有姓名时只显示邮箱\n- 个人中心增加「修改姓名」,读取 /api/v1/me 的 version 提交;display_name_set=false 时提示确认姓名,输入框不预填默认名称,成功后用回执更新会话身份\n- 「所有账号」详情增加「更正姓名」,展开时重新读取账号版本,已归档账号不提供入口;企业侧不提供代改\n- 成员列表与设置所有者的搜索改为可按姓名或成员代码搜索;姓名未确认的成员和账号在列表与详情中标出\n- 企业改名弹窗抽成通用 NameEditor(必填/可选、提交 { displayName, version },409 保留草稿),名称校验抽成 nameError,规则仍为 1—160 个 Unicode 字符、拒绝控制字符与行/段落分隔符\n\n验证:\n- npm run check:格式、lint、类型检查通过,32 个测试文件 285 项测试通过,构建成功\n- 新增用例覆盖两类邀请的姓名必填与请求体、按姓名搜索与未确认标记、本人确认姓名、平台更正姓名及版本来源、归档账号无入口\n- 未与真实后端联调,未做浏览器检查\n\nBREAKING CHANGE: 两类邀请请求新增必填 displayName,须与 V33 及对应后端同时发布\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T19:52:20-07:00"}],"HeadCommit":{"Sha1":"36fd0536408149355981d06096633ca3249a035e","Message":"feat: 合并成员姓名、应用、登录客户端与资源类型名称\n\n用户测试时发现成员只有成员代码、应用登记只有应用代码,登录客户端和资源类型也只有代码。本次把四项名称的后端实现与前端接入一起合入 main。\n\n实现内容:\n- 后端(feat/display-names):两类邀请必填 displayName,新账号使用邀请姓名、已有账号不覆盖;本人与平台管理员可改姓名(带账号版本,不影响会话与授权),历史默认姓名标记 display_name_set=false;成员列表可按姓名搜索;应用登记必填名称并可改名,管理角色返回 application_name;登录客户端与资源类型新增可选名称及改名接口(资源类型使用独立 name_version);V33 迁移\n- 前端:两类邀请表单加姓名;个人中心确认/修改姓名,所有账号可更正姓名;应用登记填写名称、概况页改名,角色标签与切换器显示应用名称;客户端与资源规则可设置、修改、清除名称,企业侧数据范围显示资源类型名称\n\n验证:\n- 后端:Codex 在功能分支上执行定向 verify,237 项单元测试与 142 项集成测试通过,同步 main 0200f78 后复验 1 项单元测试与 19 项集成测试通过(见交接文档 docs/console/display-names-handoff.md)\n- 前端:npm run check 通过,测试 293 项\n- 合并前核对 main 新增的 P12 提交 f8a1e54、b892d79 与本次合并内容没有共同修改的文件,也没有新增迁移;合并后未重新运行后端测试\n- 未做浏览器检查,未与真实后端联调\n\nBREAKING CHANGE: 企业邀请、平台管理员邀请与应用登记必须提供 displayName,前后端需同时发布;部署前先执行 V33 迁移。\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T20:00:56-07:00"},"CompareURL":"pengzhiyu/IAM/compare/d2ff1f1d1423e14426de9db677c5239376cec6a8...36fd0536408149355981d06096633ca3249a035e","Len":9}...
|
1792119824
|
Edit
Delete
|
|
38507
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"36fd05364 {"Commits":[{"Sha1":"36fd0536408149355981d06096633ca3249a035e","Message":"feat: 合并成员姓名、应用、登录客户端与资源类型名称\n\n用户测试时发现成员只有成员代码、应用登记只有应用代码,登录客户端和资源类型也只有代码。本次把四项名称的后端实现与前端接入一起合入 main。\n\n实现内容:\n- 后端(feat/display-names):两类邀请必填 displayName,新账号使用邀请姓名、已有账号不覆盖;本人与平台管理员可改姓名(带账号版本,不影响会话与授权),历史默认姓名标记 display_name_set=false;成员列表可按姓名搜索;应用登记必填名称并可改名,管理角色返回 application_name;登录客户端与资源类型新增可选名称及改名接口(资源类型使用独立 name_version);V33 迁移\n- 前端:两类邀请表单加姓名;个人中心确认/修改姓名,所有账号可更正姓名;应用登记填写名称、概况页改名,角色标签与切换器显示应用名称;客户端与资源规则可设置、修改、清除名称,企业侧数据范围显示资源类型名称\n\n验证:\n- 后端:Codex 在功能分支上执行定向 verify,237 项单元测试与 142 项集成测试通过,同步 main 0200f78 后复验 1 项单元测试与 19 项集成测试通过(见交接文档 docs/console/display-names-handoff.md)\n- 前端:npm run check 通过,测试 293 项\n- 合并前核对 main 新增的 P12 提交 f8a1e54、b892d79 与本次合并内容没有共同修改的文件,也没有新增迁移;合并后未重新运行后端测试\n- 未做浏览器检查,未与真实后端联调\n\nBREAKING CHANGE: 企业邀请、平台管理员邀请与应用登记必须提供 displayName,前后端需同时发布;部署前先执行 V33 迁移。\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T20:00:56-07:00"},{"Sha1":"b892d7971af67f4f48c971d89b1a96f4c27d9249","Message":"test(capacity): 驱动支持恢复合同统计、专用报告与受控拥塞诊断\n\n容量驱动原来把任何刷新 503 都记为会话不可用,本地也没有办法制造真实的入口名额占满。本提交合入隔离实验中的驱动恢复选项、专用报告与拥塞辅助;正式容量命令默认路径不变。\n\n实现内容:\n- CapacityDriver 新增默认关闭的恢复选项:仅原 token 端点的完整响应可判定未执行,响应头、长度或 chunk 合同不明确时不授予重试资格;每次刷新最多两次串行尝试、25ms 退避、250ms 预算;原始 503、额外尝试、额外 HTTP 与台账父子耗时分别计入样本与汇总;私有轮换台账按 pending/completed/not_started 配对并 force 落盘,未知 pending 永不被后续记录洗白\n- 新增 CapacityRefreshRecovery(台账状态机与合同判定)、CapacityRecoveryEvidence、CapacityRecoveryExperimentDriver(只通过显式构造器开启恢复的计划入口)以及 CapacityRefreshRecoveryTest 15、CapacityRecoveryStatisticsTest 3;RefreshRecoveryContractIT 用真实双实例与数据库屏障验证 503→200 且旧令牌只消费一次,撤权/到期/已消费/回滚仍按原规则\n- scripts/capacity:recovery_report.py 严格复算恢复样本(业务成功、原始拒绝、额外 HTTP 分别计账,样本/汇总/存量三方对账);http_report.py 对恢复合同样本按设计拒绝;environment.py 与 round.py 新增 --driver-main 白名单;prepare.py 编译清单加入新驱动类;round.py --congestion 与 congestion.py 按日程持有部署独占屏障制造真实入口拥塞(持有 50–1000ms、最多 60 窗口、失败即停);README 补充说明\n- 工具测试:test_recovery_report 28、test_congestion 9、test_tools 新增 2\n\n验证:\n- PYTHONDONTWRITEBYTECODE=1 python3 -I -m unittest discover -s scripts/capacity -p 'test_*.py':66 项通过\n- 单元 283 项与集成回归同上一提交,在同一工作树上执行:12 个类 134 项通过,0 失败(ProtocolIT 14、AttackProtectionIT 12、MachineBudgetIT 6、AuthIngressLifecycleIT 6、AuthIngressConservativeIT 1、AuthIngressTimeContractIT 1、RefreshRecoveryContractIT 5、SdkRefreshRecoveryIT 8、DualApplicationsIT 23、RefreshExpiryLifecycleIT 23、ScopedLifecycleIT 9、SessionLifecycleIT 26),335 秒\n- 本地对照证据见未入库的 release/p12-recovery-contrast-local-20261015-b80658e8(低负载零 503)与 release/p12-congestion-recovery-local-20261015-b9411306(真实 503 下恢复率 21.9%、会话零丢失)\n- 未运行云端容量验收\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T19:59:08-07:00"},{"Sha1":"f8a1e548ef6adf50a225636d7005b3f13cb259da","Message":"feat(protocol): 入口名额拒绝返回未执行标记并由 SDK 有界重试一次\n\n每实例 8 个协议入口名额占满时 POST /oauth2/token 立即 503,客户端无法区分“业务未开始”与“结果未知”,只能丢弃会话重新登录;E2d 云测 30 次此类拒绝使原始可用会话 19970/20000,正式测量未开始。本提交把隔离候选的恢复合同合入主区:服务端只在该分支标记未执行,SDK 据此最多再试一次,其余失败语义不变。\n\n实现内容:\n- AttackProtectionConfiguration:仅 POST /oauth2/token 的 tryAcquire 失败分支,在调用过滤链之前加响应头 IAM-Request-Outcome: not-started-v1;状态 503、Cache-Control: no-store 与正文 {\"error\":\"server_error\"} 不变,/internal/protocol/* 与其他 503 不带标记,名额数与释放逻辑不变\n- iam-java-sdk 新增 RefreshRecovery:只有状态、唯一头、no-store 与固定正文(多读一字节)全部匹配才判定未执行;同一会话串行,最多额外一次,退避 25ms,第二次须在首次发起后 250ms 内发出,每次发起前重查撤销/绝对/闲置期限;BffSessions 第二次仍未执行时保留原代与 lastUse 并返回 503 TOKEN_REQUEST_NOT_STARTED,未知结果、invalid_grant、验签失败仍结束会话\n- 测试:RefreshRecoveryTest 15 项(真实 Spring 协议解析加模拟 HTTP)、IngressOutcomeContractTest(八名额占满时只有拒绝分支带标记且名额全部归还)、SdkRefreshRecoveryIT(真实 Java SDK、浏览器、双 IAM 与数据库屏障:单次/两次拒绝后恢复、撤销/到期/已消费拒绝、提交后丢响应不重放、本地闲置不发第二次)及支撑类 SdkRecoveryTestBridge、SdkLoginDiagnostics、SdkTestClock;测试签名密钥改为 3072 位与生产一致\n- 文档:attack-protection.md 新增“P12 入口拒绝的明确未执行标记”,sdk.md 新增“P12 明确未执行的刷新恢复”并修正刷新尝试次数描述\n\n验证(在同时含后续 test(capacity) 提交内容的同一工作树上执行):\n- ./mvnw -o -B -ntp -pl iam-key-security,iam-java-sdk,iam-server -am test:6 个模块 283 项单元测试通过\n- ./mvnw -o -B -ntp -pl iam-server -am verify -Dit.test=SdkRefreshRecoveryIT,RefreshRecoveryContractIT,AuthIngressLifecycleIT,AuthIngressConservativeIT,AuthIngressTimeContractIT,AttackProtectionIT,MachineBudgetIT,RefreshExpiryLifecycleIT,ScopedLifecycleIT,SessionLifecycleIT,DualApplicationsIT,ProtocolIT(含 spotless:check):12 个类 134 项通过,0 失败(ProtocolIT 14、AttackProtectionIT 12、MachineBudgetIT 6、AuthIngressLifecycleIT 6、AuthIngressConservativeIT 1、AuthIngressTimeContractIT 1、RefreshRecoveryContractIT 5、SdkRefreshRecoveryIT 8、DualApplicationsIT 23、RefreshExpiryLifecycleIT 23、ScopedLifecycleIT 9、SessionLifecycleIT 26),335 秒\n- 本提交单独检出到临时工作树执行 ./mvnw -o -B -ntp -pl iam-server,iam-java-sdk -am test-compile:通过\n- 本地证据见未入库的 release/p12-id-clock-sdk-recovery-local-20261015-87b969eb 与 release/p12-congestion-recovery-local-20261015-b9411306(受控拥塞下开启组 228 次拒绝全部确认未执行、恢复 50 次、会话零丢失)\n- 未运行云端容量验收,P12 正式门槛未变\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T19:58:41-07:00"},{"Sha1":"bcd9b9cd1cc5de30b234888c49738613500d7511","Message":"feat(console): 支持应用、登录客户端与资源类型名称\n\n应用登记原先只能填写代码,登录客户端和资源类型也只有代码,角色标签显示的是「应用管理员 · sales」这类代码。后端已补齐三类名称的写入与读取,控制台同步接入。\n\n实现内容:\n- 应用:登记时名称与代码都必填,提交 displayName;概况页「基本信息」增加设置/修改名称(读取应用版本,归档应用不提供入口);应用列表可按名称或代码搜索\n- 角色标签、工作台、企业切换器与平台入口提示改用 application_name,旧后端未返回时回退为应用代码;权限与路由仍以 application_id 为准\n- 登录客户端:创建时可选填名称(留空不提交该字段);列表以名称为主、代码为辅;详情可就地设置、修改或清除名称(清除提交 null,使用客户端版本)\n- 资源类型:添加资源规则时可选填名称;规则标题以名称为主,可就地改名,改名使用资源类型自己的 name_version,旧后端没有 name_version 时不提供改名;企业侧数据范围与选项显示「名称(代码)」\n- 新增 InlineNameEditor(就地展开的改名表单)与 codeWithName 展示工具\n\n验证:\n- npm run check:格式、lint、类型检查通过,33 个测试文件 293 项测试通过,构建成功\n- 新增 display-names.test.tsx 共 8 项:角色标签回退、可选名称校验、应用登记与改名请求体、客户端创建可选名称与清除名称、资源规则名称提交与按 name_version 改名\n- 未与真实后端联调,未做浏览器检查\n\nBREAKING CHANGE: 登记应用请求新增必填 displayName,须与 V33 及对应后端同时发布\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T19:57:20-07:00"},{"Sha1":"873358da99c3ab27ed78c5f4c87edba00229b960","Message":"feat(console): 邀请时填写姓名并支持本人与平台修改姓名\n\n新账号的姓名原先固定为「成员」,成员列表、所有账号等处只能靠成员代码区分。后端已支持邀请时填写姓名、本人改名和平台代改,控制台同步接入。\n\n实现内容:\n- 企业邀请成员、邀请平台管理员均增加必填「姓名」,提交 displayName;待接受的平台邀请以姓名为主、邮箱为辅显示,旧邀请没有姓名时只显示邮箱\n- 个人中心增加「修改姓名」,读取 /api/v1/me 的 version 提交;display_name_set=false 时提示确认姓名,输入框不预填默认名称,成功后用回执更新会话身份\n- 「所有账号」详情增加「更正姓名」,展开时重新读取账号版本,已归档账号不提供入口;企业侧不提供代改\n- 成员列表与设置所有者的搜索改为可按姓名或成员代码搜索;姓名未确认的成员和账号在列表与详情中标出\n- 企业改名弹窗抽成通用 NameEditor(必填/可选、提交 { displayName, version },409 保留草稿),名称校验抽成 nameError,规则仍为 1—160 个 Unicode 字符、拒绝控制字符与行/段落分隔符\n\n验证:\n- npm run check:格式、lint、类型检查通过,32 个测试文件 285 项测试通过,构建成功\n- 新增用例覆盖两类邀请的姓名必填与请求体、按姓名搜索与未确认标记、本人确认姓名、平台更正姓名及版本来源、归档账号无入口\n- 未与真实后端联调,未做浏览器检查\n\nBREAKING CHANGE: 两类邀请请求新增必填 displayName,须与 V33 及对应后端同时发布\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T19:52:20-07:00"}],"HeadCommit":{"Sha1":"36fd0536408149355981d06096633ca3249a035e","Message":"feat: 合并成员姓名、应用、登录客户端与资源类型名称\n\n用户测试时发现成员只有成员代码、应用登记只有应用代码,登录客户端和资源类型也只有代码。本次把四项名称的后端实现与前端接入一起合入 main。\n\n实现内容:\n- 后端(feat/display-names):两类邀请必填 displayName,新账号使用邀请姓名、已有账号不覆盖;本人与平台管理员可改姓名(带账号版本,不影响会话与授权),历史默认姓名标记 display_name_set=false;成员列表可按姓名搜索;应用登记必填名称并可改名,管理角色返回 application_name;登录客户端与资源类型新增可选名称及改名接口(资源类型使用独立 name_version);V33 迁移\n- 前端:两类邀请表单加姓名;个人中心确认/修改姓名,所有账号可更正姓名;应用登记填写名称、概况页改名,角色标签与切换器显示应用名称;客户端与资源规则可设置、修改、清除名称,企业侧数据范围显示资源类型名称\n\n验证:\n- 后端:Codex 在功能分支上执行定向 verify,237 项单元测试与 142 项集成测试通过,同步 main 0200f78 后复验 1 项单元测试与 19 项集成测试通过(见交接文档 docs/console/display-names-handoff.md)\n- 前端:npm run check 通过,测试 293 项\n- 合并前核对 main 新增的 P12 提交 f8a1e54、b892d79 与本次合并内容没有共同修改的文件,也没有新增迁移;合并后未重新运行后端测试\n- 未做浏览器检查,未与真实后端联调\n\nBREAKING CHANGE: 企业邀请、平台管理员邀请与应用登记必须提供 displayName,前后端需同时发布;部署前先执行 V33 迁移。\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T20:00:56-07:00"},"CompareURL":"pengzhiyu/IAM/compare/d2ff1f1d1423e14426de9db677c5239376cec6a8...36fd0536408149355981d06096633ca3249a035e","Len":9}...
|
1792119771
|
Edit
Delete
|
|
38474
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/feat/console-layout
|
0
|
{"Commits":[{"Sha1":"d2ff1f1d1 {"Commits":[{"Sha1":"d2ff1f1d1423e14426de9db677c5239376cec6a8","Message":"feat: 合并企业名称、邀请弹窗修复与平台管理员邀请\n\n用户测试时发现三个问题:开通企业没有名称输入项;未配置邮件服务时邀请弹窗关不掉;平台侧无法增加第二位平台管理员。本次把后端实现与前端接入一起合入 main。\n\n实现内容:\n- 后端(feat/tenant-name-platform-invite):开通企业时必填 displayName,平台管理员与企业所有者可以改名,企业搜索同时匹配名称;/api/v1/me 返回 mail_delivery_available,并明确 MAIL_UNAVAILABLE 一定回滚;新增平台级邮箱邀请、待接受列表与撤销(V31、V32)\n- 前端:开通弹窗加名称,平台详情页与企业概览可以改名;确定失败的邮件错误码不再锁定弹窗,结果不确定时提供「关闭,稍后核对」,邮件不可用时提前置灰邀请;平台管理员页新增邮箱邀请与待接受邀请列表,激活页文案改为「接受邀请」\n\n验证:\n- 后端:Codex 在功能分支上执行定向 verify,10 个集成测试类共 93 项及服务器单元测试 157 项通过(见交接文档 docs/console/tenant-name-platform-invite-handoff.md)\n- 前端:npm run check 通过,测试 279 项\n- 浏览器只用页面内模拟接口验证,未与真实后端联调,未验证真实邮件投递;合并后未重新运行后端测试\n\nBREAKING CHANGE: POST /api/v1/platform/tenants 必须提供 displayName,前后端需同时发布;部署前先执行 V31、V32 迁移。\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T18:54:10-07:00"},{"Sha1":"1079b27dfca2ad1535dbab213431ca3895478780","Message":"feat(console): 支持按邮箱邀请平台管理员\n\n平台管理员原先只能从已有账号中添加,而新账号只能通过企业邀请产生,导致想增加平台管理员必须先把对方拉进某家企业,没有邮件服务时则根本加不了。后端已提供平台级邀请,前端随之接入。\n\n实现内容:\n- 平台管理员页新增「邀请管理员」(主要入口),原「添加管理员」在平台侧改名为「添加已有账号」并说明适用场景\n- 邀请表单:邮箱、管理职责(不预选,平台管理员或应用管理员)、应用管理员的负责应用、生效与截止时间、确认勾选;邮件不可用时说明原因并禁用表单\n- 后端错误码分别说明:SELF_INVITATION、INVALID_INPUT、INVITATION_PENDING、INVITATION_NOT_APPLICABLE、LIMIT_EXCEEDED;冲突后「重新填写」并刷新待接受列表\n- 新增「待接受的邀请」列表:邮箱、管理职责与应用名称、邀请有效期,管理职责已过截止时间的标注提示;可按读到的版本撤销,409 时关闭并刷新列表\n- WriteError 新增 conflictAction,允许新建类表单改写冲突按钮文字\n- 激活页与登录页文案改为通用的「接受邀请」,成功提示说明含管理职责时需要按提示开通两步验证\n\n验证:\n- npm run check(格式、lint、类型检查、测试、构建):通过,测试 279 项,含新增 platform-invitations.test.tsx 5 项\n- 浏览器(Vite + 页面内模拟接口):发送邀请后列表新增记录;邮件不可用时表单禁用并显示说明\n- 未与真实后端联调,未验证真实邮件投递与收件人接受邀请流程\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T17:43:58-07:00"},{"Sha1":"18ddef4d5ee7662de116717dc7970482b123e033","Message":"feat(console): 开通企业时填写名称并支持修改企业名称\n\n开通企业原先只能填企业代码,之后各处只能靠代码辨认企业。后端已支持开通时必填 displayName、平台管理员与企业所有者改名,前端随之接入。\n\n实现内容:\n- 开通企业弹窗新增必填「企业名称」,按后端同样的规则预检(去首尾空白后 1—160 个 Unicode 字符,拒绝控制字符与行、段落分隔符),提交时去掉首尾空白;成功卡片显示企业名称\n- 平台企业详情「基本信息」提供「设置名称 / 修改名称」,已归档企业不提供入口\n- 企业概览页头仅对本企业所有者显示改名入口;企业版本取自 GET /api/v1/me/tenants/{tenant} 的 tenant_version,缺失时不提交\n- 两处共用 TenantNameEditor:每次打开重新读取企业版本;409 冲突后重新读取但保留已输入的名称;未命名企业不把代码预填为名称\n- 企业侧改名成功后,就地更新上下文里的企业名称,页头与切换器立即显示新名称,不重新校验整个上下文\n- 企业列表搜索文案改为「搜索企业名称或代码」,操作记录新增 tenant.renamed 的「修改企业名称」标签\n\n验证:\n- 本提交暂存快照 npx tsc -b --noEmit、npx eslint .、npx prettier --check src:通过\n- 本提交暂存快照 npx vitest run:274 项通过,含新增 tenant-name.test.tsx 4 项;tenant-overview.test.tsx 改为包裹 ToastProvider\n- 浏览器(Vite + 页面内模拟接口):开通企业提交 code 与 displayName;未命名企业设置名称后标题更新;所有者改名遇到 409 时保留输入,带新版本重提成功\n- 未与真实后端联调\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T17:43:27-07:00"},{"Sha1":"327cad554ad55a68f628c06f3b486bf54a76184b","Message":"fix(console): 邀请邮件未配置时不再锁死弹窗\n\n未配置邮件服务时,邀请接口返回 503 MAIL_UNAVAILABLE,此时邀请已经整体回滚;但前端把所有 503 都当作结果不确定,锁定表单并禁止关闭,只剩原样重试,邀请弹窗因此关不掉。\n\n实现内容:\n- useMutation 对后端合同保证已回滚的错误码(MAIL_UNAVAILABLE、MAIL_TEST_RECIPIENT_REQUIRED)按确定失败处理:不锁定输入,可以取消和关闭;其余 503、5xx 和网络错误仍按结果不确定处理\n- 业务弹层通过 ForceDismiss 向错误提示提供「关闭,稍后核对」,结果不确定时用户可以显式离开,原样重试仍然保留\n- 两个邮件错误码给出具体说明:邀请没有发出也没有保存,或只能邀请 .test 邮箱\n- /api/v1/me 的 mail_delivery_available 为 false 时,成员页置灰「邀请成员」并在列表上方说明原因;字段缺失时按可用处理\n\n验证:\n- 本提交暂存快照 npx tsc -b --noEmit、npx eslint .、npx prettier --check src:通过\n- 本提交暂存快照 npx vitest run:270 项通过,含新增 write-dismiss.test.tsx 4 项\n- 浏览器(Vite + 页面内模拟接口):成员邀请遇到通用 503 时可用「关闭,稍后核对」关闭;MAIL_UNAVAILABLE 时输入不锁定、可以取消;邮件不可用时邀请按钮置灰并显示说明\n- 未与真实后端联调\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T17:42:56-07:00"},{"Sha1":"e2c4a59663c315cfdfc12159c26306a8f32859ae","Message":"merge: 合入企业名称、邀请邮件能力与平台管理员邀请后端\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T17:24:35-07:00"}],"HeadCommit":{"Sha1":"d2ff1f1d1423e14426de9db677c5239376cec6a8","Message":"feat: 合并企业名称、邀请弹窗修复与平台管理员邀请\n\n用户测试时发现三个问题:开通企业没有名称输入项;未配置邮件服务时邀请弹窗关不掉;平台侧无法增加第二位平台管理员。本次把后端实现与前端接入一起合入 main。\n\n实现内容:\n- 后端(feat/tenant-name-platform-invite):开通企业时必填 displayName,平台管理员与企业所有者可以改名,企业搜索同时匹配名称;/api/v1/me 返回 mail_delivery_available,并明确 MAIL_UNAVAILABLE 一定回滚;新增平台级邮箱邀请、待接受列表与撤销(V31、V32)\n- 前端:开通弹窗加名称,平台详情页与企业概览可以改名;确定失败的邮件错误码不再锁定弹窗,结果不确定时提供「关闭,稍后核对」,邮件不可用时提前置灰邀请;平台管理员页新增邮箱邀请与待接受邀请列表,激活页文案改为「接受邀请」\n\n验证:\n- 后端:Codex 在功能分支上执行定向 verify,10 个集成测试类共 93 项及服务器单元测试 157 项通过(见交接文档 docs/console/tenant-name-platform-invite-handoff.md)\n- 前端:npm run check 通过,测试 279 项\n- 浏览器只用页面内模拟接口验证,未与真实后端联调,未验证真实邮件投递;合并后未重新运行后端测试\n\nBREAKING CHANGE: POST /api/v1/platform/tenants 必须提供 displayName,前后端需同时发布;部署前先执行 V31、V32 迁移。\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T18:54:10-07:00"},"CompareURL":"pengzhiyu/IAM/compare/1bcbe8d10af01d2081b561a4531c4549a72387bd...d2ff1f1d1423e14426de9db677c5239376cec6a8","Len":12}...
|
1792116394
|
Edit
Delete
|
|
38473
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"d2ff1f1d1 {"Commits":[{"Sha1":"d2ff1f1d1423e14426de9db677c5239376cec6a8","Message":"feat: 合并企业名称、邀请弹窗修复与平台管理员邀请\n\n用户测试时发现三个问题:开通企业没有名称输入项;未配置邮件服务时邀请弹窗关不掉;平台侧无法增加第二位平台管理员。本次把后端实现与前端接入一起合入 main。\n\n实现内容:\n- 后端(feat/tenant-name-platform-invite):开通企业时必填 displayName,平台管理员与企业所有者可以改名,企业搜索同时匹配名称;/api/v1/me 返回 mail_delivery_available,并明确 MAIL_UNAVAILABLE 一定回滚;新增平台级邮箱邀请、待接受列表与撤销(V31、V32)\n- 前端:开通弹窗加名称,平台详情页与企业概览可以改名;确定失败的邮件错误码不再锁定弹窗,结果不确定时提供「关闭,稍后核对」,邮件不可用时提前置灰邀请;平台管理员页新增邮箱邀请与待接受邀请列表,激活页文案改为「接受邀请」\n\n验证:\n- 后端:Codex 在功能分支上执行定向 verify,10 个集成测试类共 93 项及服务器单元测试 157 项通过(见交接文档 docs/console/tenant-name-platform-invite-handoff.md)\n- 前端:npm run check 通过,测试 279 项\n- 浏览器只用页面内模拟接口验证,未与真实后端联调,未验证真实邮件投递;合并后未重新运行后端测试\n\nBREAKING CHANGE: POST /api/v1/platform/tenants 必须提供 displayName,前后端需同时发布;部署前先执行 V31、V32 迁移。\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T18:54:10-07:00"},{"Sha1":"1079b27dfca2ad1535dbab213431ca3895478780","Message":"feat(console): 支持按邮箱邀请平台管理员\n\n平台管理员原先只能从已有账号中添加,而新账号只能通过企业邀请产生,导致想增加平台管理员必须先把对方拉进某家企业,没有邮件服务时则根本加不了。后端已提供平台级邀请,前端随之接入。\n\n实现内容:\n- 平台管理员页新增「邀请管理员」(主要入口),原「添加管理员」在平台侧改名为「添加已有账号」并说明适用场景\n- 邀请表单:邮箱、管理职责(不预选,平台管理员或应用管理员)、应用管理员的负责应用、生效与截止时间、确认勾选;邮件不可用时说明原因并禁用表单\n- 后端错误码分别说明:SELF_INVITATION、INVALID_INPUT、INVITATION_PENDING、INVITATION_NOT_APPLICABLE、LIMIT_EXCEEDED;冲突后「重新填写」并刷新待接受列表\n- 新增「待接受的邀请」列表:邮箱、管理职责与应用名称、邀请有效期,管理职责已过截止时间的标注提示;可按读到的版本撤销,409 时关闭并刷新列表\n- WriteError 新增 conflictAction,允许新建类表单改写冲突按钮文字\n- 激活页与登录页文案改为通用的「接受邀请」,成功提示说明含管理职责时需要按提示开通两步验证\n\n验证:\n- npm run check(格式、lint、类型检查、测试、构建):通过,测试 279 项,含新增 platform-invitations.test.tsx 5 项\n- 浏览器(Vite + 页面内模拟接口):发送邀请后列表新增记录;邮件不可用时表单禁用并显示说明\n- 未与真实后端联调,未验证真实邮件投递与收件人接受邀请流程\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T17:43:58-07:00"},{"Sha1":"18ddef4d5ee7662de116717dc7970482b123e033","Message":"feat(console): 开通企业时填写名称并支持修改企业名称\n\n开通企业原先只能填企业代码,之后各处只能靠代码辨认企业。后端已支持开通时必填 displayName、平台管理员与企业所有者改名,前端随之接入。\n\n实现内容:\n- 开通企业弹窗新增必填「企业名称」,按后端同样的规则预检(去首尾空白后 1—160 个 Unicode 字符,拒绝控制字符与行、段落分隔符),提交时去掉首尾空白;成功卡片显示企业名称\n- 平台企业详情「基本信息」提供「设置名称 / 修改名称」,已归档企业不提供入口\n- 企业概览页头仅对本企业所有者显示改名入口;企业版本取自 GET /api/v1/me/tenants/{tenant} 的 tenant_version,缺失时不提交\n- 两处共用 TenantNameEditor:每次打开重新读取企业版本;409 冲突后重新读取但保留已输入的名称;未命名企业不把代码预填为名称\n- 企业侧改名成功后,就地更新上下文里的企业名称,页头与切换器立即显示新名称,不重新校验整个上下文\n- 企业列表搜索文案改为「搜索企业名称或代码」,操作记录新增 tenant.renamed 的「修改企业名称」标签\n\n验证:\n- 本提交暂存快照 npx tsc -b --noEmit、npx eslint .、npx prettier --check src:通过\n- 本提交暂存快照 npx vitest run:274 项通过,含新增 tenant-name.test.tsx 4 项;tenant-overview.test.tsx 改为包裹 ToastProvider\n- 浏览器(Vite + 页面内模拟接口):开通企业提交 code 与 displayName;未命名企业设置名称后标题更新;所有者改名遇到 409 时保留输入,带新版本重提成功\n- 未与真实后端联调\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T17:43:27-07:00"},{"Sha1":"327cad554ad55a68f628c06f3b486bf54a76184b","Message":"fix(console): 邀请邮件未配置时不再锁死弹窗\n\n未配置邮件服务时,邀请接口返回 503 MAIL_UNAVAILABLE,此时邀请已经整体回滚;但前端把所有 503 都当作结果不确定,锁定表单并禁止关闭,只剩原样重试,邀请弹窗因此关不掉。\n\n实现内容:\n- useMutation 对后端合同保证已回滚的错误码(MAIL_UNAVAILABLE、MAIL_TEST_RECIPIENT_REQUIRED)按确定失败处理:不锁定输入,可以取消和关闭;其余 503、5xx 和网络错误仍按结果不确定处理\n- 业务弹层通过 ForceDismiss 向错误提示提供「关闭,稍后核对」,结果不确定时用户可以显式离开,原样重试仍然保留\n- 两个邮件错误码给出具体说明:邀请没有发出也没有保存,或只能邀请 .test 邮箱\n- /api/v1/me 的 mail_delivery_available 为 false 时,成员页置灰「邀请成员」并在列表上方说明原因;字段缺失时按可用处理\n\n验证:\n- 本提交暂存快照 npx tsc -b --noEmit、npx eslint .、npx prettier --check src:通过\n- 本提交暂存快照 npx vitest run:270 项通过,含新增 write-dismiss.test.tsx 4 项\n- 浏览器(Vite + 页面内模拟接口):成员邀请遇到通用 503 时可用「关闭,稍后核对」关闭;MAIL_UNAVAILABLE 时输入不锁定、可以取消;邮件不可用时邀请按钮置灰并显示说明\n- 未与真实后端联调\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T17:42:56-07:00"},{"Sha1":"e2c4a59663c315cfdfc12159c26306a8f32859ae","Message":"merge: 合入企业名称、邀请邮件能力与平台管理员邀请后端\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T17:24:35-07:00"}],"HeadCommit":{"Sha1":"d2ff1f1d1423e14426de9db677c5239376cec6a8","Message":"feat: 合并企业名称、邀请弹窗修复与平台管理员邀请\n\n用户测试时发现三个问题:开通企业没有名称输入项;未配置邮件服务时邀请弹窗关不掉;平台侧无法增加第二位平台管理员。本次把后端实现与前端接入一起合入 main。\n\n实现内容:\n- 后端(feat/tenant-name-platform-invite):开通企业时必填 displayName,平台管理员与企业所有者可以改名,企业搜索同时匹配名称;/api/v1/me 返回 mail_delivery_available,并明确 MAIL_UNAVAILABLE 一定回滚;新增平台级邮箱邀请、待接受列表与撤销(V31、V32)\n- 前端:开通弹窗加名称,平台详情页与企业概览可以改名;确定失败的邮件错误码不再锁定弹窗,结果不确定时提供「关闭,稍后核对」,邮件不可用时提前置灰邀请;平台管理员页新增邮箱邀请与待接受邀请列表,激活页文案改为「接受邀请」\n\n验证:\n- 后端:Codex 在功能分支上执行定向 verify,10 个集成测试类共 93 项及服务器单元测试 157 项通过(见交接文档 docs/console/tenant-name-platform-invite-handoff.md)\n- 前端:npm run check 通过,测试 279 项\n- 浏览器只用页面内模拟接口验证,未与真实后端联调,未验证真实邮件投递;合并后未重新运行后端测试\n\nBREAKING CHANGE: POST /api/v1/platform/tenants 必须提供 displayName,前后端需同时发布;部署前先执行 V31、V32 迁移。\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T18:54:10-07:00"},"CompareURL":"pengzhiyu/IAM/compare/972164fbd3e90b74e1c6f61434ddc8b0db52fc65...d2ff1f1d1423e14426de9db677c5239376cec6a8","Len":10}...
|
1792116375
|
Edit
Delete
|
|
38291
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"972164fbd {"Commits":[{"Sha1":"972164fbd3e90b74e1c6f61434ddc8b0db52fc65","Message":"docs: 补齐 P12 诊断历史和退出通知避锁设计\n\n补齐原两份任务文档的累计进展,保留历史失败与未验收事项,明确最新方案尚未实施。\n\n实现内容:\n- 记录 E2a 至 E2d 的冻结身份、实际诊断结果及失败边界\n- 记录编码实验暂停、入口拥塞离线归因、短等待验证和固定短峰结果\n- 补齐生命周期锁审查及退出通知空轮询安全设计,列出 22 项待执行用例\n- 明确投递延迟、查询超时、连接归还与原事务重查边界\n\n验证:\n- git diff --check 与新增内容敏感模式检查通过\n- 冻结候选摘要及最新设计交付的 15 项文件清单核对通过\n- 本次仅提交文档,没有重新运行产品测试、数据库或负载\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T00:12:18-07:00"},{"Sha1":"bd1023293fa824517ba91072a006c3da5e4a737b","Message":"chore: 忽略 P12 本地编码实验失败现场\n\n保留原失败目录及证据,避免将交付脚本、临时结果误纳入产品源码。\n\n实现内容:\n- 仅忽略 scripts/p12-encode-local-20261014-46ce41f 目录\n- 继续沿用已有 release 忽略规则,不移动或删除旧证据\n\n验证:\n- git check-ignore 确认两个交付目录被忽略\n- git diff --check 通过;本批不涉及可运行代码\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T00:11:50-07:00"}],"HeadCommit":{"Sha1":"972164fbd3e90b74e1c6f61434ddc8b0db52fc65","Message":"docs: 补齐 P12 诊断历史和退出通知避锁设计\n\n补齐原两份任务文档的累计进展,保留历史失败与未验收事项,明确最新方案尚未实施。\n\n实现内容:\n- 记录 E2a 至 E2d 的冻结身份、实际诊断结果及失败边界\n- 记录编码实验暂停、入口拥塞离线归因、短等待验证和固定短峰结果\n- 补齐生命周期锁审查及退出通知空轮询安全设计,列出 22 项待执行用例\n- 明确投递延迟、查询超时、连接归还与原事务重查边界\n\n验证:\n- git diff --check 与新增内容敏感模式检查通过\n- 冻结候选摘要及最新设计交付的 15 项文件清单核对通过\n- 本次仅提交文档,没有重新运行产品测试、数据库或负载\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-15T00:12:18-07:00"},"CompareURL":"pengzhiyu/IAM/compare/1bcbe8d10af01d2081b561a4531c4549a72387bd...972164fbd3e90b74e1c6f61434ddc8b0db52fc65","Len":2}...
|
1792048606
|
Edit
Delete
|
|
38139
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/feat/console-layout
|
0
|
{"Commits":[{"Sha1":"1bcbe8d10 {"Commits":[{"Sha1":"1bcbe8d10af01d2081b561a4531c4549a72387bd","Message":"feat(console): 合并控制台质感改造前四批\n\n合并 feat/console-layout 上的控制台质感改造第 1–4 批及随附修正:壳层精简、命令面板、目录工具栏精简与第一组动效。\n\n实现内容:\n- 删除禁止渐变与禁止逐行入场的设计规则(d206928)\n- 面包屑并入顶栏、侧栏当前页滑块与虚线上下文选择按钮(a3fea08),滑块在画面暂停与侧栏滚动变化后的错位修正(5ee785b)\n- ⌘K 命令面板(d2cd40b),窄屏上下文带焦点环裁切修正(9b28da3)\n- 列表行高统一与同行提示(93a5496)\n- 目录工具栏改为搜索框、状态分段切换、刷新图标与更多操作菜单(cf32ed3)\n- 标签页内容间距、滚动条消失导致的页面跳动及弹层锁定重复补偿修正(77f8300、0d4c13b)\n- 数字滚动、骨架交叉淡入、保存按钮「已保存」变形与通知叠放(9653ba1)\n- 开通企业统计测试随运行时间误报的修正(d25fdbf)\n\n验证:\n- 分支最新提交上 npm run check:格式、lint、类型检查通过,29 个测试文件 266 项通过,构建成功\n- main 在分支创建后的新增提交只涉及后端,与本次合并无文件重叠,git merge-tree 无冲突\n- 验收脚本:未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-14T08:15:14-07:00"},{"Sha1":"9653ba1c28cf197bb8f493be032cd9d7017c5b0b","Message":"feat(console): 加入数字滚动、骨架交叉淡入、保存按钮变形与通知叠放\n\n控制台质感改造第 4 批。原先数字直接出现、骨架被内容硬切替换、保存成功只靠右下角通知告知、多条通知竖排挡住右下角内容。本次为这四处加入过渡,请求时机不变。\n\n实现内容:\n- 新增 CountUp:以 @property --count 整数插值、CSS 计数器绘制,挂载时从 0、之后从旧值滚到新值(--dur-count 600ms);读屏与文本读取始终是最终值;只用于平台概览待办数、应用概览可分配权限数与应用开通情况\n- ResourceView 外层改为恒定存在的 display: contents 容器:骨架出现过(等待超过 160ms)的那次加载,骨架残影在原位置模糊淡出、内容淡入;组件首次换上内容时表格前 8 行依次上浮(--stagger-row 40ms);残影只在骨架处于块级容器时出现,已高亮的行不参与\n- useMutation 增加 hold 选项与 saved 状态:成功后停留 SAVED_HOLD_MS(600ms)再执行成功回调,停留中卸载表单立即执行;Button 增加 saved/savedLabel,显示 --success-fill 实底、描画对勾与「已保存」,提交中与已保存时宽度以 WAAPI 过渡;接入 13 处「保存…」按钮(确认启用、确认撤销等按钮不变)\n- 通知改为叠放:后层上移 10px、缩小 5%、与最前一条等高且隐去内容,只露出前 3 层;指针移入或焦点进入时按各自高度展开并暂停全部计时;两个播报区共用叠放顺序\n- 新增令牌 --dur-count、--stagger-row、--success-fill(既有动效令牌未改);authorization-scopes 的 min-width 规则覆盖新外层;motion.md 补充四项动效并登记按钮宽度、通知高度为宽高动画例外\n\n验证:\n- npm run check:格式、lint、类型检查通过,29 个测试文件 266 项通过,构建成功;新增 motion-feedback.test.tsx 5 项(已保存停留与卸载、通知叠放与悬停暂停、骨架换内容的 rows/fade/不播放、数字回退显示)\n- 浏览器实测:sales 应用开通情况数字逐帧采样为 0→1→2;所有账号页延迟读取 700ms 时残影与骨架位置宽度一致并在结束后移除,前 8 行延迟 0–280ms,再次加载只淡入;部门编辑表单在页面内拦截写请求返回成功(未写入演示数据),按钮经提交中到「✓ 已保存」,两次宽度过渡均触发,停留后抽屉关闭并高亮该行;通知在桌面宽度叠放、悬停展开,375 宽暗色下叠放正常且无横向溢出\n- 验收脚本:未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-14T08:14:53-07:00"},{"Sha1":"0d4c13bbd0341fb82dbea0b33c13a3a13d5a3abd","Message":"fix(console): 预留滚动条位置后不再重复补偿弹层锁定宽度\n\n上一提交给根元素设置了 scrollbar-gutter: stable,打开对话框或抽屉锁定滚动时仍按滚动条宽度给 body 加右内边距,页面内容与上下文带右侧的搜索入口会左移 15px。\n\n实现内容:\n- useScrollLock 在浏览器支持 scrollbar-gutter 时补偿值为 0,不支持时沿用原来按滚动条宽度补偿的做法\n- data-scroll-locked 标记与锁定计数不变\n\n验证:\n- 浏览器实测所有账号页(经典滚动条、页面可滚动):打开与关闭账号详情抽屉前后,搜索入口与搜索框位置不变,--scrollbar-compensation 为 0\n- npm run check:格式、lint、类型检查通过,28 个测试文件 261 项通过,构建成功\n- 验收脚本:未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-14T07:57:10-07:00"},{"Sha1":"cf32ed31e26dd552caa280de1996b4f23da1123e","Message":"feat(console): 精简目录工具栏为搜索框与状态分段切换\n\n目录工具条原先由带标签的输入框、状态下拉框、「搜索」按钮、常驻的「清除筛选」和文字刷新按钮组成,占位多且需要两步才能筛选。改为回车即搜索的搜索框、选中即生效的状态分段,次要操作收进图标按钮与菜单。\n\n实现内容:\n- DirectoryFilters 改为带放大镜的搜索框(占位文字即无障碍名称,回车生效,有内容时框内出现「清空搜索内容」);不合规输入不发请求,提示以 role=alert 显示\n- 新增 StatusSegments:原生单选组(名称「状态筛选」),选中即生效并带上当前搜索词,选中白底平移到新选项;counts 只在数据全在前端时传入(可用权限页)\n- 「清除筛选」只在有生效条件时出现,点击后焦点回到搜索框;apply 增加第三个参数 search/status/clear,调用方只在回车搜索时把焦点移到结果区\n- 新增 DirectoryTools:刷新改为图标按钮,次要操作进入「更多操作」菜单;平台企业列表的「按标识打开」收入菜单;新增 more 图标\n- 删除通用的「不区分大小写」提示,有实际信息的说明以一行小字放在工具条下方;窄屏搜索框占满一行,分段可横向滚动并收窄选项间距\n- 成员、平台企业与账号、用户组、操作记录、配置目录、角色权限清单等页面改用新组件;设计规范补充「工具条精简」,动效清单新增「状态分段切换」\n\n验证:\n- npm run check:格式、lint、类型检查通过,28 个测试文件 261 项通过,构建成功;management-integration 新增分段即时生效、清除筛选出现与焦点、清空按钮与不合规输入等用例,application-management、authorization-management 改为回车搜索\n- 浏览器实测企业列表:状态分段立即生效且焦点留在分段,回车搜索后焦点移到结果,搜索词与状态可叠加,清除筛选后恢复并回到搜索框,更多操作菜单含「按标识打开」;可用权限分段数量为全部 5 / 正常 4 / 已停用 1;375 宽暗色下五个状态可放下且页面无横向溢出\n- 验收脚本 acceptance-p10-t01、p10-t02、t02、t03、t04 已同步为回车搜索、点击分段和打开更多操作菜单:未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-14T07:53:14-07:00"},{"Sha1":"77f8300377a586c241661e9e749fbc3fe0f69347","Message":"fix(console): 修复标签页内容贴边与滚动条消失导致的页面跳动\n\n企业详情「成员」「应用」标签里的平台提示条与下方卡片之间没有间距;列表筛选后结果变短、经典滚动条消失时,页面可用宽度变化 15px,居中内容与上下文带右侧的搜索入口左右跳动。\n\n实现内容:\n- .tab-panel 改为纵向排列,块间距 var(--space-5),与 management-stack 一致;应用详情各标签只有单块内容,不受影响\n- html 设置 scrollbar-gutter: stable,始终预留滚动条位置;系统使用覆盖式滚动条时没有影响\n\n验证:\n- 浏览器实测企业详情成员、应用标签:提示条与卡片间距为 20px;应用详情四个标签布局不变\n- 浏览器实测所有账号页依次切换五个状态:移除修复时搜索入口在两个位置间偏移 15px,加上修复后位置不变\n- npm run check:格式、lint、类型检查通过,28 个测试文件 261 项通过,构建成功\n- 验收脚本:未运行;与页面宽度相关的断言均为内容不超出窗口,预留滚动条不会使其失败\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-14T07:52:56-07:00"}],"HeadCommit":{"Sha1":"1bcbe8d10af01d2081b561a4531c4549a72387bd","Message":"feat(console): 合并控制台质感改造前四批\n\n合并 feat/console-layout 上的控制台质感改造第 1–4 批及随附修正:壳层精简、命令面板、目录工具栏精简与第一组动效。\n\n实现内容:\n- 删除禁止渐变与禁止逐行入场的设计规则(d206928)\n- 面包屑并入顶栏、侧栏当前页滑块与虚线上下文选择按钮(a3fea08),滑块在画面暂停与侧栏滚动变化后的错位修正(5ee785b)\n- ⌘K 命令面板(d2cd40b),窄屏上下文带焦点环裁切修正(9b28da3)\n- 列表行高统一与同行提示(93a5496)\n- 目录工具栏改为搜索框、状态分段切换、刷新图标与更多操作菜单(cf32ed3)\n- 标签页内容间距、滚动条消失导致的页面跳动及弹层锁定重复补偿修正(77f8300、0d4c13b)\n- 数字滚动、骨架交叉淡入、保存按钮「已保存」变形与通知叠放(9653ba1)\n- 开通企业统计测试随运行时间误报的修正(d25fdbf)\n\n验证:\n- 分支最新提交上 npm run check:格式、lint、类型检查通过,29 个测试文件 266 项通过,构建成功\n- main 在分支创建后的新增提交只涉及后端,与本次合并无文件重叠,git merge-tree 无冲突\n- 验收脚本:未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-14T08:15:14-07:00"},"CompareURL":"pengzhiyu/IAM/compare/e89aafa0cfa32442a18b91a9e6e892cb485fc2ff...1bcbe8d10af01d2081b561a4531c4549a72387bd","Len":20}...
|
1791990986
|
Edit
Delete
|
|
38138
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"1bcbe8d10 {"Commits":[{"Sha1":"1bcbe8d10af01d2081b561a4531c4549a72387bd","Message":"feat(console): 合并控制台质感改造前四批\n\n合并 feat/console-layout 上的控制台质感改造第 1–4 批及随附修正:壳层精简、命令面板、目录工具栏精简与第一组动效。\n\n实现内容:\n- 删除禁止渐变与禁止逐行入场的设计规则(d206928)\n- 面包屑并入顶栏、侧栏当前页滑块与虚线上下文选择按钮(a3fea08),滑块在画面暂停与侧栏滚动变化后的错位修正(5ee785b)\n- ⌘K 命令面板(d2cd40b),窄屏上下文带焦点环裁切修正(9b28da3)\n- 列表行高统一与同行提示(93a5496)\n- 目录工具栏改为搜索框、状态分段切换、刷新图标与更多操作菜单(cf32ed3)\n- 标签页内容间距、滚动条消失导致的页面跳动及弹层锁定重复补偿修正(77f8300、0d4c13b)\n- 数字滚动、骨架交叉淡入、保存按钮「已保存」变形与通知叠放(9653ba1)\n- 开通企业统计测试随运行时间误报的修正(d25fdbf)\n\n验证:\n- 分支最新提交上 npm run check:格式、lint、类型检查通过,29 个测试文件 266 项通过,构建成功\n- main 在分支创建后的新增提交只涉及后端,与本次合并无文件重叠,git merge-tree 无冲突\n- 验收脚本:未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-14T08:15:14-07:00"},{"Sha1":"9653ba1c28cf197bb8f493be032cd9d7017c5b0b","Message":"feat(console): 加入数字滚动、骨架交叉淡入、保存按钮变形与通知叠放\n\n控制台质感改造第 4 批。原先数字直接出现、骨架被内容硬切替换、保存成功只靠右下角通知告知、多条通知竖排挡住右下角内容。本次为这四处加入过渡,请求时机不变。\n\n实现内容:\n- 新增 CountUp:以 @property --count 整数插值、CSS 计数器绘制,挂载时从 0、之后从旧值滚到新值(--dur-count 600ms);读屏与文本读取始终是最终值;只用于平台概览待办数、应用概览可分配权限数与应用开通情况\n- ResourceView 外层改为恒定存在的 display: contents 容器:骨架出现过(等待超过 160ms)的那次加载,骨架残影在原位置模糊淡出、内容淡入;组件首次换上内容时表格前 8 行依次上浮(--stagger-row 40ms);残影只在骨架处于块级容器时出现,已高亮的行不参与\n- useMutation 增加 hold 选项与 saved 状态:成功后停留 SAVED_HOLD_MS(600ms)再执行成功回调,停留中卸载表单立即执行;Button 增加 saved/savedLabel,显示 --success-fill 实底、描画对勾与「已保存」,提交中与已保存时宽度以 WAAPI 过渡;接入 13 处「保存…」按钮(确认启用、确认撤销等按钮不变)\n- 通知改为叠放:后层上移 10px、缩小 5%、与最前一条等高且隐去内容,只露出前 3 层;指针移入或焦点进入时按各自高度展开并暂停全部计时;两个播报区共用叠放顺序\n- 新增令牌 --dur-count、--stagger-row、--success-fill(既有动效令牌未改);authorization-scopes 的 min-width 规则覆盖新外层;motion.md 补充四项动效并登记按钮宽度、通知高度为宽高动画例外\n\n验证:\n- npm run check:格式、lint、类型检查通过,29 个测试文件 266 项通过,构建成功;新增 motion-feedback.test.tsx 5 项(已保存停留与卸载、通知叠放与悬停暂停、骨架换内容的 rows/fade/不播放、数字回退显示)\n- 浏览器实测:sales 应用开通情况数字逐帧采样为 0→1→2;所有账号页延迟读取 700ms 时残影与骨架位置宽度一致并在结束后移除,前 8 行延迟 0–280ms,再次加载只淡入;部门编辑表单在页面内拦截写请求返回成功(未写入演示数据),按钮经提交中到「✓ 已保存」,两次宽度过渡均触发,停留后抽屉关闭并高亮该行;通知在桌面宽度叠放、悬停展开,375 宽暗色下叠放正常且无横向溢出\n- 验收脚本:未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-14T08:14:53-07:00"},{"Sha1":"0d4c13bbd0341fb82dbea0b33c13a3a13d5a3abd","Message":"fix(console): 预留滚动条位置后不再重复补偿弹层锁定宽度\n\n上一提交给根元素设置了 scrollbar-gutter: stable,打开对话框或抽屉锁定滚动时仍按滚动条宽度给 body 加右内边距,页面内容与上下文带右侧的搜索入口会左移 15px。\n\n实现内容:\n- useScrollLock 在浏览器支持 scrollbar-gutter 时补偿值为 0,不支持时沿用原来按滚动条宽度补偿的做法\n- data-scroll-locked 标记与锁定计数不变\n\n验证:\n- 浏览器实测所有账号页(经典滚动条、页面可滚动):打开与关闭账号详情抽屉前后,搜索入口与搜索框位置不变,--scrollbar-compensation 为 0\n- npm run check:格式、lint、类型检查通过,28 个测试文件 261 项通过,构建成功\n- 验收脚本:未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-14T07:57:10-07:00"},{"Sha1":"cf32ed31e26dd552caa280de1996b4f23da1123e","Message":"feat(console): 精简目录工具栏为搜索框与状态分段切换\n\n目录工具条原先由带标签的输入框、状态下拉框、「搜索」按钮、常驻的「清除筛选」和文字刷新按钮组成,占位多且需要两步才能筛选。改为回车即搜索的搜索框、选中即生效的状态分段,次要操作收进图标按钮与菜单。\n\n实现内容:\n- DirectoryFilters 改为带放大镜的搜索框(占位文字即无障碍名称,回车生效,有内容时框内出现「清空搜索内容」);不合规输入不发请求,提示以 role=alert 显示\n- 新增 StatusSegments:原生单选组(名称「状态筛选」),选中即生效并带上当前搜索词,选中白底平移到新选项;counts 只在数据全在前端时传入(可用权限页)\n- 「清除筛选」只在有生效条件时出现,点击后焦点回到搜索框;apply 增加第三个参数 search/status/clear,调用方只在回车搜索时把焦点移到结果区\n- 新增 DirectoryTools:刷新改为图标按钮,次要操作进入「更多操作」菜单;平台企业列表的「按标识打开」收入菜单;新增 more 图标\n- 删除通用的「不区分大小写」提示,有实际信息的说明以一行小字放在工具条下方;窄屏搜索框占满一行,分段可横向滚动并收窄选项间距\n- 成员、平台企业与账号、用户组、操作记录、配置目录、角色权限清单等页面改用新组件;设计规范补充「工具条精简」,动效清单新增「状态分段切换」\n\n验证:\n- npm run check:格式、lint、类型检查通过,28 个测试文件 261 项通过,构建成功;management-integration 新增分段即时生效、清除筛选出现与焦点、清空按钮与不合规输入等用例,application-management、authorization-management 改为回车搜索\n- 浏览器实测企业列表:状态分段立即生效且焦点留在分段,回车搜索后焦点移到结果,搜索词与状态可叠加,清除筛选后恢复并回到搜索框,更多操作菜单含「按标识打开」;可用权限分段数量为全部 5 / 正常 4 / 已停用 1;375 宽暗色下五个状态可放下且页面无横向溢出\n- 验收脚本 acceptance-p10-t01、p10-t02、t02、t03、t04 已同步为回车搜索、点击分段和打开更多操作菜单:未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-14T07:53:14-07:00"},{"Sha1":"77f8300377a586c241661e9e749fbc3fe0f69347","Message":"fix(console): 修复标签页内容贴边与滚动条消失导致的页面跳动\n\n企业详情「成员」「应用」标签里的平台提示条与下方卡片之间没有间距;列表筛选后结果变短、经典滚动条消失时,页面可用宽度变化 15px,居中内容与上下文带右侧的搜索入口左右跳动。\n\n实现内容:\n- .tab-panel 改为纵向排列,块间距 var(--space-5),与 management-stack 一致;应用详情各标签只有单块内容,不受影响\n- html 设置 scrollbar-gutter: stable,始终预留滚动条位置;系统使用覆盖式滚动条时没有影响\n\n验证:\n- 浏览器实测企业详情成员、应用标签:提示条与卡片间距为 20px;应用详情四个标签布局不变\n- 浏览器实测所有账号页依次切换五个状态:移除修复时搜索入口在两个位置间偏移 15px,加上修复后位置不变\n- npm run check:格式、lint、类型检查通过,28 个测试文件 261 项通过,构建成功\n- 验收脚本:未运行;与页面宽度相关的断言均为内容不超出窗口,预留滚动条不会使其失败\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-14T07:52:56-07:00"}],"HeadCommit":{"Sha1":"1bcbe8d10af01d2081b561a4531c4549a72387bd","Message":"feat(console): 合并控制台质感改造前四批\n\n合并 feat/console-layout 上的控制台质感改造第 1–4 批及随附修正:壳层精简、命令面板、目录工具栏精简与第一组动效。\n\n实现内容:\n- 删除禁止渐变与禁止逐行入场的设计规则(d206928)\n- 面包屑并入顶栏、侧栏当前页滑块与虚线上下文选择按钮(a3fea08),滑块在画面暂停与侧栏滚动变化后的错位修正(5ee785b)\n- ⌘K 命令面板(d2cd40b),窄屏上下文带焦点环裁切修正(9b28da3)\n- 列表行高统一与同行提示(93a5496)\n- 目录工具栏改为搜索框、状态分段切换、刷新图标与更多操作菜单(cf32ed3)\n- 标签页内容间距、滚动条消失导致的页面跳动及弹层锁定重复补偿修正(77f8300、0d4c13b)\n- 数字滚动、骨架交叉淡入、保存按钮「已保存」变形与通知叠放(9653ba1)\n- 开通企业统计测试随运行时间误报的修正(d25fdbf)\n\n验证:\n- 分支最新提交上 npm run check:格式、lint、类型检查通过,29 个测试文件 266 项通过,构建成功\n- main 在分支创建后的新增提交只涉及后端,与本次合并无文件重叠,git merge-tree 无冲突\n- 验收脚本:未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-14T08:15:14-07:00"},"CompareURL":"pengzhiyu/IAM/compare/afcd1143678a58861a5cabc05dbd9768c7c58052...1bcbe8d10af01d2081b561a4531c4549a72387bd","Len":17}...
|
1791990975
|
Edit
Delete
|
|
38012
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/feat/console-layout
|
0
|
{"Commits":[{"Sha1":"e89aafa0c {"Commits":[{"Sha1":"e89aafa0cfa32442a18b91a9e6e892cb485fc2ff","Message":"style(console): 把列表状态的待办提示放到状态徽标同一行\n\n平台「所有账号」的待激活账号、「企业列表」的待设置所有者企业,提示写在状态徽标下方另起一行,使这些行比其他行高,列表参差不齐。\n\n实现内容:\n- 公共 OpenableRow 的状态单元格改为徽标与提示同一行(inline-flex,列太窄时整体换行),提示取消上边距\n- 同步更新相关注释中提示位置的描述\n\n验证:\n- npm run check(Prettier、ESLint、tsc、Vitest、构建):通过,27 个测试文件 252 项测试全部通过\n- 浏览器(5173 Vite,连接演示后台):1280 宽下所有账号 20 行(含 4 个待激活)、企业列表 6 行(含 1 个需要设置所有者)行高均为 56px;375 宽下所有账号行高同为 56px,页面无横向溢出\n- 验收脚本:未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T20:33:37-07:00"},{"Sha1":"2c8b658c8ba637573d666bec33eda68ffe8673dc","Message":"feat(console): 改造多因素验证绑定与登录验证码输入并加入成功标记\n\n绑定认证器页的剩余时间只是二维码下一行小字,验证码是普通输入框还要手动提交,「取消绑定并清除」与确认按钮并排却会作废本次绑定;登录验证成功后直接跳走,没有完成反馈,各处倒计时也只有文字。\n\n实现内容:\n- 新增 CodeInput:外观 6 个数字框,底层一个透明原生输入框,保留粘贴、one-time-code 自动填充与读屏名称;只收数字,带空格的粘贴也可用(不设 maxLength 以免截断),退格删除最后一位,输满调用一次完成回调\n- 绑定页与登录验证都改用 6 格并输满自动提交;首次绑定未设好正式密码时不提交并提示,验证码保留;恢复码仍用普通输入框,切换后焦点移到新输入框\n- 绑定剩余时间改为二维码下方的大字「分:秒」(成功色,最后 1 分钟提醒色)与时限说明,读屏只在剩不到 1 分钟时提醒一次;「确认成功后旧认证器与旧恢复码立即失效」移到确认按钮下方,仅重新绑定时显示\n- 「取消绑定并清除」改为左上角「← 取消绑定」,点击后就地展开确认,确认后才通知服务端作废\n- 宽屏两栏时右栏与二维码托板垂直居中,右栏更高时仍从顶部排列\n- 新增 SuccessMark:登录流程验证成功或绑定完成后面板换成描画对勾,onComplete 仍立即调用并告知外层,MfaPage 与刷新身份并行至少停留 640ms;减少动态效果时不描画不停留\n- 新增 CountdownRing 与 useCountdown:非登录流程的验证剩余时间、验证冷却、登录限流等待在文字旁加 14px 进度环,最后 20% 改用提醒色\n- motion.md 补充成功标记与进度环;原有 MFA 测试中被自动提交取代的点击步骤已删除,冷却测试改为切到假计时器后补满第 6 位;新增 6 格输入、倒计时、未设密码不提交、取消确认、成功标记与进度环测试\n\n验证:\n- 从暂存内容导出的独立快照执行 Prettier 检查、tsc、ESLint 与 Vitest:通过,27 个测试文件 252 项测试全部通过;工作区完整 npm run check(含生产构建)通过\n- 浏览器(5173 Vite,1280 宽):用户已在演示环境完成真实绑定并登录,绑定时使用的是改造过程中的哪一版页面未确认;另在页面内临时拦截 MFA 接口、使用虚构二维码与密钥,确认正常、输入一半、取消确认、最后 1 分钟变色与首次绑定(含正式密码)布局,未发出真实绑定请求\n- 减少动态效果模式未在浏览器中模拟;验收脚本未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T20:33:26-07:00"},{"Sha1":"549ada99615519240dea8d63657dc02a35cdd7f7","Message":"feat(console): 为移除用户组成员和退出其他登录加入退场与高亮提示\n\n用户组「已选成员」点移除后整行瞬间消失,下面的行直接跳上来,焦点也会丢失;个人中心退出其他登录后,弹窗关闭时看不出列表里哪一行变了。\n\n实现内容:\n- 新增公共 useLeaving:数据立即更新,被移除的项在原位置保留一个退出时长(200ms,减少动态效果 120ms)并标记退场,重新加回的项不再退场\n- 用户组已选成员改为三层结构,移除时淡出并以 grid-template-rows 收起高度,退场中的行 inert;焦点移到相邻一行的「移除」,没有其他成员时落到列表容器\n- 个人中心退出其他登录成功后记录这次登录,弹窗关闭时对应行以 .is-updated 高亮一次\n- motion.md 新增「移除退场与退出登录提示」一节;补充 useLeaving 与焦点移交测试\n\n验证:\n- 从暂存内容导出的独立快照执行 Prettier 检查、tsc、ESLint 与 Vitest:通过,27 个测试文件 246 项测试全部通过\n- 浏览器:用户在演示环境中自行查看了用户组移除与退出登录高亮效果\n- 未运行生产构建与验收脚本\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T20:32:42-07:00"},{"Sha1":"5f34b48affdaccbdce04811a2e8013ffccd3b335","Message":"feat(console): 加入标签下划线滑动、概览页错落入场与架构图平滑缩放\n\n第一档动效之后补第二档观感改进:详情页标签下划线原先随整页重挂载瞬间出现,概览页首屏一次性整体出现,组织架构图缩放瞬间跳变。本次让三处都有连续的过渡,不新增也不修改动效令牌。\n\n实现内容:\n- 新增公共 TabNav/TabPanel:整条标签栏一条下划线,用 translateX + scaleX 对准当前标签,切换时滑动 --dur-base;首次定位与宽度变化直接就位;应用详情、企业详情改用它\n- 带标签的详情路由加 handle.tabbed,壳层改用 usePageKey:切换标签不再整页重挂载,页头与标签栏保留、不重新读取详情、焦点留在标签上、不回到页顶,标签内容由 TabPanel 淡入\n- 工作台与平台、企业、应用三个概览页首屏区块依次 rise-in,每档 35ms;入口卡与功能分组按组内顺序错开;useFirstEntrance 保证本次打开控制台后每页只播放一次,只用 backwards 填充不影响悬停上浮\n- 平台概览「需要你关注」中没有事项的类别,对勾以 stroke-dashoffset 描画\n- 组织架构图保留 CSS zoom 布局,缩放时以视野中心为锚点调整滚动,并用 Web Animations 从新旧实际宽度之比过渡到原样(180ms);连续点击取消上一段并按当前显示大小继续;测量根节点而非占满宽度的列表\n- 减少动态效果时:下划线不滑动、入场不错开、对勾直接显示、缩放只保留中心锚点\n- motion.md 新增「标签滑动、概览入场与架构图缩放」一节;新增标签栏定位与首屏入场判断测试\n\n验证:\n- npm run check(Prettier、ESLint、tsc、Vitest、构建):通过,27 个测试文件 244 项测试全部通过;构建仅有代码包体积提示\n- 浏览器(5173 Vite,1280 宽):应用详情切换标签时下划线 transform 从 translateX 12px 逐帧过渡到 278px,页头与标签栏为同一节点、未重新请求详情,真实点击后焦点留在标签;企业详情标签同样滑动;四个概览页入场延迟依次为 0/35/70/105/140ms,再次进入不重播;对勾描画 dashoffset 从 11 过渡到 0;架构图在页面内临时拦截接口提供 33 个虚构部门,放大缩小时中心部门不变、偏移随比例缩放,连续三次放大结果正确且无残留动画,未写入演示数据\n- 减少动态效果模式:未在浏览器中模拟,仅按样式与代码逻辑确认\n- 验收脚本:未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T19:25:14-07:00"},{"Sha1":"4f344b38d882e1015d12e589c84abe698a527368","Message":"fix(console): 后端未返回开通企业数时概况不再出错\n\n应用概况默认详情接口一定返回 tenant_counts;连接尚未执行 V30 迁移的后端时字段缺失,概况标签直接抛错白屏。改为按「暂时无法获取」处理,不显示为 0,整页正常展示。\n\n实现内容:\n- ApplicationDetail.tenant_counts 改为可选,TenantReach.counts 允许为 null,表示后端没有返回统计\n- 「开通情况」卡片在没有统计时只显示「暂时无法获取开通企业数,可以稍后点「重新统计」再试。」并保留重新统计按钮\n- 权限弹窗的开通企业说明在没有统计时给出不带数量的共享说明并注明暂时无法获取\n- 新增后端缺少统计字段时的概况与文案测试\n\n验证:\n- 从暂存内容导出的独立快照执行 Prettier 检查、tsc、ESLint 与 Vitest:通过,27 个测试文件 241 项测试全部通过\n- 浏览器(5173 Vite 加载的工作区版本,同时含后续动效改动;连接尚无 V30 的演示后台):sales 应用概况正常打开,「开通情况」显示暂时无法获取\n- 未运行生产构建与验收脚本\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T19:24:45-07:00"}],"HeadCommit":{"Sha1":"e89aafa0cfa32442a18b91a9e6e892cb485fc2ff","Message":"style(console): 把列表状态的待办提示放到状态徽标同一行\n\n平台「所有账号」的待激活账号、「企业列表」的待设置所有者企业,提示写在状态徽标下方另起一行,使这些行比其他行高,列表参差不齐。\n\n实现内容:\n- 公共 OpenableRow 的状态单元格改为徽标与提示同一行(inline-flex,列太窄时整体换行),提示取消上边距\n- 同步更新相关注释中提示位置的描述\n\n验证:\n- npm run check(Prettier、ESLint、tsc、Vitest、构建):通过,27 个测试文件 252 项测试全部通过\n- 浏览器(5173 Vite,连接演示后台):1280 宽下所有账号 20 行(含 4 个待激活)、企业列表 6 行(含 1 个需要设置所有者)行高均为 56px;375 宽下所有账号行高同为 56px,页面无横向溢出\n- 验收脚本:未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T20:33:37-07:00"},"CompareURL":"pengzhiyu/IAM/compare/695ea4d16f5066a81e3808b0ba4432b2a69cbd87...e89aafa0cfa32442a18b91a9e6e892cb485fc2ff","Len":14}...
|
1791948977
|
Edit
Delete
|
|
38011
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"afcd11436 {"Commits":[{"Sha1":"afcd1143678a58861a5cabc05dbd9768c7c58052","Message":"feat(console): 合并多因素验证改造、列表移除退场与状态提示对齐\n\n将 feat/console-layout 上的第三档交互改进、多因素验证绑定与登录验证码改造、列表状态提示对齐合入 main。\n\n实现内容:\n- 合入用户组移除成员的退场动画与个人中心退出其他登录后的行高亮\n- 合入 6 格验证码与输满自动提交、绑定页大字倒计时与取消确认、登录成功标记与倒计时进度环\n- 合入所有账号、企业列表的待办提示与状态徽标同一行\n\n验证:\n- 合并后 iam-admin-web 与 docs/console 的代码树与 feat/console-layout 一致;该树已在 IAM-ui 执行 npm run check 通过,包含格式、Lint、类型检查、27 组共 252 项测试及生产构建\n- git diff --cached --check 通过\n- 主目录中演示数据相关的未提交改动(scripts/experience、docs/console/demo-data.md)与 P12 文档未纳入本次合并\n- 减少动态效果模式未在浏览器中模拟;验收脚本未运行;本次不涉及后端代码,未重跑后端检查\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T20:34:37-07:00"},{"Sha1":"e89aafa0cfa32442a18b91a9e6e892cb485fc2ff","Message":"style(console): 把列表状态的待办提示放到状态徽标同一行\n\n平台「所有账号」的待激活账号、「企业列表」的待设置所有者企业,提示写在状态徽标下方另起一行,使这些行比其他行高,列表参差不齐。\n\n实现内容:\n- 公共 OpenableRow 的状态单元格改为徽标与提示同一行(inline-flex,列太窄时整体换行),提示取消上边距\n- 同步更新相关注释中提示位置的描述\n\n验证:\n- npm run check(Prettier、ESLint、tsc、Vitest、构建):通过,27 个测试文件 252 项测试全部通过\n- 浏览器(5173 Vite,连接演示后台):1280 宽下所有账号 20 行(含 4 个待激活)、企业列表 6 行(含 1 个需要设置所有者)行高均为 56px;375 宽下所有账号行高同为 56px,页面无横向溢出\n- 验收脚本:未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T20:33:37-07:00"},{"Sha1":"2c8b658c8ba637573d666bec33eda68ffe8673dc","Message":"feat(console): 改造多因素验证绑定与登录验证码输入并加入成功标记\n\n绑定认证器页的剩余时间只是二维码下一行小字,验证码是普通输入框还要手动提交,「取消绑定并清除」与确认按钮并排却会作废本次绑定;登录验证成功后直接跳走,没有完成反馈,各处倒计时也只有文字。\n\n实现内容:\n- 新增 CodeInput:外观 6 个数字框,底层一个透明原生输入框,保留粘贴、one-time-code 自动填充与读屏名称;只收数字,带空格的粘贴也可用(不设 maxLength 以免截断),退格删除最后一位,输满调用一次完成回调\n- 绑定页与登录验证都改用 6 格并输满自动提交;首次绑定未设好正式密码时不提交并提示,验证码保留;恢复码仍用普通输入框,切换后焦点移到新输入框\n- 绑定剩余时间改为二维码下方的大字「分:秒」(成功色,最后 1 分钟提醒色)与时限说明,读屏只在剩不到 1 分钟时提醒一次;「确认成功后旧认证器与旧恢复码立即失效」移到确认按钮下方,仅重新绑定时显示\n- 「取消绑定并清除」改为左上角「← 取消绑定」,点击后就地展开确认,确认后才通知服务端作废\n- 宽屏两栏时右栏与二维码托板垂直居中,右栏更高时仍从顶部排列\n- 新增 SuccessMark:登录流程验证成功或绑定完成后面板换成描画对勾,onComplete 仍立即调用并告知外层,MfaPage 与刷新身份并行至少停留 640ms;减少动态效果时不描画不停留\n- 新增 CountdownRing 与 useCountdown:非登录流程的验证剩余时间、验证冷却、登录限流等待在文字旁加 14px 进度环,最后 20% 改用提醒色\n- motion.md 补充成功标记与进度环;原有 MFA 测试中被自动提交取代的点击步骤已删除,冷却测试改为切到假计时器后补满第 6 位;新增 6 格输入、倒计时、未设密码不提交、取消确认、成功标记与进度环测试\n\n验证:\n- 从暂存内容导出的独立快照执行 Prettier 检查、tsc、ESLint 与 Vitest:通过,27 个测试文件 252 项测试全部通过;工作区完整 npm run check(含生产构建)通过\n- 浏览器(5173 Vite,1280 宽):用户已在演示环境完成真实绑定并登录,绑定时使用的是改造过程中的哪一版页面未确认;另在页面内临时拦截 MFA 接口、使用虚构二维码与密钥,确认正常、输入一半、取消确认、最后 1 分钟变色与首次绑定(含正式密码)布局,未发出真实绑定请求\n- 减少动态效果模式未在浏览器中模拟;验收脚本未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T20:33:26-07:00"},{"Sha1":"549ada99615519240dea8d63657dc02a35cdd7f7","Message":"feat(console): 为移除用户组成员和退出其他登录加入退场与高亮提示\n\n用户组「已选成员」点移除后整行瞬间消失,下面的行直接跳上来,焦点也会丢失;个人中心退出其他登录后,弹窗关闭时看不出列表里哪一行变了。\n\n实现内容:\n- 新增公共 useLeaving:数据立即更新,被移除的项在原位置保留一个退出时长(200ms,减少动态效果 120ms)并标记退场,重新加回的项不再退场\n- 用户组已选成员改为三层结构,移除时淡出并以 grid-template-rows 收起高度,退场中的行 inert;焦点移到相邻一行的「移除」,没有其他成员时落到列表容器\n- 个人中心退出其他登录成功后记录这次登录,弹窗关闭时对应行以 .is-updated 高亮一次\n- motion.md 新增「移除退场与退出登录提示」一节;补充 useLeaving 与焦点移交测试\n\n验证:\n- 从暂存内容导出的独立快照执行 Prettier 检查、tsc、ESLint 与 Vitest:通过,27 个测试文件 246 项测试全部通过\n- 浏览器:用户在演示环境中自行查看了用户组移除与退出登录高亮效果\n- 未运行生产构建与验收脚本\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T20:32:42-07:00"},{"Sha1":"ac027351294b1b637ff587f0570f635d9f8e2b38","Message":"feat(console): 合并第二档交互动效与开通企业数容错\n\n将 feat/console-layout 上的开通企业数容错修正与第二档交互动效合入 main。\n\n实现内容:\n- 合入后端未返回 tenant_counts 时概况显示「暂时无法获取」而不出错的修正\n- 合入详情页标签下划线滑动(切换标签不再整页重挂载)、四个概览页首屏错落入场、平台概览对勾描画与组织架构图以视野中心为锚点的平滑缩放\n\n验证:\n- feat/console-layout 以当前 main 为基础,合并后的代码树与分支一致;该树已在 IAM-ui 执行 npm run check 通过,包含格式、Lint、类型检查、27 组共 244 项测试及生产构建\n- git diff --cached --check 通过\n- 减少动态效果模式未在浏览器中模拟;验收脚本未运行;本次不涉及后端代码,未重跑后端检查\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T19:26:33-07:00"}],"HeadCommit":{"Sha1":"afcd1143678a58861a5cabc05dbd9768c7c58052","Message":"feat(console): 合并多因素验证改造、列表移除退场与状态提示对齐\n\n将 feat/console-layout 上的第三档交互改进、多因素验证绑定与登录验证码改造、列表状态提示对齐合入 main。\n\n实现内容:\n- 合入用户组移除成员的退场动画与个人中心退出其他登录后的行高亮\n- 合入 6 格验证码与输满自动提交、绑定页大字倒计时与取消确认、登录成功标记与倒计时进度环\n- 合入所有账号、企业列表的待办提示与状态徽标同一行\n\n验证:\n- 合并后 iam-admin-web 与 docs/console 的代码树与 feat/console-layout 一致;该树已在 IAM-ui 执行 npm run check 通过,包含格式、Lint、类型检查、27 组共 252 项测试及生产构建\n- git diff --cached --check 通过\n- 主目录中演示数据相关的未提交改动(scripts/experience、docs/console/demo-data.md)与 P12 文档未纳入本次合并\n- 减少动态效果模式未在浏览器中模拟;验收脚本未运行;本次不涉及后端代码,未重跑后端检查\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T20:34:37-07:00"},"CompareURL":"pengzhiyu/IAM/compare/cf70e039ad30edff8e3a51877be4561ed564e95f...afcd1143678a58861a5cabc05dbd9768c7c58052","Len":15}...
|
1791948968
|
Edit
Delete
|
|
37962
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/feat/console-layout
|
0
|
{"Commits":[{"Sha1":"695ea4d16 {"Commits":[{"Sha1":"695ea4d16f5066a81e3808b0ba4432b2a69cbd87","Message":"feat(console): 重排工作台与平台、企业、应用三个概览页\n\n四个概览页此前沿用早期布局:工作台只有两个入口,待办和应用用零散小卡片展示,功能入口不分组,与已改造的列表页风格不一致。本次按「上方状态卡片、下方两栏分组入口」统一四页布局。\n\n实现内容:\n- 工作台:三个并列入口「平台管理 / 应用 / 企业管理」,新增应用配色 entry--apps;应用管理员入口写明负责的应用,无身份的入口锁定并说明原因\n- 工作台新增「我的企业」可点表格(企业、你的身份,每次读取 10 条,满页时可加载更多),账号摘要放侧栏并链接个人中心,基本概念改为四格横排\n- 平台概览:「需要你关注」改为卡片,三类事项固定列出,没有内容时显示对勾与「目前没有。」,有内容时显示数量、最多 3 个名称与处理入口,读取失败只在该行重试\n- 企业概览:本企业的应用改为卡片内表格,停用的应用不可进入并注明原因;空状态改用公共 EmptyList\n- 应用概览:三步引导放进卡片,步骤之间用分隔线,右上角显示完成进度;任一步读取中或失败时不显示进度\n- 三个概览的功能入口统一用 overview-groups 两栏分组,窄屏改为上下排列;删除不再使用的待办卡片、应用卡片与一切正常提示条样式\n\n验证:\n- npm run typecheck、npm run lint、npm run format:check:通过\n- npm run test:27 个测试文件、234 项通过(同步修改平台、企业、应用概览单测,新增 home.test.tsx 4 项)\n- 浏览器检查 1280 宽、375 窄屏与暗色:四页无页面级横向溢出;待办与停用应用状态用页面内临时拦截 fetch 验证\n- 验收脚本未运行(脚本只依赖「工作台」标题与 .entry--locked,均已保留)\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T06:50:19-07:00"},{"Sha1":"ceb5884bba8e1274c550348e99226f46614e6511","Message":"feat(console): 把应用定义独立成「应用」分组并统一权限相关命名\n\nIAM 面向多租户,一个应用登记后可由多家企业开通。原导航把应用的全局定义(登录客户端、受保护的服务、权限与资源规则)放在「平台管理」下,企业内的应用授权又叫「应用管理」,使用者难以分清权限为何不在应用层维护、改了会影响谁。\n\n实现内容:\n- 侧边栏改为「平台管理 / 应用 / 企业管理 / 应用授权」四组:平台管理只对平台管理员展示链接;新增「应用」分组(应用列表),平台管理员与应用管理员可见;原「应用管理」改名「应用授权」;网址保持不变\n- 应用详情网址仍在 /platform/applications 下,导航高亮、顶部上下文标识(「应用定义」)与面包屑(应用 › 应用列表)归入「应用」\n- 平台侧「应用接入」改为「应用列表」、「权限清单与资源规则」改为「权限定义与资源规则」,徽标改为「所有企业共用」,权限定义卡片与修改弹窗写明对所有开通企业生效\n- 企业侧「权限清单」改为「可用权限」,入口改为「修改权限定义」;工作台、平台概览、切换对话框、无权限说明、操作记录操作名称及相关提示同步新命名\n- 侧边栏测试改为可切换平台角色,新增平台管理员与应用管理员分组可见性用例;弹出面板测试先等待焦点进入面板再按 Esc,消除原有时序抖动\n- acceptance-t03、acceptance-p10-t02、acceptance-p10-t03 同步新的标签名称\n\n验证:\n- npm run format:check、npm run lint、npm run typecheck:通过\n- npm test:26 个测试文件、230 项通过;侧边栏测试单独连续运行 5 次均通过\n- 浏览器经 5173 连接演示后端,在 1280 宽、375 窄屏及亮/暗色下检查四个分组、应用详情、企业可用权限与跳转、修改弹窗影响说明:正常\n- 应用管理员视角仅有单元测试覆盖(演示环境无应用管理员账号);验收脚本未运行\n- 「已在 N 个企业开通」需后端提供按应用统计的接口,本次未实现\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T06:36:58-07:00"},{"Sha1":"7a1bd50d627fb56ebd548956a8a05c61fd306f64","Message":"fix(console): 转义代码输入框 pattern 中的连字符\n\n浏览器按 v 模式编译 input 的 pattern,字符类末尾未转义的「-」会被判为非法正则,浏览器报错并直接跳过该格式校验。其余页面已使用转义写法,本次统一。\n\n实现内容:\n- 权限代码(新增权限、资源类型代码)、角色代码、程序身份代码、应用代码共 5 处 pattern 改为 \\- 转义,匹配规则不变\n\n验证:\n- 两种写法用 new RegExp(..., 'v') 编译通过\n- 浏览器中新增权限弹窗输入 Bad-Code 时 validity.patternMismatch 为 true\n- npm run format:check、npm run lint、npm run typecheck:通过;npm test:26 个测试文件、228 项通过\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T06:11:02-07:00"},{"Sha1":"54b1e1ee340da10ec01235cc9d1cf8d6ca22ca5c","Message":"feat(console): 把权限清单的新增与修改拆开并支持按行修改\n\n平台权限清单原先只有一个「新增或修改权限」入口,要修改已有权限必须手输准确的代码,输错会误建一项不能删除的权限;企业侧只读权限清单也看不出该去哪里修改。\n\n实现内容:\n- 平台权限清单每行增加「修改」:代码只读展示,名称和说明预填,内容未变不能保存,修改不再要求勾选确认\n- 未设置名称的权限名称框留空且可留空,只改说明时名称保持原样;已停用的权限也可修改名称和说明\n- 顶部按钮改为「新增权限」:代码与已有权限重复时拦下并引导到列表「修改」,新增仍需勾选确认\n- 企业侧应用权限清单在平台管理员或该应用的应用管理员登录时,页头显示「去平台修改权限」入口\n- 操作记录中 authorization.group_changed 改称「创建用户组」(后端只在新建用户组时写入)\n- 表格行末操作按钮新增 management-actions--end 靠右排列\n- acceptance-t03 改用「新增权限」按钮,并把提交按钮限定在弹窗内\n\n验证:\n- npm run format:check、npm run lint、npm run typecheck:通过\n- npm test:26 个测试文件、228 项通过(新增修改模式与新增重复代码拦截用例)\n- 浏览器经 5173 连接演示后端实际保存:只填说明保存成功且名称保持原样、其余权限说明保留、清单版本逐次加 1;重复代码被拦下;企业侧入口跳转与说明显示正常\n- acceptance-t03 未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T06:10:34-07:00"}],"HeadCommit":{"Sha1":"695ea4d16f5066a81e3808b0ba4432b2a69cbd87","Message":"feat(console): 重排工作台与平台、企业、应用三个概览页\n\n四个概览页此前沿用早期布局:工作台只有两个入口,待办和应用用零散小卡片展示,功能入口不分组,与已改造的列表页风格不一致。本次按「上方状态卡片、下方两栏分组入口」统一四页布局。\n\n实现内容:\n- 工作台:三个并列入口「平台管理 / 应用 / 企业管理」,新增应用配色 entry--apps;应用管理员入口写明负责的应用,无身份的入口锁定并说明原因\n- 工作台新增「我的企业」可点表格(企业、你的身份,每次读取 10 条,满页时可加载更多),账号摘要放侧栏并链接个人中心,基本概念改为四格横排\n- 平台概览:「需要你关注」改为卡片,三类事项固定列出,没有内容时显示对勾与「目前没有。」,有内容时显示数量、最多 3 个名称与处理入口,读取失败只在该行重试\n- 企业概览:本企业的应用改为卡片内表格,停用的应用不可进入并注明原因;空状态改用公共 EmptyList\n- 应用概览:三步引导放进卡片,步骤之间用分隔线,右上角显示完成进度;任一步读取中或失败时不显示进度\n- 三个概览的功能入口统一用 overview-groups 两栏分组,窄屏改为上下排列;删除不再使用的待办卡片、应用卡片与一切正常提示条样式\n\n验证:\n- npm run typecheck、npm run lint、npm run format:check:通过\n- npm run test:27 个测试文件、234 项通过(同步修改平台、企业、应用概览单测,新增 home.test.tsx 4 项)\n- 浏览器检查 1280 宽、375 窄屏与暗色:四页无页面级横向溢出;待办与停用应用状态用页面内临时拦截 fetch 验证\n- 验收脚本未运行(脚本只依赖「工作台」标题与 .entry--locked,均已保留)\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T06:50:19-07:00"},"CompareURL":"pengzhiyu/IAM/compare/ff5ee33515b0a21b6ba738d00c52373fabfaa50d...695ea4d16f5066a81e3808b0ba4432b2a69cbd87","Len":4}...
|
1791901432
|
Edit
Delete
|
|
37961
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"cf70e039a {"Commits":[{"Sha1":"cf70e039ad30edff8e3a51877be4561ed564e95f","Message":"feat(console): 合并应用中心导航、权限清单按行修改与概览页重排\n\nmain 停在 ff5ee33 之后,控制台仍是旧的侧栏分组、权限清单整体编辑和早期概览页布局。合并 feat/console-layout 上其后的 4 个前端提交,完成控制台全部页面的布局改造。\n\n实现内容:\n- 权限清单把新增与修改拆开,平台侧支持按行修改名称与说明,企业侧「可用权限」提供去平台修改的入口;权限名称等于代码时编辑弹窗不再预填代码,用户组事件标签改为「创建用户组」\n- 转义 5 处代码输入框 pattern 中的连字符\n- 侧栏分为「平台管理 / 应用 / 企业管理 / 应用授权」四组,应用定义独立成「应用」分组(网址仍为 /platform/applications),统一「应用列表」「权限定义与资源规则」「所有企业共用」「可用权限」等命名\n- 工作台改为平台管理 / 应用 / 企业管理三个并列入口,加上「我的企业」表格与账号摘要;平台概览的「需要你关注」三类事项固定列出;企业概览的应用改为表格;应用概览的三步引导放进卡片并显示进度;三个概览的功能入口按用途分两栏\n\n验证:\n- 分支上各提交前运行 format:check、lint、typecheck 与 Vitest,最后一次 27 个测试文件、234 项全部通过\n- 合并无冲突,只涉及 iam-admin-web/ 下的文件;main 上相对分支只多出 568be88(两处集成测试),合并后的前端文件与分支末端 695ea4d 一致\n- main 上未单独重新运行检查;验收脚本未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T07:22:40-07:00"},{"Sha1":"568be8853874bf5d720f1c49e060edd5f4d20825","Message":"test(protocol): 按完整迁移历史校验模式切换与启动反例\n\n新增 V29 后,两处固定最高迁移版本为 28 的测试不再符合当前完整提交。改为核对动作前后历史保持,避免每次新增迁移重复修改版本预期。\n\n实现内容:\n- 仅修改 ScopedLifecycleIT 和 IdentityReadLifecycleIT 两处迁移断言\n- 按 installed_rank 比较全部 version、checksum、success,显式要求 V27、V28 已成功\n- 保留并发互斥、释放、SCOPED 函数缺失反例及原安全断言\n\n验证:\n- Java 25,在独立快照执行 ./mvnw -o -B -ntp -pl iam-server -am verify -Dit.test=ScopedLifecycleIT,IdentityReadLifecycleIT -Dfailsafe.failIfNoSpecifiedTests=false -Dfailsafe.skipAfterFailureCount=1 -Dsurefire.skipAfterFailureCount=1:通过\n- 180 项单测、ScopedLifecycleIT 9 项及 IdentityReadLifecycleIT 40 项集成通过,零失败、错误或跳过;格式、编译和打包通过\n- git diff --check:通过\n- 本提交前未运行含控制台全量验收;随后从最新完整提交另建快照验证\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T07:00:04-07:00"},{"Sha1":"695ea4d16f5066a81e3808b0ba4432b2a69cbd87","Message":"feat(console): 重排工作台与平台、企业、应用三个概览页\n\n四个概览页此前沿用早期布局:工作台只有两个入口,待办和应用用零散小卡片展示,功能入口不分组,与已改造的列表页风格不一致。本次按「上方状态卡片、下方两栏分组入口」统一四页布局。\n\n实现内容:\n- 工作台:三个并列入口「平台管理 / 应用 / 企业管理」,新增应用配色 entry--apps;应用管理员入口写明负责的应用,无身份的入口锁定并说明原因\n- 工作台新增「我的企业」可点表格(企业、你的身份,每次读取 10 条,满页时可加载更多),账号摘要放侧栏并链接个人中心,基本概念改为四格横排\n- 平台概览:「需要你关注」改为卡片,三类事项固定列出,没有内容时显示对勾与「目前没有。」,有内容时显示数量、最多 3 个名称与处理入口,读取失败只在该行重试\n- 企业概览:本企业的应用改为卡片内表格,停用的应用不可进入并注明原因;空状态改用公共 EmptyList\n- 应用概览:三步引导放进卡片,步骤之间用分隔线,右上角显示完成进度;任一步读取中或失败时不显示进度\n- 三个概览的功能入口统一用 overview-groups 两栏分组,窄屏改为上下排列;删除不再使用的待办卡片、应用卡片与一切正常提示条样式\n\n验证:\n- npm run typecheck、npm run lint、npm run format:check:通过\n- npm run test:27 个测试文件、234 项通过(同步修改平台、企业、应用概览单测,新增 home.test.tsx 4 项)\n- 浏览器检查 1280 宽、375 窄屏与暗色:四页无页面级横向溢出;待办与停用应用状态用页面内临时拦截 fetch 验证\n- 验收脚本未运行(脚本只依赖「工作台」标题与 .entry--locked,均已保留)\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T06:50:19-07:00"},{"Sha1":"ceb5884bba8e1274c550348e99226f46614e6511","Message":"feat(console): 把应用定义独立成「应用」分组并统一权限相关命名\n\nIAM 面向多租户,一个应用登记后可由多家企业开通。原导航把应用的全局定义(登录客户端、受保护的服务、权限与资源规则)放在「平台管理」下,企业内的应用授权又叫「应用管理」,使用者难以分清权限为何不在应用层维护、改了会影响谁。\n\n实现内容:\n- 侧边栏改为「平台管理 / 应用 / 企业管理 / 应用授权」四组:平台管理只对平台管理员展示链接;新增「应用」分组(应用列表),平台管理员与应用管理员可见;原「应用管理」改名「应用授权」;网址保持不变\n- 应用详情网址仍在 /platform/applications 下,导航高亮、顶部上下文标识(「应用定义」)与面包屑(应用 › 应用列表)归入「应用」\n- 平台侧「应用接入」改为「应用列表」、「权限清单与资源规则」改为「权限定义与资源规则」,徽标改为「所有企业共用」,权限定义卡片与修改弹窗写明对所有开通企业生效\n- 企业侧「权限清单」改为「可用权限」,入口改为「修改权限定义」;工作台、平台概览、切换对话框、无权限说明、操作记录操作名称及相关提示同步新命名\n- 侧边栏测试改为可切换平台角色,新增平台管理员与应用管理员分组可见性用例;弹出面板测试先等待焦点进入面板再按 Esc,消除原有时序抖动\n- acceptance-t03、acceptance-p10-t02、acceptance-p10-t03 同步新的标签名称\n\n验证:\n- npm run format:check、npm run lint、npm run typecheck:通过\n- npm test:26 个测试文件、230 项通过;侧边栏测试单独连续运行 5 次均通过\n- 浏览器经 5173 连接演示后端,在 1280 宽、375 窄屏及亮/暗色下检查四个分组、应用详情、企业可用权限与跳转、修改弹窗影响说明:正常\n- 应用管理员视角仅有单元测试覆盖(演示环境无应用管理员账号);验收脚本未运行\n- 「已在 N 个企业开通」需后端提供按应用统计的接口,本次未实现\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T06:36:58-07:00"},{"Sha1":"7a1bd50d627fb56ebd548956a8a05c61fd306f64","Message":"fix(console): 转义代码输入框 pattern 中的连字符\n\n浏览器按 v 模式编译 input 的 pattern,字符类末尾未转义的「-」会被判为非法正则,浏览器报错并直接跳过该格式校验。其余页面已使用转义写法,本次统一。\n\n实现内容:\n- 权限代码(新增权限、资源类型代码)、角色代码、程序身份代码、应用代码共 5 处 pattern 改为 \\- 转义,匹配规则不变\n\n验证:\n- 两种写法用 new RegExp(..., 'v') 编译通过\n- 浏览器中新增权限弹窗输入 Bad-Code 时 validity.patternMismatch 为 true\n- npm run format:check、npm run lint、npm run typecheck:通过;npm test:26 个测试文件、228 项通过\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T06:11:02-07:00"}],"HeadCommit":{"Sha1":"cf70e039ad30edff8e3a51877be4561ed564e95f","Message":"feat(console): 合并应用中心导航、权限清单按行修改与概览页重排\n\nmain 停在 ff5ee33 之后,控制台仍是旧的侧栏分组、权限清单整体编辑和早期概览页布局。合并 feat/console-layout 上其后的 4 个前端提交,完成控制台全部页面的布局改造。\n\n实现内容:\n- 权限清单把新增与修改拆开,平台侧支持按行修改名称与说明,企业侧「可用权限」提供去平台修改的入口;权限名称等于代码时编辑弹窗不再预填代码,用户组事件标签改为「创建用户组」\n- 转义 5 处代码输入框 pattern 中的连字符\n- 侧栏分为「平台管理 / 应用 / 企业管理 / 应用授权」四组,应用定义独立成「应用」分组(网址仍为 /platform/applications),统一「应用列表」「权限定义与资源规则」「所有企业共用」「可用权限」等命名\n- 工作台改为平台管理 / 应用 / 企业管理三个并列入口,加上「我的企业」表格与账号摘要;平台概览的「需要你关注」三类事项固定列出;企业概览的应用改为表格;应用概览的三步引导放进卡片并显示进度;三个概览的功能入口按用途分两栏\n\n验证:\n- 分支上各提交前运行 format:check、lint、typecheck 与 Vitest,最后一次 27 个测试文件、234 项全部通过\n- 合并无冲突,只涉及 iam-admin-web/ 下的文件;main 上相对分支只多出 568be88(两处集成测试),合并后的前端文件与分支末端 695ea4d 一致\n- main 上未单独重新运行检查;验收脚本未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T07:22:40-07:00"},"CompareURL":"pengzhiyu/IAM/compare/ff5ee33515b0a21b6ba738d00c52373fabfaa50d...cf70e039ad30edff8e3a51877be4561ed564e95f","Len":6}...
|
1791901403
|
Edit
Delete
|
|
37819
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"ff5ee3351 {"Commits":[{"Sha1":"ff5ee33515b0a21b6ba738d00c52373fabfaa50d","Message":"feat(console): 接入权限说明与操作记录的操作对象快照\n\n后端已为权限增加可选说明,并在操作记录中返回操作对象类型、代码快照和展示摘要。控制台此前无法填写或查看权限说明,操作记录也看不出操作了哪个对象。\n\n实现内容:\n- 权限类型增加 description;完整清单提交时其余每条权限原样带上当前说明或 null,版本号固定为当前值加 1\n- 平台「新增或修改权限」弹窗增加可选说明多行框:预填已有说明、显示字数、上限 1000、拦截回车,换行/制表符/格式字符在前端提示,首尾空白去掉、清空或全空白提交 null\n- 后端返回 INVALID_PERMISSION_DESCRIPTION 时给出具体修改提示\n- PermissionLabel 支持显示说明;平台权限表、企业权限清单(搜索可匹配说明)与 PermissionPicker 显示说明,为空时不占位\n- PermissionPicker 中说明经 aria-describedby 关联,不并入勾选框名称\n- 操作记录列表在操作名称下显示「类型「代码」 · 应用」;未知类型统一称「对象」,无快照时省略\n- 操作记录详情增加「操作对象」,摘要优先 display_summary,原 summary 移到技术细节「内部摘要」;旧记录说明未记录对象名称\n- acceptance-t03 同步新的按钮名称\n\n验证:\n- npm run format:check、npm run lint、npm run typecheck:通过\n- npm test:26 个测试文件、227 项通过(新增说明保留与清空、说明校验、编辑弹窗、选择器无障碍名称、操作对象快照与回退用例)\n- 浏览器在 1280 宽、375 窄屏及亮/暗色下用页面内临时拦截 fetch 模拟新字段检查显示:正常\n- 未与包含 V29 的新后端联调;acceptance-t03 未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T00:48:33-07:00"},{"Sha1":"9631e78cfeee4abd1ccb7e7f777864e4815ded49","Message":"chore: 合并 main 引入权限说明与操作对象快照后端\n\n前端接入权限说明与操作记录操作对象前,先把 main 上的后端交付(a435000、536e36c、85e2c17)合入前端分支。\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T00:33:36-07:00"},{"Sha1":"3973681b67a737220c25c4bc3f916ca2b687b5ee","Message":"feat(console): 重排个人中心并把登录记录改为当前登录加表格\n\n个人中心原先把邮箱、多因素验证放在最前,账号信息压在下方;登录记录每条都是一张大卡片,十几条记录要滚很久,已过期的登录也和当前登录一样醒目。本次按控制台其他页面的布局约定重排个人中心。\n\n实现内容:\n- 上排并列「我的账号」(名字首字头像 + 平台管理身份徽标)与「我的企业」(企业 / 你的身份 / 成员代码三列表格,手机上收窄内边距不必横向滚动)\n- 邮箱与多因素验证合并为「账号安全」卡片,左侧标题与说明、右侧内容,900px 以下上下排列;多因素验证面板与登录页共用,本次未改\n- 邮箱区域改用与多因素验证相同外观的状态摘要(未登记 / 未验证 / 已验证 + 投递状态);登记或发送验证邮件的表单点按钮后就地展开,展开后聚焦第一个字段,提交后无论成败都清除密码;「取消待处理的验证与恢复链接」改名为「作废已发出的邮件链接」并保持常驻(找回密码链接不体现在邮箱状态里)\n- 登录记录拆为「当前这次登录」单独一块(四个时间 + 期限规则)与「其他登录」表格(登录时间 + 编号缩写 / 状态 / 最近使用 / 自动退出于);表格时间用今天、昨天等简短写法,完整时间在悬停提示中\n- 已退出的登录不再显示退出按钮;已过期、已失效的登录仍可退出以撤销业务系统中残留的授权,按钮改为轻量样式,整行弱化\n- 退出确认弹窗底部改为「取消 + 确认退出」,补充最近使用时间,登录编号带名称与注解;账号标识同样带名称与注解\n- 单测改用新的邮箱按钮与字段名,新增「当前登录单独列出、已退出的登录不提供退出按钮」用例;acceptance-p11-t02 同步新的邮箱登记流程与已验证文案,acceptance-t05 依赖的类名与按钮名保持不变\n\n验证:\n- npm run format:check:通过\n- npm run typecheck:通过\n- npm run lint:通过\n- npm run test:26 个测试文件、224 项全部通过\n- 浏览器检查 1280 宽、375 窄屏与亮暗色,整页无横向溢出;邮箱登记表单与退出确认弹窗只打开查看,未实际提交\n- acceptance-p11-t02、acceptance-t05:未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T00:28:12-07:00"},{"Sha1":"2508f797ba72291a981665d5f4fcc4fb86280af8","Message":"feat(console): 为技术细节中的编号补充名称与用途注解\n\n技术细节原先只列出编号,部分地方连名称都没有,普通使用者看不懂这串字符是什么、什么时候用得上。本次为各页面技术细节中的编号、版本和代码补充名称与一句用途说明。\n\n实现内容:\n- TechDetails 展开后先显示一句总说明:这些编号用于定位记录,日常不需要关心,反馈问题时可复制给管理员或技术支持\n- DescriptionList 每项新增可选 hint,在值下方显示灰色注解;有注解时值包在 .dlist__value 中,按值定位的测试不受注解文字影响\n- 新增 lib/tech-hints.ts 统一注解文案:对象标识、记录版本、账号标识与成员标识的区别、密钥编号、客户端标识与客户端代码的区别等\n- 工作台账号标识、程序接入新建密钥后的密钥编号、应用接入新建客户端后的客户端标识原先只露出编号,改为带名称的描述列表并加注解\n- 企业、账号、成员、部门、用户组、应用接入、应用开通、角色、授权、程序接入、程序身份、权限查询接入、操作记录、状态变更影响预览中的技术细节逐项补充注解\n- 同步 acceptance-p10-t01、acceptance-t03 中按记录版本值定位的选择器为 dd .dlist__value\n\n验证:\n- npm run format:check:通过\n- npm run typecheck:通过\n- npm run lint:通过\n- npm run test:26 个测试文件、223 项全部通过(暂时移开个人中心未提交改动后单独运行)\n- 浏览器检查应用接入客户端详情抽屉的技术细节注解显示正常;其余页面未逐页目测\n- acceptance-p10-t01、acceptance-t03:未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T00:27:34-07:00"},{"Sha1":"e5c32be5d8e106d727495fd92d5b3bf6ab2a3b4f","Message":"feat(console): 把权限查询接入改为分区详情抽屉并以选择代替粘贴标识登记\n\n权限查询接入页列表与详情只显示一串 UUID,登记时需要手动粘贴企业、应用、服务三个标识;系统过期后状态仍显示「正常」,管理员无法看出它的查询已被拒绝。本次按控制台已定的列表、抽屉与弹窗样式重排该页。\n\n实现内容:\n- 列表改为「查询的应用 / 所属企业 / 到期时间 / 状态」,应用名称是打开详情的按钮、整行可点;企业与应用名称各读取第一页(最多 100 个),读不到时回退为「类别 + 标识前 8 位」\n- 正常但已过期的系统显示「已过期」徽标并提示查询会被拒绝,正常且 3 天内到期时提前提醒;列表新增定制空状态\n- 详情抽屉分「基本信息(企业、应用、服务名称)/ 密钥说明 / 停用(危险区)」,四个标识与固定查询范围收进技术细节;停用默认收起为按钮,展开后勾选确认、可取消,停用后抽屉保持打开并把焦点留在抽屉上\n- 登记改为两步:平铺列表选正常状态的企业,再用单选卡片选该企业已启用的应用和应用下的服务,填写摘要与到期时间(输入框限定现在至 30 天后);底部为「重新选择企业 / 确认登记」,提交字段与原来一致\n- 公共样式 .card__actions 不再收缩,卡片说明较长时操作按钮保持一行;600px 以下卡片头部换行,按钮排到标题下方\n- 同步登记单测为按企业、应用、服务选择的流程,acceptance-t03 的 A11 改为点击应用名称打开详情、展开停用并等待停用后的说明\n\n验证:\n- npm run format:check、npm run lint:通过\n- npx tsc -b:通过\n- npm run test:26 个测试文件、223 项全部通过\n- 浏览器在演示环境查看 1280 宽、375 窄屏与亮暗色;演示环境未开启登记功能,登记流程用页面内临时拦截请求验证,提交字段正确且未写入后端\n- acceptance-t03:未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-12T23:49:35-07:00"}],"HeadCommit":{"Sha1":"ff5ee33515b0a21b6ba738d00c52373fabfaa50d","Message":"feat(console): 接入权限说明与操作记录的操作对象快照\n\n后端已为权限增加可选说明,并在操作记录中返回操作对象类型、代码快照和展示摘要。控制台此前无法填写或查看权限说明,操作记录也看不出操作了哪个对象。\n\n实现内容:\n- 权限类型增加 description;完整清单提交时其余每条权限原样带上当前说明或 null,版本号固定为当前值加 1\n- 平台「新增或修改权限」弹窗增加可选说明多行框:预填已有说明、显示字数、上限 1000、拦截回车,换行/制表符/格式字符在前端提示,首尾空白去掉、清空或全空白提交 null\n- 后端返回 INVALID_PERMISSION_DESCRIPTION 时给出具体修改提示\n- PermissionLabel 支持显示说明;平台权限表、企业权限清单(搜索可匹配说明)与 PermissionPicker 显示说明,为空时不占位\n- PermissionPicker 中说明经 aria-describedby 关联,不并入勾选框名称\n- 操作记录列表在操作名称下显示「类型「代码」 · 应用」;未知类型统一称「对象」,无快照时省略\n- 操作记录详情增加「操作对象」,摘要优先 display_summary,原 summary 移到技术细节「内部摘要」;旧记录说明未记录对象名称\n- acceptance-t03 同步新的按钮名称\n\n验证:\n- npm run format:check、npm run lint、npm run typecheck:通过\n- npm test:26 个测试文件、227 项通过(新增说明保留与清空、说明校验、编辑弹窗、选择器无障碍名称、操作对象快照与回退用例)\n- 浏览器在 1280 宽、375 窄屏及亮/暗色下用页面内临时拦截 fetch 模拟新字段检查显示:正常\n- 未与包含 V29 的新后端联调;acceptance-t03 未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T00:48:33-07:00"},"CompareURL":"pengzhiyu/IAM/compare/85e2c17b4829f451e34f938ca6c11354a0b17f30...ff5ee33515b0a21b6ba738d00c52373fabfaa50d","Len":5}...
|
1791877984
|
Edit
Delete
|
|
37818
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/feat/console-layout
|
0
|
{"Commits":[{"Sha1":"ff5ee3351 {"Commits":[{"Sha1":"ff5ee33515b0a21b6ba738d00c52373fabfaa50d","Message":"feat(console): 接入权限说明与操作记录的操作对象快照\n\n后端已为权限增加可选说明,并在操作记录中返回操作对象类型、代码快照和展示摘要。控制台此前无法填写或查看权限说明,操作记录也看不出操作了哪个对象。\n\n实现内容:\n- 权限类型增加 description;完整清单提交时其余每条权限原样带上当前说明或 null,版本号固定为当前值加 1\n- 平台「新增或修改权限」弹窗增加可选说明多行框:预填已有说明、显示字数、上限 1000、拦截回车,换行/制表符/格式字符在前端提示,首尾空白去掉、清空或全空白提交 null\n- 后端返回 INVALID_PERMISSION_DESCRIPTION 时给出具体修改提示\n- PermissionLabel 支持显示说明;平台权限表、企业权限清单(搜索可匹配说明)与 PermissionPicker 显示说明,为空时不占位\n- PermissionPicker 中说明经 aria-describedby 关联,不并入勾选框名称\n- 操作记录列表在操作名称下显示「类型「代码」 · 应用」;未知类型统一称「对象」,无快照时省略\n- 操作记录详情增加「操作对象」,摘要优先 display_summary,原 summary 移到技术细节「内部摘要」;旧记录说明未记录对象名称\n- acceptance-t03 同步新的按钮名称\n\n验证:\n- npm run format:check、npm run lint、npm run typecheck:通过\n- npm test:26 个测试文件、227 项通过(新增说明保留与清空、说明校验、编辑弹窗、选择器无障碍名称、操作对象快照与回退用例)\n- 浏览器在 1280 宽、375 窄屏及亮/暗色下用页面内临时拦截 fetch 模拟新字段检查显示:正常\n- 未与包含 V29 的新后端联调;acceptance-t03 未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T00:48:33-07:00"},{"Sha1":"9631e78cfeee4abd1ccb7e7f777864e4815ded49","Message":"chore: 合并 main 引入权限说明与操作对象快照后端\n\n前端接入权限说明与操作记录操作对象前,先把 main 上的后端交付(a435000、536e36c、85e2c17)合入前端分支。\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T00:33:36-07:00"},{"Sha1":"3973681b67a737220c25c4bc3f916ca2b687b5ee","Message":"feat(console): 重排个人中心并把登录记录改为当前登录加表格\n\n个人中心原先把邮箱、多因素验证放在最前,账号信息压在下方;登录记录每条都是一张大卡片,十几条记录要滚很久,已过期的登录也和当前登录一样醒目。本次按控制台其他页面的布局约定重排个人中心。\n\n实现内容:\n- 上排并列「我的账号」(名字首字头像 + 平台管理身份徽标)与「我的企业」(企业 / 你的身份 / 成员代码三列表格,手机上收窄内边距不必横向滚动)\n- 邮箱与多因素验证合并为「账号安全」卡片,左侧标题与说明、右侧内容,900px 以下上下排列;多因素验证面板与登录页共用,本次未改\n- 邮箱区域改用与多因素验证相同外观的状态摘要(未登记 / 未验证 / 已验证 + 投递状态);登记或发送验证邮件的表单点按钮后就地展开,展开后聚焦第一个字段,提交后无论成败都清除密码;「取消待处理的验证与恢复链接」改名为「作废已发出的邮件链接」并保持常驻(找回密码链接不体现在邮箱状态里)\n- 登录记录拆为「当前这次登录」单独一块(四个时间 + 期限规则)与「其他登录」表格(登录时间 + 编号缩写 / 状态 / 最近使用 / 自动退出于);表格时间用今天、昨天等简短写法,完整时间在悬停提示中\n- 已退出的登录不再显示退出按钮;已过期、已失效的登录仍可退出以撤销业务系统中残留的授权,按钮改为轻量样式,整行弱化\n- 退出确认弹窗底部改为「取消 + 确认退出」,补充最近使用时间,登录编号带名称与注解;账号标识同样带名称与注解\n- 单测改用新的邮箱按钮与字段名,新增「当前登录单独列出、已退出的登录不提供退出按钮」用例;acceptance-p11-t02 同步新的邮箱登记流程与已验证文案,acceptance-t05 依赖的类名与按钮名保持不变\n\n验证:\n- npm run format:check:通过\n- npm run typecheck:通过\n- npm run lint:通过\n- npm run test:26 个测试文件、224 项全部通过\n- 浏览器检查 1280 宽、375 窄屏与亮暗色,整页无横向溢出;邮箱登记表单与退出确认弹窗只打开查看,未实际提交\n- acceptance-p11-t02、acceptance-t05:未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T00:28:12-07:00"},{"Sha1":"2508f797ba72291a981665d5f4fcc4fb86280af8","Message":"feat(console): 为技术细节中的编号补充名称与用途注解\n\n技术细节原先只列出编号,部分地方连名称都没有,普通使用者看不懂这串字符是什么、什么时候用得上。本次为各页面技术细节中的编号、版本和代码补充名称与一句用途说明。\n\n实现内容:\n- TechDetails 展开后先显示一句总说明:这些编号用于定位记录,日常不需要关心,反馈问题时可复制给管理员或技术支持\n- DescriptionList 每项新增可选 hint,在值下方显示灰色注解;有注解时值包在 .dlist__value 中,按值定位的测试不受注解文字影响\n- 新增 lib/tech-hints.ts 统一注解文案:对象标识、记录版本、账号标识与成员标识的区别、密钥编号、客户端标识与客户端代码的区别等\n- 工作台账号标识、程序接入新建密钥后的密钥编号、应用接入新建客户端后的客户端标识原先只露出编号,改为带名称的描述列表并加注解\n- 企业、账号、成员、部门、用户组、应用接入、应用开通、角色、授权、程序接入、程序身份、权限查询接入、操作记录、状态变更影响预览中的技术细节逐项补充注解\n- 同步 acceptance-p10-t01、acceptance-t03 中按记录版本值定位的选择器为 dd .dlist__value\n\n验证:\n- npm run format:check:通过\n- npm run typecheck:通过\n- npm run lint:通过\n- npm run test:26 个测试文件、223 项全部通过(暂时移开个人中心未提交改动后单独运行)\n- 浏览器检查应用接入客户端详情抽屉的技术细节注解显示正常;其余页面未逐页目测\n- acceptance-p10-t01、acceptance-t03:未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T00:27:34-07:00"},{"Sha1":"e5c32be5d8e106d727495fd92d5b3bf6ab2a3b4f","Message":"feat(console): 把权限查询接入改为分区详情抽屉并以选择代替粘贴标识登记\n\n权限查询接入页列表与详情只显示一串 UUID,登记时需要手动粘贴企业、应用、服务三个标识;系统过期后状态仍显示「正常」,管理员无法看出它的查询已被拒绝。本次按控制台已定的列表、抽屉与弹窗样式重排该页。\n\n实现内容:\n- 列表改为「查询的应用 / 所属企业 / 到期时间 / 状态」,应用名称是打开详情的按钮、整行可点;企业与应用名称各读取第一页(最多 100 个),读不到时回退为「类别 + 标识前 8 位」\n- 正常但已过期的系统显示「已过期」徽标并提示查询会被拒绝,正常且 3 天内到期时提前提醒;列表新增定制空状态\n- 详情抽屉分「基本信息(企业、应用、服务名称)/ 密钥说明 / 停用(危险区)」,四个标识与固定查询范围收进技术细节;停用默认收起为按钮,展开后勾选确认、可取消,停用后抽屉保持打开并把焦点留在抽屉上\n- 登记改为两步:平铺列表选正常状态的企业,再用单选卡片选该企业已启用的应用和应用下的服务,填写摘要与到期时间(输入框限定现在至 30 天后);底部为「重新选择企业 / 确认登记」,提交字段与原来一致\n- 公共样式 .card__actions 不再收缩,卡片说明较长时操作按钮保持一行;600px 以下卡片头部换行,按钮排到标题下方\n- 同步登记单测为按企业、应用、服务选择的流程,acceptance-t03 的 A11 改为点击应用名称打开详情、展开停用并等待停用后的说明\n\n验证:\n- npm run format:check、npm run lint:通过\n- npx tsc -b:通过\n- npm run test:26 个测试文件、223 项全部通过\n- 浏览器在演示环境查看 1280 宽、375 窄屏与亮暗色;演示环境未开启登记功能,登记流程用页面内临时拦截请求验证,提交字段正确且未写入后端\n- acceptance-t03:未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-12T23:49:35-07:00"}],"HeadCommit":{"Sha1":"ff5ee33515b0a21b6ba738d00c52373fabfaa50d","Message":"feat(console): 接入权限说明与操作记录的操作对象快照\n\n后端已为权限增加可选说明,并在操作记录中返回操作对象类型、代码快照和展示摘要。控制台此前无法填写或查看权限说明,操作记录也看不出操作了哪个对象。\n\n实现内容:\n- 权限类型增加 description;完整清单提交时其余每条权限原样带上当前说明或 null,版本号固定为当前值加 1\n- 平台「新增或修改权限」弹窗增加可选说明多行框:预填已有说明、显示字数、上限 1000、拦截回车,换行/制表符/格式字符在前端提示,首尾空白去掉、清空或全空白提交 null\n- 后端返回 INVALID_PERMISSION_DESCRIPTION 时给出具体修改提示\n- PermissionLabel 支持显示说明;平台权限表、企业权限清单(搜索可匹配说明)与 PermissionPicker 显示说明,为空时不占位\n- PermissionPicker 中说明经 aria-describedby 关联,不并入勾选框名称\n- 操作记录列表在操作名称下显示「类型「代码」 · 应用」;未知类型统一称「对象」,无快照时省略\n- 操作记录详情增加「操作对象」,摘要优先 display_summary,原 summary 移到技术细节「内部摘要」;旧记录说明未记录对象名称\n- acceptance-t03 同步新的按钮名称\n\n验证:\n- npm run format:check、npm run lint、npm run typecheck:通过\n- npm test:26 个测试文件、227 项通过(新增说明保留与清空、说明校验、编辑弹窗、选择器无障碍名称、操作对象快照与回退用例)\n- 浏览器在 1280 宽、375 窄屏及亮/暗色下用页面内临时拦截 fetch 模拟新字段检查显示:正常\n- 未与包含 V29 的新后端联调;acceptance-t03 未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-13T00:48:33-07:00"},"CompareURL":"pengzhiyu/IAM/compare/3cf111b21a47760e5c71fc6b2fba96d882dbd3f1...ff5ee33515b0a21b6ba738d00c52373fabfaa50d","Len":5}...
|
1791877967
|
Edit
Delete
|
|
37817
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/feat/console-layout
|
0
|
|
1791877967
|
Edit
Delete
|
|
37428
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"85e2c17b4 {"Commits":[{"Sha1":"85e2c17b4829f451e34f938ca6c11354a0b17f30","Message":"docs: 记录 P12 云测归因与 E2a 验证结果\n\n归档原两份任务文档中累计的候选验证、单轮云测、持有成本分析和 E2a 实施记录,保持历史失败及授权边界可追溯。\n\n实现内容:\n- 记录 50 次入口拒绝的真实关联证据与尚未验收的容量目标\n- 记录三个期限检查点计时的实现、首例测试修正和独立提交\n- 区分历史完整检查、共享报告覆盖与当前组合的定向复验\n- 更新当前状态并说明下一步隔离候选验证建议\n\n验证:\n- 文件摘要、独立执行日志和实际提交内容核对通过\n- 当前组合定向 28 项单测、18 项集成及 26 项 Python 测试通过\n- 文档差异、相对文件链接和 git diff --check 检查通过\n- 本次不新增完整构建、候选冻结或云测结果\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-12T08:42:04-07:00"},{"Sha1":"536e36cfae600b8bbdc378012e723ffbbd34a491","Message":"feat(protocol): 增加刷新期限检查点诊断计时\n\n现有粗阶段无法区分三次期限复核的耗时,为后续容量归因补齐固定观测。\n\n实现内容:\n- 在原 P0/P1/P2 检查处分别计时,保留 SQL、事务、期限及回滚顺序\n- 同步诊断读取白名单,保留旧记录的阶段缺失语义\n- 覆盖嵌套计时、导出大小、检查短路、迟到期回滚和旧记录兼容\n\n验证:\n- Java 25 离线 Maven 定向 verify:AuthRequestDiagnosticsTest、RefreshExpiryGuardTest、CapacityDiagnosticsTest、AuthDiagnosticsTestProbeTest 共 28 项单测及 RefreshExpiryLifecycleIT 18 项集成全部通过\n- python3 -m unittest discover -s scripts/capacity -p 'test_*.py':26 项通过\n- Spotless、编译、打包及 git diff --check 通过\n- 本次提交前未重跑完整后端或控制台检查,不将此前完整结果当作当前全部组合的重新验收\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-12T08:40:04-07:00"},{"Sha1":"a435000ebba0784762f27ae3f1a04e1159cf0617","Message":"feat: 增加权限说明与审计操作对象快照\n\n为控制台权限清单提供使用说明,并让操作记录在对象改名或归档后仍能识别操作对象。\n\n实现内容:\n- 新增 V29 迁移及可空权限说明,支持完整替换、输入校验和新旧清单摘要兼容\n- 平台与企业目录返回说明,保持本人有效权限代码集合不变\n- 在业务事务内保存受控对象代码快照,审计列表和详情增加类型、名称和展示摘要\n- 校验事件与对象类型匹配,保留旧摘要、安全投影和企业访问边界\n- 补充迁移、接口和审计安全测试,同步接口合同、数据字典与前端接入说明\n\n验证:\n- Java 25 下执行 ./mvnw -B -ntp -pl iam-server -am -Dit.test=PermissionDescriptionIT,AuditReadIT,AuthorizationIT,GroupLifecycleIT,MigrationIT,FoundationIT -Dfailsafe.failIfNoSpecifiedTests=false verify:通过\n- Java 25 下执行 ./mvnw -B -ntp -pl iam-server -am -Dit.test=AuditReadIT,AuthorizationMigrationIT,ApplicationLifecycleUpgradeIT,MachineCredentialUpgradeIT,AuditRetentionIT -Dfailsafe.failIfNoSpecifiedTests=false verify:通过\n- Java 25 下执行 ./mvnw -B -ntp -pl iam-server -am -Dit.test=AuditReadIT,GroupLifecycleIT -Dfailsafe.failIfNoSpecifiedTests=false verify:通过\n- 三轮去重共 180 个单元测试、83 个集成测试通过,格式检查、编译和打包通过\n- 权限清单 JSON Schema 语法校验及 git diff --check 通过\n- 未执行前端浏览器接入验证,未重启演示环境\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-12T08:36:49-07:00"}],"HeadCommit":{"Sha1":"85e2c17b4829f451e34f938ca6c11354a0b17f30","Message":"docs: 记录 P12 云测归因与 E2a 验证结果\n\n归档原两份任务文档中累计的候选验证、单轮云测、持有成本分析和 E2a 实施记录,保持历史失败及授权边界可追溯。\n\n实现内容:\n- 记录 50 次入口拒绝的真实关联证据与尚未验收的容量目标\n- 记录三个期限检查点计时的实现、首例测试修正和独立提交\n- 区分历史完整检查、共享报告覆盖与当前组合的定向复验\n- 更新当前状态并说明下一步隔离候选验证建议\n\n验证:\n- 文件摘要、独立执行日志和实际提交内容核对通过\n- 当前组合定向 28 项单测、18 项集成及 26 项 Python 测试通过\n- 文档差异、相对文件链接和 git diff --check 检查通过\n- 本次不新增完整构建、候选冻结或云测结果\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-12T08:42:04-07:00"},"CompareURL":"pengzhiyu/IAM/compare/faac5481c1cca66e4708222686b6588a43938150...85e2c17b4829f451e34f938ca6c11354a0b17f30","Len":3}...
|
1791852703
|
Edit
Delete
|
|
36913
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"faac5481c {"Commits":[{"Sha1":"faac5481c1cca66e4708222686b6588a43938150","Message":"feat(console): 合并控制台逐页布局与样式改造\n\n控制台各页面原先列表用「查看详情」按钮、详情是整张表单、弹窗操作区与空状态各不相同,常用信息和危险操作混在一起。合并 feat/console-layout 分支,按统一的列表、抽屉与弹窗约定逐页重排企业内、平台侧与应用内的管理页面。\n\n实现内容:\n- 列表统一为整行可点(OpenableRow 或同交互的专用行),名称为链接或按钮、末列右箭头,需要处理的状态用 cell-note 提示;空状态改为带图标、说明与操作的公共 EmptyList,无数据时不显示分页\n- 详情抽屉按「基本信息 / 业务分区 / 危险区」分区,修改就地展开且同一时间只进行一项;危险操作默认收起,展开后用单选卡片或确认勾选\n- 企业、应用接入改为带分区标签的详情页;新增只读组织架构图;成员、部门、用户组、所有账号、企业与平台管理员、应用开通、操作记录、权限清单、角色、角色分配、程序接入(密钥管理内嵌抽屉)与程序身份完成改造\n- 弹窗底部统一使用 FormActions「取消 + 主操作」,多步弹窗提供「重新选择」;权限统一以名称为主、代码为辅显示,勾选清单统一为带边框的列表\n- 同步更新各页面单元测试与相关验收脚本中的文案和定位\n\n验证:\n- 分支上每次提交前运行 npm run check:format:check、lint、typecheck、test、build 通过,最后一次 Vitest 26 个文件 223 项全部通过\n- 各页面在浏览器 1280 宽、375 窄屏及亮/暗色下核对;程序接入、程序身份等演示环境缺数据的页面以页面内临时改写接口响应检查,未提交写操作\n- 验收脚本仅执行 node --check,未实际运行\n- 合并无冲突,main 上未单独重新运行检查;平台权限查询接入、个人中心尚未改造\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-12T08:07:51-07:00"},{"Sha1":"3cf111b21a47760e5c71fc6b2fba96d882dbd3f1","Message":"feat(console): 把程序身份详情改为分区抽屉并列出使用它的程序客户端\n\n程序身份详情是一张整体表单,改名、更换负责人和停用都要勾选确认并一起提交;负责人失效时改名会直接被后端拒绝,界面却没有提示;列表每行放「查看详情」按钮,页面顶部还有单独的说明框。按已定的列表与抽屉约定重排。\n\n实现内容:\n- 页面说明并入卡片描述;列表改为整行可点,负责人失效时在负责人下用 cell-note 提示;空列表使用「还没有程序身份」定制空状态\n- 详情抽屉分「基本信息 / 负责人 / 程序客户端 / 停用或恢复」:改名与更换负责人就地展开,不需要影响确认;停用或恢复在危险区展开并须确认;同一时间只进行一项修改,每项修改都带上其余字段的当前值提交到原有整体保存接口\n- 正常状态下负责人失效时禁用「修改名称」并提示先更换负责人,状态说明改为程序暂时不能获取令牌;已停用且负责人失效时恢复按钮不可用\n- 新增「程序客户端」分区:按身份代码搜索程序客户端后再按身份标识过滤(最多 100 个),链接到程序接入详情;没有客户端时给出前往程序接入的链接\n- 新建改为独立弹窗:名称、代码与平铺的负责人选择,底部使用 FormActions;负责人选择改为「选择 成员代码」按钮\n- 保存后焦点留在抽屉内;重写程序身份单元测试(更换负责人、停用确认、未知结果重试、冲突重读),同步 acceptance-p10-t01 中的详情等待、新建、状态变更、负责人失效、冲突重读与深链接步骤\n\n验证:\n- npm run check(format:check、lint、typecheck、test、build):通过,Vitest 26 个文件 223 项全部通过\n- node --check 检查 acceptance-p10-t01:通过\n- 演示环境没有程序身份,浏览器中以页面内临时改写接口响应的方式检查列表、详情四区、更换负责人、停用确认、负责人失效与新建弹窗(1280 宽、375 窄屏及亮/暗色),未提交写操作\n- 验收脚本 acceptance-p10-t01:未运行,需要独立隔离环境\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-12T08:05:50-07:00"},{"Sha1":"ba844f0abb4b7b64a50d2a5b617e87e33aac5a14","Message":"feat(console): 把程序接入详情改为分区抽屉并内嵌密钥管理\n\n程序接入页顶部有一大段说明,列表每行放「查看详情」按钮;详情是一张整体表单,管理密钥要切换到另一个子视图,新建时在弹窗里同时套着两张选择卡片。按已定的列表与抽屉约定重排。\n\n实现内容:\n- 页头补「应用」徽标,原顶部说明并入页头与卡片描述,授权方式名称移到详情技术细节\n- 列表改为整行可点(客户端 ID 为按钮、程序身份与可调用操作为灰色说明),状态正常但暂时不能获取令牌时在状态下提示;空列表使用「还没有程序客户端」定制空状态\n- 详情抽屉分「基本信息 / 可调用的操作 / 密钥 / 停用或归档」:调整操作就地展开,无改动不能保存,改动后须确认;平台已不再批准的操作照常列出并注明不生效,取消勾选后不能再选回\n- 密钥改为抽屉内的常驻分区:逐份显示状态与时间,撤销确认在该行下方展开,成功后以提示条告知并重读记录;更换密钥仍显示一次性回执\n- 调整操作、密钥操作与状态变更互相锁定,写入结果不明或冲突时不能切换到其他修改;保存或撤销后焦点留在抽屉内\n- 新建改为两步:先选程序身份,再选服务并勾选操作,底部「重新选择程序身份 / 创建程序客户端」,不再要求影响确认\n- ScopeChoices 改为与权限勾选一致的边框清单,新增 unavailable、legendHidden、hint;平台「程序可调用的操作」弹窗使用平台场景的说明\n- 同步程序接入与密钥单元测试,以及 acceptance-p10-t02、t03、t04 中的详情等待、新建步骤、调整操作、密钥分区与空状态文案\n\n验证:\n- npm run check(format:check、lint、typecheck、test、build):通过,Vitest 26 个文件 222 项全部通过;构建时 Vite 提示打包文件体积偏大,未核实是否为既有提示\n- node --check 检查 acceptance-p10-t02、t03、t04:通过\n- 演示环境没有程序客户端、可访问服务与程序身份,浏览器中以页面内临时改写接口响应的方式检查列表、详情四区、撤销与更换密钥表单、调整操作、新建两步与已归档只读状态(1280 宽、375 窄屏及亮/暗色),未提交写操作;平台「程序可调用的操作」弹窗打开查看未保存\n- 验收脚本 acceptance-p10-t02、t03、t04:未运行,需要独立隔离环境\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-12T07:57:52-07:00"},{"Sha1":"91e187c7bfa1c897d22cd3fb7e5d30d7368a586d","Message":"feat(console): 在角色分配中显示角色包含的权限并改用卡片选择分配对象\n\n角色分配页已随企业管理员改为分区抽屉,但业务模式下仍看不出一条分配实际给了哪些权限,分配对象名称下显示的是无意义的标识缩写,新建时用下拉框选择成员或用户组,页头徽标也与其他应用内页面不一致。\n\n实现内容:\n- 页头徽标改为「应用」,与权限清单、角色页一致\n- 分配对象说明:有与名称不同的成员代码或用户组代码时显示「类型 · 代码」,名称即代码时只显示类型,两者都没有才回退标识缩写;用户组不是正常状态时在名称下提示\n- 详情基本信息为角色补充灰色代码,新增「角色包含的权限」(按应用权限清单显示名称)\n- 分配弹窗第一步「分配给」改为横排的「成员 / 用户组」单选卡片;第二步选中角色后显示该角色包含的权限预览,读取失败不影响分配\n- BindingRecord 类型补充 group_code;同步 acceptance-t04 中选择分配对象类型的步骤\n\n验证:\n- npm run check(format:check、lint、typecheck、test、build):通过,Vitest 26 个文件 222 项全部通过;首次运行时 group-lifecycle 中一项焦点断言偶发失败,单独重跑 3 次及全量重跑均通过,与本次改动无关\n- node --check 检查 acceptance-t04:通过\n- 浏览器 1280 宽、375 窄屏及亮/暗色检查列表、详情抽屉与分配弹窗两步(切换成员/用户组、选择成员与角色、权限预览),未提交写操作;演示数据没有分给用户组的记录,用户组代码与归档提示未在页面上实际看到\n- 验收脚本 acceptance-t04:未运行,需要独立隔离环境\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-12T07:45:50-07:00"},{"Sha1":"4a92a91f122f15d9c26a0ff0fc321e14b589777e","Message":"feat(console): 把角色详情改为分区抽屉并重排权限清单\n\n角色详情原先是一张整体表单,改名、调整权限和停用归档混在一起,任何修改都要勾选影响确认;列表每行放「查看 X」按钮,权限清单页也没有筛选。按已定的列表与抽屉约定重排两页。\n\n实现内容:\n- 权限清单拆为独立组件:卡片说明给出权限总数与可放进角色的数量,加入本地名称/代码搜索与状态筛选、「去组合角色」链接,不能放进角色的原因用灰字说明,空清单使用公共空状态\n- 角色列表改用 OpenableRow 整行可点,并提供「还没有角色」定制空状态\n- 角色详情抽屉分「基本信息 / 包含的权限 / 停用或归档」三区:改名与调整权限就地展开,状态变更用单选卡片;同一时间只进行一项修改,每项修改都带上其余字段的当前值提交到原有整体保存接口\n- 改名不再要求影响确认;有分配记录时调整权限、以及任何状态变更仍须确认,草稿改动后确认失效;归档仍同时提交 revokeBindings\n- 基本信息显示分配记录数并提供「前往角色分配」链接;已归档角色只读,不提供修改入口\n- 新建角色改为独立弹窗,底部使用 FormActions「取消 / 创建角色」\n- 公共 PermissionPicker 改为带边框的勾选清单,显示「已选 N 项」,只在不可选的行注明原因,新增 legendHidden;企业管理员中「可分配的权限」随之生效\n- 重写角色相关单元测试(状态归档、改名、调整权限确认、归档只读、新建),同步 acceptance-t04 中的角色详情入口、状态变更与冲突复核步骤\n\n验证:\n- npm run check(format:check、lint、typecheck、test、build):通过,Vitest 26 个文件 222 项全部通过\n- node --check 检查 acceptance-t04:通过\n- 浏览器 1280 宽、375 窄屏及亮/暗色检查权限清单、角色列表、详情三区、新建弹窗与企业管理员可分配权限;已停用权限、需按数据范围分配的权限与已归档角色通过页面内临时改写响应查看,未做写操作\n- 验收脚本 acceptance-t04:未运行,需要独立隔离环境\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-12T07:39:38-07:00"}],"HeadCommit":{"Sha1":"faac5481c1cca66e4708222686b6588a43938150","Message":"feat(console): 合并控制台逐页布局与样式改造\n\n控制台各页面原先列表用「查看详情」按钮、详情是整张表单、弹窗操作区与空状态各不相同,常用信息和危险操作混在一起。合并 feat/console-layout 分支,按统一的列表、抽屉与弹窗约定逐页重排企业内、平台侧与应用内的管理页面。\n\n实现内容:\n- 列表统一为整行可点(OpenableRow 或同交互的专用行),名称为链接或按钮、末列右箭头,需要处理的状态用 cell-note 提示;空状态改为带图标、说明与操作的公共 EmptyList,无数据时不显示分页\n- 详情抽屉按「基本信息 / 业务分区 / 危险区」分区,修改就地展开且同一时间只进行一项;危险操作默认收起,展开后用单选卡片或确认勾选\n- 企业、应用接入改为带分区标签的详情页;新增只读组织架构图;成员、部门、用户组、所有账号、企业与平台管理员、应用开通、操作记录、权限清单、角色、角色分配、程序接入(密钥管理内嵌抽屉)与程序身份完成改造\n- 弹窗底部统一使用 FormActions「取消 + 主操作」,多步弹窗提供「重新选择」;权限统一以名称为主、代码为辅显示,勾选清单统一为带边框的列表\n- 同步更新各页面单元测试与相关验收脚本中的文案和定位\n\n验证:\n- 分支上每次提交前运行 npm run check:format:check、lint、typecheck、test、build 通过,最后一次 Vitest 26 个文件 223 项全部通过\n- 各页面在浏览器 1280 宽、375 窄屏及亮/暗色下核对;程序接入、程序身份等演示环境缺数据的页面以页面内临时改写接口响应检查,未提交写操作\n- 验收脚本仅执行 node --check,未实际运行\n- 合并无冲突,main 上未单独重新运行检查;平台权限查询接入、个人中心尚未改造\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-12T08:07:51-07:00"},"CompareURL":"pengzhiyu/IAM/compare/4bda2cc02706e1c64d5cd23c233673a0b32d0a72...faac5481c1cca66e4708222686b6588a43938150","Len":20}...
|
1791818107
|
Edit
Delete
|
|
36783
|
16
|
5
|
16
|
86
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"629bde5b6 {"Commits":[{"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"}],"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/0106cb210639617d6d60af269be5bf9b4ef8eb0f...629bde5b6dbae87108816cd5a18339073b2e41de","Len":1}...
|
1791781818
|
Edit
Delete
|
|
36654
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"4bda2cc02 {"Commits":[{"Sha1":"4bda2cc02706e1c64d5cd23c233673a0b32d0a72","Message":"test: 修复集成测试应用的关闭顺序\n\n测试类的临时数据库和 Redis 会先于缓存中的应用回收,后台任务可能继续访问已回收资源。\n\n实现内容:\n- 为 BaselineIT 和 AccountsIT 声明 AFTER_CLASS 关闭并接入测试探针\n- 在容器仍存活时核对连接池、Redis、调度任务及所属执行器结束状态\n- 增加正常、异常回调及未关闭资源反例,保留原故障恢复和安全断言\n- 记录本地归因、首次失败、最终定向结果与完整检查的启动阻塞\n\n验证:\n- Java 25 离线 test-compile(含 Spotless)通过\n- 最终定向 29 项及 Baseline 独立最后应用 7 项通过\n- 完整 clean verify:169 项单测通过;集成 422 项通过、1 项启动错误、74 项跳过\n- ProtocolConsistencyIT 第二个应用因端口绑定失败启动不成功,占用者尚未确证;完整门禁未通过,未重跑\n- F0 36 场景全部拒绝,消费、新凭据和刷新成功事件为零\n- git diff --check 和 37 个文档相对链接/锚点检查通过\n\n仅修改测试及任务文档;不改变产品合同,不作为候选冻结或性能验收通过的证明。\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-11T08:50:19-07:00"},{"Sha1":"b69ba6c8145d3b5bc8e67e37a9d2f26e8723222b","Message":"feat(console): 合并控制台面向普通用户的文案改写\n\n控制台原先大量使用标识、版本、协议术语和后端状态原值,普通管理员难以理解。合并 feat/console-polish-next 分支,完成三个概览页重设计、导航改名,以及全部管理页面、个人中心、工作台与切换器的文案改写。\n\n实现内容:\n- 重新设计平台、企业、应用三个概览页,侧边栏模块按日常说法改名,并在 docs/console/design-system.md 记录新旧名称对照\n- 各管理页面改用日常说法,状态和角色显示中文,标识、版本、追踪编号收进默认收起的\"技术细节\"\n- 时间输入改用本地日期时间选择器,提交时仍为带时区的 ISO 时间;操作记录显示中文操作名称,并支持下拉筛选\n- \"秘密\"统一称\"密钥\",\"机器客户端/服务主体\"称\"程序客户端/程序身份\",\"IAM 会话\"称\"登录记录\"\n- 同步更新单元测试与验收脚本中的文案和定位,列表行增加 data-record-id 供脚本定位\n\n验证:\n- 分支上每批提交前运行 npm run check:format:check、lint、typecheck、build 通过,最后一次测试 203/203 通过\n- 各页面在浏览器中核对;程序接入详情、程序身份详情与启用新应用弹窗因演示环境缺数据或登录过期未核对\n- 验收脚本仅执行 node --check,未实际运行\n- 合并无冲突,main 上未单独重新运行检查\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-11T08:34:48-07:00"},{"Sha1":"9339f14f94e988b7a3d898f11daa506446d75c44","Message":"feat(console): 改写工作台与企业切换器文案\n\n工作台和顶部切换器仍使用\"管理上下文\"\"平台总入口仅限平台管理员\"\"全员准入\"\"企业已启用/应用正常\"双徽标等说法,工作台还直接展示账号标识。改为日常说法,并与应用开通页的\"使用情况\"保持一致。\n\n实现内容:\n- 工作台说明改为说明顶部一直显示正在管理的企业和应用;平台入口锁定提示改为\"只有平台管理员可以进入\",应用管理员入口改为\"进入应用接入\"\n- 右侧卡片改为\"我的账号\",显示名字、平台管理身份、登录方式与\"这台电脑保存了什么\",账号标识收进技术细节\n- 切换器标题改为\"切换企业或应用\"并改写说明;企业列表去掉恒为真的\"企业正常\"徽标,非正常状态显示中文状态\n- 应用列表改为\"应用(可选)\",用 appUsage 的单个\"使用情况\"徽标替代企业关系与全局状态两个徽标,可进入的应用显示\"所有成员可用/仅指定成员可用\";空状态、无权限与停用说明改写\n- 顶部路径的\"未选择管理上下文\"改为\"未选择企业\",相关 aria-label 同步改写\n- 平台与应用无法进入时的说明改为日常说法,应用停用原因复用 appUsage\n- 删除已无引用的 relationLabel、applicationStatusLabel、accessPolicyLabel\n- 同步更新 acceptance.mjs 中切换器标题、应用分组、停用说明与无权限提示的定位\n\n验证:\n- npm run check:format:check、lint、typecheck、build 通过,测试 203/203 通过\n- 浏览器核对工作台与切换器(选择企业后未进入)\n- 验收脚本仅执行 node --check,未实际运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-11T08:27:50-07:00"},{"Sha1":"74debf18dda59db91112b09eb5a93214a0e18c52","Message":"feat(console): 改写个人中心文案并把会话称为登录记录\n\n个人中心原先使用\"IAM 会话\"\"最近协议活动\"\"绝对截止\"\"期限类别\"\"管理上下文\"等术语,每条会话都重复一段说明并直接展示编号。改为\"登录记录\"等日常说法,编号收进技术细节。\n\n实现内容:\n- \"IAM 登录会话\"改为\"登录记录\",状态改为登录中/已过期/已退出/已失效;时间字段改为登录时间、最近使用、一直不用时自动退出于、最晚退出时间、登录有效期\n- 每条记录重复的说明合并到卡片说明中;登录编号收进技术细节;按钮改为\"退出当前登录\"\"退出这次登录\"\"确认退出\"\"刷新登录记录\"\n- 退出确认与成功提示改为\"登录\"说法,冲突与无权提示改写\n- \"我的身份\"改为\"我的账号\",显示名字与平台管理身份,账号标识收进技术细节;\"我的企业\"去掉恒为真的\"企业正常/有效成员\"徽标与成员标识,改为\"你的身份:所有者/普通成员\",按钮改为\"切换企业\"\n- 底部说明改为\"切换企业与退出登录有什么区别\"\n- 邮箱卡片中\"无法恢复丢失的全部 MFA 因素\"改为日常说明\n- 操作记录中的\"两步验证\"统一为与多因素验证页面一致的\"多因素验证\"\n- 同步更新 personal 测试与 acceptance-t05、acceptance-p11-t04/t05/t07 的按钮与标题定位(示例应用自身的\"退出当前 IAM 会话\"按钮未改)\n\n验证:\n- npm run check:format:check、lint、typecheck、build 通过,测试 203/203 通过\n- 浏览器核对个人中心各卡片与登录记录(未执行退出)\n- 验收脚本仅执行 node --check,未实际运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-11T08:25:43-07:00"},{"Sha1":"546f7184ef08dfa32fbd7610c8152fa6856d9ee4","Message":"style(console): 格式化程序身份验收脚本中的负责人失效断言\n\n上一提交在运行 Prettier 之后又修改了 acceptance-p10-t01.mjs 的一行断言,导致该文件不符合 npm run format:check。\n\n实现内容:\n- 按 Prettier 规则折行负责人失效断言,不改变断言内容\n\n验证:\n- npx prettier --check scripts/acceptance-p10-t01.mjs:通过\n- node --check scripts/acceptance-p10-t01.mjs:通过;脚本未实际运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-11T08:24:05-07:00"}],"HeadCommit":{"Sha1":"4bda2cc02706e1c64d5cd23c233673a0b32d0a72","Message":"test: 修复集成测试应用的关闭顺序\n\n测试类的临时数据库和 Redis 会先于缓存中的应用回收,后台任务可能继续访问已回收资源。\n\n实现内容:\n- 为 BaselineIT 和 AccountsIT 声明 AFTER_CLASS 关闭并接入测试探针\n- 在容器仍存活时核对连接池、Redis、调度任务及所属执行器结束状态\n- 增加正常、异常回调及未关闭资源反例,保留原故障恢复和安全断言\n- 记录本地归因、首次失败、最终定向结果与完整检查的启动阻塞\n\n验证:\n- Java 25 离线 test-compile(含 Spotless)通过\n- 最终定向 29 项及 Baseline 独立最后应用 7 项通过\n- 完整 clean verify:169 项单测通过;集成 422 项通过、1 项启动错误、74 项跳过\n- ProtocolConsistencyIT 第二个应用因端口绑定失败启动不成功,占用者尚未确证;完整门禁未通过,未重跑\n- F0 36 场景全部拒绝,消费、新凭据和刷新成功事件为零\n- git diff --check 和 37 个文档相对链接/锚点检查通过\n\n仅修改测试及任务文档;不改变产品合同,不作为候选冻结或性能验收通过的证明。\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-11T08:50:19-07:00"},"CompareURL":"pengzhiyu/IAM/compare/06556f73ea74b431979b8b819de8e85358843b49...4bda2cc02706e1c64d5cd23c233673a0b32d0a72","Len":43}...
|
1791733915
|
Edit
Delete
|
|
36291
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"06556f73e {"Commits":[{"Sha1":"06556f73ea74b431979b8b819de8e85358843b49","Message":"perf: 优化客户端凭据校验与授权查询并补充容量观测\n\nP12 L1 尚未通过,先实现客户端校验、授权查询与观测工具的第一批调整,供另一台 JDK 25 设备编译回归后形成云端测试候选;本提交不代表性能验收通过。\n\n实现内容:\n- 新客户端秘密采用用途独立的版本化 HMAC-SHA256,兼容历史 BCrypt12;通过 V25 显式激活密钥权威并守卫凭据写入\n- 增加普通客户端秘密轮换及认证换代复核,补充协议、密钥策略、部署辅助工具与测试源码\n- 通过 V26 缩小目标企业资格查询,批量计算组织范围,将本地缓存调整为有界 LRU\n- 增加认证、锁、缓存及连接池指标,补充 legacy/hmac/mixed 容量模式、Linux 临时路径与候选摘要核对\n- 更新部署说明和 P12 交接,明确另一设备先完成构建回归,随后再进行云端隔离性能测试\n\n验证:\n- google-java-format 1.35.0 --aosp --dry-run --set-exit-if-changed:51 个新增或修改 Java 文件通过\n- Python AST 解析:11 个新增或修改 Python 文件通过,仅语法检查,未导入或执行脚本\n- git diff --check:通过;新增文档相对文件链接检查通过\n- 当前默认 Java 21,按用户安排未运行 Maven/Spotless 全工程门禁、编译、测试、数据库迁移、容器或压测;须在 JDK 25 设备继续验收\n\nBREAKING CHANGE: 启动前必须准备 IAM_CLIENT_SECRET_KEY_RING_FILE 并以迁移身份显式激活权威集合;写入 HMAC 凭据后不支持直接回退旧二进制\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-10-10T17:56:32+08:00"}],"HeadCommit":{"Sha1":"06556f73ea74b431979b8b819de8e85358843b49","Message":"perf: 优化客户端凭据校验与授权查询并补充容量观测\n\nP12 L1 尚未通过,先实现客户端校验、授权查询与观测工具的第一批调整,供另一台 JDK 25 设备编译回归后形成云端测试候选;本提交不代表性能验收通过。\n\n实现内容:\n- 新客户端秘密采用用途独立的版本化 HMAC-SHA256,兼容历史 BCrypt12;通过 V25 显式激活密钥权威并守卫凭据写入\n- 增加普通客户端秘密轮换及认证换代复核,补充协议、密钥策略、部署辅助工具与测试源码\n- 通过 V26 缩小目标企业资格查询,批量计算组织范围,将本地缓存调整为有界 LRU\n- 增加认证、锁、缓存及连接池指标,补充 legacy/hmac/mixed 容量模式、Linux 临时路径与候选摘要核对\n- 更新部署说明和 P12 交接,明确另一设备先完成构建回归,随后再进行云端隔离性能测试\n\n验证:\n- google-java-format 1.35.0 --aosp --dry-run --set-exit-if-changed:51 个新增或修改 Java 文件通过\n- Python AST 解析:11 个新增或修改 Python 文件通过,仅语法检查,未导入或执行脚本\n- git diff --check:通过;新增文档相对文件链接检查通过\n- 当前默认 Java 21,按用户安排未运行 Maven/Spotless 全工程门禁、编译、测试、数据库迁移、容器或压测;须在 JDK 25 设备继续验收\n\nBREAKING CHANGE: 启动前必须准备 IAM_CLIENT_SECRET_KEY_RING_FILE 并以迁移身份显式激活权威集合;写入 HMAC 凭据后不支持直接回退旧二进制\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-10-10T17:56:32+08:00"},"CompareURL":"pengzhiyu/IAM/compare/958ef4eaa9c5c873973a94474f7ffb6ab9c16cd2...06556f73ea74b431979b8b819de8e85358843b49","Len":1}...
|
1791626275
|
Edit
Delete
|
|
35931
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"958ef4eaa {"Commits":[{"Sha1":"958ef4eaa9c5c873973a94474f7ffb6ab9c16cd2","Message":"fix(mfa): 限制初始管理员凭据并原子完成首次开通\n\n初始管理员密码原先没有有效期,首次绑定后仍可作为长期密码使用。增加固定开通期限并要求绑定时设置正式密码,保留现有 MFA 安全机制。\n\n实现内容:\n- V24 增加初始凭据截止和完成标记,固定 24 小时有效,受限会话仍最多 300 秒且不能越过开户期限\n- 正式密码替换、TOTP 消费、因素绑定、恢复码生成及审计原子提交,撤销旧身份并创建新会话\n- 处理并发开通的浏览器会话清理,仅续办当前浏览器的有效 OIDC 交易且不延长交易期限\n- 增加离线重新签发命令和私密交付流程,禁止用于已绑定账号;前端仍要求确认保存恢复码\n- 补充开通、迁移、并发、事务回滚、前端和交付脚本测试,同步账号与 MFA 合同\n\n验证:\n- Maven 定向 verify:BootstrapEnrollmentIT 10 项、AccountsIT 15 项、MfaIT 34 项、TotpTest 3 项通过\n- AttackProtectionIT 12 项、SessionLifecycleIT 26 项、AuthorizationIT 26 项、BrowserSecurityIT 5 项通过\n- 初始凭据及三类 MFA 迁移测试各 1 项通过;AuthorizationMigrationIT 修正旧版本断言后 3 项通过\n- npm run check:21 个文件 173 项测试以及格式、lint、类型检查、构建通过\n- python3 deploy/lab/test-bootstrap.py:3 项通过\n- Maven console profile package 通过,最终 JAR 的前端资源和 V24 迁移与工作区一致\n- 后端全量测试及本阶段真实浏览器验收未运行\n\nBREAKING CHANGE: 需执行 V24 并同步升级前后端;历史未绑定初始管理员必须离线重新签发,初始开通确认接口新增必填 new_password,旧实例不能混跑\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-09T18:38:18+08:00"},{"Sha1":"f59b781e837c7cc0afc4916f4e7ace4d5e37f760","Message":"fix(mfa): 修复受限会话恢复并增加递增冷却\n\n修复受限 MFA 会话过期后的页面恢复,并区分挑战终态与临时限流,防止用户等待后继续提交已失效的挑战。\n\n实现内容:\n- 全局 401 覆盖 PENDING/RECOVERY,补充 MFA 路由保护和明确退出导航\n- 挑战及绑定截止不晚于基础会话期限,终态要求重新开始,临时限流按 Retry-After 等待且不自动提交\n- V23 增加账号共享失败累计,每五次无效证明按 30/60/120/300 秒递增冷却,并原子记录审计与 Outbox\n- 保留 TOTP 防重放、恢复码单次消费、管理员禁止停用及独立二次验证授权\n- 补充集成、迁移、前端与浏览器验收测试,同步接口合同\n\n验证:\n- Maven 定向 verify:TotpTest 3 项、AttackProtectionIT 12 项、BrowserSecurityIT 5 项及三类 MFA 迁移测试各 1 项通过\n- MfaIT 首轮两项测试夹具异常已修复,定向 verify 重跑 34 项全部通过\n- npm run check:21 个文件共 171 项测试通过,格式、lint、类型及构建通过;最终脚本补测后格式与 lint 再次通过\n- Maven console profile package 成功,最终 JAR 浏览器 S01—S07 完整通过,S08 正式登录路由单独补测通过\n- 后端全量测试及原 P11 浏览器全套未运行\n\nBREAKING CHANGE: 挑战耗尽由 429 改为 400,新增 MFA_CHALLENGE_CONSUMED 和 MFA_COOLDOWN;需执行 V23、同步升级前后端并协调停止旧实例\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-09T18:13:57+08:00"},{"Sha1":"c0aca8ed9cb6c24340ab9a6cf3c22ff42d68c59b","Message":"fix(mfa): 为敏感因素操作增加独立二次验证授权\n\n登录验证不再授权认证器重绑、恢复码再生成或停用 MFA,敏感操作必须完成新的 TOTP 验证。\n\n实现内容:\n- 新增 V22 授权表,绑定用户、会话、因素代际与操作类型,五分钟有效并在业务事务内原子消费\n- 保持首次绑定与恢复码受限重绑、管理员禁用限制及普通管理会话强度语义\n- 前端按具体操作弹出验证,身份变化、取消或过期终止,成功后最多续办一次并使用轮换后的 CSRF\n- 补充迁移、授权边界、前端续办测试以及接口文档和浏览器验收脚本\n\n验证:\n- MfaIT 23、AttackProtectionIT 12、TotpTest 3、BrowserSecurityIT 5、MfaMigrationIT 1、MfaStepUpMigrationIT 1 均通过\n- npm run check 通过:20 个文件共 157 项测试,格式、静态检查、类型检查与构建通过\n- 最后调整验收脚本后 npm run format:check 通过;console 制品打包通过\n- 最终制品的真实浏览器 12 个场景分两轮覆盖通过;完整单轮受账号限流影响,脚本已加入窗口等待\n- git diff --check 通过;后端全量测试未运行\n\nBREAKING CHANGE: 敏感因素操作需在挑战中指定 operation 并携带 X-MFA-Step-Up 授权。上线须执行 V22 并同步升级前后端,旧实例不可混跑;升级会清除未完成的绑定候选。\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-09T17:17:07+08:00"},{"Sha1":"7f8cdc4698e73b2af30f932250521b0d12198f06","Message":"chore(evidence): 外置验收截图并记录历史清理映射\n\n批量浏览器截图占据仓库主要体积,改为独立归档并保留证据追溯方式。\n\n实现内容:\n- 排除 docs/evidence 下批量图片再次进入版本控制,保留其他文档图片\n- 增加 3473 张截图的归档校验清单及 146 个历史提交的新旧映射\n- 将 534 处截图链接指向归档说明并保留原路径,补充恢复及后续证据规则\n\n验证:\n- 146 个历史提交的非截图文件及父提交关系逐一核对通过\n- 3473 张归档图片逐一核对 SHA-256,通过归档完整性检查\n- 全部归档图片被忽略,其他文档图片未被误排除\n- 534 处改写链接目标校验及 git diff --check 通过\n- 未运行业务测试,本次没有修改业务代码或测试断言\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-09T15:37:26+08:00"},{"Sha1":"7da2727c1fa0b56e93f3c0bf68882dedc18dc46d","Message":"docs(capacity): 归档生命周期锁优化与两小时故障复验\n\n记录共享生命周期读锁候选的同条件短测、正式稳定性及故障复验,保留失败与修正,并按原预算维持未通过裁决。\n\n实现内容:\n- 归档原始样本、源码摘要、曲线、认证方案评审及复算脚本\n- 同步开发计划和容量任务,区分历史、诊断、正式结果及目标缺口\n- 固定派生CSV使用LF,核对220份证据摘要与Git暂存内容一致\n- 保留耗尽探针首次失败及补测,记录7个独立环境与私有材料清理\n\n验证:\n- 冻结候选 ./mvnw -B -ntp clean verify -Pconsole:491个唯一测试通过,零失败、零跳过,AOSP及冻结前端构建通过\n- Python统计合同11项通过;最终故障工具javac及AOSP通过\n- 正式7200秒:815729成功、31错误、零漏发和429;刷新P95 303.72ms仍超过200ms预算\n- 10类低档隔离探针及9类持续背景故障最终通过,初次失败与预热错误保留\n- 归档JSON/Python语法、摘要与git diff --cached --check通过\n- L1自身目标仍未满足,限定试运行依据不足,P12未通过;未进入P13、未推送\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-08T20:21:54+08:00"}],"HeadCommit":{"Sha1":"958ef4eaa9c5c873973a94474f7ffb6ab9c16cd2","Message":"fix(mfa): 限制初始管理员凭据并原子完成首次开通\n\n初始管理员密码原先没有有效期,首次绑定后仍可作为长期密码使用。增加固定开通期限并要求绑定时设置正式密码,保留现有 MFA 安全机制。\n\n实现内容:\n- V24 增加初始凭据截止和完成标记,固定 24 小时有效,受限会话仍最多 300 秒且不能越过开户期限\n- 正式密码替换、TOTP 消费、因素绑定、恢复码生成及审计原子提交,撤销旧身份并创建新会话\n- 处理并发开通的浏览器会话清理,仅续办当前浏览器的有效 OIDC 交易且不延长交易期限\n- 增加离线重新签发命令和私密交付流程,禁止用于已绑定账号;前端仍要求确认保存恢复码\n- 补充开通、迁移、并发、事务回滚、前端和交付脚本测试,同步账号与 MFA 合同\n\n验证:\n- Maven 定向 verify:BootstrapEnrollmentIT 10 项、AccountsIT 15 项、MfaIT 34 项、TotpTest 3 项通过\n- AttackProtectionIT 12 项、SessionLifecycleIT 26 项、AuthorizationIT 26 项、BrowserSecurityIT 5 项通过\n- 初始凭据及三类 MFA 迁移测试各 1 项通过;AuthorizationMigrationIT 修正旧版本断言后 3 项通过\n- npm run check:21 个文件 173 项测试以及格式、lint、类型检查、构建通过\n- python3 deploy/lab/test-bootstrap.py:3 项通过\n- Maven console profile package 通过,最终 JAR 的前端资源和 V24 迁移与工作区一致\n- 后端全量测试及本阶段真实浏览器验收未运行\n\nBREAKING CHANGE: 需执行 V24 并同步升级前后端;历史未绑定初始管理员必须离线重新签发,初始开通确认接口新增必填 new_password,旧实例不能混跑\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-09T18:38:18+08:00"},"CompareURL":"pengzhiyu/IAM/compare/bff0faf3451547b455191b02c7cf7ca2a1c1ee80...958ef4eaa9c5c873973a94474f7ffb6ab9c16cd2","Len":10}...
|
1791611083
|
Edit
Delete
|
|
35930
|
16
|
5
|
16
|
125
|
0
|
0
|
refs/heads/main
|
0
|
|
1791611083
|
Edit
Delete
|
|
35132
|
16
|
1
|
16
|
125
|
0
|
0
|
|
0
|
|
1791450264
|
Edit
Delete
|
|
33027
|
16
|
5
|
16
|
86
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[],"HeadCommit":{"S {"Commits":[],"HeadCommit":{"Sha1":"0106cb210639617d6d60af269be5bf9b4ef8eb0f","Message":"fix(devices): 修复 MCP 无法发现快速连接设备\n\n未加入个人设备列表的快速连接已有稳定身份,但 MCP 仅枚举正式档案,导致无法按设备 ID 定位。\n\n实现内容:\n- 合并正式档案、快速连接成功历史和活动记录,支持按来源筛选\n- 按界面设备 ID 检索并返回 profileId,保留同设备的不同连接身份\n- 按内部 ID 去重,隔离账号读取,避免重新暴露已清除历史的闲置记录\n- 补充设备发现、来源筛选、身份转换及 MCP 协议回归测试\n\n验证:\n- npm test -- electron/quickConnectStore.test.ts electron/agent:124 项通过\n- npm run typecheck:通过\n- GOCACHE=/private/tmp/juhai-opsdesk-go-build-cache GOPROXY=off npm run build:通过;使用临时缓存目录避免沙箱写入默认 Go 缓存失败\n- 用户反馈人工测试通过\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-09-26T21:27:23+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/2bbb343f0083144435b1dd0e1ed972e4ba663629...0106cb210639617d6d60af269be5bf9b4ef8eb0f","Len":0}...
|
1790560657
|
Edit
Delete
|
|
33026
|
16
|
5
|
16
|
86
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"2bbb343f0 {"Commits":[{"Sha1":"2bbb343f0083144435b1dd0e1ed972e4ba663629","Message":"Merge branch 'main' of https://gamebyte.cn/gitea/root/juhai-opsdesk\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-27T13:40:06+08:00"},{"Sha1":"0106cb210639617d6d60af269be5bf9b4ef8eb0f","Message":"fix(devices): 修复 MCP 无法发现快速连接设备\n\n未加入个人设备列表的快速连接已有稳定身份,但 MCP 仅枚举正式档案,导致无法按设备 ID 定位。\n\n实现内容:\n- 合并正式档案、快速连接成功历史和活动记录,支持按来源筛选\n- 按界面设备 ID 检索并返回 profileId,保留同设备的不同连接身份\n- 按内部 ID 去重,隔离账号读取,避免重新暴露已清除历史的闲置记录\n- 补充设备发现、来源筛选、身份转换及 MCP 协议回归测试\n\n验证:\n- npm test -- electron/quickConnectStore.test.ts electron/agent:124 项通过\n- npm run typecheck:通过\n- GOCACHE=/private/tmp/juhai-opsdesk-go-build-cache GOPROXY=off npm run build:通过;使用临时缓存目录避免沙箱写入默认 Go 缓存失败\n- 用户反馈人工测试通过\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-09-26T21:27:23+08:00"},{"Sha1":"7923d133692886489f02ce82a50e96dd5a6caa87","Message":"fix(renderer): 统一路线选择样式并隐藏预览节点域名\n\n实现内容:\n- 实时预览与日志采集统一使用路线文案,国内与海外选择保持不变\n- 提取现有预览工具栏下拉样式供两页共用,统一箭头、焦点和禁用状态\n- 移除预览候选节点域名及悬浮提示,保留实际连接方式说明\n- 同步路线验收说明\n\n验证:\n- npm run typecheck\n- 预览工作区测试 23 项通过\n- git diff --check\n- 界面交互与主题外观待人工验证\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-09-26T20:52:37+08:00"},{"Sha1":"00a1740211b4bd4dd73dfd6470af225a0d4fde2e","Message":"feat(app): 增加设备国内与海外中继选择并取消国家探测\n\n实现内容:\n- 默认使用国内中继,按账号和设备记住选择,日志与预览页面共享线路控件及海外提示\n- 旧自动设置迁移为国内,保留海外设置;新操作读取固定线路,不再查询国家或探测候选节点\n- 线路切换不打断活动会话,保留直连、普通 SFTP、国内小尾部快速路径和原有认证校验\n- 更新业务说明和人工验收步骤,撤下未证实有效的提前探测实验\n\n验证:\n- 8 个针对性测试文件共 206 项通过,覆盖偏好隔离、并发保存、配置迁移、线路切换和采集回归\n- npm run typecheck 通过\n- GOCACHE=/private/tmp/juhai-log-optimization-go-cache GOPROXY=off GOSUMDB=off npm run build 通过\n- 未自动操控应用或连接真实设备验证本次功能,真机耗时和界面交互待人工验收\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-09-26T20:18:03+08:00"},{"Sha1":"05fc234aec9d1c9689a12abbbcac50eecdd05256","Message":"fix(logs): 完善采集准备缓存、取消清理和耗时诊断\n\n实现内容:\n- 将同连接 Agent 校验缓存延长至五分钟,DNS 独立保留六十秒且命中不续期\n- 保留顺序建链及分步上传启动,补齐隧道取消、迟到资源清理和共享连接保护\n- 记录隧道各阶段、SSH 握手和逐文件耗时,将界面计数明确为 SSH 命令次数\n- 清理实验回退后的测试残留,同步业务流程与验收文档\n\n验证:\n- 日志、启动器、选路及连接生命周期回归:7 个测试文件、230 项通过\n- 本机回环 SSH 集成测试:9 项通过\n- npm run build 通过,包含三套 TypeScript 类型检查\n- 用户同设备五文件各一万行复测:首次 5.888 秒,约二十二秒后再次采集 1.947 秒;仅作为基线,不宣称冷启动进一步提速\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-09-26T14:08:55+08:00"}],"HeadCommit":{"Sha1":"2bbb343f0083144435b1dd0e1ed972e4ba663629","Message":"Merge branch 'main' of https://gamebyte.cn/gitea/root/juhai-opsdesk\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-27T13:40:06+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/83529861ab1a7994b1677520ea5b6b07d9e02e0e...2bbb343f0083144435b1dd0e1ed972e4ba663629","Len":12}...
|
1790559633
|
Edit
Delete
|
|
31771
|
16
|
5
|
16
|
86
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"83529861a {"Commits":[{"Sha1":"83529861ab1a7994b1677520ea5b6b07d9e02e0e","Message":"fix(knowledge): 修复 0.2.0 产品知识版本匹配并完善发布流程\n\n- 将应用版本与 106 篇产品知识及评估同步到 0.2.0\n- 补齐快速连接、个人分组、日志和 INI 等功能说明及复现用例\n- 增加当前应用版本覆盖校验,避免升级后无适用资料\n- 增加保留旧版资料的候选发布、逐条核验和受控回退脚本\n- 记录版本差异、云端发布及新旧客户端验证结果\n\n验证:\n- npm run typecheck\n- npm run build\n- npm run check:knowledge\n- Python 发布脚本语法检查及 git diff --check\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-21T22:16:03+08:00"},{"Sha1":"57d1cec0b41de34c5cbdc89e1ecd954d1bf5ccc3","Message":"fix(devices): 修复公网 SSH 失效端口重试与分配保护\n\n- 增加每轮一次的换端口重试及冷却倒计时,保留锁清理后的失败状态\n- 持久化服务端设备冷却并限制遗留端口数量,防止跨客户端重复分配\n- 先保留新端口再原子切换关联,失败保留原记录并维持安全回收\n- 增加数据库结构版本 3、客户端及服务端回归测试和操作说明\n\n验证:\n- npm run typecheck 与 npm run build\n- 客户端相关测试 84 项通过\n- go test -race ./...\n- PostgreSQL 9 项回归及生产副本升级演练通过\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-21T22:10:52+08:00"}],"HeadCommit":{"Sha1":"83529861ab1a7994b1677520ea5b6b07d9e02e0e","Message":"fix(knowledge): 修复 0.2.0 产品知识版本匹配并完善发布流程\n\n- 将应用版本与 106 篇产品知识及评估同步到 0.2.0\n- 补齐快速连接、个人分组、日志和 INI 等功能说明及复现用例\n- 增加当前应用版本覆盖校验,避免升级后无适用资料\n- 增加保留旧版资料的候选发布、逐条核验和受控回退脚本\n- 记录版本差异、云端发布及新旧客户端验证结果\n\n验证:\n- npm run typecheck\n- npm run build\n- npm run check:knowledge\n- Python 发布脚本语法检查及 git diff --check\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-21T22:16:03+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/1eecf5d0083e203962f44259da0fc663ac35aafd...83529861ab1a7994b1677520ea5b6b07d9e02e0e","Len":2}...
|
1790041746
|
Edit
Delete
|
|
31262
|
16
|
24
|
16
|
86
|
0
|
0
|
refs/tags/v0.2.0
|
0
|
Juhai OpsDesk v0.2.0 · 快速连接、设备分组与日志体验升级
|
1789830872
|
Edit
Delete
|
|
31261
|
16
|
9
|
16
|
86
|
0
|
0
|
refs/tags/v0.2.0
|
0
|
{"Commits":null,"HeadCommit":{" {"Commits":null,"HeadCommit":{"Sha1":"1eecf5d0083e203962f44259da0fc663ac35aafd","Message":"fix(devices): 修复手动屏幕方向跨目录优先级\n\n优先在全部约定目录中查找非空的是否竖屏_手动,缺失时再回退普通方向,避免外部平台默认值遮蔽私有目录的手动配置。\n\n实现内容:\n- 修复设备概览、截图和实时预览共用的方向解析\n- 补充跨目录覆盖、手动零值、空值回退和扫描脚本回归测试\n- 同步配置注释与设备知识库说明\n\n验证:\n- 6 个相关测试文件共 128 项测试通过\n- npm run typecheck\n- npm run check:knowledge\n- git diff --cached --check\n- 实机画面人工验收结果尚未记录\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-18T23:15:25+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/0000000000000000000000000000000000000000...1eecf5d0083e203962f44259da0fc663ac35aafd","Len":0}...
|
1789830872
|
Edit
Delete
|
|
31255
|
16
|
5
|
16
|
86
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"1eecf5d00 {"Commits":[{"Sha1":"1eecf5d0083e203962f44259da0fc663ac35aafd","Message":"fix(devices): 修复手动屏幕方向跨目录优先级\n\n优先在全部约定目录中查找非空的是否竖屏_手动,缺失时再回退普通方向,避免外部平台默认值遮蔽私有目录的手动配置。\n\n实现内容:\n- 修复设备概览、截图和实时预览共用的方向解析\n- 补充跨目录覆盖、手动零值、空值回退和扫描脚本回归测试\n- 同步配置注释与设备知识库说明\n\n验证:\n- 6 个相关测试文件共 128 项测试通过\n- npm run typecheck\n- npm run check:knowledge\n- git diff --cached --check\n- 实机画面人工验收结果尚未记录\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-18T23:15:25+08:00"},{"Sha1":"18cf5164777a2de8b80a3748719274deb164d62b","Message":"feat(renderer): 优先展示快速连接并恢复上次主页功能\n\n实现内容:\n- 将快速连接排在导航首位,个人设备入口紧随其后\n- 在本机保存最后使用的主页功能,启动时恢复该入口\n- 首次使用、过期入口或存储不可用时回退到快速连接,不恢复设备会话\n\n验证:\n- npm run typecheck 通过\n- 主页偏好与终端页面状态相关 11 项测试通过\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-09-19T22:38:22+08:00"},{"Sha1":"915907b7d1f55dc14ca910b96aab8340d107e41e","Message":"feat(renderer): 优化快速连接布局与连接状态反馈\n\n将快速入口和最近连接整理为可扫描的操作面板,并在同一目标连接期间防止重复操作。\n\n实现内容:\n- 重排连接输入、认证选项、最近记录和保存设备对话框,适配浅色、深色及窄窗口\n- 展示公网目标的门店与包厢信息,防抖查询并隔离迟到响应\n- 修复图标与输入框的重复边框,增加密码显隐及本机私钥选择\n- 连接、校验、打开操作台及指纹确认期间禁用同目标入口和回车提交,保留取消与其他目标连接\n- 使用提供的单色 SVG 替换最近记录设备图标,通过主题颜色着色并调整窄窗口对齐\n\n验证:\n- npm run typecheck 和 npm run build 通过\n- 快速连接及账号客户端相关 5 个测试文件、65 项测试通过\n- 用户已人工验证快速连接界面、设备自动命名与连接中按钮保护\n- 本次 SVG 替换已通过构建检查,未进行自动桌面交互测试\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-09-19T22:32:53+08:00"},{"Sha1":"641a614a33411567e47e69da2b24616bb882c07a","Message":"feat(devices): 实现公网设备门店查询与快速记录自动命名\n\n输入公网设备 ID 后复用服务端后台认证查询门店与包厢,减少快速连接记录的人工命名。\n\n实现内容:\n- 增加只读查询接口,严格取首条结果并校验会话与设备权限\n- 通过主页 IPC 暴露裁剪后的信息,合并并行请求并丢弃过期会话响应\n- 按“门店名称 - 包厢名称”命名快速记录,保留正式档案和用户自定义名称\n- 查询失败或无结果时保留原有连接流程,查询不申请设备锁或远程端口\n\n验证:\n- npm run typecheck 和 npm run build 通过\n- 快速连接存储、账号客户端和目标解析相关测试通过\n- 服务端 go test -race ./... 通过\n- 已完成服务端部署、健康检查及真实后台只读查询验收\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-09-19T22:32:15+08:00"},{"Sha1":"564dd95a6839b7659aabbc1377f22f03975010ff","Message":"feat(devices): 实现免建档快速连接与最近记录\n\n为减少连接前创建设备档案和重复填写认证的步骤,新增快速连接入口。\n\n实现内容:\n- 支持输入局域网 IP 或公网设备 ID,打开独立操作台或主页 SSH、SFTP 标签\n- 按账号隔离默认认证与最近成功记录,密码使用安全存储\n- 复用已有设备并支持原位保存为正式设备,保留会话和日志、INI 数据\n- 补充连接生命周期测试、功能说明和知识库导航覆盖\n\n验证:\n- npm run typecheck\n- npm test:166 个测试文件、1488 项测试通过\n- 最终调整后快速连接相关 20 项测试通过\n- npm run build(使用本地 Go 缓存并关闭依赖下载)\n- npm run check:knowledge\n- 用户反馈人工测试通过\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-09-19T20:39:58+08:00"}],"HeadCommit":{"Sha1":"1eecf5d0083e203962f44259da0fc663ac35aafd","Message":"fix(devices): 修复手动屏幕方向跨目录优先级\n\n优先在全部约定目录中查找非空的是否竖屏_手动,缺失时再回退普通方向,避免外部平台默认值遮蔽私有目录的手动配置。\n\n实现内容:\n- 修复设备概览、截图和实时预览共用的方向解析\n- 补充跨目录覆盖、手动零值、空值回退和扫描脚本回归测试\n- 同步配置注释与设备知识库说明\n\n验证:\n- 6 个相关测试文件共 128 项测试通过\n- npm run typecheck\n- npm run check:knowledge\n- git diff --cached --check\n- 实机画面人工验收结果尚未记录\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-18T23:15:25+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/4bb59f1faa6737e1d679f5715a0c213b46e020a8...1eecf5d0083e203962f44259da0fc663ac35aafd","Len":10}...
|
1789829267
|
Edit
Delete
|
|
30883
|
16
|
5
|
16
|
86
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"4bb59f1fa {"Commits":[{"Sha1":"4bb59f1faa6737e1d679f5715a0c213b46e020a8","Message":"fix(logs): 优化双击选中并稳定查找框布局\n\n- 参考 VS Code 的文本边界规则,支持连续中文和中英数字整段双击选中\n- 跨查找高亮节点建立原生选区,保留复制、选区查找和横向滚动定位\n- 按查找框宽度预留计数区域,避免加载提示及匹配数量切换挤动按钮\n- 补充选词对照测试、离屏交互与逐帧布局回归,并更新日志帮助文档\n\n验证:\n- npm run typecheck\n- npx vitest run src/features/logs/logWordSelection.test.ts(5 项通过)\n- npm run check:knowledge\n- node scripts/test-log-viewer-browser.mjs --selection\n- node scripts/test-log-viewer-browser.mjs --find\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-18T14:59:03+08:00"},{"Sha1":"6ffe247b3198442b9a270c16b88e866f7560deb6","Message":"fix(logs): 支持查找框调宽并取消匹配总量截断\n\n- 移除查找栏左侧收缩图标,增加左右拖拽调宽、边界限制及双击复原\n- 自动续查到全文结束,支持同一行从原始列继续搜索,不丢失两万项之后的命中\n- 使用分块数字坐标保存结果,仅为可见行生成高亮,避免每页复制全部结果\n- 优先定位当前阅读位置附近的命中,支持文件底部查找与完整首尾循环\n- 同步帮助文档及回归夹具\n\n验证:\n- npm run build(包含 typecheck)\n- 77 项日志相关测试\n- 查找栏离屏测试:拖拽、24050 项全文计数、底部定位与首尾循环\n- 原有日志滚动离屏回归\n- npm run check:knowledge\n- git diff --check\n\n实际操作台视觉和拖拽手感保留人工验收。\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-18T13:41:38+08:00"},{"Sha1":"931d1e3cd2263189b2c0eb592436c8b69ad455d0","Message":"feat(logs): 对齐 VS Code 查找栏并移除文件列表搜索\n\n- 删除日志文件列表搜索框及其过滤状态,保留快速打开和全局搜索\n- 按参考图实现正文右上角紧凑查找栏,支持大小写、全字、正则、选区与键盘导航\n- 自动续查并按具体出现次数计数和定位,限制缓存并明确展示未完整计数\n- 隔离正则线程并支持超时取消,限制长行摘要大小,同步使用说明\n\n验证:\n- npm run typecheck\n- npm run build\n- 73 项日志相关测试\n- 查找栏与原有日志滚动离屏夹具通过\n- npm run check:knowledge\n- git diff --check\n\n实际操作台视觉与交互保留人工验收。\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-18T13:27:49+08:00"},{"Sha1":"d94c0aa3b7d46e66054a2a7da708b46e7f69e597","Message":"perf(logs): 增加双向预读与视口缓存\n\n减少定位日志末尾后反向滚动时的短暂加载占位:\n- 围绕可见原行号提前读取上下缓冲,优先滚动方向和可见缺块\n- 按原行号合并重叠正文,按距离淘汰并限制缓存行数及正文大小\n- 后台预读独立于前台读取,不触发全局忙碌状态或修改滚动位置\n- 切换文件和前台跳转取消旧预读,忽略迟到响应\n- 补充长行小块、反向滚动和迟到响应隔离的回归测试与验收说明\n\n验证:\n- 20 项相关单元测试通过\n- 7 组 Electron 离屏合成场景通过,120 毫秒延迟下逐帧检查反向滚动无加载闪烁和位置跳动\n- npm run typecheck、npm run build 通过\n- 未启动正式操作台或连接设备,实际日志体验仍需人工复测\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-18T12:22:20+08:00"},{"Sha1":"dfa031600cf28cd8993766c88159a013c5bec41a","Message":"fix(logs): 修复正文布局并恢复连续滚动\n\n修复新增导航条抢占正文高度,以及后台读取块变成界面行数限制的问题:\n- 日志正文使用纵向弹性布局,警告和导航按内容占高,小文件贴顶显示\n- 普通查看按文件总行数连续虚拟滚动,缺失正文按需读取并缓存最近四块\n- 保留过滤结果分页和阅读位置,防止未加载范围被静默复制为残缺内容\n- 增加 24 MiB 样本、缓存边界及独立 Electron 离屏组件回归测试\n\n验证:\n- 14 项相关单元测试通过\n- 离屏测试覆盖三行文件、窄窗口、跨 2000 行、末尾、功能及文件切换、过滤切换\n- npm run typecheck、npm run build、npm run check:knowledge 通过\n- 使用合成数据验证,未连接设备或启动正式操作台\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-18T12:00:12+08:00"}],"HeadCommit":{"Sha1":"4bb59f1faa6737e1d679f5715a0c213b46e020a8","Message":"fix(logs): 优化双击选中并稳定查找框布局\n\n- 参考 VS Code 的文本边界规则,支持连续中文和中英数字整段双击选中\n- 跨查找高亮节点建立原生选区,保留复制、选区查找和横向滚动定位\n- 按查找框宽度预留计数区域,避免加载提示及匹配数量切换挤动按钮\n- 补充选词对照测试、离屏交互与逐帧布局回归,并更新日志帮助文档\n\n验证:\n- npm run typecheck\n- npx vitest run src/features/logs/logWordSelection.test.ts(5 项通过)\n- npm run check:knowledge\n- node scripts/test-log-viewer-browser.mjs --selection\n- node scripts/test-log-viewer-browser.mjs --find\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-18T14:59:03+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/c6fbf67a98ba850b052b6d6585e7354718024ebc...4bb59f1faa6737e1d679f5715a0c213b46e020a8","Len":8}...
|
1789716533
|
Edit
Delete
|
|
29884
|
16
|
5
|
16
|
86
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"c6fbf67a9 {"Commits":[{"Sha1":"c6fbf67a98ba850b052b6d6585e7354718024ebc","Message":"fix(devices): 修复遗漏平台配置导致预览方向错误\n\n- 在约定 INI 目录补读 platform.ini,保留目录和手动键优先级\n- 补充平台方向、手动覆盖及空值回退测试,更新设备说明\n\n验证:\n- 74 项相关测试及 npm run typecheck 通过\n- npm run check:knowledge 通过\n- 用户确认设备实时预览验收通过\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-15T11:06:26+08:00"}],"HeadCommit":{"Sha1":"c6fbf67a98ba850b052b6d6585e7354718024ebc","Message":"fix(devices): 修复遗漏平台配置导致预览方向错误\n\n- 在约定 INI 目录补读 platform.ini,保留目录和手动键优先级\n- 补充平台方向、手动覆盖及空值回退测试,更新设备说明\n\n验证:\n- 74 项相关测试及 npm run typecheck 通过\n- npm run check:knowledge 通过\n- 用户确认设备实时预览验收通过\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-15T11:06:26+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/5b78f9e3c5417f825e78550f5d2934295466f032...c6fbf67a98ba850b052b6d6585e7354718024ebc","Len":1}...
|
1789441667
|
Edit
Delete
|
|
29528
|
16
|
5
|
16
|
86
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"5b78f9e3c {"Commits":[{"Sha1":"5b78f9e3c5417f825e78550f5d2934295466f032","Message":"fix(electron): 修复 TV 截图编号解析对异常缩进的兼容\n\n- 兼容显示设备属性行缺少缩进,避免提前结束解析\n- 保留区段边界检查,防止误用后续区段的显示屏编号\n- 补充异常缩进及区段隔离回归测试\n\n验证:\n- 85 项相关测试通过\n- npm run typecheck 通过\n- 设备原始输出解析通过,用户确认 TV 截图测试通过\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-14T16:05:32+08:00"}],"HeadCommit":{"Sha1":"5b78f9e3c5417f825e78550f5d2934295466f032","Message":"fix(electron): 修复 TV 截图编号解析对异常缩进的兼容\n\n- 兼容显示设备属性行缺少缩进,避免提前结束解析\n- 保留区段边界检查,防止误用后续区段的显示屏编号\n- 补充异常缩进及区段隔离回归测试\n\n验证:\n- 85 项相关测试通过\n- npm run typecheck 通过\n- 设备原始输出解析通过,用户确认 TV 截图测试通过\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-14T16:05:32+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/924047d2d278a6e3d3088febe2edf7c733788d3b...5b78f9e3c5417f825e78550f5d2934295466f032","Len":1}...
|
1789373228
|
Edit
Delete
|
|
29497
|
16
|
5
|
16
|
86
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"924047d2d {"Commits":[{"Sha1":"924047d2d278a6e3d3088febe2edf7c733788d3b","Message":"feat(server): 将业务主库迁移至 PostgreSQL\n\n为设备、账号与团队数据增长建立独立业务数据库,保留现有客户端协议和知识库部署。\n\n实现内容:\n- 接入 PostgreSQL 连接池、版本化结构、事务并发控制和单实例保护\n- 增加 SQLite 原子导入与逐表核对,保留 ID、审计序号、同步版本及资产主密钥\n- 更新部署配置、隔离测试、备份恢复和 Navicat 连接说明\n\n验证:\n- PostgreSQL 环境下 67 项顶层测试通过,包含旧库兼容、导入回滚和序号恢复\n- go test -race ./...、go vet ./... 通过\n- npm run typecheck、npm run build:server、npm run build 通过\n- 生产迁移前后 29 张业务表、384 条记录指纹一致,服务健康检查通过\n\nBREAKING CHANGE: 业务服务启动必须通过 OPSDESK_DATABASE_URL_FILE 配置 PostgreSQL;现有 SQLite 部署须先完成停服备份和数据迁移,不再自动使用 SQLite\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-09-14T00:24:26+08:00"}],"HeadCommit":{"Sha1":"924047d2d278a6e3d3088febe2edf7c733788d3b","Message":"feat(server): 将业务主库迁移至 PostgreSQL\n\n为设备、账号与团队数据增长建立独立业务数据库,保留现有客户端协议和知识库部署。\n\n实现内容:\n- 接入 PostgreSQL 连接池、版本化结构、事务并发控制和单实例保护\n- 增加 SQLite 原子导入与逐表核对,保留 ID、审计序号、同步版本及资产主密钥\n- 更新部署配置、隔离测试、备份恢复和 Navicat 连接说明\n\n验证:\n- PostgreSQL 环境下 67 项顶层测试通过,包含旧库兼容、导入回滚和序号恢复\n- go test -race ./...、go vet ./... 通过\n- npm run typecheck、npm run build:server、npm run build 通过\n- 生产迁移前后 29 张业务表、384 条记录指纹一致,服务健康检查通过\n\nBREAKING CHANGE: 业务服务启动必须通过 OPSDESK_DATABASE_URL_FILE 配置 PostgreSQL;现有 SQLite 部署须先完成停服备份和数据迁移,不再自动使用 SQLite\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-09-14T00:24:26+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/29ffde871be14c6230d5547ca84cdb1c66667dbd...924047d2d278a6e3d3088febe2edf7c733788d3b","Len":1}...
|
1789366247
|
Edit
Delete
|
|
29366
|
16
|
24
|
16
|
86
|
0
|
0
|
refs/tags/v0.1.0
|
0
|
巨嗨运维助手首发版本
|
1789301586
|
Edit
Delete
|
|
29365
|
16
|
9
|
16
|
86
|
0
|
0
|
refs/tags/v0.1.0
|
0
|
{"Commits":null,"HeadCommit":{" {"Commits":null,"HeadCommit":{"Sha1":"29ffde871be14c6230d5547ca84cdb1c66667dbd","Message":"docs(docs): 重整 README 功能概览与开发指南\n\nREADME 未完整覆盖新增能力,启动说明也缺少 Go 构建依赖。\n\n实现内容:\n- 补齐团队分组、设备问题历史、远程预览与控制及传输加速说明\n- 更新开发环境、启动和打包命令、项目结构与文档导航\n- 明确同步范围与功能边界,将操作细节链接到已有文档\n- 仅修改 README.md,刷新最后更新日期\n\n验证:\n- 对照当前源码、package.json 和 Go 模块配置核实描述\n- 30 个本地链接与 16 个 npm 脚本校验通过\n- git diff --check 与 staged diff 检查通过\n- 纯文档变更,未运行应用测试、类型检查或构建\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-09-13T20:00:02+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/0000000000000000000000000000000000000000...29ffde871be14c6230d5547ca84cdb1c66667dbd","Len":0}...
|
1789301586
|
Edit
Delete
|
|
29364
|
16
|
5
|
16
|
86
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"29ffde871 {"Commits":[{"Sha1":"29ffde871be14c6230d5547ca84cdb1c66667dbd","Message":"docs(docs): 重整 README 功能概览与开发指南\n\nREADME 未完整覆盖新增能力,启动说明也缺少 Go 构建依赖。\n\n实现内容:\n- 补齐团队分组、设备问题历史、远程预览与控制及传输加速说明\n- 更新开发环境、启动和打包命令、项目结构与文档导航\n- 明确同步范围与功能边界,将操作细节链接到已有文档\n- 仅修改 README.md,刷新最后更新日期\n\n验证:\n- 对照当前源码、package.json 和 Go 模块配置核实描述\n- 30 个本地链接与 16 个 npm 脚本校验通过\n- git diff --check 与 staged diff 检查通过\n- 纯文档变更,未运行应用测试、类型检查或构建\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-09-13T20:00:02+08:00"},{"Sha1":"839eec2343ac478b542abb53ae134e643ef42858","Message":"feat(devices): 显示歌曲盘与资源目录的剩余容量\n\n设备概览原先只显示存储路径,用户无法直接判断所在磁盘还有多少空间。\n\n实现内容:\n- 概览存储探针按目录读取 df,兼容 Android 别名挂载及 512 字节块输出\n- 通过概览类型和 MCP 返回容量,无法读取时保留未知状态\n- 优先显示剩余空间、总容量和占用条,复用主题状态色并适配窄屏布局\n- 补充目录容量优先级、别名路径和容量不可用场景的回归测试\n\n验证:\n- npm run typecheck 通过\n- 存储采集、设备概览、MCP 及概览展示相关 5 个测试文件共 47 项测试通过\n- 真机执行本次生成的只读存储探针成功,核对资源目录和两个歌曲盘入口的容量\n- git diff --check 与暂存区检查通过;界面人工交互验证待用户确认\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-09-13T19:47:30+08:00"},{"Sha1":"b8813aa1b86c855725c5b0279bf8d51bbd2056a2","Message":"fix(ini): 防止并发保存串用临时文件并覆盖他人修改\n\n同一设备的 INI 保存原先共用固定临时文件,可能报告成功却写入另一客户端的内容。\n\n实现内容:\n- 为每次上传创建独立临时文件,提交时通过远端目录锁串行校验和替换\n- 提交前重新校验设备文件摘要,拒绝覆盖已变化的内容\n- 失败或取消只清理本次资源,哈希不可用时停止保存并提供恢复提示\n- 增加真实 Shell 回归,覆盖并发竞争、文件变更、完整性校验、失败清理和终止信号\n\n验证:\n- npm run typecheck 通过\n- INI 上传、草稿来源、多根目录及保存协调相关的 4 个测试文件、29 项测试通过\n- git diff --cached --check 通过\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-09-13T19:37:26+08:00"},{"Sha1":"c80636088ae7f3d9a0f5f297a45caf8a43015726","Message":"fix(electron): 修复残留管理注释阻塞 Codex MCP 配置\n\n残留或不成对的管理标记会让有效 TOML 配置被拒绝更新。\n\n实现内容:\n- 按 MCP 表定位并更新配置,不再生成或依赖成对管理注释\n- 在解析值不变的前提下清理旧标记,写入前校验其他配置保持一致\n- 补充残留标记、旧表迁移、多行字符串和其他服务配置保护测试\n\n验证:\n- npm test -- electron/agent/codexMcpConfigService.test.ts electron/agent/agentMcpManager.test.ts(22 项通过)\n- npm run typecheck(通过)\n- 用户确认配置到 Codex 的人工测试成功\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-09-13T19:23:41+08:00"},{"Sha1":"23a09d692b55b3f258482affbad47391a1233d0d","Message":"feat(help): 补充团队分组知识与设备问题历史说明\n\n团队分组已上线,但正式知识索引缺少门店管理内容,需要同步公开知识与开发者说明。\n\n实现内容:\n- 新增六篇团队分组文章及 SFTP 关闭连接、错误详情两篇说明\n- 补充设备问题历史用途、近似名称、共享身份和私密记录边界\n- 更新概览、共享归类和 TV 截图说明,完善检索别名与关键事实校验\n- 增加分组、原句追问与模糊对象回归,记录分轮验证、发布和回退结果\n- 知识更新为 2026-09-13-v3,共 98 篇,保留已有文章 ID\n\n验证:\n- npm run check:knowledge:98 篇、18 个模块、21 个导航入口、129 个评估定义\n- git diff --check\n- 分轮执行真实模型评估并人工审阅,原始失败及针对性复验结果已留存\n- 云端原文、元数据、嵌入哈希及 1024 维向量核验通过\n- 正式服务健康检查及服务账号问答验证通过\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-09-13T18:05:09+08:00"}],"HeadCommit":{"Sha1":"29ffde871be14c6230d5547ca84cdb1c66667dbd","Message":"docs(docs): 重整 README 功能概览与开发指南\n\nREADME 未完整覆盖新增能力,启动说明也缺少 Go 构建依赖。\n\n实现内容:\n- 补齐团队分组、设备问题历史、远程预览与控制及传输加速说明\n- 更新开发环境、启动和打包命令、项目结构与文档导航\n- 明确同步范围与功能边界,将操作细节链接到已有文档\n- 仅修改 README.md,刷新最后更新日期\n\n验证:\n- 对照当前源码、package.json 和 Go 模块配置核实描述\n- 30 个本地链接与 16 个 npm 脚本校验通过\n- git diff --check 与 staged diff 检查通过\n- 纯文档变更,未运行应用测试、类型检查或构建\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-09-13T20:00:02+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/8db0836905be2adf4130e624581f095dde92c17e...29ffde871be14c6230d5547ca84cdb1c66667dbd","Len":31}...
|
1789301143
|
Edit
Delete
|
|
29156
|
16
|
5
|
16
|
86
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"8db083690 {"Commits":[{"Sha1":"8db0836905be2adf4130e624581f095dde92c17e","Message":"fix(remote-preview): 修复 TV 屏幕选择与关闭窗口误报\n\n- 动态解析外接逻辑屏幕编号,支持 TV 屏编号变化并保留失败恢复\n- 保存正常结束预览时的 TV 采集失败日志\n- 关闭窗口时同步释放本地预览资源,核对主进程状态后再触发回退\n- 补充屏幕枚举和关闭竞态回归测试及说明文档\n\n验证:\n- Go 全量 race 测试通过\n- 110 项预览相关测试、TypeScript 检查和构建通过\n- 两台设备 TV 预览及关闭窗口提示均经人工验收通过\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-11T16:35:07+08:00"},{"Sha1":"d57fb9b3afccd4644dd9632c58d65199bc3f5a68","Message":"fix(devices): 明确问题编辑与解决入口\n\n- 在问题详情提供编辑、更新处理记录和标记已解决入口\n- 拆分编辑表单并明确展示状态选项,按操作定位编辑字段\n- 保留问题版本与发生时间精度,补充回归测试和使用说明\n\n验证:\n- npm run typecheck 与 npm run build 通过\n- 33 项相关 Vitest 测试通过\n- 用户确认修改验证通过\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-11T16:01:39+08:00"}],"HeadCommit":{"Sha1":"8db0836905be2adf4130e624581f095dde92c17e","Message":"fix(remote-preview): 修复 TV 屏幕选择与关闭窗口误报\n\n- 动态解析外接逻辑屏幕编号,支持 TV 屏编号变化并保留失败恢复\n- 保存正常结束预览时的 TV 采集失败日志\n- 关闭窗口时同步释放本地预览资源,核对主进程状态后再触发回退\n- 补充屏幕枚举和关闭竞态回归测试及说明文档\n\n验证:\n- Go 全量 race 测试通过\n- 110 项预览相关测试、TypeScript 检查和构建通过\n- 两台设备 TV 预览及关闭窗口提示均经人工验收通过\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-11T16:35:07+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/981e8e6f8a6f7db76a9f4fe272ddb7034cdfb9a3...8db0836905be2adf4130e624581f095dde92c17e","Len":2}...
|
1789115780
|
Edit
Delete
|
|
29132
|
16
|
5
|
16
|
86
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"981e8e6f8 {"Commits":[{"Sha1":"981e8e6f8a6f7db76a9f4fe272ddb7034cdfb9a3","Message":"feat(renderer): 优化设备问题记录界面布局\n\n- 重整问题摘要、列表、详情和修改历史布局\n- 使用状态胶囊与分段筛选,完善窄窗口适配\n- 支持选择问题正文,更新对应使用说明\n\n验证:\n- npm run typecheck 通过\n- 28 项相关 Vitest 测试通过\n- 桌面布局与交互仍待人工验证\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-11T15:48:27+08:00"},{"Sha1":"2ca5fee384ffb687ed3df86df7fdf29a107e4f8a","Message":"feat(devices): 增加团队共享的设备问题记录\n\n- 在设备详情和卡片右键菜单提供问题查看与创建入口\n- 支持问题状态、处理结论、搜索分页及完整修改历史\n- 增加服务端持久化、团队权限、幂等保存和版本冲突保护\n- 补充身份隔离测试、Nginx 请求体限制及部署验证说明\n\n验证:\n- npm run typecheck 与 npm run build 通过\n- 46 项相关 Vitest 测试及 Go 全量竞态测试通过\n- 云端隔离演练、正式部署和公网接口检查通过\n- 桌面交互仍待人工验证\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-11T15:27:44+08:00"}],"HeadCommit":{"Sha1":"981e8e6f8a6f7db76a9f4fe272ddb7034cdfb9a3","Message":"feat(renderer): 优化设备问题记录界面布局\n\n- 重整问题摘要、列表、详情和修改历史布局\n- 使用状态胶囊与分段筛选,完善窄窗口适配\n- 支持选择问题正文,更新对应使用说明\n\n验证:\n- npm run typecheck 通过\n- 28 项相关 Vitest 测试通过\n- 桌面布局与交互仍待人工验证\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-11T15:48:27+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/e10b7f36982c697470109fd38b073f1bb9d8e5d9...981e8e6f8a6f7db76a9f4fe272ddb7034cdfb9a3","Len":2}...
|
1789112959
|
Edit
Delete
|
|
29053
|
16
|
5
|
16
|
86
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"e10b7f369 {"Commits":[{"Sha1":"e10b7f36982c697470109fd38b073f1bb9d8e5d9","Message":"fix(devices): 统一公网设备身份并修复团队档案聚合\n\n- 按物理设备 ID 聚合主页设备,保留团队完整列表与排序数据\n- 修复公网 ID 复制和搜索,保持卡片无额外归属标签\n- 限制团队公网身份变更,保存可追溯的审计身份快照\n- 补充回归测试、迁移说明和部署验证记录\n\n验证:\n- TypeScript 类型检查、桌面构建及相关回归测试通过\n- Go 全量竞态测试及最终团队迁移回归通过\n- 云端副本演练、正式迁移和部署后检查通过\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-11T14:10:51+08:00"},{"Sha1":"3b9bc7bb495e46c2e27544a17149ddc1d0d8871a","Message":"feat(devices): 展示公网 SSH 转发端口\n\n新增公网 SSH 地址只读查询接口,支持个人和 Team 设备详情展示实际转发端口。\n客户端按连接、已分配、未分配和不可用状态展示地址,并处理账号切换、设备切换及迟到响应。\n移除端口、地址和 SSH 命令复制按钮,仅保留地址文本和刷新入口。\n\n验证:\n- npm run typecheck\n- 相关 Vitest 测试\n- npm run build\n- go test -race ./...\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-11T10:39:19+08:00"}],"HeadCommit":{"Sha1":"e10b7f36982c697470109fd38b073f1bb9d8e5d9","Message":"fix(devices): 统一公网设备身份并修复团队档案聚合\n\n- 按物理设备 ID 聚合主页设备,保留团队完整列表与排序数据\n- 修复公网 ID 复制和搜索,保持卡片无额外归属标签\n- 限制团队公网身份变更,保存可追溯的审计身份快照\n- 补充回归测试、迁移说明和部署验证记录\n\n验证:\n- TypeScript 类型检查、桌面构建及相关回归测试通过\n- Go 全量竞态测试及最终团队迁移回归通过\n- 云端副本演练、正式迁移和部署后检查通过\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-11T14:10:51+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/c43e8452abe292b34eac408ea4faaf3b262371c2...e10b7f36982c697470109fd38b073f1bb9d8e5d9","Len":2}...
|
1789107140
|
Edit
Delete
|
|
28936
|
16
|
5
|
16
|
86
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"c43e8452a {"Commits":[{"Sha1":"c43e8452abe292b34eac408ea4faaf3b262371c2","Message":"feat(renderer): 优化实时预览工具栏、空状态和侧栏布局\n\n实时预览页控件挤在一行、侧栏指标平铺、开始按钮不够突出,影响日常查看和操作。\n\n实现内容:\n- 重组顶部工具栏分组,开始/停止改成胶囊主按钮\n- 空状态改用中央圆形开始/重连按钮\n- 侧栏改为状态卡、画面指标网格和会话信息\n\n验证:\n- npm run typecheck\n- npx vitest run src/features/remotePreview/RemotePreviewWorkspace.test.ts\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-10T16:19:33+08:00"},{"Sha1":"1ee8e5591e97ac55af5fd89964b1fd638d71cc8f","Message":"feat(renderer): 统一搜索框并去掉文件树常驻筛选\n\n操作台搜索框原先焦点叠边框和 outline 成双环,Chromium 自带灰色清除钮\n与主题冲突。文件列表上方再放常驻筛选框,也和 VS Code 资源管理器不一致。\n\n实现内容:\n- 新增 SearchField:隐藏系统清除钮,改为主题化圆形 X,焦点改用半透明\n 描边加淡蓝光晕;Aa/ab 选项改为胶囊选中态\n- 日志/INI 侧栏文件树去掉常驻筛选,对齐 VS Code 资源管理器;找文件走\n 全局搜索或顶栏快速打开\n- 保留 INI 解码 Key 筛选和采集配置弹窗的文件搜索\n- 主页设备/密钥/快捷指令、内容查找和 JSON 查找接入同一组件\n\n未覆盖范围:\n- SFTP、UDP、终端抽屉、帮助和团队页搜索尚未改用 SearchField\n\n验证:\n- npm run typecheck\n- 人工确认日志/INI 文件树无筛选框,解码 Key 与采集配置仍可搜索,\n 焦点光晕和清除按钮在 Light、Dark 下可用\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-10T15:54:48+08:00"},{"Sha1":"a7f6740524c0c48ad85fdac3ecb9ce9780b80e29","Message":"feat(styles): 主页遗漏与弹窗按钮改用胶囊圆角\n\n主页工具栏和设置弹窗已改成胶囊圆角后,同画面上的空状态、团队切换、\n连接中操作和从主页打开的弹窗仍是 6–10px 小圆角。本次把这些按钮收齐,\n不改全局 toolbar-button 基元,避免操作台路径栏和工具条一起变。\n\n实现内容:\n- 主页空状态主按钮、团队切换器、操作结果 Toast 关闭、截图通知动作钮、\n SSH 连接中画面与新标签刷新改为胶囊\n- 按 .dialog-shell 覆盖弹窗内 toolbar-button / icon-button / row-icon-button,\n 覆盖确认框、改密、设备档案、密钥、指令、团队、同步、重启等 portal 弹窗\n- 设备档案表单的显示密码、选择私钥、添加/删除路径等自定义按钮同步胶囊\n- 操作记录窗口的刷新、关闭与筛选分段改为胶囊;页脚中等高度按钮组默认\n 圆角改为胶囊,操作台空状态仍保留中等圆角\n\n未覆盖范围:\n- 全局 toolbar-button、icon-button、row-icon-button 基元未改\n- 操作台路径栏、活动栏、终端工具抽屉、登录页按钮未改\n\n验证:\n- 人工确认主页遗漏按钮、从主页打开的弹窗,以及共用 dialog-shell 的\n 操作台弹窗在 Light、Dark、Auto 三套主题下的圆角表现\n- 对照操作台路径栏保存/拉取仍为小圆角矩形\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-10T15:10:06+08:00"},{"Sha1":"60dd681be72d939c2dcb88e85c71cead90e8d851","Message":"feat(renderer): 重做设置页存储与缓存面板布局\n\n设置页「存储与缓存」面板原有三张并排指标卡平铺数字,看不出包含关系;分类\n列表层级扁平、间距局促、缺少图标。本次做结构与视觉重做,清理语义与安全\n约束保持不变。\n\n实现内容:\n- 概览由三张指标卡改为大号总量 + 三段互斥堆叠条 + 同色图例,三个数字直接\n 对应堆叠段,不再需要读者自行推断\n- 分段按主进程口径精确划分:reclaimableBytes 只统计 selectedByDefault 且未\n 阻塞的分类,用户勾选的用户数据分类不在其中,故「可回收未选」必须扣掉已\n 选中且属于可回收范围的部分,三段合计恒等于本机占用\n- storageCategoryMeta 增加 icon 字段,列表行新增 26px 图标槽;用户数据行的\n 图标跟随标题转为风险色,且不被选中态覆盖\n- 分组标题改为「组名 | 说明 | 小计」三列,StorageUsageGroup 增加 sizeBytes\n- 列表间距、行内边距、组间距与底部清理条分隔留白整体放宽\n- 清理结果反馈改为固定占位槽,出现或消失不再推动上方列表\n- 窄屏由视口媒体查询改为 @container settings-storage:设置弹窗嵌在导航\n 布局里,导航折成顶栏时内容区反而变宽,同一面板宽度会有两个来源\n\n配色说明:\n- 中性段与轨道取 --code-bg 而非 --device-status-track-bg:后者在深色下是\n #3e4257,与面板所在的 --dialog-bg(#32364a)几乎同色,轨道和第三段会看\n 不见,该问题仅在深色主题暴露;--code-bg 深色为 #141729,明显下沉\n- 中性图例色块加内描边,保证在浅色弹窗面上可辨认\n- 未复用 getUsageTone:其口径是「占用越高越糟」,而这里展示的是可回收\n 占比,方向相反;且该函数在 DeviceOverviewVisuals 与 DeviceOverviewPanel\n 各有一份模块私有实现、均未导出,StorageUsageResult 也没有容量分母\n\n未覆盖范围:\n- settings-storage__empty 仍自建空状态,未收敛到 primitives.css 的\n .empty-state 家族,收敛会改动现有空状态外观\n- 清理流程与确认框未改动\n\n验证:\n- npm run typecheck\n- npm run build\n- 人工确认三套主题、勾选联动与窄屏降级\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-10T14:24:10+08:00"},{"Sha1":"29cc4048e10036d54c7a3500ec175f3f6e7a1e97","Message":"feat(styles): 设置弹窗按钮改用胶囊圆角\n\n设置弹窗的按钮圆角此前在 6px 到 14px 之间取值不一,与主页已统一的胶囊\n圆角语言不一致。本次把设置弹窗内的按钮统一为胶囊圆角。\n\n实现内容:\n- 分段控件容器与分段按钮(含主题选项)改为胶囊,容器高 44、内按钮高\n 36、padding 4px,两者保持同心圆\n- MCP 配置主操作按钮、截图清理按钮由 6px 改为胶囊\n- 新增 .settings-dialog 作用域规则,覆盖各分类面板与弹窗页脚的\n toolbar-button 和 row-icon-button\n\n未覆盖范围:\n- 开关轨道本就是 999px 胶囊,无需改动\n- settings-storage__text-action 是纯文字按钮,无可见圆角,未改动\n- “清理本机数据”确认框是 DialogShell 的兄弟节点,属于 .confirm-dialog\n 全局确认框体系;“修改密码”弹窗经 createPortal 挂到 body,二者均在\n .settings-dialog 作用域外,保持原有圆角\n\n验证:\n- npm run typecheck\n- 人工确认设置弹窗各分类面板按钮与分段控件在 Light、Dark、Auto 三套\n 主题下的圆角表现\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-10T14:04:38+08:00"}],"HeadCommit":{"Sha1":"c43e8452abe292b34eac408ea4faaf3b262371c2","Message":"feat(renderer): 优化实时预览工具栏、空状态和侧栏布局\n\n实时预览页控件挤在一行、侧栏指标平铺、开始按钮不够突出,影响日常查看和操作。\n\n实现内容:\n- 重组顶部工具栏分组,开始/停止改成胶囊主按钮\n- 空状态改用中央圆形开始/重连按钮\n- 侧栏改为状态卡、画面指标网格和会话信息\n\n验证:\n- npm run typecheck\n- npx vitest run src/features/remotePreview/RemotePreviewWorkspace.test.ts\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-10T16:19:33+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/cedc6363530b6951aebb9ca57e4a888bdb5ca876...c43e8452abe292b34eac408ea4faaf3b262371c2","Len":6}...
|
1789030822
|
Edit
Delete
|
|
28913
|
16
|
5
|
16
|
86
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"cedc63635 {"Commits":[{"Sha1":"cedc6363530b6951aebb9ca57e4a888bdb5ca876","Message":"feat(styles): 为设备卡片操作按钮增加悬停选中投影\n\n主页设备卡片的操作按钮原先只有背景色变化,指向感较弱。悬停或键盘聚焦时在\n按钮底部叠加一层柔和投影,强化“当前选中”的按压感,并补充 120ms 的\nbox-shadow 过渡,与卡片自身的过渡节奏保持一致。\n\n实现内容:\n- 新增语义变量 --device-card-action-hover-shadow,补齐 Light、Dark 和 Auto\n 深色分支三套取值\n- home.css 为 .device-card .row-icon-button 增加 hover/focus-visible 投影,\n 并补充 box-shadow 过渡\n- 投影仅作用于按钮自身,卡片本体不变;禁用态(截图或连接进行中)不生效\n- 主操作按钮保留原有强调色背景,仅叠加投影,不覆盖其配色\n\n验证:\n- npm run typecheck\n- 人工确认操作按钮的悬停与聚焦效果,并在 Light、Dark、Auto 三套主题下\n 检查阴影表现\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-10T13:37:04+08:00"}],"HeadCommit":{"Sha1":"cedc6363530b6951aebb9ca57e4a888bdb5ca876","Message":"feat(styles): 为设备卡片操作按钮增加悬停选中投影\n\n主页设备卡片的操作按钮原先只有背景色变化,指向感较弱。悬停或键盘聚焦时在\n按钮底部叠加一层柔和投影,强化“当前选中”的按压感,并补充 120ms 的\nbox-shadow 过渡,与卡片自身的过渡节奏保持一致。\n\n实现内容:\n- 新增语义变量 --device-card-action-hover-shadow,补齐 Light、Dark 和 Auto\n 深色分支三套取值\n- home.css 为 .device-card .row-icon-button 增加 hover/focus-visible 投影,\n 并补充 box-shadow 过渡\n- 投影仅作用于按钮自身,卡片本体不变;禁用态(截图或连接进行中)不生效\n- 主操作按钮保留原有强调色背景,仅叠加投影,不覆盖其配色\n\n验证:\n- npm run typecheck\n- 人工确认操作按钮的悬停与聚焦效果,并在 Light、Dark、Auto 三套主题下\n 检查阴影表现\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-10T13:37:04+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/9ca9435481f5afbff2040e41fdf0d5bca7e6b7ec...cedc6363530b6951aebb9ca57e4a888bdb5ca876","Len":1}...
|
1789018953
|
Edit
Delete
|
|
28911
|
16
|
5
|
16
|
86
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"9ca943548 {"Commits":[{"Sha1":"9ca9435481f5afbff2040e41fdf0d5bca7e6b7ec","Message":"feat(renderer): 重做团队操作记录弹窗布局\n\n团队操作记录改用与账号同步相同的工作台窗口:\n- 抽出共用 AuditStageDialog,个人同步与团队记录共用表面\n- 按成员、设备和远端操作分栏,并保留结果筛选\n- 记录图标按具体动作选择,重启不再误用文件图标\n\n验证:\n- npm run typecheck\n- npx vitest run src/features/audit/auditPresentation.test.ts\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-09-10T00:06:05+08:00"},{"Sha1":"7398bb86327a181138fd73ccd4f1456f5242c2b3","Message":"feat(devices): 重做服务器操作记录弹窗布局\n\n账号同步的操作记录不再使用 FormDialog 三明治骨架,改为迷你工作台窗口:\n- 深色顶栏承载标题、条数、刷新和关闭\n- 左侧按日分组记录,支持搜索和档案/密钥/指令筛选\n- 右侧展示选中记录的操作者、对象、时间和变更字段\n- 团队操作记录弹窗保持原模板,作为后续改造对照\n\n验证:\n- npm run typecheck\n- npx vitest run src/features/audit/auditPresentation.test.ts\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-09-09T23:50:41+08:00"},{"Sha1":"23a571761dad8c6e0b9a1bb8ec475e61af06fc90","Message":"fix(app): 修复团队同步边界并补齐远端操作审计\n\n- 隔离团队认证缓存和审计补报故障,优先应用成员撤权与连接回收\n- 统一团队档案 ID 为小写并迁移历史引用,拒绝缺少 profile 的隐式删除\n- 隔离单台设备上传错误,保留未确认请求、本机编辑与云端冲突\n- 为个人副本、终端和 SFTP 操作登记服务端审计,按物理设备关联团队记录\n- 校验操作身份、版本和客户授权,补报失败不重复执行设备命令\n- 补充回归测试、协议边界及部署记录,保留现有 INI 并发保存规则\n\n验证:\n- 客户端相关 301 项测试分批通过\n- npm run typecheck\n- npm run build\n- npm run build:admin\n- 服务端 go test -race ./...\n- 云端部署后数据库完整性、访问限制及二进制校验通过\n\nBREAKING CHANGE: 新版客户端远端审计需要配套更新服务端;个人设备的受审计操作也要求登录且账号服务可达\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-09T23:47:16+08:00"},{"Sha1":"7e25631be36c242edaf43954a0d2d507054310ea","Message":"feat(devices): 实现公网设备互斥连接与租约回收\n\n- 按物理设备 ID 申请、续约和释放公网操作锁,局域网保持多人连接\n- 同团队展示锁图标及操作者,跨团队连接仅返回通用占用提示\n- 为 SSH、终端和备用传输增加锁校验,处理取消、断网、休眠与迟到响应\n- 保持公网端口归属稳定,补充竞态测试、部署记录和双电脑验收步骤\n\n验证:\n- npm run typecheck\n- 完整桌面构建与 Linux 服务端交叉编译通过\n- 297 项相关客户端测试与服务端全量竞态测试通过\n- 云端健康、访问边界和数据库完整性检查通过\n\nBREAKING CHANGE: 公网转发接口要求 lockHolderId,客户端与服务端需配套升级;局域网不受影响\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-09T22:40:46+08:00"}],"HeadCommit":{"Sha1":"9ca9435481f5afbff2040e41fdf0d5bca7e6b7ec","Message":"feat(renderer): 重做团队操作记录弹窗布局\n\n团队操作记录改用与账号同步相同的工作台窗口:\n- 抽出共用 AuditStageDialog,个人同步与团队记录共用表面\n- 按成员、设备和远端操作分栏,并保留结果筛选\n- 记录图标按具体动作选择,重启不再误用文件图标\n\n验证:\n- npm run typecheck\n- npx vitest run src/features/audit/auditPresentation.test.ts\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-09-10T00:06:05+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/9a10c0b59597968e9d3e49c4adba9dc7eb056c5a...9ca9435481f5afbff2040e41fdf0d5bca7e6b7ec","Len":4}...
|
1789016658
|
Edit
Delete
|
|
28814
|
16
|
5
|
16
|
86
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"9a10c0b59 {"Commits":[{"Sha1":"9a10c0b59597968e9d3e49c4adba9dc7eb056c5a","Message":"refactor(renderer): 优化成员、操作记录与账号同步弹窗\n\n将团队成员、操作记录和账号同步从挤在面板里的表格改为工作台式弹窗:\n- 成员名单支持搜索、邀请栏和底部危险操作\n- 操作记录改为按日分组列表,支持搜索和结果筛选\n- 账号同步改为独立弹窗,设置页改为状态入口卡片\n- 叠加弹窗时 Escape 只关闭最上层\n\n验证:\n- npm run typecheck\n- npx vitest run src/features/audit/auditPresentation.test.ts src/features/devices/deviceSyncPresentation.test.ts\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-09T21:39:13+08:00"}],"HeadCommit":{"Sha1":"9a10c0b59597968e9d3e49c4adba9dc7eb056c5a","Message":"refactor(renderer): 优化成员、操作记录与账号同步弹窗\n\n将团队成员、操作记录和账号同步从挤在面板里的表格改为工作台式弹窗:\n- 成员名单支持搜索、邀请栏和底部危险操作\n- 操作记录改为按日分组列表,支持搜索和结果筛选\n- 账号同步改为独立弹窗,设置页改为状态入口卡片\n- 叠加弹窗时 Escape 只关闭最上层\n\n验证:\n- npm run typecheck\n- npx vitest run src/features/audit/auditPresentation.test.ts src/features/devices/deviceSyncPresentation.test.ts\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-09T21:39:13+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/2cc9e07589a514a5aec5b2a01d2ae2b4e43a0623...9a10c0b59597968e9d3e49c4adba9dc7eb056c5a","Len":1}...
|
1788961213
|
Edit
Delete
|
|
28797
|
16
|
5
|
16
|
86
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"2cc9e0758 {"Commits":[{"Sha1":"2cc9e07589a514a5aec5b2a01d2ae2b4e43a0623","Message":"fix(renderer): 修复团队页面切换与分栏布局记忆\n\n- 修复无团队时禁用下拉框的文字和箭头重叠\n- 分别保存主页与团队的分栏宽度,取消恢复时的固定上限\n- 窗口尺寸变化仅调整显示,不覆盖用户布局偏好\n- 区分设备加载与空列表,消除进入团队时暂无设备的闪烁\n\n验证:\n- npm run typecheck 通过\n- 设备界面相关 3 个测试文件共 27 项测试通过\n- npx electron-vite build 通过\n- git diff --check 通过\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-09T18:45:52+08:00"},{"Sha1":"1eeb4f918d00e3afda0afb5bfa5c3523c5bf7438","Message":"feat(renderer): 优化团队设备列表与单行操作工具栏\n\n- 团队页复用主页设备库,统一卡片、列表、搜索和设备操作入口\n- 将创建、加入、成员管理、共享设备及操作记录收进独立弹窗\n- 合并顶部操作为单行,团队切换器采用按钮尺寸并适配窄窗口\n- 将界面文案统一为团队,更新使用说明与人工验证步骤\n\n验证:\n- npm run typecheck 通过\n- 设备界面相关 3 个测试文件共 22 项测试通过\n- npx electron-vite build 通过\n- git diff --check 通过\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-09T18:28:02+08:00"},{"Sha1":"936eb7e59051c1bb0d7a604075de0cac9bd202cd","Message":"docs(docs): 补充 Team 协作与端口共用说明\n\n- 更新设备同步边界、Team 使用流程和人工验证步骤\n- 说明密钥内容同步、个人凭据绑定与高危操作审计范围\n- 记录多人共用远程端口的心跳机制及客户端更新要求\n\n验证:git diff --check 通过\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-09T17:54:07+08:00"},{"Sha1":"ccadc18c7e1f3a24d3bf3d41e2a99a168836e5fa","Message":"fix(ssh): 保持多人连接同一设备时的远程端口稳定\n\n- 按物理设备复用已有端口租约,活跃连接期间禁止重新派发或回收\n- 使用独立连接占用标识和定时心跳,单个用户断开不影响其他连接\n- 持久化连接占用并为过期回收保留空闲时间与连续拒绝探测保护\n- 覆盖双账号共用端口、独立释放、心跳过期和服务重启场景\n\n验证:客户端完整测试、类型检查、构建和服务端竞态测试通过\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-09T17:53:51+08:00"},{"Sha1":"44e4c2f482dd4fec2ea1b93f7b2cf19c5878fcc2","Message":"feat(app): 实现 Team 设备共享与高危操作审计\n\n- 增加团队创建、邀请、成员管理和每个用户最多加入三个团队的限制\n- 支持共享设备、版本冲突保护和个人连接凭据绑定\n- 在服务端验证成员权限并记录配置修改、重启等高危操作及结果\n- 接入主页团队入口、设备管理与安全 IPC,支持撤权清理和审计结果重试\n\n验证:120 个客户端测试文件共 1054 项测试通过,类型检查、客户端与管理后台构建、服务端竞态测试通过\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-09T17:53:19+08:00"}],"HeadCommit":{"Sha1":"2cc9e07589a514a5aec5b2a01d2ae2b4e43a0623","Message":"fix(renderer): 修复团队页面切换与分栏布局记忆\n\n- 修复无团队时禁用下拉框的文字和箭头重叠\n- 分别保存主页与团队的分栏宽度,取消恢复时的固定上限\n- 窗口尺寸变化仅调整显示,不覆盖用户布局偏好\n- 区分设备加载与空列表,消除进入团队时暂无设备的闪烁\n\n验证:\n- npm run typecheck 通过\n- 设备界面相关 3 个测试文件共 27 项测试通过\n- npx electron-vite build 通过\n- git diff --check 通过\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-09T18:45:52+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/fb9902b0e1fff1574df58fb999b99814ea3ad794...2cc9e07589a514a5aec5b2a01d2ae2b4e43a0623","Len":7}...
|
1788950806
|
Edit
Delete
|
|
28748
|
16
|
5
|
16
|
86
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"fb9902b0e {"Commits":[{"Sha1":"fb9902b0e1fff1574df58fb999b99814ea3ad794","Message":"fix(devices): 修复关闭探测后右键离线设备仍触发查询\n\n右键选中设备会加载详情,原详情采集未遵循自动探测开关,后台连接状态又导致卡片与菜单持续锁定。\n- 关闭探测时仅复用已连接设备采集详情,避免选中离线设备建立 SSH\n- 忽略关闭探测后的后台连接进度,保留用户主动连接的状态提示\n- 增加离线、错误、后台建连与重连状态的回归测试\n\n验证:\n- 35 项相关回归测试通过\n- npm run typecheck 通过\n- npm run build 通过\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-09T16:37:44+08:00"}],"HeadCommit":{"Sha1":"fb9902b0e1fff1574df58fb999b99814ea3ad794","Message":"fix(devices): 修复关闭探测后右键离线设备仍触发查询\n\n右键选中设备会加载详情,原详情采集未遵循自动探测开关,后台连接状态又导致卡片与菜单持续锁定。\n- 关闭探测时仅复用已连接设备采集详情,避免选中离线设备建立 SSH\n- 忽略关闭探测后的后台连接进度,保留用户主动连接的状态提示\n- 增加离线、错误、后台建连与重连状态的回归测试\n\n验证:\n- 35 项相关回归测试通过\n- npm run typecheck 通过\n- npm run build 通过\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-09T16:37:44+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/5a688e77940e0b44ceb617be3be3db0a408e0b72...fb9902b0e1fff1574df58fb999b99814ea3ad794","Len":1}...
|
1788943140
|
Edit
Delete
|
|
28731
|
16
|
5
|
16
|
86
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"5a688e779 {"Commits":[{"Sha1":"5a688e77940e0b44ceb617be3be3db0a408e0b72","Message":"docs(sync): 补充账号同步使用说明与 Team 后续边界\n\n- 说明设备、应用密钥内容、快捷指令与外部密钥文件的同步范围\n- 补充旧资产迁移、冲突处理、人工验证及加密主密钥备份要求\n- 记录服务端部署结果,并明确 Team 共享与远端高危操作审计尚待实现\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-09T16:17:31+08:00"},{"Sha1":"38e20f5d294711e6fc7b7481ba5679a518b9142d","Message":"feat(app): 实现设备密钥库与快捷指令跨电脑同步\n\n按个人账号同步设备档案、应用密钥内容和快捷指令,保留各电脑独立的外部密钥文件配置。\n- 隔离账号缓存并加密保存资产、同步基线、待重试请求和冲突\n- 实现旧资产导入、离线重试、逐条冲突处理及活动设备变更延后\n- 接入主进程、preload 和账号同步界面,展示脱敏状态与操作记录\n- 保留密钥库条目引用及未变化密钥文件的修改时间,避免重复连接\n\n验证:\n- npm run typecheck 与 npm run build 通过\n- 客户端全量 118 个测试文件、1037 项测试通过\n- 最终密钥文件时间稳定性修正的资产回归测试通过\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-09T16:17:01+08:00"},{"Sha1":"970e8e0b0db0f3da3e5cc1e324e813c41fa96b8b","Message":"feat(server): 增加个人设备与账号资产同步接口\n\n为跨电脑同步提供按账号隔离的设备、密钥库和快捷指令接口。\n- 增加版本校验、删除标记、增量分页及幂等操作记录\n- 使用独立主密钥加密资产正文和幂等结果,拒绝文件路径和伪造归属\n- 同步设备的账号密钥库引用,并配置各接口的请求大小限制\n\n验证:\n- Go 全量竞态测试及设备、资产同步回归测试通过\n- 管理后台、服务端及 Linux AMD64 构建通过\n- 已部署验证健康检查、访问限制及既有账号数据保持一致\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-09T16:16:23+08:00"},{"Sha1":"526036797feee84c696a8ff2e5bcb95e85e6561f","Message":"feat(auth): 增加用户管理后台并完善五角色设备授权\n\n提供独立 Web 管理后台,统一创建和维护运维账号,继续关闭外部注册。\n\n实现内容:\n- 新增账号搜索、密码重置、启停、角色分配、设备授权和操作记录\n- 隔离管理员资格与业务角色,后台使用独立会话和同源请求校验\n- 新增售后客服、技术人员,只有客户受物理设备授权名单限制\n- 原子迁移旧数据库角色约束,保留账号、密码、授权关系及管理资格\n- 桌面端同步识别五种角色,后台静态资源随 Go 服务一起构建部署\n- 补充迁移、鉴权、账号生命周期测试和部署及人工验证文档\n\n验证:\n- npm run typecheck 通过\n- npm run build 与 npm run build:server 通过\n- npm run test -- electron/opsAccountClient.test.ts:14 项测试通过\n- npm run test:server:全量服务端竞态检测测试通过\n- Linux AMD64 构建、线上健康检查和后台鉴权验证通过\n- 线上数据库与部署前备份比对一致,外键检查通过\n- git diff --check 通过\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-09T14:59:00+08:00"}],"HeadCommit":{"Sha1":"5a688e77940e0b44ceb617be3be3db0a408e0b72","Message":"docs(sync): 补充账号同步使用说明与 Team 后续边界\n\n- 说明设备、应用密钥内容、快捷指令与外部密钥文件的同步范围\n- 补充旧资产迁移、冲突处理、人工验证及加密主密钥备份要求\n- 记录服务端部署结果,并明确 Team 共享与远端高危操作审计尚待实现\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-09T16:17:31+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/8eaf62a03a62514c1ff45ef03541bf842177d215...5a688e77940e0b44ceb617be3be3db0a408e0b72","Len":4}...
|
1788941897
|
Edit
Delete
|
|
28590
|
16
|
5
|
16
|
86
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"8eaf62a03 {"Commits":[{"Sha1":"8eaf62a03a62514c1ff45ef03541bf842177d215","Message":"fix(app): 调整主页与操作台等配置默认值\n\n更新首次使用和配置缺失时的默认行为,保留已保存的用户设置:\n- 默认开启设备探测,探测间隔调整为 300 秒\n- 默认关闭操作台 SSH、SFTP 和底部状态栏\n- 默认开启截图朝向自动修正和 WebRTC 优先远程画面\n- 同步配置回退逻辑、帮助文案和现有测试\n- 确认设备详情默认开启、文件传输加速默认关闭\n\n验证:\n- npm run typecheck 通过\n- 6 个相关测试文件、81 项测试通过\n- git diff --check 通过\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-09T14:17:23+08:00"}],"HeadCommit":{"Sha1":"8eaf62a03a62514c1ff45ef03541bf842177d215","Message":"fix(app): 调整主页与操作台等配置默认值\n\n更新首次使用和配置缺失时的默认行为,保留已保存的用户设置:\n- 默认开启设备探测,探测间隔调整为 300 秒\n- 默认关闭操作台 SSH、SFTP 和底部状态栏\n- 默认开启截图朝向自动修正和 WebRTC 优先远程画面\n- 同步配置回退逻辑、帮助文案和现有测试\n- 确认设备详情默认开启、文件传输加速默认关闭\n\n验证:\n- npm run typecheck 通过\n- 6 个相关测试文件、81 项测试通过\n- git diff --check 通过\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-09T14:17:23+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/2321519fa0e530b64106611c1495778e137768c3...8eaf62a03a62514c1ff45ef03541bf842177d215","Len":1}...
|
1788934719
|
Edit
Delete
|
|
28535
|
16
|
5
|
16
|
86
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"2321519fa {"Commits":[{"Sha1":"2321519fa0e530b64106611c1495778e137768c3","Message":"feat(auth): 支持记住登录并修改运维账号密码\n\n登录页可选择在本机加密保存账号密码,下次打开后无需再输入密码即可登录。\n设置页同步提供修改密码,并更新或清除本机记住的凭据。\n\n实现内容:\n- 主进程用系统密钥加密存储记住的唯一账号\n- 登录页优化记住选项勾选样式,提示语与标题同一行\n- 账号设置增加修改密码对话框,服务端校验当前密码后更新\n\n验证:\n- npm run typecheck\n- npx vitest run src/features/auth/AccountGate.test.tsx electron/opsAccountClient.test.ts electron/opsLoginCredentialStore.test.ts electron/opsAccountIpcPolicy.test.ts\n- cd server \u0026\u0026 go test ./...\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-09T10:32:03+08:00"},{"Sha1":"22884d77537ea2b293bc99736d1e6f086beb0448","Message":"fix(devices): 修复旧 Android 预览兼容性并缩短资源校验耗时\n\n- 为旧 Realtek 固件保留 scrcpy 调用方已有的 root 身份,修复显示访问失败\n- 恢复截图和预览所需的 Android 环境,移除预览启动对 awk 的依赖\n- 内置官方 ISRG 根证书并保留系统 CA,继续严格验证 TLS 证书链、域名和有效期\n- 实测探测 gzip 与 SHA-256 能力,支持 BusyBox,避免重复回读整个 Agent 校验\n- 展示预览失败的内层异常及 TLS、DNS 根因,补充构建维护说明和回归测试\n\n验证:\n- npm run build(包含 npm run typecheck)通过\n- 资源发布与启动器相关 70 项测试通过,截图、预览会话及 MCP 相关测试通过\n- Go Agent 测试通过,覆盖 TLS 信任、域名和有效期校验\n- 目标设备只读验证:新版完整性命令约 0.68 秒完成校验\n\n备用截图通道的剩余传输耗时尚未解决,更新后的整条链路仍需人工复测。\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-09T10:04:37+08:00"},{"Sha1":"f2e53a048e85e1a3d61cd7c93f77298c76b1297e","Message":"fix(renderer): 修复主页 SFTP 入口受操作台开关影响\n\n主页顶部 SFTP 标签和设备快捷入口始终保留,操作台功能开关仅控制操作台入口,并同步更新设置说明与注释。\n\n验证:\n- npm run typecheck\n- 设备列表、主页 SFTP 和操作台偏好相关测试共 15 项通过\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-08T17:34:16+08:00"},{"Sha1":"212fed0608ed0af5c7935637ee211a2f7133cde8","Message":"feat(electron): 扩充 MCP 截图与 UDP 抓包能力并同步帮助指南\n\n将内置 MCP 工具从 18 个扩展到 26 个,补齐常用设备诊断与采集流程。\n- 增加设备概览、日志快照搜索和快捷指令查询,支持设备筛选和有界分页\n- 复用截图采集与方向校正,直接返回有尺寸限制的 PNG 图片内容\n- 增加 UDP 抓包开始、读取和停止接口,支持自动停止、会话隔离及资源回收\n- 补充工具结果文本数据、调用指引和图像解压限制\n- 同步使用指南、能力评估和应用内帮助清单\n\n验证:\n- MCP、截图和 UDP 相关测试 152 项通过\n- 帮助内容测试 5 项通过,清单与全部 26 个注册工具一致\n- npm run typecheck\n- npm run build\n- 未访问真实设备或操控桌面应用\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-08T17:33:07+08:00"},{"Sha1":"572bad0699cd256618e5465c87f2e18cbbd09b60","Message":"fix(devices): 区分后台在线查询与主动连接提示\n\n为共享连接快照补充后台探测来源,设备卡片显示正在查询在线状态和等待在线查询结果。前台操作加入同一连接时恢复主动连接语义,后续后台请求不覆盖该状态。\n\n验证:npm run typecheck;SSH 连接管理器、设备卡片和进度文案相关测试共 41 项通过;git diff --cached --check。\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-08T16:36:09+08:00"}],"HeadCommit":{"Sha1":"2321519fa0e530b64106611c1495778e137768c3","Message":"feat(auth): 支持记住登录并修改运维账号密码\n\n登录页可选择在本机加密保存账号密码,下次打开后无需再输入密码即可登录。\n设置页同步提供修改密码,并更新或清除本机记住的凭据。\n\n实现内容:\n- 主进程用系统密钥加密存储记住的唯一账号\n- 登录页优化记住选项勾选样式,提示语与标题同一行\n- 账号设置增加修改密码对话框,服务端校验当前密码后更新\n\n验证:\n- npm run typecheck\n- npx vitest run src/features/auth/AccountGate.test.tsx electron/opsAccountClient.test.ts electron/opsLoginCredentialStore.test.ts electron/opsAccountIpcPolicy.test.ts\n- cd server \u0026\u0026 go test ./...\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-09T10:32:03+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/401976aba2a03ff7b818751f72b8a6db378538d3...2321519fa0e530b64106611c1495778e137768c3","Len":7}...
|
1788921161
|
Edit
Delete
|
|
28304
|
16
|
5
|
16
|
86
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"401976aba {"Commits":[{"Sha1":"401976aba2a03ff7b818751f72b8a6db378538d3","Message":"feat(settings): 优化设置账号页文案与身份布局\n\n设置中的账号页原先信息挤在一行,分类名称也与页面内容不符。\n\n实现内容:\n- 侧栏分类改为「账号」,摘要改为「登录身份」\n- 用身份卡片展示用户名、角色和会话有效期\n- 刷新会话改为带文字按钮,退出登录使用危险样式\n\n验证:\n- npm run typecheck\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-08T10:54:57+08:00"},{"Sha1":"d4dab6f1eca60d3f22f09177f4fd1f2c7f46e804","Message":"feat(sftp): 重做主页 SFTP 设备选择列表\n\n主页 SFTP 标签未选定设备时不再复用 SSH 新标签页样式。\n\n实现内容:\n- 按局域网和公网转发分组展示候选设备\n- 搜索框改用主页搜索表面,避免常驻高亮边框\n- 行内提供打开入口,并补充选择列表测试\n\n验证:\n- npm run typecheck\n- npx vitest run src/features/sftp/HomeSftpWorkspace.test.tsx\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-08T10:54:57+08:00"},{"Sha1":"644f3f74c2146341997a36cec89bdba4ec27eae9","Message":"feat(styles): 按应用主题切换 SFTP 文件夹图标\n\nLight 使用原黄色 SVG,Dark 保留蓝色 SVG,Auto 跟随系统外观;统一切换列表与路径导航图标并保持现有显示尺寸,补充资源来源说明。\n\n验证:npm run typecheck、5 项 SFTP 导航与图标测试、SVG 格式校验和 git diff --cached --check 均通过。\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-08T10:34:44+08:00"}],"HeadCommit":{"Sha1":"401976aba2a03ff7b818751f72b8a6db378538d3","Message":"feat(settings): 优化设置账号页文案与身份布局\n\n设置中的账号页原先信息挤在一行,分类名称也与页面内容不符。\n\n实现内容:\n- 侧栏分类改为「账号」,摘要改为「登录身份」\n- 用身份卡片展示用户名、角色和会话有效期\n- 刷新会话改为带文字按钮,退出登录使用危险样式\n\n验证:\n- npm run typecheck\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-08T10:54:57+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/915d652ee28392e7771ed745cfc36facc17e8078...401976aba2a03ff7b818751f72b8a6db378538d3","Len":3}...
|
1788836199
|
Edit
Delete
|
|
28272
|
16
|
5
|
16
|
86
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"915d652ee {"Commits":[{"Sha1":"915d652ee28392e7771ed745cfc36facc17e8078","Message":"feat(devices): 增加卡片截图与复制设备ID快捷操作\n\n卡片悬浮操作区增加截图范围选择和复制设备 ID,复用现有业务流程与连接期间的按钮锁定。\n\n保持卡片高度与名称空间,操作按钮显示时直接隐藏副行连接信息,移开后恢复。阻止按钮双击冒泡打开操作台。\n\n验证:npm run typecheck;DeviceHomeView 卡片测试 7 项通过;git diff --cached --check。\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-08T10:20:50+08:00"},{"Sha1":"b8d1b9843b6bb47a8040ee67ccc0156bb0c71b61","Message":"feat(devices): 支持自定义设备状态探测间隔\n\n在设置主页中提供 10-3600 秒探测间隔,默认 60 秒并持久化保存。更新提示文案,明确与详情采样的区别。\n\n调整间隔时重新计时,保留进行中的探测与型号快照;主进程统一校验范围,并兼容旧调用。\n\n验证:npm run typecheck;设备监控、主页偏好与卡片相关测试共 26 项通过。\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-08T10:20:37+08:00"},{"Sha1":"15a397d9db1b3758cfa6d79ca13b0567987e6017","Message":"feat(renderer): 重做登录页深色舞台与品牌字标\n\n登录页改为固定深色入口,不再跟随工作区浅色,避免左右分栏配色冲突。\n\n实现内容:\n- 居中玻璃卡片,精简为 JU HAI 字标和账号密码表单\n- 增加光斑、光环、扫描线和粒子等环境动效\n- 补充登录页专用语义色,登录完成后的工作区仍使用原主题\n\n验证:\n- npm run typecheck\n- npx vitest run src/features/auth/AccountGate.test.tsx\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-08T10:19:52+08:00"}],"HeadCommit":{"Sha1":"915d652ee28392e7771ed745cfc36facc17e8078","Message":"feat(devices): 增加卡片截图与复制设备ID快捷操作\n\n卡片悬浮操作区增加截图范围选择和复制设备 ID,复用现有业务流程与连接期间的按钮锁定。\n\n保持卡片高度与名称空间,操作按钮显示时直接隐藏副行连接信息,移开后恢复。阻止按钮双击冒泡打开操作台。\n\n验证:npm run typecheck;DeviceHomeView 卡片测试 7 项通过;git diff --cached --check。\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-08T10:20:50+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/a0d4f00e60661f8ec92107ce83a870cdad0d40f8...915d652ee28392e7771ed745cfc36facc17e8078","Len":3}...
|
1788834097
|
Edit
Delete
|
|
28259
|
16
|
5
|
16
|
86
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"a0d4f00e6 {"Commits":[{"Sha1":"a0d4f00e60661f8ec92107ce83a870cdad0d40f8","Message":"fix(devices): 修复隐藏操作按钮挤压卡片文字\n\n- 保持网格卡片 72px 高度,释放隐藏操作列占用的空间\n- 操作按钮仅在悬停或键盘聚焦时显示,不因选中状态常驻\n- 设备名称始终使用完整内容列,显示按钮时仅为地址副行预留空间\n- 同步列表模式的按钮显隐行为并保留键盘访问能力\n\n验证:\n- npm run build(包含 npm run typecheck)\n- git diff --check\n- 用户确认调整后的显示效果\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-07T16:56:32+08:00"},{"Sha1":"68f5f7d01038998cfb59477bc2fec601aeb374f7","Message":"docs(ops): 补充公网按需连接与空闲回收说明\n\n- 说明用户操作触发转发,启动、列表刷新和设备选择不下发\n- 记录后台仅复用连接、卡片等待锁定及本地 SSH 空闲五分钟关闭的行为\n- 明确客户端取消无法撤回已到达上游的下发,断开连接不直接回收服务端端口\n\n验证:\n- git diff --check\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-07T16:43:34+08:00"},{"Sha1":"03170fa4fee8d5f7d90c43d8b7341ae6d90fe1a3","Message":"feat(devices): 实现公网按需连接并优化设备卡片反馈\n\n启动和后台探测不再开启公网 SSH 转发,用户操作时才建立连接,各设备可独立等待和取消。\n\n- 公网后台命令仅复用现有连接,未连接显示未知状态,空闲五分钟后关闭本地 SSH\n- 增加建连阶段快照和取消保护,避免迟到结果继续下发或建立连接\n- 连接期间锁定设备卡片,使用无文字动画并保留指纹确认与失败反馈\n- 将状态图标移至卡片角落,公网副行显示物理 ID,修复窄布局下 SSH 和 SFTP 图标被压缩\n- 增加连接与卡片回归测试,并配置 renderer 测试路径别名\n\n验证:\n- npm run typecheck\n- npm run build\n- 完整回归及本机端口集成测试补跑通过,后续 UI 调整的七项组件测试通过\n- git diff --check\n\n桌面布局与交互效果由用户手动验证。\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-07T16:43:18+08:00"},{"Sha1":"0cc767fc4622fb3156ea2511501c3d44082b5c6a","Message":"docs(ops): 补充公网转发与账号服务说明\n\n- 更新首次登录、设备创建和账号退出的使用步骤\n- 说明端口租约、后台自动登录、服务部署与证书维护方式\n- 记录接口协议、超时预算、多窗口锁定和人工验证步骤\n- 明确设备档案云同步与细分角色权限仍属于后续工作\n\n验证:\n- git diff --check\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-07T15:51:29+08:00"},{"Sha1":"11c596d81af5afa176a88630d9d841d0d669845a","Message":"feat(app): 接入公网设备管理与启动登录\n\n应用启动先验证运维账号,登录成功后进入主页;公网设备通过自有服务申请 SSH 转发。\n\n- 默认创建公网设备,固定 Host 并使用出厂物理 ID,兼容历史 UUID 档案\n- 通过主进程和 preload 提供固定服务地址的账号与转发接口\n- 增加独立登录页、账号入口、退出登录及多窗口锁定\n- 未登录时限制业务 IPC,会话失效时关闭设备连接并保留同账号工作台编辑状态\n- 按物理设备绑定 SSH 指纹,统一公网端点文案及转发等待时限\n\n验证:\n- npm test\n- npm run build(包含 TypeScript 类型检查)\n\nBREAKING CHANGE: 客户端启动和设备操作需要先登录运维账号,公网设备必须提供出厂物理 ID\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-07T15:51:05+08:00"}],"HeadCommit":{"Sha1":"a0d4f00e60661f8ec92107ce83a870cdad0d40f8","Message":"fix(devices): 修复隐藏操作按钮挤压卡片文字\n\n- 保持网格卡片 72px 高度,释放隐藏操作列占用的空间\n- 操作按钮仅在悬停或键盘聚焦时显示,不因选中状态常驻\n- 设备名称始终使用完整内容列,显示按钮时仅为地址副行预留空间\n- 同步列表模式的按钮显隐行为并保留键盘访问能力\n\n验证:\n- npm run build(包含 npm run typecheck)\n- git diff --check\n- 用户确认调整后的显示效果\n","AuthorEmail":"228834386@qq.com","AuthorName":"starry","CommitterEmail":"228834386@qq.com","CommitterName":"starry","Timestamp":"2026-09-07T16:56:32+08:00"},"CompareURL":"pengzhiyu/JuhaiOpsDesk/compare/ce505ce5a247c42b98fd6d66459476971651c1ac...a0d4f00e60661f8ec92107ce83a870cdad0d40f8","Len":6}...
|
1788771725
|
Edit
Delete
|