Gantt chart
chart.gantt
Overview
Validate supplied dates and FS/SS/FF/SF constraints without scheduling work. Groups create headers and lanes only. Deterministic routing minimizes crossings within a strict budget but does not promise crossing-free geometry. svg is a complete static, script-free chart. Mark highlight, the dotted guide, and the value panel are not in that SVG, and entry motion, focus, and updates stay inactive there. Pass the entire output.behavior.artifact unchanged to SquillifyChartRuntime.mount(container, artifact, options), then call the returned handle's replay() once to play the entry. A later value change uses update(nextArtifact, {intent}). Injecting svg directly leaves hover and motion off. Interaction is on by default for every host chart: after mount, pointer and keyboard focus open the value panel and the dotted guide. Set behavior.interaction.enabled to false to turn that off. motion.preset accepts only the family's entrance.
Supplied schedules need exact constraint validation and bounded lane routing without silently becoming a scheduler.
Reliability
The graph view is deduplicated only for cycle validation; typed dependencies, row order, dates, and results remain caller-controlled. The visible time grid begins and ends at the exact schedule domain and groups into equal-width columns for legibility.
Context footprint
You receive CHART_CAPACITY_EXCEEDED when the rows or dependency links cannot remain legible, CHART_BEHAVIOR_CAPACITY_EXCEEDED when host data exceeds its bound, and CHART_OUTPUT_TOO_LARGE when estimated output exceeds its bound. A successful call costs 3 execution credits.
When to use it
When every date is supplied and you need validated dependency geometry.
When dates must be calculated, resources leveled, or critical paths inferred.
Scope
Non-goals
- Automatic scheduling, resource leveling, critical-path calculation, or calendar arithmetic
- Group aggregation, progress rollup, or guaranteed crossing-free routing
Properties
Capabilities
Cost & billing
Flat rate per invocation
File handling
How we handle your data
What this means
This skill may receive sensitive content and may return submitted, transformed, extracted, or reformatted content.
Squillify guarantees
- Runs inside Squillify
- This skill runs inside Squillify.
- Payloads are not sent to an external service by this skill.
- Squillify does not permanently store submitted payloads.
- Telemetry records metadata only, not submitted content.
- Submitted payloads are not used for training.
- Submitted payloads are not reviewed by humans.
- This skill does not target sensitive data.
- The response may contain submitted or transformed content.
Your responsibility
Squillify does not determine whether submitted content is sensitive. Your application is responsible for deciding what data it is allowed to submit. Your application is responsible for securing the response.
Input schema
| Field | Type | Required | Description |
|---|---|---|---|
| timeType | string | Yes | Required date or explicit-offset instant precision. |
| tasks | array | Yes | Array of 1..500 closed task or milestone objects with ids, labels, and caller-supplied dates. |
| groups | array | No | Array of ordered closed {id,label} lane headers; when omitted no headers, aggregation, or rollup is added. |
| dependencies | array | No | Array of at most 1,000 closed {id,from,to,type,lag?} constraints; when omitted no links are drawn. |
| dependencyPolicy | string | No | validate (default) or displayViolations. |
| rowOrder | string | No | input (default), start, or groupThenInput. |
| width | integer | No | Canvas width in pixels, 100..1600 (optional; default 1000). Outside that range the request is refused as invalid input rather than clamped. The ceiling is the size a chart is read at — a full-HD dashboard or a report page; beyond it the canvas stops being what limits how much fits, and type sized for the canvas is illegible once the export is displayed smaller. It applies per side, so a tall portrait canvas for a long horizontal ranking is allowed. |
| height | integer | No | Canvas height in pixels, 100..1600 (optional; default 560). Outside that range the request is refused as invalid input rather than clamped. The ceiling is the size a chart is read at — a full-HD dashboard or a report page; beyond it the canvas stops being what limits how much fits, and type sized for the canvas is illegible once the export is displayed smaller. It applies per side, so a tall portrait canvas for a long horizontal ranking is allowed. |
| theme | string | No | Visual language: basic, modern or squillify (optional; default squillify). An unregistered value is rejected with the registered names listed — we never substitute silently. |
| surface | string | No | Surface the theme renders on: dark or light (optional; default light). |
| density | string | No | How tightly the chrome is packed: compact, standard or spacious (optional; default standard). Density scales spacing only — it never lowers a legibility minimum. |
| visualProfile | string | No | What the SVG promises about the host font: portable or certified (optional; default portable). The default is layout-deterministic and tolerates substitution; certified refuses text the certified metrics cannot fully measure. |
| title | string | No | Heading drawn above the plot (optional; at most 1024 code points). Omit it and the chart renders untitled — we never invent a title from your data. One code point past that ceiling is refused as TOOL_INPUT_INVALID. |
| subtitle | string | No | Second line under the title, useful for the period covered or the unit (optional; at most 1024 code points). Omit it and no second line is drawn. |
| style | object | No | Optional bounded paint and typography styling; omit it to use the selected theme defaults. text.size is expressed in normalized design pixels at an 800-pixel reference width, so equivalent roles match at equal CSS width. It never changes data or accessibility. 'contract' selects the published semantics. 'tokens' sets design tokens; 'rules' applies typed properties to a role and optional series/category facets; 'palette' accepts a digest-checked palette; 'css' is a bounded post-layout stylesheet. The styleCapabilities section publishes this family's accepted roles, properties and copyable examples. For Bar, target one mark with role 'bar' plus seriesIndex and categoryIndex; categoryIndex alone targets that category across series. A minimal rule is {"target":{"role":"bar"},"set":{"paint.fill":"#2563eb"}}. Unsupported typed rules are refused; unsupported CSS is dropped and reported. Do not discover the grammar through trial calls: style validation failures are currently billable. Before calling, read this contract's styleSurface and styleCapabilities sections for the complete rule shape, accepted roles and properties, limits, and copyable examples. |
| behavior | object | No | Optional closed motion and interaction settings. Default: omission enables the family's certified entry motion, tooltip, focus, and crosshair with reduced motion respected; set both nested enabled flags false for a static-only result. svg is a complete static, script-free chart. Mark highlight, the dotted guide, and the value panel are not in that SVG, and entry motion, focus, and updates stay inactive there. Pass the entire output.behavior.artifact unchanged to SquillifyChartRuntime.mount(container, artifact, options), then call the returned handle's replay() once to play the entry. A later value change uses update(nextArtifact, {intent}). Injecting svg directly leaves hover and motion off. Interaction is on by default for every host chart: after mount, pointer and keyboard focus open the value panel and the dotted guide. Set behavior.interaction.enabled to false to turn that off. motion.preset accepts only the family's entrance. |
| output | object | No | Closed object with optional idNamespace string; when omitted we derive a deterministic SVG id namespace. |
Output schema
| Field | Type | Required | Description |
|---|---|---|---|
| svg | string | Yes | Allowlist-checked SVG with every task and dependency. svg is a complete static, script-free chart. Mark highlight, the dotted guide, and the value panel are not in that SVG, and entry motion, focus, and updates stay inactive there. Pass the entire output.behavior.artifact unchanged to SquillifyChartRuntime.mount(container, artifact, options), then call the returned handle's replay() once to play the entry. A later value change uses update(nextArtifact, {intent}). Injecting svg directly leaves hover and motion off. Interaction is on by default for every host chart: after mount, pointer and keyboard focus open the value panel and the dotted guide. Set behavior.interaction.enabled to false to turn that off. motion.preset accepts only the family's entrance. |
| width | integer | Yes | Rendered width in pixels. |
| height | integer | Yes | Rendered height in pixels. |
| viewBox | string | Yes | Rendered SVG viewBox. |
| taskResults | array | Yes | Input-order array of closed exact task or milestone results retaining every caller-supplied date. |
| groupResults | array | Yes | Array of group lane-header result objects with identifiers and labels but no aggregation or rollup. |
| dependencyResults | array | Yes | Complete input-order array of typed dependency objects with satisfaction state and exact slack. |
| renderSummary | object | Yes | Closed object summarizing bounded row, link, crossing, and dependency-policy results. |
| accessibility | object | Yes | Closed object containing the accessible title, selected detail rung, and relationship summary. |
| transformationSummary | object | Yes | Closed object disclosing the selected row order and confirming that datesChanged is always false. |
| behavior | object | Yes | Resolved default-on motion and interaction report. Includes the digest-bound host artifact when behavior is enabled and always preserves a complete script-free SVG. svg is a complete static, script-free chart. Mark highlight, the dotted guide, and the value panel are not in that SVG, and entry motion, focus, and updates stay inactive there. Pass the entire output.behavior.artifact unchanged to SquillifyChartRuntime.mount(container, artifact, options), then call the returned handle's replay() once to play the entry. A later value change uses update(nextArtifact, {intent}). Injecting svg directly leaves hover and motion off. Interaction is on by default for every host chart: after mount, pointer and keyboard focus open the value panel and the dotted guide. Set behavior.interaction.enabled to false to turn that off. motion.preset accepts only the family's entrance. |
| styleReport | object | No | Optional closed report of caller-style paths that were applied, ignored, or rejected. |
| warnings | array | No | Present when the render succeeded with a known degradation. Each entry is an object with a stable code, a message and details. Every chart can emit FONT_SUBSTITUTION_POSSIBLE under visualProfile 'portable', FONT_GLYPH_UNMEASURED when a code point falls outside the certified metrics, and CHART_STYLE_PARTIALLY_APPLIED when part of your styling was dropped — styleReport then names which part and why. Codes are stable for agent routing. |
API contract
POST /v1/executecurl -sS -X POST "$BASE/v1/execute" \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"skillKey":"chart.gantt","input":{"timeType":"date","tasks":[{"id":"api","kind":"task","label":"API","start":"2026-08-01","end":"2026-08-12"},{"id":"release","kind":"milestone","label":"Release","at":"2026-08-15"}],"dependencies":[{"id":"api-release","from":"api","to":"release","type":"finishToStart"}]}}'import { Squillify } from "@squillify/sdk";
const sq = new Squillify({ apiKey: process.env.SQUILLIFY_API_KEY });
const { output } = await sq.execute("chart.gantt", {"dependencies":[{"id":"api-release","from":"api","to":"release","lag":"P0D","type":"finishToStart"}],"tasks":[{"start":"2026-08-01","id":"api","kind":"task","label":"API","end":"2026-08-12","progress":"0.65"},{"kind":"milestone","label":"Release","at":"2026-08-15","id":"release"}],"timeType":"date"});Errors
| Code | HTTP | Retryable | Description |
|---|---|---|---|
| VALIDATION_ERROR | 400 | No | The request payload failed schema validation. |
| UNAUTHORIZED | 401 | No | Missing or invalid API key. |
| SKILL_NOT_ACCESSIBLE | 403 | No | The API key is not granted access to this skill. |
| SKILL_NOT_AVAILABLE_FOR_PLAN | 403 | No | This skill is not included in your current plan. |
| PLAN_ELIGIBILITY_UNAVAILABLE | 503 | Yes | Plan eligibility could not be decided. Retry after backoff. |
| SKILL_NOT_FOUND | 404 | No | The requested skill or version does not exist. |
| TENANT_RATE_LIMITED | 429 | Yes | Request rate limit exceeded. Retry after backoff. |
| QUOTA_EXCEEDED | 429 | Yes | Plan quota exhausted. Retryable once the quota period resets. |
| EXECUTION_TIMEOUT | 504 | Yes | Execution exceeded the allowed time budget. |
| CHART_CAPACITY_EXCEEDED | 429 | No | A size, quota, rate, or time limit was exceeded. |
| CHART_BEHAVIOR_CAPACITY_EXCEEDED | 429 | No | A size, quota, rate, or time limit was exceeded. |
| CHART_OUTPUT_TOO_LARGE | 429 | No | A size, quota, rate, or time limit was exceeded. |
Other limits
| Limit | Value |
|---|---|
| Recommended inline bytes | 32 KiB |
Limitations
- Automatic scheduling, resource leveling, critical-path calculation, or calendar arithmetic
- Group aggregation, progress rollup, or guaranteed crossing-free routing
- Computing a schedule from effort/resources
- Unbounded project portfolios
How to call
POST /v1/execute (requires authentication)
{
"skillKey": "chart.gantt",
"input": {
"dependencies": [
{
"id": "api-release",
"from": "api",
"to": "release",
"lag": "P0D",
"type": "finishToStart"
}
],
"tasks": [
{
"start": "2026-08-01",
"id": "api",
"kind": "task",
"label": "API",
"end": "2026-08-12",
"progress": "0.65"
},
{
"kind": "milestone",
"label": "Release",
"at": "2026-08-15",
"id": "release"
}
],
"timeType": "date"
}
}Examples
Release plan
{
"dependencies": [
{
"id": "api-release",
"from": "api",
"to": "release",
"lag": "P0D",
"type": "finishToStart"
}
],
"tasks": [
{
"start": "2026-08-01",
"id": "api",
"kind": "task",
"label": "API",
"end": "2026-08-12",
"progress": "0.65"
},
{
"kind": "milestone",
"label": "Release",
"at": "2026-08-15",
"id": "release"
}
],
"timeType": "date"
}{
"viewBox": "0 0 1000 560",
"width": 1000,
"groupResults": [],
"transformationSummary": {
"topologicalOrder": [
"api",
"release"
],
"rowOrder": "input",
"applied": false,
"rowOrderSource": "input",
"datesChanged": false,
"topologicalValidation": true
},
"height": 560,
"dependencyResults": [
{
"from": "api",
"id": "api-release",
"to": "release",
"type": "finishToStart",
"slack": "3",
"lag": "P0D",
"satisfied": true,
"slackUnit": "days"
}
],
"taskResults": [
{
"id": "api",
"inputIndex": 0,
"resolvedRow": 0,
"kind": "task",
"label": "API",
"startOriginal": "2026-08-01",
"startNormalized": "2026-08-01",
"startOffset": "Z",
"endOriginal": "2026-08-12",
"endNormalized": "2026-08-12",
"endOffset": "Z",
"duration": "11",
"durationUnit": "days",
"progress": "0.65",
"groupId": null,
"status": null,
"critical": false,
"criticalSource": "none"
},
{
"id": "release",
"inputIndex": 1,
"resolvedRow": 1,
"kind": "milestone",
"label": "Release",
"startOriginal": "2026-08-15",
"startNormalized": "2026-08-15",
"startOffset": "Z",
"endOriginal": "2026-08-15",
"endNormalized": "2026-08-15",
"endOffset": "Z",
"duration": "0",
"durationUnit": "days",
"progress": null,
"groupId": null,
"status": null,
"critical": false,
"criticalSource": "none"
}
],
"accessibility": {
"title": "gantt with 2 items",
"detail": "full",
"description": "gantt temporal lane chart. 2 items in 2 lanes using proportional spacing. Items: API 0, Release 1. All values are listed."
},
"behavior": {
"motion": {
"reducedMotion": "respect",
"preset": "enter_schedule",
"enabled": true,
"finalState": "static-equivalent"
},
"interaction": {
"capabilities": [
"crosshair",
"focus",
"tooltip"
],
"enabled": true
}
},
"svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1000\" height=\"560\" viewBox=\"0 0 1000 560\" role=\"img\" class=\"sq-chart sq-chart--gantt sq-family--lane sq-theme--squillify sq-surface--light sq-density--standard\" data-sq-style-contract=\"CHART_STYLE@1\" data-sq-chart=\"gantt\" data-sq-family=\"lane\" data-sq-theme=\"squillify\" data-sq-theme-version=\"1\" data-sq-surface=\"light\" data-sq-density=\"standard\" data-sq-a11y-detail=\"full\" aria-labelledby=\"sq-cf9483e1fc63-title-1 sq-cf9483e1fc63-desc-2\"><title id=\"sq-cf9483e1fc63-title-1\">gantt with 2 items</title><desc id=\"sq-cf9483e1fc63-desc-2\">gantt temporal lane chart. 2 items in 2 lanes using proportional spacing. Items: API 0, Release 1. All values are listed.</desc><style>.sq-chart{--sq-chart-axis:#c9d1df;--sq-chart-font-family:'Squillify Mono', 'IBM Plex Mono', monospace;--sq-chart-grid:#d8dee9;--sq-chart-surface:#ffffff;--sq-chart-text-muted:#667085;--sq-chart-text-primary:#101828;--sq-series-1:#2563eb;--sq-series-2:#6d5ce7;--sq-series-3:#168a5b;--sq-series-4:#c45412;--sq-series-5:#d92d20;--sq-series-6:#667085;font-family:var(--sq-chart-font-family);font-weight:500;}.sq-chart .sq-background{fill:var(--sq-chart-surface);}.sq-chart .sq-grid{stroke:var(--sq-chart-grid);}.sq-chart .sq-tick-label{fill:var(--sq-chart-text-muted);}.sq-chart .sq-category-label{fill:var(--sq-chart-text-muted);}.sq-chart .sq-bar[data-sq-palette-index=\"0\"]{fill:var(--sq-series-1);}.sq-chart .sq-point[data-sq-palette-index=\"1\"]{fill:var(--sq-series-2);}</style><defs><linearGradient id=\"sq-cf9483e1fc63-link-gradient-0\" gradientUnits=\"objectBoundingBox\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0\"><stop offset=\"0\" stop-color=\"#2563eb\"/><stop offset=\"1\" stop-color=\"#6d5ce7\"/></linearGradient></defs><rect x=\"0\" y=\"0\" width=\"1000\" height=\"560\" fill=\"#ffffff\" class=\"sq-background\" data-sq-role=\"background\"/><g class=\"sq-plot\" data-sq-role=\"plot\"><rect x=\"148\" y=\"16\" width=\"840\" height=\"18\" fill=\"#dbe7f5\" class=\"sq-time-axis-band sq-time-axis-year-band\" data-sq-role=\"band\" data-sq-point-index=\"0\"/><text x=\"568\" y=\"28.5\" font-size=\"10\" text-anchor=\"middle\" textLength=\"24\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-label sq-time-axis-band-label\" data-sq-role=\"tick-label\" data-sq-point-index=\"0\" data-sq-row-index=\"2\">2026</text><rect x=\"148\" y=\"34\" width=\"840\" height=\"18\" fill=\"#edf3fa\" class=\"sq-time-axis-band sq-time-axis-month-band\" data-sq-role=\"band\" data-sq-point-index=\"1\"/><text x=\"568\" y=\"46.5\" font-size=\"10\" text-anchor=\"middle\" textLength=\"18\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-label sq-time-axis-band-label\" data-sq-role=\"tick-label\" data-sq-point-index=\"1\" data-sq-row-index=\"1\">Aug</text><line x1=\"148\" y1=\"70\" x2=\"148\" y2=\"548\" stroke=\"#d8dee9\" stroke-width=\"1\" stroke-opacity=\"0.55\" stroke-dasharray=\"2 4\" stroke-linecap=\"round\" class=\"sq-grid\" data-sq-role=\"grid-line\" data-sq-point-index=\"0\"/><text x=\"148\" y=\"64\" font-size=\"10\" text-anchor=\"start\" textLength=\"12\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-label sq-tick-label sq-time-axis-label\" data-sq-role=\"tick-label\" data-sq-point-index=\"0\" data-sq-row-index=\"0\">01</text><line x1=\"224.364\" y1=\"70\" x2=\"224.364\" y2=\"548\" stroke=\"#d8dee9\" stroke-width=\"1\" stroke-opacity=\"0.55\" stroke-dasharray=\"2 4\" stroke-linecap=\"round\" class=\"sq-grid\" data-sq-role=\"grid-line\" data-sq-point-index=\"1\"/><text x=\"224.364\" y=\"64\" font-size=\"10\" text-anchor=\"middle\" textLength=\"12\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-label sq-tick-label sq-time-axis-label\" data-sq-role=\"tick-label\" data-sq-point-index=\"1\" data-sq-row-index=\"0\">02</text><line x1=\"300.727\" y1=\"70\" x2=\"300.727\" y2=\"548\" stroke=\"#d8dee9\" stroke-width=\"1\" stroke-opacity=\"0.55\" stroke-dasharray=\"2 4\" stroke-linecap=\"round\" class=\"sq-grid\" data-sq-role=\"grid-line\" data-sq-point-index=\"2\"/><text x=\"300.727\" y=\"64\" font-size=\"10\" text-anchor=\"middle\" textLength=\"12\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-label sq-tick-label sq-time-axis-label\" data-sq-role=\"tick-label\" data-sq-point-index=\"2\" data-sq-row-index=\"0\">04</text><line x1=\"377.091\" y1=\"70\" x2=\"377.091\" y2=\"548\" stroke=\"#d8dee9\" stroke-width=\"1\" stroke-opacity=\"0.55\" stroke-dasharray=\"2 4\" stroke-linecap=\"round\" class=\"sq-grid\" data-sq-role=\"grid-line\" data-sq-point-index=\"3\"/><text x=\"377.091\" y=\"64\" font-size=\"10\" text-anchor=\"middle\" textLength=\"12\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-label sq-tick-label sq-time-axis-label\" data-sq-role=\"tick-label\" data-sq-point-index=\"3\" data-sq-row-index=\"0\">05</text><line x1=\"453.455\" y1=\"70\" x2=\"453.455\" y2=\"548\" stroke=\"#d8dee9\" stroke-width=\"1\" stroke-opacity=\"0.55\" stroke-dasharray=\"2 4\" stroke-linecap=\"round\" class=\"sq-grid\" data-sq-role=\"grid-line\" data-sq-point-index=\"4\"/><text x=\"453.455\" y=\"64\" font-size=\"10\" text-anchor=\"middle\" textLength=\"12\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-label sq-tick-label sq-time-axis-label\" data-sq-role=\"tick-label\" data-sq-point-index=\"4\" data-sq-row-index=\"0\">06</text><line x1=\"529.818\" y1=\"70\" x2=\"529.818\" y2=\"548\" stroke=\"#d8dee9\" stroke-width=\"1\" stroke-opacity=\"0.55\" stroke-dasharray=\"2 4\" stroke-linecap=\"round\" class=\"sq-grid\" data-sq-role=\"grid-line\" data-sq-point-index=\"5\"/><text x=\"529.818\" y=\"64\" font-size=\"10\" text-anchor=\"middle\" textLength=\"12\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-label sq-tick-label sq-time-axis-label\" data-sq-role=\"tick-label\" data-sq-point-index=\"5\" data-sq-row-index=\"0\">07</text><line x1=\"606.182\" y1=\"70\" x2=\"606.182\" y2=\"548\" stroke=\"#d8dee9\" stroke-width=\"1\" stroke-opacity=\"0.55\" stroke-dasharray=\"2 4\" stroke-linecap=\"round\" class=\"sq-grid\" data-sq-role=\"grid-line\" data-sq-point-index=\"6\"/><text x=\"606.182\" y=\"64\" font-size=\"10\" text-anchor=\"middle\" textLength=\"12\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-label sq-tick-label sq-time-axis-label\" data-sq-role=\"tick-label\" data-sq-point-index=\"6\" data-sq-row-index=\"0\">09</text><line x1=\"682.545\" y1=\"70\" x2=\"682.545\" y2=\"548\" stroke=\"#d8dee9\" stroke-width=\"1\" stroke-opacity=\"0.55\" stroke-dasharray=\"2 4\" stroke-linecap=\"round\" class=\"sq-grid\" data-sq-role=\"grid-line\" data-sq-point-index=\"7\"/><text x=\"682.545\" y=\"64\" font-size=\"10\" text-anchor=\"middle\" textLength=\"12\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-label sq-tick-label sq-time-axis-label\" data-sq-role=\"tick-label\" data-sq-point-index=\"7\" data-sq-row-index=\"0\">10</text><line x1=\"758.909\" y1=\"70\" x2=\"758.909\" y2=\"548\" stroke=\"#d8dee9\" stroke-width=\"1\" stroke-opacity=\"0.55\" stroke-dasharray=\"2 4\" stroke-linecap=\"round\" class=\"sq-grid\" data-sq-role=\"grid-line\" data-sq-point-index=\"8\"/><text x=\"758.909\" y=\"64\" font-size=\"10\" text-anchor=\"middle\" textLength=\"12\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-label sq-tick-label sq-time-axis-label\" data-sq-role=\"tick-label\" data-sq-point-index=\"8\" data-sq-row-index=\"0\">11</text><line x1=\"835.273\" y1=\"70\" x2=\"835.273\" y2=\"548\" stroke=\"#d8dee9\" stroke-width=\"1\" stroke-opacity=\"0.55\" stroke-dasharray=\"2 4\" stroke-linecap=\"round\" class=\"sq-grid\" data-sq-role=\"grid-line\" data-sq-point-index=\"9\"/><text x=\"835.273\" y=\"64\" font-size=\"10\" text-anchor=\"middle\" textLength=\"12\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-label sq-tick-label sq-time-axis-label\" data-sq-role=\"tick-label\" data-sq-point-index=\"9\" data-sq-row-index=\"0\">12</text><line x1=\"911.636\" y1=\"70\" x2=\"911.636\" y2=\"548\" stroke=\"#d8dee9\" stroke-width=\"1\" stroke-opacity=\"0.55\" stroke-dasharray=\"2 4\" stroke-linecap=\"round\" class=\"sq-grid\" data-sq-role=\"grid-line\" data-sq-point-index=\"10\"/><text x=\"911.636\" y=\"64\" font-size=\"10\" text-anchor=\"middle\" textLength=\"12\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-label sq-tick-label sq-time-axis-label\" data-sq-role=\"tick-label\" data-sq-point-index=\"10\" data-sq-row-index=\"0\">14</text><line x1=\"988\" y1=\"70\" x2=\"988\" y2=\"548\" stroke=\"#d8dee9\" stroke-width=\"1\" stroke-opacity=\"0.55\" stroke-dasharray=\"2 4\" stroke-linecap=\"round\" class=\"sq-grid\" data-sq-role=\"grid-line\" data-sq-point-index=\"11\"/><text x=\"988\" y=\"64\" font-size=\"10\" text-anchor=\"end\" textLength=\"12\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-label sq-tick-label sq-time-axis-label\" data-sq-role=\"tick-label\" data-sq-point-index=\"11\" data-sq-row-index=\"0\">15</text><line x1=\"148\" y1=\"189.5\" x2=\"988\" y2=\"189.5\" stroke=\"#d8dee9\" stroke-width=\"1\" stroke-opacity=\"0.55\" stroke-dasharray=\"2 4\" stroke-linecap=\"round\" class=\"sq-lane-rule\" data-sq-role=\"grid-line\" data-sq-row-index=\"0\"/><line x1=\"148\" y1=\"428.5\" x2=\"988\" y2=\"428.5\" stroke=\"#d8dee9\" stroke-width=\"1\" stroke-opacity=\"0.55\" stroke-dasharray=\"2 4\" stroke-linecap=\"round\" class=\"sq-lane-rule\" data-sq-role=\"grid-line\" data-sq-row-index=\"1\"/><rect x=\"148\" y=\"146.48\" width=\"660\" height=\"86.04\" rx=\"3\" fill=\"#2563eb\" class=\"sq-bar\" data-sq-role=\"bar\" data-sq-target-key=\"t-item-7a0bed5a944508d9\" data-sq-point-index=\"0\" data-sq-palette-index=\"0\"/><text x=\"140\" y=\"193\" font-size=\"10\" text-anchor=\"end\" textLength=\"18\" lengthAdjust=\"spacing\" fill=\"#101828\" class=\"sq-category-label\" data-sq-role=\"category-label\" data-sq-point-index=\"0\">API</text><rect x=\"981\" y=\"421.5\" width=\"14\" height=\"14\" fill=\"#6d5ce7\" class=\"sq-point\" data-sq-role=\"point\" data-sq-target-key=\"t-item-4781756dfb83a952\" data-sq-point-index=\"1\" data-sq-palette-index=\"1\"/><text x=\"140\" y=\"432\" font-size=\"10\" text-anchor=\"end\" textLength=\"42\" lengthAdjust=\"spacing\" fill=\"#101828\" class=\"sq-category-label\" data-sq-role=\"category-label\" data-sq-point-index=\"1\">Release</text><g class=\"sq-dependency-layer\" data-sq-role=\"plot\" data-sq-target-key=\"t-layer-03bdc57144f2ead7\"><path d=\"M 808 189.5 L 818 189.5 L 818 309 L 978 309 L 978 428.5 L 988 428.5\" fill=\"none\" stroke=\"url(#sq-cf9483e1fc63-link-gradient-0)\" stroke-width=\"2\" stroke-opacity=\"0.95\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"sq-network-link\" data-sq-role=\"link\" data-sq-target-key=\"t-link-264c08541f5aba4c\" data-sq-link-index=\"0\"/></g></g></svg>",
"renderSummary": {
"dependencyPolicy": "validate",
"rowOrder": "input",
"taskCount": 2,
"groupCount": 0,
"dependencyCount": 1,
"violationCount": 0
}
}Independent audit workstream
{
"dependencies": [],
"tasks": [
{
"id": "audit",
"start": "2026-09-01",
"end": "2026-09-05",
"kind": "task",
"label": "Audit"
}
],
"timeType": "date"
}{
"viewBox": "0 0 1000 560",
"width": 1000,
"groupResults": [],
"transformationSummary": {
"topologicalOrder": [
"audit"
],
"rowOrder": "input",
"applied": false,
"rowOrderSource": "input",
"datesChanged": false,
"topologicalValidation": true
},
"height": 560,
"dependencyResults": [],
"taskResults": [
{
"id": "audit",
"inputIndex": 0,
"resolvedRow": 0,
"kind": "task",
"label": "Audit",
"startOriginal": "2026-09-01",
"startNormalized": "2026-09-01",
"startOffset": "Z",
"endOriginal": "2026-09-05",
"endNormalized": "2026-09-05",
"endOffset": "Z",
"duration": "4",
"durationUnit": "days",
"progress": null,
"groupId": null,
"status": null,
"critical": false,
"criticalSource": "none"
}
],
"accessibility": {
"title": "gantt with 1 items",
"detail": "full",
"description": "gantt temporal lane chart. 1 items in 1 lanes using proportional spacing. Items: Audit 0. All values are listed."
},
"behavior": {
"motion": {
"reducedMotion": "respect",
"preset": "enter_schedule",
"enabled": true,
"finalState": "static-equivalent"
},
"interaction": {
"capabilities": [
"crosshair",
"focus",
"tooltip"
],
"enabled": true
}
},
"svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1000\" height=\"560\" viewBox=\"0 0 1000 560\" role=\"img\" class=\"sq-chart sq-chart--gantt sq-family--lane sq-theme--squillify sq-surface--light sq-density--standard\" data-sq-style-contract=\"CHART_STYLE@1\" data-sq-chart=\"gantt\" data-sq-family=\"lane\" data-sq-theme=\"squillify\" data-sq-theme-version=\"1\" data-sq-surface=\"light\" data-sq-density=\"standard\" data-sq-a11y-detail=\"full\" aria-labelledby=\"sq-0e6cf4d9bd22-title-0 sq-0e6cf4d9bd22-desc-1\"><title id=\"sq-0e6cf4d9bd22-title-0\">gantt with 1 items</title><desc id=\"sq-0e6cf4d9bd22-desc-1\">gantt temporal lane chart. 1 items in 1 lanes using proportional spacing. Items: Audit 0. All values are listed.</desc><style>.sq-chart{--sq-chart-axis:#c9d1df;--sq-chart-font-family:'Squillify Mono', 'IBM Plex Mono', monospace;--sq-chart-grid:#d8dee9;--sq-chart-surface:#ffffff;--sq-chart-text-muted:#667085;--sq-chart-text-primary:#101828;--sq-series-1:#2563eb;--sq-series-2:#6d5ce7;--sq-series-3:#168a5b;--sq-series-4:#c45412;--sq-series-5:#d92d20;--sq-series-6:#667085;font-family:var(--sq-chart-font-family);font-weight:500;}.sq-chart .sq-background{fill:var(--sq-chart-surface);}.sq-chart .sq-grid{stroke:var(--sq-chart-grid);}.sq-chart .sq-tick-label{fill:var(--sq-chart-text-muted);}.sq-chart .sq-category-label{fill:var(--sq-chart-text-muted);}.sq-chart .sq-bar[data-sq-palette-index=\"0\"]{fill:var(--sq-series-1);}</style><rect x=\"0\" y=\"0\" width=\"1000\" height=\"560\" fill=\"#ffffff\" class=\"sq-background\" data-sq-role=\"background\"/><g class=\"sq-plot\" data-sq-role=\"plot\"><rect x=\"148\" y=\"16\" width=\"840\" height=\"18\" fill=\"#dbe7f5\" class=\"sq-time-axis-band sq-time-axis-year-band\" data-sq-role=\"band\" data-sq-point-index=\"0\"/><text x=\"568\" y=\"28.5\" font-size=\"10\" text-anchor=\"middle\" textLength=\"24\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-label sq-time-axis-band-label\" data-sq-role=\"tick-label\" data-sq-point-index=\"0\" data-sq-row-index=\"2\">2026</text><rect x=\"148\" y=\"34\" width=\"840\" height=\"18\" fill=\"#edf3fa\" class=\"sq-time-axis-band sq-time-axis-month-band\" data-sq-role=\"band\" data-sq-point-index=\"1\"/><text x=\"568\" y=\"46.5\" font-size=\"10\" text-anchor=\"middle\" textLength=\"18\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-label sq-time-axis-band-label\" data-sq-role=\"tick-label\" data-sq-point-index=\"1\" data-sq-row-index=\"1\">Sep</text><line x1=\"148\" y1=\"70\" x2=\"148\" y2=\"548\" stroke=\"#d8dee9\" stroke-width=\"1\" stroke-opacity=\"0.55\" stroke-dasharray=\"2 4\" stroke-linecap=\"round\" class=\"sq-grid\" data-sq-role=\"grid-line\" data-sq-point-index=\"0\"/><text x=\"148\" y=\"64\" font-size=\"10\" text-anchor=\"start\" textLength=\"12\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-label sq-tick-label sq-time-axis-label\" data-sq-role=\"tick-label\" data-sq-point-index=\"0\" data-sq-row-index=\"0\">01</text><line x1=\"358\" y1=\"70\" x2=\"358\" y2=\"548\" stroke=\"#d8dee9\" stroke-width=\"1\" stroke-opacity=\"0.55\" stroke-dasharray=\"2 4\" stroke-linecap=\"round\" class=\"sq-grid\" data-sq-role=\"grid-line\" data-sq-point-index=\"1\"/><text x=\"358\" y=\"64\" font-size=\"10\" text-anchor=\"middle\" textLength=\"12\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-label sq-tick-label sq-time-axis-label\" data-sq-role=\"tick-label\" data-sq-point-index=\"1\" data-sq-row-index=\"0\">02</text><line x1=\"568\" y1=\"70\" x2=\"568\" y2=\"548\" stroke=\"#d8dee9\" stroke-width=\"1\" stroke-opacity=\"0.55\" stroke-dasharray=\"2 4\" stroke-linecap=\"round\" class=\"sq-grid\" data-sq-role=\"grid-line\" data-sq-point-index=\"2\"/><text x=\"568\" y=\"64\" font-size=\"10\" text-anchor=\"middle\" textLength=\"12\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-label sq-tick-label sq-time-axis-label\" data-sq-role=\"tick-label\" data-sq-point-index=\"2\" data-sq-row-index=\"0\">03</text><line x1=\"778\" y1=\"70\" x2=\"778\" y2=\"548\" stroke=\"#d8dee9\" stroke-width=\"1\" stroke-opacity=\"0.55\" stroke-dasharray=\"2 4\" stroke-linecap=\"round\" class=\"sq-grid\" data-sq-role=\"grid-line\" data-sq-point-index=\"3\"/><text x=\"778\" y=\"64\" font-size=\"10\" text-anchor=\"middle\" textLength=\"12\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-label sq-tick-label sq-time-axis-label\" data-sq-role=\"tick-label\" data-sq-point-index=\"3\" data-sq-row-index=\"0\">04</text><line x1=\"988\" y1=\"70\" x2=\"988\" y2=\"548\" stroke=\"#d8dee9\" stroke-width=\"1\" stroke-opacity=\"0.55\" stroke-dasharray=\"2 4\" stroke-linecap=\"round\" class=\"sq-grid\" data-sq-role=\"grid-line\" data-sq-point-index=\"4\"/><text x=\"988\" y=\"64\" font-size=\"10\" text-anchor=\"end\" textLength=\"12\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-label sq-tick-label sq-time-axis-label\" data-sq-role=\"tick-label\" data-sq-point-index=\"4\" data-sq-row-index=\"0\">05</text><line x1=\"148\" y1=\"309\" x2=\"988\" y2=\"309\" stroke=\"#d8dee9\" stroke-width=\"1\" stroke-opacity=\"0.55\" stroke-dasharray=\"2 4\" stroke-linecap=\"round\" class=\"sq-lane-rule\" data-sq-role=\"grid-line\" data-sq-row-index=\"0\"/><rect x=\"148\" y=\"222.96\" width=\"840\" height=\"172.08\" rx=\"3\" fill=\"#2563eb\" class=\"sq-bar\" data-sq-role=\"bar\" data-sq-target-key=\"t-item-5c31176fc6f7228d\" data-sq-point-index=\"0\" data-sq-palette-index=\"0\"/><text x=\"140\" y=\"312.5\" font-size=\"10\" text-anchor=\"end\" textLength=\"30\" lengthAdjust=\"spacing\" fill=\"#101828\" class=\"sq-category-label\" data-sq-role=\"category-label\" data-sq-point-index=\"0\">Audit</text></g></svg>",
"renderSummary": {
"dependencyPolicy": "validate",
"rowOrder": "input",
"taskCount": 1,
"groupCount": 0,
"dependencyCount": 0,
"violationCount": 0
}
}Recommended use cases
- Render a bounded release plan with explicit task dates
- Validate FS/SS/FF/SF dependencies without changing the schedule
Avoid for
- Computing a schedule from effort/resources
- Unbounded project portfolios
Related skills
Composable with
Safety & privacy
- Runs without calling any external service.
- Your payloads are never stored permanently.
- Telemetry captures metadata only — never your payload contents.
- We never train models on your payloads.
- No human reviews your payloads.