把老且长期不活跃的意图/事实折叠成 digest 节点进 graph_overview 展示, 原始节点永久保留、按 id 可完整还原(存储无损、只压呈现、折叠可逆)。 - 数据模型:KindDigest 节点 + RelCovers 边(真相源);新列 content_version、 cold_since_round(节点级)、round_no(任务级 planner 轮次);均带旧库迁移。 - 纯算法(coldgraph.go):冷热判定(逆向可达 + 任一活分支即热) + R=6 轮防抖 + 连通分量分组(§3) + §3.1 同父兄弟归组(救"热 hub+扁平死叶") + §5.3 签名。 - 后台压缩(compaction.go):minor 折未覆盖冷块(tiered)、major 回源重压合并碎片; 签名幂等复用 body;提交时活跃度复核(绝不覆盖已复活节点);60s 冷却 + 互斥。 - 概览折叠(§6):recent_* 剔除已折成员 + 渲染时复活检查;cold_digests + 按资产 索引 cold_index(§6.2);expand_digest/expand_index 还原;covered_members 反查 悬空血缘 id;60 兜底截断均衡保 live。 - planner 每轮 OnPlannerRound 维护戳记并触发后台压缩,绝不上热路径。 纯算法单测覆盖 §附/§3.1/§2.3/§5.3;已对 437 节点真实图验证:热 86、冷候选 324、 §3.1 分组 47 块 + 14 孤立冷点(对齐设计文档实测校验)。
36 lines
1.6 KiB
Go
36 lines
1.6 KiB
Go
package db
|
|
|
|
// Exploration node kinds (exploration_nodes.kind).
|
|
const (
|
|
KindBegin = "begin" // DEPRECATED: legacy task root; new tasks seed an origin fact (KindFact + StateOrigin) instead
|
|
KindGoal = "goal" // a task objective
|
|
KindIntent = "intent" // an exploration direction (planner-generated)
|
|
KindFact = "fact" // a worker's exploration result/conclusion (incl. negative results), tied to its intent
|
|
KindFinding = "finding" // a confirmed vulnerability (report_finding), distinct from a fact
|
|
KindHint = "hint"
|
|
KindDigest = "digest" // a compressed fold of cold intents/facts (cold-digest-spec §1); lossless — members kept, restorable by id
|
|
)
|
|
|
|
// Digest node states (kind='digest'). A digest is 'active' while it renders in
|
|
// graph_overview; major compaction retires a merged-away segment to 'superseded'
|
|
// (its covers edges repointed to the new digest) — cold-digest-spec §5.1.
|
|
const (
|
|
StateDigestActive = "active"
|
|
StateDigestSuperseded = "superseded"
|
|
)
|
|
|
|
// StateOrigin marks the task root fact (KindFact) seeded at task creation — the
|
|
// exploration graph's origin. Every intent traces back to it, so "an intent must
|
|
// connect to a fact" holds uniformly from the very first intent. Worker-produced
|
|
// facts use state 'confirmed', so this never collides.
|
|
const StateOrigin = "origin"
|
|
|
|
// Exploration edge relations (exploration_edges.rel).
|
|
const (
|
|
RelSpawns = "spawns"
|
|
RelDerivedFrom = "derived_from"
|
|
RelYields = "yields"
|
|
RelProves = "proves"
|
|
RelCovers = "covers" // digest --covers--> member (cold-digest-spec §1); source of truth for "which digest folds node X"
|
|
)
|