Skip to content

QEC v170.3.0 — Deterministic Strowger Syndrome Exchange

Choose a tag to compare

@EmergentMonk EmergentMonk released this 02 Aug 05:14
· 41 commits to main since this release
dada8b7

QEC v170.3.0 introduces a complete virtual Strowger-style automatic exchange for deterministic correction-request routing.

Inspired by electromechanical telephone exchanges, the new subsystem converts mixed-radix route digits into timed pulse trains, allocates an incoming linefinder, steps through hierarchical selectors, hunts for available trunks, resolves a two-axis connector destination, and verifies the resulting route with a deterministic three-tone signature.

The exchange is a classical routing and evidence layer. It does not replace QEC’s exact decoders or claim that telephone switching is quantum hardware.

Merged through PR #589 with 26 commits across 23 files.

Highlights
Deterministic virtual Strowger exchange
Binary, ternary, radix-4, decimal and general mixed-radix routes
Historical zero-as-full-radix pulse encoding
First-free linefinder allocation
Hierarchical selector stages
Deterministic trunk hunting
Two-axis connector addressing
Three-tone route verification
Optional receipt-bound Operator Desk
Fault injection and recovery testing
Canonical SHA-256 route receipts
Complete replay-not-trust validation
Offline animated browser laboratory
WebAudio playback and local WAV rendering
New qec-strowger command-line interface
Deterministic exchange architecture

A correction request now travels through an explicit switching path:

correction request

mixed-radix pulse codec

linefinder allocation

hierarchical selector chain

first-free admissible trunk hunting

vertical/rotary connector

three-tone contact verification

commit, reject or release

Each device is represented as a deterministic state machine with auditable transitions such as:

HOME
SEIZED
RECEIVING_PULSES
VERTICAL_STEPPING
TRUNK_HUNTING
CONNECTED
VERIFYING
COMMITTED
FAULT
RELEASING

The same topology, request, initial state, fault plan and operator commands reproduce the same route, event chain and canonical receipt.

Mixed-radix pulse routing

The exchange supports selector chains with independently configured radices:

binary → qubit-oriented lanes
ternary → qutrit-oriented lanes
radix-4 → packed ququart symbols
decimal → historically faithful Strowger operation
variable-N → general bounded research routes

As in historical dial systems, zero is represented by a complete radix-length pulse train.

Pulse timing is preserved in the canonical event record. Receipts retain the actual deterministic ticks associated with pulse arrival, stepping, digit gaps and selector transitions rather than recording every event at tick zero.

Fault references are validated across the entire route, including both connector axes.

Linefinders, selectors and connectors
Linefinders

Incoming requests are allocated to the first available linefinder using a fixed ascending-order policy.

Linefinder exhaustion is now distinguished explicitly from downstream trunk exhaustion:

linefinders exhausted from downstream trunk exhaustion:

linefinders exhausted → LINEFINDER_BUSY
selector routes exhausted → ALL_TRUNKS_BUSY

This prevents ingress-capacity failures from being misreported as routing-trunk failures.

Selectors

Each selector:

receives one pulse group;
verifies the observed pulse count;
steps to the requested level;
examines trunks in canonical order;
chooses the first free admissible contact;
rejects the route when no valid trunk remains.

Busy and quarantined contacts are skipped deterministically.

Connector

The final two route digits address a two-axis connector:

vertical position → correction site or check group
rotary position   → exact correction operator or destination

Missed and duplicated connector pulses are processed with the same strict validation applied to selector stages.

Three-tone route verification

Every completed route derives a deterministic contact signature containing:

route tone       primary route identity
check tone       independent redundant identity
dark reference   distortion and contact-reference channel

The expected and observed signatures are stored separately.

A route is committed only when the observed tones satisfy the configured verification tolerance. Tone disagreement fails closed.

Injected tone faults are now reflected in:

the displayed frequencies;
the oscilloscope;
WebAudio playback;
rendered WAV files;
the browser demonstration record;
canonical Python receipts.

The user therefore hears and sees the observed faulted signal, rather than merely being told that a hidden mismatch occurred.

Optional Operator Desk

Normal operation remains fully automatic. No human operator is required.

Three modes are available:

AUTOMATIC
    Operator Desk disabled.
    No operator commands accepted.

SUPERVISED
    Inspect contacts.
    Quarantine trunks.
    Release routes.
    Request deterministic replay.

MANUAL
    All supervised controls.
    Manual selector stepping.
    Explicit trunk seizure.

Operator controls now perform real exchange state transitions rather than merely writing ceremonial log entries.

For example:

Quarantine changes the contact state and affects subsequent trunk hunting.
Seize trunk makes the selected route unavailable.
Release route returns the active connection to the released state.
Replay request executes the request again.
Manual step advances the displayed selector.
Inspect records a non-mutating maintenance observation.

Switching back to automatic mode clears pending operator interventions so human maintenance state cannot leak into an automatic receipt.

There is deliberately no force_accept operation.

An operator cannot:

alter decoder output;
bypass failed tone verification;
conceal a rejected route;
remove previous events;
silently rewrite the receipt;
redefine the scientific claim boundary.
Operator chain of custody

Canonical receipts now preserve both sides of operator maintenance:

initial exchange state
        ↓
receipt-bound operator commands
        ↓
post-maintenance / pre-route state
        ↓
automatic switching execution
        ↓
route result

Validation reconstructs the initial exchange and executes each operator command through its real operation.

It does not merely replay the associated log entry.

This means a receipt cannot be altered by changing a command target, recalculating the hashes and relying on a separately stored post-maintenance state. The command, its target and its resulting state must all agree.

Unrecorded state mutations are rejected.

Replay-not-trust receipts

Canonical receipts use:

qec.strowger-route-receipt.v1

Each receipt binds:

QEC version;
exchange topology;
route request and request SHA-256;
initial exchange state;
pre-route state;
exchange mode;
operator commands;
deterministic fault plan;
linefinder allocation;
selector trunk path;
connector coordinates;
expected and observed tones;
verification result;
timed hash-chained events;
route outcome;
immutable scientific claim boundary;
final canonical SHA-256 identity.

qec-strowger validate reconstructs the exchange and repeats the complete operation.

Validation requires byte-for-byte agreement across:

operator effects
pulse timing
selector transitions
trunk allocation
connector selection
tone observations
route outcome
event chain
receipt identity

Recomputing the outer hash after modifying a receipt is therefore insufficient. The altered account must survive full deterministic reconstruction.

Immutable claim boundary

Every receipt receives an independent copy of the release claim boundary.

A caller cannot mutate a returned receipt and accidentally or deliberately redefine the validator’s global policy.

The exchange continues to declare:

classical_routing_only: true
decoder_replacement: false
quantum_hardware_claim: false
tone_proves_decoder_correctness: false
operator_may_force_accept: false
Offline Strowger laboratory

The new laboratory is located at:

viz/strowger/

It provides:

animated selector racks;
moving shafts and rotary wipers;
configurable mixed-radix digits;
live contact states;
busy and quarantined trunks;
deterministic fault injection;
automatic, supervised and manual modes;
functional Operator Desk controls;
expected-versus-observed tone display;
oscilloscope rendering;
WebAudio tone playback;
dependency-free WAV generation;
event-chain inspection;
downloadable demonstration records;
no server, Node runtime, CDN, telemetry or network dependency.

Browser rendering of untrusted request and destination fields uses text nodes rather than HTML injection.

Invalid requests clear previous receipts, tones and downloadable state, preventing stale evidence from being presented beneath an INVALID REQUEST display.

Browser evidence boundary

Browser exports remain explicitly noncanonical:

schema: qec.strowger-browser-demonstration.v1
browser_demo_only: true
canonical_receipt: false
digest_algorithm: fnv1a-derived-demo-digest-v1

The browser digest exists only to demonstrate deterministic local record construction.

It is not represented as SHA-256 evidence.

Canonical cryptographic receipts are generated only through the Python API or qec-strowger CLI.

Command-line interface

Generate a canonical route receipt:

qec-strowger route \
  --digits 2,3,4,11 \
  --radices 3,4,10,16 \
  --request-id syndrome-001 \
  --destination ququart/site-4/pauli-11 \
  --output artifacts/strowger-route.json

Validate and completely replay a receipt:

qec-strowger validate \
  --receipt artifacts/strowger-route.json

A successful validation reports:

{
  "valid": true,
  "replayed": true,
  "events": 38,
  "sha256": "f886fa3fc4ceff26f0f48c66549c1fea06664e307f07dbc840a6759230c6f7fb"
}
Package identity

The exported QEC package version is now synchronised as:

QEC package:                    170.3.0
NEXUS execution contract:       170.2.0
NEXUS replication receipt:      170.2.1
Strowger route receipt release: 170.3.0

The NEXUS contract identities remain intentionally pinned while the public installed-package identity advances to v170.3.0.

Fault-injection coverage

The exchange can deterministically model:

missed selector pulses;
duplicated selector pulses;
missed connector pulses;
duplicated connector pulses;
stuck selectors;
busy trunks;
quarantined contacts;
exhausted linefinders;
exhausted selector trunks;
route-tone offsets;
stale operator intervention;
unrecorded maintenance mutation;
altered event chains;
re-signed forged receipts.

Every injected fault has an explicit and replayable outcome.

Validation

Final authoritative validation completed with:

19,109 passed
7 skipped
4 warnings

Strowger browser JavaScript syntax: PASS
Canonical route generation:         PASS
Complete exchange replay:           PASS
Replayed receipt events:             38
NEXUS Bridge:                        PASS
Ququart FER validation:              PASS

Final canonical CI receipt:

f886fa3fc4ceff26f0f48c66549c1fea06664e307f07dbc840a6759230c6f7fb

Uploaded evidence artifact:

qec-v170.3.0-strowger-route.zip
SHA-256:
cab4ccea0f89572d67ae23794f4ea5ceb548c02774bb52133090efc450a7c098

The dedicated Strowger, NEXUSlows all passed on the merged head. fileciteturn233file0L1-L1

Scientific boundary

This release supports claims about:

deterministic classical routing;
mixed-radix pulse encoding;
linefinder and trunk-allocation policy;
explicit device-state transitions;
operator-command provenance;
observed tone-verification behaviour;
deterministic fault handling;
event-chain integrity;
complete receipt replay;
canonical artifact identity.

It does not establish:

that a Strowger exchange is a quantum decoder;
that electromechanical switching is quantum hardware;
that route tones prove decoder correctness;
quantum advantage;
hardware fault tolerance;
QEC break-even;
a physical device threshold;
universal performance claims;
physical truth.
The fourteen gremlins

A final review raid uncovered 14 gremlins hiding behind the selector rack—four spotted by Copilot and ten that Codex released after everyone thought the exchange was clean:

DOM injection through event rendering
Incorrect quarantine-target evidence
Invalid radix acceptance
Discontinuous selector-state history
Connector pulse faults being ignored
Operator controls that only filed paperwork
Supervised interventions leaking into automatic mode
Operator commands replayed without their state effects
Exported package-version drift
Linefinder exhaustion misreported as trunk exhaustion
Mutable receipt claim boundaries
Faulted tones reported but not heard or displayed
Stale evidence surviving invalid requests
Pulse timing discarded from canonical receipts

All fourteen were corrected and given regression coverage before merge. The final test suite then briefly arrested its own author for jaywalking after a test attempted to prove a state mutation using:

FREE → FREE

That particular procedural offence was corrected to:

FREE → BUSY

Fourteen gremlins vanquished, one jaywalking ticket issued, and the exchange is now open for deterministic business. ☎️⚙️😄