Skip to content

automation: a cloned packaged flow reaches no Studio surface — the clone is stored with no package, and every Studio Automations rail lists only package-scoped flows #21332

Description

@objectstack-fleet

QA-source: #21330 · automation.packaged-flow-clone-contract · acceptance[6]

What fails

ADR-0126 §7.1 makes a clone of a packaged flow "an ordinary org/install-owned flow", and §1.3 / the Setup › Packaged automation page promise it is edited in Studio ("Editing happens in Studio"). On 17.6.0 (617f25f8, Console pin 31971ff1e28f) the clone is created, survives a restart and dispatches, but no Studio surface lists or opens it.

Reproduction (stock showcase, admin)

  1. POST /api/v1/automation/showcase_urgent_task_alert/clone {"name":"qa_urgent_alert_clone","label":"QA urgent alert clone"} → 200, status: draft.
  2. POST /api/v1/data/sys_metadata/query {"where":{"name":"qa_urgent_alert_clone"}} → the row has package_id: null, scope: platform.
  3. GET /api/v1/meta/flow?package=com.example.showcase → 30 flows, clone absent. Bare GET /api/v1/meta/flow → 31 flows, clone present.
  4. Console /_console/studio → "No writable packages yet"; the only installed entry is the read-only showcase package. /_console/studio/com.example.showcase/automations lists the 30 packaged flows, not the clone. The deep link …/automations?surface=flow%3Aqa_urgent_alert_clone redirects to another flow.
  5. Expected: the clone appears on a Studio Automations rail (or the clone lands somewhere Studio can open). Actual: unreachable from Studio.

Reproduced on two fresh boots by the runner and once more by an independent verifier (also via a clone created from the Setup page's dialog).

Mechanism

  • The clone arm strips _packageId / _provenance on purpose (packages/runtime/src/flow-clone.ts) and persists a package-less row.
  • Studio's Automations rail is package-scoped at the pin: objectui StudioDesignSurface.tsx → loadPackageSurfaces(client, 'flow', packageId) (both client.list(type, {packageId}) and listDrafts({packageId, type})); Studio has only /studio, /studio/:packageId, /studio/:packageId/:tab (apps/console/src/components/StudioRoute.tsx); the landing lists writable and installed packages only.
  • So a package-less flow matches no rail.

Notes

Full run evidence: #21330.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade — bug · priority:p2 · repo:objectui · area:studio · pm:queue. Ruling: Studio surfaces package-less flows. The clone stays org-owned, as ADR-0126 §7.1 says

    Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-02T05:59Z. ⛔ Not a claim, ⛔ not a dispatch.

    Why p2. ADR-0126 promises that a clone is edited in Studio, and the clone is unreachable there. The engine half works, and nothing is lost.

    Ruling: the Studio arm, not the package arm (triage's, from the accepted text; overturnable by the maintainer).

    • ADR-0126 §7.1 makes the clone "an ordinary org/install-owned flow", and flow-clone.ts strips provenance on purpose. So the clone correctly has no package, and moving it into one would contradict the ADR.
    • The missing piece is the authoring surface. Studio gains a rail, or an entry, for package-less (org/install-owned) flows, and the deep link opens them.

    Routing. The fix lands in objectui (StudioDesignSurface.tsx, StudioRoute.tsx), so repo:objectui, with no domain:* here. The claim files objectui's card (category ④), citing this ruling. This card is the coordination record, and it closes when that lands and the checklist clause (automation.packaged-flow-clone-contract acceptance[6]) passes.


    Generated by Claude Code

  2. added
    area:studioChanging a running app without code — authoring, publish, docs and the portal
    bugSomething isn't working
    on Oct 2, 2026
  3. objectstack-fleet commented on Oct 3, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: moved to objectstack-ai/objectui#11553, where the fix lands. Closed duplicate

    Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-03T14:03Z. ⛔ Not a claim, ⛔ not a dispatch.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:studioChanging a running app without code — authoring, publish, docs and the portalbugSomething isn't workingpriority:p2Medium: important, M3repo:objectui

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions