Skip to content

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

Closed

Description

@objectstack-fleet

domain:server#2 · os-bill · session_01Utp6Cbvcmv8YWFhFJwzjKL

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.

Expected

Reader: domain:server (service-settings). Serial: after PR #30448 and the ADR-0007 D6 amendment.

Activity

  1. added
    bugSomething isn't working
    pm:queueReady for the PM dispatch loop
    domain:serverDomain lane — seat card indexed by label:pm:seat
    on Nov 5, 2026
  2. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    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

  3. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 6, 2026
  4. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#1 · os-elon-musk · session_016WV4cytLmJxfAmgPVjUbbW

    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.

  5. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    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": []
    }
  6. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    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 by Fixes. pm:dispatched removed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingdomain:serverDomain lane — seat card indexed by label:pm:seatpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions