{
  "schema": "dsh-plugin-guide/seam-index/v1",
  "generatedFrom": {
    "guide/version-matrix.md": "§2 seams, §3 the 0.2.1-alpha.2 breaking changes, §5 session formats, §6.1 create-only seams",
    "guide/migration-0.2.md": "§13 the L1–L19 corridor table",
    "references/official-docs/": "verbatim mirror of the official docs at the pinned commit"
  },
  "measuredAt": "2026-10-13",
  "hostBaseline": "dsh-v0.2.1-alpha.2",
  "notes": [
    "Every `target` value names the release in which the change LANDS, not the directory it is documented under. The official upgrade-guide directory name is the version at which the break was authored: docs/upgrade-guide/v0.2.1-alpha.1/ describes what the NEXT release removes.",
    "`confidence` is the honest state of the evidence. `documented` = stated by an official upgrade guide or a source-verified first-tag search. `inferred` = derived from a document but not stated as a rule. `unknown` = the knowledge base does not establish it; consumers MUST treat `unknown` as 'cannot answer', never as 'no'.",
    "`targets` is the corpus a scanner must inspect to find a violation. It is a hint, not a guarantee: a scanner that cannot resolve the target must report `unknown`, not `pass`. This mirrors the verdict discipline in guide/family-toolchain.md §2.1, where an unevaluated check must never be rendered as a pass.",
    "Detectability is limited. A change that only breaks at runtime for a given configuration cannot be proven by static inspection, and a data-loss hazard cannot be detected at all. Those records carry `detectable: false` plus the reason, so no consumer can quietly upgrade them to a pass."
  ],
  "seams": [
    {
      "id": "L1",
      "title": "subagent activations replace background-mode execution",
      "kind": "api-removed",
      "target": "0.2.1-alpha.2",
      "doc": "docs/upgrade-guide/v0.2.1-alpha.1/subagent-activations/guide.md",
      "removed": ["config key backgroundMode", "config key enableRunInBackground", "tool parameter run_in_background", "package @deepseek-ai/dsh-subagent-in-process-driver", "ctx.subagents.start()"],
      "replacement": "ctx.subagents.startActivation({ ..., delivery: 'caller' }) then await activation.result",
      "targets": ["src/**/*.ts", "package.json"],
      "detectable": true,
      "confidence": "documented",
      "ids": ["subagent-activations"]
    },
    {
      "id": "L2",
      "title": "tool presentation mode rejects `both`",
      "kind": "value-rejected",
      "target": "0.2.1-alpha.2",
      "doc": "docs/upgrade-guide/v0.2.1-alpha.1/tool-presentation-mode/guide.md",
      "removed": ["mode: both", "DSH_TOOLS_MODE=both", "ctx.tools.presentAs('both')"],
      "replacement": "native or ptc",
      "targets": ["src/**/*.ts", "cordis.patch.yml"],
      "detectable": true,
      "confidence": "documented",
      "ids": ["tool-presentation-mode"]
    },
    {
      "id": "L3",
      "title": "webRuntime service replaced by webStartup",
      "kind": "service-renamed",
      "target": "0.2.1-alpha.2",
      "doc": "docs/upgrade-guide/v0.2.1-alpha.1/web-listener-trust-config/guide.md",
      "removed": ["service webRuntime", "row web-runtime", "ctx.webRuntime.lanAddresses", "wildcard --host"],
      "replacement": "webStartup (row web-startup), concrete host literals",
      "targets": ["src/**/*.ts", "cordis.patch.yml"],
      "detectable": true,
      "confidence": "documented",
      "ids": ["web-listener-trust-config"]
    },
    {
      "id": "L4",
      "title": "working-directory removes the {{cwd}} prompt variable",
      "kind": "template-variable-removed",
      "target": "0.2.1-alpha.2",
      "doc": "docs/upgrade-guide/v0.2.1-alpha.1/working-directory/guide.md",
      "removed": ["prompt variable {{cwd}}", "config.cwd for ACP and DSH-SDK subagents"],
      "replacement": "pass the directory on the child request, or call working_directory({ cd }) first",
      "targets": ["src/**/*.ts", "**/*.md"],
      "detectable": true,
      "confidence": "documented",
      "ids": ["working-directory"]
    },
    {
      "id": "L5",
      "title": "session title provider strategy replaces three exports",
      "kind": "export-removed",
      "target": "0.2.1-alpha.2",
      "doc": "docs/upgrade-guide/v0.2.1-alpha.1/session-title-provider-strategy/guide.md",
      "removed": ["registerSessionTitleLlmProvider", "generateSessionTitleWithLlm", "SessionTitleLlmMessageSelector", "shared Config targetWords", "shared Config targetCjkCharacters"],
      "replacement": "ctx.sessionTitle.register({ id, automatic, generate })",
      "targets": ["src/**/*.ts"],
      "detectable": true,
      "confidence": "documented",
      "ids": ["session-title-provider-strategy"]
    },
    {
      "id": "L6",
      "title": "session title requests route through ctx.llm.prepareCall()",
      "kind": "routing-changed",
      "target": "0.2.1-alpha.2",
      "doc": "docs/upgrade-guide/v0.2.1-alpha.1/session-title-adapters/guide.md",
      "removed": [],
      "replacement": "register an adapter with ctx.llm.registerAdapter(); order reasoning.efforts low-to-high",
      "targets": ["src/**/*.ts"],
      "detectable": false,
      "undetectableReason": "A composition that only mounted llm/stream middleware keeps working for ordinary calls; whether title generation still reaches a provider depends on which adapters a deployment mounts, which static inspection of this repository cannot establish.",
      "confidence": "documented",
      "ids": ["session-title-adapters"]
    },
    {
      "id": "L7",
      "title": "ssh helper launch collapses to a single launch key",
      "kind": "config-shape-changed",
      "target": "0.2.1-alpha.2",
      "doc": "docs/upgrade-guide/v0.2.1-alpha.1/ssh-helper-launch/guide.md",
      "removed": ["ssh keys node/bootstrapPath/bootstrapHash", "dsh-ptc-runtime-node keys nodeExecutable/bootstrapPath"],
      "replacement": "launch: { kind: 'node-script' } or { kind: 'executable' }, SSH protocol 2",
      "targets": ["src/**/*.ts", "cordis.patch.yml"],
      "detectable": true,
      "confidence": "documented",
      "ids": ["ssh-helper-launch"]
    },
    {
      "id": "L8",
      "title": "Agent Teams direct inbox can lose queued messages",
      "kind": "data-loss",
      "target": "0.2.1-alpha.2",
      "doc": "docs/upgrade-guide/v0.2.1-alpha.1/team-direct-inbox/guide.md",
      "removed": ["separate mailbox", "maxPendingMessagesPerMember"],
      "replacement": "send_message returns {\"sent\":true}; re-send anything still pending before upgrading",
      "targets": [],
      "detectable": false,
      "undetectableReason": "Queued messages live in runtime state, not in the plugin source or its configuration. No static inspection can prove that nothing was pending at the moment of an upgrade. This record exists so the hazard is discoverable, not auditable.",
      "confidence": "documented",
      "ids": ["team-direct-inbox"]
    },
    {
      "id": "L9",
      "title": "dsh-agent-instructions drops the dshHome field",
      "kind": "config-key-removed",
      "target": "0.2.1-alpha.2",
      "doc": "docs/upgrade-guide/v0.2.1-alpha.1/instruction-home-override/guide.md",
      "removed": ["dshHome config field"],
      "replacement": "the DSH_HOME process environment variable via resolveDshHome()",
      "targets": ["cordis.patch.yml", "src/**/*.ts"],
      "detectable": true,
      "confidence": "documented",
      "ids": ["instruction-home-override"]
    },
    {
      "id": "L10",
      "title": "experimental package composition separates install from enablement",
      "kind": "lifecycle-changed",
      "target": "0.2.1-alpha.2",
      "doc": "docs/upgrade-guide/v0.2.1-alpha.1/experimental-package-composition/guide.md",
      "removed": ["hook bridge from install dependencies"],
      "replacement": "install peers explicitly; select a bundle before overriding its rows; use a full insert instead of enabling a deleted row",
      "targets": ["package.json", "cordis.patch.yml"],
      "detectable": false,
      "undetectableReason": "Whether a patch still lands depends on the composed layer stack at runtime and on which rows the selected bundle ships. The patch file alone does not determine it.",
      "confidence": "documented",
      "ids": ["experimental-package-composition"]
    },
    {
      "id": "L11",
      "title": "BundleInfo gains two required fields",
      "kind": "type-changed",
      "target": "0.2.1-alpha.2",
      "doc": "docs/upgrade-guide/v0.2.1-alpha.1/native-subagent-bundle-tools/guide.md",
      "removed": [],
      "replacement": "BundleInfo requires official and availability; PluginPackageRef likewise",
      "targets": ["src/**/*.ts"],
      "detectable": true,
      "confidence": "documented",
      "ids": ["native-subagent-bundle-tools"]
    },
    {
      "id": "L12",
      "title": "Python PTC runtime requires sandbox services",
      "kind": "dependency-added",
      "target": "0.2.1-alpha.2",
      "doc": "docs/upgrade-guide/v0.2.1-alpha.1/python-ptc-sandbox/guide.md",
      "removed": [],
      "replacement": "mount dsh-sandbox-local plus dsh-sandbox-policy and set the sandbox-policy row mode and workspaceRoot",
      "targets": ["cordis.patch.yml"],
      "detectable": false,
      "undetectableReason": "Whether the required services are mounted depends on the profile composition a deployment builds, not on the rows this repository ships.",
      "confidence": "documented",
      "ids": ["python-ptc-sandbox"]
    },
    {
      "id": "L13",
      "title": "Python optional resources are no longer bundled",
      "kind": "resource-moved",
      "target": "0.2.1-alpha.2",
      "doc": "docs/upgrade-guide/v0.2.1-alpha.1/python-optional-resources/guide.md",
      "removed": ["bundled Office sidecar wheels", "bundled authoring interpreter"],
      "replacement": "call download_office() or download_primary_runtime(); pre-seed DSH_RESOURCE_CACHE for offline deployments",
      "targets": ["src/**/*.ts"],
      "detectable": false,
      "undetectableReason": "The failure occurs on first use of a resource, and only when the deployment is offline or the cache is cold. Its absence is not visible in the source.",
      "confidence": "documented",
      "ids": ["python-optional-resources"]
    },
    {
      "id": "L14",
      "title": "dsh plugin requires --profile before the forwarded arguments",
      "kind": "cli-argument-order",
      "target": "0.2.1-alpha.2",
      "doc": "docs/upgrade-guide/v0.2.1-alpha.1/plugin-option-placement/guide.md",
      "removed": ["dsh plugin add <pkg> --profile <name>"],
      "replacement": "dsh plugin --profile <name> add <package>",
      "targets": ["**/*.md", "**/*.sh", "**/*.ps1", "**/*.yml"],
      "detectable": true,
      "confidence": "documented",
      "ids": ["plugin-option-placement"]
    },
    {
      "id": "L15",
      "title": "TerminalBlockLabels requires commandLine",
      "kind": "type-changed",
      "target": "0.2.1-alpha.2",
      "doc": "docs/upgrade-guide/v0.2.1-alpha.1/terminal-command-labels/guide.md",
      "removed": [],
      "replacement": "every TerminalBlockLabels object needs commandLine(line: number): string",
      "targets": ["src/**/*.ts", "src/**/*.tsx"],
      "detectable": true,
      "confidence": "documented",
      "ids": ["terminal-command-labels"]
    },
    {
      "id": "L16",
      "title": "deepseek model discovery returns an empty catalog without a key",
      "kind": "behavior-changed",
      "target": "0.2.1-alpha.2",
      "doc": "docs/upgrade-guide/v0.2.1-alpha.1/deepseek-model-discovery/guide.md",
      "removed": [],
      "replacement": "configure a key or an apiKeyEnv variable; consumers must handle an empty catalog",
      "targets": ["src/**/*.ts"],
      "detectable": false,
      "undetectableReason": "The behavior depends on whether a credential is present for the deployment, which is runtime state.",
      "confidence": "documented",
      "ids": ["deepseek-model-discovery"]
    },
    {
      "id": "L17",
      "title": "new sessions also create an agent",
      "kind": "behavior-changed",
      "target": "0.2.1-alpha.2",
      "doc": "docs/upgrade-guide/v0.2.1-alpha.1/new-session-generations/guide.md",
      "removed": ["empty-session reuse"],
      "replacement": "use New Session after changing presets; use openWorkspace/connectWorkspace to reuse",
      "targets": [],
      "detectable": false,
      "undetectableReason": "This is a client interaction behavior. Nothing in a plugin's source or manifest expresses it.",
      "confidence": "documented",
      "ids": ["new-session-generations"]
    },
    {
      "id": "L18",
      "title": "mock server emits named Messages events alongside SSE",
      "kind": "behavior-added",
      "target": "0.2.1-alpha.2",
      "doc": "docs/upgrade-guide/v0.2.1-alpha.1/mock-messages-events/guide.md",
      "removed": [],
      "replacement": "consume the named events and their data fields rather than filtering anonymous messages",
      "targets": ["src/**/*.ts"],
      "detectable": false,
      "undetectableReason": "A consumer that filters anonymous messages still works against the mock server; the change adds events rather than removing them, so there is no violation to detect.",
      "confidence": "documented",
      "ids": ["mock-messages-events"]
    },
    {
      "id": "L19",
      "title": "Desktop test auth popups are off by default",
      "kind": "default-changed",
      "target": "0.2.1-alpha.2",
      "doc": "docs/upgrade-guide/v0.2.1-alpha.1/desktop-test-auth-popup/guide.md",
      "removed": [],
      "replacement": "set updates.allowTestAuthPopupWindow: true and fully restart",
      "targets": [],
      "detectable": false,
      "undetectableReason": "A build-configuration default for a test workflow; it is not expressed in plugin source.",
      "confidence": "documented",
      "ids": ["desktop-test-auth-popup"]
    },
    {
      "id": "B1",
      "title": "bundled Python test directories removed",
      "kind": "resource-moved",
      "target": "0.2.1-alpha.2",
      "doc": "docs/upgrade-guide/v0.2.0-rc.2/bundled-python-tests/guide.md",
      "removed": ["NumPy and pandas test directories from the managed runtime"],
      "replacement": "install upstream testing dependencies in a separate Python environment outside the managed runtime dir",
      "targets": [],
      "detectable": false,
      "undetectableReason": "A documentation placement exception: this guide sits in the v0.2.0-rc.2 directory but was added after that release. Whether a deployment runs upstream test suites is not visible in this repository.",
      "confidence": "documented",
      "ids": ["bundled-python-tests"]
    },
    {
      "id": "S1",
      "title": "peer compatibility becomes a runtime gate",
      "kind": "enforcement-added",
      "target": "0.1.7-rc.1",
      "doc": "docs/cordis-tutorial/index.md",
      "removed": [],
      "replacement": "declared @deepseek-ai/dsh-* peer ranges are compared against the running version before import; a mismatch disables the row",
      "targets": ["package.json"],
      "detectable": true,
      "confidence": "inferred",
      "inferredFrom": "The gates are install-time and load-time behavior described across guide/version-matrix.md §4 and guide/plugin-dev-guide.md §7.3. The knowledge base records the observable rejection message rather than an official statement of the mechanism in one page."
    },
    {
      "id": "S2",
      "title": "session format V4",
      "kind": "format-changed",
      "target": "0.1.7-alpha.1",
      "doc": "docs/session-format-status.md",
      "removed": ["tool results as content blocks", "plugin-owned message source wrapper", "request/header.system key"],
      "replacement": "tool-role messages with toolCallId; producer-owned source.kind declared by the producer",
      "targets": ["src/**/*.ts"],
      "detectable": true,
      "confidence": "documented"
    },
    {
      "id": "S3",
      "title": "runtime invariants removed",
      "kind": "mechanism-removed",
      "target": "0.2.1-alpha.1",
      "doc": "docs/upgrade-guide/v0.2.0-rc.2/remove-runtime-invariants/guide.md",
      "removed": ["invariants service", "./invariant subpath exports", "@deepseek-ai/dsh-invariants"],
      "replacement": "none; the model-visible-equals-logged rule is now enforced by review only",
      "targets": ["package.json", "src/**/*.ts"],
      "detectable": true,
      "confidence": "documented"
    },
    {
      "id": "S4",
      "title": "subpath plugins stop reading their own package.json for display",
      "kind": "behavior-removed",
      "target": "0.2.1-alpha.1",
      "doc": "docs/upgrade-guide/v0.2.0-rc.2/subpath-plugin-display-manifest/guide.md",
      "removed": ["display metadata read from the subpath plugin's own package.json"],
      "replacement": "ship display metadata through locale files and the exported icon",
      "targets": ["package.json", "locale/*.json"],
      "detectable": true,
      "confidence": "documented"
    },
    {
      "id": "S5",
      "title": "schedule bundle retired",
      "kind": "bundle-retired",
      "target": "0.2.0-rc.2",
      "doc": "docs/upgrade-guide/v0.2.0-rc.2/schedule-bundle-retired/guide.md",
      "removed": ["@deepseek-ai/dsh-experimental-schedule-bundle"],
      "replacement": "the schedule capability moved into the base composition",
      "targets": ["package.json"],
      "detectable": true,
      "confidence": "documented"
    },
    {
      "id": "S6",
      "title": "repository-plugin mechanism removed",
      "kind": "mechanism-removed",
      "target": "0.1.0-rc.8",
      "doc": "https://github.com/PerryLink/dsh-plugin-guide/blob/main/guide/plugin-dev-guide.md",
      "removed": [".dsh-plugin manifest", "plugin_search/install/uninstall/status tools", "vendor/loader/src/repository.ts"],
      "replacement": "the web profile bundle channel, plus pure-Cordis insertion through cordis.patch.yml",
      "targets": ["**/*.md", "package.json"],
      "detectable": true,
      "confidence": "inferred",
      "inferredFrom": "Community-measured mechanism timeline recorded by the archived vlln/plugin-registry repository, which was archived 2026-10-03 and frozen at a 0.1.5 baseline. The knowledge base carries the timeline because no official page states it."
    }
  ],
  "capabilities": [
    { "id": "A1", "area": "Subagents", "introducedIn": "<=dsh-v0.1.0-rc.7", "anchor": "note 2026-06-21; continuable note 2026-07-28; control tools first commit 2026-08-02", "confidence": "documented" },
    { "id": "A2", "area": "Agent Teams (experimental)", "introducedIn": "dsh-v0.1.0-rc.8", "anchor": "packages first commit 2026-08-19; profile bundle 2026-09-04 -> dsh-v0.1.3-alpha.1", "confidence": "documented" },
    { "id": "A3", "area": "Workflow orchestration", "introducedIn": "dsh-v0.1.6-alpha.1", "anchor": "tool-workflow 2026-07-05 and tool-ralph 2026-07-20 were earlier; workflow-ptc 2026-09-13 -> this release", "confidence": "documented" },
    { "id": "A4", "area": "Background jobs", "introducedIn": "<=dsh-v0.1.0-rc.7", "anchor": "first commit 2026-08-13; consolidation note 2026-09-03", "confidence": "documented" },
    { "id": "A5", "area": "Scheduling and cron", "introducedIn": "dsh-v0.2.1-alpha.1", "anchor": "after 2026-08-05 and fixed-rate+cron 2026-08-06 were earlier; the tool package became preset-scoped 2026-09-24 -> this release", "confidence": "documented" },
    { "id": "A6", "area": "Goal tracking", "introducedIn": "<=dsh-v0.1.0-rc.7", "anchor": "2026-07-19", "confidence": "documented" },
    { "id": "A7", "area": "Plan mode", "introducedIn": "<=dsh-v0.1.0-rc.7", "anchor": "2026-07-22", "confidence": "documented" },
    { "id": "A8", "area": "Todo list", "introducedIn": "<=dsh-v0.1.0-rc.7", "anchor": "2026-06-29", "confidence": "documented" },
    { "id": "A9", "area": "LSP navigation", "introducedIn": "dsh-v0.1.3-alpha.1", "anchor": "seam 2026-07-16; lsp-stdio 2026-08-13 was earlier; tool-lsp 2026-09-04 -> this release", "confidence": "documented" },
    { "id": "A10", "area": "Browser automation", "introducedIn": "dsh-v0.1.6-alpha.1", "anchor": "2026-09-12/13; seam is native, provider is experimental", "confidence": "documented" },
    { "id": "A11", "area": "Computer use", "introducedIn": "dsh-v0.1.6-alpha.1", "anchor": "2026-09-12; seam is native, provider is experimental", "confidence": "documented" },
    { "id": "A12", "area": "MCP client", "introducedIn": "dsh-v0.1.3-alpha.1", "anchor": "client note 2026-07-07; group first tag 2026-09-04", "confidence": "documented" },
    { "id": "A13", "area": "Observability / OpenTelemetry", "introducedIn": "dsh-v0.2.0-rc.1", "anchor": "otel package 2026-09-25; product adapter 2026-09-21 -> 0.1.7-alpha.2; session adapter 2026-09-04 -> 0.1.3-alpha.1", "confidence": "documented" },
    { "id": "A14", "area": "Deliverables, documents, attachments", "introducedIn": "dsh-v0.1.6-alpha.2", "anchor": "deliverables 2026-09-14; office-to-pdf 2026-09-16; attachment seam 2026-09-04 -> 0.1.3-alpha.1", "confidence": "documented" },
    { "id": "A15", "area": "Session store, checkpoints, search, fork/resume/export", "introducedIn": "dsh-v0.1.3-alpha.1", "anchor": "session/llm 2026-06-11; checkpoint policy 2026-08-09; session-query 2026-09-04; V4 format 2026-09-16", "confidence": "documented" },
    { "id": "A16", "area": "Web access", "introducedIn": "dsh-v0.1.3-alpha.1", "anchor": "seam note 2026-06-24; group first tag 2026-09-04", "confidence": "documented" },
    { "id": "A17", "area": "Outbound webhooks", "introducedIn": "dsh-v0.1.2-alpha.1", "anchor": "group 2026-08-23; GitHub adapter 2026-09-04 -> 0.1.3-alpha.1", "confidence": "documented" },
    { "id": "A18", "area": "Terminal, SSH, shell", "introducedIn": "dsh-v0.1.6-alpha.1", "anchor": "shell/terminal 2026-08-13; SSH 2026-09-12 -> this release; terminal permission note 2026-09-16", "confidence": "documented" },
    { "id": "A19", "area": "Permissions, approval, sandboxing", "introducedIn": "dsh-v0.1.3-alpha.1", "anchor": "sandbox/permission/user-approval/commands 2026-09-04; guards 2026-07-08", "confidence": "documented" },
    { "id": "A20", "area": "Extension points: skills, dynamic plugins, hooks, presets", "introducedIn": "dsh-v0.1.6-alpha.2", "anchor": "skill 2026-07-10 and hooks 2026-07-01 were earlier; plugin-manager tool 2026-09-14 -> this release; preset registry 2026-09-21 -> 0.1.7-alpha.2", "confidence": "documented" },
    { "id": "A21", "area": "Context management: compaction, spill, observation policy", "introducedIn": "dsh-v0.1.3-alpha.1", "anchor": "compaction seam 2026-06-18; spill group 2026-09-04 -> this release; image offload 2026-09-08 -> 0.1.6-alpha.1", "confidence": "documented" },
    { "id": "A22", "area": "Plugin and API surfaces: Remote controllers, Typert, SDK, ACP, bundles", "introducedIn": "dsh-v0.1.2-alpha.1", "anchor": "acp 2026-06-16, sdk 2026-07-15, api/typert 2026-07-29..08-07 were earlier; sdk-minimal 2026-08-24 -> this release", "confidence": "documented" },
    { "id": "M1", "area": "ctx.hmr, ctx.pluginManager, ctx.profileContext", "introducedIn": "dsh-v0.1.6-alpha.2", "anchor": "three packages first appear in the same release", "confidence": "documented" },
    { "id": "M2", "area": "peer compatibility runtime gate", "introducedIn": "dsh-v0.1.7-rc.1", "anchor": "plugin-compatibility.ts and two sibling files first appear", "confidence": "documented" },
    { "id": "M3", "area": "Session format V4", "introducedIn": "dsh-v0.1.7-alpha.1", "anchor": "SESSION_FORMAT_VERSION 3 -> 4", "confidence": "documented" },
    { "id": "M4", "area": "ctx.mcpResources, ctx.browserUse, ctx.computerUse, ctx.ssh, ctx.inspector, ctx.dynamicCordisRunner", "introducedIn": "dsh-v0.2.1-alpha.1", "anchor": "seam rows A10/A11/A12/A18/A20", "confidence": "documented" },
    { "id": "M5", "area": "conversation.input.permission and sidebar.right.tab.guide.entry slots", "introducedIn": "dsh-v0.2.1-alpha.1", "anchor": "official slot documentation", "confidence": "documented" },
    { "id": "M6", "area": "webStartup replaces webRuntime", "introducedIn": "dsh-v0.2.1-alpha.2", "anchor": "L3", "confidence": "documented" },
    { "id": "M7", "area": "BundleInfo.official and BundleInfo.availability", "introducedIn": "dsh-v0.2.1-alpha.2", "anchor": "L11", "confidence": "documented" },
    { "id": "M8", "area": "working_directory tool and create_worktree", "introducedIn": "dsh-v0.2.1-alpha.2", "anchor": "tool catalog", "confidence": "inferred", "inferredFrom": "Present in the pinned tool catalog; the exact introducing release was not established by a first-tag search." },
    { "id": "M9", "area": "dsh-invariants removed", "introducedIn": "removed in dsh-v0.2.1-alpha.1", "anchor": "S3", "confidence": "documented" },
    { "id": "M10", "area": "dsh-experimental-schedule-bundle retired", "introducedIn": "retired in dsh-v0.2.0-rc.2", "anchor": "S5", "confidence": "documented" },
    { "id": "M11", "area": "subpath plugins stop reading their own package.json", "introducedIn": "removed in dsh-v0.2.1-alpha.1", "anchor": "S4", "confidence": "documented" }
  ]
}
