Skip to content

Commit ec616a8

Browse files
committed
[maintainer] test(app-shell): point the by-path readers and checklist sources at the slice 4 modules
The 7373 Studio site's alsoReads and the 7265 spec-symbol ledger's SITES gain AutomationsFlowRail.tsx, StudioPillarKit.tsx and DataPillarHelpers.tsx. Four studio-authoring checklist sources that named moved helpers now name the module that holds them, each with a revision row; no clause changed. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WGufzedfGwVcebpN5t3ETE
1 parent c5fa57f commit ec616a8

4 files changed

Lines changed: 48 additions & 8 deletions

File tree

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
'@object-ui/app-shell': patch
3+
---
4+
5+
internal: move-only — Studio's flow rail helpers, pillar kit and Data pillar helpers move out of `StudioDesignSurface.tsx` into three modules, taking it under 10,000 lines (#29988, slice 4)
6+
7+
Clause-②: no
8+
Metadata-protocol: none
9+
10+
No behaviour change. Three groups of helpers now live in their own modules under `views/studio-design/`. `AutomationsFlowRail.tsx` holds the Automations rail's flow status dot, its glyph tables, the flow reads and the new-flow trigger helpers. `StudioPillarKit.tsx` holds what every pillar shares: the held-edit notice, the unsaved-work and taken-identifier checks, the "Show me" focus helpers, the draft-saved announcement and the read-only link. `DataPillarHelpers.tsx` holds the Data pillar's field-name, CEL-stamp and form-preview helpers. The moved code is byte-identical apart from its imports and `export`s. `StudioDesignSurface.tsx` imports it from there and re-exports the five names it exported before, so every import of them keeps working. The package's public exports are unchanged.

‎docs/qa/platform-checklist/areas/studio-authoring.json‎

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2118,7 +2118,7 @@
21182118
"title": "Studio asks before an unsent edit is left behind: a held (incomplete) or dirty edit in any pillar survives a pillar switch, a rail switch, the package switcher, Home and a reload — or is discarded only after the author confirms",
21192119
"since": "v18",
21202120
"status": "active",
2121-
"revision": 5,
2121+
"revision": 6,
21222122
"priority": "P1",
21232123
"surface": "browser",
21242124
"personas": [
@@ -2177,7 +2177,7 @@
21772177
"stale-console-bundle"
21782178
],
21792179
"source": [
2180-
"ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx (unsavedPillarWork — pillarDirty or a held edit — feeding confirmLeavePillar, the beforeunload effect and useRegisterUnsavedEdits; confirmDropUnsavedWork, which the Data, Automations and Interfaces rails also ask before opening another item; onDirtyChange from the Access pillar and the Interfaces navigation editor, onHeldEditChange / useHeldEditReport from the Data, Automations and Interfaces leaf editors)",
2180+
"ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx (unsavedPillarWork — pillarDirty or a held edit — feeding confirmLeavePillar, the beforeunload effect and useRegisterUnsavedEdits; onDirtyChange from the Access pillar and the Interfaces navigation editor, onHeldEditChange from the Data, Automations and Interfaces leaf editors) + ui/packages/app-shell/src/views/studio-design/StudioPillarKit.tsx (confirmDropUnsavedWork, which the Data, Automations and Interfaces rails also ask before opening another item; useHeldEditReport, through which those leaf editors report a held edit)",
21812181
"ui/packages/i18n/src/namespaces/studio/en.ts (engine.edit.unsavedLeaveConfirm; engine.studio.held.needsOptions / needsTarget / needsInput / widgetNeedsInput / line)",
21822182
"ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.pillarNavGuard.test.tsx (jsdom pin of the dirty half on the Access stack — corroboration only, it scores no browser clause here)",
21832183
"#26705 (family card: held edits discarded silently on departure in Data, Automations and Interfaces; fixed by PR #26839 and PR #26927 — jsdom pins StudioDesignSurface.heldDataLeave-26705 / heldFlowLeave-26705 / heldWidgetLeave-26705 .test.tsx, corroboration only)",
@@ -2213,6 +2213,12 @@
22132213
"date": "2026-11-01",
22142214
"change": "QA run #28656 (W3-RT) finding: steps[7] says the item draft read GET /api/v1/meta/TYPE/NAME?state=draft&package=PKG answers 404 NO_DRAFT when no draft exists (metadata-protocol protocol.ts noPendingDraftError; its wire answer is pinned in packages/rest/src/meta-item-absent-404.test.ts), so a 404 before and after Leave is the 'unchanged' reading acceptance[3] asks for, as #28656 read it live at 6e11a929. No clause changed. Re-verified against source at base 1c5b1773ec. Wave anchor #27377, wave-3 accuracy slice S10 (#28701); finding parked in anchor comment 6557904764",
22152215
"ref": "#28656"
2216+
},
2217+
{
2218+
"revision": 6,
2219+
"date": "2026-11-04",
2220+
"change": "source[0] re-pointed: confirmDropUnsavedWork and useHeldEditReport moved unchanged from ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx to StudioPillarKit.tsx beside it (#29988 slice 4, a move-only split); the rest of the citation stays on StudioDesignSurface.tsx. Re-read at base 9d1a465f0. No clause changed",
2221+
"ref": "#29988"
22162222
}
22172223
]
22182224
},
@@ -2305,7 +2311,7 @@
23052311
"title": "The Automations rail groups flows by the object they watch, searches by label and name, says when nothing matches, and explains its glyphs and dots in a legend; New automation's presets refuse until the watched object is chosen, and a new flow starts Off",
23062312
"since": "v18",
23072313
"status": "active",
2308-
"revision": 2,
2314+
"revision": 3,
23092315
"priority": "P2",
23102316
"surface": "mixed",
23112317
"personas": [
@@ -2365,7 +2371,7 @@
23652371
"ref": "ui/packages/app-shell/src/views/studio-design/AutomationsPillar.railSearch-11794.test.tsx (label / name / no-match search) + StudioDesignSurface.flowPresets-11861.test.tsx + StudioDesignSurface.flowStatusTruth-11779.test.tsx ('\"New\" saves status: obsolete … Off by default'): jsdom evidence for acceptance[2] and [3]; the live rail, legend and draft read stay the run's"
23662372
},
23672373
"source": [
2368-
"ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx (the rail legend auto-rail-legend, FLOW_GLYPH_ICON / FLOW_GLYPH_LABEL_KEY, flowDotClass, FlowStatusDot; the New automation presets; objectui#12454, #11794, #11861, #11779)",
2374+
"ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx (the rail legend auto-rail-legend; the New automation presets; objectui#12454, #11794, #11861, #11779) + ui/packages/app-shell/src/views/studio-design/AutomationsFlowRail.tsx (FLOW_GLYPH_ICON / FLOW_GLYPH_LABEL_KEY, flowDotClass, FlowStatusDot)",
23692375
"QA run #26715 (Automations card E1 / E2 pass; the rail search, legend and preset refusal were listed as uncovered)"
23702376
],
23712377
"history": [
@@ -2380,6 +2386,12 @@
23802386
"date": "2026-10-31",
23812387
"change": "fixtures.requires[1] says what makes a schedule flow. The rail's clock glyph comes from resolveFlowTriggerKind (packages/spec/src/automation/flow-trigger-kind.ts), which answers schedule only for a Start node carrying config.schedule or a flow of type schedule. New automation's Advanced → Schedule writes only config.triggerType, so QA run #27438 saw such a flow listed as Autolaunched until a cron or interval was set on its Start node. Accuracy finding of QA run #27438. No clause changed. Wave anchor #27377, wave-3 accuracy slice S2; read at base a0f865491d",
23822388
"ref": "#27438"
2389+
},
2390+
{
2391+
"revision": 3,
2392+
"date": "2026-11-04",
2393+
"change": "source[0] re-pointed: FLOW_GLYPH_ICON / FLOW_GLYPH_LABEL_KEY, flowDotClass and FlowStatusDot moved unchanged from ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx to AutomationsFlowRail.tsx beside it (#29988 slice 4, a move-only split); the rail legend and the New automation presets stay. Re-read at base 9d1a465f0. No clause changed",
2394+
"ref": "#29988"
23832395
}
23842396
]
23852397
},
@@ -2567,7 +2579,7 @@
25672579
"title": "The flow state Studio shows is the state the deployment runs: the rail dot and the header read what GET /api/v1/automation/_status reports — On, Off, Not running here with the platform's reason — and an enabled record-triggered flow actually runs",
25682580
"since": "v18",
25692581
"status": "active",
2570-
"revision": 2,
2582+
"revision": 3,
25712583
"priority": "P1",
25722584
"surface": "mixed",
25732585
"personas": [
@@ -2628,7 +2640,7 @@
26282640
"ref": "ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.flowStatusTruth-11779.test.tsx + FlowStatusDot.test.tsx + StudioDesignSurface.railUnboundReason-11281.test.tsx: jsdom pins of the reading against a _status double — evidence for acceptance[0] and [1] at the component layer; the live pairing and the runs stay the run's"
26292641
},
26302642
"source": [
2631-
"ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx (FlowStatusDot and flowRailStatus: green On, grey Not running here titled with the reason, amber Refused, hollow Off; objectui#11779, #11281, #12454)",
2643+
"ui/packages/app-shell/src/views/studio-design/AutomationsFlowRail.tsx (FlowStatusDot and flowRailStatus: green On, grey Not running here titled with the reason, amber Refused, hollow Off; objectui#11779, #11281, #12454)",
26322644
"packages/services/service-automation/src/engine.ts (getFlowRuntimeStates — the rows GET /automation/_status passes through)",
26332645
"RUNNER.md environment facts (package-authored scheduled work is OFF unless OS_AUTOMATION_SCHEDULED_WORK_ENABLED=1)",
26342646
"cross-ref: the API kill switch ({enabled} at the automation door) is automation.flow-toggle-kill-switch; scheduled-work policy itself is the RUNNER.md fact, not a defect"
@@ -2645,6 +2657,12 @@
26452657
"date": "2026-11-01",
26462658
"change": "negative[1] moved to source[3]: it was a scope note naming the items that own the neighbouring surfaces, which no run can decide, so it could only score skipped. Its text is unchanged except the SCOPE: label, which now reads cross-ref:, the spelling the sibling source rows use. Ruling 6545938831 item ① on #28345 (scope notes leave negative[], which keeps only decidable entries; the #27651 precedent). No clause changed. Wave anchor #27377",
26472659
"ref": "#28345"
2660+
},
2661+
{
2662+
"revision": 3,
2663+
"date": "2026-11-04",
2664+
"change": "source[0] re-pointed: FlowStatusDot and flowRailStatus moved unchanged from ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx to AutomationsFlowRail.tsx beside it (#29988 slice 4, a move-only split). Re-read at base 9d1a465f0. No clause changed",
2665+
"ref": "#29988"
26482666
}
26492667
]
26502668
},
@@ -3720,7 +3738,7 @@
37203738
"title": "Permission sets are created, found and locked honestly in Studio's Access pillar: the New dialog derives the identifier and refuses one already taken — published or draft — the rail searches and shows its empty states, and on a read-only package New lands in its .custom pair while the packaged set offers no edit and the server refuses the forged write, and New similar on a packaged set copies it under a new name into that pair",
37213739
"since": "v18",
37223740
"status": "active",
3723-
"revision": 7,
3741+
"revision": 8,
37243742
"priority": "P2",
37253743
"surface": "mixed",
37263744
"personas": [
@@ -3793,7 +3811,7 @@
37933811
"ref": "ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.accessNewSimilar-28573.test.tsx (jsdom, the real Access pillar against a mocked server: acceptance[5]'s console half — New similar posts exactly { name, label }, opens the copy where the answer says it landed, shows a 409 in the server's words, and draws no override gesture on a base set) + packages/runtime/src/domains/permission-set-clone.test.ts (the clone door through the HttpDispatcher in-process over a test security catalog: acceptance[5]'s server half — a packaged source with no target is copied whole into <X>.custom through the ensure door). Neither drives a booted deployment, so they score acceptance[5] partial at most (RUNNER rule 6) and its live leg is the run's. Acceptance[0]–[4] have no pin: they are the run's live leg. The live spec of #28579 slice 3 (ui/e2e/live/studio-customize-journey.spec.ts) does not open the Access pillar"
37943812
},
37953813
"source": [
3796-
"ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx (the Access pillar: the New set dialog, the taken-identifier check findTakenIdentifier and CreateTakenNotice before the create's If-None-Match: *, discardDraft, the rail search and empty states, openCreateSet offered on a read-only base when newInPair — ADR-0146 D3, #28572) + ui/packages/app-shell/src/views/studio-design/packages-io.ts#ensureCustomizationPackage (the ensure door the New save calls first on a read-only base)",
3814+
"ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx (the Access pillar: the New set dialog, the taken-identifier check before the create's If-None-Match: *, discardDraft, the rail search and empty states, openCreateSet offered on a read-only base when newInPair — ADR-0146 D3, #28572) + ui/packages/app-shell/src/views/studio-design/StudioPillarKit.tsx (findTakenIdentifier and CreateTakenNotice, the check and the notice the pillar draws) + ui/packages/app-shell/src/views/studio-design/packages-io.ts#ensureCustomizationPackage (the ensure door the New save calls first on a read-only base)",
37973815
"ui/packages/app-shell/src/views/metadata-admin/permission-set-clone.ts#clonePermissionSet (POST /api/v1/security/permission-sets/:name/clone with { name, label }; where the copy lands is read off the answer) + packages/runtime/src/domains/permission-set-clone.ts#clonePermissionSetDefinition (the whole copy, saved in the source package's pair) — #28573 (N-20b) landed by PR #28669; the door's pair placement #28563 (N-20a)",
37983816
"ui/packages/i18n/src/namespaces/studio/en.ts (engine.studio.access.created / createTaken / createTakenElsewhere / emptyMain / search / bannerTitleReadOnly)",
37993817
"access-security.readonly-package-locks-studio (the sibling read-only surfaces — cross-referenced)",
@@ -3841,6 +3859,12 @@
38413859
"date": "2026-11-02",
38423860
"change": "an automated block is added (#28579 slice 3): New similar's two pins, StudioDesignSurface.accessNewSimilar-28573.test.tsx (jsdom) and permission-set-clone.test.ts (the door in-process), scoped to acceptance[5] and its layers; acceptance[0]–[4] keep no pin, and the slice 3 live spec does not open the Access pillar. kind unit. No clause or step changed",
38433861
"ref": "#28579"
3862+
},
3863+
{
3864+
"revision": 8,
3865+
"date": "2026-11-04",
3866+
"change": "source[0] re-pointed: findTakenIdentifier and CreateTakenNotice moved unchanged from ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx to StudioPillarKit.tsx beside it (#29988 slice 4, a move-only split); the Access pillar's use of them stays. Re-read at base 9d1a465f0. No clause changed",
3867+
"ref": "#29988"
38443868
}
38453869
]
38463870
},

‎ui/packages/app-shell/src/__tests__/homeRecoveryRedirectsFollowDeclaration-7373.test.ts‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,9 @@ const RECOVERY_SITES: ReadonlyArray<{
140140
'packages/app-shell/src/views/studio-design/StudioNavItemInspector.tsx',
141141
'packages/app-shell/src/views/studio-design/PackageSwitcher.tsx',
142142
'packages/app-shell/src/views/studio-design/InterfacesNavRail.tsx',
143+
'packages/app-shell/src/views/studio-design/AutomationsFlowRail.tsx',
144+
'packages/app-shell/src/views/studio-design/StudioPillarKit.tsx',
145+
'packages/app-shell/src/views/studio-design/DataPillarHelpers.tsx',
143146
],
144147
site: 'Studio: deleted-package eviction + header Home',
145148
expression: /const homePath = useHomePath\(\)/,

‎ui/scripts/__tests__/spec-symbol-ledger-app-shell-7265.test.ts‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ const SITES = [
6767
'packages/app-shell/src/views/studio-design/StudioNavItemInspector.tsx',
6868
'packages/app-shell/src/views/studio-design/PackageSwitcher.tsx',
6969
'packages/app-shell/src/views/studio-design/InterfacesNavRail.tsx',
70+
'packages/app-shell/src/views/studio-design/AutomationsFlowRail.tsx',
71+
'packages/app-shell/src/views/studio-design/StudioPillarKit.tsx',
72+
'packages/app-shell/src/views/studio-design/DataPillarHelpers.tsx',
7073
'packages/app-shell/src/hooks/useTrackRouteAsRecent.ts',
7174
'packages/app-shell/src/utils/deriveRelatedLists.ts',
7275
'packages/app-shell/src/views/metadata-admin/datasource/DatasourceResourcePage.tsx',

0 commit comments

Comments
 (0)