mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-08-28 05:27:41 +00:00
A failed node with an effective `succeed` policy and no explicit recovery route now finishes as `succeeded` and follows normal success routing. The original failure stays on the outcome so the stage.completed event and the checkpoint keep the diagnostic, and the outcome notes record which scope promoted it. - OnFailure gains a Succeed variant; Node::on_failure resolves the deprecated auto_status=true attribute as an alias, with an explicit on_failure winning - The core executor applies the policy before the lifecycle observes the result, so the recorded outcome, context keys, goal gates, events, and routing all see the effective outcome; this replaces AutoStatusLifecycle - Explicit routes take priority: a matching condition, preferred label, suggested next node, or handler jump keeps the outcome failed. A failed outcome takes an unconditional edge only under route, so under succeed any edge selection is an explicit route - succeed applies only to failed, matching exit; the auto_status alias no longer promotes partially_succeeded - Parallel branches promote after their retry loop, so a failed succeed branch counts as succeeded in the parent aggregate - Validation accepts succeed and adds an auto_status_deprecated warning that suggests on_failure="succeed" - Document the policy table, semantics, and deprecation; add a changelog entry Closes #807 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
532 lines
16 KiB
JSON
532 lines
16 KiB
JSON
{
|
|
"$schema": "https://mintlify.com/docs.json",
|
|
"theme": "almond",
|
|
"name": "Fabro",
|
|
"colors": {
|
|
"primary": "#357F9E",
|
|
"light": "#67B2D7",
|
|
"dark": "#357F9E"
|
|
},
|
|
"favicon": "/favicon.svg",
|
|
"navigation": {
|
|
"tabs": [
|
|
{
|
|
"tab": "Documentation",
|
|
"icon": "book",
|
|
"groups": [
|
|
{
|
|
"group": "Getting Started",
|
|
"icon": "rocket",
|
|
"pages": [
|
|
"getting-started/introduction",
|
|
"getting-started/why-fabro",
|
|
"getting-started/quick-start"
|
|
]
|
|
},
|
|
{
|
|
"group": "Core Concepts",
|
|
"icon": "lightbulb",
|
|
"pages": [
|
|
"core-concepts/how-fabro-works",
|
|
"getting-started/dark-factory",
|
|
"core-concepts/workflows",
|
|
"core-concepts/agents",
|
|
"core-concepts/models"
|
|
]
|
|
},
|
|
{
|
|
"group": "Defining Workflows",
|
|
"icon": "diagram-project",
|
|
"pages": [
|
|
"workflows/stages-and-nodes",
|
|
"workflows/transitions",
|
|
"workflows/variables",
|
|
"workflows/imports",
|
|
"workflows/human-in-the-loop",
|
|
"workflows/stylesheets"
|
|
]
|
|
},
|
|
{
|
|
"group": "Executing Workflows",
|
|
"icon": "play",
|
|
"pages": [
|
|
"execution/run-configuration",
|
|
"execution/child-runs",
|
|
"execution/automations",
|
|
"execution/environments",
|
|
"execution/context",
|
|
"execution/checkpoints",
|
|
"execution/outcomes",
|
|
"execution/failures",
|
|
"execution/observability"
|
|
]
|
|
},
|
|
{
|
|
"group": "Human Tools",
|
|
"icon": "hand",
|
|
"pages": [
|
|
"human-tools/interviews",
|
|
"human-tools/steering",
|
|
"human-tools/ssh-access",
|
|
"human-tools/vs-code",
|
|
"human-tools/preview",
|
|
"human-tools/vnc-access",
|
|
"human-tools/vpn-connections"
|
|
]
|
|
},
|
|
{
|
|
"group": "Agents",
|
|
"icon": "robot",
|
|
"pages": [
|
|
"agents/prompts",
|
|
"agents/skills",
|
|
"agents/tools",
|
|
"agents/mcp",
|
|
"agents/hooks",
|
|
"agents/subagents",
|
|
"agents/permissions",
|
|
"agents/outputs"
|
|
]
|
|
},
|
|
{
|
|
"group": "Integrations",
|
|
"icon": "puzzle-piece",
|
|
"pages": [
|
|
"integrations/github",
|
|
"integrations/daytona",
|
|
"integrations/litellm",
|
|
"integrations/bedrock",
|
|
"integrations/deepseek",
|
|
"integrations/venice",
|
|
"integrations/poolside",
|
|
"integrations/openrouter",
|
|
"integrations/modal",
|
|
"integrations/fireworks",
|
|
"integrations/slack",
|
|
"integrations/brave-search",
|
|
"integrations/venice-search"
|
|
]
|
|
},
|
|
{
|
|
"group": "Reference",
|
|
"icon": "book",
|
|
"pages": [
|
|
"reference/dot-language",
|
|
"reference/cli",
|
|
"reference/shell-completions",
|
|
"reference/user-configuration",
|
|
"reference/run-directory",
|
|
"reference/sdk",
|
|
"reference/architecture",
|
|
"reference/server-operations",
|
|
"reference/verifying-releases",
|
|
"administration/server-configuration",
|
|
"administration/troubleshooting",
|
|
"getting-started/comparison",
|
|
"administration/security",
|
|
"reference/acknowledgements"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"tab": "Guides",
|
|
"icon": "graduation-cap",
|
|
"groups": [
|
|
{
|
|
"group": "Overview",
|
|
"icon": "compass",
|
|
"pages": []
|
|
},
|
|
{
|
|
"group": "Workflow Tutorials",
|
|
"icon": "graduation-cap",
|
|
"pages": [
|
|
"tutorials/hello-world",
|
|
"tutorials/plan-implement",
|
|
"tutorials/branch-loop",
|
|
"tutorials/parallel-review",
|
|
"tutorials/multi-model",
|
|
"tutorials/ensemble",
|
|
"tutorials/sub-workflow"
|
|
]
|
|
},
|
|
{
|
|
"group": "Example Workflows",
|
|
"icon": "flask",
|
|
"pages": [
|
|
"examples/repl-handoff",
|
|
"examples/solitaire",
|
|
"examples/semantic-port",
|
|
"examples/definition-of-done",
|
|
"examples/nlspec-conformance",
|
|
"examples/clone-substack"
|
|
]
|
|
},
|
|
{
|
|
"group": "Deployment",
|
|
"icon": "server",
|
|
"pages": [
|
|
"administration/deployment",
|
|
"administration/self-host-docker",
|
|
"administration/deploy-railway"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"tab": "API Reference",
|
|
"icon": "code",
|
|
"openapi": "api-reference/fabro-api.yaml",
|
|
"groups": [
|
|
{
|
|
"group": "Using the API",
|
|
"icon": "code",
|
|
"pages": [
|
|
"api-reference/overview",
|
|
"api-reference/client-sdks"
|
|
]
|
|
},
|
|
{
|
|
"group": "Workflow Versions",
|
|
"icon": "code-branch",
|
|
"pages": [
|
|
"POST /api/v1/workflow-versions"
|
|
]
|
|
},
|
|
{
|
|
"group": "Runs",
|
|
"icon": "play",
|
|
"pages": [
|
|
"GET /api/v1/runs",
|
|
"POST /api/v1/runs",
|
|
"GET /api/v1/runs/{id}",
|
|
"PUT /api/v1/runs/{id}/parent",
|
|
"DELETE /api/v1/runs/{id}/parent",
|
|
"POST /api/v1/runs/{id}/start",
|
|
"POST /api/v1/runs/{id}/approve",
|
|
"POST /api/v1/runs/{id}/deny",
|
|
"POST /api/v1/runs/{id}/cancel",
|
|
"POST /api/v1/runs/{id}/pause",
|
|
"POST /api/v1/runs/{id}/unpause",
|
|
"POST /api/v1/runs/{id}/pull_request",
|
|
"GET /api/v1/runs/{id}/pull_request/creation",
|
|
"GET /api/v1/runs/{id}/graph",
|
|
"GET /api/v1/runs/{id}/events"
|
|
]
|
|
},
|
|
{
|
|
"group": "Human-in-the-Loop",
|
|
"icon": "hand",
|
|
"pages": [
|
|
"GET /api/v1/runs/{id}/questions",
|
|
"POST /api/v1/runs/{id}/questions/{qid}/answer",
|
|
"POST /api/v1/runs/{id}/preview"
|
|
]
|
|
},
|
|
{
|
|
"group": "Run Outputs",
|
|
"icon": "file-export",
|
|
"pages": [
|
|
"GET /api/v1/runs/{id}/artifacts",
|
|
"GET /api/v1/runs/{id}/artifacts/download",
|
|
"GET /api/v1/runs/{id}/billing",
|
|
{
|
|
"group": "Run Internals",
|
|
"icon": "microchip",
|
|
"pages": [
|
|
"GET /api/v1/runs/{id}/checkpoint",
|
|
"GET /api/v1/runs/{id}/stages",
|
|
"GET /api/v1/runs/{id}/stages/{stageId}/events",
|
|
"GET /api/v1/runs/{id}/settings"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"group": "Automations",
|
|
"icon": "robot",
|
|
"pages": [
|
|
"GET /api/v1/automations",
|
|
"POST /api/v1/automations",
|
|
"GET /api/v1/automations/{id}",
|
|
"PUT /api/v1/automations/{id}",
|
|
"DELETE /api/v1/automations/{id}",
|
|
"GET /api/v1/automations/{id}/runs",
|
|
"POST /api/v1/automations/{id}/runs"
|
|
]
|
|
},
|
|
{
|
|
"group": "Environments",
|
|
"icon": "box",
|
|
"pages": [
|
|
"GET /api/v1/environments",
|
|
"POST /api/v1/environments",
|
|
"GET /api/v1/environments/{id}",
|
|
"PUT /api/v1/environments/{id}",
|
|
"DELETE /api/v1/environments/{id}"
|
|
]
|
|
},
|
|
{
|
|
"group": "Variables",
|
|
"icon": "brackets-curly",
|
|
"pages": [
|
|
"GET /api/v1/variables",
|
|
"POST /api/v1/variables",
|
|
"GET /api/v1/variables/{name}",
|
|
"PUT /api/v1/variables/{name}",
|
|
"DELETE /api/v1/variables/{name}"
|
|
]
|
|
},
|
|
{
|
|
"group": "More",
|
|
"icon": "ellipsis",
|
|
"pages": [
|
|
{
|
|
"group": "Administration",
|
|
"icon": "gear",
|
|
"pages": [
|
|
"GET /api/v1/settings"
|
|
]
|
|
},
|
|
{
|
|
"group": "Models",
|
|
"icon": "microchip",
|
|
"pages": [
|
|
"GET /api/v1/models",
|
|
"POST /api/v1/models/{id}/test"
|
|
]
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"tab": "Changelog",
|
|
"icon": "clock-rotate-left",
|
|
"groups": [
|
|
{
|
|
"group": "August 2026",
|
|
"icon": "clock-rotate-left",
|
|
"pages": [
|
|
"changelog/2026-08-26",
|
|
"changelog/2026-08-25",
|
|
"changelog/2026-08-23",
|
|
"changelog/2026-08-21",
|
|
"changelog/2026-08-20",
|
|
"changelog/2026-08-18",
|
|
"changelog/2026-08-17",
|
|
"changelog/2026-08-16",
|
|
"changelog/2026-08-14",
|
|
"changelog/2026-08-13",
|
|
"changelog/2026-08-12",
|
|
"changelog/2026-08-06",
|
|
"changelog/2026-08-05",
|
|
"changelog/2026-08-04",
|
|
"changelog/2026-08-03",
|
|
"changelog/2026-08-01"
|
|
]
|
|
},
|
|
{
|
|
"group": "July 2026",
|
|
"icon": "clock-rotate-left",
|
|
"pages": [
|
|
"changelog/2026-07-31",
|
|
"changelog/2026-07-30",
|
|
"changelog/2026-07-29",
|
|
"changelog/2026-07-28",
|
|
"changelog/2026-07-27",
|
|
"changelog/2026-07-26",
|
|
"changelog/2026-07-25",
|
|
"changelog/2026-07-24",
|
|
"changelog/2026-07-23",
|
|
"changelog/2026-07-22",
|
|
"changelog/2026-07-11",
|
|
"changelog/2026-07-10",
|
|
"changelog/2026-07-09",
|
|
"changelog/2026-07-08",
|
|
"changelog/2026-07-07",
|
|
"changelog/2026-07-03",
|
|
"changelog/2026-07-02",
|
|
"changelog/2026-07-01"
|
|
]
|
|
},
|
|
{
|
|
"group": "June 2026",
|
|
"icon": "clock-rotate-left",
|
|
"pages": [
|
|
"changelog/2026-06-30",
|
|
"changelog/2026-06-27",
|
|
"changelog/2026-06-26",
|
|
"changelog/2026-06-25",
|
|
"changelog/2026-06-24",
|
|
"changelog/2026-06-18",
|
|
"changelog/2026-06-16",
|
|
"changelog/2026-06-15",
|
|
"changelog/2026-06-14",
|
|
"changelog/2026-06-13",
|
|
"changelog/2026-06-12",
|
|
"changelog/2026-06-11",
|
|
"changelog/2026-06-10",
|
|
"changelog/2026-06-09",
|
|
"changelog/2026-06-05",
|
|
"changelog/2026-06-03",
|
|
"changelog/2026-06-02"
|
|
]
|
|
},
|
|
{
|
|
"group": "May 2026",
|
|
"icon": "clock-rotate-left",
|
|
"pages": [
|
|
"changelog/2026-05-30",
|
|
"changelog/2026-05-29",
|
|
"changelog/2026-05-28",
|
|
"changelog/2026-05-27",
|
|
"changelog/2026-05-26",
|
|
"changelog/2026-05-25",
|
|
"changelog/2026-05-24",
|
|
"changelog/2026-05-23",
|
|
"changelog/2026-05-22",
|
|
"changelog/2026-05-21",
|
|
"changelog/2026-05-20",
|
|
"changelog/2026-05-18",
|
|
"changelog/2026-05-17",
|
|
"changelog/2026-05-16",
|
|
"changelog/2026-05-14",
|
|
"changelog/2026-05-13",
|
|
"changelog/2026-05-12",
|
|
"changelog/2026-05-11",
|
|
"changelog/2026-05-10",
|
|
"changelog/2026-05-09",
|
|
"changelog/2026-05-08",
|
|
"changelog/2026-05-07",
|
|
"changelog/2026-05-06",
|
|
"changelog/2026-05-05",
|
|
"changelog/2026-05-04",
|
|
"changelog/2026-05-03",
|
|
"changelog/2026-05-02",
|
|
"changelog/2026-05-01"
|
|
]
|
|
},
|
|
{
|
|
"group": "April 2026",
|
|
"icon": "clock-rotate-left",
|
|
"pages": [
|
|
"changelog/2026-04-30",
|
|
"changelog/2026-04-29",
|
|
"changelog/2026-04-28",
|
|
"changelog/2026-04-27",
|
|
"changelog/2026-04-26",
|
|
"changelog/2026-04-25",
|
|
"changelog/2026-04-24",
|
|
"changelog/2026-04-23",
|
|
"changelog/2026-04-22",
|
|
"changelog/2026-04-21",
|
|
"changelog/2026-04-20",
|
|
"changelog/2026-04-19",
|
|
"changelog/2026-04-18",
|
|
"changelog/2026-04-17",
|
|
"changelog/2026-04-16",
|
|
"changelog/2026-04-15",
|
|
"changelog/2026-04-14",
|
|
"changelog/2026-04-13",
|
|
"changelog/2026-04-12",
|
|
"changelog/2026-04-11",
|
|
"changelog/2026-04-10",
|
|
"changelog/2026-04-09",
|
|
"changelog/2026-04-08",
|
|
"changelog/2026-04-07",
|
|
"changelog/2026-04-06",
|
|
"changelog/2026-04-04",
|
|
"changelog/2026-04-02",
|
|
"changelog/2026-04-01"
|
|
]
|
|
},
|
|
{
|
|
"group": "March 2026",
|
|
"icon": "clock-rotate-left",
|
|
"pages": [
|
|
"changelog/2026-03-31",
|
|
"changelog/2026-03-30",
|
|
"changelog/2026-03-29",
|
|
"changelog/2026-03-28",
|
|
"changelog/2026-03-27",
|
|
"changelog/2026-03-26",
|
|
"changelog/2026-03-23",
|
|
"changelog/2026-03-22",
|
|
"changelog/2026-03-21",
|
|
"changelog/2026-03-20",
|
|
"changelog/2026-03-19",
|
|
"changelog/2026-03-18",
|
|
"changelog/2026-03-17",
|
|
"changelog/2026-03-16",
|
|
"changelog/2026-03-15",
|
|
"changelog/2026-03-14",
|
|
"changelog/2026-03-13",
|
|
"changelog/2026-03-12",
|
|
"changelog/2026-03-11",
|
|
"changelog/2026-03-10",
|
|
"changelog/2026-03-09",
|
|
"changelog/2026-03-08",
|
|
"changelog/2026-03-07",
|
|
"changelog/2026-03-06",
|
|
"changelog/2026-03-05",
|
|
"changelog/2026-03-04",
|
|
"changelog/2026-03-03",
|
|
"changelog/2026-03-02",
|
|
"changelog/2026-03-01"
|
|
]
|
|
},
|
|
{
|
|
"group": "February 2026",
|
|
"icon": "clock-rotate-left",
|
|
"pages": [
|
|
"changelog/2026-02-28",
|
|
"changelog/2026-02-27",
|
|
"changelog/2026-02-26",
|
|
"changelog/2026-02-25",
|
|
"changelog/2026-02-24",
|
|
"changelog/2026-02-23"
|
|
]
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"logo": {
|
|
"light": "/logo/light.svg",
|
|
"dark": "/logo/dark.svg"
|
|
},
|
|
"navbar": {
|
|
"primary": {
|
|
"type": "button",
|
|
"label": "Get Started",
|
|
"href": "/getting-started/introduction"
|
|
}
|
|
},
|
|
"contextual": {
|
|
"options": [
|
|
"copy",
|
|
"view",
|
|
"chatgpt",
|
|
"claude",
|
|
"perplexity",
|
|
"mcp",
|
|
"cursor",
|
|
"vscode"
|
|
]
|
|
},
|
|
"styling": {
|
|
"codeblocks": {
|
|
"languages": {
|
|
"custom": ["/languages/dot.json", "/languages/fabro.json"]
|
|
}
|
|
}
|
|
},
|
|
"footer": {
|
|
"socials": {
|
|
"x": "https://x.com/fabro_sh",
|
|
"github": "https://github.com/fabro-sh"
|
|
}
|
|
}
|
|
}
|