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
cli: one-shot secret paths (os secret rewrap, one-shot settings) still build their own LocalCryptoProvider, so they cannot open what os serve sealed with a registered provider #31007
Filing gate: ① a named location, from the contract review of PR #30993 (record 6689701608, should-fix S2) and the dev report on #30948 (comment 6689416308, out-of-scope finding). ⛔ Not a claim.
PR #30993 makes os serve seal secret fields with the CryptoProvider a plugin registers (platform half of objectstack-ai/cloud#3573, customer-managed keys). The one-shot CLI paths still construct their own LocalCryptoProvider: packages/cli/src/commands/one-shot-settings.ts and os secret rewrap. On a deployment whose plugin registers a KMS-backed provider, those commands cannot open what serve sealed, and a rewrap would re-seal under the local key.
Wanted: the one-shot paths pick the provider the same way serve does after #30993 (one registered provider, else LocalCryptoProvider with the same production refusal; two registrations refused, both named), or refuse clearly when a provider is declared but the one-shot path cannot boot it. Tests mirror the #30993 ones.
Also noted, outside the door: installed plugins sit outside #30993's declaration check.
p2 as suggested. Lane domain:server (packages/cli). It is part of cloud#3573's carrier chain, but its own grade stays p2: a CLI path, not the serve path the maintainer's p1 covers.
⛔ Not a claim: this stays with domain:server. It is a public card about code that has not shipped yet (#30993 is open), so it is not held as a finding. The security seat will check two rules at contract review:
Fail closed. When a provider is declared or registered and a one-shot path cannot boot it, the command refuses and names the provider. It never falls back to the local key for that deployment.
No downgrade.os secret rewrap and one-shot writes never seal under a different or weaker key than serve uses. A rewrap that cannot reach the deployment's provider writes nothing.
Tests should include the refusal case: a provider is declared, the one-shot path can't load it, and the stored values come out byte-equal.
Claim: PM loop round 1 · 2026-11-07T17:17Z
Session: session_01FEkQ5kDtnUcfoZfMJqLNWd (card thread, dev) · seat session_01FEkQ5o8PE7ZtVjcor51wBZ
Account: os-project-manager
Branch: claude/project-thread-3ca9rv
Worktree: objectstack-issue-31007
Domain: domain:server
Seat: domain:server#5
File surface: packages/cli/src/utils/one-shot-settings.ts, packages/cli/src/commands/secret/rewrap.ts, the provider-selection shared with serve + tests, root .changeset/
Container & model: M, mode:thread, model: default tier (dispatch-gates --tier: no path-derived mandate), effort: thread default (order asked xhigh; the coordinator sets effort only on the maintainer's word)
Clause-②: no — fail-closed refusals are deliberate refusals; a new ledger error code would make it yes (the dev reports it)
Metadata-protocol: none
Responsibility: packages/cli one-shot paths (objectstack) | serve selection from #30993 covers the serve path only | any deployment whose plugin registers a non-local CryptoProvider
Thread-read: 6709690934
Premise: holds: one-shot-settings.ts still builds LocalCryptoProvider on origin/mainbd5a443c; Blocked-by: #30948 closed
Serial constraints cleared: none — marchtian's #31139 is in packages/cli on os diff files, disjoint
Scope: Fixes #31007. Security read 6690506028 (fail closed, no downgrade) is acceptance. Order: /mnt/project-files/pm-orders/server/order-31007.md. Summons: the maintainer's 「server 再开两个座位」「并发都是5」 (this project, 2026-11-07); grading per 「定级你可以自己决定」 is triage's here (graded on the card).
Activity
objectstack-fleet commentedon Nov 6, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: audit · p2 ·
domain:server·pm:blocked· 2026-11-06T16:53Z⛔ Not a claim.
one-shot-settings.ts,os secret rewrap) build their ownLocalCryptoProvider. Once PR feat(cli):os serveseals secrets with the crypto provider a plugin registers #30993 letsos serveseal with a registered provider, these commands cannot open what serve sealed, and a rewrap would re-seal under the local key. From PR feat(cli):os serveseals secrets with the crypto provider a plugin registers #30993's contract review (S2).domain:server(packages/cli). It is part of cloud#3573's carrier chain, but its own grade stays p2: a CLI path, not the serve path the maintainer's p1 covers.os serveseals secrets with the crypto provider a plugin registers #30993 (card serve: let a plugin supply the ICryptoProvider for secret fields; today serve installs LocalCryptoProvider after every plugin hook, so a KMS-backed provider (cloud#3573) cannot be mounted #30948) is still open.Generated by Claude Code
objectstack-fleet commentedon Nov 6, 2026
security#1 · os-tesla · session_01L9qibvynRbCtMndW8EHNGc
Security read · 2026-11-06T16:59Z
⛔ Not a claim: this stays with
domain:server. It is a public card about code that has not shipped yet (#30993 is open), so it is not held as a finding. The security seat will check two rules at contract review:os secret rewrapand one-shot writes never seal under a different or weaker key thanserveuses. A rewrap that cannot reach the deployment's provider writes nothing.Tests should include the refusal case: a provider is declared, the one-shot path can't load it, and the stored values come out byte-equal.
Generated by Claude Code
objectstack-fleet commentedon Nov 7, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: unblock ·
pm:blocked→pm:queue· 2026-11-07T16:17Z⛔ Not a claim.
Blocked-by:target is closed, re-read now: serve: let a plugin supply the ICryptoProvider for secret fields; today serve installs LocalCryptoProvider after every plugin hook, so a KMS-backed provider (cloud#3573) cannot be mounted #30948 (closed completed 2026-11-06T18:02Z).Generated by Claude Code
objectstack-fleet commentedon Nov 7, 2026
domain:server#5 · os-project-manager · session_01FEkQ5o8PE7ZtVjcor51wBZ
Claim: PM loop round 1 · 2026-11-07T17:17Z
Session:
session_01FEkQ5kDtnUcfoZfMJqLNWd(card thread, dev) · seatsession_01FEkQ5o8PE7ZtVjcor51wBZAccount:
os-project-managerBranch:
claude/project-thread-3ca9rvWorktree:
objectstack-issue-31007Domain:
domain:serverSeat:
domain:server#5File surface:
packages/cli/src/utils/one-shot-settings.ts,packages/cli/src/commands/secret/rewrap.ts, the provider-selection shared withserve+ tests, root.changeset/Container & model: M,
mode:thread,model: default tier(dispatch-gates --tier: no path-derived mandate),effort: thread default(order asked xhigh; the coordinator sets effort only on the maintainer's word)Clause-②: no — fail-closed refusals are deliberate refusals; a new ledger error code would make it
yes(the dev reports it)Metadata-protocol: none
Responsibility:
packages/clione-shot paths (objectstack) |serveselection from #30993 covers the serve path only | any deployment whose plugin registers a non-local CryptoProviderThread-read: 6709690934
Premise: holds:
one-shot-settings.tsstill buildsLocalCryptoProvideronorigin/mainbd5a443c;Blocked-by: #30948closedSerial constraints cleared: none — marchtian's #31139 is in
packages/clionos difffiles, disjointScope: Fixes #31007. Security read 6690506028 (fail closed, no downgrade) is acceptance. Order:
/mnt/project-files/pm-orders/server/order-31007.md. Summons: the maintainer's 「server 再开两个座位」「并发都是5」 (this project, 2026-11-07); grading per 「定级你可以自己决定」 is triage's here (graded on the card).