The previous rename pass missed this assertion because the {message:...}
literal sits inside `expect(...).toEqual({ ... })` rather than under a
direct `builderHint:` key.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
IBuilderHint (node-level) and IParameterBuilderHint (property-level) are
already separate types; this rename makes the naming reflect that. After
this change:
- Node-level only carries searchHint (renamed earlier).
- Property-level only carries propertyHint (this commit) and
placeholderSupported.
The wire-format mirror in SearchableNodeDescription.builderHint.message is
intentionally unchanged — same blast-radius scope as the earlier
searchHint rename.
Touches 49 files: the type definition, the duplicate ParameterBuilderHint
in workflow-sdk's generate-types, the consumers in instance-ai adapter,
ai-workflow-builder code-builder-search.tool, generate-types JSDoc
emission, and every node that sets builderHint.message on a property,
option, or collection.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
descriptions.ts hosts the same text-prompt builderHint that ChainLLM has,
so it needs the same wire={{}} → expr() rewrite that 0d557bc / a08f67a
applied to the dedicated copy.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Restore alphabetical import order in rules/index.ts (n8n-object-validation
comes before no-builder-hint-leakage).
- Add ajv descriptions to no-builder-hint-leakage schema options to satisfy
eslint-plugin/require-meta-schema-description.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The structuredOutputParser and webhook NodeGuidance constants in
@n8n/workflow-sdk/prompts/node-guidance/node-tips were re-exported by
ai-workflow-builder.ee/src/prompts/shared/node-guidance/index.ts, but
nothing in the codebase imported either name. Drop the directory, the
re-export, the type-only mirror, and the package.json subpath export.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Enable the rule in nodes-base, nodes-langchain, and workflow-sdk, and
fix the violations it surfaces:
- IfV2 conditions builderHint: rewrite the example from JSON wire-form
(\`"={{ \$json.field }}"\`) to SDK-form (\`expr('{{ \$json.field }}')\`).
- ChainLLM text builderHint: same wire → SDK-form rewrite.
- workflow-sdk SDK-facing prompts (sdk-reference, node-selection,
best-practices, node-tips): replace ={{...}} with expr('{{...}}') and
wire-format connection names (ai_tool, ai_memory, etc.) with their
SDK helpers (tool(), memory(), etc.).
The legacy multi-agent parameter-guides directory still documents
wire-format parameters because that's what its consumer
(parameter-updater chain) generates; it is exempted in the workflow-sdk
eslint config.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Disallow wire-format expression syntax (={{...}}) and NodeConnectionType
string literals in builderHint texts and AI-builder prompt strings. The
AI workflow builder generates SDK code (expr(), languageModel(), tool(),
etc.); leaking the wire format into the documentation it consumes
teaches it to write parameters in the wrong shape.
The rule has two scopes:
- builderHint (default): only checks string values inside builderHint
property values. Used for nodes-base and nodes-langchain.
- all: checks every string literal/template in the file. Used for
workflow-sdk prompt files that are surfaced verbatim to the agent.
Strings that are *exactly* a connection-type name (e.g. structured data
like \`connectionType: 'ai_languageModel'\`) are exempt — only prose
mentions of the wire-format names are flagged.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Throw at startup when a node defines builderHint on its operation, mode,
or resource discriminator property. These hints are silently dropped by
the AI workflow builder renderers, which only read builderHint from each
option of those discriminators.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The hint was placed on the operation property in fbac8db, but builderHint
on operation/mode/resource discriminator properties is silently dropped:
the AI workflow builder renderers only walk each option, not the property
itself.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Co-authored-by: Michael Kret <88898367+michael-radency@users.noreply.github.com>
Rename the node-level builder hint field for clearer intent. Property-level
IParameterBuilderHint.message and the SearchableNodeDescription wire format
are unchanged.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Relocate builderHint.message from node-level to the relevant property for
If V2 (conditions), HighLevel V2 (contact create additionalFields), and
Guardrails V2 (operation). Guardrails keeps its node-level inputs hint.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>