# Historical census and operational URL data dictionary

All ownership and Austin-presence classifications in `historical_*` and `roster67.*` describe the source snapshot **2026-07-26**, even when a retained source field contains the word `current`. The operational HTTP observations are a separate October collection. Homepage fetching does not establish any ownership update.

`historical_census_brands.csv` has 75 rows, one per retained brand record. `historical_census_active67.csv` has only `inclusion_status=published_active`. The normalized exports use UTF-8 without BOM, true/false boolean strings, and unchanged pipe-delimited lists. Empty strings mean not supplied, not zero or an affirmative negative. Text, classifications, IDs and unresolved findings are preserved from the source JSON. CSV source equivalence is checked after accounting for JSON versus CSV boolean representation.

| Field | Meaning |
| --- | --- |
| `brand_id` | Stable retained brand key B001–B075; not a corporate legal identifier. |
| `brand_name` | Historical consumer-facing label, including source punctuation. |
| `aliases` | Pipe-delimited retained alternate labels, or not supplied. |
| `primary_category` | One source presentation category per brand; some combine trades. |
| `categories` | Pipe-delimited trade tags; overlaps mean counts can exceed brand totals. |
| `consumer_brand_status` | Source operating/consumer-brand status as of July. |
| `inclusion_status` | `published_active` (67), `historical_not_denominator` (3), `candidate_not_published` (2), `excluded` (3). Only the first enters 67-based percentages. |
| `austin_presence_status` | Historical presence verification classification. |
| `austin_presence_type` | Source presence description, including service areas and branches. |
| `address_or_base` | Source location/base text; absence is not proof of absence. |
| `service_area_summary` | Source's historical geographic coverage description. |
| `historical_owner_type` | Renamed source `current_owner_type`: six source ownership buckets. `Private/control unresolved` is not independent ownership. |
| `historical_platform_or_franchise_system` | Renamed source `current_platform_or_franchise_system`: heterogeneous platform, franchise-system or legal-identity label. A shared label does not always establish shared local equity. |
| `historical_ultimate_owner_or_controller` | Renamed source `current_ultimate_owner_or_controller`: retained historical controller text, including pending/unresolved qualifications. |
| `ownership_interest` | Source description of control/minority/franchise/legal-identity interest. |
| `ownership_verification_status` | Historical source verification qualifier; preserve distinctions such as pending sponsor, partial franchisor evidence and brand-activity conflict. |
| `evidence_rating` | Source's A/B/C/D rating. This collection does not independently regrade it. |
| `local_claim_type` | Historical source-reported local/family wording; a claim is not a verified cap table. |
| `franchise_flag` | Source boolean for franchise structure. |
| `retained_consumer_brand_after_transaction` | Source boolean for branding retained after a transaction. |
| `snapshot_date` | Historical reference date, 2026-07-26. |
| `presence_source_ids` | Pipe-delimited evidence keys supporting historical presence. |
| `ownership_source_ids` | Pipe-delimited evidence keys supporting historical ownership classifications. |
| `notes` | Preserved qualifications. |

`historical_brand_categories.csv` is the exploded trade-tag table; its grain is brand × category. It retains inclusion and snapshot so excluded records cannot accidentally enter an active-brand total.

The related exports preserve every field from their corresponding JSON arrays: `historical_entities.csv` (170 entities), `historical_relationships.csv` (102 directed edges), `historical_transactions.csv` (29 events), `historical_evidence.csv` (130 source records), `historical_footprints.csv` (75 presence records), `historical_conflicts.csv` (20 conflicts), and `historical_unresolved.csv` (25 questions). They are not all brand-grain tables. An edge or source count is not a brand count. The source JSON remains the controlling schema and is hashed in `source_manifest.json`.

| Related-table key | Meaning |
| --- | --- |
| `entity_id`, `from_entity_id`, `to_entity_id` | Source graph keys; relationship direction follows source labels, not a newly inferred control chain. |
| `edge_type`, `interest_type`, `relationship_status`, `current_status` | Retained dated edge semantics; `current_status` means current at the historical source date. |
| `start_date`, `end_date`, `announcement_date`, `close_date`, `date_precision` | Source date text and precision; do not turn month/year/unknown values into exact dates. |
| `transaction_id`, `status_as_of_snapshot`, `transaction_type`, `interest_acquired` | Event key and historical event qualifiers. Announcement does not establish closing. |
| `source_id`, `source_ids`, `url`, `publisher`, `primary_secondary` | Evidence link/provenance, including secondary and model-input records. |
| `access_date`, `verified_date` | Source research dates; not the new operational collection date. |
| `quality_rating`, `evidence_rating`, `supporting_source_count`, `independent_source_group_count` | Preserved source assessment; counts do not establish independence without their source grouping. |
| `footprint_id`, `footprint_measure_type`, `footprint_value` | Presence evidence units, not revenue or market share. |
| `conflict_id`, `resolution`, `status` | Conflict and source's dated resolution state. |
| `unresolved_id`, `current_treatment`, `needed_evidence`, `priority` | Historical question and evidence still needed; retained rather than silently resolved. |

`historical_platform_groups.csv` is a display grouping of exact July platform/franchise/legal labels. Missing platform labels stay separate single-brand groups. `grouping_basis` marks franchise affiliation separately; controller strings and source IDs remain visible. Its 63 groups sum to 67 brands. `historical_owner_type_totals.csv` uses source ownership categories with 67 as denominator; shares are record shares, never economic market shares.

`roster67.csv` and `.json` contain all 67 active historical brand keys. `benchmark_homepage_url` is a grounded official consumer homepage or brand/location landing page; retained about/privacy URLs map transparently to the same official origin root. `official_evidence_url`, `official_evidence_source_id`, `url_derivation` and `url_ambiguity_note` document that choice. B026's URL is empty because its existing evidence establishes only a BBB identity record. The national Aire Serv domain serves two separate local brand records, so 66 grounded URLs correspond to 65 initial origins.

`run-*/homepage_observations.csv` has one row per roster brand (67), including unresolved URLs. HTTP status is separate from `homepage_complete`; transfer failure or truncation can coexist with a received status. Request and final URLs, body digest, timestamp, redirect count and challenge indicators are operational observations from this host. `raw_text_chars`, `raw_title`, `raw_h1`, `raw_austin_mention` and `raw_service_terms` are raw HTML extraction heuristics; CSS visibility and JavaScript execution are not established.

`run-*/bot_robots_decisions.csv` has one row per brand × named bot × target stage. Requested and redirected final target paths are kept separately when they differ. The compact homepage table chooses the final target stage if a redirect occurred. `decision` is `allowed`, `disallowed` or `unknown` for that exact path under fetched rules; it says nothing about firewall access, actual bot behavior, indexing, ranking or citation. The winning rule, group selection, robots authority, robots status, content digest and raw body path support readback. Every failed/non-2xx/incomplete/HTML/non-UTF8 robots result remains `unknown`, even where a crawler might apply a documented HTTP-error fallback.

`run-*/raw/req-*.json`, `.headers` and `.body` retain each attempted request, including redirects and the single permitted transient retry. `complete` requires curl exit 0 and no saved-body truncation. `summary.json` states exact denominators and limitations; `config.json` records bounds, UA, runtime, source-roster hash and script hashes. Raw robots bodies are preserved byte-for-byte within the configured cap; their SHA-256 digest identifies exactly what was analyzed.
