dev.idiolect.correction

A signed record of a post-translation edit. Corrections are the primary signal an observer uses to detect lens quality issues; the reason taxonomy decouples "lens was wrong" from "the world is complicated".

Source: lexicons/dev/idiolect/correction.json · Rust: idiolect_records::Correction · TS: @idiolect-dev/schema/correction · Fixture: idiolect_records::examples::correction

Shape

FieldTypeRequiredNotes
encounterencounterRefyesThe encounter whose output was edited.
pathstring (≤1024)yesJSON Pointer or equivalent into the produced output.
originalValueunknownnoValue prior to correction. May be elided for visibility reasons.
correctedValueunknownnoValue after correction.
reasonopen enumyeslens-error / domain-difference / source-error / downstream-idiosyncrasy / user-mistake / retrospective.
reasonVocabvocabRefnoVocab the reason slug resolves against.
rationalestring (≤2000 graphemes)noHuman-readable justification.
holderdidnoParty the correction is attributed to.
basisbasisnoStructured grounding for third-party attribution.
visibilityvisibilityyesVisibility scope.
occurredAtdatetimeyesWhen the correction was made.

Field details

Why a reason taxonomy

Aggregating corrections naively gives the wrong signal: a lens that produces correct output for half its inputs and domain-different output for the other half is not a buggy lens. The reason taxonomy distinguishes:

SlugWhat it meansImplication for the lens
lens-errorThe lens produced wrong output for the input.Bug in the lens.
domain-differenceThe lens output is correct under one set of conventions; the consumer wants a different set.Not a bug; a different community translation.
source-errorThe source record was wrong; the lens propagated the error faithfully.Not a bug; upstream issue.
downstream-idiosyncrasyThe downstream consumer has an unusual requirement the lens does not target.Not a bug; consumer-specific.
user-mistakeThe user invoked the wrong lens.Not a bug; routing issue.
retrospectiveA delayed finding caused by something other than the above; usually escalates to a dev.idiolect.retrospection.Possibly a bug; investigation pending.

Observers fold corrections by reason. A high lens-error rate is signal; a high domain-difference rate is a community disagreement. Conflating them is the failure mode the taxonomy exists to prevent.

path

JSON Pointer (RFC 6901) into the produced output. A path of /body/text identifies the text field under body. Multi-part paths are supported up to 1024 bytes. Consumers replaying corrections apply the edit at the named path.

originalValue may be elided

When the encounter's visibility restricts publishing source data, the correction may carry only correctedValue and a narrative rationale. A consumer that trusts the corrector can use the corrected value verbatim; one that wants to verify the correction needs to fetch the source separately.

Holder versus the repo owner

Most corrections are first-party: the consumer that received the output is the same as the consumer that edited it. Some are third-party: a reviewer transcribing an off-network correction. holder plus basis carry the third-party attribution machinery, identical to encounter and belief.

Example

{
  "$type": "dev.idiolect.correction",
  "encounter": {
    "uri": "at://did:plc:user/dev.idiolect.encounter/3l5",
    "cid": "bafy..."
  },
  "path": "/body/text",
  "originalValue": "the quick brown foxes",
  "correctedValue": "the quick brown fox",
  "reason": "lens-error",
  "rationale": "Lens incorrectly pluralised the singular noun.",
  "visibility": "public-detailed",
  "occurredAt": "2026-04-19T00:00:00.000Z"
}

How corrections feed observation

flowchart LR
    ENC[encounter] -->|downstreamResult: corrected| COR[correction]
    COR -->|fold by reason| OBS[observation]
    OBS -.consumed by.-> CON[consumer]
    CON -->|decides| INVOKE[whether to invoke]

A high lens-error count in observations is a signal. A high domain-difference count is just a record of community disagreement. Consumers reading observations make routing decisions on the former, not the latter; observers therefore must publish the breakdown by reason, not just a flat correction count.

Concept references