Decision Context 架构 v0¶
状态:实验契约
定位¶
Decision Context 是 LoopX 内置、默认关闭、goal-scoped 的高层决策 capability。
它运行在 LoopX Core 之上,消费 Core truth,但不进入
loopx/control_plane/,也不改变 todo、gate、quota、authority 的语义。
flowchart TD
CORE["LoopX Core<br/>goal · state · todo · gate · quota · event · vision"]
AUTH["Authority Sources<br/>canonical files · revisions · conflict rules"]
PROVIDER["Context Provider<br/>OpenViking / local search / others"]
RM["Reward Memory Capability<br/>学习可复用经验与策略"]
DC["Decision Context Capability<br/>重建当前决策上下文"]
AGENT["Controller / Agent / Human<br/>作出并确认决策"]
WRITEBACK["Core Lifecycle Writeback<br/>todo · next action · event · outcome"]
CORE --> DC
AUTH --> DC
PROVIDER --> DC
RM -. "可选经验来源" .-> DC
DC --> AGENT
AGENT --> WRITEBACK
WRITEBACK --> CORE
WRITEBACK -. "经验证、评审后的经验" .-> RM
代码位置:
- capability contract:
loopx/capabilities/decision_context/ - provider contract:复用
loopx/capabilities/context_providers/ - lifecycle truth:继续由现有 Core 管理
- OpenViking:可替换的 context provider,不是全局依赖或 action authority
为什么不是 Core¶
LoopX Core 拥有跨领域的生命周期与权限边界:
- registry、goal、state、todo、gate、quota;
- event、run、vision 与 restartable next action;
- authority、scope 和 validated writeback。
Decision Context 负责的是决策质量:
- 跨源 bounded recall 与 exact read;
- freshness、revision 与 conflict rebase;
- objective scoring;
- recommendation、alternatives、next actions 与 stop list;
- provider health 与 fail-open。
这些能力不应进入每个 goal 的默认热路径,也不能自行创造权限。默认关闭使 goal owner 可以显式选择场景、provider 和 agent lane。
与 Reward Memory 的关系¶
二者是同级 intelligence capability,但解决不同问题:
| Reward Memory | Decision Context | |
|---|---|---|
| 核心问题 | 过去学到了什么可复用经验? | 此刻决策需要相信哪些事实? |
| 生命周期 | candidate → review → activate → apply/retire | recall → exact read → rebase → propose → outcome |
| 主要对象 | policy、preference、procedural experience | fact、judgment、assumption、conflict、decision、outcome |
| 写入条件 | 经过验证和 authority review | 决策与结果作为可审计记录追加 |
| 动作权限 | 不创造 authority | 不创造 authority |
| 连接方式 | 可作为 Decision Context 的可选经验来源 | verified outcome 可产生 Reward Memory candidate |
三层 packet¶
decision_evidence_packet_v0¶
确定性、可审计的证据层:
changed_factsrecalled_claimsstale_or_rejected_claimsconflictssource_revisionsprovider_health
它不包含 recommendation、objective score 或 next action。provider 返回内容必须 经过 exact read 和 source revision 校验后,才能成为 accepted recalled claim。 语义召回失败时保留 provider health receipt,并 fail open 到 authority sources。
decision_proposal_v0¶
允许 Agent 推理的建议层:
objective_scoresrecommended_decisionalternativesnext_actionsstop_list
proposal 必须引用 evidence packet 的稳定指纹,并显式标记
authority_confirmation_required=true。它不能写成 Core truth。
decision_outcome_receipt_v0¶
追加式结果层:
accepted_decisionresulting_transitionsobserved_outcomesinvalidated_assumptionsreview_at
receipt 可由既有 event/run history 承载。只有
verification_status=verified 且有 outcome evidence 时,才可成为 Reward Memory
candidate;candidate 仍需经过 Reward Memory 自己的 review/activation 流程。
decision_outcome_feedback_v0 只接收 canonical、未被篡改的 evidence/outcome
packet,并输出聚合后的 retrieval telemetry。只有 exact read 提升的 claim 与同一
evidence packet 下的 verified outcome 直接关联时,才可生成一个
procedural_experience candidate。被拒绝的召回只进入 telemetry,不进入记忆;
适配层不会自动 ingest、review、persist 或 activate candidate。调用方可额外传入
canonical 的公开 retrieval receipt,以区分聚合后的 rejection record 数和被 exact
read 拒绝的真实 provider result 数。
增量信源层¶
Decision Context 不应依赖某个领域专用的 automation prompt,来记住应该读哪些群聊、
关键人、文档、仓库或外部信号。每个 goal 应维护一份私有 source registry,对外只投影
decision_source_manifest_v0:
- source id、类型、优先级、证据等级、调用方自定义 objective token、freshness 和扫描策略显式声明;
- provider locator 和原始 cursor 只保留在 goal 私有状态;
DecisionSourceProvider负责 bounded change scan 和 exact read;decision_source_scan_receipt_v0只保留 opaque ref、revision ref、计数、health 和 cursor fingerprint,不保留正文或 provider 原始返回;- provider 失败时 fail open,且不能创造 authority。
DecisionSourceProvider 与 ContextProvider 职责不同。前者从飞书、GitHub、文档、
邮箱等系统增量重建当前 authority;后者从 OpenViking 等系统召回 advisory context。
evidence assembler 可以同时消费两者,但冲突时当前 authority 优先。
flowchart LR
THIN["通用 thin host 唤醒"]
REG["Goal 私有 source registry<br/>locator · cursor · policy"]
SOURCE["DecisionSourceProvider<br/>scan · exact read"]
RECEIPT["Public-safe scan receipt<br/>opaque refs · health · counts"]
RECALL["ContextProvider<br/>advisory recall"]
EVIDENCE["Decision evidence packet"]
AGENT["Agent proposal"]
OUTCOME["Outcome receipt"]
THIN --> REG
REG --> SOURCE
SOURCE --> RECEIPT
RECEIPT --> EVIDENCE
RECALL --> EVIDENCE
EVIDENCE --> AGENT
AGENT --> OUTCOME
这样 steady-state automation prompt 可以退化为通用唤醒:启动 goal、遵循 active capability route、服从 quota。信源选择、增量窗口、exact-read 策略和写回全部由 capability 与 goal 配置承担。
不变量¶
- 三类 packet 都是 goal-scoped、public-safe、稳定指纹化的结构化记录。
- evidence 与 proposal 分离,模型建议不能伪装成事实。
- provider 不创造 authority;provider payload、raw chat、tool output、credentials 不进入 packet。
- recall 必须有界;accepted claim 必须保留 exact-read、revision 与 conflict receipt。
- proposal 只能建议,真实迁移继续经现有 todo、gate、quota 和 writeback。
- provider 不可用时 fail open,不阻断 Core lifecycle。
- verified outcome 先进入可审计 receipt,再决定是否提炼为 Reward Memory。
分阶段交付¶
P0:contract¶
- 固化三类 packet、稳定指纹、公共安全字段白名单和 provider-neutral 增量信源契约;
- 建立能力边界文档与聚焦测试;
- 不接具体 provider、CLI 或 control-plane writeback。
P0:evidence assembler¶
- 读取 authority revision、freshness 和 conflict rule;
- 加载私有 source registry,消费 bounded incremental scan receipt;
- 复用
ContextProvider做 bounded retrieval 和 advisory recall; - 输出 stale/rejected claim 和 provider fail-open receipt;
- 不采集 raw context。
P1:默认关闭入口¶
- 增加默认关闭、goal-scoped 的 profile/activation status/catalog;
- 增加 source-provider adapter,提供薄 CLI 编排 source scan、evidence 与 proposal;
- 飞书等领域 adapter 保持可选,公开状态不含凭据和私有 locator;
- 不修改 Core todo、gate、quota 或 authority 语义。
首个入口切片已实现严格的私有 profile 加载、goal/agent activation 状态、公开安全的
source manifest,以及显式配置、只读的 local-file source adapter。该切片刻意
停在 source 编排和私有 cursor checkpoint 之前。
第二个切片增加薄 host API assemble_profile_decision_evidence(...),以及只读的
CLI 预览 decision-context prepare-evidence。profile 会解析已启用的 source
provider,执行 bounded scan 与 exact read,并输出公开安全的 scan、revision、
health、evidence 和 cursor checkpoint 记录。host API 通过领域 rebase callback
消费瞬时正文,原始 cursor proposal 只留在进程内。CLI 则刻意不做语义 rebase:
只要 changed source 尚未被事实、拒绝项或冲突记录完整解释,cursor 就保持
preserve,避免把“扫描/读过”误记成“已吸收”。on_demand source 不进入自动
扫描,只有显式选择后才会读取。
私有 cursor commit 仍是独立验收边界。host API
commit_profile_decision_cursors(...) 现在显式执行这条边界:
- 验证 assembly、evidence、proposal、outcome 与 cursor checkpoint 的完整引用链;
- 精确回读既有 LoopX rollout event,并校验其
decision_id与 artifact refs 绑定同一组 packet; - profile 已变化或当前 cursor 不再等于 assembly 快照时拒绝提交;
- 通过文件锁、原子替换、fsync 与回读校验写入私有 cursor 文件;
- public receipt 只包含不透明 cursor ref,不包含原始 cursor 或私有路径。
source scan、evidence preparation 和 proposal 构建仍不会写 cursor;调用方只传 一个“writeback 成功”的布尔值,不足以触发提交。
私有宿主可以通过 source_provider_overrides 在运行时绑定 provider 实例。provider
id 必须先由私有 goal profile 声明,实例身份也必须与声明一致。这样 MCP、收件箱、
文档或仓库集成可以复用同一套 health、bounded scan、exact-read、rebase 与 cursor
checkpoint 路径,而不必把私有 adapter 注册进公开包。activation 只投影
runtime-bound;adapter 名称、配置、locator、payload 和 cursor 均留在私有边界。
provider 缺失或身份不匹配时 fail open,且不会推进 cursor。
P1:首个 dogfood¶
- 在一个私有、脱敏的决策助手场景生成 evidence/proposal;
- 通过既有 event/run history 写入 outcome receipt;
- 以“决策改变、真实结果、失效假设”而非召回条数验收。
P2:跨域验证与下沉门槛¶
在第二个独立领域复用,测量:
- authority source 命中;
- stale claim rejection;
- 因新证据发生的决策改变;
- outcome 校准质量。
双场景验证后,才考虑把以下窄机制下沉 Core:
decision_id → todo/next_action → outcome的通用事件关联;- source revision、freshness 与 conflict 的紧凑 read model;
- 通用
decision_outcome_receipt_v0; - provider health/fail-open 公共投影。
目标评分、跨仓扫描、语义召回和推荐决策继续留在 capability。
停止条件¶
- 若只能提高召回数量,不能改变决策或产生 outcome receipt,停止扩展 provider。
- 若需要修改 Core authority 语义才能接入,回退并重新划分 capability 边界。
- 若 raw context 或私有来源无法在 packet 前被压缩和脱敏,拒绝写入。
- 若单场景无法证明 stale rejection 与 decision-to-outcome 关联,不推进 Core 下沉。