Repository navigation
feat(observatory): replace legacy UI in Phlo - #1051
Conversation
◈ PR LensNote This drawing shows
Architecture 5 components touched across 6 lanes. Play the interactive walkthrough Inside the changed components — 2 viewsComponent view — Observatory replacement UI Modules forming the TanStack Start replacement frontend within the Observatory container. Component view — Runtime UI selector Startup and switching architecture allowing selection between legacy and replacement UIs. Data flow
Follow each request, response and payload The other flows — 1 sequence
View
Tip Untick Architecture lens or Data flow lens under View to hide a diagram, or tick Expand every detail to open every section. The comment redraws in a few seconds 🪧 More tips
Thanks for using PR Lens! It's built by Coldtea, free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. |
e15b71c to
fadd2ae
Compare
Integrate scoped asset operations, audit proposals, pipeline controls, incident query evidence, operational settings and governance enforcement. Require repository-local check uniqueness before exposing quality definitions. Preserve unknown evidence and operator authorization boundaries.
Reset the in-memory settings singleton only after its module has been loaded. The global fixture must not import Phlo in focused release harness jobs that install only pytest.
Dagster materializable ingestion assets are source pipelines, not external SourceAssets. Include explicit ingestion declarations in source discovery without changing the materialization flag or action availability.
Select the accepted launch's actual run ID and close the launch dialog. Refresh active selected runs every five seconds, avoid overlapping page loads, and stop polling on terminal states or navigation.
Integrate asset, query, materialization, and run-log review fixes with their API contracts. Use Tablecn command filters and TanStack log paging and virtualization, preserving scoped evidence and pending/error state. Expose read-only environment-correlated WAP observations without widening temporary-reference mutation permissions. Regenerate HTTP documentation and add regression coverage.
4acf432 to
d243ed2
Compare
… warnings Declare the Pandera provider used by audit dry-runs. Assert Dagster's expected check-graph beta and legacy SourceAsset warnings so package-isolated tests retain the warnings-as-errors policy. Use instance_for_test to reap the inventory fixture's code servers.
Scope
Replace the legacy frontend with the real-API Observatory inside
phlohouse/phlo, preserving the original Observatory design. This is the sole bundled UI for native development, wheels, Docker, and CI. The temporaryphlohouse/phlo-observatoryrepository remains a design reference, not a release destination.The authenticated proxy forwards the user's token to Phlo API, which verifies it independently. Legacy backend routes and Python extension contracts remain. No secrets, synthetic datasets, installed dependencies, or generated builds are committed. Trino now declares the existing locked SQLGlot parser dependency for mutation classification.
The parity follow-up adds:
Deployment requirements and limits
This follow-up includes additive migration
003_incident_query_parity.sqlfor incident fields, durable query evidence, and effect delivery. API startup applies the incident schema migrations. Migration verification used disposable PostgreSQL only; no shared or production database was changed.Operators must bind environments and Compose projects, enable intended STOPPED sensors, configure independent pause permissions, and configure signing keys and trust if signing is enabled. A settings save does not grant those permissions. Missing evidence or denied effects fail visibly.
Rows, duration, and compute cost estimates remain unavailable. DLT full refresh has no safe replacement contract and stays blocked. Plans revalidate before launch, not atomically with later code or ref changes. Native backfill acceptance is verified; daemon completion is not claimed. Maintenance target MB controls small-file selection, not rewritten output size. Tagged snapshots always remain protected. Sealed audit chains are never pruned; automatic authenticated chain expiry is not implemented.
Notification delivery uses durable leases and at-least-once recovery. Pause recovery requires the initiating actor's authenticated request. No production environment/ref-scoped DuckDB query provider, browser-extension loader, or dedicated durable run-report projection is added. Single-replica action restrictions remain.
Dagster 1.13.7 collapses duplicate asset-check keys across repositories before its nested pipeline filter. Without proof that check definitions belong uniquely to the selected repository, direct checks fail closed and overview quality remains unknown. Legacy check runs without repository-origin evidence also remain unknown. Repeated unbatched definition reads exposed an upstream PostgreSQL connection leak; this PR reduces query fan-out but does not patch Dagster or change its pool configuration.
Verification
pytest -q -m 'not integration': 5,412 passed, 4 skipped, 231 deselected on the final integrated changes.check_definition_scope_unverifiedand unknown quality. Both layouts show unavailable audit quality, no false All clear, and no horizontal overflow. Scoped previews retain main/dev isolation.Landing route
The prerequisites in the stack landing plan, including API #1049 and OAuth #1050, have squash-merged. This PR is now rebased onto
origin/mainand targetsmain.The restack used the original Wave 9 boundary, e15b71c. Obtain passing fresh CI and resolved review conversations before using the squash merge queue. Leave #950, #961, and #970 untouched. Do not merge the temporary repository's PRs.
Keep #1035 open for the remaining product/API gaps. Legacy backend retirement belongs to #1013; multi-replica actions belong to #989. This PR is not a deployment or compliance approval.
UI review follow-up
cmdkand Base UI. Keep the existing sample table styling, validate typed server predicates, and preserve applied filters and rows on failure. Compact field rows align metadata and highlight only the active option.Follow-up verification: 97 frontend tests, 971 API tests, and 19 targeted Dagster regressions passed. The full
pytest -m "not integration"pre-push suite also passed. Frontend lint, strict types, production build, all commit hooks, andmake typecheck-pythonpassed. Live filter checks covered matching rows, editing, reset, zero, null, failure preservation, pending-control locking, keyboard selection, both themes, and 390px layout.The optional raw pre-push
ty-checkhook failed with 748 diagnostics because it scans test files as well as sources. This is not a green gate; the source-only Makefile type check passed. Populated WAP lifecycle states remain fixture-tested because the live demo has no WAP launches. Narrow Chromium checks are not physical touch-device verification. No shared deployment or production database write was performed.Restack verification
The affected backend suite passed with 1,330 tests, one skip, and 19 integration tests deselected. The frontend passed 97 tests, zero-warning lint, strict types, Prettier, and build. Its source remains byte-identical to the reviewed UI head.
Fresh CI caught an undeclared Pandera dependency used by audit dry-runs and expected Dagster warnings in package-isolated inventory tests. The correction declares the runtime dependency, asserts those exact warnings, and uses Dagster's test instance helper to reap code servers. The repository's warnings-as-errors policy remains unchanged.
After the correction, separate
pytest -q -m 'not integration'runs passed all 976 API tests and 474 Dagster tests. The focused dependency and inventory regression run passed 10 tests. Ruff, C901, formatting, source types, module headers, lockfile, generated references, and whitespace checks passed. Fresh PR and merge-queue CI remain required before merge.