Most wind farm content is written twice: once in the engineering system of record and once, by hand and usually worse, in whatever document the public eventually sees. GenAnywhere removes the second writing by modeling the wind farm as a small typed entity graph, then rendering every audience-facing artifact from that single graph. This post walks through the entity model, the invariants that keep it honest, and the renderers that turn it into prose, tables, and imagery without anyone retyping a number.
The Four Root Entities
GenAnywhere's wind domain starts with exactly four root entity types, because four is enough and five is where drift begins. A Site is a bounded geographic container: county, terrain class, lease parcels, and the layout grid that gives every machine its position identifier. A Machine is one turbine: rated power, rotor diameter, hub height, commissioning date, and a reference to its Site. A Structure is any physical assembly that is not the machine itself but carries load or consequence: foundation, tower sections, blade set, collector circuit segment, substation bay. A PowerPath is the directed route energy takes from a Machine through collector circuits and step-up transformers to the interconnection point. Everything else an operator writes about is either an attribute of these four or an event attached to them.
Why PowerPath Deserves to Be a Root
It is tempting to fold the electrical route into attributes of the Machine, and it is wrong. Curtailed output, fault studies, and maintenance outages are all properties of the path, not the machine: a healthy turbine on a de-energized collector circuit produces nothing. By promoting PowerPath to a root entity, GenAnywhere can answer the question operators actually ask, which is not "is this turbine broken" but "why is this turbine delivering nothing." The path also carries the vocabulary that makes public explanation possible, because "the line from the ridge to the substation was out for inspection" is a sentence a neighbor understands and "unit fourteen unavailable" is not.
Invariants That Keep the Graph Honest
A typed model is only as good as the rules that refuse bad writes. GenAnywhere enforces a short list of invariants at write time. Every Machine must reference exactly one Site and at least one Structure of foundation type. Every Structure must belong to exactly one Machine or exactly one Site, never both and never neither. Every PowerPath must terminate at a declared interconnection point and must pass through at least one step-up Structure. Performance events must attach to a Machine and reference the PowerPath state at the time of the event. These constraints sound bureaucratic until you have inherited a dataset where a blade inspection was filed against a substation; after that they feel like load-bearing walls.
Renderers: One Graph, Many Voices
The entity graph never reaches a reader directly. Renderers do. The engineering renderer emits dense tabular records with every attribute and no adjectives. The public renderer emits narrative prose that pulls only the attributes a community cares about and phrases them in the local weather register. The compliance renderer emits the inspection chronology an auditor expects, ordered by date and grouped by regulation. Because all three read the same graph, a change to a blade serial number propagates everywhere at once, and the failure mode of "the website says one thing and the permit file says another" simply cannot occur. Renderers are also where imagery attaches: each renderer declares which scene archetypes it needs, and the asset pipeline resolves them.
The Asset Pipeline and Scene Typing
Imagery is treated as typed content, not decoration. Each image asset carries a scene type from a controlled vocabulary: ridge-line array, laydown yard, collector substation, oversize transport, seasonal landscape, and so on. Renderers request scene types rather than files, so the public renderer asking for a "seasonal landscape" gets the autumn ridge or the winter lakeshore appropriate to the site's region without a human choosing a filename. Assets are validated on ingest for aspect ratio, resolution, and file size, and for the two absolute prohibitions GenAnywhere holds for published imagery: no embedded text and no people. A scene that fails validation never enters the graph, which is why published pages stay visually consistent across dozens of sites.
Versioning the Graph Over a Thirty-Year Life
A wind farm outlives most software that describes it, so the graph is versioned as a timeline rather than overwritten in place. Repowering replaces Machines while preserving their historical events; decommissioning retires Structures without deleting the record of their existence; lease amendments edit Site attributes with an effective date. Readers can therefore ask for the farm as it was in any year, which turns the archive from a filing cabinet into an instrument. This is the quiet payoff of the whole architecture: when the model is small, typed, and invariant-guarded, the thirty-year story of a piece of American land becomes queryable instead of merely remembered.



Top comments (0)