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:
- 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).
- 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.
- Flood zone 3 covers 50%+ of the plot.
- SSSI, scheduled monument or ancient woodland covers 50%+ of the plot.
Look closer if any of:
- In a conservation area (any overlap).
- Any flood zone 2, or flood zone 3 under 50%.
- A listed building on the plot or within 50 m.
- An Article 4 direction — except Oxford's city-wide HMO direction, which only restricts change of use to small HMOs, not new homes.
- A TPO tree within 5 m, or a TPO zone overlapping.
- Green belt under 50%.
- In a National Landscape (AONB).
- 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:
- Dismissed → Look closer, and it is the headline: "On this plot: appeal dismissed Jun 2025, 1 home. Read the decision before you offer." The homes are held at two-thirds of the refused number (at least 1; 1 if 1 was refused). Odds: ×0.4 for the refused number or more (×0.3 if dismissed twice or more), band capped at Hard (at most 3 in 10); fewer homes ×0.6, capped at Uncertain. The "with an appeal" line is hidden.
- Allowed, under 3 years old → treated like a permission: its home count is the starting count (houses, unless far denser than houses manage in a town), the odds are floored at 80% for that many homes or fewer, and green-belt / one-home Pass rules don't apply.
- Shown first in the planning block, with the address, date, distance and the decision letter. Ask Suss gets it
as
this_plot_appealsand is told to lead with it. - Postcode points cover neighbours too, so the source says "check the address is this plot".
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
- Polygon layers: the plot outline against the layer. "% of plot" = share of up to 25 sample points inside the plot that fall in the layer. "Touches the edge" = overlap found at vertices only.
- Point layers: listed buildings within 50 m, TPO trees within 5 m, brownfield sites within 25 m of the plot outline.
- Source: planning.data.gov.uk, pulled 17 Oct 2026. TPOs exist for Oxford City only.
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):
- 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. - 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".
- 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. - 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.
- 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.
- 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)
- CIL: £176.24/m² for C3 houses, 2026 (DATA.md §2). The card can't total it without a floor area, so it says so and shows a 100 m² example.
- Affordable housing: 50% on 10+ homes (Local Plan 2036). "Yes" if the low estimate is 10+; "if 10+" if the high estimate is 10+ or the plot is 0.5 ha+; else "Not at this size".
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:
- 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.
- 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). - £/m² of that type, sold within 1 km (5+ sales); else the nearest type with data, and the card says so.
- 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².
- 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.
- 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.
- 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.