Repository navigation
fix(app-shell): New automation never saves a typed prefix as the trigger object - #30148
Merged
objectstack-fleet[bot] merged 2 commits intoNov 5, 2026
Merged
Conversation
…er a typed prefix Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QSeKYpFBMr917PmVkG9up7
Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QSeKYpFBMr917PmVkG9up7
This was referenced Nov 4, 2026
objectstack-fleet
Bot
deleted the
claude/issue-30038-trigger-object-enter
branch
November 5, 2026 01:05
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refs #30038 (items 1, 2, 4)
Item 3 (the closure refusal on 问题 reads in English) does not land here: the text is produced server-side by
packages/lint/src/validate-flow-trigger-readiness.ts:513, outside this card'sui/**lane. It is listed in the report for the seat to carry. The card stays open for it.Clause-②: no
Metadata-protocol: none
维护者速读
objectsOnly);其他用到该选择框的地方(流程引用可填表达式)行为不变。回滚即撤销本 PR。ui/packages/app-shell/src/views/metadata-admin/inspectors/ObjectPicker.tsx(commitTyped一段)、StudioDesignSurface.tsx(两处objectsOnly)、ObjectPicker.test.tsx末尾新增的 describe。pnpm --dir ui exec vitest run packages/app-shell/src/views/metadata-admin/inspectors/ObjectPicker.test.tsx packages/app-shell/src/views/studio-design/StudioDesignSurface.createTaken-26917.test.tsx,预期 25 个测试全部通过。What changes
ObjectPickergains an opt-in propobjectsOnly(default off). With it, Enter and blur never commit the typed text as itself. They commit the pickable object named exactly so, else the only pickable option left in the filtered list, else no object (an empty commit), and the picker shows arole="alert"line: "No object chosen: "TEXT" is not an object. Choose one from the list." Options outside the package closure stay unpickable, as before. Before the catalog is read, nothing can be resolved and the typed text is committed as before.StudioDesignSurface.tsx) turnsobjectsOnlyon for both trigger-object pickers: the record preset and the Advanced trigger form. With a record preset and no object chosen, Create keeps the dialog open with the existing "Choose the object it watches." line.ObjectPickeruse is unchanged.FlowReferenceField.tsx(an object-kind flow reference, where an expression is legal) passes noobjectsOnlyand keeps free text.ui/packages/i18n/src/namespaces/studio/{en,zh}.ts:engine.inspector.objectPicker.notChosenandengine.inspector.objectPicker.noMatchObjectsOnly. The default empty-list line ("Press Enter to keep what you typed") would mislead at an objects-only door.Tests
ObjectPicker.test.tsx, new top-level describe "objectsOnly": a one-match prefix + Enter commits the match; a several-match prefix + Enter commits nothing and shows the refusal; a non-object name clears a chosen value on Enter and on blur; a full name commits as itself; and, withoutobjectsOnly, the same one-match prefix is committed as typed (item 2).StudioDesignSurface.createTaken-26917.test.tsx, new top-level describe (the shared New-automation harness): with the "updated" record preset, prefixtick+ Enter + Create saves a Start node withobjectName: 'acme_ticket'; prefixacme(two matches) + Enter + Create saves nothing, shows the refusal and "Choose the object it watches.", and the dialog stays open (item 1 at the door).Run on the final head
Ablation (one-shot, through scripts/ablation-replace.mjs, restored to HEAD after each leg)
ObjectPicker.tsx:if (!objectsOnly || catalog.status !== 'loaded') {replaced withif (true) {(objectsOnly ignored). Mutation landed (anchor 1 to 0, blob e2118e0a8872 to 53ef6e70092f). Result: 5 failed, 20 passed. The three objectsOnly picker cases and both door cases went red; the full-name case and the free-text (item 2) case stayed green, as they should. Restored: blob == HEAD,git diff HEADempty.StudioDesignSurface.tsx: the record preset'sobjectsOnlyreplaced withobjectsOnly={false}. Mutation landed (blob fc99d66e24c9 to b3f8845a7e8e). Result: 2 failed, 8 passed, both door cases red. Restored: blob == HEAD. The first attempt at this leg used a replacement already inside the anchor; the tool refused it as a no-op before running anything, and the anchor was changed.Acceptance notes
messageof apackages/lintfinding (validate-flow-trigger-readiness.ts:513, ruleFLOW_TRIGGER_UNKNOWN_OBJECT). It is English prose withobjectNameand the package id written into it, and no structured parameters a ui renderer could localize from. Localizing it means a producer-side change (structured params or a code the Console keys on), outside this lane.Verification
Local gates, derived with
node scripts/pm/dispatch-gates.mjs --commandsfrom the merge base and reconciled with--ran. Exit codes are in the report. CI runs the full set.Generated by Claude Code