dubai-01 evidence bundle
========================

Pilot study dubai-01. Pack dubai-brokerage-v1 (pack hash
fda99b65dcec970bf572e1c3c54630e44a1b838fe34af4cd2f9447ecdcea7359). Collected 2026-09-16
from the ChatGPT engine (web search forced, location United Arab Emirates, language en) via
DataForSEO. 50 runs: 10 prompts, 5 runs each. This bundle holds the raw responses, the ledger
tables, the pack, the resolver source, the resolution table, the hand-read ground truth and the
analysis tables the published figures were computed from.

Contents
--------

LICENSE                                 Apache License 2.0, for the code.
LICENSE-DATA                            CC BY 4.0, for everything else. See Licensing below.
responses/<prompt_id>/<run_index>.json  Raw API response for each run, original filenames,
                                        unmodified as stored at collection. runs.csv
                                        payload_sha256 is the SHA-256 of each file. The
                                        responses contain third-party business listings
                                        (names, addresses, phone numbers, ratings) reproduced
                                        as the engine returned them.
runs.csv, attempts.csv, mentions.csv    Ledger tables, every column, exported from SQLite.
pack/dubai-brokerage-v1.yaml            The pack all 50 runs used. Frozen in answer-census
                                        commit 330df4a2e02ae77315faf40b3ff658d367e25465,
                                        2026-09-16 10:43:08 +0800.
analysis/*.csv                          Instability analysis tables (resolved entities).
matcher/brokerage_census/               Resolver source.
matcher/geocensus/text/normalize.py     Name normalization the resolver imports. With
                                        matcher/ on PYTHONPATH, the resolution, register,
                                        listing and generic modules import on their own.
                                        identity.py and cli.py need the full geocensus package.
registry/brand_aliases.csv              Hand-researched brand to ORN aliases the resolver reads.
registry/name_classes.csv               Hand classes (not_a_firm, developer, portal and so on).
resolution.csv                          Every extracted candidate: resolution path, class,
                                        ORNs and registered name, with the rule or hand
                                        research that produced each match.
ground-truth/run_NN.names.txt           Hand read of 12 runs (sample A), one organisation
                                        name per line.
ground-truth/README.md                  What the ground truth is and where it came from.
ground-truth/index.csv                  Maps each names file to its run. Written for this
                                        bundle from the sample record.
ground-truth/handread-ground-truth.md   Provenance document for the names files, unedited.
scoring/RULE.md                         The scoring rule, committed before the scorer ran.
scoring/score_extraction.py             The scorer. It needs the full repo (ledger, raw
                                        register) to run.
scoring/results.csv                     One row per ground-truth name and per extracted
                                        name, per channel variant, with decision and reason.
scoring/summary.txt                     Recall and precision with Wilson 95% intervals.

Ground truth provenance
-----------------------

The hand read was done blind: the reader worked from the answer text and did not see the
extractor's output. The names files were not written by the reader. They were transcribed from
the session output where the reader pasted each block, collected in handread-ground-truth.md,
which marks the amendments applied during transcription and ends with the line "Do not run the
diff yet." The document is shipped as it stands.

Pack hash
---------

The pack hash is not the SHA-256 of the YAML file. It is the SHA-256 of this JSON object,
serialized with sorted keys, no whitespace (separators "," and ":"), non-ASCII left
unescaped, UTF-8 encoded: pack_id, engine, location_code, language_code, runs_per_prompt,
task_options, and prompts as a list of {id, text} in file order, with {variables} in each
text substituted from the pack's variables block.

File hashes
-----------

SHA-256 and size in bytes of every file in the bundle except this manifest, sorted by path.

LICENSE                                   c95bae1d1ce0235ecccd3560b772ec1efb97f348a79f0fbe0a634f0c2ccefe2c      11358
LICENSE-DATA                              71e2810b9cf2db29e251c0bd6fc7f0edbd4dfead2919141d71a247c8cda3d96a      19496
analysis/03_jaccard_pairs.csv             0049ce04af3c9c8f8619df24f6b0fe33abb4b3c7c09f6662c565c5e9f37c0ce8      10876
analysis/03_set_stats.csv                 9c833b177472c61c8c19cf365781b5f99a8aa1dd02afa9e3bed7914a7d0ce703       2256
analysis/04_edition_c.csv                 b6a3667e16ce232d9a10a2a337e7767314d229063e402f8c966237cde7fbe555        203
analysis/05_position1_by_entity_c.csv     b9d50d09a45edd1723280ef68196e5296a350eee63621e8e32a81b5b5656a716       1053
analysis/05_position1_by_prompt_c.csv     bafbe376dae3f8458d69f6462b8bf34ae6df94541d75fb6a07da7cc3f697f1e5       1629
analysis/05_position1_runs_c.csv          314306fd9f566fdd85238f617d1e7c1731029b614b1fbf5c4ee2a8ab2ed357d2       5278
analysis/06_reach_c.csv                   e5cd20ac4c224daae591213e38f022b6e732e6c9bc20a7c2170be6e236e74754      14433
analysis/07_candidate_counts_per_run.csv  f47a635e460fae7fd62d3880fe1fbfd3b778c7724cd42c7da8f6e52724df47e6       1221
attempts.csv                              fc0be68fadef4fe6e349df1a82ccd0975d9b15416c014ffda356db852336e72a      15650
ground-truth/README.md                    2286528d4ccd51f1aa75259d32209425562873f10374ae0c19964a6574b469d4       1425
ground-truth/handread-ground-truth.md     bf11b63aa86b37f58beb5a64e10a3402db587a1941a0c2b0efbf181ca62f4a54       5727
ground-truth/index.csv                    d34484397c0fdfca087c4b30d46fd0166a8ed6191b24d06391d38ea099dc593e        855
ground-truth/run_02.names.txt             ba02c8406bf886558e97a027454eb08b22e26539981ceab71dc9e1c741ab1956        204
ground-truth/run_03.names.txt             7241a2cbca1337e31ac1a689c6d26769effe7c72fbae85c2b9b9240400f2e5ab        216
ground-truth/run_04.names.txt             4259777b5b5be0f8561cf957ec12b1b70a3f3e81b6638df4d8be685a68e002c3         68
ground-truth/run_05.names.txt             20984d57113fc62573d4b4d1f5e0449ead4bf9092785e7b36b3dbb7c3e7d927d        184
ground-truth/run_06.names.txt             5a18a3970ebc229f6cdcf35606494b84577c6db2ef5641a7340747596c8d5153        251
ground-truth/run_07.names.txt             8ee5e361caf4407914d946ae03e7e432a3fd03f179d56b4ad92f19b28448c842        264
ground-truth/run_08.names.txt             ad61ec627702af5391a4e4952ef22e4e1533339fe78ab2212df4b9ac7176dde4        102
ground-truth/run_09.names.txt             db8590115bc0f70ac83e4a6a75b0dc524eb4bc70baaf56d56b4a096eab9a20c3        156
ground-truth/run_10.names.txt             2b0c0ff06281c6312cbc8b6c276f661edda057a1088e3b902dc2b6945ae59402        153
ground-truth/run_11.names.txt             875105ff59be4815e04752bc89198c24ee943cc9a217d4200ca648864d14dc48        158
ground-truth/run_12.names.txt             475ebf9cbb83be553c5fcbd85fe6d6522e66af111e0ed951e762f3d8a8ff1cd1        146
ground-truth/run_16.names.txt             c8edd4b72b012c8f4672bd4f485fd1a9494b80b4132e77230afbc551d53f5a55        365
matcher/brokerage_census/__init__.py      e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855          0
matcher/brokerage_census/cli.py           28921cb688f7bc8477c7b08c1b183fcad0996ad8156f1cce2dc0f0f862690471       4343
matcher/brokerage_census/generic.py       256c66f9d71b32c14f64f71aab25a89d702779c8563b65c7f4a26354f3b92c91        785
matcher/brokerage_census/identity.py      1c0d24729a13d9196bf0be12423ef38a8a0c38b3c78c760be355e497268dbeec       6086
matcher/brokerage_census/listing.py       32a23366f3355a035d6caaa7f8a628ed81d6edda253e3cac4ab9ac542d9f419a       2653
matcher/brokerage_census/register.py      bae7e9433c9d78c7e78346bf1d4253dc16460763f72f1ee1b8c3b0763043ce0c       6166
matcher/brokerage_census/resolution.py    5b714c9ec76cd608234edc0f54b33278e16aa1ee6f5981cc60daa186c5cfd0fb      13078
matcher/brokerage_census/suffixes.py      c2babb64f7758ff0f60e923e3e2815e60c81693e0a1c9da90f8dea7af07e398e       1592
matcher/geocensus/__init__.py             e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855          0
matcher/geocensus/text/__init__.py        e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855          0
matcher/geocensus/text/normalize.py       25bb2f86584fd500b6f249c62e3131991f791ea0df9f95310ace88c8021d8b17       2164
mentions.csv                              59fe20318945d3c43693040e668d8e8aec587e401e22f5f0d0467b5906808fa7     557954
pack/dubai-brokerage-v1.yaml              6a64bc4eb14726a66585144da5d3eb786e462ef4644344d1034d0ef550e47375       1952
registry/brand_aliases.csv                a0f81aa4e2e08a2974304b245a992a2b4222ff2aed931c954b26a0d25a843916       1539
registry/name_classes.csv                 5a1b73c33ceeb4b8eebfb42aaad65063aaabb85a4091cfd65beeab95cc9c519a       2934
resolution.csv                            175ca2506281c1174d6e696f7debf86663f9ef1b78f83c26ecc4964ef76d2187      38107
responses/best-agencies/0.json            d21a7ac62aa484adfe77ab3e8386d2232264cce18a7dc3d71523559f25ac9e52      31287
responses/best-agencies/1.json            b6ff1aee2a270cd78235729c669a76b33fd70e1914b7c90f3f3ee640fbcdd942      27427
responses/best-agencies/2.json            3dc59b0e2a3261aebb79d3d4eea5b31a45a42055be9869aa2a60d02cda9070bf      23345
responses/best-agencies/3.json            b6c8e6338e1920cb05d0515c6e7f9c1c546263ea5b7be7e8dd24170e3e598f9d      26523
responses/best-agencies/4.json            43271296e468a621e52614c83ba08f3ffffbf6d2b4a3240e27a3845287932295      28638
responses/buy-apartment/0.json            4ae36a3864f488147ae6096176f678b2aa33d70c837a612632234145ab093fe6      25189
responses/buy-apartment/1.json            625fa70e31907c978602a20d7093c22893e1b5b167be0b1a540c265e5c8c2d19      22248
responses/buy-apartment/2.json            6dab796967333645845ae918752cdae21a5475f84e71e668f1b00868c8b62bf5      22980
responses/buy-apartment/3.json            7072c33195e1c8079a5973e1d31a78295f98f3b14b096eaed609ed644e3ba744      21572
responses/buy-apartment/4.json            542a2dcc74bba6002ab7f29fda21342d17fe4ade5773b65c863347661a8881af      24407
responses/buy-in-area/0.json              c0afefd83c30ede1e8b394a150b6efac7091d8896289efd5e805662fa1194ff3      33957
responses/buy-in-area/1.json              bced22e95d208a84d0d2af4f042d2e4d4fb5d377d476fe1e5599668872d869a3      23190
responses/buy-in-area/2.json              3c40ce386a6958c48b0acaab3cac98e10ae95a13c170da51d8a757e5da648046      22763
responses/buy-in-area/3.json              e4cdc8b4019b66cb56c6796a3ea77677dc917a9d58425f2b2dc751900701d58d      22053
responses/buy-in-area/4.json              82caa6b44e657c62deb2d1d0dfaedab98901f0aa3c0a0f5eb6d23d9531b25ca2      21216
responses/investor/0.json                 42d3b351cf6ed045fcc13dde0411462247a061203e2441bd0fbbe0bf96af99c1      29279
responses/investor/1.json                 0590aeb8c24df3f0c4a817fb2ba02419a1a8151fbbf57043a64f70d63e9800e0      24007
responses/investor/2.json                 350dc6abfa3db67ab725f69e7e822de4d5aaf334d975f228f08618a449d12128      13336
responses/investor/3.json                 b6d11e6f23718900eb49518c859cf7f46bd49979fedf957e6f4ccc925d6adf6c      27801
responses/investor/4.json                 1e67b0786d44811eb181dc9c0f48d3b2ad0da431d08ca5e6a44eb748f3748b57      15309
responses/luxury/0.json                   1f65735b3da7e75211ac9bc4587e673e9bc5fc25f0793060775f0cf505886c2e      22610
responses/luxury/1.json                   c79428123628ecb221c7aaf232a65d260f93af59ecba97fdcd52a90200bc44de      17504
responses/luxury/2.json                   47ad5d9234aee0838fbb8228fd08699c35e1cbb1730f46c6f90657dbb8a4c1a8      15862
responses/luxury/3.json                   7f45993fad5f54233561d19729d0c2ba6c1659e08e5dc615ffb1d5e3fec95e31      18156
responses/luxury/4.json                   055aff41126d06054876cb7a45b6d6f91e6b9ca5e41f49e4e6cbd2f4b375e151      20344
responses/most-reputable/0.json           9f2d90791cc39b069b5c1c1a367c87805b5df1e01f5c011f5ce15c7c052831a7      31713
responses/most-reputable/1.json           f24543381e8cacce4971cfc0f540a292b948b6193fc1ad8c15ad9eeed48151a0      33014
responses/most-reputable/2.json           023e1eac0b68e5541676ca2dbc35492fb7557f649425f95c990808b1ebe8abed      24094
responses/most-reputable/3.json           dd6aa153988e7c8c1702ca535449bc0beaf31e0b14f5b11088d8ca283d0cfe4f      16088
responses/most-reputable/4.json           0e7904cf6bf411fcaf5efbba806a3aea8803fff0351e3da0918be9fbfba21cc6      30999
responses/off-plan/0.json                 4367701db36a79c9e7cac0c0464e13d5b452bcc36cadaf0bbeca7bd32c4a32d9       6582
responses/off-plan/1.json                 5e149dbc0fe46b8b7e168e0297cdc5d689e70e2a76dc29d54ecb55bf4acef708      11413
responses/off-plan/2.json                 b1c31f82a43e7f3b3a0cd0021d6657a2dc753af26754c46e2c68f1ddd6862703       6063
responses/off-plan/3.json                 841b24dacc8d16298b8c38bc61b723b2227b9dbe3de7983fe4cded25898ddb49      15965
responses/off-plan/4.json                 075e6e0c8f4a7e071b83283c3771f2f876fa8d29f4a559b785f537e51da5c75d      24438
responses/relocating/0.json               f6d4a6fb5386424169911bf301fa9a737bdacbb77a2958199ae924ce95469c3d      10832
responses/relocating/1.json               a1ba58ea700ec2a6bb857cbdeed3967843905fea5de7c021e2f042bc486e2686       1506
responses/relocating/2.json               1e22a259b7d2bb214e72849bae822209a25cdaa8e71bfb6408fdb986a637879a      22874
responses/relocating/3.json               da6685e13578ae387ab8bba7393be13afa6721d7adb60ed1eb3b4233344ae0fc      20084
responses/relocating/4.json               a3f2e92c7da73041c8d12c6c709cb504bae2a7072dc94b7a8f8bfa6b43c8b874      13876
responses/rent-apartment/0.json           67c728a52d87cfa1c9e4167f5412328faa2c30c91b684907c50febf6e795fa6e      18742
responses/rent-apartment/1.json           94ad1c9638f5a544e69e88706a7d335e50148185206841f8ea2bc57f7273b4b0      19580
responses/rent-apartment/2.json           6477559e6d7ccfe7c7c947dff8bc69da68d23e7208262740cd9449ad4bf8df66      21069
responses/rent-apartment/3.json           8255b10926f99d72ece70f6c5d140eb95bd5e62355aedf00bb136eee9a76eda5      22393
responses/rent-apartment/4.json           fc7fc7a4968a469d90bad281dbe20cb237cc2c09f00956f6a8d7265a89595aa4      22625
responses/sell-apartment/0.json           8c079e8d0da1f9c57646e637c4bb94d9954e168da4281356d9e9af10fc04c721      23900
responses/sell-apartment/1.json           e4207c0fd68fd614f8551c2f7f2a8d2f291835192f70196d2f4fb8879a033cf0      19133
responses/sell-apartment/2.json           4fc436d283a2493f74509befa1d344c2f9fa460717485588729a683628075cd7      29685
responses/sell-apartment/3.json           cf76e4b8561cc3f948db32587c45440077d0b1e66646db77f143e48b818fd7c1      21261
responses/sell-apartment/4.json           b582a127a15ea789cedef8439d0d9b9e99565142c134360ad55b9d0ad107314b      22659
runs.csv                                  135796addf4685c994c7d83be319868281d7bd94ebd37fa882d85e5b40d13541      29146
scoring/RULE.md                           3c6046b9cf34bdaa99c4f67923078cb3fbe0e85a1ac2b91137b779be027f9e0f       6213
scoring/results.csv                       a122290dc6fc8abf2644c7b35e3b6cd0c3e0d03d06fef55eaa3f96a901986a5f     191080
scoring/score_extraction.py               a326bd2578c40013c2faefa706f6d3e466bb8cc17b5912c0b0ee5e71ee4fc3d0       9270
scoring/summary.txt                       7eb7ceaf6c63640e3eca404aacbf88445a5a6c5a6e2bb7582fe0f3ce990bc423       1313

Licensing
---------

Code (matcher/, scoring/score_extraction.py): Apache License 2.0, in LICENSE.
Data (everything else): CC BY 4.0, in LICENSE-DATA, which also says how to attribute.
CC BY is chosen because it requires attribution.
DataForSEO's terms of service do not address redistribution of API responses; the only
relevant clause, 7.1, bars using search-engine data to compete with or adversely affect
search engine providers, which a methods study does not do (read 2026-09-18).

Deliberately not included
-------------------------

1. The Dubai Land Department broker register.
   Source: https://www.dubaipulse.gov.ae/data/dld-registration/dld_brokers-open
   It is a public government dataset and is not ours to republish. The study used the
   export downloaded on 2026-09-16 and built a one-row-per-ORN firm table from it:
     raw export, brokers-2026-09-16.csv
       SHA-256 20c008c3d48942a321bc47dc2f38e70e3442535e045a14048b67da8c1c53f806
     firm table, firms.csv
       SHA-256 1b4546fbbd28340af3208fd2e7b19b38fda1b1ec9cf26716dab4b38d2d4882ae
   The firm table rebuilds byte for byte from the raw export with
     brokerage-census register --csv brokers-2026-09-16.csv --as-of 2026-09-16
   Dubai Pulse updates the dataset, so a later download will most likely match neither hash.

2. analysis/2026-09-instability-v3/FINDINGS.md.
   An internal working document. It contains claims that were later retracted, and shipping
   it would republish them. Its tables are included above as CSV; its prose is not.

Regenerated files
-----------------

Nothing was regenerated. Every file is archived as committed, except four written for this
bundle: ground-truth/index.csv (a lookup table), ground-truth/README.md, LICENSE-DATA, and
LICENSE (copied from the answer-census repository).

The recall and precision figures in scoring/ were computed on 2026-09-18, after collection,
replacing earlier figures whose scoring was not recorded. The rule (scoring/RULE.md) was
committed before the scorer was written or run, and the scorer was run once.
