Harness 与 Koa2 登录实践(一):先别急着写代码,把「意图」钉成契约

10 阅读4分钟

Harness 与 Koa2 登录实践(一):先别急着写代码,把「意图」钉成契约

配套开源仓库harness-login-now-koa2
本文是系列第一篇, clone 仓库后对照 implement guide/ 即可进行一次完整实现;

附cursor分步骤提示词实现juejin.cn/spost/76355…


这篇在讲什么

很多人接到「做一个登录」会立刻打开编辑器写路由。结果往往是:接口字段改来改去、和前端对不齐、Agent 多轮对话后「到底成功长什么样」没人说得清。

这一篇用大白话说明:我这次练习里采用的 Harness 思路——先把任务说清楚、再让实现和验收有共同标准——具体落在一个最小的 Koa2 会话登录 上是什么样子。不讲框架细节,只讲为什么这样拆步、第一步写什么


Harness 是什么(一句话版)

可以把它理解成:给「写代码 / 用 AI 写代码」搭一套不容易跑偏的环境

  • 模型再聪明,如果成功标准模糊上下文乱塞,输出也会飘。
  • Harness 关心的是:任务怎么表达、上下文怎么裁剪、最后怎么证明做对了——而不只是「让 LLM 多试几次」。

本仓库把这套想法写进了 HARNESS-SELF-CHECK.md,用 八个要素 和当前登录系统做了一行对照;概念侧还可参考仓库里对「迷你 Harness」的归纳(意图、快照、验收、隔离等)。


为什么拿「登录」练 Harness

登录人人都熟,但细节很多:密码怎么存、会话用 Cookie 还是 JWT、错误码怎么统一、日志里会不会打出密码……若一开始没有单一事实来源,改着改着就会和「自己以为的」不一致。

所以这次练习刻意做成:

做法通俗理解
契约先行接口路径、状态码、JSON 字段、Cookie 名,先写在 implement guide/NOTES-API-CONTRACT.md
分阶段实现/health 到注册、再到 session,每步都能单独验收
脚本闭环npm run verify 用 curl 串一整条链路,避免「我本地好像能登录」

仓库的 README.md 里把这些设计选择说得很集中:代码是练习体,重心是跑通「意图 → 契约 → 分阶段实现 → 可复现验收」


第一步:输出契约(阶段 0)

在动 src/ 之前,先回答清楚几个问题:

  1. 注册、登录、/me、登出分别是什么方法、什么路径?
  2. 成功时 HTTP 状态码是多少(例如注册成功用 201)?
  3. 会话方案定哪一种?本仓库定的是 httpOnly Cookie + 服务端 session,Cookie 名 app_session
  4. 密码绝不出现在响应和日志里,磁盘上只存 bcrypt 哈希

这些不是「文档形式主义」,而是给自己、同事、Cursor 里的 Agent同一个判据:什么叫做完、什么叫做错

在 Cursor 里可以先把 harness guide 里的材料与 implement guide/NOTES-API-CONTRACT.md 钉在上下文,再让模型根据仓库产出或修订契约草案——这比从零口述「做个登录」稳定得多。更细的分步操作见仓库 implement guide/V1/KOA2登录系统-Harness与Cursor分步指南.md 的阶段 0。


和「八要素」怎么对上号(入门只记两条)

全表见 HARNESS-SELF-CHECK.md。入门阶段只要记住两条就够:

  1. 任务如何被表达 → 契约 + README 把接口写死。
  2. 系统如何验证真的做好了 → 后面会上的 npm run verify(第二、三篇会展开)。

其余六条(上下文组织、工具治理、状态保存与裁剪、反馈回流、错误分类、安全边界)会在实现过程中自然出现,不必一开始就背下来。


小结

  • Harness 在这里不是新名词堆叠,而是:先契约、再小步实现、每步能验收
  • 登录 很适合练手,因为安全与接口边界特别需要「先写清楚」。
  • 本仓库把契约、分步指南、自检表都放在 implement guide/HARNESS-SELF-CHECK.md,方便你或 Agent 按图施工。

下一篇与仓库

  • (二) 会按递进顺序讲:工程初始化 → /health → 用户文件与注册 → 登录与会话,以及每步怎么用 curl 快速验收。
  • 完整源码与文档请直接访问:github.com/RonnyJung20… —— 建议 star 或 fork,跟着分步指南在自己的环境里跑一遍 npm run verify,体感会完全不一样。