record_id, chunk_id, bitemporal fields, confidence_score, provenance) and carries the join keys documented below.
APRS profile: aprs.port-authority/1.0.0
Covered ports
All five ports have at least 12 months of meeting data. Adapters run daily; tariff snapshots update quarterly.
Tables
The dataset is organized into multiple related tables rather than a single flat file. This structure reflects the natural hierarchy of governance records — meetings contain agenda items, which produce claims and facts.Port authorities (dimension)
Meetings
Board and committee meetings with scheduling, location, and document availability.Agenda items
Individual items from a board meeting agenda, classified by kind.Claims
Source assertions — what was proposed or recommended by staff. Claims represent the “before” side of governance actions.Facts
Resolved outcomes — what the board actually decided. Facts represent the “after” side of governance actions and are currently available only for Oakland (Legistar adapter).Fact records require vote-tally data from the source system. Currently only the Oakland Legistar adapter surfaces
passed_flag and vote_tally. Fact emission for other ports will follow as minutes-PDF extraction (roll-call parsing) is added.Minutes
Published meeting minutes with document links and status tracking.Tariffs
Port tariff documents tracked across revisions. When a new tariff version is published, Codex extracts individual line items and links them to the parent document.Tariff items
Individual line items from tariff documents with bitemporal supersession tracking. When a rate changes between tariff versions, the old item’ssuperseded_by field links to the replacement.
Tariff version tracking
Tariff items use bitemporal supersession to track rate changes across versions. When a newer tariff version lands and the diff engine matches an old item to a new one:- The old item gets
effective_toset to the new version’s effective date superseded_bylinks to the replacement item’srecord_idmodified_atis refreshed
effective_to set but superseded_by remains null.
Query rates in effect at a specific point in time:
Claim and fact separation
Governance records use the claim/fact layer to separate what was proposed from what was decided. Every agenda item is classified as either aclaim (staff recommendation, pending proposal) or a fact (board decision with recorded vote). This makes it straightforward to query for approved actions versus pending proposals.
For example, a staff recommendation to approve a terminal lease appears as a claim. If the board votes to approve it, a corresponding fact record captures the vote tally and outcome. You can join claims to facts through the shared event_id and item_id keys.
Enum values
Governance model
Meeting type slugs
Stable URL-safe slugs derived frombody_name:
Unmatched body names fall back to a slugified version of the source text.
Passed flag values
Source-supplied status string, lowercased. Values that indicate an affirmative outcome:pass, passed, adopted, approved. Values that indicate a negative outcome: fail, failed, rejected, denied. Other values are stored verbatim.
Cross-dataset joins
The Port Authority Governance dataset joins to other Codex datasets through two paths.To AIS Maritime Positions
- Port-level: join
port_authorities.unlocodeto vessel port-call attribution in AIS Maritime. For example, UNLOCODEUSJAXmaps to all vessel calls at Jacksonville. - Terminal-level: join
port_authority_terminals.h3_r9toais_positions.h3_indexat H3 resolution 9. A vessel’s position within a terminal’s H3 cell during a port call attributes the call to that terminal, which joins to lease records for “which lessee was operating that terminal at port-call time.”
To Civic Intelligence
port_authority_meetings.jurisdiction_slug aligns with civic_records.jurisdiction_slug from the Civic Intelligence dataset. This enables queries like “all civic actions in Oakland adjacent to port-board actions from the same jurisdiction.”
To Events Timeline
Every fact-kind agenda-item record and every adopted resolution surfaces as an Events Timeline row. The fact’seffective_from becomes the event’s occurred_at.
Join keys
Example queries
Find all approved lease actions at the Port of Oakland in the last year:Known limitations
- Fact coverage is port-dependent. Only the Oakland Legistar adapter currently emits fact records with vote tallies and pass/fail outcomes. Other ports will gain fact emission as minutes-PDF extraction is added.
- Tariff items cover JAXPORT only. The tariff parser is currently JAXPORT-shaped. PANYNJ uses a different table layout that requires a separate parser. Other ports (POLA, POLB, Oakland) negotiate pricing via leases rather than publishing item-level tariff schedules.
- Lease and capital project tables are scaffolds. These tables exist in the schema but are not yet populated. Records will appear once the resolution-PDF extractor ships.
- Counterparty resolution is deferred.
counterparty_urnon claims and leases stays null until the corporate-registry entity resolution pipeline is available. Lessee names are stored as raw strings in the meantime. - Meeting dates may be missing. The NY & NJ adapter does not currently parse event dates from document metadata, so
event_dateis null for PANYNJ meetings. - Adapter coverage varies. Not all adapters surface the same fields. Granicus and HTML adapters do not provide
roll_callorvote_tallydata. - Tariff items are text-based. The
ratefield is stored as text to accommodate varied formats (ranges, multi-part rates, conditional pricing). Parse with care when doing numeric comparisons. - Historical depth varies by port. The initial backfill covers approximately one year of meetings. Older records may be added in future collection runs.
- Undated tariff versions. Some earlier JAXPORT tariff versions lack
effective_from. Thesuperseded_bychain is still correct, but absolute point-in-time queries against undated periods are imprecise. Use the parent tariff’stariff_yearas a fallback.