Review round three found four seam defects: - A watch() disposer only removed the observer from the set; an invocation already chained onto the watcher tail still ran after disposal. Watchers now carry an active flag checked when a queued invocation would start, and the service dispose drain awaits started invocations (pendingTails) beside the write queues, so disposal is quiescent. - The settings/updated manual fan-out caught only synchronous throws; an async listener rejection escaped as an unhandled rejection. Thenable returns are now contained through the shared listener diagnostic, and the event contract documents that the INVARIANT rethrow serves synchronous listeners only. - structuredClone admitted Dates, Maps, BigInts, and cycles that YAML/JSON storage silently distorts on reload (a Date lands as a timestamp string, a Map as a plain map, a BigInt as a number). The write snapshot is now a single-pass cloneJsonShaped walk that rejects non-JSON values with their path before anything persists. - mergeLayers' per-entry undefined guard became dead code once the clone strips undefined entries at the boundary; removed, with the sparse-patch contract restated at its enforcement point.
settings/ — user-settings capability family
English | 中文
The user-settings seam and its providers. The interface package owns the abstract Settings service — namespace registration, layered resolution, and change commits; providers implement raw-document storage and push external edits through the seam. All product packages.
| Package | Role | ctx key |
|---|---|---|
settings/ |
Settings seam: namespace registry, layered resolution, commit events | ctx.settings |
settings-local/ |
File-backed provider (settings.yaml/.json) with hot reload and comment-preserving write-back |
(registers ctx.settings) |
The interface lives at settings/settings/; providers are flat siblings. A network configuration-center provider (for example a nacos-style backend) joins here and registers on ctx.settings. Composition config stays in cordis.yml: a settings namespace carries only the user-editable subset, resolved as schema defaults, then the registrant's composition base, then the user document.