规约范例:一份变更
公开教程 · 无需登录

规约范例:一份变更

这一组四页给一份可直接照抄的实物:CampusClaw 的一次真实变更,四份文件原样列出。价值不在篇幅,而在每一句都能被检查——对照时请逐句问「这句话怎么判定」。

1这份范例的变更背景

先看清楚这次改动要交付什么,再读四份文件。

项内容
项目CampusClaw:浏览器 → Nginx(web)→ Go(api)→ MySQL(db)与 Qdrant(qdrant)
变更名2026-10-27-course-material-search
本次交付的能力课程资料检索:关键字、向量、混合三种检索,命中带资料出处
本轮边界只做检索;不做跨资料综合问答,不做资料上传与解析,不引入新存储
依赖的既有约定资料入库(materials)与登录会话(auth)的对外接口不变
对应的课程知识点:需求工程中的变更管理、基线(baseline)与增量交付。一次变更只交付一组可判定的能力,边界写在动因里,不写在代码里——执行者不必读代码就知道本轮不做哪些事。

2第一份:proposal.md

回答「为什么做」与「本次做到哪」,不写代码细节。

# 变更:course-material-search

## 为什么
学生在答疑区提出的问题,答案大多已经写在课件与资料里;现有做法只能由
助教重复回答。本次让检索先在资料里跑一遍,把命中的原文段落连同出处
一并交给模型,答案可回溯到原文。

## 本次做到哪
- 提供 /api/search:关键字、向量、混合三种检索,命中带资料出处
- 检索只在本班资料内进行;跨班资料一律按不存在处理
- 相似度低于阈值(SEARCH_VECTOR_MIN,默认 0.35)的命中不进入结果

## 本次不做
- 不做跨资料的综合问答(归入 assistant 能力)
- 不做资料上传与解析(materials 能力已有)
- 不引入新的存储,复用 db 与 qdrant

## 与既有约定的关系
依赖 materials(资料入库)与 auth(登录会话);不修改两者的对外接口。
检查这三处:①「本次做到哪」每条都以动词开头且能单独演示;②「本次不做」至少三条——写不出「不做」清单,说明边界还没想清楚;③阈值写成了具体数字 0.35,而不是「较高的相似度」。