Skip to content
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
This repository was archived by the owner on Nov 4, 2026. It is now read-only.

console: Packaged Automation's clone result offers no way to switch the source flow off, though the clone runs beside it and the sharing-rule clone dialog offers one #13270

Closed

Description

@objectstack-fleet

Filing gate ③ a task the maintainer set: objectstack-ai/hotcrm#2207, the maintainer's browser round on ObjectStack 18.0.0 (「hotcrm 升级到 objectstack 18.0 然后重新安排一轮浏览器测试」). Each defect gets its own card, by the maintainer's ruling 「按照按照具体的issue单独提交卡片,不受数量限制。」 (recorded on objectstack-ai/hotcrm#2188, 6283467378). This is finding F-01 of track 2 (the Setup pass as the system administrator), by the cloud tester session_01BkRPwuAufrFwoEEfuigDm9. It was measured on HotCRM main 16c28664 with @objectstack/* 18.0.0 (framework 06cab4849, console objectui 616df6598b42), in Chromium at 1440×900 on a locally booted, seeded install. The evidence is on the branch claude/qa-v18-setup-pass at 4d7cc467d (REPORT.md), which is never merged. Filed by the repo:hotcrm seat 2 (os-support-ai, session session_01KqkTQNLcxVc588eZpJmp1r). ⛔ Not a claim. Grade: triage's.

Reader (who acts): objectui triage routes it. The behaviour of the clone itself is objectstack's declared design and is not what this card asks to change.

The finding, as measured

  • Persona / URL: dev admin, Setup → Apps → Packaged Automation (/_console/apps/com.objectstack.setup/component/automation/packaged).
  • Steps:
    1. On contact_welcome (record-change, contact created), Clone → name qa_contact_welcome_copy → 200 POST /api/v1/automation/contact_welcome/clone.
    2. Create one contact.
  • Actual:
    • One contact produced 2 contact_welcome notifications: the original and the clone both ran.
    • The page shows the server's notice and no action. The notice's only instruction is a REST call: "send its complete definition with status: 'obsolete' to PUT /api/v1/automation/<name>. The activation toggle (POST /api/v1/automation/<name>/toggle) switches packaged flows only and refuses the clone."
  • Expected (the product's own sibling): Declared Sharing Rules' Clone result says "The declared rule … still grants access until you switch it off" and offers a Switch "…" off button (16-access-declared-sharing-rules-cloned.png).
  • Evidence: 03-F01-packaged-automation-clone-runs-beside-original.png.
  • Reach: every admin who customises a packaged record-change or schedule flow by cloning it. Until they find another door, each record runs the business logic twice.

Seat review (source at the tested pins)

  • By design, not this card:
    • The clone is created draft, which stays bound to its trigger (objectstack packages/runtime/src/flow-clone.ts:97-112, FLOW_CLONE_STATUS = 'draft').
    • The notice says so (flow-clone.ts:177-185).
    • ADR-0126 (docs/adr/0126-packaged-metadata-customization-model.md:338): "Clone and disable are independent primitives".
    • The page lists packaged flows only (objectui packages/app-shell/src/views/setup/PackagedAutomationPage.tsx:373), and the toggle is the packaged-flow ledger (objectstack#20726).
  • The defect: after a successful clone, PackagedAutomationPage.tsx:429 renders cloneResult.notice as text and nothing else. The sibling SharingRuleCloneDialog.tsx:176 offers Switch "{source}" off at the same moment.
  • Other doors exist but are not offered:
    • The original's own switch is on the same table.
    • By source only (not verified in a browser), Studio's package-less scope /studio/~org/automations (objectui#11553, in the pin) lists the clone, with an enable switch.
    • The Setup page links to neither.
  • Narrowest statement: the clone result on Packaged Automation offers no clickable next step (switch the source off, or open the clone), so the admin is left with two flows on one trigger and a REST recipe.

Dedupe

Method: every objectstack-ai/objectstack issue title (every state, #1–#24932) and every objectstack-ai/objectui issue title (#7–#13268), listed through the repo-scoped issues?state=all endpoint (refreshed with since=2026-10-19) and matched case-insensitively. The search API is refused for this session.

  • Related, closed: objectstack#20726 (the toggle refuses a customer flow; resolved by declaring the clone's own status as its off-switch, which is the notice quoted above); objectui#11553 and objectstack#21332 (the clone reached no Studio surface; fixed by the ~org scope); objectui#6301 (the page's charter).
  • Different: objectui#13159 (the "On" chip on unbound schedule flows).
  • New.

Generated by Claude Code

Activity

  1. added
    area:workflowApprovals and automation — the work that runs without a person driving it
    bugSomething isn't working
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    and removed on Oct 20, 2026
  2. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 18 (priority:p2)
    Session: session_01XVp19E1MYUTFM3dnkwz8gB
    Account: baozhoutao (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-13270-clone-switch-source-off
    Worktree: objectui-issue-13270
    Domain: domain:ui
    Seat: domain:ui#2
    File surface:

    • packages/app-shell/src/views/setup/PackagedAutomationPage.tsx (the clone result, ~429, and the page's existing packaged-flow toggle);
    • the i18n rows for the new action labels (the table this page already uses, every locale it carries);
    • tests beside it;
    • one .changeset/13270-clone-switch-source-off.md (patch for each touched package).

    ⛔ No change to the clone's server behaviour (objectstack's declared design, ADR-0126); no new export. Stop on breach; explain in the report.
    Container & model: S, mode:subagent, model: opus (default tier; no path-derived mandate)
    Clause-②: no (internal Setup page)
    Responsibility: the clone result renders the server notice as text with no next step | SharingRuleCloneDialog.tsx's Switch "{source}" off at the same moment, and the page's own packaged-flow toggle | every admin who clones a packaged record-change or schedule flow; until they switch the source off, each record runs the logic twice (measured: contact_welcome)
    Thread-read: none
    Serial constraints cleared:

    • No open objectui PR touches PackagedAutomationPage.tsx (read at 17:58Z).
      Claimed at: 2026-10-20T17:48Z

    Generated by Claude Code

  3. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
     "issue": 13270,
     "status": "done",
     "branch": "claude/issue-13270-clone-switch-source-off",
     "pr": "https://github.com/objectstack-ai/objectui/pull/13279",
     "session": "session_01XVp19E1MYUTFM3dnkwz8gB — this run's harness-stamped id (subagent = parent's)",
     "premise_still_valid": true,
     "summary": "Packaged Automation's clone result now keeps the server notice verbatim and adds a 'Switch \"LABEL\" off' action that calls the same packaged-flow toggle as the row switch (factored into one requestToggle), for the source flow; on success the source row reads off and the result shows 'The packaged flow \"LABEL\" is switched off.'; a refusal shows the server's message beside the still-offered button; an already-off source is offered no switch-off. It also links 'Open the clone in Studio' to studioOrgScopePath({type:'flow',name}) = /studio/~org/automations?surface=..., measured present on main (StudioRoute.tsx studioRoutes, objectui#11553). Clone behaviour and draft status untouched; 3 new pack keys in all 10 locales (de unquoted so de-quote-pairing counts do not move).",
     "tests": "At HEAD ba93526a19. PackagedAutomationPage.test.tsx 25 passed (4 new: pins a,b,c,d); targeted families under lock, --maxWorkers=1: views/setup packaged files 3 files 46 passed; 10 packages/i18n/src/__tests__ pack scans 152 passed; scripts/__tests__ check-i18n-dead-keys/call-site-keys/en-drift 323 passed. Closure build turbo --filter='@object-ui/app-shell^...' 28/28 exit 0; type-check @object-ui/i18n + @object-ui/app-shell (incl tsconfig.test.json, include src/**/*.test.tsx) exit 0. eslint --no-inline-config on 12 changed files: 0 errors, 1 pre-existing warning (react-hooks/set-state-in-effect on unchanged setLoadError(null)); population=changed files, count from JSON, config has no type-aware linting. Battery exit 0: phantom-deps, self-import, unreferenced-sources, doc-example-readers, handler-key-reads, side-effects-array, element-data-source-declaration, spec-symbols, action-forward-parity, designer-field-key-parity, icon-record-names, i18n-keys, i18n-drift, i18n-designer-parity, control-bytes, check-hand-rolled-comment-mask, check-changeset-fixed, check-changeset-presence. check:spec-floors exit 1 (no-artifact on packages outside the built closure; recorded, not fixed). Declared to CI: full packages/app-shell/ and packages/i18n/. Ablation via ablation-replace.mjs (anchor ') : cloneSourceRow ? (' -> ') : false ? ('): blob f4aa90e11d32 -> d16b14152301, run 'Tests 2 failed | 23 passed (25)' (pins a and c red, control d green); restore blob == HEAD f4aa90e11d32, git diff HEAD empty. No build/dist leg: the test imports the page from src by relative path.",
     "mcp_calls": "0",
     "api_writes": "3 — via fleet-write relay: POST /repos/objectstack-ai/objectui/pulls (draft #13279) + POST /repos/objectstack-ai/objectui/issues/13279/assignees (baozhoutao), one stroke; POST /repos/objectstack-ai/objectui/issues/13270/comments (this os-dev-report). Plus 2 git pushes (not REST). No label writes (objectui: none named).",
     "open_questions": [],
     "out_of_scope_findings": [],
     "gates": {
      "type-check": 0,
      "vitest-targeted": 0,
      "lint-changed": 0,
      "battery": 0,
      "check-changeset-fixed": 0,
      "check:spec-floors": 1
     },
     "files_changed": [
      "packages/app-shell/src/views/setup/PackagedAutomationPage.tsx",
      "packages/app-shell/src/views/setup/PackagedAutomationPage.test.tsx",
      "packages/i18n/src/locales/{ar,de,en,es,fr,ja,ko,pt,ru,zh}.ts",
      ".changeset/13270-clone-switch-source-off.md"
     ],
     "deviations": [
      "Worktree setup used pnpm run setup as ordered. The switch-off label names the source by its display label rather than the machine name (sibling uses the name) so the existing ancestry pin on the status region stays meaningful; the action row sits outside role=status."
     ]
    }

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT — PR #13279 @ ba93526a197fe36f2a9397b8e2dc76e62b270577 · domain:ui seat 2 (session_01XVp19E1MYUTFM3dnkwz8gB)

    • Clause-②: no. An internal Setup page plus three new pack keys; no export moves; the clone's server behaviour and draft status are unchanged. No contract review is owed, and the seat read the report.
    • Seat review: after a clone, the Packaged Automation result keeps the server's notice verbatim and adds a Switch "{label}" off action. It calls the same packaged-flow toggle as the row switch, now shared through one requestToggle, for the source flow. On success the source row reads off and the result confirms it. A refused toggle shows the server's message beside the button, and the button stays. An already-off source gets no switch-off. An Open the clone in Studio link goes to studioOrgScopePath({ type: 'flow', name }), the /studio/~org/automations scope objectui#11553 serves; the route was measured on main. This mirrors SharingRuleCloneDialog's switch-off.
    • Deviation accepted: the action names the source by its display label rather than its machine name, which reads better to an admin and keeps the status-region ancestry test meaningful.
    • Pins: (a) the switch-off calls the toggle and the source reads off; (b) the open-the-clone link; (c) a refused toggle shows the message, and the button stays; (d) CONTROL: an already-off source offers none. The ablation (no switch-off branch) turned (a) and (c) red with (d) green, and the restore was proven by blob. The page tests (25), the locale packs (152 tests) and the i18n script suites are green.
    • Changeset: patch for @object-ui/app-shell and @object-ui/i18n.
    • CI: all 36 check-runs completed on the head, 33 passed and 3 skipped.
    • Path fork: no governed path. Seat landing.
    • Findings: none.

    Next: ready + auto-merge; landing is verified by content on main.


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · domain:ui seat 2 · session_01XVp19E1MYUTFM3dnkwz8gB

    • Merged: PR fix(app-shell): offer switch-source-off and open-in-Studio on the packaged flow clone result #13279 through the merge queue as main 5235d6d57b.
    • Verified by content: each of the 13 files the PR changes has the same blob at 5235d6d57b as at the accepted head ba93526a19. The merge message carries no model identifier.
    • Landed: after a clone, Setup → Packaged Automation keeps the server's notice and offers Switch "{label}" off for the source flow, through the row switch's own toggle, plus Open the clone in Studio (/studio/~org/automations). A refused toggle shows the server's message, and an already-off source offers no switch-off. The admin no longer needs the REST recipe to stop the double run.
    • Downstream: the HotCRM finding (F-01) reaches the console at objectstack's next .objectui-sha bump past 5235d6d57b.

    pm:dispatched is removed.


    Generated by Claude Code

  6. added a commit that references this issue on Oct 28, 2026
    5235d6d
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:workflowApprovals and automation — the work that runs without a person driving itbugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpriority:p2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions