Skip to content

Commit d492326

Browse files
committed
fix: bind memory writes to allocated sessions
1 parent eda3286 commit d492326

9 files changed

Lines changed: 701 additions & 65 deletions

File tree

‎changelogs/unreleased.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
66
## 当前未发布实现候选
77

8-
- **Profile 目标、ContextRead/SkillRoute 与发布真相闭环修复(F1~F14)**:定向 `init --profile` 只解析真实项目且 `--dry-run` 全程零写入;生命周期改为 session-first 主动协调,ContextRead observation、阶段义务与 status/execute 共用身份和前置条件;memory 索引区分 freshness/trust/coverage/repair,report index 诚实降级为维护预览;Codex PASS 改用包内可复算真实宿主证据,相关组合负例接入 changed/full/package-release;F14 审计阻断将 website 已有 `brace-expansion` override 从 5.0.8 提升到官方修复版 5.0.9,不新增审计例外。当前为本地未发布候选,不代表 npm、GitHub、tag 或远端 CI 已更新。
8+
- **Profile 目标、ContextRead/SkillRoute 与发布真相闭环修复(F1~F14)**:定向 `init --profile` 只解析真实项目且 `--dry-run` 全程零写入;生命周期改为 session-first 主动协调,ContextRead observation、阶段义务与 status/execute 共用身份和前置条件;memory 索引区分 freshness/trust/coverage/repair,且 daily 会话通过 `sessionId + sessionBinding` 绑定后续正文写入,错绑和无目标均零写入失败,旧版无绑定会话保持只读并自动续接到新 allocation;report index 诚实降级为维护预览;Codex PASS 改用包内可复算真实宿主证据,相关组合负例接入 changed/full/package-release;`hooks-runtime` 的 298 次隔离子进程回放保留原测试强度并使用 240 秒专属预算,避免 120 秒边界将真实 PASS 误判为超时;F14 审计阻断将 website 已有 `brace-expansion` override 从 5.0.8 提升到官方修复版 5.0.9,不新增审计例外。当前为本地未发布候选,不代表 npm、GitHub、tag 或远端 CI 已更新。
99
- **v1.16.2 已归档**:ContextRead 来源回执耐久化、空会话标识重放修复、README 常见任务教程与 CLI 只读帮助已进入 `changelogs/releases/v1.16.2.md`。
1010
- **v1.16.1 已归档**:长会话提示有界化、会话治理状态隔离、项目绑定稳定性与唯一短名解析修复已进入 `changelogs/releases/v1.16.1.md`。
1111
- **v1.16.0 已归档**:首次初始化、项目 Profile、用户语言与 workspace runtime-state 一致性已进入 `changelogs/releases/v1.16.0.md`。

‎content/duplication-inventory.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"schemaVersion": "ControlContentDuplicationInventoryV1",
3-
"sourceBundleDigest": "e9e6c6a4c3b3e4a58a1b1402fe82b4c1497e88f5ef70a744a43980020946b1c5",
3+
"sourceBundleDigest": "76bbbc92909bacd1b8cb4b9fd2de9eaca8b8a8a6ecce150563995cd3c2a85212",
44
"thresholds": {
55
"minParagraphChars": 100,
66
"sectionThreshold": 0.94,

‎content/skills/memory/SKILL.md‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,11 @@ status/current/month/day byte-range 分区。该索引不是记忆真相源:
7373

7474
当可用 MCP memory writer 时,Agent 不得再用“读取 daily 尾号 → 自行计算会话编号 → 直接编辑 daily/SUMMARY 多文件”的方式作为首选写入路径。
7575

76-
- 新会话编号必须优先通过 `memory_session_allocate(project, date, title, intent, sourceMessage)` 原子分配;该工具会在 active-root / agent / date 作用域内持有 writer lock,并写入 reserved daily 段,返回 `MemorySessionAllocationReceiptV1`。
77-
- `memory_session_write` 与 `memory_summary_append` 必须返回 `MemoryTransactionReceiptV1`,包含 activeRoot、agent、file、beforeDigest、afterDigest、transactionId 与完成时间;报告/记忆可引用 receipt,而不是只写“已追加”。
76+
- 新会话必须优先通过 `memory_session_allocate(project, date, title, intent, sourceMessage)` 原子分配;该工具会在 active-root / agent / date 作用域内持有 writer lock,并写入 reserved daily 段,返回含 `sessionId`、不透明 `sessionBinding` 与 transaction 的 `MemorySessionAllocationReceiptV1`。
77+
- 每次 `memory_session_write` 都必须原样回传同一 allocation receipt 的 `sessionId` + `sessionBinding`。writer 只允许内容进入该绑定会话段,并用 `MemorySessionWriteReceiptV1` 证明绑定已验证、目标段已变化、非目标段未变化与落盘读回一致;缺字段、错配、目标不存在、无目标、未知参数或超出 262144 字符上限均须零写入失败。旧版无 binding marker 的 daily 会话保持可读但不可继续无绑定写入;需要续接时自动分配一个新的绑定会话,禁止让用户执行额外命令。
78+
- `memory_session_write` 与 `memory_summary_append` 必须返回 `MemoryTransactionReceiptV1`,包含 activeRoot、agent、file、beforeDigest、afterDigest、transactionId 与完成时间;新会话写入还必须包含 `MemorySessionWriteReceiptV1`。报告/记忆可引用 receipt,而不是只写“已追加”。
7879
- 遇到 `MEMORY_TRANSACTION_LOCKED` 时,当前写入方必须重读 `memory_status` / `memory_summary_query` 后重试或降级为阻塞说明,禁止忽略锁继续手工写同一文件。
79-
- MCP 不可用时可使用宿主增量编辑 fallback,但必须在报告或记忆中标记 `memoryWriter=fallback`,并在写前后核对 daily 与 SUMMARY digest。
80+
- MCP **能力不可用**时才可使用宿主增量编辑 fallback:必须以高熵唯一 sessionId 在一次增量编辑中追加“新会话标题 + 本次完整正文”,禁止向任何既有会话段追加;写前后核对 daily 与 SUMMARY digest,检测到并发变化则重读后换新 ID 重试一次,仍冲突即阻塞,并在报告/记忆标记 `memoryWriter=fallback`。MCP 已返回 binding/target/layout/lock 错误不属于“能力不可用”,禁止绕过 Tool 改用手工写同一 daily 文件。
8081

8182
### MemoryCannotSatisfyBootstrapGate
8283

‎content/skills/portfolio.json‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@
66
"skillsPattern": "content/skills/*/SKILL.md",
77
"optionalSidecar": "content/skills/*/devcodex.skill.json",
88
"registry": "plugin.json",
9-
"sourceDigest": "bcbcb34c670c6c52b180bfb44929c5bc0e5c7eb2fada6d62d660f48f61019192",
9+
"sourceDigest": "ac59edd9f77eed04a52eff6567ae289c2ede858a88f576f09fbd74b81ffd97ca",
1010
"sidecarDigest": "774105d7947b340d15d17115fcb8e37b62ae545cf553f06126d529184fd74872",
1111
"pluginDigest": "b305f2e18310fc9ee6eca5a13f5454c463dc98ca2add76bf39e78e4a32085a11",
1212
"portfolioEvidence": "content/skills/portfolio-evidence.json",
1313
"portfolioEvidenceDigest": "8364a73c66ed2ec9787cdb9300223278d128a45b689a2b8deda0d1f03189f42b",
1414
"consumerInventoryFileCount": 471,
1515
"consumerInventoryDigest": "395741c255efa9c452af5af40a62a66db1ee7defc65d55bd25e0e6fc0dedfd45",
1616
"consumerProjectionDigest": "33a51834e6b78df70ca18492538a95856c7cfc68b054d48da4debec40cc1be37",
17-
"portfolioInputDigest": "243d91c7c40fa6da5db81d7216b851ec70f2b538ec0ee3397056e080d97bb456"
17+
"portfolioInputDigest": "9d52f394be4e0e273c41e3d922bf68af2ee801c565b95a622a4f43dd60362728"
1818
},
1919
"ordering": "skills.id asc; graph edges from/to asc",
2020
"summary": {
@@ -10914,8 +10914,8 @@
1091410914
"content/skills/memory/SKILL.md"
1091510915
],
1091610916
"source": "content/skills/memory/SKILL.md",
10917-
"hash": "eed3f7e0050c4c25f8d8fa0cd382b8a7ed34f33e5072e83b14e4fb308555cdb1",
10918-
"sourceBytes": 21665,
10917+
"hash": "ac4cfe792b0eb7cf8bfe5ce639cfdbfb9fea8cf83138f1b64e86a15a651d2fb4",
10918+
"sourceBytes": 22727,
1091910919
"version": "1.16.2",
1092010920
"lifecycleState": "active",
1092110921
"dependencies": [],

‎hooks/_runtime/evidence/codex-skill-route-pass.v1.json‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,16 @@
55
"hostVariant": "codex-cli/exec-user-global-local-stdio",
66
"testedVersion": "codex-cli 0.145.0",
77
"protocol": "MCP 2024-11-05",
8-
"runtimeContractDigest": "6fdc272fe3d8fc2ebc23168bed959c9576c8d5d07800315ffb6f4b3b85894896",
8+
"runtimeContractDigest": "d091d063e4b5fb562af7b5fd033846f6058a1e674fe3f219145c0e02dc32bc9d",
99
"hostAdapterDigest": "c73bcd90196689cddc015dc88837c7a35d7f6f94731c04ce8be2e0b21e428733",
10-
"sourceEvidenceDigest": "c70e83c9903574f4cc6231f2efb46d0f35802b0880548f256d6c05eede07171a",
10+
"sourceEvidenceDigest": "7d170bec4864f464aba6e94ba7b0620c8c742ca09499ef75b25e6cf686fb96f4",
1111
"sourceProbe": {
1212
"schemaVersion": "SkillRouteS15EvidenceV1",
13-
"probeRunId": "s15-codex-production-5f63016c-c186-4e97-8c88-249281ada94a",
13+
"probeRunId": "s15-codex-production-c4d2bec5-4f29-4503-b193-de16d0cfab9a",
1414
"authorizationSource": "capability-pass",
1515
"contextSource": "host-hooks",
1616
"receiptStatus": "relevant-complete",
17-
"completedAt": "2026-08-04T07:16:50.692Z"
17+
"completedAt": "2026-08-04T09:08:46.348Z"
1818
},
1919
"probe": {
2020
"schemaVersion": "SkillRouteProbeSummaryV1",

‎hooks/_runtime/host-skill-route-capabilities.v1.json‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313
"status": "PASS",
1414
"testedVersion": "codex-cli 0.145.0",
1515
"protocol": "MCP 2024-11-05",
16-
"runtimeContractDigest": "6fdc272fe3d8fc2ebc23168bed959c9576c8d5d07800315ffb6f4b3b85894896",
16+
"runtimeContractDigest": "d091d063e4b5fb562af7b5fd033846f6058a1e674fe3f219145c0e02dc32bc9d",
1717
"hostAdapterDigest": "c73bcd90196689cddc015dc88837c7a35d7f6f94731c04ce8be2e0b21e428733",
18-
"evidenceDigest": "7512cd55f7ac7c51de544e65137f5338145e4395357aee6435b497001a9dfc46",
18+
"evidenceDigest": "6f12610d2da17cbc708d0fbd03711f1fe3f3947911f8115dfd9cff46f66a7292",
1919
"evidenceRef": "hooks/_runtime/evidence/codex-skill-route-pass.v1.json",
2020
"entrySurface": "codex exec --ephemeral",
2121
"bootstrapDelivery": "user-global hooks.json UserPromptSubmit",

0 commit comments

Comments
 (0)