You ran your model. The output looks beautiful—smooth corridor linking protected areas. Then you went to the site. animal aren't using the predicted paths. What broke? Likely your model ignored behavioral fric: the invisible walls of fear, memory, and social learning that shape real movement.
Most connectivity models treat landscapes as fric surface based on physical spend—slope, land cover, distance to water. But a jaguar won't cross a pasture even if it's 'low expense' on paper. A turtle may avoid a culvert that looks perfect to a human engineer. This article is for bench biologists, GIS analysts, and conservaing planners who orders practical steps to diagnose and fix models that don't account for behavior. We'll cover what to check opening, second, and third—no fluff, just a pipeline you can apply today.
Who Needs This and What Goes faulty Without It
A site lead says units that record the failure mode before retesting cut repeat errors roughly in half.
conservaal planners using least-spend path analysis
You're staring at a map that looks elegant—dark green corridor connecting habitat patches, algorithms humming to find the cheapest route through hostile terrain. The model says animal will phase here. Funding was approved based on this map. Then the site data comes back: collared animal detour around the predicted path, cross roads at exactly the spots your model ignored. That hurts. I've watched units spend six months building resistance surface only to discover the corridor doesn't exist on the ground—because nobody asked whether an animal would choose that path over a slightly riskier but more direct alternative.
NGOs designing wildlife corridor
'We lost one full grant cycle because our corridor placement assumed animal would use any vegetated link. They didn't. The real barrier was invisible to our resistance layer.'
— conservaal program manager, after a failed corridor project
Agency staff reviewing environmental impact assessments
What breaks opening is credibility. When connectivity models that ignore behavioral fric meet real-world scrutiny—post-construction monitoring, legal challenges, public skepticism—the gap between prediction and performance erodes trust in landscape planning itself. That's a harder expense to reverse than any misplaced underpass.
Prerequisites: What to Settle Before You Debug
Understanding your model's core assumptions
Before you touch a row of code or re-run a simulation, you volume to know what your connectivity model thinks it knows. Most conservaal models—circuit theory, least-overhead paths, resource-selection functions—produce quiet bets about animal behavior. They assume movement is goal-directed, that animal perceive habitat as continuous, or that resistance surface derived from land cover capture real avoidance. The catch? These bets can be off in ways that look like data errors. I have seen groups spend three days re-checking fric values when the real snag was the model treating a stream as a barrier when the target specie wades through it daily. Dig out the original paper or documentation for your core algorithm. List three assumptions it makes about how an animal decides which pixel to shift into next. That list is your debug map. Without it, you are fixing a hardware you don't understand.
Knowing your specie' perceptual range and movement ecology
Here is where behavioral frical lives—or dies. A connectivity model fails meaningfully when it ignores how far an animal actually sees, hears, or smells. A garter snake does not perceive a highway two kilometers away the way a wolf does. Its movement decisions happen at a volume of meter, not landscape extents. If your model uses 30-meter resolution but your specie only responds to obstacles within 5 meter, you are modeling noise. Worse: you will blame the algorithm when the real culprit is a mismatch between grain size and perceptual range. The rapid fix? Pull movement data from existing telemetry studies or track surveys for your specie. Calculate the median phase length and the maximum observed displacement per day. If those numbers feel tight relative to your pixel size, you have found your initial frical interface. Most units skip this—they load a raster and assume the animal plays by human rules. That hurts.
'We ran a least-spend path for jaguars and got nonsense routes cutting through villages. We had set the off-dispersal threshold—three times the real daily travel distance. The model was trying to fly.'
— bench ecologist, after swapping to specie-specific shift-length filters
Having site validation data you trust
You cannot assess model failure without something real to compare against. Camera trap sequences, GPS collar fixes, or systematic track surveys—one of these must exist, and it must be independent of the data used to construct the model. The most frequent pitfall I see: groups calibrate on 80% of their telemetry data, then validate on the remaining 20% from the same individuals. That tests internal consistency, not behavioral realism. You require data from a different season, a different population, or a different land-use context. Without it, you are guessing whether the model's silence is broken logic or a true biological gap. A solo camera-trap station that catches an animal crossed the 'impassable' barrier is worth more than a thousand simulated paths. Go find one. Place it deliberately—not randomly—at the edge of what your model thinks is possible. If you get a hit, your assumptions are flawed. Good. Now you have something to fix. If you get nothing, you still don't know whether the animal avoided the spot or your camera failed. That ambiguity is why you pull multiple validation gears: collars for path fidelity, tracks for corridor use, cameras for crossion events. Three lines of evidence. Two must agree before you trust a solo model output.
Core pipeline: Five Layers to Check in sequence
Layer 1: Data resolution and grain size
launch here or waste every layer after it. I have seen groups spend weeks tuning permeability values only to discover their source rasters were resampled to 10-km blocks. You lose a day—maybe more. The fix is brutal: check the cell size of your input surface against the actual movement capacity of your specie. A jaguar crossed 30-km territories? Fine with 1-km pixels. A newt migrating 200 meter through agricultural ditches? Anything coarser than 10-meter cells erases the corridor entirely.
Pull your raw DEM, vegetation, and land-cover rasters side by side. Are they mismatched? Most GIS packages will resample silently—that hurts. Align to the finest grain your data can support, then ask yourself: does this resolution capture the behavioral pinch points? Hedgerows, culverts, fence lines—those disappear fast. The trade-off is file size. You cannot model continental connectivity at 1-meter resolution without crashing your equipment. Accept that and clip your extent before you proceed.
Layer 2: expense surface accuracy and behavioral weighting
This is where most modelers accidentally hard-code their assumptions. Typical mistake: assigning 'forest = 1, agriculture = 5, urban = 100' based on gut feel. That sounds fine until you realize a cornfield in August is structurally identical to forest for a flying squirrel—but a desiccated death trap for a salamander. rapid reality check—whose behavior are you modeling? Weight your overhead surface using published movement data or expert elicitation, not a ranked list you scribbled on a napkin.
The catch is that many peer-reviewed spend values come from solo studies in specific ecoregions. Transferring those weights to your landscape often introduces error that compounds across layers. We fixed this once by running a sensitivity analysis: we permuted three expense rasters through 20 weight combinations. Two thirds of the resulting connectivity maps looked nothing alike. That told us our behavioral assumptions were creating artifacts, not corridor. trial your weights with a plain Monte Carlo shuffle—ten iterations reveal fragility fast.
Layer 3: Behavioral parameters (permeability, mortality risk, social factors)
Most groups skip this. They assume permeability equals straightforward resistance, ignoring that animal learn and hesitate and die trying. A road crossion model that only assigns mortality risk without accounting for traffic volume, road width, or roadside vegetation is not behavioral—it's a cartoon. Permeability isn't static either. A wolf pack avoids human infrastructure during daylight but crosses paved roads at 2 AM. Your model needs temporal bins for that, or you're averaging risk into meaninglessness.
Social factors bite hardest. Dispersal in many specie depends on conspecific attraction or territorial avoidance—neither of which appears in standard least-overhead path tools. I once debugged a connectivity model for desert bighorn sheep that showed nonsensical movement across open basins. Turns out the model had zero representation of group cohesion: solitary rams follow different routes than nursery herds. Adding a social factor (loosely: 'probability of route abandonment if no conspecific sign detected within 500 m') re-routed the core corridor entirely. Include at least one social or behavioral modifier—even a crude one beats ignoring it.
Layer 4: Temporal scale (seasonal vs. annual movement)
Here is where annual averages murder your results. A white-tailed deer in the northern range uses summer foraging habitat and winter thermal refugia—paths between them may be used twice a year yet appear as low-frical corridor in an annual model. That is not connectivity; that is migration mapping mislabeled. Seasonal rasters should be separate objects, not collapsed into one.
'We spent six months optimizing our resistance surface before we realized we were modeling spring dispersal against fall crop rotations. The corridor shifted 40 km north when we fixed the season.'
— conversation with a conservaal modeler, 2023
Set your temporal window explicitly. Is this a breeding-season dispersal model? Winter range connectivity? Annual home-range movement? Each answer changes which layers matter. If you cannot decide, form separate seasonal graphs and compare them side by side. They will diverge—often dramatically.
Layer 5: Validation against independent movement data
You cannot skip this. A connectivity model that matches your assumptions perfectly is probably faulty in invisible ways. Pull GPS collar data, camera-trap detection events, or genetic samples from known corridor. Does your modeled path predict where those animal actually went? If not, the error lives upstream—in resolution, spend weights, or behavioral parameters. Do not tweak the model until it fits; open over at Layer 1 and question your grain size opening. That hurts, but it saves the next iteration.
Tools, Setup, and Environment Realities
Circuitscape: handling multiple pathways
Stack Circuitscape on your machine and you'll quickly notice it treats the landscape like a giant circuit board. Current flows everywhere at once — that's the whole point. But here's the catch we've had to hammer out in three different projects: Circuitscape will happily route current through areas an animal would never touch. I watched a crew run a jackal connectivity analysis across the Horn of Africa; Circuitscape lit up a straight-line corridor through a 90-kilometer stretch of active military zone. The specie, of course, avoids gunfire. The aid doesn't know that. You fix this by baking behavioral fricing into your resistance surface before you hit run. Most people layer roads, agriculture, urban cover. That's not enough.
What usually breaks opening is your expense layer resolution. Circuitscape runs fine on 250-meter cells until you realize that a lone cell covers a small game trail and a busy highway simultaneously. Two behaviors in one cell — impossible to assign. We've seen outputs that look elegant but hide a fatal average. The workaround? construct your resistance surface at the coarsest resolution where behavior still holds. For a forest-dependent bird, that might be 30 meter. For a wide-ranging carnivore, 90 meter might labor. Test both. The results diverge.
'The prettiest current map I ever produced was pure artifact. I had forgotten to mask out a lake the animal couldn't cross.'
— site biologist, after rebuilding the same analysis three times
Linkage Mapper: corridor delineation
Linkage Mapper gives you clean corridor polygons — perfect for land-use planners who pull shapes, not currents. But clean doesn't mean correct. The aid builds corridor by calculating least-overhead paths between habitat patches, then buffering them. The buffer width is arbitrary. Pick 2 kilometers and you might swallow entire towns. Pick 500 meter and you slice through critical movement bottlenecks. That's not a bug — it's a design trade-off you must own. What I cannot stress enough: Linkage Mapper's corridor edges are artificial. They look definitive on a map presented to a zoning board. They are not.
Behavioral fric hits hardest at corridor pinch-points. Linkage Mapper will flag a narrow strip of forest as a critical linkage. The algorithm doesn't know that strip sits next to a weekend hunting camp where dogs run free. We fixed this once by assigning a behavioral spend multiplier to a 500-meter buffer around every recreation trail in the dataset. The corridor didn't disappear — it shifted 400 meter east, following a drainage ditch that offered zero human encounters. That shift was the difference between a corridor that existed on paper and one an actual bear might use. The expense of ignoring behavior is not abstract — you lose a day of fieldwork finding the mismatch, then lose trust when stakeholders ask why the model missed the obvious.
'A corridor is only as real as the behavior you forced it to ignore.'
— A conservaing planner, after site verification
UNICOR: individual-based movement simulation
UNICOR takes a different gamble — it simulates individuals, not currents or overhead paths. Each virtual animal wanders the landscape, making phase-by-shift movement decisions. This is the closest we get to behavioral reality in a desktop fixture. But the reality comes with a price: parameter explosion. You must set phase length, directional persistence, mortality risk, barrier permeability, and — critically — the behavioral spend per habitat type. Get one number flawed and your simulated population beaches itself against a feature the real specie would cross without thinking. I watched a colleague spend two weeks calibrating UNICOR for a desert tortoise only to realize the dispersal distance parameter was off by 600 meter. The simulated tortoises died two generations early. The real ones don't.
The environment reality is this: UNICOR demands more up-front behavioral data than any other fixture on this list. If you have telemetry or GPS collar data, it's your best bet. If you don't, you're guessing — and UNICOR will expose every guess as a flaw in the output. Most groups skip the sensitivity analysis. Don't. Run the model with your best-guess parameters, then vary each one by ±20%. Watch how the connectivity maps revision. If a 20% shift in shift length alters your corridor by 40 kilometers, you have a snag — not in the tool, but in your behavioral assumptions. Fix those before you present a solo map to anyone who can say no.
Variations for Different Constraints
Working with limited site data
The standard five-layer routine assumes you have decent occurrence records—clean coordinates, decent sample sizes, some absence data or at least pseudo-absences you trust. Reality for many of us: you've got 14 museum points from the 1970s, a handful of iNaturalist observations with questionable IDs, and a study area that's half cloud cover. That hurts. Most groups skip this: they plug what they have straight into Maxent, crank the settings, and wonder why the output shows a corridor through a shopping mall. I have seen this blow up more times than I can count. The fix is brutally straightforward but hard to stomach—prune before you model. Drop points that cluster within 500 meter of each other unless the specie genuinely occupies micro-sites that fine. Use a buffer-based thinning routine, not a random subsample. You'll lose data, but the remaining points carry signal instead of spatial autocorrelation noise. Then shift your connectivity layer logic: instead of circuit-theory resistance surface that crave continuous cover, use a graph-based network where nodes are your remaining patches and edges are defined by the minimum expense path—not the cumulative resistance. This trades detail for robustness. You get fewer false positives and a map that doesn't lie about where the animal can actually travel.
The catch? Sparse data amplifies the effect of every modeling assumption. One outlier point can yank your least-overhead path sideways by ten kilometers. So run a jackknife sensitivity: drop each point one at a slot and see if the corridor changes. If it does, that point is a lever—and you orders more site validation before you trust the output at all. Not a pleasant conclusion, but better than publishing a connectivity map that's biologically flawed.
Multiple specie with conflicting requirements
One resistance surface doesn't fit all. A goshawk glides over open gaps; a salamander won't cross a dirt road in summer. Try to model both on the same overhead grid, and you'll form corridor that effort for neither. The standard dodge is to pick an umbrella specie—a charismatic forest-obligate whose needs supposedly cover the rest. That works until it doesn't. What usually breaks opening is the understory specialist: the amphibian or the flightless beetle that needs continuous leaf litter, not just canopy cover. So here's the variation: assemble separate resistance surface for each functional guild—arboreal, ground-dwelling, dispersal-limited. Then run the core workflow independently for each guild. Expensive? Yes. But the insights pay back in days: you'll see where corridor overlap (high-priority anchor zones) and where they diverge (trade-off zones that volume active management, not passive protection). One concrete anecdote: a crew I worked with in Madagascar modeled three lemur specie—one canopy specialist, one understory generalist, one that avoided secondary forest entirely. The overlap zones were less than 12% of the total area. They bought those 12% with project NGO funds, not the entire corridor. That's the kind of decision you can't construct from a solo-specie product.
rapid reality check—multiple surface mean multiple sets of parameters. Check that your overhead values are scaled consistently across specie, or the algorithm will effectively weight one specie' constraints heavier than another's. Normalize each resistance layer to 0–100 before you combine or compare. And don't average the layers. That's the most frequent mistake. An average hides the pinch point—a road that blocks the amphibian but not the bird will vanish in the mean.
Incorporating climate shift scenarios
Your connectivity model built on today's land cover is a snapshot at best. specie shift, and not always toward the cool, wet refugia you'd assume. The variation here: treat future climate scenarios not as additional input layers but as perturbation tests on your existing resistance surface. Take your current best corridor—say, a riparian strip through agricultural land. Now ask: does this corridor still connect suitable climate envelopes in 2050? Overlay a straightforward climate velocity raster (you can download these freely from global datasets; no demand to run your own GCM). Where the velocity arrows point perpendicular to your corridor orientation, that seam blows out. The animal will have to shift sideways, and your corridor becomes a dead end. I have seen projects waste years acquiring land for corridor that climate shifts had already made obsolete—but nobody checked because the model assumed a static environment.
Fix it cheaply: compute the overlap between your connectivity surface and climate refugia layers (areas projected to retain suitable microclimate). If overlap is below 30% of the corridor extent, flag that corridor as high risk. Then run a plain what-if: shift the corridor 2–5 km upslope or north (depending on your region) and recalculate the expense. You'll often find that a 10% increase in human footprint opens up 40% more climate-resilient path. That's the trade-off—short-term resistance for long-term persistence. Present it honestly in your final map: a primary corridor for today, a dashed secondary alignment for the next three decades.
'The corridor that works now is not the corridor that will work for your grandchild's bench season. Model the static one, sure. Then check if it dissolves under a 2°C scenario.'
— corridor ecologist, Pacific Northwest site workshop, informal discussion
Pitfalls, Debugging, and What to Check When It Fails
Corridors too wide: overestimated dispersal
You modeled a 500-meter-wide riparian strip. Looks great on a map—pandas could waltz through it. But the animal aren't waltzing. They're hesitating at the edge, then turning back. That's behavioral fric you didn't pay for. Wide corridors feel safe, but they often fragment internally: open gaps, human trails, road noise that doesn't show up in your land-cover layer. I have watched crews celebrate a 'perfect' connectivity raster only to discover radio-collar data showing zero passages. The fix isn't widening the corridor—it's tightening the effective width. Strip out the low-craft cells inside your best path. Re-run least-expense analysis with a fric surface that penalizes open edges, not just land-use class. Most groups skip this: they treat every pixel inside the polygon as equally permeable. off. A corridor is only as good as its narrowest chokepoint where an animal actually commits to crossed. That hurts, but a 200-meter corridor with continuous cover beats a 500-meter one with a parking lot in the middle.
Corridors too narrow: missing behavioral flexibility
The opposite failure is subtler. Your model says a 50-meter strip is sufficient—and technically, the least-spend path passes through. But animal don't read your path. They explore, double back, bed down, avoid a dead branch that smells like predator. If the corridor is razor-thin, one windstorm knocks out the canopy and suddenly your connector is a heat trap. We fixed this once by widening a corridor by just 30 meter on the south side—pass rates tripled. Why? Because that added a microhabitat edge where dispersing juveniles could pause. The trap is assuming optimal movement equals any movement. It doesn't. A corridor that forces constant vigilance is a corridor animal use once, if at all. Check your model's move-length assumptions: are you letting agents teleport across gaps they'd have to creep through? Narrow corridors also amplify edge effects—more light, more wind, more predators hunting along the seam. Buffer your fricing layer by at least one home-range diameter on either side of the path. Then ask: does a mother with cubs still build it through? If not, your corridor is a myth.
'The corridor looked passable on screen. On the ground, it was a gauntlet of cow pastures and barbed wire—functional only if you ignore behavior.'
— conversation with a conservaing planner after their third failed camera-trap season
Corridors misaligned: faulty starting points or barriers
This one stings because your model runs perfectly—clean paths, low overhead, high connectivity scores—but nothing moves. Not a lone disperser. The snag isn't the corridor, it's where you placed it. Big lesson: connectivity models don't correct bad anchor points. If your source population is in the flawed patch—say, a sink habitat with zero recruitment—the corridor is a ghost highway. I have seen crews spend weeks refining resistance values only to realize the northern endpoint sat in a recently logged area where the last five breeding females had been poached. Check your core areas against recent occupancy data, not land-cover polygons from three years ago. Barriers are trickier. A major road might show as a 100-meter overhead spike, but animal habituated to traffic may cross it at culverts—while a seasonal creek with no cover can be an invisible wall. rapid reality check—does your friction surface treat a 3-meter-wide logging road the same as a silent two-track? It shouldn't. Walk the endpoints. Map the actual obstacles within 500 meters of the corridor entrance. Then adjust your overhead raster to reflect what animal perceive, not what a satellite sees. That fixes most phantom corridors—and saves you the embarrassment of telling funders your 'critical linkage' links nothing.
FAQ or Checklist in Prose: Common Questions
How to set friction values without empirical data?
You don't have telemetry on every bear crossion a highway—welcome to real conservaal. Most units skip this phase entirely, defaulting to uniform expense surface where movement is either impossible or frictionless. That hurts. Without data, borrow from natural history: ask a bench biologist what stops a specie. Is it open asphalt or a four-lane divided road? A wheat site versus a hedgerow? swift reality check—I have seen projects waste weeks fine-tuning resistance numbers for deer in a matrix that looked identical to the deer's preferred habitat. faulty order. Instead, rank your land cover classes into three buckets: high spend (roads, urban), medium expense (agriculture), low overhead (forest, riparian). Then run your model twice: once with equal weights, once with extreme weights. If the connectivity corridors shift by less than fifteen percent, your data gap doesn't matter. If they flip entirely—you require expert elicitation or a pilot GPS study. The catch is that false precision is worse than admitting uncertainty. One colleague set friction for a grassland bird based on canopy cover alone, ignoring that the bird actively avoided fences it could clearly fly over. Five days of debugging for a glitch that didn't exist.
What if my specie is a habitat generalist?
Generalists break most connectivity models. A raccoon that moves through parking lots and suburban backyards will laugh at your least-overhead path analysis. The problem isn't that the model fails—it's that the model succeeds too well, showing everything as connected. That sounds fine until you realize the output tells you nothing about where to prioritize conservaal. I have seen groups stare at a uniform probability surface, unable to identify a solo bottleneck. What usually breaks opening is the assumption that all generalists are interchangeable. They aren't. A generalist that shuns open water during denning season is not the same animal in July versus January. You can cheat this by running separate seasonal models—or by redefining your question. Don't ask 'where does the specie move?' Ask 'where does the specie breed?' or 'what does a female with kits need?' Suddenly the generalist narrows its options. Another tactic: threshold your habitat suitability at the 90th percentile, even if the specie uses everything below that. You'll lose some true positive area, but you'll gain actionable focal nodes. Trade-off worth taking.
Can I incorporate learned behavior or memory?
Technically yes—but the data demands will crush most projects. Memory-driven movement, where an animal revisits a known resource patch or avoids a site where it nearly died, requires phase-selection functions with individual-level revisitation rates. That means GPS collar data at sub-hourly intervals over multiple years. If you have that, great: you can encode memory as a spatially explicit 'familiarity' raster, decaying over window. If you don't—and most groups don't—do not fake it with a random-walk correction factor. We fixed this once by building a simple memory proxy: distance to perennial water sources. animal that drink daily are effectively remembering a network of known holes. The model improved, not because we simulated cognition, but because we captured an observable constraint.
Data scarcity is not permission to make up friction values. It is a mandate to simplify the question until your data fits.
— bench season note, after a failed wolf corridor project
The next concrete step: take your species' three most limiting resources (food, water, den sites) and map them as hard barriers. Everything else is negotiable. That's your checklist—not a dozen friction categories, but three yes-or-no filters. Start there. You can always add complexity later, but you cannot subtract noise once it pollutes your output.
What to Do Next: Specific Actions
Ground-truth your top three corridors
Pick the three connectivity pathways your model says matter most—the ones where removing a barrier would supposedly double flow. Then go walk them. I have seen groups spend weeks tweaking resistance surfaces while their top-rated corridor runs straight through a drainage ditch that goes bone-dry eight months a year. That hurts. Your job is not to prove the model wrong; it's to find where friction lives on the ground. Bring a GPS, a notebook, and someone who actually knows the property. Document every fence gap, every culvert that's rusted shut, every section where the 'permeable matrix' is actually a soybean field with zero cover. Compare those observations against your model's pixel-level predictions. The gap between what the map says and what boots feel—that's your real starting point.
Run sensitivity analysis on key parameters
Most teams skip this: they dial in one overhead surface and never ask what breaks if a number shifts by ten percent. Do it. Pick your three most uncertain parameters—typically something like 'canopy cover expense,' 'distance to water penalty,' and 'road-crossed mortality rate.' Then run your model with each one cranked high, then low, while holding everything else flat. The catch? You are not looking for which output looks prettiest. You are tracking which corridors collapse when a parameter changes. If a single 15% tweak to 'road avoidance' makes your core linkage vanish, that parameter is a leverage point—and a risk. We fixed one project by noticing that a minor change in slope expense erased a critical underpass route; the answer was to collect actual trail-camera data at that crossion, not to re-run the model. Sensitivity analysis reveals what is structural versus what is wobble.
Engage local communities and land managers
Models live in GIS; conservation happens on someone's ranch or township road. Quick reality check—land manager buy-in is often the hardest parameter to calibrate, and the one article writers rarely mention. Schedule sit-downs with three people: the county road commissioner, the largest private landowner along your top corridor, and the local wildlife biologist who has been there fifteen years. Do not show them your resistance maps initial. Ask them: where do animals actually die on roads? Where do you see fence-jumps or crossion attempts? The answers will almost never match your 'least-cost path' exactly—and that's the point. The trade-off here is time versus credibility. You can produce a perfect isolation-by-resistance analysis in a week, but it will collect dust if the land manager tells you the 'high-quality habitat patch' in your model is actually a gravel pit that was closed last year. One hour of conversation can save you three months of chasing phantom pinch points.
'The model told us the pinch point was at the river bend. The rancher told us the deer cross a half-mile upstream because the fence there is down. We moved the crossing structure. Returns spiked.'
— Briefing from a corridor staff after their first community meeting, 2023
Comments (0)
Please sign in to post a comment.
Don't have an account? Create one
No comments yet. Be the first to comment!