xai-org/x-algorithm · error · SemanticCheckFailure

StructTuple should have at least one field

Error message

StructTuple should have at least one field

What it means

ToStructTuple() requires at least one field; calling it with zero children throws SemanticCheckFailure during construction. A struct with no fields is not representable, so this is a build-time check.

Source

Thrown at botmaker/src/java/com/twitter/botmaker/function/collection/ToStructTuple.java:43

    super(exprText, children);
    this.fieldNames = fieldNames;
  }

  @Override
  protected CacheLevel getCacheLevel() {
    return CacheLevel.Global;
  }

  @Override
  protected Object apply(Context<Runtime> context, List<Object> args) throws Exception {
    return StructTuple.of(fieldNames, args);
  }

  public static ToStructTuple of(
      String funcName, ImmutableList<ASTNode> children) throws SemanticCheckFailure {

    if (children.size() == 0) {
      throw new SemanticCheckFailure("StructTuple should have at least one field");
    }

    ImmutableList.Builder<String> fieldNamesBuilder = ImmutableList.builder();
    ImmutableList.Builder<Type> fieldTypesBuilder = ImmutableList.builder();
    ImmutableList.Builder<ASTNode> childrenBuilder = ImmutableList.builder();
    for (ASTNode child : children) {
      if (!(child instanceof ToPair)) {
        throw new SemanticCheckFailure(
            String.format(
                "StructTuple expects pairs of name and values, but a %s received", child));
      }

      fieldNamesBuilder.add(((Constant) child.getChildren().get(0)).getValue().toString());
      fieldTypesBuilder.add(((ASTNode) child.getChildren().get(1)).getReturnType());
      childrenBuilder.add((ASTNode) child.getChildren().get(1));
    }

    ImmutableList<String> fieldNames = fieldNamesBuilder.build();

View on GitHub (pinned to 24c60942c5)

Solutions

  1. Supply at least one name: value pair: ToStructTuple(name: value)
  2. When generating from config, validate the fields list is non-empty before building

Example fix

// before
ToStructTuple()
// after
ToStructTuple(id: 1)
Defensive patterns

Strategy: validation

Validate before calling

// host code before ToStructTuple.of
if (children.isEmpty()) {
  throw new IllegalArgumentException("StructTuple requires >= 1 field");
}

Prevention

When it happens

Trigger: Writing ToStructTuple() with no arguments, or programmatically building it with an empty children list (e.g. from an empty fields configuration).

Common situations: Generating struct definitions from config/JSON where the fields array is empty or missing.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


AI-assisted analysis of xai-org/x-algorithm@24c60942c5 (2026-08-28). Data as JSON: /api/errors/bfeb2154d052075c. Report an issue: GitHub.