{"record":{"id":"f3bd4d125648e6c3","repo":"xai-org/x-algorithm","slug":"input-feature-s-does-not-exist","errorCode":null,"errorMessage":"Input Feature %s does not exist","messagePattern":"Input Feature (.+?) does not exist","errorType":"validation","errorClass":"SemanticCheckFailure","httpStatus":null,"severity":"error","filePath":"botmaker/src/java/com/twitter/botmaker/compiler/CompilerBuilder.java","lineNumber":233,"sourceCode":"      public boolean containsFingerprint(Fingerprint fingerprint) {\n        return super.containsFingerprint(fingerprint)\n            || compilerUnitsFingerprints.contains(fingerprint);\n      }\n\n      @Override\n      protected Type getInputFeatureType(\n          String namespace,\n          String featureName\n      ) throws SemanticCheckFailure {\n        String fullFeatureName = namespace.isEmpty()\n            ? featureName : String.format(\"%s.%s\", namespace, featureName);\n\n        if (inputFeatureTypes.containsKey(fullFeatureName)) {\n          return inputFeatureTypes.get(fullFeatureName);\n        } else if (!strictMode) {\n          return Type.OBJECT;\n        } else {\n          throw new SemanticCheckFailure(\n              String.format(\"Input Feature %s does not exist\", fullFeatureName));\n        }\n      }\n\n      @Override\n      protected boolean containsFunction(String name) {\n        return compilerUnits.containsKey(name);\n      }\n\n      @Override\n      protected ASTNode createFunctionASTNode(\n          CompilerContext<E> context,\n          String funcName,\n          ImmutableList<ASTNode> children) throws SemanticCheckFailure {\n        if (!compilerUnits.containsKey(funcName)) {\n          throw new SemanticCheckFailure(String.format(\"Function '%s' does not exist\", funcName));\n        }\n","sourceCodeStart":215,"sourceCodeEnd":251,"githubUrl":"https://github.com/xai-org/x-algorithm/blob/24c60942c5c5fdad3a6addffb4c6e6d2f228f04f/botmaker/src/java/com/twitter/botmaker/compiler/CompilerBuilder.java#L215-L251","documentation":"In strict mode, every input feature referenced in an expression must exist in the declared inputFeatureTypes map; otherwise the CompilerBuilder cannot infer a type and fails. In non-strict mode the unknown feature is typed as OBJECT instead.","triggerScenarios":"Referencing a feature name (including namespaced `pkg.feature` forms) that is not registered via CompilerBuilder's input feature declarations, while strictMode is enabled.","commonSituations":"Feature name typos or casing, feature removed/renamed upstream, the input-feature schema not passed to the builder, or new features used before the declaring schema version is loaded.","solutions":["Fix the feature name to match a registered input feature","Register the missing feature and its type in CompilerBuilder's input feature configuration","If intentional (late-bound/dynamic features), disable strict mode so unknowns fall back to OBJECT"],"exampleFix":"// before\nCompilerBuilder.withStrictMode(true) // and expression uses \"usre.age\"\n// after\n// fix expression to \"user.age\", or register the feature:\n// builder.addInputFeature(\"user.age\", Type.LONG)","handlingStrategy":"validation","validationCode":"if (strictMode && !inputFeatureTypes.containsKey(fullFeatureName))\n  throw new IllegalArgumentException(\"Unregistered input feature: \" + fullFeatureName);","typeGuard":"static boolean featureRegistered(Map<String,Type> types, String name, boolean strict) { return !strict || types.containsKey(name); }","tryCatchPattern":"catch (SemanticCheckFailure e) { if (e.getMessage().contains(\"Input Feature\")) registerOrFixName(e); else throw e; }","preventionTips":["Register all referenced input features and types with CompilerBuilder","Keep feature schemas in sync with expressions; only disable strict mode for late-bound features"],"tags":["botmaker","input-feature","strict-mode","unknown-feature"],"backgroundTag":"unknown-feature-reference","analyzedSha":"24c60942c5c5fdad3a6addffb4c6e6d2f228f04f","analyzedAt":"2026-08-28T11:40:14.686Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}