Merge branch 'worktree/ci-native-windows-20260808' into worktree/ci-native-windows-coverage-20260808

This commit is contained in:
Tianyi Cui
2026-08-09 18:03:19 +08:00
952 changed files with 2110 additions and 2087 deletions
@@ -1,4 +1,4 @@
// A temp-file write failure cannot be timed from outside. The fs/promises seam
// A temp-file write failure cannot be timed from outside. The `fs/promises` API
// injects it once so the test can prove that the writer lock still releases.
import { afterEach, describe, expect, it, vi } from 'vitest'
import { Context } from 'cordis'
+2 -2
View File
@@ -2,5 +2,5 @@
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write packages/settings/settings/README.md
README.md: 49ae5b405c003b6116e459cf377fc7a099538f2e
README.zh.md: d8f3bff5878b575d571b7aab4b627daa51e215f1
README.md: 5bfbf4623c937c2b66886f71adf27075523f5d28
README.zh.md: 98808424ba1af2210067bd7f74baa6027decbb06
+1 -1
View File
@@ -2,7 +2,7 @@
English | [中文](README.zh.md)
Abstract user-settings seam (`ctx.settings`). One provider holds a raw document of per-namespace sections; plugins register a namespace schema and read a resolved value layered as schema defaults, then the registrant's composition `base` (its cordis.yml entry-config subset), then the user document section. Without a mounted provider nothing changes for consumers: they keep resolving entry config alone, so every composition works with or without settings.
User-settings Service Definition (`ctx.settings`). One provider holds a raw document of per-namespace sections; plugins register a namespace schema and read a resolved value layered as schema defaults, then the registrant's composition `base` (its cordis.yml entry-config subset), then the user document section. Without a mounted provider nothing changes for consumers: they keep resolving entry config alone, so every composition works with or without settings.
## Service API
+1 -1
View File
@@ -2,7 +2,7 @@
[English](README.md) | 中文
抽象用户设置 seam`ctx.settings`)。一个提供方持有按 namespace 分节的原始文档;插件注册 namespace schema 并读取分层解析值:schema 默认值,然后注册方的组合 `base`(其 cordis.yml entry 配置子集),最后用户文档分节。不挂载提供方时消费者行为不变:仍只按 entry 配置解析,因此任何组合有无 settings 都能工作。
用户设置 Service Definition`ctx.settings`)。一个提供方持有按 namespace 分节的原始文档;插件注册 namespace schema 并读取分层解析值:schema 默认值,然后注册方的组合 `base`(其 cordis.yml entry 配置子集),最后用户文档分节。不挂载提供方时消费者行为不变:仍只按 entry 配置解析,因此任何组合有无 settings 都能工作。
## 服务 API
+4 -4
View File
@@ -1,5 +1,5 @@
/**
* User-settings seam (`ctx.settings`). Providers store one raw document of
* Service Definition for the user-settings capability seam (`ctx.settings`). Providers store one raw document of
* per-namespace sections; plugins register a namespace schema and read the
* resolved value, which layers schema defaults, the registrant's composition
* `base`, and the user document section, in that order.
@@ -69,7 +69,7 @@ export interface SettingsRegisterOptions<T> {
/** One registered namespace as surfaced to configuration UIs. */
export interface SettingsDescriptor {
// TODO(settings-namespace-vocabulary): Rename `ns` to `namespace` across the
// public seam, provider contract, implementations, tests, and consumers.
// public API, provider contract, implementations, tests, and consumers.
/** The registered namespace. */
ns: SettingsNamespace
/** Serialized schemastery schema (`schema.toJSON()`). */
@@ -173,7 +173,7 @@ declare module 'cordis' {
/**
* Deep equality over JSON-shaped data (objects, arrays, primitives) — the
* seam's single change-detection predicate, exported so the invariant
* Service Definition's single change-detection predicate, exported so the invariant
* companion checks exactly the implementation's relation.
* @param a - one JSON-shaped value.
* @param b - the other JSON-shaped value.
@@ -195,7 +195,7 @@ export function deepEqualJson(a: unknown, b: unknown): boolean {
/**
* A write refused because the namespace moved since the caller read it. The
* seam's serialized write queue orders writes; it cannot tell a fresh writer
* Service Definition's serialized write queue orders writes; it cannot tell a fresh writer
* from one holding a stale snapshot, which is what this reports.
*/
export class SettingsConflictError extends Error {
+2 -2
View File
@@ -1,5 +1,5 @@
/**
* In-memory settings provider fixture: the smallest real subclass of the seam,
* In-memory settings provider fixture: the smallest real subclass of the Service Definition,
* used by the base-class behavior suite in place of a file- or network-backed
* provider. Kept in `tests/` because production providers live in their own
* packages.
@@ -7,7 +7,7 @@
import { Settings, type SettingsNamespace } from '../src/index.ts'
/** In-memory provider exposing the protected seam hooks to tests. */
/** In-memory provider exposing the protected provider hooks to tests. */
export class MemorySettings extends Settings {
/** Raw document the provider "storage" currently holds. */
doc: Record<string, unknown>
@@ -4,7 +4,7 @@ import z from 'schemastery'
import { Settings, SettingsConflictError, deepEqualJson, installSettingsSection, settingsNamespace, type SettingsNamespace, type SettingsScope, type SettingsUpdateSource } from '../src/index.ts'
import { MemorySettings } from './memory.ts'
/** A provider implementing only the three primitives: the seam owns init. */
/** A provider implementing only the three primitives: the Service Definition owns initialization. */
class BareProvider extends Settings {
doc: Record<string, unknown>