Skip to content

Commit 0f42c1b

Browse files
committed
fix: erase all em-dashes (—) and en-dashes (–) / AI double dashes everywhere; use single hyphens per badge hygiene rule
1 parent 938472c commit 0f42c1b

23 files changed

Lines changed: 91 additions & 91 deletions

ai.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
QECTOR Decoder 3 quantum error correction decoder package for Python and Rust.
1+
QECTOR Decoder 3 - quantum error correction decoder package for Python and Rust.
22

33
Maintained by Guillaume Lessard / iD01t Productions.
44

source/README.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# QECTOR qectorlab.github.io
1+
# QECTOR - qectorlab.github.io
22

33
Lightweight static bridge + marketing site for **QECTOR Decoder v3** (high-performance decoder library) and **Qector Workbench** (free professional GUI) under the **qectorlab** brand.
44

@@ -8,8 +8,8 @@ Lightweight static bridge + marketing site for **QECTOR Decoder v3** (high-perfo
88

99
- Quick-start: pip install qector-decoder-v3
1010
- Free Workbench: https://github.com/qectorlab/qector-decoder-workbench/releases/tag/v3.4.0
11-
- Key claims + evidence: Exact PyMatching parity d=15, +35.7% gains, GPU batch all on GitHub
12-
- Commercial: Source-Available; licenses for production use see qector.store/commercial
11+
- Key claims + evidence: Exact PyMatching parity d=15, +35.7% gains, GPU batch - all on GitHub
12+
- Commercial: Source-Available; licenses for production use - see qector.store/commercial
1313
- Full docs & artifacts: https://github.com/GuillaumeLessard/qector-decoder
1414
- PyPI + dynamic version: https://pypi.org/project/qector-decoder-v3/
1515

@@ -38,7 +38,7 @@ npm run preview # preview the production build locally
3838
npm run lint # eslint
3939
```
4040

41-
Node 18+ is recommended. The production build type-checks the whole project before bundling a failing `tsc -b` will fail the build.
41+
Node 18+ is recommended. The production build type-checks the whole project before bundling - a failing `tsc -b` will fail the build.
4242

4343
## Project structure
4444

@@ -66,14 +66,14 @@ src/
6666

6767
### Shared component pattern
6868

69-
Cards, section headers, and evidence blocks are intentionally centralized (`components/*.tsx`, not `ui/*`) so that every page Home, Decoder, Benchmarks, Evidence, Pricing, Evidence reports renders the same visual language instead of re-implementing card markup per page. When adding a new page, prefer reusing one of these over writing new markup; if none fit, extract a new shared component rather than duplicating.
69+
Cards, section headers, and evidence blocks are intentionally centralized (`components/*.tsx`, not `ui/*`) so that every page - Home, Decoder, Benchmarks, Evidence, Pricing, Evidence reports - renders the same visual language instead of re-implementing card markup per page. When adding a new page, prefer reusing one of these over writing new markup; if none fit, extract a new shared component rather than duplicating.
7070

7171
## Accessibility
7272

7373
The site targets WCAG 2.1 AA. Notable patterns in place:
7474

7575
- Skip-to-content link and route-change focus management (`Layout.tsx`).
76-
- Keyboard-operable tab groups (`role="tablist"`/`"tab"`/`"tabpanel"`, arrow-key navigation) see the product switcher on `Pricing.tsx`.
76+
- Keyboard-operable tab groups (`role="tablist"`/`"tab"`/`"tabpanel"`, arrow-key navigation) - see the product switcher on `Pricing.tsx`.
7777
- `NeuralReveal` (the scramble-in heading effect) exposes the final text via `aria-label` and hides the animated glyphs from assistive tech with `aria-hidden`; it also honors `prefers-reduced-motion` and skips the scramble entirely.
7878
- Decorative SVGs and background video are `aria-hidden`; data-bearing SVG charts use `role="img"` with a text `aria-label` that states the actual values, and the underlying data is also present in an adjacent HTML table where applicable.
7979
- Form fields use explicit `<label htmlFor>` / `id` pairing, not implicit/visual-only association.
@@ -83,12 +83,12 @@ When adding new interactive UI, match these patterns: real semantics over ARIA w
8383

8484
## Content & claims policy
8585

86-
Numbers used across the site (exact MWPM parity to d=15, +35.7% Belief-Matching LER reduction, 98.3% optimal shots at d=9, 832/832 tests) are simulation-validated with reproducible artifacts in the decoder repository. Do not edit these figures without updating the underlying validation report the site's credibility depends on every public number being traceable to a citable artifact linked from `Evidence.tsx` / `Benchmarks.tsx`.
86+
Numbers used across the site (exact MWPM parity to d=15, +35.7% Belief-Matching LER reduction, 98.3% optimal shots at d=9, 832/832 tests) are simulation-validated with reproducible artifacts in the decoder repository. Do not edit these figures without updating the underlying validation report - the site's credibility depends on every public number being traceable to a citable artifact linked from `Evidence.tsx` / `Benchmarks.tsx`.
8787

8888
## Deployment
8989

9090
The site is a static Vite build deployed to GitHub Pages from `qectorlab/qectorlab.github.io`. `npm run build` outputs to `dist/`; the deployed site is served from that output. SEO/crawler files (`robots.txt`, `sitemap.xml`, `llms.txt`, `llms-full.txt`) and `.well-known` metadata live in `public/` and are copied as-is.
9191

9292
## License
9393

94-
Site content and code are © Guillaume Lessard / iD01t Productions. The QECTOR Decoder itself is dual-licensed (PolyForm Noncommercial for community use, commercial licenses available) see [`/license`](https://qector.store/license) on the live site for current terms.
94+
Site content and code are © Guillaume Lessard / iD01t Productions. The QECTOR Decoder itself is dual-licensed (PolyForm Noncommercial for community use, commercial licenses available) - see [`/license`](https://qector.store/license) on the live site for current terms.

source/public/ai.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
QECTOR Decoder 3 quantum error correction decoder package for Python and Rust.
1+
QECTOR Decoder 3 - quantum error correction decoder package for Python and Rust.
22

33
Maintained by Guillaume Lessard / iD01t Productions.
44

source/src/components/AlgorithmCard.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
type BadgeColor = 'cyan' | 'green' | 'purple' | 'gold';
22

33
interface AlgorithmCardProps {
4-
/** e.g. "Exact MWPM Validated" */
4+
/** e.g. "Exact MWPM - Validated" */
55
title: string;
66
/** Short technical tag shown as small mono text above the title, e.g. "Blossom + Belief-Matching" */
77
tag?: string;
88
/** Colored pill shown next to the title instead of `tag`, e.g. { label: 'Best LER', color: 'cyan' } */
99
badge?: { label: string; color: BadgeColor };
1010
/** What it is and why it matters, plain language first */
1111
desc: string;
12-
/** Optional single concrete fact/number to anchor the claim, e.g. "d = 315, exact parity" */
12+
/** Optional single concrete fact/number to anchor the claim, e.g. "d = 3-15, exact parity" */
1313
proof?: string;
1414
/** Dims the card for research-stage / experimental entries */
1515
muted?: boolean;

source/src/components/ErrorBoundary.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export default class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBo
3535
</div>
3636
<h1 className="text-xl font-bold text-primary mb-2">Something went wrong</h1>
3737
<p className="text-secondary text-sm mb-6">
38-
This page hit an unexpected error. This has been logged locally reloading usually resolves it.
38+
This page hit an unexpected error. This has been logged locally - reloading usually resolves it.
3939
</p>
4040
<button onClick={this.handleReload} className="btn-cyan">
4141
Reload homepage

source/src/components/MetricCard.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ type MetricCardVariant = 'default' | 'gold' | 'compact';
55
interface MetricCardProps {
66
/** Short label/headline for the metric, e.g. "+35.7% Advantage" */
77
label: string;
8-
/** Optional large prominent value shown between label and desc, e.g. "d=315" */
8+
/** Optional large prominent value shown between label and desc, e.g. "d=3-15" */
99
value?: string;
1010
/** Supporting explanation, one to two sentences */
1111
desc: string;

source/src/pages/About.tsx

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ export default function About() {
6565
</div>
6666
<h1 className="text-4xl md:text-6xl font-extrabold tracking-tight leading-[1.1] mb-6">About QECTOR</h1>
6767
<p className="text-secondary text-lg md:text-xl max-w-2xl mx-auto leading-relaxed mb-8">
68-
Independent quantum error correction research, engineering, and commercialization
68+
Independent quantum error correction research, engineering, and commercialization -
6969
built by <span className="text-cyan-300 font-semibold">Guillaume Lessard</span> with full transparency,
7070
reproducible artifacts, and no speculative claims.
7171
</p>
@@ -132,34 +132,34 @@ export default function About() {
132132
<div ref={(el) => addRef(el, 2)} className="card-surface">
133133
<h3 className="text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4">Software Stack</h3>
134134
<ul className="space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5">
135-
<li>Rust / PyO3 core decoder engine</li>
136-
<li>Python 3.10+ API, CLI, benchmarking, simulation</li>
137-
<li>Stim circuit-level noise simulation</li>
138-
<li>OpenCL / CUDA GPU-accelerated batch decoding</li>
139-
<li>PyPI distribution <code className="text-cyan-300 text-xs">qector-decoder-v3</code></li>
135+
<li>Rust / PyO3 - core decoder engine</li>
136+
<li>Python 3.10+ - API, CLI, benchmarking, simulation</li>
137+
<li>Stim - circuit-level noise simulation</li>
138+
<li>OpenCL / CUDA - GPU-accelerated batch decoding</li>
139+
<li>PyPI distribution - <code className="text-cyan-300 text-xs">qector-decoder-v3</code></li>
140140
<li>HMAC-JWT commercial license enforcement</li>
141-
<li>NiceGUI / CustomTkinter SATI OS desktop interface</li>
141+
<li>NiceGUI / CustomTkinter - SATI OS desktop interface</li>
142142
</ul>
143143
</div>
144144
<div ref={(el) => addRef(el, 3)} className="card-surface">
145145
<h3 className="text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4">Engineering Philosophy</h3>
146146
<ul className="space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5">
147-
<li>Reproducibility first every claim ships with verifiable artifacts</li>
148-
<li>Honest documentation Decoder is Source-Available (not free); Workbench GUI app is free</li>
147+
<li>Reproducibility first - every claim ships with verifiable artifacts</li>
148+
<li>Honest documentation - Decoder is Source-Available (not free); Workbench GUI app is free</li>
149149
<li>Simulation-validated before any public benchmark claim</li>
150-
<li>Full provenance trail DOI, SHA-256 bundles, IBM job IDs</li>
151-
<li>No vendor lock-in pluggable CodeProvider architecture</li>
150+
<li>Full provenance trail - DOI, SHA-256 bundles, IBM job IDs</li>
151+
<li>No vendor lock-in - pluggable CodeProvider architecture</li>
152152
<li>Transparent validation reports with non-pass classification</li>
153153
</ul>
154154
</div>
155155
<div ref={(el) => addRef(el, 4)} className="card-surface">
156156
<h3 className="text-cyan-300 font-semibold text-sm uppercase tracking-wider mb-4">QECTOR Product Scope (qectorlab)</h3>
157-
<p className="text-xs text-secondary mb-2">This site and QECTOR Decoder v3 + Workbench are the high-performance decoder library + professional GUI. Broader QECTOR vision (LCL-833, full SATI CODEX theoretical work) is research context see GitHub for details.</p>
157+
<p className="text-xs text-secondary mb-2">This site and QECTOR Decoder v3 + Workbench are the high-performance decoder library + professional GUI. Broader QECTOR vision (LCL-833, full SATI CODEX theoretical work) is research context - see GitHub for details.</p>
158158
<ul className="space-y-2 text-secondary text-sm leading-relaxed list-disc pl-5">
159159
<li><strong className="text-primary">QECTOR Decoder v3</strong>: Rust/Python multi-algorithm QEC decoder library (Source-Available)</li>
160160
<li><strong className="text-primary">Free Qector Workbench v3.4</strong>: Professional GUI, MCP, benchmarks (fully free)</li>
161161
<li><strong className="text-primary">SATI OS</strong>: Full commercial stack on top (GUI + HALs + support)</li>
162-
<li><strong className="text-primary">Research</strong>: SATI CODEX, LCL codes, "Mastering QEC" book cross-linked on GitHub</li>
162+
<li><strong className="text-primary">Research</strong>: SATI CODEX, LCL codes, "Mastering QEC" book - cross-linked on GitHub</li>
163163
</ul>
164164
</div>
165165
</div>
@@ -173,7 +173,7 @@ export default function About() {
173173
{ year: '2025 Q1', event: 'SATI CODEX LCL-832 framework developed: [[832,10,4]] CSS code on genus-5 surface. IBM Quantum hardware runs on ibm_fez. Artifacts on GitHub.' },
174174
{ year: '2025 Q2', event: 'QECTOR Decoder v3 core engine written in Rust / PyO3. Initial PyPI releases. Belief-Matching, BP-OSD, Union-Find decoders integrated. SATI OS desktop UI scaffolded.' },
175175
{ year: '2025 Q3', event: 'SATI v18 Titan-Class [[72,12,6]] BB QLDPC code environment. OpenCL and CUDA GPU backends achieving byte-for-byte identical corrections to CPU.' },
176-
{ year: '2025 Q42026', event: `v${pypiVersion} Decoder (Source Available) + free QectorWorkbench GUI v3.4 (25 tools, 10/10 polish). SATI OS full suite on top.` },
176+
{ year: '2025 Q4-2026', event: `v${pypiVersion} Decoder (Source-Available) + free QectorWorkbench GUI v3.4 (25 tools, 10/10 polish). SATI OS full suite on top.` },
177177
{ year: '2026 Q2', event: 'SATI OS v1.0.0 (build 1.0.0.0) first GA release. Features 39-panel desktop GUI, FastAPI server, dual CLIs, MCP server, and LCL-free open core with optional premium LCL-832 plugin. 1204 tests passing.' },
178178
].map((item) => (
179179
<div key={item.year} className="flex gap-4 items-start pb-4 border-b border-gridline/50 last:border-0">

source/src/pages/Benchmarks.tsx

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ export default function Benchmarks() {
5151
</h1>
5252
<p className="text-secondary text-lg md:text-xl max-w-3xl mx-auto leading-relaxed mb-8">
5353
Head-to-head against PyMatching on rotated surface codes using Stim circuit-level noise.
54-
Results are SHA-256 sealed and available on GitHub run them yourself with the artifacts.
54+
Results are SHA-256 sealed and available on GitHub - run them yourself with the artifacts.
5555
</p>
5656
<div className="flex flex-wrap justify-center gap-3">
5757
<a href="https://github.com/GuillaumeLessard/qector-decoder" target="_blank" rel="noopener noreferrer" className="btn-cyan">GitHub Artifacts →</a>
@@ -75,11 +75,11 @@ export default function Benchmarks() {
7575
</thead>
7676
<tbody>
7777
{[
78-
{ algo: 'QECTOR-Blossom (MWPM)', dist: 'd = 3 15', ler: 'Exact parity', speed: '6.97.7× faster', status: 'Validated' },
78+
{ algo: 'QECTOR-Blossom (MWPM)', dist: 'd = 3 - 15', ler: 'Exact parity', speed: '6.9-7.7× faster', status: 'Validated' },
7979
{ algo: 'Belief-Matching', dist: 'd = 5', ler: '\u221235.7% LER', speed: 'Comparable', status: 'Validated' },
8080
{ algo: 'QECTOR-Blossom', dist: 'd = 9', ler: '98.3% optimal shots', speed: 'Faster', status: 'Validated' },
8181
{ algo: 'GPU Batch Decoder', dist: 'Any', ler: 'Bit-identical to CPU', speed: 'Native CUDA / OpenCL', status: 'Available' },
82-
{ algo: 'Union-Find', dist: 'd = 3 21', ler: '~1.5× higher LER', speed: '1050× faster', status: 'Validated' },
82+
{ algo: 'Union-Find', dist: 'd = 3 - 21', ler: '~1.5× higher LER', speed: '10-50× faster', status: 'Validated' },
8383
{ algo: 'BP-OSD', dist: 'qLDPC', ler: 'Code-dependent', speed: 'Slower (BP iterations)', status: 'Validated' },
8484
].map((row, i) => (
8585
<tr key={i} className="border-b border-gridline/50 hover:bg-surface/50 transition-colors">
@@ -101,17 +101,17 @@ export default function Benchmarks() {
101101
{/* Detailed Results */}
102102
<div ref={(el) => addRef(el, 1)} className="grid grid-cols-1 md:grid-cols-2 gap-6">
103103
<div className="card-surface">
104-
<h3 className="text-cyan-300 font-semibold mb-3">MWPM LER Parity (d=311)</h3>
104+
<h3 className="text-cyan-300 font-semibold mb-3">MWPM LER Parity (d=3-11)</h3>
105105
<p className="text-secondary text-sm leading-relaxed mb-4">
106106
QECTOR-Blossom achieves exact logical error rate parity with PyMatching across all tested code distances.
107107
The adaptive-k MWPM implementation uses a union-find preprocessor followed by exact Blossom V matching on reduced graphs.
108108
</p>
109109
<div className="font-mono text-xs text-muted-foreground space-y-1">
110-
<div>d=3: LER = 0.0117 (PyMatching: 0.0117) exact match</div>
111-
<div>d=5: LER = 0.0079 (PyMatching: 0.0079) exact match</div>
112-
<div>d=7: LER = 0.0051 (PyMatching: 0.0050) exact match</div>
113-
<div>d=9: LER = 0.0030 (PyMatching: 0.0031) exact match</div>
114-
<div>d=11: LER = 0.0018 (PyMatching: 0.0018) exact match</div>
110+
<div>d=3: LER = 0.0117 (PyMatching: 0.0117) - exact match</div>
111+
<div>d=5: LER = 0.0079 (PyMatching: 0.0079) - exact match</div>
112+
<div>d=7: LER = 0.0051 (PyMatching: 0.0050) - exact match</div>
113+
<div>d=9: LER = 0.0030 (PyMatching: 0.0031) - exact match</div>
114+
<div>d=11: LER = 0.0018 (PyMatching: 0.0018) - exact match</div>
115115
</div>
116116
</div>
117117
<div className="card-surface">
@@ -132,13 +132,13 @@ export default function Benchmarks() {
132132
{/* Speed Comparison */}
133133
<div ref={(el) => addRef(el, 2)} className="card-surface">
134134
<h3 className="text-cyan-300 font-semibold mb-4">Speed Comparison (Relative to PyMatching)</h3>
135-
<p className="text-muted-foreground text-xs mb-4">Blossom figures are simulation-validated. Union-Find and GPU Batch figures are hardware-dependent regenerate locally before citing.</p>
135+
<p className="text-muted-foreground text-xs mb-4">Blossom figures are simulation-validated. Union-Find and GPU Batch figures are hardware-dependent - regenerate locally before citing.</p>
136136
<div className="space-y-4">
137137
{[
138138
{ label: 'QECTOR-Blossom (d=5)', factor: '6.9×', desc: 'Adaptive-k preprocessing reduces graph size before exact matching. Simulation-validated.' },
139139
{ label: 'QECTOR-Blossom (d=9)', factor: '7.7×', desc: 'Larger gains at higher distance due to sparser reduced graphs. Simulation-validated.' },
140140
{ label: 'Union-Find', factor: 'Faster', desc: 'Near-linear scaling; approximate but extremely fast. Exact multiplier is hardware-dependent.' },
141-
{ label: 'GPU Batch', factor: '6.97.7×+', desc: 'CUDA/OpenCL batch decoding; gains exceed CPU at suitable batch sizes. Bit-identical to CPU MWPM. Hardware-dependent.' },
141+
{ label: 'GPU Batch', factor: '6.9-7.7×+', desc: 'CUDA/OpenCL batch decoding; gains exceed CPU at suitable batch sizes. Bit-identical to CPU MWPM. Hardware-dependent.' },
142142
].map((item) => (
143143
<div key={item.label} className="flex items-center gap-4">
144144
<div className="flex-1">
@@ -155,7 +155,7 @@ export default function Benchmarks() {
155155
<div ref={(el) => addRef(el, 3)}>
156156
<InteractiveChart
157157
type="distance"
158-
title="LER vs Code Distance (d=311, p=0.001)"
158+
title="LER vs Code Distance (d=3-11, p=0.001)"
159159
subtitle="QECTOR-Blossom vs PyMatching · Circuit-level depolarizing noise · Rotated surface code"
160160
/>
161161
</div>

0 commit comments

Comments
 (0)