We created a rule for missed outputs for Arazzo files, which we wouldn't have done this issue.
export default () => ({
id: "x-security",
rules: {
arazzo1: {
"step-outputs": () => {
let steps = {};
return {
Workflow: {
enter: () => {
steps = {};
},
Step: {
enter: (step, ctx) => {
steps[step.stepId] = step;
},
leave: (step, ctx) => {
step["x-security"].forEach((security, index) => {
const { values, scheme } = security;
for (const key in values) {
const value = values[key];
if (value.startsWith("$steps.")) {
const [, stepName, maybeOutputs, outputName] =
value.split(".");
if (
maybeOutputs === "outputs" &&
steps[stepName].outputs?.[outputName] === undefined
) {
ctx.report({
message: `"${outputName}" output is not defined at step "${stepName}".`,
location: ctx.location
.child("x-security")
.child(index)
.child("values")
.child(key),
});
}
}
}
for (const key in scheme) {
const value = scheme[key];
if (value.startsWith("$steps.")) {
const [, stepName, maybeOutputs, outputName] =
value.split(".");
if (
maybeOutputs === "outputs" &&
steps[stepName].outputs?.[outputName] === undefined
) {
ctx.report({
message: `"${outputName}" output is not defined at step "${stepName}".`,
location: ctx.location
.child("x-security")
.child(index)
.child("scheme")
.child(key),
});
}
}
}
});
},
},
},
};
},
},
},
});extends:
- recommended
plugins:
- x-security.mjs
rules:
x-security/step-outputs: errorBut overall, the features work wonderfully. Good job!
- Missed validation for outputs in Arazzo. We forgot to add outputs to the previous step, and we didn't receive an error about that. Instead, we received a missed required value error.

