A research figure is finished when a reader can trust it, a checklist is satisfied and a journal will accept the file. The Lab has a pane for each of those jobs. Provenance shows where every number on the figure came from, and which ones a person typed with no source. Reporting standards scores the document against CONSORT, PRISMA and the other checklists that govern it, item by item, with repairs you can preview and apply. Publish walks you through four steps, from choosing a journal and measure to building a submission archive that holds the figure, its source, its data and a preflight report. Revision history keeps the last fifty snapshots of each document so you can always go back. This page documents every control, state and message in those panes, the Lab's export commands, and what each one can and cannot prove.
At a glance
| Pane | What it answers | Open it from | Changes your document? |
|---|---|---|---|
| Provenance | Where did each number come from, and which have no source? | Rail Provenance; ⌘K Figure provenance… | Never. It only moves the cursor |
| Reporting standards | Which checklist items are reported, partial, unknown or missing? | Status popover Score against CONSORT, PRISMA…; ⌘K Reporting standards… | Only when you click Apply this fix or load a compliant example |
| Publish | Will this figure fit the journal, pass preflight, and travel with its data? | ⋮ menu Publish this figure…; ⌘K | Never. It writes files to your computer |
| Revisions | What did this document look like before? | ⋮ menu Revision history; ⌘K | Only when you Restore a snapshot |
| ⋮ Export submenu | SVG, PNG at 2× or 4×, PNG at print size, every view as a ZIP, copy to clipboard | ⋮ menu Export | Never |
The Lab is a Starter workstation, so every feature on this page is available on Starter, Plus, Ultra and Enterprise. None of them uses AI or AI points. In particular, the Publish pane's Export LaTeX is generated in your browser, unlike the AI-based TikZ conversion in the main Studio. See Plans and what they include.
Opening the panes
The panes open in the column on the right of the canvas, one at a time, alongside the Advisor, Comments and the flowss Lab Agent — Lab methodologist. Opening one closes whichever was there, and also puts the Block properties drawer away. Each has its own header with a count and a close button, and shows the open document's title so you always know whose record you are reading.
| Pane | Ways to open it |
|---|---|
| Provenance | The rail's Provenance button (toggles); ⌘K Figure provenance… or Go to Provenance; the Advisor's Open the provenance rail |
| Reporting standards | The status popover's Reporting standards section, button Score against CONSORT, PRISMA…; ⌘K Reporting standards… or Go to Reporting standards |
| Publish | ⋮ menu Publish this figure…; ⌘K Publish this figure… or Go to Publish; the Advisor's Open the publish checks |
| Revisions | ⋮ menu Revision history; ⌘K Revision history (a command and a Go to entry) |
On Windows and Linux, read ⌘ as Ctrl and ⇧ as Shift.
Provenance
The Provenance pane reads the figure's passport: a record of every number the document declares, where each came from, and which numbers each derived value was computed from. It leads with the distinction that matters most to a reader: a number read from data or computed in the document looks identical on the figure to a number someone typed, but only the first can be checked against anything.
The pane is read-only. Clicking any value with a location puts the cursor on that line of the source. The header counts the numbers recorded ("42 numbers").
The six origins
Every number has one origin. The pane uses a short chip label for each:
| Chip | Group title | What it means | How you write it in FlowScript |
|---|---|---|---|
| Kernel | Computed by the statistics kernel | A named method at a named version produced it from recorded inputs | Not recorded in the Lab today (see Limits) |
| Data | Read from a dataset | Taken from a column of data, with a row count | n: 1200 source { dataset: trial_csv, column: "age", rows: 1200 }, optionally with aggregation:. file: or path: work in place of dataset:, field: in place of column:, and agg: in place of aggregation: |
| Derived | Derived inside the document | Arithmetic the compiler evaluated from other numbers | n: = treat.n + control.n |
| Cited | Typed, with a source note | A person typed the digits and named where they came from | n: 142 source "Table 2". A source { … } that does not name both a dataset and a column is also kept as a cited note |
| Typed | Typed, with no source | Someone typed it and the document does not say where it came from | n: 142 |
| Unknown | No recorded origin | The passport knows the number exists and nothing else, or two records contradict each other |
A source note is reproduced verbatim. The Lab has never opened the table, paper or file it names.
The header
The top of the pane shows:
- A headline, such as "12 of 40 numbers came from data or a named method; 25 were typed by a person."
- Split chips with counts: from the kernel, from data, derived here, typed, cited, typed, no source, and no origin when there are any.
- A caution whenever anything was typed: "A typed number and a computed one look identical on the figure. The difference is that only one of them can be checked against anything."
- Traceable to data, a fraction and a percentage, for example "14 / 40 35%", with the sentence "14 of 40 numbers can be traced to something outside the document." The percentage is rounded down, so a document one number short never reads 100%. An empty record scores 0, not 100%.
- The rule: a value counts as sourced only when it names a dataset or carries a source note, or, if it was derived, when every number underneath it does. One typed number at the bottom of a chain makes the whole chain unsourced.
- The caveat: the score measures whether an origin was recorded, not whether the figure is right. It is not a score to maximise.
The five tabs
The tab strip holds Numbers, Derived, Methods and Data, each with a count, and Limits.
Numbers
Every number, grouped by origin from strongest to weakest. Each group shows its chip, title, count and a one-line explanation. Each row shows the number's path (for example randomised.n), its value, and its location ("line 19"), or "no span" when it has none. Click the row's description to expand it:
| Detail | Shown when |
|---|---|
expression = treat.n + control.n | The value is derived |
| method … at version | A method was recorded |
| the author's note, verbatim | The value carries a source note |
| column … of … · N rows · aggregation | The value was read from a dataset |
| derived from … | The value has inputs |
| The verdict | "Traceable: every number underneath this one names an origin outside the document.", "Rests on typed numbers: …", or "Names no origin outside the document." |
Derived
Every derived value with its expression, each input with its origin chip and value, a restatement of the arithmetic, and a note on whether the chain traces to data. An input that is not recorded is highlighted. If the restated arithmetic disagrees with the stored value, it is shown in red with a warning icon. When nothing is derived, the tab says so and suggests writing n: = treat.n + control.n so the compiler keeps totals honest.
Methods
The statistical methods recorded for this figure, with the kernel version. Each row shows the method's name and id, its module, the version it was recorded at, the question the module answers, the formula and the citation. Badges flag a method not in this build's registry, one with no method record, and a version that differs from this build. When the registry has no citation, the row says so rather than inventing one. produced lists the values the method produced; click one to jump to it. When nothing is recorded, the tab says "No statistical method is recorded for this figure." and explains that this means none was recorded, not that none was computed.
Data
The datasets recorded for the figure: name, rows and columns, column names, a short content hash or no content hash recorded, and which values read them. A dataset that a value names but nothing recorded is listed as cited, not recorded. With no data at all the tab says "No data is attached to this figure. Bind a dataset and the numbers read out of it stop being claims and start being readings." Bind rows on the Data bench; see The Data and Statistics benches.
Limits
Three sections, in this order:
- What this record cannot tell you. A recorded source is not a checked source. A traced number is not a correct number. A dataset hash detects change, not truth, and is not proof against a hostile author. A unit that parsed is not the right unit. Anything nobody recorded is invisible.
- What the passport found. The passport's own findings, such as datasets without a content hash.
- Numbers that name no source. Every unsourced path, each a jump to its line.
The footer
The footer identifies the record: the figure id (or "(unnamed figure)"), the view, a short document hash, a short checksum and the generator. Any integrity problems are listed in amber. The last line says what the checksum is for: "The checksum pairs this figure with the data it was built from. It is change detection, not a signature — it proves nothing against anybody who wants to deceive you."
If the document does not compile, the pane shows no record at all, because a passport describes one specific version of a figure and showing the last one that worked would describe a document you are no longer looking at. Fix the source and the record returns.
Raising traceability
- Read your rows on the Data bench and derive a
datasetblock, so the document declares the data it was built from. - Annotate numbers read from the data with
source { dataset: …, column: …, rows: … }. - Annotate numbers copied from a paper or report with
source "Table 2"(or similar). - Replace hand-added totals with derived expressions, so they cannot drift from their parts.
- Open Limits and work through Numbers that name no source.
The Advisor turns this into a worklist: its Say where the numbers came from band proposes Record where N of M numbers came from, Read these numbers from data instead of typing them, or Declare the dataset in the document.
Reporting standards
The Reporting standards pane scores the document against the reporting checklists that govern it. The Lab knows 33 standards: CONSORT 2010 and its cluster, non-inferiority and pilot extensions, SPIRIT 2013, PRISMA 2020 and its flow diagram, PRISMA-S, PRISMA-ScR, MOOSE, STROBE and its cohort, case-control and cross-sectional variants, STARD 2015, TRIPOD 2015, TRIPOD+AI, RECORD, ARRIVE 2.0, CARE 2013, SRQR 2014, COREQ, TIDieR, CHEERS, SQUIRE, an ML-evaluation figure standard, model-card disclosure, RoB 2, ROBINS-I, QUADAS-2, ROBIS, AMSTAR 2 and GRADE. The standards are chosen from the document itself: declare a study design, arms, a cohort chain with exclusions or an economic model, and the standards that apply appear. For the catalogue and the Standards bench's scaffolds, see Reporting standards.
The summary
The header counts the standards that apply ("3 apply"), or shows not scored when the document does not compile. A row of chips lists each applicable standard, most relevant first, with its score. Pick one to see:
- Its name, version and year, and the score as two integers, met over applicable (for example "31 / 37").
- A headline: "31 of 37 applicable items fully reported."
- A bar and chips with the four statuses: Reported, Partial, Unknown and Missing, plus N excluded for items that do not apply (shown as N/A on the rows). Excluded items are in neither half of the fraction.
- A note when items are Unknown: "N items the engine cannot decide from the figure — counted as not reported, and yours to confirm by hand."
There is deliberately no single percentage, because many manuscript items cannot be decided from a figure and a confident percentage would hide that.
The three tabs
| Tab | What it lists |
|---|---|
| To fix | Every item that is missing, partial or unknown, with its number, title, line, the engine's explanation and the evidence it found |
| Checklist | Every item, grouped into the standard's own sections. Each section header shows its met / applicable score, or "none applies", and can be collapsed. Each item shows its requirement and its verdict |
| Doesn't apply | Every other standard, each with the reason it is not offered and either its item count or, if it was scored, its score (click it to open that standard) |
Clicking an item's header jumps to its line in the source. If an item failed while being checked, it says "This item failed while running, so the verdict above is not a judgement — check it by hand."
Previewing and applying a fix
Many items ship a repair.
- On To fix, click Show the fix (or Fix available on the Checklist tab).
- Read the preview: a description, the lines it would add (prefixed
+), any it would remove (prefixed-), and a note. The preview is produced by recompiling your document with the change. - Click Apply this fix. A toast confirms it (with the fix's own note, or "Fix applied") and offers Undo;
⌘Zworks too.
A fix writes placeholders, never data, and the item stays outstanding until you replace them. If the recompiled change was refused, the preview says "The engine recompiled this change and refused it, so it is not offered." and there is no apply button.
Starting from a compliant example
When the document does not follow a standard, the foot of the pane offers Start from a compliant example with one or more starter documents, and the Doesn't apply tab offers Start from this standard buttons. Loading one replaces the open document without asking first. The toast "Template loaded — <name>" offers Undo (⌘Z works too), and any rows bound on the Data bench are released, because they described the study that was there before.
Starter documents contain example values from fictional studies and say so in a notice comment near the top; see The "Example data" stamp.
Publish
The Publish pane takes a finished figure to a journal in four steps. A stepper across the top shows each step's number, short name (Target, Export, Preflight, Bundle) and state, and the header counts finished steps ("2 / 4"). Each step's section shows its title, a state chip, a one-line status and, at the bottom, a Limit line stating what that step cannot do.
| State | Meaning |
|---|---|
| not started | Nothing has been supplied for this step. This is never shown as passing |
| done | The step has evidence it owns: a destination without errors, a file actually written, a preflight with no blockers, a bundle built |
| blocked | The step found a problem, and the status says what |
The pane works on the view currently shown on the canvas. Your chosen destination and measure stay chosen while the Lab is open, even after you close the pane or switch documents; reloading the page clears them.
Step 1: Choose a destination and a measure
- Type in Search journals — nature, plos, ieee…. Up to eight matches show, each with its publisher, "row unconfirmed" (or the date it was confirmed), and its single / double column widths in millimetres (a dash where none is captured). "N more match — narrow the search." appears when there are more.
- Click a destination. The chosen row shows its publisher and how its numbers were sourced ("published guideline", "derived from template" or "needs confirmation"). Change brings the search back.
- Choose a measure: single column, 1.5 column, double column or maximum width, each labelled with its width in millimetres. A measure the destination does not publish is greyed out, and its tooltip says so. The measure starts at single column.
The section then shows:
- Recommended: a measure, with the reason. With a destination chosen, it is the measure that uses the least page area while still fitting the destination's height limit (for a destination that states a width band, the nearest permitted width). If no measure fits the height, it says the figure has to lose height, by restacking panels or splitting it.
- What fitting to this measure does. Before-and-after lines for the Measure (with the scale production will apply, such as "Everything below is multiplied by 0.62"), the Height against the destination's ceiling, and type, stroke and raster lines where they can be measured.
- The destination's own findings, each with a severity (error, warn, info), a rule name, what was observed, the requirement and the fix. In the Lab you typically see
format-not-accepted(an error, see below), acolumn-widthwarning when the figure is drawn wider than the measure and will be scaled down,max-height(an error) when the scaled figure is taller than the destination allows, andwidth-unspecified(info) when the row has no width for the chosen measure. - A provenance note for the destination's row, with an Author guidelines link.
The destination table holds 30 rows:
| Destination | Publisher | Vector formats | Raster formats | Source of the numbers |
|---|---|---|---|---|
| Nature | Springer Nature | ai, eps, pdf | tiff, png, jpeg | Published guideline |
| Nature Portfolio journal (generic) | Springer Nature | ai, eps, pdf | tiff, png, jpeg | Published guideline |
| Science | AAAS | ai, eps, pdf | tiff, png | Published guideline |
| Cell (and Cell Press titles) | Elsevier (Cell Press) | ai, eps, pdf | tiff, jpeg | Published guideline |
| PNAS | National Academy of Sciences | ai, eps, pdf | tiff | Published guideline |
| New England Journal of Medicine | Massachusetts Medical Society | eps, pdf, ai | tiff | Needs confirmation |
| JAMA | American Medical Association | pdf, eps, ai | tiff, png | Needs confirmation |
| The Lancet | Elsevier | pdf, eps, ai | tiff | Needs confirmation |
| The BMJ | BMJ Publishing Group | pdf, eps | tiff, png | Needs confirmation |
| PLOS ONE, PLOS Biology, PLOS Medicine | PLOS | eps | tiff | Published guideline |
| eLife | eLife Sciences Publications | ai, eps, pdf | tiff, png, jpeg | Needs confirmation |
| Elsevier journal (generic) | Elsevier | eps, pdf | tiff, jpeg | Published guideline |
| Springer journal (generic) | Springer Nature | eps, pdf, ai | tiff, png | Published guideline |
| Wiley journal (generic) | Wiley | eps, pdf, ai | tiff, png | Needs confirmation |
| Frontiers journal (generic) | Frontiers Media | eps, pdf, ai | tiff, png, jpeg | Needs confirmation |
| MDPI journal (generic) | MDPI | eps, pdf, ai | tiff, png | Derived from template |
| IEEE Transactions, IEEE conference paper | IEEE | pdf, eps, ps | tiff, png | Published guideline |
| ACM conference or journal | ACM | pdf, eps | png, tiff, jpeg | Derived from template |
| Physical Review (APS) | American Physical Society | eps, pdf | png, tiff | Needs confirmation |
| ACS journal (generic) | American Chemical Society | pdf, eps, ai | tiff | Needs confirmation |
| RSC journal (generic) | Royal Society of Chemistry | pdf, eps, ai | tiff, png | Needs confirmation |
| AGU journal (generic) | AGU (published by Wiley) | pdf, eps, ai | tiff, png | Needs confirmation |
| Oxford University Press journal (generic) | Oxford University Press | pdf, eps, ai | tiff, png | Needs confirmation |
| Taylor & Francis journal (generic) | Taylor & Francis | pdf, eps, ai | tiff, png | Needs confirmation |
| arXiv preprint | arXiv (Cornell University) | pdf, eps | png, jpeg | Needs confirmation |
| Thesis or dissertation (A4, generic) | Institutional (no publisher) | png, tiff | Derived from template | |
| Conference poster (A0, generic) | Institutional (no publisher) | pdf, eps, ai | tiff, png | Derived from template |
Warning: The table is a convenience list captured from published author guidelines, not a live feed. No row has yet been confirmed against the publisher's current page from inside the app, so every row is marked "row unconfirmed" and the step shows: "These numbers have not been confirmed against the publisher's current author guidelines from inside this app — open the guidelines link and check the width, resolution and format list before you submit." Where a publisher states no resolution floors, the table uses the standard print convention (300 dpi halftone, 600 dpi combination, 1200 dpi line art); the checklist's resolution item shows the floors in force for your destination. If your journal is not listed, pick the closest family and confirm the numbers yourself.
The Lab measures the figure's drawn width and height from the rendered view. It does not supply type sizes or stroke widths to this step, so the fit lines show Type sizes and Stroke widths as "none measured"; the type and stroke checks run on the artwork itself at step 3. The Lab's figure format is SVG, which no destination in the table lists, so after you choose a destination step 1 reports a format-not-accepted error and stays blocked. Convert the exported SVG to an accepted format (usually PDF or EPS) in your vector tool, or submit a PNG from step 2 where the destination accepts PNG, and treat this finding as a reminder.
Step 2: Export the artwork
This step's status reports what has actually been written, not what could be. In the Lab it turns done once you export the SVG of the artwork currently on the canvas. Exporting LaTeX or a PNG does not change the step's state, and editing the figure after exporting returns the step to not started, because the file you saved no longer matches the artwork. While LaTeX is available but not yet written, the status says so: "available, not written: no file exists until you export one."
| Control | What it does |
|---|---|
| Export LaTeX | Downloads glyphscript-<view>.tex. Shown only when the view can be expressed as TikZ |
| Export SVG | Downloads glyphscript-<view>.svg, the same file as ⋮ Export Export SVG. Disabled until something is rendered |
| PNG · 300 dpi, PNG · 600 dpi | Rasterise the view at the destination's column width (or, with no destination, at the drawn width) and the chosen resolution. The line under the buttons shows the pixel width each will have |
The raster card's title states the width and destination, for example "Raster at 89 mm (Nature, single)"; the measure appears under its short name (single, oneAndHalf, double or max), and with no destination the title ends "(drawn size)". When the destination publishes no width for the selected measure, the card says "… publishes no 1.5 column width, so there is no printed size to rasterise at. Pick another measure." Before anything is rendered it says "Nothing measured yet — render a view and the printed width appears here." A PNG file is named like glyphscript-flow-89mm-300dpi.png, its background follows the theme, and the toast reports its pixel size and printed width ("PNG exported — 1051×700 px, 89 mm at 300 dpi"). If the browser cannot draw a canvas that large (more than 16,000 pixels on a side or 200 million pixels in all), the export is reduced and a second toast says so.
About the LaTeX:
- It is generated in your browser, with no AI and no points.
- The status line shows the figure kind, the view, the number of coordinates and the mode (
snippet). The file holds the picture alone (atikzpictureor atabular) with no preamble and no figure float, so load TikZ, and pgfplots or booktabs where the figure needs them, in your own document. - Notes about what the conversion did are listed under the status, and the download toast counts them ("LaTeX downloaded — 2 notes in the panel").
- It supports these view renderers: CONSORT and PRISMA flows, funnels, experiment flows, forest and meta-analysis plots, bar, point and line charts (including OKR charts), ablation, FMEA, cap and OKR/KPI tables, Gantt, roadmap and timeline views, C4 container views, and multi-panel composites. Any other view is refused, for example "TikZ refused this view (declined renderer)." or "TikZ refused this view (unmapped renderer).", with what would be lost and what to do instead, and Export LaTeX is not offered. In a multi-panel composite, a panel TikZ cannot express becomes a labelled gap rather than refusing the whole plate.
Step 3: Preflight the rendered artwork
Click Run preflight (later Re-run). Preflight scans the rendered SVG at its final printed size against the destination's numbers. It runs on your click, so "not started" is a real state, and the result is discarded the moment the artwork, the destination or the measure changes. With no destination chosen it still runs the checks that need no published number, such as script tags and low-resolution images.
The verdict comes in one of three forms, shown exactly as the checker states it:
| Verdict | Summary |
|---|---|
| not submittable | "N blockers — the figure will be rejected or will print wrong as it stands…" |
| submittable with warnings | "No blockers. N warnings a reviewer may well raise — read them before you submit, not after." |
| clean | "Nothing blocks submission and nothing warns. … Note that these are the checks this tool can prove from the file, not every check that exists." |
The verdict box also counts blockers, warnings and advisories. Findings are listed blockers first, then warnings, then advisories, each group headed with its count and its meaning:
| Severity | Meaning |
|---|---|
| Blockers | A production desk will bounce this, or it changes what the reader sees. Fix before submitting |
| Warnings | A defect worth owning before a reviewer names it |
| Advisories | A judgement call the checker is not entitled to make for you |
Each finding shows its position and check id, its message, the requirement where one applies, the fix, and where in the file it was found. Findings a tool could fix mechanically carry a tool badge. The filter buttons All N, Fixable by tool N and Needs the author N split the list, with a sentence such as "4 of 7 findings can be fixed mechanically. The other 3 need a decision only the author can make — every one of them changes what the figure says, not how it looks." When a filter half is empty it says "Nothing in this half of the split." The Lab does not apply these fixes for you; the split tells you which are cosmetic and which change what the figure claims.
| Area | Checks | Usual severity |
|---|---|---|
| Physical size | viewbox-missing, size-units-missing, size-not-column-width, aspect-mismatch (a blocker when the artwork is stretched), height-over-maximum | Warning; height is a blocker |
| Type | type-below-minimum, type-size-count, type-size-undeclared | Below-minimum is a blocker |
| Line weights | stroke-below-minimum, stroke-zero | Blocker |
| Colour | colour-only-encoding, colour-cvd-collision, colour-greyscale-collision, colour-text-contrast, transparency-not-flattened | Warning (an advisory when a second channel such as dashes carries the distinction) |
| Fonts | font-not-preferred, font-generic-only | Warning or advisory |
| Raster content | raster-below-dpi, raster-size-unmeasurable | Blocker or advisory |
| Structural hygiene | script-present, event-handler, external-reference, foreign-object (blockers), class-without-style, outside-viewbox (warnings) | Mixed |
| Accessibility | title-missing, desc-missing, axis-title-missing, axis-units-missing, sample-size-missing, error-bar-meaning-missing | Warning; a missing description is an advisory |
| Research practice | truncated-baseline, dual-axis, pie-many-slices, log-axis-unannotated, significance-no-adjustment, percent-no-denominator, smoothed-line-few-points, rainbow-ramp | Warning |
| Meta | destination-unspecified, destination-unknown, svg-unreadable | Advisory; an unreadable SVG is a blocker |
What this scan could not measure lists the scan's own limits on every run, clean or not: transforms on ancestors are not composed, inheritance is approximated, clip paths, masks and reused elements are not resolved, text is not measured for overflow or collision, and a pass means these checks passed, not every check that exists.
Note: The verdict counts preflight's own findings only. When step 1 raised destination errors, step 3's Limit line says those errors are outside this verdict and outside the archive's preflight.txt, so "no blockers" here is not a statement about them.
Preflight ignores the "Example data — not real" stamp when measuring, so it does not count the stamp's text as part of your figure.
Step 4: Assemble the submission bundle
Click Build submission bundle. The Lab writes one ZIP, named like glyph-<title>-<yyyymmdd>-<code>.zip, and downloads it. A green box names the file and lists any warnings; a red box headed "The bundle was not written." gives the reason. If preflight has not been run, the step warns first: "Preflight has not been run, so the archive would carry no verdict. Run step 3 first — the bundle is the artefact a co-author trusts." You can still build it, and preflight.txt will then say "Preflight: NOT RUN."
Checklist · N expands the chosen destination's submission checklist: draw at final width, stay inside the height limit, export an accepted format, set the colour mode, check raster resolution at final size, check the smallest type, check the thinnest stroke, embed or outline the fonts, letter the panels to house style (when the destination has one), name the files in citation order, and confirm against the current guidelines. Items marked advice are recommendations rather than requirements.
What a bundle built in the Lab contains:
| File | Contents | Included when |
|---|---|---|
README.md | What every file is, how the figure was made, and how to reproduce it | Always |
figure.svg | The rendered view as shown on the canvas, with its drawn size recorded in the README | Always |
figure.gs | The FlowScript source that regenerates the figure | Always |
data/<name>.csv and data/data-dictionary.csv | The rows the Data bench holds for this document, and a dictionary of every column | The Data bench is holding rows |
provenance.json | The figure passport shown in the Provenance pane | Always, when the document compiles |
checklist.md | The destination's submission checklist as tick boxes | A destination is chosen |
preflight.txt | The verdict, destination, measure, counts, every finding with its fix, and what the scan could not measure | Always |
CITATION.cff and citation.bib | Citation metadata | Always |
CHECKSUMS.txt | A SHA-256 for every file except itself and manifest.json, verifiable with sha256sum -c CHECKSUMS.txt | Always |
manifest.json | Every file with its size and checksum, plus metadata | Always |
The verdict written into preflight.txt is exactly the one the pane showed. CHECKSUMS.txt lists every file except itself and manifest.json, so anyone receiving the archive can verify that nothing changed after you built it. The dates inside the archive are the moment you click. The file name's date is the UTC day, and its code is derived from the title, that date and the source, so two builds of an unchanged document on the same day get the same file name. The bundle is titled after the document, or "Untitled figure" when it has no title.
Bundles built from the Lab carry no caption, author list or licence, so expect these warnings, which are accurate: "No caption was supplied; a figure without a caption is not submittable.", "No authors were supplied, so CITATION.cff names a placeholder and the bundle cannot be attributed." and "No licence was chosen, so this bundle has no LICENSE.txt and a reader has no stated permission to reuse it." Every Lab bundle also notes "No DOI is recorded, so the citation files point at no persistent identifier." Without rows on the Data bench you also see "No data tables were supplied, so this bundle contains no data/ directory…". With rows, expect "data/<name>.csv: N column(s) have no description…" and, for numeric columns, "… have no unit…", plus a note when blank cells were written as the column's missing-value code. If the document does not compile, there is no provenance.json and a warning says so. Add the caption, authors and licence in your submission system, or edit the README before you share the archive.
Bundle limits: 200,000 rows and 512 columns per data table, 96 MB per file, 256 MB per archive and 4,096 files.
Exporting outside the Publish pane
The ⋮ menu's Export submenu works on the view on the canvas:
| Command | Output | Shortcut |
|---|---|---|
| Export SVG | glyphscript-<view>.svg | |
| Export PNG (2×) | Twice the screen resolution, glyphscript-<view>@2x.png | ⌘⇧P |
| Export PNG (4×, print) | Four times the screen resolution, glyphscript-<view>@4x.png | |
| Export PNG at print size (300 dpi) | The figure's drawn width at 300 dpi, named like glyphscript-<view>-120mm-300dpi.png | |
| Export all views (ZIP) | Every view in the document as SVG, one file per view, in <title>-views.zip (figures-views.zip for an untitled document). A view that cannot be drawn is named in the toast and the rest are still exported. The dates inside the ZIP are the document's last edit, so two exports of an unchanged document are identical | |
| Copy image to clipboard | A 2× PNG on the clipboard; the toast says "Image copied to clipboard" |
PNG backgrounds follow the theme: white in the light theme, the Lab's dark ground in the dark theme. Copying an image needs a secure (https) page and a browser that supports image clipboard writes. For every format across the platform, see Exporting your work.
The "Example data" stamp
The Lab's starter documents, including the reporting-standard starters, contain realistic values from fictional studies. Each carries a notice comment near the top, such as "// Every string below is EXAMPLE text from a fictional trial: replace it." While a document still contains a notice with the words "EXAMPLE text from" followed by "fictional" (with or without "a" or "an" between them, and with EXAMPLE in capitals), the canvas and every export (SVG, PNG, the views ZIP and the bundle's figure) carry a faint diagonal "EXAMPLE DATA" watermark and an amber "Example data — not real" label in the bottom-right corner, and the bundle's preflight.txt opens with "Example data — not real: these values are an example that ships with the platform, not data from a study." The LaTeX from Export LaTeX carries the same warning as its first line, a comment that begins % Example data -- not real:, and the export shows an example-data note. Replace the example values with your own, then delete the notice comment; the stamp disappears at the next render.
Revision history
The Lab saves a snapshot of the open document about a second and a half after you stop typing and keeps the most recent 50 per document. Snapshots are stored in this browser and survive reloads. The Revisions pane's header shows how many are kept ("12 / 50").
Each row shows:
- How long ago it was taken ("just now", "5m ago", "3d ago" and so on), and a current badge on the snapshot that matches the editor.
- A name tag, when the snapshot has one.
- Its first line, and a summary such as "24 lines · +3 lines · line 7: arm control {". When the line count did not change it reads "edited · line 7: …"; an identical snapshot reads "no change"; the oldest reads "first snapshot · N lines".
- A What changed button (not on the oldest snapshot), which reveals the block-level changes since the previous snapshot, such as
arm arm_b: n 240 → 235, or "No block changed — formatting or comments only." Click Hide changes to fold it again.
The current snapshot has no Restore button, because restoring it would change nothing.
To go back:
- Click Restore on a row.
- Confirm: "Replace the editor's source with this snapshot? Undo brings your current source straight back." Click Restore or Cancel.
- The pane closes, and a toast says "Snapshot restored" and offers Undo (
⌘Zworks too).
To delete a document's history, click the bin icon in the header ("Clear revision history"). The pane asks "Delete all N saved snapshots for this document? This can't be undone."; click Delete history (or Cancel). A toast confirms "Revision history cleared for this document". This cannot be undone. Clearing history is also the quickest way to free local storage when the Data bench reports that storage is full. For history across the platform, see Version history and undo.
Tips
- Work the Advisor's bands in order. "Make it compile", then "Meet the standard", then "Say where the numbers came from" is the order in which problems stop a figure being accepted.
- Choose the destination early. Step 1 works before the figure is finished and tells you which measure to draw at, which saves a rescale later.
- Re-run preflight after every change. A verdict is discarded as soon as the artwork changes, so a stale one can never be mistaken for the current one.
- Bind your data before building the bundle. With rows on the Data bench, the bundle carries them and a data dictionary, and the data-availability statement says so.
- Use source notes generously.
source "Table 2"turns a typed number into a cited one and lifts the traceability score honestly. - Treat "Unknown" items as yours. The standards pane counts them as not reported because only you can confirm them.
Limits and known constraints
- Kernel origins and methods are not recorded in the Lab yet. Numbers written by the Statistics and Data benches are stored as plain values, so the Provenance pane shows them as Typed unless you add a
sourcenote, the Kernel group is empty, and the Methods tab reads "No statistical method is recorded for this figure." The method sentence and citation are still shown on the Statistics bench when you compute, so copy them into a note if you need them recorded. - Bound datasets carry no content hash. The Data tab lists bound datasets with no content hash recorded, and the passport finds that "a later edit to the data would go unnoticed".
- The destination table is not live. No row has been confirmed from inside the app; always check the guidelines link.
- SVG is not an accepted journal format. Step 1 stays blocked with
format-not-acceptedfor every destination. Convert the SVG, or use a PNG where accepted. - Type and stroke sizes are not measured at step 1. Those checks run at step 3 on the artwork.
- Only an SVG export completes step 2. Exporting LaTeX or a PNG from the pane does not change the step's state.
- The destination and measure are not saved. Reloading the Lab clears them.
- Preflight reads the SVG text, not a rendering. See "What this scan could not measure" on every run.
- The Lab does not apply preflight fixes. The Fixable by tool split is guidance only.
- LaTeX is a snippet. No preamble or float; and only the renderers listed under step 2 are supported.
- Bundles carry no caption, authors or licence when built from the Lab.
- Revision history and bound rows are stored in this browser. They do not follow you to another device.
- Reporting standards can only decide items visible in the figure's model; manuscript items often land in Unknown.
Troubleshooting
| What you see | Where | What it means | What to do |
|---|---|---|---|
| "The document does not compile right now, so there is no record to show…" | Provenance | No compiled model | Fix the errors shown in the status popover's Validation section |
| "No checklist was run: the document does not compile." | Reporting standards | No compiled model; header shows not scored | Finish the half-typed value (usually an unclosed quote) |
| "No reporting standard claims this figure yet…" | Reporting standards | Nothing in the document matches a standard | Declare a study design, arms, a cohort chain or an economic model, or start from a compliant example |
| "This report's counts do not add up to its own denominator…" | Reporting standards | An internal inconsistency in the report | Read the items rather than the numbers |
| "The document has to compile before a fix can be applied" | Apply this fix | No compiled model | Fix the source, then apply |
| "No automatic repair ships for … — this one is a manual edit" | Apply this fix | The item has no repair | Edit the source yourself |
| "The fix was abandoned — your document is unchanged" | Apply this fix | The change did not survive recompiling | Edit by hand |
| "No starter document called "…" ships with this build" | Start from a compliant example | The starter is unavailable | Use the Standards bench or the template picker |
| "No destination in the table matches "…"" | Publish, step 1 | Not in the table | Pick the closest family and confirm its numbers |
| "… is not a row in this table, so no width, type floor or format list could be loaded." | Publish, step 1 | A saved destination no longer exists | Pick a destination again |
| "… is chosen, but the figure has no measured drawn size…" or "No measured figure was supplied…" | Publish, step 1 | Nothing is rendered, or the view declares no size | Render a view, then reopen the pane |
format-not-accepted: "The figure is a svg file." | Publish, step 1 | The Lab exports SVG; the destination wants PDF, EPS or a raster | Convert the SVG, or submit a PNG where accepted |
| "TikZ refused this view (…)." | Publish, step 2 | The view's renderer has no faithful LaTeX form | Follow the remedy shown; export SVG or PDF instead |
| "No TikZ has been attempted for this view." | Publish, step 2 | The document does not compile, or no view is shown | Fix the source and make sure a view is drawn on the canvas |
| "The document does not compile right now, so the fix cannot be previewed…" | Reporting standards, Show the fix | No compiled model | Fix the source first |
| "This item's fix is no longer available — the report may be older than the checklist it came from." | Reporting standards, Show the fix | The fix cannot be previewed against the document as it stands | Make the change by hand, guided by the item's requirement |
| "Render a view before exporting it at a print width" | PNG · 300/600 dpi | Nothing rendered yet | Wait for the view to draw |
| "This view does not declare a drawn size, so it cannot be exported at a print width" | PNG at print size | The SVG has no usable size | Export SVG instead |
| "… needs a canvas this browser will not draw, so the export was reduced…" | PNG at print size | The image would be too large | Export at a smaller width, or export SVG and rasterise elsewhere |
| "Render a view before assembling a bundle" | Build submission bundle | Nothing rendered | Wait for the view to draw |
| "The bundle was not written." with a reason | Publish, step 4 | The archive failed a check, for example a data table over the limits | Read the reason; trim the data on the Data bench |
| "Nothing to export — this document declares no views" | Export all views (ZIP) | No view blocks | Add a view from the Figures bench |
| "None of the views could be rendered" | Export all views (ZIP) | Every view failed to draw | Fix the errors in the status popover's Validation section |
| "Render a view before exporting it" or "Render a view before copying it" | Export PNG, Copy image to clipboard | Nothing is drawn on the canvas yet | Wait for the view to draw, or fix the source |
| "Clipboard images aren't supported in this browser" | Copy image to clipboard | No image clipboard | Use Export PNG (2×) |
| "No snapshots yet…" | Revisions | Nothing captured yet | Edit the source; the first snapshot lands about 1.5 seconds after you pause |
Related pages
- Lab, the overview of the studio
- The Data and Statistics benches, including the Advisor
- The FlowScript language, for
sourcenotes and derived values - Lab views and renderers
- Reporting standards
- Exporting your work
- Version history and undo
- Privacy and your data
- Science and the Science verification model
- Plans and what they include
