Skip to content

Commit 33b7f08

Browse files
authored
feat(dsh): qualify portable report rendering (#113)
Qualify DeepSeek Harness for the existing portable HTML and Markdown report path while preserving explicit no-files behavior and the shared publication contract.\n\nImplements Issue #112 using docs/specs/2026-08-25-112-deepseek-harness-portable-report-rendering.md. Validated with native DSH smoke checks, focused Node 24 tests, the full four-lane GitHub CI matrix, browser coverage, and package verification.\n\nCo-authored-by: Codex (GPT 5.6 Sol) <codex@openai.com>
1 parent 8292495 commit 33b7f08

14 files changed

Lines changed: 1452 additions & 71 deletions

File tree

docs/adapters/README.md

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ This is the single entry point for Claude Code, Codex, Qoder, Cursor, Qwen,
44
GitHub Copilot, Pi, Kimi Code, WorkBuddy, and Grok host boundaries, plus the
55
DeepSeek Harness (DSH) verified install/discovery, developer-preview
66
configured-assets, session, Asset Practices, neutral Harness analysis, and
7-
Evidence Bundle slices. Do not
7+
Evidence Bundle slices, plus qualified portable HTML report rendering. Do not
88
create `docs/adapters/claude-code.md`, `docs/adapters/codex.md`,
99
`docs/adapters/qoder.md`, `docs/adapters/cursor.md`, `docs/adapters/qwen.md`,
1010
`docs/adapters/copilot.md`, `docs/adapters/pi.md`,
@@ -46,7 +46,7 @@ project `.kimi-code/skills/`), then runs `/skill:better-harness`.
4646
| Kimi Code | Analysis-capable source-local host | `.kimi-plugin/plugin.json` | `scripts/agent-customize/providers/kimi.mjs` | `scripts/session-analysis/platforms/kimi.mjs` | self-contained HTML + Markdown | `AGENTS.md` + `~/.kimi-code/skills` + project `.kimi-code/skills`/`.kimi/skills` + `~/.kimi-code/mcp.json` | `harness evidence-bundle --platform kimi` -> validated `html` render |
4747
| WorkBuddy | Analysis-capable source-local host | none (skills install into `~/.workbuddy/skills`) | `scripts/agent-customize/providers/workbuddy.mjs` | `scripts/session-analysis/platforms/workbuddy.mjs` | self-contained HTML + Markdown | `~/.workbuddy` `AGENTS.md` + identity files + `.agents` + `AGENTS.md` | `session-analysis --platform workbuddy sources` -> validated `html` render |
4848
| Grok | Analysis-capable source-local host | none (skills install into `~/.grok/skills`) | `scripts/agent-customize/providers/grok.mjs` | `scripts/session-analysis/platforms/grok.mjs` | self-contained HTML + Markdown | `~/.grok` + `.grok` + `.agents` + `AGENTS.md` | `session-analysis --platform grok sources` -> skill symlink -> validated `html` render |
49-
| DeepSeek Harness (DSH) | Verified install/discovery for headless/base and Web `standard`/`code`/`cordis`; shared read-only analysis over developer-preview configured and Session evidence | local DSH Cordis policy at `scripts/dsh-skill-discovery/index.mjs`; no lifecycle shell | `scripts/agent-customize/providers/dsh.mjs`; filesystem Skills and cwd-sensitive Instructions, configured-not-observed | `scripts/session-analysis/platforms/dsh.mjs`; `dsh-v1` for the audited format-0 session-evidence slice from DSH `dsh-v0.1.0-rc.7` and `dsh-v0.1.0-rc.8`, raw `.jsonl` and feature-detected `.jsonl.zstd` | unavailable; neutral `harness analyze` and Evidence Bundle only | canonical Skill from the complete root; model Skill calls rejected | `npm run test:dsh-native`; `npm run test:dsh-configured-assets-native`; shared analysis remains inline/no-files |
49+
| DeepSeek Harness (DSH) | Verified install/discovery for headless/base and Web `standard`/`code`/`cordis`; shared read-only analysis over developer-preview configured and Session evidence | local DSH Cordis policy at `scripts/dsh-skill-discovery/index.mjs`; no lifecycle shell | `scripts/agent-customize/providers/dsh.mjs`; filesystem Skills and cwd-sensitive Instructions, configured-not-observed | `scripts/session-analysis/platforms/dsh.mjs`; `dsh-v1` for the audited format-0 session-evidence slice from DSH `dsh-v0.1.0-rc.7` and `dsh-v0.1.0-rc.8`, raw `.jsonl` and feature-detected `.jsonl.zstd` | self-contained HTML + Markdown | canonical Skill from the complete root; model Skill calls rejected | `npm run test:dsh-native`; `npm run test:dsh-configured-assets-native`; validated portable `html` render and native output-root inertness |
5050

5151
## Read-only Plugin Lifecycle
5252

@@ -221,9 +221,12 @@ edit host settings, or register an `apply` path.
221221
`--include-user-home` is supplied. The evidence is
222222
`configured-not-observed`: runtime/in-process Skills and active Cordis,
223223
Profile, and Preset composition remain unresolved. DSH advertises exactly
224-
`sessionAnalysis`, `agentCustomize`, `assetPractices`, `harnessReport`, and
225-
`evidenceBundle`. Shared analysis accepts a canonical contained `--cwd` and
226-
remains inline/no-files because checkup, rendering, and output are unsupported. See
224+
`sessionAnalysis`, `agentCustomize`, `assetPractices`, `harnessReport`,
225+
`reportRendering`, and `evidenceBundle`. Shared analysis accepts a canonical
226+
contained `--cwd`. Durable output reuses the portable renderer at the generic
227+
Better Harness root `<target>/.dsh/better-harness`; explicit inline/no-files
228+
operation remains write-free. Checkup, Canvas, Studio, and public Quickstart
229+
support remain unavailable. See
227230
[DeepSeek Harness Configured Assets](../../references/agent-customize/platforms/dsh.md)
228231
and run the credential-free owner smoke with
229232
`npm run test:dsh-configured-assets-native`.
@@ -252,10 +255,13 @@ edit host settings, or register an `apply` path.
252255
remains readable. There is no fallback dependency or shell.
253256
The combined DSH boundary does not provide live PTY or process state,
254257
complete runtime configured-asset resolution, plugin lifecycle, a managed
255-
shell, manifest or package integration, rendered report/output routing, README
258+
shell, manifest or package integration, Canvas, Checkup, Studio, README
256259
Quickstart, SQLite or custom
257260
persistence, automatic optimization, plugin fault or causality attribution,
258-
or artifact repair or writes. See
261+
or repair or mutation of native DSH Session sources, Skills, Instructions, or
262+
configuration/state. Better Harness-owned report writes and recovery remain
263+
limited to `<target>/.dsh/better-harness` under the generic portable
264+
publication contract. See
259265
[Story #93](https://github.com/QoderAI/better-harness/issues/93)
260266
and the [dated support specification](../specs/2026-08-18-93-deepseek-harness-session-evidence.md).
261267

@@ -267,13 +273,15 @@ Canonical templates live under `templates/reporting/`.
267273
`findings.json`, Canvas-only `canvas.json`, and `report.canvas.tsx`.
268274
- `cursor-canvas.md`: Cursor Canvas output contract, covering the complete
269275
report, native Context Usage projection, and public IDE actions.
270-
- `html-visual.md`: portable Claude Code/Codex/Qwen/Copilot/Pi/Kimi Code/WorkBuddy/Grok visual output contract, covering
276+
- `html-visual.md`: portable Claude Code/Codex/Qwen/Copilot/Pi/Kimi Code/WorkBuddy/Grok/DeepSeek Harness visual output contract, covering
271277
`findings.json`, `report.md`, and `report.html`.
272278
- Markdown-only output has no visual companion.
273279

274-
DSH is intentionally absent from these output-mode host lists. Its neutral
275-
`harnessReport` capability does not grant rendering, HTML, Canvas, or Markdown
276-
output support.
280+
DSH reuses the portable `html` mode to publish `findings.json`, `report.md`, and
281+
`report.html` at the generic Better Harness-owned root
282+
`<target>/.dsh/better-harness`. That root is not a native DSH storage contract.
283+
This qualification adds neither Canvas, Checkup, Studio, nor a claim of full
284+
DSH support.
277285

278286
## Split Triggers
279287

docs/docs/hosts/adapter-matrix.md

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@ host-neutral.
1414
## Support levels
1515

1616
Better Harness currently declares ten more complete capability-level host
17-
adapters plus bounded DSH discovery, configured-assets, and session slices. Six
18-
have verified public
19-
Quickstart paths. Pi, Kimi Code, WorkBuddy, and Grok are visible as adapter
20-
support because their installation and end-to-end evidence boundaries differ
21-
from that six-host set. DSH has Verified install/discovery for a qualified
22-
runtime/preset boundary plus developer-preview configured-assets and
23-
session-evidence contracts. It supports shared read-only Asset Practices,
24-
neutral Harness analysis, and Evidence Bundles, but is not an output adapter. The
17+
adapters plus bounded DSH discovery, configured-assets, and session slices.
18+
Six have verified public Quickstart paths. Pi, Kimi Code, WorkBuddy, and Grok
19+
are visible as adapter support because their installation and end-to-end
20+
evidence boundaries differ from that six-host set. DSH has Verified
21+
install/discovery for a qualified runtime/preset boundary plus developer-preview
22+
configured-assets and session-evidence contracts. It supports shared read-only
23+
Asset Practices, neutral Harness analysis, Evidence Bundles, and qualified
24+
portable HTML durable output. The
2525
[canonical adapter matrix](https://github.com/QoderAI/better-harness/blob/main/docs/adapters/README.md)
2626
remains the complete capability-level source of truth.
2727

@@ -39,7 +39,7 @@ remains the complete capability-level source of truth.
3939
| Kimi Code | Adapter support | Analysis-capable source-local host | `.kimi-plugin/plugin.json` | Workspace-matching Kimi wire transcripts | Self-contained HTML + Markdown |
4040
| WorkBuddy | Adapter support | Analysis-capable source-local host | None; skills use WorkBuddy-owned paths | Workspace-matching WorkBuddy JSONL transcripts | Self-contained HTML + Markdown |
4141
| Grok | Adapter support | Analysis-capable source-local host | None; skills use Grok-owned paths | Workspace-matching Grok session dirs (`updates.jsonl`) | Self-contained HTML + Markdown |
42-
| DeepSeek Harness (DSH) | Verified install/discovery | Qualified headless/base and Web `standard`/`code`/`cordis`; shared read-only analysis over partial configured-assets and session evidence | Local DSH Cordis policy; no lifecycle shell | DSH JSONL backend session format `0`: raw `.jsonl` and feature-detected `.jsonl.zstd` | Unavailable; inline/no-files analysis only |
42+
| DeepSeek Harness (DSH) | Verified install/discovery | Qualified headless/base and Web `standard`/`code`/`cordis`; shared read-only analysis over partial configured-assets and session evidence | Local DSH Cordis policy; no lifecycle shell | DSH JSONL backend session format `0`: raw `.jsonl` and feature-detected `.jsonl.zstd` | Self-contained HTML + Markdown |
4343

4444
The `@qoder-ai/better-harness` npm package includes all seven plugin metadata
4545
roots. Pi reuses install metadata in the existing `package.json`, so it does
@@ -78,13 +78,16 @@ lifecycle target.
7878
`canvas.json`, and `report.canvas.tsx`.
7979
- **Cursor Canvas** — the same complete report contract rendered with
8080
`cursor/canvas`, native Context Window evidence, and IDE actions.
81-
- **HTML visual** — portable Claude Code/Codex/Qwen/Copilot/Pi/Kimi Code/WorkBuddy/Grok contract
81+
- **HTML visual** — portable Claude Code/Codex/Qwen/Copilot/Pi/Kimi Code/WorkBuddy/Grok/DeepSeek Harness contract
8282
covering `findings.json`, `report.md`, and a self-contained `report.html`
8383
(see the [sample report](pathname:///demo/better-harness-report/)).
8484
- **Markdown-only** — no visual companion.
8585

86-
DSH is not an output-mode host. Neutral Harness analysis and Evidence Bundle
87-
support do not grant HTML, Canvas, Markdown, or durable report routing.
86+
DSH reuses the portable `html` mode to publish `findings.json`, `report.md`, and
87+
`report.html` at the generic Better Harness-owned root
88+
`<target>/.dsh/better-harness`. That root is not a native DSH storage contract.
89+
This qualification adds neither Canvas, Checkup, Studio, nor a claim of full
90+
DSH support.
8891

8992
## Adapter support boundaries
9093

@@ -159,10 +162,12 @@ better-harness agent-customize inventory --provider dsh --workspace <path> [--cw
159162
User-home Skills and Instructions are not read by default. Runtime/in-process
160163
Skills and active Cordis, Profile, and Preset composition remain unresolved.
161164
The host advertises exactly `sessionAnalysis`, `agentCustomize`,
162-
`assetPractices`, `harnessReport`, and `evidenceBundle`. Shared analysis freezes
165+
`assetPractices`, `harnessReport`, `reportRendering`, and `evidenceBundle`.
166+
Shared analysis freezes
163167
canonical `--cwd` for current configured practice while leaving historical
164-
Session scope unchanged. Rendering, output routing, Checkup, and Quickstart
165-
remain unsupported.
168+
Session scope unchanged. Durable output reuses the existing portable renderer;
169+
explicit inline/no-files operation remains write-free. Checkup, Canvas, Studio,
170+
and public Quickstart support remain unavailable.
166171
Repository contributors can run the pinned credential-free comparison with
167172
`npm run test:dsh-configured-assets-native`. See
168173
[DeepSeek Harness Configured Assets](https://github.com/QoderAI/better-harness/blob/main/references/agent-customize/platforms/dsh.md).
@@ -196,11 +201,15 @@ The implemented source-checkout smoke boundary is read-only:
196201
node scripts/session-analysis.mjs sources --platform dsh --workspace <path> [--dsh-home <dir>]
197202
```
198203
199-
Shared analysis does not imply a complete report loop. DSH has no live
204+
Qualified portable output does not imply complete native DSH integration. DSH has no live
200205
PTY/process integration, complete runtime configured-asset resolution, plugin
201-
lifecycle, managed shell, manifest, package integration, rendered report/output route,
202-
public Quickstart, SQLite or custom persistence support, automatic
203-
optimization, plugin-fault attribution, or artifact mutation/recovery. See the
206+
lifecycle, managed shell, manifest, package integration, Canvas, Checkup,
207+
Studio, public Quickstart, SQLite or custom persistence support, automatic
208+
optimization, plugin-fault attribution, or mutation/recovery of native DSH
209+
Session sources, Skills, Instructions, or configuration/state. Better
210+
Harness-owned `findings.json`, `report.md`, and `report.html` remain managed
211+
under `<target>/.dsh/better-harness` by the generic portable publication and
212+
rollback contract. See the
204213
[canonical source matrix](https://github.com/QoderAI/better-harness/blob/main/docs/adapters/README.md)
205214
and [Story #93](https://github.com/QoderAI/better-harness/issues/93).
206215

0 commit comments

Comments
 (0)