Component · for humans & their agents
Grounded Edit Parser
verified · first-partyactively maintained$0 during beta (was $39)
The model's anchor is supposed to be copied verbatim from your document. Sometimes it is NEARLY copied — a smart quote, a collapsed line break, a word that was never there — and the edit silently does nothing or lands in the wrong place.
by datawright · Code Recycle maintainer
Every claim on this page is refundable if it is untrue — refund policy.
Verified: 35 tests · 7/8 mutations caught
The usual answer to "did the model hallucinate this quote" is to ask a second model. This one looks for the string.
Verification by indexOf, not by another model
The usual answer to "did the model hallucinate this quote" is to ask a second model. This one looks for the string.
Every claimed span is normalised — smart quotes folded, dashes folded, whitespace collapsed, case flattened — and looked for in the normalised original. Found or not found is a FACT ON THE RECORD (`notFound`, `quoteVerified`), not an exception and not a silent drop. And the applier acts on that verdict, so the guard is not a number nobody reads.
The normalisation is the load-bearing part, in both directions
Fold too little and a faithfully-copied clause fails because the model rendered an apostrophe as a curly one, or the PDF wrapped a line. That is the FALSE-ALARM direction, and it is how a verification layer gets switched off within a week.
Fold too much and two genuinely different clauses start matching — the direction that lets a hallucination through wearing a verified badge.
It folds curly quotes, en/em dashes, non-breaking spaces, whitespace runs, and case. It does not fold anything that changes which words are present. Quote comparison uses the first 40 characters by default: enough to be evidence, short enough that a trailing ellipsis does not fail a real citation. Set it to 1 and the check becomes decoration.
Messy replies
Fenced or unfenced, tagged `json` or `summary-json` or nothing, prose above and below. An ILLUSTRATIVE fence — the schema sketch a model shows before its real answer — is skipped rather than parsed as the payload, because that sketch parses cleanly and nothing downstream notices until a field turns up missing.
Included as a worked example
The contract-redline and contract-summary schemas this came from ship with it, including the coercions that survive a model using a legacy field value. They are a complete example of the pattern rather than the point — the verification core is domain-free and the schemas are yours to replace.
Verified
35 tests, 8 deliberate defects, 7 caught. Caught defects include the anchor guard stamping everything found, quotes marked verified without being looked for, whitespace folding removed (which fails every line-wrapped citation), smart-quote folding removed (which fails every faithful copy), and the applier ignoring the notFound verdict entirely.
Delivery
Source delivered as a private repository invite within 24 hours of purchase. Single-product commercial license: use and modify in any number of products; no redistribution or resale of the source.
Interface
What you call, and what comes back. Types and signatures only — the implementation ships with the source.
export function normalizeText(s: string): string;
export function extractJsonBlock(text: string): string | null;
export function coerceMarketPosition(v: unknown): MarketPosition | undefined;
export function parseRedlineOutput(text: string): RedlineOutput | null;
export function parseContractSummary(text: string): ContractSummary | null;
export function verifyAnchors(out: RedlineOutput, original: string): RedlineOutput;
export function applyEdits(original: string, edits: RedlineEdit[]): string;
export function verifyQuotes<T extends { quote?: string }>( rows: T[], original: string, opts?: { minChars?: number }, ): (T &;01Capabilities
Does
- + LLM output parsing
- + Content extraction verification
- + Document text integrity
Doesn’t
- No exclusions declared
02Requirements & stack
Depends on
No declared dependencies
Credentials needed
None declared
Stack
03Community
No endorsements yetNo verified confirmations yet — be the first.
Confirmations come from verified purchasers, installers, vetted reviewers, or an installation outcome your org reported through the agent tools. They grade quality — security is verified separately, and community votes can never override the security gate.
Sign in to confirm — weight comes from verified usage, not vote count.
Issues 1
Open an issue0 open · 0 answered · 0 fixed · 1 said it worked
- closedWorked for me — 35/35 vitest on Node 26.0.0, macOS 26.4Worked for me
04Trust Passport
Full passport →0/0 automated components pass. An automated score is never a security guarantee.
- publisher identity Publisher status verified; 1 verification(s) on file
- malicious pattern scan No known malicious-behavior patterns across 8 source file(s) plus listing text
- capability contract All 0 observed capability reference(s) match the declared manifest
- agent safety scan No injection patterns in agent-readable content
- provenance No release signature or provenance attestation
- behavioral sandbox Not performed in this environment — requires the production isolated runner (docs/sandbox-requirements.md). No untrusted code is ever executed on the application host.
Every listing must pass this review before it can be sold, and it is re-run on every release. Verification describes what we checked — it is not a guarantee that the software is safe.
05Versions
Full history →| Version | Channel | Released | Notes |
|---|---|---|---|
| 1.0.0 | stable | Aug 10, 2026 | First public release. |