heavymap

Parcel Context Display Protocol (PCDP)

Status: architecture sketch, 2026-09-23, vacant-display nuance 2026-10-17. Linear NA-11. Docs only.

Purpose

PCDP is the contract for how any spine unit is presented to a viewer, from the smallest honest picture to the fullest one the other three concepts allow.

A viewer should be able to answer three questions from any presentation:

  1. Which unit is this, in which jurisdiction, at which geometry grain?
  2. Which statements are stamped claims, and of what grade?
  3. Which parts of the ladder are refused, and why?

If a presentation cannot answer those, it is below the minimum. If it answers them for every rung, it is at the maximum. Steps between are allowed. Skipping a refusal to look more complete is not.

Non-goals

How it relates to the other three

Minimum presentation

The minimum is what a viewer gets as soon as a spine record exists, even when every later rung is refused.

In plain language, the minimum is:

The minimum includes no score, no owner, no HeavyMap-asserted “vacant” or “available,” and no implication that a refused rung was inspected and found empty. A footprint is drawn as a footprint. A parcel is drawn as a parcel. A source’s own class may still appear later on a filled rung if it is quoted and attributed (see the Claim & Refusal Contract). UI naming for those surfaced classes will be refined later. Display pattern, not final copy: MPAC tax or property class (public in Ontario, HARD-RULES 4) may be shown as a cross-confirmation signal such as Tax class confirmed: industrial.

The minimum is allowed to be almost entirely refusals. That is still a valid presentation. It tells the truth that the key exists and that the rest of the ladder has not been earned.

Maximum presentation

The maximum is the minimum plus every ladder rung, in order, each either filled or refused under the Claim & Refusal Contract.

In plain language, the maximum is:

The maximum is not “every dataset in the MCS.” It is every rung prepared data can fill for this key, and an explicit refusal for each rung it cannot fill. Two neighbouring parcels can both be at maximum and look different, because their publishers differ. That difference stays visible.

Anything short of the maximum is a partial presentation: some rungs filled, the others still listed with reasons. Partial is the normal case. It is not a defective minimum, and it is not a permission to hide the unfilled rungs.

Surfaces

MCS Part 2 column ui_surfaces names which protocol surfaces may show a dataset. Tokens, |-separated:

Token Role
selection The minimum: outline or point, key, jurisdiction, refusals. The thing a map selection must be able to say before any dossier opens.
dossier The banded reading of one unit, from the current partial presentation up to the maximum. One surface among others.
share A human-readable packet of the same claims and refusals.
export A machine-readable packet of the same claims and refusals.

The word dossier does not appear in dossier_bands as a band token. It appears here, as a surface. A dataset that may feed zoning onto the dossier and into export carries ui_surfaces of dossier|export and dossier_bands of land_use. A dataset that is only a selection outline carries selection and identity.

Share and export are the share_export rung made concrete. They are not a cleaner subset. If the dossier shows constraints: not_joined, the export contains that refusal too.

Chrome that might one day host these surfaces is unspecified. A future map can implement selection and dossier without this document naming a library.

What every presentation carries

Regardless of surface:

retrieved_on and observation_on both show when both exist. A 2017 by-law fetched later is a current legal text with an old origin. A 2022 inventory fetched later is an observation aging in place. The presentation does not collapse those into “updated.”

Walkthrough — one Canadian unit

Synthetic. Not an observation of a real property. Chosen so the Canadian spine problems are visible: footprint grain, no public parcel key in the illustration, regional employment id, unlicensed assessment.

Spine key: hm:ca:on:welland:footprint:SYN-0142
Jurisdiction: City of Welland, a lower-tier municipality of Niagara Region, Ontario. Inside geography v1.
Grain: footprint.

Minimum (selection)

The viewer sees a building outline, not a lot line.

No occupancy headline. The maximum below is a later snapshot of the same key, after the zoning and NEI joins.

Maximum (dossier, and the same content on share and export)

Rung What is shown
identity Outline. Key. Grain footprint. Jurisdiction sentence. Native nei_id SYN-8130 grade joined, method identifier. Parcel polygon refused not_in_coverage. MPAC roll refused not_joined.
land_use L1 — Light Industrial (synthetic), grade joined, method point_in_polygon, publisher City of Welland, licence named, retrieved_on and observation_on both shown. Assessed value still not_in_coverage inside this rung.
constraints Refused. not_joined. The rung is present. It does not say “no constraints.”
activity_registers Synthetic NEI row SYN-8130, grade joined, method identifier. Employment shown as the source band, for illustration 5–99, grade observed on the band and derived only if employment_interval is also listed. No “departed,” no “operating today.”
derived_readings coverage_ratio refused, not_in_coverage, because parcel area is refused. Displayed as refused, not as 0.
share_export The export lists every row in this table, including refusals. A share card that kept only “L1” and the NEI id would be under the minimum, even if it looked finished.

A partial presentation is the same table with land_use still refused and the NEI row already filled, or the reverse. The refused rows stay.

Walkthrough — one American unit

Synthetic. Not an observation of a real Erie County parcel. Chosen so the American spine problems are visible: public parcel grain, SBL native key, property class rather than zoning, county named while the municipal SWIS is unjoined, activity not inferred from land class.

Spine key: hm:us:ny:erie:parcel:SYN-999.00-1-1.1
Jurisdiction: Erie County, New York. Inside geography v1. No city or town is named, because SWIS is not_joined.
Grain: parcel.

Minimum (selection)

The viewer sees a parcel polygon.

Other v1 counties stay outside this key. The maximum below is a later snapshot, after property class and floor area are accepted.

Maximum (dossier, share, export)

Rung What is shown
identity Parcel polygon. Key. Grain parcel. “Erie County, New York.” SBL SYN-999.00-1-1.1, grade observed. SWIS refused not_joined.
land_use Property class 710 (synthetic), grade observed. Stamp says this is an assessment class, not zoning and not NAICS. Zoning itself is not invented to fill the gap.
constraints Refused. not_in_coverage. Not “unconstrained.”
activity_registers Refused. not_joined. Not “inactive.” Not a HeavyMap vacancy claim. A source register that itself uses “vacant” may be quoted on a filled rung, attributed, and labelled as that source’s class.
derived_readings floor_area_m2 grade derived from synthetic 20000 square feet. Stamp keeps square feet, states the conversion, and labels the result a reading.
share_export The packet includes class 710, the floor-area reading, and the refused constraints and activity rungs. It does not include an owner name.

Side by side, the Canadian maximum has an activity row and no parcel, and the American maximum has a parcel and no activity row. Both are maximum presentations of different publishers. PCDP does not rebalance them.

MCS naming on these illustrations

If a later inventory row were the synthetic Welland zoning layer, its Part 2 cells would be:

dossier_bands: land_use
ui_surfaces:   selection|dossier|share|export
derived_readings:

derived_readings empty: the zoning layer feeds no reading.

If a later row were the synthetic Erie floor-area field:

dossier_bands: derived_readings
ui_surfaces:   dossier|share|export
derived_readings: floor_area_m2

Those cells are examples of vocabulary only. This PR writes none of them into the spreadsheet.

Prior art

No public deployment follows from this document.