An end-to-end AI workflow · scanned paper in, checked map data out

Scan to Boundary

Thirty years of a council’s planning applications sit in scans, and nobody knows where the sites are. This workflow reads them, traces the plot the applicant drew, puts it on the national map, and grades its own answer.

The problem

Each folder of scans holds one drawing with a red line round the site. The council needs that shape and it isn't stored anywhere. Doing it by hand takes about ten minutes a case, and there are tens of thousands of cases.

What it does

It reads every page, cuts out the plans, gets vision models to trace the red line, and places the result on the Ordnance Survey map using the scale, north arrow and street names printed on the drawing.

What comes out

One polygon per application in national grid coordinates, with a verdict and the evidence behind it. Cases the workflow can't settle are labelled as such and go to a person.

CAPABILITIES

What this is a demonstration of

Several models, one typed contract

Five models from three vendors, each answering through a typed schema. Three of them vote on where the plot is, and their disagreement feeds the confidence score.

Calibrated confidence

A confidence model validated on 97 held-out pages puts each trace in a band. Only the top band, 88% right, runs without a person.

Checked against a system of record

The address is matched against the official register, the drawing’s scale gives the site a size in metres, and the shape has to agree with the map before it counts.

A fixed decision order

Five rules, applied in a set order. An address that can’t be verified rules out a match, whatever the shape score says.

Plain geometry for the measuring

Template matching, FFT correlation and least squares do the measuring. Every score is a number that can be checked.

Built to be run again

One command, pinned environments, unit tests, a nightly regression, and an evaluation gate on every push.

None of this is specific to maps. The same shape works for any messy document: find the part that matters, extract it, check it against a system of record, apply fixed rules, and send the rest to a person.

THE WORKFLOW

11 steps, with the checks at each one

click a step · ← → keys · pictures and values are from 06_01326_FUL
A · Plan extractionPaddleOCR + YOLO venvs · GPU
B · Boundary tracingpydantic-ai · OpenRouter · ~2 min
C · SheetOpenCV · <1 s
D · On the mapshapely · numpy · OS APIs · ~10 s
What the drawing supplieschecked before the address is trusted

How it is built
Quality control · checks
    Measured
      when it fails
      This case
      THE HARNESS

      How it was built

      Every rule in the decision order was added after a specific case failed. This is the loop that added them.

      a case it got wronglow band, or an odd verdictread its own evidenceoverlays · geo.json · API repliessay what went wrongone sentence, then the codechange one rulein the stage that owns itrerun that one case~10 s, $0 for the map stagepass both gatesregression · evaluationcommit rule + casethe case joins the regression setthen the next failureTHE DEVELOPMENT LOOP
      The agent harness

      Claude Code ran the loop, with access to the repository, the single-case command line and the overlays each stage writes. A person chose which failure to work on and accepted or rejected each patch.

      the repositorypython3 -m e2e_plan_extract run --cases ONEevery stage's overlays geo.json and the API repliesci/regression.pyeval/run.py · eval/compare.py
      Kept outside the agent’s reach
      • The verdict: the agent proposes rules, the scorer decides.
      • The labels: drawn and graded by a person, and the agent can’t edit the evaluation set.
      • The baseline: rules land as commits with a regression diff attached.

      Eight failures, and the rule each one produced

      open

      What went wrong

      Why

      The rule it produced

      →
      There is no agent inside the pipeline itself. The recovery moves are few and cheap, so the workflow tries all of them and the scorer picks the best. The agent is used for triage and for deciding what to measure, where the options can’t be enumerated.
      EVALUATION

      What the measurements say

      Two separate questions. Every proportion is shown with its 95% interval, because the samples are small.

      What the harness found
      1. The top band was 88% right on the held-out pages, and it is the only band that runs without a person. The middle band was 67% right, the bottom band 22%.
      2. All 8 polygons the workflow called a match were the right land; the interval on the false-accept rate is 0–32%. The one wrong placement had been reported as unverified.
      3. On pages with no boundary drawn, the tracer declined only 47% of the time and drew something on the rest. This is the next thing to fix.
      4. Out of sample, the fifteen-feature confidence model scores lower than simply counting review flags: AUC 0.699 against 0.785. It needs either more labels or fewer features.

      The tables, the calibration chart, and what the truth is

      open
      TraceDid stage B draw the right boundary? Truth: boundaries drawn by hand, right at IoU ≥ 0.70. 97 blind pages, 58 fitted.
      PlacementIs the delivered polygon the right land? Truth: one review judgement per plan. 20 plans, 17 judgeable.

      Trace, by confidence band

      bandblindrightfittedright
      high2488%21/242186%18/21
      medium2767%18/271735%6/17
      low3622%8/362020%4/20
      • median IoU where a boundary exists 0.837
      • right overall, all bands 58%56/97
      • declines a page with nothing drawn 47%9/19

      Calibration on the blind set

      dashed: perfect calibration0%50%100%0.0–0.227 pages0.2–0.419 pages0.4–0.627 pages0.6–0.814 pages0.8–1.010 pages
      Bars: how often the ring was actually right. Red dot: what the score promised. Whiskers: the 95% interval, wide because the sample is small.

      Placement: what it said against what it was

      verdictrightpartlywrongunsureno_answerall
      matches819
      similar1214
      different55
      unverified11
      no ring11
      • said “matches” and was right 100%8/8
      • said “matches” and was wrong 0%0/8
      • right overall, judgeable plans 53%9/17

      Right, by how well the address resolved

      geocoderight
      probable1/1
      unverified0/2
      verified8/14

      When the address register confirms the address, the answer is usually right. When it doesn’t, the workflow reports the case as unverified.

      # the harness, on the run behind this page
      python3 eval/run.py                                  # both halves, writes eval/report.json
      python3 eval/run.py --geo OUT/geo.json               # placement on another run
      python3 eval/compare.py eval/before.json eval/after.json   # did a change help? fails on a new false accept
      CI / CD

      Checks that run on every change

      push / PRe2e-plan-extract repoGitHub Actionslint + unitsruff · pytest, ~1 minno GPU, no API keysmokeone cached case, stages CDRC · D · R for real, $0regression (nightly)12 cases, budget $2ci/regression.py vs baselinereleasetag · pages + webgisartifacts kept 30 daysdeployself-hosted runnerGPU box, data volumespushgreengreenno droptag

      The six pieces

      open
      tests/
      pytest: alignment, union fitting, geocode QC parsing, north-arrow rules, records loading. Runs in seconds without a GPU.
      benchmark/
      The gate on every push: twelve cases with their OS API replies, GeoPackage slices and scan dpi frozen into benchmark/fixtures/, so stage D runs with no GPU, no key and no network. It fails if a plan called a match was the wrong land, if any verdict loses a band against the committed baseline, or if the IoU falls more than 0.05. CI runs it twice and compares the fingerprint.
      eval/
      eval/run.py --skip-trace on every push, no GPU or key: the job fails if a polygon called a match was the wrong land. Nightly, eval/compare.py fails on a new false accept.
      ci/regression.py
      Compares each plan's verdict and IoU with ci/baseline.json. A downgrade fails the job; the baseline moves only by a deliberate commit.
      .github/workflows/ci.yml
      units on ubuntu every push; smoke and nightly regression on the GPU runner; release on a tag.
      secrets + budget
      API keys are repository secrets. Each paid stage reads the account balance first and stops at the run's cap.
      environments
      Four interpreters pinned by requirements/*.txt; the units job needs only base.txt. The smoke case runs from cached stage A/B output, so it spends nothing.
      CASES

      12 cases; open one to see every page and every fit

      ring / accepted captioncrop's place on the sheet window sent to the tracerlunaluna-progemini flashlocator's point

      00_00024_FUL

      Cartref, Queenborough Lane, Braintree, Essex CM7 8QDlocation · matchessite · matches
      5 pages · 2 traced
      Cartref, Queenborough Lane, Braintree, Essex CM7 8QDErection of detached dwelling00/00024/FUL · record high

      Stage A — every raw page

      anglain water p1
      not a plan
      no plan caption
      decision notice p1
      not a plan
      no plan caption
      decision notice p2
      not a plan
      no plan caption
      decision notice p3
      not a plan
      no plan caption
      full plans p1
      location site crop
      drawingness 0.63

      Stage B · C — each plan, in pipeline order

      location plan location__00_00024_FUL-FULL_PLANS-148924_page1_cropped1.jpg
      As filed by stage AA·6
      cropped · 3.3% of the page · det 0.896
      LocateB·1
      3/3 located · agreed 3/3 · black box = window
      WindowB·2
      window 728×728 px at (584, 814) · sent at ×1.407
      TraceB·3
      gpt-5.6-terra · 8 vertices
      what it said“I traced the visible curtilage/property lines enclosing the house and its garden: the left edge from the upper-left corner down to the lower-left corner, the lower boundary, and the sloping right-hand division line. The upper boundary is visibly broken …”
      Back on the raw sheetC
      template match 0.966
      0.63
      high review
      by
      gemini-3.7-flash
      cost
      $0.025
      • the ring does not contain the locator's point
      by eye: right
      Encloses the parcel the THE SITE arrow points at; the drawn plot line is followed.
      site plan site__00_00024_FUL-FULL_PLANS-148924_page1_cropped1.jpg
      As filed by stage AA·6
      cropped · 4.9% of the page · det 0.572
      LocateB·1
      3/3 located · agreed 3/3 · black box = window
      WindowB·2
      window 1110×2080 px at (815, 0) · sent at ×1.0
      TraceB·3
      gpt-5.6-terra · 30 vertices
      what it said“I traced the visible outer curtilage line: the long rear boundary across the top, the straight left-hand side, and the sloping right-hand side down to the front. The frontage boundary between the lower-left corner at (181,1878) and lower-right corner at …”
      Back on the raw sheetC
      template match 0.964
      0.67
      high AUTO
      by
      luna-pro
      cost
      $0.036
      no review flags
      by eye: right
      The ring follows the plot drawn for the proposed dwelling, BOUNDARY labels on both long sides.

      Stage D — on the map

      parcel the geocode hitsneighbouring parcelsfitted polygons (thin: line-network alternative)traced ring, placed by the best alignmentgeocoded point
      geocode verified premise ✓ · street ✓ · postcode ✗ · Places match 0.7
      Geocoded to CARTREF, QUEENBOROUGH LANE, BRAINTREE, CM77 7QD · UPRN 10006913408 · hit parcel 625.7 m²
      location matches
      0.80
      IoU bidirectional, real size
      geocode verified, ring at real size (1:1250 x 300 dpi)
      hit parcel
      every candidate
      hit parcel alone: shape-only IoU 0.81 (area-normalised)
      union of land-use sites: shape-only IoU 0.81 from 1 parcel (626 m²)
      union of topographic areas: shape-only IoU 0.81 from 3 areas (626 m², Buildings, Land)
      direct fit to the line network: edge support 0.80, ring placed at 799 m² (×1.28 of the hit parcel), rotated 151°; encloses 4 topographic areas → IoU 0.71
      building outline(s), shape-only, MasterMap Buildings within 40 m: IoU 0.68 from 1 building part (131 m²)
      north arrow: rejected — other, north None° clockwise from up, confidence 0.98 (no symbol)
      metric prior: drawing scale 1:1250 × 300 dpi (JPEG dpi tag) → the ring is really 660 m², ×1.06 the hit parcel; no north label, rotation searched; line-network fit at that size: support 0.78, rotation 156°, 17 m from the address; 4 topographic areas under it (662 m²) → IoU 0.62
      elongation ring 2.18 vs hit parcel 2.55
      best neighbouring parcel: IoU 0.86 (231 m²) — the shape prefers a neighbour
      site matches
      0.88
      IoU shape only, area-normalised
      geocode verified
      hit parcel
      every candidate
      hit parcel alone: shape-only IoU 0.88 (area-normalised)
      union of land-use sites: shape-only IoU 0.87 from 1 parcel (626 m²)
      union of topographic areas: shape-only IoU 0.87 from 3 areas (626 m², Buildings, Land)
      direct fit to the line network: edge support 0.80, ring placed at 707 m² (×1.13 of the hit parcel), rotated 136°; encloses 3 topographic areas → IoU 0.85
      building outline(s), shape-only, MasterMap Buildings within 40 m: IoU 0.64 from 1 building part (131 m²)
      elongation ring 1.83 vs hit parcel 2.55
      best neighbouring parcel: IoU 0.83 (252 m²)

      01_00559_FUL

      22 Cornwall Gardens, Braintree, Essex CM7 6LFlocation · no ringblock · matches
      2 pages · 2 traced
      22 Cornwall Gardens, Braintree, Essex CM7 6LFErection of rear conservatory01/00559/FUL · record high

      Stage A — every raw page

      decision notice p1
      not a plan
      no plan caption
      full plans p1
      location block crop
      drawingness 0.66

      Stage B · C — each plan, in pipeline order

      location plan location__01_00559_FUL-FULL_PLANS-108318_page1_cropped1.jpg
      As filed by stage AA·6
      cropped · 1.6% of the page · det 0.975
      LocateB·1
      3/3 located · agreed 3/3 · black box = window
      WindowB·2
      window 290×290 px at (244, 321) · sent at ×3.531
      TraceB·3
      nothing traced
      no ring · the tracer declined twice
      Back on the raw sheetC
      template match 0.929
      0.00
      none review
      by
      gemini-3.7-flash
      cost
      $0.035
      no review flags
      by eye: wrong
      Declined twice, yet the hatched plot with the Site leader is clearly drawn at upper left. A miss, honestly reported as no ring.
      block plan block__01_00559_FUL-FULL_PLANS-108318_page1_cropped1.jpg
      As filed by stage AA·6
      cropped · 1.2% of the page · det 0.981
      LocateB·1
      3/3 located · agreed 3/3 · black box = window
      WindowB·2
      window 914×1089 px at (0, 0) · sent at ×1.0
      TraceB·3
      gpt-5.6-terra · 8 vertices
      what it said“I traced the visible outer curtilage line: the heavy diagonal at upper left, the top edge, the right-hand edge past the building, and the lower return. The short connection between the diagonal's lower end near (416,587) and the lower-left boundary near …”
      Back on the raw sheetC
      template match 0.897
      0.74
      high AUTO
      by
      gemini-3.7-flash
      cost
      $0.023
      no review flags
      by eye: right
      The heavy Site outline is traced in full, including the notch around the outbuilding.

      Stage D — on the map

      parcel the geocode hitsneighbouring parcelsfitted polygons (thin: line-network alternative)traced ring, placed by the best alignmentgeocoded point
      geocode verified premise ✓ · street ✓ · postcode ✗ · Places match 0.7
      Geocoded to 22, CORNWALL GARDENS, BRAINTREE, CM7 9LF · UPRN 100090296393 · hit parcel 461.2 m²
      no ring
      location
      no ring
      block matches
      0.83
      IoU bidirectional, real size
      geocode verified, ring at real size (1:500 x 300 dpi)
      hit parcel
      every candidate
      hit parcel alone: shape-only IoU 0.82 (area-normalised)
      union of land-use sites: shape-only IoU 0.82 from 1 parcel (461 m²)
      union of topographic areas: shape-only IoU 0.82 from 3 areas (461 m², Buildings, Land)
      direct fit to the line network: edge support 0.83, ring placed at 556 m² (×1.20 of the hit parcel), rotated 276°; encloses 3 topographic areas → IoU 0.79
      building outline(s), shape-only, MasterMap Buildings within 40 m: IoU 0.67 from 1 building part (90 m²)
      north arrow: rejected — arrow, north 314.0° clockwise from up, confidence 0.87 ('arrow' without a NORTH label is not trusted (leader arrows look the same), confidence 0.87)
      metric prior: drawing scale 1:500 × 300 dpi (JPEG dpi tag) → the ring is really 539 m², ×1.17 the hit parcel; no north label, rotation searched; line-network fit at that size: support 0.79, rotation 276°, 5 m from the address; 3 topographic areas under it (461 m²) → IoU 0.78
      elongation ring 1.78 vs hit parcel 1.89
      best neighbouring parcel: IoU 0.79 (286 m²)

      02_02212_FUL

      32 London Road, Braintree, Essex CM7 7LGlocation · matches
      2 pages · 1 traced
      32 London Road, Braintree, Essex CM7 7LGProposed loft conversion and insertion of front dormer window02/02212/FUL · record high

      Stage A — every raw page

      decision p1
      not a plan
      no plan caption
      full plans p1
      location crop
      drawingness 0.62

      Stage B · C — each plan, in pipeline order

      location plan location__02_02212_FUL-FULL_PLANS-271467_page1_cropped1.jpg
      As filed by stage AA·6
      cropped · 5.5% of the page · det 0.912
      LocateB·1
      3/3 located · agreed 1/3 · black box = window
      WindowB·2
      window 585×585 px at (615, 962) · sent at ×1.75
      TraceB·3
      gpt-5.6-terra · 11 vertices · building fallback · re-traced with the point
      what it said“The cyan target lies within this clearly drawn building footprint. I traced its irregular external wall outline; the surrounding curtilage boundary is not consistently delineated, and the heavy line from the left is the stated site-label leader rather than …”
      Back on the raw sheetC
      template match 0.787
      0.44
      medium review
      by
      luna
      cost
      $0.047
      • locators split 1/3 on which plot this is
      by eye: partly
      The building at the tip of The site leader is traced, not a curtilage; none is drawn on this OS extract. Three locators disagreed and the low band flags it.

      Stage D — on the map

      parcel the geocode hitsneighbouring parcelsfitted polygons (thin: line-network alternative)traced ring, placed by the best alignmentgeocoded point
      geocode verified premise ✓ · street ✓ · postcode ✗ · Places match 0.7
      Geocoded to 32, LONDON ROAD, BRAINTREE, CM7 2LG · UPRN 10006906637 · hit parcel 571.8 m²
      landmarks resolved (1)
      Landmarks on the plan resolved: HIGH STREET → High Street (road)
      location matches
      0.84
      IoU bidirectional, real size
      drawing scale 1:1250 x 300 dpi, ring at real size vs buildings near the address + north arrow, geocode verified; building carries 32, LONDON ROAD, BRAINTREE, CM7 2LG
      2 building part(s), 124 m², 0 m from the address point; plot = UPRN parcel containing it (572 m²)
      every candidate
      hit parcel alone: shape-only IoU 0.26 (area-normalised)
      union of land-use sites: shape-only IoU 0.48 from 3 parcels (1732 m²)
      union of topographic areas: shape-only IoU 0.67 from 5 areas (2275 m², Buildings, Land)
      direct fit to the line network: edge support 0.82, ring placed at 275 m² (×0.48 of the hit parcel), rotated 93°; encloses 4 topographic areas → IoU 0.53
      building outline(s), shape-only, MasterMap Buildings within 40 m: IoU 0.84 from 2 building parts (124 m²)
      north arrow: accepted — arrow, north 0.0° clockwise from up, confidence 0.84 (symbol next to the OCR label 'NORTH', confidence 0.84); chosen fit turned the drawing 1.0° away from it
      ring at real size vs the buildings within 30 m of the address (bidirectional IoU, ±20% size, rotation from the north arrow): IoU 0.84 with 2 building parts (124 m², 0 m from the point), rotated 359°, size ×1.05
      metric prior: drawing scale 1:1250 × 300 dpi (JPEG dpi tag) → the ring is really 115 m², ×0.2 the hit parcel; north arrow read; line-network fit at that size: support 0.85, rotation 0°, 78 m from the address; 1 topographic areas under it (177 m²) → IoU 0.40
      elongation ring 1.41 vs hit parcel 10.12
      best neighbouring parcel: IoU 0.87 (395 m²) — the shape prefers a neighbour

      06_01326_FUL

      Magpie Hall, Plaistow Green Road, Halstead, Essex CO9 1QBblock · differentlocation · matches
      2 pages · 2 traced
      Magpie Hall, Plaistow Green Road, Halstead, Essex CO9 1QBErection of porch06/01326/FUL · record high

      Stage A — every raw page

      decision notice p1
      not a plan
      no plan caption
      full plans p1
      block location crop
      drawingness 0.62

      Stage B · C — each plan, in pipeline order

      block plan block__06_01326_FUL-FULL_PLANS-49056_page1_cropped1.jpg
      As filed by stage AA·6
      cropped · 1.8% of the page · det 0.89
      LocateB·1
      3/3 located · agreed 3/3 · black box = window
      WindowB·2
      window 1125×892 px at (0, 0) · sent at ×1.0
      TraceB·3
      gpt-5.6-terra · 38 vertices
      what it said“Traced the continuous heavy property/building-and-garden curtilage outline, including the stepped building perimeter at the north and the lawn/garden perimeter along the west and south. The eastern garden edge is visibly interrupted between the porch area …”
      Back on the raw sheetC
      template match 0.956
      0.75
      high AUTO
      by
      gemini-3.7-flash
      cost
      $0.028
      no review flags
      by eye: right
      The heavy outline around house, barns and yard on Plaistow Green Road; the proposed porch sits inside it.
      location plan location__06_01326_FUL-FULL_PLANS-49056_page1_cropped1.jpg
      As filed by stage AA·6
      cropped · 5.9% of the page · det 0.964
      LocateB·1
      3/3 located · agreed 3/3 · black box = window
      WindowB·2
      window 1650×1757 px at (259, 0) · sent at ×1.0
      TraceB·3
      gpt-5.6-terra · 11 vertices
      what it said“Traced the heavy black curtilage outline enclosing the land labelled TL 80 29: from the road junction up the long west side, around the northern/eastern edges and indented eastern corner, then back along its road frontage. I excluded the thin diagonal …”
      Back on the raw sheetC
      template match 0.939
      0.79
      high AUTO
      by
      gemini-3.7-flash
      cost
      $0.019
      no review flags
      by eye: right
      The heavy curtilage line around TL 80 29 and Magpie Hall, including the indented eastern corner.

      Stage D — on the map

      parcel the geocode hitsneighbouring parcelsfitted polygons (thin: line-network alternative)traced ring, placed by the best alignmentgeocoded point
      geocode verified premise ✓ · street ✓ · postcode ✓ · Places match 0.9
      Geocoded to MAGPIE HALL, PLAISTOW GREEN ROAD, HALSTEAD, CO9 1QB · UPRN 10006914926 · hit parcel 7206.1 m²
      block different
      0.25
      IoU bidirectional, real size
      drawing scale 1:500 x 300 dpi, geocode verified
      3 topographic areas under the metric placement (199 m²)
      every candidate
      hit parcel alone: shape-only IoU 0.69 (area-normalised)
      union of land-use sites: shape-only IoU 0.69 from 1 parcel (7206 m²)
      union of topographic areas: shape-only IoU 0.69 from 12 areas (7206 m², Buildings, Land, Water)
      direct fit to the line network: edge support 0.55, ring placed at 3063 m² (×0.43 of the hit parcel), rotated 273°; encloses 9 topographic areas → IoU 0.53
      building outline(s), shape-only, MasterMap Buildings within 40 m: IoU 0.60 from 1 building part (106 m²)
      north arrow: rejected — other, north None° clockwise from up, confidence 0.96 (no symbol)
      ring at real size vs the buildings within 30 m of the address (bidirectional IoU, ±20% size, rotation free): IoU 0.52 with 4 building parts (231 m², 8 m from the point), rotated 127°, size ×0.8
      metric prior: drawing scale 1:500 × 300 dpi (JPEG dpi tag) → the ring is really 511 m², ×0.07 the hit parcel; no north label, rotation searched; line-network fit at that size: support 0.70, rotation 346°, 15 m from the address; 3 topographic areas under it (199 m²) → IoU 0.25
      elongation ring 1.32 vs hit parcel 1.46
      best neighbouring parcel: IoU 0.69 (7206 m²)
      location matches
      0.88
      IoU bidirectional, real size
      drawing scale 1:2500 x 300 dpi + north arrow, geocode verified
      39 topographic areas under the metric placement (29,387 m²)
      every candidate
      hit parcel alone: shape-only IoU 0.74 (area-normalised)
      union of land-use sites: shape-only IoU 0.74 from 1 parcel (7206 m²)
      union of topographic areas: shape-only IoU 0.74 from 12 areas (7206 m², Buildings, Land, Water)
      direct fit to the line network: edge support 0.69, ring placed at 4420 m² (×0.61 of the hit parcel), rotated 3°; encloses 10 topographic areas → IoU 0.77
      building outline(s), shape-only, MasterMap Buildings within 40 m: IoU 0.71 from 1 building part (106 m²)
      north arrow: accepted — arrow, north 0.0° clockwise from up, confidence 0.99 (symbol next to the OCR label 'AORTH', confidence 0.99); chosen fit turned the drawing 0.0° away from it
      metric prior: drawing scale 1:2500 × 300 dpi (JPEG dpi tag) → the ring is really 25,478 m², ×3.54 the hit parcel; north arrow read; line-network fit at that size: support 0.53, rotation 0°, 90 m from the address; 39 topographic areas under it (29,387 m²) → IoU 0.88
      elongation ring 1.63 vs hit parcel 1.46
      best neighbouring parcel: IoU 0.74 (7206 m²)

      07_02248_COU

      Former Car Showroom, Trinity Street, Halstead, Essex CO9 1JBblock · matcheslocation · similar
      3 pages · 2 traced
      Former Car Showroom, Trinity Street, Halstead, Essex CO9 1JBChange of use to class A1 (shops) to allow showroom to be used as a kitchen and bathroom retail centre with 6 no. car parking spaces07/02248/COU · record low: no reference found in the scans, address matched on three words

      Stage A — every raw page

      decision notice p1
      not a plan
      no plan caption
      decision notice p2
      not a plan
      no plan caption
      full plans p1
      block location crop
      drawingness 0.99

      Stage B · C — each plan, in pipeline order

      block plan block__07_02248_COU-FULL_PLANS-162966_page1_cropped1.jpg
      As filed by stage AA·6
      cropped · 12.9% of the page · det 0.91
      LocateB·1
      3/3 located · agreed 2/3 · black box = window
      WindowB·2
      window 1845×1845 px at (108, 98) · sent at ×1.0
      TraceB·3
      gpt-5.6-terra · 4 vertices · building fallback
      what it said“No enclosing curtilage boundary is distinctly drawn. I traced the outline of the densely hatched Showroom structure, which is the clearly marked application feature; the thin diagonal hatching elsewhere is not a plot boundary.”
      Back on the raw sheetC
      template match 0.975
      0.05
      low review
      by
      gemini-3.7-flash
      cost
      $0.036
      • locators split 2/3 on which plot this is
      • the ring does not contain the locator's point
      • traced the marked building; no curtilage was drawn
      by eye: partly
      Only the densely hatched Showroom building; the lighter hatched forecourt strip in front is left out. Low band, correctly.
      location plan location__07_02248_COU-FULL_PLANS-162966_page1_cropped1.jpg
      As filed by stage AA·6
      cropped · 11.8% of the page · det 0.923
      LocateB·1
      3/3 located · agreed 3/3 · black box = window
      WindowB·2
      window 510×510 px at (625, 1085) · sent at ×2.008
      TraceB·3
      gpt-5.6-terra · 30 vertices
      what it said“Traced the heavy outlined perimeter enclosing the hatched Snowroom building/curtilage, including its angled north-west edge, long diagonal east side, and stepped south-east corner.”
      Back on the raw sheetC
      template match 0.836
      0.78
      high AUTO
      by
      gemini-3.7-flash
      cost
      $0.024
      no review flags
      by eye: right
      The hatched showroom plot on Trinity Street, traced along its heavy outline.

      Stage D — on the map

      parcel the geocode hitsneighbouring parcelsfitted polygons (thin: line-network alternative)traced ring, placed by the best alignmentgeocoded point
      geocode unverified premise ✗ · street ✗ · postcode ✗ · Places match 0.6
      Geocoded to ESSEX ARMS HOUSE, TRINITY STREET, HALSTEAD, CO9 1JQ · UPRN 100091220554 · hit parcel 505.9 m²
      landmarks resolved (7)
      Landmarks on the plan resolved: Trinity Court → 1 (premises) · TRINITY STREET → Trinity Street (road) · Esso → ESSO (premises) · BUTLER ROAD → Butler Road (road) · ROSEMARY LANE → Rosemary Lane (road) · the locomotive → THE LOCOMOTIVE (premises) · BRIDGE STREET → Bridge Street (road)
      block matches
      0.81
      IoU shape only, area-normalised · at real size 0.78
      landmarks on the plan
      the parcel under the anchored ring
      every candidate
      hit parcel alone: shape-only IoU 0.83 (area-normalised)
      union of land-use sites: shape-only IoU 0.83 from 1 parcel (506 m²)
      union of topographic areas: shape-only IoU 0.83 from 2 areas (506 m², Buildings, Land)
      direct fit to the line network: edge support 0.78, ring placed at 506 m² (×1.00 of the hit parcel), rotated 296°; encloses 6 topographic areas → IoU 0.70
      building outline(s), shape-only, MasterMap Buildings within 40 m: IoU 0.64 from 1 building part (102 m²)
      north arrow: accepted — compass star, north 0.0° clockwise from up, confidence 0.99 (compass star with no label, confidence 0.99); chosen fit turned the drawing 1.1° away from it
      ring at real size vs the buildings within 30 m of the address (bidirectional IoU, ±20% size, rotation from the north arrow): IoU 0.65 with 2 building parts (208 m², 13 m from the point), rotated 14°, size ×0.8
      metric prior: drawing scale 1:500 × 300 dpi (JPEG dpi tag) → the ring is really 353 m², ×0.7 the hit parcel; north arrow read; line-network fit at that size: support 0.80, rotation 2°, 101 m from the address; 3 topographic areas under it (404 m²) → IoU 0.59
      landmark registration: 3 anchors (2 premises), rotation 357.1°, 0.0377 m/px, RMS 12.4 m; ring 336 m², 210 m from the geocode; parcel under it IoU 0.81, topo areas under it IoU 0.81
      elongation ring 2.42 vs hit parcel 2.45
      best neighbouring parcel: IoU 0.83 (149 m²)
      location similar
      0.66
      IoU shape only, area-normalised · at real size 0.50
      landmarks on the plan
      3 topographic areas under the anchored ring
      every candidate
      hit parcel alone: shape-only IoU 0.62 (area-normalised)
      union of land-use sites: shape-only IoU 0.90 from 4 parcels (1509 m²)
      union of topographic areas: shape-only IoU 0.79 from 4 areas (665 m², Buildings, Land)
      direct fit to the line network: edge support 0.79, ring placed at 215 m² (×0.43 of the hit parcel), rotated 289°; encloses 2 topographic areas → IoU 0.71
      building outline(s), shape-only, MasterMap Buildings within 40 m: IoU 0.86 from 1 building part (102 m²)
      north arrow: accepted — compass star, north 0.0° clockwise from up, confidence 0.99 (compass star with no label, confidence 0.99); chosen fit turned the drawing 1.5° away from it
      ring at real size vs the buildings within 30 m of the address (bidirectional IoU, ±20% size, rotation from the north arrow): IoU 0.66 with 2 building parts (238 m², 10 m from the point), rotated 17°, size ×0.8
      metric prior: drawing scale 1:1250 × 300 dpi (JPEG dpi tag) → the ring is really 520 m², ×1.03 the hit parcel; north arrow read; line-network fit at that size: support 0.84, rotation 2°, 96 m from the address; 3 topographic areas under it (404 m²) → IoU 0.67
      landmark registration: 6 anchors (2 premises), rotation 2.5°, 0.1254 m/px, RMS 24.6 m; ring 656 m², 206 m from the geocode; parcel under it IoU 0.52, topo areas under it IoU 0.66
      elongation ring 1.41 vs hit parcel 2.45
      best neighbouring parcel: IoU 0.82 (5333 m²) — the shape prefers a neighbour

      01_01633_FUL

      Oasis, Church Lane, Toppesfield, Halstead, Essex CO9 4DTsite · differentsite · differentblock · different
      3 pages · 3 traced
      Oasis, Church Lane, Toppesfield, Halstead, Essex CO9 4DTErection of replacement dwelling01/01633/FUL · record high

      Stage A — every raw page

      decision notice p1
      not a plan
      no plan caption
      drawings p1
      site block crop
      drawingness 0.92
      drawings p2
      site block crop
      drawingness 0.64

      Stage B · C — each plan, in pipeline order

      site plan block plan site__01_01633_FUL-DRAWINGS-219363_page1_cropped1.jpg
      As filed by stage AA·6
      cropped · 14.8% of the page · det 0.291
      LocateB·1
      3/3 located · agreed 3/3 · black box = window
      WindowB·2
      window 2337×617 px at (0, 0) · sent at ×1.0
      TraceB·3
      gpt-5.6-terra · 38 vertices
      what it said“Traced the continuous solid irregular outer perimeter enclosing the house, garden and septic-tank area. Dashed service/annotation lines and the building footprint were excluded.”
      Back on the raw sheetC
      template match 0.764
      0.55
      medium AUTO
      by
      gemini-3.7-flash
      cost
      $0.012
      no review flags
      by eye: right
      The whole enclosed plot around the house and septic tank, dashed service lines ignored.
      site plan site__01_01633_FUL-DRAWINGS-219363_page2_cropped1.jpg
      As filed by stage AA·6
      cropped · 3.2% of the page · det 0.947
      LocateB·1
      3/3 located · agreed 2/3 · black box = window
      WindowB·2
      window 690×690 px at (495, 780) · sent at ×1.484
      TraceB·3
      gpt-5.6-terra · 27 vertices
      what it said“Traced the narrow curtilage labelled 228: its upper boundary below 218, the curved right-hand dividing edge, the lower frontage boundary above 243, and the short curved left-hand side. The 'THE SITE' arrow was ignored as an annotation.”
      Back on the raw sheetC
      template match 0.978
      0.53
      medium review
      by
      luna-pro
      cost
      $0.018
      • locators split 2/3 on which plot this is
      by eye: right
      Plot 228 under the THE SITE arrow, between 218 and 243.
      block plan block__01_01633_FUL-DRAWINGS-219363_page2_cropped1.jpg
      As filed by stage AA·6
      cropped · 1.4% of the page · det 0.841
      LocateB·1
      3/3 located · agreed 3/3 · black box = window
      WindowB·2
      window 2230×506 px at (0, 0) · sent at ×1.0
      TraceB·3
      gpt-5.6-terra · 41 vertices
      what it said“Traced the large irregular outer curtilage boundary enclosing the house, garden and existing septic tank. The upper and lower edges are partly broken/faint in the scan, but follow the continuous perimeter line rather than the bold building footprint or the …”
      Back on the raw sheetC
      template match 0.915
      0.47
      medium AUTO
      by
      gemini-3.7-flash
      cost
      $0.014
      no review flags
      by eye: right
      Same perimeter as the site plan, followed through the faint upper edge.

      Stage D — on the map

      parcel the geocode hitsneighbouring parcelsfitted polygons (thin: line-network alternative)traced ring, placed by the best alignmentgeocoded point
      geocode verified premise ✓ · street ✓ · postcode ✓ · Places match 0.9
      Geocoded to OASIS, CHURCH LANE, TOPPESFIELD, HALSTEAD, CO9 4DT · UPRN 100091218721 · hit parcel 5538.0 m²
      site block different
      0.20
      IoU bidirectional, real size
      drawing scale 1:500 x 300 dpi, geocode verified
      2 topographic areas under the metric placement (193 m²)
      every candidate
      hit parcel alone: shape-only IoU 0.47 (area-normalised)
      union of land-use sites: shape-only IoU 0.47 from 1 parcel (5538 m²)
      union of topographic areas: shape-only IoU 0.52 from 10 areas (6497 m², Buildings, Land, Roads Tracks And Paths)
      direct fit to the line network: edge support 0.76, ring placed at 2221 m² (×0.40 of the hit parcel), rotated 1°; encloses 4 topographic areas → IoU 0.23
      building outline(s), shape-only, MasterMap Buildings within 40 m: IoU 0.60 from 1 building part (193 m²)
      north arrow: rejected — other, north None° clockwise from up, confidence 0.93 (no symbol)
      metric prior: drawing scale 1:500 × 300 dpi (JPEG dpi tag) → the ring is really 1,345 m², ×0.24 the hit parcel; no north label, rotation searched; line-network fit at that size: support 0.75, rotation 178°, 26 m from the address; 2 topographic areas under it (193 m²) → IoU 0.20
      elongation ring 4.88 vs hit parcel 4.66
      best neighbouring parcel: IoU 0.68 (2208 m²) — the shape prefers a neighbour
      site different
      0.58
      IoU shape only, area-normalised · at real size 0.68
      geocode verified
      direct fit to the line network
      every candidate
      hit parcel alone: shape-only IoU 0.50 (area-normalised)
      union of land-use sites: shape-only IoU 0.50 from 1 parcel (5538 m²)
      union of topographic areas: shape-only IoU 0.55 from 11 areas (6899 m², Buildings, Land, Roads Tracks And Paths)
      direct fit to the line network: edge support 0.66, ring placed at 1965 m² (×0.35 of the hit parcel), rotated 172°; encloses 4 topographic areas → IoU 0.58
      building outline(s), shape-only, MasterMap Buildings within 40 m: IoU 0.52 from 1 building part (193 m²)
      north arrow: accepted — compass star, north 0.0° clockwise from up, confidence 0.99 (compass star with no label, confidence 0.99); chosen fit turned the drawing 172.0° away from it
      metric prior: drawing scale 1:2500 × 300 dpi (JPEG dpi tag) → the ring is really 1,195 m², ×0.22 the hit parcel; north arrow read; line-network fit at that size: support 0.71, rotation 0°, 26 m from the address; 3 topographic areas under it (193 m²) → IoU 0.19
      elongation ring 5.83 vs hit parcel 4.66
      best neighbouring parcel: IoU 0.76 (2208 m²) — the shape prefers a neighbour
      block different
      0.60
      IoU bidirectional, real size
      drawing scale 1:500 x 300 dpi, geocode verified
      1 topographic areas under the metric placement (1,495 m²)
      every candidate
      hit parcel alone: shape-only IoU 0.47 (area-normalised)
      union of land-use sites: shape-only IoU 0.47 from 1 parcel (5538 m²)
      union of topographic areas: shape-only IoU 0.52 from 10 areas (6497 m², Buildings, Land, Roads Tracks And Paths)
      direct fit to the line network: edge support 0.72, ring placed at 1965 m² (×0.35 of the hit parcel), rotated 352°; encloses 5 topographic areas → IoU 0.57
      building outline(s), shape-only, MasterMap Buildings within 40 m: IoU 0.60 from 1 building part (193 m²)
      north arrow: rejected — arrow, north 340.0° clockwise from up, confidence 0.55 ('arrow' without a NORTH label is not trusted (leader arrows look the same), confidence 0.55)
      metric prior: drawing scale 1:500 × 300 dpi (JPEG dpi tag) → the ring is really 1,315 m², ×0.24 the hit parcel; no north label, rotation searched; line-network fit at that size: support 0.75, rotation 200°, 138 m from the address; 1 topographic areas under it (1,495 m²) → IoU 0.60
      elongation ring 4.84 vs hit parcel 4.66
      best neighbouring parcel: IoU 0.69 (2208 m²) — the shape prefers a neighbour

      01_01032_FUL

      127 Mountbatten Road Braintree Essex CM7 6TPsite · matches
      3 pages · 1 traced
      127 Mountbatten Road Braintree Essex CM7 6TPErection of porch01/01032/FUL · record high

      Stage A — every raw page

      decision notice p1
      not a plan
      no plan caption
      full plans p1
      not a plan
      no plan caption
      full plans p2
      site crop
      drawingness 0.64

      Stage B · C — each plan, in pipeline order

      site plan site__01_01032_FUL-FULL_PLANS-205242_page2_cropped1.jpg
      As filed by stage AA·6
      cropped · 2.8% of the page · det 0.946
      LocateB·1
      3/3 located · agreed 3/3 · black box = window
      WindowB·2
      window 699×1868 px at (144, 0) · sent at ×1.0
      TraceB·3
      gpt-5.6-terra · 21 vertices · re-traced with the point
      what it said“Traced the outer curtilage boundary enclosing plot 127, including the garden to the north, garage, dwelling and front driveway/soakaway area. The garage and house outlines inside this perimeter were not used as the plot boundary.”
      Back on the raw sheetC
      template match 0.923
      0.75
      high AUTO
      by
      gemini-3.7-flash
      cost
      $0.025
      no review flags
      by eye: right
      The whole plot of 127: driveway, house, garage and rear garden, between the footpath and the rear boundary.

      Stage D — on the map

      parcel the geocode hitsneighbouring parcelsfitted polygons (thin: line-network alternative)traced ring, placed by the best alignmentgeocoded point
      geocode verified premise ✓ · street ✓ · postcode ✗ · Places match 0.7
      Geocoded to 127, MOUNTBATTEN ROAD, BRAINTREE, CM7 9TP · UPRN 100090302622 · hit parcel 194.6 m²
      site matches
      0.97
      IoU bidirectional, real size
      geocode verified, ring at real size (1:200 x 300 dpi)
      hit parcel
      every candidate
      hit parcel alone: shape-only IoU 0.97 (area-normalised)
      union of land-use sites: shape-only IoU 0.97 from 1 parcel (195 m²)
      union of topographic areas: shape-only IoU 0.97 from 3 areas (195 m², Buildings, Land)
      direct fit to the line network: edge support 0.93, ring placed at 220 m² (×1.13 of the hit parcel), rotated 187°; encloses 3 topographic areas → IoU 0.77
      building outline(s), shape-only, MasterMap Buildings within 40 m: IoU 0.57 from 1 building part (43 m²)
      north arrow: rejected — arrow, north 140.0° clockwise from up, confidence 0.68 ('arrow' without a NORTH label is not trusted (leader arrows look the same), confidence 0.68)
      ring at real size vs the buildings within 30 m of the address (bidirectional IoU, ±20% size, rotation free): IoU 0.70 with 3 building parts (198 m², 13 m from the point), rotated 286°, size ×0.9
      metric prior: drawing scale 1:200 × 300 dpi (JPEG dpi tag) → the ring is really 199 m², ×1.02 the hit parcel; no north label, rotation searched; line-network fit at that size: support 0.94, rotation 188°, 8 m from the address; 3 topographic areas under it (218 m²) → IoU 0.90
      elongation ring 2.94 vs hit parcel 3.2
      best neighbouring parcel: IoU 0.94 (199 m²)

      01_01878_FUL

      43 Clockhouse Way Braintree Essex CM7 6RDsite · matches
      7 pages · 1 traced
      43 Clockhouse Way Braintree Essex CM7 6RDErection of conservatory01/01878/FUL · record high

      Stage A — every raw page

      decision notice p1
      not a plan
      no plan caption
      decision notice p2
      not a plan
      no plan caption
      full plans p1
      site crop
      drawingness 0.99
      full plans p2
      not a plan
      no plan caption
      full plans p3
      not a plan
      no plan caption
      full plans p4
      not a plan
      no plan caption
      full plans p5
      not a plan
      no plan caption

      Stage B · C — each plan, in pipeline order

      site plan site__01_01878_FUL-FULL_PLANS-220974_page1_cropped1.jpg
      As filed by stage AA·6
      cropped · 50.4% of the page · det 0.508
      LocateB·1
      3/3 located · agreed 3/3 · black box = window
      WindowB·2
      window 693×693 px at (592, 798) · sent at ×1.478
      TraceB·3
      gpt-5.6-terra · 4 vertices
      what it said“I traced the heavy, dark outlined long quadrilateral curtilage, including its short end boundaries at the south-west and north-east ends. The finer diagonal property/road lines and the horizontal/vertical annotation/grid lines are not part of this boundary.”
      Back on the raw sheetC
      template match 0.847
      0.84
      high AUTO
      by
      gemini-3.7-flash
      cost
      $0.015
      no review flags
      by eye: right
      The long plot of 43 Clockhouse Way, exactly the parcel drawn.

      Stage D — on the map

      parcel the geocode hitsneighbouring parcelsfitted polygons (thin: line-network alternative)traced ring, placed by the best alignmentgeocoded point
      geocode verified premise ✓ · street ✓ · postcode ✗ · Places match 0.7
      Geocoded to 43, CLOCKHOUSE WAY, BRAINTREE, CM7 3RD · UPRN 100090295536 · hit parcel 454.0 m²
      landmarks resolved (4)
      Landmarks on the plan resolved: The Clock House → THE CLOCK HOUSE (premises) · CRESSING ROAD → Cressing Road (road) · Elmtrees → ELMTREES (premises) · Chapel → CHAPEL HILL AUTO SERVICES (premises)
      site matches
      0.99
      IoU shape only, area-normalised
      geocode verified
      hit parcel
      every candidate
      hit parcel alone: shape-only IoU 0.99 (area-normalised)
      union of land-use sites: shape-only IoU 0.99 from 1 parcel (454 m²)
      union of topographic areas: shape-only IoU 0.99 from 5 areas (454 m², Buildings, Land)
      direct fit to the line network: edge support 0.86, ring placed at 428 m² (×0.94 of the hit parcel), rotated 180°; encloses 5 topographic areas → IoU 0.89
      building outline(s), shape-only, MasterMap Buildings within 40 m: IoU 0.41 from 1 building part (68 m²)
      landmark registration: 3 anchors (3 premises), rotation 341.0°, 0.321 m/px, RMS 9.9 m; ring 4610 m², 137 m from the geocode; parcel under it IoU 0.12, topo areas under it IoU 0.20
      elongation ring 7.01 vs hit parcel 4.65
      best neighbouring parcel: IoU 0.89 (393 m²)

      01_01301_FUL

      36 Colneford Hill White Colne Colchester Essex C06 2PJlocation · matches
      4 pages · 1 traced
      36 Colneford Hill White Colne Colchester Essex C06 2PJErection of single storey bathroom extension01/01301/FUL · record high

      Stage A — every raw page

      decision notice p1
      not a plan
      no plan caption
      full plans p1
      location whole
      drawingness 0.89
      full plans p2
      not a plan
      no plan caption
      full plans p3
      not a plan
      no plan caption

      Stage B · C — each plan, in pipeline order

      location plan location__01_01301_FUL-FULL_PLANS-211693_page1.jpg
      As filed by stage AA·6
      whole_page
      LocateB·1
      3/3 located · agreed 2/3 · black box = window
      WindowB·2
      window 578×578 px at (834, 44) · sent at ×1.772
      TraceB·3
      gpt-5.6-terra · 20 vertices
      what it said“I traced the heavy, dark outlined long narrow curtilage/strip, including its angled left end and the short angled return at its eastern end. I did not follow the lighter surrounding parcel and road lines.”
      Back on the raw sheetC
      template match 1.0
      0.36
      low review
      by
      gemini-3.7-flash
      cost
      $0.023
      • locators split 2/3 on which plot this is
      by eye: right
      The heavily outlined strip at 36 Colneford Hill; the locator's point sits inside it.

      Stage D — on the map

      parcel the geocode hitsneighbouring parcelsfitted polygons (thin: line-network alternative)traced ring, placed by the best alignmentgeocoded point
      geocode verified premise ✓ · street ✓ · postcode ✗ · Places match 0.8
      Geocoded to 36, COLNEFORD HILL, WHITE COLNE, COLCHESTER, CO6 2PJ · UPRN 100090310820 · hit parcel 264.3 m²
      landmarks resolved (1)
      Landmarks on the plan resolved: Colne → COLNE PARK LODGE (premises)
      location matches
      0.88
      IoU bidirectional, real size
      geocode verified, ring at real size (1:1250 x 300 dpi)
      hit parcel
      every candidate
      hit parcel alone: shape-only IoU 0.88 (area-normalised)
      union of land-use sites: shape-only IoU 0.88 from 1 parcel (264 m²)
      union of topographic areas: shape-only IoU 0.88 from 3 areas (264 m², Buildings, Land)
      direct fit to the line network: edge support 0.85, ring placed at 173 m² (×0.65 of the hit parcel), rotated 66°; encloses 6 topographic areas → IoU 0.84
      building outline(s), shape-only, MasterMap Buildings within 40 m: IoU 0.66 from 4 building parts (114 m²)
      north arrow: rejected — arrow, north 344.0° clockwise from up, confidence 0.48 ('arrow' without a NORTH label is not trusted (leader arrows look the same), confidence 0.48)
      ring at real size vs the buildings within 30 m of the address (bidirectional IoU, ±20% size, rotation free): IoU 0.64 with 4 building parts (114 m², 0 m from the point), rotated 247°, size ×0.8
      metric prior: drawing scale 1:1250 × 300 dpi (JPEG dpi tag) → the ring is really 236 m², ×0.89 the hit parcel; no north label, rotation searched; line-network fit at that size: support 0.84, rotation 248°, 11 m from the address; 6 topographic areas under it (178 m²) → IoU 0.84
      elongation ring 4.46 vs hit parcel 3.67
      best neighbouring parcel: IoU 0.85 (528 m²)

      06_00740_FUL

      50 Tidings Hill Halstead Essex C09 1BWblock · similarblock · different
      8 pages · 2 traced
      50 Tidings Hill Halstead Essex C09 1BWErection of two storey rear extension to replace existing single storey rear extension06/00740/FUL · record high

      Stage A — every raw page

      not a plan
      no plan caption
      preprocessed
      not a plan
      no plan caption
      decision notice
      not a plan
      no plan caption
      decision notice preprocessed
      not a plan
      no plan caption
      full plans
      block crop
      drawingness 0.62
      full plans preprocessed
      block crop
      drawingness 0.66
      parish council response
      not a plan
      no plan caption
      parish council response preprocessed
      not a plan
      no plan caption

      Stage B · C — each plan, in pipeline order

      block plan block__06_00740_FUL-FULL_PLANS-39717_cropped1.jpg
      As filed by stage AA·6
      cropped · 2.5% of the page · det 0.643
      LocateB·1
      3/3 located · agreed 1/3 · black box = window
      WindowB·2
      window 315×315 px at (402, 392) · sent at ×3.251
      TraceB·3
      gpt-5.6-terra · 27 vertices
      what it said“Traced the outer dashed/solid property line enclosing the central house and its garden, rather than the internal building walls or the diagonal annotation/leader line. The southern edge of the curtilage runs beyond the bottom of the crop, so the short …”
      Back on the raw sheetC
      template match 0.835
      0.13
      low review
      by
      luna
      cost
      $0.027
      • locators split 1/3 on which plot this is
      • the window cuts the plot on the B side
      by eye: wrong
      A quadrilateral south of School Chase covering three plots; nothing on the block plan marks it.
      block plan block__06_00740_FUL-FULL_PLANS-39717_preprocessed_cropped1.jpg
      As filed by stage AA·6
      cropped · 9.2% of the page · det 0.854
      LocateB·1
      3/3 located · agreed 2/3 · black box = window
      WindowB·2
      window 410×410 px at (330, 143) · sent at ×2.498
      TraceB·3
      gpt-5.6-terra · 24 vertices
      what it said“Traced the bold, elongated wedge-shaped curtilage boundary: the upper diagonal line, the short right-hand return, the lower diagonal/curved line, and the left-hand connecting boundary.”
      Back on the raw sheetC
      template match 0.784
      0.49
      medium review
      by
      luna-pro
      cost
      $0.015
      • locators split 2/3 on which plot this is
      by eye: right
      Same drawing, cleaned scan: the single plot on the corner of Tidings Hill and School Chase that holds the point.

      Stage D — on the map

      parcel the geocode hitsneighbouring parcelsfitted polygons (thin: line-network alternative)traced ring, placed by the best alignmentgeocoded point
      geocode verified premise ✓ · street ✓ · postcode ✗ · Places match 0.7
      Geocoded to 50, TIDINGS HILL, HALSTEAD, CO9 1BW · UPRN 100090320337 · hit parcel 137.0 m²
      landmarks resolved (1)
      Landmarks on the plan resolved: SCHOOL CHASE → 1 (premises)
      block similar
      0.80
      IoU bidirectional, real size
      geocode verified
      direct fit to the line network
      every candidate
      hit parcel alone: shape-only IoU 0.43 (area-normalised)
      union of land-use sites: shape-only IoU 0.55 from 2 parcels (332 m²)
      union of topographic areas: shape-only IoU 0.76 from 5 areas (524 m², Buildings, Land)
      direct fit to the line network: edge support 0.88, ring placed at 175 m² (×1.28 of the hit parcel), rotated 5°; encloses 3 topographic areas → IoU 0.80
      building outline(s), shape-only, MasterMap Buildings within 40 m: IoU 0.88 from 3 building parts (182 m²)
      elongation ring 1.29 vs hit parcel 4.73
      best neighbouring parcel: IoU 0.87 (67 m²) — the shape prefers a neighbour
      block different
      0.65
      IoU shape only, area-normalised
      geocode verified
      hit parcel
      every candidate
      hit parcel alone: shape-only IoU 0.65 (area-normalised)
      union of land-use sites: shape-only IoU 0.65 from 1 parcel (137 m²)
      union of topographic areas: shape-only IoU 0.65 from 2 areas (137 m², Buildings, Land)
      direct fit to the line network: edge support 0.85, ring placed at 175 m² (×1.28 of the hit parcel), rotated 179°; encloses 3 topographic areas → IoU 0.59
      building outline(s), shape-only, MasterMap Buildings within 40 m: IoU 0.38 from 1 building part (58 m²)
      elongation ring 5.70 vs hit parcel 4.73
      best neighbouring parcel: IoU 0.87 (137 m²) — the shape prefers a neighbour

      83_00511_P

      Fieldings 231 London Road Black Notley Braintree Essex CM77 8QGlocation · similarblock · unverified
      7 pages · 2 traced
      Fieldings 231 London Road Black Notley Braintree Essex CM77 8QGErection of two storey side accommodation to provide "granny annex" and detached double garage to dwelling83/00511/P · record medium

      Stage A — every raw page

      p1
      not a plan
      no plan caption
      p2
      not a plan
      no plan caption
      p1
      not a plan
      no plan caption
      p2
      not a plan
      no plan caption
      p3
      not a plan
      no plan caption
      p1
      location block rejected
      caption seen but the is-plan gate refused it · drawingness 0.307
      p2
      not a plan
      no plan caption

      Stage B · C — each plan, in pipeline order

      location plan location__83_00511_P--1155792_page1_cropped1.jpg
      As filed by stage AA·6
      cropped · 4.1% of the page · det 0.331
      LocateB·1
      3/3 located · agreed 3/3 · black box = window
      WindowB·2
      window 186×186 px at (127, 172) · sent at ×5.505
      TraceB·3
      gpt-5.6-terra · 16 vertices
      what it said“I traced the heavy, dark four-sided curtilage line surrounding the upper house/garden plot: its long rear/top boundary, the right-hand boundary, the sloping front/lower boundary, and the left-hand boundary. The darker internal building marks and the lower …”
      Back on the raw sheetC
      template match 0.887
      0.79
      high AUTO
      by
      gemini-3.7-flash
      cost
      $0.011
      no review flags
      by eye: right
      The rectangular plot on London Road with the house in it, as drawn.
      block plan block__83_00511_P--1155792_page1_cropped1.jpg
      As filed by stage AA·6
      cropped · 3.2% of the page · det 0.561
      LocateB·1
      3/3 located · agreed 2/3 · black box = window
      WindowB·2
      window 240×240 px at (100, 342) · sent at ×4.267
      TraceB·3
      gpt-5.6-terra · 15 vertices · building fallback
      what it said“The only coherent application marking visible is the stepped outline of the building/structure: a heavily inked left-hand block joined to a much fainter larger right-hand block. No separate curtilage boundary is distinguishable, so I traced the marked …”
      Back on the raw sheetC
      template match 0.871
      0.01
      low review
      by
      luna
      cost
      $0.017
      • locators split 2/3 on which plot this is
      • 32% of the ring lies over blank paper, so those sides were not traced from anything drawn
      • traced the marked building; no curtilage was drawn
      by eye: partly
      The house with its side extension, not the plot; the block plan draws the buildings only.

      Stage D — on the map

      parcel the geocode hitsneighbouring parcelsfitted polygons (thin: line-network alternative)traced ring, placed by the best alignmentgeocoded point
      geocode unverified premise ✗ · street ✗ · postcode ✓ · Places match 0.6
      Geocoded to 223, LONDON ROAD, BLACK NOTLEY, BRAINTREE, CM77 8QG · UPRN 100090301226 · hit parcel 441.7 m²
      location similar
      0.68
      IoU bidirectional, real size
      drawing scale 1:1250 x 300 dpi, geocode unverified
      2 topographic areas under the metric placement (53 m²)
      every candidate
      hit parcel alone: shape-only IoU 0.36 (area-normalised)
      union of land-use sites: shape-only IoU 0.89 from 3 parcels (1617 m²)
      union of topographic areas: shape-only IoU 0.90 from 7 areas (1543 m², Buildings, Land)
      direct fit to the line network: edge support 0.83, ring placed at 863 m² (×1.95 of the hit parcel), rotated 155°; encloses 6 topographic areas → IoU 0.65
      building outline(s), shape-only, MasterMap Buildings within 40 m: IoU 0.76 from 1 building part (47 m²)
      north arrow: rejected — arrow, north 45.0° clockwise from up, confidence 0.38 ('arrow' without a NORTH label is not trusted (leader arrows look the same), confidence 0.38)
      ring at real size vs the buildings within 30 m of the address (bidirectional IoU, ±20% size, rotation free): IoU 0.82 with 1 building part (61 m², 13 m from the point), rotated 156°, size ×0.9
      metric prior: drawing scale 1:1250 × 300 dpi (JPEG dpi tag) → the ring is really 76 m², ×0.17 the hit parcel; no north label, rotation searched; line-network fit at that size: support 0.92, rotation 332°, 89 m from the address; 2 topographic areas under it (53 m²) → IoU 0.68
      elongation ring 1.92 vs hit parcel 5.4
      best neighbouring parcel: IoU 0.95 (436 m²) — the shape prefers a neighbour
      block unverified
      0.78
      IoU shape only, area-normalised
      geocode unverified: neither premise 'FIELDINGS' nor street '231 LONDON ROAD' found in the result
      building outline(s)
      every candidate
      hit parcel alone: shape-only IoU 0.31 (area-normalised)
      union of land-use sites: shape-only IoU 0.62 from 3 parcels (1617 m²)
      union of topographic areas: shape-only IoU 0.67 from 7 areas (1496 m², Buildings, Land)
      direct fit to the line network: edge support 0.81, ring placed at 980 m² (×2.22 of the hit parcel), rotated 66°; encloses 6 topographic areas → IoU 0.36
      building outline(s), shape-only, MasterMap Buildings within 40 m: IoU 0.78 from 1 building part (47 m²)
      elongation ring 1.59 vs hit parcel 5.4
      best neighbouring parcel: IoU 0.80 (494 m²) — the shape prefers a neighbour

      03_01073_FUL

      8 St Vincent Chase Braintree Essex CM7 6UJblock · similar
      11 pages · 1 traced
      8 St Vincent Chase Braintree Essex CM7 6UJErection of first floor rear extension03/01073/FUL · record high

      Stage A — every raw page

      p1
      not a plan
      no plan caption
      p2
      not a plan
      no plan caption
      p3
      not a plan
      no plan caption
      p4
      not a plan
      no plan caption
      p1
      not a plan
      no plan caption
      p1
      not a plan
      no plan caption
      p2
      not a plan
      no plan caption
      p3
      not a plan
      no plan caption
      decision notice p1
      not a plan
      no plan caption
      full plans p1
      block crop
      drawingness 0.76
      full plans p2
      not a plan
      no plan caption

      Stage B · C — each plan, in pipeline order

      block plan block__03_01073_FUL-FULL_PLANS-316553_page1_cropped1.jpg
      As filed by stage AA·6
      cropped · 11.4% of the page · det 0.489
      LocateB·1
      3/3 located · agreed 3/3 · black box = window
      WindowB·2
      window 525×525 px at (154, 1022) · sent at ×1.95
      TraceB·3
      gpt-5.6-terra · 23 vertices
      what it said“Traced the narrow curtilage containing the building labelled 8: its rear boundary runs from the stepped heavy left-hand line to the dividing line towards plot 6, the sides run down either side of the house/garden, and the frontage follows the curved road …”
      Back on the raw sheetC
      template match 0.691
      0.79
      high AUTO
      by
      gemini-3.7-flash
      cost
      $0.018
      no review flags
      by eye: right
      The shaded plot of No. 8 on St Vincent Chase, including its tapering front.

      Stage D — on the map

      parcel the geocode hitsneighbouring parcelsfitted polygons (thin: line-network alternative)traced ring, placed by the best alignmentgeocoded point
      geocode probable premise ✓ · street ✗ · postcode ✗ · Places match 0.7
      Geocoded to 8, ST. VINCENT CHASE, BRAINTREE, CM7 9UJ · UPRN 100090305871 · hit parcel 125.3 m²
      block similar
      0.72
      IoU bidirectional, real size
      geocode probable, ring at real size (1:1250 x 300 dpi)
      hit parcel
      every candidate
      hit parcel alone: shape-only IoU 0.70 (area-normalised)
      union of land-use sites: shape-only IoU 0.70 from 1 parcel (125 m²)
      union of topographic areas: shape-only IoU 0.70 from 2 areas (125 m², Buildings, Land)
      direct fit to the line network: edge support 0.85, ring placed at 77 m² (×0.61 of the hit parcel), rotated 276°; encloses 1 topographic areas → IoU 0.53
      building outline(s), shape-only, MasterMap Buildings within 40 m: IoU 0.62 from 1 building part (64 m²)
      north arrow: rejected — arrow, north 270.0° clockwise from up, confidence 0.98 ('arrow' without a NORTH label is not trusted (leader arrows look the same), confidence 0.98)
      ring at real size vs the buildings within 30 m of the address (bidirectional IoU, ±20% size, rotation free): IoU 0.60 with 1 building part (92 m², 19 m from the point), rotated 172°, size ×0.8
      metric prior: drawing scale 1:1250 × 300 dpi (JPEG dpi tag) → the ring is really 175 m², ×1.4 the hit parcel; no north label, rotation searched; line-network fit at that size: support 0.81, rotation 184°, 9 m from the address; 3 topographic areas under it (212 m²) → IoU 0.44
      elongation ring 3.85 vs hit parcel 3.78
      best neighbouring parcel: IoU 0.72 (174 m²)
      LEDGER

      What came out of each folder

      open

      By eye, 15 of 20 rings enclose the right plot. Trace bands, measured blind on 97 unseen pages: high 88% right · medium 67% · low 22%. Below high goes to review.

      Case folderPages inCaption pagesPlans filedUniqueRingsConfidence bandsAPI cost
      00_00024_FUL51222high, high$0.061
      01_00559_FUL21221none, high$0.058
      02_02212_FUL21111medium$0.047
      06_01326_FUL21222high, high$0.047
      07_02248_COU31222low, high$0.060
      01_01633_FUL32433medium, medium, medium$0.043
      01_01032_FUL31111high$0.025
      01_01878_FUL71111high$0.015
      01_01301_FUL41111low$0.023
      06_00740_FUL82222low, medium$0.041
      83_00511_P71222high, low$0.028
      03_01073_FUL111111high$0.018
      all571421201910 high · 11 auto-usable$0.466
      MAP

      How the ring is matched to the parcel

      open
      • Geocode → parcel. OS Places gives a UPRN; the UPRN picks an OS NGD site. QC: premise, street, postcode against the council record.
      • Shape fits round that parcel. Alignment, unions of neighbours, direct line-network fit, buildings. All of these are shape-only (area-normalised), so a rectangle matches any rectangle.
      • The drawing's own evidence. Caption 1:N × scan dpi = real size; the north arrow = rotation. The ring is then matched at real size (bidirectional IoU) and may not relocate while the geocode is verified and the size agrees.
      • Landmarks. OCR labels → OS Places / Names → a crop-to-grid transform that places the ring without the geocode.
      • Precedence. Sound landmarks → real size when the stated size ≠ parcel ×2 → verified geocode (best fit, +0.05 over the hit) → otherwise unverified.
      CasePlanGeocodeHit m²Hit parcel, shape onlyFinal IoUDecided byFitted toVerdict
      00_00024_FULlocationverified625.70.810.80 real sizegeocode + real sizehit parcelmatches
      00_00024_FULsiteverified625.70.880.88 shape onlygeocodehit parcelmatches
      01_00559_FULlocation0.7461.2————no ring
      01_00559_FULblockverified461.20.820.83 real sizegeocode + real sizehit parcelmatches
      02_02212_FULlocationverified571.80.260.84 real sizedrawing scale + real size2 building part(s) at real sizematches
      06_01326_FULblockverified7206.10.690.25 real sizedrawing scale + real sizemetric fit, 3 areasdifferent
      06_01326_FULlocationverified7206.10.740.88 real sizedrawing scale + real sizemetric fit, 39 areasmatches
      07_02248_COUblockunverified505.90.830.81 shape onlylandmarkshit parcelmatches
      07_02248_COUlocationunverified505.90.620.66 shape onlylandmarks4 sitessimilar
      01_01633_FULsite/blockverified5538.00.470.20 real sizedrawing scale + real sizemetric fit, 2 areasdifferent
      01_01633_FULsiteverified5538.00.500.58 real sizegeocodeline network, 4 areasdifferent
      01_01633_FULblockverified5538.00.470.60 real sizedrawing scale + real sizemetric fit, 1 areasdifferent
      01_01032_FULsiteverified194.60.970.97 real sizegeocode + real sizehit parcelmatches
      01_01878_FULsiteverified454.00.990.99 shape onlygeocodehit parcelmatches
      01_01301_FULlocationverified264.30.880.88 real sizegeocode + real sizehit parcelmatches
      06_00740_FULblockverified137.00.430.80 real sizegeocodeline network, 3 areassimilar
      06_00740_FULblockverified137.00.650.65 shape onlygeocodehit parceldifferent
      83_00511_Plocationunverified441.70.360.68 real sizedrawing scale + real sizemetric fit, 2 areassimilar
      83_00511_Pblockunverified441.70.310.78 shape onlyunverified1 building part(s)unverified
      03_01073_FULblockprobable125.30.700.72 real sizegeocode + real sizehit parcelsimilar
      RUN

      How to reproduce it

      open

      One command per batch; every stage resumes.

      Interactive map: webgis.html next to this page (local; needs the OS key).

      # the whole workflow, one command (github.com/jiaazhaoo/e2e-plan-extract)
      python3 -m e2e_plan_extract check
      python3 -m e2e_plan_extract run --cases 00_00024_FUL 01_00559_FUL --records records.xlsx --out OUT --budget-usd 5
      python3 -m e2e_plan_extract run --all --records records.xlsx --out OUT --stages ABCNDER   # E adds terra-on-OS
      python3 -m e2e_plan_extract report --out OUT --verdicts verdicts.json