The spatial and temporal model
How on-map entities, areas, and time fit together.
SimOps is, at heart, a map of a construction site over time. Everything on it is an entity with a footprint and a lifetime.
Entities on the map
The map's first-class citizens are the Primitive entity kinds — the point, circle and polygon primitives that everything else is built from. Pointlike entities that open a properties panel rather than a footprint editor are Auxiliary pins. When you select several entities at once you get a Multi-selection, and acting on a mixed set surfaces the Bulk-action strip; if your click lands on a stack of overlapping entities the Disambiguation picker lets you choose which one you meant.
Placing one is the shortest way to see what a footprint and a lifetime mean together: a person becomes a circle that only exists for the hours they are booked, and a crane brings its own red drop zone with it.
Buildings add a vertical axis. Floor focus narrows the map to one level and dims the rest, with an Off-floor hint for entities that live elsewhere.
Areas and reference geometry
Polygonal regions are ActiveAreas. Geometry that is always-on and plan-agnostic (roads, buildings, zones) is a Reference feature — and buildings and zones double as containers you can fill. Both are traced on the ground the same way; what differs is that the area carries a window and the road does not.
Fill covers a whole container without drawing: the container's own outline is snapshotted
into new areas for you. A building slices into floors, so a Floor-fill (the
"Floor-fill area…" button on the building panel) makes one Whole-floor area per floor you
tick; a zone has no floors, so "Fill zone…" is the single-slice case and makes one
Whole-zone area. A then F fills whichever container is focused. One container per
fill — three zones is three fills. What you get are ordinary areas on the map, clashing and
rendering like anything you drew by hand; that they were filled shows only on the container's
panel.
Every fill mints a Fill group, down to a group of one, and the panel lists each group under Fill with Clear (delete the whole group — every floor, every recurrence — in one go) and Regenerate. Filled polygons are frozen at fill time and never drift with the container behind your back; when the footprint or zone outline moves, a "Geometry changed since fill" chip appears and Regenerate re-snapshots the group.
Permits reach the same machinery without touching the map: when a permit's location hint resolves to a container, its detail card offers Fill {location}…, opening the fill modal pre-seeded from the permit — the container, the floor if the hint named one, occurrences from the permit's dates, and permit linkage on every area created. No resolved location, no offer: there you still draw.
Time
Every entity carries an Active period. Work is organised into Shifts, and a recurring booking expands into a Schedule group of individual Occurrences. The timeline Scrubber-anchored surface decides what is visible at the moment you have scrubbed to — which is not always the same window the clash engine evaluates, a subtlety the decision record covers in detail. Winding the clock is the gesture that makes the point: the whole site moves with it.