Skip to content

Studio shows machine names where labels exist (residuals of objectui#12693): Explain access "Contributed by" chips and the flow header's trigger object #13056

Closed

Description

@objectstack-fleet

Filing gate: ① — user-visible product defects with reproductions, folded into one card for the family (this sweep's per-runner cap of three standalone defect cards; both rows are the same convention on the same app).

Path: ux-conventions.labels-over-machine-names
QA-source: objectstack-ai/objectstack#24570 · ux-conventions.labels-over-machine-names · acceptance[0]
Checklist priority: P1 (the item fails on this clause ⇒ inherit P1)
type: Bug — violates the declared convention "labels over machine names wherever a label exists"
Reader who acts: the objectui dev seat that takes this card from triage — two Studio surfaces.
Dup check (open + closed): objectui search "machine names instead of labels Explain access contributed by chips flow header trigger object name" → 2 hits, both closed and adjacent: #12693 (Explain principal chips, result banner, Columns chips — those rows now PASS at 4016370) and #11862 (principal, permission-set list, nav editor, Changes panel). The rows below are surfaces those cards did not cover.

reach: on a stock showcase boot at objectui 4016370 (framework 5b14b7f3), both rows below render machine names on 2 fresh loads each.

Rows

  • Explain access → Evaluation pipeline → Principal resolution → "Contributed by:" chips. Studio → any package → Access → Explain access; User = a member, Object = any, Operation = Read → Explain. The chips read org_member, everyone, showcase_member_default, member_default. Labels exist: GET /api/v1/meta/position/org_member → "Organization Member"; GET /api/v1/meta/permission/member_default → "Member — Standard Access" (the principal card on the same page already shows these labels). Data source: POST /api/v1/security/explain.
  • Studio flow header subtitle. /_console/studio/com.example.showcase/automations?surface=flow%3Ashowcase_resilient_sync (and other record-triggered flows) reads "Trigger: Record updated · showcase_task"; the object's label "Task" exists and the start-node inspector on the same page shows "Task".

Expected for both: the label, with the machine name secondary (small / muted) if shown at all.

Full evidence: objectstack-ai/objectstack#24570.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: p2 · bug · domain:ui · area:studio · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-19T16:29Z

    Triage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015). ⛔ Not a claim, ⛔ not a dispatch. These come from the 18.0 QA sweep at framework 5b14b7f3 with console pin 4016370af3c9. The measurement is the card's own. objectui main has moved its pin since; the renderer code named here is unchanged on main for these paths.


    Generated by Claude Code

  2. added
    area:studioChanging a running app without code — authoring, publish, docs and the portal
    bugSomething isn't working
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    and removed on Oct 19, 2026
  3. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 14 (priority:p2)
    Session: session_01XVp19E1MYUTFM3dnkwz8gB
    Account: baozhoutao (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-13056-studio-labels
    Worktree: objectui-issue-13056
    Domain: domain:ui
    Seat: domain:ui#2
    File surface: the Explain access "Contributed by" chips (packages/app-shell/src/views/metadata-admin/ AccessExplainPanel and its principal-resolution section), the Studio flow header's trigger subtitle (packages/app-shell/src/views/studio-design/ / views/metadata-admin/inspectors/ where "Trigger: … · OBJECT" is built), tests beside them, and one .changeset/13056-studio-labels.md (@object-ui/app-shell patch). ⛔ No console-side name mapping (triage); ⛔ no new export, no new pack key unless a label-less fallback sentence is owed. Stop on breach; explain in the report.
    Container & model: S, mode:subagent, model: opus (default tier; dispatch-gates --tier over this surface reads no path-derived mandate)
    Clause-②: no (two Studio surfaces draw the label the served metadata already carries)
    Responsibility: @object-ui/app-shell's Explain access chips and flow header print machine names | the principal card and the start-node inspector on the same pages already draw the labels (objectui#12693's convention) | every Studio author reading Explain access or a record-triggered flow (showcase, measured 2/2)
    Thread-read: 6272032193
    Serial constraints cleared: no open objectui PR touches AccessExplainPanel or the flow header.
    Claimed at: 2026-10-19T19:17Z


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1 (priority:p2, bug)
    Session: session_014MXhk1yjWh37d634hLy3p7
    Account: huangyiirene (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-13056-studio-labels
    Worktree: objectui-issue-13056
    Domain: domain:ui
    Seat: domain:ui#1
    File surface: packages/app-shell/src/views/metadata-admin/AccessExplainPanel.tsx (the "Contributed by" chips render c.name, about :776 to :792 at objectui main fb85637), packages/app-shell/src/views/metadata-admin/previews/FlowPreview.tsx (flowTriggerLabel joins the trigger label with the object's machine name, about :173 to :193), the label reads they need from served metadata, tests beside them, packages/app-shell/src/views/metadata-admin/i18n.ts only if a caption changes, and one .changeset/13056-studio-labels.md. Stop on breach; explain in the report.
    Container & model: M, mode:subagent, model: opus (default tier; dispatch-gates --tier --repo objectstack-ai/objectui over this surface reads no path-derived mandate)
    Clause-②: no
    Responsibility: the risk is produced by objectui's own Studio renderers (AccessExplainPanel.tsx draws the contributor's name; FlowPreview.tsx draws config.objectName); the platform path that covers it: none (the explain answer's contributors carry kind / name / via / state and no label at objectui's pin f4755a68a797, while meta/position, meta/permission and meta/object serve the labels); who reaches it: every Studio author using Explain access or opening a record-triggered flow (QA sweep objectstack-ai/objectstack#24570, 2 of 2 loads on a stock showcase).
    Thread-read: 6272032193
    Serial constraints cleared: no open objectui PR touches AccessExplainPanel.tsx or FlowPreview.tsx (open PRs #13077, #13073, #13072, #13071, #13070, #13050, file lists read at this claim). PR #13050 (objectui#12982, epic) edits packages/app-shell/src/views/metadata-admin/i18n.ts, which is shared and not a single-claim path: whichever PR lands second merges main.

    Why Clause-②: no: both renderers are internal to @object-ui/app-shell. Its entry (exports['.'] → dist/index) re-exports neither AccessExplainPanel nor FlowMetaPills, and the fix changes what they draw, not an accepted input or a published name. A route that would widen a published face (a new export, a new prop on an exported component, a new @objectstack/spec field on the explain answer) is outside this claim: the dev stops and reports it.

    Claimed at: 2026-10-19T19:17Z

  5. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    already claimed — yielding · domain:ui seat 1 · session_014MXhk1yjWh37d634hLy3p7 · 2026-10-19T19:18Z

    domain:ui#2's claim 6275284090 (2026-10-19T19:17Z:58) is earlier than this seat's claim 6275284952 (2026-10-19T19:18Z:01), so the card is domain:ui#2's. This seat withdraws its claim 6275284952, removes its own assignee (huangyiirene) in this act, and leaves the labels and baozhoutao's assignment untouched. Nothing was dispatched from this seat: no branch or worktree exists on its side.

    Readings handed over, so the winner need not re-take them (objectui main fb85637, objectstack pin f4755a68a797):

    • Both premises hold on main. AccessExplainPanel.tsx about :776 to :792 draws each contributor chip as c.name. previews/FlowPreview.tsx flowTriggerLabel (about :173 to :193) returns `${label} · ${object}` with object = config.objectName (or timeRelative.object).
    • The explain answer carries no label. At the pin, ExplainDecision.layers[].contributors[] carries kind / name / via / state (packages/spec/src/security/explain.test.ts), so the chips must resolve labels from the served meta/position / meta/permission reads. The card notes that the principal card on the same page already shows them.
    • Neither component is a published face. @object-ui/app-shell's entry (exports['.'] → dist/index) re-exports neither AccessExplainPanel nor FlowMetaPills.
    • Overlap: no open PR touches either file. PR feat(app-shell): Setup lists declared sharing rules read-only, with Disable / Enable and Clone (objectui#12982) #13050 (objectui#12982) edits views/metadata-admin/i18n.ts, a shared file.
  6. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 13056,
      "status": "done",
      "branch": "claude/issue-13056-studio-labels",
      "pr": "https://github.com/objectstack-ai/objectui/pull/13079",
      "session": "session_01XVp19E1MYUTFM3dnkwz8gB",
      "premise_still_valid": true,
      "summary": "Both rows were live on origin/main fb85637e14. (a) In AccessExplainPanel.tsx, each layer's Contributed-by chips now render through the Principal card's own CitedItemChip. A position contributor takes its meta/position label and a permission_set contributor takes its meta/permission label, from the same once-per-run per-type list read (lookUpItemLabels, widened to the names the layers cite). The title reads name first, then the kind and via it carried before. System contributors and unlabelled names stay the name. The Principal card is unchanged. (b) In FlowPreview.tsx, FlowMetaPills names the trigger object (record trigger objectName, or the time-relative sweep object) by the label from useObjectCatalog, the same read the Start node ObjectPicker makes, so the pill reads 'Record updated · Task' with the name on the pill title. While the catalog loads or fails, or the object has no label, the pill shows the name. No package export, no exported-component prop and no pack key were added. Two things for the PM. First, card 13056 carries two Claim comments for this branch from different sessions (6275284090, session_01XVp19E1MYUTFM3dnkwz8gB, account baozhoutao; 6275284952, session_014MXhk1yjWh37d634hLy3p7, account huangyiirene). The newest one names this branch, so I worked it. My empty-branch push created the ref, and the remote head is still my sha, so I saw no sign of a second dev. Second, the PR assignee is baozhoutao, as dispatched, and the card's assignees are baozhoutao and huangyiirene. I wrote neither assignee field beyond the dispatched pr_create.",
      "tests": "All at HEAD 9c04f63e5a. NEW TESTS: AccessExplainPanel.contributorLabels-13056.test.tsx and previews/FlowPreview.triggerObjectLabel-13056.test.tsx, 2 files, 10 tests, passed. NEIGHBOURS: 15 files under the lock (pnpm exec vitest run --maxWorkers=1 on AccessExplainPanel*.test.tsx, previews/FlowPreview*.test.tsx, inspectors/ObjectPicker*.test.tsx, FlowReferenceField.objectPicker-11783, StudioDesignSurface.flowStatusTruth-11779), reading 'Test Files 15 passed (15) / Tests 102 passed (102)', VERDICT command-exit 0. ABLATION, through objectstack scripts/ablation-replace.mjs, which restores on its own and proves the restore by blob hash: Row (a): the contributor chip's label= prop was moved off (anchor 1 to 0, blob 23beb1a5e954 to 460f26ce303a). 4 failed and 1 passed (the failed-list control). Two controls also fail, because they wait on the label as their settle anchor. The restore reads blob == HEAD 23beb1a5e954 and git diff HEAD empty. Row (b): objectLabel was forced to undefined (blob ee897177aca4 to 89fd76fc1066). The two label pins failed and the three controls passed. The restore reads blob == HEAD ee897177aca4 and git diff HEAD empty. The tests import source directly, with no dist on the resolution path, so no rebuild leg was owed. BUILD AND TYPE-CHECK: pnpm --workspace-concurrency=2 --filter '@object-ui/app-shell^...' build reads VERDICT command-exit 0. pnpm --filter @object-ui/app-shell type-check (tsc --noEmit && tsc -p tsconfig.test.json, and the test project includes the tests) reads VERDICT command-exit 0. LINT: eslint narrowed to the 5 changed .ts/.tsx files (--format json) counted 5 files, 0 errors and 10 warnings. The population was read from the root eslint.config.js. It has no parserOptions.project or projectService, so type-aware linting is off and this narrowing cannot move any verdict on an untouched file. One warning is new: react-refresh/only-export-components on the useObjectCatalog export. GATES: check: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 and control-bytes all exited 0. check-hand-rolled-comment-mask, check-changeset-fixed, check-changeset-presence and check:new-line-citations ('0 new citation(s)') also exited 0. check:spec-floors exited 1 with 'no-artifact' (it needs a whole-workspace build). That is recorded per the dispatch, not fixed. A manual control-byte grep over the changed files found no hits. DECLARED TO CI: the full packages/app-shell/ directory run.",
      "gates": "phantom-deps 0 · self-import 0 · unreferenced-sources 0 · doc-example-readers 0 · handler-key-reads 0 · side-effects-array 0 · element-data-source-declaration 0 · spec-symbols 0 · action-forward-parity 0 · designer-field-key-parity 0 · icon-record-names 0 · i18n-keys 0 · i18n-drift 0 · i18n-designer-parity 0 · control-bytes 0 · hand-rolled-comment-mask 0 · changeset-fixed 0 · changeset-presence 0 · new-line-citations 0 · spec-floors 1 (no-artifact, main state, recorded) · app-shell type-check 0 · eslint(5 files) 0 errors · vitest 15 files/102 tests pass · app-shell package dir: NOT MEASURED, declared to CI per the dispatch's lock clause",
      "line_budget": "not applicable (no skills/** or ledger touched)",
      "files_changed": [
        "packages/app-shell/src/views/metadata-admin/AccessExplainPanel.tsx",
        "packages/app-shell/src/views/metadata-admin/AccessExplainPanel.contributorLabels-13056.test.tsx",
        "packages/app-shell/src/views/metadata-admin/previews/FlowPreview.tsx",
        "packages/app-shell/src/views/metadata-admin/previews/FlowPreview.triggerObjectLabel-13056.test.tsx",
        "packages/app-shell/src/views/metadata-admin/inspectors/ObjectPicker.tsx",
        ".changeset/13056-studio-labels.md"
      ],
      "deviations": [
        "inspectors/ObjectPicker.tsx is outside the dispatch's file-surface list. It gains the export keyword on useObjectCatalog, plus a doc-comment line. The ruling requires 'the same resolver the neighbouring surface already uses on that page', and that resolver is this module-private hook. The claim's surface ('the label reads they need from served metadata') covers it, and the module is in no barrel, so the published face is byte-unchanged. These two dispatch clauses conflict, and the conflict is reported here, not picked silently.",
        "The dispatch's Gates section asks for each touched package's dir under the lock, and its Lock section forbids whole-package-directory runs. I followed the Lock clause: the packages/app-shell/ dir run is declared to CI.",
        "The ablation's control tests in the explain file also went red (they await the label as a settle anchor). Only the failed-list control stayed green, so the controls there are not independent of the mutation."
      ],
      "mcp_calls": "0",
      "api_writes": "3 REST writes, via the fleet-write relay (each a repository_dispatch POST to objectstack-ai/objectstack executed as objectstack-fleet[bot]): (1) pr_create = POST /repos/objectstack-ai/objectui/pulls (draft) + POST /repos/objectstack-ai/objectui/issues/13079/assignees [baozhoutao]; (2) this os-dev-report comment = POST /repos/objectstack-ai/objectui/issues/13056/comments. Labels: zero writes (objectui, no gate reads them, none named). Not REST: 2 git pushes of the branch (empty probe + 9c04f63e5a).",
      "open_questions": [
        {
          "question": "Card 13056 carries two Claim comments for the same branch from two sessions and accounts (6275284090 baozhoutao, 6275284952 huangyiirene). Which seat owns the claim?",
          "options": [
            "A: keep this run (PR 13079), and retract or annotate the other claim",
            "B: close PR 13079 in favour of the other seat's work"
          ],
          "recommendation": "A. The branch ref and the PR exist only from this run, and no other push landed on the branch."
        }
      ],
      "out_of_scope_findings": []
    }

    Generated by Claude Code

  7. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 13056,
      "status": "done",
      "branch": "claude/issue-13056-studio-labels",
      "pr": "https://github.com/objectstack-ai/objectui/pull/13079",
      "session": "session_01XVp19E1MYUTFM3dnkwz8gB",
      "premise_still_valid": true,
      "summary": "Patch round on PR 13079. CI went red on Test (shard 10/16) at 9c04f63: AutomationsPillar.tabs-12454 pinned the machine name 'Record created · crm_lead', and the header now draws 'Record created · Lead'. That is the card's intended change. I merged origin/main with a merge commit (5bbc9eebd5). The assertion now reads 'Record created · Lead', with a one-line objectui#13056 comment, and is wrapped in waitFor because the catalog read is async. The rest of the 12454 no-duplicate-bar property is unchanged (commit c271dc30f3). SWEEP: I searched app-shell tests for flow-header and trigger-pill text ('Record created/updated · ', 'Time-relative · ', 'Trigger:'), the auto-flow-meta, FlowMetaPills, AutomationsPillar and FlowPreview readers, and the Explain contributor chips (explain-layer, contributors). The only machine-name pin served a labelled catalog was the 12454 one. FlowPreview.headerPills-11779 serves no catalog (fetch is stubbed 404). StudioDesignSurface.flowStatusTruth-11779's client mock has no withPreviewDrafts. So both still read the name by the declared fallback, and they stay green. The Explain contributor tests assert no labelled machine name. Claim: per the PM, the card's claim is 6275284090 (this session); 6275284952 is to be ignored. Implementation as in round 1: Explain Contributed-by chips by meta/position and meta/permission label, and the flow Trigger pill object by its object-catalog label. In both places the name stays on the title, and the name is the text when no label exists.",
      "tests": "HEAD c271dc30f3 (on merge 5bbc9eebd5). SWEPT SET under the lock: the 26 studio-design tests that read auto-flow-meta, FlowMetaPills, AutomationsPillar or FlowPreview, plus every AccessExplainPanel*.test.tsx and previews/FlowPreview*.test.tsx, 40 files in all, with pnpm exec vitest run --maxWorkers=1. Result: 'Test Files 40 passed (40) / Tests 319 passed (319)', VERDICT command-exit 0. That includes AutomationsPillar.tabs-12454 (the CI red) and both new 13056 files. BUILD AND TYPE-CHECK at the new head: the app-shell dependency-closure build followed by pnpm --filter @object-ui/app-shell type-check (tsc --noEmit plus tsconfig.test.json) reads VERDICT command-exit 0. ESLint on the edited test file exited 0. check:control-bytes 0, check:i18n-keys 0, check-changeset-presence 0, check:new-line-citations 0. Round-1 evidence stands for the unchanged source: both ablation rows went red, and each restore was proven by blob hash (23beb1a5e954 and ee897177aca4 equal to HEAD). DECLARED TO CI: the full packages/app-shell/ directory.",
      "gates": "round 2 at c271dc30f3: vitest swept set 40 files/319 tests pass · app-shell closure build + type-check 0 · eslint(edited test) 0 · control-bytes 0 · i18n-keys 0 · changeset-presence 0 · new-line-citations 0. Round 1 battery at 9c04f63e5a (source unchanged since): all named check:* 0 except spec-floors 1 (no-artifact, recorded). app-shell package dir: NOT MEASURED locally, declared to CI.",
      "line_budget": "not applicable (no skills/** or ledger touched)",
      "files_changed": [
        "packages/app-shell/src/views/metadata-admin/AccessExplainPanel.tsx",
        "packages/app-shell/src/views/metadata-admin/AccessExplainPanel.contributorLabels-13056.test.tsx",
        "packages/app-shell/src/views/metadata-admin/previews/FlowPreview.tsx",
        "packages/app-shell/src/views/metadata-admin/previews/FlowPreview.triggerObjectLabel-13056.test.tsx",
        "packages/app-shell/src/views/metadata-admin/inspectors/ObjectPicker.tsx",
        ".changeset/13056-studio-labels.md",
        "packages/app-shell/src/views/studio-design/AutomationsPillar.tabs-12454.test.tsx"
      ],
      "deviations": [
        "inspectors/ObjectPicker.tsx is outside the dispatch's file-surface list. It gains the export keyword on useObjectCatalog, plus a doc-comment line. The ruling requires 'the same resolver the neighbouring surface already uses on that page', and that resolver is this module-private hook. The claim's surface ('the label reads they need from served metadata') covers it, and the module is in no barrel, so the published face is byte-unchanged. These two dispatch clauses conflict, and the conflict is reported here, not picked silently.",
        "The dispatch's Gates section asks for each touched package's dir under the lock, and its Lock section forbids whole-package-directory runs. I followed the Lock clause: the packages/app-shell/ dir run is declared to CI.",
        "The ablation's control tests in the explain file also went red (they await the label as a settle anchor). Only the failed-list control stayed green, so the controls there are not independent of the mutation.",
        "Round 2: the 12454 assertion was wrapped in waitFor as well as relabelled. The label arrives from the async catalog read, and a synchronous assertion could race it."
      ],
      "mcp_calls": "0",
      "api_writes": "Round 1: 3 REST writes, via the fleet-write relay: pr_create, which is POST pulls (draft) and POST issues/13079/assignees; and the os-dev-report comment POST issues/13056/comments (6275717644). Round 2: 1 REST write via the relay, this os-dev-report comment POST issues/13056/comments. Labels: 0. Not REST: git pushes 9c04f63e5a (round 1) and 5bbc9eebd5..c271dc30f3 (round 2, fast-forward, no force).",
      "open_questions": [],
      "out_of_scope_findings": []
    }```
    
    ---
    _Generated by [Claude Code](https://claude.ai/code)_
  8. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT · objectui#13056 · PR #13079 · domain:ui#2 · session_01XVp19E1MYUTFM3dnkwz8gB · 2026-10-19T20:06Z

    PR #13079 at head c271dc3 (Fixes #13056, Clause-②: no). Reviewed against:

    • this seat's claim 6275284090;
    • triage 6272032193;
    • the dev reports 6275717644 / 6276084770.

    Claim record: two seats claimed this card within three seconds (6275284090 this seat, 6275284952 seat 1). This seat assigned first (19:17:00Z), and seat 1 yielded (6275300803) and unassigned itself. The seat's dispatch order named seat 1's claim id by mistake. It was corrected in the patch round; no work was duplicated.

    • Premise: holds. Explain access's "Contributed by" chips printed org_member / member_default, and the flow header printed · showcase_task, although labels exist and the neighbouring surfaces show them.
    • Diff read by the seat:
      • Explain access chips: each layer's "Contributed by" chips render through the Principal card's own CitedItemChip, labelled from the same once-per-run meta/position / meta/permission list read (lookUpItemLabels, widened to the cited names). The name goes on the title.
      • Flow header: FlowMetaPills names the trigger object by its useObjectCatalog label, the same read the Start-node ObjectPicker makes.
      • Fallback: while a label loads, fails, or does not exist, the machine name shows.
      • Exports: useObjectCatalog gains export in inspectors/ObjectPicker.tsx, a module in no barrel, so the published surface is byte-unchanged. That is a disclosed surface deviation serving the ruling's "reuse the neighbouring resolver"; the seat accepts it.
      • No pack key added.
    • Changeset: @object-ui/app-shell patch.
    • Pins:
      • AccessExplainPanel.contributorLabels-13056 and FlowPreview.triggerObjectLabel-13056 (10 tests).
      • Per-row ablations, each red; each restore was proven by blob hash.
      • Patch round: AutomationsPillar.tabs-12454 pinned the machine name and now reads the label (in waitFor; the catalog read is async), and its no-duplicate-bar property is unchanged.
    • Local gates: swept set 40 files / 319 tests; app-shell closure build and type-check exit 0; eslint 0 errors; the battery and changeset checks all 0.
    • Commits: model-free trailers. The PR went through the fleet-write relay.
    • CI at head: 36/36 check-runs success or skipped on c271dc3 (filter=latest), mergeable_state clean.

    Verdict: ACCEPT. The seat marks the PR ready and enables auto-merge; the merge queue lands it.


    Generated by Claude Code

  9. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · objectui#13056 · PR #13079 · domain:ui#2 · session_01XVp19E1MYUTFM3dnkwz8gB · 2026-10-19T20:21Z

    • Merged as cc4ae3e on main. Verified by content: all 7 files in cc4ae3e^1..cc4ae3e are blob-identical to the accepted head c271dc3. The squash message is model-free.
    • What landed:
      • Studio's Explain access "Contributed by" chips show position and permission-set labels.
      • The flow header names its trigger object by label (Record updated · Task).
      • In both places the machine name stays on the title and is the fallback when no label exists.
    • Seen by the QA item ux-conventions.labels-over-machine-names once the console pin carries cc4ae3e.
    • The card closed via Fixes #13056; pm:dispatched is removed with this note.

    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 portalbugSomething 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