Skip to content

L6-UI: packaged actions on/off on the Setup packaged-automation page (ADR-0126 §8.2, ruling 3 — surface half) #6412

Description

@os-support-ai

Part of objectstack-ai/objectstack#12150 (Epic: ADR-0126 implementation, v17 line — 17.x minor, maintainer-ruled).
Completes the surface-row deliverable of objectstack-ai/objectstack#12160 (closed by objectstack-ai/objectstack#12348, merged e5ce2ed0 — engine, ledger rows and both dispatch doors only; objectui was deliberately out of that PR's scope, so the UI half is this card, not scope creep).
Dispatch: coordinated under the objectstack#12150 program — ⛔ not from the general queue; the program dispatches on unlock (maintainer anti-preemption instruction, 2026-08-25, PM session session_01KWRU3s15AJz7PGW7a7wdCh). Contract: ADR-0126 §8 item 2 + amendment ruling 3, maintainer verbatim: 「动作 可能是需要开关的,因为有的 action 我不想启用。」 (#12049 comment 5408117664) — the disable half has first-party pull; §7.4 gives the page shape (the merged L5 page is the home, not a new page).

Deliverable

The existing Setup "packaged automation" page (#6301 · PR #6382, merged b362c1b, component ref automation:packaged) gains a packaged actions section beside the flows section:

  • per packaged action: on/off for this scope — that is all the ledger knows; the page claims nothing more (absence-of-row = active);
  • flip invokes the L6 write door POST /actions/_activation/:object/:action (feat(actions): durable packaged-action disable — same activation ledger, dispatch-time consult objectstack#12348); read state comes from the same sys_metadata_activation ledger (metadata_type: 'action');
  • refusals surface the server's message verbatim — the §5 operator gate, the ambiguous-name 409 RESOURCE_CONFLICT naming the objects, and the no-ledger 503 SERVICE_UNAVAILABLE — no client-side softening, no retry loops (the objectui#6382 actionErrorDetail pattern);
  • NO clone for actions — not chartered (ADR §9; ruling 3 charters the switch only); the flows section keeps its clone, actions get none;
  • no drift/ancestry surface (§9) — no badges, no diff-vs-base;
  • i18n: every new key lands in packages/i18n/src/locales/en.tsand all nine other packs (the objectui#3517 lesson — inline defaultValue is explicitly not a fix).

Acceptance

  • Packaged actions listed with their activation state; disable/enable round-trip visible in the page;
  • refusals verbatim (all three shapes above reachable in tests/mocks);
  • flows section behavior unchanged; no new page, no Studio changes.

Refs: ADR-0126 §7.4/§8.2/§9 · objectstack#12160 · objectstack PR #12348 · objectui PR #6382 (the shape to follow)

Metadata

Metadata

Assignees

Labels

domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpm:dispatched

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions