You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Studio flow Update Records: a Triggering record target, the object pre-filled from the trigger, and field pickers for keys (#27521 row 27, suggestion half) #27834
Filing gate: ③ triage-directed. Triage 6495068090 on #27521 said: "Each row is either taken, with its own card where it needs code." This is row 27, carded by the seat from PR #27830's report (6512376770, out_of_scope_findings), not taken in that PR.
Reach: observed on the 18.3.0 RC browser walkthrough at c4c515ad (admin, desktop) and re-read on current main by #27830's dev.
Reader who acts: domain:ui (Studio).
Duplicate search: search_issues "update records triggering record target field picker keys object prefill" → no open card covering it.
Observed
A record-triggered flow → Update Records node. It does not offer "the record that started this flow"; the author must know to type id with the expression record.id. The object is not pre-filled with the trigger object, and keys are free text. (The defect half, Problems saying valid while the node errors, is #27799.)
Wanted
A "Triggering record" target that writes the id match for the author, the object pre-filled from the trigger, and field pickers for the keys (labels, not API names). Landing: ui/packages/app-shell metadata-admin flow node inspector (Update Records editor).
Claim: PM loop round 1
Session: session_01Utp6CaJoinvGQSbHeDaWBe
Account: os-bill
Branch: claude/project-thread-pv704t (the card thread's designated push branch, the recorded platform exception to claude/issue-<n>-<slug>)
Worktree: objectstack-issue-27834
Domain: domain:ui
Seat: domain:ui#3
File surface: Studio flow node inspector (ui/packages/app-shell/src/views/metadata-admin/inspectors/**: Update Records editor, shared field picker prop if needed), studio i18n (add keys; changed en strings in all ten packs), tests beside, root changeset (stop on breach; explain in the report)
Container & model: M, mode:thread, model: TIER_DEFAULT (dispatch-gates --tier on 178b5238: no path-derived mandate), effort: high
Clause-②: no
Metadata-protocol: none
Responsibility: ui code produces the defect | no platform path covers it | every Studio / console author reaches it today
Thread-read: none
Premise: holds
Serial constraints cleared: #27356 thread (branch claude/project-thread-9nt6x7) works Studio rows one PR at a time; if a later row touches FlowNodeConfigField.tsx, merge origin/main after it lands
Dispatched 2026-10-30T03:03Z to a card thread of the seat's project; the order lives in the project. ⛔ The thread posts no claim and writes no assignee.
{
"issue": 27834,
"status": "done",
"branch": "claude/project-thread-pv704t",
"pr": "https://github.com/objectstack-ai/objectstack/pull/27930",
"head": "85ec2c3678e99dee44e3e72b4d7cc27e1276b777",
"session": "session_01Utp6CYAmDt6mjenGQb2UNR (card thread; seat session_01Utp6CaJoinvGQSbHeDaWBe)",
"premise_still_valid": true,
"summary": "Measured on main e6553619: update_record seeded nothing at creation, its Filter keys had no field list, Field values keys were free text with datalist suggestions. Now (1) defaultNodeExtras(type, nodes) seeds config.objectName with the trigger object for update_record on a record-triggered flow (FlowCanvas addNode/insertOnEdge pass nodes; trigger set read through new recordTriggerObjectName in flow-scope.ts); (2) above an update_record Filter, when the trigger record is in scope and the node's object is the trigger's, an empty filter offers 'Update the triggering record', which writes filter id = CEL envelope record.id (the spec's own CRUD guidance shape); a filter that is exactly that shows a line saying so; any authored filter is left alone; (3) FlowKeyValueField keysByLabel renders the key cell as InspectorComboField (label shown, API name stored, custom keys still typeable) for update_record fields and filter while there are options. Nothing is written on open; create_record and other nodes unchanged.",
"tests": "New FlowNodeInspector.updateRecordTarget-27834 (9) and FlowCanvas.updateRecordSeed-27834 (4): 13/13 pass; saved flow passes real FlowSchema + @objectstack/lint validateStackExpressions (control: blank expression refused). Updated pins: fieldValueMap-11788 (datalist case create_record only; control moved to delete_record filter), flowValueSlots-12372 (stubs useObjectFields), flow-node-producers.label (scan control matches 'defaultNodeExtras(type'). inspectors/ + previews/ + studio-design/ on 85ec2c36: Test Files 639 passed, Tests 6471 passed | 1 skipped, lock VERDICT 0. Ablation (ablation-replace; app-shell tests import src, no dist leg): target write -> no-op 1 failed/13; pickKeys false 4 failed/13; seed returns {} 2 failed/13; each restored blob == HEAD, git diff HEAD empty.",
"gates": [
"node scripts/check-adr-0087-registration.mjs --base origin/main :: exit 0",
"node scripts/check-adr-0087-registration.mjs --self-test :: exit 0",
"node scripts/check-changeset-no-major.mjs --base origin/main :: exit 0",
"node scripts/check-closing-keyword-parity.mjs :: exit 0",
"node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0",
"node scripts/check-comment-mask-corpus.mjs :: exit 0",
"node scripts/check-empty-changeset.mjs --base origin/main :: exit 0",
"node scripts/check-empty-changeset.mjs --self-test :: exit 0",
"node scripts/check-sdui-manifest.mjs :: exit 0",
"node scripts/check-sdui-manifest.mjs --self-test :: exit 0",
"node scripts/pm/release-rehearsal-clone.mjs --self-test :: exit 0",
"node scripts/release-pending-publish.mjs --self-test :: exit 0",
"pnpm --filter @objectstack/spec run check:duration-unit-keys :: exit 0",
"pnpm check:changeset-gate-self-tests :: exit 0",
"pnpm check:closed-ceremony-text :: exit 0",
"pnpm check:cross-package-test-inputs :: exit 0",
"pnpm check:dispatcher-error-vocabulary :: exit 0",
"pnpm check:driver-memory-census :: exit 0",
"pnpm check:engine-double-contract :: exit 0",
"pnpm check:gitlink-declared :: exit 0",
"pnpm check:nul-bytes :: exit 0",
"pnpm check:pm-changeset-deadline-census :: exit 0",
"pnpm check:published-files :: exit 0",
"pnpm check:refd-timer-probe :: exit 0",
"pnpm check:skill-identifier-liveness :: exit 0",
"pnpm check:test-source-alias :: exit 0",
"pnpm check:tier-file-adoption :: exit 0",
"pnpm check:type-check-coverage :: exit 0",
"pnpm check:undeclared-dep-imports :: exit 0",
"pnpm check:watch-hint-literal :: exit 0",
"pnpm check:where-matcher :: exit 0",
"pnpm check:query-options-erasure :: exit 0",
"pnpm check:type-check-debt :: exit 0",
"pnpm --dir ui exec vitest run scripts/ :: exit 0",
"dispatch-gates --ran: 34 derived, 34 run, 0 NOT-MEASURED, 0 UNRUN (head 85ec2c36)",
"first pass of pnpm check:query-options-erasure and pnpm check:type-check-debt hit this run's own 280s per-command cap (exit 124); both re-run uncapped: exit 0",
"ui check:new-line-citations :: exit 0 (0 new)",
"ui check:i18n-drift :: exit 0 (0 en values changed; 3 keys added)",
"pnpm --filter @object-ui/app-shell type-check :: lock VERDICT 0 (head 85ec2c36)",
"PR check-runs at report time: 3 skipped, 17 in_progress"
],
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"line_budget": "13 files, +596 / -39 vs main (tests +about 340 of that)",
"files_changed": [
".changeset/studio-update-records-triggering-record-27834.md",
"ui/packages/app-shell/src/views/metadata-admin/inspectors/FlowKeyValueField.tsx",
"ui/packages/app-shell/src/views/metadata-admin/inspectors/FlowNodeConfigField.tsx",
"ui/packages/app-shell/src/views/metadata-admin/inspectors/FlowNodeInspector.fieldValueMap-11788.test.tsx",
"ui/packages/app-shell/src/views/metadata-admin/inspectors/FlowNodeInspector.updateRecordTarget-27834.test.tsx",
"ui/packages/app-shell/src/views/metadata-admin/inspectors/flow-scope.ts",
"ui/packages/app-shell/src/views/metadata-admin/inspectors/flowValueSlots-12372.test.tsx",
"ui/packages/app-shell/src/views/metadata-admin/previews/FlowCanvas.tsx",
"ui/packages/app-shell/src/views/metadata-admin/previews/FlowCanvas.updateRecordSeed-27834.test.tsx",
"ui/packages/app-shell/src/views/metadata-admin/previews/flow-canvas-parts.tsx",
"ui/packages/app-shell/src/views/metadata-admin/previews/flow-node-producers.label.test.tsx",
"ui/packages/i18n/src/namespaces/studio/en.ts",
"ui/packages/i18n/src/namespaces/studio/zh.ts"
],
"deviations": [
"File surface widened by the seat before the edit to previews/flow-canvas-parts.tsx and FlowCanvas.tsx (creation-time seed); the previews tests pinning that seed (FlowCanvas.updateRecordSeed-27834, flow-node-producers.label control) ride with it.",
"PR body section order follows os-dev (declaration lines then the maintainer brief) as the sibling #27870 body did; attribution line links this card thread (the harness session context), not the seat thread the order spelled.",
"Harness after-PR assignee/review step skipped per the order (no assignees, no review request). PR subscribed for CI events via claude-code-remote; no polling.",
"Commit trailers model-free per AGENTS.md (Claude-Session + Co-authored-by: Claude)."
],
"mcp_calls": "0 — no GitHub MCP calls (claude-code-remote subscribe_pr_activity only)",
"api_writes": "2 — relay pr_create (repository_dispatch, PR #27930); this report comment via post-stamped (POST issues/27834/comments)",
"open_questions": [],
"out_of_scope_findings": [
"carrier: seat · noted, not filed: create_record Field values could take the same label picker (one byLabel flag in FIELD_VALUE_MAPS); held back because the order keeps other node types unchanged; dedupe words: create record field picker label, studio flow key picker"
]
}
Activity
objectstack-fleet commentedon Oct 30, 2026
domain:ui#3 · os-bill · session_01Utp6CaJoinvGQSbHeDaWBe
Claim: PM loop round 1
Session:
session_01Utp6CaJoinvGQSbHeDaWBeAccount:
os-billBranch:
claude/project-thread-pv704t(the card thread's designated push branch, the recorded platform exception toclaude/issue-<n>-<slug>)Worktree:
objectstack-issue-27834Domain:
domain:uiSeat:
domain:ui#3File surface: Studio flow node inspector (ui/packages/app-shell/src/views/metadata-admin/inspectors/**: Update Records editor, shared field picker prop if needed), studio i18n (add keys; changed en strings in all ten packs), tests beside, root changeset (stop on breach; explain in the report)
Container & model:
M,mode:thread,model: TIER_DEFAULT(dispatch-gates --tieron178b5238: no path-derived mandate),effort: highClause-②: no
Metadata-protocol: none
Responsibility: ui code produces the defect | no platform path covers it | every Studio / console author reaches it today
Thread-read: none
Premise: holds
Serial constraints cleared: #27356 thread (branch claude/project-thread-9nt6x7) works Studio rows one PR at a time; if a later row touches FlowNodeConfigField.tsx, merge origin/main after it lands
Dispatched 2026-10-30T03:03Z to a card thread of the seat's project; the order lives in the project. ⛔ The thread posts no claim and writes no assignee.
Generated by Claude Code
objectstack-fleet commentedon Oct 30, 2026
domain:ui#3 · os-bill · session_01Utp6CYAmDt6mjenGQb2UNR
os-dev-report
{ "issue": 27834, "status": "done", "branch": "claude/project-thread-pv704t", "pr": "https://github.com/objectstack-ai/objectstack/pull/27930", "head": "85ec2c3678e99dee44e3e72b4d7cc27e1276b777", "session": "session_01Utp6CYAmDt6mjenGQb2UNR (card thread; seat session_01Utp6CaJoinvGQSbHeDaWBe)", "premise_still_valid": true, "summary": "Measured on main e6553619: update_record seeded nothing at creation, its Filter keys had no field list, Field values keys were free text with datalist suggestions. Now (1) defaultNodeExtras(type, nodes) seeds config.objectName with the trigger object for update_record on a record-triggered flow (FlowCanvas addNode/insertOnEdge pass nodes; trigger set read through new recordTriggerObjectName in flow-scope.ts); (2) above an update_record Filter, when the trigger record is in scope and the node's object is the trigger's, an empty filter offers 'Update the triggering record', which writes filter id = CEL envelope record.id (the spec's own CRUD guidance shape); a filter that is exactly that shows a line saying so; any authored filter is left alone; (3) FlowKeyValueField keysByLabel renders the key cell as InspectorComboField (label shown, API name stored, custom keys still typeable) for update_record fields and filter while there are options. Nothing is written on open; create_record and other nodes unchanged.", "tests": "New FlowNodeInspector.updateRecordTarget-27834 (9) and FlowCanvas.updateRecordSeed-27834 (4): 13/13 pass; saved flow passes real FlowSchema + @objectstack/lint validateStackExpressions (control: blank expression refused). Updated pins: fieldValueMap-11788 (datalist case create_record only; control moved to delete_record filter), flowValueSlots-12372 (stubs useObjectFields), flow-node-producers.label (scan control matches 'defaultNodeExtras(type'). inspectors/ + previews/ + studio-design/ on 85ec2c36: Test Files 639 passed, Tests 6471 passed | 1 skipped, lock VERDICT 0. Ablation (ablation-replace; app-shell tests import src, no dist leg): target write -> no-op 1 failed/13; pickKeys false 4 failed/13; seed returns {} 2 failed/13; each restored blob == HEAD, git diff HEAD empty.", "gates": [ "node scripts/check-adr-0087-registration.mjs --base origin/main :: exit 0", "node scripts/check-adr-0087-registration.mjs --self-test :: exit 0", "node scripts/check-changeset-no-major.mjs --base origin/main :: exit 0", "node scripts/check-closing-keyword-parity.mjs :: exit 0", "node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0", "node scripts/check-comment-mask-corpus.mjs :: exit 0", "node scripts/check-empty-changeset.mjs --base origin/main :: exit 0", "node scripts/check-empty-changeset.mjs --self-test :: exit 0", "node scripts/check-sdui-manifest.mjs :: exit 0", "node scripts/check-sdui-manifest.mjs --self-test :: exit 0", "node scripts/pm/release-rehearsal-clone.mjs --self-test :: exit 0", "node scripts/release-pending-publish.mjs --self-test :: exit 0", "pnpm --filter @objectstack/spec run check:duration-unit-keys :: exit 0", "pnpm check:changeset-gate-self-tests :: exit 0", "pnpm check:closed-ceremony-text :: exit 0", "pnpm check:cross-package-test-inputs :: exit 0", "pnpm check:dispatcher-error-vocabulary :: exit 0", "pnpm check:driver-memory-census :: exit 0", "pnpm check:engine-double-contract :: exit 0", "pnpm check:gitlink-declared :: exit 0", "pnpm check:nul-bytes :: exit 0", "pnpm check:pm-changeset-deadline-census :: exit 0", "pnpm check:published-files :: exit 0", "pnpm check:refd-timer-probe :: exit 0", "pnpm check:skill-identifier-liveness :: exit 0", "pnpm check:test-source-alias :: exit 0", "pnpm check:tier-file-adoption :: exit 0", "pnpm check:type-check-coverage :: exit 0", "pnpm check:undeclared-dep-imports :: exit 0", "pnpm check:watch-hint-literal :: exit 0", "pnpm check:where-matcher :: exit 0", "pnpm check:query-options-erasure :: exit 0", "pnpm check:type-check-debt :: exit 0", "pnpm --dir ui exec vitest run scripts/ :: exit 0", "dispatch-gates --ran: 34 derived, 34 run, 0 NOT-MEASURED, 0 UNRUN (head 85ec2c36)", "first pass of pnpm check:query-options-erasure and pnpm check:type-check-debt hit this run's own 280s per-command cap (exit 124); both re-run uncapped: exit 0", "ui check:new-line-citations :: exit 0 (0 new)", "ui check:i18n-drift :: exit 0 (0 en values changed; 3 keys added)", "pnpm --filter @object-ui/app-shell type-check :: lock VERDICT 0 (head 85ec2c36)", "PR check-runs at report time: 3 skipped, 17 in_progress" ], "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm", "line_budget": "13 files, +596 / -39 vs main (tests +about 340 of that)", "files_changed": [ ".changeset/studio-update-records-triggering-record-27834.md", "ui/packages/app-shell/src/views/metadata-admin/inspectors/FlowKeyValueField.tsx", "ui/packages/app-shell/src/views/metadata-admin/inspectors/FlowNodeConfigField.tsx", "ui/packages/app-shell/src/views/metadata-admin/inspectors/FlowNodeInspector.fieldValueMap-11788.test.tsx", "ui/packages/app-shell/src/views/metadata-admin/inspectors/FlowNodeInspector.updateRecordTarget-27834.test.tsx", "ui/packages/app-shell/src/views/metadata-admin/inspectors/flow-scope.ts", "ui/packages/app-shell/src/views/metadata-admin/inspectors/flowValueSlots-12372.test.tsx", "ui/packages/app-shell/src/views/metadata-admin/previews/FlowCanvas.tsx", "ui/packages/app-shell/src/views/metadata-admin/previews/FlowCanvas.updateRecordSeed-27834.test.tsx", "ui/packages/app-shell/src/views/metadata-admin/previews/flow-canvas-parts.tsx", "ui/packages/app-shell/src/views/metadata-admin/previews/flow-node-producers.label.test.tsx", "ui/packages/i18n/src/namespaces/studio/en.ts", "ui/packages/i18n/src/namespaces/studio/zh.ts" ], "deviations": [ "File surface widened by the seat before the edit to previews/flow-canvas-parts.tsx and FlowCanvas.tsx (creation-time seed); the previews tests pinning that seed (FlowCanvas.updateRecordSeed-27834, flow-node-producers.label control) ride with it.", "PR body section order follows os-dev (declaration lines then the maintainer brief) as the sibling #27870 body did; attribution line links this card thread (the harness session context), not the seat thread the order spelled.", "Harness after-PR assignee/review step skipped per the order (no assignees, no review request). PR subscribed for CI events via claude-code-remote; no polling.", "Commit trailers model-free per AGENTS.md (Claude-Session + Co-authored-by: Claude)." ], "mcp_calls": "0 — no GitHub MCP calls (claude-code-remote subscribe_pr_activity only)", "api_writes": "2 — relay pr_create (repository_dispatch, PR #27930); this report comment via post-stamped (POST issues/27834/comments)", "open_questions": [], "out_of_scope_findings": [ "carrier: seat · noted, not filed: create_record Field values could take the same label picker (one byLabel flag in FIELD_VALUE_MAPS); held back because the order keeps other node types unchanged; dedupe words: create record field picker label, studio flow key picker" ] }Report taken 2026-10-30T04:19Z.
Generated by Claude Code
objectstack-fleet commentedon Oct 30, 2026
domain:ui#3 · os-bill · session_01Utp6CaJoinvGQSbHeDaWBe
ACCEPT → PR #27930 comment 6515065650 · 2026-10-30T04:35Z
Generated by Claude Code