- 02-02-SUMMARY.md:8 条 success criteria 全 PASS(28 项独立断言 + Swagger schema + 两端互引)+ 验收方法论 + 偏差记录 + Phase 3 起点准备 - STATE.md:进度 75% → 100%(4/4 plan 完成);Phase 2 整体 Complete;下一步 /gsd-plan-phase 3 - ROADMAP.md:Phase 2 标记 ✓ Complete(2/2 plan 完成;commits 6820fe7..46d72b8) - REQUIREMENTS.md:CRED-03 / CRED-04 traceability 表 Pending → Done
168 lines
9.9 KiB
Markdown
168 lines
9.9 KiB
Markdown
---
|
||
gsd_state_version: 1.0
|
||
milestone: v1.0
|
||
milestone_name: 通用凭据槽位
|
||
status: Phase 2 全部完成(Plan 02-01 + 02-02 落地),下一步启动 Phase 3 规划(CRED-05 客户端 GET 明文 + CRED-06 阿里云日志脱敏)
|
||
stopped_at: Phase 2 完成(端到端 8 条 success criteria 全 PASS + 两端修改记录互引闭环);下一步启动 Phase 3 规划
|
||
last_updated: "2026-05-07T15:07:54Z"
|
||
last_activity: 2026-05-07
|
||
progress:
|
||
total_phases: 3
|
||
completed_phases: 2
|
||
total_plans: 4
|
||
completed_plans: 4
|
||
percent: 100
|
||
---
|
||
|
||
# Project State — QY LTY Backend
|
||
|
||
**最后更新**: 2026-05-07(Phase 2 完成:Plan 02-01 + 02-02 全部交付,CRED-03 / CRED-04 标记 Done;端到端 8 条 success criteria 全 PASS;两端修改记录互引闭环)
|
||
|
||
## 项目引用
|
||
|
||
参见:`.planning/PROJECT.md`(更新于 2026-05-07)
|
||
|
||
**核心价值**:设备端与手机端通过同一个 user_id 实时互通——`device_{user_id}` 分组语义必须始终成立。
|
||
|
||
**当前重点**:Milestone v1.0 通用凭据槽位(APP ID + Access Token)— Phase 1 + Phase 2 全部完成;下一步启动 Phase 3 规划(CRED-05 客户端 GET 明文 + CRED-06 阿里云日志脱敏)。
|
||
|
||
## 当前位置
|
||
|
||
```
|
||
Phase: 2 of 3(管理端 REST 接口)— Complete ✓
|
||
Plan: 02 of 02(端到端 verify + 互引)— Complete ✓
|
||
Status: Phase 2 整体完成,等待启动 Phase 3 规划
|
||
Last activity: 2026-05-07
|
||
```
|
||
|
||
Progress: [██████████] 100%(已完成 plan:4/4 — Phase 1 全部 + Phase 2 全部;Phase 3 plans 数 TBD,按当前 milestone 规划范围统计)
|
||
|
||
## 性能指标
|
||
|
||
**速度:**
|
||
|
||
- 已完成 plan 数:4
|
||
- 平均耗时:~430 s(顺序执行模式)
|
||
- 总执行时间:1720 s(Plan 01-01: 184 s + Plan 01-02: ~600 s + Plan 02-01: 216 s + Plan 02-02: ~720 s)
|
||
|
||
**按 Phase:**
|
||
|
||
| Phase | Plans | Total | Avg/Plan |
|
||
|-------|-------|--------|----------|
|
||
| 1 | 2/2 | 784 s | 392 s |
|
||
| 2 | 2/2 | 936 s | 468 s |
|
||
|
||
**最近趋势:**
|
||
|
||
- 最近 5 个 plan:01-01(184 s,3 task)/ 01-02(~600 s,4 task + checkpoint 验收)/ 02-01(216 s,3 task / 3 commit / 3 文件)/ 02-02(~720 s,2 task / 2 commit / 1 创建 + 2 修改文件 + 端到端 28 项断言)
|
||
- 趋势:纯 auto 代码落地 plan 速度稳定 200-220 s;端到端验收 plan(含 Django test client 跑 28 项断言 + Swagger schema 校验 + 跨项目互引)放大到 ~720 s(多走两次脚本编写 / 调试);checkpoint 验收 plan 显著放大耗时
|
||
|
||
*每完成一个 plan 后更新*
|
||
|
||
## 累积上下文
|
||
|
||
### 决策
|
||
|
||
完整决策日志见 PROJECT.md「关键决策」表。
|
||
当前 milestone 相关决策:
|
||
|
||
- 凭据槽位以 `pk=1 + get_or_create` 模式落地单例语义(PROJECT.md「关键约束」段)
|
||
- 客户端 GET 接口必须返回**明文** Access Token(手机端/设备端实际调用第三方需要),仅管理端 GET 与日志做脱敏
|
||
- **[Plan 01-01]** `CredentialSlot` 单例 1:1 复刻 `userapp.models.AffinitySetting`(pk=1 + save 钩子重定向 + get_solo),不发明新模式
|
||
- **[Plan 01-01]** `CredentialSlot` 字段集合最小化:app_id(128) / access_token(512) / updated_at;不加 `created_at`(单例无创建语义)
|
||
- **[Plan 01-01]** Admin 与 Phase 3 日志共用同一 `mask_token` 工具(放 `common/utils.py`),不引入第三方加密 / 脱敏库
|
||
- **[Plan 01-01]** 探针数据契约:DB pk=1 留 `access_token='probe_secret_xxxx'`,Plan 01-02 Admin 列表脱敏 checkpoint 期望串 `*************xxxx`
|
||
- **[Plan 01-02]** CredentialSlotAdmin access_token 不进 readonly_fields(编辑态保持明文 input 供运营录入;脱敏靠 list_display 的 access_token_masked 计算字段)
|
||
- **[Plan 01-02]** has_add_permission 条件式(CredentialSlot.objects.exists() 取反),不写死 False;首次部署运营仍能录入第一条
|
||
- **[Plan 01-02]** has_delete_permission 永远 False,含 obj=None 的批量动作场景;防运营误删丢失单例
|
||
- **[Plan 01-02]** BotAdmin / ChatMessage 注册块的历史 class 名误用问题不修(不在 phase scope)
|
||
- **[Plan 01-02]** 修改记录两条条目都在 Task 3 一次性写入「跨项目联动: 无」字段(INFO #2 调整),不留 Task 4 二次写入
|
||
- **[Plan 01-02]** qy-lty-admin/docs/修改记录.md 不写互引条目;Phase 1 是纯服务端改动,CLAUDE.md 跨项目规则下纯单端不需要互引;Phase 2 暴露 REST 接口时再做前后端互引
|
||
- **[Plan 02-01]** CredentialSlotAdminView 1:1 复刻 RTCChatHistoryAPIView 自定义 APIView 风格(不走 RetrieveUpdateAPIView,仓库零先例)
|
||
- **[Plan 02-01]** permission_classes=[IsAuthenticated] + view 内 _ensure_admin 二次校验 is_staff(不发明 IsAdminTokenAuthenticated permission 类,沿用 AdminEmailLoginView/AdminLogoutView 模式)
|
||
- **[Plan 02-01]** 脱敏放 view 层 _build_response_data helper:GET 与 PUT 响应都强制走脱敏,避免 PUT 直接 return success_response(data=serializer.data) 明文回显(Pitfall 3)
|
||
- **[Plan 02-01]** drf-yasg request_body 用独立 CredentialSlotPutRequestSchema 类(与 AdminEmailLoginRequestSchema 模式一致),与实际写入校验的 CredentialSlotSerializer 解耦
|
||
- **[Plan 02-01]** 不写 docs/修改记录.md(用户在 prompt 显式声明);由 Plan 02-02 Task 2 一次性补两端互引条目
|
||
- **[Plan 02-02]** 端到端验收走 Django test client(in-process),不启 daphne / runserver:内存调用更快、可重复、零端口占用;本仓库鉴权 + 标准壳层 middleware 都是 Django MIDDLEWARE 而非 ASGI 层,test client 路径与生产路径功能等价
|
||
- **[Plan 02-02]** Swagger 验收路径:`/swagger.json/`(带 trailing slash,url 模式 `swagger<format>/`);本仓库 StandardResponseMiddleware 也会包 OpenAPI schema 进 `{success, code, message, data}`,验证脚本需 unwrap `data` 字段;basePath=/api 所以 paths key 是 `/v1/admin/credential-slot/`(去掉 /api 前缀)
|
||
- **[Plan 02-02]** 测试 token 明文不入仓库:02-VERIFICATION.md 仅记长度(length=36)+ PASS 判定;脚本结束自动 cache.delete 释放 Redis admin_token / token key
|
||
- **[Plan 02-02]** DB 探针态主动还原:脚本最后 slot.app_id='probe_app' / slot.access_token='probe_secret_xxxx' / slot.save() 还原,给 Phase 3 留下稳定起点
|
||
- **[Plan 02-02]** qy-lty-admin 改动通过父级 Lila-Server/.git 提交:qy-lty-admin/ 没有自己的 .git;commit 46d72b8 在父仓库同时入两端 docs/修改记录.md
|
||
- **[Plan 02-02]** 临时验收脚本验完即删:`_phase2_verify.py` / `_phase2_swagger_verify.py` 是一次性证据生成器,证据落地 02-VERIFICATION.md 后无需保留
|
||
|
||
### Pending Todos
|
||
|
||
无(`.planning/todos/pending/` 暂无条目)
|
||
|
||
### Blockers/Concerns
|
||
|
||
无
|
||
|
||
## Deferred Items
|
||
|
||
从 brownfield 文档化阶段沉淀的候选优先级(详见 REQUIREMENTS.md → Active → 候选优先级),本期 v1.0 不消化:
|
||
|
||
| 类别 | 条目 | 状态 | 沉淀于 |
|
||
|------|------|------|--------|
|
||
| HIGH | ACH-02 成就解锁条件校验缺失 | 候选 | 2026-05-07 brownfield |
|
||
| HIGH | SMS 验证码无频率限制 | 候选 | 2026-05-07 brownfield |
|
||
| HIGH | 收紧 DEBUG / CORS_ALLOW_ALL_ORIGINS 默认值 | 候选 | 2026-05-07 brownfield |
|
||
| HIGH | 移除测试 MAC `AA:BB:CC:DD:EE:FF` 硬编码 | 候选 | 2026-05-07 brownfield |
|
||
| HIGH | 测试基础设施搭建(pytest 体系) | 候选 | 2026-05-07 brownfield |
|
||
| MEDIUM | 好感度 P2/P3/P4(Service / 接口 / 客户端集成) | 候选 | 2026-05-07 brownfield |
|
||
| MEDIUM | Python 3.8 → 3.11/3.12 升级 | 候选 | 2026-05-07 brownfield |
|
||
| MEDIUM | 拆分 device_interaction/views.py(1867 行) | 候选 | 2026-05-07 brownfield |
|
||
|
||
## 下一步
|
||
|
||
```
|
||
/gsd-plan-phase 3
|
||
```
|
||
|
||
Phase 2 已整体完成(commits 6820fe7 / 192d0a1 / 9d02021 / 2dec1fd / 3cfd481 / 46d72b8):
|
||
|
||
- Plan 02-01:`CredentialSlotSerializer` + `CredentialSlotAdminView` + 路由注册(commits 6820fe7 / 192d0a1 / 9d02021)
|
||
- Plan 02-02:
|
||
- Task 1:端到端 8 条 success criteria 全 PASS — Django test client 跑 28 项独立断言 + `/swagger.json/` schema 校验(commit 3cfd481)
|
||
- Task 2:qy_lty + qy-lty-admin 两端 docs/修改记录.md 各写一条 Phase 2 互引条目,跨项目联动闭环(commit 46d72b8)
|
||
|
||
URL `/api/v1/admin/credential-slot/` GET / PUT 已端到端验证;DB 探针态已还原 `probe_app` / `probe_secret_xxxx`;CRED-03 / CRED-04 已在 REQUIREMENTS.md 标记 Done。
|
||
|
||
下一步规划 Phase 3:CRED-05(客户端 GET `/api/credential-slot/`,user token 鉴权,**明文**返回)+ CRED-06(阿里云日志 formatter 用 `mask_token` 过滤 access_token,覆盖 PUT 请求体 / admin GET 响应体两条最易泄露路径)。
|
||
|
||
## 工作流配置
|
||
|
||
详见 `.planning/config.json`:
|
||
|
||
- 模式:**YOLO**(自动通过审批)
|
||
- 粒度:**Coarse**(3-5 phase / milestone)
|
||
- 并行化:**已启用**
|
||
- workflow agent:research / plan_check / verifier 全部启用
|
||
- 模型档位:**balanced**
|
||
- `.planning/` 提交到 git:**是**
|
||
|
||
`/gsd-settings` 可调整。
|
||
|
||
## 锚定路径重要说明
|
||
|
||
`.planning/` 必须保持在 `c:\Users\admin\Desktop\Lila-Server\qy_lty\` 这一层(**不是**父级 `Lila-Server\`)。父级 `.git` 容易让 GSD 误把 `Lila-Server` 当作 project_root;本目录的存在就是锚定信号。
|
||
|
||
## 项目规则提醒
|
||
|
||
CLAUDE.md 两条强制规则(任何 phase 都必须遵守):
|
||
|
||
1. **沟通语言**:所有面向用户的回复使用中文
|
||
2. **修改记录**:每次代码 / 配置 / 迁移 / CI / Docker / 文档结构性改动**必须**追加到 `docs/修改记录.md` 顶部
|
||
|
||
`qy_lty` 与 `qy-lty-admin` 是独立项目,修改记录互不混合。
|
||
|
||
## Session Continuity
|
||
|
||
Last session: 2026-05-07T15:07:54Z
|
||
Stopped at: Phase 2 完成(Plan 02-01 + 02-02 全部交付;端到端 8 条 success criteria 全 PASS;两端修改记录互引闭环);下一步启动 Phase 3 规划(CRED-05 + CRED-06)
|
||
Resume file: None
|
||
|
||
---
|
||
|
||
*由 /gsd-execute-phase 顺序执行器于 2026-05-07 更新(Plan 02-02 完成时点)*
|