Pipeline DAG with a Cycle (JSON), Intentionally Invalid
The shared topology plus one back edge, making it intentionally invalid as a DAG. The document publishes the cycle it contains, so a scheduler or graph validator can be tested on both detecting the cycle and naming it.
{
"name": "orders_etl_cyclic",
"description": "INTENTIONALLY INVALID as a DAG: the same topology plus a back edge from notify_owner to ingest_orders, which makes it cyclic.",
"acyclic": false,
"nodes": [
{
"id": "ingest_orders",
"kind": "task"
},
{
"id": "validate_orders",
"kind": "task"
},
{
"id": "transform_orders",
"kind": "task"
},
{
"id": "load_warehouse",
"kind": "task"
},
{
"id": "refresh_dashboard",
"kind": "task"
},
{
"id": "notify_owner",
"kind": "task"
}
],
"edges": [
{
"from": "ingest_orders",
"to": "validate_orders"
},
{
"from": "validate_orders",
"to": "transform_orders"
},
{
"from": "transform_orders",
"to": "load_warehouse"
},
{
"from": "transform_orders",
"to": "refresh_dashboard"
},
{
"from": "load_warehouse",
"to": "notify_owner"Specifications
- Variant
- intentionally invalid
- Nodes
- 6
- Edges
- 7
- Acyclic
- false
- Back Edge
- notify_owner -> ingest_orders
- Cycle Length
- 5
Testing contract
Expected to fail- Scenario
- Run cycle detection over a task graph that is deliberately not acyclic
- Expected result
- The validator rejects the graph and reports a cycle containing the notify_owner to ingest_orders back edge
What is a .json file?
JSON (JavaScript Object Notation) is a lightweight, text-based data-interchange format representing objects, arrays, strings, numbers, booleans, and null. It is language-independent, human-readable, and the dominant format for web APIs and configuration. It requires a single well-formed root value.
How to use this file
Use an example JSON file to test parsers and serializers, schema validation, Unicode and number-precision handling, and API request or response processing.
How to use this file for testing
“Pipeline DAG with a Cycle (JSON), Intentionally Invalid” is a deterministic Novus Examples fixture for Error handling, Config parsing, Schema validation. Deliberately corrupt and invalid files, clearly labelled, for testing how your tool fails.
Documented properties for this file: 6 nodes · 7 edges. Compare results against paired or grouped companions on this page when present (clean↔damaged, searchable↔scanned, or format twins) so scores stay reproducible across runs.
Download the file once, keep the path stable in CI or local scripts, and treat the spec table as the contract: dimensions, seeds, field lists, and roles are intentional. Corrupt or invalid samples are labelled as such — expect parsers to fail loudly rather than silently accept them.
Pipeline and infrastructure fixtures are inert configuration: steps reference fictional images and scripts, and nothing here executes. Run your linter, schema validator, migrator, or policy engine against them, and expect the deprecated-syntax and intentionally invalid variants to be rejected.
Code examples
import json
with open("pipeline-dag-cycle.json") as f:
data = json.load(f)
print(type(data), len(data))Related files
- ymlAzure Pipelines, Intentionally InvalidAn intentionally invalid Azure Pipelines file: valid YAML that mixes top-level steps with a stages block, depends on an undeclared stage, and gives `pool` a bare string. For testing that a validator rejects it and reports all three faults.

- ymlCircleCI Config, Intentionally InvalidAn intentionally invalid CircleCI config: an unquoted `version: 2.10` that YAML loads as the float 2.1, a workflow referencing an undefined job, and a job with no execution environment. For testing that a validator rejects it and explains each fault.

- cwlCWL Workflow, Intentionally InvalidAn intentionally invalid CWL document: a nonexistent cwlVersion, an unknown class, a step consuming an output no step produces, and outputs given as a bare string. Four documented faults for a CWL validator to report.

- yamlDocker Compose File, Intentionally InvalidAn intentionally invalid Compose file: services as a list, a service with both image and an empty build, an unquoted 8080:8080 port that YAML 1.1 reads as a base-60 integer, and a depends_on naming an undefined service.

- ymlGitHub Actions Workflow, Intentionally InvalidAn intentionally invalid GitHub Actions workflow: well-formed YAML that breaks the workflow schema in four documented ways — no jobs mapping, a scalar `on`, a mapping `runs-on`, and a step carrying both uses and run. For testing that a validator rejects, and reports why.

- ymlGitLab CI Config, Intentionally InvalidAn intentionally invalid GitLab CI config: valid YAML with a misspelled `stagess` key, a job naming an undeclared stage, a job with no script, and an `only:` given a bare scalar. For testing that a linter rejects it and names each fault.

Generated by generation/pipelines.py. Free for any use, no attribution required — license.