docs(wiki): DT-008 phantom-scan diagnosis + backfill bypass/relay-test concept pages
Two independent wiki updates bundled (all docs):
1. dingtian-dt008-reader.md: phantom optical decodes on the park-buzi EXIT
reader (empty pre-opening site, low-sun afternoons). Chain of evidence:
READ log lines carry the reader's own serial (H05MA5B0) → physical device,
not a network source; snapshot shows nobody present; code shapes are the
giveaway (6-digit numerics = checksum-less Interleaved 2-of-5, lone "C" =
Code39/Codabar artifact) → 1D engine decoding sun-made stripe patterns
(striped arm, fence shadows, glare). No fraud exposure (11-digit Luhn ids
can't match); noise only. Fix on the entity page: vendor-tool symbology cut
to QR+Code128 + min decode length, BOTH readers; config lives ON the device
→ re-apply after any factory reset/swap. Deliberately NOT filtering
impossible codes server-side — probe recording is the anomaly path's job.
2. Backfilled two shipped-but-undocumented features (six code files already
linked the first page as if it existed):
- concepts/entry-presence-bypass.md — admin drops a FAULTY presence signal
(granular radar/camera by decision, not a master switch); every flip is a
signed config_change; persists till off; tickets stamped presenceBypassed;
radar-bypass cooldown tradeoff; "the admin is not the adversary, but
trusted never means invisible".
- concepts/setup-relay-test.md — admin-only commissioning pulse, signed
barrier_open_command BEFORE the fire so a test open never reads as the
out-of-band-open fraud signal; saved controllers/declared relays only;
radarAlert lamps excluded; pulseOpen only.
Cross-linked from operator-issued-entry.md, cataloged in index.md, logged.
Claude-Session: https://claude.ai/code/session_01Xcm6ikLgGoCxxHrxtjkk5V
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
type: entity
|
||||
tags: [parking, hardware, readers, qr, dingtian]
|
||||
sources: [dingtian-dt008]
|
||||
updated: 2026-06-28
|
||||
updated: 2026-07-04
|
||||
status: open
|
||||
---
|
||||
|
||||
@@ -120,6 +120,33 @@ host in the **vendor tool**; assign + enter its serial + bind it here.
|
||||
- `output` is replied as `0` (Access). Confirm on hardware whether the reader needs `1`/`2` (WG26/34)
|
||||
to drive its access line, vs. `0`.
|
||||
|
||||
## ⚠️ Phantom optical decodes from sunlight patterns (park-buzi, 2026-07-04)
|
||||
|
||||
With the site EMPTY (pre-opening, verified live + by snapshot), the **exit reader
|
||||
(`cjihao=H05MA5B0`) pushed spontaneous scans** at random afternoon times (observed 16:38–18:14,
|
||||
low-western-sun hours): `cardid` values like `997492`, `389861`, `024358`, `192793` — and once a
|
||||
lone **`C`**. Server logs (`READ serial=` lines) confirm the pushes carry the reader's own serial
|
||||
and resolve to its assigned row, so this is **the physical reader decoding, not a network source**.
|
||||
|
||||
**Diagnosis:** the scan engine ships with many 1D symbologies enabled, some with weak/no checksums.
|
||||
Six-digit all-numeric strings are the signature of **Interleaved 2-of-5** (even-length, digits-only,
|
||||
no checksum — any high-contrast stripe pattern of the right proportions "decodes"); a lone `C` is a
|
||||
**Code39/Codabar** artifact (Codabar start/stop chars are A–D). Low sun creates exactly such
|
||||
patterns at a gate: the striped barrier arm, fence/railing shadows sweeping as the sun moves, glare
|
||||
bands. RFID noise would instead give repeating UID-shaped values.
|
||||
|
||||
**Impact: noise, not risk.** Every phantom was REFUSED fail-closed (`exit.refused.noSession`, a
|
||||
signed anomaly — #52–58 in the feed); a phantom can never match a ticket ([[ticket-encoding]] ids
|
||||
are 11-digit + Luhn, so a 6-digit read has nothing to match). Do NOT filter "impossible" codes
|
||||
server-side — recording every probe of an exit reader is what the anomaly path is for; fix at the
|
||||
source instead:
|
||||
|
||||
**Fix (vendor tool, per reader — config lives ON THE DEVICE, not in our DB):** disable every
|
||||
symbology except **QR + Code128** (all our credentials); if offered, set **minimum decode length
|
||||
≥ 10** and require checksums. Apply to BOTH readers. ⚠️ A factory reset or a swapped unit silently
|
||||
re-enables the phantom symbologies — re-apply after any reset/replacement. Physical fallback if any
|
||||
noise survives: hood/visor the window, tilt it down, avoid facing the striped arm.
|
||||
|
||||
## ⚠️ Reply MUST set `Connection: close` (verified on hardware)
|
||||
|
||||
The reader sends `Connection: keep-alive` but **only acts on the verdict (beep/output) once the TCP
|
||||
|
||||
Reference in New Issue
Block a user