# [GitHub Spec Kit](https://speckit.org/)

| 指挥 | 描述 | 用途 | 脚本 |
|----------------|--------------------------------------------------|---------------------------------|---|
| 第一阶段        | | | |
| /constitution  | 宪法：确立项目原则。制定项目管理原则和发展指南           | 先运行以建立项目标准 | |
| /specify       | 规格：明确定义需求。定义你想构建的内容（需求和用户故事）  | 关注“做什么”和“为什么”，而不是技术栈 | create-new-feature.sh |
| /clarify       | 澄清：解决歧义。通过结构化提问澄清未明确的领域           | 除非明确跳过，否则必须先运行/plan | check-prerequisites.sh |
| 第二阶段        | | | |
| /plan          | 规划：选择技术栈和架构。使用选定的技术栈制定技术实施计划  | 明确架构、框架和技术决策 | setup-plan.sh + update-agent-context.sh |
| /tasks         | 任务：拆分成可作的项目。生成可执行的任务列表            | 将计划拆解为可执行的步骤 | check-prerequisites.sh |
| /analyze       | 跨工件一致性与覆盖分析                              | 跑过后，先跑/tasks/implement | check-prerequisites.sh |
| /implement     | 实施：生成可工作代码。执行所有任务，按计划构建功能       | 根据规范生成可工作代码 | check-prerequisites.sh |
| 补充            | | | |
| /checklist     | 根据用户需求生成当前功能的定制检查清单 | | check-prerequisites.sh |
| /taskstoissues | 将现有任务转化为基于现有设计产出的、具有依赖关系的可执行GitHub功能需求事项 |  | check-prerequisites.sh |

## ipass 使用 Spec Kit

- 提前整理需求，创建 @/docs/specification.md
- 始终在分支开发，功能测试通过后合并到 trunk

### 确立项目原则 constitution

- 根据交互式或预设原则输入创建/更新项目章程，并保持所有关联模板的同步更新

```bash
/speckit.constitution
- Always Use Chinese in SpecKit, Specfiy, Claude Code
- SpecKit/Specfiy 的所有文档必须使用中文编写，包括但不限于：规格说明（spec.md）、实施计划（plan.md）、任务列表（tasks.md）、检查清单（checklists/*.md）
- 代码注释必须使用中文，变量和函数命名使用英文，但注释说明必须使用中文，错误提示信息必须使用中文，用户文档必须使用中文
- 当需要简化代码的时候，可以使用 `@"code-simplifier:code-simplifier (agent)"`
- 当需要绘制架构图、甘特图、UML图、部署图、流程图、时序图、序列图等编码相关的图时，使用 'Mermaid' 格式
- 在开发阶段，不要新启动数据库容器，使用现有的 'mysql8' 容器， 开发环境数据库用户 'root', 密码 'mysql_root_password'，如果新创建数据库，则新创建一个 mysql 账号来使用新数据库，如果 'mysql8' 容器不可用，提示用户手动启动
- `@.member/arno.md` 是供 Arno Jin 个人开发 iPass 的笔记， AI Agent/Skills/Plugins/MCP/Commands 不应该从这个笔记文件读取数据
- `@docs/UI.md` 是iPass项目界面设计方案
- `@docs/specification.md` 是iPass项目需求文档
- 文档统一保存在 `@docs/` 目录，不要在其他地方保存
- shell脚本统一保存在 `@scripts/` 目录，不要在其他地方保存
- 执行任何命令前，必须先通过 `pwd` 确认当前工作目录是否是要执行命令所在的路径，避免路径错误
- 脚本文件必须在开头设置 `set -e` 并记录工作目录
- 当需要简化代码时，优先使用 `@"code-simplifier:code-simplifier (agent)"` 代理
- 所有 Markdown `.md` 文件必须使用 2 个空格作为缩进,而非制表符 (Tab)
- SpecKit/Specfiy 模板中的项目团队、负责人、OWNER 等占位符必须使用 `git config user.name` 获取的当前 Git 用户名填充，AI 助手在生成新文档时,必须自动查询 Git 配置并填充相关占位符，禁止使用硬编码的默认值（如 "作者姓名"、"待定" 等），如果 Git 配置未设置,必须提示用户先配置 Git 用户信息
- 服务端不应该提供客户端设备注册API，而是应该通过 `ipass-cli device add --device-id <device-id> --name "我的MacBook"` 命令，在服务端进行客户端设备注册
- 所有 Python 代码必须通过 `pyright` 严格类型检查：在 pyproject.toml 中启用 `pyright` 严格模式；所有函数必须具有类型注解；禁止使用 `# type: ignore`，除非在代码注释中有明确说明；类型错误阻止提交和 PR；使用存根文件 (.pyi) 定义外部类型

# 要求 Specify 使用中文
/speckit.constitution Always Use Chinese in speckit
# 执行后， Specify 已经分析了 CLAUDE.md 和 specification.md 的内容提取到了宪章中

# 避免读取临时文件内容
/speckit.constitution speckit 不要读取和使用 @docs/arno.md 中的内容，这个文档是供开发者临时保存文本用的

# 约束行为
/speckit.constitution 我发现创建的 @specs/001-ipass-platform/checklists/requirements.md 使用的是英文，在 SpecKit 中，不管在哪个阶段，都必须使用中文。

# 提供工具
/speckit.constitution 当需要简化代码的时候，可以使用 @"code-simplifier:code-simplifier (agent)"
/speckit.constitution 当需要绘制架构图、甘特图、UML图、部署图、流程图、时序图、序列图等编码相关的图时，使用 Mermaid 格式
/speckit.constitution 当需要绘制架构图时，使用 Mermaid 格式
/speckit.constitution 统一使用国内镜像源：
1. Ubuntu 等系统使用 mirrors.tuna.tsinghua.edu.cn 镜像源
2. npm 镜像 https://registry.npmmirror.com
3. pip 镜像 https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
4. Node.js 镜像 https://npmmirror.com/mirrors/node
/speckit.constitution 不要启动单独的 mysql 容器，使用现有的 mysql8 容器， 用户 root, 密码 mysql_root_password，如果新创建数据库，则新创建一个 mysql 账号来使用新数据库

docker ps 
  ⎿  ⧉ Selected 1 lines from docker/volumes/mysql/docker-compose.yml in Visual Studio Code
  ⎿  CONTAINER ID   IMAGE              COMMAND                   CREATED         STATUS                 PORTS     NAMES
     2ef05ed5ff2b   arno:mysql8        "docker-entrypoint.s…"   4 hours ago     Up 4 hours (healthy)             mysql8

/speckit.constitution 使用 @docs/ui.md 作为界面标准
/speckit.constitution 结合 ui-ux-pro-max SKILLS 来生成界面
/speckit.constitution 执行任何命令前，先确认当前路径是否是要执行命令所在的路径。避免路径错误。
```

### 明确功能 specify

- 根据自然语言描述创建/更新功能规格说明书

```bash
/speckit.specify 根据 @docs/specification.md 中的功能需求和非功能需求，开发ipass服务端和客户端。
# 下一步操作
# 
#   规格已就绪，可以继续以下工作流：
# 
#   1. 进入规划阶段: 运行 /speckit.plan 生成实施计划
#   2. 需求澄清: 如有疑问可运行 /speckit.clarify
#   3. 任务生成: 规划完成后运行 /speckit.tasks 生成任务列表
# 
#   🔗 相关链接
# 
#   - Pull Request: https://gitea.szis.dev/szisos/ipass/pulls/new/001-ipass-platform
# 需要在上述 Pull Request 做代码拉取的批准
/speckit.specify 检查当前 @specs/001-ipass-platform/spec.md 是否符合要求
/speckit.specify 根据 @docs/ui.md 检查是否要更新文档
/speckit.specify 检查 @specs/1-ui-docs-update
/speckit.specify 检查 @specs/002-ui-docs-update/spec.md 中对 ui和ux的要求是否都体现到了 @specs/003-ipass-implementation/spec.md 对 ipass-client 的界面定义上.如果没有,请补充
```

### 澄清存在歧义的问题 clarify

- 通过提出最多5个针对性澄清问题，识别当前功能规格说明中的未明确项，并将答复内容编码回规格文档

```bash
/speckit.clarify 在 @.specify/memory/constitution.md 中使用了和 @docs/specification.md 不同的加密处理方式。根据  @/docs/encryption-analysis.md 的建议对 @.specify/memory/constitution.md 和 @docs/specification.md 进行调整。
/speckit.clarify 检查 SpecKit 相关脚本文件是否完整，如果缺失，请补充。
/speckit.clarify 5.1 服务端 API 中 ‘设备注册’ 对应的接口 /api/v1/device/register 不应该被客户端访问到，客户端设备注册是通过 ipass-server-cli 的命令来进行的。
/speckit.clarify 执行 '/speckit.plan' 的时候，反馈缺少 'setup-plan.sh'，请补充 'setup-plan.sh'，并分析是否还存在其他确实的 SpecKit 相关脚本。
/speckit.clarify  001-ipass-platform 内容已经合并到了 trunk ,请删除本地及远程的功能分支 001-ipass-platform。
/speckit.clarify 在执行 '/speckit.analyze' 的时候，出现以下错误。请检查是否是因为生成的脚本 @.specify/scripts/bash/check-prerequisites.sh 编写存在问题
Bash(.specify/scripts/bash/check-prerequisites.sh --json --require-tasks --include-tasks)
  ⎿  Error: Exit code 1
     未知参数: --require-tasks
/speckit.clarify 执行以下操作：
1. 删除 @.specify/scripts/bash/*.sh 。
2. 复制原始的 SpecKit 脚本到 @.specify/scripts/bash/ 目录。
3. 检查复制过来的脚本是否需要按照中文要求和项目要求进行调整。
4. 完成上述3个任务后，在不破坏原始的 SpecKit 脚本功能的前提下，将脚本的注释和输出信息换成中文。

1. 创建 1-ui-docs-update 分支，切换到该分支
2. 清空 tasks.md 中所有任务标记完成的标识
```

### 规划 plan

- 执行实施规划工作流，使用规划模板生成设计工件

```bash
/speckit.plan
# 实施计划写入文件
# Read agent output aae9c8f
#  ⎿  Error: File content (326.4KB) exceeds maximum allowed size (256KB). 
#             Please use offset and limit parameters to read specific portions of the file, or use the GrepTool to search for specific content.
```

### 拆分任务 task

- 基于现有设计工件，生成可执行的、依赖关系排序的功能任务清单 task.md

```bash
/speckit.tasks 生成详细任务列表
# 现在规划阶段已经完成。让我总结一下当前的状态并准备开始实施：
# 
#   ✅ 规划阶段完成
# 
#   已完成的工作:
# 
#   1. 规格文档 (specs/2-ipass-implementation/spec.md)
#     - 功能规格定义了 6 个用户场景
#     - 从用户视角描述"是什么"和"为什么"
#   2. 技术设计 (specs/2-ipass-implementation/technical-design.md)
#     - 完整技术栈定义
#     - 系统架构和接口规范
#     - 从开发视角描述"如何实现"
#   3. 实施计划 (docs/plan/2-ipass-implementation.md)
#     - 技术上下文和宪章检查
#     - 关键里程碑和 Mermaid 甘特图
#   4. 任务列表 (specs/2-ipass-implementation/tasks.md)
#     - 87 个任务，覆盖 6 个用户场景
#     - 每个任务包含具体的文件路径和实施细节
#     - 标记了并行任务 [P] 和用户故事关联 [US1-US6]
#     - 包含 MVP 范围定义
# 
#   MVP 范围: Phase 1-4 + Phase 6 (US1) - 共 38 个任务
# 
#   下一步: 根据任务列表开始实施，从 Phase 1 (T001-T010) 开始：
# 
#   Phase 1: 设置阶段
#   - T001: 创建项目目录结构 ipass/
#   - T002-T009: [P] 并行创建各种模块和配置文件
#   - T010: 初始化 Alembic 迁移配置
# 
#   是否需要我开始执行任务 T001，创建项目的目录结构？
```

### 分析文档中不一致的地方 analyze

- 执行非破坏性跨工件一致性检查与质量分析（覆盖规格文档.md、计划文档.md及任务清单.md），于任务生成后实施

```bash
/speckit.analyze
#  下一步行动
#
#  必须在 /speckit.implement 前解决：
#   1. [CRITICAL] A1: 统一设备注册机制描述
#     - 在 technical-design.md 第 237 行添加引用："详见 spec.md 第 13.1 节设计澄清记录"
#     - 强调 CLI-only 方案，删除可能的歧义
#   2. [HIGH] A2: 修正任务数量统计
#     - 更新 tasks.md 第 12 行："总任务数: 137"
#   3. [HIGH] A3: 统一加密算法描述
#     - 在所有文档中明确："AES-256-GCM (主) / XChaCha20-Poly1305 (备选，用于无硬件加速设备)"
#   4. [HIGH] A4: 统一 Argon2id 参数单位
#     - 统一为 "128MB"（而非 "128 * 1024"）
#   5. [HIGH] A5: 添加性能测试前提
#     - 更新 spec.md 3.2 节："在标准开发硬件（4GB RAM, 2 核 CPU）上，客户端本地操作 < 100ms"
# 
#   建议在实施前解决：
# 
#   6. [MEDIUM] A6-A10: 添加缺失的测试任务
#     - T138: 容量测试（10,000 条目）
#     - T139: 性能基准测试（自动化）
#     - T140: 渗透测试
#   7. [MEDIUM] A11: 统一数据模型术语
#     - 建议：spec.md "操作日志（AuditLog）" → "同步日志（SyncLog）"
# 
#   可选改进：
# 
#   8. [LOW] A13-A15: 清理模糊性和重复
#     - 删除"直观的图形界面"
#     - 验证 MySQL 容器路径
#     - 合并验收标准和任务
/speckit.analyze
1. [CRITICAL] A1: 统一设备注册机制描述 中 technical-design.md 是设计为通过 cli 来使用，符合要求。可以增加引用："详见 spec.md 第 13.1 节设计澄清记录"
2. 针对发现的2、3、4、6、7问题，按照推荐的方式进行修复
3. [HIGH] A5: 添加性能测试前提 中对性能的要求，可以不用处理。理由是本软件是一个人使用，存储的密码条数不多。请同步更新相关文档
```

### 实施计划 implement

- 执行实施计划，处理并完成 tasks.md 中定义的所有任务

```bash
/speckit.implement
# 建议的下一步
# 
#   1. 运行规格澄清: /speckit.clarify - 识别 spec.md 中需要澄清的领域
#   2. 完善规格说明: 根据澄清结果更新 spec.md
#   3. 更新 checklist: 手动或重新生成 checklist 并标记完成项
#   4. 验证 checklist: 确保所有 16 项都通过
#   5. 重新运行实施: /speckit.implement 继续实施
# 
#   是否需要我帮助您运行 /speckit.clarify 来开始澄清流程？

/speckit.implement git 分支 2-ipass-implementation 已经合并到了 trunk 。执行实施计划，处理并完成 tasks.md 中定义的所有任务。
# 好的,我了解了技术架构。现在让我开始实施。由于这是一个大型项目(137个任务),我将创建追踪并按阶段推进。
# 
# ✻ Compacting conversation… (ctrl+c to interrupt · ctrl+t to hide todos · 1m 18s · ↓ 425 tokens)
#   ⎿  ☐ Phase 1: 设置阶段 (T001-T010)
#      ☐ Phase 2: 基础设施层 (T011-T020)
#      ☐ Phase 3: 服务端数据库层 (T021-T027)
#      ☐ Phase 4: US1 首次设置 (T028-T038)
#      ☐ Phase 5-15: 其他阶段 (T039-T137)

/speckit.implement 
1. 运行 uv pip install -r requirements.txt 安装依赖
2. 运行 PYTHONPATH=/workspace/ipass && uv run python scripts/init_db.py 初始化数据库
3. 继续 Phase 4 (US1 - 首次设置) 的实现
/speckit.implement 继续实现 US1 GUI - 完整的图形界面

/speckit.implement 进行：
1. 测试：运行集成测试验证完整流程
2. US2 实现：添加第二台设备的证书导入功能
3. US3 实现：密码管理主界面（添加、查看、编辑密码）


/speckit.implement 参考 @specs/2-ipass-implementation/tasks.md 完成 US3（密码管理主界面），还需要实现：

优先级高

1. 数据访问层 (client/core/database.py)
- PasswordEntryDAO: add, update, delete, get_all, search
- CategoryDAO: add, update, delete, get_all, get_tree
2. GUI 对话框
- 添加密码对话框 (add_password.py)
- 查看密码对话框 (view_password.py)
- 编辑密码对话框 (edit_password.py)
3. 密码列表界面 (main_window.py 扩展)
- PasswordListView 显示列表
- 搜索和过滤功能
- 操作按钮布局

优先级中

4. 剪贴板功能 (client/gui/clipboard.py)
- 复制到剪贴板
- 30秒后自动清空
5. 同步功能 (client/core/sync.py 扩展)
- CRDT 操作记录
- 同步客户端
- 离线队列

优先级低

6. 服务端 API (US3 相关)
- FastAPI 应用初始化
- 同步 API 路由
- 设备验证中间件

完成高优先级任务后提交并推送代码

/ralph-loop:ralph-loop /speckit.implement @specs/2-ipass-implementation/tasks.md
```

### 开发

```bash
/speckit.implement 虽然任务标记为完成了,但实际代码功能上缺少很多功能.例如:
1. 不能添加分类
2. 不能调整服务器设置
3. 不能添加分类
4. 不能在客户端和服务端同步数据
5. UI界面不符合定义
```
/speckit.plan
```bash
/speckit.specify
弹出的确认框，现在是 'OK', 'Yes', 'No' 这样的英文按钮。
改为 '确认', '取消' 两个按钮。
检查一下其他界面、按钮是否还存在英文文字内容。
/speckit.clarify
/speckit.plan
/speckit.tasks
/speckit.implement
```

```bash
# 004-ui-requirements-sync
/speckit.specify
1. 在登陆界面直接显示密码输入框、确定后进入管理界面，不需要点击“登陆”按钮弹出界面。同步调整“忘记密码”
2. 减少弹出窗口，在界面底部增加状态条，用于显示信息，或者在界面右上角显示浮动消息，过一段时间自动隐藏。
3. 在程序设置界面修改主题为浅色、深色，没有效果。
/speckit.plan 先提交代码,在开始执行 plan
/speckit.tasks
/speckit.implement
```

```bash
# 008-ux-message-bar-logo
/speckit.specify
1. 移除'界面右上角显示浮动消息'的功能
2. 统一在打开窗口的底部增加消息栏，消息和提示在消息栏显示
3. 在登陆界面显示LOGO
4. 界面宽度缩小后，搜索输入框和分类标题重叠了，修改限制
/speckit.plan
/speckit.tasks
/speckit.implement
/speckit.implement 
1. 运行单元测试验证功能
2. 生成真实的 PNG LOGO
3. 编译 Qt 资源文件
4. 提交代码并合并到 trunk

/speckit.implement 分支 008-ux-message-bar-logo 上的以下4个功能请检查是没有实现还是没有正确的合并到 trunk
1. 移除'界面右上角显示浮动消息'的功能
2. 统一在打开窗口的底部增加消息栏，消息和提示在消息栏显示
3. 在登陆界面显示LOGO
4. 界面宽度缩小后，搜索输入框和分类标题重叠了，修改限制

/speckit.implement 服务端收到以下信息，但查看 ipass-db 没有数据
INFO:     127.0.0.1:53380 - "GET /health HTTP/1.1" 200 OK
[2026-01-16 14:21:34] [INFO] [server] 收到同步请求: device_id=device-09ca8d9d-955b-427b-8fc1-cc5176886d15, crdt_ops数量=4
[2026-01-16 14:21:34] [INFO] [server] 设备验证通过: device-09ca8d9d-955b-427b-8fc1-cc5176886d15
[2026-01-16 14:21:34] [DEBUG] [server] 转换操作: update - entry_id=5899a457-d57e-4140-912b-3265508d8481, has_data=True
[2026-01-16 14:21:34] [DEBUG] [server] 转换操作: update - entry_id=cdb732e5-4452-4b14-83a8-97812429983a, has_data=True
[2026-01-16 14:21:34] [DEBUG] [server] 转换操作: update - entry_id=b998838a-b22c-4976-9f8a-e7be18832532, has_data=True
[2026-01-16 14:21:34] [DEBUG] [server] 转换操作: update - entry_id=c000cf35-3139-4c4e-ac8c-a6eb519017a6, has_data=True
[2026-01-16 14:21:34] [INFO] [server] 成功转换 4 个操作
[2026-01-16 14:21:34] [WARNING] [server] 跳过更新操作(条目不存在): entry_id=5899a457-d57e-4140-912b-3265508d8481
[2026-01-16 14:21:34] [WARNING] [server] 跳过更新操作(条目不存在): entry_id=cdb732e5-4452-4b14-83a8-97812429983a
[2026-01-16 14:21:34] [WARNING] [server] 跳过更新操作(条目不存在): entry_id=b998838a-b22c-4976-9f8a-e7be18832532
[2026-01-16 14:21:34] [WARNING] [server] 跳过更新操作(条目不存在): entry_id=c000cf35-3139-4c4e-ac8c-a6eb519017a6
[2026-01-16 14:21:34] [INFO] [server] 操作处理完成: 添加=0, 更新=0, 删除=0, 跳过=4
[2026-01-16 14:21:34] [INFO] [server] 数据库提交成功

/speckit.implement 服务端收到以下信息，但查看 ipass-db 数据库，只同步了4条密码数据，目录数据，操作日志等都没有同步
INFO:     127.0.0.1:52078 - "GET /health HTTP/1.1" 200 OK
[2026-01-16 14:26:30] [INFO] [server] 收到同步请求: device_id=device-09ca8d9d-955b-427b-8fc1-cc5176886d15, crdt_ops数量=4
[2026-01-16 14:26:30] [INFO] [server] 设备验证通过: device-09ca8d9d-955b-427b-8fc1-cc5176886d15
[2026-01-16 14:26:30] [DEBUG] [server] 转换操作: update - entry_id=5899a457-d57e-4140-912b-3265508d8481, has_data=True
[2026-01-16 14:26:30] [DEBUG] [server] 转换操作: update - entry_id=cdb732e5-4452-4b14-83a8-97812429983a, has_data=True
[2026-01-16 14:26:30] [DEBUG] [server] 转换操作: update - entry_id=b998838a-b22c-4976-9f8a-e7be18832532, has_data=True
[2026-01-16 14:26:30] [DEBUG] [server] 转换操作: update - entry_id=c000cf35-3139-4c4e-ac8c-a6eb519017a6, has_data=True
[2026-01-16 14:26:30] [INFO] [server] 成功转换 4 个操作
[2026-01-16 14:26:30] [INFO] [server] UPDATE 创建新条目: entry_id=5899a457-d57e-4140-912b-3265508d8481
[2026-01-16 14:26:30] [INFO] [server] UPDATE 创建新条目: entry_id=cdb732e5-4452-4b14-83a8-97812429983a
[2026-01-16 14:26:30] [INFO] [server] UPDATE 创建新条目: entry_id=b998838a-b22c-4976-9f8a-e7be18832532
[2026-01-16 14:26:30] [INFO] [server] UPDATE 创建新条目: entry_id=c000cf35-3139-4c4e-ac8c-a6eb519017a6
[2026-01-16 14:26:30] [INFO] [server] 操作处理完成: 添加=4, 更新=0, 删除=0, 跳过=0
[2026-01-16 14:26:30] [INFO] [server] 数据库提交成功
```

```bash
# 009-unified-logging
/speckit.specify 统一 ipass-server, ipass-server-cli, ipass-clinet 日志输出格式，并在每条日志前面显示时间，时间格式为：yyyy-MM-dd HH:MM:SS
/speckit.plan
/speckit.implement # 会自动执行 /speckit.tasks
/speckit.implement 日志格式不符合要求，如下[DEBUG] 、[网络检查]、[Toast]
[2026-01-16 14:10:57] [INFO] [client] Theme applied: system
[2026-01-16 14:10:57] [INFO] [client] Creating main window...
QMainWindowLayout::addItem: Please use the public QMainWindow API instead
[2026-01-16 14:10:57] [INFO] [client] Client started successfully
[DEBUG] 尝试加载证书: /home/arno/.ipass/data_certificate.enc
[DEBUG] 证书加载成功
✓ 数据库迁移完成
✓ 数据库迁移完成
[网络检查] 正在连接: http://localhost:8088/health
[网络检查] 响应状态码: 200
[网络检查] 正在连接: http://localhost:8088/health
[网络检查] 响应状态码: 200
[Toast] 显示消息: 登录成功, 类型: ToastType.SUCCESS, 时长: 5000ms
[Toast] 主窗口: <client.gui.main_window.MainWindow(0xdb54e40) at 0x75dad0294180>
[Toast] 位置: x=3099, y=20, 屏幕: 3440x1440
```

```bash
/speckit.implement 客户端数据完全没有同步到服务端
服务的有收到同步请求
INFO:     127.0.0.1:57552 - "POST /api/v1/sync HTTP/1.1" 200 OK
但数据库中没有任何数据
```

```bash
/speckit.implement ipass-client 客户端出现以下日志：
QMainWindowLayout::addItem: Please use the public QMainWindow API instead

/speckit.implement 同步后，在表 sync_log 中没有数据
```

```bash
# 010-category-encryption-feishu-notify
/speckit.specify
1. categories 同样需要使用数字证书加密保存
2. 当成功登陆后，使用飞书群机器人向ipass群发消息，以下是相关配置和要求：
Webhook地址： https://open.feishu.cn/open-apis/bot/v2/hook/24e49f65-80d3-4f58-8fb3-d9ae0013665d
签名校验密钥： xwXYWz6w6Ze9O61ygB4Tne
消息内容：[yyyy-MM-dd HH:MM:SS]xxx登陆。

/speckit.plan
/speckit.tasks
/speckit.implement
```

```bash
/speckit.specify
1. 移除'界面右上角显示浮动消息'的功能
2. 统一在窗口的底部增加消息栏，全部消息和提示在消息栏显示，减少弹出窗口和悬浮消息的使用
3. 在登陆界面显示LOGO
4. 界面宽度缩小后，搜索输入框和分类标题重叠了，修改限制
5. 使用 ipass-server-cli init 进行初始化的时候，执行 alembic 的迁移脚本

/speckit.plan
/speckit.tasks
/speckit.implement
```

```bash
/speckit.implement
管理分类窗口中显示的分类名称、描述是乱码
提示：刷新分类筛选器失败: name 字段解密失败: 解密失败: argument 'nonce': Cannot convert "<class 'str'>" instance to a buffer. Did you mean to pass a bytestring instead?
```

```bash
/speckit.specify 根据上述分析报告,执行后续行动,立即实施方案 A：创建完整的 common.logging 统一日志模块（**注意：不是ipass.common.logging**）,在整个系统中应用,移除/废弃 server.core.logging.移除 ipass.common.logging .

/speckit.plan
/speckit.tasks
/speckit.implement
```

```bash
/speckit.specify 以现有 trunk 分支为基础，创建功能分支，实现以下功能：
1. 服务端 password_entries 表设计不合理，密码数据不应该和某一个设备绑定。删除设备不要删除分类数据和密码数据。
2. 添加密码界面，下拉选择的分类中没有看到已经添加的分类，还是显示的模拟分类数据。
3. 添加密码界面，新添加的分类应该要能在分类管理中看到。
4. 在密码列表页双击后，点击编辑按钮，在分类中应该显示下拉框。
5. 清理代码中的直接 print 输出，统一使用日志进行记录。
6. 按照 @docs/specification.md 中的要求，实现**功能 2: 服务端日志查看**、**功能 14: 日志查看（客户端）**

/speckit.clarify 前面对删除设备的需求描述错误。删除设备不要删除分类数据和密码数据。

/speckit.plan
/speckit.tasks
/speckit.implement
```