Data of a state (Stand) as JSON
Output of data.export (SR-061) for external evaluation tools such as Grafana or DuckDB (D-008). The JSON Lines form (data export --jsonl, the API with Accept: application/x-ndjson, and the file <commit>.jsonl or <commit>-dirty.jsonl that data.store writes, SR-062) has one #/$defs/line per element instead: the state fields reqseq-data, commit and dirty, then the element. Also defines the element and relation shapes all commands return.
Fields
Section titled “Fields”| Field | Type | Required | Description |
|---|---|---|---|
reqseq-data |
3 |
yes | The version of this format. 2: with commit and dirty at the top level and the JSON Lines form ($defs/line). 3: a successor’s relation has the meaning succession instead of replacement (D-059). |
commit |
commit |
no | The commit of the state: HEAD of the main repository (the one with the workspace file), after which data.store names its file; left out when Git cannot tell. |
dirty |
boolean |
yes | false only when every available repository has a known commit and is known clean (see repositories[].dirty), the rule by which data.store adds -dirty to the name of its file. |
workspace |
string |
yes | |
generated |
dateTime |
yes | Time of the export, UTC, in seconds. |
selection |
selection |
no | The selection as given; left out when none was given (every element). |
repositories |
array of object |
yes | |
repositories[].name |
string |
yes | |
repositories[].available |
boolean |
yes | |
repositories[].commit |
commit |
no | HEAD of the repository, as workspace.status gives it; left out when Git cannot tell. |
repositories[].dirty |
boolean |
no | Uncommitted changes, by content against commit, to the files the data is made of (workspace file, YAML files of the metamodel, filter and baseline folders, element files and the files they embed, also ones Git ignores; not evidence records); left out when Git cannot tell. |
incomplete |
incomplete |
no | A repository of the workspace is not on this machine (SR-006 AK2): its elements and the records of its evidence locations are missing. A baselines folder that is not on this machine holds no baseline: selection.baseline then gives input.invalid. |
elements |
array of element |
yes | Every element of the selection in workspace order, superseded ones included (D-045), without text; in data.export each with validity, packages, verification and its relations with currentVersion and outdated. |
Definitions
Section titled “Definitions”element
Section titled “element”An element as the commands give it: the fields of $defs/elementFields, and no others.
Type: elementFields.
One line of the JSON Lines form of data.export (data export --jsonl, the API with Accept: application/x-ndjson) and of the file of data.store: reqseq-data, commit and dirty of the state first, as at the top level of the JSON form, then the fields of one element, unchanged (SR-061 AK4, SR-062 AK1).
Type: elementFields.
| Field | Type | Required | Description |
|---|---|---|---|
reqseq-data |
3 |
yes | |
commit |
commit |
no | As commit of the JSON form. |
dirty |
boolean |
yes | As dirty of the JSON form. |
elementFields
Section titled “elementFields”The fields of an element, shared by $defs/element and $defs/line; open, so never used alone.
Type: object.
| Field | Type | Required | Description |
|---|---|---|---|
id |
uuid |
yes | Element ID: random UUID version 4, lower case, never changes (D-017, SR-002). |
shortId |
shortId |
yes | Display ID: type prefix, dash, the trailing hex characters of the UUID with dashes removed, at least 6, more until unique in the workspace (D-017, SR-002 AK3). The file name uses 12 (D-056). |
identifier |
string |
no | The value of its property with the meaning identifier (an ID from another source such as SR-036, #305), for display next to shortId; left out when it has none. The property itself stays under properties. |
type |
key |
yes | Fixed metamodel key of a type, property, relation kind or status value. Readable English, lower case, dashes (D-043, SR-010 AK2). |
status |
key |
no | The status key as written; left out when the element has none (a type without status, #306). |
title |
string |
yes | |
text |
string |
no | Markdown text below the frontmatter, without the blank line after the closing --- (ADR-0004). Left out by list commands unless asked for. |
version |
version |
no | The current version of the element (ADR-0005). Left out when it cannot be computed (its file no longer holds the element, an embedded image cannot be read, a counted value has no normal form); then problems says why (file.faulty). |
versionDate |
string or null |
no | Date of the version from Git (D-013: shown instead of the hash; ADR-0005): the committer date of the newest commit that started this version (no parent of it had the version), in UTC as YYYY-MM-DDTHH:MM:SSZ. null when no commit has it (uncommitted content), when Git cannot tell (no git, not a repository, no commit, shallow clone) and when Git did not answer in time. Left out when version is left out. |
repository |
string |
yes | |
file |
string |
yes | Path relative to the repository. |
readOnly |
boolean |
no | Unknown type, invalid metamodel or read-only repository (SR-011 AK3, SR-016 AK3, SR-018 AK2). |
validity |
array of uuid |
no | Given by data.export: the UUIDs of the variants the property with the meaning validity names, in its order; [] = the core and every variant (SR-040 AK1, D-020). Left out when the metamodel has no validity property. |
packages |
array of uuid |
no | Given by data.export: the UUIDs of the packages the property with the meaning packages names, in its order; [] when none. Left out when the metamodel has no packages property. |
replacedBy |
array of object |
no | Given only for a core requirement (SR-046 AK3): each variant that replaces it and the replacing requirement, one entry per pair; a variant that also excludes it is only in excludedBy. Left out when empty. |
replacedBy[].variant |
uuid |
yes | Element ID: random UUID version 4, lower case, never changes (D-017, SR-002). |
replacedBy[].replacement |
uuid |
yes | Element ID: random UUID version 4, lower case, never changes (D-017, SR-002). |
excludedBy |
array of uuid |
no | The variants that exclude this core requirement (SR-042, SR-046 AK3). Left out when empty. |
emergent |
boolean |
no | SR-035: true when the element’s property with the meaning emergent holds the choice yes (assumption, spec question #591); only true is given, left out otherwise. An emergent requirement is never indirect: without an own verification record in a view it is open there. |
properties |
object |
yes | All other properties by key, unknown ones included. |
relations |
array of relation |
yes | The element’s own relations, then the targets of its properties of kind relation (property: true), then the incoming relations (direction: in); in stage 1 only the relations with the meaning succession from the successors of an element with a status marked invalid (SR-072 AK3). The targets of validity and packages also appear in validity and packages in data.export. currentVersion and outdated are given by data.export and trace.matrix. |
verification |
array of verificationEntry |
no | Verification status, one entry per view the requirement is in by the view rule: the core when it has no validity, each variant it is in; none for a variant that excludes or replaces it (SR-047 AK3). |
validation |
validationStatus |
no | SR-038: the Validierungsstatus from the validation records of the core (no variant) against the element’s current version; the newest record of that version decides, only records of older versions give outdated. Given for every element whose type has the meaning need (open without record) and for every other element with a validation record; left out otherwise (assumption, spec question #534). Never inherited from children; never the element’s status (D-030). |
problems |
array of problem |
no |
relation
Section titled “relation”Type: object.
| Field | Type | Required | Description |
|---|---|---|---|
kind |
key |
yes | Key of the relation kind, or of the property of kind relation (e.g. validity, packages) that stores the target; such a property’s targets also stay under properties as stored, and their entries have property: true and no meaning. |
property |
true |
no | kind is the key of a property of kind relation, not of a relation kind (ADR-0004). Left out for relation kinds. |
meaning |
one of "derivation", "replacement", "succession", "exclusion", "reference", null |
no | reference = inline link in the text (SR-066). |
direction |
one of "out", "in" |
yes | |
id |
uuid |
yes | Element ID: random UUID version 4, lower case, never changes (D-017, SR-002). |
repository |
string |
no | Workspace name of the repository of the other end (#416): the one the relation names, the source’s own when it names none; for direction: in the source’s (the other end: a successor, or the source of any incoming relation). Given in every targetState, as the name it stores for inaccessible and unknown-repository; left out only when the stored repository is not text. With id it names the target (element.get with ref and repository, SR-088; an ambiguous target also needs file; for unknown-repository the name is not a repository of the workspace). |
shortId |
shortId |
no | Of the other end when it is available; of a target in a repository that is not on this machine with the prefix UNKNOWN, since its type is not known (SR-006 AK1, spec question #154). |
identifier |
string |
no | Identifier of the other end (#305), only when it is available locally and has one. |
title |
string |
no | Only when the other end is available locally, also across repositories, where the file stores no title (SR-005 AK2, SR-006 AK1). |
accessible |
boolean |
yes | targetState is available. |
targetState |
one of "available", "inaccessible", "missing", "ambiguous", "unknown-repository" |
yes | Where the other end is (D-058): available = exactly one element with the UUID in the repository the relation names (the source’s own when it names none); inaccessible = that repository is in the workspace file but not on this machine (N-041, SR-006); missing = the repository is here, the UUID is not in it (N-065, SR-089); ambiguous = several files there share the UUID (SR-088); unknown-repository = the workspace file lists no repository of that name, or repository is not text. |
storedVersion |
version |
no | Fassung: normal-form version, colon, first 16 hex characters of the SHA-256 over the canonical content (D-013, D-027, ADR-0005). Example: n1:9f86d081884c7d65. |
currentVersion |
version |
no | Fassung: normal-form version, colon, first 16 hex characters of the SHA-256 over the canonical content (D-013, D-027, ADR-0005). Example: n1:9f86d081884c7d65. |
outdated |
boolean |
no |
evidenceRecord
Section titled “evidenceRecord”An evidence record (Datensatz) as commands return it (SR-024 AK4, SR-028): the fields of evidence-record.schema.json with the same rules, from a Markdown record or a JUnit test case alike, without the format marker reqseq-record; test-case is testCase.
Type: any.
| Field | Type | Required | Description |
|---|---|---|---|
element |
uuid |
yes | Verification: a requirement. Validation: a need or a requirement (D-012). |
version |
version |
yes | Fassung: normal-form version, colon, first 16 hex characters of the SHA-256 over the canonical content (D-013, D-027, ADR-0005). Example: n1:9f86d081884c7d65. |
kind |
one of "verification", "validation" |
yes | |
method |
one of "test", "analysis", "inspection", "demonstration" |
no | Required for verification (D-026). |
variant |
uuid |
no | Variant the record holds for. Absent: the core (D-026, SR-047 AK2). |
item |
string |
no | Prüfling. Required for verification, optional for validation (D-007). |
result |
one of "passed", "failed" |
yes | |
date |
dateTime |
yes | A date and time with time zone (RFC 3339 date-time), for example 2026-10-26T09:30:00Z. |
evidence |
string |
no | Where the Beleg is: relative path, file URL or any URI. |
testCase |
string |
no | Optional test case name or ID (D-026, SR-033): the test-case of a Markdown record, the name of a JUnit test case. |
source |
one of "markdown", "junit" |
no | The format of the record file: a Markdown record (evidence-record.schema.json) or a test case of a JUnit XML file (ADR-0012). |
repository |
string |
no | Workspace name of the repository of the record file (an evidence location of the workspace file). |
file |
string |
no | The record file, relative to its repository, / as separator. |
line |
integer |
no | The line of the <testcase> in a JUnit file; 1 for a Markdown record. |
className |
string |
no | The classname of a JUnit test case; with testCase it names the test case (ADR-0012). Left out for a Markdown record. |
baselines |
array of string |
no | The name of every baseline file (baseline.schema.json, in the baselines folder of the workspace file) that lists the element of the record with its version (SR-032 AK2), in file order, each name once. Only evidence.list fills it. |
testCase
Section titled “testCase”A test case (SR-033) seen from one element: the test case named by JUnit classname and name, or by the test-case of Markdown records (ADR-0012), with the records of that one element. Every <testcase> of a JUnit file and every Markdown record is one execution (Durchführung): a file that holds the test case twice (a rerun) gives two. A test case that names several elements (SR-033 AK2) is listed at each of them, each time with that element’s records only, since the version and so whether a record is outdated belong to the element. A test case whose only appearances are skipped JUnit test cases (<skipped> gives no record) has executed: false and no executions (SR-033 AK3).
Type: object.
| Field | Type | Required | Description |
|---|---|---|---|
name |
string |
yes | The JUnit name, or the test-case of the Markdown records. |
className |
string |
no | The JUnit classname; left out for a test case of Markdown records. |
elements |
array of uuid |
yes | Every element the test case names, in any of its executions and skipped appearances, each once (SR-033 AK2). |
executed |
boolean |
yes | The test case has at least one record of this element (SR-033 AK3). |
executions |
array of evidenceRecord |
yes | The records of this element from this test case, newest first (by date, then repository, file and line); empty when executed is false. |
last |
evidenceRecord |
no | The newest execution, executions[0] (SR-126 AK1); left out when executed is false. |
verificationEntry
Section titled “verificationEntry”The verification status of a requirement in one view (SR-031, SR-034, SR-047 AK3): element verification gives one per view, trace.matrix one for its view (SR-126).
Type: object.
| Field | Type | Required | Description |
|---|---|---|---|
view |
viewId |
yes | A view as the tool writes it in outputs: core or the canonical UUID or short ID of a variant (SR-043). |
status |
verificationStatus |
yes | SR-031, SR-034. indirect = indirectly verified via children. |
missingChildren |
array of uuid |
no | SR-034 AK2: for a requirement without own verification record in the view whose status is open: its counted children (derivation children whose type has the meaning requirement, whose status is not marked invalid and that apply in the view) that are open, failed or outdated; direct children only, in child order, each UUID once (twins in several repositories, SR-088, share one); left out when there is none. |
verificationDegree
Section titled “verificationDegree”SR-037: the Nachweisgrad of a selection in one view. Counted are the requirements of the selection (type with the meaning requirement) whose status the metamodel does not mark invalid (AK3, D-044) and that have a verification status in the view (spec question #592).
Type: object.
| Field | Type | Required | Description |
|---|---|---|---|
share |
number |
no | (verified + indirect) / total (AK1, AK2), unrounded; left out when total is 0. Shown as a percentage rounded down to one decimal (ADR-0012). |
total |
integer |
yes | The counted requirements. |
counts |
object |
yes | How many counted requirements have each verification status (AK1); indirect apart from verified (AK2); they add up to total. |
counts.open |
integer |
yes | |
counts.verified |
integer |
yes | |
counts.indirect |
integer |
yes | |
counts.failed |
integer |
yes | |
counts.outdated |
integer |
yes |
Examples
Section titled “Examples”export-package.yaml
Section titled “export-package.yaml”# What data.export gives for { selection: { package: PKG-0000d1 } } on fixtures/SR-061/export (SR-061# AK2), the time of the call and the commits replaced: the two requirements of the package with their# properties as stored (the relation properties validity and packages too), every relation with the# current version of its target, including the targets of validity and packages (property: true),# validity and packages as UUIDs and the verification status per view. The derivation of SR-0000b2# stores an older version of the need, so it is outdated (SR-025).reqseq-data: 3commit: 61aa061aa061aa061aa061aa061aa061aa061aa0dirty: falseworkspace: Weather stationgenerated: 2026-10-27T08:00:00Zselection: package: PKG-0000d1repositories: - name: system available: true commit: 61aa061aa061aa061aa061aa061aa061aa061aa0 - name: sensor available: true commit: 0123456789abcdef0123456789abcdef01234567incomplete: falseelements: - id: 61061061-0000-4000-8000-0000000000b1 shortId: SR-0000b1 type: system-requirement status: draft title: Show the wind speed version: n1:697a2ad17ed49170 repository: system file: requirements/SR-0000000000b1.md properties: requirement-type: functional acceptance-criteria: - Given wind, when the station measures it, then it shows the speed. validity: - id: 61061061-0000-4000-8000-0000000000c1 version: n1:f0136de1de07212d packages: - id: 61061061-0000-4000-8000-0000000000d1 version: n1:5862e4d618683af6 x-supplier: Anemo Ltd relations: - kind: derives-from meaning: derivation direction: out id: 61061061-0000-4000-8000-0000000000a1 repository: system shortId: N-0000a1 title: Know the wind accessible: true targetState: available storedVersion: n1:9d97d0ccf9b75591 currentVersion: n1:9d97d0ccf9b75591 outdated: false - kind: validity property: true direction: out id: 61061061-0000-4000-8000-0000000000c1 repository: system shortId: VAR-0000c1 title: Coast accessible: true targetState: available storedVersion: n1:f0136de1de07212d currentVersion: n1:f0136de1de07212d outdated: false - kind: packages property: true direction: out id: 61061061-0000-4000-8000-0000000000d1 repository: system shortId: PKG-0000d1 title: Display accessible: true targetState: available storedVersion: n1:5862e4d618683af6 currentVersion: n1:5862e4d618683af6 outdated: false verification: - view: 61061061-0000-4000-8000-0000000000c1 status: verified validity: - 61061061-0000-4000-8000-0000000000c1 packages: - 61061061-0000-4000-8000-0000000000d1 - id: 61061061-0000-4000-8000-0000000000b2 shortId: SR-0000b2 type: system-requirement status: draft title: Show the gusts version: n1:077d46fbf1a6a93d repository: system file: requirements/SR-0000000000b2.md properties: requirement-type: performance acceptance-criteria: - Given a gust, when the station measures it, then it shows it within a second. packages: - id: 61061061-0000-4000-8000-0000000000d1 version: n1:5862e4d618683af6 relations: - kind: derives-from meaning: derivation direction: out id: 61061061-0000-4000-8000-0000000000a1 repository: system shortId: N-0000a1 title: Know the wind accessible: true targetState: available storedVersion: n1:0000000000000000 currentVersion: n1:9d97d0ccf9b75591 outdated: true - kind: supersedes meaning: succession direction: out id: 61061061-0000-4000-8000-0000000000b4 repository: system shortId: SR-0000b4 title: Show the wind accessible: true targetState: available storedVersion: n1:1e68aa41d13d05b1 currentVersion: n1:1e68aa41d13d05b1 outdated: false - kind: packages property: true direction: out id: 61061061-0000-4000-8000-0000000000d1 repository: system shortId: PKG-0000d1 title: Display accessible: true targetState: available storedVersion: n1:5862e4d618683af6 currentVersion: n1:5862e4d618683af6 outdated: false verification: - view: core status: failed - view: 61061061-0000-4000-8000-0000000000c1 status: open - view: 61061061-0000-4000-8000-0000000000c2 status: open validity: [] packages: - 61061061-0000-4000-8000-0000000000d1station-core.yaml
Section titled “station-core.yaml”# What data.export gives for a need and three requirements of a weather station (SR-061): the core# view, with the verification status per view (SR-031, SR-047 AK3); the parent without own record is# verified indirectly in the core and names its missing child in the variant (SR-034); the need and# one requirement have a validation status (SR-038). The emergent requirement (SR-035) has no own record,# so it is open in each view, never indirect. Records and test cases are checked by# packages/core/src/evidence/record.test.ts: a data-export file has no place for them.reqseq-data: 3commit: 0123456789abcdef0123456789abcdef01234567dirty: falseworkspace: Weather stationgenerated: 2026-10-27T08:00:00Zselection: { ids: [SR-e88fb3, SR-e88fa0, SR-e88fe0, N-e88f00] }repositories: - { name: system, available: true, commit: 0123456789abcdef0123456789abcdef01234567, dirty: false }elements: - id: e8df96ea-a168-4d90-8d65-6328cee88fb3 shortId: SR-e88fb3 type: system-requirement status: draft title: Show wind speed version: n1:11335f109ffb1a19 versionDate: 2026-10-20T12:00:00Z repository: system file: requirements/SR-6328cee88fb3.md properties: {} relations: - kind: derives-from meaning: derivation direction: out id: e8df96ea-a168-4d90-8d65-6328cee88fa0 repository: system shortId: SR-e88fa0 title: Show the wind accessible: true targetState: available storedVersion: n1:5c1d0f2e8a7b6c43 verification: - { view: core, status: verified } - { view: VAR-0000c2, status: open } validation: validated - id: e8df96ea-a168-4d90-8d65-6328cee88fa0 shortId: SR-e88fa0 type: system-requirement status: draft title: Show the wind version: n1:5c1d0f2e8a7b6c43 versionDate: 2026-10-20T12:00:00Z repository: system file: requirements/SR-6328cee88fa0.md properties: {} relations: [] verification: - { view: core, status: indirect } - { view: VAR-0000c2, status: open, missingChildren: [e8df96ea-a168-4d90-8d65-6328cee88fb3] } - id: e8df96ea-a168-4d90-8d65-6328cee88fe0 shortId: SR-e88fe0 type: system-requirement status: approved title: Show the forecast version: n1:4509014875524d1c versionDate: 2026-10-20T12:00:00Z repository: system file: requirements/SR-6328cee88fe0.md emergent: true properties: { emergent: "yes" } relations: [] verification: - { view: core, status: open } - { view: VAR-0000c2, status: open } - id: e8df96ea-a168-4d90-8d65-6328cee88f00 shortId: N-e88f00 type: need status: approved title: See the wind version: n1:0d9e8f7a6b5c4d3e versionDate: 2026-10-20T12:00:00Z repository: system file: needs/N-6328cee88f00.md properties: {} relations: [] validation: outdated