Skip to content

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.

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.

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.

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

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

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.

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.

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.

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
# 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: 3
commit: 61aa061aa061aa061aa061aa061aa061aa061aa0
dirty: false
workspace: Weather station
generated: 2026-10-27T08:00:00Z
selection:
package: PKG-0000d1
repositories:
- name: system
available: true
commit: 61aa061aa061aa061aa061aa061aa061aa061aa0
- name: sensor
available: true
commit: 0123456789abcdef0123456789abcdef01234567
incomplete: false
elements:
- 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-0000000000d1
# 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: 3
commit: 0123456789abcdef0123456789abcdef01234567
dirty: false
workspace: Weather station
generated: 2026-10-27T08:00:00Z
selection: { 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