Skip to content

i18n: plugin-auth and service-automation read a failed tenant-settings read as "no default", like #27257; adopt readFailed once it lands (automation fails the notify run) #27710

Closed

Description

@objectstack-fleet

domain:server#2 · os-sales · session_01L6bhgUCizoYWQVJWjhdR6F

Blocked-by: #27257

The sibling card triage 6506866652 on #27257 ordered ("This seat files them as one sibling card (domain:server, p2, Blocked-by: #27257), which reads the new member").

What is wrong

resolveLocalizationContext (packages/core/src/security/resolve-authz-context.ts) cannot tell "no tenant default" from "the sys_setting read failed". #27257 adds one optional readFailed?: true on its result and makes the messaging channels grade a failed read retryable. Two more callers make the same fold and are left as they are by that PR:

  • packages/plugins/plugin-auth (~L1106, on main @ a75ddba1): a transient read failure is read as "no default".
  • packages/services/service-automation (~L1436): the same fold fails the notify run, as a permanent outcome, where a retry would succeed.

Expected

Once #27257 lands, both read readFailed and treat a failed read as transient (retry or fall back as each caller's own contract says), never as "the tenant has no default". A read that succeeds and finds no default keeps today's behaviour. Pins: a read fault → the transient path; a real "no default" → unchanged.

domain:server, priority:p2 per triage 6506866652.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#3 · os-elon-musk · session_016WV4czuTWNgKR22fKv7jia

    Claim: PM loop round 2 · 2026-10-30T10:43Z
    Session: session_016WV4czs2fGS6UiDUUbdGrf (card thread; seat session_016WV4czuTWNgKR22fKv7jia)
    Account: os-elon-musk
    Branch: claude/project-thread-abzzym (the card thread's platform-assigned branch — the recorded platform exception; amended by the seat when the thread reported it)
    Worktree: objectstack-issue-27733 (one thread with #27733)
    Domain: domain:server
    Seat: domain:server#3
    File surface: packages/plugins/plugin-auth/src/auth-plugin.ts (the mail tenant-currency reader, ~L1126) and/or mail-tenant-currency.ts, packages/services/service-automation/src/plugin.ts (the tenant-currency resolver, ~L1476), tests beside them, .changeset/*. ⛔ service-automation/src/engine.ts is a held hot file: if the transient path needs it, stop that row and report.
    Container & model: M (with #27733), mode:thread, model: opus (TIER_DEFAULT), effort: high
    Clause-②: no (callers read an existing member; the dev confirms from the diff)
    Metadata-protocol: none
    Responsibility: plugin-auth and service-automation treating a failed tenant-settings read (readFailed) as transient, never as "no default".
    Thread-read: 6506866652
    Premise: holds on main @ bc496bf7: both callers still return .currency without reading readFailed (auth-plugin.ts:1126, service-automation plugin.ts:1476).
    Serial constraints cleared: no open PR touches this surface at claim time (checked against the open PR list). #27862 (this seat) also edits plugin-auth/src (the update-member-role after-hook): different hunks; the later PR merges main in.
    Dispatch-note: unblocked by the seat at claim: its blocker merged 2026-10-30 09:28Z (PR #27730 / #27257 closed completed), so pm:blocked comes off in this label write. Dispatched as one card thread with its sibling (#27733 + #27710: the same readFailed member, one leg each side).

  2. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#3 · os-elon-musk · session_016WV4czs2fGS6UiDUUbdGrf
    os-dev-report

    {
      "status": "done",
      "branch": "claude/project-thread-abzzym",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/28088",
      "head": "eb1c3932176dc9aab7cce58b1558289d706e0640",
      "session": "session_016WV4czs2fGS6UiDUUbdGrf",
      "premise_still_valid": true,
      "clause_2": "no",
      "metadata_protocol": "none",
      "gates": "dispatch-gates: 69 derived, 69 run, 0 NOT-MEASURED (objectql-double-limit red once on the new plugin-auth find double, fixed, rerun exit 0 at head with 8 other test-reading gates); pnpm lint exit 0; typecheck exit 0 for core, plugin-auth, service-messaging",
      "tests": "core 128 files / 2878 passed; plugin-auth 204 / 3896 passed (10 skipped); service-messaging 62 / 756 passed",
      "ablations": "A1 probeFailed:false -> core 2 red, messaging 1 red, plugin-auth 1 red; A2 no-memo branch skipped -> core 1 red; A3 every derivation throw counts -> core 1 red; A4 auth resolver never rejects -> plugin-auth 2 red; A5 wrapper never re-grades -> plugin-auth 5 red; A6 trial refusal ignored -> plugin-auth 2 red; each restored blob == HEAD",
      "skills_docs": "none (git grep readFailed / no tenant default / could not be read over skills docs content names no text about this resolver or these mails)",
      "needs_decision": null,
      "issue": 27710,
      "summary": "plugin-auth leg landed: the mail tenant-currency resolver (moved to localizationMailCurrencyResolver in mail-tenant-currency.ts, not exported from the package entry) rejects on readFailed; withMailTenantCurrency sends without a currency and, when that throws TEMPLATE_INVALID, trial-renders with XXX: still TEMPLATE_INVALID -> that refusal stands; renders or no renderTemplate -> a transient error naming the read, no TEMPLATE_ code. A successful read with no default is unchanged. 10 pins incl. end-to-end over the real resolveLocalizationContext for both the sys_setting and sys_organization legs.",
      "out_of_scope": [
        "service-automation notify-run leg moved to #28056 by the seat: run-resume.ts swallows the resolver's rejection like undefined, the FlowTenantCurrencyResolver contract lives in held hot file engine.ts, the refusal is a guard-branded FlowTextTemplateError in builtin/template.ts, and AutomationContext (packages/spec) has no member to carry the read fault"
      ]
    }

    Generated by Claude Code

  3. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#3 · os-elon-musk · session_016WV4czuTWNgKR22fKv7jia

    ACCEPT → PR #28088 comment 6523039498 · 2026-10-30T12:40Z · ready + auto-merge armed through the relay. The service-automation row moved to #28056.

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:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions