Nominate suspicious printed spelling/anomaly candidates without altering the capture ledger.
15 tool files copied and hash-verified against the original.
Source evidence, candidate evidence, human decision, audit acceptance, release and production are six separate things. This step produces the highlighted one and nothing further.
Stage 1 runs a project-trained token classifier over units tagged instrument or instrument_candidate, flagging suspicious spans above a frozen threshold. Stage 2 applies a deterministic exact-glyph verifier that can only suppress a stage-1 candidate. Every surviving flag carries the exact value, its offsets, the page, group, token, bbox and crop linkage, and the model identity that produced it. Nothing is corrected.
Nothing continues on a failed gate. Uncertainty becomes an explicit HOLD, and no later step may read an unanswered item as an accepted one.
instrument AND instrument_candidate units enter SPELL. Routing only confidently-tagged instruments would let a single TAG false negative bypass detection entirely, so recall is prioritised at the TAG boundary and both classes are carried through.SPELL_SPAN_UNBOUND and is not emitted as a finding.SPELL_PROVENANCE_MISSING if any of these is absent.NOT_MEASURED or FAILED_COVERAGE until coverage is independently proven. A prior review-material generation produced zero spelling flags and the trial correctly recorded that as invalid rather than clean.CAMeL-Lab/camelbert-msa-qalb14-ged-13 is published under the MIT licence — permissive, and it permits the use and redistribution this project needs. The authors ask that work using it cite *Alhafni et al. (2023), "Advancements in Arabic Grammatical Error Detection and Correction: An Empirical Investigation"*. Note their own usage caveat: the model was fine-tuned on morphologically preprocessed text, which is worth remembering when applying it to raw gazette text. HOLD lifted; the obligation is citation, not restriction.16 CRITICAL-NOMINATE18 REV — HUMAN REVIEWTrained by this project, once. Stage 1 is a `BertForTokenClassification` head warm-started from `CAMeL-Lab/camelbert-msa-qalb14-ged-13` at revision `447179dc63d186e4bff09a993e90e73ad622d571`, fine-tuned for 3 epochs in 50.9 minutes on CPU, seed 20260903, at a external spend of USD 0.00 with zero provider calls. Training data was clean Saudi .gov.sa text with synthetic corruptions as positives: 361 pages, 2,341 paragraphs, 60,500 words, split by complete source so no publisher appears in two splits — TRAIN 1,137 paragraphs / 845 positives, DEV 460 / 412, TEST 744 / 522. The decision threshold 0.93 was selected on DEV against an F0.5 objective and frozen at 2026-09-03T22:24:28Z before the test split was opened. Stage 2 is not learned: it is a registry of 55 typed exact-glyph entries, version v3-registry-1.0.0.
Failure codes this step may emit:
Uncertainty becomes an explicit HOLD. Omission never converts uncertainty into acceptance, and no downstream step may treat an unanswered item as an accepted one.
REV
python infer_spell_candidates.py --input <passages.jsonl> --threshold 0.93This is the only genuinely trained project tool in the system, and it is sealed. Stage 1 is a BertForTokenClassification head warm-started from CAMeL-Lab/camelbert-msa-qalb14-ged-13 revision 447179dc63d186e4bff09a993e90e73ad622d571 and fine-tuned once in-project. Stage 2 is a deterministic exact-glyph verifier with 55 typed registry entries that can only SUPPRESS a stage-1 candidate, never create or edit text. Model v2 was evaluated and REJECTED; its weights are deliberately excluded so it cannot be run.
| File | Original SHA-256 | Bytes | Copy |
|---|---|---|---|
infer_spell_candidates.py |
6d334db2f988902a… | 8,096 | verified |
PACKAGE_CONTRACT.json |
b21467513f184573… | 7,697 | verified |
LIMITATIONS.md |
b63500183f2d2698… | 5,908 | verified |
REPRODUCE.md |
6283f23bbb8ebe41… | 4,601 | verified |
OUTER_SEAL.json |
a582ba17d931c4b0… | 1,086 | verified |
SHA256SUMS.txt |
e9daa916faa308e8… | 3,892 | verified |
model/THRESHOLD.json |
64c0c7bc9f07a777… | 369 | verified |
model/MODEL_SHA256.txt |
c8fe003fec5e177d… | 442 | verified |
model/config.json |
a81082dc84003e0c… | 923 | verified |
model/tokenizer_config.json |
466526545f52ae5c… | 452 | verified |
environment/ENVIRONMENT.json |
1793dc221725d135… | 838 | verified |
environment/requirements.lock |
691e40f7e9d93dc8… | 727 | verified |
verifier_v3/VERIFIER_REGISTRY.json |
fb72b7d6583a2085… | 139,200 | verified |
verifier_v3/SAFETY_TESTS.json |
8b84e60e4b75f986… | 5,630 | verified |
verifier_v3/OUTER_SEAL.json |
33f8033063c5482f… | 1,194 | verified |
15 file(s), all hash-verified against the original.
Full detail in tool/SOURCE_RECEIPT.json. Copy-only: the historical source is never modified.
| Archived version | Why superseded | Retained value | Bytes |
|---|---|---|---|
| 04_rejected_v2_HOLD | REJECTED. v2 suppressed 73 of 75 known false positives but lost 29 of 54 real printed errors on the same issue. Root cause HARD_NEGATIVE_OVER_GENERALISATION on final ha. | The rejection evidence, verdict and dataset stats. Weights deliberately excluded so the rejected model cannot be executed. | referenced |
| 03_evidence_banks | Five generations v2 to v5 plus an append-only erratum | 104 real printed errors, 92 verified valid forms, 181 extraction defects, 30 uncertain — with forbidden_use flags preventing defects reaching training or scoring | referenced |
| 06_corpus_and_eval | Current | Training and held-out evaluation corpora with issue-disjoint splits | referenced |
3 archived version(s). Historical packages are never deleted or mutated; large ones are referenced with verified paths rather than copied, because the source archive is 11 GB.
Operates on frozen local text. No credentials. The 414 MB weight file is carried by Git LFS with its SHA-256 recorded, so the artifact stays verifiable.
Zero. Training cost USD 0.00 with no provider calls; inference is local CPU.
Copying a tool into this repository does not authorise running it, retraining it, calling a model, or processing a new issue. No paid call may be made without the owner's explicit authorisation and a hard cost cap.
registry/roles.json (schema marsoom.e2t.roles.v1)SPELLFeedback is recorded per source and never merged into an invented consensus. Where sources disagree, both positions stand and the owner decides.
| Source | Events |
|---|---|
| Naser / owner Final authority. Overrides every other source. |
none recorded |
| Codex / orchestrator Architecture and sequencing. |
none recorded |
| Builder / designer Implementation reality and constraints. |
none recorded |
| Independent reviewer Adversarial review of claims. |
none recorded |
| Auditor Evidence verification against artifacts. |
none recorded |
| Human REV reviewer Page-level truth from the review site. |
none recorded |
No feedback events recorded yet. The ledger exists and is append-only:
feedback/FEEDBACK_LEDGER.jsonl.
Editing feedback is not possible: a change is a new event whose
supersedes names the one it replaces, and the original stays exactly as written.
Generated from registry/roles.json by tools/build-reports.mjs.
Do not hand-edit — edit the registry and rebuild.
Original page pixels are the visual authority. CAP owns the exact captured text.