{
  "schemaVersion": 1,
  "authority": {
    "repository": "deepseek-ai/deepseek-harness",
    "baseExclusive": "dd6322d604e00eec1ba5e0c8541159906a21094a",
    "targetInclusive": "76fda729799fe9b3848dbe2c211d4b231032b81e",
    "commitCount": 404,
    "changedFileCount": 2682,
    "firstParentCount": 32,
    "auditDate": "2026-09-04"
  },
  "tetherMain": {
    "sha": "807dbf4c4cbfb50b184b5dfa5e919d90aafa5ed7",
    "observedAt": "2026-09-04T03:09:54Z"
  },
  "ledgerDocument": "../../site/pages/parity/dsh-alpha3-to-master.md",
  "allowedDispositions": [
    "milestone-owner",
    "existing-v0.9-v0.10-issue",
    "main-equivalent",
    "n/a",
    "experimental-follow",
    "experimental-partial",
    "experimental-no-go",
    "reverted",
    "intentional-deviation"
  ],
  "requiredOwnerIssues": [173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 188],
  "knownTopicIds": [
    "session-log-read-cost",
    "subagent-restored-empty-model-policy",
    "cpython-runtime",
    "invariant-companion-omission",
    "adjacent-agent-steer",
    "model-discovery",
    "webfetch-default-composition",
    "web-style-smoothing",
    "session-seq-offset-brands",
    "turn-preview-layer",
    "ptc-note-link",
    "web-conversation-cost-contract",
    "ptc-single-composition-surface",
    "release-versioning",
    "persistence-handle-contract",
    "session-export-zip",
    "goal-host-pause-fence",
    "storage-version-salvage",
    "read-image-card",
    "tool-call-delta-identity",
    "issue-management-process",
    "agent-team-steer",
    "record-browser-gif-docs",
    "same-session-message-edit",
    "packaged-node-resolution",
    "http-proxy-egress",
    "existing-v0.9-v0.10-capabilities",
    "inspector-cordis-console"
  ],
  "firstParents": [
    { "sha": "5dd876025d9ae4529b6630dc7401aa37f99448ec", "kind": "merge", "pr": 2907, "subject": "session-log-read-api", "topics": ["session-log-read-cost", "subagent-restored-empty-model-policy"] },
    { "sha": "9d159380736179be5873d3b0d93d55b1ff1cf4a4", "kind": "merge", "pr": 1148, "subject": "experimental CPython subprocess backend", "topics": ["cpython-runtime"] },
    { "sha": "714bec13167d049f9268e89fda1167239e6f443b", "kind": "merge", "pr": 3367, "subject": "omit unneeded invariant companions", "topics": ["invariant-companion-omission", "existing-v0.9-v0.10-capabilities", "inspector-cordis-console"] },
    { "sha": "52af48f8080d61c30b194f1beb826fdd71f3975c", "kind": "merge", "pr": 3250, "subject": "subagent Steer service", "topics": ["adjacent-agent-steer"] },
    { "sha": "68488c552a8efa19e289865e8a9c80d44961669a", "kind": "merge", "pr": 3403, "subject": "model discovery profile headers", "topics": ["model-discovery"] },
    { "sha": "dead2b2324dcdff7117e52013cc292370b6ad771", "kind": "merge", "pr": 3382, "subject": "default WebFetch", "topics": ["webfetch-default-composition"] },
    { "sha": "4bc0b000f543e59726aad6749fc8fa9ebcb49454", "kind": "merge", "pr": 3411, "subject": "smooth corners", "topics": ["web-style-smoothing"] },
    { "sha": "876a3e0414666eff82770b2a6442bd000c3c5405", "kind": "merge", "pr": 3346, "subject": "Session seq/offset brands", "topics": ["session-seq-offset-brands"] },
    { "sha": "3efd4b51e00b319c673902ff822f9e778520ea45", "kind": "merge", "pr": 3415, "subject": "turn rail preview layer", "topics": ["turn-preview-layer"] },
    { "sha": "c3e5bd7dae5ce6f5020725a885763891137fd748", "kind": "merge", "pr": 3418, "subject": "PTC note Cloudflare link", "topics": ["ptc-note-link"] },
    { "sha": "1f694c88abd39d8a0b8dfaa4e152872d1381a387", "kind": "merge", "pr": 3391, "subject": "chat performance contracts", "topics": ["web-conversation-cost-contract"] },
    { "sha": "3c5b7097ae6de4d3916f9acd1392cc77300e5319", "kind": "merge", "pr": 3425, "subject": "disable workflow in PTC preset", "topics": ["ptc-single-composition-surface"] },
    { "sha": "4e84901e6471b79ec0338099867ebb4606d12bb5", "kind": "merge", "pr": 3427, "subject": "release 0.1.2-alpha.4", "topics": ["release-versioning"] },
    { "sha": "8b799cd7acd3dcc1bb7c5abd48f8ce364e3b1728", "kind": "merge", "pr": 3266, "subject": "Session persistence handle seam", "topics": ["persistence-handle-contract", "session-export-zip"] },
    { "sha": "d3ab4ce53dfa729b1fa1665023923ca4361a84e2", "kind": "merge", "pr": 3401, "subject": "Goal pause abort fence", "topics": ["goal-host-pause-fence"] },
    { "sha": "d921d4b3575785e79edd3376f16114c669a73e0d", "kind": "direct", "pr": 3431, "subject": "reject cross-version legacy bootstrap", "topics": ["storage-version-salvage"] },
    { "sha": "a6311155976fadcec48dc6478369cbe5d97351b3", "kind": "merge", "pr": 2828, "subject": "read_image image card", "topics": ["read-image-card"] },
    { "sha": "bbae7318f0e5089e61a346df6954190a343ecb96", "kind": "merge", "pr": 3424, "subject": "tool-call identity across empty deltas", "topics": ["tool-call-delta-identity"] },
    { "sha": "be70505f9e43bb5f160f4a022bd82f7d67b7eca1", "kind": "merge", "pr": 3417, "subject": "issue Start date field", "topics": ["issue-management-process"] },
    { "sha": "66ca93c3dcafcd067180ab66f84dba74cd59ba49", "kind": "merge", "pr": 3441, "subject": "restore Project date fields", "topics": ["issue-management-process"] },
    { "sha": "0a1efddd40e256f54f38a0535f87bbf9af65dd69", "kind": "merge", "pr": 3455, "subject": "projection cache version compatibility", "topics": ["storage-version-salvage"] },
    { "sha": "f7cee2c888d0ad307e81dde112968122204b26b2", "kind": "merge", "pr": 3333, "subject": "Agent Teams Steer messaging", "topics": ["agent-team-steer"] },
    { "sha": "49a606bc5b5934603f22a26957a07dc799ab0291", "kind": "merge", "pr": 3456, "subject": "release 0.1.2-alpha.5", "topics": ["release-versioning"] },
    { "sha": "c024c53d34b1064ee385272c8c69c298ed7ce6d8", "kind": "merge", "pr": 3458, "subject": "record-browser-gif gh attach docs", "topics": ["record-browser-gif-docs"] },
    { "sha": "f98bfbda854360e924dcdad597adf2e35664b12c", "kind": "merge", "pr": 3452, "subject": "same-session message editing", "topics": ["same-session-message-edit"] },
    { "sha": "9d3bbd46ee4c809cc8def1f9a54b6ac849e1e67e", "kind": "merge", "pr": 3459, "subject": "revert same-session message editing", "topics": ["same-session-message-edit"] },
    { "sha": "a8e33b62e3c82dcc484f73f45a73b9c353768430", "kind": "merge", "pr": 3434, "subject": "pkg Node child resolution", "topics": ["packaged-node-resolution"] },
    { "sha": "0e6a39746469e11ab603dad789804912cacea4af", "kind": "merge", "pr": 3444, "subject": "migrate issue fields to Project", "topics": ["issue-management-process"] },
    { "sha": "427d210b5e21d1b864a265315f899c9dd66978df", "kind": "merge", "pr": 3451, "subject": "expanded model listing discovery", "topics": ["model-discovery"] },
    { "sha": "48d84990a09b90bd164d2cf7327f7e1afe2a162b", "kind": "merge", "pr": 3471, "subject": "release 0.1.2-rc.1", "topics": ["release-versioning"] },
    { "sha": "7169660d330452d32c91bb2e4788a9b8c2f83a18", "kind": "merge", "pr": 3198, "subject": "process-wide HTTP proxy", "topics": ["http-proxy-egress"] },
    { "sha": "76fda729799fe9b3848dbe2c211d4b231032b81e", "kind": "merge", "pr": 3481, "subject": "HTTP proxy rc version", "topics": ["release-versioning"] }
  ],
  "targetTreeChecks": [
    { "topic": "session-log-read-cost", "sourceEvidence": ["packages/core/session/src/index.ts", "packages/core/session/src/surface.ts"], "testEvidence": ["packages/core/session/tests/session.spec.ts", "packages/core/session/tests/surface.spec.ts"] },
    { "topic": "subagent-restored-empty-model-policy", "sourceEvidence": ["packages/subagent/tool-subagent/src/index.ts", "packages/subagent/tool-subagent/src/model-selection-state.ts"], "testEvidence": ["packages/subagent/tool-subagent/tests/model-selection-settings.spec.ts"] },
    { "topic": "cpython-runtime", "sourceEvidence": ["packages/experimental/code-runtime-python/src/index.ts", "packages/experimental/code-runtime-python/src/protocol.ts"], "testEvidence": ["packages/experimental/code-runtime-python/tests/runtime.spec.ts", "packages/experimental/code-runtime-python/tests/protocol.spec.ts"] },
    { "topic": "invariant-companion-omission", "sourceEvidence": ["scripts/package-invariants.ts", "packages/runtime-diagnostics/invariants/src/index.ts"], "testEvidence": ["scripts/package-invariants.spec.ts", "packages/runtime-diagnostics/invariants/tests/service.spec.ts"] },
    { "topic": "adjacent-agent-steer", "sourceEvidence": ["packages/subagent/subagent/src/continuation.ts", "packages/subagent/tool-subagent/src/index.ts"], "testEvidence": ["packages/subagent/subagent/tests/continuation.spec.ts", "packages/subagent/subagent/tests/service.spec.ts"] },
    { "topic": "model-discovery", "sourceEvidence": ["packages/llm/llm-pi-ai/src/discovery.ts", "packages/llm/llm-pi-ai/src/catalog.ts"], "testEvidence": ["packages/llm/llm-pi-ai/tests/discovery.spec.ts", "packages/llm/llm-pi-ai/tests/catalog.spec.ts"] },
    { "topic": "webfetch-default-composition", "sourceEvidence": ["packages/bundle/base/cordis.patch.yml", "packages/web/web-fetch-http/src/provider.ts"], "testEvidence": ["packages/bundle/base/tests/base.spec.ts", "apps/cli/tests/profiles/headless/tests/keyless-smoke.e2e.ts"] },
    { "topic": "web-style-smoothing", "sourceEvidence": ["packages/client/ui-chat/src/client/chat/ChatView.module.css", "docs/web-styling.md"], "testEvidence": ["apps/web/tests/settings-chrome.e2e.ts"] },
    { "topic": "session-seq-offset-brands", "sourceEvidence": ["packages/core/session/src/types.ts", "packages/core/session/src/index.ts"], "testEvidence": ["packages/core/session/tests/sequence-types.spec.ts", "packages/core/session/tests/fork.spec.ts"] },
    { "topic": "turn-preview-layer", "sourceEvidence": ["packages/client/ui-chat/src/client/chat/TurnNavigator.module.css", "packages/client/ui-chat/src/client/chat/turn-rail-items.ts"], "testEvidence": ["apps/web/tests/chat-scroll-contract.e2e.ts", "packages/client/ui-chat/tests/turn-rail-items.client.spec.ts"] },
    { "topic": "ptc-note-link", "sourceEvidence": [".agents/notes/implemented/feature/2026-06-15-ptc.md"], "testEvidence": [".agents/notes/implemented/feature/2026-06-15-ptc.i18n.yaml"] },
    { "topic": "web-conversation-cost-contract", "sourceEvidence": ["packages/client/ui-conversation/src/client/contract/conversation.ts", "packages/client/ui-conversation/src/client/conversation/assembly.ts", "packages/client/ui-chat/src/client/chat/ChatView.tsx", "packages/client/ui-trajectory/src/client/TrajectoryView.tsx"], "testEvidence": ["packages/client/ui-conversation/tests/conversation-registry.client.spec.ts", "packages/client/ui-conversation/tests/conversation-assembler.client.spec.ts", "packages/client/ui-trajectory/tests/views.client.spec.tsx"] },
    { "topic": "ptc-single-composition-surface", "sourceEvidence": ["packages/preset/agent-presets/presets/ptc/agent.cordis.yml"], "testEvidence": ["packages/preset/agent-presets/tests/shipped-root.spec.ts"] },
    { "topic": "release-versioning", "sourceEvidence": ["package.json", "pnpm-lock.yaml"], "testEvidence": ["scripts/verify-package-dependencies.spec.ts"] },
    { "topic": "persistence-handle-contract", "sourceEvidence": ["packages/session/session-persistence/src/index.ts", "packages/session/session-persistence/src/handle.ts", "packages/session/session-persistence/src/revision.ts"], "testEvidence": ["packages/session/session-persistence/tests/contract.ts", "packages/session/session-persistence/tests/live-write-contract.ts", "packages/session/session-persistence/tests/storage-contract.spec.ts"] },
    { "topic": "session-export-zip", "sourceEvidence": ["packages/session-query/session-log-export/src/archive.ts", "packages/session-query/session-log-export/src/index.ts"], "testEvidence": ["packages/session-query/session-log-export/tests/archive.host.spec.ts", "packages/session-query/session-log-export/tests/route.host.spec.ts"] },
    { "topic": "goal-host-pause-fence", "sourceEvidence": ["packages/goal/goal-round-driver/src/index.ts"], "testEvidence": ["packages/goal/goal-round-driver/tests/goal-round-driver.spec.ts"] },
    { "topic": "storage-version-salvage", "sourceEvidence": ["packages/storage/storage-domain/src/spec.ts", "packages/storage/storage-json/src/per-record-unit.ts", "packages/session/session-projection-cache/src/spec.ts"], "testEvidence": ["packages/storage/storage-domain/tests/domain.spec.ts", "packages/storage/storage-json/tests/json-backend.spec.ts", "packages/session/session-projection-cache/tests/fixtures.spec.ts"] },
    { "topic": "read-image-card", "sourceEvidence": ["packages/fs/tool-fs/src/read-image.ts", "packages/client/ui-tool/src/client/tool/models/image-card-model.ts", "packages/client/ui-tool/src/client/tool/toolviews/read-image-row.tsx"], "testEvidence": ["packages/fs/tool-fs/tests/read-image.spec.ts", "packages/client/ui-tool/tests/image-card.client.spec.tsx"] },
    { "topic": "tool-call-delta-identity", "sourceEvidence": ["packages/llm/llm-pi-ai/src/stream.ts", "packages/llm/llm-pi-ai/src/adapter.ts"], "testEvidence": ["packages/llm/llm-pi-ai/tests/adapter.spec.ts", "packages/llm/llm-pi-ai/tests/adapter.e2e.ts"] },
    { "topic": "issue-management-process", "sourceEvidence": [".github/issue-management/policy.mjs", ".github/issue-management/config.json"], "testEvidence": [".github/issue-management/policy.test.mjs"] },
    { "topic": "agent-team-steer", "sourceEvidence": ["packages/experimental/agent-team/src/mailbox.ts", "packages/experimental/agent-team/src/index.ts", "packages/experimental/tool-agent-team/src/index.ts"], "testEvidence": ["packages/experimental/agent-team/tests/team.spec.ts", "packages/experimental/agent-team/tests/persistence.spec.ts", "packages/experimental/tool-agent-team/tests/tool-team.spec.ts"] },
    { "topic": "record-browser-gif-docs", "sourceEvidence": [".agents/skills/record-browser-gif/SKILL.md", ".agents/skills/record-browser-gif/scripts/encode_gif.py"], "testEvidence": [".agents/notes/implemented/feature/2026-06-15-ptc.i18n.yaml"] },
    { "topic": "same-session-message-edit", "sourceEvidence": ["packages/core/session/src/index.ts", "packages/core/agent/src/index.ts"], "testEvidence": ["packages/core/session/tests/session.spec.ts", "packages/core/agent/tests/agent.spec.ts"] },
    { "topic": "packaged-node-resolution", "sourceEvidence": ["patches/@yao-pkg__pkg@6.21.0.patch", "scripts/build-exe-for-python-sdk.ts"], "testEvidence": ["scripts/build-exe-for-python-sdk.spec.ts", "scripts/smoke-python-runtime.py"] },
    { "topic": "http-proxy-egress", "sourceEvidence": ["packages/util/http-proxy/src/policy.ts", "packages/util/http-proxy/src/install.ts", "apps/cli/src/profile-boot.ts"], "testEvidence": ["packages/util/http-proxy/tests/policy.spec.ts", "packages/llm/llm-deepseek/tests/egress.spec.ts", "packages/web/web-fetch-http/tests/proxy.spec.ts", "packages/subprocess/subprocess/tests/egress.spec.ts"] },
    { "topic": "existing-v0.9-v0.10-capabilities", "sourceEvidence": ["packages/webhook/webhook/src/index.ts", "packages/api/remotes/src/index.ts", "packages/session/session-turn-outline/src/projection.ts", "packages/client/ui-chat/src/client/chat/turn-rail-items.ts"], "testEvidence": ["packages/webhook/webhook/tests/runtime.spec.ts", "packages/api/remotes/tests/built-lib.e2e.ts", "packages/session/session-turn-outline/tests/projection.spec.ts", "packages/client/ui-chat/tests/turn-rail-items.client.spec.ts"] },
    { "topic": "inspector-cordis-console", "sourceEvidence": ["packages/experimental/inspector/src/client/cdp/index.ts", "packages/experimental/inspector/src/client/bridge/controller.ts"], "testEvidence": ["packages/experimental/inspector/tests/cordis-tree.host.spec.ts", "packages/experimental/inspector/tests/protocol.host.spec.ts"] }
  ],
  "topics": [
    {
      "id": "session-log-read-cost",
      "title": "Session 日志点读、快照复用与热路径成本",
      "upstreamCommits": ["5dd876025d9ae4529b6630dc7401aa37f99448ec", "5660f44d29f47fca2612c92ecffe6fb699c486f1", "bcfec8d1c3cc53bbfbf6b11a70babe0dbc44db94", "47e6448e236ea887c18fed7b77f27c0a78935a51"],
      "finalSourceEvidence": ["packages/core/session/src/index.ts", "packages/core/session/src/surface.ts"],
      "finalTestEvidence": ["packages/core/session/tests/session.spec.ts", "packages/core/session/tests/surface.spec.ts"],
      "observableSemantics": "调用方可 O(1) 点读 eventAt；全日志 snapshot 在 append 前复用 immutable identity，扫描调用方不再为一次点读复制整份日志。",
      "tetherEvidence": [{ "commit": "807dbf4c4cbfb50b184b5dfa5e919d90aafa5ed7", "status": "main 的 ISession 只有全量 Events，未发布 exact lookup、half-open snapshot 或复用 identity contract。", "paths": ["src/Tether.Core.Contracts/ISession.cs", "src/Tether.Core.Session/InMemorySession.cs"], "tests": ["tests/Tether.Core.Session.Tests/InMemorySessionTests.cs"] }],
      "disposition": "milestone-owner",
      "ownerIssues": [173]
    },
    {
      "id": "subagent-restored-empty-model-policy",
      "title": "恢复会话的显式空 subagent model policy 不重新采样 Host settings",
      "upstreamCommits": ["5dd876025d9ae4529b6630dc7401aa37f99448ec", "32d681f0237c3672f1bd93b437a26b034af80ac0"],
      "finalSourceEvidence": ["packages/subagent/tool-subagent/src/index.ts", "packages/subagent/tool-subagent/src/model-selection-state.ts"],
      "finalTestEvidence": ["packages/subagent/tool-subagent/tests/model-selection-settings.spec.ts"],
      "observableSemantics": "含 end-seed 但 policy 为空的 restored Session 保持 disabled；只有 fresh top-level Session 才采样当前 Host allowlist，不能让恢复后的权限随设置漂移。",
      "tetherEvidence": [{ "commit": "807dbf4c4cbfb50b184b5dfa5e919d90aafa5ed7", "status": "main 有 durable subagent route/selection 基础但最终 fresh-versus-explicit-empty restore acceptance 仍归旧 owner 收口。", "paths": ["src/Tether.Subagent.Bridge/ProductSubagentProvider.cs", "src/Tether.Subagent.Definitions/SubagentModel.cs", "src/Tether.Subagent/SubagentRegistryService.cs"], "tests": ["tests/Tether.Subagent.Bridge.Tests/ProductBridgeTests.cs", "tests/Tether.Subagent.Tests/SubagentRegistryTests.cs"] }],
      "disposition": "existing-v0.9-v0.10-issue",
      "ownerIssues": [105]
    },
    {
      "id": "cpython-runtime",
      "title": "experimental CPython subprocess code runtime",
      "upstreamCommits": ["9d159380736179be5873d3b0d93d55b1ff1cf4a4", "c388169cff8e657af384ef82d63bc9584be3d86b", "053d17f6a1de0fcc4df3af8b259f4ee76705ca45"],
      "finalSourceEvidence": ["packages/experimental/code-runtime-python/src/index.ts", "packages/experimental/code-runtime-python/src/protocol.ts"],
      "finalTestEvidence": ["packages/experimental/code-runtime-python/tests/runtime.spec.ts", "packages/experimental/code-runtime-python/tests/protocol.spec.ts"],
      "observableSemantics": "私有 experimental provider 以本机 CPython 子进程、fd 3 framing、POSIX signal/rlimit/process-group、严格 output/log/value budgets 与 teardown settlement 实现 ICodeRuntime。",
      "tetherEvidence": [{ "commit": "807dbf4c4cbfb50b184b5dfa5e919d90aafa5ed7", "status": "main 已有稳定 provider-neutral code runtime、Roslyn/worker/process providers 和资源账本；没有 shipped CPython provider。", "paths": ["src/Tether.CodeRuntime.Process/ProcessCodeRuntime.cs", "src/Tether.CodeRuntime.Process/ComputeLedger.cs", "src/Tether.CodeRuntime.Tools/CodeRuntimeToolsPlugin.cs"], "tests": ["tests/Tether.CodeRuntime.Tests/ProcessCodeRuntimePluginTests.cs", "tests/Tether.CodeRuntime.Tests/WorkerProtocolTests.cs"] }],
      "disposition": "experimental-no-go",
      "ownerIssues": [],
      "reason": "上游最终仍位于 packages/experimental、未进入 shipped composition，且具体实现强绑定 CPython 与 POSIX fd/signal/rlimit/process-group；这些机制不是稳定 C# observable parity，当前复制会建立第二套本机 sandbox/process authority。",
      "reconsiderWhen": "上游将该 provider 脱离 experimental 并进入公开 shipped preset，或 Tether 明确产品化一个受支持的本机 CPython sandbox provider并能复用现有 Subprocess/Sandbox/ICodeRuntime authority 时重评。"
    },
    {
      "id": "invariant-companion-omission",
      "title": "删除无独立关系的空 invariant companion",
      "upstreamCommits": ["714bec13167d049f9268e89fda1167239e6f443b", "15f2997bcb435ebb4873c0490f713b2bb8cd1ce9", "01a88826016d7fb88a66999c8b3238fdd8791a4a"],
      "finalSourceEvidence": ["scripts/package-invariants.ts", "packages/runtime-diagnostics/invariants/src/index.ts"],
      "finalTestEvidence": ["scripts/package-invariants.spec.ts", "packages/runtime-diagnostics/invariants/tests/service.spec.ts"],
      "observableSemantics": "没有两个独立 observation 可漂移的包不发布 runtime invariant；service presence、metadata、effect count 和固定 example 不再用空 companion 冒充运行时保证。",
      "tetherEvidence": [{ "commit": "807dbf4c4cbfb50b184b5dfa5e919d90aafa5ed7", "status": "main 仍有大量空 Invariant.cs，并由 PackageInvariantGateTests 强制每包 companion。", "paths": ["src/Tether.Invariants/InvariantRegistry.cs", "src/Tether.Web.Http/Invariant.cs", "tests/Tether.Invariants.Tests/PackageInvariantGateTests.cs"], "tests": ["tests/Tether.Invariants.Tests/InvariantRegistryTests.cs", "tests/Tether.Invariants.Tests/PackageInvariantGateTests.cs"] }],
      "disposition": "milestone-owner",
      "ownerIssues": [185]
    },
    {
      "id": "adjacent-agent-steer",
      "title": "相邻 Agent 消息统一为 SendMessage + Steer",
      "upstreamCommits": ["52af48f8080d61c30b194f1beb826fdd71f3975c", "ec493c2db871e07b647c6b1db148b992b5e63f2d", "3091bdc25793baa8e6cd15d0b47d00458f0ef41d", "43840d6ecea25b8fbe60df4fbdb3154356fa0cda"],
      "finalSourceEvidence": ["packages/subagent/subagent/src/continuation.ts", "packages/subagent/tool-subagent/src/index.ts"],
      "finalTestEvidence": ["packages/subagent/subagent/tests/continuation.spec.ts", "packages/subagent/subagent/tests/service.spec.ts"],
      "observableSemantics": "exact live sender 只能向 direct parent/child 发消息；running target 在最近 step 边界接收，idle 开新 turn，inactive direct child 可 cold resume；quiet/wakeup 和独立 report tool 被删除。",
      "tetherEvidence": [{ "commit": "807dbf4c4cbfb50b184b5dfa5e919d90aafa5ed7", "status": "main 仍公开 Quiet/NextStep 与分离 Followup/Report 路径。", "paths": ["src/Tether.Subagent.Definitions/SubagentModel.cs", "src/Tether.Subagent/SubagentRegistryService.cs"], "tests": ["tests/Tether.Subagent.Tests/SubagentRegistryTests.cs"] }],
      "disposition": "milestone-owner",
      "ownerIssues": [180]
    },
    {
      "id": "model-discovery",
      "title": "多 provider model listing discovery",
      "upstreamCommits": ["68488c552a8efa19e289865e8a9c80d44961669a", "5257c750927224cc4d16831719a040a3fa3c8026", "427d210b5e21d1b864a265315f899c9dd66978df", "a6ed19b54131b3e2995f8503d960c9df8509553c", "ccecf4db0417069ca806d8f1e07f7986b78614fa", "8179d929abc0ec7c10ecd6ee1419a4494d37d837"],
      "finalSourceEvidence": ["packages/llm/llm-pi-ai/src/discovery.ts", "packages/llm/llm-pi-ai/src/catalog.ts"],
      "finalTestEvidence": ["packages/llm/llm-pi-ai/tests/discovery.spec.ts", "packages/llm/llm-pi-ai/tests/catalog.spec.ts"],
      "observableSemantics": "catalog route 零网络；动态 route 复用 validated profile headers/auth，解析 data[] 或 models map；Anthropic discovery-only /v1 normalization 不改变 inference base URL。",
      "tetherEvidence": [{ "commit": "807dbf4c4cbfb50b184b5dfa5e919d90aafa5ed7", "status": "main 的 model directory 是同步静态 catalog，没有独立 discovery seam。", "paths": ["src/Tether.Llm.Providers/MultiProviderClient.cs", "src/Tether.Llm.Providers/MultiProviderPlugin.cs"], "tests": ["tests/Tether.Llm.Providers.Tests/MultiProviderTests.cs"] }],
      "disposition": "milestone-owner",
      "ownerIssues": [177]
    },
    {
      "id": "webfetch-default-composition",
      "title": "WebFetch 默认组合可用",
      "upstreamCommits": ["dead2b2324dcdff7117e52013cc292370b6ad771", "ca723d927360ec57c6dfe113622248fb749983a3", "cf7b0bd5a4dca5d4707fd6f56057e6982d7ef9f0", "0a0f9e59ffc112039a75c520d0585b2668be2387"],
      "finalSourceEvidence": ["packages/bundle/base/cordis.patch.yml", "packages/web/web-fetch-http/src/provider.ts"],
      "finalTestEvidence": ["packages/bundle/base/tests/base.spec.ts", "apps/cli/tests/profiles/headless/tests/keyless-smoke.e2e.ts"],
      "observableSemantics": "base、headless 与 SDK 默认组合均呈现 web_fetch，不要求额外 patch；真正安全边界仍是 SSRF-safe provider。",
      "tetherEvidence": [{ "commit": "807dbf4c4cbfb50b184b5dfa5e919d90aafa5ed7", "status": "main 的 base.yaml 已挂 web-http-fetch 与 web-tools，工具 catalog 和 bounded provider 测试存在；完整 SSRF admission 继续由 #111。", "paths": ["src/Tether.Bundles/bundles/base.yaml", "src/Tether.Web.Http/HttpFetchProvider.cs", "src/Tether.Web.Tools/WebToolsPlugin.cs"], "tests": ["tests/Tether.Web.Http.Tests/WebHttpTests.cs", "tests/Tether.Web.Tools.Tests/WebToolsTests.cs", "tests/Tether.Bundles.Tests/BundleBootTests.cs"] }],
      "disposition": "main-equivalent",
      "ownerIssues": [111]
    },
    {
      "id": "web-style-smoothing",
      "title": "superellipse 圆角与 elevation hairline 样式",
      "upstreamCommits": ["4bc0b000f543e59726aad6749fc8fa9ebcb49454", "7020c7e122190a2c164910f0847c53749995f369", "b873b9321e7512adaa70738fe2be344f28777621", "3ce5604a71b4f573e9a7bc4a31cab06cc4407493"],
      "finalSourceEvidence": ["packages/client/ui-chat/src/client/chat/ChatView.module.css", "docs/web-styling.md"],
      "finalTestEvidence": ["apps/web/tests/settings-chrome.e2e.ts"],
      "observableSemantics": "只调整视觉圆角、阴影与 hairline token，不改变 API、状态、输入、持久化、工具或可访问性 contract。",
      "tetherEvidence": [{ "commit": "807dbf4c4cbfb50b184b5dfa5e919d90aafa5ed7", "status": "main 有自有 framework-free Web token 与响应式样式；该视觉细节不构成 semantic parity owner。", "paths": ["src/Tether.Web.UiShell/client/styles/tokens.css", "src/Tether.Web.UiShell/client/styles/conversation.css"], "tests": ["tests/Tether.WebHost.Browser.Tests/issue-163-layout.spec.mjs"] }],
      "disposition": "n/a",
      "ownerIssues": [],
      "reason": "固定 diff 的实际代码仅为 CSS/视觉 token 与 docs，没有改变调用方 API、状态机、持久化或成本契约，符合 issue 允许排除的 style-only 噪声。",
      "reconsiderWhen": "若后续固定上游把该视觉机制变成可配置 API、命中区域/可访问性语义或布局稳定性 acceptance，再作为产品 UI owner 审计。"
    },
    {
      "id": "session-seq-offset-brands",
      "title": "SessionSeq、SessionLogOffset 与 cursor 强类型",
      "upstreamCommits": ["876a3e0414666eff82770b2a6442bd000c3c5405", "27bf1039dbb974be00cce8bd17d813c032fba6fb"],
      "finalSourceEvidence": ["packages/core/session/src/types.ts", "packages/core/session/src/index.ts"],
      "finalTestEvidence": ["packages/core/session/tests/sequence-types.spec.ts", "packages/core/session/tests/fork.spec.ts"],
      "observableSemantics": "existing event seq、gap/prefix offset 和 -1/last-event cursor 不可混用；空日志与尾后边界不再伪装成有效 event。",
      "tetherEvidence": [{ "commit": "807dbf4c4cbfb50b184b5dfa5e919d90aafa5ed7", "status": "main 仍以裸 long 表示 Seq、NextSequence 与 seed cut。", "paths": ["src/Tether.Core.Contracts/SessionEvent.cs", "src/Tether.Core.Contracts/ISession.cs", "src/Tether.Session.Persistence/SessionHeader.cs"], "tests": ["tests/Tether.Core.Session.Tests/InMemorySessionTests.cs", "tests/Tether.Session.Query.Tests/SessionForkBoundaryTests.cs"] }],
      "disposition": "milestone-owner",
      "ownerIssues": [173]
    },
    {
      "id": "turn-preview-layer",
      "title": "turn rail preview 层级修复",
      "upstreamCommits": ["3efd4b51e00b319c673902ff822f9e778520ea45", "515eca7dc772cb7d65ed3999620e8ae0cda72605"],
      "finalSourceEvidence": ["packages/client/ui-chat/src/client/chat/TurnNavigator.module.css", "packages/client/ui-chat/src/client/chat/turn-rail-items.ts"],
      "finalTestEvidence": ["apps/web/tests/chat-scroll-contract.e2e.ts", "packages/client/ui-chat/tests/turn-rail-items.client.spec.ts"],
      "observableSemantics": "turn hover preview 在 code banner/overlay 之上可见，不被 stacking context 遮挡；这是既有 rail 的交互 acceptance。",
      "tetherEvidence": [{ "commit": "807dbf4c4cbfb50b184b5dfa5e919d90aafa5ed7", "status": "main 尚无最终 turn rail；whole-log outline 已实现，rail/load-and-jump 仍由既有 v0.10 owner。", "paths": ["src/Tether.Session.TurnOutline/TurnOutlineProjection.cs", "src/Tether.Web.UiShell/client/styles/conversation.css"], "tests": ["tests/Tether.Session.TurnOutline.Tests/TurnOutlineProjectionTests.cs", "tests/Tether.WebHost.Frontend.Tests/transcript.test.js"] }],
      "disposition": "existing-v0.9-v0.10-issue",
      "ownerIssues": [132, 140]
    },
    {
      "id": "ptc-note-link",
      "title": "PTC 历史说明中的 Cloudflare Code Mode 名称与链接",
      "upstreamCommits": ["c3e5bd7dae5ce6f5020725a885763891137fd748", "b74486ab29b65d132b850350db0cc3c6ff443419"],
      "finalSourceEvidence": [".agents/notes/implemented/feature/2026-06-15-ptc.md"],
      "finalTestEvidence": [".agents/notes/implemented/feature/2026-06-15-ptc.i18n.yaml"],
      "observableSemantics": "只修复历史文档的外部产品名和链接，不改变 PTC runtime、tool catalog 或 preset。",
      "tetherEvidence": [{ "commit": "807dbf4c4cbfb50b184b5dfa5e919d90aafa5ed7", "status": "main 的 PTC/code-runtime 文案由现有 owner 管理；上游这一提交本身没有实现语义。", "paths": ["src/Tether.CodeRuntime.Tools/CodeRuntimeToolsPlugin.cs", "src/Tether.Bundles/bundles/base.yaml"], "tests": ["tests/Tether.CodeRuntime.Tests/CodeRuntimeToolsPluginTests.cs"] }],
      "disposition": "n/a",
      "ownerIssues": [],
      "reason": "实际 tree diff 仅修改上游内部双语 note 与 pairing manifest，属于 generated/docs-only 噪声。",
      "reconsiderWhen": "若该名称进入模型可见 prompt、public API 或 Tether 自有文档事实源时，由 #100/#184 的 vocabulary acceptance 处理。"
    },
    {
      "id": "web-conversation-cost-contract",
      "title": "Web conversation 三帧发布、stable identity 与窗口重锚成本契约",
      "upstreamCommits": ["1f694c88abd39d8a0b8dfaa4e152872d1381a387", "81431381d68fea3c5adf505aa1c2942286f50a68", "c809098b06480f44f73165a23027abc41801882b", "2ab37e9558859ab1ba442dcebe2bd3ed4121fff3", "59342011090af023e3bab4d0fa2f8e057f681b9e", "2e21d210a5770fa67e2d737920e0254d38089250", "577f0cf7d9f4f88c794c3d2d82c61e3550827b62", "0e90d47d19d8b689ebd62981c37496ae25d44945", "e32437d18b4aa2c9c4feda530b9cdda49dcb75f6"],
      "finalSourceEvidence": ["packages/client/ui-conversation/src/client/contract/conversation.ts", "packages/client/ui-conversation/src/client/conversation/assembly.ts", "packages/client/ui-chat/src/client/chat/ChatView.tsx", "packages/client/ui-trajectory/src/client/TrajectoryView.tsx"],
      "finalTestEvidence": ["packages/client/ui-conversation/tests/conversation-registry.client.spec.ts", "packages/client/ui-conversation/tests/conversation-assembler.client.spec.ts", "packages/client/ui-trajectory/tests/views.client.spec.tsx"],
      "observableSemantics": "高频 stream updates 在第三次 RAF 合并发布，immediate 更新可抢占；unchanged location/keyed node 保持 identity；resident history bounded，window replacement 后 trajectory/chat anchor 重绑。",
      "tetherEvidence": [{ "commit": "807dbf4c4cbfb50b184b5dfa5e919d90aafa5ed7", "status": "main 有 framework-free reconcile/perf tests 与 client plugin lifecycle，但没有固定三帧 cadence、resident-window cost 和 replacement reanchor 的完整 acceptance。", "paths": ["src/Tether.Web.UiShell/client/lib/reconcile.js", "src/Tether.Web.UiShell/client/modules/renderer.js", "src/Tether.Web.ClientModules/ClientModuleContribution.cs"], "tests": ["tests/Tether.WebHost.Frontend.Tests/perf.test.js", "tests/Tether.WebHost.Frontend.Tests/reconcile.test.js", "tests/Tether.WebHost.Frontend.Tests/transcript.test.js"] }],
      "disposition": "milestone-owner",
      "ownerIssues": [188]
    },
    {
      "id": "ptc-single-composition-surface",
      "title": "PTC preset 只呈现 run_code 编排面",
      "upstreamCommits": ["3c5b7097ae6de4d3916f9acd1392cc77300e5319", "0cdcc9c3c5b6d947b67b3364e1c5d8b8f3a8342a"],
      "finalSourceEvidence": ["packages/preset/agent-presets/presets/ptc/agent.cordis.yml"],
      "finalTestEvidence": ["packages/preset/agent-presets/tests/shipped-root.spec.ts"],
      "observableSemantics": "shipped PTC preset 在 registration/lookup/presentation 全面禁用 general workflow tool，只保留 run_code；workflow infrastructure 仍可供 Host/Ralph。",
      "tetherEvidence": [{ "commit": "807dbf4c4cbfb50b184b5dfa5e919d90aafa5ed7", "status": "main 的 base composition 同时挂 code runtime tools 与 workflow tools，没有 shipped PTC preset 固定差异。", "paths": ["src/Tether.Bundles/bundles/base.yaml", "src/Tether.CodeRuntime.Tools/CodeRuntimeToolsPlugin.cs"], "tests": ["tests/Tether.Bundles.Tests/BundleBootTests.cs", "tests/Tether.CodeRuntime.Tests/CodeRuntimeToolsPluginTests.cs"] }],
      "disposition": "milestone-owner",
      "ownerIssues": [184]
    },
    {
      "id": "release-versioning",
      "title": "alpha.4、alpha.5、rc.1 与 proxy package version bump",
      "upstreamCommits": ["4e84901e6471b79ec0338099867ebb4606d12bb5", "a9e185f205169262ab39cbbda9fc48b16c37bbe9", "49a606bc5b5934603f22a26957a07dc799ab0291", "db6bdc3576c2d4e7c965e8e3ed0c2a731eed87f5", "48d84990a09b90bd164d2cf7327f7e1afe2a162b", "a66e4702047846cdaa10c66c9d3df3951f5ea70d", "76fda729799fe9b3848dbe2c211d4b231032b81e", "136b67cdecf2aafc0ef3bec6052d070788a04718"],
      "finalSourceEvidence": ["package.json", "pnpm-lock.yaml"],
      "finalTestEvidence": ["scripts/verify-package-dependencies.spec.ts"],
      "observableSemantics": "仅同步 npm workspace/package/lockfile release version；不改变运行时调用方 contract。",
      "tetherEvidence": [{ "commit": "807dbf4c4cbfb50b184b5dfa5e919d90aafa5ed7", "status": "Tether 使用独立 .NET 版本与 CPM；dsh npm version bump 不映射为实现。", "paths": ["Directory.Packages.props", "apps/Tether.Cli/Tether.Cli.csproj"], "tests": ["tests/Tether.Bundles.Tests/PublishedCompositionTests.cs"] }],
      "disposition": "n/a",
      "ownerIssues": [],
      "reason": "属于纯 release/version/generated lockfile 变更，issue 明确允许排除。",
      "reconsiderWhen": "只有固定上游版本号进入 wire/protocol capability negotiation 或 durable schema contract 时重评。"
    },
    {
      "id": "persistence-handle-contract",
      "title": "Session persistence handle-era observable contract",
      "upstreamCommits": ["8b799cd7acd3dcc1bb7c5abd48f8ce364e3b1728", "bec6805d6af1cbb2a61f75c863d10a57371a58b3"],
      "finalSourceEvidence": ["packages/session/session-persistence/src/index.ts", "packages/session/session-persistence/src/handle.ts", "packages/session/session-persistence/src/revision.ts"],
      "finalTestEvidence": ["packages/session/session-persistence/tests/contract.ts", "packages/session/session-persistence/tests/live-write-contract.ts", "packages/session/session-persistence/tests/storage-contract.spec.ts"],
      "observableSemantics": "provider-neutral create/open/stat/list 与 per-session read/append/flush/close；opaque revision、bounded reads、append/flush freshness、single writer 和 no torn-tail exposure。",
      "tetherEvidence": [{ "commit": "807dbf4c4cbfb50b184b5dfa5e919d90aafa5ed7", "status": "main 已有 authoritative Coordinator、write-behind、prepare/resume/final drain 和 provider conformance，但缺 stat/list revision hints 与下推 bounded read。", "paths": ["src/Tether.Session.Persistence/ISessionEventStore.cs", "src/Tether.Session.Persistence/ISessionPersistence.cs", "src/Tether.Session.Persistence.Coordinator/SessionPersistenceCoordinator.cs"], "tests": ["tests/Tether.Session.Persistence.Coordinator.Tests/SessionPersistenceCoordinatorTests.cs", "tests/Tether.Session.Persistence.Conformance.Tests/SessionEventStoreContractTests.cs"] }],
      "disposition": "milestone-owner",
      "ownerIssues": [174]
    },
    {
      "id": "session-export-zip",
      "title": "provider-neutral streaming ZIP session export",
      "upstreamCommits": ["8b799cd7acd3dcc1bb7c5abd48f8ce364e3b1728", "bec6805d6af1cbb2a61f75c863d10a57371a58b3"],
      "finalSourceEvidence": ["packages/session-query/session-log-export/src/archive.ts", "packages/session-query/session-log-export/src/index.ts"],
      "finalTestEvidence": ["packages/session-query/session-log-export/tests/archive.host.spec.ts", "packages/session-query/session-log-export/tests/route.host.spec.ts"],
      "observableSemantics": "export 从 validated logical reads 序列化 canonical JSONL，支持 descendants、deduped media、live flush、bounded streaming/backpressure 与取消，不泄漏 physical provider artifacts。",
      "tetherEvidence": [{ "commit": "807dbf4c4cbfb50b184b5dfa5e919d90aafa5ed7", "status": "main export 依赖 IRawSessionLogSource 并物化 byte[]/base64 NDJSON，不是 provider-neutral streaming ZIP。", "paths": ["src/Tether.Session.Query/SessionExportService.cs", "src/Tether.WebApi/SessionExportStream.cs"], "tests": ["tests/Tether.Session.Query.Tests/SessionQueryTests.cs", "tests/Tether.WebApi.Tests/WebSessionFlowTests.cs"] }],
      "disposition": "milestone-owner",
      "ownerIssues": [175]
    },
    {
      "id": "goal-host-pause-fence",
      "title": "Host pause 中止 live Goal turn 并围栏 exact attempt",
      "upstreamCommits": ["d3ab4ce53dfa729b1fa1665023923ca4361a84e2", "29ce849738d864ea05905eded7a105921827cee4", "33fa98b3c255d581182fcab3e88751f4f3c007de"],
      "finalSourceEvidence": ["packages/goal/goal-round-driver/src/index.ts"],
      "finalTestEvidence": ["packages/goal/goal-round-driver/tests/goal-round-driver.spec.ts"],
      "observableSemantics": "Host-initiated pause abort 当前 live turn；model 自己 pause 正常收尾；被丢弃 attempt 只能作用于同一 goalId+revision，pause→resume 不被旧 callback 再暂停。",
      "tetherEvidence": [{ "commit": "807dbf4c4cbfb50b184b5dfa5e919d90aafa5ed7", "status": "main 有 Goal snapshot/projection，无自动 round driver 或 host-pause exact-turn cancellation fence。", "paths": ["src/Tether.Orchestration/OrchestrationEvents.cs", "src/Tether.Orchestration/OrchestrationProjections.cs", "src/Tether.Orchestration/OrchestrationPlugin.cs"], "tests": ["tests/Tether.Orchestration.Tests/OrchestrationProjectionTests.cs", "tests/Tether.Orchestration.Tests/OrchestrationFoldsTests.cs"] }],
      "disposition": "milestone-owner",
      "ownerIssues": [179]
    },
    {
      "id": "storage-version-salvage",
      "title": "非 Session Storage compatibleVersions 与 quarantine-and-skip",
      "upstreamCommits": ["d921d4b3575785e79edd3376f16114c669a73e0d", "0a1efddd40e256f54f38a0535f87bbf9af65dd69", "fcd109d29a4a7d298b1f2eeda2463c20b1cc09ac", "49df707c865f4ad22c26dd56c810c8c0bb0af393"],
      "finalSourceEvidence": ["packages/storage/storage-domain/src/spec.ts", "packages/storage/storage-json/src/per-record-unit.ts", "packages/session/session-projection-cache/src/spec.ts"],
      "finalTestEvidence": ["packages/storage/storage-domain/tests/domain.spec.ts", "packages/storage/storage-json/tests/json-backend.spec.ts", "packages/session/session-projection-cache/tests/fixtures.spec.ts"],
      "observableSemantics": "domain 显式声明可读旧版本，写入仍 stamp current；仅可重建 per-record 数据可先 backup/quarantine 再 skip；未知版本 legacy bootstrap 不迁移、不重标。",
      "tetherEvidence": [{ "commit": "807dbf4c4cbfb50b184b5dfa5e919d90aafa5ed7", "status": "main StorageDomain 对任何 version mismatch fail loud，backend 无 per-record quarantine capability。", "paths": ["src/Tether.Storage/StorageHub.cs", "src/Tether.Storage/StorageDomain.cs", "src/Tether.Storage.Json/JsonStorageBackend.cs"], "tests": ["tests/Tether.Storage.Tests/StorageHubTests.cs", "tests/Tether.Storage.Json.Tests/JsonStorageBackendTests.cs"] }],
      "disposition": "milestone-owner",
      "ownerIssues": [183]
    },
    {
      "id": "read-image-card",
      "title": "read_image replayable presentation metadata 与 nested image card",
      "upstreamCommits": ["a6311155976fadcec48dc6478369cbe5d97351b3", "a4d44047083d4e30d894b6e4a871d45483cc1da4", "56ca8af0ee9f30f6a237abc55f85fbb3c60221a5", "666bd48eae22ebf0552cd2a9999d9ccb7875641d"],
      "finalSourceEvidence": ["packages/fs/tool-fs/src/read-image.ts", "packages/client/ui-tool/src/client/tool/models/image-card-model.ts", "packages/client/ui-tool/src/client/tool/toolviews/read-image-row.tsx"],
      "finalTestEvidence": ["packages/fs/tool-fs/tests/read-image.spec.ts", "packages/client/ui-tool/tests/image-card.client.spec.tsx"],
      "observableSemantics": "top-level 与 nested read_image 均从 committed metadata 渲染 image card；path fallback 只允许 trusted nested context，普通 result 不可把任意路径变成图片。",
      "tetherEvidence": [{ "commit": "807dbf4c4cbfb50b184b5dfa5e919d90aafa5ed7", "status": "main 有 durable Attachment/image admission，但无 read_image tool 与 replayable image card presenter。", "paths": ["src/Tether.Attachment/AttachmentTypes.cs", "src/Tether.Web.UiShell/client/components/tool-chips.js", "src/Tether.Fs.Tools/FsToolsPlugin.cs"], "tests": ["tests/Tether.Attachment.Local.Tests/LocalAttachmentStoreTests.cs", "tests/Tether.WebHost.Frontend.Tests/components.test.js"] }],
      "disposition": "milestone-owner",
      "ownerIssues": [182]
    },
    {
      "id": "tool-call-delta-identity",
      "title": "LLM stream sparse/empty delta 保留 tool-call identity",
      "upstreamCommits": ["bbae7318f0e5089e61a346df6954190a343ecb96", "a1271a49033b7dfac6e59a5163d10072ce8dfc40", "e91c28d3fdbec83f967bd1d985dcffdf7c39f11a", "b03261caada890105f0c9c3dafb9c6b01604887e"],
      "finalSourceEvidence": ["packages/llm/llm-pi-ai/src/stream.ts", "packages/llm/llm-pi-ai/src/adapter.ts"],
      "finalTestEvidence": ["packages/llm/llm-pi-ai/tests/adapter.spec.ts", "packages/llm/llm-pi-ai/tests/adapter.e2e.ts"],
      "observableSemantics": "tool call id/name 只被后续 non-empty identity 更新；missing/null/empty continuation 不清空；malformed final call 稳定失败。",
      "tetherEvidence": [{ "commit": "807dbf4c4cbfb50b184b5dfa5e919d90aafa5ed7", "status": "direct DeepSeek adapter 已保留 non-empty identity，但 generic adapter 只在首次 index fragment 捕获 identity，缺共享 late-identity contract。", "paths": ["src/Tether.Llm.DeepSeek/DeepSeekChatClient.cs", "src/Tether.Llm.Providers/ChatCompletionsWire.cs"], "tests": ["tests/Tether.Llm.DeepSeek.Tests/DeepSeekChatClientTests.cs", "tests/Tether.Llm.Providers.Tests/MultiProviderClosureTests.cs"] }],
      "disposition": "milestone-owner",
      "ownerIssues": [178]
    },
    {
      "id": "issue-management-process",
      "title": "上游 GitHub Project issue date/priority policy",
      "upstreamCommits": ["be70505f9e43bb5f160f4a022bd82f7d67b7eca1", "6ce0b6cce8067884782f2a4a8e77b0bc41b767c2", "66ca93c3dcafcd067180ab66f84dba74cd59ba49", "070b46e1ef2b5b43f04f4b1bdf79d4dc52a2cde3", "0e6a39746469e11ab603dad789804912cacea4af", "39b151bda38254caf089e4f527fe17d458198f51", "9ea2329084c87d5f3731bdd6c532877f773ada96", "692b9b59f706a7bb3a00451443102e962d4e03c9"],
      "finalSourceEvidence": [".github/issue-management/policy.mjs", ".github/issue-management/config.json"],
      "finalTestEvidence": [".github/issue-management/policy.test.mjs"],
      "observableSemantics": "只改变 deepseek-harness 仓库 Project 的 Start date/Priority 字段写入和 token scope，不是 harness runtime 或 SDK API。",
      "tetherEvidence": [{ "commit": "807dbf4c4cbfb50b184b5dfa5e919d90aafa5ed7", "status": "Tether 仓库只有自身 CI workflow，不消费上游 issue-management policy。", "paths": [".github/workflows/ci.yml"], "tests": [".github/workflows/ci.yml"] }],
      "disposition": "n/a",
      "ownerIssues": [],
      "reason": "属于上游仓库 issue-management/process 自动化，明确在 issue #186 排除规则内。",
      "reconsiderWhen": "若 Tether 主动采用同一 GitHub Project 自动化产品要求，应作为 Tether 自有 infra issue，而不是 dsh runtime parity。"
    },
    {
      "id": "agent-team-steer",
      "title": "experimental Agent Teams 最终 Steer/mailbox/tool catalog",
      "upstreamCommits": ["f7cee2c888d0ad307e81dde112968122204b26b2", "040d73871b34807b1a92bab221e9709dce846e3a", "eeddd457cd6080fd046f581f70abd5eafb38c744"],
      "finalSourceEvidence": ["packages/experimental/agent-team/src/mailbox.ts", "packages/experimental/agent-team/src/index.ts", "packages/experimental/tool-agent-team/src/index.ts"],
      "finalTestEvidence": ["packages/experimental/agent-team/tests/team.spec.ts", "packages/experimental/agent-team/tests/persistence.spec.ts", "packages/experimental/tool-agent-team/tests/tool-team.spec.ts"],
      "observableSemantics": "单一 send_message 走 Steer；durable enqueue 后 dispatch；cold resume 按同 target mailbox 原始顺序 dispatch-through；最终 9-tool surface，queued/accepted 不表示完成。",
      "tetherEvidence": [{ "commit": "807dbf4c4cbfb50b184b5dfa5e919d90aafa5ed7", "status": "main 的 TeamMessage 仍含 DeliveryMode，plugin 仅 4 tools，QueueMessageAsync 不执行 target delivery/cold ordered replay。", "paths": ["src/Tether.AgentTeams/TeamModel.cs", "src/Tether.AgentTeams/AgentTeamsPlugin.cs", "src/Tether.AgentTeams/TeamService.cs"], "tests": ["tests/Tether.AgentTeams.Tests/AgentTeamsTests.cs", "tests/Tether.AgentTeams.Tests/TeamProjectionTests.cs"] }],
      "disposition": "experimental-follow",
      "ownerIssues": [181]
    },
    {
      "id": "record-browser-gif-docs",
      "title": "record-browser-gif 使用 gh --attach 的文档更新",
      "upstreamCommits": ["c024c53d34b1064ee385272c8c69c298ed7ce6d8", "2f091ee8e6330f422d9a4a024c3062d4d3c73114"],
      "finalSourceEvidence": [".agents/skills/record-browser-gif/SKILL.md", ".agents/skills/record-browser-gif/scripts/encode_gif.py"],
      "finalTestEvidence": [".agents/notes/implemented/feature/2026-06-15-ptc.i18n.yaml"],
      "observableSemantics": "只改变贡献者如何把录屏 GIF 附到 GitHub PR，不进入 dsh runtime/tree output。",
      "tetherEvidence": [{ "commit": "807dbf4c4cbfb50b184b5dfa5e919d90aafa5ed7", "status": "Tether runtime 与发布产物不消费该上游 agent skill。", "paths": ["scripts/check-docs.mjs"], "tests": ["scripts/check-docs.test.mjs"] }],
      "disposition": "n/a",
      "ownerIssues": [],
      "reason": "issue #186 明确将 record-browser-gif 与 generated docs 作为可排除噪声。",
      "reconsiderWhen": "不因 runtime parity 重评；只有 Tether 仓库自己的贡献流程决定采用时另开 docs/infra owner。"
    },
    {
      "id": "same-session-message-edit",
      "title": "same-session message editing",
      "upstreamCommits": ["f98bfbda854360e924dcdad597adf2e35664b12c", "ef88756f13c73df88eb1f1cf82281d20a62d9853", "9d3bbd46ee4c809cc8def1f9a54b6ac849e1e67e", "e974a655a0b6af6ed63548617207b11fb3d904a4"],
      "finalSourceEvidence": ["packages/core/session/src/index.ts", "packages/core/agent/src/index.ts"],
      "finalTestEvidence": ["packages/core/session/tests/session.spec.ts", "packages/core/agent/tests/agent.spec.ts"],
      "observableSemantics": "#3452 的 same-session editing 在下一 first-parent merge #3459 完整反向，target tree 不含 edit API/event/UI。",
      "tetherEvidence": [{ "commit": "807dbf4c4cbfb50b184b5dfa5e919d90aafa5ed7", "status": "main 未实现该已回滚能力，符合最终 target。", "paths": ["src/Tether.Core.Contracts/ISession.cs", "src/Tether.Core.Session/InMemorySession.cs"], "tests": ["tests/Tether.Core.Session.Tests/InMemorySessionTests.cs"] }],
      "disposition": "reverted",
      "ownerIssues": [],
      "revertedBy": "9d3bbd46ee4c809cc8def1f9a54b6ac849e1e67e / e974a655a0b6af6ed63548617207b11fb3d904a4"
    },
    {
      "id": "packaged-node-resolution",
      "title": "pkg 单文件 Python SDK runtime 的 Node 子进程解析",
      "upstreamCommits": ["a8e33b62e3c82dcc484f73f45a73b9c353768430", "c732dedc69f6133c53b5133879e75d94da0579b7", "45a4868c881a8dff610fb5775873dde84acda0c0"],
      "finalSourceEvidence": ["patches/@yao-pkg__pkg@6.21.0.patch", "scripts/build-exe-for-python-sdk.ts"],
      "finalTestEvidence": ["scripts/build-exe-for-python-sdk.spec.ts", "scripts/smoke-python-runtime.py"],
      "observableSemantics": "上游用 @yao-pkg/pkg 构建 Python SDK 的单文件 Node runtime；patch 确保该载体内部 spawn('node') 不被自身 executable 劫持。",
      "tetherEvidence": [{ "commit": "807dbf4c4cbfb50b184b5dfa5e919d90aafa5ed7", "status": "Tether 以 dotnet global tool/.NET executable 分发，不嵌入 pkg Node runtime。", "paths": ["apps/Tether.Cli/Tether.Cli.csproj", "scripts/install-tether.sh"], "tests": ["tests/Tether.Bundles.Tests/PublishedCompositionTests.cs"] }],
      "disposition": "n/a",
      "ownerIssues": [],
      "reason": "语言与分发平台不同；Tether 没有 @yao-pkg/pkg child_process 解析路径，移植 patch 无意义。",
      "reconsiderWhen": "若 Tether 未来发布内嵌 Node/Python 的单文件载体，且该载体会代理/重写 child process executable resolution 时重评。"
    },
    {
      "id": "http-proxy-egress",
      "title": "统一 outbound HTTP egress 与 child proxy policy",
      "upstreamCommits": ["7169660d330452d32c91bb2e4788a9b8c2f83a18", "545e2ad91437ea55f3b991321baf2191962b61c6", "c62d6f3a444ca91ecb9c7660552193c03cb44744", "8470ddef1d033473ce7e4a8c94be0e500f5abc5f"],
      "finalSourceEvidence": ["packages/util/http-proxy/src/policy.ts", "packages/util/http-proxy/src/install.ts", "apps/cli/src/profile-boot.ts"],
      "finalTestEvidence": ["packages/util/http-proxy/tests/policy.spec.ts", "packages/llm/llm-deepseek/tests/egress.spec.ts", "packages/web/web-fetch-http/tests/proxy.spec.ts", "packages/subprocess/subprocess/tests/egress.spec.ts"],
      "observableSemantics": "进程内所有 outbound channels 服从一个代理 authority；loopback/direct policy、home .env、child/worker propagation 与 secret-safe diagnostics 有真实 egress tests。",
      "tetherEvidence": [{ "commit": "807dbf4c4cbfb50b184b5dfa5e919d90aafa5ed7", "status": "main 各包直接创建 HttpClient/handler，通常继承 DefaultProxy，但没有 launch-time policy、egress inventory、child trust split 或 fake-proxy contract。", "paths": ["src/Tether.Web.Http/HttpFetchProvider.cs", "src/Tether.Llm.DeepSeek/DeepSeekChatClient.cs", "src/Tether.Subprocess/EnvironmentScrub.cs"], "tests": ["tests/Tether.Web.Http.Tests/WebHttpTests.cs", "tests/Tether.Llm.DeepSeek.Tests/DeepSeekChatClientTests.cs"] }],
      "disposition": "milestone-owner",
      "ownerIssues": [176]
    },
    {
      "id": "existing-v0.9-v0.10-capabilities",
      "title": "final target tree 中既有 Webhook、Remote/Connection、turn outline/paging/rail 与 SQLite decision",
      "upstreamCommits": ["714bec13167d049f9268e89fda1167239e6f443b", "876a3e0414666eff82770b2a6442bd000c3c5405", "1f694c88abd39d8a0b8dfaa4e152872d1381a387", "8b799cd7acd3dcc1bb7c5abd48f8ce364e3b1728"],
      "finalSourceEvidence": ["packages/webhook/webhook/src/index.ts", "packages/api/remotes/src/index.ts", "packages/session/session-turn-outline/src/projection.ts", "packages/client/ui-chat/src/client/chat/turn-rail-items.ts"],
      "finalTestEvidence": ["packages/webhook/webhook/tests/runtime.spec.ts", "packages/api/remotes/tests/built-lib.e2e.ts", "packages/session/session-turn-outline/tests/projection.spec.ts", "packages/client/ui-chat/tests/turn-rail-items.client.spec.ts"],
      "observableSemantics": "最终 target 仍包含此前 milestone 已审计的 signed webhook、typed Remote/Connection、whole-log turn outline、window paging/load-through/rail；本区间对这些路径的大量改动是 seq brands/invariant omission/性能收口，不另建重复 owner。上游 SQLite Session provider 删除的最终取舍仍是独立 decision。",
      "tetherEvidence": [{ "commit": "807dbf4c4cbfb50b184b5dfa5e919d90aafa5ed7", "status": "这些能力已有 v0.9/v0.10 owners；TurnOutline 已在 main 实现，其他仍按原 milestones 交付。SQLite Session provider 的最终决策已由 #150 comment 5541506234 记录为 FOLLOW/future removal；移除尚未实施，provider 与 conformance 保留并必须通过。", "paths": ["src/Tether.Session.TurnOutline/TurnOutlineProjection.cs", "src/Tether.Api/ApplicationRemotes.cs", "src/Tether.Session.Persistence.Sqlite/SqliteSessionStore.cs"], "tests": ["tests/Tether.Session.TurnOutline.Tests/TurnOutlineProjectionTests.cs", "tests/Tether.Session.Persistence.Sqlite.Tests/SqliteSessionStoreTests.cs"] }],
      "disposition": "existing-v0.9-v0.10-issue",
      "ownerIssues": [101, 123, 132, 137, 138, 139, 140, 150]
    },
    {
      "id": "inspector-cordis-console",
      "title": "experimental Inspector/CDP 由 Cordis Console 替代",
      "upstreamCommits": ["714bec13167d049f9268e89fda1167239e6f443b", "01a88826016d7fb88a66999c8b3238fdd8791a4a"],
      "finalSourceEvidence": ["packages/experimental/inspector/src/client/cdp/index.ts", "packages/experimental/inspector/src/client/bridge/controller.ts"],
      "finalTestEvidence": ["packages/experimental/inspector/tests/cordis-tree.host.spec.ts", "packages/experimental/inspector/tests/protocol.host.spec.ts"],
      "observableSemantics": "上游 experimental Inspector 以 CDP/debugger/runtime/network planes 查看 Cordis tree 与 JS execution realms。Tether 的 Cordis Console 只在 composition tree/fiber/service 图观察面构成替代；CDP DOM tree/ordered replay、Network、Runtime evaluation（不是只读能力）与 cross-realm identity 各面由 #103 逐面决策，未随本 deviation 一并处置。",
      "tetherEvidence": [{ "commit": "807dbf4c4cbfb50b184b5dfa5e919d90aafa5ed7", "status": "main 已交付 Cordis Console 及 Web /cordis plugin；这是有测试的替代能力，但其覆盖面以逐面矩阵为准（见 ledger Inspector/CDP 逐面处置）。", "paths": ["src/Cordis.Console/ConsoleManagement.cs", "src/Cordis.Console/ConsolePlugin.cs", "src/Tether.Web.CordisConsole/CordisConsolePlugin.cs", "src/Tether.Web.CordisConsole/client/cordis-console.js"], "tests": ["tests/Cordis.Console.Tests/ConsoleManagementTests.cs", "tests/Cordis.Console.Tests/ConsolePluginHttpTests.cs", "tests/Tether.WebHost.Frontend.Tests/cordis-page.test.js", "tests/Tether.WebHost.Frontend.Tests/composition-graph.test.js"] }],
      "disposition": "intentional-deviation",
      "ownerIssues": [103],
      "reason": "上游能力位于 experimental 且 CDP/JavaScript execution-realm 机制不适用于 .NET collectible ALC/Cordis；机械复制会引入第二个运行态管理面。“Console 替代 Inspector”只覆盖 composition/service-graph 观察面，不自动等价 CDP DOM tree/ordered replay、Network、Runtime evaluation 或 cross-realm identity。",
      "alternative": "Cordis.Console + Tether.Web.CordisConsole 提供 composition tree、fiber/service dependency、日志、patch diff/apply、SSE 与 exact owner lifecycle；EventTracer/scope 是 #196 自有新增能力，不冒充上游 Inspector 功能。其余 CDP surface 的 FOLLOW/PARTIAL/NO-GO 由 #103 单独给出，当前 pending。",
      "reconsiderWhen": "各 CDP surface 由 #103 owner 给出 FOLLOW/PARTIAL/NO-GO（只有 FOLLOW/PARTIAL 才建默认关闭 implementation child）；或当 Cordis Console 无法表达相同用户任务时，针对 .NET diagnostics protocol 单独审计。#103 不是 #194/#195 硬前置；#196 不吞掉完整 CDP 实现。"
    }
  ],
  "ownerGraph": [
    { "issue": 34, "topics": ["adjacent-agent-steer"], "acceptance": "历史 continuable runtime 仍有效；quiet/report acceptance 已由 #180 supersede，并有 decision comment。" },
    { "issue": 60, "topics": ["agent-team-steer"], "acceptance": "历史 Team durable core 仍有效；delivery mode/followup_task acceptance 已由 #181 supersede，并有 decision comment。" },
    { "issue": 101, "topics": ["existing-v0.9-v0.10-capabilities"], "acceptance": "Connection/Remote transport authority、generation 与 exact routes。" },
    { "issue": 103, "topics": ["inspector-cordis-console"], "acceptance": "M9 decision owner：对 CDP DOM tree/ordered replay、Network、Runtime evaluation（非只读）、cross-realm identity 逐面给出 FOLLOW/PARTIAL/NO-GO；Cordis Console 替代仅限 composition/service-graph 观察面，逐面矩阵见 ledger。" },
    { "issue": 105, "topics": ["subagent-restored-empty-model-policy"], "acceptance": "fresh/restored exact allowlist、provider defaults 与 pre-spawn fail-closed；显式空 restore 保持 disabled。" },
    { "issue": 106, "topics": ["persistence-handle-contract", "session-seq-offset-brands"], "acceptance": "保留 schema/range/known-event/torn-tail；borrowable prepared cache 被 #174 revision-keyed observation supersede。" },
    { "issue": 109, "topics": ["web-conversation-cost-contract", "read-image-card"], "acceptance": "conversation folding、replayable tool cards、optimistic identity 与 DOM identity 基础；新 exact cadence 由 #188。" },
    { "issue": 111, "topics": ["webfetch-default-composition", "http-proxy-egress"], "acceptance": "默认 WebFetch 的 SSRF/public-destination 安全边界；proxy 不得成为绕过路径。route/destination 面已按 intentional deviation `webfetch-proxy-fail-closed` 记录（public-admitted/pinned Direct；proxy-selected fail closed）；untrusted-content boundary 与 native public HTTPS positive 仍未关闭。" },
    { "issue": 113, "topics": ["read-image-card"], "acceptance": "canonical image authority、dimensions/scale、transient model-readable path 与 route-priced compaction。" },
    { "issue": 123, "topics": ["existing-v0.9-v0.10-capabilities"], "acceptance": "signed GitHub webhook ingress 与 fire-and-forget Workspace Session admission。" },
    { "issue": 132, "topics": ["existing-v0.9-v0.10-capabilities", "turn-preview-layer"], "acceptance": "whole-log turn outline projection；main 已有实现证据。" },
    { "issue": 137, "topics": ["existing-v0.9-v0.10-capabilities"], "acceptance": "RemoteError 单一失败词汇与 typed details。" },
    { "issue": 138, "topics": ["existing-v0.9-v0.10-capabilities"], "acceptance": "Connection 恢复状态机、单一 retry 调度与 heartbeat。" },
    { "issue": 139, "topics": ["existing-v0.9-v0.10-capabilities", "web-conversation-cost-contract"], "acceptance": "历史窗口分页、bounded read 与 loadThrough；#188 只补 render cadence/identity/reanchor。" },
    { "issue": 140, "topics": ["existing-v0.9-v0.10-capabilities", "turn-preview-layer", "web-conversation-cost-contract"], "acceptance": "whole-session rail 与 load-and-jump/anchor interaction。" },
    { "issue": 145, "topics": ["adjacent-agent-steer", "read-image-card"], "acceptance": "upload-shaped image admission 保留；最终 delivery API 消费 #180，并有 decision comment。" },
    { "issue": 150, "topics": ["existing-v0.9-v0.10-capabilities", "persistence-handle-contract"], "acceptance": "最终决策已记录（comment 5541506234）：FOLLOW，未来移除 first-party SQLite Session provider；移除未实施，provider 与 conformance 保留；未来移除构建不打开/迁移旧库，升级前 logical export。#174/#175 保持 provider-neutral，不受影响。" },
    { "issue": 173, "topics": ["session-log-read-cost", "session-seq-offset-brands"], "acceptance": "强类型 SessionSeq/SessionLogOffset/cursor、O(1) EventAt、immutable half-open snapshot 与 fork cut。" },
    { "issue": 174, "topics": ["persistence-handle-contract"], "acceptance": "保留 Coordinator 单一写权威；交付 stat/list opaque revision、bounded read、freshness/flush/retire conformance。" },
    { "issue": 175, "topics": ["session-export-zip"], "acceptance": "logical provider-neutral JSONL、descendants/media、live flush、streaming ZIP/backpressure/cancel。" },
    { "issue": 176, "topics": ["http-proxy-egress"], "acceptance": "复用 .NET DefaultProxy，建立单一 egress policy、loopback/direct、child trust split 与 real-proxy channel tests。WebFetch 面的联合 deviation 记录为 `webfetch-proxy-fail-closed`（与 #111）；不声称 upstream proxy DNS 已由本地检查证明。" },
    { "issue": 177, "topics": ["model-discovery"], "acceptance": "独立 discovery seam、catalog short-circuit、profile headers、OpenAI/Anthropic URI/shape/bounds/errors。" },
    { "issue": 178, "topics": ["tool-call-delta-identity"], "acceptance": "每 index accumulator；non-empty identity acceptance、late identity、conflict/malformed policy与共享 adapter fixtures。" },
    { "issue": 179, "topics": ["goal-host-pause-fence"], "acceptance": "Goal round driver、Host-vs-model pause、exact goal revision/attempt abort fence 与 race tests。" },
    { "issue": 180, "topics": ["adjacent-agent-steer"], "acceptance": "统一 adjacent SendMessage+Steer、exact direct-edge auth、running/idle/cold child、FIFO settlement ordering。" },
    { "issue": 181, "topics": ["agent-team-steer"], "acceptance": "experimental FOLLOW：durable enqueue/flush、Steer delivery、ordered dispatchThrough、dedupe/receipt 与最终 9-tool catalog。" },
    { "issue": 182, "topics": ["read-image-card"], "acceptance": "read_image admission/presentation metadata、top-level+nested cards、nested-only path fallback 与 replay safety。" },
    { "issue": 183, "topics": ["storage-version-salvage"], "acceptance": "non-session compatibleVersions、unknown bootstrap rejection、safe per-record quarantine-and-skip only for rebuildable data。" },
    { "issue": 184, "topics": ["ptc-single-composition-surface"], "acceptance": "shipped PTC preset 在 catalog/prompt/request 前移除 workflow，保留 Host workflow infrastructure 与 standard/cordis 差异。" },
    { "issue": 185, "topics": ["invariant-companion-omission"], "acceptance": "删除空 Invariant.cs 和 mandatory gate，保留真实 independent-observation invariants 与 negative tests。" },
    { "issue": 188, "topics": ["web-conversation-cost-contract"], "acceptance": "三帧 coalesced publication、immediate preemption、stable keyed identity、resident-window bounded cost、replacement reanchor 与 generation cancellation；Host acquisition/budget 以真实计数器验收（见 integrationCandidateEvidence），不是 source mirror/DOM 证据。" }
  ],
  "decisionNotes": [
    { "issue": 34, "url": "https://github.com/eanzhao-os/tether/issues/34#issuecomment-5535494829" },
    { "issue": 60, "url": "https://github.com/eanzhao-os/tether/issues/60#issuecomment-5535495302" },
    { "issue": 106, "url": "https://github.com/eanzhao-os/tether/issues/106#issuecomment-5535495799" },
    { "issue": 145, "url": "https://github.com/eanzhao-os/tether/issues/145#issuecomment-5535496276" },
    { "issue": 150, "url": "https://github.com/eanzhao-os/tether/issues/150#issuecomment-5541506234" }
  ],
  "crossOwnerDispositions": [
    { "issue": 103, "classification": "pending-owner-decision", "note": "Inspector/CDP 逐面处置：Cordis Console 只在 composition tree/fiber/service graph 观察面构成替代；CDP DOM tree/ordered replay、Network、Runtime evaluation（非只读能力）、cross-realm identity 各面未决，FOLLOW/PARTIAL/NO-GO 由 M9 #103 单独给出，只有 FOLLOW/PARTIAL 才建默认关闭 implementation child。#194/#196 已指明能力边界；#103 不是 #194/#195 硬前置，#196 不吞掉完整 CDP。本 ledger 不伪造其最终结论。", "evidence": ["site/pages/parity/dsh-alpha3-to-master.md", "packages/experimental/inspector/src/client/cdp/index.ts"] },
    { "issue": 111, "classification": "blocked", "note": "默认 WebFetch 的 untrusted-content boundary（HTML omission/charset/model-visible notice）与 native public HTTPS positive 尚未关闭；route/destination 策略已按 `webfetch-proxy-fail-closed` 严格 intentional deviation 记录。发行阻塞未解除，不得据此关闭 #111。", "evidence": ["site/pages/parity/dsh-alpha3-to-master.md", "tests/Tether.Web.Http.Tests/WebFetchBoundaryTests.cs"] },
    { "issue": 150, "classification": "decision-recorded-follow-future-removal", "decisionUrl": "https://github.com/eanzhao-os/tether/issues/150#issuecomment-5541506234", "note": "最终 owner 决策：FOLLOW，移除 first-party Session SQLite provider 与 session-sqlite composition patch，JSONL 成为唯一 first-party 实现；ISessionEventStore/Coordinator 保持 provider-neutral。移除已在 feat/m10-sqlite-retirement 实施（#150）：provider 项目、patch、catalog row 与专属测试已删除，conformance 套件改为真实 JSONL provider + owner-local fake harness 双实现覆盖 seam。Tether.Storage.Sqlite domain-KV、Session FTS、projection SQLite 不受影响。移除构建不打开/不迁移既有 .sqlite，升级前先 provider-neutral logical export。#150 刷新 review 正文（建议保留、称 pending）与该 explicit 最终 comment 存在叙述冲突；以 explicit comment 为准，除非被取代。", "evidence": ["tests/Tether.Session.Persistence.Conformance.Tests/StoreHarness.cs", "src/Tether.Session.Persistence.Jsonl/JsonlSessionEventStore.cs", "AGENTS.md"] },
    { "issue": 176, "classification": "blocked", "note": "outbound egress 单一 authority/child trust/real-proxy matrix 的最终验收未完成；WebFetch route/destination 面已按 `webfetch-proxy-fail-closed` 与 #111 联合记录。不声称 upstream proxy DNS 行为已由本地检查证明。", "evidence": ["site/pages/parity/dsh-alpha3-to-master.md", "src/Tether.Http/HttpEgressPolicy.cs"] },
    { "issue": 201, "classification": "not-exercised", "note": "E2B execution world 未被任何 shipped profile 选中：bundles（base/cli/headless*/web*）与 presets（standard/cordis/native/ptc）没有任何 E2B row/patch，terminal/subprocess/Fs 均为本地 execution world。remote E2B conformance 在本区间 not-exercised（逐项 N/A rationale），不是 remote pass；已存在的本地 Shell/PTY/LSP 实际证据保留。若未来 shipped profile 选择 E2B，按 #201 验收重评。", "evidence": ["src/Tether.Bundles/bundles/base.yaml", "src/Tether.Bundles/BundleCatalogs.cs"] },
    { "issue": 202, "classification": "inherited-bounded-acceptance", "note": "继承前置（锚点 commit 6d12e3ab 在原始 rc.1 之前），不是本区间新 delta。bounded slice 已在 integration candidate 交付：agent/pre-step、llm/stream、top-level tools/execute 三 seam 的 awaited durable flush；nested 复用外层持久化上下文；JSONL+SQLite 硬终止回执。#202 仍归 M15，未移动未关闭。", "evidence": ["src/Tether.Session.Checkpoint/SessionCheckpointPolicyPlugin.cs", "tests/Tether.Session.Checkpoint.Tests/SessionCheckpointPolicyTests.cs", "tests/Tether.Session.Checkpoint.Tests/SessionCheckpointHardKillTests.cs"] },
    { "issue": 203, "classification": "inherited-bounded-acceptance", "note": "继承前置，不是本区间新 delta。bounded slice 已在 integration candidate 交付：durable schedule/change 事件、exact-live driver、idle-only admission（不 steer human turn）、dispatch barrier flush 与冷恢复；两处 disclosed 上游偏离（preflight flush 合并、durability 失败后停泊）。#203 仍归 M15，未移动未关闭。", "evidence": ["src/Tether.Orchestration/ScheduleRuntimePlugin.cs", "tests/Tether.Orchestration.Tests/ScheduleDomainTests.cs", "tests/Tether.Orchestration.Tests/ScheduleRuntimeTests.cs"] },
    { "issue": 204, "classification": "consume-not-implement", "note": "本 ledger 与 task reports 只消费候选证据字段（full SHA、artifact hash、profile/patch/roster、OS/arch/RID、fixture/native 分类、实际执行计数、可取回输出）；回执 infrastructure（TRX/trace 留存、错误证据自动拒绝、retention）仍由 #204 (M15) 持有，未实现未关闭。wrong-SHA、stale、skipped、zero-case、模拟冒充 native 的证据不可替代。", "evidence": ["public/parity/dsh-alpha3-to-master.manifest.json", ".github/workflows/ci.yml"] }
  ],
  "intentionalDeviations": [
    { "id": "webfetch-proxy-fail-closed", "issues": [111, 176], "summary": "Tether WebFetch 只执行同一 Boot HTTP authority 为当前 request/redirect hop 选择的 Direct route：完整 nonempty DNS answer set 必须通过 public-only admission，实际连接 pin 到 admitted endpoint 并核对 native peer。Proxy-selected 或无法确定 route 的模型 fetch 在 destination DNS/proxy/origin connection 前 fail closed（WEB_ROUTE_REFUSED），绝不在 proxy 失败/拒绝后静默 direct retry。operator 配置的 LLM gateway 端点与 model-controlled fetch URL 区分对待。", "impact": "相对 dsh 76fda729799fe9b3848dbe2c211d4b231032b81e 的有意更严格差异：上游 proxied hostname 由 proxy 解析、只过滤非 public literal；Tether 不声称 upstream proxy DNS 行为已由本地检查证明。配置 proxy 且未被 authority 选择 Direct 时 public WebFetch 不可用；operator Llm/WebSearch 等通道继续正常 proxy，合法 local LLM gateway 不受 public-only fetch 限制。", "reconsiderWhen": "出现能在同一 authority 下验证 proxy-side origin admission / actual destination 的 safe proxy transport，并覆盖 HTTP/HTTPS、DNS rebinding、redirect、凭据隔离与无 direct retry 的真实 transport 验收；不能用“本地 DNS 检查 + 普通 hostname proxy”替代。", "evidence": { "branch": "feat/m13-integration", "commits": ["0e1239023b78b9ea028bb0f69b3651ec83dcc7ad", "36ae08a2fad82fca0ffdbbdd4bf4982af5ec7562"], "tests": ["tests/Tether.Web.Http.Tests/WebFetchTransportTests.cs", "tests/Tether.Web.Http.Tests/WebFetchBoundaryTests.cs", "tests/Tether.Web.Http.Tests/WebFetchLifetimeTests.cs", "tests/Tether.Bundles.Tests/WebFetchCatalogTests.cs"] } }
  ],
  "integrationCandidateEvidence": [
    { "issue": 176, "branch": "feat/m13-integration", "commits": ["0e1239023b78b9ea028bb0f69b3651ec83dcc7ad", "36ae08a2fad82fca0ffdbbdd4bf4982af5ec7562"], "tests": ["tests/Tether.Web.Http.Tests/WebFetchTransportTests.cs", "tests/Tether.Web.Http.Tests/WebFetchBoundaryTests.cs", "tests/Tether.Web.Http.Tests/WebFetchLifetimeTests.cs", "tests/Tether.Bundles.Tests/WebFetchCatalogTests.cs"], "note": "integration candidate，合入前不算完成：public-admitted/pinned Direct positive 走 production classifier/factory handler/ConnectCallback（DNS/socket 边界为 controlled fixture）；proxy-selected fail-closed 有真实 loopback listener 8 组与不可达 proxy 拒绝；allow-all 变异证明 25 个 negative 失败。native public HTTPS positive 未执行。" },
    { "issue": 188, "branch": "feat/m13-integration", "commits": ["1ec55c9a8d31d6de91057afb8c4e00596362b27c", "7e487fae36a88b9c69e75d044008f63d5f3c78c9"], "counters": ["tests/Tether.Session.Projection.Tests/ReadOnlyColdRestoreTests.cs", "tests/Tether.WebApi.Tests/WebDownlinkBudgetTests.cs", "tests/Tether.WebApi.Tests/WebSessionFlowTests.cs", "tests/Tether.WebHost.Frontend.Tests/boot.test.js", "tests/Tether.WebHost.Frontend.Tests/kernel.test.js"], "note": "integration candidate，合入前不算完成：Host acquisition/budget 为真实计数器验收而非 DOM 测试——冷恢复 bounded suffix/全量读/append/repair 计数（SpyEventStore）、downlink PeakPendingFrames/PeakPendingBytes、opening 恰一次 HistoryAsync(from=cursor-window,toOffset=cursor) 且整窗一次 baseline、live mirror 事件/字节淘汰与 overflowed/firstSeq 披露。浏览器原生平台门禁未执行。" },
    { "issue": 202, "branch": "feat/m13-integration", "commits": ["97f85940036c616d4cc8b9e39cfd11fc77758404", "04acc964d98b1dd18c857fce1c819273c4f1dd96"], "tests": ["tests/Tether.Session.Checkpoint.Tests/SessionCheckpointPolicyTests.cs", "tests/Tether.Session.Checkpoint.Tests/SessionCheckpointHardKillTests.cs"], "note": "integration candidate，合入前不算完成：三 seam awaited fence、nested 复用、retry、HMR、JSONL+SQLite 硬终止回执；#202 仍归 M15，未移动未关闭。" },
    { "issue": 203, "branch": "feat/m13-integration", "commits": ["056a1241e2a9e0d87d59a9c638a785124128ea46", "5da9f2c616a4617a722d35f7dc45474a58171f4b", "ac2b75e32b9aca214899c7052e7d47dcfa076ac0"], "tests": ["tests/Tether.Orchestration.Tests/ScheduleDomainTests.cs", "tests/Tether.Orchestration.Tests/ScheduleRuntimeTests.cs"], "note": "integration candidate，合入前不算完成：真实 driver 投递、durable dispatch、冷恢复与两处 disclosed 偏离；#203 仍归 M15，未移动未关闭。" }
  ]
}
