feat(dsh): add shared Harness analysis - #110
Conversation
Implements QoderAI#104 using docs/specs/2026-08-24-104-deepseek-harness-shared-analysis-evidence-bundle.md. Qualify DSH for shared Asset Practices, Harness evidence, and Evidence Bundle collection with one frozen canonical cwd while keeping rendering and Checkup out of scope. Validate the change with Node 22.20.0 and Node 24.15.0 focused suites, native DSH smokes, and a clean npm run check. Existing DSH Session and configured-assets semantics remain unchanged. Co-authored-by: Codex (GPT 5.6 Sol) <codex@openai.com>
|
Sry, Windows CI exposed a reproducible path canonicalization issue rather than a transient runner failure. The same directory can currently reach the shared analysis path as an 8.3 short path (RUNNER~1) or its long-form path (runneradmin), which then breaks workspace identity, relative-path checks, and Qoder Memory lookup. There is also one independent Windows-only test regex escaping issue. I’ve isolated the failures and am working on a narrow fix in this PR. No reviewer action needed yet — I’ll push the fix and re-run the full matrix. |
Keeps QoderAI#104 configured and practice analysis on one filesystem identity using docs/specs/2026-08-24-104-deepseek-harness-shared-analysis-evidence-bundle.md. Qoder Memory lookup, workspace-relative locators, topology, Git-root resolution, and Baseline compaction now share the same canonical path owner; the Windows-safe privacy assertion no longer constructs a RegExp from a raw path. Validated with Node 22.20.0 and Node 24.18.0 focused suites, DSH 0.1.1-rc.2 native smokes, and a clean Node 22.20.0 npm run check. Co-authored-by: Codex (GPT 5.6 Sol) <codex@openai.com>
|
Overall, the architecture and traceability are strong: the shared canonical-cwd owner, Evidence Bundle v3, Asset Baseline v2, exact DSH capability boundary, and configured-not-observed separation all match #104 well. The cross-platform and native DSH CI evidence is also convincing. I left one blocking inline comment for a reproducible absolute-path disclosure through nested Baseline stage errors. Once that is fixed and covered at the serialized Bundle boundary, I think the implementation is close to review-ready. Two non-blocking PR-description cleanups:
|
| const lintRunner = dependencies.runLint ?? runAgentLint; | ||
| const inventoryRunner = dependencies.collectPublicInventory | ||
| ?? (provider === "qoder" ? collectQoderInventory : collectProviderInventory); | ||
| const pathContext = { |
There was a problem hiding this comment.
[P1] Redact nested Baseline errors before returning bundle data
This path context protects findings and inventory projections, but unavailable stage messages still go through compactError, which copies the raw collector message. The early raw-inventory failure also returns before this context exists. collectAgentCustomize keeps a failed or partial Baseline under lane.data, so an absolute path from a Node error remains visible in the serialized Evidence Bundle even though the top-level lane error is generic.
I reproduced this on b381b58 by making raw inventory throw an error containing an off-tree path: the original path remained in lane.data.envelopes.inventory.error.message. This violates AC-11/AC-12. Please emit a stable bounded stage message, or apply the locator sanitizer to every stage error, and add whole-bundle negative tests for both failed and partial Baselines, including POSIX paths with spaces and Windows paths.
There was a problem hiding this comment.
I reproduced and fixed the serialized Bundle path disclosure from nested Baseline stage errors. The Baseline/Bundle privacy projection now sanitizes path-bearing error text before failed or partial Baselines reach the final serialized Bundle. Whole-Bundle regressions cover raw-inventory, lint, inventory, and integrity errors across spaced POSIX, Windows drive, and UNC paths; raw absolute paths are absent while stage codes and safe surrounding message context remain.
I also updated the rollback wording and Node 24.x evidence in the PR description. The full PR matrix is green, including Windows / Node 22.20.0.
Fixes QoderAI#104 using docs/specs/2026-08-24-104-deepseek-harness-shared-analysis-evidence-bundle.md AC-11 and AC-12. Serialized Bundle regressions and focused Node 22/24 suites validate nested Baseline stage-error path redaction. Co-authored-by: Codex (GPT 5.6 Sol) <codex@openai.com>
Summary
DeepSeek Harness can now enter Better Harness's shared, inline Harness analysis path through Asset Practices, neutral Harness evidence, and Evidence Bundle collection. The change freezes one canonical configured cwd, advances Asset Baseline to v2 and Evidence Bundle to v3, and keeps current configured evidence separate from historical Session observation.
Why
Traceability and Scope
/better-harnessloop, Cordis/Profile/Preset/runtime Skills resolution, MCP/Plugin completeness, atomic snapshots, configured-to-historical causality, and shared Session privacy repair.Change Type
Test and Review Evidence
npm run test:dsh-configured-assets-nativenpm run test:dsh-nativenpm run checknpm run pack:verifygit diff upstream/main...HEAD --checkManual or visual evidence: No visual surface changed. Existing merged DSH support was independently qualified before #104 against DSH
0.1.1-rc.2at sourceb150a551b8d465e31e418e1b2eaf5e79bbb7d28e.Risk and Recovery
practiceCoverageRowsand configured/practice entrypoint canonicalization affect shared hosts; cross-host regressions pass. No dependencies, lockfiles, versions, generated outputs, Report Rendering, or Checkup owners changed.configured-not-observed; multi-owner snapshots are non-atomic and do not prove historical use. Report Rendering and Checkup remain unsupported for DSH.AI Involvement
Checklist
AGENTS.md,CONTRIBUTING.md, and the relevant canonical-owner guidance.CHANGELOG.md. N/A: the approved [Feature]: Add DSH shared Harness analysis with frozen-cwd Evidence Bundle support #104 spec explicitly excludes changelog/release/version work, andAGENTS.mdprohibits adding it without scope authorization.