Skip to content

Studio: "New similar" on a flow over the clone door — the copy lands inactive in <base>.custom or the open writable package; Setup's clone link follows it #28567

Closed

Description

@objectstack-fleet

epic:#28130#1 · hotlong · session_040dfd80c4c9411b895c698e785a6848

Filing gate: ④ child of epic #28236 (P2, cut 2026-11-01 on the maintainer's 「四项提速措施全部按推荐执行」, schedule reviewed) · plan of record: ADR-0146 Rollout P2 "N-22 Studio 'new similar' on a flow"; Q6 「全部同意」 (clone kept only as "new similar" into .custom). ⛔ Not a claim.

Blocked-by: #28149

Part of #28236 (P2, child N-22) · governs: ADR-0146 D4 (clone survives only as "new similar"), Q6, ADR-0126 §7.1 (a new machine name is mandatory) · lane: domain:ui · size: S.

Business reason. An admin wants a second flow like one of HotCRM's, for another rule, without changing HotCRM's. Today the only copy is Setup's clone, and the copy belongs to no package. With this card Studio offers "New similar" on the flow. The copy lands in hotcrm.custom, off until the admin turns it on.

Measured (35b178bd0a).

  • Studio offers no copy of a flow. ui/packages/app-shell/src/views/studio-design/FlowItemMoreMenu.tsx has Delete only, drawn for a writable package (StudioDesignSurface.tsx:9725).
  • POST /api/v1/automation/:name/clone takes a new name only. setup/PackagedAutomationPage.tsx is its only caller. Its result link "Open the clone in Studio" goes to the package-less scope (studioOrgScopePath, :573–578).
  • N-21 (Flow clone door → "new similar": the copy lands in a writable target package, by default the paired <base>.custom, never package-less #28149, waiting on N-13) changes the door:
    • a given target must be writable, with the flow's objects in its closure;
    • an omitted target means the source's <base>.custom, ensured;
    • the copy is written inactive, and the response says so.
      The response's exact shape is not settled yet.

Wanted.

  1. "New similar" in the flow's menu, on a read-only package's flow and on a writable package's flow. It asks for a new machine name (mandatory) and a label.
  2. On a read-only base, no target is sent and the door picks the pair. On a writable package, the target is the open package.
  3. The server's sentence that the copy is inactive is shown verbatim. A 409 (name taken) and every other refusal are shown verbatim.
  4. On success Studio opens the copy where it lives: the pair, or the base's surface once N-19 folds the pair.
  5. Setup's "Open the clone in Studio" opens the copy's package, read from the clone response, not the package-less scope — a rider asks Flow clone door → "new similar": the copy lands in a writable target package, by default the paired <base>.custom, never package-less #28149 to carry this one line in its own PR; this card checks it and re-points the link only if that PR did not.
  6. No lineage is drawn: no "based on" and no link back (ADR-0126 §9, second bullet).

Tests. On a read-only base, the request carries no target and the copy opens in the pair. On a writable package, the target is the open package. The inactive sentence is shown as sent. A 409 is shown verbatim and the dialog stays open. Setup's result link carries the copy's package. Each item has an ablation.

Release safety. Safe on its own with N-21 merged (Blocked-by #28149). Between N-21 and this card, Setup's result link would point at the package-less scope, where the copy no longer is; the rider on #28149 closes that in N-21's own PR, and item 5 is the check.

Not here. The door (N-21). Overriding a flow under its own name (N-18). Permission-set "new similar" (N-20b). Retiring Setup › Packaged automation (N-28).

Dedupe. objectui#13270 (the clone result's offers, Setup side). Searched new similar flow studio: only #28149 and the epic.

Links back: #28236, #28149, ADR-0146 D4, ADR-0126 §7.1, §9.


Generated by Claude Code

Activity

  1. added
    enhancementNew feature or request
    priority:p1High: required for production / M2
    area:studioChanging a running app without code — authoring, publish, docs and the portal
    on Nov 1, 2026
  2. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y

    Unblocked · 2026-11-01T11:50Z · pm:blocked → pm:queue


    Generated by Claude Code

  3. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y

    Claim: PM loop round 6 · 2026-11-01T11:56Z
    Session: session_01QsR2jSCZAioSyympShqoHq (card thread, os-dev); dispatched by seat session session_01QsR2jR7ZFkpqmm4U8S1f9y
    Account: zhuangjianguo
    Branch: claude/project-thread-la2x0b (platform-assigned to the card thread; it can push only this branch)
    Worktree: objectstack-issue-28567
    Domain: domain:ui
    Seat: domain:ui#4
    File surface: ui/packages/app-shell/src/views/studio-design/FlowItemMoreMenu.tsx, its call site in StudioDesignSurface.tsx, a "New similar" dialog, setup/PackagedAutomationPage.tsx (the clone result link, only if f23e0512 did not re-point it), their tests, and studio i18n strings (stop on breach; explain in the report)
    Container & model: S, mode:thread, model: default tier (dispatch-gates --tier: no path-derived mandate), effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: Studio offers no copy of a flow and Setup's clone result link opens the package-less scope | the clone door lands the copy switched off in a writable target or <base>.custom since #28149 (f23e0512) | an admin who wants a second flow like HotCRM's without changing HotCRM's
    Thread-read: 6557547710
    Premise: holds (at origin/main FlowItemMoreMenu.tsx offers Delete only, on a writable package)
    Serial constraints cleared: #28562 (Interfaces editors) and #28573 (Access pillar), both claimed by this seat, edit other regions of StudioDesignSurface.tsx; whichever lands later merges main

    The Clause-② line holds for strings in @object-ui/i18n's studio namespace (Record<string, string>). A new locales/* pack key would make it yes (widening). If the dev measures that, the report says so before pr_create and the seat amends this line.


    Generated by Claude Code

  4. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · zhuangjianguo · session_01QsR2jSCZAioSyympShqoHq
    os-dev-report

    Reported at 2026-11-01T12:48Z for PR #28668 at head ea00d7d3.

    {
      "issue": 28567,
      "status": "done",
      "branch": "claude/project-thread-la2x0b",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/28668",
      "session": "session_01QsR2jSCZAioSyympShqoHq",
      "premise_still_valid": true,
      "summary": "The Automations pillar's flow menu offers New similar on a read-only package's flow and on a writable package's flow. It asks a mandatory new machine name and label and posts to POST /automation/:name/clone: exactly {name,label} on a read-only base (the door picks BASE.custom), plus package=OPEN_PACKAGE on a writable one. The copy opens where data.packageId says (another package: its Automations pillar on the copy; the open package: in place after a rail re-read) with data.notice shown verbatim; refusals (409 included) stay verbatim in the open dialog; no manage_metadata draws the item disabled. Wanted 5 was already carried by f23e0512 (PackagedAutomationPage reads data.packageId into artifactStudioPath): checked, not touched.",
      "tests": "head ea00d7d3: cd ui && vitest run over the 36 app-shell test files naming AutomationsPillar or FlowItemMoreMenu + packages/i18n/: 130/130 files, 1733 passed / 13 skipped, VERDICT command-exit 0. New AutomationsPillar.newSimilar-28567.test.tsx 7 cases; deleteFlow-27356 read-only case re-pinned to 'menu offers no Delete'. Ablations via scripts/ablation-replace.mjs on committed tree (git diff HEAD empty after each): target omitted -> 1 red; target always sent -> 1 red; never navigate -> 1 red; refusal -> fallback -> 2 red; notice dropped -> 3 red; disabled reason ignored -> 1 red; no-package arm removed -> 1 red; Delete on read-only -> 1 red; menu in package-less scope -> 1 red. turbo type-check app-shell + i18n (incl. tsconfig.test.json): 66/66, exit 0.",
      "gates": "dispatch-gates --commands --repo objectstack-ai/objectstack: 34 derived, all exit 0 (sweep at a916abc0; the 7 changeset/PR-body/sdui/nul/published-files gates re-run at ea00d7d3, exit 0). --ran reconciliation: 34 derived, 34 run, 0 NOT-MEASURED, 0 UNRUN. PR-body gates via GITHUB_EVENT_PATH: closing-keyword-parity 0, adr-0087-registration 0, changeset-no-major 0, partof-closing-keyword 0. check-sdui-manifest 0. Scoped eslint 0 errors. CI check-runs: in_progress at report time.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "line_budget": "8 files, ~+700/-50: FlowItemMoreMenu.tsx, StudioDesignSurface.tsx (AutomationsPillar region only), 2 tests, studio en/zh strings, changeset",
      "files_changed": [".changeset/28567-new-similar-flow.md", "ui/packages/app-shell/src/views/studio-design/FlowItemMoreMenu.tsx", "ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx", "ui/packages/app-shell/src/views/studio-design/AutomationsPillar.newSimilar-28567.test.tsx", "ui/packages/app-shell/src/views/studio-design/AutomationsPillar.deleteFlow-27356.test.tsx", "ui/packages/i18n/src/namespaces/studio/en.ts", "ui/packages/i18n/src/namespaces/studio/zh.ts"],
      "clause_measurement": "studio-namespace strings only (Record<string,string>), no locales/* pack key: Clause-② no holds as claimed",
      "deviations": "Session context asked to set PR assignee + reviewer via GitHub MCP; not done, per the order's rule 3/10 and os-dev.md (no MCP writes, no assignees/reviewers). The ui designer-parity script named in memory (check:i18n-designer-parity) no longer exists; packages/i18n/ suite ran instead. Full app-shell suite left to CI Test UI (declared narrowing).",
      "mcp_calls": "4 — mcp__github__issue_read x4 (get, get_comments x3); no write tool",
      "api_writes": "2 — fleet-write relay pr_create (POST /repos/objectstack-ai/objectstack/pulls, PR 28668, body read back identical); this report comment (POST /repos/objectstack-ai/objectstack/issues/28567/comments)",
      "open_questions": [],
      "out_of_scope_findings": ["carrier: none · noted, not filed: the clone copies the engine-registered definition, so a writable package's unpublished draft edits are not copied; the writable dialog says so in one sentence (PR Acceptance notes)"]
    }
  5. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y

    ACCEPT → PR #28668 comment 6558353701 · 2026-11-01T13:07Z · Clause-② no held (studio namespace keys only), no contract review owed · all ten required contexts green at ea00d7d3 · landing through the merge queue.


    Generated by Claude Code

  6. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y

    Landed · 2026-11-01T13:28Z · PR #28668 merged through the merge queue as 14049381. Record: ACCEPT 6558353701 at ea00d7d3 (Clause-② no, no contract review owed).

    probe before (14049381~1) now (origin/main)
    auto-item-new-similar in studio-design/FlowItemMoreMenu.tsx 0 1
    onFlowCopied in studio-design/StudioDesignSurface.tsx 0 2
    engine.studio.auto.newSimilar. keys in i18n/src/namespaces/studio/zh.ts 0 14

    The card closed through Fixes. pm:dispatched comes off in the same stroke as this note. Serial neighbour PR #28669 (#28573) merges main next for the shared import lines in StudioDesignSurface.tsx.


    Generated by Claude Code

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

Metadata

Metadata

Assignees

Labels

area:studioChanging a running app without code — authoring, publish, docs and the portaldomain:uienhancementNew feature or requestpriority:p1High: required for production / M2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions