Files
deepseek-harness/docs/defensive-patterns
imccyu 32aba5ea37 docs: address review comments on the rules directory
- package-surface: split the two plugin forms (a function plugin named-exports
  the Loader four, a service plugin default-exports its class), keep Host
  Service Definition exports and the Client `/client` export discipline, replace
  the wrong example that quoted live production code, state that the static
  client libraries and `packages/util/*` are closed to new members, and drop
  census numbers that rot on the next package.
- client-components: use the real Slot API — the inject face with the reserved
  `hooks` compartment, the parent's derived `renderSlot`, `registerFactory`
  scope declarations with local components at `renderFactorySlot` — drop the
  string seat, pass the injected `useResource` explicitly with a protocol key,
  and describe persistence as the spec's framework-run `persist` key.
- conversation-and-session: rewrite the reasoning example on the real
  `conversation.chat.reasoning.body` seat and the published `reasoning.content`
  Factory, and drop status annotations and future-tense spec-speak.
- remote-and-api: scope the JSON requirement to the wire payload so
  `@Remote({ mode: 'stream' })`, lookup arguments, and a trailing `AbortSignal`
  stay valid; drop a leaked Chinese parenthetical from the English page.
- general: measure through `benchmarks/` (`test:bench`, `check:ci:bench`,
  `test:bench:memory`) instead of an invented command, state the baseline
  without presuming a hook, and drop a leaked exception line.
- api-gateway: link the Remote and API rules instead of restating them.
- development.zh and AGENTS: drop an orphan anchor and widen the standing
  order's trigger to the directory's scope.

The earlier "retired routing skill" claim was wrong and is dropped: that skill
was never committed, so the diff deletes nothing under `.agents/skills/`.
2026-10-09 23:03:57 +08:00
..

Defensive patterns

English | 中文

Hard-won rules: each pattern in this directory is a requirement this repository enforces in review, stated as the rule and the defect it prevents. Every rule states what must hold, the condition a reviewer judges it by, its boundary and who approves an exception, and a correct and a wrong example. Read the page for the artifact you are about to change, before you change it.

Why these rules

Five habits cover most of what follows, and each page is their application to one artifact:

  • Make correctness explicit. Write it into the structure — named call points, explicit lifecycles, explicit conditions and types — rather than compensating for it afterwards with timing.
  • Keep one source of truth. One read path for a piece of data, one home for a fact, one owner for shared state.
  • Extend through the registered seam. A new capability registers; an existing carrier stops taking new logic instead of growing a branch inside it.
  • Keep the change face equal to the review face. A change carries only the lines its stated behavior change needs, a migration moves code rather than rewriting it, and a performance-sensitive change carries its measurement.
  • Require evidence. A claim is falsifiable and recomputable — measured before and after, or checked by a gate — rather than kept in sync by hand.
Changing Read
Package exports, package shape, build faces, dependency declarations package-surface.md
Remote services, @Remote methods, API dispatch, business ownership at the API layer remote-and-api.md
Client components, slots, stores, hooks, effects client-components.md
Session reads, retention, conversation nodes, renderers conversation-and-session.md
Timing, state representation, shared ownership, decentralization, refactors, migrations, performance evidence, disposal, callbacks, subprocesses general.md

Type definitions and per-subsystem semantics live in subsystems/; this directory carries the rules, and the semantics pages carry what the types mean. dsh-code-review reads this directory when judging a pull request, and Development routes through the same table from AGENTS.md.