44 Commits

Author SHA1 Message Date
pmc
d719891754 feat(03-02): 新建 CredentialSlotDialog 组件 (RHF + Zod + Sonner + handleApiError)
- 新增 components/ai-model/credential-slot-dialog.tsx(kebab-case,191 行)
- RHF + Zod schema:appId / accessToken 强制非空(CONTEXT D-提交逻辑 锁定)
- 打开时 useEffect 调 getCredentialSlot 拉数据 + reset 表单(accessToken 永远空串)
- placeholder 用 slot.accessTokenMasked(仅视觉提示,不回填脱敏掩码)
- 提交成功 toast.success + 自动关闭;失败 toast.error + 对话框保持打开 + 表单值不丢
- 错误经 handleApiError(lib/api/error-handler.ts,不走 barrel)映射为中文
- 落地 CRED-FE-04 + CRED-FE-05 主体
2026-05-08 12:31:59 +08:00
pmc
28bc2a7251 docs(03-01): 完成「RootLayout 挂载 Sonner Toaster」plan
- 新增 .planning/phases/03-dialog-feedback/03-01-SUMMARY.md(plan 完成总结)
- STATE.md 更新:Phase 3 进度 1/3,milestone 整体 71%(5/7 plan)
- ROADMAP.md 更新:Plan 03-01 标记完成(commit 7065d73),Phase 3 进度 1/3
- REQUIREMENTS.md 更新:CRED-FE-05 反馈通道前置打通(完整闭环依赖 03-02)

任务原子提交:feat 7065d73(app/layout.tsx)
2026-05-08 12:29:49 +08:00
pmc
7065d73666 feat(03-01): 在 RootLayout 挂载 Sonner Toaster
- app/layout.tsx 新增 import { Toaster } from '@/components/ui/sonner'
- <body> 内 {children} 之后渲染 <Toaster />
- 修复仓库 9 处 toast 调用静默失败的 pre-existing dead code 问题
- Phase 3 业务功能 (toast 反馈) 的硬前置
2026-05-08 12:25:59 +08:00
pmc
069c01d3ae docs(03): STATE 切到 Phase 3 Ready to execute(3 plans,Milestone v1.0 收尾) 2026-05-08 12:24:42 +08:00
pmc
b27be2508f docs(03): qy-lty-admin Phase 3 PLAN ×3(03-01 Toaster 挂载 / 03-02 对话框组件 + page 替换 / 03-03 修改记录 + 双重验证),plan-checker 一遍过 2026-05-08 12:24:41 +08:00
pmc
1068c77075 docs(03): 据 researcher 实测修正 CONTEXT.md(Sonner Toaster 未挂载关键 bug + kebab-case 命名 + 直接 import sonner toast + 显式 import handleApiError) 2026-05-08 12:13:36 +08:00
pmc
c21a16af5c docs(phase-3): 调研 Phase 3 编辑对话框 + 提交反馈 2026-05-08 12:12:33 +08:00
pmc
814f49372b docs(03): qy-lty-admin Phase 3 CONTEXT.md(编辑对话框 + 反馈 PRD 快速通道,--skip-ui,含留空保留旧值无法实现的权衡说明) 2026-05-08 12:05:49 +08:00
pmc
3945ab646e docs(02): qy-lty-admin Phase 2 VERIFICATION(11/11 must-haves PASSED) 2026-05-08 11:59:48 +08:00
pmc
cf1a777033 docs(02-02): 完成 Phase 2 Plan 02-02(修改记录追加 + plan 级双重验证)
- 新增 .planning/phases/02-rbac-ai/02-02-SUMMARY.md(含 7 字段条目结构记录 + 4 大类验证结果汇总 + 偏离 PLAN 记录)
- 更新 STATE.md:Phase 2 由 进行中 切到 已交付(5/5 plan);milestone 进度 67%;下一步 /gsd-plan-phase 3
- 更新 ROADMAP.md:Phase 2 行  Complete;02-02-PLAN.md 行勾选;Plans Complete 列 2/2
- 更新 REQUIREMENTS.md:尾部追加 Plan 02-02 落地会话日志
- Phase 2 5 条 success criteria 全部确认通过;CRED-FE-02 + CRED-FE-03 闭环
- 验证 A:tsc 整体 67 条存量错误 + 反向断言 0 条指向本 phase 改动文件
- 验证 B:14 条 grep 全命中(11 specifics + 4 反向断言;原 PLAN awk 在 Windows Bash 失败 → 替换为 sed 行号区间方案)
- 验证 C:4 个 manifest+lockfile 工作区 + HEAD~1 比较均 0 行 diff
- 验证 D:next lint 因项目无 .eslintrc* 跳过沿用 Phase 1 判定
2026-05-08 11:56:26 +08:00
pmc
2be1f1d505 docs(02-02): docs/修改记录.md 顶部追加 Phase 2 条目
- 在 line 26 锚点注释之后、Phase 1 条目之前插入 [2026-05-08] Phase 2 条目
- 完整 7 字段结构:元信息行(配套服务端 Phase + 覆盖前端需求 CRED-FE-02/03)+ 文件路径 + 修改类型 + 修改内容 + 修改原因 + 跨项目联动 + 服务端联动
- 跨项目联动字段逐字与 02-CONTEXT.md 锁定一致(无新跨项目契约 / 后端 46d72b8 互引仍有效 / Phase 3 再评估)
- 纯追加 +32 行,0 删除,line 1-26 头部完全不变
- Phase 1 及更早历史条目逐字未动
2026-05-08 11:50:13 +08:00
pmc
15e725a32f docs(02-01): 完成 Phase 2 Plan 02-01(RBAC 扩展 + /ai-model 凭据槽位入口)
- 新增 .planning/phases/02-rbac-ai/02-01-SUMMARY.md(含 frontmatter / 任务详情 / 验证结果 / Self-Check PASSED)
- STATE.md:进度 50% → 75%,已完成 plan 2 → 3,Phase 2 状态切到 In progress(1/2 plan)
- ROADMAP.md:Phase 2 Plans Complete 0/2 → 1/2,状态 Not started → In progress;Plan 02-01 勾选完成
- REQUIREMENTS.md:CRED-FE-02 + CRED-FE-03 状态切到  Done,Active 段两条 unchecked → checked
2026-05-08 11:47:59 +08:00
pmc
0bcaa398cc feat(02-01): /ai-model 页面新增凭据槽位入口 Button + 占位 Dialog
- 文件转为 Client Component(line 1 加 'use client')
- 新增 import:useState/useEffect (react)、Dialog 子组件 5 个、KeyRound (lucide-react)、hasPermission (@/lib/permissions)
- 函数体顶部加 mounted 守卫 + isCredentialDialogOpen 两个 useState(复用 sidebar.tsx 同模式避免 SSR 水合警告)
- DashboardHeader children 改为 flex 容器,包含原「添加新模型」+ 新增「凭据槽位」(variant=outline)
- 凭据槽位 Button 由 mounted && hasPermission('credential-slot') 收敛,未授权角色 DOM 中完全不存在
- </Tabs> 之后插入 controlled mode 占位 Dialog,DialogTitle「通用凭据槽位」+ DialogDescription 提示由 Phase 3 落地
- Tabs / TabsContent / Card 等所有原有内容(line 18-441)逐字未动
2026-05-08 11:44:07 +08:00
pmc
d60dd897c7 feat(02-01): 扩展 RBAC 矩阵增加 credential-slot 模块
- PermissionModule union 末尾追加 'credential-slot' 字面量(共 14 项)
- 超级管理员 / AI模型管理员 两角色数组末尾追加 'credential-slot'
- 顶部权限矩阵注释表新增「凭据槽位」行
- 其他 4 角色(内容管理员/卡牌管理员/查看者/管理员)数组逐字不变
- getModuleFromPath 不动(凭据槽位是 /ai-model 子能力,无独立路由)
2026-05-08 11:43:14 +08:00
pmc
3097f15f6c docs(02): qy-lty-admin STATE 切到 Phase 2 Ready to execute 2026-05-08 11:41:45 +08:00
pmc
d4a404eb1b docs(02): qy-lty-admin Phase 2 PLAN ×2(02-01 RBAC + 入口控件 / 02-02 修改记录 + 类型检查),plan-checker 一遍过 2026-05-08 11:41:45 +08:00
pmc
d396249aef docs(02): qy-lty-admin Phase 2 RESEARCH(permissions.ts 矩阵 + ai-model/page.tsx 插入点 + KeyRound 首引) 2026-05-08 11:41:45 +08:00
pmc
c62b9c50d8 docs(02): qy-lty-admin Phase 2 CONTEXT.md(RBAC + 入口控件 PRD 快速通道,--skip-ui) 2026-05-08 11:24:31 +08:00
pmc
ba9782313f docs(01-02): 完成 Phase 1 Plan 01-02『修改记录追加 + 双重验证』收尾
- 新增 .planning/phases/01-credential-slot-api/01-02-SUMMARY.md(Plan 01-02 执行总结)
  - Task 1:docs/修改记录.md 顶部追加 [2026-05-08] Phase 1 条目(commit c1743a3)
  - Task 2:npx tsc --noEmit 在新增/修改文件零类型错误(67 条存量错误与本 phase 无关,记录为信息债);
    npm run lint 因项目无 ESLint 配置(next lint 进入交互式 prompt)—
    按 PLAN 自动 verify 规则判定通过(不指向新增/修改文件);
    临时探针 lib/api/__phase1_probe__.ts 验证 barrel 入口可解析后已删除
  - 偏差:项目 ESLint 基础设施缺失(pre-existing),按用户硬约束不动 lockfile 不修复,
    留给 PERM-06 候选 #3 跟踪
- 更新 STATE.md:Phase 1 状态切到  已交付(2/2 plan,进度 100%);
  下一步行动 = /gsd-plan-phase 2 启动 Phase 2「RBAC 收敛 + AI 模型页入口」
- 更新 ROADMAP.md:Phase 1  Complete(2026-05-08);Plan 01-02 勾选 [x]
- 更新 REQUIREMENTS.md Traceability:CRED-FE-01 标注 Plan 01-02 commit c1743a3 + Phase 1 已封盘

Self-check: PASSED(文件、commit、探针删除、关键字命中、lockfile 零漂移 全部 ✓)
2026-05-08 11:15:47 +08:00
pmc
c1743a3369 docs(01-02): 修改记录顶部追加 Phase 1 凭据槽位 API 客户端条目
- docs/修改记录.md 顶部插入 [2026-05-08] Phase 1(前端)凭据槽位 API 客户端
- 含『配套服务端 Phase』『覆盖前端需求 CRED-FE-01』前置元数据
- 跨项目联动字段:无 — 后端 commit 46d72b8 已建立互引;Phase 1 不引入新跨项目代码契约
- 现有 [2026-05-07] Phase 2 条目内容不变、位置后移
- 关键字命中:CRED-FE-01 / 46d72b8 / accessTokenMasked / accessToken / lib/api/credential-slot.ts / lib/api/index.ts / /v1/admin/credential-slot/ / 无需再次互引
2026-05-08 11:09:06 +08:00
pmc
ce0df098be docs(01-01): 完成 Phase 1 Plan 01-01「凭据槽位 API 客户端」收尾
- 新增 01-01-SUMMARY.md:记录 Task 1/2 commits、关键串命中、字节产物对比、Self-Check PASSED
- STATE.md:当前位置切到 'Plan 01-01 完成 / 01-02 待执行',进度 50%(Phase 1 内部 1/2 plan),新增 Plan 执行记录表 + 2026-05-08 关键决策
- ROADMAP.md:Phase 1 进度 0/2 → 1/2,状态 Not started → In Progress
- REQUIREMENTS.md:CRED-FE-01 Active 段已勾选 [x];Traceability 状态切到  Done(commits a0d0b9c + c072bbe)

Plan 01-01 父仓库 commits:a0d0b9c (lib/api/credential-slot.ts) + c072bbe (lib/api/index.ts)
2026-05-08 11:06:42 +08:00
pmc
c072bbec8c feat(01-01): lib/api/index.ts 末尾追加凭据槽位具名 re-export
- 在 handleApiError 之后追加 7 行具名 re-export 块
- 暴露 4 个公共符号:getCredentialSlot / updateCredentialSlot / CredentialSlot / CredentialSlotUpdatePayload
- 路径相对 './credential-slot',与现有 export * from './card' 等风格在同文件混用合法
- 现有 export */usersApi/rolesApi/handleApiError 完全不变
2026-05-08 11:03:08 +08:00
pmc
a0d0b9c1ad feat(01-01): 新建 lib/api/credential-slot.ts 凭据槽位 API 客户端
- 类型 CredentialSlot { appId, accessTokenMasked, updatedAt }(脱敏掩码语义命名)
- 类型 CredentialSlotUpdatePayload { appId, accessToken }(明文语义命名)
- 内部接口 BackendCredentialSlot(snake_case,不导出)
- adapter mapBackendCredentialSlot 把 snake → camel
- getCredentialSlot() 走 apiClient.get '/v1/admin/credential-slot/'
- updateCredentialSlot(payload) 走 apiClient.put '/v1/admin/credential-slot/',body 仅 { app_id, access_token } 不带 updated_at
- GET / PUT 各含一次 response.data?.data || response.data 双保险解包
- 1:1 复刻 lib/api/ai-models.ts 风格
2026-05-08 11:02:35 +08:00
pmc
7d7fc2867d docs(01): qy-lty-admin STATE.md 切到 Phase 1 Ready to execute 2026-05-08 11:00:37 +08:00
pmc
6e74e74263 docs(01): qy-lty-admin Phase 1 PLAN ×2(01-01 lib/api/credential-slot.ts / 01-02 修改记录 + 双重验证),plan-checker 一遍过 2026-05-08 11:00:35 +08:00
pmc
a3d71f4d08 docs(01): qy-lty-admin Phase 1 RESEARCH.md(拦截器不解包 + ai-models.ts 1:1 模板 + npm run lint 仅 ESLint) 2026-05-08 11:00:32 +08:00
pmc
c012b56573 docs(01): 据 researcher 实测修正 CONTEXT.md(拦截器不解包 + npm run lint 仅 ESLint + PUT body 不带 updated_at) 2026-05-08 10:51:27 +08:00
pmc
9aa29877e9 docs(01): qy-lty-admin Phase 1 CONTEXT.md(API 客户端 PRD 快速通道) 2026-05-08 10:44:06 +08:00
pmc
46d72b8b39 docs(02-02): 两端修改记录互引 Phase 2 接口契约(qy_lty + qy-lty-admin)
- qy_lty/docs/修改记录.md 顶部新增 [2026-05-07] Phase 2 — 管理端通用凭据槽位 REST 接口(GET 脱敏 / PUT 覆写)条目;跨项目联动字段引用 qy-lty-admin 同期条目
- qy-lty-admin/docs/修改记录.md 顶部新增 [2026-05-07] Phase 2 — 锁定后端通用凭据槽位 REST 接口契约(消费方文档化)条目;服务端联动字段引用 qy_lty 同期条目
- 两端 grep 双向命中互引闭环;Phase 1 已有两条条目位置不变
- CLAUDE.md「跨项目联动两端各写一条互相引用」规则首次落地(Phase 2 是 Milestone v1.0 首次跨项目接口契约暴露)
2026-05-07 23:07:38 +08:00
pmc
47d24a46ef docs(qy-lty-admin): 生成 Milestone v1.0 ROADMAP(3 个 phase)
3 个串行 phase(粒度 coarse,Option B 拆分):
1. 凭据槽位 API 客户端(CRED-FE-01)— 纯逻辑层,无 UI hint
2. RBAC 收敛 + AI 模型页入口(CRED-FE-02, CRED-FE-03)— UI hint yes
3. 编辑对话框 + 提交反馈(CRED-FE-04, CRED-FE-05)— UI hint yes

REQUIREMENTS.md Traceability 段回填 5/5 映射;STATE.md 切到 Phase 1 待启动。
跨项目依赖:本仓库 Phase 3 端到端验收依赖 qy_lty 后端 v1.0 Phase 2 落地(commit 4637998)。
2026-05-07 16:52:59 +08:00
pmc
01634eea9a docs(qy-lty-admin): 定义 Milestone v1.0 需求(CRED-FE-01~05)
通用凭据槽位前端集成 5 项 Active 需求:
- CRED-FE-01 API 客户端 lib/api/credential-slot.ts(GET/PUT + adapter + 类型)
- CRED-FE-02 RBAC 模块声明(lib/permissions.ts 加 credential-slot key,分配给超级管理员 + AI模型管理员)
- CRED-FE-03 /ai-model 页面入口(按钮/卡片,按权限可见)
- CRED-FE-04 编辑对话框(RHF + Zod + 留空保留旧值语义,避免回写脱敏假值)
- CRED-FE-05 提交反馈(Sonner toast 成功 + error-handler 失败处理)

候选优先级段保留为下一周期参考。
2026-05-07 16:47:48 +08:00
pmc
946e7a1a22 docs(qy-lty-admin): 启动 Milestone v1.0 通用凭据槽位前端集成
PROJECT.md 加入「本期 Milestone」段:在 /ai-model 页面集成 APP ID + Access Token
录入对话框,调用 qy_lty 后端 v1.0 锁定的 /api/v1/admin/credential-slot/ GET+PUT。
Active 段列出 CRED-FE-01~05(API 客户端 / RBAC / 入口 / 对话框 / 反馈)。
STATE.md 切换到 v1.0 状态,记录与后端 milestone 的联动依赖。

跨项目联动(互引):qy_lty 同期 commits ab3d728 / 8ae12ca / 4637998 启动后端 v1.0。
2026-05-07 16:47:39 +08:00
pmc
3e8a212e9f fix(admin): 修复 NEXT_PUBLIC_API_BASE_URL 注入时机导致登录 Network Error
All checks were successful
Build and Deploy LTY / build-and-deploy (push) Successful in 8m38s
- qy-lty-admin/Dockerfile: build 阶段加 ARG/ENV,让该变量在 next build 时进客户端 JS 包
- .gitea/workflows/deploy.yaml: admin docker build 加 --build-arg https://${DOMAIN_API}/api;删除已失效的 sed 替换
- k8s/admin-deployment-prod.yaml: 删除运行时无效的 NEXT_PUBLIC_API_BASE_URL env,留注释说明

根因:Next.js NEXT_PUBLIC_* 变量在 next build 时被静态编译进客户端 JS。
原配置在容器运行时才设该变量,对已打包的 fallback 默认值无效,
导致线上前端实际打到 http://localhost:8000/api 触发 ERR_CONNECTION_REFUSED。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-07 15:53:37 +08:00
pmc
cfd8a4923a docs(qy-lty-admin): 初始化 REQUIREMENTS.md(Validated)
把代码库现状拆成带 REQ-ID 的可追溯需求:47 项已交付(AUTH-01~06、PERM-01~05、DASH-01~02、
AI-01、CONT-01~09、SYS-01~03、UPL-01~02、UI-01~06、DEP-01~04),1 项缺口(PERM-06,
后端权限校验闭环未验证)。Active 段留空,附 12 项候选优先级供下一 milestone 参考。
2026-05-07 14:33:02 +08:00
pmc
5d8f81a4a9 docs(qy-lty-admin): 初始化 PROJECT.md + STATE.md
Brownfield 文档化模式 —— 从 .planning/codebase/ 推断 47 项已交付能力(AUTH/PERM/DASH/AI/CONT/SYS/UPL/UI/DEP),
Active 段留空待 /gsd-new-milestone 启动下一周期。
PROJECT.md 沿用 qy_lty 的章节结构(核心价值 / 已交付 / 进行中 / 范围外 / 背景 / 约束 / 关键决策 / 演进规则)。
STATE.md 记录锚定路径与 git 由父 Lila-Server 仓库管理的关键说明。
2026-05-07 14:32:53 +08:00
pmc
2ac4af8a9a chore(qy-lty-admin): 初始化 GSD config.json
镜像 qy_lty 的工作流配置(YOLO + coarse + 并行 + balanced 模型 + 全部 workflow agent 启用),
保持 qy-lty-admin 与 qy_lty 双仓库的 GSD 行为一致。
2026-05-07 14:32:45 +08:00
pmc
a85b6a79a8 docs: 映射 qy-lty-admin 代码库 2026-05-07 10:58:29 +08:00
pmc
2d82b2ef7f feat: implement affinity (favorability) system
All checks were successful
Build and Deploy LTY / build-and-deploy (push) Successful in 8m44s
- Add affinity level/setting models and migrations
- Migrate favorability data to UserDevice
- Add management commands for userapp
- Add admin CLAUDE.md and docs
- Update affinity system design doc and task checklist
- Update device_interaction and userapp models

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 17:18:30 +08:00
pmc
3b7c5c85f5 feat: update device interaction views, docs, and CLAUDE.md
All checks were successful
Build and Deploy LTY / build-and-deploy (push) Successful in 9m14s
- Update device_interaction views
- Update admin README and CLAUDE.md
- Add affinity system design doc
- Add device chat record subtitle storage scheme doc

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 17:06:21 +08:00
zyc
4de4595ec0 feat: update CI/CD pipeline for multi-env deploy and use mirror registry
All checks were successful
Build and Deploy LTY / build-and-deploy (push) Successful in 7m50s
- Add dev branch trigger and environment-based config (prod/dev)
- Switch to Volcano container registry with retry logic
- Use mirror images for Docker base images (daocloud.io)
- Add dynamic domain/DB/Redis config per environment

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 15:33:32 +08:00
pmc
c0fe1f502b feat: update card models, admin pages, and add migrations
All checks were successful
Build and Deploy LTY / build-and-deploy (push) Successful in 1h5m35s
- Update card models, serializers, views and URLs
- Update dances, songs, users admin pages and API modules
- Add card migrations (merge furniture into decoration)
- Update middleware and settings

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 16:38:48 +08:00
pmc
55ca2cbdaf feat: update card views/serializers and admin sidebar
All checks were successful
Build and Deploy LTY / build-and-deploy (push) Successful in 47m12s
- Add new card API endpoints and serializers
- Update sidebar navigation
- Update claude settings permissions

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 11:35:11 +08:00
pmc
bd95ba470c feat: update admin panel, API modules, and add migrations
- Update food, outfits, props, home-decor pages and components
- Add permissions page and sidebar updates
- Update API client and all API modules (auth, food, dances, etc.)
- Add card model migrations for optional fields
- Update Django views, serializers, and authentication
- Add affinity level migrations and user app updates
- Add project documentation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 13:06:50 +08:00
zyc
0c610c1e49 first commit 2026-03-17 13:17:02 +08:00