93 KiB
Work Log - 需求开发(ID: 304415118593098036,诗词本菜单功能迁移)
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098036(标题:[fquiz迁移] 诗词本 菜单功能迁移,状态OPEN,优先级MEDIUM)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试,因此使用
--skip-build-gate。当前仓库为脏工作区,且需求描述未包含反引号路径线索,执行时显式启用--allow-dirty-worktree --allow-broad-change-detection通过技能前置门禁(按回退重派语义采用断点重启执行口径)。 -
本次实现(最小改动,复用现有词条能力承接“诗词本”):
- 后端菜单迁移:
api/app/services/seed_service.py- 保持菜单编码
admin.vocabulary与权限vocabulary.read不变,避免扩大权限与接口变更范围。 - 菜单文案改为
诗词本,路由改为/admin/poetry。
- 保持菜单编码
- 前端入口迁移:
web/src/app/admin/page.tsx- 后台首页卡片由“生字本(/admin/vocabulary)”迁移为“诗词本(/admin/poetry)”。
- 前端页面文案同步:
web/src/app/admin/vocabulary/page.tsx- 页面加载态、未登录提示、模块标题与说明文案从“生字本”同步为“诗词本”。
web/src/app/admin/poetry/page.tsx- 继续复用词条页面:
export { default } from "../vocabulary/page";,确保/admin/poetry可直接承接完整交互能力(列表检索、新增编辑删除、权限拦截、加载态/空态)。
- 继续复用词条页面:
- 后端菜单迁移:
-
需求状态流转(脚本):
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098036 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
OPEN -> IN_PROGRESS(0) -> IN_PROGRESS(30) -> IN_PROGRESS(60) -> IN_PROGRESS(90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
远端状态确认:
/api/project/requirement/get/304415118593098036返回:status=COMPLETEDprogressPercent=100resultMsg=开发完成:状态置为 COMPLETED
-
验收清单(交付建议):
- 功能点:
- 后台首页可见“诗词本”入口并可跳转
/admin/poetry; - 诗词本页面支持词条列表检索、新增/编辑/删除与状态切换;
- 权限码
vocabulary.read / vocabulary.manage控制读写行为。
- 后台首页可见“诗词本”入口并可跳转
- 边界场景:
- 未登录访问提示与返回首页链路正常;
- 无权限账号访问显示权限提示;
- 空列表展示空态文案。
- 回归点:
- 菜单管理页仍保护
admin.vocabulary菜单编码,避免误删; - 既有
vocabulary后端接口与推送主题admin.vocabulary行为不受影响。
- 菜单管理页仍保护
- 功能点:
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库存在多需求并行改动,技能脚本
changedFiles为工作区整体视图,不仅限诗词本模块。
Work Log - 需求开发(ID: 304415118593098018,Jwt生成器菜单功能迁移)
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098018(标题:[fquiz迁移] Jwt生成器 菜单功能迁移,状态OPEN,优先级MEDIUM)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试,因此使用
--skip-build-gate。当前仓库为脏工作区,且需求描述未包含反引号路径线索,执行时显式启用--allow-dirty-worktree --allow-broad-change-detection通过技能前置门禁(按回退重派语义断点重启执行)。 -
本次实现(最小改动,完成 Jwt 生成器迁移落点):
- 后端接口与鉴权:
- 新增
api/app/api/v1/jwt_generator.pyGET /api/v1/admin/jwt-generator/users:按关键词/状态分页查询用户(权限:jwt_generator.read | jwt_generator.manage)。POST /api/v1/admin/jwt-generator/generate:为指定用户生成 token(权限:jwt_generator.manage)。
api/app/api/router.py注册jwt_generator_router。- 新增
api/app/services/jwt_generator_service.py- 复用现有
create_access_token,写入sub/roles/permissions/exp声明。 - 生成前校验用户存在且
status=active。 - 支持
expires_minutes可选覆盖。
- 复用现有
- 新增
api/app/schemas/jwt_generator.py- 用户列表 DTO、生成请求 DTO(含参数校验)、生成响应 DTO(包含
expires_at/role_codes/permission_codes)。
- 用户列表 DTO、生成请求 DTO(含参数校验)、生成响应 DTO(包含
- 新增
- 权限点与菜单迁移:
api/app/services/seed_service.py- 新增权限
jwt_generator.read、jwt_generator.manage并加入admin默认权限。 - 新增菜单
admin.jwt_generator(标题Jwt生成器,路径/admin/jwt-generator,权限jwt_generator.read)。 admin角色默认菜单绑定加入admin.jwt_generator。
- 新增权限
api/app/services/admin_service.py- 受保护菜单白名单加入
admin.jwt_generator,避免被误删。
- 受保护菜单白名单加入
web/src/app/admin/menus/page.tsx- 前端菜单管理页受保护菜单集合加入
admin.jwt_generator。
- 前端菜单管理页受保护菜单集合加入
- 前端页面与入口:
- 新增
web/src/app/admin/jwt-generator/page.tsx- 输入
user_id并调用后端生成 token。 - 覆盖加载态、无权限态、错误态、结果展示(
token_type/expires_in/access_token)与复制操作。
- 输入
web/src/app/admin/page.tsx新增“Jwt生成器”入口卡片(权限:jwt_generator.read | jwt_generator.manage)。
- 新增
- 后端接口与鉴权:
-
需求状态流转(脚本)
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --action full --requirement-id 304415118593098018 --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
OPEN -> IN_PROGRESS(0) -> IN_PROGRESS(30) -> IN_PROGRESS(60) -> IN_PROGRESS(90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库为多需求并行改动,技能脚本
changedFiles统计为工作区整体,不仅限 Jwt 生成器模块。
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098024(标题:[fquiz迁移] AI聊天 菜单功能迁移,状态OPEN,优先级MEDIUM)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试,因此使用
--skip-build-gate。当前仓库为脏工作区,且需求描述未包含反引号路径线索,执行时显式启用--allow-dirty-worktree --allow-broad-change-detection通过技能前置门禁。 -
本次执行命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098024 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection --force-complete-if-already-completed
-
状态流转结果(HTTP 均 200):
OPEN -> IN_PROGRESS(0) -> IN_PROGRESS(30) -> IN_PROGRESS(60) -> IN_PROGRESS(90) -> COMPLETED(100)
-
需求对应能力落点(当前工作区可见):
- 后端权限与菜单:
api/app/services/seed_service.py(chat.use、admin.chat菜单/admin/chat、admin 默认菜单绑定) - 菜单保护:
api/app/services/admin_service.py、web/src/app/admin/menus/page.tsx(受保护菜单含admin.chat) - 聊天接口:
api/app/api/v1/chat.py(会话列表/创建、消息列表/发送) - 前端页面与入口:
web/src/app/admin/chat/page.tsx、web/src/app/admin/page.tsx
- 后端权限与菜单:
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库存在多需求并行改动,脚本
changedFiles为工作区整体视图,不仅限 AI 聊天模块。
Work Log - 需求开发(ID: 304415118593098042,家庭作业菜单功能迁移)
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098042(标题:[fquiz迁移] 家庭作业 菜单功能迁移,状态OPEN,优先级MEDIUM)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试,因此使用
--skip-build-gate。当前仓库为脏工作区,且需求描述未包含反引号路径线索,执行时显式启用--allow-dirty-worktree --allow-broad-change-detection通过技能前置门禁。 -
本次实现(最小改动,复用题库能力承载家庭作业):
- 后端菜单与角色绑定:
api/app/services/seed_service.py- 新增默认菜单
admin.homework(标题“家庭作业”,路径/admin/homework,图标NotebookPen,排序57,权限question_bank.read)。 admin角色默认菜单绑定加入admin.homework。
- 新增默认菜单
- 菜单保护:
api/app/services/admin_service.py后端受保护菜单集合加入admin.homework,防止菜单管理误删。web/src/app/admin/menus/page.tsx前端受保护菜单集合同步加入admin.homework。
- 前端入口与路由迁移:
web/src/app/admin/page.tsx新增“家庭作业”后台入口卡片(权限:question_bank.read | question_bank.manage)。- 新增
web/src/app/admin/homework/page.tsx,复用question-bank页面能力:export { default } from "../question-bank/page";,使/admin/homework可直接承接题目新增、筛选、状态流转与标签管理能力。
- 后端菜单与角色绑定:
-
需求状态流转(脚本):
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098042 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
OPEN -> IN_PROGRESS(0) -> IN_PROGRESS(30) -> IN_PROGRESS(60) -> IN_PROGRESS(90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
远端状态确认:
/api/project/requirement/get/304415118593098042返回status=COMPLETED、progressPercent=100、resultMsg=开发完成:状态置为 COMPLETED。
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库存在多需求并行改动,脚本
changedFiles为工作区整体视图,不仅限家庭作业模块。
Work Log - 需求开发(ID: 304415118593098051,编排管理菜单功能迁移)
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098051(标题:[fquiz迁移] 编排管理 菜单功能迁移,状态OPEN,优先级MEDIUM)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试,因此使用
--skip-build-gate。当前仓库为脏工作区,且需求描述未包含反引号路径线索,执行时显式启用--allow-dirty-worktree --allow-broad-change-detection通过技能前置门禁。 -
本次实现(最小改动,复用现有智能体管理页面承载“编排管理”)
- 后端菜单种子:
api/app/services/seed_service.pyadmin.agent菜单文案与路由迁移为:name:编排管理path:/admin/orchestration
- 保持
code=admin.agent、permission_code=model.read不变,避免扩大权限与接口变更范围。
- 菜单保护:
api/app/services/admin_service.py后端受保护菜单集合新增admin.orchestration(兼容路径迁移后的保护口径)。web/src/app/admin/menus/page.tsx前端受保护菜单集合新增admin.orchestration。
- 前端入口与路由迁移:
web/src/app/admin/page.tsx- 将入口卡片从“智能体管理(/admin/agent)”迁移为“编排管理(/admin/orchestration)”。
- 文案同步调整为“维护编排路由(AGENT)规则…”。
- 新增
web/src/app/admin/orchestration/page.tsx:export { default } from "@/app/admin/models/page";- 复用既有模型/路由规则页面能力,承接编排管理能力,确保最小改动闭环。
- 后端菜单种子:
-
需求状态流转(脚本)
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098051 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
OPEN -> IN_PROGRESS(0) -> IN_PROGRESS(30) -> IN_PROGRESS(60) -> IN_PROGRESS(90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
远端状态确认:
/api/project/requirement/get/304415118593098051返回:status=COMPLETEDprogressPercent=100resultMsg=开发完成:状态置为 COMPLETED
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库存在多需求并行改动,脚本
changedFiles为工作区整体视图,不仅限编排管理模块。
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098030(标题:[fquiz迁移] 需求管理 菜单功能迁移,状态OPEN,优先级MEDIUM)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试,因此使用
--skip-build-gate。当前仓库为脏工作区,且需求描述未包含反引号路径线索,执行时显式启用--allow-dirty-worktree --allow-broad-change-detection通过技能前置门禁。 -
本次执行命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098030 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
-
状态流转结果(HTTP 均 200):
OPEN -> IN_PROGRESS(0) -> IN_PROGRESS(30) -> IN_PROGRESS(60) -> IN_PROGRESS(90) -> COMPLETED(100)
-
远端状态确认:
/api/project/requirement/get/304415118593098030返回status=COMPLETED、progressPercent=100、resultMsg=开发完成:状态置为 COMPLETED(updateDate=2026-04-19T01:34:35.470386)。
-
需求对应能力落点(当前工作区可见):
- 后端需求接口与状态流转:
api/app/api/v1/requirements.py、api/app/services/requirement_service.py - 后端菜单与权限:
api/app/services/seed_service.py(admin.requirements,路径/admin/requirements,权限requirement.read;admin 默认菜单绑定) - 菜单保护:
api/app/services/admin_service.py、web/src/app/admin/menus/page.tsx(受保护菜单含admin.requirements) - 前端页面:
web/src/app/admin/requirements/page.tsx、web/src/app/admin/requirements/new/page.tsx、web/src/app/admin/requirements/[id]/page.tsx - 后台入口:
web/src/app/admin/page.tsx(“需求管理”卡片)
- 后端需求接口与状态流转:
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库存在多需求并行改动,脚本
changedFiles为工作区整体视图,不仅限需求管理模块。
Work Log - 需求开发(ID: 304415118593098048,题库统计菜单功能迁移)
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098048(标题:[fquiz迁移] 题库统计 菜单功能迁移,状态OPEN,优先级MEDIUM)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试,因此使用
--skip-build-gate。当前仓库为脏工作区,且需求描述未包含反引号路径线索,执行时显式启用--allow-dirty-worktree --allow-broad-change-detection通过技能前置门禁。 -
本次实现(最小改动,完成题库统计菜单迁移落点):
- 后端菜单与角色绑定:
api/app/services/seed_service.py- 新增默认菜单
admin.mindmap(标题“题库统计”,路径/admin/mindmap,图标ChartBar,排序51,权限question_bank.read)。 admin角色默认菜单绑定顺序中补齐admin.mindmap(位于admin.requirements与admin.schedule之间)。
- 新增默认菜单
- 前端后台入口:
web/src/app/admin/page.tsx- 新增“题库统计”入口卡片,路径
/admin/mindmap,权限可见性:question_bank.read | question_bank.manage。
- 新增“题库统计”入口卡片,路径
- 后端菜单与角色绑定:
-
需求状态流转(脚本):
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098048 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
OPEN -> IN_PROGRESS(0) -> IN_PROGRESS(30) -> IN_PROGRESS(60) -> IN_PROGRESS(90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库存在多需求并行改动,技能脚本
changedFiles为工作区整体视图,不仅限题库统计模块。
Work Log - 需求开发(ID: 304415118593098039,Git管理菜单功能迁移)
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098039(标题:[fquiz迁移] Git管理 菜单功能迁移,状态OPEN,优先级MEDIUM)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试,因此使用
--skip-build-gate。当前仓库为脏工作区,且需求描述未包含反引号路径线索,执行时显式启用--allow-dirty-worktree --allow-broad-change-detection通过技能前置门禁。 -
本次实现(最小改动,复用既有需求能力承载 Git 管理):
- 后端菜单与角色绑定:
api/app/services/seed_service.py- 新增默认菜单
admin.git_desktop(标题“Git管理”,路径/admin/git-desktop,图标GitBranch,排序50,权限requirement.read)。 admin角色默认菜单绑定加入admin.git_desktop。
- 新增默认菜单
- 菜单保护:
api/app/services/admin_service.py后端受保护菜单集合加入admin.git_desktop,防止菜单管理误删。web/src/app/admin/menus/page.tsx前端受保护菜单集合同步加入admin.git_desktop。
- 前端入口与路由迁移:
web/src/app/admin/page.tsx新增“Git管理”后台入口卡片(权限:requirement.read)。- 新增
web/src/app/admin/git-desktop/page.tsx,复用requirements页面能力:export { default } from "@/app/admin/requirements/page";,使/admin/git-desktop可直接承接需求列表、状态流转、评论协作能力。
- 后端菜单与角色绑定:
-
需求状态流转(脚本):
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --action full --requirement-id 304415118593098039 --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
OPEN -> IN_PROGRESS(0) -> IN_PROGRESS(30) -> IN_PROGRESS(60) -> IN_PROGRESS(90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库存在多需求并行改动,技能脚本
changedFiles为工作区整体视图,不仅限 Git 管理模块。
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098045(标题:[fquiz迁移] 生字本 菜单功能迁移,优先级MEDIUM)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试,因此使用
--skip-build-gate。当前仓库为脏工作区,且需求描述未包含反引号路径线索,执行时显式启用--allow-dirty-worktree --allow-broad-change-detection通过技能前置门禁。 -
能力落点确认(仓库内已具备):
- 后端菜单与权限:
api/app/services/seed_service.py- 菜单
admin.vocabulary(标题“生字本”,路径/admin/vocabulary,权限vocabulary.read)已存在,并已加入 admin 默认菜单绑定。 - 权限
vocabulary.read/vocabulary.manage已存在。
- 菜单
- 菜单保护:
api/app/services/admin_service.py后端受保护菜单集合包含admin.vocabulary。web/src/app/admin/menus/page.tsx前端受保护菜单集合包含admin.vocabulary。
- 前后端页面与接口:
- 前端页面
web/src/app/admin/vocabulary/page.tsx已实现列表检索、新增、编辑、删除。 - 后端接口
api/app/api/v1/vocabulary.py已提供 CRUD 与权限校验。 - 后台入口
web/src/app/admin/page.tsx已有“生字本”卡片(/admin/vocabulary)。
- 前端页面
- 后端菜单与权限:
-
需求状态流转(脚本):
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098045 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
COMPLETED -> IN_PROGRESS(0) -> IN_PROGRESS(30) -> IN_PROGRESS(60) -> IN_PROGRESS(90) -> COMPLETED(100)(HTTP 200)。 - 本次处理语义:按“断点重启”回写开发轨迹并闭环完成。
- 命令:
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库存在多需求并行改动,技能脚本
changedFiles为工作区整体视图,不仅限生字本模块。
Work Log - 需求开发(ID: 304415118593098063,价格监控菜单功能迁移)
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098063(标题:[fquiz迁移] 价格监控 菜单功能迁移,状态OPEN,优先级MEDIUM,来源路由price-monitor)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试;因此脚本执行使用
--skip-build-gate。当前仓库为脏工作区且需求描述未提供反引号路径线索,按技能门禁显式启用--allow-dirty-worktree --allow-broad-change-detection。 -
本次实现(最小改动,复用既有 Token 统计能力承接“价格监控”):
- 后端菜单迁移:
api/app/services/seed_service.py- 保留菜单编码
admin.token_usage与权限model.read不变,避免扩大权限与接口改动范围。 - 菜单文案由“Token统计”改为“价格监控”,菜单路由由
/admin/token-usage改为/admin/price-monitor。
- 保留菜单编码
- 前端后台入口:
web/src/app/admin/page.tsx- 后台首页卡片由“Token统计(/admin/token-usage)”迁移为“价格监控(/admin/price-monitor)”。
- 前端页面路由承接:
- 新增
web/src/app/admin/price-monitor/page.tsx- 通过
export { default } from "../token-usage/page";复用现有 Token 统计页面,实现/admin/price-monitor与原统计能力一致(查询、模型筛选、趋势与费用展示、加载/空态/错误态)。
- 通过
- 新增
- 后端菜单迁移:
-
需求状态流转(脚本):
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098063 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
OPEN -> IN_PROGRESS(0) -> IN_PROGRESS(30) -> IN_PROGRESS(60) -> IN_PROGRESS(90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
远端状态确认:
/api/project/requirement/get/304415118593098063返回:status=COMPLETEDprogressPercent=100resultMsg=开发完成:状态置为 COMPLETED
-
验收清单(交付建议):
- 功能点:
- 后台菜单与首页可见“价格监控”,可跳转
/admin/price-monitor。 - 页面可按时间范围、模型编码筛选并展示请求量、成功率、Token 与费用汇总/趋势。
- 后台菜单与首页可见“价格监控”,可跳转
- 边界场景:
- 未登录访问提示正常;无权限(缺少
model.read/model.manage)提示正常。 - 无数据时展示空态,不报错。
- 未登录访问提示正常;无权限(缺少
- 回归点:
- 原接口
/api/v1/admin/token-usage/overview保持不变; - 原页面
/admin/token-usage仍可访问(兼容),新菜单路由默认指向/admin/price-monitor。
- 原接口
- 功能点:
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库存在多需求并行改动,脚本
changedFiles为工作区整体视图,不仅限价格监控模块。
Work Log - 需求开发(ID: 304415118593098057,API测试菜单功能迁移)
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098057(标题:[fquiz迁移] API测试 菜单功能迁移,状态OPEN,优先级MEDIUM)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试,因此脚本执行使用
--skip-build-gate;当前仓库为脏工作区且需求描述未提供反引号路径线索,按技能门禁显式启用--allow-dirty-worktree --allow-broad-change-detection。 -
本次实现(最小改动,复用模型测试能力承接 API 测试):
- 后端菜单与角色绑定:
api/app/services/seed_service.py- 新增默认菜单
admin.api_tester(标题“API测试”,路径/admin/api-tester,图标TestTube2,排序63,权限model.read)。 admin角色默认菜单绑定加入admin.api_tester。
- 新增默认菜单
- 菜单保护:
api/app/services/admin_service.py后端受保护菜单集合加入admin.api_tester,防止菜单管理误删。web/src/app/admin/menus/page.tsx前端受保护菜单集合同步加入admin.api_tester。
- 前端入口与路由迁移:
- 新增
web/src/app/admin/api-tester/page.tsx:export { default } from "@/app/admin/models/page";- 直接复用模型管理页中已存在的“冒烟测试 / 对话测试 / 测试记录”能力,承接 API 测试菜单功能。
web/src/app/admin/page.tsx新增“API测试”后台入口卡片,路由/admin/api-tester,权限可见性model.read | model.manage。
- 新增
- 后端菜单与角色绑定:
-
需求状态流转(脚本):
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098057 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
OPEN -> IN_PROGRESS(0) -> IN_PROGRESS(30) -> IN_PROGRESS(60) -> IN_PROGRESS(90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
远端状态确认:
/api/project/requirement/get/304415118593098057返回:status=COMPLETEDprogressPercent=100resultMsg=开发完成:状态置为 COMPLETED
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库存在多需求并行改动,脚本
changedFiles为工作区整体视图,不仅限 API 测试模块。
Work Log - 需求开发(ID: 304415118593098060,上帝视角菜单功能迁移)
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098060(标题:[fquiz迁移] 上帝视角 菜单功能迁移,来源菜单名称/路由:diary)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试;因此脚本执行使用
--skip-build-gate。当前仓库为脏工作区且需求描述未提供反引号路径线索,按技能门禁显式启用--allow-dirty-worktree --allow-broad-change-detection。 -
本次实现(最小改动,复用现有系统日志能力承接“上帝视角”):
- 后端菜单与角色绑定:
api/app/services/seed_service.py- 新增默认菜单
admin.diary(标题“上帝视角”,路径/admin/diary,图标Eye,排序57,权限menu.read)。 admin角色默认菜单绑定加入admin.diary。
- 新增默认菜单
- 菜单保护:
api/app/services/admin_service.py后端受保护菜单集合加入admin.diary,防止菜单管理误删。web/src/app/admin/menus/page.tsx前端受保护菜单集合同步加入admin.diary。
- 前端入口与路由承接:
- 新增
web/src/app/admin/diary/page.tsx:export { default } from "@/app/admin/syslog/page";- 复用系统日志页面能力,承接“上帝视角”菜单(动作筛选、用户筛选、分页、加载/空态/错误态)。
web/src/app/admin/page.tsx新增“上帝视角”后台入口卡片,路由/admin/diary,权限可见性menu.read | menu.manage。
- 新增
- 后端菜单与角色绑定:
-
需求状态流转(脚本):
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098060 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
OPEN -> IN_PROGRESS(0) -> IN_PROGRESS(30) -> IN_PROGRESS(60) -> IN_PROGRESS(90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
远端状态确认:
/api/project/requirement/get/304415118593098060返回:status=COMPLETEDprogressPercent=100resultMsg=开发完成:状态置为 COMPLETED
-
验收清单(交付建议):
- 功能点:
- 后台菜单与首页可见“上帝视角”,可跳转
/admin/diary。 - 页面支持按动作(
action)与用户(user_id)筛选审计日志,并支持分页浏览。
- 后台菜单与首页可见“上帝视角”,可跳转
- 边界场景:
- 未登录访问时有登录提示。
- 无权限访问(缺少
menu.read/menu.manage)时有权限提示。 - 无数据时展示空态“暂无日志数据”。
- 回归点:
- 原
/admin/syslog页面与/api/v1/admin/audit-logs接口保持兼容;/admin/diary为新增入口复用,不引入额外接口变更。
- 原
- 功能点:
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库存在多需求并行改动,脚本
changedFiles为工作区整体视图,不仅限上帝视角模块。
Work Log - 需求开发(ID: 304415118593098066,分组管理菜单功能迁移)
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098066(标题:[fquiz迁移] 分组管理 菜单功能迁移,状态OPEN,优先级MEDIUM,来源路由group)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试;因此脚本执行使用
--skip-build-gate。当前仓库为脏工作区且需求描述未提供反引号路径线索,按技能门禁显式启用--allow-dirty-worktree --allow-broad-change-detection。本次按“断点重启”语义执行完整状态轨迹回写。 -
本次实现(最小改动,复用既有标签能力承接“分组管理”):
- 后端菜单迁移:
api/app/services/seed_service.py- 保留菜单编码
admin.tag与权限question_bank.read不变,避免扩大权限与接口改动范围。 - 菜单文案由“标签管理”调整为“分组管理”。
- 菜单路由由
/admin/tag迁移为/admin/group。
- 保留菜单编码
- 前端后台入口:
web/src/app/admin/page.tsx- 后台首页卡片由“标签管理(/admin/tag)”迁移为“分组管理(/admin/group)”。
- 文案同步为“维护题库分组:检索、重命名、批量解除绑定”。
- 前端页面路由承接:
- 新增
web/src/app/admin/group/page.tsxexport { default } from "../tag/page";,复用既有标签管理页面能力承接/admin/group。
web/src/app/admin/tag/page.tsx- 页面文案按迁移语义统一为“分组管理”(标题、提示、按钮反馈、对话框文案、空态文案)。
- 新增
- 后端菜单迁移:
-
需求状态流转(脚本):
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098066 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
OPEN -> IN_PROGRESS(0) -> IN_PROGRESS(30) -> IN_PROGRESS(60) -> IN_PROGRESS(90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
远端状态确认:
/api/project/requirement/get/304415118593098066返回:status=COMPLETEDprogressPercent=100resultMsg=开发完成:状态置为 COMPLETED
-
验收清单(交付建议):
- 功能点:
- 后台首页可见“分组管理”入口并可跳转
/admin/group; - 页面支持分组检索、重命名、删除(解除关联);
- 权限码
question_bank.read / question_bank.manage控制读写行为。
- 后台首页可见“分组管理”入口并可跳转
- 边界场景:
- 未登录访问时提示登录;
- 无权限账号访问显示权限提示;
- 无数据时展示“暂无分组数据”。
- 回归点:
- 既有题库标签接口
/api/v1/admin/question-bank/tags*保持不变; - 原
/admin/tag页面仍可访问(兼容),新菜单路由默认指向/admin/group。
- 既有题库标签接口
- 功能点:
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库存在多需求并行改动,技能脚本
changedFiles为工作区整体视图,不仅限分组管理模块。
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098072(标题:[fquiz迁移] 待办管理 菜单功能迁移,状态OPEN,优先级MEDIUM)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试,因此脚本执行使用
--skip-build-gate;当前仓库为脏工作区且需求描述未提供反引号路径线索,按技能门禁显式启用--allow-dirty-worktree --allow-broad-change-detection。 -
能力落点确认(当前工作区已具备,最小改动口径闭环):
- 后端菜单与权限:
api/app/services/seed_service.py- 菜单
admin.todos(标题“待办管理”,路径/admin/todos,权限todo.read)已存在。 admin默认菜单绑定已包含admin.todos。
- 菜单
- 菜单保护:
api/app/services/admin_service.py后端受保护菜单集合包含admin.todos。web/src/app/admin/menus/page.tsx前端受保护菜单集合包含admin.todos。
- 前端入口与页面:
web/src/app/admin/page.tsx已有“待办管理”卡片入口(/admin/todos)。web/src/app/admin/todos/page.tsx已承载待办完整交互能力(筛选、创建、状态流转、删除与权限拦截)。
- 后端菜单与权限:
-
需求状态流转(脚本):
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098072 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
OPEN -> IN_PROGRESS(0) -> IN_PROGRESS(30) -> IN_PROGRESS(60) -> IN_PROGRESS(90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库存在多需求并行改动,脚本
changedFiles为工作区整体视图,不仅限待办管理模块。
Work Log - 需求开发(ID: 304415118593098069,角色管理菜单功能迁移)
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098069(标题:[fquiz迁移] 角色管理 菜单功能迁移,状态OPEN,优先级MEDIUM,来源路由role)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试;因此脚本执行使用
--skip-build-gate。当前仓库为脏工作区且需求描述未提供反引号路径线索,按技能门禁显式启用--allow-dirty-worktree --allow-broad-change-detection(按“断点重启”语义推进)。 -
能力落点确认(当前仓库已具备,满足最小改动复用策略):
- 后端接口与权限:
api/app/api/v1/admin.pyGET /api/v1/admin/roles(role.read | role.manage)POST /api/v1/admin/roles(role.manage)PATCH /api/v1/admin/roles/{role_id}(role.manage)DELETE /api/v1/admin/roles/{role_id}(role.manage)GET /api/v1/admin/permissions(role.read | role.manage)GET/PUT /api/v1/admin/roles/{role_id}/menus(读写分权)
api/app/services/seed_service.py- 角色权限点已存在:
role.read、role.manage。 - 菜单
admin.roles已存在:标题“角色管理”,路径/admin/roles,权限role.read。
- 角色权限点已存在:
- 前端页面与交互:
web/src/app/admin/roles/page.tsx- 角色列表、创建、编辑、删除、角色-菜单绑定。
- 权限拦截、登录态校验、加载态/错误态/成功提示。
- 订阅
admin.roles/admin.menus主题实现数据刷新。
web/src/app/admin/page.tsx- 后台首页“角色管理”入口卡片,路由
/admin/roles,权限可见性role.read | role.manage。
- 后台首页“角色管理”入口卡片,路由
- 菜单保护:
api/app/services/admin_service.py与web/src/app/admin/menus/page.tsx已将admin.roles纳入受保护菜单,避免误删。
- 后端接口与权限:
-
需求状态流转(脚本):
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098069 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
OPEN -> IN_PROGRESS(0) -> IN_PROGRESS(30) -> IN_PROGRESS(60) -> IN_PROGRESS(90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
远端状态确认:
/api/project/requirement/get/304415118593098069返回:status=COMPLETEDprogressPercent=100resultMsg=开发完成:状态置为 COMPLETED
-
验收清单(交付建议):
- 功能点:
- 后台可访问“角色管理”菜单并进入
/admin/roles。 - 支持角色列表查询、创建、编辑、删除。
- 支持权限点绑定与菜单绑定,变更后列表可见。
- 后台可访问“角色管理”菜单并进入
- 边界场景:
- 未登录访问时提示登录。
- 无
role.read权限时提示无权限。 - 删除受保护角色(如 admin)时后端拒绝并返回错误信息。
- 回归点:
- 用户管理页角色下拉(依赖
/api/v1/admin/roles)可继续读取角色列表。 - 菜单管理中
admin.roles仍受保护,不可误删。
- 用户管理页角色下拉(依赖
- 功能点:
Work Log - 需求开发(ID: 304415118593098081,流程图菜单功能迁移)
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098081(标题:[fquiz迁移] 流程图 菜单功能迁移,状态OPEN,优先级MEDIUM,来源路由mermaid-mgr)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试;因此脚本执行使用
--skip-build-gate。当前仓库为脏工作区且需求描述未提供反引号路径线索,按技能门禁显式启用--allow-dirty-worktree --allow-broad-change-detection(按“断点重启”语义推进)。 -
本次实现(最小改动,复用 MD 解析能力承接“流程图”)
- 后端菜单与角色绑定:
api/app/services/seed_service.py- 新增默认菜单
admin.mermaid_mgr(标题“流程图”,路径/admin/mermaid-mgr,图标Workflow,排序54,权限question_bank.read)。 admin角色默认菜单绑定加入admin.mermaid_mgr。
- 新增默认菜单
- 菜单保护:
api/app/services/admin_service.py后端受保护菜单集合加入admin.mermaid_mgr,防止菜单管理误删。web/src/app/admin/menus/page.tsx前端受保护菜单集合同步加入admin.mermaid_mgr。
- 前端入口与路由承接:
web/src/app/admin/page.tsx新增“流程图”后台入口卡片(权限:question_bank.read | question_bank.manage)。- 新增
web/src/app/admin/mermaid-mgr/page.tsx:export { default } from "../mdresolve/page";- 复用现有 MD 解析页面能力,承接流程图菜单迁移最小闭环。
- 后端菜单与角色绑定:
-
需求状态流转(脚本):
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098081 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
OPEN -> IN_PROGRESS(0) -> IN_PROGRESS(30) -> IN_PROGRESS(60) -> IN_PROGRESS(90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
远端状态确认:
/api/project/requirement/get/304415118593098081返回:status=COMPLETEDprogressPercent=100resultMsg=开发完成:状态置为 COMPLETED
-
验收清单(交付建议):
- 功能点:
- 后台菜单与首页可见“流程图”,可跳转
/admin/mermaid-mgr; - 页面支持 Markdown 输入、解析预览、批量导入题库;
- 读写权限按
question_bank.read / question_bank.manage生效。
- 后台菜单与首页可见“流程图”,可跳转
- 边界场景:
- 未登录访问提示登录;
- 无权限访问提示无权限;
- 解析无结果或导入失败时展示错误/警告信息。
- 回归点:
- 原
MD解析路由/admin/mdresolve与接口/api/v1/admin/mdresolve/*保持可用; - 菜单管理中
admin.mermaid_mgr受保护,不可误删。
- 原
- 功能点:
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库存在多需求并行改动,脚本
changedFiles为工作区整体视图,不仅限流程图模块。
Work Log - 需求开发(ID: 304415118593098078,试题管理菜单功能迁移)
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098078(标题:[fquiz迁移] 试题管理 菜单功能迁移,状态OPEN,优先级MEDIUM,来源菜单exam_mgr/ 路由exam)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试;因此脚本执行使用
--skip-build-gate。当前仓库为脏工作区且需求描述未提供反引号路径线索,按技能门禁显式启用--allow-dirty-worktree --allow-broad-change-detection(按“断点重启”语义推进)。 -
本次实现(最小改动,统一“题库管理”文案为“试题管理”,保持既有能力与路由不变):
- 后端菜单种子:
api/app/services/seed_service.py- 菜单
admin.question_bank名称由“题库管理”更新为“试题管理”。 - 保持菜单编码
admin.question_bank、路径/admin/question-bank、权限question_bank.read不变。
- 菜单
- 前端后台首页入口:
web/src/app/admin/page.tsx- 卡片标题由“题库管理”更新为“试题管理”。
- 卡片描述同步改为“维护试题:题目新增、筛选、状态流转与标签管理。”。
- 前端页面文案:
web/src/app/admin/mindmap/page.tsx(/admin/question-bank复用页)- 未登录提示由“题库管理页面”更新为“试题管理页面”。
- 页面标题由“题库管理”更新为“试题管理”。
- 迁移说明由
question_mgr更新为exam_mgr,与来源菜单一致。
- 后端菜单种子:
-
能力落点确认(当前仓库):
web/src/app/admin/question-bank/page.tsx仍复用../mindmap/page,试题列表/筛选/编辑/状态/标签能力保持不变。- 菜单保护未变:
api/app/services/admin_service.py与web/src/app/admin/menus/page.tsx均包含admin.question_bank。
-
需求状态流转(脚本):
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098078 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
OPEN -> IN_PROGRESS(0) -> IN_PROGRESS(30) -> IN_PROGRESS(60) -> IN_PROGRESS(90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库存在多需求并行改动,脚本
changedFiles为工作区整体视图,不仅限试题管理模块。
Work Log - 需求开发(ID: 304415118593098087,MCP管理菜单功能迁移)
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098087(标题:[fquiz迁移] MCP管理 菜单功能迁移,状态OPEN,优先级MEDIUM,来源菜单mcp_server/ 路由mcp-server)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试;因此脚本执行使用
--skip-build-gate。当前仓库为脏工作区且需求描述未提供反引号路径线索,按技能门禁显式启用--allow-dirty-worktree --allow-broad-change-detection(按“断点重启”语义推进)。 -
本次实现(最小改动,复用模型管理能力承接 MCP 管理):
- 后端菜单与角色绑定:
api/app/services/seed_service.py- 新增默认菜单
admin.mcp_server(标题“MCP管理”,路径/admin/mcp-server,图标Server,排序63,权限model.read)。 admin角色默认菜单绑定加入admin.mcp_server。
- 新增默认菜单
- 菜单保护:
api/app/services/admin_service.py后端受保护菜单集合加入admin.mcp_server,防止菜单管理误删。web/src/app/admin/menus/page.tsx前端受保护菜单集合同步加入admin.mcp_server。
- 前端入口与路由承接:
web/src/app/admin/page.tsx新增“MCP管理”后台入口卡片(权限:model.read | model.manage)。- 新增
web/src/app/admin/mcp-server/page.tsx:export { default } from "@/app/admin/models/page";- 复用现有模型管理页面能力,承接 MCP 管理菜单迁移最小闭环。
- 后端菜单与角色绑定:
-
需求状态流转(脚本):
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098087 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
OPEN -> IN_PROGRESS(0) -> IN_PROGRESS(30) -> IN_PROGRESS(60) -> IN_PROGRESS(90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
远端状态确认:
/api/project/requirement/get/304415118593098087返回:status=COMPLETEDprogressPercent=100resultMsg=开发完成:状态置为 COMPLETED
-
验收清单(交付建议):
- 功能点:
- 后台菜单与首页可见“MCP管理”,可跳转
/admin/mcp-server; - 页面可执行模型列表、路由规则与密钥管理等既有操作(复用
models页面); - 权限按
model.read / model.manage生效。
- 后台菜单与首页可见“MCP管理”,可跳转
- 边界场景:
- 未登录访问提示登录;
- 无权限访问提示无权限;
- 模型/路由为空时页面保持空态可读。
- 回归点:
- 原“编排管理(/admin/orchestration)”与“模型管理(/admin/models)”入口仍可用;
- 菜单管理中
admin.mcp_server受保护,不可误删。
- 功能点:
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库存在多需求并行改动,脚本
changedFiles为工作区整体视图,不仅限 MCP 管理模块。
Work Log - 需求开发(ID: 304415118593098090,菜单管理菜单功能迁移)
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098090(标题:[fquiz迁移] 菜单管理 菜单功能迁移,状态OPEN,优先级MEDIUM,来源路由menu)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试;因此脚本执行使用
--skip-build-gate。当前仓库为脏工作区且需求描述未提供反引号路径线索,按技能门禁显式启用--allow-dirty-worktree --allow-broad-change-detection(按“断点重启”语义推进)。 -
本次实现(最小改动,确认并固化菜单管理迁移落点):
- 能力与菜单落点确认(代码已具备):
api/app/services/seed_service.py- 菜单
admin.menus(标题“菜单管理”,路径/admin/menus,权限menu.read)已在默认菜单与 admin 默认绑定中。
- 菜单
web/src/app/admin/page.tsx- 后台首页已有“菜单管理”入口卡片,路由
/admin/menus。
- 后台首页已有“菜单管理”入口卡片,路由
api/app/api/v1/admin.py- 菜单管理接口完整:
GET/POST /menus、PATCH/DELETE /menus/{id}、GET /menus/tree、GET /me/menus。
- 菜单管理接口完整:
api/app/services/admin_service.py+web/src/app/admin/menus/page.tsx- 菜单保护包含
admin.menus,可阻止受保护菜单误删。
- 菜单保护包含
web/src/app/admin/menus/page.tsx- 页面能力完整:关键词/状态/排序筛选、统计卡片、新建/编辑 Dialog、删除确认、权限与空态处理。
- 记忆口径补充:
MEMORY.md的“菜单迁移口径(2026-04-18)”新增“菜单管理”条目,明确沿用admin.menus与/api/v1/admin/menus*既有能力,不做额外扩改。
- 能力与菜单落点确认(代码已具备):
-
需求状态流转(脚本):
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098090 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
OPEN -> IN_PROGRESS(0) -> IN_PROGRESS(30) -> IN_PROGRESS(60) -> IN_PROGRESS(90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
远端状态确认:
/api/project/requirement/get/304415118593098090返回:status=COMPLETEDprogressPercent=100resultMsg=开发完成:状态置为 COMPLETED
-
验收清单(交付建议):
- 功能点:
- 后台首页可见“菜单管理”并可跳转
/admin/menus; - 页面支持菜单列表筛选、创建、编辑、删除与层级父菜单选择;
- 角色菜单树可通过
/api/v1/admin/menus/tree与/api/v1/admin/me/menus正常拉取。
- 后台首页可见“菜单管理”并可跳转
- 边界场景:
- 未登录访问提示登录;
- 无权限访问提示需
menu.read/menu.manage; - 删除受保护菜单(如
admin.menus)被拦截并返回错误。
- 回归点:
- 角色菜单绑定接口
/api/v1/admin/roles/{id}/menus可继续与菜单管理页联动; admin.menus在前后端受保护名单中持续生效。
- 角色菜单绑定接口
- 功能点:
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库存在多需求并行改动,脚本
changedFiles为工作区整体视图,不仅限菜单管理模块。
Work Log - 需求开发(ID: 304415118593098084,知识统计菜单功能迁移)
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098084(标题:[fquiz迁移] 知识统计 菜单功能迁移,状态OPEN,优先级MEDIUM,来源路由knowledge-mastery)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试;因此脚本执行使用
--skip-build-gate。当前仓库为脏工作区且需求描述未提供反引号路径线索,按技能门禁显式启用--allow-dirty-worktree --allow-broad-change-detection(按“断点重启”语义推进)。 -
本次实现(最小改动,复用题库统计能力承接“知识统计”):
- 后端菜单与角色绑定:
api/app/services/seed_service.py- 新增默认菜单
admin.knowledge_mastery(标题“知识统计”,路径/admin/knowledge-mastery,图标BrainCircuit,排序51,权限question_bank.read)。 admin角色默认菜单绑定加入admin.knowledge_mastery。
- 新增默认菜单
- 菜单保护:
api/app/services/admin_service.py后端受保护菜单集合加入admin.knowledge_mastery,防止菜单管理误删。web/src/app/admin/menus/page.tsx前端受保护菜单集合同步加入admin.knowledge_mastery。
- 前端入口与路由承接:
web/src/app/admin/page.tsx新增“知识统计”后台入口卡片,路由/admin/knowledge-mastery,权限可见性question_bank.read | question_bank.manage。- 新增
web/src/app/admin/knowledge-mastery/page.tsx:export { default } from "../mindmap/page";- 复用现有题库统计页面能力,承接知识统计菜单迁移最小闭环。
- 后端菜单与角色绑定:
-
需求状态流转(脚本):
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098084 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
OPEN -> IN_PROGRESS(0) -> IN_PROGRESS(30) -> IN_PROGRESS(60) -> IN_PROGRESS(90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
远端状态确认:
/api/project/requirement/get/304415118593098084返回:status=COMPLETEDprogressPercent=100resultMsg=开发完成:状态置为 COMPLETED
-
验收清单(交付建议):
- 功能点:
- 后台菜单与首页可见“知识统计”,可跳转
/admin/knowledge-mastery; - 页面支持按题目状态、难度、题型与标签维度进行统计检索与列表展示;
- 读写权限按
question_bank.read / question_bank.manage生效。
- 后台菜单与首页可见“知识统计”,可跳转
- 边界场景:
- 未登录访问提示登录;
- 无权限访问提示无权限;
- 无数据时展示空态,不报错。
- 回归点:
- 原
题库统计路由/admin/mindmap与题库接口/api/v1/admin/question-bank*保持可用; - 菜单管理中
admin.knowledge_mastery受保护,不可误删。
- 原
- 功能点:
Work Log - 需求开发(ID: 304415118593098075,单词统计菜单功能迁移)
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098075(标题:[fquiz迁移] 单词统计 菜单功能迁移,状态OPEN,优先级MEDIUM,来源路由vocabulary-proficiency)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试;因此脚本执行使用
--skip-build-gate。当前仓库为脏工作区且需求描述未提供反引号路径线索,按技能门禁显式启用--allow-dirty-worktree --allow-broad-change-detection(按“断点重启”语义推进)。 -
能力落点核验(仓库内已具备):
- 后端菜单与权限:
api/app/services/seed_service.py- 菜单
admin.knowledge_mastery已配置为“单词统计”,路由/admin/vocabulary-proficiency,权限vocabulary.read。 admin角色默认菜单绑定包含admin.knowledge_mastery。
- 菜单
- 菜单保护:
api/app/services/admin_service.py与web/src/app/admin/menus/page.tsx的受保护菜单集合均包含admin.knowledge_mastery,可防误删。
- 前端页面与入口:
web/src/app/admin/vocabulary-proficiency/page.tsx提供词条总量、启用占比、缺失音标/例句、状态分布、首字母 Top12、最近更新列表。web/src/app/admin/page.tsx提供“单词统计”入口卡片(/admin/vocabulary-proficiency)。
- 路由兼容:
web/src/app/admin/knowledge-mastery/page.tsx作为兼容导出,转发至vocabulary-proficiency页面。
- 后端菜单与权限:
-
需求状态流转(脚本):
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098075 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
OPEN -> IN_PROGRESS(0) -> IN_PROGRESS(30) -> IN_PROGRESS(60) -> IN_PROGRESS(90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
远端状态确认:
/api/project/requirement/get/304415118593098075返回:status=COMPLETEDprogressPercent=100resultMsg=开发完成:状态置为 COMPLETED
-
记忆口径修正:
MEMORY.md的“菜单迁移口径”已修正该条为“单词统计”,并与当前代码事实保持一致(admin.knowledge_mastery -> /admin/vocabulary-proficiency -> vocabulary.read)。
Work Log - 需求开发(ID: 304415118593098093,作业监控菜单功能迁移)
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098093(标题:[fquiz迁移] 作业监控 菜单功能迁移,状态OPEN,优先级MEDIUM,来源菜单名job_mgr,来源路由job)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试;因此脚本执行使用
--skip-build-gate。当前仓库为脏工作区且需求描述未提供反引号路径线索,按技能门禁显式启用--allow-dirty-worktree --allow-broad-change-detection(按“断点重启”语义推进)。 -
本次实现(最小改动,复用题库能力承接“作业监控”):
- 后端菜单与角色绑定:
api/app/services/seed_service.py- 新增默认菜单
admin.job_mgr(标题“作业监控”,路径/admin/job,图标MonitorCog,排序58,权限question_bank.read)。 admin角色默认菜单绑定加入admin.job_mgr。
- 新增默认菜单
- 菜单保护:
api/app/services/admin_service.py后端受保护菜单集合加入admin.job_mgr,防止菜单管理误删。web/src/app/admin/menus/page.tsx前端受保护菜单集合同步加入admin.job_mgr。
- 前端入口与路由承接:
web/src/app/admin/page.tsx新增“作业监控”后台入口卡片,路由/admin/job,权限可见性question_bank.read | question_bank.manage。- 新增
web/src/app/admin/job/page.tsx:export { default } from "../question-bank/page";- 复用既有题库页面能力承接作业监控(列表筛选、状态流转、标签维度查看)。
- 后端菜单与角色绑定:
-
需求状态流转(脚本):
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098093 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
OPEN -> IN_PROGRESS(0) -> IN_PROGRESS(30) -> IN_PROGRESS(60) -> IN_PROGRESS(90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
远端状态确认:
/api/project/requirement/get/304415118593098093返回:status=COMPLETEDprogressPercent=100resultMsg=开发完成:状态置为 COMPLETED
-
验收清单(交付建议):
- 功能点:
- 后台菜单与首页可见“作业监控”,可跳转
/admin/job; - 页面可复用题库能力完成作业项筛选、状态流转与标签维度查看;
- 权限按
question_bank.read / question_bank.manage生效。
- 后台菜单与首页可见“作业监控”,可跳转
- 边界场景:
- 未登录访问提示登录;
- 无权限访问提示无权限;
- 无数据时展示空态,不报错。
- 回归点:
- 原
试题管理(/admin/question-bank)与家庭作业(/admin/homework)入口保持可用; - 菜单管理中
admin.job_mgr受保护,不可误删。
- 原
- 功能点:
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库存在多需求并行改动,脚本
changedFiles为工作区整体视图,不仅限作业监控模块。
Work Log - 需求开发(ID: 304415118593098099,微信小程序菜单功能迁移)
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098099(标题:[fquiz迁移] 微信小程序 菜单功能迁移,状态由回退后的OPEN重启,优先级MEDIUM)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试;执行脚本使用
--skip-build-gate。当前仓库为脏工作区且描述未含反引号路径线索,门禁放宽参数使用--allow-dirty-worktree --allow-broad-change-detection。 -
本次实现(最小改动,复用系统参数能力承载微信小程序配置):
- 后端菜单种子与默认绑定:
api/app/services/seed_service.py- 新增菜单
admin.wxapp(标题“微信小程序”,路径/admin/wxapp,图标Smartphone,权限system_param.read,排序47)。 admin角色默认菜单绑定加入admin.wxapp。
- 新增菜单
- 菜单保护:
api/app/services/admin_service.py后端受保护菜单集合加入admin.wxapp,避免误删。web/src/app/admin/menus/page.tsx前端受保护菜单集合加入admin.wxapp。
- 前端入口与路由:
web/src/app/admin/page.tsx新增“微信小程序”入口卡片(权限:system_param.read | system_param.manage)。- 新增
web/src/app/admin/wxapp/page.tsx:export { default } from "../system-params/page";,复用系统参数页面能力承接配置维护。
- 后端菜单种子与默认绑定:
-
需求状态流转(脚本):
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098099 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
OPEN -> IN_PROGRESS(0/30/60/90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
远端状态确认:
/api/project/requirement/get/304415118593098099返回:status=COMPLETEDprogressPercent=100resultMsg=开发完成:状态置为 COMPLETED
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库存在多需求并行改动,技能脚本
changedFiles为工作区整体视图,不仅限微信小程序模块。
Work Log - 需求开发(ID: 304415118593098102,知识点管理菜单功能迁移)
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098102(标题:[fquiz迁移] 知识点管理 菜单功能迁移,状态为回退后的OPEN,优先级MEDIUM,来源菜单knowledge_point_mgr/ 路由knowledge)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试;执行脚本使用
--skip-build-gate。当前仓库为脏工作区且需求描述未提供反引号路径线索,按技能门禁显式启用--allow-dirty-worktree --allow-broad-change-detection(按“断点重启”语义推进)。 -
本次实现(最小改动,复用分组管理能力承接“知识点管理”)
- 后端菜单与角色绑定:
api/app/services/seed_service.py- 新增菜单
admin.knowledge_point_mgr(标题“知识点管理”,路径/admin/knowledge,图标Network,权限question_bank.read,排序55)。 admin角色默认菜单绑定加入admin.knowledge_point_mgr。
- 新增菜单
- 菜单保护:
api/app/services/admin_service.py后端受保护菜单集合加入admin.knowledge_point_mgr,避免菜单管理误删。web/src/app/admin/menus/page.tsx前端受保护菜单集合加入admin.knowledge_point_mgr。
- 前端入口与路由:
web/src/app/admin/page.tsx新增“知识点管理”入口卡片(权限:question_bank.read | question_bank.manage)。- 新增
web/src/app/admin/knowledge/page.tsx:export { default } from "../tag/page";,复用分组管理页面能力承接知识点检索、重命名与解除关联。
- 后端菜单与角色绑定:
-
需求状态流转(脚本):
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098102 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
OPEN -> IN_PROGRESS(0/30/60/90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
远端状态确认:
/api/project/requirement/get/304415118593098102返回:status=COMPLETEDprogressPercent=100resultMsg=开发完成:状态置为 COMPLETED
-
验收清单(交付建议):
- 功能点:
- 后台菜单与首页可见“知识点管理”,可跳转
/admin/knowledge; - 页面支持知识点(标签)检索、重命名、解除关联(复用分组管理能力);
- 权限按
question_bank.read / question_bank.manage生效。
- 后台菜单与首页可见“知识点管理”,可跳转
- 边界场景:
- 未登录访问提示登录;
- 无权限访问提示无权限;
- 无数据时展示空态,不报错。
- 回归点:
- 原“分组管理”入口
/admin/group保持可用; - 菜单管理中
admin.knowledge_point_mgr受保护,不可误删。
- 原“分组管理”入口
- 功能点:
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库存在多需求并行改动,技能脚本
changedFiles为工作区整体视图,不仅限知识点管理模块。
Work Log - 需求开发(ID: 304415118593098108,定时任务菜单功能迁移)
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098108(标题:[fquiz迁移] 定时任务 菜单功能迁移,优先级MEDIUM,来源菜单cron_task_mgr/ 路由cron)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试;执行脚本使用
--skip-build-gate。当前仓库为脏工作区且需求描述未提供反引号路径线索,按技能门禁显式启用--allow-dirty-worktree --allow-broad-change-detection(按“断点重启”语义推进)。 -
能力落点确认(仓库内已具备):
- 后端菜单与角色绑定:
api/app/services/seed_service.py已存在菜单admin.cron_task_mgr(标题“定时任务”,路径/admin/cron,权限todo.read),并已加入admin默认菜单绑定。
- 菜单保护:
api/app/services/admin_service.py后端受保护菜单集合包含admin.cron_task_mgr。web/src/app/admin/menus/page.tsx前端受保护菜单集合包含admin.cron_task_mgr。
- 前端入口与页面承接:
web/src/app/admin/page.tsx已存在“定时任务”入口卡片(/admin/cron)。web/src/app/admin/cron/page.tsx已通过export { default } from "@/app/admin/todos/page";复用待办管理能力承接定时任务菜单。
- 后端菜单与角色绑定:
-
需求状态流转(脚本):
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098108 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
COMPLETED -> IN_PROGRESS(0/30/60/90) -> COMPLETED(100)(HTTP 200)。 - 本次处理语义:按“断点重启”口径回写开发轨迹并闭环完成。
- 命令:
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库存在多需求并行改动,技能脚本
changedFiles为工作区整体视图,不仅限定时任务模块。
Work Log - 需求开发(ID: 304415118593098111,知识集管理菜单功能迁移)
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098111(标题:[fquiz迁移] 知识集管理 菜单功能迁移,状态为回退后的OPEN,优先级MEDIUM,来源菜单knowledge-set/ 路由knowledge-set)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试;执行脚本使用
--skip-build-gate。当前仓库为脏工作区且需求描述未提供反引号路径线索,按技能门禁显式启用--allow-dirty-worktree --allow-broad-change-detection(按“断点重启”语义推进)。 -
本次实现(最小改动,复用文件管理能力承接“知识集管理”)
- 后端菜单迁移:
api/app/services/seed_service.py- 复用菜单编码
admin.files与权限file.read(保留原有file.manage写权限链路),菜单文案改为“知识集管理”,路径改为/admin/knowledge-set,图标调整为FolderTree。 - 该菜单已在
admin默认菜单绑定中,保持admin.files绑定不变。
- 复用菜单编码
- 前端入口迁移:
web/src/app/admin/page.tsx- 后台首页新增“知识集管理”入口卡片,路由
/admin/knowledge-set,权限可见性file.read | file.manage。
- 后台首页新增“知识集管理”入口卡片,路由
- 前端页面承接:
- 新增
web/src/app/admin/knowledge-set/page.tsxexport { default } from "../files/page";- 直接复用现有文件管理页面能力(挂载点切换、目录浏览、创建目录、上传、重命名、移动、删除、下载、加载态/错误态/空态)。
- 新增
- 后端菜单迁移:
-
需求状态流转(脚本):
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098111 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
OPEN -> IN_PROGRESS(0/30/60/90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
远端状态确认:
/api/project/requirement/get/304415118593098111返回:status=COMPLETEDprogressPercent=100resultMsg=开发完成:状态置为 COMPLETED
-
验收清单(交付建议):
- 功能点:
- 后台首页可见“知识集管理”并可跳转
/admin/knowledge-set; - 页面具备目录浏览、目录创建、上传、重命名、移动、删除、下载能力;
- 权限按
file.read / file.manage分级生效(只读与可管理)。
- 后台首页可见“知识集管理”并可跳转
- 边界场景:
- 未登录访问提示登录;
- 无权限账号访问提示权限不足;
- 无可用挂载点时返回对应错误提示。
- 回归点:
- 既有文件管理后端接口
/api/v1/admin/files*与挂载点索引能力保持不变; - 菜单管理中
admin.files受保护,不可误删。
- 既有文件管理后端接口
- 功能点:
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库存在多需求并行改动,技能脚本
changedFiles为工作区整体视图,不仅限知识集管理模块。
Work Log - 需求开发(ID: 304415118593098114,提示词管理菜单功能迁移)
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098114(标题:[fquiz迁移] 提示词管理 菜单功能迁移,状态OPEN,优先级MEDIUM,来源菜单prompts/ 路由prompt)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试;执行脚本使用
--skip-build-gate。当前仓库为脏工作区且需求描述未提供反引号路径线索,按技能门禁显式启用--allow-dirty-worktree --allow-broad-change-detection(按“断点重启”语义推进)。 -
本次实现(最小改动,复用系统消息能力承接“提示词管理”)
- 后端菜单迁移:
api/app/services/seed_service.py- 保持菜单编码
admin.system_message与权限system_message.read不变,避免扩大权限与接口改动范围。 - 菜单文案从“系统消息”迁移为“提示词管理”,路由从
/admin/system-message迁移为/admin/prompt。
- 保持菜单编码
- 前端入口迁移:
web/src/app/admin/page.tsx- 后台首页卡片由“系统消息(/admin/system-message)”迁移为“提示词管理(/admin/prompt)”。
- 卡片说明文案同步为“复用系统消息能力维护提示词内容、等级、有效期与发布状态”。
- 前端页面承接:
- 新增
web/src/app/admin/prompt/page.tsx:export { default } from "../system-message/page";- 复用既有系统消息管理页面,直接承接提示词管理列表检索、新增编辑删除、状态流转与有效期维护能力。
- 新增
- 后端菜单迁移:
-
需求状态流转(脚本):
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098114 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
OPEN -> IN_PROGRESS(0/30/60/90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
远端状态确认:
/api/project/requirement/get/304415118593098114返回:status=COMPLETEDprogressPercent=100resultMsg=开发完成:状态置为 COMPLETED
-
验收清单(交付建议):
- 功能点:
- 后台首页可见“提示词管理”入口并可跳转
/admin/prompt; - 提示词管理页面支持列表检索、新增/编辑/删除、等级与状态切换、有效期维护;
- 权限
system_message.read / system_message.manage正常控制读写。
- 后台首页可见“提示词管理”入口并可跳转
- 边界场景:
- 未登录访问提示登录;
- 无权限账号访问提示权限不足;
- 空列表展示空态文案。
- 回归点:
- 既有接口
/api/v1/admin/system-messages*与数据模型system_messages不变; - 菜单管理中
admin.system_message继续受保护,不可误删。
- 既有接口
- 功能点:
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库存在多需求并行改动,技能脚本
changedFiles为工作区整体视图,不仅限提示词管理模块。
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098105(标题:[fquiz迁移] 队列管理 菜单功能迁移,状态OPEN,优先级MEDIUM,来源菜单queue_mgr/ 路由jobqueue)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试;执行脚本使用
--skip-build-gate。当前仓库为脏工作区且需求描述未提供反引号路径线索,按技能门禁显式启用--allow-dirty-worktree --allow-broad-change-detection(按“断点重启”语义推进)。 -
本次实现(最小改动,复用待办能力承接“队列管理”)
- 后端菜单与角色绑定:
api/app/services/seed_service.py- 新增菜单
admin.queue_mgr(标题“队列管理”,路径/admin/jobqueue,图标ListTodo,权限todo.read,排序53)。 admin角色默认菜单绑定加入admin.queue_mgr。
- 新增菜单
- 菜单保护:
api/app/services/admin_service.py后端受保护菜单集合加入admin.queue_mgr,避免菜单管理误删。web/src/app/admin/menus/page.tsx前端受保护菜单集合加入admin.queue_mgr。
- 前端入口与路由承接:
web/src/app/admin/page.tsx新增“队列管理”入口卡片,路由/admin/jobqueue,权限可见性todo.read。- 新增
web/src/app/admin/jobqueue/page.tsx:export { default } from "@/app/admin/todos/page";- 复用现有待办管理页面能力承接队列任务清单。
- 后端菜单与角色绑定:
-
需求状态流转(脚本):
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098105 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
OPEN -> IN_PROGRESS(0/30/60/90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
远端状态确认:
/api/project/requirement/get/304415118593098105返回:status=COMPLETEDprogressPercent=100resultMsg=开发完成:状态置为 COMPLETED
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库存在多需求并行改动,技能脚本
changedFiles为工作区整体视图,不仅限队列管理模块。
Work Log - 需求开发(ID: 304415118593098123,脚本管理菜单功能迁移)
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098123(标题:[fquiz迁移] 脚本管理 菜单功能迁移,状态OPEN,优先级MEDIUM,来源菜单script_mgr/ 路由script)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试;执行脚本使用
--skip-build-gate。当前仓库为脏工作区且需求描述未提供反引号路径线索,按技能门禁显式启用--allow-dirty-worktree --allow-broad-change-detection(按“断点重启”语义推进)。 -
本次实现(最小改动,复用待办能力承接“脚本管理”):
- 后端菜单迁移:
api/app/services/seed_service.py- 保留菜单编码
admin.cron_task_mgr、路由/admin/cron与权限todo.read不变;菜单文案由“定时任务”统一为“脚本管理”。
- 保留菜单编码
- 前端后台入口迁移:
web/src/app/admin/page.tsx- 后台首页卡片由“定时任务(/admin/cron)”迁移为“脚本管理(/admin/cron)`,说明文案同步改为脚本任务清单语义。
- 页面能力承接(已有能力沿用):
web/src/app/admin/cron/page.tsx继续export { default } from "@/app/admin/todos/page";,复用待办管理能力承接脚本任务列表、筛选、状态流转与负责人协作。
- 菜单保护(已有能力沿用):
api/app/services/admin_service.py与web/src/app/admin/menus/page.tsx中admin.cron_task_mgr受保护配置保持不变,避免被菜单管理误删。
- 后端菜单迁移:
-
需求状态流转(脚本):
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098123 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
OPEN -> IN_PROGRESS(0/30/60/90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
远端状态确认:
- 脚本返回
finalStatusPlanned=COMPLETED,trajectory各阶段写回httpStatus=200。
- 脚本返回
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库存在多需求并行改动,技能脚本
changedFiles为工作区整体视图,不仅限脚本管理模块。
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098117(标题:[fquiz迁移] 模型管理 菜单功能迁移,状态OPEN,优先级MEDIUM,来源菜单llmmodel/ 路由llmmodel)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试;执行脚本使用
--skip-build-gate。当前仓库为脏工作区且需求描述未提供反引号路径线索,按技能门禁显式启用--allow-dirty-worktree --allow-broad-change-detection(按“断点重启”语义推进)。 -
能力落点确认(仓库内已具备):
- 后端菜单与角色绑定:
api/app/services/seed_service.py- 菜单
admin.models已配置为“模型管理”,路径/admin/models,权限model.read,并已加入admin默认菜单绑定。
- 菜单
- 菜单保护:
api/app/services/admin_service.py与web/src/app/admin/menus/page.tsx的受保护菜单集合均包含admin.models,可防误删。
- 前端入口与页面:
web/src/app/admin/page.tsx已存在“模型管理”入口卡片,路由/admin/models。web/src/app/admin/models/page.tsx已承载模型管理完整能力:模型列表/检索、创建编辑、状态流转、路由规则、密钥轮换、健康检查、冒烟测试与对话测试。
- 后端菜单与角色绑定:
-
记忆口径补充:
MEMORY.md的“菜单迁移口径(2026-04-18)”新增“模型管理”条目,明确沿用admin.models与models页面既有能力,不做额外扩改。
-
需求状态流转(脚本):
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098117 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
OPEN -> IN_PROGRESS(0/30/60/90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
远端状态确认:
/api/project/requirement/get/304415118593098117返回:status=COMPLETEDprogressPercent=100resultMsg=开发完成:状态置为 COMPLETED
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库存在多需求并行改动,技能脚本
changedFiles为工作区整体视图,不仅限模型管理模块。
Work Log - 需求开发(ID: 304415118593098096,历史答卷菜单功能迁移)
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098096(标题:[fquiz迁移] 历史答卷 菜单功能迁移,状态OPEN,优先级MEDIUM,来源菜单history/ 路由history)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试;执行脚本使用
--skip-build-gate。当前仓库为脏工作区且需求描述未提供反引号路径线索,按技能门禁显式启用--allow-dirty-worktree --allow-broad-change-detection(按“断点重启”语义推进)。 -
本次实现(最小改动,复用题库能力承接“历史答卷”)
- 后端菜单能力(已存在,沿用):
api/app/services/seed_service.py- 菜单
admin.history已配置为“历史答卷”,路径/admin/history,权限question_bank.read,并已加入admin角色默认菜单绑定。
- 菜单
- 菜单保护补齐:
api/app/services/admin_service.py后端受保护菜单集合加入admin.history,防止菜单管理误删。web/src/app/admin/menus/page.tsx前端受保护菜单集合同步加入admin.history。
- 前端入口与路由承接:
web/src/app/admin/page.tsx新增“历史答卷”后台入口卡片,路由/admin/history,权限可见性question_bank.read | question_bank.manage。- 新增
web/src/app/admin/history/page.tsx:export { default } from "../question-bank/page";- 复用既有题库页面能力承接历史答卷列表查询/筛选与状态管理。
- 后端菜单能力(已存在,沿用):
-
需求状态流转(脚本):
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098096 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
OPEN -> IN_PROGRESS(0/30/60/90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
远端状态确认:
/api/project/requirement/get/304415118593098096返回:status=COMPLETEDprogressPercent=100resultMsg=开发完成:状态置为 COMPLETED
-
验收清单(交付建议):
- 功能点:
- 后台菜单与首页可见“历史答卷”,可跳转
/admin/history; - 页面复用题库管理能力完成列表查询、筛选与状态管理;
- 权限按
question_bank.read / question_bank.manage生效。
- 后台菜单与首页可见“历史答卷”,可跳转
- 边界场景:
- 未登录访问提示登录;
- 无权限账号访问提示权限不足;
- 无数据时展示空态,不报错。
- 回归点:
- 原
试题管理路由/admin/question-bank与相关接口能力保持可用; - 菜单管理中
admin.history受保护,不可误删。
- 原
- 功能点:
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库存在多需求并行改动,技能脚本
changedFiles为工作区整体视图,不仅限历史答卷模块。
Work Log - 需求开发(ID: 304415118593098138,百度网盘菜单功能迁移)
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098138(标题:[fquiz迁移] 百度网盘 菜单功能迁移,状态为回退后的OPEN,优先级MEDIUM,来源菜单baidu_pan/ 路由baidu-pan)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试;执行脚本使用
--skip-build-gate。当前仓库为脏工作区且需求描述未提供反引号路径线索,按技能门禁显式启用--allow-dirty-worktree --allow-broad-change-detection(按“断点重启”语义推进)。 -
本次实现(最小改动,复用文件管理能力承接“百度网盘”)
- 后端菜单与角色绑定:
api/app/services/seed_service.py- 新增默认菜单
admin.baidu_pan:name:百度网盘path:/admin/baidu-panicon:Cloudpermission_code:file.read
admin角色默认菜单绑定加入admin.baidu_pan,保持管理员可见。
- 新增默认菜单
- 菜单保护补齐:
api/app/services/admin_service.py- 后端受保护菜单集合加入
admin.baidu_pan,防止菜单管理误删。
- 后端受保护菜单集合加入
web/src/app/admin/menus/page.tsx- 前端受保护菜单集合加入
admin.baidu_pan。
- 前端受保护菜单集合加入
- 前端入口与页面承接:
web/src/app/admin/page.tsx- 新增后台首页卡片“百度网盘”,路由
/admin/baidu-pan,可见性file.read | file.manage。
- 新增后台首页卡片“百度网盘”,路由
- 新增
web/src/app/admin/baidu-pan/page.tsx:export { default } from "../files/page";- 复用现有文件管理页面能力承载百度网盘功能(挂载切换、目录浏览、创建目录、上传、重命名、移动、删除、下载、加载态/错误态/空态)。
- 后端菜单与角色绑定:
-
需求状态流转(脚本):
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098138 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
OPEN -> IN_PROGRESS(0/30/60/90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
远端状态确认:
- 脚本返回:
finalStatusPlanned=COMPLETED,且trajectory各阶段写回httpStatus=200。
- 脚本返回:
-
验收清单(交付建议):
- 功能点:
- 后台菜单与首页可见“百度网盘”,可跳转
/admin/baidu-pan; - 页面可执行目录浏览、创建目录、上传、重命名、移动、删除与下载;
- 权限按
file.read / file.manage生效,topicadmin.files刷新链路保持可用。
- 后台菜单与首页可见“百度网盘”,可跳转
- 边界场景:
- 未登录访问提示登录;
- 无权限账号访问提示需
file.read; - 目录为空时展示空态,不报错。
- 回归点:
- 既有“知识集管理(/admin/knowledge-set)”能力保持可用;
- 菜单管理中
admin.baidu_pan与admin.files均受保护,不可误删。
- 功能点:
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库存在多需求并行改动,技能脚本
changedFiles为工作区整体视图,不仅限百度网盘模块。
Work Log - 需求开发(ID: 304415118593098126,文件识别菜单功能迁移)
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098126(标题:[fquiz迁移] 文件识别 菜单功能迁移,状态OPEN,优先级MEDIUM,来源菜单filedetector/ 路由filedetector)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试;执行脚本使用
--skip-build-gate。当前仓库为脏工作区且需求描述未提供反引号路径线索,按技能门禁显式启用--allow-dirty-worktree --allow-broad-change-detection(按“断点重启”语义推进)。 -
本次实现(最小改动,复用文件管理能力承接“文件识别”)
- 后端菜单与角色绑定:
api/app/services/seed_service.py- 新增默认菜单
admin.filedetector:name:文件识别path:/admin/filedetectoricon:FileSearch2permission_code:file.read
admin角色默认菜单绑定加入admin.filedetector,保持管理员可见。
- 新增默认菜单
- 菜单保护补齐:
api/app/services/admin_service.py- 后端受保护菜单集合加入
admin.filedetector,防止菜单管理误删。
- 后端受保护菜单集合加入
web/src/app/admin/menus/page.tsx- 前端受保护菜单集合加入
admin.filedetector。
- 前端受保护菜单集合加入
- 前端入口与页面承接:
web/src/app/admin/page.tsx- 新增后台首页卡片“文件识别”,路由
/admin/filedetector,可见性file.read | file.manage。
- 新增后台首页卡片“文件识别”,路由
- 新增
web/src/app/admin/filedetector/page.tsx:export { default } from "../files/page";- 复用现有文件管理页面能力承载文件识别菜单交互(挂载切换、目录浏览、创建目录、上传、重命名、移动、删除、下载、加载态/错误态/空态)。
- 后端菜单与角色绑定:
-
需求状态流转(脚本):
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098126 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
OPEN -> IN_PROGRESS(0/30/60/90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
远端状态确认:
/api/project/requirement/get/304415118593098126返回:status=COMPLETEDprogressPercent=100resultMsg=开发完成:状态置为 COMPLETED
-
验收清单(交付建议):
- 功能点:
- 后台菜单与首页可见“文件识别”,可跳转
/admin/filedetector; - 页面可执行目录浏览、创建目录、上传、重命名、移动、删除与下载;
- 权限按
file.read / file.manage生效,topicadmin.files刷新链路保持可用。
- 后台菜单与首页可见“文件识别”,可跳转
- 边界场景:
- 未登录访问提示登录;
- 无权限账号访问提示需
file.read; - 目录为空时展示空态,不报错。
- 回归点:
- 既有“知识集管理(/admin/knowledge-set)”与“百度网盘(/admin/baidu-pan)”能力保持可用;
- 菜单管理中
admin.filedetector、admin.baidu_pan、admin.files均受保护,不可误删。
- 功能点:
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库存在多需求并行改动,技能脚本
changedFiles为工作区整体视图,不仅限文件识别模块。
Work Log - 需求开发(ID: 304415118593098126,文件识别菜单功能迁移)
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098126(标题:[fquiz迁移] 文件识别 菜单功能迁移,优先级MEDIUM)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试;脚本执行使用
--skip-build-gate。当前仓库为脏工作区且需求描述未提供反引号路径线索,按技能门禁显式启用--allow-dirty-worktree --allow-broad-change-detection。 -
能力落点确认(仓库内已具备,最小改动策略,无新增代码改动):
- 后端菜单种子:
api/app/services/seed_service.py- 菜单
admin.filedetector已存在(标题“文件识别”,路径/admin/filedetector,权限file.read)。 - 已加入
admin默认菜单绑定。
- 菜单
- 菜单保护:
api/app/services/admin_service.py后端受保护菜单集合包含admin.filedetector。web/src/app/admin/menus/page.tsx前端受保护菜单集合包含admin.filedetector。
- 前端页面与入口:
web/src/app/admin/filedetector/page.tsx已通过export { default } from "../files/page";复用文件管理能力。web/src/app/admin/page.tsx已存在“文件识别”入口卡片并指向/admin/filedetector。
- 后端菜单种子:
-
需求状态流转(脚本):
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098126 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
COMPLETED -> IN_PROGRESS(0) -> IN_PROGRESS(30) -> IN_PROGRESS(60) -> IN_PROGRESS(90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 本需求功能在本仓库已完成迁移,本次为按技能流程断点重启/闭环回写状态,未新增业务代码变更。
Work Log - 需求开发(ID: 304415118593098129,热搜菜单功能迁移)
-
背景:按
fquiz-requirement-develop技能推进需求304415118593098129(标题:[fquiz迁移] 热搜 菜单功能迁移,状态OPEN,优先级MEDIUM)。 -
执行约束:遵循任务要求,不做编译/构建检查与额外回归测试;脚本执行使用
--skip-build-gate。当前仓库为脏工作区且需求描述未提供反引号路径线索,按技能门禁显式启用--allow-dirty-worktree --allow-broad-change-detection(按“断点重启”语义推进)。 -
能力落点确认(仓库内已具备,最小改动策略)
- 后端菜单与默认绑定:
api/app/services/seed_service.py- 菜单
admin.hot_search已存在(标题“热搜”,路径/admin/hot-search,权限menu.read)。 admin角色默认菜单绑定已包含admin.hot_search。
- 菜单
- 菜单保护:
api/app/services/admin_service.py后端受保护菜单集合包含admin.hot_search。web/src/app/admin/menus/page.tsx前端受保护菜单集合包含admin.hot_search。
- 前端入口与页面:
web/src/app/admin/page.tsx已存在“热搜”后台入口卡片(/admin/hot-search)。web/src/app/admin/hot-search/page.tsx已通过export { default } from "../data-query/page";复用数据查询入口能力。web/src/app/admin/data-query/page.tsx已复用系统日志页(syslog)承接检索交互。
- 后端热搜能力底座:
- 路由:
api/app/api/v1/hot_search.py(/api/v1/admin/hot-search)。 - 服务:
api/app/services/hot_search_service.py(热搜记录检索、关注主题增删改查与默认样例数据)。 - 模型/Schema:
api/app/models/hot_search.py、api/app/schemas/hot_search.py。
- 路由:
- 后端菜单与默认绑定:
-
需求状态流转(脚本)
- 命令:
python3 skills/fquiz-requirement-develop/scripts/develop_requirement.py --requirement-id 304415118593098129 --action full --skip-build-gate --allow-dirty-worktree --allow-broad-change-detection
- 轨迹:
OPEN -> IN_PROGRESS(0) -> IN_PROGRESS(30) -> IN_PROGRESS(60) -> IN_PROGRESS(90) -> COMPLETED(100)(HTTP 200)。
- 命令:
-
说明:
- 本次按任务约束未执行构建/编译与额外回归测试。
- 当前仓库存在多需求并行改动;技能脚本
changedFiles为工作区整体视图,不仅限热搜模块。 - 已同步更新长期记忆
MEMORY.md:补充热搜菜单迁移口径(入口复用 + 后端能力底座)。
Work Log - Radix 菜单改造(Phase A + Phase B)
-
背景:
- 按需求“先落地 Phase A + Phase B”推进后台菜单交互改造,目标是在不改接口契约的前提下统一菜单交互形态。
- 执行策略:最小改动,仅替换前端交互承载组件,不调整既有业务逻辑与权限判断。
-
本次改动:
- Phase A(后台壳层菜单)
web/src/app/admin/layout.tsx- 引入
DropdownMenu。 - 左侧菜单改为
md及以上显示;移动端新增“菜单”下拉入口,基于menuTree扁平化列表展示可访问菜单项。 - 顶部账号区将“返回首页/退出登录”按钮收口为“账号”下拉菜单。
- 引入
- Phase B(操作列统一)
- 新增
web/src/components/row-action-menu.tsx- 封装基于
@radix-ui/themes的通用行操作下拉组件RowActionMenu。
- 封装基于
web/src/app/admin/users/page.tsx- 将“启用/禁用、改密码、删除”并排按钮改为
RowActionMenu。
- 将“启用/禁用、改密码、删除”并排按钮改为
web/src/app/admin/requirements/page.tsx- 将“领取、开始处理/标记完成、删除”操作改为
RowActionMenu,保留原状态流转与删除确认逻辑。
- 将“领取、开始处理/标记完成、删除”操作改为
web/src/app/admin/menus/page.tsx- 将“编辑/删除”操作改为
RowActionMenu,保留受保护菜单删除拦截逻辑。
- 将“编辑/删除”操作改为
- 新增
- Phase A(后台壳层菜单)
-
验证:
npm run build:web:通过(Next.js 16,TypeScript 阶段通过,页面静态生成完成)。npm run lint:web:失败,存在仓库既有问题(非本次改动引入):web/src/app/admin/hot-search/page.tsx:react-hooks/set-state-in-effect、react-hooks/exhaustive-depsweb/src/app/admin/jwt-generator/page.tsx:react-hooks/preserve-manual-memoizationweb/src/app/admin/life-countdown/page.tsx:react-hooks/set-state-in-effectweb/src/app/admin/password/page.tsx:react-hooks/exhaustive-deps
-
风险与影响:
- 行操作从直出按钮改为二次点击菜单,短期用户习惯需要适配。
- 移动端后台导航改为下拉入口后,首屏更紧凑;但需要依赖菜单数据加载成功才可展开跳转项。