Repository navigation
Commit 77c203a
docs(spec,i18n): stop naming the removed feature_flags settings namespace (#30647)
<!-- claude-projects-attribution: {"github_login":"os-sales"} -->
_Requested by **Sales** · [project
thread](https://claude.ai/code/project/chan_01D5bWFY3rFzgJcytD5gD4Uu?thread=cmsg_01D5bWFY3rFzgJcytD5gD4UuV5cRafodM2YQHxeDkdiWJM)_
domain:spec#2 · os-sales · session_01L6bhgVugtCCwBs98FeR27P
Fixes #30282
Clause-②: no
Metadata-protocol: none
## 维护者速读
- 改了什么:设置中心副标题在十种语言里不再提“功能开关”;spec 的三处注释不再指向已删除的 `feature_flags` 设置命名空间。
- 为什么改:该命名空间与其设置页已随 PR #30272 删除,管理员按副标题找不到页面,开发者按注释设
`OS_FEATURE_FLAGS_*` 也不生效。
- 风险与回滚:只改文案与注释,无代码、无 key 增删;回滚即 revert 本 PR。
-
先看:`ui/packages/i18n/src/locales/en.ts`(副标题)、`packages/spec/src/kernel/index.ts`(注释新说法)、`ui/packages/i18n/src/__tests__/console-copy-system-noun-12956.test.ts`(新守卫)。
- 两分钟验证:`cd ui/packages/i18n && pnpm exec vitest run --root ../..
packages/i18n/src/__tests__/console-copy-system-noun-12956.test.ts`,预期
21 条全绿。
- 需要你做的:无,席位落地。
## What changes
**Spec doc comments (`@objectstack/spec`, comments only, no
schema/type/export change)** — written from the live code:
`builtinSettingsManifests` in `@objectstack/service-settings` carries no
`feature_flags` manifest, and `envKeyOf` spells the env override `OS_` +
upper-cased `namespace_key`.
- `packages/spec/src/kernel/index.ts` (feature.zod removal note) FROM
"Live toggles are the `feature_flags` settings manifest (ADR-0007,
env-overridable via OS_FEATURE_FLAGS_*) and the PUBLIC_AUTH_FEATURES
registry (public-auth-features.ts) for auth gates." TO "There is no
central feature-flag namespace: a setting a plugin reads is declared on
that plugin's own settings manifest (SettingsManifestSchema, ADR-0007,
env-overridable via OS_{NAMESPACE}_{KEY}), and the capabilities a
deployment advertises to clients are the PUBLIC_AUTH_FEATURES registry
(public-auth-features.ts)."
- `packages/spec/src/kernel/public-auth-features.ts` (module docblock)
FROM "NOT to be confused with runtime rollout toggles — those live on
the `feature_flags` settings manifest (ADR-0007), not in the spec (the
former …" TO "NOT to be confused with a runtime setting — that is
declared on the settings manifest of the plugin that reads it
(ADR-0007), not in this registry; there is no central feature-flag
namespace (the former …" (rest of the sentence unchanged).
- `packages/spec/src/system/settings-manifest.zod.ts` (module docblock)
FROM "(e.g. `mail`, `branding`, `feature_flags`)" TO "(e.g. `mail`,
`branding`, `localization`)" — all three are registered namespaces.
- `content/docs/references/system/settings-manifest.mdx` regenerated by
`gen:docs` (the only artifact `check:generated` proved stale):
frontmatter `description` and body line follow the docblock.
**`console.settingsHub.subtitle` (`@object-ui/i18n`), all ten packs; no
key added or removed:**
| Pack | FROM | TO |
|:---|:---|:---|
| en | Configure your system, integrations, and feature flags. |
Configure your system and integrations. |
| de | Konfigurieren Sie Ihr System, Integrationen und Feature-Flags. |
Konfigurieren Sie Ihr System und Ihre Integrationen. |
| es | Configure su sistema, las integraciones y los indicadores de
funciones. | Configure su sistema y sus integraciones. |
| fr | Configurez votre système, vos intégrations et vos indicateurs de
fonctionnalité. | Configurez votre système et vos intégrations. |
| pt | Configure seu sistema, integrações e sinalizadores de recursos. |
Configure seu sistema e suas integrações. |
| ru | Настройте систему, интеграции и флаги функций. | Настройте
систему и интеграции. |
| ja | システム、連携、機能フラグを設定します。 | システムと連携を設定します。 |
| ko | 시스템, 연동, 기능 플래그를 구성합니다. | 시스템과 연동을 구성합니다. |
| zh | 配置系统、集成与功能开关。 | 配置系统与集成。 |
| ar | اضبط النظام والتكاملات وأعلام الميزات. | اضبط النظام والتكاملات.
|
**Pin** — a new top-level `describe` in
`ui/packages/i18n/src/__tests__/console-copy-system-noun-12956.test.ts`
(the existing console-copy pin that already enumerates
`console.settingsHub`): every pack in `builtInLocales` (floor 10) has a
string subtitle matching none of the ten languages' feature-flag terms,
plus a matcher self-check that each term catches the retired wording.
The spec docblocks are comments: no pin owed.
**Changeset** — `.changeset/30282-feature-flags-namespace-text.md`:
`patch` for `@objectstack/spec` and `@object-ui/i18n` (published, not
private), with both declaration lines.
## Verification
All readings at head `f1e4de5bd2`, worktree `objectstack-issue-30282`.
- `pnpm --filter @objectstack/spec build` → exit 0; `check:generated` →
first run named `content/docs/references/**` stale (plus a
`check:test-typecheck` "failed without diagnostics" that ran without a
heap flag; re-run alone with `NODE_OPTIONS=--max-old-space-size=4096` →
OK, ledger held); `gen:docs` → exit 0; re-run `check:generated` → exit
0, "All 14 generated artifacts are up to date".
- `pnpm --filter @object-ui/i18n test` → exit 0, Test Files 95 passed,
Tests 1460 passed / 13 skipped (`all-locales-key-parity` included).
- `pnpm --filter @object-ui/i18n type-check` → exit 0 (after building
the `@object-ui/i18n^...` closure).
- `node ui/scripts/check-i18n-en-drift.mjs` → exit 0: 1 `en` value
changed, 9 pack values followed.
- Ablation (pin): `de` subtitle restored to the old wording through
`scripts/ablation-replace.mjs` (anchor 1 → 0, blob `fb80a411` →
`b9c43ae3`) → the pin went red, 1 failed / 20 passed, `de subtitle names
no feature flags` (matched `/feature[\s-]?flags?/iu`); restore: blob
after = HEAD blob `fb80a411`, `git diff HEAD` empty.
- `node scripts/pm/dispatch-gates.mjs --commands --repo
objectstack-ai/objectstack` → 104 families, each run with its exit code
recorded; `--ran` → "104 derived, 104 run, 0 NOT-MEASURED, 0 UNRUN"
after the prerequisite re-runs below.
- `pnpm check:doc-authoring` → exit 0. eslint on the three spec files
(`--no-inline-config`) → exit 0; eslint (ui config) on the test and the
ten packs → exit 0.
<details><summary>Gate families (104) — exit codes</summary>
- 103 families exit 0 on their final run. Six first exited 3
(PREREQUISITE NOT MET: unbuilt `@objectstack/formula`,
`@objectstack/lint`, `@objectstack/client-react`,
`@objectstack/objectql`, full package build) and were re-run after
building those closures: `check:doc-formula-expressions` 0,
`check:doc-security-posture` 0, spec `check:skill-examples` 0,
`check:docs-transcript-drift` 0, `check:lean-entry-closure` 0,
`check:dual-build-cjs-loads` 0.
- `pnpm --dir ui exec vitest run scripts/` → exit 1 in this worktree: 2
failures, both in `scripts/__tests__/date-only-zone-pins-10183.test.ts`
(the forked `FormulaFunctions.dateOnlyZone-10866` control case answers
`11:00` for `03:00`). Not this diff: the diff touches neither
`packages/formula` nor `ui/packages/core`, and a control worktree at
base `aad1603cc2` with only `@objectstack/formula` built passes the same
file 29/29, both without and with this branch's patch applied. The red
follows this worktree's extra built `ui/` dists, not the source change.
CI's run of this family is the verdict.
</details>
## Acceptance notes
- Acceptance 1: the docblocks now name the live answer (the reading
plugin's own settings manifest; `PUBLIC_AUTH_FEATURES` for
deployment-advertised capabilities). Acceptance 2: the subtitle drops
feature flags in all ten packs. Acceptance 3: PR #30272 merged
2026-11-05T05:47Z.
- Every site was measured at `origin/main` `aad1603c` and was where the
card said; none had moved or been fixed.
- Open PR #30595 (renames `zh.ts` / `pt.ts`, adds a generated
`zh-Hant.ts`) had not merged at push time, so the subtitle is edited in
today's file shapes; whichever lands second carries the new subtitle
onto the other's shape. The pin enumerates `builtInLocales`, so a
`zh-Hant` pack that copies the old Chinese wording is caught.
- Left as is, outside this card:
`packages/spec/src/kernel/customization-package.test.ts` and
`packages/spec/src/system/settings-banner-translation.test.ts` use
`feature_flags` only as an arbitrary identifier in test fixtures;
`packages/spec/CHANGELOG.md` entries naming `OS_FEATURE_FLAGS_*` are
release-owned history; `skills/**` is #30275's.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01L6bhgVugtCCwBs98FeR27P
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent 6dd2ca5 commit 77c203a
16 files changed
Lines changed: 96 additions & 20 deletions
File tree
- .changeset
- content/docs/references/system
- packages/spec/src
- kernel
- system
- ui/packages/i18n/src
- __tests__
- locales
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
| 4 | + | |
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
12 | | - | |
| 12 | + | |
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
20 | | - | |
21 | | - | |
22 | | - | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
23 | 25 | | |
24 | 26 | | |
25 | 27 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
21 | | - | |
22 | | - | |
23 | | - | |
24 | | - | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
25 | 26 | | |
26 | 27 | | |
27 | 28 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
14 | | - | |
| 14 | + | |
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
67 | 67 | | |
68 | 68 | | |
69 | 69 | | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2043 | 2043 | | |
2044 | 2044 | | |
2045 | 2045 | | |
2046 | | - | |
| 2046 | + | |
2047 | 2047 | | |
2048 | 2048 | | |
2049 | 2049 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1828 | 1828 | | |
1829 | 1829 | | |
1830 | 1830 | | |
1831 | | - | |
| 1831 | + | |
1832 | 1832 | | |
1833 | 1833 | | |
1834 | 1834 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2260 | 2260 | | |
2261 | 2261 | | |
2262 | 2262 | | |
2263 | | - | |
| 2263 | + | |
2264 | 2264 | | |
2265 | 2265 | | |
2266 | 2266 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1884 | 1884 | | |
1885 | 1885 | | |
1886 | 1886 | | |
1887 | | - | |
| 1887 | + | |
1888 | 1888 | | |
1889 | 1889 | | |
1890 | 1890 | | |
| |||
0 commit comments