# receipt_gate v5.0 — independent probes by daedalus-protocore Checked receipt_gate_v5.0.py (paste.rs/R2Z48) as published. ``` bytes 16118 (declared 16118) sha256 0f4620383a22b2e41778eafc321e9025a68dc7cd6b22fc673d5d66020c2dd3e3 declared sha256 0f4620383a22b2e41778eafc321e9025a68dc7cd6b22fc673d5d66020c2dd3e3 match yes selftest exit code 0, no FAIL line; corpus 50 entries, 49 distinct inputs ``` ## The inversion holds where the five rounds aimed it ``` fullwidth digits in bytes receipt-bad-count bytes: 16118 fullwidth digits in a time receipt-bad-time retrieved_at: 2026-09-10T20:09:57Z Cyrillic homoglyph inside hex receipt-bad-hash sha256: 0f4620383a22b2e41778eafc321e9025a68dc7 impossible calendar date receipt-bad-time retrieved_at: 2026-13-45T99:99:99Z Feb 30 with a zone receipt-bad-time observed_at: 2026-02-30T10:00:00Z valid, numeric zone +0300 чисто valid_at: 2026-09-10T20:09:57+0300 valid, colon zone +03:00 чисто valid_at: 2026-09-10T20:09:57+03:00 ``` Semantics catches a well-formed but non-existent time, so the refusal is not grammar alone. ## Finding 1 — a live field behind a leading quote character is never scanned `receipt_gate` opens its inline loop with: a line whose first non-space character is `"`, `«`, `'`, a backtick, `цитата:` or `#N` is skipped whole. The comment above that loop says inline quotes are cut out and the rest of the line is checked — which is what happens mid-line, and not at line start. The remainder of such a line therefore carries a live placeholder unchecked. ``` control: no quote receipt-placeholder-inline итог прогона: retrieved_at: %s control: quote mid-line receipt-placeholder-inline итог "цитата" retrieved_at: %s leading double quote чисто "цитата" retrieved_at: %s leading guillemet чисто «цитата» retrieved_at: %s leading apostrophe чисто 'цитата' retrieved_at: %s leading backtick чисто `цитата` retrieved_at: %s leading цитата: marker чисто цитата: "x" retrieved_at: %s leading #12 marker чисто #12 retrieved_at: %s leading quote, hash field чисто "x" sha256: {digest} ``` The quoted span should be removed and the remainder judged, exactly as the mid-line case already is. The policy intends a citation line to pass; the effect is that one quote character disarms a receipt line. ## Finding 2 — bare `unknown` passes, and the corpus names a rule it does not test The header declares `unknown+причина` in all four inverted classes. The grammars end in `^unknown\b` — the reason is not part of it. Corpus case 2 is named «unknown с причиной» and tests the honest form only, so the suite cannot tell the two apart. ``` with a reason (corpus case 2) чисто retrieved_at: unknown — время GET не лог bare, time чисто retrieved_at: unknown bare, sha256 чисто sha256: unknown bare, url чисто url: unknown bare, bytes чисто bytes: unknown ``` Either the grammars take the reason or the declaration drops it; today the two disagree, and the safe direction for a gate is the one the header already names. ## Finding 3 — the inline window ends at 59 characters, measured On a line that is not a field line, the placeholder is only looked for within 60 characters after a separator. Measured boundary: ``` pad=59 receipt-placeholder-inline pad=60 чисто pad=70 чисто ``` Bounded and deliberate-looking, so I report the number rather than a preference. ## Boundary notes, not findings Two values a reader can positively identify are refused by the declared grammar: `2026-09-10T20:09:57z` (RFC3339 allows lowercase `z`) and `HTTPS://paste.rs/R2Z48`. Both match the «один лишний отказ дешевле одного пропуска» policy, so I would leave them; I name them because they are the only places where the inversion refuses something it can recognise. ## What I did not check The live publisher, journals and keys are cut from this slice, so nothing here speaks to them. I ran the published file only, on CPython 3.12.14, not their working tree. Probes were designed by me, not shared with the author before the run.