Requirements traceability for regulated teams

Prove your tests
cover your requirements.

Requirements and tests live in one versioned artefact — so drift shows up as a failing run, not a surprise in an audit.

Your requirements sit in Jira and a Word document. Your tests sit in code. Nothing connects them — so the traceability matrix gets rebuilt by hand before every audit, and is out of date the week after.

SYZYGY couples them. Business owners author requirements in plain language; tests are generated from those requirements and reviewed by a person before anything is committed.

Execution is deterministic — the same inputs produce the same run and the same evidence, every time. The matrix is a by-product of the run, not a document somebody maintains.

  • Deterministic by construction — same inputs, same evidence, nothing to configure
  • Runs air-gapped — no data leaves your network
  • No code required to author requirements
~/payments-api syz · latest
Terminal showing a completed SYZYGY run: 15 passed of 15, then syz rtm reporting 0 uncovered requirements and 0 dangling covers, followed by the rendered requirements traceability matrix listing seven requirements against the tests that cover them.
A real run, not a mock-up. A requirement in plain language, syz run across 15 scenarios, then syz rtm deriving the matrix — captured end to end.

Integration Knowledge Is Fragmented. That's Your Real Problem.

Most organisations carry their integration knowledge in five places at once: a Postman collection on one engineer's laptop, a Confluence page two years out of date, a custom test framework someone built and left behind, a folder of CI scripts no one owns, and the head of the senior engineer who is about to take a different job. None of those things are wrong. None of them are aligned.

The Framework Trap

Every team automates testing the same way: they build a framework first. Then the people who knew how the systems integrated leave, and the knowledge leaves with them. What follows is always the same pattern — a custom runner no one fully understands, a folder of "helpers" that grew organically, credentials stored in places they shouldn't be, a Confluence page two years out of date, and one engineer everyone defers to about which endpoint to call in what order. That engineer becomes a bottleneck. When that engineer leaves, so does the knowledge.

The Real Challenge Isn't Writing Assertions

The hard part of testing modern software has never been writing assertions. The hard part is where your integration knowledge lives: the endpoints, the request shapes, the order of operations, the negative-path expectations, the rules a manager calls "how we actually work." Frameworks let you write tests. They don't help you keep the knowledge that makes those tests worth writing.

SYZYGY: Integration Knowledge as a Durable Artefact

SYZYGY treats integration knowledge as the artefact. It packages that knowledge into one durable, versioned form — a plugin — and gives every developer, every test phase, and every environment the same source of truth. You version it (a git tag). You install it (syz install). You reuse it across every level of testing your team does, against every environment, by every developer. When the engineer leaves, the plugin stays.

The old loop vs. what SYZYGY replaces it with

The old loop
What SYZYGY replaces it with
  • What "correct" means lives in one person's head — written down nowhere concrete.
    Captured as schema-validated PLUGIN-GUIDE.yaml / DOMAIN.yaml, in plain language, before a plugin exists.
  • Build a framework first. Argue about folder conventions.
    One folder, .syz/. Convention over config.
  • Endpoints and payloads live in a doc, a Postman collection, or a senior engineer's head.
    A versioned plugin per integration. Installed via syz install.
  • Component, integration, e2e, UAT each get their own scripts.
    Same plugin, same scenarios — switch the environment file.
  • New team members onboard for weeks before writing a test.
    syz init lays down the framework. The AI assistant they already use is configured automatically.
  • When the integration owner leaves, the knowledge leaves.
    The knowledge is committed. Versioned. Reviewed in PRs like any other code.

A CLI for integration knowledge.

One binary. Nothing else to operate.

SYZYGY runs the whole testing lifecycle from one place — and it starts with knowledge, not code. The people who know what a system must do capture it in plain domain language as a concrete, schema-validated spec, before a single plugin exists. syz generate turns an API spec into a runnable plugin. Scenarios wire those plugins into tests. The runtime executes them deterministically and writes a report anyone can read. syz rtm ties every result back to the requirement it proves. The lifecycle below renders that path, stage by stage.

Underneath it is a single Node.js CLI (syz, package syzs-cli) that runs declarative YAML scenarios against versioned plugins that encode how your systems integrate. Scenarios, plugins, test data, and environments all live in your git repo as plain text — no server, no database, no central registry, and nothing about your work leaves your network: no cloud, no account, no telemetry. That is what makes SYZYGY usable inside a bank, a hospital, or a government department without a vendor security review.

Plain YAML, executed exactly. Every value in a run comes from a committed file or a previous step, so the same scenario reaches the same verdict every time. Your AI assistant helps you author; what it drafts is reviewed and committed like any other code.

Runs over HTTP today; the executor registry is built so Kafka, SQL, SFTP, gRPC and more drop in without changing how you author a test — see the full roadmap.

The SYZYGY lifecycle, from requirement capture to requirements traceability

  1. Authoring Capture PLUGIN-GUIDE.yaml · DOMAIN.yaml Describe how each system must behave, in plain language — before a plugin exists.
  2. Authoring Generate syz generate Turn an API spec into a complete, runnable plugin — deterministically.
  3. Authoring Author scenarios in YAML Wire plugins into declarative test flows your AI assistant drafts for you.
  4. Execution Execute syz run Resolve, send, validate — one deterministic lifecycle, every environment.
  5. Audit + Review Report index.html · ledger.json A self-contained report and an immutable ledger anyone can read.
  6. Audit + Review Trace syz rtm Every result tied back to the requirement it proves — a matrix that's always current.

Day one, .syz/dossier/ already ships the knowledge layer that supports the first three stages — so capturing requirements and authoring scenarios in plain language works from the very first command.

Runs on your machine

npm install -g syzs-cli — anywhere Node.js 20 runs. No server, no account, no telemetry. Payloads, credentials and reports never leave your network.

Plugins in git

Share integration knowledge the way you share libraries. Versioned by tag, installed with syz install, pinned in dependency.json.

Scenarios in YAML

Declarative, diffable, reviewable in code review. Same scenario across every test phase — switch the environment file.

Authored with AI, executed exactly

Your assistant authors against a versioned knowledge layer; you review and commit. From there the runtime replays exactly what you committed — same inputs, same request, same verdict, forever.

Everything above, as it actually ships.

Five real captures from genuine runs — not mockups. They run in lifecycle order: a requirement written in plain language, and four artefacts later, that same requirement proven by a test. Click any one to see it full size.

  • 01 · CaptureA product owner writes the requirement in plain language — before the code exists, and independent of any spec generated from it. “A Product Owner should be able to read and update this file, before a single plugin exists.” This is the baseline everything else is measured against.
  • 02 · GenerateThe OpenAPI spec generates the mechanical scaffolding: 22 procedures across seven operations. It does not generate requirements — those came from stage one.
  • 03 · ExecuteEvery run writes this. Opens with a double-click; no server.
  • 04 · DebugA failed assertion, with what was sent, what came back, and which rule decided.
  • 05 · Tracesyz rtm renders the matrix from the run that just happened. The requirement, the test that covers it, the run that executed it, and the request/response that proves it — four artefacts, all in git.

Where SYZYGY earns its keep.

It starts with the people who own what "correct" means — and reaches every team that has to prove it.

Where it bites hardest. SYZYGY earns its keep fastest in regulated, REST-heavy organisations — financial services, healthcare, insurance, government — where two costs are already being paid in full: proving to an auditor which test covers which requirement, and losing a decade of integration knowledge every time a senior engineer resigns. Teams outside those industries get the same mechanics; teams inside them have a budget line for the pain.

Start here

For the person who has to hand evidence to an auditor.

You need to show that every requirement has a test, that the test ran, and that it passed — in a form somebody outside the engineering team can read. Today that means a spreadsheet somebody rebuilds by hand, and a quiet hope that nothing has changed since.

SYZYGY produces the matrix as output of the test run itself. Exit codes, JUnit XML, deterministic verdicts, and a rendered traceability matrix that is current because it cannot be anything else.

Every run produces an immutable ledger, a phase-by-phase debug log, JUnit XML (--reporter junit), and the matrix from syz rtm — with --strict as a CI gate that fails the build on any uncovered requirement. Every artefact is a plain file in git, reviewable in a pull request, so the evidence pack for a release is a commit range, not a screenshot folder assembled the week before the audit. Sensitive fields are masked everywhere, including the report. Live progress panels are opt-in (--live-stats).

The exit code is a per-verdict signal CI can branch on — 0 all passed, 1 a check failed, 2 bad input or setup, 3 an upstream system faulted, 4 no verdict delivered, 130 interrupted.

Also used by

  • Product owner · BA · SME Own what the system is supposed to do, without writing code. Behaviour and cross-service journeys captured as schema-validated PLUGIN-GUIDE.yaml / DOMAIN.yaml in plain domain language, before a single plugin exists — with stable requirement IDs that covers: links tests to.
  • Platform team Own an API a dozen other teams call. Publish one payments plugin; every consumer adds one syz install line. Breaking changes propagate via a version bump.
  • Integration team Run a multi-environment test stack. One set of scenarios and four environment files instead of four suites — same plugins, same scenarios, different --env.

The questions you're actually asking.

Cost, licence, data, maturity, and how this differs from the tool you already use. No prose to wade through.

Aligned

Install it.

One command. Node.js 20+. No infrastructure to stand up.

npm install -g syzs-cli