Status: Ready for phased implementation after Phase 0 contract freeze
Scope: 将比较式知识提炼、知识生命周期、Decision-Point Retrieval、Recall Decision Outcome、Evidence/Knowledge/Recall Input Snapshots、Procedure Record、Reference Retrieval 和 legacy 隔离落实为可迁移、可测试、可回滚的代码
Owner: AI-Researcher maintainers
Last updated: 2026-07-31
Governing design: Verified Research Memory
Validation contract: Memory effectiveness evaluation protocol
Related authority: Experience-Driven Research Loop、 Durable Research Runtime、 Context-Aware Tool Use、 Experience Gain next-round plan 和 Phase A specification
本文中的 MUST / MUST NOT / SHOULD / MAY 是规范性要求。
本计划不是“换一个向量库”,而是完成三个有 Depth 的 Module:
KnowledgeDistiller:把可比较、可验证的 Experience 编译为条件—动作—效应 Knowledge/Procedure,并治理冲突和生命周期;DecisionPointRetriever:在明确决策点按 scope、状态、动作和证据质量返回有界 Evidence Cards;MemoryAcceptanceHarness:由benchmark/memory/harness.py统一装配 offline、 causal、artifact assembly 和 validator Interfaces,从 writer、retrieval、 utilization 一直验证到真实执行和 Experience Gain。
第一条 vertical slice 只激活 intervention Decision Point,并复用 Phase A 已有的
Intervention Catalog、PreviousAttemptFeedback、Manipulation Check 和 Trial
Provenance。其他 Decision Point 在同一 Interface 稳定后逐步开启。
交付完成后可以声称:
系统能从可比较的 verified Experience 生成受治理知识,在一个明确决策点精确 召回,记录采用/拒绝,并证明被采用的 citation 映射到实际执行配置。
只有通过配套确认性协议后才可以进一步声称:
Verified Research Memory 在预注册 evaluation pairs 上、按冻结的
transfer_scope提高了 AI Researcher 的最终科研结果;只有held_out_evaluation_task结果可称“未见任务”。
实施基线是 main@5cd60ec,Phase A 位于 f585de4。
当前代码事实:
SQLiteExperimentLedgerschema revision 是2;schema 0 可以迁移到 2,其他 版本 fail closed;- 原有
KnowledgeRecord、PromotionDecision、RecallRequest和RecallContext都是schema_version="1"的 frozen Pydantic payload; - 给旧 model 增加默认字段会改变重新序列化字节,违反 ledger idempotence;
ImprovementCycleRunner在迭代前调用ExperienceRunAdapter.before_run(),但 RecallRequest 没有 PreviousAttemptFeedback、Evaluation Contract Decision Point 或 Intervention Catalog;ExperienceRunAdapter生产装配硬编码KeywordExperienceRetriever,并在提交 前修改共享KnowledgeGate的 domain/model;ExperienceLoop.after_run()逐步 append Experience、Knowledge、Promotion Decision,Knowledge batch 不是原子提交;- 当前 ledger-wide
snapshot_id()对所有 raw Experience/Intervention/Provenance 敏感,不是 Knowledge Snapshot; - Phase A 已能把 proposal citation、Intervention、effective config、runner manifest 和 Verification 串起来,但没有逐 Recall Item 的采用/拒绝记录;
memory/store.py、consolidation.py和meta_chain_wrapper.py不在可信 production closed-loop 路径中;paper/code/tool RAG 仍被部分工具使用。
以下行为必须保持:
- 旧 ledger payload byte identity;
- Phase A Attempt/Intervention/Trial Provenance ID 和 dry-run 可重放性;
- Evaluation Contract 和 private evaluator isolation;
- memory-off、record-only、现有 legacy 路径的显式兼容模式;
- InMemory 与 SQLite Adapter 的共同 contract suite;
- Durable Runtime 对 Run/Activity/Effect/Artifact/Budget 的唯一所有权。
- Governed Intervention 和合法 knob surface;
- effective config/no-op Manipulation Check;
- source/config/dataset/environment/contract/evidence digests;
- verified feedback 回到下一轮;
- SQLite immutable ledger 和 sidecar migration 模式。
- Phase B response-surface calibration 可以和 memory schema/writer 开发并行;
- Durable Runtime 可以和 memory data-plane 开发并行;
- offline writer/retrieval acceptance 不依赖 Durable Runtime 全部 release gates。
- Memory mechanism Pilot 只要求冻结预算、workspace/arm 隔离、完整 lineage、 失败保留和可重放 evidence;
- production 集成发布必须同时通过 Memory gates 和 Durable Runtime release gates;
- 正式 Experience Gain 必须先通过 task response-surface/sensitivity gate;
- 若 power analysis 所需样本超过预算,结论是“证据不足”,不得截断样本后 claim。
| 文件 | Module / 责任 |
|---|---|
research_agent/inno/experience/memory_models.py |
所有新 immutable memory models 和 canonical ID helpers |
research_agent/inno/experience/policies.py |
Distillation/Lifecycle/Snapshot Selection/Retrieval policy schemas、load 和 digest validation |
research_agent/inno/experience/distillation.py |
KnowledgeDistiller 深 Module;比较、support、candidate、promotion/procedure proposal;executor 不写 Ledger |
research_agent/inno/experience/distillation_outbox.py |
queued enqueue 前的 Work-Item-owned Campaign Admission Profile artifact handoff、durable Work Item 扫描、immutable campaign manifest、独立 MEMORY_DISTILLATION Run admission、AWAITING_ASSIGNMENT proof/CAS、Runtime-authorized atomic commit/no-commit-conflict/closure reconciliation;artifact bytes/GC、handoff、claim lease 均归 Runtime |
research_agent/inno/experience/lifecycle.py |
lifecycle reducer、transition validator、active-view projector;只供 distiller/snapshot 使用 |
research_agent/inno/experience/retention.py |
authorized retraction/tombstone、separately stored payload/artifact erasure receipt 与 index invalidation;保留 non-private canonical audit projection |
research_agent/inno/experience/indexes.py |
lexical 与 real-embedding Candidate Index Adapters;禁止 production hash semantics |
research_agent/inno/experience/snapshot.py |
EvidenceSnapshotBuilder、KnowledgeSnapshotBuilder、RecallInputSnapshotBuilder;分别拥有 evidence capture、active-view freeze、ready-index composition |
research_agent/inno/experience/ledger_migrations.py |
schema declaration、0→2→3 / 2→3 migration 和结构验证 |
research_agent/inno/reference_index/{models.py,retrieval.py,indexes.py} |
Source/Reference Retrieval Module、typed Reference Cards 和 rebuildable source indexes |
research_agent/inno/experience/procedure_binding.py |
校验 Procedure step 只引用 pinned Capability Catalog 中既有 capability ID/version;不授予 authorization |
benchmark/memory/schemas.py |
claim/shared/stage/root、signed registry/partition/exposure、Pilot Gate、terminal-status、report 和 final validation receipt schemas |
benchmark/memory/requirements-v1.yaml |
每个 VRM/MEM ID 唯一 owner、exact pytest node、check name、stage 和 blocking artifact;validator 的 expected-ID registry |
benchmark/memory/campaign_registry.py |
configured Registry Authority trust anchor/signatures、append-only Admission/Closure/Exposure/No-Visibility atomic CAS、hash-chained lineage/global frontiers 与 exact/cross-lineage enumeration;任意 SQLite 只是 storage client |
benchmark/memory/hidden_partition_authority.py |
evaluator-only opaque/keyed member commitments、all-hidden-stage non-overlap、deterministic reserve-prefix selection 与 signed receipts;actor 不可读 members/key |
benchmark/memory/validation_authority.py |
configured signing/verification Adapter for final acceptance receipts;trust anchor 必须由 Claim Plan/root pin,禁止 validator 自签临时 key |
benchmark/memory/harness.py |
MemoryAcceptanceHarness public Interface;协调三个 runner、assembly 和独立 validator,不重实现指标 |
benchmark/memory/run_offline_acceptance.py |
writer/retrieval/utilization/robustness/scale runner |
benchmark/memory/run_ideation_acceptance.py |
paired fresh-start vs memory-shadow ideation quality/diversity runner;产出 ideation_diversity_report.json |
benchmark/memory/run_causal_acceptance.py |
paired ITT causal runner 和审计 |
benchmark/memory/select_retrieval_adapter.py |
仅在 visible development corpus 按冻结 rule 选择唯一 release Adapter,写 immutable RetrievalAdapterSelectionReceipt;不得读取 hidden |
benchmark/memory/legacy_baseline.py |
benchmark-only read-only LegacyBaselineAdapter;只服务隔离 C2 arm,冻结 legacy algorithm/record-set/budget identity |
benchmark/memory/freeze_manifests.py |
pre-visibility 冻结 ScientificClaimPlan/lineage/decision rules、partition/shared/stage identities;Pilot 只按 frozen rule 决定 N,authority 冻结 confirmatory selection;正常 closure 就绪后生成无 hash-cycle root,或对 signed frontier 中 open/invalid admission set 生成 claim=none 的 audit-only invalid root |
benchmark/memory/validate_pilot_gate.py |
独立枚举 signed registry frontier,绑定 offline/selected ideation/A/A/Pilot exact closures、all-stage overlap 和排除最终 CA003 row/root provenance 的 L0–L2 PilotPrerequisiteAssessment,对 pass/fail/invalid 均签发 terminal PilotGateReceipt |
benchmark/memory/assemble_acceptance.py |
read-back stage shards,按 manifest digest 聚合 release-root artifacts;拒绝 mixed campaign |
benchmark/memory/validate_acceptance.py |
独立 read-back validator、requirement/claim gate、mixed-campaign 检测,并由 pinned Validation Authority 签发 final receipt |
benchmark/memory/artifact_store.py |
AcceptanceArtifactStore 的唯一 immutable receipt/object/report read-back 与 exact-once write owner;Harness 不接受裸 manifest object/path |
benchmark/memory/policies/{distillation-v1,lifecycle-v1,snapshot-selection-v1,retrieval-v1}.yaml |
四种冻结 policy fixtures、各自 canonical content ID/digest vectors |
benchmark/memory/registry-authority-v1.json |
Registry/Validation public trust anchors、service/signing epochs 与 signed genesis;private keys 不进仓库 |
benchmark/memory/corpus/v1/manifest.json |
development/hidden split schema 和 evaluator-only artifact commitments |
benchmark/memory/corpus/v1/development/{writer_cases,retrieval_queries,adversarial_cases,annotations}.jsonl |
可见开发 fixtures;不得进入 formal release denominator |
benchmark/memory/corpus/v1/hidden-manifest.json |
仅 evaluator-only refs/digests、keyed commitment roots/counts 和 authority identity;仓库不存 cases/gold、raw fingerprints 或 key/salt |
benchmark/memory/manifests/v1/objects/sha256-<digest>.json |
ScientificClaimPlan、shared/stage/root 等 canonical content-addressed objects;永不覆盖 |
benchmark/memory/manifests/v1/lineages/<lineage-id>/*.json |
immutable receipt/ref files,绑定 object ref/digest;固定友好文件名不得作为权威 identity |
benchmark/memory/manifests/v1/lineages/<lineage-id>/stages/*.json |
独立 Stage Manifest receipts;同 lineage/shared/claim plan,不同 campaign IDs |
benchmark/memory/manifests/v1/lineages/<lineage-id>/roots/release-<ceiling>-<claim-kind>.json |
claim-scoped immutable receipt,绑定 content-addressed root object/digest;L5 绑定并 supersede base root |
benchmark/memory/preregistration/v1/{decision-contract,families,offline,ideation,aa,pilot,confirmatory}.yaml |
pre-Pilot endpoints/margins/alpha/decision rules、family/transfer plan 与各 stage arms、完整资源边界、随机化、failure utility、power/stopping rule |
benchmark/memory/preregistration/v1/retrieval-candidates.yaml |
development selector 可比较的 Adapter/policy identity 闭集、schema version 与每个 content digest;禁止 runtime/hidden 动态 candidate |
benchmark/memory/preregistration/v1/retrieval-selection-rule.yaml |
visible-development selection estimand、threshold、deterministic tie-break、N/A/failure rule、schema/code digest;hidden result 不得成为输入 |
distillation.py 和 retrieval.py 是对调用方有 Depth 的 Module。不要把 comparison、
filter、rank、lifecycle 或 token budgeting 拆成由调用方排序的一串 shallow helper。
纯函数可以存在于 Implementation 内部,但外部测试通过 Module Interface 驱动。
| 文件 | 改动 |
|---|---|
research_agent/inno/experience/models.py |
保留 raw Experience model 和 legacy v1 memory model;加清晰 deprecation 注释,不改字段 |
research_agent/inno/experience/knowledge.py |
legacy KnowledgeGate 仅供 legacy_recall;新入口 re-export/装配 KnowledgeDistiller |
research_agent/inno/experience/retrieval.py |
保留 legacy baseline;实现 DecisionPointRetriever 与统一 deterministic final ranker |
research_agent/inno/experience/ledger.py |
拆分窄 store Protocol、schema v3 append/query/transaction;新 append 和 Verified Evidence Bundle 都交叉验证 nested/canonical rows;不再内嵌全部 migration 常量 |
research_agent/inno/experience/loop.py |
从外部 coordinator 收窄为 Runtime Activity 内部 Adapter;after-run 允许 defer,调用幂等 distiller |
research_agent/inno/experience/intervention.py |
增加每 Recall Item 的 disposition 和 citation-to-action mapping model |
research_agent/runtime/experience_adapter.py |
依赖注入 Retriever/Distiller/Snapshot;新增 REQUIRED-only prepare_required_decision + commit_required_decision_context 与 explicit no-decision-memory branch;移除硬编码和共享 gate mutation |
research_agent/runtime/improvement_cycle.py |
每轮在 exact Decision Point 构造 recall;下一轮使用自己的 PreviousAttemptFeedback |
research_agent/runtime/adaptive_experiment.py |
验证 Recall disposition 全覆盖、adopted rule/action 匹配并持久化 Recall Decision Outcome |
research_agent/runtime/research_pipeline.py |
移除将同一 Recall Context 注入多个阶段;按 profile 渲染 Evidence Cards |
research_agent/run_infer_plan.py |
只在当前启用 Decision Point 取对应 context;不再复用全局 prose guidance |
research_agent/run_infer_idea.py |
同上;ideation 新路径先 shadow 并保留 fresh-start branch |
research_agent/inno_common.py |
新增 policy/snapshot/rollout CLI 引用;具体 index 参数放在 policy 文件 |
research_agent/inno/experience/__init__.py |
导出稳定新 Interface 和 models;legacy 名称显式标记 |
research_agent/inno/memory/*.py |
按第 13 节隔离/重命名,不再向 trusted knowledge path 暴露写入 |
README.md |
移除 episode→summary→fact 即科研 Knowledge 的陈述,标识 legacy primitives |
tests/test_experience/
factories.py
test_memory_models.py
test_knowledge_store_contract.py
test_distillation_outbox.py
test_knowledge_distillation.py
test_knowledge_lifecycle.py
test_memory_retention.py
test_evidence_snapshot.py
test_knowledge_snapshot.py
test_recall_input_snapshot.py
test_decision_intent.py
test_decision_point_retrieval.py
test_recall_utilization.py
test_reference_memory.py
test_procedures.py
test_legacy_memory_isolation.py
tests/test_runtime/
test_decision_recall_integration.py
tests/test_benchmark/
test_memory_acceptance_report.py
test_memory_claim_gate.py
test_ideation_fresh_start.py
现有测试不得继续从另一个 test module 导入 build_records;共同 fixture 移到
tests/test_experience/factories.py。
当前巨型 ExperimentLedger Protocol 保留兼容入口,但新 Module 只依赖窄
Interface:
class VerifiedEvidenceStore(Protocol):
def capture_verified_evidence(
self, request: FreezeEvidenceRequest
) -> EvidenceSnapshotCommitReceipt: ...
def get_evidence_snapshot(self, snapshot_id: str) -> EvidenceSnapshot: ...
def get_evidence_capture_receipt(
self, capture_operation_id: str
) -> EvidenceSnapshotCommitReceipt: ...
def get_verified_evidence_bundle(
self, snapshot_id: str, experience_id: str
) -> VerifiedEvidenceBundle: ...
def enqueue_distillation(
self,
receipt: ExperienceDistillationReceipt,
work_item: DistillationWorkItem | None,
abandoned_work_item: DistillationWorkItem | None,
profile_artifact_proof: WorkItemProfileArtifactProof | None,
abandonment_proof: DistillationEnqueueObligationAbandonedProof | None,
) -> DistillationEnqueueReceipt: ...
def list_unassigned_distillation(
self, *, namespace: str, page_after_position: int | None, limit: int
) -> PositionedDistillationPage[DistillationWorkItem]: ...
def append_distillation_assignment(
self,
assignment: DistillationWorkAssignment,
runtime_proof: DistillationCampaignRuntimeProof,
) -> LedgerAppendReceipt: ...
def list_assigned_incomplete_distillation(
self, *, campaign_run_id: str, page_after_position: int | None, limit: int
) -> PositionedDistillationPage[DistillationWorkAssignment]: ...
def get_distillation_campaign_coverage(
self, campaign_run_id: str, barrier_proof: CampaignBarrierReadProof
) -> DistillationCampaignCoverageProof: ...
def append_distillation_closure(
self,
completion: DistillationWorkCompletion,
authorization: DistillationClosureAuthorizationProof,
) -> LedgerAppendReceipt: ...
def get_distillation_work_item(self, work_item_id: str) -> DistillationWorkItem: ...
def get_experience_distillation_receipt(
self, experience_id: str
) -> ExperienceDistillationReceipt: ...
def get_distillation_enqueue_receipt(
self, experience_id: str
) -> DistillationEnqueueReceipt: ...
def get_distillation_enqueue_transaction(
self, work_item_id: str
) -> DistillationEnqueueTransaction: ...
def get_distillation_enqueue_recovery_proof(
self, request: DistillationEnqueueRecoveryRequest
) -> DistillationEnqueueRecoveryProof: ...
def get_distillation_assignment(
self, work_item_id: str
) -> DistillationWorkAssignment | None: ...
def get_distillation_assignment_proof(
self, work_item_id: str
) -> DistillationAssignmentProof: ...
def get_distillation_completion(
self, work_item_id: str
) -> DistillationWorkCompletion | None: ...
class KnowledgeStore(Protocol):
def commit_distillation(
self,
plan: DistillationCommitPlan,
completion: DistillationWorkCompletion,
authorization: DistillationCommitAuthorizationProof,
) -> DistillationCommitReceipt | DistillationNoCommitReceipt: ...
def get_distillation_batch(self, batch_id: str) -> DistillationBatch: ...
def get_distillation_report(self, report_id: str) -> DistillationReport: ...
def get_distillation_commit_conflict(
self, conflict_id: str
) -> DistillationCommitConflict: ...
def get_distillation_work_disposition(
self, work_item_id: str
) -> DistillationWorkDisposition: ...
def load_memory_state(self, position: int) -> ImmutableMemoryState: ...
def commit_knowledge_snapshot(
self, snapshot: KnowledgeSnapshot
) -> SnapshotCommitReceipt: ...
def get_knowledge_snapshot(self, snapshot_id: str) -> KnowledgeSnapshot: ...
def get_memory_record(
self, memory_id: str
) -> SemanticKnowledgeRecord | ProcedureRecord: ...
class RecallStore(Protocol):
def append_contract_view(
self, view: DecisionContractView
) -> LedgerAppendReceipt: ...
def append_decision_intent(
self, intent: DecisionIntent, admission_proof: DecisionIntentAdmissionProof
) -> DecisionRecallAppendReceipt | DecisionRecallNoCommitReceipt: ...
def append_recall_input(
self, snapshot: RecallInputSnapshot
) -> LedgerAppendReceipt: ...
def append_decision_recall(
self,
context: DecisionRecallContext,
authorization: DecisionRecallCommitAuthorizationProof,
) -> DecisionRecallAppendReceipt | DecisionRecallNoCommitReceipt: ...
def append_recall_outcome(
self,
record: RecallDecisionOutcome,
authorization: DecisionRecallCommitAuthorizationProof,
) -> DecisionRecallAppendReceipt | DecisionRecallNoCommitReceipt: ...
def append_outcome_attempt_link(
self, link: RecallOutcomeAttemptLink
) -> LedgerAppendReceipt: ...
def get_contract_view(self, view_id: str) -> DecisionContractView: ...
def get_decision_intent(self, intent_id: str) -> DecisionIntent: ...
def get_decision_intent_coverage(
self, run_id: str, barrier_proof: DecisionIntentBarrierReadProof
) -> DecisionIntentCoverageProof: ...
def get_recall_input(self, snapshot_id: str) -> RecallInputSnapshot: ...
def get_decision_recall(self, context_id: str) -> DecisionRecallContext: ...
def get_recall_outcome_by_intent(
self, intent_id: str
) -> RecallDecisionOutcome: ...
def get_decision_recall_no_commit(
self, authorization_id: str
) -> DecisionRecallNoCommitReceipt: ...
def get_decision_recall_append_receipt(
self, authorization_id: str
) -> DecisionRecallAppendReceipt: ...
def get_outcome_attempt_link(
self, outcome_id: str
) -> RecallOutcomeAttemptLink | None: ...
class DecisionRecallArtifactRead(Protocol):
def get_decision_recall_blocked_proof(
self, blocked_source_proof_ref: str
) -> DecisionRecallBlockedProof: ...
class IndexStore(Protocol):
def append_ready_index(
self, receipt: DerivedIndexBuildReceipt
) -> LedgerAppendReceipt: ...
def append_index_failure(
self, failure: DerivedIndexBuildFailure
) -> LedgerAppendReceipt: ...
def get_ready_index(self, build_id: str) -> DerivedIndexBuildReceipt: ...
def get_index_failure(self, failure_id: str) -> DerivedIndexBuildFailure: ...
class RetentionStore(Protocol):
def begin_erasure(
self,
intent: RetentionErasureIntent,
retraction_event: KnowledgeLifecycleEvent | None,
) -> RetentionIntentCommitReceipt: ...
def get_erasure_intent(
self, incident_id: str
) -> RetentionErasureIntent | None: ...
def list_open_erasure_intents(
self, *, namespace: str, page_after_position: int | None, limit: int
) -> PositionedRetentionPage[RetentionErasureIntent]: ...
def append_tombstone(
self,
tombstone: MemoryRetentionTombstone,
proof: RetentionReconciliationProof,
) -> LedgerAppendReceipt: ...
def get_tombstone(
self, target_kind: str, target_id: str
) -> MemoryRetentionTombstone | None: ...
def check_recall_input(
self, recall_input_id: str
) -> RetentionCheck: ...
class RetentionRuntimeRead(Protocol):
def get_artifact_erasure_receipt(
self, receipt_ref: str
) -> ArtifactErasureReceiptProof: ...
def get_index_invalidation_receipt(
self, receipt_ref: str
) -> IndexInvalidationReceiptProof: ...每个 LedgerAppendReceipt 返回 logical ID、canonical payload digest、namespace 和
原始 commit position;exact retry 返回相同 receipt。
DecisionRecallArtifactRead 由 Runtime Artifact Store 实现,并注入 Runtime issuer 与
RecallStore Outcome transaction validator。getter 必须从 immutable content-addressed
artifact 独立读取、重算 object/proposal digest,再逐字段返回 typed
DecisionRecallBlockedProof;调用方自带的对象、ref 或 digest 都不能替代该 read-back。
append_distillation_assignment() 必须先按 deterministic Assignment ID 查询 canonical
row+journal:若 exact payload/manifest/Run/Activity 相同,直接返回原 receipt,即使
Runtime Activity 已从 AWAITING_ASSIGNMENT 进入 READY/terminal;same ID/different
payload fail closed。只有 row 不存在的首次 insert 才要求 fresh
DistillationCampaignRuntimeProof 显示 nonterminal Run、owned Activity 和当前
AWAITING_ASSIGNMENT。这样 reply-loss retry 不依赖不可逆的旧 Runtime phase。
DecisionRecallAppendReceipt 另返回 transition kind 与 exact admission/commit
authorization ID/digest,并可按 authorization ID 从 Store getter read-back。Intent/
Context/Outcome success 后 Runtime 必须同时 read-back canonical record 与该 receipt,再
推进 phase;same record/same authorization exact retry 返回原 position,same record/
different authorization 或 same authorization/different record 是 identity conflict,不能
把 foreign/orphan record 洗成已授权成功。
EvidenceSnapshotCommitReceipt 包含完整 Evidence Snapshot 和其唯一
LedgerAppendReceipt,以及 capture-operation receipt/position;调用方必须再通过
get_evidence_snapshot() 与 get_evidence_capture_receipt() read-back 并复算 snapshot
ID、payload/request digests 与原始 positions。same capture operation/same request exact
retry 先返回原 mapping,即使 current Evidence frontier 已推进;same key/different request
是 identity conflict。DistillationEnqueueReceipt
包含 ingestion receipt、nullable Work Item receipt,以及对二者有序 projection 的
transaction digest;queued 时还包含 immutable
enqueue_transaction_id/digest、handoff/ref ID、首次成功 enqueue attempt
ID/generation/fence 与原 proof digest,且两项 Ledger receipt 必须
同时存在;abandoned_before_enqueue 只含 ingestion receipt、abandoned Work Item ID、
frozen Work Item payload digest 与 Runtime abandonment proof ref/digest,并禁止 committed
Work Item/profile proof;deferred/not-required
只含 ingestion。它可按
Experience ID 从 getter read-back,供 Runtime 完成 handoff bind。
Runtime 必须通过上列对应 getter
read-back 并重算 digest 后才能提交 cross-store Activity result。getter 缺失、
payload mismatch 或 intent/context/outcome lineage mismatch 进入 reconciliation,
不能仅凭 append 无异常就认为已提交。multi-record
DistillationCommitReceipt 同理返回可 read-back 的 canonical
DistillationBatch、DistillationReport,并列出 batch 内每个 canonical logical
append receipt(包括 Batch、Report 和 successful Completion 自身);normalized child
projections 由 parent getter read-back。append_distillation_closure() 只接受
dead_letter/cancelled,successful Completion 只能由 commit_distillation() 与
Knowledge/Batch/Report 在同一 Ledger transaction 写入。
跨 Store 调用拓扑是显式的:Runtime control transaction 只负责 grant 并提交 immutable
authorization/proof;它不在 control thread 内同步调用 Ledger。独立、system-owned
Commit Coordinator 在没有任何 Runtime 或 Ledger write transaction时通过 read-only
Runtime service 取得并验证 proof/proposal/plan,关闭该 read request 后才打开 Ledger
transaction。Ledger commit 完成后 Coordinator 再把 receipt/ref 交给 Runtime reconcile。
Runtime control 因此可以并发服务 proof getter,不会产生 control→Ledger→control
self-deadlock。GRANTED proof 在 arbitration 结束前不可撤销;Pause/Cancel/failure 只能按
规定 busy/pending,因此 Store 在本地 transaction 中验证已 read-back 的 immutable
digest-bound proof 不存在 revoke TOCTOU。禁止持任一 SQLite write transaction 做
跨-store IPC;process-kill/restart/deadlock contract test 必须覆盖该拓扑。
若 lifecycle expected-head 已失效,helper 必须在任何 Batch/Knowledge write 前走
DistillationNoCommitReceipt 分支:semantic transaction 写入为 0,只追加并 read-back
一个 typed DistillationCommitConflict。Runtime 只有验证该 conflict 后才能 retire
authorization、递增 generation/fence 并重新 propose;旧 authorization 随后不可再用。
两个 terminal-coverage getter 都要求 Runtime-authored barrier proof:它内嵌 exact
TerminalBarrierFreezeProof,绑定 Run/spec/manifest(campaign 时)、freeze ID/递增 epoch/
candidate terminal kind、new_work_admission_closed=true、无 unresolved relevant
authorization、current control event/fence 和 proof digest。pending cancel/failure 的早期
gate-close event 不可冒充 terminal freeze;normal success 也必须产生 freeze。Store 验证
proof 后在一个
read transaction 固定 ledger frontier,并返回该 frontier 下按 canonical IDs 排序的完整
集合与 coverage digest:
DistillationCampaignCoverageProof枚举所有引用 campaign Run 的 Assignment、 Completion、Work Item 和 Activity ID,不分 terminal/incomplete;Runtime 与 exact manifest 比较,能证明 missing/duplicate/foreign=0;DecisionIntentCoverageProof枚举该 Run 的每个 Ledger Intent、admission metadata、 optional Context/Outcome IDs/digests;Runtime 与全部 REGISTERING/OPEN+ phase 双向比较, 能发现 Ledger-only orphan 与 Runtime-only ghost。
terminal CAS 必须重验 barrier proof freeze ID/epoch/terminal kind/control event/fence 并绑定
coverage frontier/digest;
旧 proof 不能完成 Run。getter 不得用 list_assigned_incomplete_distillation() 或 Runtime
自身 phase 代替,因为二者都无法证明不存在已完成 foreign row。
InMemoryExperimentLedger 和 SQLiteExperimentLedger 是两个真实 Adapters,均
满足相同 contract suite。capture_verified_evidence() 在一个 Store lock / SQLite
BEGIN IMMEDIATE transaction 内先按 capture_operation_id 查询 mapping;exact
request 立即返回原 snapshot/journal receipts,different request conflict。只有 mapping
缺失才确定当前单调 Evidence frontier、选择 exact members、
交叉验证 canonical Hypothesis/Attempt/Observation/Verification/Intervention/
Trial Provenance,再原子提交 snapshot/members、capture-operation mapping 及各 canonical
journal rows。调用方不能先拿 timestamp/cutoff 再单独 query。
KnowledgeSnapshotBuilder 唯一拥有 lifecycle fold 与 member selection;Store
只加载 immutable state 并提交预计算 snapshot,不能再实现第二套 freeze 规则。
以上公开 Interface 中出现的 request/state/receipt 类型都定义在
memory_models.py:FreezeEvidenceRequest、FreezeKnowledgeRequest、
ComposeRecallInputRequest、DistillationRequest、DistillationProposal、
DistillationBatch、DistillationReport、DistillationCommitReceipt、
DistillationNoCommitReceipt、DistillationCommitConflict、
DistillationWorkDisposition、
DistillationCommitAuthorizationProof、DistillationClosureAuthorizationProof、
DistillationTerminalReceiptRef、DistillationCampaignAdmissionProfileRef、
WorkItemProfileArtifactProof、DistillationEnqueueRecoveryRequest、
DistillationEnqueueRecoveryProof、
DistillationEnqueueObligationAbandonedProof、
CampaignBarrierReadProof、
DistillationCampaignCoverageProof、DecisionIntentBarrierReadProof、
DecisionIntentCoverageProof、
RetentionReconciliationProof、
ImmutableMemoryState、
EvidenceSnapshotCommitReceipt、SnapshotCommitReceipt 和
LedgerAppendReceipt。名称
DistillationReceipt 禁用,避免与每个 Experience 的
ExperienceDistillationReceipt 混淆;不存在泛化的 MemoryRecord persisted model,
读取 Interface 返回明确 union。
enqueue_distillation() 的 contract 是:queued_for_comparison 必须与一个唯一 Work
Item 同事务写入,且 Store 必须 read-back Work Item 所指的 content-addressed Campaign
Admission Profile。queued 调用必须携带 Runtime getter 返回的
WorkItemProfileArtifactProof;proof 绑定 handoff/ref ID、object digest/generation、
owner=DISTILLATION_WORK_ITEM:<work_item_id>、profile ref/digest、Artifact Store event
seq、ACTIVE ref state、PENDING handoff state,以及 current
enqueue_attempt_id/generation/fence/state=IN_FLIGHT。Store 重算 Work Item ID 和
deterministic ref/handoff IDs、验证 proof digest 与所有字段 exact equality,并把
campaign_profile_artifact_ref_id 作为 immutable append metadata 写入 Work Item row,
并把 handoff/ref、attempt ID/generation/fence、proof digest 与 ordered transaction digest
写入专用 distillation_enqueue_transactions_v1 sidecar/enqueue receipt。因 immediate
FK,物理 insert/journal 顺序固定为 Work Item → queued ingestion receipt → enqueue
sidecar;三条 canonical rows 在同一 Ledger transaction 内提交。Store 先按
deterministic Work Item/Experience 查询已提交 transaction:
same payload/ref 的 replay 按原 proof/receipt digest 返回原 transaction(即使 Runtime
随后已经 BOUND),different payload/ref conflict。首次 insert 只接受 exact current、
未 fenced 的 IN_FLIGHT proof;reply-loss exact retry 可接受 BOUND read-back 并返回原
transaction/original proof digest,不以当前 handoff-state proof 重写 canonical receipt;
NOT_STARTED/retired attempt、RELEASED、inactive、foreign、stale object generation
或任一 mismatch 均
fail closed。deferred_ineligible|not_required 必须给 work_item=None、
abandoned_work_item=None 且两个 proof 都为 null;queued 要求 committed work_item,
并禁止 abandoned_work_item/abandonment_proof。abandoned_before_enqueue 给
work_item=None/profile_artifact_proof=None,但必须携带 frozen
abandoned_work_item 和经 Runtime getter 独立 read-back 的 exact abandonment proof。
Store 重算 frozen payload digest 与 Work Item ID,逐字段核对其 Experience、namespace/
scope、Distillation/Lifecycle policy、Campaign Admission Profile lineage 与 proof/receipt,
只把 abandoned Work Item ID/payload digest/proof ref+digest 写入 receipt,绝不插入 Work
Item row。unassigned scan 只返回既无
Assignment 又无 Completion 的 item;assigned-incomplete scan 只返回指定 campaign
Run 已分配但无 Completion 的 item,均返回 (entry, commit_position)、稳定排序和
next_cursor,禁止调用方从裸 payload 猜 position。
page_after_position 只是一次 sweep 内的无状态分页 cursor,不是 durable ack;每次
进程启动/恢复和每轮 sweep 都从 None(最老 pending item)开始,只有成功 read-back
Completion 才让 item 从 pending 集合消失。Runtime
负责 Activity claim/lease/fencing;Store 不创建第二套 scheduler。
abandoned_before_enqueue 只用于 profile handoff 已建立、但 queued Ledger transaction
从未提交且 source control 已永久放弃该 exact attempt 的 terminal recovery。Memory Store
验证 abandonment proof 的 Work Item/handoff/current attempt/recovery request+ABSENT proof/
source Activity 后,还要用调用方携带的 frozen Work Item payload 重算 ID/digest,并核对
proof 内的 Experience 与完整 semantic lineage,才原子追加该 Experience 的唯一 receipt;
Runtime 必须 read-back receipt
ID/digest 后才可 ORPHAN_ABSENT/RELEASED。它不能用于已存在 Work Item、不能伪装
eligibility decision,也不创建 distillation work。
该分支的调用形状固定为
enqueue_distillation(
receipt,
work_item=None,
abandoned_work_item=frozen_work_item,
profile_artifact_proof=None,
abandonment_proof=proof,
)queued builder 的顺序固定且不可合并成“先写 Ledger、稍后 pin bytes”:
- 向 Runtime Artifact Store 发布 Campaign Admission Profile content-addressed bytes;
- 用 Experience、两套 policy identity 和 profile ref/digest 计算 Work Item ID;
- 在一个 Runtime Durable Transition 中创建由
DISTILLATION_WORK_ITEM:<work_item_id>拥有的 deterministicACTIVEruntime_artifact_ref与PENDINGhandoff;再由同一个 Runtime writer transaction CASNOT_STARTED -> IN_FLIGHT并分配 attempt ID/generation/fence,之后 getter 才返回绑定该 active attempt 的 proof; - 调用并 read-back
enqueue_distillation(); - Runtime 独立读取 exact Work Item、enqueue receipt 和
get_distillation_enqueue_transaction()sidecar,逐字段核对 attempt ID/generation/fence、original proof/transaction digests 后,才以 receipt+sidecar refs/digests CAS handoffIN_FLIGHT/PENDING -> LEDGER_PRESENT/BOUND;若 recovery 已 retire 同一 attempt,old-fence drain 后的 exact request-boundQUEUED_PRESENTproof 加同一组 rows/sidecar 允许RETIRED/PENDING -> LEDGER_PRESENT/BOUND。
orphan recovery 必须先停止 coordinator,以 higher-fence Runtime CAS retire 旧 attempt,
等待所有旧-fence Ledger transaction 结束,再读取后续 Ledger frontier。
DistillationEnqueueRecoveryProof=QUEUED_PRESENT 加 exact Work Item/receipt/enqueue sidecar 时,
必须把该 attempt 从 RETIRED 置为 LEDGER_PRESENT 并 bind;这覆盖旧 transaction 在
retire/drain 期间最终 commit。只有 request-bound ABSENT 才可把该 attempt 的
journal-backed state 从 RETIRED 置为 PROVED_ABSENT。absence 分支的 handoff/ref 仍
保持 PENDING + ACTIVE;普通 source retry 必须在同一
handoff 下 append higher-generation/higher-fence IN_FLIGHT attempt。只有 Runtime 另行
read-back DistillationEnqueueObligationAbandonedProof,绑定相同 Work Item/source
Activity/handoff/current attempt ID/generation/fence、该 attempt row byte-equal 的
later-frontier recovery-proof pair、terminal control cause 与不可逆
no-future-retry disposition,且 Memory Store 已 append/read-back exact
abandoned_before_enqueue receipt,才可 ORPHAN_ABSENT/RELEASED。不能在发出/仍可消费 proof
的同一时刻宣称 absent,普通 timeout/not-found 永不释放 ref。
Work Item ID projection 包含 profile ref/digest,但排除从它确定性派生的
campaign_profile_artifact_ref_id;该字段是 immutable append metadata,避免
Work Item ID ↔ artifact-ref ID hash cycle。source Run record-closure 对每个 queued
receipt 还必须 read-back BOUND handoff 与 ACTIVE ref,之后才可释放 source-owned
staging/profile ref;Work-Item-owned ref 不属于 source Run 的 operational-settlement
denominator。
恢复器逐 seam 收敛:Runtime ref/handoff 已 commit 而 Ledger enqueue 未知时,用
deterministic Work Item ID 调 get_distillation_work_item() 和
get_distillation_enqueue_receipt();exact row/receipt/sidecar 存在就 bind,即使同一
attempt 已在 recovery 中进入 RETIRED,也可在 old-fence drain 后经 exact
QUEUED_PRESENT
proof 单调进入 LEDGER_PRESENT。只有在一个固定
Ledger frontier 上得到 Work Item/receipt absence proof,且 Runtime 证明没有 in-flight
enqueue authorization/attempt 时,才把该 attempt 标为 PROVED_ABSENT 并保持 handoff/ref
为 PENDING + ACTIVE;后续 normal retry 创建 higher-generation/fence attempt。只有再有
exact DistillationEnqueueObligationAbandonedProof 和 independently read-back matching
abandoned receipt 才能显式释放 pre-enqueue orphan ref;
普通 not-found/timeout 不能释放。Ledger commit 已完成但 bind reply 丢失时,同一 read-back
直接完成 bind。恢复不得重发不同 Work Item/profile,也不得让 PENDING bytes 参与 GC。
Runtime 必须先从 handoff 冻结 canonical Work Item projection,并将其放入
DistillationEnqueueRecoveryRequest;request 绑定 request ID/digest、Experience ID、
Work Item ID/payload digest、handoff/ref 与 exact attempt
ID/generation/fence;Store getter 接受该 request 而非裸 Work Item ID。
DistillationEnqueueRecoveryProof 是同一 fixed-frontier read 的三臂 typed union,三臂都
回绑 request ID/digest、Experience/Work Item lineage 和 attempt triple:
QUEUED_PRESENT 携带 exact Work Item、queued ingestion/enqueue receipt、sidecar
IDs/digests 和 artifact ref ID;ABANDONED_PRESENT 携带 Work Item/sidecar absence、exact
abandoned_before_enqueue receipt ID/digest、abandoned Work Item payload digest 与 Runtime
abandonment-proof ref/digest;ABSENT 携带 Ledger frontier 与 Work Item row、enqueue
sidecar 以及该 Experience 的任意 Distillation Receipt 均不存在的 coverage digest。
任一 deferred/not-required receipt、partial queued rows 或 lineage mismatch 是 integrity
error,getter fail closed 而不伪造某个 union arm。
Runtime 只接受 Store 单 read transaction 产生并可复算的 proof。
每个 enqueue attempt 另有 append-only Runtime identity/history;handoff row 只投影 current
attempt ID/generation/fence/state。PROVED_ABSENT attempt 永不重新激活,retry 必须创建
新 attempt。DistillationEnqueueObligationAbandonedProof 是 Runtime control-owned strict
record;release 必须重验其 attempt triple 仍是 current PROVED_ABSENT。不可由 memory
caller、timeout、旧 attempt 或裸 absence proof自行构造。
source Run terminal、Assignment、campaign Run admission 都不释放此 root。只有 source
barrier 的 BOUND + ACTIVE acknowledgement 已 durable read-back、exact Work Item 已有
terminal DistillationWorkCompletion,并且 campaign Run replay/audit retention 已建立其
独立 ACTIVE ref 或其 retention 已过期,Runtime 才可提交/read-back
BOUND -> RELEASED 和 ArtifactReferenceReleased。Experiment Ledger 从不直接改变
artifact ref state;Runtime Artifact Store 是唯一 byte-GC authority。
DistillationCampaignManifest 由 Runtime 的 content-addressed Artifact Store/RunSpec
owner 持久化,不进入 memory canonical tables。admission projector 必须先通过 Runtime
public read Interface 得到 DistillationCampaignRuntimeProof,证明 manifest ref/digest
可 read-back、Run kind 是 MEMORY_DISTILLATION、Run 非 terminal、expected Run
version/Activity generation,以及 Activity 归该 Run且处于 AWAITING_ASSIGNMENT;
Experiment Ledger 只保存 proof projection 和 refs。两 Store 无分布式事务,
projector 用 shared helper 从 Work Item ID 派生 Runtime DriveRun admission key、Run ID
和 initial command ID 来重建/查找 campaign Run(manifest digest 是 spec input,不是
admission key),再以 stable assignment ID
reconcile。
manifest publish 后先在 Runtime transaction 中创建由 deterministic initial command/
admission-attempt ID 拥有的 temporary ACTIVE artifact ref;DriveRun admission 在同一
Runtime authority 内验证 staged bytes/digest,并原子创建 Run-owned ref 后才释放
temporary ref。reply loss 以同 command/ref ID reconcile;GC、orphan cleanup 与 admission
并发不能删除这两个 handoff state 的 bytes。
get_distillation_assignment_proof() 是 campaign Runtime Stage Adapter 唯一允许读取
Experiment Ledger assignment 的窄 read-only Seam;proof 绑定 assignment payload
digest、manifest member ordinal/digest、campaign Run/Activity、ledger commit position
和 proof-schema digest。Runtime 必须重新 read-back 后以 Run version + Activity
generation CAS 激活 Activity,不能信任 projector 传入的 bool 或旧 proof。
Run version、current generation/fence 只是 append/activation 时的 mutable validation
input,不进入 immutable Assignment payload 或 Assignment ID;Assignment 只保存创建时
稳定的 Run/Activity identity 与 manifest membership,避免 Runtime 版本前进后 exact
retry 变成 same ID/different payload。
class KnowledgeDistiller:
def propose(self, request: DistillationRequest) -> DistillationProposal: ...
class DistillationCommitCoordinator:
def prepare(
self,
proposal: DistillationProposal,
attempt: DistillationCommitAttemptIdentity,
) -> DistillationCommitPlan: ...
def commit(
self,
plan: DistillationCommitPlan,
authorization: DistillationCommitAuthorizationProof,
) -> DistillationCommitReceipt | DistillationNoCommitReceipt: ...硬性 Interface 语义:
- request 必须绑定 exact Evidence Snapshot、trusted ledger position、scope 和 Distillation + Lifecycle policy digests;
- caller 不得传入自行挑选的
related: list[ExperienceRecord]作为真相;显式 source IDs 也必须由 Store 重新校验; - executor/LLM worker 只能返回 immutable、content-addressed proposal artifact,不能 写 Knowledge、Batch、Report 或 Completion;
- proposal 必须冻结它读取的每个 affected
scope_variant_id -> expected lifecycle head以及 singleton Work Item 的 typed Work Disposition proposal; - shared helper 先由 Assignment/Run/Activity/generation/attempt ordinal/logical Effect
派生不依赖 outputs 的 authorization ID;Coordinator 的纯
prepare()再从 proposal 和该 attempt identity 计算 exact Candidate/Decision/Memory/Event/Batch/Disposition/ Report canonical bytes、IDs/digests 与 affected-head projection,发布 immutableDistillationCommitPlanRuntime artifact;此步不写 Ledger; - Runtime read-back plan/proposal 后,在 current Run version + Activity generation/fence
上以单次 CAS 赢得
RUNNING -> COMMITTING并持久化唯一 authorization。authorization payload pins plan/proposal refs/digests 和 expected Batch/Report IDs/digests;其 ID 本身 排除 outputs,避免 hash cycle; - grant 后 Coordinator 才以已知 authorization payload digest 构造 Completion,并把 exact plan + Completion + proof 交给 Store。Store 重算全部 bytes/IDs/digests,Report 虽已在 plan 中预计算但只在 successful atomic transaction 内首次持久化;
DistillationReport在 atomic commit 成功前不得报告 promoted;- canonical
DistillationReport只含确定性语义结果、coverage 和 affected-active-view digest;后者只覆盖 proposal 中 sorted affected scope-variant 的 final memory/head/disposition,不是 namespace-global view; invocation cost、transient errors、timing/logs 属于 Runtime Effect telemetry/sidecar, 不进入 Report immutable payload 或 ID; - crash/replay 使用 content-derived batch/candidate/record/event IDs;
- typed no-commit conflict 只 retire 当前 authorization attempt;Coordinator 必须 read-back conflict、递增 generation/fence 后重新 propose,不能把它报告为 dead-letter、cancelled 或成功;
- 一个 batch 内 candidate、decision、record、evidence links 和 lifecycle event 要么全部 commit,要么全部不可见;
defer是正常决策,Research Run completion 不要求单次 Experience 立即变成 active Knowledge。
class AcceptanceArtifactStore(Protocol):
def get_shared_manifest(
self, proof: SharedManifestReceiptProof
) -> MemorySharedIdentityManifest: ...
def get_stage_manifest(
self, proof: StageManifestReceiptProof
) -> MemoryStageManifest: ...
def get_acceptance_root(
self, proof: AcceptanceRootReceiptProof
) -> MemoryAcceptanceManifest: ...
def get_release_artifact_set(
self, proof: AcceptanceReleaseArtifactSetProof
) -> PreValidationArtifactSet: ...
def put_validation_receipt(
self, receipt: AcceptanceValidationReceipt
) -> AcceptanceValidationReceiptProof: ...
class MemoryAcceptanceHarness:
def __init__(
self,
registry: StageCampaignRegistry,
artifacts: AcceptanceArtifactStore,
) -> None: ...
def run_offline(
self, shared: SharedManifestReceiptProof, stage: StageManifestReceiptProof
) -> StageArtifactSet: ...
def run_ideation(
self, shared: SharedManifestReceiptProof, stage: StageManifestReceiptProof
) -> StageArtifactSet: ...
def run_causal(
self, shared: SharedManifestReceiptProof, stage: StageManifestReceiptProof
) -> StageArtifactSet: ...
def assemble(
self, root: AcceptanceRootReceiptProof
) -> MemoryAcceptanceReport: ...
def validate(
self, release: AcceptanceReleaseArtifactSetProof
) -> AcceptanceValidationReceiptProof: ...它只是验收 orchestration Module:指标实现仍分别归 writer/retrieval/utilization/
causal runners。每个 public method 必须先由 AcceptanceArtifactStore read-back proof 的
canonical object/ref/digest;裸 Pydantic object、path 或 caller ClaimReport 不构成 authority。
ClaimReport 只是 validation 的中间产物,只有 exact-once 写入并再次 read-back 的 signed
AcceptanceValidationReceipt 是 terminal result。每个 run_* 再经 registry
admission/read-back 取得 hidden-data token,
退出前写 terminal closure;assemble 从 root 的 registry frontier 枚举 exact lineage,
再对 stage root 做 digest read-back、完整 sibling/overlap/applicability 校验和 requirement
join,不能把调用方传入的成功 shard 列表当权威。生产 memory 包不依赖 benchmark 包。
DecisionRecallPreparationResult = (
DecisionRecallContextProposal | DecisionRecallBlockedProposal
)
class DecisionPointRetriever:
def propose(
self, intent: DecisionIntent, request: DecisionRecallRequest
) -> DecisionRecallPreparationResult: ...硬性 Interface 语义:
- request 缺 Decision Intent、Recall Input Snapshot、policy digest、scope 或
allowed action 时返回
DecisionRecallBlockedProposal,不能抛出一个未持久化的宽泛 error、退化为宽泛 query 或 abstain; - current Observation/failure signature 是 typed nullable;没有 prior Attempt 时必须
携带
no_prior_observationreason,缺字段和合法 null 不得混同; - hard filter 在 candidate 文本进入 actor 之前执行;
status=empty只表示健康检索没有 eligible evidence;status=degraded只表示 policy 允许的基础设施/Adapter fallback;request/private/corruption/ contamination/identity 问题一律 blocked;- result 默认最多 3 cards、完整 rendered section 的 1,200 exact tokenizer tokens;
- retriever 只构造 closed preparation result:成功为 immutable
DecisionRecallContextProposal,阻塞为 immutableDecisionRecallBlockedProposal;两者 都先发布到 Runtime Artifact Store,不直接写 Experiment Ledger; - Blocked proposal 必须绑定 authoritative Intent ID/digest、request/retrieval-policy digest、nullable exact Recall Input ID/digest、closed blocked reason,以及按 reason discriminated 的 typed evidence,禁止 free-form dict、exception text 或 private bytes。 canonical Recall Input 已 read-back 时 ID/digest 必须 exact non-null;尚未形成或因损坏 无法 read-back 时两者必须同时为 null,并由对应 evidence 携带 attempted expected ref;
- reason-specific evidence union 至少封闭为:request-invalid 的 canonical field
violations/request-schema digest;identity/policy-mismatch 的 expected/observed IDs/digests;
corrupt-input 的 attempted ref/integrity evidence;contamination/private-exposure 的 violated
rule 与 redacted member/field identities;retention-revoked 的 exact
RetentionCheck。 retention branch 必须逐字节绑定同一 non-null Recall Input ID/digest、frontier、 tombstone-set digest 和 canonical sorted blocked targets; - Runtime 必须先持久化并 read-back Blocked proposal,再由 strict
get_decision_recall_blocked_proof()解析 producer/object/proposal identity 和全部字段; 只有该 proof 可进入 blocked Outcome proposal/authorization。Context proposal 则经 Runtime read-back、digest-bound authorization 和 Store exact append/read-back 后,已提交 Context 才可交给 actor; - 相同 request/snapshot/policy 的最终排序和 card IDs 稳定;
- online path 不调用生成式模型。
ExperienceRunAdapter 新增:
def prepare_required_decision(
self,
*,
intent: DecisionIntent,
contract_view: DecisionContractViewRef,
intervention_catalog: InterventionCatalog | None,
previous_feedback: PreviousAttemptFeedback | None,
recall_input_snapshot_id: str,
) -> DecisionRecallPreparationResult:
...
def commit_required_decision_context(
self,
*,
proposal: DecisionRecallContextProposal,
authorization: DecisionRecallCommitAuthorizationProof,
) -> DecisionRecallContext:
...两个 Interface 只接受 read-back recall_requirement=REQUIRED 的 Intent;registered
not-requested path 不调用它,也不创建 Recall Input/Context。首版只允许
decision_point="intervention" 进入 active rollout。DecisionIntent
在调用前预分配 run/activity/iteration/generation/arm/pair、Research Context ref、
logical decision slot/artifact kind、allowed-action digest,以及从 admitted Run/arm
manifest 复制的 pinned planned actor model/config/template/policy refs/digests 和
MemoryGovernanceBinding:exact memory_profile_ref/digest、
memory_assignment_manifest_ref/digest 与 closed
recall_requirement=REQUIRED | REGISTERED_NOT_REQUESTED。append_decision_intent
必须用 DecisionIntentAdmissionProof 经 Runtime read Interface read-back 相同 Run spec/
manifest/profile bytes 后才提交;proof/Intent mismatch fail closed。实际 artifact ID/digest
在 terminal outcome 绑定。DecisionContractViewRef 是
Evaluation Contract 的内容寻址 actor-visible projection,MUST 排除 entrypoint、
evaluator files、private_data_dir、private labels/answers/secrets。Request 从该
view、Intervention Catalog、PreviousAttemptFeedback 和 frozen snapshots 结构化
生成,而不是从 CLI query 拼 prose。
prepare_required_decision() 返回 closed DecisionRecallPreparationResult。Context
proposal 先作为 scoped content-addressed Runtime artifact 发布;Runtime read-back 后才能按
expected Context ID/payload digest/proposal ref/digest 发 APPEND_CONTEXT authorization,
commit_required_decision_context() 也只接受该分支的 exact bytes。Blocked proposal 同样
必须先发布/read-back,但绝不申请 Context authorization;Runtime 以 strict getter 再读出
DecisionRecallBlockedProof,并把同一 proof ref/digest 绑定到 blocked Outcome proposal、
APPEND_OUTCOME/NORMAL authorization 与最终 Outcome。不允许“先授权空槽,再由 retriever
决定内容”,也不允许把内存中的 error 直接翻译成 blocked Outcome。
DecisionContractView v1 只包含 contract ID/version/public digest、
evaluation_task_id、public task_scope_id、
Decision Point、primary metric name/direction/public baseline、public guardrails、
Budget class、Intervention Catalog/allowed-action digest 和公开 validity summary。
构造器使用 allowlist serialization,不能靠删除少数字段的 denylist。
保留 Phase A 的 InterventionProposal / InterventionRecord v1 和
ai-researcher/proposal/v1 digest,不向 frozen payload 加字段。Planner 新增外层
sidecar envelope:
class RecallDispositionDraft(MemoryPayloadV1):
citation_id: str
disposition: Literal["adopted", "rejected", "not_considered"]
reason_code: RecallDispositionReason
mapped_target: str | None = None
class RequiredDecisionMemoryBinding(MemoryPayloadV1):
binding_kind: Literal["required"] = "required"
recall_input_id: str
recall_context_id: str
rendered_card_count: int
rendered_token_count: int
class NoDecisionMemoryBinding(MemoryPayloadV1):
binding_kind: Literal["registered_not_requested"] = "registered_not_requested"
recall_input_id: None = None
recall_context_id: None = None
rendered_card_count: Literal[0] = 0
rendered_token_count: Literal[0] = 0
governance_binding_digest: str
class RecalledInterventionDecision(MemoryPayloadV1):
decision_intent_id: str
decision_memory: RequiredDecisionMemoryBinding | NoDecisionMemoryBinding
proposal: InterventionProposal # unchanged v1 payload
recall_dispositions: list[RecallDispositionDraft]规则:
- 非空 context 的每个 item 必须且只能出现一次;
RequiredDecisionMemoryBinding的 IDs/counts 必须逐项等于 read-back Input/Context;NoDecisionMemoryBinding只接受 read-backrecall_requirement=REGISTERED_NOT_REQUESTED的 Intent,IDs 必须 null、counts/dispositions 必须为 0,且governance_binding_digest必须逐字节等于该 Intent 持久化MemoryGovernanceBindingdigest;- adopted item 必须填写 mapped target;
- mapped target 必须在该 Evidence Card 和 Intervention Catalog 允许范围内;
- envelope 使用独立
ai-researcher/recalled-intervention-decision/v1digest; - inner proposal 仍按
ai-researcher/proposal/v1计算并写原 InterventionRecord; - required binding 的新 context ID 作为原
recall_snapshot_id的值;registered not-requested binding 对 InterventionRecord 与 ExperimentAttempt 都保留并验证既有 canonical"off"sentinel,Outcome sidecar 绑定NoDecisionMemoryBinding;两者都不 改字段或 hash domain; - system-resolved effective config 后生成
RecallDecisionOutcomesidecar; - blocked/not-requested/empty/degraded/actor failure/proposal rejected/no-op/
cancelled 仍生成 Recall Decision Outcome;actor timeout/crash/unparseable/schema-malformed
output 确定映射为
actor_failed + ACTOR_INVOCATION_FAILED|ACTOR_OUTPUT_MALFORMED,通过 policy/contract parse 但被 policy/preflight 拒绝才映射rejected;不存在开放的invaliddecision status; - claimed adoption fidelity 和 execution fidelity 的验收分开统计。
新 model 放在 memory_models.py:
MemoryPayloadV1
TaskScopeIdentity
MemoryScope
DecisionTarget
DecisionContractView
DecisionContractViewRef
MemoryGovernanceBinding
DecisionIntentAdmissionProof
DecisionIntentClosureProof
DecisionRecallCommitAuthorizationProof
TerminalBarrierFreezeProof
DecisionIntentBarrierReadProof
DecisionIntentCoverageProof
DecisionRecallAppendReceipt
DecisionRecallNoCommitReceipt
DecisionIntentProposal
DecisionIntent
EffectEstimate
VerifiedEvidenceBundle
EvidenceLink
PolicyIdentity
MemoryRelation
FreezeEvidenceRequest
EvidenceSnapshotCaptureOperation
FreezeKnowledgeRequest
ComposeRecallInputRequest
DistillationRequest
DistillationProposal
DistillationCommitAttemptIdentity
DistillationCommitPlan
DistillationBatch
DistillationReport
DistillationCommitReceipt
DistillationNoCommitReceipt
DistillationCommitConflict
DistillationWorkDisposition
DistillationCommitAuthorizationProof
DistillationClosureAuthorizationProof
DistillationTerminalReceiptRef
ImmutableMemoryState
EvidenceSnapshotCommitReceipt
SnapshotCommitReceipt
LedgerAppendReceipt
DistillationEnqueueReceipt
DistillationEnqueueTransaction
DistillationCampaignAdmissionProfileRef
WorkItemProfileArtifactProof
DistillationEnqueueRecoveryRequest
DistillationEnqueueRecoveryProof
DistillationEnqueueObligationAbandonedProof
PositionedDistillationPage
KnowledgeCandidate
SemanticKnowledgeRecord
ProcedureRecord
ExperienceDistillationReceipt
DistillationWorkItem
DistillationAssignmentProof
DistillationWorkAssignment
DistillationWorkCompletion
DistillationCampaignRuntimeProof
WorkItemProfileArtifactProof
DistillationEnqueueRecoveryProof
CampaignBarrierReadProof
DistillationCampaignCoverageProof
DistillationDecision
KnowledgeLifecycleEvent
MemoryRetentionTombstone
RetentionErasureIntent
RetentionIntentCommitReceipt
RetentionCheck
RetentionReconciliationProof
ArtifactErasureReceiptProof
IndexInvalidationReceiptProof
PositionedRetentionPage
EvidenceSnapshot
EvidenceSnapshotMember
KnowledgeSnapshot
KnowledgeSnapshotMember
DerivedIndexBuildReceipt
DerivedIndexBuildFailure
RecallInputSnapshot
DecisionRecallRequest
EvidenceCard
DecisionRecallBlockedEvidence
DecisionRecallBlockedProposal
DecisionRecallBlockedProof
DecisionRecallPreparationResult
DecisionRecallContextProposal
DecisionRecallContext
DecisionPlannerMemoryInputArtifact
RecallDecisionOutcomeProposal
RecallDecisionOutcome
RecallOutcomeAttemptLink
RequiredDecisionMemoryBinding、NoDecisionMemoryBinding、
RecallDispositionDraft 和 RecalledInterventionDecision 是 Phase A Intervention
sidecar,唯一 owner 是 research_agent/inno/experience/intervention.py;
memory_models.py 不重复定义或 re-export 它们。
ScientificClaimPlan、MemorySharedIdentityManifest、MemoryStageManifest、
MemoryAcceptanceManifest、RegistryTrustAnchor、RegistryAuthorityCheckpoint、
RetrievalAdapterSelectionReceipt、SharedManifestReceiptProof、
StageManifestReceiptProof、AcceptanceRootReceiptProof、
AcceptanceReleaseArtifactSetProof、AcceptanceValidationReceiptProof、
StageCampaignAdmissionReceipt、HiddenPoolExposureReceipt、
VisibilityNotIssuedReceipt、StageCampaignClosureReceipt、typed lineage/global
StageCampaignRegistryFrontier、SealedPartitionManifest、
PartitionNonOverlapReceipt、ConfirmatorySelectionReceipt、PilotGateReceipt、
PilotPrerequisiteAssessment、StageArtifactSet、StatusProvenance、RequirementCheck、
PreValidationArtifactSet、
StageTerminalOverrideCheck、CostPerValidImprovementScalar、TypedReportEnvelope、MemoryAcceptanceReport 和
AcceptanceValidationReceipt 属于
validation domain,只定义在 benchmark/memory/schemas.py,不得成为 production
memory payload。
DecisionIntentAdmissionProof、DecisionRecallCommitAuthorizationProof、
DecisionRecallBlockedProof、TerminalBarrierFreezeProof、
DistillationCampaignRuntimeProof、DistillationCommitAuthorizationProof、
DistillationClosureAuthorizationProof、DistillationTerminalReceiptRef、
DistillationTerminalReceiptProof、
DistillationEnqueueRecoveryRequest、
DistillationEnqueueObligationAbandonedProof、
ArtifactErasureReceiptProof 和 IndexInvalidationReceiptProof 是
Runtime-owned canonical records 的 strict read models;Experiment Ledger 只在
Context/Outcome 或 Batch/Report/Completion 中保存其 exact ID/ref/digest/generation/
fence projection,不创建第二份授权真相。
DecisionRecallBlockedProof 是 Runtime Artifact Store 对
DecisionRecallBlockedProposal 的 strict read model:包含 artifact ref/digest、proposal
ID/digest、producer/object identity,以及 proposal 的 Intent、nullable Recall Input、reason
和 evidence 全字段;它不是 caller 可自行构造的授权声明。
ArtifactErasureReceiptProof 绑定 receipt ref/digest、namespace、target artifact/object
generation、incident/operation ID、terminal erasure state 和 Runtime event seq;
IndexInvalidationReceiptProof 另绑定 index build/artifact ref+generation、cache unload/
invalidation state与同一 incident。两者由 RetentionRuntimeRead getter 从 Runtime
canonical record read-back,versioned proof schema/domain 有 golden vectors;裸 digest、
foreign generation 或自报 bool 无效。
DistillationCampaignAdmissionProfileRef 指向 enqueue 前已发布的 content-addressed
configuration artifact;Work Item 固定其 ref/digest,projector 不得读取进程默认值覆盖。
不要重用旧 KnowledgeRecord 类名。旧类在迁移期 alias 为
LegacyKnowledgeRecordV1,原 import 保持兼容一个版本并发出 deprecation
warning;旧 JSON 仍由原类解析。
MemoryPayloadV1 使用 extra="forbid"、frozen=True 和
schema_version: Literal["1"]="1"。它不修改或继承旧 payload 的 hash projection;
每个新 payload 都有独立的 versioned domain。
DecisionIntentProposal、DecisionRecallContextProposal、
DecisionRecallBlockedProposal 与 RecallDecisionOutcomeProposal 是 scoped Runtime
artifact payloads。Intent/Context/Outcome proposal 各自包含最终 canonical record 的 exact
bytes、record ID、payload digest、producer identity 和 source receipts;Blocked proposal
包含自身 content ID/digest、authoritative Intent binding、nullable exact Recall Input binding、
closed reason 与 reason-specific typed evidence。它们本身都不是 Experiment Ledger canonical
record。Runtime 只能在 artifact read-back 后为 exact target 发 commit authorization;Store
append 后 proposal 不替代 canonical getter/read-back,Blocked artifact 也必须在 blocked
Outcome 的审计保留期内可由 strict getter 重读。
Intent/Context/Outcome 的 digest order 严格无环:先计算不含 authorization linkage 的 canonical record ID/payload digest,随后发布 proposal;Runtime 再创建绑定 proposal/expected record 的 authorization;最后 Store 在同一 transaction 写 canonical record 与 immutable authorization ID/digest append metadata。authorization linkage 不得回写 canonical JSON 或 record ID。三种 record 的 golden vectors 必须证明改变 authorization 只改变 append metadata,而改变任一 semantic field 会改变 expected record/proposal/authorization digest。
DecisionPlannerMemoryInputArtifact 包含 Intent ID、actor slot、closed
RequiredDecisionMemoryBinding | NoDecisionMemoryBinding union、canonical rendered bytes/
digest 和 producer identity。Runtime 在 model Effect preparation 前发布/read-back 它;
model Effect request、Outcome proposal/authorization 和 final Outcome 全部绑定同一 artifact
ref/digest。Artifact Store 保留期至少覆盖 Run audit/Outcome retention,getter 必须可重算
payload digest;单独一个 caller-supplied binding digest 不构成 lineage proof。
所有新逻辑 ID 都复用现有 semantic_digest(domain, value) 的严格 JSON、有限数值、
domain separation 和 raw lowercase 64-hex 约定。新增 memory_semantic_digest() 只做
semantic projection 规范化后调用该 helper,不改变 Phase A helper 或任何旧 ID。
规范化规则:所有 identity string 必须先 NFC;dict key 排序;bool 不可冒充 int;
float 必须有限,作为 identity 的 decimal metric 使用规范 decimal string;真正具有
语义的 datetime 统一为 UTC RFC3339 microseconds,审计 created_at 不进入 ID;
ledger cutoff 使用整数 position 或 explicit members,不使用 wall clock。
虽然 created_at 不进入 logical ID,它仍参与 immutable payload equality,必须来自
首次已持久化的 Runtime Activity/Decision Intent/commit-attempt timestamp。尤其
Distillation Commit Plan 在 grant 前就把该 commit-attempt timestamp 写入全部拟提交
Batch/Report/output payload;Store 只复用,不能在 Ledger transaction 内调用 now()。
retry 复用该值,禁止在重放时生成不同 payload。
| ID | Versioned hash domain | semantic projection MUST include | MUST exclude |
|---|---|---|---|
candidate_id |
ai-researcher/knowledge-candidate/v1 |
Evidence Snapshot, source IDs, normalized proposal, drafting/policy identity | created_at, cost |
task_scope_id |
ai-researcher/task-scope/v1 |
taxonomy registry ID/version, public task family/problem-type attributes | evaluation-task instance ID, seed, private/evaluator labels |
contract_view_id |
ai-researcher/decision-contract-view/v1 |
source contract digest, allowlisted actor-visible projection | private/evaluator fields, created_at |
experience_distillation_receipt_id |
ai-researcher/experience-distillation-receipt/v1 |
Experience ID, disposition, Distillation Policy ID/digest, nullable committed Work Item ID, nullable abandoned Work Item ID + frozen payload digest + abandonment-proof ref/digest | created_at, retry count, lifecycle/retrieval policies |
distillation_work_item_id |
ai-researcher/distillation-work-item/v1 |
Experience ID, namespace/scope, Distillation + Lifecycle policy IDs/digests, Campaign Admission Profile ref/digest | deterministic campaign_profile_artifact_ref_id append metadata(由此 ID/profile digest 派生以避免 hash cycle), claim/lease, created_at, any separate idempotency key |
distillation_enqueue_transaction_id |
ai-researcher/distillation-enqueue-transaction/v1 |
Experience/Work Item IDs, handoff/artifact-ref IDs, enqueue attempt ID/generation/fence, original profile-proof digest, ingestion-receipt ID/digest, Work Item payload digest | current handoff state, later attempts, journal positions, created_at |
distillation_work_assignment_id |
ai-researcher/distillation-work-assignment/v1 |
Work Item ID, campaign manifest ref/digest, MEMORY_DISTILLATION Run ID, stable Activity ID |
lease/claim, Run terminal state after assignment, created_at |
distillation_activity_id |
ai-researcher/distillation-activity/v2 |
campaign Run ID, Work Item ID (which already binds both policies) | free policy parameter, source Run ID, lease/claim/retry |
distillation_proposal_id |
ai-researcher/distillation-proposal/v1 |
request/Evidence Snapshot, scope, sorted Work Item/Experience/candidate/output projections, both policy identities, drafting Adapter identity | Runtime lease/fence, created_at, invocation cost/logs |
distillation_commit_plan_id |
ai-researcher/distillation-commit-plan/v1 |
proposal ref/digest, output-independent authorization ID, exact sorted canonical output bytes/IDs/digests, expected heads and affected-view projection | authorization payload digest, Runtime lease expiry, created_at, invocation telemetry |
distillation_commit_authorization_id |
ai-researcher/distillation-commit-authorization/v1 |
Assignment, campaign Run/Activity, Activity generation/fence, commit-attempt ordinal, logical Effect ID | proposal/output/plan payload, wall clock, lease expiry; Runtime exact-payload equality separately pins proposal + commit-plan artifacts and final Batch/Report IDs/digests |
distillation_closure_authorization_id |
ai-researcher/distillation-closure-authorization/v1 |
Assignment, campaign Run/Activity, Activity generation/control event sequence, terminal status, terminal receipt ref/digest | worker claim, wall clock, display reason |
distillation_work_completion_id |
ai-researcher/distillation-work-completion/v1 |
Work Item + Assignment IDs, campaign Run/Activity generation/fence, terminal authorization ID/digest, terminal status, nullable Batch ID + Report ID/payload digest or terminal receipt ref/digest | retry events, created_at |
distillation_batch_id |
ai-researcher/distillation-batch/v1 |
commit authorization ID/effect, request/Evidence Snapshot, scope, sorted Work Item/Experience/candidate IDs, Distillation + Lifecycle policy identities | Snapshot Selection/Retrieval identities, transaction position, created_at, invocation cost/logs |
distillation_report_id |
ai-researcher/distillation-report/v1 |
commit authorization ID/effect, Batch ID, exact Work Item/Experience coverage, sorted Work Disposition IDs (whose IDs bind typed status/evidence/reasons), sorted candidate/decision/memory/event/relation IDs and affected-active-view digest over sorted affected (scope_variant_id,final_memory_id,final_event_id,disposition) |
namespace-global/unaffected heads, journal positions, created_at, invocation cost/logs/display errors |
distillation_commit_conflict_id |
ai-researcher/distillation-commit-conflict/v1 |
commit authorization ID/digest, proposal/proposed-Batch IDs, conflict kind + closed discriminated body: LIFECYCLE_HEAD_STALE binds sorted expected/observed scope heads and retention fields canonical null;RETENTION_REVOKED binds current retention frontier/set + sorted reachable blocked targets and head-delta fields canonical null;both predicates true deterministically selects RETENTION_REVOKED |
retry timing, created_at, display error |
distillation_work_disposition_id |
ai-researcher/distillation-work-disposition/v1 |
Batch + Work Item/Experience IDs, disposition, nullable covering Decision ID, typed evidence/reason codes, both policy identities | report ordinal, created_at, display prose |
distillation_decision_id |
ai-researcher/distillation-decision/v1 |
Candidate ID, disposition, nullable memory ID, Distillation/Lifecycle policy identities | created_at, display reason prose |
family_id |
ai-researcher/knowledge-family/v1 |
record kind, Decision Point, normalized target, metric, mechanism class | scope, prose, evidence count |
scope_variant_id |
ai-researcher/knowledge-scope-variant/v1 |
family ID, normalized exact MemoryScope | evidence, disposition |
memory_id |
ai-researcher/memory-record/v1 |
semantic record projection, family/scope IDs, sorted canonical evidence-link bodies excluding parent memory_id and evidence_link_id, policy, prior memory ID |
created_at, lifecycle disposition, display ordinal, child link IDs |
support_unit_id |
ai-researcher/support-unit/v1 |
comparison, run/seed, observation, Intervention/source/dataset/contract digests | import time, retry copies |
lifecycle_event_id |
ai-researcher/knowledge-lifecycle-event/v1 |
target, expected prior head/event, transition, reasons/evidence, policy | DB row order, created_at |
evidence_link_id |
ai-researcher/memory-evidence-link/v1 |
memory, canonical evidence IDs, relation, support-unit ID | DB row order, created_at |
memory_relation_id |
ai-researcher/memory-relation/v1 |
canonicalized source/target IDs, relation, causing lifecycle event, policy | DB row order, created_at |
evidence_capture_operation_id |
ai-researcher/evidence-capture-operation/v1 |
owner Run/Activity/generation, logical capture Effect, namespace/visibility purpose and stable decision slot | selected members/frontier, retry time, created_at |
evidence_snapshot_id |
ai-researcher/evidence-snapshot/v1 |
sorted member bundle IDs/digests, ledger position, namespace/arm/pair, eligibility policy | wall clock, later appends |
knowledge_snapshot_id |
ai-researcher/knowledge-snapshot/v1 |
sorted record/event heads, lifecycle position, selection policy, namespace | Retrieval/index policy, raw unrelated Experience, wall clock |
index_build_id |
ai-researcher/memory-index-build/v1 |
source snapshot IDs, Adapter/model/tokenizer/build identities, sorted vector/member digests | build time/path |
index_failure_id |
ai-researcher/memory-index-failure/v1 |
source snapshots, Adapter/policy identity, attempt key, retry ordinal, error code and failure-receipt digest | created_at, stack trace/path |
recall_input_snapshot_id |
ai-researcher/recall-input-snapshot/v1 |
Knowledge/Evidence snapshots, Retrieval/renderer/tokenizer policy, index build IDs | alias, wall clock |
decision_intent_id |
ai-researcher/decision-intent/v1 |
run/activity/iteration/generation/arm/pair, evaluation-task ID, public task-scope ID, point, Research Context ref, sanitized contract view, logical decision slot/artifact kind, allowed-action digest, memory-profile/assignment-manifest refs/digests and recall requirement | actor output, private labels/answers |
decision_recall_no_commit_id |
ai-researcher/decision-recall-no-commit/v1 |
authorization kind + ID/digest, Intent ID, transition kind, expected record ID/payload digest, closed reason, observed phase digest | created_at, transport error text, display diagnostics |
decision_recall_blocked_proposal_id |
ai-researcher/decision-recall-blocked-proposal/v1 |
authoritative Intent ID/digest, nullable exact Recall Input ID/digest, request/retrieval-policy digests, closed blocked reason, canonical reason-specific evidence(retention branch 含 exact check Recall Input ID/digest、frontier、tombstone-set digest、sorted blocked targets)和 producer/object identity | Runtime artifact ref, Outcome/authorization append metadata, created_at, free-form diagnostics/private bytes |
card_id |
ai-researcher/evidence-card/v1 |
common source kind/record ID+digest and typed applicability/action/effect/evidence/citations/renderer; for semantic/procedure: memory ID + family/scope/current lifecycle head; for episodic: Evidence Snapshot/member bundle/Verification identities + evidence frontier | Decision Intent, rank/ordinal, score, created_at; episodic excludes memory/lifecycle fields and memory cards exclude episodic fields |
citation_id |
ai-researcher/recall-citation/v1 |
Decision Intent ID, Recall Input Snapshot ID, card ID, final ordinal | Recall Context ID (avoids cycle), created_at |
decision_recall_id |
ai-researcher/decision-recall-context/v1 |
intent/request, Recall Input Snapshot, Retention Check digest/frontier/tombstone-set digest, status, canonical typed degradation reason/fallback identity, selected cards/rank evidence, rendered-context digest/tokenizer/count | diagnostic candidate counts/log ordering, created_at |
recall_outcome_id |
ai-researcher/recall-decision-outcome/v1 |
intent, optional context, semantic commit authority, source/decision/artifact status, source outcome reason + decision terminal reason, required blocked-proof ref/digest iff source blocked, planner-input binding ref/digest when invoked, required retention/failure/cancel receipt identities, planned actor identities plus canonical nullable executed actor/response/prompt identities, per-card dispositions, artifact/action/config mapping | commit authorization ID/digest append metadata, downstream verified outcome, display diagnostics, created_at |
outcome_attempt_link_id |
ai-researcher/recall-outcome-attempt-link/v1 |
Recall Outcome ID, Experiment Attempt ID | append position, created_at, later Attempt results |
retention_erasure_intent_id |
ai-researcher/retention-erasure-intent/v1 |
incident, namespace, target kind/ID/last digest, reason, required retraction event or typed N/A, external target/object generation, sorted affected index build/artifact identities, retention policy | external receipts, completion state, created_at |
retention_tombstone_id |
ai-researcher/memory-retention-tombstone/v1 |
target kind/ID/last digest, incident/reason, required retraction event or typed N/A, external erasure receipt ref/digest, sorted index-invalidation receipt refs/digests | created_at, operator display name |
Memory record version order 由 prior_memory_id 链和 lifecycle events 派生,不保存
依赖并发插入顺序的自增 record_version。所有 helper 都有 golden-vector tests。
其中 distillation conflict golden vectors 必须分别覆盖两个 discriminant,并证明另一
分支字段 canonical null、blocked-target order 不敏感且 kind 改变必换 ID。
Memory/link identity 使用固定两阶段算法:先规范化并排序 evidence-link bodies(只含
canonical evidence refs、relation、support-unit ID)计算 memory_id;再以
memory_id + link_body 分别计算 evidence_link_id。禁止 memory projection 包含 child
link ID,否则形成 hash cycle;golden vectors 必须显式验证顺序不敏感和无环。
没有独立 record_id 列的 child rows(例如 evidence link/relation)使用上表的
content-derived logical ID 作为 ledger_commits_v1.record_id;其 composite PK 仍是
SQL lookup key。任何新增 persisted logical record 在合并 schema PR 前必须先在此表
登记 domain/projection/exclusion 和 golden vector,不能借用另一类型的 hash domain。
首版不用无校准的单一 confidence: float。使用:
class EvidenceStrength(ImmutableModel):
grade: Literal["single", "replicated", "strong", "contested"]
independent_support_count: int
independent_counter_count: int
paired_comparison_count: int
effect_consistency: float
uncertainty_method: str
reasons: list[str]effect_consistency 是验证结果的确定性统计,不是模型主观概率。Promotion Policy
决定哪些 grade 可以进入 development/confirmatory snapshot。
Phase 0 冻结四个 extra="forbid"、内容寻址的 policy payload;未知字段或版本
fail closed:
| Policy | v1 required fields |
|---|---|
DistillationPolicyV1 |
eligible outcomes;canonical bundle requirements;comparison-stratum field list;support-unit projection;minimum independent/paired support;effect/guardrail method;candidate rejection reasons;drafting Adapter identity |
LifecyclePolicyV1 |
legal transitions;contest/supersede/retract reason enums;evidence-strength thresholds;expected-head CAS;relation/cycle rules |
SnapshotSelectionPolicyV1 |
namespace;allowed record kinds/dispositions/strength grades;scope-variant head rule;trusted lifecycle position;provisional/contested inclusion |
RetrievalPolicyV1 |
Decision Point profile;exact-scope field list;allowed source kinds/actions;candidate limits;lexical/embedding/direct Adapter IDs;feature/weight/threshold spec;family diversity;fallback rules;renderer/tokenizer;item/token budget |
四个 payload 一一对应四个文件和 digest,禁止把前三种隐式塞进一个未经定义的
writer 配置:
| Fixture / CLI | 持久化位置 |
|---|---|
distillation-v1.yaml / --distillation-policy |
Experience receipt/Work Item、Candidate、Distillation Decision、memory record |
lifecycle-v1.yaml / --lifecycle-policy |
Knowledge Lifecycle Event、Memory Relation |
snapshot-selection-v1.yaml / --snapshot-selection-policy |
Knowledge Snapshot |
retrieval-v1.yaml / --retrieval-policy |
derived index request、Recall Input Snapshot、Recall Context |
每个文件经 canonical JSON projection 得到独立 content ID 和 raw digest;四个 ID/
digest 都进入 MemoryAcceptanceManifest.policy_identities。需要整体引用时,另计算
只含这四个有序 content ID 的 policy_set_digest,不得以一个 digest 代替各自身份。
首版 MemoryScope 的 namespace、task_scope_id、domain、dataset、tested-source、
model、environment、Evaluation Contract 和 budget-class digests 全部 exact
equality;不支持
implicit wildcard、range 或层级继承。跨任务泛化必须通过显式、版本化的 v2 scope
algebra 和独立 acceptance corpus,不能在 ranker 中临时放宽。
这里的“跨任务”指跨 task_scope_id;同一 scope 内未见的
evaluation_task_id 是 v1 明确支持的 held-out instance transfer。source evidence
保留 evaluation-task IDs 用于 contamination;transferable record 的 scope 不含这些
instance IDs。若 policy 明确生成 instance-specific record,则把
evaluation_task_id 放入 MemoryScope,该 record 只能支持 same-task/new-seed claim。
taxonomy registry、public projection 和每个 evaluation task 的映射都必须在 corpus/
Run manifest 中预注册并内容寻址,不能从 private evaluator 字段推断。
latest-development 只允许作为 CLI 解析 convenience:在 Research Run acceptance
前解析为 exact Knowledge/Recall Input Snapshot ID,把 exact ID 写入 Run spec;任何
Runtime Activity 和 acceptance manifest 中不得持久化 latest alias。
schema revision 3 保留所有 v2 表和 payload,新增:
表名尾缀表示该 logical payload family 的版本,不等同于 SQLite user_version;
*_v2 memory/recall tables 与 *_v1 新 sidecars 都在 schema revision 3 一次创建。
| 表 | 关键列/约束 |
|---|---|
ledger_commits_v1 |
position INTEGER PRIMARY KEY AUTOINCREMENT, namespace/record_kind/record_id/payload_digest TEXT NOT NULL, payload_digest CHECK(lowercase 64-hex), UNIQUE(record_kind,record_id);snapshots record the relevant namespace frontier |
experience_distillation_receipts_v1 |
record_id TEXT PK, experience_id TEXT UNIQUE NOT NULL FK, nullable work_item_id TEXT FK -> distillation_work_items_v1(record_id), nullable non-FK abandoned_work_item_id/abandoned_work_item_payload_digest/abandonment_proof_ref/abandonment_proof_digest TEXT, disposition TEXT CHECK(queued_for_comparison/deferred_ineligible/not_required/abandoned_before_enqueue), distillation_policy_id/distillation_policy_digest TEXT NOT NULL, created_at TEXT NOT NULL, payload_json TEXT NOT NULL; queued iff committed Work Item is non-null and abandonment fields null;abandoned iff Work Item null and all abandonment fields non-null;deferred/not-required forbid both groups;abandoned validator recomputes the frozen non-inserted Work Item ID/digest and exact Experience/policy/profile lineage;source receipt never claims a later Activity |
distillation_work_items_v1 |
record_id TEXT PK, experience_id TEXT UNIQUE NOT NULL FK, namespace/distillation_policy_id/distillation_policy_digest/lifecycle_policy_id/lifecycle_policy_digest/campaign_admission_profile_ref/campaign_admission_profile_digest/created_at/payload_json TEXT NOT NULL, immutable append metadata campaign_profile_artifact_ref_id TEXT UNIQUE NOT NULL;profile 覆盖 workflow/continuation/model/tool/Adapter/Budget/retention/cardinality;artifact ref ID 从 Work Item ID/profile digest 确定性派生并排除在 record_id canonical projection 外;record_id 本身是唯一 campaign-admission/idempotency key;enqueue transaction 验证 Runtime proof 后先写此 row,再写引用它的 queued receipt,最后写 enqueue sidecar |
distillation_enqueue_transactions_v1 |
record_id TEXT PK, experience_id/work_item_id/handoff_id/artifact_ref_id/enqueue_attempt_id TEXT UNIQUE NOT NULL, attempt_generation/attempt_fence INTEGER NOT NULL CHECK(>=0), profile_proof_digest/work_item_payload_digest/ingestion_receipt_id/ingestion_receipt_digest/transaction_digest/created_at/payload_json TEXT NOT NULL; work_item_id FK, ingestion_receipt_id FK;row 与 Work Item、queued ingestion receipt、三者 journal rows 原子提交;payload/transaction digest 绑定原 proof 与 ordered receipts,exact retry/read-back 不依赖 current Runtime handoff state |
distillation_work_assignments_v1 |
record_id TEXT PK, work_item_id TEXT UNIQUE NOT NULL FK, campaign_manifest_ref/campaign_manifest_digest/campaign_run_id/activity_id/created_at/payload_json TEXT NOT NULL, UNIQUE(campaign_run_id,activity_id);record_id=distillation_work_assignment_id;Runtime proof must show run_kind=MEMORY_DISTILLATION, non-terminal Run and owned Activity |
distillation_batches_v1 |
record_id TEXT PK, evidence_snapshot_id TEXT NOT NULL FK, commit_authorization_id/commit_effect_id/campaign_run_id/activity_id TEXT NOT NULL, activity_generation/fence INTEGER NOT NULL CHECK(>=0), namespace/distillation_policy_id/distillation_policy_digest/lifecycle_policy_id/lifecycle_policy_digest/created_at/payload_json TEXT NOT NULL; payload pins exact v1 singleton campaign Work Item plus Evidence Snapshot/Experience/candidate coverage and canonical request |
distillation_reports_v1 |
record_id TEXT PK, batch_id TEXT UNIQUE NOT NULL FK, commit_authorization_id/commit_effect_id/affected_active_view_digest/created_at/payload_json TEXT NOT NULL; payload pins exact Work Item/Experience/Disposition coverage and all committed candidate/decision/memory/event/relation IDs; the digest covers only sorted affected scope final heads/dispositions, all protected by expected-head CAS; canonical payload excludes invocation telemetry, and its journal payload digest is the report digest used by Completion |
distillation_commit_conflicts_v1 |
record_id TEXT PK, commit_authorization_id/commit_authorization_digest/proposal_id/proposed_batch_id/conflict_kind/created_at/payload_json TEXT NOT NULL, commit_authorization_id UNIQUE; conflict_kind CHECK(LIFECYCLE_HEAD_STALE/RETENTION_REVOKED);payload 按 kind 保存 sorted expected/observed scope heads,或 current retention frontier/set + reachable blocked targets;proposed_batch_id is an expected identity, not an FK because no Batch exists on this branch; this no-commit receipt is mutually exclusive with any Batch using that authorization |
distillation_work_dispositions_v1 |
record_id TEXT PK, batch_id TEXT NOT NULL FK, work_item_id TEXT UNIQUE NOT NULL FK, experience_id TEXT NOT NULL FK, disposition TEXT CHECK(covered_by_decision/deferred_no_comparator/rejected_not_comparable/rejected_no_candidate), nullable decision_id TEXT FK, created_at/payload_json TEXT NOT NULL, UNIQUE(batch_id,work_item_id); covered_by_decision iff decision non-null, all non-candidate dispositions forbid it |
distillation_work_completions_v1 |
record_id TEXT PK, work_item_id TEXT UNIQUE NOT NULL FK, assignment_id TEXT UNIQUE NOT NULL FK, campaign_run_id/activity_id/terminal_authorization_id/terminal_authorization_digest TEXT NOT NULL, activity_generation/fence INTEGER NOT NULL CHECK(>=0), nullable commit_effect_id TEXT, nullable batch_id TEXT FK, nullable report_id TEXT FK, nullable report_digest/terminal_receipt_ref/terminal_receipt_digest TEXT, terminal_status TEXT CHECK(completed/dead_letter/cancelled), created_at/payload_json TEXT NOT NULL; assignment/Run/Activity/generation/fence must match exactly; completed requires commit authorization/effect and all three Batch/Report fields, forbids terminal receipt;dead-letter/cancelled require closure authorization plus a Runtime-resolvable typed terminal receipt ref/digest and forbid commit/Batch/Report fields |
evidence_snapshots_v1 |
record_id TEXT PK, ledger_position INTEGER NOT NULL, namespace TEXT NOT NULL, nullable run_id/arm_id/pair_id TEXT, eligibility_policy_digest TEXT NOT NULL, created_at TEXT NOT NULL, payload_json TEXT NOT NULL;null Run/arm/pair 表示 namespace-wide base snapshot |
evidence_snapshot_members_v1 |
snapshot_id TEXT FK, ordinal INTEGER CHECK(ordinal>=0), experience_id/observation_id/verification_id/intervention_id/provenance_id TEXT NOT NULL FK, bundle_digest TEXT NOT NULL, PRIMARY KEY(snapshot_id,experience_id), UNIQUE(snapshot_id,ordinal) |
evidence_snapshot_capture_operations_v1 |
record_id TEXT PK, request_digest/snapshot_id/snapshot_payload_digest TEXT NOT NULL, snapshot_id FK, snapshot_journal_position INTEGER NOT NULL, created_at/payload_json TEXT NOT NULL; its own journal position is resolved by (record_kind,record_id), not embedded in the payload; same operation ID/same request returns this original mapping before reading current Evidence frontier, while different request conflicts; operation ID is excluded from Snapshot ID |
knowledge_candidates_v2 |
record_id TEXT PK, source_snapshot_id TEXT NOT NULL FK, proposed_family_key TEXT NOT NULL, record_kind TEXT CHECK(semantic/procedure), decision_point TEXT CHECK(ideation/experiment_design/intervention/diagnosis/writing), created_at TEXT NOT NULL, payload_json TEXT NOT NULL |
memory_records_v2 |
record_id TEXT PK, family_id/scope_variant_id TEXT NOT NULL, nullable prior_memory_id TEXT FK, record_kind TEXT CHECK(semantic/procedure), decision_point TEXT CHECK(ideation/experiment_design/intervention/diagnosis/writing), domain TEXT NOT NULL, created_at TEXT NOT NULL, payload_json TEXT NOT NULL |
memory_evidence_links_v2 |
memory_id/experience_id/observation_id/verification_id/intervention_id/provenance_id TEXT NOT NULL FK, relation TEXT CHECK(supports/contradicts), support_unit_id TEXT NOT NULL, PRIMARY KEY(memory_id,experience_id,support_unit_id,relation) |
knowledge_lifecycle_events_v2 |
record_id TEXT PK, memory_id TEXT NOT NULL FK, family_id/scope_variant_id TEXT NOT NULL, nullable prior_event_id TEXT FK, expected_head_key TEXT NOT NULL, resulting_disposition TEXT CHECK(provisional/active/contested/superseded/retracted), created_at/payload_json TEXT NOT NULL, CHECK(expected_head_key=coalesce(prior_event_id,'GENESIS')), UNIQUE(scope_variant_id,expected_head_key) |
memory_scope_variant_heads_v1 |
scope_variant_id TEXT PK, family_id/memory_id/lifecycle_event_id TEXT NOT NULL with memory/event FKs, cas_version INTEGER NOT NULL CHECK(cas_version>=1);derived projection updated only by expected-head CAS |
memory_relations_v2 |
source_memory_id/target_memory_id TEXT NOT NULL FK, relation TEXT CHECK(supersedes/scope_refines/procedure_implements/contests), caused_by_event_id TEXT NOT NULL FK, PRIMARY KEY(source_memory_id,target_memory_id,relation), CHECK(source_memory_id<>target_memory_id) |
distillation_decisions_v2 |
record_id TEXT PK, candidate_id TEXT UNIQUE NOT NULL FK, disposition TEXT CHECK(rejected/deferred/promoted_provisional/promoted_active/promoted_contested), nullable memory_id TEXT FK, distillation_policy_id/distillation_policy_digest/lifecycle_policy_id/lifecycle_policy_digest/created_at/payload_json TEXT NOT NULL; promoted iff memory non-null |
retention_erasure_intents_v1 |
record_id TEXT PK, incident_id TEXT UNIQUE NOT NULL, namespace/target_kind/target_id/target_digest/reason_code/retraction_requirement/external_target_ref/external_target_digest/retention_policy_digest/created_at/payload_json TEXT NOT NULL, nullable external_object_generation/retraction_event_id/retraction_event_digest, UNIQUE(target_kind,target_id);payload 含 sorted expected affected index build/artifact IDs;append before any external erasure and immediately enters deny set |
memory_retention_tombstones_v1 |
record_id TEXT PK, intent_id TEXT UNIQUE NOT NULL FK, target_kind/target_id/target_digest/incident_id/reason_code/retraction_requirement/external_erasure_receipt_ref/external_erasure_receipt_digest/created_at/payload_json TEXT NOT NULL, nullable retraction_event_id/retraction_event_digest TEXT, UNIQUE(target_kind,target_id);payload 含 sorted index-invalidation receipt refs/digests并须与 Intent expected set exact equality;polymorphic target 由 transaction validator 验证仍有 canonical audit envelope/journal,schema v3 不删除该 row |
knowledge_snapshots_v1 |
record_id TEXT PK, lifecycle_position INTEGER NOT NULL, selection_policy_digest/namespace/created_at/payload_json TEXT NOT NULL; no retrieval/index columns |
knowledge_snapshot_members_v1 |
snapshot_id/memory_id/lifecycle_event_id/family_id/scope_variant_id TEXT NOT NULL, FKs to snapshot/memory/event, ordinal INTEGER NOT NULL, PRIMARY KEY(snapshot_id,scope_variant_id), UNIQUE(snapshot_id,ordinal) |
derived_memory_indexes_v1 |
ready receipt only:record_id TEXT PK, knowledge_snapshot_id TEXT NOT NULL FK, nullable evidence_snapshot_id TEXT FK, adapter_kind/adapter_digest/vector_digest/artifact_digest/created_at/payload_json TEXT NOT NULL;可进入 Recall Input 的行必有完整 artifact/vector digest |
derived_memory_index_failures_v1 |
record_id TEXT PK, knowledge_snapshot_id TEXT NOT NULL FK, nullable evidence_snapshot_id TEXT FK, adapter_kind/adapter_digest/attempt_key/error_code/failure_receipt_digest/created_at/payload_json TEXT NOT NULL, retry_ordinal INTEGER NOT NULL CHECK(retry_ordinal>=0), UNIQUE(attempt_key,retry_ordinal);attempt key 是包含 source/Adapter/policy identity 的全局 content ID,failure 不能被 Recall Input 引用 |
recall_input_snapshots_v1 |
record_id TEXT PK, knowledge_snapshot_id TEXT NOT NULL FK, nullable evidence_snapshot_id TEXT FK, retrieval_policy_digest/renderer_digest/tokenizer_digest/created_at/payload_json TEXT NOT NULL |
recall_input_index_builds_v1 |
recall_input_id/index_build_id TEXT NOT NULL FK, ordinal INTEGER NOT NULL, PRIMARY KEY(recall_input_id,index_build_id), UNIQUE(recall_input_id,ordinal) |
decision_contract_views_v1 |
record_id TEXT PK, source_contract_digest/actor_view_digest/created_at/payload_json TEXT NOT NULL; payload validator forbids private/evaluator fields |
decision_intents_v1 |
record_id TEXT PK, run_id/activity_id/iteration_id/evaluation_task_id/task_scope_id/research_context_snapshot_id/decision_point/contract_view_id/decision_slot_id/artifact_kind/allowed_action_digest/planned_actor_model_ref/planned_actor_model_digest/planned_actor_config_digest/planned_prompt_template_ref/planned_prompt_template_digest/planned_actor_policy_digest/memory_profile_ref/memory_profile_digest/memory_assignment_manifest_ref/memory_assignment_manifest_digest/recall_requirement/created_at/payload_json TEXT NOT NULL, immutable append-metadata admission_authorization_id/admission_authorization_digest TEXT UNIQUE NOT NULL excluded from canonical payload/record ID, recall_requirement CHECK(REQUIRED/REGISTERED_NOT_REQUESTED), decision_point CHECK(ideation/experiment_design/intervention/diagnosis/writing), generation INTEGER NOT NULL CHECK(generation>=0), nullable arm_id/pair_id TEXT, contract_view_id FK, task_scope_id content-ID CHECK, UNIQUE(run_id,activity_id,generation,decision_slot_id);append requires matching Runtime admission proof;planned actor fields name pinned plan/template identities rather than an executed prompt;artifact_kind 是 pinned workflow registry ID,不是开放 enum |
decision_recall_contexts_v2 |
record_id TEXT PK, intent_id TEXT UNIQUE NOT NULL FK, recall_input_id TEXT NOT NULL FK, immutable append-metadata commit_authorization_id/commit_authorization_digest TEXT UNIQUE NOT NULL excluded from canonical payload/record ID, status TEXT CHECK(ok/empty/degraded), nullable degradation_reason/fallback_policy_digest TEXT, retention_check_digest/tombstone_set_digest/rendered_context_digest/tokenizer_digest TEXT NOT NULL, retention_frontier/rendered_token_count INTEGER NOT NULL CHECK(>=0), created_at/payload_json TEXT NOT NULL, UNIQUE(record_id,intent_id) for Outcome composite FK; degraded iff reason+fallback non-null, ok/empty require both null |
decision_recall_no_commit_receipts_v1 |
record_id TEXT PK, generic authorization_id/authorization_digest TEXT UNIQUE NOT NULL, authorization_kind TEXT CHECK(ADMISSION/COMMIT), intent_id/transition_kind/expected_record_id/expected_payload_digest/reason_code/observed_phase_digest/created_at/payload_json TEXT NOT NULL, transition_kind CHECK(APPEND_INTENT/APPEND_CONTEXT/APPEND_OUTCOME), exact kind matrix APPEND_INTENT->ADMISSION, `APPEND_CONTEXT |
decision_recall_items_v2 |
context_id TEXT FK, citation_id TEXT, ordinal INTEGER CHECK(ordinal>=0), card_id/source_record_id/payload_json TEXT NOT NULL, source_kind TEXT CHECK(semantic/procedure/episodic), nullable memory_id TEXT FK, PRIMARY KEY(context_id,citation_id), UNIQUE(context_id,ordinal) |
recall_decision_outcomes_v1 |
record_id TEXT PK, intent_id TEXT UNIQUE NOT NULL FK, nullable context_id TEXT UNIQUE, composite FK(context_id,intent_id) -> decision_recall_contexts_v2(record_id,intent_id), immutable append-metadata commit_authorization_id/commit_authorization_digest TEXT UNIQUE NOT NULL excluded from canonical payload/record ID, semantic commit_authority TEXT CHECK(NORMAL/RUNTIME_CLOSURE), nullable blocked_source_proof_ref/blocked_source_proof_digest/decision_memory_binding_ref/decision_memory_binding_digest TEXT, source_status TEXT CHECK(blocked/not_requested/cancelled_before_recall/failed_before_recall/empty/degraded/ok), outcome_reason_code TEXT NOT NULL validated by the closed source-status matrix, decision_status TEXT CHECK(blocked/actor_failed/rejected/no_op/completed/cancelled), artifact_status TEXT CHECK(committed/not_produced), planned actor identities read from Intent, nullable executed actor_model_digest/actor_response_digest/rendered_prompt_digest TEXT, nullable terminal_reason_code TEXT CHECK(BLOCKED_RECALL_SOURCE/ACTOR_INVOCATION_FAILED/ACTOR_OUTPUT_MALFORMED/RUNTIME_FAILURE_CLOSURE/PROPOSAL_POLICY_REJECTED/PREFLIGHT_REJECTED/NO_APPLICABLE_ACTION/ALREADY_SATISFIED/CANCELLED_BY_COMMAND/CANCELLED_BY_INCIDENT), nullable terminal_receipt_ref/terminal_receipt_digest/artifact_id/artifact_digest/intervention_id/pre_recall_closure_event_id/pre_recall_closure_event_digest TEXT, intervention_id FK -> intervention_records(record_id), created_at/payload_json TEXT NOT NULL; blocked-source-proof pair is non-null iff source_status=blocked, otherwise both fields are null |
recall_decision_dispositions_v1 |
outcome_id/context_id/citation_id TEXT NOT NULL, disposition TEXT CHECK(adopted/rejected/not_considered), nullable mapped_target TEXT, reason_code TEXT CHECK(adopted_applicable/rejected_scope_mismatch/rejected_counterevidence/rejected_protected_action/rejected_stale_dependency/rejected_low_expected_utility/not_considered_budget/not_considered_cancelled/not_considered_actor_failed), PRIMARY KEY(outcome_id,citation_id), composite FK (context_id,citation_id) to recall items;后两个 reason 仅允许 RUNTIME_CLOSURE |
recall_outcome_attempt_links_v1 |
record_id TEXT PK, outcome_id TEXT UNIQUE NOT NULL FK, attempt_id TEXT NOT NULL FK, created_at/payload_json TEXT NOT NULL; record_id=outcome_attempt_link_id,append-only optional lineage when an Attempt is opened after the Outcome |
memory_records_v2 只统一存储物理表;record_kind 必须选择对应 Pydantic
model 验证。Domain Interface 仍区分 SemanticKnowledgeRecord 和 ProcedureRecord。
只有本设计新增的 content-derived logical-ID 列和 raw digest 列加 lowercase 64-hex
CHECK。既有/外部 operational identifiers(包括 run_id、activity_id、
iteration_id、arm_id、pair_id、legacy Experience/Intervention IDs)保持其原
schema contract,不得套用 64-hex 约束。所有 closed enum 采用明确 CHECK;
artifact_kind、retention target_kind/reason_code、index adapter_kind/error_code
是由 payload 中 pinned content-addressed workflow/policy/registry 校验的 versioned
code,不是开放 SQL enum,transaction validator 必须证明 code 在所引用 registry 中;所有
payload_json read-back 后必须 Pydantic parse 且 indexed columns 与 payload 一致。
唯一例外是上述 immutable admission_authorization_id/digest、
commit_authorization_id/digest、campaign_profile_artifact_ref_id 与 enqueue sidecar
handoff/attempt/proof append metadata:
它们由 Store transaction 从 proof 写入并与 Runtime record equality-validated,但明确
不进入对应 canonical payload/record ID;任何其他 indexed-column exception 禁止。
表中用 / 连写的列名表示每个名称都是独立列,所标类型与 NULL 约束分别适用于
每列,DDL 中不得创建带 / 的真实列。除显式写 nullable 外均为 NOT NULL。
DDL 还必须包含以下不可省略的 CHECK/UNIQUE:
distillation_decisions_v2仅promoted_*可且必须有memory_id;- queued Experience Distillation Receipt 以 immediate FK 引用唯一 Work Item,先写
Work Item、后写 queued ingestion receipt、最后写以该 receipt 为 immediate FK 的
DistillationEnqueueTransactionsidecar,并按相同顺序追加三条 journal rows 后在同一 transaction commit;非 queued receipt 的work_item_id IS NULL;queued transaction 必须验证 strictWorkItemProfileArtifactProof的 Work Item/owner/profile/object generation、 deterministic handoff/ref IDs、attempt ID/generation/fence、ACTIVEref 和PENDING|BOUNDstate,并把 exact ref ID 写入 Work Item append metadata,把原 proof/ attempt/transaction digest 写入 frozenDistillationEnqueueTransactionpayload/enqueue receipt;deferred/not-required 禁止 proof/ ref。same Work Item/ref exact retry 返回原 transaction,foreign/inactive/released/ mismatched proof 零 Ledger write;Work Completion 的 terminal payload 条件由 CHECK 加 read-back validator 同时强制; abandoned_before_enqueueappend 必须先通过 Runtime public getter read-back exactDistillationEnqueueObligationAbandonedProof,并在同一 Ledger transaction 证明 Work Item/enqueue sidecar 不存在;调用必须携带 frozenabandoned_work_item,Store 重算其 ID/payload digest 并逐字段匹配 receipt Experience、policy/profile lineage 与 proof。 receipt 绑定 non-FK abandoned Work Item ID/payload digest/proof pair,但不插 Work Item。 A-Experience proof/payload 与 B-Experience receipt 的交换必须零写入。 Runtime 只有 read-back 该 receipt 后才可 release handoff/ref;queued/deferred/not-required 与 abandoned field matrix 任一混用都 rollback;- Assignment append 验证 exact campaign manifest membership/ordinal/digest 与
AWAITING_ASSIGNMENTRuntime proof;Runtime 重新 read-back Assignment proof 后才可 CAS 到 READY。completed必须绑定 Runtime commit authorization ID/digest、logical Effect、generation/fence 并 forbids terminal receipt;dead_letter/cancelled必须绑定 mutually-exclusive closure authorization 和可由 Runtime public getter read-back 的 typed terminal receipt ref/digest,并 forbid commit Effect/Batch/Report; completedWork Completion 的batch_id必须 FK 到 canonical Batch,report_id必须 FK 到该 Batch 唯一 canonical Report,report_digest必须等于 Report journal payload digest;transaction validator 通过KnowledgeStoregetter read-back 二者, 并验证其 exact Work Item/Experience ID、namespace/scope、Distillation + Lifecycle policy identities 与 Work Item 相同,且 Report 含该 Work Item 唯一 committedDistillationWorkDisposition:covered_by_decision必须解析到 reject/defer/promote Decision,三个 no-candidate dispositions 必须无 Candidate/Decision;任意裸 digest、 unrelated Batch/Report 或缺失 disposition 都不能关闭 item;- successful Completion 只能在
commit_distillation()内与 Batch、Report、Knowledge/ lifecycle writes 原子提交;独立 closure helper 禁止completed。Store 必须 read-back Runtime authorization,验证 exact Assignment/Run/Activity/generation/fence/Effect 与 proposal/final IDs/digests;same authorization/different payload 或 stale/foreign proof fail closed; - 每个 commit authorization attempt 至多对应一个 successful Batch 或一个
DistillationCommitConflict,两者互斥;Conflict 的 expected/observed head projection 或 retention frontier/blocked-target projection 必须从当前 transaction read-back, exact retry 返回原 position。Runtime 只有在 conflict getter 与 digest 验证成功后才可 CAS authorization 为RETIRED_NO_COMMIT;retired authorization 禁止后来写 Batch; - successful v1 Batch 对 singleton Work Item 恰有一个 Work Disposition;Report 和
Completion read-back 必须指向同一 disposition。
covered_by_decisioniff nullable Decision FK 非空;no-candidate 状态不能伪造 Candidate/Decision; - Recall append 不依赖
UNIQUE(intent_id)猜竞态顺序。完整DecisionIntentProposal先发布/read-back;Runtime 以 CAS 创建REGISTERING和 admission authorization,Ledger success 才推进OPEN,typed no-commit 则 retire ghost registration。此后每个 Intent 的 closed phase 是OPEN/CONTEXT_COMMITTING/CONTEXT_COMMITTED/OUTCOME_COMMITTING/ OUTCOME_COMMITTED,并由 Run-version/control-event/Activity-generation/fence CAS 发唯一 single-use authorization。closed tagged union 为DecisionRecallAppendAuthorization = DecisionIntentAdmissionAuthorization | DecisionRecallCommitAuthorization:admission subtype 只给 Intent,commit subtype 只给 Context/Outcome。union 绑定 transition kindAPPEND_INTENT|APPEND_CONTEXT| APPEND_OUTCOME、authorityADMISSION|NORMAL|RUNTIME_CLOSURE、Intent/Run/ Activity/generation/fence、expected record ID/payload digest 和 optional preceding Context; DecisionRecallCommitAuthorizationProof另含 nullableblocked_source_proof_ref/blocked_source_proof_digest;两者必须同时非 null 当且仅当APPEND_OUTCOME + NORMAL的 expected Outcome 为source_status=blocked,其他 transition、 authority 或 source status 必须同时为 null。Blocked Outcome proposal、authorization 与 canonical Outcome 的这两个字段必须 byte-equal;- legal cross-product 是 exact closed matrix:
APPEND_INTENT <-> ADMISSION、APPEND_CONTEXT <-> NORMAL、APPEND_OUTCOME <-> NORMAL|RUNTIME_CLOSURE。Runtime issuer 与 Store transaction 都验证;Runtime admission getter 只返回 admission subtype, commit getter 只返回 commit subtype,另一 subtype 必须拒绝;closure Context、 normal/admission Intent mix、 admission Outcome 等非法 pair 必须在零 Ledger write 下拒绝; - normal/closure builder 都必须先把 complete Context/Outcome proposal 发布为 scoped
Runtime artifact;authorization 另绑定其 ref/digest。Runtime read-back proposal 后才可
grant,Ledger canonical payload bytes 必须与 proposal 内 record byte-equivalent;Store
仅在 transaction 内另加 excluded-from-ID 的 immutable authorization metadata。Blocked
builder 还必须先从 Runtime Artifact Store read-back
DecisionRecallBlockedProposal,并把 getter 返回的 exact blocked-source proof pair 同时写入 Outcome proposal 与 authorization; append_decision_recall()与append_recall_outcome()必须 read-back authorization canonical record/digest 和当前 unresolved attempt,再在一个 Ledger transaction 验证 exact payload。Context 只可从OPENauthorization 写且 Outcome 必须 absent;normal Outcome 只可从CONTEXT_COMMITTED写,或对 registered-not-requested/typed blocked 从OPEN写。成功 receipt 由 Runtime read-back 后推进 committed phase;typed no-commit 才能 retire authorization;reply loss 以 same ID/digest reconcile;- blocked Outcome append 时,Store 必须通过注入的
DecisionRecallArtifactRead.get_decision_recall_blocked_proof()独立解析blocked_source_proof_ref,重算 artifact/proposal digest,并逐字段核对 producer/object、 proposal ID/digest、Intent ID/digest、nullable Recall Input ID/digest、request/policy digest、 blocked reason 和 reason-specific evidence;retention evidence 还须逐字段等于 exactRetentionCheck的 Recall Input、frontier、tombstone set 与 sorted blocked targets。 getter proof、Outcome、Outcome proposal 或 authorization 任一 foreign/swap/forged/mismatch 均须在零 Ledger write 下拒绝; - Context transaction 在写任何 Context/item 前按 namespace 重算 current
RETENTION_KINDSfrontier/open-intent+tombstone set,要求与 proposal/authorization 的RetentionCheckexact equality,并 anti-join every selected source/index。retention-first 返回RETENTION_FRONTIER_STALEno-commit 且零 Context/item;Context-first 是该一次 actor exposure 的 Ledger linearization point,后续 Intent/Tombstone 阻塞所有 future Context; - success append/read-back 必须包含 exact authorization ID/digest metadata;same record/same authorization 才是 replay,same record/different authorization 或相反组合 是 identity conflict,Runtime 不得据 canonical record 单独存在推进 phase;
- typed no-commit 不是异常或“查不到 row”:Store 在验证 authorization 后以同一
transaction 证明零 Intent、Context、Context-item、Outcome、disposition write,并 append 唯一
DecisionRecallNoCommitReceipt。authorization ID 下 success/no-commit 互斥;exact retry 返回原 journal position,same authorization/different expected payload fail closed。 Receipt 使用 genericauthorization_kind/id/digest;APPEND_INTENT必须是ADMISSIONproof,APPEND_CONTEXT|APPEND_OUTCOME必须是COMMITproof,Store getter 以同一 generic authorization ID read-back,不能把 admission 塞进 commit-only 列; Runtime 必须从 Store getter read-back receipt ID/digest/reason/observed phase 后才可 retire; - cancel/fail-first 的 Runtime CAS 禁止 normal authorization,并授予 mutually-exclusive
RUNTIME_CLOSUREOutcome authorization。若 normal append authorization 已 unresolved, cancel/failure 只登记一个由同一 control-event CAS 仲裁的 pending closure kind,不早撤 fence;Ledger success 后 Context attempt 转为 closure Outcome,Outcome attempt 则 immutable Outcome 胜出;no-commit 后 retire attempt 并在任何 normal retry 前应用 pending closure。 cancel-first 只抑制 duplicate/cancellation-induced failure;failure-first 对随后 cancel 为 closure-help/no-op。独立 integrity/contract/infrastructure failure 另存 secondary evidence,arbitration 后按 success/no-commit 重新判定 failure path。未解决 attempt 保持 COMMITTING/必要时 WAITING_INPUT,不能并发发第二授权; - Recall Context 的
degradediff typed degradation reason 与 fallback policy digest 都非空;ok/empty必须两者皆空。Retention Check/frontier/tombstone-set 与完整 rendered-context identity 必须参与 Context ID/read-back;golden vectors 必须区分 healthy empty、degraded zero-card 与 retention-frontier change; recall_decision_outcomes_v1加UNIQUE(record_id,context_id);blocked、not_requested、cancelled_before_recall、failed_before_recall必须context_id IS NULL,其他 source status 必须有 context;Intent/Outcome requirement 是双向封闭映射:read-back Intent 的recall_requirement=REGISTERED_NOT_REQUESTEDiff Outcomesource_status=not_requested、Context null、disposition 行数为 0;REQUIREDIntent 使用not_requested或 registered Intent 使用 blocked/pre-recall/context status 都必须 失败,caller 不能传 profile bool 覆盖;- 两个 pre-recall closure status 只允许
REQUIREDIntent 且 Context 尚不存在;cancelled_before_recall -> decision_status=cancelled,failed_before_recall -> actor_failed,均 zero dispositions/not_produced,并必须传RUNTIME_CLOSUREauthorization,其中包含DecisionIntentClosureProof。Store 经 Runtime getter read-back closure event,验证 exact Run/Activity/Intent/generation、cause 和 Context-absent frontier。只有这两个 source status 可令pre_recall_closure_event_id/digest非 null:cancelled 分支必须与 authorization 的terminal_evidence_ref/digestbyte-equal 且 evidence kind 为CANCEL_EVENT;failed 分支同样 byte-equal 且 kind 为RUNTIME_FAILURE。两分支的terminal_receipt_ref/digest也必须引用同一 evidence。所有其他 source status 的pre_recall_closure_event_id/digest必须同时为 null,即使提供的是另一条自身有效的 closure event 也拒绝; - outcome 的
artifact_status=committediffartifact_id和artifact_digest都非 null;not_producediff 两者都 null。completed必须 committed,blocked/actor_failed/no_op/cancelled必须 not_produced;rejected仅当有持久化的 typed rejection artifact 时可 committed。artifact_kind=intervention且 committed 时intervention_id必须非 null、FK 可解析并与 artifact ID/digest 一致;其他 kind 禁止伪造 intervention lineage; - Outcome 的 planned actor model/config/template/policy identities 必须从 Intent read-back; executed actor model/response/rendered-prompt identities 只有真实 actor invocation 才能 非 null;blocked、两个 pre-recall closure 和任何 actor-before-invocation closure 必须 全 null,禁止用 planned template digest 伪造 executed prompt;
- actor invocation 发生时
decision_memory_binding_ref/digest必须同时非 null,等于 actor Effect 前已发布/read-back 且由该 Effect request exact binding 的 planner-input memory-binding artifact ref/canonical digest,并按 discriminant 与 Intent/Recall Input/Context/counts 或 Intent governance/no-memory zero fields 完全一致。成功的RecalledInterventionDecision.decision_memory还必须与该输入 artifact byte-equivalent;actor timeout/crash/unparseable output 不要求伪造 response envelope。未调用 actor 的路径该字段必须 null。Outcome ID 包含此字段;foreign envelope、input/response binding/Effect swap 或 governance digest tamper 必须 rollback; terminal matrix 是 closed:completed仅允许NORMAL、null reason/receipt 且无 closure event/Runtime-only disposition;blocked只允许BLOCKED_RECALL_SOURCE、NORMAL、null terminal receipt,并要求 Outcome/authorization 的blocked_source_proof_ref/digest指向同一个 strict read-backDecisionRecallBlockedProof;retention block 的 proof evidence 必须包含 exactRetentionCheck,不得另附一个 caller-supplied check;actor_failed一律由 Runtime closure builder 写:model invocation failure/malformed output 分别使用ACTOR_INVOCATION_FAILED|ACTOR_OUTPUT_MALFORMED,绑定同 Intent/model Effect failure receipt;其他 Runtime failure 使用RUNTIME_FAILURE_CLOSURE和 closure event receipt。三者均要求RUNTIME_CLOSUREauthorization;非空 Context 的 card 由 Runtime 写not_considered_actor_failed;rejected只允许PROPOSAL_POLICY_REJECTED|PREFLIGHT_REJECTED、NORMAL和 exact policy/preflight rejection receipt;no_op只允许NO_APPLICABLE_ACTION|ALREADY_SATISFIED、NORMAL、 null receipt;cancelled只允许CANCELLED_BY_COMMAND|CANCELLED_BY_INCIDENT、RUNTIME_CLOSURE和 exact closure receipt。两个 pre-recall statuses 及 post-Context Runtime-only dispositions 必须走 closure branch;receipt ref/digest 必须同 null/非 null, Store read-back 后与 authorization 所绑 closure/model-Effect/rejection receipt exact equality。foreign/forged receipt、closure-auth completed 或 NORMAL actor-failure/ cancellation rollback; authorization proof 的 nullable terminal-evidence triple 使用 closed kindMODEL_EFFECT_FAILURE|POLICY_REJECTION|PREFLIGHT_REJECTION|CANCEL_EVENT| RUNTIME_FAILURE;Runtime grant 前已从 authority record read-back,Store 要求 Outcome receipt 与 proof exact equality,不接受 caller 单独提交的 ref/digest; 这些字段全进入 Outcome ID;golden vectors必须区分 block reasons、malformed actor output、policy/preflight rejection、no-op、actor failures 和 cancellation receipts; - non-null Outcome context 必须通过
(context_id,intent_id)composite FK 指向同一 Intent 的 Context;禁止分别合法但交叉拼接的 Intent A / Context B; - allowed status matrix 由 transaction validator 封闭校验:
source_status=blockediffdecision_status=blocked,且 artifact 必为not_produced;source_status=not_requested只允许 Intent 中已验证的 registered control/no-memory binding,decision 可为actor_failed/rejected/no_op/completed/cancelled但不可blocked;cancelled_before_recall与failed_before_recall只允许上一条 exact mapping;empty/degraded/ok同样只允许后五种 decision status。emptyContext item 数必须 为 0,ok必须至少 1,degraded按 pinned fallback policy 可为 0 或多项; outcome_reason_code是 mandatory closed source-level reason:blocked只允许blocked_request_invalid/blocked_identity_mismatch/blocked_policy_mismatch/ blocked_corrupt_input/blocked_contamination/blocked_private_exposure/ blocked_retention_revoked;not_requested只允许registered_not_requested;两个 pre-recall status 各用同名 reason;empty/degraded/ok各用retrieval_empty/retrieval_degraded/retrieval_ok。它不替代 decision terminal reason;- Context 已提交后若 cancellation/actor failure 的 closure authorization 胜出,Outcome
保留原 Context/source status;Runtime 从 exact Context membership 为每张 card 写且只写
not_considered_cancelled或not_considered_actor_failed,empty Context 为零行。normal actor 禁止这两个 reason,closure 禁止接收/拼接 partial actor dispositions; recall_decision_dispositions_v1以(outcome_id,context_id)外键指向上项,(context_id,citation_id)外键指向 recall items,因此不能借用另一 context 的 card;- Recall item polymorphic source matrix 由 Context append transaction read-back:
semantic/procedure必须memory_id=source_record_id,解析到memory_records_v2的匹配record_kind,并是 Context 所绑 Recall Input 的 exact Knowledge Snapshot member/lifecycle head;其 family/scope/lifecycle event、 disposition 和 as-of position 必填,且 episodic-only 字段必须 canonical null。episodic必须memory_id IS NULL,family/scope/lifecycle fields 也必须 canonical null;其source_record_id/digest、Evidence Snapshot ID、bundle digest、Verification ID 与 evidence-ledger as-of position 必填并解析到该 Recall Input exact Evidence Snapshot member。 Candidate、非 member、kind mismatch 或 forged digest 全部 rollback; - outcome
source_status必须与 referenced context status 相同,由 transaction validator read-back 检查; - Outcome owner 始终由
intent_id -> activity_id决定,不要求 Attempt 存在;后开的 Attempt 只可追加唯一recall_outcome_attempt_links_v1,不得回写或 reparent Outcome; - Knowledge Snapshot member 的
family_id/scope_variant_id必须与 memory payload 和 lifecycle event 一致;indexed columns 与 JSON 不一致一律 rollback。 - ready index receipt 与 failure receipt 分表;失败重试不改变 source/policy
identity,成功后按完整 canonical outputs 得到唯一 ready build ID。Recall Input
只能 FK 到
derived_memory_indexes_v1。 - Memory/Procedure target 先从 current lifecycle head 确定性构造 expected retraction
event ID/digest;
begin_erasure()在同一 Ledger transaction append Intent、该 retraction event、head CAS 和各自 journal rows,再 read-backRetentionIntentCommitReceipt。只有 registry 中非-lifecycle target kind 才传 null event,并在 Intent 写 typednot_applicable_target_kind。因此 Intent 是 deletion flow 的首个 durable fact,不存在“先 retraction、crash、却无 open incident”的缝; begin_erasure()必须先按 stableincident_id/retention_erasure_intent_id查询既有 transaction,再做 expected-head CAS。same incident + byte-identical Intent/retraction exact retry 验证 Intent/event/journal receipts,以及 current head 等于该 retraction 或为 其合法 descendant 后返回原RetentionIntentCommitReceipt;same incident/target 但 payload 不同是 identity conflict。reply loss 后不得从新 current head 重派生第二 event;- Intent 冻结 incident/target/object generation 与 exact affected index set;从其 journal position 起 open Intent 就进入 deny set。在执行任何 external erasure/invalidation 之前必须已 read-back该 receipt;
- Adapter 再通过
RetentionRuntimeReadpublic getters read-back exact external artifact erasure proof 与每个 expected ready index artifact 的 invalidation proof,要求 incident/ target/generation exact equality;最后 append 引用 Intent 的 Tombstone。裸 digest、漏 index、extra index、foreign generation 或顺序颠倒均 fail closed; _assert_publishable_retention_frontier(tx, ...)是 Store-internal、transaction-local implementation detail,不属于任何 public Protocol,也不返回可供调用方跨事务持有的 capability/check receipt。它不是可在 两次 public 调用间复用的 check。每个新 Knowledge/Evidence Snapshot、ready index、 Recall Input 或 Recall Context append 必须在自己的同一 Ledger transaction自行派生 currentRETENTION_KINDSfrontier/set、展开 canonical reachable-target closure、 anti-join open Intent/Tombstone;有 caller expected check 时还须 exact equality。publicappend_*不得先 check 后另开 transaction;caller 不能用 stale frontier 绕过删除;- recovery 从
list_open_erasure_intents()扫描并以同 incident/target IDs 补齐 external receipt、invalidation 和 Tombstone suffix。crash 在任一 seam 后 open Intent 已先 durable,因此 publication/recall 始终 blocked;不得在 external erasure 后才首次留下 canonical recovery fact;
contests 以排序后的两个 memory IDs canonicalize;supersedes、scope_refines、
procedure_implements 必须通过 recursive-CTE cycle check。FTS/vector 实体不建在
canonical ledger DB:它们位于内容寻址的独立 index artifact,ledger 只存 build
receipt,避免 virtual/shadow tables 被严格 schema validator 误判。
至少建立:
idx_memory_records_family(family_id, created_at)
idx_memory_records_scope(scope_variant_id, record_kind, decision_point, domain)
idx_memory_evidence_experience(experience_id, relation)
idx_lifecycle_memory(memory_id, scope_variant_id, created_at)
idx_distillation_work_pending(namespace, record_id)
idx_distillation_assignment_run(campaign_run_id, activity_id)
idx_distillation_completion_activity(activity_id, work_item_id)
idx_evidence_snapshot_member(experience_id, snapshot_id)
idx_snapshot_members_memory(memory_id, snapshot_id)
idx_retention_target(target_kind, target_id)
idx_retention_intent_namespace(namespace, record_id)
idx_decision_recall_input(recall_input_id, created_at)
idx_recall_outcome_intervention(intervention_id)
idx_index_build_sources(knowledge_snapshot_id, evidence_snapshot_id, adapter_kind)
SQLite schema validator 必须检查列顺序、类型、NOT NULL、PK、UNIQUE、FK 和命名 索引,延续 revision 2 的 fail-closed 行为。
schema-v3 Store 的每个 canonical logical-record append helper,包括对 legacy v1/v2 表的新增 append,都必须走同一底层 transaction helper:
BEGIN IMMEDIATE(InMemory Adapter 持同一 Store lock);- validate canonical payload、indexed columns 和 namespace;
- insert canonical row,或对 exact retry read-back 验证 payload bytes/digest;
- 对首次 insert 在同一 transaction 插入唯一
ledger_commits_v1row; - read-back canonical row + journal row,验证 record kind/ID/payload digest;
- commit,并返回原始/新
position。
exact retry 已存在时不得插入第二个 journal row或推进 position。canonical row 缺 journal、journal 缺 target、digest 不同或 duplicate logical ID/payload 不同都 fail closed;open-time integrity validator 对所有 schema-v3 时期 canonical logical-record tables 做双向检查。migration bootstrap rows 只在迁移 transaction 中产生。
ledger_record_registry.py(由 ledger_migrations.py schema validator 导入)必须
显式登记 record_kind -> canonical table -> ID extractor -> namespace extractor。
evidence_snapshot_members_v1、knowledge_snapshot_members_v1、
recall_input_index_builds_v1、decision_recall_items_v2 和
recall_decision_dispositions_v1 是其父 payload 的 normalized indexed projection;
memory_scope_variant_heads_v1 是 lifecycle journal 的 derived mutable projection。
这些表不分配独立 journal position,必须和父 record 同 transaction 写入,并由
read-back validator 逐字段证明等于父 payload;orphan/extra/missing projection row
仍 fail closed。memory_evidence_links_v2、memory_relations_v2、
recall_outcome_attempt_links_v1、distillation_work_assignments_v1、
distillation_batches_v1、distillation_reports_v1、
distillation_commit_conflicts_v1 和 distillation_work_dispositions_v1 则是独立
logical records,使用第 6.2 节 ID 并各有一个 journal row。新增表必须在 schema
review 时明确归入两类之一。
Snapshot Builder 不读取 MAX(position) 全局值,而读取以下 typed namespace
frontier:
EVIDENCE_KINDS = {
hypothesis, attempt, observation, verification,
intervention, trial_provenance, experience
}
LIFECYCLE_KINDS = {knowledge_lifecycle_event}
RETENTION_KINDS = {retention_erasure_intent, memory_retention_tombstone}
Evidence Snapshot 的 ledger_position 是其 namespace/visibility 下
EVIDENCE_KINDS 的最大可见 position;Knowledge Snapshot 的
lifecycle_position 是其 namespace 下 LIFECYCLE_KINDS 的最大可见 position。
Retention checks/publication barriers 使用 namespace 下 RETENTION_KINDS 的当前
最大 position 与 canonical open-intent+tombstone set digest;caller 的 expected
frontier/set 只做 CAS equality,不能选择较旧 as-of view。
snapshot、recall、outcome、index、outbox、acceptance 及 journal metadata 本身不
推进这两个 frontier。空集合使用规范 sentinel position 0。这样先写 snapshot 再
重放同一 request 不会改变 ID。InMemory/SQLite 必须通过同一 append-journal/
frontier contract suite。
KnowledgeStore.commit_distillation(plan, completion, authorization) 是 successful
path 的唯一 writer;它在一个 BEGIN IMMEDIATE transaction 中:
- 在打开本地 write transaction 前通过 Runtime public getter read-back immutable
commit authorization,验证其
GRANTEDtransition 在 current Run version/Activity generation/fence 上先于任何 cancel/fail control CAS,并逐字段匹配 Assignment、commit-attempt ordinal、logical Effect、proposal/Commit Plan artifacts 及预期 Batch/Report IDs/digests;随后在本地 transaction 内重算 plan 的全部 canonical bytes/IDs/digests。若同一 authorization 已有 successful Completion 或 Commit Conflict,exact retry 只 read-back 原结果; - 在任何 semantic write 前比较 proposal 的所有 expected scope heads,并在同一
transaction 派生 current
RETENTION_KINDSfrontier/set,展开 plan 每个 source Experience bundle、proposed Memory/Evidence Links 与受影响 index 的 canonical reachable-target closure。head stale 使用LIFECYCLE_HEAD_STALE;任一 open Intent/ Tombstone 命中使用RETENTION_REVOKED;若两者同时命中,必须由 Store 选择RETENTION_REVOKED,且 lifecycle head-delta arm canonical null,禁止实现自行择一。 两种 closed-union 结果都不得写 Batch/Candidate/Knowledge/ Report/Completion,只 append/read-back 唯一DistillationCommitConflict+ journal row 并返回DistillationNoCommitReceipt;只有 head 与 current retention checks 都通过才 进入成功路径。proposal/plan/authorization 可绑定预检,但不能替代该线性化检查; - 验证 Evidence Snapshot membership,并通过 canonical Verified Evidence Bundle 逐一交叉验证 source rows/digests;
- 检查已存在 content-derived IDs 的 payload 完全一致;
- append candidates 及各自 commit-journal row;
- append canonical Distillation Batch 及 journal row,并 read-back exact Work Item/ Experience/candidate coverage;
- append promoted memory records 及 journal row(rejected/deferred candidate 无 record);
- append memory evidence links 及 journal row;
- 按 scope-variant ID 和 dependency order 处理 lifecycle chain;对每个 event
验证当前 expected head,append event + journal row,随后立刻以
UPDATE ... WHERE lifecycle_event_id=:expected或 genesis insert CAS head 到该 event,rowcount 必须为 1,再处理同 scope 的下一个 event; - append memory relations 及 journal row,此时其 memory/event FK 和最终 head 均已存在;
- append Distillation Decisions 及 journal row,此时 nullable promoted memory FK 已存在;
- 为 exact singleton Work Item append 一条
DistillationWorkDisposition+ journal: 有 Candidate 时绑定 covering Decision;无 comparator/不可比较/无合法 candidate 时 使用 closed no-candidate disposition 且 Decision 必须 null; - 重新投影并校验 affected scope-variant final heads;
- 以 exact committed IDs、Work Item/Experience/Disposition coverage 和 sorted affected- active-view digest 构造、 append canonical Distillation Report 及 journal row,再通过 getter read-back;
- append 与 authorization、Batch、Report/Disposition exact matching 的
completedCompletion 及 journal row; - 验证本 batch(含 Batch/Disposition/Report/Completion)每个 canonical logical append 都恰有 一个 digest 匹配的 journal row,所有 normalized projections 与父 payload完全一致;
foreign_key_check/ integrity check 后 commit,并返回含 Batch、Disposition、Report、 Completion 和全部 append receipts 的DistillationCommitReceipt。
SQLite FK 使用默认 immediate semantics;本顺序不得改回“decision/relations 先于其
target”,也不得把一条 scope chain 的多个 event 全插完后只做一次 final-head CAS。
true contradiction 必须按 old-active→old-superseded→new-contested 两次连续 CAS。
同 batch 的 dependency graph 若不能拓扑排序则在 transaction 前拒绝,不依赖
PRAGMA defer_foreign_keys 隐藏错误。
成功路径任一步失败必须 rollback。conflict 分支只允许 Conflict+journal 两行,二者
原子且不能与同 authorization 的 Batch 共存。fault-injection tests 在每个 numbered
point 抛错并证明没有 partial visibility,尤其不允许 Knowledge/Report 已可见但
Completion 缺失。两个 campaign 对同一 scope old head 并发时恰一项成功;另一项得到
NO_COMMIT_CONFLICT、Runtime retire authorization 后可从新 head 重提,不会永久
COMMITTING。
RETENTION_REVOKED 同样先由 getter/digest 证明零 semantic write并 retire authorization;
Runtime 只能从 current retention-clean inputs 重新 propose,或在 Work Item source 已不可
处理时按 pinned policy 走 typed failure closure,绝不能重用旧 plan/authorization。
支持路径:
empty/0 -> create legacy v1 tables -> revision 2 sidecars -> revision 3 tables
revision 2 -> revision 3 tables
revision 3 -> validate and open
other/partial/unknown -> fail closed
迁移步骤:
BEGIN IMMEDIATE;- 保存所有 legacy table
record_id + hex(payload_json BLOB)摘要; - 验证 revision 2 schema、FK 和 integrity;
- 创建全部 revision 3 表和索引;
- 对既有 canonical rows 按
(record_kind, record_id)排序写ledger_commits_v1bootstrap positions 和 payload digests;这是新增 metadata, 不声称恢复历史 wall-clock append 顺序;namespace 只能来自可验证的既有 task/project mapping,否则标成隔离的legacy_unscoped,不得 active recall; - 不调用 LLM、不生成 Candidate/Knowledge,不信任 nested Experience 副本;
- 将所有 legacy Knowledge 标记为 audit-only 的 migration metadata;不修改旧表;
- 校验 legacy payload hex 完全相同;
- 设置
PRAGMA user_version=3并 commit; - reopen 后对
sqlite_master的 table/index/column/FK/CHECK SQL 做 golden schema 比较,再执行完整foreign_key_check/integrity 验证。
禁止:
- 在 DB open 时自动重蒸馏;
- 给旧 Knowledge 猜测 Intervention、effect 或 provenance;
- 重写旧 Recall Context;
- 把旧
lesson自动 active; - 将旧 Chroma index 当作 revision 3 index。
显式 offline command 可以 --dry-run 评估 legacy source 是否具备 valid
Verification、changed Intervention 和 Trial Provenance;满足条件也只能生成
Knowledge Candidate,再走正常 policy。
回滚代码可以关闭 v3 reader/writer 并继续以 revision 3 DB 的 legacy tables 提供
record/legacy recall;不得将 user_version 降回 2 或删除新表。旧代码不能打开
revision 3,因此发布必须提供兼容 reader 或在 rollout 前备份;rollback runbook
必须在 Phase 0 冻结。
候选 source 必须同时满足:
- completed Experiment Attempt;
- exit code、Artifact refs 和 digests 有效;
- Verification valid 且 outcome 分类完整;
- Trial Provenance 存在且与 Attempt/Observation/Intervention 匹配;
- Evaluation Contract、dataset、source、config、environment identity 可解析;
- private evaluator payload 未进入 actor/drafting view;
- changed/no-effect/baseline manipulation 语义明确。
invalid、environment failure、execution failure 仍保留在 Experience Ledger, 但不是 semantic candidate。它们可以作为诊断 Procedure 的 failure evidence,需 独立 policy。
首版支持:
- 同一 stratum 下 baseline vs changed Intervention;
- 同一 stratum/seed 的 paired comparison;
- 多 seed 对相同 normalized action family 的 replication;
- verified no-effect 作为反对 action utility 的证据;
- guardrail violation 作为 counterevidence。
禁止跨 Evaluation Contract、dataset digest、source digest 或不等预算直接聚合。
机器可统计 reason codes 至少包括:
missing_verification
missing_trial_provenance
private_evaluator_dependency
non_comparable_evidence
duplicate_support_unit
missing_decision_point
missing_typed_action
generic_or_non_actionable
missing_effect_estimate
missing_guardrail_evidence
insufficient_independent_support
scope_split_required
true_contradiction
eligible_provisional
eligible_active
eligible_contested
- family ID 不包含 prose;
- family ID 也不包含 scope;validated
scope_variant_id = digest(family_id, normalized MemoryScope); - compatible scope 的反向 evidence 产生新的 contested record;
- 不同 scope 产生同 family 下的新 scope variant 和可选
scope_refinesrelation; - 更新外部 current-value 的 versioned fact 可由 deterministic version policy supersede;
- scientific contradiction 不能用“最新记录”覆盖;
- supersession graph 必须无环;
- retraction 需要 provenance/validity incident evidence 和 policy identity。
true contradiction 的 transaction 顺序固定:
- 用 current record 的全部 Evidence Links 加新支持/反对 links 构造 immutable
replacement,
prior_memory_id=current_memory_id,同 family/scope variant; - 对 current record append
supersededlifecycle event,并以 current head 做 CAS; - 对 replacement append
contestedlifecycle event,其prior_event_id/expected_head_key是上一步 superseded event,并立即 CAS scope-variant head 到 replacement contested event; - append canonical sorted-pair
contestsrelation,由 contested event 导致; - read-back 并验证 scope-variant final head 正是 replacement contested event;
- append
DistillationDecision(disposition="promoted_contested", memory_id=replacement)。
以上六步和各自 journal row 在第 7.4 节同一 transaction。normal/confirmatory
Snapshot Selection Policy 排除 contested head,因此不会暴露旧 active 记录或新的
争议记录;只有明确允许 contested 的审计 profile 可显示双方。后续 adjudicating
evidence 必须再创建 replacement,先 supersede contested head,再让新 record 以
active/contested 开始;不得给旧 record 补 evidence 后原地 Contested -> Active。
首版只编译 typed Intervention/diagnosis trajectory:
- 不从 chat transcript、generic event log 或 MemoryStore episode 编译;
- steps 只能引用 allowlisted tool/Intervention action;
- 每一步声明预期 artifact/Effect receipt 类型,但 Procedure 本身不授权执行;
- trigger/precondition/success/failure/early-stop/rollback 完整;
- 至少达到 policy 的 independent support threshold;
- Skill Adapter 只能装配现有注册工具,不生成任意 Python。
- 每个实际 step 仍通过 Durable Runtime Effect、普通 authorization 和 receipt; inactive/tampered/version-mismatched Procedure 只可展示为审计证据,不能执行。
在 ImprovementCycleRunner 每次 Decision Point:
- 读取本 arm 自己上一 Attempt 的 verified feedback,并从 pinned Intervention Catalog 读取 allowed knobs/protected-field digest;
- Runtime 从 Evaluation Contract 构造、持久化并 read-back 无 private/evaluator
字段的
DecisionContractViewRef; - 预分配完整
DecisionIntentProposal,绑定 run/activity/iteration/ generation/arm/pair、evaluation_task_id、publictask_scope_id、上一步 contract-view ID、logical decision slot/artifact kind 和 exact allowed-action digest、planned actor model/config/template/policy refs/digests,以及从 admitted Run/arm manifest proof 验证的 Memory Governance Binding;proposal 发布/read-back 后, Runtime CAS 创建REGISTERING与 exact admission authorization,Store append/read-back Intent(或 journal typed no-commit),Runtime 再 reconcile 为OPEN/retired;未解决的 REGISTERING 禁止进入 retrieval/actor; - 先重验 current Runtime state。若 actor invocation 前 cancel/fail 已赢得 per-Intent
closure arbitration:
REQUIRED且 Context absent 时提交唯一cancelled_before_recall/cancelled或failed_before_recall/actor_failedOutcome;REGISTERED_NOT_REQUESTED则提交not_requested + cancelled|actor_failedOutcome。 两者都不创建 Recall Input/Context、不调用 retriever/planner,并绑定 exact closure authorization/receipt;closure 同样先发布 exact Outcome proposal,再由 Runtime read-back 后授权,不能由 barrier 直接拼 SQL row; - 若仍可运行且为
REGISTERED_NOT_REQUESTED,跳过 Evidence/Recall Input/retriever/ Context,只构造 typedNoDecisionMemoryBinding(null IDs、zero cards/tokens),尚不调用 planner; 若REQUIRED,才在 episodic lane 开启时捕获 exact arm-local Evidence Snapshot,组合 Recall Input Snapshot,调用prepare_required_decision()得到 closed preparation result。 若为 Context proposal,Runtime read-back exact proposal 后以其 Context ID/payload digest/ artifact ref/digest CAS 获得APPEND_CONTEXT/NORMALauthorization,再调用commit_required_decision_context()由 Store append/read-back exact Context,最后由 Runtime reconcile phase;若为 Blocked proposal,则 Runtime 先持久化/read-back artifact, 再用 strict getter 取得DecisionRecallBlockedProof,不申请 Context authorization、不写 Context/card、也不进入 planner,并把该 proof 留给第 8 步的 blocked Outcome; - 从 exact Context 构造
RequiredDecisionMemoryBinding,或构造NoDecisionMemoryBinding;在任何 actor Effect preparation 前先把该 discriminated union 作为 scoped Runtime planner-input artifact 发布并 read-back,再把 exact bytes 交给 planner。成功响应解析 outer sidecar envelope 与 unchanged v1 proposal,并要求 echoeddecision_memory与输入 byte-equivalent;actor timeout/crash/unparseable response 仍可从输入 artifact 取得 binding digest; - 合法 proposal 继续执行 Phase A preflight/runner;不合法或 actor failure 走 typed
terminal path。Context 后 cancel/fail 若先赢得 arbitration,不使用 partial actor draft,
而由 Runtime closure 为每张 card 生成 exact
not_considered_*disposition; - terminal evidence 齐备后,normal builder 或 Runtime closure builder 先构造并发布
immutable
RecallDecisionOutcomeProposalartifact;Runtime read-back exact Outcome ID/payload digest/artifact ref/digest 后,经 per-Intent CAS 获得APPEND_OUTCOME/NORMAL|RUNTIME_CLOSUREauthorization,再由 Store 一次性提交、 read-back 并由 Runtime reconcile 唯一 immutable Recall Decision Outcome; blocked 分支只使用NORMALauthority,并要求 Outcome proposal、authorization、最终 Outcome 的blocked_source_proof_ref/digest三者 exact equality,Store 再独立 getter read-back 并逐字段验证 proof; blocked/not-requested/cancelled-before-recall/failed-before-recall/empty/degraded/actor failure/rejected/no-op/completed/cancelled 都有记录,合法执行的 outcome 绑定 effective config/manifest receipt。
baseline/no-memory 也有 Decision Intent 和
source_status=not_requested、null-context、zero-card outcome,不能绕过 denominator,
也不能误记为 blocked;其 Intent 必须在 append 时已经以 admission proof 固定
REGISTERED_NOT_REQUESTED,不能等写 Outcome 时临时声明。
prepare_required_decision() 虽为迁移期兼容接受 contract_view、Catalog/allowed-action ref,
但必须逐一验证其 IDs/digests 与已持久化 Intent bindings 完全相同;不相同为 typed
blocked identity error,禁止“以参数为准”覆盖 Intent。
Control 和 Treatment 共享相同的初始 baseline Observation。分叉之后,每个 arm 只接收自己的上一 Observation;不得把 Treatment feedback 喂给 Control。
按固定顺序执行:
namespace/visibility
-> evaluator-private exclusion
-> Knowledge/Evidence Snapshot membership
-> current open-retention-intent + tombstone check before index artifact/member content load
-> active/provisional/contested profile eligibility
-> public task_scope/domain (+ exact evaluation_task only for instance-specific records)
-> dataset/source/model/environment/version scope
-> Evaluation Contract/metric/budget compatibility
-> Decision Point
-> allowed action/knob applicability
-> temporal validity and drift policy
任何 forbidden item return 都是 hard failure,不能由高语义相似度抵消。
reachable_retention_targets(recall_input) 是唯一 canonical transitive expansion:从
Recall Input 展开 Knowledge/Evidence Snapshot members;semantic/procedure member 再展开
current lifecycle event、全部 Memory Evidence Links、每个 Experience 的 canonical
Hypothesis/Attempt/Observation/Verification/Intervention/Trial-Provenance bundle 和 artifact
refs;episodic member 直接展开同一 bundle;每个 ready index 展开 build receipt、member
source mapping、content-addressed artifact ref/object generation。按 (target_kind,target_id, object_generation?) 去重排序,任一 open Intent/Tombstone 命中闭包就 block。只检查
memory_id 或 snapshot direct member 不合法;closure 算法/version/digest 写入
RetentionCheck 并有 golden vectors。
RetentionStore.check_recall_input() 在一个 read transaction 固定 current
RETENTION_KINDS frontier/open-intent+tombstone set digest 并检查 Snapshot members +
上述完整 reachable closure。命中任何 target 时
返回 typed blocked_retention_revoked,并将该 exact RetentionCheck(同一 non-null
Recall Input ID/digest、frontier、tombstone-set digest、canonical sorted blocked targets)
封入 DecisionRecallBlockedProposal;proposal 必须持久化/read-back,随后其 proof ref/digest
绑定 blocked Outcome/authorization。不得读取旧 index artifact、不得降级为空或 lexical
fallback;只有新建 tombstone-clean Snapshot/index/Recall Input 才能继续。passed
RetentionCheck 的 frontier/digest 进入 Context;blocked check 只通过 blocked proof 进入
Outcome,禁止运行时另造第二份 check。
- lexical Adapter 使用 SQLite FTS5/BM25;若目标 Python/SQLite 构建没有 FTS5, 显式使用 deterministic token BM25 fallback 并记录 Adapter identity;FTS/shadow tables 位于 derived index artifact,不进入 canonical ledger DB;
- semantic Adapter 使用 policy 指定的真实 embedding model,必须 pin immutable revision、dimension、normalization 和 digest;
- tests 使用可注入 deterministic fake encoder,不访问网络;
- production embedding 不可用时,按 pinned policy lexical fallback 或
degraded;不得 hash fallback 后标成 semantic; - direct structured Adapter 负责 exact failure signature、provenance 和 recent verified Experience。
confirmatory semantic Adapter 使用 pinned local model 预计算的 float32 matrix、exact cosine search、预注册 score quantization 和 stable-ID tie-break。ANN 只允许 development profile,不能支持 replay/confirmatory requirement。
index build 输出先提交为 Runtime-owned content-addressed artifact;Experiment
Ledger 只追加含 ArtifactRef/digests 的 DerivedIndexBuildReceipt。本地 materialized
index 可删除,不能成为 canonical truth。
final ranker 是 deterministic Implementation。Feature 分为:
- hard-pass applicability;
- lexical/semantic relevance;
- expected decision utility;
- evidence strength、effect size/uncertainty;
- counterevidence/contested penalty;
- dependency/environment drift;
- novelty 和 family diversity;
- stable ID tie-break。
不要把 wall-clock timestamp 除以常数当 recency。Freshness 只由有语义的 dependency/version/time predicate 计算。
Renderer 只使用 typed Evidence Card 字段,不重新让 LLM 总结。卡片必须显示:
why retrieved
applicability
recommended/avoided action
observed effect and uncertainty
guardrails
support and counterevidence citations
disposition/version/as-of
默认 3 cards / 1,200 tokens;token 数由 pinned tokenizer 对完整 rendered memory section(header、separator、citation 全部包含)计算,不用逐卡 estimate。 confirmatory policy 固定后不能由 CLI 临时覆盖。
Evidence Snapshot build:
BEGIN IMMEDIATE/ InMemory lock;- 固定第 7.3 节 namespace/visibility-scoped Evidence frontier,并派生 current Retention frontier/open-intent+tombstone set,不读 caller cutoff/global max;
- 按 exact namespace/run/arm/pair 与 eligibility policy 选 Experience,展开每个 candidate 的完整 canonical bundle/artifact reachable-target closure,并在读取任何 separately stored content 前 anti-join 所有 open Intent/Tombstone target;
- cross-validate 每个 canonical Verified Evidence Bundle;
- 排序 exact members,计算 ID,append snapshot + member projections + snapshot 的 一个 journal row,read-back 后 commit;members 不独立 journal,snapshot 自身不 推进 Evidence frontier。
Knowledge Snapshot build:
- 固定第 7.3 节 namespace-scoped lifecycle frontier 与 current Retention frontier/set, 不读 caller cutoff/global max;
- Builder deterministic fold events;
- 对每个 candidate head 展开 memory/lifecycle/Evidence Links/Experience bundle/artifact reachable-target closure,先排除任何命中 open Intent/Tombstone 的 candidate,再按 Snapshot Selection Policy 选择每 scope variant 一个 eligible head;
- 验证所有 Evidence Links 与 closure digest;
- 排序 members;
- 只绑定 selection policy/namespace,计算 ID;
- Store append snapshot + member projections + snapshot 的一个 journal row, read-back 并复算 ID;members 不独立 journal,snapshot 自身不推进 lifecycle frontier。
Derived indexes 以 exact Knowledge/Evidence Snapshot 为输入构建并产生 ready
receipt;ready receipt、Recall Input 和 Context 的 append transaction 都在自身 Store
transaction 展开包括 index artifact/object generation 的完整 reachable closure,重验
current Retention frontier/set equality 和 anti-join;失败只写 failure receipt,不能被
Recall Input 引用。随后
Recall Input Snapshot 绑定 source snapshots、Retrieval Policy、renderer/tokenizer 和
ready build receipt IDs。Retrieval/index policy 不进入 Knowledge Snapshot ID,因而
不存在 snapshot -> index -> snapshot hash cycle。
必须证明:
- 追加无关 raw Experience 不改变既有 snapshot;
- active/lifecycle/policy membership 改变产生新 snapshot;
- 重放同 request 得到相同 snapshot;
- Evidence Snapshot 的 exact members 不受捕获后的 append 影响;
- 同 source/policy 的 index rebuild 产生相同 member/vector/build digest 与 final cards;
- held-out transfer 的 evaluation-task IDs 与 snapshot source-task/lineage 交集为 0; same-task/new-seed 只允许 task ID 相同,seed/Run/Attempt/artifact/answer/gold/ evaluator-private lineage 仍必须零交集;
- confirmatory Run 没有写入 active development memory 的权限。
仅修改 intervention_plan:
frozen Research Context Snapshot
-> baseline execution or previous verified feedback
-> sanitized Decision Contract View + preallocated Decision Intent
-> exact Knowledge/Evidence/index receipts -> Recall Input Snapshot
-> DecisionRecallRequest
-> max 3 Evidence Cards
-> RecalledInterventionDecision sidecar + unchanged InterventionProposal v1
-> system-resolved config
-> Phase A execute/verify/provenance
-> RecallDecisionOutcome (all terminal statuses)
-> Experience append
-> ExperienceDistillationReceipt
-> async/deferred distillation
prepare/survey/plan/implement 不再复用这份 Recall Context。它们在后续 PR 中拥有 各自 Decision Point 和 profile。
删除运行时:
self.loop.knowledge_gate = KnowledgeGate(...)domain/model/policy/snapshot 都来自 immutable request。Factory 在 application Adapter 启动时装配 Retriever、Distiller 和 Store;一个 Research Run 不改变另一 Run 的 policy。
Research Run completion 需要每个 Run-owned Decision Intent 的唯一
RecallDecisionOutcome,以及每个 completion-required durable Experience 对应的一个
ExperienceDistillationReceipt。receipt 可以是:
queued_for_comparison;deferred_ineligible;not_required;abandoned_before_enqueue(只用于 exact Runtime abandonment proof 关闭 pre-enqueue orphan,不是 eligibility 判断)。
该 receipt 是 ingestion/enqueue 事实,不是 Candidate 的 Distillation Decision。
Completion barrier 按 Intent/Experience ID 校验基数、唯一性和 read-back digest,不能
用“至少一条 outcome/receipt”替代。Completion 不要求每个 Experience 立即生成
Candidate/Knowledge。异步
consolidation Runtime Activity 稍后聚合多 Run evidence,并单独提交
rejected/deferred/promoted_* Distillation Decisions。
queued_for_comparison 不是内存队列状态。online Activity 必须调用
enqueue_distillation(receipt, work_item, abandoned_work_item=None, profile_artifact_proof=profile_artifact_proof, abandonment_proof=None)。调用前先发布 profile
bytes,并由 Runtime 为 deterministic Work Item ID 原子创建
Work-Item-owned ACTIVE ref + PENDING handoff;Ledger transaction 验证 proof 后让
receipt、Work Item、enqueue sidecar/artifact-ref append metadata 和三条 commit journal rows
同时成功。调用方必须独立 read-back Work Item/enqueue receipt 与
get_distillation_enqueue_transaction() sidecar,并核对 attempt ID/generation/fence、
original proof/transaction digests 后,Runtime 才可把 handoff CAS 为 BOUND;
只有 BOUND + ACTIVE 可越过 source Run completion barrier。source
SCIENTIFIC Run 到此只拥有 ingestion 事实;即使它随后 terminal,
也不得再为该 Work Item 创建或 dispatch Activity。stable Activity key 为:
semantic_digest(
"ai-researcher/distillation-activity/v2",
{"campaign_run_id": campaign_run_id, "work_item_id": work_item_id}
)
Admission key、Run、initial command、Activity、Assignment 与 manifest temporary/run-owned ref IDs 必须全部调用 Durable Runtime implementation plan 的 canonical ID table 对应的同一 pure module/golden-vector artifact;本 projector 禁止复制域名常量或自行重算近似 identity。
Work Item ID 已包含 Distillation + Lifecycle policy identities;Activity ID 不再接受 额外 policy 参数。Assignment 先固定 campaign Run,再计算该 Activity ID 并通过 Runtime proof 验证 owner。
admission projector 每轮只取最老一个 unassigned item,按 commit position/Work Item ID
稳定选择,read-back Work Item 所绑 Campaign Admission Profile,并只按该 profile 冻结
cardinality=1 的 Work Item ID/digest、namespace、Distillation/Lifecycle policy、workflow/
continuation、model/tool/Adapter configuration、Budget Envelope 与 retention 到
DistillationCampaignManifest;进程/部署默认值不得覆盖。manifest 先写入 Runtime
Artifact Store,再用 shared canonical helper 从 Work Item ID(不是 manifest digest)
派生 DriveRun admission key、Run ID 和 initial command ID,drive/read-back 一个
独立、non-terminal、run_kind=MEMORY_DISTILLATION 的 Run。Runtime 为每项创建上述
stable Activity,初始状态只能是 non-claimable/non-dispatchable
AWAITING_ASSIGNMENT。projector 凭 Runtime proof append/read-back 唯一 Assignment;
Ledger 同时验证 Work Item 是 exact manifest member、ordinal/digest 匹配、Run kind/
non-terminal 状态及 Activity ownership。随后 Runtime Stage Adapter 通过
get_distillation_assignment_proof() 自己 read-back proof,以 current Run version +
Activity generation CAS 绑定 assignment ID/digest,并且只有该 CAS 可令 Activity
AWAITING_ASSIGNMENT -> READY。旧 proof、cancel/terminal 竞态或 foreign manifest
只能 no-op/fail closed;已存在相同 Assignment 走 reconcile,不同 campaign/Activity
是 identity conflict。campaign worker/poller 只从该 Run 的 READY/assigned-incomplete
item 开始执行,绝不回写 source Run。
V1 禁止多 Work Item manifest。两个 projector 并发看到同一 item 时必须从 pinned
profile 派生相同 manifest digest、Runtime idempotency key、Run/Activity/Assignment
ID;same key/same spec 返回同 Run,same key/different manifest/config 返回 spec identity
conflict并强制 read-back/reconcile winner,绝不创建第二 Run。它不能形成 [A,B] 与
[B] 的重叠 campaign。未来若要
multi-item scheduling batch,必须先增加由 Experiment Ledger 原子提交的 membership
reservation/claim,再创建 Runtime Run,并升级 schema;不能仅靠 manifest hash。
claim、lease、fencing、retry/backoff 复用 Durable Runtime;memory Store 不保存可变
claim 状态。executor/LLM worker 只把 DistillationProposal 写成 Runtime
content-addressed artifact,不能调用任何 Ledger write。独立 Coordinator 先纯函数
prepare/publish immutable DistillationCommitPlan(exact canonical Knowledge/lifecycle/
Batch/Disposition/Report bytes/IDs/digests);Runtime control read-back proposal+plan 后,
在同一个 control-store transaction 以 current Run version + Activity
generation/fence CAS RUNNING -> COMMITTING,并写唯一
DistillationCommitAuthorization:它绑定 Assignment、logical Effect、proposal ref/
digest、commit plan ref/digest 和预期 Batch/Report IDs/digests。grant 后 Coordinator 从
authorization digest 构造 exact Completion。只有赢得该 CAS 的 control owner 可调用
commit_distillation(plan, completed_completion, authorization);该单一 Ledger
transaction 原子写 Knowledge/lifecycle/Batch/Disposition/Report 和 successful Completion。返回后 control
read-back DistillationCommitReceipt,再提交 Runtime Effect/Activity result。
commit authorization 是一个 fenced、必须先解决的 attempt,而不是对 lifecycle CAS
成功的预言。authorization-first 时并发 CancelRun 返回
PENDING_AFTER_ARBITRATION,持久化 pending cancel 但不进入 CANCELLING、不 revoke
attempt fence;并发 fatal failure 同理登记 pending failure。两个 pending control kind
由同一个 Run-version/control-event CAS 互斥选择 primary kind:cancel-first 只抑制
duplicate/cancellation-induced failure;failure-first 优先,随后 Cancel 只是
closure-help/no-op。独立 integrity/contract/infrastructure failure 另存 secondary evidence,
不能被 cancel 丢弃。Runtime 必须先把 attempt 解析成
atomic success 或 typed NO_COMMIT_CONFLICT。success 才是不可撤销 logical commit point:
pending cancel 解析为 TOO_LATE_COMMITTED 并完成;pending failure 保留已完成 Work Item,
随后进入 FAILING/RUNTIME_FAILURE_AFTER_WORK(若 failure 仍有效)。conflict getter/digest
通过后,Runtime CAS authorization 为 RETIRED_NO_COMMIT;pending cancel 在任何 retry 前
进入 cancellation closure,pending failure 在 retry 前进入 FAILING/dead-letter;无
pending control 才递增 generation/fence、基于新 head 回 WAITING_RETRY。cancel/fail-first
时 control CAS 先撤销 fence,Runtime 不得产生 commit authorization,旧 worker/proof
不能写任何 Batch/Knowledge/Completion。crash-after-authorization 或
crash-after-Ledger-commit 由相同 proposal/authorization/content IDs 恢复;未解析
authorization 保持 COMMITTING(完整性不可证明则 WAITING_INPUT),不得把同一 slot
关闭成 cancelled/dead-letter。
crash-before-campaign-start、start-after-reply-loss、Run/awaiting-Activity 后 assignment
前、assignment 后 activation/dispatch 前、Activity 后 completion 前、重复
projector/worker,都由
manifest/run/assignment/activity/completion stable IDs 与两类 scan 收敛;任何 crash
prefix 都不能在 terminal source Run 下创建 Activity。
重试耗尽由 Runtime control 先以 control-event CAS 写 mutually-exclusive closure
authorization,再调用 append_distillation_closure() 写 dead_letter 和可 read-back
Runtime failure receipt ref/digest;该 item 不再 pending,但 release report 必须显式
计数,不能当作 distilled。
transient failure 不写 Completion,item 保持 pending;deterministic non-retryable
failure 直接按 policy 写 dead_letter,retryable failure 仅在 Runtime 重试耗尽后写
dead_letter。pagination cursor 不是 durable ack,因此 crash-before-assignment/
Activity 不会跳过 item;进程启动/恢复和每轮 sweep 都从最老未完成类别重新开始,
只有可 read-back Assignment/Completion 才改变逻辑集合。
completed 写入前还必须通过 Store read-back 证明 canonical Batch/Report FK、Report
ID/payload digest 覆盖该 Work Item 的 exact Experience、namespace/scope、policy
identities 和 committed Work Disposition(可绑定 covering Decision 或 typed
no-candidate reason);该验证与 Completion/journal append 同 transaction,
不能只检查 ref 或任意 digest 存在。campaign terminal validator 必须枚举 manifest 的
exact ordered set:每项恰有一个匹配 Assignment/Activity 和 terminal Completion,且无
foreign item;只枚举“已经 assigned 的项”不合法。terminal predicate 按顺序互斥:
任一 dead_letter 映射 FAILED/DEAD_LETTER_PRESENT;否则全部 completed 映射
COMPLETED/ALL_COMPLETED,但 terminal CAS 前独立 failure 赢时为
FAILED/RUNTIME_FAILURE_AFTER_WORK;否则至少一个 cancelled 映射
CANCELLED/CANCELLED,但该 failure 先赢时为
FAILED/RUNTIME_FAILURE_AFTER_CLOSURE。
若所有 Work Completion 已是 completed 后才出现不可恢复的 non-work Runtime/
contract/integrity failure,保留这些 immutable Completion,以 typed Run failure receipt
映射 FAILED/RUNTIME_FAILURE_AFTER_WORK;不得改写成 dead-letter。
若 exact manifest 零 dead-letter 且至少一个 cancelled status settled,则同类 failure 绑定覆盖每个
slot/status/Completion digest 的 receipt,映射
FAILED/RUNTIME_FAILURE_AFTER_CLOSURE;同样不得改写 Completion。
CancelRun 与 failure arbitration 使用同一 Run-version/control-event CAS:failure
authorization 先赢就 latch FAILING,后到 Cancel 只能帮助闭合或 terminal-noop;
Cancel 先赢就 latch CANCELLING,只抑制 duplicate/cancellation-induced closure
failure;独立认证的 integrity/contract/infrastructure failure 在 terminal CAS 前仍可
升级 Run,但不能改写任何 settled Completion。CancelRun 为
每个 manifest slot reconcile/create awaiting Assignment,并为所有没有 completed/
dead-letter/commit authorization 的 slot生成 closure authorization,再 append typed
cancelled Completion;FAILING 同样以 typed terminal failure receipt ref/digest 将
剩余未授权 slot闭合为 dead_letter。这些 closure Activity 不进入 READY/Adapter。exact manifest
coverage、公共 record-closure 与 operational-settlement barriers 全过后才可
CANCELLED/FAILED;assignment 不删除/重排/requeue,因此不会留下 terminal Run 下
永远 assigned-incomplete 的 item。campaign 不伪造 Hypothesis、Attempt、Decision
Intent、Verification 或 Experience。
Work-Item-owned Campaign Admission Profile ref 的生命周期独立于上述 source/campaign
Run terminal CAS。Runtime 只在 source barrier acknowledgement 与 terminal Work
Completion 均已 read-back,且 campaign
replay/audit retention 已建立独立 root 或确认过期后,提交 handoff
BOUND -> RELEASED 和对应 ArtifactReferenceReleased;随后普通 Artifact GC 才能按
全局 ACTIVE-ref 计数处理 bytes。Assignment、source Run terminal、campaign terminal
本身都不是 release authority。
新增内容寻址引用:
--memory-mode <off|record_only|legacy_recall|memory_shadow|decision_memory|frozen_memory>
--distillation-policy <path-or-content-id>
--lifecycle-policy <path-or-content-id>
--snapshot-selection-policy <path-or-content-id>
--retrieval-policy <path-or-content-id>
--knowledge-snapshot <content-id|latest-development>
--recall-input-snapshot <content-id>
现有 --experience-mode 是一个 release 周期的兼容 alias,不能和
--memory-mode 同时出现。兼容映射:
| Legacy value | Target mode |
|---|---|
off |
off |
record / equivalent |
record_only |
recall / closed-loop |
legacy_recall,并发出 deprecation warning |
具体 embedding model、candidate limits、weights、thresholds、profiles 和 fallback 都在 retrieval policy 内。CLI 不新增一组无法完整寻址的散落参数。
Policy load 时分别计算四个 canonical content ID/digest 和一个有序
policy_set_digest;Run acceptance 把 alias 解析为 exact source / Recall Input
Snapshot ID。Distillation Policy 写入 receipt/Candidate/record;Distillation +
Lifecycle Policies 同时写入 Work Item/Batch/Decision;Lifecycle Policy 另写入
events/relations;Snapshot Selection Policy 写入 Knowledge
Snapshot,Retrieval/index/renderer/tokenizer identity 写入 Recall Input Snapshot、
Recall Context 和 acceptance manifest。
memory/store.pyprocess-local episodes;memory/consolidation.pysummary-to-fact;memory/meta_chain_wrapper.pygeneric completion summaries;memory/event_log.pyin-memory event backend;- agent-callable
skills/memory_tools.store_memory。
这些路径 MAY 在 compatibility mode 存在,但它们的输出不能进入 KnowledgeDistiller、Knowledge Snapshot 或 Decision-Point Retrieval。
session_state.py;agent_namespace.py。
文档和类型必须明确它们不是 verified Knowledge。
paper_memory.py;code_memory.py/codetree_memory.py;tool_memory.py;rag_memory.py的 source chunk/index 能力。
目标包是 research_agent/inno/reference_index/。迁移期原 import 发
deprecation warning。Reference Card 必须含 source/path/URI、content digest、
version/retrieved_at、chunk offsets 和 Adapter identity。
Agent 不获得“写 Knowledge”工具。允许:
inspect_verified_experience;recall_verified_knowledge(受 Decision Point policy 限制);- working-state note 工具,名称不得包含 durable knowledge 含义。
兼容 alias 保留一个版本,调用时告警;active/confirmatory mode 禁用 alias。
这里的禁用针对 Treatment/production trusted path。验收 harness 另有 benchmark-only、
read-only LegacyBaselineAdapter,只能在 manifest 明列的隔离 C2 arm 读取冻结 legacy
records;它不能写回、不能被 Agent tool 调用、不能进入 T snapshot/index,也不能作为
production fallback。C2 adapter/algo/record-set/budget digests 和 namespace isolation
进入 Stage Manifest/pair report;任何跨 arm 暴露使 campaign invalid。
| Requirement | 主代码证据 | 主测试证据 |
|---|---|---|
| VRM-W01, W03 | evidence store + distillation eligibility | test_knowledge_distillation.py, store contract |
| VRM-W02 | retrieval source-kind gate excludes KnowledgeCandidate rows |
test_decision_point_retrieval.py::test_candidate_records_never_enter_normal_or_confirmatory_context; requirement check candidate_record_returns=0 |
| VRM-W04–W06 | comparison/support-unit builder | comparison, duplicate/metamorphic cases |
| VRM-W07–W08 | lifecycle + deterministic gate | contradiction, private/LLM adversarial cases |
| VRM-W09 | transactional outbox + Runtime stable Activity reconciliation | receipt/work atomicity, restart scan, duplicate worker, authorization/no-commit recovery, lifecycle conflict retry, WorkDisposition coverage, terminal/dead-letter tests |
| VRM-L01–L03 | lifecycle reducer + relation validator | full transition matrix, scope split, cycle rejection |
| VRM-L04–L05 | Evidence/Knowledge/Recall Input Snapshot builders | contamination, exact membership, hash-cycle and unrelated-growth tests |
| VRM-R01–R05 | request schema, hard filter, ranker, budgets | retrieval mechanics + gold corpus |
| VRM-R06–R08 | citation resolver, Recall Decision Outcome, Phase A lineage | utilization auditor and runtime integration |
| VRM-R09–R11 | renderer/security/error policy | injection, blocked/empty/degraded and ITT cases |
| VRM-O01, O03 | index builder, namespace policy | rebuild/corruption/private leakage |
| VRM-O02 | Adapter registry rejects hash/non_semantic_test_index for evaluation or production semantic role |
assembly/config tests; requirement check hash_semantic_assemblies=0 |
| VRM-O04, O06 | trace/report/cost instrumentation | acceptance report schema and causal harness |
| VRM-O05 | explicit ideation fresh-start branch and diversity evaluator | test_ideation_fresh_start.py; ideation_diversity_report.json; quality noninferiority + preregistered diversity checks |
| Requirement group | Implementation deliverable | Blocking artifact |
|---|---|---|
MEM-TR-* |
Decision Intent-to-Verification lineage auditor | trace completeness report |
MEM-SN-* |
snapshot builder, members, policy identity | snapshot_report.json |
MEM-WR-* |
comparative distiller and lifecycle | writer acceptance report |
MEM-RT-* |
Decision-Point Retriever | retrieval acceptance report |
MEM-UT-* |
Recall Decision Outcome and citation-to-config auditor | utilization report |
MEM-RB-001..003 |
offline corruption/noise/injection harness | robustness report |
MEM-RB-004 |
preregistered N-vs-T paired outcome runner | confirmatory causal report |
MEM-EF-001..003 |
scale fixture、完整资源边界和 stage-aware usage attribution | assembled efficiency_report.json |
MEM-EF-004 |
L5 Runtime ref/identity compatibility assembly validator | runtime_release_refs.json + final validation receipt |
MEM-CA-001 |
signed registry/two-frontier、atomic exposure、all-hidden partition authority、A/A + causal lineage auditor | partition/exposure receipts + aa_report.json + Pilot/confirmatory reports |
MEM-CA-002, MEM-CA-005 |
fixed-sequence paired causal contrasts | confirmatory_report.json |
MEM-CA-003 |
external sensitivity、joint assurance、independent Pilot Gate 和 deterministic reserve selection | sensitivity + power + pilot_gate_receipt.json + selection receipt |
MEM-CA-004 |
claim-kind/baseline/family/transfer-scope assembly validator | claim_report.json + final validation receipt |
精确定义和阈值只在 Memory effectiveness evaluation protocol 维护;本计划不复制第二套数值。
requirements_report.json 必须恰好覆盖 governing design 中全部 VRM-* 和本协议
全部 MEM-*。VRM-* 的原子 checks 可引用同一份 stage report,但不能只靠测试名
或 prose 判定;MEM-* 的阈值/统计口径以验收协议为唯一来源。
以下是 benchmark/memory/requirements-v1.yaml 的规范内容;实现时逐行机械转写,
不得保留 range/wildcard。每项只有一个 owner、一个或多个明确 check key、至少一个
exact pytest node 和一个 blocking artifact。validator 同时对该 registry、governing
design 和 evaluation protocol 的 ID 集合做 exact-set equality。
每一 YAML entry 还必须逐项写
minimum_claim_level、required_stages、applicability_rule_id、
provenance_kind: stage|release_assembly、non_waivable_when_applicable,以及有条件
check 的 claim-level/profile predicate(尤其 MEM-CA-003 的 L2/L3+ 两套 checks、
MEM-CA-004 的 L3/L4 checks、MEM-CA-005 的 claim-kind 条件,以及
MEM-TR-001、MEM-UT-001..004、MEM-EF-003 随 ceiling 扩展的 causal-stage
checks)。这些字段由
验收协议 §2.1/§12 唯一定义;Markdown 表只展示 owner/test/artifact,不省略 YAML
中的适用性字段。任一 ID 缺字段、assembly requirement 伪装 stage provenance 或
required ID 输出 N/A,registry validator fail closed。
表中 pytest filename 的路径解析也是规范性的:test_decision_recall_integration.py
位于 tests/test_runtime/;test_memory_acceptance_report.py、
test_memory_claim_gate.py、test_ideation_fresh_start.py 位于
tests/test_benchmark/;其余均位于 tests/test_experience/。registry 写入展开后的
完整相对路径 + ::node,不得只存 filename。
| ID | Owner / report check key(s) | Exact pytest node | Stage / blocking artifact |
|---|---|---|---|
| VRM-W01 | KnowledgeDistiller / immutable_source_mutations |
test_knowledge_distillation.py::test_distillation_never_mutates_evidence |
offline / writer_report.json |
| VRM-W02 | DecisionPointRetriever / candidate_record_returns |
test_decision_point_retrieval.py::test_candidate_records_never_enter_normal_or_confirmatory_context |
offline / retrieval_report.json |
| VRM-W03 | VerifiedEvidenceStore / canonical_bundle_mismatches |
test_knowledge_store_contract.py::test_verified_bundle_rejects_nested_canonical_mismatch |
offline / writer_report.json |
| VRM-W04 | ComparisonBuilder / active_without_comparison |
test_knowledge_distillation.py::test_active_requires_registered_comparison |
offline / writer_report.json |
| VRM-W05 | CandidateValidator / active_without_typed_action |
test_knowledge_distillation.py::test_active_requires_decision_point_and_action |
offline / writer_report.json |
| VRM-W06 | SupportUnitBuilder / duplicate_support_inflation |
test_knowledge_distillation.py::test_duplicate_retry_does_not_increase_support |
offline / writer_report.json |
| VRM-W07 | LifecycleReducer / discarded_counterevidence |
test_knowledge_lifecycle.py::test_counterevidence_is_retained_and_changes_disposition |
offline / writer_report.json |
| VRM-W08 | PromotionPolicy / nondeterministic_promotions |
test_knowledge_distillation.py::test_llm_draft_cannot_override_deterministic_gate |
offline / writer_report.json |
| VRM-W09 | DistillationOutbox / lost_or_duplicate_work_items,authorization_without_commit,lifecycle_conflict_recovery,distillation_work_disposition_coverage |
test_distillation_outbox.py::test_receipt_work_campaign_assignment_restart_and_completion_converge |
offline / trace_report.json |
| VRM-L01 | LifecycleStore / in_place_lifecycle_mutations |
test_knowledge_lifecycle.py::test_lifecycle_is_append_only |
offline / snapshot_report.json |
| VRM-L02 | KnowledgeSnapshotBuilder / duplicate_scope_variant_heads |
test_knowledge_snapshot.py::test_one_actionable_head_per_scope_variant |
offline / snapshot_report.json |
| VRM-L03 | ConflictResolver / scope_conflict_accuracy |
test_knowledge_lifecycle.py::test_scope_difference_splits_instead_of_contests |
offline / writer_report.json |
| VRM-L04 | EvidenceSnapshotBuilder / evaluation_or_cross_arm_members |
test_evidence_snapshot.py::test_confirmatory_snapshot_excludes_evaluation_and_cross_arm_evidence |
offline / snapshot_report.json |
| VRM-L05 | KnowledgeSnapshotBuilder / semantic_snapshot_identity_violations |
test_knowledge_snapshot.py::test_identity_excludes_index_and_unrelated_growth |
offline / snapshot_report.json |
| VRM-R01 | DecisionIntentFactory / unbound_recall_requests |
test_decision_intent.py::test_request_binds_exact_preallocated_intent |
offline / trace_report.json |
| VRM-R02 | HardFilterPipeline / forbidden_pre_rank_returns |
test_decision_point_retrieval.py::test_hard_filters_and_retention_run_before_content_and_rank |
offline / retrieval_report.json |
| VRM-R03 | EvidenceCardRenderer / item_or_token_overflow |
test_decision_point_retrieval.py::test_full_rendered_section_obeys_exact_budget |
offline / retrieval_report.json |
| VRM-R04 | FinalRanker / duplicate_family_returns |
test_decision_point_retrieval.py::test_one_card_per_family_with_counterevidence |
offline / retrieval_report.json |
| VRM-R05 | FinalRanker / forced_fill_returns |
test_decision_point_retrieval.py::test_no_eligible_evidence_abstains_without_fill |
offline / retrieval_report.json |
| VRM-R06 | CitationResolver / unresolved_or_forged_citations |
test_decision_point_retrieval.py::test_polymorphic_citations_resolve_to_bound_snapshot_members |
offline / trace_report.json |
| VRM-R07 | RecallStore / intent_terminal_outcome_coverage |
test_recall_utilization.py::test_every_intent_has_exactly_one_typed_terminal_outcome |
offline / trace_report.json |
| VRM-R08 | UtilizationAuditor / citation_execution_mismatches |
test_recall_utilization.py::test_adopted_citation_binds_exact_intervention_and_config |
offline / utilization_report.json |
| VRM-R09 | MemoryRenderer / memory_instruction_executions |
test_decision_point_retrieval.py::test_memory_text_cannot_override_authority |
offline / robustness_report.json |
| VRM-R10 | RecallAvailabilityPolicy / availability_semantic_violations |
test_decision_recall_integration.py::test_failure_is_degraded_or_blocked_and_itt_is_retained |
offline / robustness_report.json |
| VRM-R11 | RecallErrorClassifier / error_classification_mismatches |
test_decision_point_retrieval.py::test_empty_degraded_blocked_are_disjoint |
offline / retrieval_report.json |
| VRM-O01 | IndexBuilder / index_rebuild_mismatches |
test_recall_input_snapshot.py::test_ready_index_rebuild_is_exact_and_ann_is_nonconfirmatory |
offline / robustness_report.json |
| VRM-O02 | SemanticAdapterRegistry / hash_semantic_assemblies |
test_recall_input_snapshot.py::test_hash_encoder_cannot_assemble_evaluation_or_production_profile |
offline / robustness_report.json |
| VRM-O03 | NamespacePolicy / cross_namespace_returns |
test_decision_point_retrieval.py::test_namespace_arm_seed_and_private_isolation |
offline / robustness_report.json |
| VRM-O04 | LineageAuditor / mediation_edge_completeness |
test_recall_utilization.py::test_write_recall_adoption_execution_verification_chain |
offline / trace_report.json |
| VRM-O05 | IdeationAcceptanceRunner / fresh_start_quality_and_diversity |
test_ideation_fresh_start.py::test_fresh_start_budget_quality_and_diversity_contract |
ideation / ideation_diversity_report.json |
| VRM-O06 | UsageAttributor / memory_cost_component_completeness |
test_memory_acceptance_report.py::test_memory_costs_are_separately_attributed |
offline / efficiency_report.json |
| MEM-TR-001 | LineageAuditor / trace_resolvable_rate,dangling_edges,cross_lineage_hidden_reuse,exposure_token_atomicity |
test_memory_acceptance_report.py::test_mem_tr_001 |
every executed hidden stage + signed global exposure frontier / assembled trace_report.json |
| MEM-SN-001 | KnowledgeSnapshotBuilder / knowledge_snapshot_replay,hash_cycles |
test_memory_acceptance_report.py::test_mem_sn_001 |
offline / snapshot_report.json |
| MEM-SN-002 | EvidenceSnapshotBuilder / evidence_membership_replay,contamination_returns |
test_memory_acceptance_report.py::test_mem_sn_002 |
offline / snapshot_report.json |
| MEM-SN-003 | RecallInputSnapshotBuilder / recall_input_readback,frozen_input_writes,duplicate_family_cards |
test_memory_acceptance_report.py::test_mem_sn_003 |
offline / snapshot_report.json |
| MEM-WR-001 | WriterAcceptanceRunner / critical_false_promotions |
test_memory_acceptance_report.py::test_mem_wr_001 |
offline / writer_report.json |
| MEM-WR-002 | WriterAcceptanceRunner / support_count_metamorphic_changes |
test_memory_acceptance_report.py::test_mem_wr_002 |
offline / writer_report.json |
| MEM-WR-003 | WriterAcceptanceRunner / writer_schema_source_fidelity |
test_memory_acceptance_report.py::test_mem_wr_003 |
offline / writer_report.json |
| MEM-WR-004 | WriterAcceptanceRunner / lifecycle_transition_accuracy |
test_memory_acceptance_report.py::test_mem_wr_004 |
offline / writer_report.json |
| MEM-WR-005 | WriterAcceptanceRunner / promotion_precision,promotion_recall,writer_stratum_gates |
test_memory_acceptance_report.py::test_mem_wr_005 |
offline / writer_report.json |
| MEM-RT-001 | RetrievalAcceptanceRunner / request_completeness,typed_missing_blocks |
test_memory_acceptance_report.py::test_mem_rt_001 |
offline / retrieval_report.json |
| MEM-RT-002 | RetrievalAcceptanceRunner / forbidden_return_rate,held_out_lineage_overlap |
test_memory_acceptance_report.py::test_mem_rt_002 |
offline / retrieval_report.json |
| MEM-RT-003 | RetrievalAcceptanceRunner / candidate_generation_recall_at_20,applicable_family_recall_at_3,all_required_evidence_recall,precision_at_3,ndcg_at_3 |
test_memory_acceptance_report.py::test_mem_rt_003 |
offline / retrieval_report.json |
| MEM-RT-004 | RetrievalAcceptanceRunner / abstention_f1,duplicate_family_returns |
test_memory_acceptance_report.py::test_mem_rt_004 |
offline / retrieval_report.json |
| MEM-RT-005 | RetrievalAcceptanceRunner / citation_resolution,budget_compliance,replay_identity,online_generation_calls |
test_memory_acceptance_report.py::test_mem_rt_005 |
offline / retrieval_report.json |
| MEM-UT-001 | UtilizationAcceptanceRunner / disposition_coverage |
test_memory_acceptance_report.py::test_mem_ut_001 |
offline + every ceiling-required causal stage / assembled utilization_report.json |
| MEM-UT-002 | UtilizationAcceptanceRunner / claimed_adoption_fidelity,execution_fidelity |
test_memory_acceptance_report.py::test_mem_ut_002 |
offline + every ceiling-required causal stage / assembled utilization_report.json |
| MEM-UT-003 | UtilizationAcceptanceRunner / end_to_end_utilization,abstain_forbidden_actions |
test_memory_acceptance_report.py::test_mem_ut_003 |
offline + every ceiling-required causal stage / assembled utilization_report.json |
| MEM-UT-004 | UtilizationAcceptanceRunner / offline_terminal_case_coverage,causal_dropped_pairs,typed_terminal_outcomes |
test_memory_acceptance_report.py::test_mem_ut_004 |
offline + every ceiling-required causal stage / assembled utilization_report.json |
| MEM-RB-001 | RobustnessRunner / noise_precision_loss,noise_recall_loss,forbidden_returns |
test_memory_acceptance_report.py::test_mem_rb_001 |
offline / robustness_report.json |
| MEM-RB-002 | RobustnessRunner / instruction_executions,private_or_cross_scope_leakage |
test_memory_acceptance_report.py::test_mem_rb_002 |
offline / robustness_report.json |
| MEM-RB-003 | RobustnessRunner / offline_rebuild_identity,confirmatory_rebuild_identity,adapter_identity_masquerade |
test_memory_acceptance_report.py::test_mem_rb_003 |
offline at L1; add confirmatory at L3+ / assembled robustness_report.json |
| MEM-RB-004 | CausalAcceptanceRunner / n_minus_t_lower_ci,invalid_intervention_rates |
test_memory_acceptance_report.py::test_mem_rb_004 |
confirmatory / confirmatory_report.json |
| MEM-EF-001 | EfficiencyRunner / online_generation_calls,render_budget_overflow |
test_memory_acceptance_report.py::test_mem_ef_001 |
offline / efficiency_report.json |
| MEM-EF-002 | EfficiencyRunner / retrieval_p95_ms,retrieval_p99_ms |
test_memory_acceptance_report.py::test_mem_ef_002 |
offline / efficiency_report.json |
| MEM-EF-003 | UsageAttributor / offline_cost_component_completeness,itt_usage_cost_completeness,cost_per_valid_improvement,nonfinite_json_numbers |
test_memory_acceptance_report.py::test_mem_ef_003 |
offline at L1; add Pilot at L2 and confirmatory at L3+ / assembled efficiency_report.json |
| MEM-EF-004 | ReleaseValidator / runtime_ref_resolution,runtime_requirement_pass,identity_compatibility |
test_memory_claim_gate.py::test_mem_ef_004 |
assembly / runtime_release_refs.json |
| MEM-CA-001 | LineageAndCausalAuditor / admission_before_visibility,registry_authority_signature,lineage_prefix_replay,global_exposure_prefix_replay,exposure_token_atomicity,registry_sibling_omissions,sealed_reserve_non_overlap,deterministic_reserve_selection,cross_lineage_exposure_overlap,registered_pair_integrity,all_hidden_stage_overlap_matrix,contamination,aa_equivalence,unexpected_exposure_differences |
test_memory_claim_gate.py::test_mem_ca_001 |
offline + selected ideation + A/A + Pilot + sealed reserve at L2; add actual confirmatory at L3+ / partition/exposure/selection receipts + aa_report.json + causal report(s) |
| MEM-CA-002 | CausalAcceptanceRunner / t_minus_c2_lower_ci,t_minus_c2_point,manipulation_gate |
test_memory_claim_gate.py::test_mem_ca_002 |
confirmatory / confirmatory_report.json |
| MEM-CA-003 | PilotGateAndPowerAuditor / sensitivity_gate_pass,sensitivity_lineage_isolation,power_plan_valid,pilot_gate_signature_and_prerequisite_coverage,planned_n_or_stop_reached,confirmatory_reserve_prefix_selected |
test_memory_claim_gate.py::test_mem_ca_003 |
external sensitivity + offline/selected-ideation/A/A/Pilot prerequisite assessments for L2; root assembly creates the final row from those three pre-gate checks plus signed terminal Gate receipt(joint assurance is inside power_plan_valid);add deterministic selection + confirmatory for L3+ / sensitivity + power + pilot_gate_receipt.json + selection receipt |
| MEM-CA-004 | ClaimValidator / family_gate,weighted_overall_ci,family_harm,transfer_scope |
test_memory_claim_gate.py::test_mem_ca_004 |
assembly / claim_report.json |
| MEM-CA-005 | CausalAcceptanceRunner / t_minus_c0_lower_ci,t_minus_c0_point |
test_memory_claim_gate.py::test_mem_ca_005 |
confirmatory / confirmatory_report.json |
每个 PR 必须有 Interface-level red→green tests,不能以“后续 PR 会补验证”为由 合并不可审计状态。
Deliverables
- freeze corpus manifest/report schema and metric dictionary;
- 在任何 memory hidden-stage admission/visibility 前完成独立 VQ/task-sensitivity campaign, 冻结其 manifest/report/terminal receipt,并让 shared identity 只绑定 exact ref/digest;
- 在任何 hidden visibility 前冻结
ScientificClaimPlan:canonical release lineage、claim ladder/baselines、profiles、normalized utility/endpoints、全部 margins/alpha/decision rules、 requirement/claim-matrix digests、完整资源边界和 deterministic reserve-selection rule; - freeze
MemorySharedIdentityManifest/Stage/confirmatory schemas and templates plus orchestration tests;真实 release lineage 的 Claim Plan/shared/offline/ideation/A/A/Pilot receipts 只能在 Phase 4 visible-development Adapter selection receipt 就绪后、Phase 6 任一 hidden admission 前生成;confirmatory exact N/task/seed 在 Pilot power artifact 后 才冻结; - create minimum gold/adversarial fixtures and red acceptance tests;
- create configured Registry/Validation Authority trust anchors、signed lineage/global
frontiers、append-only registry schema、
ADMITTED -> EXPOSURE_COMMITTED|NO_VISIBILITYatomic CAS、all-hidden-stage Partition Authority 和 closure/frontier fixtures; - capture current writer/retriever/utilization baseline;
- freeze migration backup/rollback runbook;
- freeze initial policy schemas and content-ID algorithm。
- freeze explicit
AA0/AA1common/null Adapter + expected-difference allowlist,以及 pair-shared content-addressed external-source replay contract(不可 replay 时的 synchronized drift probe/margin 也须 pre-register);
Exit
- 所有当前失败都有明确 requirement ID;
- report validator 拒绝缺 threshold、digest 或 raw evidence refs;
- assembly 接受相同 release-lineage/shared identity 的不同 stage campaign,拒绝同 lineage/stage 第二 logical admission、遗漏 failed/invalid/aborted closure、offline/ selected ideation/A/A/Pilot/confirmatory reserve/actual 任一适用维度 overlap、unsigned/ rollback frontier、token/no-visibility 双赢和 campaign 冒用;
- final validator 用 pinned authority 对“排除 receipt 自身”的 artifact set 签名;valid fail/invalid receipt 不得授权 publication,pass receipt 才可匹配最高 claim;
- baseline 报告不把当前 system 标成 passed。
- PR 1: immutable models and ID fixtures。
- PR 2: schema 3 migration + validators。
- PR 3: canonical Verified Evidence Bundle、ledger commit positions、Evidence/ Knowledge/Recall narrow Store contracts、transactional distillation outbox、 retention tombstone 和 atomic batch commit。
Exit
- 0→2→3、2→3、3 reopen 全通过;
- old payload hex 全不变;
- partial/malformed schema fail closed;
- InMemory/SQLite 同一 contract;
- 每个 v3-open new/legacy append 与唯一 journal row 同事务;typed Evidence/ Lifecycle frontier 不被 snapshot/recall/outbox append 或 exact retry 推进;
- queued receipt/work item 原子、restart scan 可达、duplicate worker 收敛、 campaign Assignment/Runtime proof 可 read-back、source Run 不获新 Activity、 dead-letter 可见;
- queued Work Item 的 profile bytes/ref/PENDING handoff 先于 Ledger enqueue;Runtime 同
transaction CAS enqueue attempt 到
IN_FLIGHT后 proof 才可离开,首次 Ledger insert 只接受 current fence,receipt read-back 后LEDGER_PRESENT/BOUND;source terminal + aggressive GC、stop+higher-fence+drain+later-frontier orphan absence proof、 first not-found→retire→old transaction commits/drains→QUEUED_PRESENT后RETIRED -> LEDGER_PRESENT/BOUND、commit-before-bind 和 post-Completion retention release crash matrix 全过; - Work Item pins Campaign Admission Profile,
DriveRunadmission/run/initial-command identities 由 Work Item ID 唯一派生;不同部署 config 的并发 projector 不能产生第二 Run; - executor 只能提交 proposal;Runtime commit/closure authorization、pending cancel/ failure arbitration、atomic Knowledge+Batch+Disposition+Report+successful Completion、 NO_COMMIT_CONFLICT retirement/reproposal 均通过 crash/race tests;
- nested Experience 与 canonical row mismatch 必须拒绝;
- evidence capture 在并发 append 下仍有 exact members/position;
- fault injection 无 partial distillation。
- PR 4: comparability/support-unit/effect models。
- PR 5: candidate validation and deterministic VQ distiller。
- PR 6: lifecycle CAS、family/scope variant、contradiction、Knowledge Snapshot。
初版不依赖 LLM。只有 deterministic VQ/synthetic response-surface tracer bullet 通过后才加 structured drafting Adapter。
Exit
- generic/no-action、missing sidecar、duplicate support 被拒绝;
- paired effect/guardrail 正确;
- compatible contradiction→contested,不同 scope→split;
- contested 路径严格产生 replacement + old superseded + new contested + relation +
promoted_contesteddecision,normal snapshot 不暴露旧/new record; - concurrent transition 只有一个 expected head commit;
- snapshot identity 与 raw unrelated growth 解耦;
- writer hard gates 通过。
- PR 7: sanitized contract view、Decision Intent、Recall Input Snapshot、
DecisionRecallRequest/Context/EvidenceCard+ hard filters。 - PR 8: deterministic BM25/direct candidates + rank/diversity/abstain。
- PR 9: sidecar decision envelope + Recall Decision Outcome Store(不改 Phase A v1 payload)。
- PR 10: ImprovementCycle/Experience Adapter tracer-bullet wiring。
Exit
- exact intervention decision 收到自己的 Recall Context;
- blocked/not-requested/empty/degraded/actor-failed/cancelled intent 也有唯一 terminal outcome;
- previous verified feedback/catalog 进入 request;
- 同 context 不再注入其他 stages;
- per-card disposition 100%;
- adopted citation→proposal→effective config→manifest 100% 可解析;
- lexical offline gates 通过。
- PR 11: shadow mode/telemetry/offline report。
- PR 12: real embedding Adapter + rebuild/index identity。
- PR 13: hybrid candidate union and frozen policy comparison。
Exit
- hash-as-semantic production path 为 0;
- hash/non-semantic-test Adapter 无法以 production/evaluation semantic role 完成
registry assembly,
VRM-O02requirement check 为 0 violations; - semantic unavailable 有 typed fallback/degradation;
- 删除 index 可重建;
- hybrid/semantic/lexical 只能在 visible development gold 上按预注册 rule 选择;formal hidden Stage Manifest 冻结唯一 release Adapter 后只评该 Adapter,不能在 hidden set 选 winner;
- development selector 写/read-back immutable
RetrievalAdapterSelectionReceipt;真实 release lineage 随后按 evaluation §13.0 冻结 Claim Plan/shared/stages,三者 exact-match 同一 receipt,早于任何 hidden admission/visibility; - selector exact retry 返回原 receipt,same identity/different bytes fail closed;instrumented tests 证明 hidden corpus/member/result read count=0,candidate catalog 外 Adapter=0;
- active rollout 前完成 shadow quality/latency review。
- PR 14: Procedure Record/compiler and lifecycle。
- PR 15: ProcedureCapabilityBinding + pinned-catalog reference validation;每步仍走 ToolInteraction hard filters 与 Runtime final authorization。
- PR 16: Reference Card/index Module and legacy source Adapter migration。
- PR 17: trusted-path legacy isolation and docs/CLI deprecation。
Exit
- 至少一个诊断或 experiment procedure 从独立 verified trajectory 编译;
- inactive/tampered/unknown-tool procedure 不执行;
- Procedure 不成为 Capability Catalog source,不扩大 allowlist/scope/approval;
- Reference Card 可回原文,不能伪装 internal experimental Knowledge;
- legacy episode/fact 永不出现在 active Decision Recall。
- PR 18: 完整 v1 corpus、adjudication 和 report。
- PR 19: robustness/scale runner。
- PR 20: selected-profile-only ideation fresh-start runner + explicit AA0/AA1 null-harness equivalence report。
- PR 21: causal Stage Manifest/ITT auditor integration。
运行顺序:
- writer;
- retrieval;
- utilization synthetic response surface;
- adversarial/scale;
- read-back Phase 0 已冻结的 external VQ/task-sensitivity receipt,并验证 lineage 隔离;
- ideation fresh-start quality/diversity(仅 ideation profile);
- A/A equivalence + lineage/budget identity;
- 6–8 fresh-pair manipulation Pilot;
- clustered variance/ICC sensitivity + power analysis;
- independent validator 从 signed frontier 枚举 offline、selected ideation、A/A、
Pilot closures 和排除 final CA003/root provenance 的全部适用 L0–L2
PilotPrerequisiteAssessment,对 pass/fail/invalid 都签发 terminalPilotGateReceipt;可据任何 terminal receipt 创建审计 L2 root,但只有 pass receipt 可由 Pilot power artifact 按 frozen strata/order/seed commitment 生成 deterministic selection receipt 和 confirmatory Stage Manifest,此时 不创建 L3/L4 root。早期 shards 只绑定 shared identity/release lineage,不因后续 root 生成而失效。
Exit
- 所有 offline hard gates;
- iff
ScientificClaimPlan.selected_profiles含 ideation,fresh-start 与 memory-shadow 使用相同冻结输入/预算并生成ideation_diversity_report.json,预注册 quality/ diversity gates 通过;未选择时从未 admission并输出 typed N/A; aa_report.json的 90% equivalence CI 完全位于预注册[-delta_aa,+delta_aa],unexpected exposure difference=0;- Pilot manipulation/utilization denominator 只含 gold eligible decisions;Pilot outcome、 variance/ICC、power/ITT denominator 含全部 registered pairs;
- claimed-adoption/execution fidelity 100%;
- no-op/invalid/timeout 没有被删除;
- endpoint、
delta_min/delta_memory/delta_harm/delta_aa、alpha 与 exact decision rules 已在任何 hidden visibility 前冻结;Pilot 只能按 frozen joint-assurance rule 决定 N/ stopping,任一 threshold 漂移必须 fresh lineage。
- PR 22: frozen Knowledge/Evidence/Recall Input Snapshot preregistration。
- PR 23: confirmatory results and claim validator。
- PR 24: production rollout/rollback evidence and legacy trusted-path removal。
Exit
- held-out claim 的 evaluation-task/source-task lineage 零交集;same-task/new-seed claim 允许 task ID 相同但 seed/Run/Attempt/artifact/answer/gold/evaluator-private lineage 零交集;
- paired ITT outcome gate 和 noninferiority/robustness/efficiency gates 通过;
- confirmatory Closure Receipt 后才创建 L3/L4 assembly root;若申请 L5,等 Runtime release manifest/report 可读后创建新的 superseding immutable L5 root;
- protocol-scoped multi-family claim 需要至少三个预注册 families,禁止 domain-general/universal wording;
- iff requested ceiling=
L5,Durable Runtime 生产 gates 与 pass final validation receipt 同时通过;L3/L4 scientific roots 不依赖 Runtime production refs; - claim 文本与证据等级一致。
- canonical JSON/order/timestamp exclusions;
- versioned domain/NFC/decimal/UTC golden vectors;
- every content-derived ID mutation sensitivity;
- unknown enum/extra field rejection;
- old model payload round-trip byte identity;
- Evidence Card/source citation resolution;
- content-ID CHECK 不误伤 legacy/run/activity/arm/pair operational IDs。
- 每个 new/legacy append 在 schema-v3 open 下恰有一个同事务 journal row;
- crash at canonical-row/journal boundary rolls back;exact retry 返回原 position;
- orphan/missing/mismatched journal 在 open-time fail closed;
- Evidence/Lifecycle typed frontier 不被 Snapshot、Recall、Outcome、outbox append 推进;
- queued receipt/work row 原子;unassigned→campaign Run/Activity Assignment→ Completion 的 restart/duplicate scan 收敛,source Run 保持 terminal/无新 Activity;
- Campaign Admission Profile handoff 在 publish bytes、create
ACTIVEWork-Item ref +PENDINGhandoff、Ledger enqueue commit、enqueue receipt + sidecar independent read-back、BOUNDCAS 的每个 seam 注入 crash;每个 prefix 恢复后恰一 ref/handoff/Work Item/receipt,零 dangling Ledger row、零丢失 bytes; - source Run terminal 后、admission projector 读取 profile 前运行 aggressive GC:
Work-Item-owned
BOUND + ACTIVEref 仍使 exact bytes 可读;缺失/未绑定 ref 阻止 source terminal barrier; - pre-enqueue crash orphan 只有 fixed-frontier
request-bound
DistillationEnqueueRecoveryProof=ABSENT(echo exact Experience、Work Item payload digest、handoff + attempt ID/generation/fence)、旧 coordinator 已停止、higher-fence retire 且旧 Ledger transaction 已 drain,随后在 later frontier 证明无 in-flight enqueue attempt 时才把旧 attempt 置为PROVED_ABSENT;handoff/ref 必须仍为PENDING + ACTIVE。 随后以同 Work Item 重试会 append higher-generation/fence attempt 并可成功BOUND;只有 exactDistillationEnqueueObligationAbandonedProof且 Store 已 append/read-back exactabandoned_before_enqueuereceipt 才显式ORPHAN_ABSENT/RELEASED;proof 有而 receipt 缺失时 release=0/Run=WAITING_INPUT。 receipt commit reply-loss 必须由ABANDONED_PRESENTarm 收敛;A/B Experience、payload digest 或 policy/profile lineage swap 时 append/release 都为 0。 timeout、stale frontier、old-attempt proof、open obligation 或 concurrent enqueue 下 release=0;higher-generation retry 与旧 abandon proof 交换的 race 必须 release=0;Ledger commit-before-bind reply loss 由 Work Item/enqueue receipt/sidecar 独立 read-back 收敛到BOUND; - foreign owner、wrong Work Item/profile/object generation、inactive/
RELEASEDref、 tampered proof digest 的 queued enqueue 全部零 Ledger write;exact retry withBOUND返回原 transaction; - enqueue reply-loss 后清空 Runtime caller cache,只从
distillation_enqueue_transactions_v1read-back handoff/ref、attempt ID/generation/fence、 original proof/transaction digests;RuntimeBOUNDCAS 必须逐字段相等。缺 sidecar、字段 swap、later-attempt digest 或 Work Item/receipt journal gap 均不得 bind/terminal; - source/campaign Run terminal 不释放 Work-Item root;terminal Work Completion 加 campaign replay/audit 独立 root(或 retention expiry)后显式 release,replay-retained bytes 始终可读,最终零独立 root 时才可由 GC 删除;
- campaign Activity 从
AWAITING_ASSIGNMENT开始且不可 claim/dispatch;assignment read-back + version/generation CAS 后才 READY。assignment/activation/cancel/terminal 1,000-race 中 stale activation/foreign member dispatch=0; - 100 concurrent admission projectors 对同一 oldest item 只能产生一个 cardinality=1
manifest/Run/Activity/Assignment;projectors 使用不同 deployed config 时仍因 Work
Item-pinned Admission Profile + canonical Work-Item
DriveRunadmission/run/command identities 收敛,same key/different spec 只报 identity conflict;不存在 overlapping manifest 或永久 orphan Run; - terminal validator 对 manifest exact set 证明每项一个 assignment/activity/completion、 foreign=0、missing 不可 vacuous complete;all-completed/dead-letter/cancelled/ runtime-failure-after-work/runtime-failure-after-closure 映射正确;
- cancellation/failure 为所有剩余 manifest slot 写 typed cancelled/dead-letter Completion,terminal campaign 下 assigned-incomplete=0;
- commit/cancel/fatal-failure 3-way 1,000-race:同一 control-event CAS 只选择一个
pending closure kind;authorization-first + success 分别得到
TOO_LATE_COMMITTED/ALL_COMPLETED或保留 Completion 后FAILED/RUNTIME_FAILURE_AFTER_WORK;authorization-first + conflict 在 retry 前分别 cancel 或 dead-letter;cancel/failure-first authorization=0,且 precedence/replay 稳定; - grant→cancel primary pending→independent integrity failure 顺序不丢 failure:success
保留 Completion 并
RUNTIME_FAILURE_AFTER_WORK,no-commit 在 retry 前 dead-letter; - zero-dead-letter + cancelled Completion coverage settled 后、terminal CAS 前到达独立 failure,
immutable coverage 保持不变并映射
RUNTIME_FAILURE_AFTER_CLOSURE;receipt missing/ foreign/tampered、pause/quarantine/watchdog 越过 unresolved authorization、second writer 全部拒绝; - 两个 campaign 对同 scope expected head 的 1,000-race:恰一 atomic success,另一 只有 journaled NO_COMMIT_CONFLICT/零 semantic write;retire auth 后 fresh-head reproposal 可前进,pending cancel 则先进入 CANCELLING;
- successful Batch 对 singleton Work Item 恰一 Work Disposition;no-comparator/ not-comparable/no-candidate 不伪造 Candidate/Decision,仍与 Batch/Report/Completion 原子完成;
- completion 唯一且 canonical Batch/Report/Disposition、authorization/Effect 可解析; dead-letter/cancelled terminal receipt ref/digest 可由 Runtime getter 回读并进入 release denominator;
- tombstoned target 永不进入 active view/index;外部 encrypted/raw payload 或 artifact 删除/crypto-erasure 后 canonical audit envelope/journal/FKs 仍通过 integrity; 尝试物理删除 canonical row 必须失败;canonical JSON 中发现 erasable private bytes 时 quarantine + release invalid,不能用 tombstone 假装已删除。
- retention crash matrix 覆盖 lifecycle retraction、external erasure receipt、每个 affected index invalidation、Tombstone append 与 publication barrier;任一 prefix 不得发布新 snapshot/index,恢复后 exact refs/digests 可回读且旧 Recall Input blocked;
begin_erasurecommit-after-reply-loss exact retry 返回原 Intent/retraction/journal/ receipt,即使 lifecycle head 已有合法 descendant;same incident different bytes 拒绝;- open Intent 与 Snapshot/index/RecallInput/Context/distillation commit 各做 1,000 次 race: retention-first 时 publication semantic write=0;Context-first 只允许那一次已线性化 actor exposure,后续全 blocked;proof/frontier/tombstone set tamper 全拒绝;
- reachable closure golden vectors 覆盖 memory→Evidence Link→Experience→Observation/ Artifact、episodic bundle、index receipt→artifact/object generation;只撤回间接 source 也必须使旧 Snapshot/Recall Input blocked,direct-memory-only anti-join 测试必须失败;
- Distillation plan/grant 后、atomic commit 前 Retention Intent 赢得时,只允许
RETENTION_REVOKEDconflict+journal,Batch/Knowledge/Report/Completion=0;retire 后从 clean inputs 重提,旧 plan 永久无权; - 同一 transaction 同时观察到 lifecycle stale 与 reachable retention revoked 时,golden/
race/reply-loss replay 必须始终得到同一个
RETENTION_REVOKEDconflict ID/receipt; head-delta arm canonical null,exact retry 只能返回原 journal position;
- generic/no-action rejected;
- missing/tampered or nested-vs-canonical Hypothesis/Attempt/Observation/ Verification/Intervention/Trial Provenance mismatch rejected;
- duplicate attempt/import/retry does not change support;
- paired/multi-seed effect and guardrails;
- true contradiction, scope split, temporal update;
promoted_contestedreplacement 的 event/relation/head/decision 原子顺序;- transition legality and supersession cycle rejection;
- family stable across scope variants;expected-head lifecycle CAS race;
- idempotence/concurrent writers/atomic failure points;
- private evaluator and self-evidence exclusion。
- unrelated Experience does not change frozen snapshot;
- concurrent evidence append does not change captured exact membership;
- EvidenceSnapshotCommitReceipt + getter read-back 同 snapshot ID/payload digest/original journal position;exact capture retry 不推进 position;
- capture commit 后丢 reply、随后新增可见 Evidence,再以相同
capture_operation_id+request_digestretry 仍返回原 members/frontier/position;different request conflict,不得把 later Evidence 吸入原 operation; - eligible lifecycle change creates new snapshot;
- selected scope-variant head uniqueness;
- Knowledge Snapshot ID excludes Retrieval/index identity;Recall Input binds it;
- evaluation contamination check;
- lexical/semantic exact rebuild and confirmatory final-card identity;
- model/revision/dimension/policy change creates new index identity;
- failed index attempt 不可进入 Recall Input;成功 retry 得到唯一 ready identity;
- corrupted/stale index typed behavior;
KnowledgeCandidate在 normal/confirmatory Recall Context return count 永远为 0。- tombstone 后旧 frozen Snapshot/index/Recall Input 必须 blocked,不能从 pre-erasure artifact 或 cache 复活;新建 clean inputs 后才恢复。
- hard filter executes before rank;
DecisionPointRetriever.propose()只返回 closedDecisionRecallContextProposal | DecisionRecallBlockedProposal;每个 blocked reason 的 typed evidence golden vector 可被 Runtime artifact getter 重算,free-form/私密/exception evidence 拒绝;- retention blocked proposal 精确绑定同一 Recall Input ID/digest、frontier、tombstone-set digest、sorted blocked targets;替换任一 target、顺序未 canonicalize、foreign input/check 或 forged proposal/artifact digest 都失败且不发布 Context/card;
- full Evaluation Contract/private paths never enter request/actor process;
- Decision Intent exact artifact/generation/arm binding,以及 Runtime-admission-proof 验证的 memory profile/assignment manifest/recall requirement;proof swap/tamper fail;
- task/domain/dataset/model/source/contract/decision/knob/version;
- active/provisional/contested profile;
- one-family diversity;
- counterevidence and abstention;
- stable tie break;
- Evidence Card tagged-union vectors:semantic/procedure 必含 family/scope/lifecycle, episodic 必含 snapshot/member/bundle/verification 且 memory/lifecycle canonical null;
- Recall Context ID golden vectors 区分 healthy empty、degraded zero-card、fallback policy、 retention frontier/tombstone set 与 rendered identity;
- pinned-tokenizer complete rendered-section budgets;
- no generation call online;
- gold Precision/Recall/nDCG/abstention。
- previous feedback enters next request;
- arm-specific feedback isolation;
- every card disposition exactly once;
- blocked/not-requested/cancelled-before-recall/failed-before-recall/empty/degraded/ actor-failed/cancelled zero-card outcome exactly once;
REGISTERED_NOT_REQUESTEDIntent 才接受 not_requested/null-context/zero-card;REQUIREDIntent 伪造 not_requested 必须失败,Outcome caller 无 profile override;- REQUIRED Intent 在 Context 前 cancel/fail 必须用 matching Runtime closure proof 和 exact pre-recall source/decision mapping;无 Recall Input/Context/retriever/planner call;
- blocked Outcome 必须由持久化/read-back
DecisionRecallBlockedProof驱动;覆盖 foreign Intent/input proof、在两个各自有效 blocked proposals 间 swap ref/digest/evidence、forged artifact/proposal digest,以及 Outcome proposal/authorization/canonical Outcome proof pair 不一致,均由 Store strict getter 逐字段拒绝且零 Ledger write; - pre-recall closure alias matrix 覆盖:cancelled 仅接受 byte-equal
CANCEL_EVENT,failed 仅接受 byte-equalRUNTIME_FAILURE;foreign/forged event、ref/digest 拆对、两个各自有效 closure events 互换,以及任何其他 source status 携带 pre-recall fields 均拒绝; prepare_required_decision/commit_required_decision_context拒绝 registered-not-requested Intent;no-memory path 只向 planner 传 typedNoDecisionMemoryBinding,不伪造 Context;Intervention/Attempt v1 lineage 保持 canonical"off";registered-not-requested 在 actor 前 cancel/fail 不调用 planner,仍提交 sourcenot_requested的 exact closure Outcome;- Context append vs pre-Context closure、normal Outcome vs cancel/failure 各 1,000-race, phase/authorization/receipt read-back 收敛且 late writes=0;
- transition/authority illegal cross-product(closure Context、admission Outcome、normal Intent 等)全部零 write/no phase advance;
- Intent proposal→REGISTERING→Ledger append/no-commit→OPEN/retired 的每个 crash seam 和 cancel/failure race 收敛;terminal enumerator 不漏 Ledger-backed Intent,也不为 retired ghost registration 伪造 Outcome;
REGISTERING与CONTEXT_COMMITTING|OUTCOME_COMMITTING都必须由 exact authorization-bound reconciliation deadline 覆盖;reply loss/control crash/overdue fire 后 success/no-commit reconcile 会取消 deadline,且不得留下永久 registration 或重复授权;- APPEND_INTENT/CONTEXT/OUTCOME 的 journaled no-commit 均验证 generic authorization
kind/ID/digest;每个分支都断言 Intent、Context、
decision_recall_items_v2、Outcome、 disposition child-row 新增数全为 0,尤其 APPEND_CONTEXT 不得遗留孤立 recall item; - post-Context closure 对每张 card 恰有一个 Runtime-only
not_considered_cancelled|not_considered_actor_failed,empty 为零;normal actor 使用它们 或 closure 混用 partial actor dispositions 必须失败; outcome_reason_code覆盖 closed source/reason matrix;blocked corruption/policy/private/ identity/contamination/retention 不碰撞;未调用 actor 的 executed actor/prompt fields 全 null,调用路径才允许 exact execution receipts;- REQUIRED 与 registered-no-memory 各覆盖 actor timeout/crash/unparseable-before-envelope: pre-invocation planner-input binding digest 仍可验证,response envelope 不得伪造;成功 response 的 echoed binding、governance digest、foreign Context/input swap/tamper 全拒绝;
- nonempty REQUIRED Context 下 model crash/malformed 只能由
RUNTIME_CLOSURE写 actor_failed + 每卡not_considered_actor_failed;NORMAL actor_failed、closure-auth completed、foreign model/rejection/closure receipt 均拒绝; - adopted target within card/catalog;
- citation→proposal→config→manifest→Verification;
- existing InterventionProposal/Record v1 payload and proposal digest unchanged;
- rejected/no-op 仍持久化;malformed/unparseable actor output 映射 actor_failed, policy/preflight denial 映射 rejected,不存在 standalone invalid status;
- retrieval failure visibly degraded;
- confirmatory pair never dropped;
- no shared mutable policy/gate state;
- ideation fresh-start path、budget parity、quality noninferiority 和 exploration diversity artifact。
- only verified trajectory compiles;
- unknown/tampered tool/procedure rejected;
- procedure step still requires normal Runtime Effect authorization/receipt;
- success/early-stop/rollback semantics;
- reference reverse provenance;
- prompt-injection text has no authority;
- legacy episode/fact excluded;
- working state is not Knowledge。
以下本地测试入口是稳定 Interface:
python -m pytest \
tests/test_experience/test_memory_models.py \
tests/test_experience/test_knowledge_store_contract.py \
tests/test_experience/test_distillation_outbox.py \
tests/test_experience/test_knowledge_distillation.py \
tests/test_experience/test_knowledge_lifecycle.py \
tests/test_experience/test_memory_retention.py \
tests/test_experience/test_evidence_snapshot.py \
tests/test_experience/test_knowledge_snapshot.py \
tests/test_experience/test_recall_input_snapshot.py \
tests/test_experience/test_decision_intent.py \
tests/test_experience/test_decision_point_retrieval.py \
tests/test_experience/test_recall_utilization.py
python -m pytest \
tests/test_runtime/test_decision_recall_integration.py \
tests/test_runtime/test_adaptive_experiment.py \
tests/test_runtime/test_improvement_cycle.py \
tests/test_runtime/test_experience_adapter.py \
tests/test_experience/test_legacy_memory_isolation.py正式 hidden acceptance/release 的唯一规范命令序列是
Memory Effectiveness Evaluation §13;
本计划不维护第二份容易漂移的 CLI。实现必须逐字落实其中的 pre-visibility
ScientificClaimPlan、canonical release-lineage ID、Hidden Partition Authority、
signed registry trust anchor/two frontiers、atomic exposure token、shared/stage manifests、
offline/selected-ideation/A/A/Pilot、independent PilotGateReceipt、deterministic
confirmatory selection、ceiling-specific immutable root、assembly,以及 signed
acceptance_validation_receipt.json。不得使用旧 shared.json/stages/_stages 路径、
self-signed pilot gate、未带 trust anchor 的任意 SQLite,或无条件运行 ideation。
runner/validator exit-code、失败后仍须 assembly、immutable lineage/release paths 和 final-validation receipt 规则同样以该节为唯一规范;科学负结果不得被 transport code 改标为 operational failure。
完整回归入口:
python -m pytest所有测试命令必须非交互并支持 clean temporary root。
- revision 3 reader + writer disabled;
- shadow distillation;
- shadow lexical retrieval;
- shadow hybrid retrieval;
- active
interventionDecision Point on development tasks; - frozen-memory Pilot;
- confirmatory;
- production profile;
- other Decision Points;
- legacy trusted-path removal。
每步记录 policy/snapshot/corpus digest,不能在同一个 experiment 内变更。
- critical false promotion;
- forbidden/superseded/private memory return;
- citation/action/execution fidelity <100%;
- prompt injection execution 或 namespace leakage;
- index identity/replay failure;
- outcome negative-transfer 超过 margin;
- p95/p99 或 token/cost hard limit;
- migration integrity failure。
Rollback 关闭 active injection,保留 immutable v3 audit records,重建或隔离 derived
index,并回到 record_only 或 legacy_recall。不得删除失败证据。
每次 release 生成:
benchmark/results/memory/
_lineages/<lineage-id>/<stage>/<campaign-id>/stage_artifacts...
releases/<release-id>/
acceptance_manifest.json
stage_index.json
requirements_report.json
trace_report.json
snapshot_report.json
writer_report.json
retrieval_report.json
utilization_report.json
robustness_report.json
efficiency_report.json
task_sensitivity_report.json
ideation_diversity_report.json
aa_report.json
pilot_gate_receipt.json
runtime_release_refs.json
pilot_report.json
confirmatory_report.json
power_analysis.json
claim_report.json
raw_refs.json
上述是 assembly 完成时的 pre-validation 文件面;canonical report/envelope 始终存在,
不适用时必须写
{status:not_applicable, reason, status_provenance, data:null} 的 content-addressed
typed envelope,不能缺文件或伪造零值。该 N/A 规则明确不含
acceptance_validation_receipt.json:它只能由独立 validator 在 exit 0|10|20 时
exact-once 新增,形成 validated release surface;exit 70 时保持缺失/unvalidated,
assembler 禁止生成 placeholder。Pilot 与 confirmatory 各有独立 stage-tagged
aggregate;跨 stage requirement 引用两份 provenance,不覆盖成同名报告。
runner 只写 immutable lineage/stage/campaign shard,assembler 只写新的 release-ID
directory;existing different bytes fail closed,绝不能覆盖较低 ceiling/superseded root。
每个 shard 共享 release-lineage/shared-identity digest,但
不要求预知后来生成的 root digest,并必须匹配自己的 stage-manifest digest 和独立
campaign ID。每个 executed stage 必须先有 append-only Admission Receipt;支持非 invalid
claim 时还必须有 terminal Closure Receipt。若 signed frontier 含 open/unclosed admission,
freezer/assembler 必须把 exact open set/frontier/reason 写入 claim=none 的 audit-only
invalid root,不得省略或伪造 Closure。assemble_acceptance 从 root 指定的 signed
Registry Authority checkpoint、lineage/global two frontiers 枚举 exact set,验证目标 ceiling 所需 stage、
全部失败/invalid/aborted admissions,以及 offline/selected ideation/A/A/Pilot/
confirmatory reserve/actual 的完整适用维度 overlap matrix,再生成 release-root files。validator 只接受
release root;未运行的可选 stage 才可按 registry rule 在 stage_index.json typed N/A。
requirements_report.json 必须严格实现验收协议 §2.1/§12:62 IDs 恰一行,closed
pass|fail|invalid|not_applicable,per-ID minimum level/applicability,以及
stage|release_assembly provenance tagged union。query-macro check 使用 sample count +
per-query distribution refs,不伪造 pooled numerator/denominator;N/A 行 checks 为空并
带合法 reason/assembly provenance。缺/重复/未知 requirement、required N/A、refs 不可
解析、registry sibling 未枚举或 identity mismatch 都使总状态 invalid,不能重跑到
有利结果后只选择成功 shard。
required stage 的 failed|aborted|invalid 使用 evaluation §12
StageTerminalOverrideCheck.terminal_closure;audit-only open admission 使用
unclosed_at_frontier,其 Closure refs 必须 null并绑定 signed Admission、authority
checkpoint、两 frontier/prefix 与 enumerated-absence proof;insufficient_power 使用 typed
assurance check。不得挑 partial metric checks或伪造 Closure。独立 validator 对排除 receipt 自身的 artifact-set 重算后,
由 Claim Plan pin 的 Validation Authority 写 signed acceptance_validation_receipt.json。
只有 signature valid、final_status=pass 且 highest claim 与发布目标 exact-match 才算已
验收;valid-fail/invalid receipt 只证明审计完成,不授权发布/L5。
本交付只有在以下事实全部由当前代码和 acceptance artifacts 证明时完成:
- governing design 的每条
VRM-*invariant 都有测试和 requirement report; - schema revision 3 迁移、原子提交、rollback runbook 和旧 payload byte identity 全部验证;
- versioned ID domains、canonical projection、golden vectors 和 monotonic ledger positions 全部验证;
- schema-v3 所有 new/legacy append 与唯一 commit-journal row 同事务,typed Evidence/Lifecycle frontier 在 exact replay 与 snapshot/Recall append 下稳定;
- queued receipt/Work Item 可由 restart scan 到达;campaign Activity 在 Assignment
proof CAS 前保持
AWAITING_ASSIGNMENT/不可 dispatch;exact manifest membership、 completion/dead-letter/cancelled 可审计,terminal campaign 下 assigned-incomplete=0, duplicate Runtime invocation 收敛; - 每个 queued Work Item 在 source terminal 前有 exact
BOUNDhandoff 与 Work-Item-ownedACTIVECampaign Admission Profile ref;Artifact Store 是唯一 byte-GC authority,orphan recovery 与 terminal Completion/replay-retention release 均有 crash-safe read-back 证明; - Distiller 只读取 Store-validated canonical Verified Evidence Bundles;nested Experience mismatch 必须拒绝;
- 当前单-analysis KnowledgeGate 不再供应 active path;
- duplicate support 不涨 evidence strength,family/scope variant、contradiction、
promoted_contestedreplacement 和 lifecycle expected-head CAS 正确; - Evidence/Knowledge/Recall Input Snapshot 身份分离、无 hash cycle 且 confirmatory 可冻结;
- intervention Decision Intent 使用 sanitized contract view、预分配 decision slot、 admission-proof-backed Memory Governance Binding、最大三张 cards 和 exact policy;
- production semantic candidate path 使用真实 pinned embedding;canonical ledger DB 不含 FTS/vector tables,confirmatory exact index 可重建;
- hash/non-semantic test Adapter 在 production/evaluation semantic assembly 为 0;
- 每个 Decision Intent 都有 terminal Recall Decision Outcome,per-card disposition 和 citation-to-config lineage 100%;registered not-requested 绕过 retriever/context, REQUIRED pre-context cancel/fail 只用 verified closure status/proof;
- Phase A InterventionProposal/Record v1 payload bytes 和 digest domains 未改变;
- Procedure/Reference/Working/Episodic/Semantic planes 在类型、持久化和 prompt 中 保持分离;
- legacy episode/consolidated fact 不能进入 trusted active/confirmatory recall;
- offline writer/retrieval/utilization/robustness/efficiency hard gates 全通过;
- active ideation profile 的 fresh-start quality/diversity guardrail 已通过;
- Pilot 通过 manipulation gate,并完成不截断的 clustered variance/ICC sensitivity 与 joint-assurance power analysis;independent Pilot Gate 绑定 pre-root prerequisite assessments,final requirements assembly 再生成 CA003,二者无 hash/self-dependency;
- confirmatory paired ITT、noninferiority、negative-transfer、安全和成本 gate 全通过;
- ScientificClaimPlan/requirement registry/claim matrix、signed Registry/Validation trust anchors、atomic exposure/no-visibility、all-hidden-stage non-overlap 与 deterministic reserve selection 全部通过 crash/race/signature tests;
- final
acceptance_validation_receipt.json签名有效、绑定 pre-validation artifact set、final_status=pass且 highest claim exact-match; - production release 的 Runtime manifest/report refs 可 read-back、digest match, required Runtime requirement IDs 全通过且 identity compatible;
- root README、docs indexes、CLI help 和 release claim 与实际证据一致;
- 全量测试通过,worktree 内没有未解释的 generated acceptance output。