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
Settings reset: an env-pinned key keeps its stored value beneath the pin, while the reset says the namespace is back on environment/default configuration #30664
Filing gate: ③ a maintainer ruling that names this card: #30385 ruling A (Ruling confirmed on the card, maintainer 「同意」 2026-11-05T21:34Z), item 2 — "resetNamespace and the built-in reset action are not touched here … a separate p3 card; it does not block this one." Read by the seat in the cited file on main. ⛔ Not a claim. Suggested grade: p3.
Dedupe: reset env-pinned stored value, resetNamespace locked-by-env. Nearest: #30385 (the clear of an env-pinned key, PR #30448). New.
What happens
SettingsService.resetNamespace (packages/services/service-settings/src/settings-service.ts ~L3331) nulls the stored values of a namespace's keys but leaves env-locked keys untouched ("env wins over rows anyway and refuses writes"). The built-in reset action then answers "Cleared N saved value(s); environment/default configuration is back in effect." For an env-pinned key with a stored value, that value stays beneath the pin: the day the environment variable is removed, the stored value takes over again, which is the exact trap #30385 fixed for a single clear.
After PR #30448 a clear of an env-pinned key is allowed and sets its stored value to null, so the reason for skipping those keys in the reset is gone.
Claim: PM loop round 4 · 2026-11-06T02:29Z
Session: session_016WV4cytLmJxfAmgPVjUbbW
Account: os-elon-musk (the seat's linked user as GET /user answers it; the card's assignee)
Branch: claude/issue-30664-reset-clears-env-pinned
Worktree: objectstack-issue-30664
Domain: domain:server
Seat: domain:server#1
File surface: packages/services/service-settings/src/settings-service.ts (resetNamespace), packages/services/service-settings/src/settings-action-copy.ts (the reset answer, all eleven locales, only if its wording becomes false), their tests, one root .changeset/ file. ⛔ packages/spec/**, docs/adr/**, skills/**, .claude/**, the translation bundles #30512 is regenerating. Stop on breach and explain in the report
Container & model: S, mode:subagent, model: default, effort: medium
Clause-②: no
Metadata-protocol: none
Responsibility: SettingsService.resetNamespace and the built-in reset action in service-settings | resets skip env-pinned keys, leaving their stored value beneath the pin | an administrator who resets a namespace, then removes the env var and finds the old saved value back in force
Thread-read: none
Premise: holds per the card (#30385 ruling A item 2); the dev re-reads resetNamespace (~L3364) and the clear path PR #30448 opened on origin/main first
Serial constraints cleared: PR #30448 merged; the ADR-0007 D6 amendment landed (#30698). Open PR #30720 touches settings-service-plugin.ts, not these files; #30512's service-settings PRs touch its translation bundles, not settings-action-copy.ts.
Written 2026-11-06T03:20Z. PR #30793 (draft), head 9b806cbe.
{
"issue": 30664,
"status": "done",
"branch": "claude/issue-30664-reset-clears-env-pinned",
"pr": "https://github.com/objectstack-ai/objectstack/pull/30793",
"session": "session_016WV4cytLmJxfAmgPVjUbbW",
"premise_still_valid": true,
"summary": "resetNamespace now reads the stored cascade beneath an env pin (resolveStored, extracted from get() unchanged) and puts a pinned key with a stored value into the same all-null patch, which setMany lets through the pin by the PR #30448 clear path; no second env-lock bypass. Nothing in force changes; the count includes the pinned keys cleared; a pin with nothing beneath it writes nothing. The built-in reset action keeps resetCleared/resetNothing (true now) and appends a new resetStillPinned(count) sentence in all eleven locales when keys are still pinned. Audit: the reset of a pinned key records exactly what a single clear records (one reset row per ledger, newHash null, one reset change event), pinned by a test comparing the writer rows.",
"tests": "head 9b806cbe: pnpm --filter @objectstack/service-settings test -> Test Files 70 passed (70), Tests 1206 passed (1206); typecheck (tsc --noEmit, src incl. tests) exit 0; plugin-auth allowed-ip-ranges.pin + auth-settings-clear.pin (resetNamespace callers) 2 files / 39 tests passed. Ablations via scripts/ablation-replace.mjs (anchor 1->0, blob changed, restored blob == HEAD, git diff HEAD empty; tests import source): A stored=v.source -> 3 failed | 2 passed; B pinned sentence dropped -> 1 failed | 4 passed.",
"gates": "dispatch-gates --commands derived 60 for 5 paths; 59 exit 0, pnpm check:dual-build-cjs-loads exit 3 PREREQUISITE NOT MET (needs whole-workspace build) = NOT MEASURED, CI Lint & Repo Gates carries it; --ran with exit codes: 60 accounted, 59 run, 1 NOT-MEASURED. pnpm lint exit 0. CI check-runs: in_progress at report time.",
"line_budget": "191 changed lines (+182 / -9), 5 files, under the 3000 threshold",
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"files_changed": [
".changeset/30664-reset-clears-env-pinned.md",
"packages/services/service-settings/src/settings-service.ts",
"packages/services/service-settings/src/settings-action-copy.ts",
"packages/services/service-settings/src/settings-service.test.ts",
"packages/services/service-settings/src/settings-copy-locale.test.ts"
],
"deviations": [
"Copy changed although resetCleared/resetNothing stayed true: the card's Expected asks the answer to say when keys are still pinned, so a new resetStillPinned sentence was added in all eleven locales (existing sentences untouched).",
"check:dual-build-cjs-loads NOT MEASURED locally (exit 3, no whole-workspace build); declared to CI."
],
"contract": "Clause-②: no; Metadata-protocol: none (re-derived: a reset clears more stored rows, nothing accepted is refused, no export/type/error code/route change). Published surface: the reset action's message (toast and HTTP action answer) gains one sentence only when keys are still pinned.",
"mcp_calls": "0",
"api_writes": "2 relay writes — pr_create (POST /repos/objectstack-ai/objectstack/pulls, draft, no labels, no assignees) and this comment (post-stamped)",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": []
}
Landed · 2026-11-06T04:02Z · PR #30793 merged by the queue as a255a62fe5 (2026-11-06T04:02:20Z). A namespace reset now clears the value stored beneath an env pin, and the answer says how many keys are still pinned. This card is closed by Fixes. pm:dispatched removed.
Activity
objectstack-fleet commentedon Nov 5, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: audit · p3 kept ·
domain:server· 2026-11-05T21:55Z⛔ Not a claim.
Generated by Claude Code
objectstack-fleet commentedon Nov 6, 2026
domain:server#1 · os-elon-musk · session_016WV4cytLmJxfAmgPVjUbbW
Claim: PM loop round 4 · 2026-11-06T02:29Z
Session:
session_016WV4cytLmJxfAmgPVjUbbWAccount:
os-elon-musk(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-30664-reset-clears-env-pinnedWorktree:
objectstack-issue-30664Domain:
domain:serverSeat:
domain:server#1File surface:
packages/services/service-settings/src/settings-service.ts(resetNamespace),packages/services/service-settings/src/settings-action-copy.ts(the reset answer, all eleven locales, only if its wording becomes false), their tests, one root.changeset/file. ⛔packages/spec/**,docs/adr/**,skills/**,.claude/**, the translation bundles #30512 is regenerating. Stop on breach and explain in the reportContainer & model:
S,mode:subagent,model: default,effort: mediumClause-②: no
Metadata-protocol: none
Responsibility:
SettingsService.resetNamespaceand the built-in reset action inservice-settings| resets skip env-pinned keys, leaving their stored value beneath the pin | an administrator who resets a namespace, then removes the env var and finds the old saved value back in forceThread-read: none
Premise: holds per the card (#30385 ruling A item 2); the dev re-reads
resetNamespace(~L3364) and the clear path PR #30448 opened onorigin/mainfirstSerial constraints cleared: PR #30448 merged; the ADR-0007 D6 amendment landed (#30698). Open PR #30720 touches
settings-service-plugin.ts, not these files; #30512's service-settings PRs touch its translation bundles, notsettings-action-copy.ts.objectstack-fleet commentedon Nov 6, 2026
domain:server#1 · os-elon-musk · session_016WV4cytLmJxfAmgPVjUbbW
os-dev-report
Written 2026-11-06T03:20Z. PR #30793 (draft), head
9b806cbe.{ "issue": 30664, "status": "done", "branch": "claude/issue-30664-reset-clears-env-pinned", "pr": "https://github.com/objectstack-ai/objectstack/pull/30793", "session": "session_016WV4cytLmJxfAmgPVjUbbW", "premise_still_valid": true, "summary": "resetNamespace now reads the stored cascade beneath an env pin (resolveStored, extracted from get() unchanged) and puts a pinned key with a stored value into the same all-null patch, which setMany lets through the pin by the PR #30448 clear path; no second env-lock bypass. Nothing in force changes; the count includes the pinned keys cleared; a pin with nothing beneath it writes nothing. The built-in reset action keeps resetCleared/resetNothing (true now) and appends a new resetStillPinned(count) sentence in all eleven locales when keys are still pinned. Audit: the reset of a pinned key records exactly what a single clear records (one reset row per ledger, newHash null, one reset change event), pinned by a test comparing the writer rows.", "tests": "head 9b806cbe: pnpm --filter @objectstack/service-settings test -> Test Files 70 passed (70), Tests 1206 passed (1206); typecheck (tsc --noEmit, src incl. tests) exit 0; plugin-auth allowed-ip-ranges.pin + auth-settings-clear.pin (resetNamespace callers) 2 files / 39 tests passed. Ablations via scripts/ablation-replace.mjs (anchor 1->0, blob changed, restored blob == HEAD, git diff HEAD empty; tests import source): A stored=v.source -> 3 failed | 2 passed; B pinned sentence dropped -> 1 failed | 4 passed.", "gates": "dispatch-gates --commands derived 60 for 5 paths; 59 exit 0, pnpm check:dual-build-cjs-loads exit 3 PREREQUISITE NOT MET (needs whole-workspace build) = NOT MEASURED, CI Lint & Repo Gates carries it; --ran with exit codes: 60 accounted, 59 run, 1 NOT-MEASURED. pnpm lint exit 0. CI check-runs: in_progress at report time.", "line_budget": "191 changed lines (+182 / -9), 5 files, under the 3000 threshold", "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm", "files_changed": [ ".changeset/30664-reset-clears-env-pinned.md", "packages/services/service-settings/src/settings-service.ts", "packages/services/service-settings/src/settings-action-copy.ts", "packages/services/service-settings/src/settings-service.test.ts", "packages/services/service-settings/src/settings-copy-locale.test.ts" ], "deviations": [ "Copy changed although resetCleared/resetNothing stayed true: the card's Expected asks the answer to say when keys are still pinned, so a new resetStillPinned sentence was added in all eleven locales (existing sentences untouched).", "check:dual-build-cjs-loads NOT MEASURED locally (exit 3, no whole-workspace build); declared to CI." ], "contract": "Clause-②: no; Metadata-protocol: none (re-derived: a reset clears more stored rows, nothing accepted is refused, no export/type/error code/route change). Published surface: the reset action's message (toast and HTTP action answer) gains one sentence only when keys are still pinned.", "mcp_calls": "0", "api_writes": "2 relay writes — pr_create (POST /repos/objectstack-ai/objectstack/pulls, draft, no labels, no assignees) and this comment (post-stamped)", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [] }objectstack-fleet commentedon Nov 6, 2026
domain:server#1 · os-elon-musk · session_016WV4cytLmJxfAmgPVjUbbW
Landed · 2026-11-06T04:02Z · PR #30793 merged by the queue as
a255a62fe5(2026-11-06T04:02:20Z). A namespace reset now clears the value stored beneath an env pin, and the answer says how many keys are still pinned. This card is closed byFixes.pm:dispatchedremoved.