# DeepSeek Dovetail compatibility record This record targets DeepSeek Harness `99f6f02fecdb7dff40c3fbc9470f5907c29f74ca` (`dsh-v0.1.0-rc.7`) and OpenCnid Dovetail `69f89e3322847fb11665980c16598494a9eacca0`. The host source was inspected from the pinned, user-modified checkout only as read-only evidence. Dovetail was inspected from a detached checkout at the exact commit. Clean assembled evidence uses a separate checkout. ## Public host contracts | Concern | Pinned public contract | Port decision | Evidence | |---|---|---|---| | Cordis plugin | `@deepseek-ai/cordis@4.0.1` exports `Context` and effect-owned `ctx.plugin()` children | Export a named function plugin and mount the filesystem provider as its child; install exact Cordis because the published provider's runtime closure imports service-definition modules and profile pnpm disables automatic peers | Pinned package manifest, Cordis primer, clean-profile import failure from the peer-only draft, and passing assembled boot | | Skill registry | `@deepseek-ai/dsh-skill@0.1.0-rc.7`; `ctx.skills` is host/global plus scope layers | Require `skills`; do not implement a registry | Pinned `docs/subsystems/skills.md` and public package exports | | Filesystem provider | `@deepseek-ai/dsh-skill-filesystem@0.1.0-rc.7`; public function plugin with `providerName`, `includeDefaultRoots`, `bundledSkillDir`, and `watch` | Direct runtime dependency; configure `{ providerName: 'dovetail', includeDefaultRoots: false, bundledSkillDir: packageSkillRoot, watch: false }` | Pinned source/README and npm registry manifest/integrity | | Precedence | Provider ranks project DSH 100, project agents 200, custom 300, user DSH 400, user agents 500, bundled 600; lower wins within a layer | Supply only `bundledSkillDir`, preserving project/user precedence | Real provider source and registry comparison code | | Catalog and explicit invocation | `@deepseek-ai/dsh-tool-skill@0.1.0-rc.7` publishes model-invocable summaries and injects a user-invocable skill for a whitespace-bounded `/name` gesture | Keep six model-invocable; mark `spark-steering` and `upsum` `disable-model-invocation: true`; tell loaded bodies not to call lowercase `skill` again when an injected `` already exists | Pinned tool README/source and assembled snapshots | | Cold delegation | Shipped `subagent` tool binds provider `spawn`, accepts `description`, `prompt`, and optional `run_in_background`; continuable mode defaults to background | Use `subagent` for clean children; emit independent foreground calls together with `run_in_background: false` when the next step needs all results | Pinned base bundle and `dsh-tool-subagent` schema | | Inherited delegation | Shipped `subagent_fork` seeds all completed parent turns and omits the in-flight turn | Forbid it for blind roles or hidden parent conclusions; allow it only when inherited completed history is desired | Pinned fork provider and subagent subsystem docs | | Background lifecycle | Continuable `subagent` returns a durable child id; `send_message`, `list_agents`, `interrupt_agent`, child `report`, and settlement notices are separately composed surfaces | Describe availability checks and exact lifecycle; never invent a result-collection call for continuable children | Pinned control/report/provider READMEs | | Persistent specialization | `dsh-agent-presets` mounts `agent.cordis.yml` compositions as standing scoped layers | Map durable roles to preset/profile composition, not agent Markdown files | Pinned agent-presets README and shipped preset files | | Bundle distribution | A package declares `dsh.bundle.patch`; `dsh plugin --profile NAME add/remove` edits a profile and bundle list | Ship one patch inserting one `deepseek-dovetail` row | Pinned app-boot and publishing guides plus CLI source | | Evaluation control | Hiding the exact `tool-skill` row removes both its schema and catalog publication | Treatment begins with `/target-skill`; baseline applies an overlay disabling `tool-skill` | Pinned tool-skill catalog visibility code; keyless snapshot and runner plan tests | No required runtime import uses a `src/*` export. The npm registry contained every exact package in the dependency plan when checked on 2026-08-20; their published exports match the pinned checkout. Registry `dist.integrity` values are retained in the lockfile/package evidence. ## Dependency plan | Kind | Package | Version | Reason | |---|---|---:|---| | direct | `@deepseek-ai/dsh-skill-filesystem` | `0.1.0-rc.7` | Runtime plugin mounted by this bundle | | direct provider closure | `@deepseek-ai/dsh-home-paths`, `@deepseek-ai/dsh-skill`, `@deepseek-ai/dsh-llm`, `@deepseek-ai/dsh-scope`, `@deepseek-ai/dsh-timeout`, `@deepseek-ai/dsh-attachment`, `@deepseek-ai/dsh-brand`, `@deepseek-ai/dsh-fs`, `@deepseek-ai/dsh-invariants`, `@deepseek-ai/dsh-sandbox`, `@deepseek-ai/dsh-session`, `@deepseek-ai/dsh-typert-protocol` | `0.1.0-rc.7` | Runtime imports plus exact declared peers of the published filesystem-provider closure; profile pnpm disables automatic peers, and the bundle mounts none of these service definitions itself | | direct runtime closure | `@deepseek-ai/cordis` | `4.0.1` | Runtime class/import required by published `dsh-skill`; Cordis is cross-copy branded and the bundle consumes the host `ctx.skills` instance | | direct runtime utility | `yaml` | `2.9.0` | DSH-compatible YAML parsing for the package-owned `upsum` frontmatter helper; removes the optional PyYAML coverage gap | | development | TypeScript, Vitest, Oxlint, YAML tooling | exact lockfile resolutions | Build, static gates, and evidence only | The packed manifest must contain no `file:`, `link:`, `workspace:`, absolute-path, or Git dependency. The first peer-only draft installed but failed clean assembled boot with `ERR_MODULE_NOT_FOUND` for `@deepseek-ai/dsh-home-paths`: profile pnpm uses `autoInstallPeers: false`, and Node does not resolve imports from DSH's separate in-box bundle anchor. The exact direct runtime closure above is therefore required. Type-only provider peers are not imported by its published `lib/index.js`; runtime imports were inspected line by line and are covered by clean assembled boot. ## Skill matrix | Skill | Upstream behavior | DSH equivalent and port action | Evidence | Remaining limitation | |---|---|---|---|---| | `prompt-engineering` | Structural tags, hierarchy, placeholders, collections, attention, iteration, and uncontaminated ground; points to `hypershot-protocol` | Retain the method and Matthew Murphy/Lexideck lineage; use lowercase `skill` for the companion only when no matching `` is already present | Parsed catalog snapshot; adapted-body assertions; three live paired prompt comparisons also loaded `hypershot-protocol` without double-loading the target | The external Lexideck curriculum is cited, not bundled; the live sample was one prompt task with mixed winners | | `hypershot-protocol` | Contamination-free structural examples and a continuum from `...` to instruction-bearing variables | Retain technique and relationship to `prompt-engineering`; remove host-specific invocation wording | Parsed catalog, paired-companion snapshots, and typed live companion-load evidence | Effectiveness remains task/model dependent | | `spark-steering` | Explicit-only SPARK-axis diagnosis, adjacent-axis tests, costed lever references, and the un-tool | Keep `disable-model-invocation: true`; translate plugins, permissions, skills, presets, tools, providers, and profile patches into DSH terms; replace the upstream-host cost references with DSH-specific levers/costs; verify a proposed lever against the host | Policy snapshot, prohibited-host-reference scan, and one live treatment win that distinguished S from R and chose an available narrow DSH move | The active profile must still be inspected; the reference is not a live DSH capability inventory | | `subagent-composition` | Claude cold spawn ledger, ephemeral Agent calls, persistent `.claude/agents` files, worktrees, and Claude-specific call fields | Rewrite around DSH cold `subagent`, inherited `subagent_fork`, fixed tool-instance config, foreground overlap, continuable child ids/control/report/settlement, and presets/profile composition; add a delegation gate | Tool-schema snapshot; cold/fork fixture; live delegation refusal and two concurrent foreground cold spawns with no fork | A custom DSH composition without `spawn` must stop this workflow; presets are composition files rather than one portable Markdown agent format | | `judge-composition` | Differently blinded grounding, coherence, corroboration, and audit seats; candidate-blind composition and post-verdict audit | Load prompt companions before authoring prompts; use cold children for blinded seats; launch ready non-audit seats together; run audit after prompts, artifacts, disclosures, and verdicts exist | Blindness/ordering fixture plus a live run with parallel cold judge seats followed by a cold audit | Impartiality remains conditional on the recorded inputs and clean host composition | | `self-play` | Clean-room search with blind gatherer, adversary, evaluator, and judge; explicit visibility ledger and controls | Require cold spawn, forbid fork for blind roles, record a DSH input-visibility matrix, apply the delegation gate, and stop when the effective composition cannot isolate | Cold-selection snapshot, visibility fixture, and one live multi-seat run using cold spawn without fork | The live run disclosed that filesystem/skill-layer blindness was not fully established; readable host artifacts remain a contamination surface | | `upsum` | Explicit session close: append-only record, fixed-budget descending-resolution summary, open-work projection, and `checks.py` with findings distinct from measurement failures | Keep `disable-model-invocation: true`; resolve `scripts/checks.py` against DSH's `` base and pass the target repository explicitly; parse DSH YAML with the adjacent Node helper and package-pinned `yaml`; preserve unchanged-session no-op | Script execution fixtures with Python site packages disabled, changed/unchanged repositories, and package-relative path snapshot; retained live partial/failed runs | On this Windows host the restricted subprocess could not read pre-created Git metadata, so the live lifecycle gate remains `UNMEASURED`; remote status also remains local-cache evidence | | `better-skill-creator` | Author/test/measure/improve loop, Claude-specific frontmatter/discovery/install facts, nested `claude -p`, paired arms, blind graders, and evidence workspace | Replace runtime facts with DSH YAML, precedence, `/name`, package resource, preset, bundle, and CLI behavior; retain treatment/baseline artifacts through a bounded DSH runner abstraction; baseline disables the exact `tool-skill` consumer; every arm gets fresh workspace/session roots, empty local skill roots, and an explicit `workspace-write` overlay | Validator, runner bounds/isolation, keyless snapshots, assembled tests, and a live clean treatment/baseline skill-authoring comparison | One live comparison favored baseline; DSH file policy permits reads, so RLM/IPython or hostile readable host data requires an outer OS/container boundary | ## Source and licensing closure The materializer vendors 31 byte-identical source/runtime files from the pinned Dovetail commit, overlays DSH adaptations from `ports/dsh`, and records 55 reviewed deletion hashes in the current lock. Better Skill Creator remains Apache-2.0 with its NOTICE. Each other directory retains its adjacent license. Prompt Engineering retains its NOTICE and Matthew Murphy/Lexideck attribution. SPARK references retain the arXiv provenance inherited from upstream. `THIRD_PARTY_NOTICES.md` distinguishes verbatim from adapted paths. The repository and package remain private. New adapter/build/test code has no owner-selected public license; `SEE LICENSE IN THIRD_PARTY_NOTICES.md` records that unresolved publication decision without relicensing upstream work. ## Preflight limitations The upstream repository requires prompt-authoring sessions to invoke `prompt-engineering` and `hypershot-protocol` through the active host's skill tool. This Codex task has neither Dovetail skill registered in its current skill registry, and the task forbids installing into user/project skill homes. The pinned bodies were therefore inspected directly for compatibility, but that upstream process gate could not be represented as an invocation. No evidence below claims otherwise. The default shell runtime was Node.js 20.19.2 with pnpm 9.14.4. Acceptance commands use the desktop-bundled Node.js 22.23.2 and pnpm 11.19.0 explicitly, satisfying the pinned ranges.