build: doc-sync gates — typecheck doc code blocks + verify event taxonomy (RFC 006 pts 1-2)

Two tsx CI gates make doc/code drift fail fast:
- doc-typecheck extracts every fenced ts block from README/docs/package READMEs,
  compiles them with tsc --noEmit against a temp project (vendor->lib, harness->src
  paths from tsconfig.typecheck.json), and fails on errors. Deliberate sketches opt
  out with ```ts ignore-check; the opt-out ratio is reported and capped.
- verify-event-taxonomy asserts the docs/architecture.md taxonomy table names
  exactly the events declared in the interface Events blocks. This surfaced three
  events the table had been missing (tools/change, llm/adapter-change,
  system-prompt/change), now added.

Doc snippets made compilable with stub imports/declares (1 genuine sketch ignored).
Wired into CI after typecheck. API reports (RFC 006 pt 3) deferred. Graduates RFC
006 pts 1-2 -> ADR 0014.
This commit is contained in:
Tianyi Cui
2026-06-14 00:47:38 +08:00
parent 7b07b70750
commit 6a528be569
16 changed files with 309 additions and 5 deletions

View File

@@ -17,7 +17,7 @@ This is the only package in the harness that contains concrete loop logic. Every
### Configuration (schemastery)
```ts
Config: {
interface Config {
agents: Array<{
id: string // required
model?: string

View File

@@ -9,8 +9,11 @@ Dev-mode event-contract invariants and session-log freeze. A pure-listener plugi
A functional plugin — register the module namespace (this is what loading by name in `cordis.yml` does):
```ts
import type { Context } from 'cordis'
import * as Invariants from '@deepseek-ai/dsh-invariants'
declare const ctx: Context
await ctx.plugin(Invariants) // freeze on (default)
await ctx.plugin(Invariants, { freeze: false }) // assert contract, don't freeze
```

View File

@@ -39,8 +39,12 @@ Tool registry and execution waterfall. Tool plugins register their schemas and e
First-party plugin authors can use the `defineTool()` helper (exported from this package) for typed tool parameter schemas:
```ts
import { readFile } from 'node:fs/promises'
import type { Context } from 'cordis'
import { defineTool } from '@deepseek-ai/dsh-tools'
declare const ctx: Context
ctx.tools.register(defineTool({
name: 'read_file',
description: 'Read a file from disk.',