[
    {
        "page": 1,
        "items": [
            {
                "page": 1,
                "type": "TEXT",
                "location": {
                    "l": 29.28,
                    "t": 568.32,
                    "r": 226.56,
                    "b": 557.76
                },
                "text": "ARCHITECTURE & INTEGRATION MODEL",
                "reading_order": 0
            },
            {
                "page": 1,
                "type": "TITLE",
                "location": {
                    "l": 29.52,
                    "t": 549.36,
                    "r": 372.96,
                    "b": 519.84
                },
                "text": "Split Deployment — France",
                "reading_order": 1,
                "level": 2
            },
            {
                "page": 1,
                "type": "TEXT",
                "location": {
                    "l": 29.04,
                    "t": 515.04,
                    "r": 540.24,
                    "b": 488.16
                },
                "text": "Their data plane and our analysis plane both run in France, on separate hardware, joined only by a federated message link.\nPROPOSED",
                "reading_order": 2
            },
            {
                "page": 1,
                "type": "TITLE",
                "location": {
                    "l": 42,
                    "t": 446.64,
                    "r": 337.68,
                    "b": 418.08
                },
                "text": "Their infrastructure\nDATA PLANE · FRANCE · THEIR HARDWARE · THEIR DPA · STATEFUL",
                "reading_order": 3,
                "level": 4
            },
            {
                "page": 1,
                "type": "TEXT",
                "location": {
                    "l": 671.28,
                    "t": 504.72,
                    "r": 803.52,
                    "b": 493.68
                },
                "text": "PROPOSED | AUGUST 2026",
                "reading_order": 4
            },
            {
                "page": 1,
                "type": "TITLE",
                "location": {
                    "l": 480.48,
                    "t": 446.64,
                    "r": 777.36,
                    "b": 418.32
                },
                "text": "Our infrastructure\nANALYSIS PLANE · FRANCE · OUR HARDWARE · OUR IP · STATELESS",
                "reading_order": 5,
                "level": 4
            },
            {
                "page": 1,
                "type": "TEXT",
                "location": {
                    "l": 387.84,
                    "t": 427.44,
                    "r": 453.84,
                    "b": 364.08
                },
                "text": "PRIVATE LINK\nmTLS\nfederation\nWireGuard\nor IPsec",
                "reading_order": 6
            },
            {
                "page": 1,
                "type": "TEXT",
                "location": {
                    "l": 42.24,
                    "t": 400.8,
                    "r": 358.32,
                    "b": 358.8
                },
                "text": "Gateway, 40+ frontends, ~30 data services, MySQL, object store and their own broker. Every finding, screenshot, document, PII analysis and user account lives here.\nPRIVATE LINK\nmTLS\nfederation\nWireGuard\nor IPsec",
                "reading_order": 7
            },
            {
                "page": 1,
                "type": "TEXT",
                "location": {
                    "l": 481.68,
                    "t": 401.04,
                    "r": 777.84,
                    "b": 359.28
                },
                "text": "Broker, crawler fleet, engine-service, ai-facade and Redis. It holds the tests and prompts and nothing else — no findings, no accounts, no documents.",
                "reading_order": 8
            },
            {
                "page": 1,
                "type": "TEXT",
                "location": {
                    "l": 45.36,
                    "t": 352.32,
                    "r": 354.96,
                    "b": 331.92
                },
                "text": "Traefik gateway accounts-api 40+ frontends",
                "reading_order": 9
            },
            {
                "page": 1,
                "type": "TEXT",
                "location": {
                    "l": 45.36,
                    "t": 331.92,
                    "r": 354.96,
                    "b": 311.52
                },
                "text": "~30 data services MySQL 8.4 object store their broker",
                "reading_order": 10
            },
            {
                "page": 1,
                "type": "TEXT",
                "location": {
                    "l": 45.36,
                    "t": 311.52,
                    "r": 354.96,
                    "b": 291.12
                },
                "text": "DETAIL ON PAGE 2",
                "reading_order": 11
            },
            {
                "page": 1,
                "type": "TEXT",
                "location": {
                    "l": 396.24,
                    "t": 334.08,
                    "r": 447.6,
                    "b": 315.6
                },
                "text": "← verdicts crawl jobs",
                "reading_order": 12
            },
            {
                "page": 1,
                "type": "FIGURE",
                "location": {
                    "l": 457.44,
                    "t": 347.28,
                    "r": 465.84,
                    "b": 338.16
                },
                "text": "",
                "reading_order": 13
            },
            {
                "page": 1,
                "type": "TEXT",
                "location": {
                    "l": 489.6,
                    "t": 348.96,
                    "r": 705.36,
                    "b": 337.68
                },
                "text": "our broker crawler-manager crawler × 10",
                "reading_order": 14
            },
            {
                "page": 1,
                "type": "TEXT",
                "location": {
                    "l": 555.84,
                    "t": 348.96,
                    "r": 792,
                    "b": 337.2
                },
                "text": "crawler-manager | crawler x10 | engine-service",
                "reading_order": 15
            },
            {
                "page": 1,
                "type": "TEXT",
                "location": {
                    "l": 489.6,
                    "t": 327.6,
                    "r": 579.36,
                    "b": 315.84
                },
                "text": "ai-facade Redis",
                "reading_order": 16
            },
            {
                "page": 1,
                "type": "TEXT",
                "location": {
                    "l": 482.4,
                    "t": 306.24,
                    "r": 569.76,
                    "b": 295.44
                },
                "text": "DETAIL ON PAGE 3",
                "reading_order": 17
            },
            {
                "page": 1,
                "type": "TABLE",
                "location": {
                    "l": 38.16,
                    "t": 259.2,
                    "r": 803.76,
                    "b": 120.72
                },
                "text": "<table><tr><td>WHERE THE LINE FALLS</td><td>ANALYSIS PLANE - OURS</td><td>DATA PLANE - THEIRS</td></tr><tr><td>Holds</td><td>Tests, crawler, AI prompts</td><td>Every result, document, screenshot, account</td></tr><tr><td>State</td><td>None that survives a restart</td><td>All of it</td></tr><tr><td>Reachable by</td><td>Their broker, over the private link</td><td>Their browsers, directly</td></tr><tr><td>If they leave</td><td>We keep the IP</td><td>They keep their data</td></tr></table>",
                "rows": [
                    {
                        "row_index": 0,
                        "location": [
                            38.16,
                            231.504,
                            803.76,
                            259.2
                        ],
                        "cells": [
                            {
                                "location": [
                                    38.16,
                                    231.504,
                                    293.36,
                                    259.2
                                ],
                                "text": "WHERE THE LINE FALLS",
                                "html_text": "WHERE THE LINE FALLS",
                                "links": [],
                                "cell_header_index": 0,
                                "rowspan": 1,
                                "colspan": 1,
                                "column_header": false,
                                "row_header": true,
                                "placeholder": false,
                                "ref": "#/tables/1"
                            },
                            {
                                "location": [
                                    293.36,
                                    231.504,
                                    548.56,
                                    259.2
                                ],
                                "text": "ANALYSIS PLANE - OURS",
                                "html_text": "ANALYSIS PLANE - OURS",
                                "links": [],
                                "cell_header_index": 1,
                                "rowspan": 1,
                                "colspan": 1,
                                "column_header": false,
                                "row_header": false,
                                "placeholder": false,
                                "ref": "#/tables/1"
                            },
                            {
                                "location": [
                                    548.56,
                                    231.504,
                                    803.76,
                                    259.2
                                ],
                                "text": "DATA PLANE - THEIRS",
                                "html_text": "DATA PLANE - THEIRS",
                                "links": [],
                                "cell_header_index": 2,
                                "rowspan": 1,
                                "colspan": 1,
                                "column_header": false,
                                "row_header": false,
                                "placeholder": false,
                                "ref": "#/tables/1"
                            }
                        ],
                        "ref": "#/tables/1"
                    },
                    {
                        "row_index": 1,
                        "location": [
                            38.16,
                            203.808,
                            803.76,
                            231.504
                        ],
                        "cells": [
                            {
                                "location": [
                                    38.16,
                                    203.808,
                                    293.36,
                                    231.504
                                ],
                                "text": "Holds",
                                "html_text": "Holds",
                                "links": [],
                                "cell_header_index": 0,
                                "rowspan": 1,
                                "colspan": 1,
                                "column_header": false,
                                "row_header": true,
                                "placeholder": false,
                                "ref": "#/tables/1"
                            },
                            {
                                "location": [
                                    293.36,
                                    203.808,
                                    548.56,
                                    231.504
                                ],
                                "text": "Tests, crawler, AI prompts",
                                "html_text": "Tests, crawler, AI prompts",
                                "links": [],
                                "cell_header_index": 1,
                                "rowspan": 1,
                                "colspan": 1,
                                "column_header": false,
                                "row_header": false,
                                "placeholder": false,
                                "ref": "#/tables/1"
                            },
                            {
                                "location": [
                                    548.56,
                                    203.808,
                                    803.76,
                                    231.504
                                ],
                                "text": "Every result, document, screenshot, account",
                                "html_text": "Every result, document, screenshot, account",
                                "links": [],
                                "cell_header_index": 2,
                                "rowspan": 1,
                                "colspan": 1,
                                "column_header": false,
                                "row_header": false,
                                "placeholder": false,
                                "ref": "#/tables/1"
                            }
                        ],
                        "ref": "#/tables/1"
                    },
                    {
                        "row_index": 2,
                        "location": [
                            38.16,
                            176.112,
                            803.76,
                            203.808
                        ],
                        "cells": [
                            {
                                "location": [
                                    38.16,
                                    176.112,
                                    293.36,
                                    203.808
                                ],
                                "text": "State",
                                "html_text": "State",
                                "links": [],
                                "cell_header_index": 0,
                                "rowspan": 1,
                                "colspan": 1,
                                "column_header": false,
                                "row_header": true,
                                "placeholder": false,
                                "ref": "#/tables/1"
                            },
                            {
                                "location": [
                                    293.36,
                                    176.112,
                                    548.56,
                                    203.808
                                ],
                                "text": "None that survives a restart",
                                "html_text": "None that survives a restart",
                                "links": [],
                                "cell_header_index": 1,
                                "rowspan": 1,
                                "colspan": 1,
                                "column_header": false,
                                "row_header": false,
                                "placeholder": false,
                                "ref": "#/tables/1"
                            },
                            {
                                "location": [
                                    548.56,
                                    176.112,
                                    803.76,
                                    203.808
                                ],
                                "text": "All of it",
                                "html_text": "All of it",
                                "links": [],
                                "cell_header_index": 2,
                                "rowspan": 1,
                                "colspan": 1,
                                "column_header": false,
                                "row_header": false,
                                "placeholder": false,
                                "ref": "#/tables/1"
                            }
                        ],
                        "ref": "#/tables/1"
                    },
                    {
                        "row_index": 3,
                        "location": [
                            38.16,
                            148.416,
                            803.76,
                            176.112
                        ],
                        "cells": [
                            {
                                "location": [
                                    38.16,
                                    148.416,
                                    293.36,
                                    176.112
                                ],
                                "text": "Reachable by",
                                "html_text": "Reachable by",
                                "links": [],
                                "cell_header_index": 0,
                                "rowspan": 1,
                                "colspan": 1,
                                "column_header": false,
                                "row_header": true,
                                "placeholder": false,
                                "ref": "#/tables/1"
                            },
                            {
                                "location": [
                                    293.36,
                                    148.416,
                                    548.56,
                                    176.112
                                ],
                                "text": "Their broker, over the private link",
                                "html_text": "Their broker, over the private link",
                                "links": [],
                                "cell_header_index": 1,
                                "rowspan": 1,
                                "colspan": 1,
                                "column_header": false,
                                "row_header": false,
                                "placeholder": false,
                                "ref": "#/tables/1"
                            },
                            {
                                "location": [
                                    548.56,
                                    148.416,
                                    803.76,
                                    176.112
                                ],
                                "text": "Their browsers, directly",
                                "html_text": "Their browsers, directly",
                                "links": [],
                                "cell_header_index": 2,
                                "rowspan": 1,
                                "colspan": 1,
                                "column_header": false,
                                "row_header": false,
                                "placeholder": false,
                                "ref": "#/tables/1"
                            }
                        ],
                        "ref": "#/tables/1"
                    },
                    {
                        "row_index": 4,
                        "location": [
                            38.16,
                            120.72,
                            803.76,
                            148.416
                        ],
                        "cells": [
                            {
                                "location": [
                                    38.16,
                                    120.72,
                                    293.36,
                                    148.416
                                ],
                                "text": "If they leave",
                                "html_text": "If they leave",
                                "links": [],
                                "cell_header_index": 0,
                                "rowspan": 1,
                                "colspan": 1,
                                "column_header": false,
                                "row_header": true,
                                "placeholder": false,
                                "ref": "#/tables/1"
                            },
                            {
                                "location": [
                                    293.36,
                                    120.72,
                                    548.56,
                                    148.416
                                ],
                                "text": "We keep the IP",
                                "html_text": "We keep the IP",
                                "links": [],
                                "cell_header_index": 1,
                                "rowspan": 1,
                                "colspan": 1,
                                "column_header": false,
                                "row_header": false,
                                "placeholder": false,
                                "ref": "#/tables/1"
                            },
                            {
                                "location": [
                                    548.56,
                                    120.72,
                                    803.76,
                                    148.416
                                ],
                                "text": "They keep their data",
                                "html_text": "They keep their data",
                                "links": [],
                                "cell_header_index": 2,
                                "rowspan": 1,
                                "colspan": 1,
                                "column_header": false,
                                "row_header": false,
                                "placeholder": false,
                                "ref": "#/tables/1"
                            }
                        ],
                        "ref": "#/tables/1"
                    }
                ],
                "n_rows": 5,
                "n_cols": 3,
                "ref": "#/tables/1",
                "reading_order": 18
            },
            {
                "page": 1,
                "type": "TEXT",
                "location": {
                    "l": 359.52,
                    "t": 36.24,
                    "r": 685.2,
                    "b": 27.12
                },
                "text": "BLUE = THEIR HARDWARE, THEIR DPA · AMBER = OUR HARDWARE, OUR IP",
                "reading_order": 19
            }
        ]
    },
    {
        "page": 2,
        "items": [
            {
                "page": 2,
                "type": "TITLE",
                "location": {
                    "l": 44.16,
                    "t": 553.92,
                    "r": 402.24,
                    "b": 537.12
                },
                "text": "Their infrastructure — what runs on their server",
                "reading_order": 0,
                "level": 3
            },
            {
                "page": 2,
                "type": "TITLE",
                "location": {
                    "l": 43.92,
                    "t": 533.28,
                    "r": 309.6,
                    "b": 522.24
                },
                "text": "DATA PLANE · FRANCE · THEIR HARDWARE · THEIR DPA",
                "reading_order": 1,
                "level": 5
            },
            {
                "page": 2,
                "type": "FIGURE",
                "location": {
                    "l": 33.84,
                    "t": 495.36,
                    "r": 471.36,
                    "b": 205.68
                },
                "text": "",
                "reading_order": 2
            },
            {
                "page": 2,
                "type": "TITLE",
                "location": {
                    "l": 41.28,
                    "t": 490.08,
                    "r": 221.28,
                    "b": 475.92
                },
                "text": "Their staff browsers, inside their estate",
                "reading_order": 3,
                "level": 4
            },
            {
                "page": 2,
                "type": "TITLE",
                "location": {
                    "l": 443.04,
                    "t": 488.4,
                    "r": 471.84,
                    "b": 478.8
                },
                "text": "HTTPS",
                "reading_order": 4,
                "level": 5
            },
            {
                "page": 2,
                "type": "TITLE",
                "location": {
                    "l": 41.76,
                    "t": 446.64,
                    "r": 127.68,
                    "b": 432
                },
                "text": "Traefik gateway",
                "reading_order": 5,
                "level": 4
            },
            {
                "page": 2,
                "type": "TITLE",
                "location": {
                    "l": 40.56,
                    "t": 378.96,
                    "r": 118.56,
                    "b": 364.8
                },
                "text": "40+ frontends",
                "reading_order": 6,
                "level": 4
            },
            {
                "page": 2,
                "type": "TITLE",
                "location": {
                    "l": 41.52,
                    "t": 332.4,
                    "r": 116.4,
                    "b": 318.96
                },
                "text": "Data services",
                "reading_order": 7,
                "level": 4
            },
            {
                "page": 2,
                "type": "TITLE",
                "location": {
                    "l": 39.84,
                    "t": 240.72,
                    "r": 96,
                    "b": 227.04
                },
                "text": "MySQL 8.4",
                "reading_order": 8,
                "level": 4
            },
            {
                "page": 2,
                "type": "TITLE",
                "location": {
                    "l": 188.88,
                    "t": 240.48,
                    "r": 252.24,
                    "b": 227.04
                },
                "text": "Object store",
                "reading_order": 9,
                "level": 4
            },
            {
                "page": 2,
                "type": "TEXT",
                "location": {
                    "l": 39.6,
                    "t": 224.88,
                    "r": 150,
                    "b": 214.08
                },
                "text": "16 schemas, one per service",
                "reading_order": 10
            },
            {
                "page": 2,
                "type": "TITLE",
                "location": {
                    "l": 495.84,
                    "t": 488.4,
                    "r": 615.36,
                    "b": 477.6
                },
                "text": "EVERYTHING STORED HERE",
                "reading_order": 11,
                "level": 5
            },
            {
                "page": 2,
                "type": "TEXT",
                "location": {
                    "l": 494.64,
                    "t": 471.36,
                    "r": 798,
                    "b": 430.32
                },
                "text": "Findings, screenshots, documents, PII analysis, remediation tracking and every user account — on infrastructure they own, under their own DPA.",
                "reading_order": 12
            },
            {
                "page": 2,
                "type": "TITLE",
                "location": {
                    "l": 495.84,
                    "t": 396.96,
                    "r": 593.04,
                    "b": 383.04
                },
                "text": "What they control",
                "reading_order": 13,
                "level": 4
            },
            {
                "page": 2,
                "type": "TEXT",
                "location": {
                    "l": 495.6,
                    "t": 376.56,
                    "r": 750.48,
                    "b": 363.36
                },
                "text": "Database backups, access controls and disaster recovery.",
                "reading_order": 14
            },
            {
                "page": 2,
                "type": "TEXT",
                "location": {
                    "l": 495.36,
                    "t": 356.16,
                    "r": 784.56,
                    "b": 328.8
                },
                "text": "No analytics and no telemetry leave this estate — we cannot read their results.",
                "reading_order": 15
            },
            {
                "page": 2,
                "type": "TEXT",
                "location": {
                    "l": 495.36,
                    "t": 321.12,
                    "r": 774.48,
                    "b": 294.24
                },
                "text": "Single-jurisdiction infrastructure: no multi-region replication to reason about.",
                "reading_order": 16
            },
            {
                "page": 2,
                "type": "TITLE",
                "location": {
                    "l": 496.32,
                    "t": 262.08,
                    "r": 589.44,
                    "b": 251.04
                },
                "text": "HOW THEY REACH US",
                "reading_order": 17,
                "level": 5
            },
            {
                "page": 2,
                "type": "TEXT",
                "location": {
                    "l": 494.16,
                    "t": 246.96,
                    "r": 794.16,
                    "b": 218.88
                },
                "text": "They never call us over HTTP. Their frontends and services talk only to their own broker; the broker federates across the private link.",
                "reading_order": 18
            }
        ]
    },
    {
        "page": 3,
        "items": [
            {
                "page": 3,
                "type": "TITLE",
                "location": {
                    "l": 44.4,
                    "t": 553.44,
                    "r": 380.64,
                    "b": 537.12
                },
                "text": "Our infrastructure — what runs on our server",
                "reading_order": 0,
                "level": 3
            },
            {
                "page": 3,
                "type": "TEXT",
                "location": {
                    "l": 732.24,
                    "t": 545.52,
                    "r": 788.16,
                    "b": 534.72
                },
                "text": "STATELESS",
                "reading_order": 1
            },
            {
                "page": 3,
                "type": "TITLE",
                "location": {
                    "l": 43.68,
                    "t": 533.52,
                    "r": 303.84,
                    "b": 522.24
                },
                "text": "ANALYSIS PLANE · FRANCE · OUR HARDWARE · OUR IP",
                "reading_order": 2,
                "level": 5
            },
            {
                "page": 3,
                "type": "TITLE",
                "location": {
                    "l": 43.2,
                    "t": 487.44,
                    "r": 163.44,
                    "b": 473.52
                },
                "text": "Our RabbitMQ broker",
                "reading_order": 3,
                "level": 4
            },
            {
                "page": 3,
                "type": "TITLE",
                "location": {
                    "l": 400.8,
                    "t": 480.24,
                    "r": 451.68,
                    "b": 469.2
                },
                "text": "FEDERATED",
                "reading_order": 4,
                "level": 5
            },
            {
                "page": 3,
                "type": "TEXT",
                "location": {
                    "l": 42.96,
                    "t": 471.6,
                    "r": 197.52,
                    "b": 460.8
                },
                "text": "publishes results out · never stores them",
                "reading_order": 5
            },
            {
                "page": 3,
                "type": "TITLE",
                "location": {
                    "l": 496.8,
                    "t": 488.16,
                    "r": 599.76,
                    "b": 477.6
                },
                "text": "NOTHING STORED HERE",
                "reading_order": 6,
                "level": 5
            },
            {
                "page": 3,
                "type": "TEXT",
                "location": {
                    "l": 494.4,
                    "t": 471.36,
                    "r": 792.48,
                    "b": 430.32
                },
                "text": "No findings, no accounts, no documents. Their data never travels to or resides on our infrastructure — which is why no code disclosure is needed.",
                "reading_order": 7
            },
            {
                "page": 3,
                "type": "TEXT",
                "location": {
                    "l": 40.56,
                    "t": 429.12,
                    "r": 326.4,
                    "b": 415.92
                },
                "text": "crawler × 10",
                "reading_order": 8
            },
            {
                "page": 3,
                "type": "TEXT",
                "location": {
                    "l": 40.8,
                    "t": 413.76,
                    "r": 378.24,
                    "b": 402.48
                },
                "text": "assigns crawl slots renders pages · runs 6 passes",
                "reading_order": 9
            },
            {
                "page": 3,
                "type": "TEXT",
                "location": {
                    "l": 496.08,
                    "t": 398.64,
                    "r": 571.44,
                    "b": 387.6
                },
                "text": "OUTBOUND HTTPS",
                "reading_order": 10
            },
            {
                "page": 3,
                "type": "TITLE",
                "location": {
                    "l": 41.28,
                    "t": 377.52,
                    "r": 116.64,
                    "b": 364.8
                },
                "text": "engine-service",
                "reading_order": 11,
                "level": 4
            },
            {
                "page": 3,
                "type": "TITLE",
                "location": {
                    "l": 264.24,
                    "t": 377.52,
                    "r": 313.92,
                    "b": 365.28
                },
                "text": "ai-facade",
                "reading_order": 12,
                "level": 4
            },
            {
                "page": 3,
                "type": "TEXT",
                "location": {
                    "l": 41.04,
                    "t": 362.16,
                    "r": 345.12,
                    "b": 350.64
                },
                "text": "single-URL scans holds the prompt set",
                "reading_order": 13
            },
            {
                "page": 3,
                "type": "TITLE",
                "location": {
                    "l": 41.04,
                    "t": 321.12,
                    "r": 72,
                    "b": 308.88
                },
                "text": "Redis",
                "reading_order": 14,
                "level": 4
            },
            {
                "page": 3,
                "type": "TEXT",
                "location": {
                    "l": 240.72,
                    "t": 319.44,
                    "r": 461.52,
                    "b": 308.64
                },
                "text": "frontier · seen-set · slot queue — nothing survives a restart",
                "reading_order": 15
            },
            {
                "page": 3,
                "type": "TITLE",
                "location": {
                    "l": 496.32,
                    "t": 384.48,
                    "r": 604.08,
                    "b": 371.28
                },
                "text": "Their public websites",
                "reading_order": 16,
                "level": 4
            },
            {
                "page": 3,
                "type": "TEXT",
                "location": {
                    "l": 495.12,
                    "t": 368.16,
                    "r": 682.08,
                    "b": 355.68
                },
                "text": "the pages under test, fetched by the crawlers",
                "reading_order": 17
            },
            {
                "page": 3,
                "type": "TITLE",
                "location": {
                    "l": 496.32,
                    "t": 326.64,
                    "r": 581.28,
                    "b": 315.6
                },
                "text": "OUTBOUND HTTPS ▲",
                "reading_order": 18,
                "level": 5
            },
            {
                "page": 3,
                "type": "TITLE",
                "location": {
                    "l": 496.08,
                    "t": 312.24,
                    "r": 537.84,
                    "b": 299.28
                },
                "text": "OpenAI",
                "reading_order": 19,
                "level": 4
            },
            {
                "page": 3,
                "type": "TEXT",
                "location": {
                    "l": 494.88,
                    "t": 295.92,
                    "r": 790.32,
                    "b": 270.72
                },
                "text": "Calls may include page content. Their DPO should review OpenAI's DPA, or AI features can be disabled.",
                "reading_order": 20
            },
            {
                "page": 3,
                "type": "TITLE",
                "location": {
                    "l": 43.44,
                    "t": 275.76,
                    "r": 174.72,
                    "b": 264.48
                },
                "text": "★ NEVER LEAVES THIS BOX",
                "reading_order": 21,
                "level": 5
            },
            {
                "page": 3,
                "type": "TEXT",
                "location": {
                    "l": 48.48,
                    "t": 254.88,
                    "r": 370.8,
                    "b": 242.16
                },
                "text": "content analyzer\nSEO / GEO analyzers",
                "reading_order": 22
            },
            {
                "page": 3,
                "type": "TEXT",
                "location": {
                    "l": 49.68,
                    "t": 254.64,
                    "r": 158.4,
                    "b": 242.64
                },
                "text": "86 WCAG SC test files",
                "reading_order": 23
            },
            {
                "page": 3,
                "type": "TEXT",
                "location": {
                    "l": 48.48,
                    "t": 231.36,
                    "r": 410.16,
                    "b": 219.12
                },
                "text": "PDF remediation engine",
                "reading_order": 24
            },
            {
                "page": 3,
                "type": "TEXT",
                "location": {
                    "l": 49.92,
                    "t": 230.88,
                    "r": 281.52,
                    "b": 219.36
                },
                "text": "web security analyzer data privacy analyzer",
                "reading_order": 25
            },
            {
                "page": 3,
                "type": "TEXT",
                "location": {
                    "l": 50.16,
                    "t": 208.32,
                    "r": 119.28,
                    "b": 196.56
                },
                "text": "AI prompt set",
                "reading_order": 26
            },
            {
                "page": 3,
                "type": "TEXT",
                "location": {
                    "l": 42,
                    "t": 185.28,
                    "r": 426,
                    "b": 159.6
                },
                "text": "Not compiled into their binaries, not shipped as an image they can inspect, not present in their database. They receive verdicts only.",
                "reading_order": 27
            }
        ]
    },
    {
        "page": 4,
        "items": [
            {
                "page": 4,
                "type": "TITLE",
                "location": {
                    "l": 30.24,
                    "t": 564.72,
                    "r": 210.72,
                    "b": 545.28
                },
                "text": "One crawl, end to end",
                "reading_order": 0,
                "level": 3
            },
            {
                "page": 4,
                "type": "TEXT",
                "location": {
                    "l": 218.16,
                    "t": 558.96,
                    "r": 513.84,
                    "b": 545.76
                },
                "text": "every step stays in France; the only crossing is the federated queue",
                "reading_order": 1
            },
            {
                "page": 4,
                "type": "TITLE",
                "location": {
                    "l": 40.08,
                    "t": 506.64,
                    "r": 59.52,
                    "b": 492.48
                },
                "text": "01",
                "reading_order": 2,
                "level": 4
            },
            {
                "page": 4,
                "type": "TITLE",
                "location": {
                    "l": 178.32,
                    "t": 504.24,
                    "r": 206.88,
                    "b": 494.16
                },
                "text": "THEIRS",
                "reading_order": 3,
                "level": 5
            },
            {
                "page": 4,
                "type": "TITLE",
                "location": {
                    "l": 237.36,
                    "t": 506.4,
                    "r": 256.08,
                    "b": 492.24
                },
                "text": "02",
                "reading_order": 4,
                "level": 4
            },
            {
                "page": 4,
                "type": "TITLE",
                "location": {
                    "l": 374.64,
                    "t": 504.24,
                    "r": 404.4,
                    "b": 494.16
                },
                "text": "THEIRS",
                "reading_order": 5,
                "level": 5
            },
            {
                "page": 4,
                "type": "TITLE",
                "location": {
                    "l": 433.92,
                    "t": 506.64,
                    "r": 452.88,
                    "b": 492.24
                },
                "text": "03",
                "reading_order": 6,
                "level": 4
            },
            {
                "page": 4,
                "type": "FIGURE",
                "location": {
                    "l": 576.48,
                    "t": 505.2,
                    "r": 602.64,
                    "b": 492.96
                },
                "text": "",
                "reading_order": 7
            },
            {
                "page": 4,
                "type": "TITLE",
                "location": {
                    "l": 630.72,
                    "t": 506.4,
                    "r": 649.44,
                    "b": 492.48
                },
                "text": "04",
                "reading_order": 8,
                "level": 4
            },
            {
                "page": 4,
                "type": "TITLE",
                "location": {
                    "l": 774.72,
                    "t": 504.24,
                    "r": 797.76,
                    "b": 493.92
                },
                "text": "OURS",
                "reading_order": 9,
                "level": 5
            },
            {
                "page": 4,
                "type": "TITLE",
                "location": {
                    "l": 39.84,
                    "t": 486,
                    "r": 119.28,
                    "b": 473.28
                },
                "text": "Scan requested",
                "reading_order": 10,
                "level": 4
            },
            {
                "page": 4,
                "type": "TITLE",
                "location": {
                    "l": 237.12,
                    "t": 486,
                    "r": 341.28,
                    "b": 473.28
                },
                "text": "Job onto their queue",
                "reading_order": 11,
                "level": 4
            },
            {
                "page": 4,
                "type": "TITLE",
                "location": {
                    "l": 433.44,
                    "t": 485.76,
                    "r": 521.28,
                    "b": 474
                },
                "text": "Federated across",
                "reading_order": 12,
                "level": 5
            },
            {
                "page": 4,
                "type": "TITLE",
                "location": {
                    "l": 630.24,
                    "t": 486.24,
                    "r": 703.68,
                    "b": 473.04
                },
                "text": "Slots assigned",
                "reading_order": 13,
                "level": 4
            },
            {
                "page": 4,
                "type": "TEXT",
                "location": {
                    "l": 39.6,
                    "t": 468,
                    "r": 409.68,
                    "b": 443.76
                },
                "text": "A user in their UI asks for a crawl; the data service records the job.\nThe request is published to their broker — no HTTP call to us.",
                "reading_order": 14
            },
            {
                "page": 4,
                "type": "TEXT",
                "location": {
                    "l": 433.2,
                    "t": 468.24,
                    "r": 597.36,
                    "b": 444.48
                },
                "text": "The job crosses the mTLS private link to our broker.",
                "reading_order": 15
            },
            {
                "page": 4,
                "type": "TEXT",
                "location": {
                    "l": 630,
                    "t": 468,
                    "r": 789.6,
                    "b": 444
                },
                "text": "crawler-manager claims a slot in Redis and dispatches crawlers.",
                "reading_order": 16
            },
            {
                "page": 4,
                "type": "TITLE",
                "location": {
                    "l": 40.32,
                    "t": 405.36,
                    "r": 59.52,
                    "b": 391.2
                },
                "text": "05",
                "reading_order": 17,
                "level": 4
            },
            {
                "page": 4,
                "type": "TITLE",
                "location": {
                    "l": 237.36,
                    "t": 405.12,
                    "r": 255.6,
                    "b": 390.96
                },
                "text": "06",
                "reading_order": 18,
                "level": 4
            },
            {
                "page": 4,
                "type": "TITLE",
                "location": {
                    "l": 433.92,
                    "t": 405.36,
                    "r": 452.64,
                    "b": 390.96
                },
                "text": "07",
                "reading_order": 19,
                "level": 4
            },
            {
                "page": 4,
                "type": "TITLE",
                "location": {
                    "l": 630.96,
                    "t": 408.24,
                    "r": 682.32,
                    "b": 399.36
                },
                "text": "NET EFFECT",
                "reading_order": 20,
                "level": 6
            },
            {
                "page": 4,
                "type": "FIGURE",
                "location": {
                    "l": 183.6,
                    "t": 403.44,
                    "r": 208.32,
                    "b": 392.4
                },
                "text": "",
                "reading_order": 21
            },
            {
                "page": 4,
                "type": "FIGURE",
                "location": {
                    "l": 380.16,
                    "t": 403.44,
                    "r": 406.08,
                    "b": 392.16
                },
                "text": "",
                "reading_order": 22
            },
            {
                "page": 4,
                "type": "TITLE",
                "location": {
                    "l": 570.24,
                    "t": 402.72,
                    "r": 601.2,
                    "b": 393.36
                },
                "text": "THEIRS",
                "reading_order": 23,
                "level": 6
            },
            {
                "page": 4,
                "type": "TITLE",
                "location": {
                    "l": 39.84,
                    "t": 384.72,
                    "r": 114.24,
                    "b": 372.24
                },
                "text": "Six passes run",
                "reading_order": 24,
                "level": 4
            },
            {
                "page": 4,
                "type": "TITLE",
                "location": {
                    "l": 236.88,
                    "t": 384.96,
                    "r": 330.96,
                    "b": 371.76
                },
                "text": "Verdicts published",
                "reading_order": 25,
                "level": 4
            },
            {
                "page": 4,
                "type": "TITLE",
                "location": {
                    "l": 433.44,
                    "t": 384.96,
                    "r": 524.88,
                    "b": 372.24
                },
                "text": "Stored and shown",
                "reading_order": 26,
                "level": 4
            },
            {
                "page": 4,
                "type": "TEXT",
                "location": {
                    "l": 39.36,
                    "t": 366.72,
                    "r": 203.28,
                    "b": 329.52
                },
                "text": "Crawlers fetch their public pages and run WCAG, Content, SEO, GEO, Security and Privacy.",
                "reading_order": 27
            },
            {
                "page": 4,
                "type": "TEXT",
                "location": {
                    "l": 235.68,
                    "t": 366.72,
                    "r": 406.08,
                    "b": 342.72
                },
                "text": "Structured results — not rules — federate back to their broker.",
                "reading_order": 28
            },
            {
                "page": 4,
                "type": "TEXT",
                "location": {
                    "l": 433.44,
                    "t": 366.72,
                    "r": 593.76,
                    "b": 342.48
                },
                "text": "Their data services write to MySQL and the object store; the UI updates.",
                "reading_order": 29
            },
            {
                "page": 4,
                "type": "TEXT",
                "location": {
                    "l": 630.72,
                    "t": 395.04,
                    "r": 769.2,
                    "b": 382.8
                },
                "text": "Verdicts move, data doesn't",
                "reading_order": 30
            },
            {
                "page": 4,
                "type": "TEXT",
                "location": {
                    "l": 630.72,
                    "t": 376.8,
                    "r": 791.28,
                    "b": 352.56
                },
                "text": "They hold every byte of customer data; we hold every line of analysis IP.",
                "reading_order": 31
            },
            {
                "page": 4,
                "type": "TITLE",
                "location": {
                    "l": 43.68,
                    "t": 291.36,
                    "r": 146.16,
                    "b": 275.76
                },
                "text": "Why this holds up",
                "reading_order": 32,
                "level": 3
            },
            {
                "page": 4,
                "type": "TITLE",
                "location": {
                    "l": 440.16,
                    "t": 291.12,
                    "r": 513.12,
                    "b": 276.24
                },
                "text": "If they leave",
                "reading_order": 33,
                "level": 4
            },
            {
                "page": 4,
                "type": "TEXT",
                "location": {
                    "l": 42.24,
                    "t": 267.6,
                    "r": 396.96,
                    "b": 254.4
                },
                "text": "No shared secrets — the link authenticates with mTLS certificates, not API keys.",
                "reading_order": 34
            },
            {
                "page": 4,
                "type": "TEXT",
                "location": {
                    "l": 438.96,
                    "t": 267.6,
                    "r": 755.52,
                    "b": 240.48
                },
                "text": "They export findings, evidence and remediation tracking from their own data services.",
                "reading_order": 35
            },
            {
                "page": 4,
                "type": "TEXT",
                "location": {
                    "l": 42.96,
                    "t": 246.72,
                    "r": 375.6,
                    "b": 219.12
                },
                "text": "No API exposure — our analysis services answer no HTTP; the queue is the only door.",
                "reading_order": 36
            },
            {
                "page": 4,
                "type": "TEXT",
                "location": {
                    "l": 439.2,
                    "t": 232.8,
                    "r": 765.36,
                    "b": 219.12
                },
                "text": "We stop publishing to their queue and the private link is decommissioned.",
                "reading_order": 37
            },
            {
                "page": 4,
                "type": "TEXT",
                "location": {
                    "l": 42.96,
                    "t": 211.44,
                    "r": 360.24,
                    "b": 198.24
                },
                "text": "Outage resilient — if the link drops, both queues buffer until it recovers.",
                "reading_order": 38
            },
            {
                "page": 4,
                "type": "TEXT",
                "location": {
                    "l": 439.44,
                    "t": 211.44,
                    "r": 752.16,
                    "b": 185.28
                },
                "text": "They keep every finding, screenshot, document and account – no data escrow needed.",
                "reading_order": 39
            },
            {
                "page": 4,
                "type": "TEXT",
                "location": {
                    "l": 42.96,
                    "t": 191.52,
                    "r": 379.92,
                    "b": 178.32
                },
                "text": "Independent audit — both brokers log federation, reviewable on either side.",
                "reading_order": 40
            },
            {
                "page": 4,
                "type": "TEXT",
                "location": {
                    "l": 43.2,
                    "t": 170.16,
                    "r": 383.04,
                    "b": 143.52
                },
                "text": "One exception — ai-facade calls OpenAI and may include page content; their DPO decides.",
                "reading_order": 41
            },
            {
                "page": 4,
                "type": "TEXT",
                "location": {
                    "l": 439.2,
                    "t": 177.36,
                    "r": 789.84,
                    "b": 163.68
                },
                "text": "We retain the full analysis IP; no code was ever disclosed, so none is recovered.",
                "reading_order": 42
            }
        ]
    }
]