用户已确认原型、默认兼容 HTTP/HTTPS 和明文风险,并明确授权本机合并、迁移、菜单权限写入与重启验证。
2026-09-07 用户要求轻量客户端密钥管理,按左侧“采集采购”“采采管理”模块选择开放范围;明确“建工单,先出 qux 原型,我审核后才能做”。本单当前只建设 QuantUX v1 审核稿,不编写生产代码,不执行迁移、权限写入、发布或真实业务请求。 基线 main 29ba16e;复用 access/modules.go 现有分组及模块键。无原型依赖阻塞;Server/Web/API/权限/数据设计属于后续实施影响,Android 不变。与 #236 无代码并行修改。
管理员专用客户端密钥列表+创建弹窗;名称、模块授权摘要、状态、最后使用时间,查看授权、停用确认。首版不做复杂 OAuth、自动续期或任意接口编辑。 模块树:采集采购(SYB商品、SYB同步、档口入库码、蝦皮商品、PDD商品、采集任务、采购管理);采采管理(SYB店铺、采集规则、采购规则、设备列表、AI规格匹配)。分组勾选仅选择当前子模块,新菜单不自动授权。 每模块默认只读,可选读写(已有查询/新增/修改接口,排除执行动作);同步、采集创建/重试、采购执行、删除、回写等独立动作默认关闭。无可开放写接口时显示不支持,不伪造通用 CRUD。 模块名仅为选择界面,后端采用稳定模块键→明确接口白名单,不直接绑定菜单标题或创建管理员身份。隐藏敏感字段;AI Provider 密钥、设备令牌、账号权限管理、支付永不随模块授权开放;现有高风险业务门禁不绕过。 客户端使用 Authorization: Bearer <客户端密钥>;与登录JWT、Agent设备Token隔离;完整密钥仅创建后一次展示,落库摘要,可停用,审计客户端身份;生产公网启用前需HTTPS。原型仅不可用示例密钥,不调用任何真实API。
列表正常/空/加载/失败;创建表单必填校验、模块选择、读写、动作边界、提交中/失败;成功仅一次显示与复制反馈;授权详情、停用确认/已停用、非管理员无权限。 QuantUX 独立 App,标题含 #237 v1 和日期(若实际工单号不同按实际编号),线上域名 qux.ilapage.cn,记录 App ID、分享地址、revision/模型指纹和覆盖范围。原型为草稿,用户明确确认后才允许后续实施;确认不等于迁移/发布授权。不导出HTML、不创建任务归档。
在线模型回读、屏幕/交互连接完整性、浏览器关键流程与文字可读性。原型不能证明真实密钥安全、权限隔离或幂等实现,后续须补充接口矩阵和风险相称测试。
当前仅设计草稿,无长期已实现事实变化,不更新Wiki。审核通过后实施需更新架构、业务规则、Admin/API契约、安全和运维说明。 当前未发现可直接调用的 Gitea/QuantUX MCP 工具:Gitea 回退忽略配置API;QuantUX 优先复用本机已配置连接器/客户端,不输出凭据。
用户提出既有 API Key 能否修改授权模块,并要求“先更新 #237 和原型”。首版增加列表“编辑授权”,复用创建弹窗的模块选择与读写/独立动作布局。
来源:用户要求“要可以后续查看已创建的密钥”“模块和功能要可以全选”,并明确“先更新 #237 与 v3 原型”。此前 v2/HTTP 版本本机已部署;v3 仅设计,不能据此宣称已实现。基线 main 9d5242b。
独立 QuantUX v3 App,保留已确认 v2;沿用 Admin 布局。展示列表、新密钥查看/复制、旧密钥提示、加载/失败/解密不可用/停用/无权限,以及创建/编辑全选、分组、半选、清空、提交中/失败保留/成功。仅无效示例与固定代表性组合,不调用真实业务或生成密钥。记录可访问链接、App ID、模型指纹、验证结果;确认人/时间待用户审核。 影响:后续 Server/Web、API、安全配置与追加数据库迁移;Android 不变。依赖 v3 原型确认及独立安全/迁移实施授权,未满足前不编写生产代码;不与其他客户端密钥改动并行。迁移/本机或线上发布重启/真实密钥操作本次均不授权。 后续验收须包含旧密钥兼容、加密回读、非管理员拒绝/日志脱敏、配置缺失不降级、取消不落库、全选范围与半选、HTTP复制失败手动复制回退、原有编辑停用并发版本保护回归。 文档影响:本轮只有草稿,无已实现长期事实变化,不更新 Wiki/不运行同步;实施后须更新架构、业务规则、API、运维/配置说明。无 HTML 导出、无任务快照。 工具回退:本会话无 Gitea MCP,使用项目忽略配置的 Gitea API;QuantUX 使用已有配置的认证 MCP 服务,不记录凭据。
QuantUX App ID:6a9e6910191a826306a7f6d6 名称:GoAuto #237 v1 客户端密钥 · 菜单授权 编辑入口:https://qux.ilapage.cn/#/apps/6a9e6910191a826306a7f6d6.html (需要 QuantUX 登录;尚未完成浏览器可访问性检查,不作为已验证分享链接)
6a9e6910191a826306a7f6d6
GoAuto #237 v1 客户端密钥 · 菜单授权
覆盖:密钥列表、创建弹窗、按“采集采购/采采管理”选择模块、只读/读写和独立动作边界、一次性展示示例密钥、查看授权、停用确认,以及空/加载/失败/校验/无权限状态。
在线模型已回读:18 个状态画面、673 个控件、242 条连线,连线端点结构校验无悬空引用。模型 screens/widgets/lines/startScreen 的规范化 JSON SHA256:74a480f15fe3bea260e618662ea2acfe3c841eab059093f2fb5eca9a06ebfb51。
74a480f15fe3bea260e618662ea2acfe3c841eab059093f2fb5eca9a06ebfb51
限制:固定代表性组合演示,不是完整动态授权实现;复制和创建均为无效示例,不产生真实密钥或权限。浏览器连接连续超时,尚未完成视觉、关键点击流程和分享预览验证,因此状态仍为“草稿,待完成预览检查”,不能据此进入生产实施。
工具说明:本会话未暴露专用 Gitea/QuantUX 工具;Gitea 使用项目环境配置的 API,QuantUX 使用已配置的认证 MCP HTTP 端点,未记录凭据。
未修改生产代码、数据库或真实权限,未部署、未导出 HTML。无长期文档影响:仅未确认设计草稿,本轮不修改 Wiki、不运行镜像同步。待预览验证完成并由用户明确确认 v1 覆盖范围后,才进入实施门禁。
已按用户本次要求更新本单正文与现有 QuantUX 草稿。App ID 保持 6a9e6910191a826306a7f6d6,名称升级为 GoAuto #237 v2 客户端密钥 · 可编辑授权。 入口:https://qux.ilapage.cn/#/apps/6a9e6910191a826306a7f6d6.html
GoAuto #237 v2 客户端密钥 · 可编辑授权
新增列表“编辑授权”,19~26 号画面覆盖当前授权回显、修改、保存中、失败保留并重试、保存成功、全部取消校验、停用只读及独立动作设置。代表性变更为新增“采集规则·只读”、PDD 商品从读写降为只读;取消返回原列表,密钥不更换,全文不再显示。停用列表编辑入口禁用,授权详情进入只读状态。
验证:6 个模型字段更新成功并在线回读完全一致;26 画面、1036 控件、410 连线,端点无悬空引用。screens/widgets/lines/startScreen 规范化 JSON SHA256:36e373d14235220443abbe865875e19c78c1f9d1fed68228dfa350fb17136977。
36e373d14235220443abbe865875e19c78c1f9d1fed68228dfa350fb17136977
限制:本轮完成模型级检查,浏览器视觉/实际点击及分享链接验证仍未完成(上一轮浏览器连接超时未解除);仍为 v2 草稿,不宣称已完成可访问性审核。模块和动作是固定组合演示,不是动态授权引擎。确认人/确认时间:待用户确认。
UI/UX 检查影响:沿用现有 Admin 风格,补充未修改保存禁用、提交中反馈、失败保留输入与恢复路径。没有修改生产代码、真实权限、数据库或部署;无新增长期事实,跳过 Wiki 更新和同步。未导出 HTML。Gitea/QuantUX 工具回退方式沿用前条记录。
用户明确:“原型通过,做 #237”。记录 v2 原型通过,确认人为本任务用户,覆盖现有密钥列表、创建、模块/读写/独立动作授权、查看、停用,以及编辑既有 Key 授权的全部 v2 范围。 设计证据沿用上一条:App ID 6a9e6910191a826306a7f6d6,v2,模型 SHA256 36e373d14235220443abbe865875e19c78c1f9d1fed68228dfa350fb17136977。用户确认不等同于 Agent 已完成浏览器验证;之前记录的视觉/点击未验证事实保留。
下一阶段为 Server/Web 实施,Android 不变。按仓库永久规则及本单“原型确认不等于迁移/发布授权”,密钥认证、安全和权限修改正式实施前须再次明确人工授权。目前停在该门禁,尚未修改生产代码或数据库。 拟请求授权范围:实现 #237 的客户端密钥认证、模块接口白名单与敏感字段隔离,密钥创建/授权编辑/停用和审计,管理员 UI、追加迁移文件及自动化测试。运行本机/线上数据库迁移、写入真实权限、重启发布和真实业务动作不包含在上述代码实施授权内,待具体迁移与验证方案确定后另行申请。
本轮仅更新工单确认记录,无长期事实变化,不更新 Wiki。继续沿用已记录的 Gitea API 回退原因。
用户已授权 #237 密钥认证、安全、权限代码、UI、追加迁移文件和自动化测试。明确不含实际数据库迁移、真实权限写入、重启或发布。基线 origin/main 29ba16e;独立工作区 issue-237,保留原工作区改动。采用独立 /api/client/v1 入口,稳定模块键及逐路由白名单,不伪造管理员 JWT;所有独立动作默认关闭,每次请求重新检查密钥与授权。管理 /api/admin/v1/client-keys 仅管理员。追加 client_api_key、client_api_key_audit 表与管理员菜单迁移文件,编辑/停用使用版本条件避免覆盖。验证仅隔离自动化数据库与 mock,不调用真实采购/SYB/AI。长期文档影响:架构、业务规则、共享 API、安全运维,将于代码验证后集中更新。
已按用户确认的 QuantUX v2 实现 Server/Web,Android 未改。分支 feat/237-client-api-keys 已推送;实现提交 57b0f15,长期 Wiki 镜像提交 76c94e3,基线 29ba16e,未合并 main。
feat/237-client-api-keys
57b0f15
76c94e3
29ba16e
独立 /api/client/v1 共 65 条显式业务路由;复用导航 12 模块,普通读写与独立动作分开,默认动作关闭。管理 /api/admin/v1/client-keys 仅管理员;创建只返回一次随机密钥、库中保存 SHA-256 摘要,支持查看授权、原 Key 编辑和停用。编辑/停用通过 version 条件更新并与管理审计同事务;每次客户端请求重新验证授权,不伪造 Admin JWT。请求审计意图必须先保存,再执行业务;响应过滤凭据及原始载荷。现有业务幂等、状态机和支付禁止边界保持。
/api/client/v1
/api/admin/v1/client-keys
追加迁移文件 1788798000000_client_api_key.go 创建两表和管理员菜单,仅在隔离 SQLite 测试执行。实际 MySQL 迁移、菜单权限写入尚未执行。
1788798000000_client_api_key.go
go test ./...
go build
harness.py check --strict
sync
sync --check
git diff --check
已在线更新并回读正文及 revision(显式保留原非空标题),随后同步只读镜像:
ba4f09e1fb62f45a097b3310860fc4138b0ce48e
5ced8b2313bf5ca23096c7d5ddb3049884575f0c
2ce609309aefecac2afdc1a10b79a0631797a6cb
7c6c467980eabccc77f84c404848dd624d8311d9
管理端密钥接口及客户端接口在所有环境均强制 HTTPS;当前线上 HTTP IP 入口不适用,不能通过伪造协议头放行。须先确认 HTTPS 入口,再单独授权实际追加迁移、权限写入、必要服务重启和范围明确的联调;本次没有执行这些操作。 模块授权不提供行/店铺级数据隔离;已经通过校验的在途请求可在撤销授权后完成。审计 status=0 需核对结果,不能自动重放。部分既有业务操作人 ID 为授权管理员,实际客户端身份以 key_id 审计为准。客户端采购批量重试沿用现有 Admin 语义,不新增 Agent reset 能力。
工单保持 open,代码交付待验收,真实迁移与联调未完成;用户未验收前不关闭。
用户明确要求不加开关,HTTP 和 HTTPS 默认都可使用,并再次确认接受 HTTP 明文传输风险,授权实施代码与测试。此确认替代此前强制 HTTPS 的设计:管理员密钥管理与 /api/client/v1 均取消 TLS/转发协议头门禁,不新增环境开关;管理员身份、密钥验证、模块/动作、版本冲突、停用、审计和 no-store 保留。界面仅更新既有安全提示,不改变布局和交互,用户确认覆盖该提示与协议边界;无需另建交互原型。增加两种协议的管理权限及客户端授权回归测试,同步架构/业务/API/运维 Wiki。实际迁移、权限写入、线上配置、重启和发布未授权,本轮不执行。Gitea MCP 未提供,沿用项目 API 回退。
按用户明确风险确认和本轮开始记录 #7310,删除客户端密钥管理及客户端网关的 TLS/转发协议头门禁,不新增开关。管理路由仍要求 Admin JWT + admin;每次请求密钥、模块/动作、停用与审计校验保持,管理响应 no-store 保留。已移除旧 426 分支、过时代理信任测试;页面提示改为支持 HTTP/HTTPS 并明确 HTTP 明文风险,不变更布局和交互。
实现提交:71f7751;本轮 Wiki 镜像提交:ac3c63e;分支 feat/237-client-api-keys 已推送,未合并 main。既有初版 57b0f15 及文档 76c94e3 保留历史;此前“必须 HTTPS 才可部署”的描述已被本轮明确决定替代。
验证:65 条路由的只读/写/独立动作矩阵均在 HTTP、HTTPS 下执行;两种协议均检验无效/缺失/停用密钥拒绝、URL 凭据拒绝、响应脱敏、no-store 和请求审计关联。管理创建以 admin/purchaser/client/空角色在两种协议下验证管理员边界;全量 go test ./... 与 Go 构建通过。Web 原 8 用例通过,修改文件 ESLint 与生产构建通过,保留既有 CSS/大分包警告;全量 lint 已知采购任务页 24 项问题不在本轮修改范围。浏览器以本地内存 mock fixture 确认新 HTTP/HTTPS 及明文风险提示可见,开发服务已停止。未创建真实密钥或执行业务动作,未测试真实外部 HTTP/TLS 反代链路。
长期文档在线更新并回读 revision,已完成唯一一轮 sync + sync --check 和 check --strict:
Gitea API 回退原因沿用 #7310;不导出工单快照或原型。工单保持 open、代码待验收。实际迁移、权限写入、重启及发布仍须用户独立授权,未执行。
用户已授权合并 #237、本机追加迁移和菜单权限写入、构建重启验证,不涉及线上。前置只读检查:本机数据库 127.0.0.1:3307/goauto,唯一未执行迁移 1788798000000_client_api_key,无运行中的采集/采购/SYB同步;保留定时任务启停。当前 Supervisor 仍运行原根目录旧分支,且该目录有用户改动,故使用已有干净 main-runtime 工作区快进 main 并切换本机 GoAuto 两个启动项到该目录,继续读取原 config.yaml,不改/覆盖原工作区。实际结果将在验证后回写。
授权依据:用户对本机迁移、菜单权限写入、构建及服务重启明确回复“授权”;本次未操作线上。
前置:实际数据库确认为本机 127.0.0.1:3307/goauto;唯一未执行迁移为 1788798000000_client_api_key,无运行中采集/采购/SYB同步。现有服务来自带用户改动的旧根工作区,因此不覆盖或重置,改用已有干净 main-runtime 工作区;main 已快进合入 #237 并推送。
迁移:本机构建二进制运行正式 migrate,配置与数据库凭据仅在进程环境内读取;退出 0。回读 sys_migration=1788798000000,client_api_key/client_api_key_audit 存在;菜单 GoAutoClientKeys(1186)归属采采管理父菜单 1172,角色关联仅 admin。复核无其他未执行迁移,sys_job 启停状态前后完全一致。
运行:仅停止/启动 goauto-admin-api、goauto-admin-ui;外部配置 D:/supervisor/programs/goauto.conf 指向 D:/OPC/goauto-worktrees/main-runtime,继续使用 D:/OPC/goauto/config.yaml;API 增加 -SkipMigration,移除无需的 ExecutionPolicy Bypass。配置变更后经 supervisor.reloadConfig 读取并定向启动两个进程,已按实际命令行确认新目录。未重启整个 Supervisor 或其他项目。XML-RPC 方法列举不受支持,未用其扩大操作;读取配置成功后仅对指定程序启动。
验证:main-runtime Server 构建及 Web 生产构建通过(既有 CSS/大分包警告);API 8010、Web 9527 监听且 Supervisor 均 Running。浏览器复用本地真实管理员会话刷新,采采管理中出现客户端密钥;真实密钥列表空态正常,创建弹窗加载两组 12 模块,HTTP/HTTPS 及明文风险提示可见,控制台无 error;取消弹窗未创建真实密钥。未认证客户端 GET 返回 HTTP 401;未认证管理 GET 按既有 JWT 中间件返回 HTTP 200/body code=401 且无数据,未绕过登录。
提交:功能基线 ac3c63e,版本化运行模板 9a10d82,本轮 Wiki 镜像 9d5242b,均在 main。原根目录 dirty/untracked 文件保持原样。
长期运维事实已按 Wiki-first 更新并在线回读:Architecture 9d3b3f2683b5c77f3fd6601057e64c2cda773a51;Business Rules 2a9334053de83a9a0525af074755f67964b48a29;API 59853b796dc787d6af4b6ca3a9c1ae3156cc7152;Deployment f951dbc8b6a555cbf8f44cda073910406ba55191。本轮唯一一次 sync + sync --check 与 check --strict 通过。Gitea 沿用已记录的 API 回退,不导出任务快照。
交付入口:http://127.0.0.1:9527/#/client-keys/index 。菜单未刷新时重新登录。未验证真实密钥签发/编辑/停用及客户端业务读写闭环;线上迁移/发布/重启均未执行。用户未验收,本单不关闭。
v3 原型已更新,待审核;当前仅设计,详见正文。
Wiki 在线回读、镜像检查和提交:fdd26af(已推送 main);sync 与 sync --check 均通过;Deployment df033d06fd94a4b02a447a27ced8d711521342f3;SYB 214485db630141aeb03d4b49b22a65e572fb592a;Business 7d7f515652a2b24880e55cfd95e94d3c25cbbc4d
No dependencies set.
The note is not visible to the blocked user.
当前交付状态(2026-09-07,本机已部署、待验收)
用户已确认原型、默认兼容 HTTP/HTTPS 和明文风险,并明确授权本机合并、迁移、菜单权限写入与重启验证。
以下保留原型阶段需求与变更历史,其中“仅原型/未实施”属于当时阶段,不代表上述当前状态。
来源与当前阶段
2026-09-07 用户要求轻量客户端密钥管理,按左侧“采集采购”“采采管理”模块选择开放范围;明确“建工单,先出 qux 原型,我审核后才能做”。本单当前只建设 QuantUX v1 审核稿,不编写生产代码,不执行迁移、权限写入、发布或真实业务请求。
基线 main 29ba16e;复用 access/modules.go 现有分组及模块键。无原型依赖阻塞;Server/Web/API/权限/数据设计属于后续实施影响,Android 不变。与 #236 无代码并行修改。
目标与方案草稿
管理员专用客户端密钥列表+创建弹窗;名称、模块授权摘要、状态、最后使用时间,查看授权、停用确认。首版不做复杂 OAuth、自动续期或任意接口编辑。
模块树:采集采购(SYB商品、SYB同步、档口入库码、蝦皮商品、PDD商品、采集任务、采购管理);采采管理(SYB店铺、采集规则、采购规则、设备列表、AI规格匹配)。分组勾选仅选择当前子模块,新菜单不自动授权。
每模块默认只读,可选读写(已有查询/新增/修改接口,排除执行动作);同步、采集创建/重试、采购执行、删除、回写等独立动作默认关闭。无可开放写接口时显示不支持,不伪造通用 CRUD。
模块名仅为选择界面,后端采用稳定模块键→明确接口白名单,不直接绑定菜单标题或创建管理员身份。隐藏敏感字段;AI Provider 密钥、设备令牌、账号权限管理、支付永不随模块授权开放;现有高风险业务门禁不绕过。
客户端使用 Authorization: Bearer <客户端密钥>;与登录JWT、Agent设备Token隔离;完整密钥仅创建后一次展示,落库摘要,可停用,审计客户端身份;生产公网启用前需HTTPS。原型仅不可用示例密钥,不调用任何真实API。
原型与验收范围
列表正常/空/加载/失败;创建表单必填校验、模块选择、读写、动作边界、提交中/失败;成功仅一次显示与复制反馈;授权详情、停用确认/已停用、非管理员无权限。
QuantUX 独立 App,标题含 #237 v1 和日期(若实际工单号不同按实际编号),线上域名 qux.ilapage.cn,记录 App ID、分享地址、revision/模型指纹和覆盖范围。原型为草稿,用户明确确认后才允许后续实施;确认不等于迁移/发布授权。不导出HTML、不创建任务归档。
验证与风险
在线模型回读、屏幕/交互连接完整性、浏览器关键流程与文字可读性。原型不能证明真实密钥安全、权限隔离或幂等实现,后续须补充接口矩阵和风险相称测试。
文档影响
当前仅设计草稿,无长期已实现事实变化,不更新Wiki。审核通过后实施需更新架构、业务规则、Admin/API契约、安全和运维说明。
当前未发现可直接调用的 Gitea/QuantUX MCP 工具:Gitea 回退忽略配置API;QuantUX 优先复用本机已配置连接器/客户端,不输出凭据。
2026-09-07 范围追加:v2 编辑既有密钥授权(仅原型)
用户提出既有 API Key 能否修改授权模块,并要求“先更新 #237 和原型”。首版增加列表“编辑授权”,复用创建弹窗的模块选择与读写/独立动作布局。
当前仍仅设计,不表示生产权限修改授权。待 v2 视觉与交互检查、用户明确确认覆盖范围后再实施。
v3 范围追加(2026-09-07,仅原型,待用户审核)
来源:用户要求“要可以后续查看已创建的密钥”“模块和功能要可以全选”,并明确“先更新 #237 与 v3 原型”。此前 v2/HTTP 版本本机已部署;v3 仅设计,不能据此宣称已实现。基线 main 9d5242b。
方案及交互
设计、验收与风险
独立 QuantUX v3 App,保留已确认 v2;沿用 Admin 布局。展示列表、新密钥查看/复制、旧密钥提示、加载/失败/解密不可用/停用/无权限,以及创建/编辑全选、分组、半选、清空、提交中/失败保留/成功。仅无效示例与固定代表性组合,不调用真实业务或生成密钥。记录可访问链接、App ID、模型指纹、验证结果;确认人/时间待用户审核。
影响:后续 Server/Web、API、安全配置与追加数据库迁移;Android 不变。依赖 v3 原型确认及独立安全/迁移实施授权,未满足前不编写生产代码;不与其他客户端密钥改动并行。迁移/本机或线上发布重启/真实密钥操作本次均不授权。
后续验收须包含旧密钥兼容、加密回读、非管理员拒绝/日志脱敏、配置缺失不降级、取消不落库、全选范围与半选、HTTP复制失败手动复制回退、原有编辑停用并发版本保护回归。
文档影响:本轮只有草稿,无已实现长期事实变化,不更新 Wiki/不运行同步;实施后须更新架构、业务规则、API、运维/配置说明。无 HTML 导出、无任务快照。
工具回退:本会话无 Gitea MCP,使用项目忽略配置的 Gitea API;QuantUX 使用已有配置的认证 MCP 服务,不记录凭据。
v3 原型证据
#237 v1 原型草稿已保存(2026-09-07)
QuantUX App ID:
6a9e6910191a826306a7f6d6名称:
GoAuto #237 v1 客户端密钥 · 菜单授权编辑入口:https://qux.ilapage.cn/#/apps/6a9e6910191a826306a7f6d6.html (需要 QuantUX 登录;尚未完成浏览器可访问性检查,不作为已验证分享链接)
覆盖:密钥列表、创建弹窗、按“采集采购/采采管理”选择模块、只读/读写和独立动作边界、一次性展示示例密钥、查看授权、停用确认,以及空/加载/失败/校验/无权限状态。
在线模型已回读:18 个状态画面、673 个控件、242 条连线,连线端点结构校验无悬空引用。模型 screens/widgets/lines/startScreen 的规范化 JSON SHA256:
74a480f15fe3bea260e618662ea2acfe3c841eab059093f2fb5eca9a06ebfb51。限制:固定代表性组合演示,不是完整动态授权实现;复制和创建均为无效示例,不产生真实密钥或权限。浏览器连接连续超时,尚未完成视觉、关键点击流程和分享预览验证,因此状态仍为“草稿,待完成预览检查”,不能据此进入生产实施。
工具说明:本会话未暴露专用 Gitea/QuantUX 工具;Gitea 使用项目环境配置的 API,QuantUX 使用已配置的认证 MCP HTTP 端点,未记录凭据。
未修改生产代码、数据库或真实权限,未部署、未导出 HTML。无长期文档影响:仅未确认设计草稿,本轮不修改 Wiki、不运行镜像同步。待预览验证完成并由用户明确确认 v1 覆盖范围后,才进入实施门禁。
v2 原型更新结果(2026-09-07)
已按用户本次要求更新本单正文与现有 QuantUX 草稿。App ID 保持
6a9e6910191a826306a7f6d6,名称升级为GoAuto #237 v2 客户端密钥 · 可编辑授权。入口:https://qux.ilapage.cn/#/apps/6a9e6910191a826306a7f6d6.html
新增列表“编辑授权”,19~26 号画面覆盖当前授权回显、修改、保存中、失败保留并重试、保存成功、全部取消校验、停用只读及独立动作设置。代表性变更为新增“采集规则·只读”、PDD 商品从读写降为只读;取消返回原列表,密钥不更换,全文不再显示。停用列表编辑入口禁用,授权详情进入只读状态。
验证:6 个模型字段更新成功并在线回读完全一致;26 画面、1036 控件、410 连线,端点无悬空引用。screens/widgets/lines/startScreen 规范化 JSON SHA256:
36e373d14235220443abbe865875e19c78c1f9d1fed68228dfa350fb17136977。限制:本轮完成模型级检查,浏览器视觉/实际点击及分享链接验证仍未完成(上一轮浏览器连接超时未解除);仍为 v2 草稿,不宣称已完成可访问性审核。模块和动作是固定组合演示,不是动态授权引擎。确认人/确认时间:待用户确认。
UI/UX 检查影响:沿用现有 Admin 风格,补充未修改保存禁用、提交中反馈、失败保留输入与恢复路径。没有修改生产代码、真实权限、数据库或部署;无新增长期事实,跳过 Wiki 更新和同步。未导出 HTML。Gitea/QuantUX 工具回退方式沿用前条记录。
v2 用户原型确认及实施门禁(2026-09-07)
用户明确:“原型通过,做 #237”。记录 v2 原型通过,确认人为本任务用户,覆盖现有密钥列表、创建、模块/读写/独立动作授权、查看、停用,以及编辑既有 Key 授权的全部 v2 范围。
设计证据沿用上一条:App ID
6a9e6910191a826306a7f6d6,v2,模型 SHA25636e373d14235220443abbe865875e19c78c1f9d1fed68228dfa350fb17136977。用户确认不等同于 Agent 已完成浏览器验证;之前记录的视觉/点击未验证事实保留。下一阶段为 Server/Web 实施,Android 不变。按仓库永久规则及本单“原型确认不等于迁移/发布授权”,密钥认证、安全和权限修改正式实施前须再次明确人工授权。目前停在该门禁,尚未修改生产代码或数据库。
拟请求授权范围:实现 #237 的客户端密钥认证、模块接口白名单与敏感字段隔离,密钥创建/授权编辑/停用和审计,管理员 UI、追加迁移文件及自动化测试。运行本机/线上数据库迁移、写入真实权限、重启发布和真实业务动作不包含在上述代码实施授权内,待具体迁移与验证方案确定后另行申请。
本轮仅更新工单确认记录,无长期事实变化,不更新 Wiki。继续沿用已记录的 Gitea API 回退原因。
开始实施(2026-09-07)
用户已授权 #237 密钥认证、安全、权限代码、UI、追加迁移文件和自动化测试。明确不含实际数据库迁移、真实权限写入、重启或发布。基线 origin/main 29ba16e;独立工作区 issue-237,保留原工作区改动。采用独立 /api/client/v1 入口,稳定模块键及逐路由白名单,不伪造管理员 JWT;所有独立动作默认关闭,每次请求重新检查密钥与授权。管理 /api/admin/v1/client-keys 仅管理员。追加 client_api_key、client_api_key_audit 表与管理员菜单迁移文件,编辑/停用使用版本条件避免覆盖。验证仅隔离自动化数据库与 mock,不调用真实采购/SYB/AI。长期文档影响:架构、业务规则、共享 API、安全运维,将于代码验证后集中更新。
feat(api): 客户端密钥与菜单模块授权(先审 QuantUX 原型)to feat(api): 客户端密钥与可编辑菜单模块授权代码交付待验收;实际迁移与部署联调待授权(2026-09-07)
实现与版本
已按用户确认的 QuantUX v2 实现 Server/Web,Android 未改。分支
feat/237-client-api-keys已推送;实现提交57b0f15,长期 Wiki 镜像提交76c94e3,基线29ba16e,未合并 main。独立
/api/client/v1共 65 条显式业务路由;复用导航 12 模块,普通读写与独立动作分开,默认动作关闭。管理/api/admin/v1/client-keys仅管理员;创建只返回一次随机密钥、库中保存 SHA-256 摘要,支持查看授权、原 Key 编辑和停用。编辑/停用通过 version 条件更新并与管理审计同事务;每次客户端请求重新验证授权,不伪造 Admin JWT。请求审计意图必须先保存,再执行业务;响应过滤凭据及原始载荷。现有业务幂等、状态机和支付禁止边界保持。追加迁移文件
1788798000000_client_api_key.go创建两表和管理员菜单,仅在隔离 SQLite 测试执行。实际 MySQL 迁移、菜单权限写入尚未执行。验证
go test ./...通过;最终受影响包 clientapi/clientkey/迁移目录复核通过,go build通过。harness.py check --strict、唯一一轮sync+sync --check、git diff --check通过;测试开发服务已停止。长期文档
已在线更新并回读正文及 revision(显式保留原非空标题),随后同步只读镜像:
ba4f09e1fb62f45a097b3310860fc4138b0ce48e5ced8b2313bf5ca23096c7d5ddb3049884575f0c2ce609309aefecac2afdc1a10b79a0631797a6cb(含 65 条完整清单)7c6c467980eabccc77f84c404848dd624d8311d9本会话没有 Gitea MCP 工具,继续按已记录方案使用项目忽略配置的 Gitea API,未输出凭据。不导出原型 HTML 或工单快照。
部署前置与边界
管理端密钥接口及客户端接口在所有环境均强制 HTTPS;当前线上 HTTP IP 入口不适用,不能通过伪造协议头放行。须先确认 HTTPS 入口,再单独授权实际追加迁移、权限写入、必要服务重启和范围明确的联调;本次没有执行这些操作。
模块授权不提供行/店铺级数据隔离;已经通过校验的在途请求可在撤销授权后完成。审计 status=0 需核对结果,不能自动重放。部分既有业务操作人 ID 为授权管理员,实际客户端身份以 key_id 审计为准。客户端采购批量重试沿用现有 Admin 语义,不新增 Agent reset 能力。
工单保持 open,代码交付待验收,真实迁移与联调未完成;用户未验收前不关闭。
方案与安全边界变更:默认 HTTP/HTTPS(2026-09-07)
用户明确要求不加开关,HTTP 和 HTTPS 默认都可使用,并再次确认接受 HTTP 明文传输风险,授权实施代码与测试。此确认替代此前强制 HTTPS 的设计:管理员密钥管理与 /api/client/v1 均取消 TLS/转发协议头门禁,不新增环境开关;管理员身份、密钥验证、模块/动作、版本冲突、停用、审计和 no-store 保留。界面仅更新既有安全提示,不改变布局和交互,用户确认覆盖该提示与协议边界;无需另建交互原型。增加两种协议的管理权限及客户端授权回归测试,同步架构/业务/API/运维 Wiki。实际迁移、权限写入、线上配置、重启和发布未授权,本轮不执行。Gitea MCP 未提供,沿用项目 API 回退。
默认 HTTP/HTTPS 兼容已实现(2026-09-07)
按用户明确风险确认和本轮开始记录 #7310,删除客户端密钥管理及客户端网关的 TLS/转发协议头门禁,不新增开关。管理路由仍要求 Admin JWT + admin;每次请求密钥、模块/动作、停用与审计校验保持,管理响应 no-store 保留。已移除旧 426 分支、过时代理信任测试;页面提示改为支持 HTTP/HTTPS 并明确 HTTP 明文风险,不变更布局和交互。
实现提交:71f7751;本轮 Wiki 镜像提交:ac3c63e;分支 feat/237-client-api-keys 已推送,未合并 main。既有初版
57b0f15及文档76c94e3保留历史;此前“必须 HTTPS 才可部署”的描述已被本轮明确决定替代。验证:65 条路由的只读/写/独立动作矩阵均在 HTTP、HTTPS 下执行;两种协议均检验无效/缺失/停用密钥拒绝、URL 凭据拒绝、响应脱敏、no-store 和请求审计关联。管理创建以 admin/purchaser/client/空角色在两种协议下验证管理员边界;全量 go test ./... 与 Go 构建通过。Web 原 8 用例通过,修改文件 ESLint 与生产构建通过,保留既有 CSS/大分包警告;全量 lint 已知采购任务页 24 项问题不在本轮修改范围。浏览器以本地内存 mock fixture 确认新 HTTP/HTTPS 及明文风险提示可见,开发服务已停止。未创建真实密钥或执行业务动作,未测试真实外部 HTTP/TLS 反代链路。
长期文档在线更新并回读 revision,已完成唯一一轮 sync + sync --check 和 check --strict:
Gitea API 回退原因沿用 #7310;不导出工单快照或原型。工单保持 open、代码待验收。实际迁移、权限写入、重启及发布仍须用户独立授权,未执行。
本机迁移与启动授权(2026-09-07)
用户已授权合并 #237、本机追加迁移和菜单权限写入、构建重启验证,不涉及线上。前置只读检查:本机数据库 127.0.0.1:3307/goauto,唯一未执行迁移 1788798000000_client_api_key,无运行中的采集/采购/SYB同步;保留定时任务启停。当前 Supervisor 仍运行原根目录旧分支,且该目录有用户改动,故使用已有干净 main-runtime 工作区快进 main 并切换本机 GoAuto 两个启动项到该目录,继续读取原 config.yaml,不改/覆盖原工作区。实际结果将在验证后回写。
本机部署与验证完成(2026-09-07)
授权依据:用户对本机迁移、菜单权限写入、构建及服务重启明确回复“授权”;本次未操作线上。
前置:实际数据库确认为本机 127.0.0.1:3307/goauto;唯一未执行迁移为 1788798000000_client_api_key,无运行中采集/采购/SYB同步。现有服务来自带用户改动的旧根工作区,因此不覆盖或重置,改用已有干净 main-runtime 工作区;main 已快进合入 #237 并推送。
迁移:本机构建二进制运行正式 migrate,配置与数据库凭据仅在进程环境内读取;退出 0。回读 sys_migration=1788798000000,client_api_key/client_api_key_audit 存在;菜单 GoAutoClientKeys(1186)归属采采管理父菜单 1172,角色关联仅 admin。复核无其他未执行迁移,sys_job 启停状态前后完全一致。
运行:仅停止/启动 goauto-admin-api、goauto-admin-ui;外部配置 D:/supervisor/programs/goauto.conf 指向 D:/OPC/goauto-worktrees/main-runtime,继续使用 D:/OPC/goauto/config.yaml;API 增加 -SkipMigration,移除无需的 ExecutionPolicy Bypass。配置变更后经 supervisor.reloadConfig 读取并定向启动两个进程,已按实际命令行确认新目录。未重启整个 Supervisor 或其他项目。XML-RPC 方法列举不受支持,未用其扩大操作;读取配置成功后仅对指定程序启动。
验证:main-runtime Server 构建及 Web 生产构建通过(既有 CSS/大分包警告);API 8010、Web 9527 监听且 Supervisor 均 Running。浏览器复用本地真实管理员会话刷新,采采管理中出现客户端密钥;真实密钥列表空态正常,创建弹窗加载两组 12 模块,HTTP/HTTPS 及明文风险提示可见,控制台无 error;取消弹窗未创建真实密钥。未认证客户端 GET 返回 HTTP 401;未认证管理 GET 按既有 JWT 中间件返回 HTTP 200/body code=401 且无数据,未绕过登录。
提交:功能基线 ac3c63e,版本化运行模板 9a10d82,本轮 Wiki 镜像 9d5242b,均在 main。原根目录 dirty/untracked 文件保持原样。
长期运维事实已按 Wiki-first 更新并在线回读:Architecture 9d3b3f2683b5c77f3fd6601057e64c2cda773a51;Business Rules 2a9334053de83a9a0525af074755f67964b48a29;API 59853b796dc787d6af4b6ca3a9c1ae3156cc7152;Deployment f951dbc8b6a555cbf8f44cda073910406ba55191。本轮唯一一次 sync + sync --check 与 check --strict 通过。Gitea 沿用已记录的 API 回退,不导出任务快照。
交付入口:http://127.0.0.1:9527/#/client-keys/index 。菜单未刷新时重新登录。未验证真实密钥签发/编辑/停用及客户端业务读写闭环;线上迁移/发布/重启均未执行。用户未验收,本单不关闭。
v3 原型已更新,待审核;当前仅设计,详见正文。
2026-09-08 已授权线上发布,待验收
Wiki 在线回读、镜像检查和提交:fdd26af(已推送 main);sync 与 sync --check 均通过;Deployment df033d06fd94a4b02a447a27ced8d711521342f3;SYB 214485db630141aeb03d4b49b22a65e572fb592a;Business 7d7f515652a2b24880e55cfd95e94d3c25cbbc4d