suss.

Card rules v1 (homes fit v2, round 5; sale value by type and own appeal history, round 6)

17 Oct 2026; homes fit v2 17 Oct 2026. Code: card.ts, homes.ts, margin.ts. Change both together. Written rules, no model. Every number on the card links back here or to its dataset.

Verdict

Checked in order. First match wins.

Pass if any of:

  1. No home fits, or one home fits and a building already covers 5%+ of the plot (a replacement, not a new home). Round 6: one home on an empty plot is a real answer, valued and given odds (Critique 3 #4, North Newington).
  2. Green belt covers 50%+ of the plot, unless (round 6, Critique 3 #4) the plot is inside a built-up area (Look closer: "Green-belt village: limited infilling can be allowed (NPPF 154e)"), or previously developed (Look closer: redevelopment can be allowed, NPPF 154g), or an appeal was allowed on it.
  3. Flood zone 3 covers 50%+ of the plot.
  4. SSSI, scheduled monument or ancient woodland covers 50%+ of the plot.

Look closer if any of:

  1. In a conservation area (any overlap).
  2. Any flood zone 2, or flood zone 3 under 50%.
  3. A listed building on the plot or within 50 m.
  4. An Article 4 direction — except Oxford's city-wide HMO direction, which only restricts change of use to small HMOs, not new homes.
  5. A TPO tree within 5 m, or a TPO zone overlapping.
  6. Green belt under 50%.
  7. In a National Landscape (AONB).
  8. SSSI, scheduled monument, ancient woodland or historic park and garden, under 50%.

The plot's own appeals come first (round 6, Critique 3 #2). A Planning Inspectorate housing appeal whose address point is on the plot or within 10 m (and, if its address names a road, names the plot's road; 18 Oct: the 30 m same-road allowance went after a neighbour 24 m away was called "on this plot"), is treated as this plot's history. The latest decision decides:

Worth a look otherwise. It means nothing on the constraint map stops it, not that it will get planning.

Brownfield register is shown, but doesn't change the verdict (it helps, it isn't a gate).

How constraints are tested

Homes fit v2 (Critique 2 #1, 17 Oct 2026)

v1 used fixed bands (40–60 homes/ha in a town, 25–35 elsewhere) and only 90 m² houses. On the 7 critique sites with a known permission it under-counted 6, usually by half: small town brownfield gets built as flats.

What v2 does, in order (homes.ts):

  1. A permission on the plot wins. If a brownfield-register entry (all fields now in geo.brownfield) lies on the plot or within 15 m, has a home count, and its register area is 0.4–2.5× the plot, the card uses that count and says it in plain words: "Permission for 8 homes, granted 2021 (brownfield register, West Oxon BR27)". It is in the verdict line, the homes block and the constraints row, and it floors the first-time odds at 80% for a scheme no bigger than the one permitted. A register entry that is a different size from the plot is shown but not used as the count.
  2. Not a small site. Mostly (50%+) protected open space on OS Open Greenspace (park, playing field, allotment, cemetery, churchyard, sports) → Pass, "not a small site". Over 1 ha usable with no matching register entry → no home number, "This is 8.6 ha: not a small site … Draw the part you mean", odds without a number. A title in several parts → Look closer, "draw the bit you mean".
  3. The fit. ln(homes per ha) = 3.29 − 0.051·ln(ha) + 0.119·ln(ha)² − 0.726·outside − 0.351·village + 0.185·ln(1 + bus stops within 400 m). Site area is the usable area (plot minus flood zone 3), clamped to 0.02–5 ha. Low–high = the middle half of the fit's misses (×0.71 to ×1.40). Fitted by least squares (light ridge, permitted sites weighted ×2) on the five councils' brownfield registers: 266 sites with a home count (177 permitted), each as a circle of its register area. Fit: fit-homes.py, features: homes-features.mjs, coefficients: app/lib/homes-model.json. Tried and dropped (no gain in leave-one-out error): building cover within 250 m, building cover on the site, distance to the town centre (OS Open Names), rail station within 800 m.
  4. Houses vs flats. (Round 6: town centres build taller. On previously developed land in a town, within 600 m of the centre, the top of the flats range is ×1.35. Waverley House, Bicester, 33 flats allowed: 13–26 → 13–36. The middle number is unchanged: distance to the centre gave no gain in the register back-test.) Houses = the fit capped at 50 homes/ha in a town, 35 in a village, 30 outside. Flats are offered when the fit is denser than that cap, the plot is inside a settlement, it isn't a field (OSM farmland or meadow on half), and it is previously developed (buildings on 10%+, the register, or an OSM car park, garages, yard, industrial, commercial or retail use on 30%+) or central (a Town/City point within 800 m, a station within 800 m, or 8+ bus stops within 400 m). Flats: 70 m² to sell (round 5: 65), 85% net-to-gross (82 m² built), BCIS flats £1,757/m² (£1,650–1,900 range), flats £/m² from the UCL linked data (type F), capped at the local flat median ÷ 65 m²; West Oxfordshire's flats-only CIL (£25/m²) applies. Storeys = built floor ÷ 45% of the usable area, 2–5.
  5. The land value starts on whichever scheme is worth more, after the affordable-cliff check for each, and says why ("Showing 7 houses: worth more than 15 flats (the permitted number) (£651k vs £0)"). A switch shows both.
  6. One home count drives everything. The server runs the same bestStart() as the browser, so the odds are for the land value's count ("For 8 homes, the land value's count"). The odds for each size band (1–9, 10–49, 50–299, 300+) come with the card, so editing the homes switches the odds at once. In a National Landscape near 10 homes the card shows both: "9 homes: Fair · 10+: Hard".

Towns (TOWNS in homes.ts): Reading, Oxford, Banbury, Bicester, Caversham, Didcot, Abingdon, Witney, Carterton, Kidlington, Henley, Wantage, Thame, Wallingford, Faringdon, Chipping Norton, Woodstock. Shrivenham and Watchfield, Upper Heyford, Chilton and Benson are villages: their ONS built-up areas pass 300 ha only because of MoD or research land (Critique 2 bug 7). "Inside" still needs half the plot inside the built-up area.

Back-test (17 Oct 2026)

Ground truth: permitted brownfield-register sites with a home count (planning.data.gov.uk brownfield-land, OGL; Cherwell publishes no counts). Error = |predicted − permitted| homes.

Test n v1 median error v2 median error within ×1.5, v1 → v2
Model on the register's own site area, leave-one-out (each site predicted by a fit without it) 177 6.0 homes (52%) 4.0 (35%) 63 → 105
Same, schemes of 50 homes or fewer 147 5.0 (57%) 3.0 (33%) 45 → 92
Card on the parcel you get by tapping the register point, model only (in-sample) 175 6.0 (67%) 4.0 (40%) 31 → 83
Same, parcel 0.67–1.5× the register area 81 5.0 (50%) 3.0 (31%) 28 → 51
Card default (register count used when it matches the plot) 175 6.0 0.0 31 → 115

v1 under-counted by more than a third on 111 of 175 tapped sites; the v2 model on 57; the card default on 50 (mostly where the register site is a small part of a big title, which the card now flags). The leave-one-out row is the honest one for a plot with no register entry: about 4 homes, or a third, either way.

The critique sites (Critique 2 §2; permitted count in brackets):

Site v1 card v2 card shows v2 model alone, tapped parcel v2 leave-one-out, register area
Wheatley, Railway Hotel (15) 5–7 15 flats, permitted (houses 5–9) 9 10
Wallingford, 11 St Martin's St (8) 2–4 8 flats, permitted (houses 2–4) 7 7
Chipping Norton, police station (8) 11–16, odds Hard 3 in 10 8, permitted; odds Good 8 in 10 for 8 15 (parcel 2,812 m² vs 1,700 on the register) 11
Carterton, 79 Milestone Rd (6) 2–3 6 flats, permitted 7 9
Carterton, rear 9–11 Burford Rd, tap (8) 88–133 on a 2.2 ha green Pass: 98% playing field; points to the 0.074 ha permission, "draw that part" — 9
Abingdon, The Poplars (7) 3–5 7 flats, permitted 7 6
Botley, 70 Cumnor Hill (7) 7–10 7, permitted 10 10

Not counted yet: access, frontage (measured, frontage_m, not used), shape, ownership.

Local values

Median sale price by type (detached, semi, terraced, flat), Land Registry Price Paid, standard sales (category A) only, postcode centre within 1 km of the plot centre, last 24 months of data (26 Aug 2024 – 26 Aug 2026). Shown when 3+ sales. No £/m² until EPC floor areas are connected (needs Nick's account).

Levies (Oxford City)

Planning nearby

PlanIt sample: ~1,000 most recent Oxford applications (last 365 days), within 500 m of the plot centre. Approved = Permitted or Conditions; refused = Rejected. New-homes list matches "dwelling/house/flat/homes" and drops extensions, HMOs, lawful-development certificates (by wording and by ref, e.g. /LDE), prior approvals. Labelled "sample · licence pending". Not for launch until PlanIt reuse terms are clear.

Land value ("Most you could pay for the land")

Code: margin.ts. Runs in the browser so overrides recalculate at once. The developer's own maths, residual way round:

GDV          = homes × size m² × sale £/m²
− build      = homes × size × build £/m² × (1 + 10–15% external works)
− contingency= 5% of build                      (S&V viability report Table 6.10)
− fees       = 10% of build                     (report: 6.5% + planning costs; small schemes run higher)
− CIL        = homes × size × council/zone rate (all floor area treated as new)
− s106       = £ per home, rough: ≤4 homes £3,253 · 5–10 £3,615 · 11–149 £26,548 · 150–299 £27,887 ·
               300+ £35,569 (S&V typology appraisals; stand-in for the other councils; no tariff
               contributions on ≤10 homes, PPG). Cherwell (no CIL) flagged as likely higher on 11+.
− affordable = if homes ≥ threshold or site ≥ 0.5 ha: GDV × % × (1 − 50–70%).
               South Oxfordshire in the AONB: threshold 5 (cash under 10, policy H9).
− BNG        = £0 if plot ≤ 0.2 ha and under 10 homes; else £850–2,020 per home (greenfield) or
               £0–711 (previously developed: buildings cover 10%+, on the brownfield register, or an OSM car
               park / garages / yard / industrial / commercial / retail use on 30%+ — Critique 2 bug 1)
− sales      = 2.5–4.25% of GDV (report Table 6.11: marketing 3%, agent 1%, legal 0.25%), mid 3%
− finance    = 7.5% a year (report Table 6.11): build-phase costs half-drawn over the build, then all
               of it for 6 months' sales; the land for the whole period. Build: ≤9 homes 12 months,
               10–29 18, 30+ 24 (assumption)
− buying     = SDLT (non-residential: 0% to £150k, 2% to £250k, 5% above) + 1.5% agent/legal
− profit     = 20% of GDV by default (viability benchmark 15–20%), editable
= most you could pay for the land. Finance and buying costs depend on the land price, so it is
  solved for (bisection). Low/high take the ends of every range. Demolition and abnormals not costed.

Sale value by house type (round 6, Critique 3 #1). Round 5 priced every house as a 90 m² semi and capped £/m² at the semi median ÷ 90 m². A 350 m² detached house in Dorchester-on-Thames came out at £3,356/m² and the plot at £71k against a £1.85m asking price. Now:

  1. Type from the scheme. A home of 120 m²+ is detached. Otherwise by density on the usable area: under 30 homes/ha detached, 30–45 semis, 45+ terraced. Flats are their own scheme.
  2. Typical new-build size per type (the default size): detached 130 m², semi 90, terraced 83, flat 70. These are the median EPC floor areas of new-build sales in Oxfordshire, Nov 2021 – Oct 2024 (UCL Price Paid × EPC, geo.sales_ppsqm; n = 2,176 / 1,203 / 533 / 347), just above the nationally described space standard (4-bed 7-person 115 m², 3-bed 84–93, 2-bed flat 70).
  3. £/m² of that type, sold within 1 km (5+ sales); else the nearest type with data, and the card says so.
  4. Check: if £/m² × the type's typical size is above the local median for that type (Price Paid, 24 months, 1 km), £/m² = median ÷ typical size. The size you type never moves the check: a 350 m² house is priced at the detached £/m².
  5. New-build premium, measured where new and second-hand homes of the same type sold in the same ~1 km grid square (Oxfordshire 2021–24, squares with 5+ of each): detached ×0.98, semi ×0.99, terraced ×1.07 (115 squares), so none on houses; flats ×1.16 median (15 squares, middle half 0.99–1.49), so +15% on flats. Flats are no longer capped at the resale flat median ÷ 65 m² (round 5), which priced new 2-beds as old studios.
  6. When you change homes or size, size and £/m² follow the scheme until you type your own. A saved site without your own numbers reopens on the current rules, not the numbers saved under the old ones.
  7. A permitted scheme opens on itself (register or allowed appeal), even when another pays more. If it doesn't pay, the card says "The permitted 15 flats don't pay at local prices: −£519k" instead of £0.

Before and after, critique 3's six plots for sale with permission (asking or guide price; Suss at the permitted scheme, drawn as a square of the stated size; lv.mjs in the session scratchpad):

Plot Asking Round 5 Round 6 Ratio, before → after Priced as
Yarnells Hill, Botley, 1 × 310 m² £750k £393k £405k 0.52 → 0.54 detached £5,177/m²
Windlass Court, Grove, 5 houses £1.0–1.1m £236k (5 × 90 m² semis) £305k (5 × 130 m² detached) 0.22 → 0.29 detached, capped at £495k median ÷ 130
Abingdon Rd, Dorchester, 1 × 350 m² £1.85m £71k, verdict Pass: green belt £409k, Look closer, own appeal allowed Aug 2026, Good 8 in 10 0.04 → 0.22 detached £4,809/m²
Newmans Close, Upton, 1 × 150 m² £300k £202k £202k 0.67 → 0.67 detached £5,220/m²
Great Coxwell, 1 × 300 m² £200–250k £307k £307k 1.36 → 1.36 detached £4,607/m²
Cuddesdon, 1 × 250 m² £750k £204k, Pass: green belt £277k, Look closer (green-belt village) 0.27 → 0.37 semi £/m² (too few detached sales)

Range 0.04–1.36× → 0.22–1.36×, median 0.45×. The order of magnitude is now right on all six; it still reads low on premium one-off houses (Dorchester, Grove). Asking prices run above sale prices, the residual keeps a 20% profit and BCIS build costs, and a 5-bed with a pool sells above the local detached £/m². Not fixed by more rules without realised plot sales to test against.

Flats on register sites (critique 3: £0 on 5 of 6). Round 6, card default, flats option: Wheatley 15 flats −£519k (40% affordable and major-scheme s106 at 15), Milestone Rd 6 flats −£75k, The Poplars 7 flats −£33k, Wallingford 8 flats £47k, Botley 10 flats £849k, Chipping Norton 10 flats £149k. The negative ones now say so ("don't pay at local prices") with the figure, and open on the permitted flats.

Text fixes (round 6): "1 houses" → "1 house"; £1,175k → £1.18m (anything from £999.5k shows in millions); land-value range keeps its spaces ("£536k to £771k"); saved names use the register or appeal address ("79 Milestone Road, Carterton", not "Plot off Oakfield Road").

Affordable cliff: if the middle of the fit is at or over the threshold on a site under 0.5 ha, the card compares one home under the threshold with the default and starts on the higher land value, with "9 homes: £540k · 10 homes: £63k — affordable housing starts at 10" and a toggle.

Critique 1 examples, v1 → v2 (card defaults): Didcot car park 28419998 £697k at 10 homes / £1.20m at 9 → £540k at 9 (10 homes: £63k). Witney 27641499 £1.10m → £648k at 10. Henley centre: "can't say" (no RG sales) → £686k at 3.

Asking price (optional): margin at that price = land value + profit − asking price, in £ and % of GDV. Verdict on it: Works ≥ 20%, Thin 15–20%, Pass < 15%.

Existing use (round 5, Critique 2 #5): a building that looks like a house (1–3 outlines, largest 40–400 m², not on the register, no OSM car park or commercial use) is valued at the local median for its type (detached if the footprint is 90 m²+, else semi), +20% to make the owner sell. The card compares it with the ceiling: "Existing use ~£X (detached median £Y + 20% to make the owner sell). Your ceiling £Z clears it by ~£W: tight" (under 15% headroom), or "It's worth more as it is". Editable.

Your numbers (round 5, Critique 2 #6): scheme, homes, size, £/m², build, profit, finance, s106, existing use and asking price are saved with the site (saved_sites.inputs), synced when changed, and used on reopen, in the report, the CSV, the compare view and Ask Suss.

Existing building (v2): a building counts if half its footprint is on the plot, or its part on the plot is ≥40 m² and ≥10% of the plot (OS merges touching buildings, so a town-centre wing can belong to a 9,850 m² outline — Thame 62176513 was missed in v1, now 83% covered). Share = union of those parts ÷ plot. The parts are drawn grey on the map, because the OSM basemap misses some buildings (Launton 52907260 is a primary school OSM doesn't draw; OS and aerial imagery agree it's there). The card always prints a line: buildings found, "No building found (OS OpenMap Local)", or "Couldn't confirm buildings here" if the lookup failed. Drawn sites also count registered titles crossed.

Defaults: homes = middle of "Homes fit"; size by house type (round 6, above; was 90 m²); build £1,460/m² (BCIS lower–median £1,365–1,555, South & Vale viability report Table 6.10); sale £/m² = data £/m² when lib/data provides it, else median semi (then terraced, detached) within 1 km ÷ 90 m², tagged "rough". Editable: homes, size, sale £/m², build £/m², profit %. If no homes fit or no sale price: "Can't say yet".

BNG note: DATA.md §4 predates the 0.2 ha exemption (parity.md).

Planning odds

Spec, factors and back-test: planning-odds.md (v2, 18 Oct 2026). Code: odds.ts. Headline = first-time chance = council PS2 grant rate × the plot's constraint factors, "about N in 10 first time". Appeal route shown separately. Good ≥ 75% · Fair 55–74% · Uncertain 35–54% · Hard < 35%. Look closer caps at Fair; 50+ homes: no number, at most Uncertain; 300+ homes: Hard. OGL sources only.