import { type WorkflowDefinition, type WorkflowNode } from './model.js'; import type { WorkflowValidationIssue } from './issues.js'; import { endRequirementIssues } from './validation-end-requires.js'; export type { WorkflowValidationIssue } from './issues.js'; export { workflowCallSaveIssues } from './validation-workflow-call.js'; export { endRequirementIssues }; export declare function outputPorts(node: WorkflowNode): string[]; /** A Schedule trigger declares the same two strings a Cron job does, so Cron's * validator owns them here too — otherwise `z.string()` lets an unparseable * expression become a durable enabled row that only fails when it is armed. */ export declare function scheduleTriggerIssues(definition: WorkflowDefinition): WorkflowValidationIssue[]; /** `unlabeled` and `label` contradict each other, so a trigger setting both can * never fire. A silently unarmable definition is worse than a rejected save: * nothing distinguishes it from a Todo that simply has not moved yet. */ export declare function todoTriggerFilterIssues(definition: WorkflowDefinition): WorkflowValidationIssue[]; /** A `todo-comment` Wait resumes on a comment on the run's bound Todo, and only * some Trigger kinds can bind one. `schedule` and `event` never do, so a node * they alone can reach could only ever time out — refused here rather than at * the run, where the operator sees it days later. A node no Trigger reaches * yet is a mid-edit draft and stays saveable; the `unreachable-node` rule owns * that case. */ export declare function todoCommentWaitTriggerIssues(definition: WorkflowDefinition): WorkflowValidationIssue[]; export declare function validateExecutableWorkflow(definition: WorkflowDefinition): { ok: boolean; issues: WorkflowValidationIssue[]; }; export declare function topologicalOrder(definition: WorkflowDefinition): string[]; //# sourceMappingURL=validation.d.ts.map