From 3d7af019d4a1b4981dfca6b4a789f6092c80300a Mon Sep 17 00:00:00 2001 From: AskaEth Date: Tue, 6 Oct 2026 08:23:48 +0800 Subject: [PATCH] =?UTF-8?q?docs(env):=20.env=20=E5=86=BB=E7=BB=93=E4=B8=BA?= =?UTF-8?q?=E3=80=8C=E5=8F=AA=E4=BF=9D=E8=AF=81=E6=9C=80=E5=B0=8F=E5=8C=96?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=8F=AF=E8=B7=91=E3=80=8D=E7=9A=84=E5=BC=95?= =?UTF-8?q?=E5=AF=BC=E9=9D=A2=EF=BC=88=E4=B8=BB=E4=BA=BA=E7=BA=A2=E7=BA=BF?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 撤出今日新增的 env 键:MEMORY_REVIEW_*(我加的 4 键)与 MEMORY_TIDY_COMPARE_LIMIT (MT-A 加的 1 键)⇒ 代码默认值 2000 / true / 256 / 200 / 20 仍然生效,行为零变化 - 既有条目保持现状:MEMORY_TIDY_CANDIDATE_LIMIT 的默认值 20→200 属**既有键**的如实更新, 模板必须跟(冻结不等于让文档说谎) - AGENTS §10 的协同 E6 改写:原「新 env 键必须同步模板」作废 ⇒ 「新键不进模板; 确属最小化引导必需者须主人明确批准」;既有键与既有 env: tag 保持现状(不迁移) --- .env.example | 25 ++++--------------------- AGENTS.md | 2 +- 2 files changed, 5 insertions(+), 22 deletions(-) diff --git a/.env.example b/.env.example index 42c8712..de2ab30 100644 --- a/.env.example +++ b/.env.example @@ -326,27 +326,10 @@ MEMORY_TIDY_SCAN_LIMIT=5000 # 2026-10-06 由 20 抬到 200:首轮真跑时四个分区同时打满旧值,候选数(77)由上限 # 而不是规则决定;命中上限时响应里的 `truncated` 会带 `<分区>(candidates)`。 MEMORY_TIDY_CANDIDATE_LIMIT=200 -# 每分区每轮**真正参与两两比对**的条目上限,默认 2000(性能护栏:两两相似度是 -# O(n²·dim))。2026-10-06 由写死的 400 抬到 2000 并开放为 env 键:首轮真跑时 -# 459 条的分区被 400 截断,于是 compared(705) < scanned(784) —— 观测口径被上限 -# 决定。命中时响应里的 `truncated` 会带 `<分区>(compare)`,日志有 WARN。 -MEMORY_TIDY_COMPARE_LIMIT=2000 - -# ---- 记忆「入库前审查」(design/23 §15.1 D3 · 切片 MT-B) ---- -# 新记忆落库后,由**独立的记忆管理会话**(sess-memorytidy)在有界后台队列里判定它是 -# merge / modify / create / skip;结论以**软合并**回写(status + merged_into / -# merged_from / merge_count,**可 revert、绝不改 content**)。 -# 总开关(默认 true):置 false ⇒ 组合根根本不建它,写入路径行为**逐字回到**改动之前。 -MEMORY_REVIEW_ENABLED=true -# 有界审查队列长度(默认 256)。⚠️ 队列满时**该条不做审查**(记忆本身早已落库, -# 绝不因队列满而丢记忆),只记一条带来源的 WARN。 -MEMORY_REVIEW_QUEUE_SIZE=256 -# 每条审查在同分区内最多看多少条既有记忆(top-K 上限,默认 200)。 -MEMORY_REVIEW_SCAN_LIMIT=200 -# 单条审查的墙钟上限(秒,默认 20):超时 ⇒ **不做任何改写**,记忆照旧保留 + WARN。 -MEMORY_REVIEW_TIMEOUT_SEC=20 -# 注:上面四个键 ≤0 一律**视为「用默认」**(由 memory 包 normalize 收敛,避免笔误让进程起不来); -# 召回门阈值复用 MEMORY_TIDY_RECALL_THRESHOLD,不另立键。 +# ⚠️ 2026-10-06 起(主人红线):**`.env` 冻结为「只保证最小化功能可跑」的引导面** —— +# **新旋钮一律不再进 `.env`**(本块此前收过的「两两比对上限」与「入库前审查」四键**已撤出**: +# 它们有代码默认值 2000 / true / 256 / 200 / 20,真正入口是 `$DATA_DIR/config/**` + 面板, +# 迁移切片已排队)。规矩全文见 `design/13 §2.1`;`AGENTS §10` 的 E6 已按此改写。 # ---- 唤醒式能力渐进(capacity 意图判定,design/14 §2.2) ---- # 总开关(默认 false):关闭时 loop 向模型暴露【全部】已注册工具,行为与接线前逐字节一致; diff --git a/AGENTS.md b/AGENTS.md index ad8cbfe..c90ab8d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -68,7 +68,7 @@ - 🔴 **日志必须标来源**:模块/子功能用 `internal/logger.WithSource`/`Scoped`(`source=module/subfeature`)标注,跨模块可追溯定位;**禁止无来源裸日志**。 - 🔴 **客户端 API 契约先行**:REST `/api/v1` + WS `/ws` + admin `/api/v1/admin/*` 统一**版本化契约**,供跨平台客户端(Web/移动/IM bridge)接入与治理;JSON 响应 `{data}` / `{error:{code,message}}`。 - 🔴 **用户侧 API 文档随实现更新**:每实现/变更一个 REST 端点、WS 事件、admin API,**立即同步更新 `Docs/api-client.md`**(用户侧跨平台客户端 API 文档),供后期原生客户端开发;契约变更版本化。 -- 🔴 **`.env.example` 与实现同步(同一类固定动作,2026-10-04 登记为协同 `E6`)**:每**新增 / 改名 / 删除**一个 env 键(`env:"…"`、`os.Getenv/LookupEnv("…")`、自定义 env helper、Go const 形式的 env 名),**立即同步 `.env.example`** —— 键名必须与代码**逐字一致**、值一律占位符、**绝不写真实凭据**;已废弃但未删除的键在模板里**显式标注「未接线,配了不生效」**。否则照模板部署的新实例会**漏配且静默失效**。自查命令(代码键 ↔ 模板键,`comm -23/‑13` 必须只剩已说明的噪声):见 `DevDocs/开发习惯与约定.md` 与协同清单 `E6` 条目。 +- 🔴 **`.env` 冻结为「只保证最小化功能可跑」的引导面(主人 2026-10-06 红线,**取代**原协同 `E6` 的「新键立即同步模板」)**:**新增/调整配置一律不再进 `.env` / `.env.example`**;调优、门槛、上限、开关类参数走 **`$DATA_DIR/config/**`(面板可改)+ 代码默认值**。① 新键**不得**新增到模板(确属最小化引导必需者,须主人明确批准);② 既有引导键在代码里的默认值变了,模板**仍须如实更新**(冻结不等于让文档说谎);③ **既有键与既有代码里的 `env:` tag 一律保持现状**(主人 2026-10-06 明确:只要求「**以后别再加新键**」,**不要求迁出**已有键 —— 迁移项已撤销);④ 自查命令(代码键 ↔ 模板键)从此改为「**报告差异**」而不是「必须无差异」:差异若属调优类,必须能在 `design/13 §2.1` 找到它的正当去处。历史事故留存:曾因「模板迟迟没进 HEAD」导致钉住模板同步的测试在 **HEAD 上**红(见 `开发习惯与约定 §7`),该教训在冻结后不再适用。 - 🔴 **每次模块/功能改动「前」与「后」都推仓库**(用户红线,留恢复误操作余地):改动前若工作树有未推改动,先 `git push origin dev` 存一个干净基线;改动完成验收通过后,立即 `git commit` + `git push origin dev` 存档。**绝不攒一堆改动到阶段末一次性推**——坏操作可随时 `git reset`/`rebase` 到任一推过的 commit 回滚。每个模块/功能提交(或里程碑归档)后均 `git push origin dev` 同步远端。 - 🔴 **压测纪律(2026-10-04 实测事故,必守)**:子代理做负载/竞态验证时**不许**用无界进程风暴占机(如 `yes` ×30、`sleep` 风暴)—— 实测一次「`yes` 没杀干净」把 12 核占满约 **15 分钟**,期间所有 `go build/test` 近乎停滞,并把工具链误判成死锁。规矩:① 负载**限核**(`GOMAXPROCS`/单包并行/`-p`)或**限时**(几分钟级),优先用「可控对抗条件 + 注入时钟 + 门控」而不是堆进程;② 压测结束**必须确认无残留进程**(`Get-Process yes` 之类计数为 0)再出证据;③ 出现「整机变慢/命令不动」先查**是不是自己刚起的压测进程**,再怀疑工具链。 - 🔴 **仓库根产物卫生(2026-10-04 实测事故,必守)**:`go build ./cmd/cyrene/...` 这类**单 main 包**命令会把可执行文件写到**当前工作目录** ⇒ 实测**静默覆盖**了正在用的发布产物 `cyrene.exe`(且不带 `-ldflags "-s -w"`,体积 39.3 MB → 49.1 MB)。规矩:**子代理一律不许跑会在仓库根产出可执行文件的构建** —— 只跑 `go build ./...`(多包 ⇒ 丢弃产物)、`go build ./<非 main 包>/...`、`go vet`、`go test`。**换二进制只允许**「`scripts\ctrl.bat build`(唯一权威构建,带 strip)+ **一次** `restart`」,且必须在**整树验收通过之后**执行(对齐「后端常驻」红线:换产物不留空窗)。