- sysadmin.Service.GetSettingValue: whitelist read-through (DB > env > default) - maintenance.Service: SiteSettingsProvider injection; StatusView carries notice/readOnly; new CurrentSiteStatus + GET /api/v1/maintenance/site-status - composition root wires ui.maintenance_notice / ui.read_only_mode into maintenance site settings - MaintenanceBanner: persistent notice banner + read-only mode strip - chore(web): drop dead 'dirty' var in EnvSettingsSection (baseline TS6133 build blocker) - KB ops actions: deferred out-of-repo (shared infra container side); documented in task record
3.4 KiB
3.4 KiB
title: "P9: web-sysadmin 残差收口" task_id: websysadmin-residual-r2-2026-09-25 (r1 cancelled: scope missed internal/app) status: in_progress created: 2026-09-25 updated: 2026-09-25 owner: cursor-auto task_type: implementation task_tier: small policy_revision: "agent-governance-2026-09-21-r1" branch: feature/websysadmin-residual-2026-09-25 worktree: .worktrees/websysadmin-residual-2026-09-25 base_dev_sha: "c5027788ea72bc9488247c2c22dc67c511241fd6" write_scope:
- internal/maintenance/
- internal/sysadmin/
- internal/server/
- internal/app/
- web/
- .doc/ops/short-term/
- .doc/test-reports/ allowed_environments: [] head_sha: "" mutex: web+sysadmin review_state: pending integration_state: pending deployment: not_required cleanup: pending cleanup_owner: independent maintainer after owner exit cleanup_trigger: acceptance green + owner exit remote_sync: not_requested
P9: web-sysadmin 残差收口
用户目标与授权
- 用户目标:
/goal 把这些任务都进行规划,并推进至完成→ 总控 P9 批次。 - 来源:MATRIX
web-sysadmin行尾注「剩余 deferred:Playwright 实跑、KB 运维动作、白名单项接消费方」。 - 交付终点:三项残差处理完毕(做/不做+理由),验收绿。
残差处置
| 残差 | 处置 | 说明 |
|---|---|---|
| 白名单项接消费方 | 本批实施 | ui.maintenance_notice + ui.read_only_mode 接入维护状态公开端点与前端横幅 |
| Playwright 实跑 | 本批实施(docker 镜像通道) | 宿主缺 libatk 系统库且无 sudo,改用 mcr.microsoft.com/playwright 官方镜像跑 admin-console.spec.ts(自带全部依赖) |
| KB 运维动作 | 登记不做 | KB 为纯只读检索客户端(internal/kb 无写路径),rebuild/index 属共享基础设施容器(shuimu-kb-shared)侧能力,超出本仓边界;一期只读口径维持,管理台 KB 分组补探活刷新即可 |
实施内容(白名单消费方接线)
sysadmin.Service.GetSettingValue(key):白名单 key 只读解析(DB > env > default),供跨模块消费。maintenance.Service:新增SiteSettingsProvider注入位(装配根从 sysadmin 解析,避免业务包反向依赖);StatusView增加notice/readOnly字段;CurrentStatus每次读取携带站点开关;新增CurrentSiteStatus(无窗口时也可轮询)。- 装配根(
app.go):rt.Maintenance.SetSiteSettings(...)从 sysadmin 读ui.maintenance_notice/ui.read_only_mode。 - 新公开端点:
GET /api/v1/maintenance/site-status(无需登录,同 status 口径)。 - 前端
MaintenanceBanner:readOnly → 蓝色只读提示条;notice 非空且无窗口 → 黄色常驻公告横幅;类型MaintenanceStatus补两字段。 - 顺手修:
EnvSettingsSection.tsx死变量dirty(dev 基线既有 TS6133 构建阻断,单行删除不改行为)。
验证
- Go:
go build ./...+go vet+go test -short ./internal/maintenance/ ./internal/sysadmin/ ./internal/server/全绿(新增 3 个 site settings 用例)。 - Web:
npm test(34/34)+npm run buildPASS。 - Playwright:docker 镜像通道跑
admin-console.spec.ts(证据见测试报告)。
非目标
- 不做 KB 写路径/重建编排(超边界,见上表)。
- 不改
chat.default_session_role等其余白名单键(消费方属各自业务模块后续任务)。