决策快照结构化落库 + 全触发路径覆盖 #86
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feature/79-decision-snapshot"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #79
把散落在各触发路径的非结构化
logger.debug决策日志,收敛成一份结构化、可持久化、可查询的记录。既有logger.debug一条没删(继续作运行时可观测性),但"事后能查"这个能力不再依赖日志文本解析。本片只做写入侧与存储侧,/why是后续 ticket。做了什么
decision_snapshot.py:DecisionSnapshot/GateSnapshot/ 存储 port 切片 +snapshots_to_evict保留策略纯函数ReportRecalledEvents/ReportPendingIntents):RuntimeLoop只报"我这轮注入了这些 id",不知道接收方拿它做什么。收集器由_build_runtime_loop必填收下,五条路径全经由那个入口,"某条路径忘了收集"在类型层面不可能发生实现期的几个取舍
gate=None,不伪造"全部通过"。Callback 送回(issue #53"履约不是能动性决策")真的不经门控;伪造通过记录会让/why无法区分"评估过并放行"与"压根没评估",也会让 ADR-0011 的阈值标定吃进不存在的通过样本。情感态仍记实测值——没有门控不等于没有情绪。config.py那个字段的文档里(权威处)。_GateOutcome)。若写快照时重新读,期间 tier-1 传染/衰减都可能改它,快照就会报一个决策从未依据过的情绪值。一条触发因此收敛为只读一次。trigger_path与gate.trigger_kind是两个独立事实。私聊的即刻追问复用 Drive Tick 扫描器执行,语义上却是追问——记trigger_path="immediate_followup"同时记gate.trigger_kind="periodic"。_write_decision_snapshot文档,不让它读起来像覆盖已完备。顺带修的越界问题
storage.py::ensure_schema原本是一份手写模型名单,它已经漏了两张表:arise_pull_consents(issue #71)与arise_sticker_learning_settings(issue #70)从未被建过,真实部署上一碰就报 no such table。改成按"模型类定义在本包里"筛选(不用表名前缀——那会抢建任何名叫arise*的第三方插件的表,而那类插件通常自己用 alembic 管 schema),并补tests/test_schema_coverage.py守住。根因不是粗心,是此前没有任何测试断言 ensure_schema 覆盖了本包全部模型,而那两张表的持久化路径从未被跑过。验证
1141 测试全绿(顺序 +
-n auto并行满载各一遍)。按 AC 用变异测试验覆盖完整性:逐条把某路径的写入变成 no-op,只挂掉该路径自己的测试;两个窄回调的接线、config 旋钮、并列时间戳排序、建表覆盖网各自也变异验过。
两轴 review 后修掉的问题(第二个 commit)
标准轴与规格轴独立撞上同两个问题,都是真的:
sorted(reverse=True)稳定排序、等键保持插入先后,于是"最近的在前"列表实际最旧在前,裁剪取尾部正好删最新的——恰是snapshots_to_evict文档里警告过的失效模式。两套实现都补(created_at, 写入序号)确定性排序(持久化侧加seq列)。_GateOutcome那条改用第二次读会漂移的存储替身;保留条数那条改成压低 config + 跑真实触发路径(原先全程不碰 config,把读 config 那行改成硬编码也全绿);Callback 路径那次情感态读取补上断言。本轮新加的建表覆盖测试我自己也先踩了同一个坑(期望集合取自被测函数自身),已改为独立枚举推导。cooldown_state is None那支上游已continue、且冷却记录没有删除 API,永不执行——我把一层防御性冗余包装成了 AC 要求的路径覆盖。删掉写入。drive_tick,/why会把"我刚问了你、你没回"错报成"它主动想找你说话"。ADR-0010 已在
docs分支回填上述口径(本地 commit)。