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
automation: a flow's answer carries the dropped-field fact of its map items and of a subflow child that paused and resumed (delegated half of #32861) #33019
The answer's summary credits a child run's writes from a subflow and from each map item, on the synchronous leg and on both resumed legs (creditChildRun).
droppedFields rolls up only from a subflow child that completes without pausing. builtin/map-node.ts never reads the child's droppedFields; the delegated resume leg in run-resume.ts and bubbleToParent carry output and summary only.
So a parent whose map items each drop status answers summary.acted: N with no droppedFields.
Expected
Every leg that credits a child run's writes to the parent's summary also folds the child's droppedFields into the parent's answer (one event per object and reason, same fold as run-dropped-fields.ts). After this lands, the published sentence on TriggerFlowResponseSchema.data.droppedFields and AutomationResult.droppedFields that PR #33007 adds to state the delegation limit is removed or narrowed to what remains.
Work
Fold the child's droppedFields at the map node's completion exit and at both callers of creditChildRun on the resumed legs.
Harden the fold against a malformed droppedFields from a host-registered executor (review nit N1: the fold runs inside the try whose catch reads a throw as a node failure); skip what is not well-typed, never fail a completed run over it.
Pins: map items that drop yield the event on the parent; a subflow child that pauses then resumes (through the parent's resume and through its own) yields it; ablate and show red.
Clause-②: none expected if the published sentence only loses its limit (judge at the time); changeset patch.
Reader: domain:server (service-automation), after PR #33007 merges.
Dedupe: repo:objectstack-ai/objectstack is:issue droppedFields subflow map roll up → #32861 (parent), #33009 (console half).
Claim: PM loop round 3 (p1, pm:queue; the delegated half of this seat's #32861, filed from the contract review of PR #33007; card number ≡ 1 (mod 3), taken by the filing seat for continuity, seat 6 told) · 2026-11-13T06:00Z
Session: session_016WV4cwqTK71kjQzHae8T5J
Account: os-elon-musk
Branch: the card thread's designated claude/project-thread-* branch, written in its whole re-posted claim before the first push
Worktree: the card thread's own checkout
Domain: domain:server
Seat: domain:server#8
File surface: packages/services/service-automation/src/{builtin/map-node.ts,builtin/subflow-node.ts,run-resume.ts,engine.ts,run-dropped-fields.ts} and tests beside them, packages/spec/src/{api/automation-api.zod.ts,contracts/automation-service.ts} only to retire the "do not yet" sentence PR #33007 added, the regenerated content/docs/references/api/automation-api.mdx, .changeset/** (stop on breach; explain in the report)
Container & model: M, mode:thread, model: opus (TIER_DEFAULT; dispatch-gates.mjs --tier derives no path mandate), effort: high
Clause-②: yes (widening)
Metadata-protocol: none
Declaration note: the answer's droppedFields gains the events of map items and resumed subflow children (omit-when-empty member unchanged in shape); the describe sentence that said they do not roll up is retired
Responsibility: n/a — follow-up split of #32861, filed by this seat
Thread-read: 6845491629
Premise: holds (measured by the contract review of PR #33007 at 3203683d, now on main: builtin/map-node.ts never reads a child's droppedFields; the delegated resume leg and bubbleToParent carry output and summary only)
Serial constraints cleared: PR #33007 merged 2026-11-13T05:59Z; no in-flight claim in this lane names these files
Claim: PM loop round 3 (p1, pm:queue; the delegated half of this seat's #32861, filed from the contract review of PR #33007; card number ≡ 1 (mod 3), taken by the filing seat for continuity, seat 6 told) · 2026-11-13T06:05Z — card-thread re-post of claim 6845504711 with its branch
Session: session_016WV4cxDAXkDm3BEbMTZWFc
Account: os-elon-musk
Branch: claude/project-thread-a51kss
Worktree: the card thread's own checkout
Domain: domain:server
Seat: domain:server#8
File surface: packages/services/service-automation/src/{builtin/map-node.ts,builtin/subflow-node.ts,run-resume.ts,engine.ts,run-dropped-fields.ts} and tests beside them, packages/spec/src/{api/automation-api.zod.ts,contracts/automation-service.ts} only to retire the "do not yet" sentence PR #33007 added, the regenerated content/docs/references/api/automation-api.mdx, .changeset/** (stop on breach; explain in the report)
Container & model: M, mode:thread, model: opus (TIER_DEFAULT; dispatch-gates.mjs --tier derives no path mandate), effort: high
Clause-②: yes (widening)
Metadata-protocol: none
Declaration note: the answer's droppedFields gains the events of map items and resumed subflow children (omit-when-empty member unchanged in shape); the describe sentence that said they do not roll up is retired, narrowed to the one delegated leg left (a child run that failed answers no drops)
Responsibility: n/a — follow-up split of #32861, filed by this seat
Thread-read: 6845504711
Premise: holds (measured by the contract review of PR #33007 at 3203683d, now on main: builtin/map-node.ts never reads a child's droppedFields; the delegated resume leg and bubbleToParent carry output and summary only; re-read at c54a23d2 by this thread)
Serial constraints cleared: PR #33007 merged 2026-11-13T05:59Z; no in-flight claim in this lane names these files
{
"issue": 33019,
"status": "done",
"branch": "claude/project-thread-a51kss",
"pr": "https://github.com/objectstack-ai/objectstack/pull/33068",
"session": "session_016WV4cxDAXkDm3BEbMTZWFc",
"premise_still_valid": true,
"summary": "Every leg that credits a child run's writes to the parent's summary now folds the child's droppedFields into the parent's answer through one fold (foldDropEvents; dropEventsOf is the fold over steps): the map node's four exits (synchronous completion, the suspend exit on a pausing item, failure, refusal) roll the synchronously completed items' drops; creditChildRun folds a paused child's drops onto the awaiting step on both resumed legs (up-bubble via a new trailing resumeInternal parameter, delegated via childRes.droppedFields); bubbleToParent hands the completing child's drops up. The fold skips any list or event that fails Array.isArray / DroppedFieldsEventSchema.safeParse, so a host executor's malformed droppedFields never fails a completed run (review nit N1). The 'do not yet' sentence is retired on the describe and the jsdoc; the 'absent is not proof' clause is narrowed, not removed, because a FAILED child run still answers no drops while summary credits its writes; mdx regenerated. Head fb720b6c; PR body says Fixes #33019 and names Part of #32861 in prose.",
"tests": "run-dropped-fields.test.ts Tests 16 passed (16) (8 new). service-automation test: Test Files 279 passed (279), Tests 3827 passed (3827); spec test: Test Files 839 passed (839), Tests 26796 passed | 1 todo (26797); service-automation typecheck exit 0. Ablation (src-imported suite, no rebuild; committed heads; scripts/ablation-replace.mjs, each restored blob == HEAD, git diff HEAD empty): A map sync exit 1 failed|14 passed; B up-bubble creditChildRun arg 2 failed|13; C delegated creditChildRun arg 1 failed|14; D bubbleToParent hand-off 2 failed|13; E map suspend exit 1 failed|15 (of 16); F fold safeParse guard 2 failed|14; G fold Array.isArray guard 11 failed|5 (broader than the not-a-list pin: the guard also skips the undefined list of every drop-free step).",
"gates": "Head fb720b6c, after whole-tree turbo build (exit 0) and the plugin-teardown fixture fetch. dispatch-gates --commands derived 116; all 116 exit 0; dispatch-gates --ran: 116 run, 0 NOT-MEASURED. pnpm lint exit 0. CI check-runs on PR #33068: in_progress at report time (not re-run, not waited on).",
"dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
"mcp_calls": "0",
"api_writes": "3 relay writes as objectstack-fleet[bot]: comment on #33019 (claim re-post 6845576912), pr_create (#33068), this report comment",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": [
"carrier: none · noted, not filed: a FAILED child run (subflow or map item) contained by try_catch or a fault edge credits its writes to summary but answers no droppedFields, because only a terminal success carries the member; the published clause states it. Carrying drops on a failed answer widens AutomationResult's failure shape (a spec decision), so it is not done here.",
"carrier: none · noted: .changeset/32861-flow-answer-dropped-fields.md (unreleased) still says paused children and map items 'do not yet' roll up; left as written, this PR's changeset says it lifts that limit."
]
}
Source: contract review record 6846914053 (CONTRACT_REVIEW_TIER, served by triage#1, PASS on fb720b6c, no must-fix).
Fix in this PR, one push:
S1: two pins, each with its own single-cut ablation shown red: (a) a map whose first item drops and a later item fails under a try_catch or fault edge, the drop reaching the parent's answer through the map's failure exit; (b) a creditChildRun onto a step that already holds drops (an earlier item drops, a later item pauses, drops and resumes), both events in the answer.
After the push: a delta review at the same tier (requested from triage#1 under the maintainer's 「fable 不多了。后续契约复审找分诊」), then ACCEPT and landing on a green head.
{
"issue": 33019,
"status": "done",
"branch": "claude/project-thread-a51kss",
"pr": "https://github.com/objectstack-ai/objectstack/pull/33068",
"session": "session_016WV4cxDAXkDm3BEbMTZWFc",
"premise_still_valid": true,
"summary": "Round 2, seat rulings 6846930076 item 1, one push (fb720b6c -> d7a8d98f, two commits, no main merge). S1: two pins in run-dropped-fields.test.ts, each with its own single-cut ablation red: (a) a map whose first item drops and whose second fails under a fault edge completes with the first item's drop (the map failure exit); (b) item a drops amount synchronously, item b pauses and, resumed, drops memo, and the answer holds one event with both fields (creditChildRun merging onto a step that already holds drops). S2: the describe, the AutomationResult jsdoc and the changeset's What remains now also name a map item whose paused run an operator cancelled (#27971) beside the failed child; mdx regenerated. Updated PR body for the seat to write: /mnt/project-files/server-lane-seat8/33019/pr-body.md (round-1 body kept as pr-body-fb720b6c.md).",
"tests": "run-dropped-fields.test.ts Tests 18 passed (18); service-automation typecheck exit 0; spec src/api/automation-api.zod.test.ts + src/contracts/: Test Files 53 passed (53), Tests 555 passed (555). Ablation on 4bc2b134 via scripts/ablation-replace.mjs (suite imports src, no rebuild): H map failure exit ...rolledDrops() removed -> Tests 1 failed | 17 passed (18), the fault-edge case alone; I creditChildRun merge foldDropEvents([steps[i].droppedFields, childDroppedFields]) -> child's list alone -> Tests 1 failed | 17 passed (18), the merge case alone. Both restored blob == HEAD, git diff HEAD empty.",
"gates": "Head d7a8d98f after whole-tree turbo build (exit 0). Derivation unchanged from fb720b6c (same 116 commands); the 67 reading packages/spec, docs, the changeset, issue citations, NUL bytes or test sources re-run: 67 exit 0, none exit 3 (gates-ran-affected-d7a8d98f.txt). CI check-runs on the new head: in_progress at report time, not re-run.",
"dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
"mcp_calls": "0",
"api_writes": "1 relay write: this report comment (PR body left for the seat to write)",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": [
"carrier: #33020 (seat ruling item 2) · N2: the step log keeps a malformed droppedFields the answer skips"
]
}
Activity
objectstack-fleet commentedon Nov 13, 2026
domain:server#8 · os-elon-musk · session_016WV4cwqTK71kjQzHae8T5J
Unblocked · 2026-11-13T06:00Z:
Blocked-by: #33007merged (2026-11-13T05:59Z). Back topm:queue.objectstack-fleet commentedon Nov 13, 2026
domain:server#8 · os-elon-musk · session_016WV4cwqTK71kjQzHae8T5J
Claim: PM loop round 3 (p1,
pm:queue; the delegated half of this seat's #32861, filed from the contract review of PR #33007; card number ≡ 1 (mod 3), taken by the filing seat for continuity, seat 6 told) · 2026-11-13T06:00ZSession:
session_016WV4cwqTK71kjQzHae8T5JAccount:
os-elon-muskBranch: the card thread's designated
claude/project-thread-*branch, written in its whole re-posted claim before the first pushWorktree: the card thread's own checkout
Domain:
domain:serverSeat:
domain:server#8File surface:
packages/services/service-automation/src/{builtin/map-node.ts,builtin/subflow-node.ts,run-resume.ts,engine.ts,run-dropped-fields.ts}and tests beside them,packages/spec/src/{api/automation-api.zod.ts,contracts/automation-service.ts}only to retire the "do not yet" sentence PR #33007 added, the regeneratedcontent/docs/references/api/automation-api.mdx,.changeset/**(stop on breach; explain in the report)Container & model:
M,mode:thread,model: opus(TIER_DEFAULT;dispatch-gates.mjs --tierderives no path mandate),effort: highClause-②: yes (widening)
Metadata-protocol: none
Declaration note: the answer's
droppedFieldsgains the events ofmapitems and resumedsubflowchildren (omit-when-empty member unchanged in shape); the describe sentence that said they do not roll up is retiredResponsibility:
n/a — follow-up split of #32861, filed by this seatThread-read: 6845491629
Premise: holds (measured by the contract review of PR #33007 at
3203683d, now on main:builtin/map-node.tsnever reads a child'sdroppedFields; the delegated resume leg andbubbleToParentcarryoutputandsummaryonly)Serial constraints cleared: PR #33007 merged 2026-11-13T05:59Z; no in-flight claim in this lane names these files
objectstack-fleet commentedon Nov 13, 2026
domain:server#8 · os-elon-musk · session_016WV4cxDAXkDm3BEbMTZWFc
Claim: PM loop round 3 (p1,
pm:queue; the delegated half of this seat's #32861, filed from the contract review of PR #33007; card number ≡ 1 (mod 3), taken by the filing seat for continuity, seat 6 told) · 2026-11-13T06:05Z — card-thread re-post of claim 6845504711 with its branchSession:
session_016WV4cxDAXkDm3BEbMTZWFcAccount:
os-elon-muskBranch:
claude/project-thread-a51kssWorktree: the card thread's own checkout
Domain:
domain:serverSeat:
domain:server#8File surface:
packages/services/service-automation/src/{builtin/map-node.ts,builtin/subflow-node.ts,run-resume.ts,engine.ts,run-dropped-fields.ts}and tests beside them,packages/spec/src/{api/automation-api.zod.ts,contracts/automation-service.ts}only to retire the "do not yet" sentence PR #33007 added, the regeneratedcontent/docs/references/api/automation-api.mdx,.changeset/**(stop on breach; explain in the report)Container & model:
M,mode:thread,model: opus(TIER_DEFAULT;dispatch-gates.mjs --tierderives no path mandate),effort: highClause-②: yes (widening)
Metadata-protocol: none
Declaration note: the answer's
droppedFieldsgains the events ofmapitems and resumedsubflowchildren (omit-when-empty member unchanged in shape); the describe sentence that said they do not roll up is retired, narrowed to the one delegated leg left (a child run that failed answers no drops)Responsibility:
n/a — follow-up split of #32861, filed by this seatThread-read: 6845504711
Premise: holds (measured by the contract review of PR #33007 at
3203683d, now on main:builtin/map-node.tsnever reads a child'sdroppedFields; the delegated resume leg andbubbleToParentcarryoutputandsummaryonly; re-read atc54a23d2by this thread)Serial constraints cleared: PR #33007 merged 2026-11-13T05:59Z; no in-flight claim in this lane names these files
objectstack-fleet commentedon Nov 13, 2026
domain:server#8 · os-elon-musk · session_016WV4cxDAXkDm3BEbMTZWFc
os-dev-report
{ "issue": 33019, "status": "done", "branch": "claude/project-thread-a51kss", "pr": "https://github.com/objectstack-ai/objectstack/pull/33068", "session": "session_016WV4cxDAXkDm3BEbMTZWFc", "premise_still_valid": true, "summary": "Every leg that credits a child run's writes to the parent's summary now folds the child's droppedFields into the parent's answer through one fold (foldDropEvents; dropEventsOf is the fold over steps): the map node's four exits (synchronous completion, the suspend exit on a pausing item, failure, refusal) roll the synchronously completed items' drops; creditChildRun folds a paused child's drops onto the awaiting step on both resumed legs (up-bubble via a new trailing resumeInternal parameter, delegated via childRes.droppedFields); bubbleToParent hands the completing child's drops up. The fold skips any list or event that fails Array.isArray / DroppedFieldsEventSchema.safeParse, so a host executor's malformed droppedFields never fails a completed run (review nit N1). The 'do not yet' sentence is retired on the describe and the jsdoc; the 'absent is not proof' clause is narrowed, not removed, because a FAILED child run still answers no drops while summary credits its writes; mdx regenerated. Head fb720b6c; PR body says Fixes #33019 and names Part of #32861 in prose.", "tests": "run-dropped-fields.test.ts Tests 16 passed (16) (8 new). service-automation test: Test Files 279 passed (279), Tests 3827 passed (3827); spec test: Test Files 839 passed (839), Tests 26796 passed | 1 todo (26797); service-automation typecheck exit 0. Ablation (src-imported suite, no rebuild; committed heads; scripts/ablation-replace.mjs, each restored blob == HEAD, git diff HEAD empty): A map sync exit 1 failed|14 passed; B up-bubble creditChildRun arg 2 failed|13; C delegated creditChildRun arg 1 failed|14; D bubbleToParent hand-off 2 failed|13; E map suspend exit 1 failed|15 (of 16); F fold safeParse guard 2 failed|14; G fold Array.isArray guard 11 failed|5 (broader than the not-a-list pin: the guard also skips the undefined list of every drop-free step).", "gates": "Head fb720b6c, after whole-tree turbo build (exit 0) and the plugin-teardown fixture fetch. dispatch-gates --commands derived 116; all 116 exit 0; dispatch-gates --ran: 116 run, 0 NOT-MEASURED. pnpm lint exit 0. CI check-runs on PR #33068: in_progress at report time (not re-run, not waited on).", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "mcp_calls": "0", "api_writes": "3 relay writes as objectstack-fleet[bot]: comment on #33019 (claim re-post 6845576912), pr_create (#33068), this report comment", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [ "carrier: none · noted, not filed: a FAILED child run (subflow or map item) contained by try_catch or a fault edge credits its writes to summary but answers no droppedFields, because only a terminal success carries the member; the published clause states it. Carrying drops on a failed answer widens AutomationResult's failure shape (a spec decision), so it is not done here.", "carrier: none · noted: .changeset/32861-flow-answer-dropped-fields.md (unreleased) still says paused children and map items 'do not yet' roll up; left as written, this PR's changeset says it lifts that limit." ] }Generated by Claude Code
objectstack-fleet commentedon Nov 13, 2026
domain:server#8 · os-elon-musk · session_016WV4cwqTK71kjQzHae8T5J
Seat rulings on PR #33068 · 2026-11-13T07:27Z
Source: contract review record 6846914053 (
CONTRACT_REVIEW_TIER, served bytriage#1, PASS onfb720b6c, no must-fix).mapwhose first item drops and a later item fails under atry_catchorfaultedge, the drop reaching the parent's answer through the map's failure exit; (b) acreditChildRunonto a step that already holds drops (an earlier item drops, a later item pauses, drops and resumes), both events in the answer.AutomationResultjsdoc), the regenerated mdx and the changeset's "What remains": amapitem whose paused run an operator cancelled (service-automation: a parent-id resume of amapwhose parked item run was cancelled still advances past that item #27971) answers no drops either, beside the failed child.triage#1under the maintainer's 「fable 不多了。后续契约复审找分诊」), then ACCEPT and landing on a green head.objectstack-fleet commentedon Nov 13, 2026
domain:server#8 · os-elon-musk · session_016WV4cxDAXkDm3BEbMTZWFc
os-dev-report
{ "issue": 33019, "status": "done", "branch": "claude/project-thread-a51kss", "pr": "https://github.com/objectstack-ai/objectstack/pull/33068", "session": "session_016WV4cxDAXkDm3BEbMTZWFc", "premise_still_valid": true, "summary": "Round 2, seat rulings 6846930076 item 1, one push (fb720b6c -> d7a8d98f, two commits, no main merge). S1: two pins in run-dropped-fields.test.ts, each with its own single-cut ablation red: (a) a map whose first item drops and whose second fails under a fault edge completes with the first item's drop (the map failure exit); (b) item a drops amount synchronously, item b pauses and, resumed, drops memo, and the answer holds one event with both fields (creditChildRun merging onto a step that already holds drops). S2: the describe, the AutomationResult jsdoc and the changeset's What remains now also name a map item whose paused run an operator cancelled (#27971) beside the failed child; mdx regenerated. Updated PR body for the seat to write: /mnt/project-files/server-lane-seat8/33019/pr-body.md (round-1 body kept as pr-body-fb720b6c.md).", "tests": "run-dropped-fields.test.ts Tests 18 passed (18); service-automation typecheck exit 0; spec src/api/automation-api.zod.test.ts + src/contracts/: Test Files 53 passed (53), Tests 555 passed (555). Ablation on 4bc2b134 via scripts/ablation-replace.mjs (suite imports src, no rebuild): H map failure exit ...rolledDrops() removed -> Tests 1 failed | 17 passed (18), the fault-edge case alone; I creditChildRun merge foldDropEvents([steps[i].droppedFields, childDroppedFields]) -> child's list alone -> Tests 1 failed | 17 passed (18), the merge case alone. Both restored blob == HEAD, git diff HEAD empty.", "gates": "Head d7a8d98f after whole-tree turbo build (exit 0). Derivation unchanged from fb720b6c (same 116 commands); the 67 reading packages/spec, docs, the changeset, issue citations, NUL bytes or test sources re-run: 67 exit 0, none exit 3 (gates-ran-affected-d7a8d98f.txt). CI check-runs on the new head: in_progress at report time, not re-run.", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "mcp_calls": "0", "api_writes": "1 relay write: this report comment (PR body left for the seat to write)", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [ "carrier: #33020 (seat ruling item 2) · N2: the step log keeps a malformed droppedFields the answer skips" ] }Generated by Claude Code