Files
Nexus/.cursor/skills/writing-plans/SKILL.md
T
Your Name cdd0be328a fix: 六轮深度扫描 — 47项Bug修复、安全加固、死代码清理
Critical runtime bugs:
- terminal.html WebSSH完全不可用(URL前缀/JSON解析/Content-Type三处错误)
- servers.py路由遮蔽:/logs被/{id}拦截,3个前端页面同步日志查询失败
- scripts.html startExecPoll()→startExecPolling(),长任务快速执行崩溃
- agent.py {value!r!s:.50}格式串非法,agent发非数值时ValueError
- alerts.html d.daily.reduce()无null检查,API返回空数据时TypeError

Resource leak / stability:
- websocket.py僵尸连接未关闭TCP,文件描述符泄漏
- websocket.py _last_alert_time字典无限增长(加1小时过期清理)
- asyncssh_pool.py全忙时超过MAX_CONNECTIONS无限增长
- self_monitor.py Telegram告警无冷却,宕机时每30秒刷屏
- schedule_runner.py一次性调度执行超60秒会重复触发
- 限速脚本EXPIRE每次重置窗口可绕过(改用Lua原子脚本)

Security:
- JWT access token加token_version声明,改密码后旧token立失效(零宽限)
- INSTALL_MODE导入时常量→动态函数,安装后JWT认证不再残留禁用
- install.py /lock端点加管理员存在性验证,防止阻断安装
- ServerUpdate schema移除connectivity只读字段,防止伪造连接状态

Frontend fixes:
- doExec()缺r.ok检查、commands.html null检查
- _server_to_dict()补last_checked_at+ssh_key_public
- _field_match()逗号cron表达式修复
- alerts类型显示、SSH会话名称、搜索高亮定位
- 一次性/循环定时任务(run_mode+fire_at+自动禁用)

Dead code removed (400+ lines):
- SyncService batch_push/_push_single等5个方法(零调用者)
- 5个未使用schema(SyncCommands/SyncConfig/SyncSftp/FileDeploy/PaginatedResponse)
- 6个零调用service方法、3个无前端API端点
- 4个未使用import

Schema migrations:
- push_schedules: run_mode + fire_at列,cron_expr改NULL
- servers: 7个新列 + ssh_key_private/public VARCHAR(500)→TEXT

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-05-24 16:26:40 +08:00

5.7 KiB
Raw Blame History

name, description
name description
writing-plans 当你有规格说明或需求用于多步骤任务时使用,在动手写代码之前

编写计划

概述

编写全面的实现计划,假设工程师对我们的代码库零上下文,且品味存疑。记录他们需要知道的一切:每个任务要修改哪些文件、代码、测试、可能需要查阅的文档、如何测试。将整个计划拆成小步骤任务。DRY。YAGNI。TDD。频繁 commit。

假设他们是有经验的开发者,但对我们的工具链和问题领域几乎一无所知。假设他们不太擅长测试设计。

开始时宣布: "我正在使用 writing-plans 技能创建实现计划。"

上下文: 此技能应在专用 worktree 中运行(由 brainstorming 技能创建)。

计划保存位置: docs/superpowers/plans/YYYY-MM-DD-<feature-name>.md

  • (用户对计划位置的偏好优先于此默认值)

范围检查

如果规格涵盖了多个独立子系统,它应该在头脑风暴阶段就被拆分为子项目规格。如果没有,建议将其拆分为独立的计划——每个子系统一个。每个计划应该能独立产出可工作、可测试的软件。

文件结构

在定义任务之前,先列出将要创建或修改的文件以及每个文件的职责。这是锁定分解决策的地方。

  • 设计边界清晰、接口定义良好的单元。每个文件应有一个明确的职责。
  • 你对能一次放入上下文的代码推理得最好,文件越专注你的编辑越可靠。优先选择小而专注的文件,而非承担过多功能的大文件。
  • 一起变更的文件应放在一起。按职责拆分,而非按技术层级拆分。
  • 在现有代码库中,遵循已有模式。如果代码库使用大文件,不要单方面重构——但如果你正在修改的文件已经变得难以管理,在计划中包含拆分是合理的。

此结构决定了任务分解。每个任务应产出独立的、有意义的变更。

小步骤任务粒度

每步是一个操作(2-5 分钟):

  • "编写失败的测试" - 一步
  • "运行它确认失败" - 一步
  • "实现最少代码让测试通过" - 一步
  • "运行测试确认通过" - 一步
  • "Commit" - 一步

计划文档头部

每个计划必须以此头部开始:

# [功能名称] 实现计划

> **面向 AI 代理的工作者:** 必需子技能:使用 superpowers:subagent-driven-development(推荐)或 superpowers:executing-plans 逐任务实现此计划。步骤使用复选框(`- [ ]`)语法来跟踪进度。

**目标:** [一句话描述要构建什么]

**架构:** [2-3 句话描述方案]

**技术栈:** [关键技术/库]

---

任务结构

### 任务 N[组件名称]

**文件:**
- 创建:`exact/path/to/file.py`
- 修改:`exact/path/to/existing.py:123-145`
- 测试:`tests/exact/path/to/test.py`

- [ ] **步骤 1:编写失败的测试**

```python
def test_specific_behavior():
    result = function(input)
    assert result == expected
```

- [ ] **步骤 2:运行测试验证失败**

运行:`pytest tests/path/test.py::test_name -v`
预期:FAIL,报错 "function not defined"

- [ ] **步骤 3:编写最少实现代码**

```python
def function(input):
    return expected
```

- [ ] **步骤 4:运行测试验证通过**

运行:`pytest tests/path/test.py::test_name -v`
预期:PASS

- [ ] **步骤 5Commit**

```bash
git add tests/path/test.py src/path/file.py
git commit -m "feat: add specific feature"
```

禁止占位符

每个步骤都必须包含工程师需要的实际内容。以下是计划缺陷——绝不要写出来:

  • "待定"、"TODO"、"后续实现"、"补充细节"
  • "添加适当的错误处理" / "添加验证" / "处理边界情况"
  • "为上述代码编写测试"(没有实际测试代码)
  • "类似任务 N"(重复代码——工程师可能不按顺序阅读任务)
  • 只描述做什么而不展示怎么做的步骤(代码步骤必须有代码块)
  • 引用了未在任何任务中定义的类型、函数或方法

注意事项

  • 始终使用精确的文件路径
  • 每个步骤都包含完整代码——如果步骤涉及代码变更,就展示代码
  • 精确的命令和预期输出
  • DRY、YAGNI、TDD、频繁 commit

自检

编写完整计划后,以全新视角审视规格并对照检查计划。这是你自己执行的检查清单——不是子代理调度。

1. 规格覆盖度: 浏览规格中的每个章节/需求。你能指出实现它的任务吗?列出所有遗漏。

2. 占位符扫描: 搜索计划中的红旗——上方"禁止占位符"章节中的任何模式。修复它们。

3. 类型一致性: 后续任务中使用的类型、方法签名和属性名是否与前面任务中定义的一致?任务 3 中叫 clearLayers() 但任务 7 中叫 clearFullLayers() 就是 bug。

如果发现问题,直接内联修复。无需重新审查——修好继续推进。如果发现规格中的需求没有对应任务,就添加任务。

执行交接

保存计划后,提供执行选项:

"计划已完成并保存到 docs/superpowers/plans/<filename>.md。两种执行方式:

1. 子代理驱动(推荐) - 每个任务调度一个新的子代理,任务间进行审查,快速迭代

2. 内联执行 - 在当前会话中使用 executing-plans 执行任务,批量执行并设有检查点

选哪种方式?"

如果选择子代理驱动:

  • 必需子技能: 使用 superpowers:subagent-driven-development
  • 每个任务一个新子代理 + 两阶段审查

如果选择内联执行:

  • 必需子技能: 使用 superpowers:executing-plans
  • 批量执行并设有检查点供审查