Repository navigation
console: Setup → Integrations → "Connector credentials" page and the install dialog credential prompt (ruling A on #27230) #27238
Description
Filing gate ③ (maintainer ruling). Ruled on #27230, letter A, comment 6468327468, 2026-10-28; the maintainer's words in the session thread, verbatim: 「同意」. This is the Console half; the server half (object, resolver chain, REST surface, install-local answer) is #27237 (the sibling card filed in the same batch).
Filed by session_01J8VVAjRKqdoEYQ4hXxtBuf. ⛔ Not a claim. Lane suggestion: domain:ui (ui/packages/app-shell, the Setup Integrations group and the marketplace install dialog). Triage sets labels and priority. Blocked-by: #27237 (the server card's REST surface).
Business reason. The customer's administrator who installs an app holds the vendor key and has no server access on a hosted environment. Today there is no place in the Console to supply the credential a connector declares, so the app's integration stays dark. This card is that place: one page listing every declared credential with its status, and a prompt at install time.
Who acts. The domain:ui seat, against the sibling's routes. Readers: administrators; the docs page for Setup.
Dedupe: as #27230 (two searches, 2026-10-28, nothing open).
Governing text
- [Decision] Where a customer administrator supplies a declarative connector credential: a platform credentials page over an encrypted object, an app-shipped settings manifest, env-only as today, or the OAuth connection record #27230 ruling comment 6468327468: "Setup → Integrations gains a 'Connector credentials' page listing every ref the installed apps declare with its connector and status" and "install-local prompts for the missing refs of the package being installed and lets the administrator skip".
- cloud ADR-0009 as restated in
packages/cloud-connection/src/marketplace-ui.ts: a capability's nav entry lives and dies with the capability — the page is contributed by the automation service's UI bundle (theMARKETPLACE_*_UI_BUNDLEshape), not hard-coded in the shell. - ADR-0007 render rules: secret inputs are masked; write of an empty value means "don't change".
- platform-core.marketplace-console-honesty (checklist): nav entries render the configuration conclusion, never a red "failed to load".
Protocol statement. Metadata-protocol: none. Skills-docs: follow-up owed — an administrator page under content/docs (Setup → Integrations → Connector credentials: what the list shows, env-sourced rows, rejected status, skipping at install).
Premises (each with a re-check)
- Setup's Integrations group exists and takes plugin-contributed entries. Re-check:
git grep -n "group_integrations\|Integrations" origin/main -- packages/platform-objects/src/apps/setup-nav.contributions.ts. - The marketplace install dialog is
MarketplacePackagePage's install dialog (ui/packages/app-shell/src/console/marketplace/). Re-check:git grep -n "install" origin/main -- ui/packages/app-shell/src/console/marketplace/MarketplacePackagePage.tsx. - The sibling's routes exist on the runtime the Console talks to (blocked until then).
Work
- Connector credentials page under Setup → Integrations, contributed by the automation service's UI bundle: one row per declared ref — ref, connector, package, status (
set/missing/rejectedwith the upstream message /envread-only), last changed by/at; a masked input to set or replace (empty = unchanged), a clear action with confirm. Never displays a value. - Install dialog: after the package's manifest is resolved and before install, a "Credentials" step listing the refs the package declares that are missing, each with a masked input and a "skip for now" affordance; skipped refs are shown on the result screen with a link to the page.
- Honesty states: when the runtime has no credential routes (older runtime, or walled posture refusing), the page renders the configuration conclusion, not an error.
- Docs: the administrator page named in
Skills-docs:.
Acceptance
- Install HotCRM on a fresh environment through the Console with no env vars: the dialog shows the Slack ref as missing; fill it; the connector is ready on the next reconcile without restart; the page shows
set, by whom, when. - Skip at install; the page shows
missing; set it later; same result. - A wrong key: page shows
rejectedwith the upstream message; correcting it clears the state. - With the ref in env: the row reads
env, input disabled. - No value ever rendered, in the DOM or in network responses.
Out of scope
- OAuth "Connect" flows: connectors: outbound OAuth in the open tier — connection-scoped authorization-code / client-credentials / app-credential tokens, refreshed per dispatch, for the openapi, mcp and rest providers #26702's Console follow-up.
- App-shipped settings pages (option B): its own card later.
Related
#27230 (ruling) · #27237 · #26702 · #27223 · ADR-0007.
Generated by Claude Code
Activity
objectstack-fleet commentedon Oct 28, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Triage:
domain:ui, p2,area:automation·pm:blockedon #27237 · triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-28T13:14Z⛔ Not a claim.
sys_connector_credential+ open-tier resolver chain (env → credential object → vault), reconcile on credential change, install-local prompt for missingcredentialRefs (ruling A on #27230) #27237 (domain:server, p1, dispatched).sys_connector_credential) is on connectors:sys_connector_credential+ open-tier resolver chain (env → credential object → vault), reconcile on credential change, install-local prompt for missingcredentialRefs (ruling A on #27230) #27237, which is p1 under 「协议新增定 p1」. This card adds UI only.sys_connector_credential+ open-tier resolver chain (env → credential object → vault), reconcile on credential change, install-local prompt for missingcredentialRefs (ruling A on #27230) #27237: the page needs that card's REST routes.packages/cloud-connection). It never shows a stored value, and writing an empty value leaves the credential unchanged (ADR-0007). It stays in objectstack: the ADR is cited for shape, and no cloud-repository change is asked for.priority:p2,domain:ui,area:automation,pm:blocked.Generated by Claude Code
objectstack-fleet commentedon Oct 28, 2026
Part of #27293 (E2 credential hand-off) · 2026-10-28T15:01Z
Epic link on the maintainer's ruling 「是否建议立专题卡统一处理。」→「同意」 (2026-10-28,
session_01J8VVAjRKqdoEYQ4hXxtBuf). Role in the chain: the Console half — credentials page and install dialog step; Blocked-by #27237 stands. Lane claims and dispatch proceed as triage set them; the epic PM seat (epic:#27293) tracks this card and reserves only what it drives in order. ⛔ Not a claim.Generated by Claude Code
objectstack-fleet commentedon Oct 28, 2026
epic:#27293#1 · sunhaolin · session_017xRBcVBKAFk1ntXSjvPt7U
Reserved for the epic subtree · 2026-10-28T15:12Z —
pm:epicadded;pm:blockedon #27237 unchanged.The maintainer in
session_017xRBcVBKAFk1ntXSjvPt7U, 2026-10-28, verbatim: 「有很多子卡,这是没有挂到子任务,你应该处理。」 This card is attached under #27293 and now carriespm:epic: other seats' candidate reads skip it; the epic PM claims it with the full claim protocol when it dispatches. ⛔ Not a claim, ⛔ not a dispatch.objectstack-fleet commentedon Oct 28, 2026
Cloud ask (objectstack-ai/cloud#3352) (2026-10-28T15:41Z)
On a hosted environment, the Console installs a package through
/cloud-connection/install. That call reaches the cloud control plane'sPOST /cloud/environments/:id/install-package, not install-local (MarketplacePage.tsx:462-474,MarketplacePackagePage.tsx:94-105). So a prompt fed by install-local's answer (#27237 item 5) never appears on hosted environments, and the triage note "no cloud change required" does not hold for them.Ask: could the install dialog's credential step read the environment's credential-refs route (the #27237 contract) after any install completes, whether hosted or local, instead of reading it off the install answer? Then both paths get the prompt with no cloud change. If that does not fit this card, please say so here, and cloud#3352 will make the control plane's install answer carry the refs in #27237's shape.