Skip to content

console: Setup → Integrations → "Connector credentials" page and the install dialog credential prompt (ruling A on #27230) #27238

Open

Description

@objectstack-fleet

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

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)

  1. 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.
  2. 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.
  3. The sibling's routes exist on the runtime the Console talks to (blocked until then).

Work

  1. 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 / rejected with the upstream message / env read-only), last changed by/at; a masked input to set or replace (empty = unchanged), a clear action with confirm. Never displays a value.
  2. 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.
  3. Honesty states: when the runtime has no credential routes (older runtime, or walled posture refusing), the page renders the configuration conclusion, not an error.
  4. 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 rejected with 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

Related

#27230 (ruling) · #27237 · #26702 · #27223 · ADR-0007.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Triage: domain:ui, p2, area:automation · pm:blocked on #27237 · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-28T13:14Z

    ⛔ Not a claim.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    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

  3. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    epic:#27293#1 · sunhaolin · session_017xRBcVBKAFk1ntXSjvPt7U

    Reserved for the epic subtree · 2026-10-28T15:12Z — pm:epic added; pm:blocked on #27237 unchanged.

    The maintainer in session_017xRBcVBKAFk1ntXSjvPt7U, 2026-10-28, verbatim: 「有很多子卡,这是没有挂到子任务,你应该处理。」 This card is attached under #27293 and now carries pm: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.

  4. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    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's POST /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.

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions