- skill-office 在技能文件缺失或元数据解析失败时降级为持久失败,不再阻止 Desktop Host 启动 - Office 改由 Desktop profile 的 yaml 挂载,载体路径由 Desktop 壳通过 Host 环境传入 - 升级 LibreOffice Kit 到 rc.4,移除 Desktop Host 的引擎钩子,runtimeArchivePath 内联到 cli.ts 并删除 office-engine.ts - 按平台原生路径和当前 Host 参数布局更新 web-app 与 desktop-host 测试夹具
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.