You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Feature flags: all four toggles have no reader, so turning them on does nothing #30204
From a real-user walkthrough of Setup, filed on the maintainer's word: 「以上都同意,立卡」 (2026-11-05). Measured on mainb7075d9908, with the console in dev mode, unless a line says otherwise. Test app scaffolded with create-objectstack@18.3.0.
Governing text: ADR-0049 enforce-or-remove. A declared capability the runtime does not honor is an implementation gap.
What a customer sees
An administrator opens 功能开关, sees 看板泳道, 实时光标, 行内评论 and AI 助手 with a Beta badge, turns one on, saves, and looks for the feature.
Measured
packages/services/service-settings/src/manifests/feature-flags.manifest.ts declares ai_enabled, kanban_swimlanes, realtime_cursors and inline_comments. A repository-wide git grep for each key finds the manifest, one settings service test, and docs, and no code that reads the value.
The console's AI panel has its own aiAssistant handling in ui/packages/app-shell/src/layout/AppHeader.tsx, so that toggle's text promises something decided elsewhere. The toggles were not switched and watched in the UI; this finding is from the code.
Expected
Remove the four toggles, and the settings page if it is left empty. A flag comes back with the feature that reads it. The maintainer agreed to this direction in the same message.
Read fresh. All four Setup feature flags (看板泳道, 实时光标, 行内评论, AI 助手) have no reader, so turning one on does nothing. That is an ADR-0049 enforce-or-remove gap, so p2.
Fix site: service-settings (feature-flags.manifest.ts): wire each flag or remove it, and say which per flag.
Claim: PM loop round 1
Session: session_01Utp6CYVV6fcAQrNTDQRvPb (seat) · dev = project card thread session_01Utp6CZJQ8AFU2wk2a8fuhz
Account: os-bill
Branch: claude/project-thread-qzra6t (harness-pinned thread branch; platform exception to claude/issue-<n>-<slug>)
Worktree: objectstack-issue-30204
Domain: domain:server
Seat: domain:server#5
File surface: packages/services/service-settings/** (manifest, builtinSettingsManifests, the featureFlagsSettingsManifest export, translations, tests, README, the plugin's comment); packages/platform-objects/src/apps/setup-nav.contributions.ts (nav_settings_feature_flags) with its en/zh-CN/ja-JP/es-ES translations and source-hashes; docs/qa/platform-checklist/areas/platform-core.json (namespace count and list); packages/cli/README.md; comment-only lines in plugin-security/default-permission-sets.ts, service-datasource/admin-routes.ts, mcp/connect-ui.ts; content/docs/** pages naming these keys (not releases/**); one changeset. ⛔ packages/spec/**, ui/**, skills/**, docs/adr/**, .claude/**, AGENTS.md (stop on breach; explain in the report)
Container & model: S–M, mode:thread, model: default tier (opus) — dispatch-gates --tier at 5fa9375e: no path-derived mandate, effort: high
Clause-②: no (narrowing) — removes the four settable keys and the then-empty feature_flags namespace and its public export; BREAKING banner in the changeset; contract-review-tier review by the seat before the queue
Metadata-protocol: none
Responsibility: service-settings declares four feature_flags toggles that no code reads (seat reading at 5fa9375e) | none: saving a toggle changes nothing | every administrator who flips a flag in Setup
Thread-read: 6648454483
Premise: holds — the dev's measurement at 5fa9375e finds no reader of the four keys in ui/ or packages/ (AppHeader.tsx's aiAssistant is a label key; AppContent.tsx features come from /api/v1/auth/config); the cloud repo is unreadable and is said so
Serial constraints cleared: none in this surface; the Setup nav entry goes with the page so no dead link is left.
Order: project file server-seat5/dispatch-30204.md, delivered to the card thread. Surface widened 03:16Z on the dev's measurement (option A: remove the page, its nav entry and the texts that name it).
{
"issue": 30204,
"status": "done",
"branch": "claude/project-thread-qzra6t",
"pr": "https://github.com/objectstack-ai/objectstack/pull/30272",
"session": "session_01Utp6CZJQ8AFU2wk2a8fuhz",
"premise_still_valid": true,
"summary": "Premise held at 5fa9375e and again at 1d8e7702a: no code under packages/ or ui/ reads feature_flags.ai_enabled, kanban_swimlanes, realtime_cursors or inline_comments (AppHeader.tsx aiAssistant is a label key; AppContent.tsx features come from /api/v1/auth/config); the cloud repo is unreadable from here. All four removed, none wired; the page was then empty, so per the seat amendment (option A, Claim 6648715176) the feature_flags manifest, its builtinSettingsManifests entry, the featureFlagsSettingsManifest export, its four locale blocks, the Setup entry nav_settings_feature_flags with its labels and source hashes, and the texts naming it are removed. A new pin holds getManifest('feature_flags') throws UnknownNamespaceError with code SETTINGS_UNKNOWN_NAMESPACE; stored sys_setting rows and OS_FEATURE_FLAGS_* vars become inert, not cleaned up (PR body and changeset). Card assignee untouched; PR opened without assignee or review request.",
"tests": "head 1d8e7702a (after merging origin/main): service-settings Test Files 67/67, Tests 1151/1151, typecheck exit 0; platform-objects Test Files 110/110, Tests 1514/1514, typecheck + check:test-typecheck exit 0 (os-verify-lock VERDICT command-exit 0). Pre-merge a9be523f: 1143/1143 and 1514/1514. New pin: settings-service.test.ts 'no longer serves the retired feature_flags namespace'. No ablation: the diff removes declarations and moves count pins; no tested runtime behaviour changes.",
"gates": "dispatch-gates --commands on a9be523f: 95 derived families, 95 run, exit codes captured before any pipe; re-derived on 1d8e7702a: identical list. Final: 95 x exit 0; --ran reconciliation 95 derived / 95 run / 0 NOT-MEASURED / 0 UNRUN. First pass had check-adr-0087-registration exit 1 (changeset FROM line, fixed in a9be523f) and 3 x exit 3 (teardown-shape self-test on shallow clone, spec check:skill-examples, check:dual-build-cjs-loads without the workspace build), all exit 0 on 1d8e7702a after fetching the fixture commit and a full build (turbo 119/119). Also on 1d8e7702a: check:i18n, check:i18n-stale-fill, check:type-check-coverage, check-affected-docs, check:published-files, check-changeset-no-major, check-empty-changeset, check:nul-bytes, check-platform-checklist --changed-from origin/main: all exit 0. pnpm lint exit 0. CI check-runs on #30272: not yet read at report time.",
"dogfood_battery": "1d8e7702a · os-verify-lock VERDICT command-exit 1 · Test Files 1 failed / 418 passed / 3 skipped (422) · Tests 1 failed / 3491 passed / 36 skipped (3528) · failure: test/permission-set-clone-door.dogfood.test.ts 'a platform set ... copies into its shipping package's pair' (clone of member_default answers 422 INVALID_METADATA: grants on sys_comment not defined in objects). Control leg: all 19 package source files of this diff restored to origin/main, five packages force-rebuilt, same file: same failure (1 failed / 10 passed); restored to HEAD (git diff HEAD empty) and rebuilt. Red is on main, not this diff; the grant came in with 490d136f2 (#30222).",
"line_budget": "31 files, +84 / -176 (vs origin/main merge base); far under the 3000-line class (c) threshold",
"deviations": [
"The order asked for a changeset FROM -> TO line naming each removed key; check-adr-0087-registration's runtime-export-retired category requires the FROM block to name exactly the marker's operands, so the FROM line names featureFlagsSettingsManifest only and the four keys are listed in a 'Removed keys' bullet as 'removed; each had no effect'.",
"Changeset bumps service-settings and platform-objects only; the comment-only edits in mcp, plugin-security and service-datasource and the cli README line publish no behaviour change.",
"Thread-designated branch: commits carry the model-free trailer pair per AGENTS.md, not the harness's model-named trailer.",
"Full dogfood owed by the (narrowing) arm ran red on one test that is red on main (control leg above); not fixed here, outside the surface."
],
"files_changed": [
".changeset/30204-feature-flags-namespace-removed.md",
"content/docs/protocol/kernel/config-resolution.mdx",
"content/docs/ui/apps.mdx",
"docs/qa/platform-checklist/areas/platform-core.json",
"packages/cli/README.md",
"packages/mcp/src/connect-ui.ts",
"packages/platform-objects/src/apps/setup-nav.contributions.ts",
"packages/platform-objects/src/apps/translations/en.ts",
"packages/platform-objects/src/apps/translations/es-ES.source-hashes.ts",
"packages/platform-objects/src/apps/translations/es-ES.ts",
"packages/platform-objects/src/apps/translations/ja-JP.source-hashes.ts",
"packages/platform-objects/src/apps/translations/ja-JP.ts",
"packages/platform-objects/src/apps/translations/zh-CN.source-hashes.ts",
"packages/platform-objects/src/apps/translations/zh-CN.ts",
"packages/plugins/plugin-security/src/objects/default-permission-sets.ts",
"packages/services/service-datasource/src/admin-routes.ts",
"packages/services/service-settings/README.md",
"packages/services/service-settings/src/index.ts",
"packages/services/service-settings/src/manifests/feature-flags.manifest.ts",
"packages/services/service-settings/src/manifests/index.ts",
"packages/services/service-settings/src/settings-branding-posture.pin.test.ts",
"packages/services/service-settings/src/settings-help-business-words.pin.test.ts",
"packages/services/service-settings/src/settings-retired-workspace-noun.pin.test.ts",
"packages/services/service-settings/src/settings-service-plugin.ts",
"packages/services/service-settings/src/settings-service.test.ts",
"packages/services/service-settings/src/settings-visibility-declaration.pin.test.ts",
"packages/services/service-settings/src/translations/en.ts",
"packages/services/service-settings/src/translations/es-ES.ts",
"packages/services/service-settings/src/translations/ja-JP.ts",
"packages/services/service-settings/src/translations/settings-translation-coverage.test.ts",
"packages/services/service-settings/src/translations/zh-CN.ts"
],
"mcp_calls": "3 — mcp__github__issue_read (get, get_comments x2); no write tool",
"api_writes": "2 — relay pr_create (PR #30272, fw-20261105T042706Z-24ef8d, read-back identical 10974 bytes); this comment via post-stamped",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": [
"class: a · reach: public door POST permission-set clone of member_default on a booted showcase answers 422 INVALID_METADATA (grants on object sys_comment which is not defined in objects) · evidence: packages/qa/dogfood/test/permission-set-clone-door.dogfood.test.ts:238 red on 1d8e7702a and on the same tree with this diff reverted; sys_comment/sys_activity grants added to member_default by 490d136f2 (#30222) · carrier: #30108 (seat 2) · dedupe words: member_default clone sys_comment not defined, permission-set clone door 422, lock-and-clone platform set",
"carrier: seat 5 · noted, not filed: skills/objectstack-platform/references/plugin-development.md:354 names the feature_flags manifest as the home of org toggles (Skills-docs follow-up)",
"carrier: docs.objectos.ai · noted, not filed: that repo documents FEATURE_FLAGS_AI_ENABLED, now false",
"carrier: none · noted, not filed: docs/adr/0007 keeps feature_flags.ai_enabled as its worked example (ADR, outside surface)"
]
}
PR #30272 merged (977be3806); this card closed by Fixes #30204. The four feature_flags toggles, the then-empty namespace, its Setup entry and the featureFlagsSettingsManifest export are removed (ADR-0049 enforce-or-remove); stored values and OS_FEATURE_FLAGS_* are inert. Contract review delta PASS 6650443923; seat ACCEPT 6650456016. Follow-ups: #30275 (skills), #30282 (spec + ui text).
Activity
objectstack-fleet commentedon Nov 5, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: first-touch audit · p2 ·
domain:server·pm:queue· 2026-11-05T02:57Z⛔ Not a claim.
service-settings(feature-flags.manifest.ts): wire each flag or remove it, and say which per flag.Generated by Claude Code
objectstack-fleet commentedon Nov 5, 2026
domain:server#5 · os-bill · session_01Utp6CYVV6fcAQrNTDQRvPb
Claim: PM loop round 1
Session:
session_01Utp6CYVV6fcAQrNTDQRvPb(seat) · dev = project card threadsession_01Utp6CZJQ8AFU2wk2a8fuhzAccount:
os-billBranch:
claude/project-thread-qzra6t(harness-pinned thread branch; platform exception toclaude/issue-<n>-<slug>)Worktree:
objectstack-issue-30204Domain:
domain:serverSeat:
domain:server#5File surface:
packages/services/service-settings/**(manifest,builtinSettingsManifests, thefeatureFlagsSettingsManifestexport, translations, tests, README, the plugin's comment);packages/platform-objects/src/apps/setup-nav.contributions.ts(nav_settings_feature_flags) with its en/zh-CN/ja-JP/es-ES translations and source-hashes;docs/qa/platform-checklist/areas/platform-core.json(namespace count and list);packages/cli/README.md; comment-only lines inplugin-security/default-permission-sets.ts,service-datasource/admin-routes.ts,mcp/connect-ui.ts;content/docs/**pages naming these keys (notreleases/**); one changeset. ⛔packages/spec/**,ui/**,skills/**,docs/adr/**,.claude/**,AGENTS.md(stop on breach; explain in the report)Container & model:
S–M,mode:thread,model: default tier (opus) — dispatch-gates --tier at 5fa9375e: no path-derived mandate,effort: highClause-②: no (narrowing) — removes the four settable keys and the then-empty
feature_flagsnamespace and its public export; BREAKING banner in the changeset; contract-review-tier review by the seat before the queueMetadata-protocol: none
Responsibility:
service-settings declares four feature_flags toggles that no code reads (seat reading at 5fa9375e) | none: saving a toggle changes nothing | every administrator who flips a flag in SetupThread-read: 6648454483
Premise: holds — the dev's measurement at
5fa9375efinds no reader of the four keys inui/orpackages/(AppHeader.tsx'saiAssistantis a label key;AppContent.tsxfeatures come from/api/v1/auth/config); the cloud repo is unreadable and is said soSerial constraints cleared:
none in this surface; the Setup nav entry goes with the page so no dead link is left.Order: project file
server-seat5/dispatch-30204.md, delivered to the card thread. Surface widened 03:16Z on the dev's measurement (option A: remove the page, its nav entry and the texts that name it).objectstack-fleet commentedon Nov 5, 2026
domain:server#5 · os-bill · session_01Utp6CYVV6fcAQrNTDQRvPb
os-dev-report
Card thread
session_01Utp6CZJQ8AFU2wk2a8fuhz· branchclaude/project-thread-qzra6t· draft PR #30272 · head1d8e7702a{ "issue": 30204, "status": "done", "branch": "claude/project-thread-qzra6t", "pr": "https://github.com/objectstack-ai/objectstack/pull/30272", "session": "session_01Utp6CZJQ8AFU2wk2a8fuhz", "premise_still_valid": true, "summary": "Premise held at 5fa9375e and again at 1d8e7702a: no code under packages/ or ui/ reads feature_flags.ai_enabled, kanban_swimlanes, realtime_cursors or inline_comments (AppHeader.tsx aiAssistant is a label key; AppContent.tsx features come from /api/v1/auth/config); the cloud repo is unreadable from here. All four removed, none wired; the page was then empty, so per the seat amendment (option A, Claim 6648715176) the feature_flags manifest, its builtinSettingsManifests entry, the featureFlagsSettingsManifest export, its four locale blocks, the Setup entry nav_settings_feature_flags with its labels and source hashes, and the texts naming it are removed. A new pin holds getManifest('feature_flags') throws UnknownNamespaceError with code SETTINGS_UNKNOWN_NAMESPACE; stored sys_setting rows and OS_FEATURE_FLAGS_* vars become inert, not cleaned up (PR body and changeset). Card assignee untouched; PR opened without assignee or review request.", "tests": "head 1d8e7702a (after merging origin/main): service-settings Test Files 67/67, Tests 1151/1151, typecheck exit 0; platform-objects Test Files 110/110, Tests 1514/1514, typecheck + check:test-typecheck exit 0 (os-verify-lock VERDICT command-exit 0). Pre-merge a9be523f: 1143/1143 and 1514/1514. New pin: settings-service.test.ts 'no longer serves the retired feature_flags namespace'. No ablation: the diff removes declarations and moves count pins; no tested runtime behaviour changes.", "gates": "dispatch-gates --commands on a9be523f: 95 derived families, 95 run, exit codes captured before any pipe; re-derived on 1d8e7702a: identical list. Final: 95 x exit 0; --ran reconciliation 95 derived / 95 run / 0 NOT-MEASURED / 0 UNRUN. First pass had check-adr-0087-registration exit 1 (changeset FROM line, fixed in a9be523f) and 3 x exit 3 (teardown-shape self-test on shallow clone, spec check:skill-examples, check:dual-build-cjs-loads without the workspace build), all exit 0 on 1d8e7702a after fetching the fixture commit and a full build (turbo 119/119). Also on 1d8e7702a: check:i18n, check:i18n-stale-fill, check:type-check-coverage, check-affected-docs, check:published-files, check-changeset-no-major, check-empty-changeset, check:nul-bytes, check-platform-checklist --changed-from origin/main: all exit 0. pnpm lint exit 0. CI check-runs on #30272: not yet read at report time.", "dogfood_battery": "1d8e7702a · os-verify-lock VERDICT command-exit 1 · Test Files 1 failed / 418 passed / 3 skipped (422) · Tests 1 failed / 3491 passed / 36 skipped (3528) · failure: test/permission-set-clone-door.dogfood.test.ts 'a platform set ... copies into its shipping package's pair' (clone of member_default answers 422 INVALID_METADATA: grants on sys_comment not defined in objects). Control leg: all 19 package source files of this diff restored to origin/main, five packages force-rebuilt, same file: same failure (1 failed / 10 passed); restored to HEAD (git diff HEAD empty) and rebuilt. Red is on main, not this diff; the grant came in with 490d136f2 (#30222).", "line_budget": "31 files, +84 / -176 (vs origin/main merge base); far under the 3000-line class (c) threshold", "deviations": [ "The order asked for a changeset FROM -> TO line naming each removed key; check-adr-0087-registration's runtime-export-retired category requires the FROM block to name exactly the marker's operands, so the FROM line names featureFlagsSettingsManifest only and the four keys are listed in a 'Removed keys' bullet as 'removed; each had no effect'.", "Changeset bumps service-settings and platform-objects only; the comment-only edits in mcp, plugin-security and service-datasource and the cli README line publish no behaviour change.", "Thread-designated branch: commits carry the model-free trailer pair per AGENTS.md, not the harness's model-named trailer.", "Full dogfood owed by the (narrowing) arm ran red on one test that is red on main (control leg above); not fixed here, outside the surface." ], "files_changed": [ ".changeset/30204-feature-flags-namespace-removed.md", "content/docs/protocol/kernel/config-resolution.mdx", "content/docs/ui/apps.mdx", "docs/qa/platform-checklist/areas/platform-core.json", "packages/cli/README.md", "packages/mcp/src/connect-ui.ts", "packages/platform-objects/src/apps/setup-nav.contributions.ts", "packages/platform-objects/src/apps/translations/en.ts", "packages/platform-objects/src/apps/translations/es-ES.source-hashes.ts", "packages/platform-objects/src/apps/translations/es-ES.ts", "packages/platform-objects/src/apps/translations/ja-JP.source-hashes.ts", "packages/platform-objects/src/apps/translations/ja-JP.ts", "packages/platform-objects/src/apps/translations/zh-CN.source-hashes.ts", "packages/platform-objects/src/apps/translations/zh-CN.ts", "packages/plugins/plugin-security/src/objects/default-permission-sets.ts", "packages/services/service-datasource/src/admin-routes.ts", "packages/services/service-settings/README.md", "packages/services/service-settings/src/index.ts", "packages/services/service-settings/src/manifests/feature-flags.manifest.ts", "packages/services/service-settings/src/manifests/index.ts", "packages/services/service-settings/src/settings-branding-posture.pin.test.ts", "packages/services/service-settings/src/settings-help-business-words.pin.test.ts", "packages/services/service-settings/src/settings-retired-workspace-noun.pin.test.ts", "packages/services/service-settings/src/settings-service-plugin.ts", "packages/services/service-settings/src/settings-service.test.ts", "packages/services/service-settings/src/settings-visibility-declaration.pin.test.ts", "packages/services/service-settings/src/translations/en.ts", "packages/services/service-settings/src/translations/es-ES.ts", "packages/services/service-settings/src/translations/ja-JP.ts", "packages/services/service-settings/src/translations/settings-translation-coverage.test.ts", "packages/services/service-settings/src/translations/zh-CN.ts" ], "mcp_calls": "3 — mcp__github__issue_read (get, get_comments x2); no write tool", "api_writes": "2 — relay pr_create (PR #30272, fw-20261105T042706Z-24ef8d, read-back identical 10974 bytes); this comment via post-stamped", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [ "class: a · reach: public door POST permission-set clone of member_default on a booted showcase answers 422 INVALID_METADATA (grants on object sys_comment which is not defined in objects) · evidence: packages/qa/dogfood/test/permission-set-clone-door.dogfood.test.ts:238 red on 1d8e7702a and on the same tree with this diff reverted; sys_comment/sys_activity grants added to member_default by 490d136f2 (#30222) · carrier: #30108 (seat 2) · dedupe words: member_default clone sys_comment not defined, permission-set clone door 422, lock-and-clone platform set", "carrier: seat 5 · noted, not filed: skills/objectstack-platform/references/plugin-development.md:354 names the feature_flags manifest as the home of org toggles (Skills-docs follow-up)", "carrier: docs.objectos.ai · noted, not filed: that repo documents FEATURE_FLAGS_AI_ENABLED, now false", "carrier: none · noted, not filed: docs/adr/0007 keeps feature_flags.ai_enabled as its worked example (ADR, outside surface)" ] }Report taken 2026-11-05T04:28Z.
objectstack-fleet commentedon Nov 5, 2026
domain:server#5 · os-bill · session_01Utp6CYVV6fcAQrNTDQRvPb
Seat ACCEPT on PR #30272 at head
74c2ef82(contract review delta PASS 6650443923) ·pr_ready+automerge_enablesent 2026-11-05T05:24Z.Fixes #30204closes this card at merge. Follow-ups: #30275 (skills), #30282 (spec + ui text).objectstack-fleet commentedon Nov 5, 2026
domain:server#5 · os-bill · session_01Utp6CYVV6fcAQrNTDQRvPb
Landed · 2026-11-05T05:48Z
PR #30272 merged (
977be3806); this card closed byFixes #30204. The fourfeature_flagstoggles, the then-empty namespace, its Setup entry and thefeatureFlagsSettingsManifestexport are removed (ADR-0049 enforce-or-remove); stored values andOS_FEATURE_FLAGS_*are inert. Contract review delta PASS 6650443923; seat ACCEPT 6650456016. Follow-ups: #30275 (skills), #30282 (spec + ui text).