Quality / text

Text Library

Text Library — evidence

ICH E3-aligned prose blocks in three tiers, binding every number to an ARD address rather than stating it.

85reviewed requirementstext.md
155test recordsjs-unit · r-unit · text-review
0failing150 passing · 5 pending review
96%requirement coverage82/85 evidenced

Requirements

IDAreaRequirementEvidence typeResult
TXT-BLOCK-001A block file parses into frontmatter fields (id, e3_section, title, tier, displays, allow_digits, approval, provenance, requirements, disclosure) and a prose body, with the frontmatter never leaking into the body.1 passing
TXT-BLOCK-002Validation rejects an unknown tier, an unknown approval state, and a generated-tier block that does not name the model and prompt that produced it.1 passing
TXT-BLOCK-003The shipped library loads with unique block ids and no structural errors; every .md file in library/text/ is a block.1 passing
TXT-BLOCK-004Every block declares at least one requirement ID matching ^[A-Z]{2,4}-[A-Z]+-\d+[A-D]?$, and the library exercises all three reuse tiers.1 passing
TXT-BLOCK-005Every generated-tier block records provenance.model and a substantive provenance.prompt, so agent-drafted prose is attributable.1 passing
TXT-BLOCK-006A block's file name is its id, so a block referenced from an assembly or an evidence page is addressable on disk without a lookup.1 passing
TXT-BIND-001A binding address parses into display, analysis and statistic name, plus the qualifiers group, group2, variable, variable_level, digits and scale.1 passing
TXT-BIND-002A malformed address, an empty component, an unknown qualifier, a non-integer digits or a non-numeric scale raises rather than degrading to a silent empty value.1 passing
TXT-BIND-003A binding resolves only when exactly one ARD row matches; the resolved row is returned alongside the value so the chain back to the ARD is never lost.1 passing
TXT-BIND-004A binding matching more than one ARD row fails as ambiguous, reporting the match count — an under-specified address never silently takes the first row.1 passing
TXT-BIND-005A binding matching no ARD row fails as orphaned, so a regenerated ARD that drops a statistic breaks the build instead of shipping a stale sentence.1 passing
TXT-BIND-006A binding to a display with no ARD at all fails with the display named, rather than rendering an empty string.1 passing
TXT-BIND-007The variable, variable_level and group2 qualifiers select a single row within a hierarchical (SOC/PT) ARD.1 passing
TXT-BIND-008The whole-library gate run aggregates every resolution failure, block by block, instead of stopping at the first.1 passing
TXT-FMT-001Rounding in prose is half-up, not R's half-to-even, so a number in a sentence matches the same number rounded by SAS or by the display layer.1 passing
TXT-FMT-002Integers render with no decimal point; digits fixes the number of decimal places; a null statistic renders as an empty string and a character statistic renders verbatim.1 passing
TXT-FMT-003The scale qualifier converts the ARD's proportion in [0,1] to a percentage for prose without altering the resolved ARD value recorded on the binding.1 passing
TXT-REND-001Rendering substitutes every token in the body and records the character span each substituted value occupies; those spans are the only evidence the numeric-fidelity gate accepts.1 passing
TXT-REND-002An unresolved binding renders as a visible, non-numeric marker and is reported as an error — a stale or guessed number is never substituted in its place.1 passing
TXT-XREF-001{{xref:display:<slug>}} renders the label and number assigned at build time (Table / Listing / Figure), and {{xref:section:<number>}} renders "Section N" or "Appendix N" — so prose never types a 14.x number the assembler owns.1 passing
TXT-XREF-002A cross-reference to a display or section that does not exist fails the build, exactly like an orphaned binding.1 passing
TXT-XREF-003Every cross-reference in the assembled CSR resolves.no test
TXT-NUM-001Prose whose every digit run originates in a resolved binding or cross-reference passes the gate.1 passing
TXT-NUM-002A hand-typed result in prose fails the gate, reporting the block, the offending value and its surrounding context.1 passing
TXT-NUM-003Digits inside inline code and fenced code blocks are exempt.1 passing
TXT-NUM-004Digits inside a markdown link destination are exempt; digits in the link *text* are not, so a link is not a route around the gate.1 passing
TXT-NUM-005The frontmatter allow_digits list exempts the literal strings it names — E3 section numbers, guideline references, analysis thresholds — and the gate reports how many times each exemption was used, so an allowlist is auditable rather than invisible.1 passing
TXT-NUM-006An allow_digits entry exempts only the digit runs it literally covers; a partial match does not exempt the surrounding number.1 passing
TXT-NUM-007The gate reads the *rendered* prose and attributes digits by span, so withholding the spans turns every bound value into a violation — the gate cannot be satisfied by prose that merely looks resolved.1 passing
TXT-NUM-008Every block in the shipped Text Library passes the numeric-fidelity gate against the current ARDs.1 passing
TXT-APPR-001A generated-tier block whose approval state is not approved is excluded from assembly, with the reason recorded.1 passing
TXT-APPR-002An approved generated-tier block is included.1 passing
TXT-APPR-003The exclusion applies to the generated tier only; a non-approved boilerplate or parameterized block is included but flagged, because its content is not model-authored.1 passing
TXT-APPR-004Every excluded block is listed in the gate report, so an exclusion is visible on the evidence pages rather than a silent omission from the document.1 passing
TXT-APPR-005The assembled CSR marks every draft generated block as excluded and reproduces the reason, and no such block is presented as part of the report.no test
TXT-LIB-001A block that binds a display absent from its frontmatter displays list is reported, keeping the declared dependency graph honest for the evidence pages.1 passing
TXT-LIB-002Every binding in the shipped Text Library resolves, and no block carries a structural error.1 passing
TXT-LIB-003A binding that would render more decimal places than a display convention allows is surfaced as a precision warning rather than shipped silently.1 passing
TXT-TRACE-001Every resolved binding in the assembled document carries the ARD row it came from, so a sentence traces to a statistic without a second lookup.no test
TXT-ETH-001ICH E3 sections 5.2 and 5.3 carry approved boilerplate covering GCP and Declaration of Helsinki conformance, ethics committee review, and informed consent including consent by a legally acceptable representative for a cognitively impaired population.3 passing
TXT-DESIGN-001Sections 9.1 and 9.8 describe the design, randomisation, blinding and treatment groups, state the number of patients randomised per group as bound values, and record that no change was made to the planned analyses outside the documented amendments.3 passing
TXT-DISP-001Section 10.1 reports completion and discontinuation by treatment group from the disposition ARD, and states plainly that the analysis dataset records no reason for the majority of discontinuations rather than attributing them.1 pending review
TXT-POP-001Section 11.1 defines the safety analysis set, states its size by treatment group, and records that no efficacy analysis set exists for this study (design D12).2 passing
TXT-DEMO-001Section 11.2 summarises age, sex and race by treatment group from the demographics ARD and notes the generalisability limit that the population's composition implies.2 passing
TXT-EXP-001Section 12.1 reports duration of exposure and the cumulative exposure thresholds by treatment group, and states the exposure imbalance as a caveat on crude adverse event frequencies.2 passing
TXT-AE-001Section 12.2.1 summarises treatment-emergent adverse events overall and by treatment group — any event, related events, maximum severity, serious events and fatal outcomes — with every quantity bound to the AE overview ARD.2 passing
TXT-AE-002Section 12.2.2 describes the system organ class and preferred term pattern in frequency order, identifies the dose gradient where one exists, and does not assert a gradient where the ARD does not show one.1 pending review
TXT-AE-003Section 12.2.4 points to the by-patient adverse event listing and the serious adverse event listing, and records the header and anonymisation requirements that apply to them.2 passing
TXT-SAE-001Section 12.3.1 reports deaths, serious adverse events and severe adverse events by treatment group and states explicitly where the event count is too small to support inference.1 pending review
TXT-CONC-001Section 12.6 ranks the safety findings by importance, separates local tolerability from systemic serious toxicity, states the exposure caveat, and draws no benefit-risk conclusion in the absence of efficacy data.1 pending review
TXT-DISC-001Section 13 integrates disposition, exposure and adverse event findings into one argument and states the limitations — exposure imbalance, missing discontinuation reasons, population composition and the absence of efficacy data — without introducing any fact absent from the referenced ARDs.1 pending review
TXT-REVIEW-001The block list puts draft generated-tier blocks first — the blocks the assembly gate is holding out of the report — then every other block in ICH E3 section order.4 passing
TXT-REVIEW-002Each block is shown as *resolved prose*: every binding replaced by its value from the committed ARD, each value visually distinguished from the writer's words and linked to the binding row it came from. An unresolved binding renders a marker, never a number.5 passing
TXT-REVIEW-003A generated-tier block shows its provenance prominently — model, generation date and the full prompt — beside the prose rather than below the bindings; a human-written block says so explicitly; a generated block with no prompt is called out as unauditable.4 passing
TXT-REVIEW-004Every binding is resolved into a table giving the address, the ARD row it selects (analysis, statistic, group and level) and the value as the sentence shows it — scale and digits included — so a number can be checked without opening another page. A repeated address is one counted row; an unresolved one carries its reason.6 passing
TXT-REVIEW-005Each block links its source file on GitHub, every display it binds, and the display detail page behind each binding row.2 passing
TXT-REVIEW-006Each block shows its tier, its current approval state and its E3 section, and a block excluded from assembly is labelled as blocking.1 passing
TXT-REVIEW-007The view is a status view and nothing else: it emits no button, form, input or script, names no credential, token or API host, and states where approval is recorded and what enforces it — without describing or promising a sign-off workflow.4 passing
TXT-REVIEW-008The view references no external resource, derives its source links from repoUrl when no branch is configured, and renders in full for a repository with no source configuration at all.3 passing
TXT-EDIT-001The editor edits a block's body; its frontmatter is never sent to the browser, and the patch's hunks are offset to the body's position in the file, so no edit made in a browser can change a block's tier, approval state or allow_digits.5 passing
TXT-EDIT-002A draft body resolves its bindings against the committed ARD with the build's own resolver: an orphaned, ambiguous or malformed address reports the build's message verbatim rather than throwing, and cross-references resolve against the published display and section indices so the editor is not stricter than CI.8 passing
TXT-EDIT-003The numeric-fidelity gate runs on the draft as it is typed: a hand-typed result is reported with its value and surrounding context, an allow_digits literal exempts exactly as it does in CI, and replacing the number with a resolving binding clears the gate.4 passing
TXT-EDIT-004An unresolved binding previews as a marker and never as a number — the editor cannot show a value the ARD did not produce.1 passing
TXT-EDIT-005A binding to a display the block does not declare is reported exactly as the whole-library gate run reports it, so the editor cannot show a passing gate for a body that fails the build.2 passing
TXT-EDIT-006An edit produces a unified diff with ---/+++ headers, @@ hunks and three lines of context, marking a missing trailing newline as git does — and git apply accepts it against the real file, leaving the frontmatter byte-for-byte identical.5 passing
TXT-EDIT-007An unchanged body produces no patch at all; a change reports how many lines it adds and removes.6 passing
TXT-EDIT-008Several blocks edited in one visit compose into one patch — a file section per changed block, unchanged blocks omitted — naming each block's real repository path.2 passing
TXT-EDIT-009The pane as shipped, editor mounted, records no approval and reaches no network host: every written block gets an editor seeded with its source, and the complete set of controls is Edit / Copy patch / Download patch / Download one patch for every change / Revert — no form, no credential, no token, no API host.2 passing
TXT-EDIT-010The editor is progressive enhancement: its markup ships hidden and is revealed by the client, and the view rendered without the editor option is the read-only status view TXT-REVIEW-007 describes — no button, textarea, form or script.3 passing
TXT-EDIT-011A binding rendering at full precision surfaces as a warning the writer can act on rather than a failure that blocks the edit.1 passing
TXT-EDIT-012The preview marks every computed value and every fidelity violation in place in the sentence, losslessly — a writer sees which words are theirs and which digit the gate is rejecting without reading a list.3 passing
TXT-VAL-001A values store whose values match their ARD rows passes; one that no longer matches fails and names the value, the stored number and the number the ARD now gives.2 passing
TXT-VAL-002A value whose address resolves to no ARD row, to more than one, or to a display absent from the build is reported rather than silently dropped.2 passing
TXT-VAL-003Derived values are recomputed from their inputs at build time, and a derivation naming a value defined after it is reported.2 passing
TXT-VAL-004Presentation is checked too: a value whose formatted does not match its declared scale and half-up rounding fails.1 passing
TXT-VAL-005A value citing an ARD the repository no longer holds is reported; a store with an unknown schema is refused; a repository with no store is not a failure.3 passing
TXT-VAL-006A {{value:id}} token renders the stored value, is span-tracked so the numeric-fidelity gate accepts its digits, and fails the build when the id is unknown.1 pending review
TXT-VAL-007The store knows which text blocks cite each value, so "what breaks if this changes" is answerable before it changes.1 passing
TXT-VAL-008The committed store is in the agreed schema and every value in it cites an ARD file that exists with a matching hash.2 passing
TXT-EDIT-013Each editable block in the reading view carries a keyboard-reachable Edit button with aria-expanded and aria-controls, and an empty drawer for the editor to be moved into — the Reader renders no second editor.2 passing
TXT-EDIT-014The affordance appears only where an editor exists to adopt: never on the standalone reader page, and never on a block the approval gate holds out of the report.3 passing
TXT-EDIT-015The drawer and the editor's home marker share one id convention, derived from the block id, so the editor can always be put back where it came from.1 passing
TXT-EDIT-016A draft renders in the reading view as the document renders — computed values and fidelity violations marked in the sentence — but without the trace hooks that would claim it is part of the committed report.3 passing
TXT-EDIT-017The block states which it is showing: the committed report, an editor open on unchanged prose, an unsaved draft, or an unsaved draft that fails the gates.2 passing
TXT-EDIT-018The reading view moves the one editor rather than creating another, restores the document's own committed HTML when the drawer closes, and writes, posts and stores nothing.3 passing

Test records

ResultSuiteTestRequirementsFile
passjs-unitbinding a value from prose TXT-VAL-006: a {{value:id}} token renders the stored value and is span-tracked (#1)TXT-VAL-006tests/unit/values-store.test.js
passjs-unitbinding a value from prose TXT-VAL-006: an unknown value id fails the build rather than rendering blank (#1)TXT-VAL-006tests/unit/values-store.test.js
passjs-unitbinding a value from prose TXT-VAL-006: value bindings are counted per block alongside ARD bindings (#1)TXT-VAL-006tests/unit/values-store.test.js
passjs-unitbinding a value from prose TXT-VAL-007: the store knows which blocks bind each value (#1)TXT-VAL-007tests/unit/values-store.test.js
passjs-unitBinding addresses TXT-BIND-001: parseBindingAddress splits display, analysis, statistic and qualifiers (#1)TXT-BIND-001tests/unit/text-bindings.test.js
passjs-unitBinding addresses TXT-BIND-002: a malformed address or an unknown qualifier is rejected rather than silently ignored (#1)TXT-BIND-002tests/unit/text-bindings.test.js
passjs-unitBinding addresses TXT-BIND-003: a fully qualified binding resolves to exactly one ARD row (#1)TXT-BIND-003tests/unit/text-bindings.test.js
passjs-unitBinding addresses TXT-BIND-004: an under-specified binding that matches several rows fails as ambiguous (#1)TXT-BIND-004tests/unit/text-bindings.test.js
passjs-unitBinding addresses TXT-BIND-005: a binding no ARD row satisfies fails loudly as orphaned (#1)TXT-BIND-005tests/unit/text-bindings.test.js
passjs-unitBinding addresses TXT-BIND-006: a binding to a display with no ARD fails instead of rendering an empty string (#1)TXT-BIND-006tests/unit/text-bindings.test.js
passjs-unitBinding addresses TXT-BIND-007: variable, variable_level and group2 qualifiers select within a hierarchical ARD (#1)TXT-BIND-007tests/unit/text-bindings.test.js
passjs-unitGate: approval TXT-APPR-001: a draft generated-tier block is excluded from assembly and the reason is reported (#1)TXT-APPR-001tests/unit/text-gates.test.js
passjs-unitGate: approval TXT-APPR-002: an approved generated-tier block is included (#1)TXT-APPR-002tests/unit/text-gates.test.js
passjs-unitGate: approval TXT-APPR-003: the gate applies to the generated tier only; boilerplate is not tier-gated (#1)TXT-APPR-003tests/unit/text-gates.test.js
passjs-unitGate: approval TXT-APPR-004: runGates lists every excluded block so the exclusion is visible, not silent (#1)TXT-APPR-004tests/unit/text-gates.test.js
passjs-unitGate: binding resolution across the library TXT-BIND-008: runGates reports an orphaned and an ambiguous binding as resolution errors (#1)TXT-BIND-008tests/unit/text-gates.test.js
passjs-unitGate: binding resolution across the library TXT-LIB-001: a block that binds a display it does not declare is reported (#1)TXT-LIB-001tests/unit/text-gates.test.js
passjs-unitGate: binding resolution across the library TXT-LIB-002: every binding in the shipped Text Library resolves against the fixture ARDs (#1)TXT-LIB-002tests/unit/text-gates.test.js
passjs-unitGate: binding resolution across the library TXT-LIB-003: full-precision values without a digits qualifier are surfaced as a warning (#1)TXT-LIB-003tests/unit/text-gates.test.js
passjs-unitGate: numeric fidelity TXT-NUM-001: prose whose every digit came from a binding passes the gate (#1)TXT-NUM-001tests/unit/text-gates.test.js
passjs-unitGate: numeric fidelity TXT-NUM-002: a hand-typed result in prose is caught, with its value and surrounding context (#1)TXT-NUM-002tests/unit/text-gates.test.js
passjs-unitGate: numeric fidelity TXT-NUM-003, TXT-NUM-004: digits inside inline code and inside a link destination are exempt (#1)TXT-NUM-003 TXT-NUM-004tests/unit/text-gates.test.js
passjs-unitGate: numeric fidelity TXT-NUM-005: allow_digits exempts only the literals it lists, and reports how often each was used (#1)TXT-NUM-005tests/unit/text-gates.test.js
passjs-unitGate: numeric fidelity TXT-NUM-006: allow_digits does not exempt a digit run it does not literally cover (#1)TXT-NUM-006tests/unit/text-gates.test.js
passjs-unitGate: numeric fidelity TXT-NUM-007: the gate reads the RENDERED prose, so a binding that resolves to a digit run is never a violation (#1)TXT-NUM-007tests/unit/text-gates.test.js
passjs-unitGate: numeric fidelity TXT-NUM-008: every block in the shipped Text Library passes the numeric-fidelity gate (#1)TXT-NUM-008tests/unit/text-gates.test.js
passjs-unithiding actually hides TXT-EDIT-010: no class the editor hides is forced visible by a display rule (#113)TXT-EDIT-010tests/unit/text-editor.test.js
passjs-unitline diffing TXT-EDIT-007: a changed line reads as one removal and one addition (#113)TXT-EDIT-007tests/unit/text-editor.test.js
passjs-unitline diffing TXT-EDIT-007: identical text produces no changed lines at all (#113)TXT-EDIT-007tests/unit/text-editor.test.js
passjs-unitline diffing TXT-EDIT-007: unchanged lines around an insertion stay context, not churn (#113)TXT-EDIT-007tests/unit/text-editor.test.js
passjs-unitlive binding resolution TXT-EDIT-002: a draft body resolves its bindings against the committed ARD (#113)TXT-EDIT-002tests/unit/text-editor.test.js
passjs-unitlive binding resolution TXT-EDIT-002: a malformed address is reported, not thrown, so typing never breaks the editor (#113)TXT-EDIT-002tests/unit/text-editor.test.js
passjs-unitlive binding resolution TXT-EDIT-002: an ambiguous address reports its match count rather than taking a row (#113)TXT-EDIT-002tests/unit/text-editor.test.js
passjs-unitlive binding resolution TXT-EDIT-002: an orphaned binding reports the build message verbatim (#113)TXT-EDIT-002tests/unit/text-editor.test.js
passjs-unitlive binding resolution TXT-EDIT-004: an unresolved binding previews as a marker, never as a number (#113)TXT-EDIT-004tests/unit/text-editor.test.js
passjs-unitlive binding resolution TXT-EDIT-005: binding a display the block does not declare is reported as the build reports it (#113)TXT-EDIT-005tests/unit/text-editor.test.js
passjs-unitlive binding resolution TXT-EDIT-005: declaring the display in the block clears the report (#113)TXT-EDIT-005tests/unit/text-editor.test.js
passjs-unitprovenance TXT-REVIEW-003: a generated block shows its model, generation date and the full prompt (#2)TXT-REVIEW-003tests/unit/text-status.test.js
passjs-unitprovenance TXT-REVIEW-003: a generated block with no recorded prompt is called out as unauditable (#2)TXT-REVIEW-003tests/unit/text-status.test.js
passjs-unitprovenance TXT-REVIEW-003: a human-written block says so rather than showing an empty provenance box (#2)TXT-REVIEW-003tests/unit/text-status.test.js
passjs-unitprovenance TXT-REVIEW-003: provenance sits beside the prose, not below the fold (#2)TXT-REVIEW-003tests/unit/text-status.test.js
passjs-unitRendering and cross-references TXT-REND-001: renderBlock substitutes every token and records the span each value occupies (#1)TXT-REND-001tests/unit/text-bindings.test.js
passjs-unitRendering and cross-references TXT-REND-002: an unresolved binding leaves a visible marker and is reported as an error (#1)TXT-REND-002tests/unit/text-bindings.test.js
passjs-unitRendering and cross-references TXT-XREF-001: display cross-references render the number assigned at build time (#1)TXT-XREF-001tests/unit/text-bindings.test.js
passjs-unitRendering and cross-references TXT-XREF-002: a cross-reference to an unknown display or section fails the build (#1)TXT-XREF-002tests/unit/text-bindings.test.js
passjs-unitresolved prose TXT-REVIEW-002: a cross-reference degrades to readable text outside the assembled document (#2)TXT-REVIEW-002tests/unit/text-status.test.js
passjs-unitresolved prose TXT-REVIEW-002: an unresolved binding shows a marker, never a number (#2)TXT-REVIEW-002tests/unit/text-status.test.js
passjs-unitresolved prose TXT-REVIEW-002: computed values are marked and linked to the binding row they came from (#2)TXT-REVIEW-002tests/unit/text-status.test.js
passjs-unitresolved prose TXT-REVIEW-002: every binding is replaced by its real value from the committed ARD (#2)TXT-REVIEW-002tests/unit/text-status.test.js
passjs-unitresolved prose TXT-REVIEW-002: the writer’s own words are left untouched around the values (#2)TXT-REVIEW-002tests/unit/text-status.test.js
passjs-unitText Library block parsing TXT-AE-001, TXT-AE-002, TXT-AE-003, TXT-SAE-001, TXT-CONC-001, TXT-DISC-001: the safety narrative sections ship blocks whose tier matches their evidentiary risk (#1)TXT-AE-001 TXT-AE-002 TXT-AE-003 TXT-SAE-001 TXT-CONC-001 TXT-DISC-001tests/unit/text-blocks.test.js
passjs-unitText Library block parsing TXT-BLOCK-001: parseBlock splits frontmatter from prose and keeps every declared field (#1)TXT-BLOCK-001tests/unit/text-blocks.test.js
passjs-unitText Library block parsing TXT-BLOCK-002: validateBlock rejects an unknown tier, an unknown approval state and a generated block with no provenance (#1)TXT-BLOCK-002tests/unit/text-blocks.test.js
passjs-unitText Library block parsing TXT-BLOCK-003: the shipped library loads with unique ids and no structural errors (#1)TXT-BLOCK-003tests/unit/text-blocks.test.js
passjs-unitText Library block parsing TXT-BLOCK-004: every library block uses all three reuse tiers and carries requirement ids (#1)TXT-BLOCK-004tests/unit/text-blocks.test.js
passjs-unitText Library block parsing TXT-BLOCK-005: every generated-tier block records the model and prompt that produced it (#1)TXT-BLOCK-005tests/unit/text-blocks.test.js
passjs-unitText Library block parsing TXT-BLOCK-006: block file names match the block id so the library is addressable from disk (#1)TXT-BLOCK-006tests/unit/text-blocks.test.js
passjs-unitText Library block parsing TXT-ETH-001, TXT-DESIGN-001, TXT-DISP-001, TXT-POP-001, TXT-DEMO-001, TXT-EXP-001: the study-conduct narrative sections each ship an approved block (#1)TXT-ETH-001 TXT-DESIGN-001 TXT-DISP-001 TXT-POP-001 TXT-DEMO-001 TXT-EXP-001tests/unit/text-blocks.test.js
passjs-unitthe binding table TXT-REVIEW-004: a block with no bindings says so instead of rendering an empty table (#2)TXT-REVIEW-004tests/unit/text-status.test.js
passjs-unitthe binding table TXT-REVIEW-004: a repeated address is one row, counted, not duplicated (#2)TXT-REVIEW-004tests/unit/text-status.test.js
passjs-unitthe binding table TXT-REVIEW-004: an unresolved binding is shown with the reason, in place of a value (#2)TXT-REVIEW-004tests/unit/text-status.test.js
passjs-unitthe binding table TXT-REVIEW-004: one row per address, carrying the ARD row it selects and the value (#2)TXT-REVIEW-004tests/unit/text-status.test.js
passjs-unitthe binding table TXT-REVIEW-004: the ARD row is described by its group and level, not just its index (#2)TXT-REVIEW-004tests/unit/text-status.test.js
passjs-unitthe binding table TXT-REVIEW-004: the table value is the value the sentence shows, scale and digits included (#2)TXT-REVIEW-004tests/unit/text-status.test.js
passjs-unitthe block header TXT-REVIEW-005: every binding row links the display detail page it reads from (#2)TXT-REVIEW-005tests/unit/text-status.test.js
passjs-unitthe block header TXT-REVIEW-005: the card links the block source and every display it binds (#2)TXT-REVIEW-005tests/unit/text-status.test.js
passjs-unitthe block header TXT-REVIEW-006: tier, approval state and E3 section are on every card (#2)TXT-REVIEW-006tests/unit/text-status.test.js
passjs-unitthe block queue TXT-REVIEW-001: draft generated blocks come first — they are the ones blocking assembly (#2)TXT-REVIEW-001tests/unit/text-status.test.js
passjs-unitthe block queue TXT-REVIEW-001: only unapproved generated blocks need judgment (#2)TXT-REVIEW-001tests/unit/text-status.test.js
passjs-unitthe block queue TXT-REVIEW-001: the shipped library really does have blocks held out of the report (#2)TXT-REVIEW-001tests/unit/text-status.test.js
passjs-unitthe block queue TXT-REVIEW-001: within a group, blocks follow ICH E3 section order, not file order (#2)TXT-REVIEW-001tests/unit/text-status.test.js
passjs-unitthe committed store TXT-VAL-008: every committed value cites an ARD file that exists, with a matching hash (#1)TXT-VAL-008tests/unit/values-store.test.js
passjs-unitthe committed store TXT-VAL-008: the repository ships a values store in the agreed schema (#1)TXT-VAL-008tests/unit/values-store.test.js
passjs-unitthe edited region TXT-EDIT-001: a body edit rewrites the body and leaves the frontmatter byte-for-byte (#113)TXT-EDIT-001tests/unit/text-editor.test.js
passjs-unitthe edited region TXT-EDIT-001: a file with no frontmatter is all body, and round-trips unchanged (#113)TXT-EDIT-001tests/unit/text-editor.test.js
passjs-unitthe edited region TXT-EDIT-001: the editor splits a block into its frontmatter and its body (#113)TXT-EDIT-001tests/unit/text-editor.test.js
passjs-unitthe editor as rendered into the Text pane TXT-EDIT-001: each editor carries its body start line, never its frontmatter (#113)TXT-EDIT-001tests/unit/text-editor.test.js
passjs-unitthe editor as rendered into the Text pane TXT-EDIT-002: each editor declares the ARDs its block binds, so the browser fetches those (#113)TXT-EDIT-002tests/unit/text-editor.test.js
passjs-unitthe editor as rendered into the Text pane TXT-EDIT-009: every written block in the library gets an editor, seeded with its source (#113)TXT-EDIT-009tests/unit/text-editor.test.js
passjs-unitthe editor as rendered into the Text pane TXT-EDIT-009: the editor records approval nowhere and reaches no network host (#113)TXT-EDIT-009tests/unit/text-editor.test.js
passjs-unitthe editor as rendered into the Text pane TXT-EDIT-010: the editor ships hidden, so the pane without JavaScript is the status view (#113)TXT-EDIT-010tests/unit/text-editor.test.js
passjs-unitthe editor as rendered into the Text pane TXT-EDIT-010: without the editor option the view renders exactly what it always did (#113)TXT-EDIT-010tests/unit/text-editor.test.js
passjs-unitthe live preview TXT-EDIT-012: a fidelity violation is marked in the sentence, not just listed (#113)TXT-EDIT-012tests/unit/text-editor.test.js
passjs-unitthe live preview TXT-EDIT-012: computed values are marked in place, the writer’s words are not (#113)TXT-EDIT-012tests/unit/text-editor.test.js
passjs-unitthe live preview TXT-EDIT-012: segmenting is lossless — the preview says exactly what the gate read (#113)TXT-EDIT-012tests/unit/text-editor.test.js
passjs-unitthe numeric-fidelity gate, as you type TXT-EDIT-003: a hand-typed result is a violation carrying its value and context (#113)TXT-EDIT-003tests/unit/text-editor.test.js
passjs-unitthe numeric-fidelity gate, as you type TXT-EDIT-003: an allow_digits literal from the frontmatter still exempts as it does in CI (#113)TXT-EDIT-003tests/unit/text-editor.test.js
passjs-unitthe numeric-fidelity gate, as you type TXT-EDIT-003: replacing the typed number with a resolving binding clears the gate (#113)TXT-EDIT-003tests/unit/text-editor.test.js
passjs-unitthe numeric-fidelity gate, as you type TXT-EDIT-003: the gate reads the rendered prose, so a substituted value is not a violation (#113)TXT-EDIT-003tests/unit/text-editor.test.js
passjs-unitthe numeric-fidelity gate, as you type TXT-EDIT-011: full-precision output is a warning the writer can see, not a failure (#113)TXT-EDIT-011tests/unit/text-editor.test.js
passjs-unitthe patch TXT-EDIT-001: the patch diffs the body region and offsets its hunks past the frontmatter (#113)TXT-EDIT-001tests/unit/text-editor.test.js
passjs-unitthe patch TXT-EDIT-006: a patch of a file with no trailing newline says so, as git does (#113)TXT-EDIT-006tests/unit/text-editor.test.js
passjs-unitthe patch TXT-EDIT-006: an edit produces a unified diff with git headers and hunks (#113)TXT-EDIT-006tests/unit/text-editor.test.js
passjs-unitthe patch TXT-EDIT-006: git applies the patch for every shape of edit a writer can make (#113)TXT-EDIT-006tests/unit/text-editor.test.js
passjs-unitthe patch TXT-EDIT-006: the diff carries three lines of context on each side of a hunk (#113)TXT-EDIT-006tests/unit/text-editor.test.js
passjs-unitthe patch TXT-EDIT-006: the patch is one git apply accepts against the real file (#113)TXT-EDIT-006tests/unit/text-editor.test.js
passjs-unitthe patch TXT-EDIT-007: an unchanged body produces no patch at all (#113)TXT-EDIT-007tests/unit/text-editor.test.js
passjs-unitthe patch TXT-EDIT-007: dropping the file’s final newline is a change, not an empty patch (#113)TXT-EDIT-007tests/unit/text-editor.test.js
passjs-unitthe patch TXT-EDIT-007: the patch reports how many lines it adds and removes (#113)TXT-EDIT-007tests/unit/text-editor.test.js
passjs-unitthe patch TXT-EDIT-008: a patch over several blocks is one file section per changed block (#113)TXT-EDIT-008tests/unit/text-editor.test.js
passjs-unitthe patch TXT-EDIT-008: the patch names the block’s real repository path (#113)TXT-EDIT-008tests/unit/text-editor.test.js
passjs-unitthe published ARD payload TXT-EDIT-002: a binding resolves identically against the payload and the ARD on disk (#113)TXT-EDIT-002tests/unit/text-editor.test.js
passjs-unitthe published ARD payload TXT-EDIT-002: the payload drops the columns resolution never reads (#113)TXT-EDIT-002tests/unit/text-editor.test.js
passjs-unitthe published ARD payload TXT-EDIT-002: the payload keeps every row, so the browser counts matches as CI does (#113)TXT-EDIT-002tests/unit/text-editor.test.js
passjs-unitthe surface is a status view, not a form TXT-REVIEW-007: nothing on the view offers to take, store or send a credential (#2)TXT-REVIEW-007tests/unit/text-status.test.js
passjs-unitthe surface is a status view, not a form TXT-REVIEW-007: the view carries no control a visitor could act on (#2)TXT-REVIEW-007tests/unit/text-status.test.js
passjs-unitthe surface is a status view, not a form TXT-REVIEW-007: the view says where approval lives and what enforces it (#2)TXT-REVIEW-007tests/unit/text-status.test.js
passjs-unitthe surface is a status view, not a form TXT-REVIEW-007: the whole library is readable — prose, provenance and bindings (#2)TXT-REVIEW-007tests/unit/text-status.test.js
passjs-unitthe values store TXT-VAL-001: a store whose values match their ARD rows passes the gate (#1)TXT-VAL-001tests/unit/values-store.test.js
passjs-unitthe values store TXT-VAL-001: a value that no longer matches its ARD row fails like a stale number (#1)TXT-VAL-001tests/unit/values-store.test.js
passjs-unitthe values store TXT-VAL-002: a value citing a display with no ARD in the build is reported (#1)TXT-VAL-002tests/unit/values-store.test.js
passjs-unitthe values store TXT-VAL-002: an orphaned or ambiguous address is reported, not silently dropped (#1)TXT-VAL-002tests/unit/values-store.test.js
passjs-unitthe values store TXT-VAL-003: a derivation naming a value defined after it is reported (#1)TXT-VAL-003tests/unit/values-store.test.js
passjs-unitthe values store TXT-VAL-003: a derived value is recomputed from its inputs, and drift fails (#1)TXT-VAL-003tests/unit/values-store.test.js
passjs-unitthe values store TXT-VAL-004: presentation is checked too — a mis-formatted value fails (#1)TXT-VAL-004tests/unit/values-store.test.js
passjs-unitthe values store TXT-VAL-005: a store with the wrong schema is refused outright (#1)TXT-VAL-005tests/unit/values-store.test.js
passjs-unitthe values store TXT-VAL-005: a value citing an ARD the repository no longer holds is reported (#1)TXT-VAL-005tests/unit/values-store.test.js
passjs-unitthe values store TXT-VAL-005: no store at all is not a failure — it is a repository without values (#1)TXT-VAL-005tests/unit/values-store.test.js
passjs-unitthe view as built TXT-REVIEW-008: no external resource is referenced anywhere on the view (#2)TXT-REVIEW-008tests/unit/text-status.test.js
passjs-unitthe view as built TXT-REVIEW-008: source links are derived from repoUrl when no branch is configured (#2)TXT-REVIEW-008tests/unit/text-status.test.js
passjs-unitthe view as built TXT-REVIEW-008: the fixture repo — no source configuration — still renders in full (#2)TXT-REVIEW-008tests/unit/text-status.test.js
passjs-unitthe wiring the reading view depends on TXT-EDIT-018: closing the drawer restores the committed rendering (#15)TXT-EDIT-018tests/unit/reader-editor.test.js
passjs-unitthe wiring the reading view depends on TXT-EDIT-018: the Reader moves the one editor rather than creating another (#15)TXT-EDIT-018tests/unit/reader-editor.test.js
passjs-unitthe wiring the reading view depends on TXT-EDIT-018: the Reader writes nothing and posts nowhere (#15)TXT-EDIT-018tests/unit/reader-editor.test.js
passjs-unitValue formatting TXT-FMT-001: rounding is half-up, not R half-to-even (#1)TXT-FMT-001tests/unit/text-bindings.test.js
passjs-unitValue formatting TXT-FMT-002: integers render without a decimal point and digits fixes the decimal places (#1)TXT-FMT-002tests/unit/text-bindings.test.js
passjs-unitValue formatting TXT-FMT-003: the scale qualifier converts the ARD proportion to a percentage for prose (#1)TXT-FMT-003tests/unit/text-bindings.test.js
passjs-unitwhat a draft looks like in the reading view TXT-EDIT-016: a computed value is marked in the prose, as the document marks it (#15)TXT-EDIT-016tests/unit/reader-editor.test.js
passjs-unitwhat a draft looks like in the reading view TXT-EDIT-016: a number that came from no binding is marked as the failure it is (#15)TXT-EDIT-016tests/unit/reader-editor.test.js
passjs-unitwhat a draft looks like in the reading view TXT-EDIT-016: paragraphs survive, and the escaper is the caller's (#15)TXT-EDIT-016tests/unit/reader-editor.test.js
passjs-unitwhat a draft looks like in the reading view TXT-EDIT-017: an untouched block claims nothing at all (#15)TXT-EDIT-017tests/unit/reader-editor.test.js
passjs-unitwhat a draft looks like in the reading view TXT-EDIT-017: the block always says whether it is showing the report or a draft (#15)TXT-EDIT-017tests/unit/reader-editor.test.js
passjs-unitwhere the reading view offers to edit TXT-EDIT-013: a block with an editor gets an affordance and a drawer bound to it (#15)TXT-EDIT-013tests/unit/reader-editor.test.js
passjs-unitwhere the reading view offers to edit TXT-EDIT-013: the drawer ships empty — the Reader renders no second editor (#15)TXT-EDIT-013tests/unit/reader-editor.test.js
passjs-unitwhere the reading view offers to edit TXT-EDIT-014: a block held out of the report is not editable from the report (#15)TXT-EDIT-014tests/unit/reader-editor.test.js
passjs-unitwhere the reading view offers to edit TXT-EDIT-014: the editable rule is one function, and it says why (#15)TXT-EDIT-014tests/unit/reader-editor.test.js
passjs-unitwhere the reading view offers to edit TXT-EDIT-014: with no editors mounted the Reader renders exactly as before (#15)TXT-EDIT-014tests/unit/reader-editor.test.js
passjs-unitwhere the reading view offers to edit TXT-EDIT-015: drawer and home ids are derived, never authored, and collision-free (#15)TXT-EDIT-015tests/unit/reader-editor.test.js
passr-unitDSP-ALL-001: every display renders a table that actually contains numbers (#1)DSP-ALL-001test-displays.R
passr-unitDSP-ALL-002: every display declares a regulatory identifier and a source line (#1)DSP-ALL-002test-displays.R
passtext-reviewTXT-AE-001: TXT-E3-1221 parameterized block reviewed by @jwildfire on 2026-07-25 (#1)TXT-AE-001library/text/TXT-E3-1221.md
failtext-reviewTXT-AE-002: TXT-E3-1222 generated block reviewed (#1)TXT-AE-002library/text/TXT-E3-1222.md
passtext-reviewTXT-AE-003: TXT-E3-1224 boilerplate block reviewed by @jwildfire on 2026-07-25 (#1)TXT-AE-003library/text/TXT-E3-1224.md
failtext-reviewTXT-CONC-001: TXT-E3-1206 generated block reviewed (#1)TXT-CONC-001library/text/TXT-E3-1206.md
passtext-reviewTXT-DEMO-001: TXT-E3-1102 parameterized block reviewed by @jwildfire on 2026-07-25 (#1)TXT-DEMO-001library/text/TXT-E3-1102.md
passtext-reviewTXT-DESIGN-001: TXT-E3-0901 parameterized block reviewed by @jwildfire on 2026-07-25 (#1)TXT-DESIGN-001library/text/TXT-E3-0901.md
passtext-reviewTXT-DESIGN-001: TXT-E3-0908 boilerplate block reviewed by @jwildfire on 2026-07-25 (#1)TXT-DESIGN-001library/text/TXT-E3-0908.md
failtext-reviewTXT-DISC-001: TXT-E3-1300 generated block reviewed (#1)TXT-DISC-001library/text/TXT-E3-1300.md
failtext-reviewTXT-DISP-001, TXT-VAL-006: TXT-E3-1002 generated block reviewed (#1)TXT-DISP-001 TXT-VAL-006library/text/TXT-E3-1002.md
passtext-reviewTXT-DISP-001: TXT-E3-1001 parameterized block reviewed by @jwildfire on 2026-07-25 (#1)TXT-DISP-001library/text/TXT-E3-1001.md
passtext-reviewTXT-ETH-001: TXT-E3-0502 boilerplate block reviewed by @jwildfire on 2026-07-25 (#1)TXT-ETH-001library/text/TXT-E3-0502.md
passtext-reviewTXT-ETH-001: TXT-E3-0503 boilerplate block reviewed by @jwildfire on 2026-07-25 (#1)TXT-ETH-001library/text/TXT-E3-0503.md
passtext-reviewTXT-EXP-001: TXT-E3-1201 parameterized block reviewed by @jwildfire on 2026-07-25 (#1)TXT-EXP-001library/text/TXT-E3-1201.md
passtext-reviewTXT-POP-001: TXT-E3-1101 parameterized block reviewed by @jwildfire on 2026-07-25 (#1)TXT-POP-001library/text/TXT-E3-1101.md
failtext-reviewTXT-SAE-001: TXT-E3-1231 generated block reviewed (#1)TXT-SAE-001library/text/TXT-E3-1231.md

Traceability

No generated output yet, so the data → ARD → display chain is empty.

Provenance

Generated
2026-07-27T04:44:02.378Z
Environment
os Darwin 23.6.0 · node v24.14.0 · vitest 2.1.9 · r 4.3.3
CI run
Not recorded for this evidence set