Files
fquiz/memory/2026-04-19.md
T
2026-04-23 09:41:54 +08:00

93 KiB
Raw Blame History

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=COMPLETED
      • progressPercent=100
      • resultMsg=开发完成:状态置为 COMPLETED
  • 验收清单(交付建议):

    • 功能点:
      • 后台首页可见“诗词本”入口并可跳转 /admin/poetry
      • 诗词本页面支持词条列表检索、新增/编辑/删除与状态切换;
      • 权限码 vocabulary.read / vocabulary.manage 控制读写行为。
    • 边界场景:
      • 未登录访问提示与返回首页链路正常;
      • 无权限账号访问显示权限提示;
      • 空列表展示空态文案。
    • 回归点:
      • 菜单管理页仍保护 admin.vocabulary 菜单编码,避免误删;
      • 既有 vocabulary 后端接口与推送主题 admin.vocabulary 行为不受影响。
  • 说明:

    • 本次按任务约束未执行构建/编译与额外回归测试。
    • 当前仓库存在多需求并行改动,技能脚本 changedFiles 为工作区整体视图,不仅限诗词本模块。

Work Log - 需求开发(ID: 304415118593098018Jwt生成器菜单功能迁移)

  • 背景:按 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.py
        • GET /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)。
    • 权限点与菜单迁移:
      • api/app/services/seed_service.py
        • 新增权限 jwt_generator.readjwt_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.pychat.useadmin.chat 菜单 /admin/chat、admin 默认菜单绑定)
    • 菜单保护:api/app/services/admin_service.pyweb/src/app/admin/menus/page.tsx(受保护菜单含 admin.chat
    • 聊天接口:api/app/api/v1/chat.py(会话列表/创建、消息列表/发送)
    • 前端页面与入口:web/src/app/admin/chat/page.tsxweb/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=COMPLETEDprogressPercent=100resultMsg=开发完成:状态置为 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.py
        • admin.agent 菜单文案与路由迁移为:
          • name: 编排管理
          • path: /admin/orchestration
        • 保持 code=admin.agentpermission_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=COMPLETED
      • progressPercent=100
      • resultMsg=开发完成:状态置为 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=COMPLETEDprogressPercent=100resultMsg=开发完成:状态置为 COMPLETEDupdateDate=2026-04-19T01:34:35.470386)。
  • 需求对应能力落点(当前工作区可见):

    • 后端需求接口与状态流转:api/app/api/v1/requirements.pyapi/app/services/requirement_service.py
    • 后端菜单与权限:api/app/services/seed_service.pyadmin.requirements,路径 /admin/requirements,权限 requirement.readadmin 默认菜单绑定)
    • 菜单保护:api/app/services/admin_service.pyweb/src/app/admin/menus/page.tsx(受保护菜单含 admin.requirements
    • 前端页面:web/src/app/admin/requirements/page.tsxweb/src/app/admin/requirements/new/page.tsxweb/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.requirementsadmin.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: 304415118593098039Git管理菜单功能迁移)

  • 背景:按 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=COMPLETED
      • progressPercent=100
      • resultMsg=开发完成:状态置为 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: 304415118593098057API测试菜单功能迁移)

  • 背景:按 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=COMPLETED
      • progressPercent=100
      • resultMsg=开发完成:状态置为 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=COMPLETED
      • progressPercent=100
      • resultMsg=开发完成:状态置为 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.tsx
        • export { 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=COMPLETED
      • progressPercent=100
      • resultMsg=开发完成:状态置为 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.py
        • GET /api/v1/admin/rolesrole.read | role.manage
        • POST /api/v1/admin/rolesrole.manage
        • PATCH /api/v1/admin/roles/{role_id}role.manage
        • DELETE /api/v1/admin/roles/{role_id}role.manage
        • GET /api/v1/admin/permissionsrole.read | role.manage
        • GET/PUT /api/v1/admin/roles/{role_id}/menus(读写分权)
      • api/app/services/seed_service.py
        • 角色权限点已存在:role.readrole.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.pyweb/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=COMPLETED
      • progressPercent=100
      • resultMsg=开发完成:状态置为 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=COMPLETED
      • progressPercent=100
      • resultMsg=开发完成:状态置为 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.pyweb/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: 304415118593098087MCP管理菜单功能迁移)

  • 背景:按 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=COMPLETED
      • progressPercent=100
      • resultMsg=开发完成:状态置为 COMPLETED
  • 验收清单(交付建议):

    • 功能点:
      • 后台菜单与首页可见“MCP管理”,可跳转 /admin/mcp-server
      • 页面可执行模型列表、路由规则与密钥管理等既有操作(复用 models 页面);
      • 权限按 model.read / model.manage 生效。
    • 边界场景:
      • 未登录访问提示登录;
      • 无权限访问提示无权限;
      • 模型/路由为空时页面保持空态可读。
    • 回归点:
      • 原“编排管理(/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 /menusPATCH/DELETE /menus/{id}GET /menus/treeGET /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=COMPLETED
      • progressPercent=100
      • resultMsg=开发完成:状态置为 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=COMPLETED
      • progressPercent=100
      • resultMsg=开发完成:状态置为 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.pyweb/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=COMPLETED
      • progressPercent=100
      • resultMsg=开发完成:状态置为 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=COMPLETED
      • progressPercent=100
      • resultMsg=开发完成:状态置为 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.tsxexport { 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=COMPLETED
      • progressPercent=100
      • resultMsg=开发完成:状态置为 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.tsxexport { 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=COMPLETED
      • progressPercent=100
      • resultMsg=开发完成:状态置为 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.tsx
        • export { 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=COMPLETED
      • progressPercent=100
      • resultMsg=开发完成:状态置为 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=COMPLETED
      • progressPercent=100
      • resultMsg=开发完成:状态置为 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=COMPLETED
      • progressPercent=100
      • resultMsg=开发完成:状态置为 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.pyweb/src/app/admin/menus/page.tsxadmin.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=COMPLETEDtrajectory 各阶段写回 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.pyweb/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.modelsmodels 页面既有能力,不做额外扩改。
  • 需求状态流转(脚本):

    • 命令:
      • 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=COMPLETED
      • progressPercent=100
      • resultMsg=开发完成:状态置为 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=COMPLETED
      • progressPercent=100
      • resultMsg=开发完成:状态置为 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-pan
          • icon: Cloud
          • permission_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 生效,topic admin.files 刷新链路保持可用。
    • 边界场景:
      • 未登录访问提示登录;
      • 无权限账号访问提示需 file.read
      • 目录为空时展示空态,不报错。
    • 回归点:
      • 既有“知识集管理(/admin/knowledge-set)”能力保持可用;
      • 菜单管理中 admin.baidu_panadmin.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/filedetector
          • icon: FileSearch2
          • permission_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=COMPLETED
      • progressPercent=100
      • resultMsg=开发完成:状态置为 COMPLETED
  • 验收清单(交付建议):

    • 功能点:
      • 后台菜单与首页可见“文件识别”,可跳转 /admin/filedetector
      • 页面可执行目录浏览、创建目录、上传、重命名、移动、删除与下载;
      • 权限按 file.read / file.manage 生效,topic admin.files 刷新链路保持可用。
    • 边界场景:
      • 未登录访问提示登录;
      • 无权限账号访问提示需 file.read
      • 目录为空时展示空态,不报错。
    • 回归点:
      • 既有“知识集管理(/admin/knowledge-set)”与“百度网盘(/admin/baidu-pan)”能力保持可用;
      • 菜单管理中 admin.filedetectoradmin.baidu_panadmin.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(热搜记录检索、关注主题增删改查与默认样例数据)。
      • 模型/Schemaapi/app/models/hot_search.pyapi/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,保留受保护菜单删除拦截逻辑。
  • 验证:

    • npm run build:web:通过(Next.js 16TypeScript 阶段通过,页面静态生成完成)。
    • npm run lint:web:失败,存在仓库既有问题(非本次改动引入):
      • web/src/app/admin/hot-search/page.tsxreact-hooks/set-state-in-effectreact-hooks/exhaustive-deps
      • web/src/app/admin/jwt-generator/page.tsxreact-hooks/preserve-manual-memoization
      • web/src/app/admin/life-countdown/page.tsxreact-hooks/set-state-in-effect
      • web/src/app/admin/password/page.tsxreact-hooks/exhaustive-deps
  • 风险与影响:

    • 行操作从直出按钮改为二次点击菜单,短期用户习惯需要适配。
    • 移动端后台导航改为下拉入口后,首屏更紧凑;但需要依赖菜单数据加载成功才可展开跳转项。