Reference

TL;DR

Every defect a run catches is one row in defects/<YYYY-MM>.jsonl at the store’s root. A row is written the moment the defect is found and never edited. Tandem: Show Defects renders the month as a table with the fate of every row. Thinkube Tandem says why the rows are kept.

The file

One file per month, shared by every space. Each row names the space it came from. A run adds a row when it catches one of these: a worker writing outside its declared files, a check that never passes, a check that could not run at all, a question the run had to answer for a worker, a deferral found in the delivered code, or a finding carried to the report.

A row

Field Holds

ts, version

When the row was written, and the Tandem version that wrote it.

space, spec, run, slice, unit

Where it happened: the thinking space (the page where you write your sentences and follow their work), the signed work (TEP-<author>-<n>), the run, the piece of work and the worker.

activity, trigger, type, stage, impact

The classification; the values are listed under The axes. activity, trigger and impact are strings chosen by the site that caught the defect, so a monthly reading counts spellings as well as kinds.

detail

The evidence, in the words of whatever caught it, cut at 1,200 characters.

refs

Related identifiers: a commit, a check, a file.

The axes

ODC attribute Field in a row What it holds in Tandem

Activity

activity

What the run was doing when the defect surfaced: preflight, check authoring, unit execution, worker question, verify-oracle supervision, closing gate, closing, run, refresh, diagnosis, challenge, check repair, gate repair, clearance, tool development. These are internal values; see the table in Tandem: Show Defects.

Trigger

trigger

What surfaced it: probe-audit, containment, gate-verifier, supervisor, oracle-ruling, author-resume, closer, stub-scan, gate-ac, gate-infra, suite, watchdog, crash, window-reload, self-repair, and the preflight refusals such as plan-check-homes and signature-drift. These are internal values; see the table in Tandem: Show Defects.

Defect type

type

Whose fault it was, as the judge saw it: code, test, contract (the brief, the instructions a worker is given, lacked a fact), gate, machine (Tandem’s own machinery, wherever the failure was caught), infrastructure, environment, decision. A closed set.

Qualifier

qualifier

missing, written for a deferral the honesty scan found in delivered code.

Stage

stage

Where in the pipeline it belongs: author, brief, check, clearance, altitude. These are internal values; see the table in Tandem: Show Defects.

Impact

impact

The cost, as one sentence the catching site chose: run refused, round lost, unit undelivered, the author repaired its own work, closed what no other actor could, delivery withheld, and so on.

Fate

computed when read

healed, reached the person, or not known.

The idea is IBM’s Orthogonal Defect Classification: every defect is classified in a few seconds along attributes that do not depend on each other, and the distribution of a few hundred rows says where the method leaks. Tandem adds the fate, and the tool’s own defects.

The fate of a row

A row says what surfaced, not what became of it. When a run ends it writes how it ended, and how each piece of work ended, beside the ledger under the run’s id. Reading a row’s fate then follows from the rows themselves:

  • an impact that says it was repaired, such as the author repaired its own work or closed what no other actor could, reads healed;

  • an impact that says nobody could, such as the closer could not finish it either, reads reached the person;

  • otherwise the ending of the piece of work it was found in answers, and where there is none, the run’s own ending;

  • a run whose ending was never written reads not known.

Tandem: Show Defects prints the fate beside every row and totals the month: N found · N healed by the run · N reached the person · N not known.

The tool’s own defects

A run cannot catch a defect in the machinery that runs it, so a repair to Tandem itself is recorded from the commit that made it. A line in the commit message names what was wrong:

Defect: the platform's verdict was compared in one case, so a pipeline
that passed was read as a failure

Every deploy, and every start of the extension, reads the Defect: lines it has not read yet. It writes one row per repair: activity: tool development, trigger: self-repair, type: machine, with the commit in refs. A commit without that line records nothing.

Tandem’s own failures are typed machine wherever they are caught: a check that could not be graded, a stall, a crash, a lock nobody released.