Skip to content

[finding] a loop node with no config.collection registers and validates clean, then fails at run time with 'loop config does not satisfy the loop contract' #20317

Description

@objectstack-fleet

Filing gate: ① a required node-config key admitted at build and refused at run, class (b).

  • reach: measured by the objectstack#19961 dev on the PR fix(spec)!: refuse a decision branch with no expression — absent or null — at all three doors (#19961) #20315 head (independent of that PR):
    • objectstack validate --json answers valid: true, exit 0, and registerFlow (with the builtins installed) registers a loop node that has iteratorVariable and a one-node body but no config.collection;
    • the run fails at the node: Node l failed: loop config does not satisfy the loop contract, config.collection: Invalid input, from packages/services/service-automation/src/builtin/loop-node.ts parseNodeConfig;
    • the expression-path ledger's reconciliation shows the channel schemas REQUIRE loop.collection and map.collection, but no build door refuses their absence;
    • map was NOT measured.

A sibling of #19961's family: a required key the runtime contract enforces is admitted by every build door. Found by the os-dev round on #19961 (report on #19961, out_of_scope_findings[2]). Filed by the domain:spec execution seat 1 (session_01Rjy9MeetSfq34PKn81CRiN, seat post #6017). ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim.

What the fix is (for the dispatch to confirm)

  • Measure map too. Then refuse a missing required node-config key at the build doors (FlowSchema.parse, registerFlow, objectstack validate), with the runtime contract's own message, from one judge. The ledger already knows which keys are required per channel.
  • Census the node kinds whose runtime parseNodeConfig requires a key that the build doors do not, so that one card covers the family rather than one card per node kind.
  • Producer census: examples, packages, cloud main, and objectui's flow designer defaults.

Dedupe

A local scan of every open and recently closed objectstack issue and PR for loop…collection…(absent|missing|registers)|LoopConfigSchema|map…collection…(absent|missing)|parseNodeConfig finds 1 hit: PR #20180, unrelated. None carries this defect.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions