Feature/entity investigation - #155
Merged
Merged
Conversation
…ion view, keeping the map's unscoped viewport query untouched, and share the Redis scan and bounds check between the alert and entity filters instead of duplicating them
…ert history in one call, closing the by-id lookup gap that would have let a workspace scope be bypassed by guessing an id, and fix a real route ordering bug this same change would have introduced against the map's live viewport query
…ired time window against TimescaleDB, sharing the same by-id workspace check the entity detail endpoint already needed so the two can never drift apart on who is allowed to see what
…ordered capped query could miss the one alert that actually proves an operator's scope, harden the entities.live route split against a future reordering instead of relying on comment and file order alone, and stop three copies of the same workspace scope query and two copies of the same bbox parser from being able to quietly drift apart A multi angle review of CP1 through CP3 also flagged prose in the new phase docs using em dashes against house style, corrected everywhere this phase touched without rewriting the unrelated pre-existing text around it
…an entity has actually interacted with, reusing the same by-id workspace check the other investigation endpoints already share, and catch a wrong assumption about how the driver hands back timestamps before it ever reached the response shape
… a wider slice of the alert list by status or entity when investigating, proving the dashboard's own live feed keeps seeing exactly what it saw before this change since neither new filter has a default that touches it This closes out the backend half of entity investigation, the last two reads needed before any frontend work on the investigation view can start
…icking any entity id on an alert card, and let more than one stay open side by side The codebase had no multi instance widget support yet, so this extends the outer dockable layout that already had it instead of bolting a second one onto the plain widget grid, and adds the app's first shared context so a click deep inside the alert list can reach that outer layout. Only the overview tab is wired up, history and relationships sit there unclickable until their own checkpoints. Checked against the real running app in a headless browser, not just the test suite: two different entities open as two separate panels, clicking the same one twice never makes a third, and a dark entity with no live position still shows its alert history instead of an error
…eading up to whatever alert brought them into the panel, defaulting the window to that alert's own time instead of an arbitrary one Reused the panel context from the last checkpoint rather than inventing a second way to pass state into an opened panel, and pulled the fetch into its own component that remounts on a window change instead of resetting state by hand inside an effect, which the lint rules caught as the wrong pattern before it shipped. The empty window case turned out to be the real state of the dev database right now, confirmed directly, and the chart itself was checked against real seeded points too so the empty case isn't the only one that was ever actually rendered
…who an entity has actually crossed paths with and jump straight into any of their panels Clicking a neighbor reuses the exact same panel opening call the alert list already relies on, so there was nothing new to build there, just a third caller. Capped the circle at twelve nodes with a plain count of what's hidden rather than letting a real high degree entity in the dev data turn into an unreadable mess, and applied the keyed remount pattern from the very first draft instead of relearning the lint rule that caught it last time. This closes out every tab in the approved mockup except the map overlay track, which stays its own separate piece of work
…e trigger the original mockup named but never actually got built until testing against real traffic surfaced the gap Fixed a real bug while wiring it up: the aviation layer's own id field holds the callsign for display, not the entity id, so a click would have looked up a callsign as if it were the real key and missed almost every aircraft with a known callsign. Gave it its own entityId field instead of reusing the display one. Checked against real OpenSky traffic over the bay area with the full pipeline running, not synthetic data
…etail panel and keep it visible in its slot at all times instead of only on request Clicking any entity anywhere now updates that one panel in place rather than opening a new one alongside it, reversing the multi panel design from the last few checkpoints after seeing it working against real traffic and deciding a single always present panel fits the workflow better. None of the three existing click sites needed to change at all, only the context's own internals did, which is exactly what that boundary was built for. Deleted the old widget outright rather than leaving it around unused
…t whatever it showed the moment it was opened The map already keeps one shared websocket connection open and filtered to whatever's in view, and that hook was already built to support more than one listener, so this just became its third consumer instead of a new connection. Only touches the panel when a frame's entity id matches whatever is currently selected, and reuses the same stale frame discard logic the map itself relies on rather than a plain overwrite. Only works while the selected aircraft is inside the current map view since that view is what the one shared subscription is filtered by, which is a real limit of how this connection works today, not something papered over. Watched a real aircraft's position actually move on its own over twenty five real seconds without touching it
…h endpoint's own tests can actually reach a real database there These tests have been passing locally against the dev stack since the graph endpoint was built, but CI never had anywhere for them to connect to, so they could only ever fail there with a bare connection refused. Health checked through cypher shell against the bolt port itself rather than the http port, since the same local setup script already found that neo4j can report the http side ready before bolt actually accepts connections
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.