Realm petrolyst's login theme, on Keycloak's unstyled base: a slate panel with the logo and its line
beside the form on a soft card; on a phone a slate band above it; light and dark. Satoshi stays out
of Git by its licence (build.sh). The README adds the install steps. Not deployed.
Bands: none (identity theme).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Theme tokens for the slate surfaces and borders, the logo with the green Y, chart boxes at 16 px
with the card shadow. Full figures with the unit in the subheader; every layer of the tabs
transparent, so the site's charts sit as boxes in Firefox and Safari too. The Overview gets a Sites
filter and the period's scope returns to the time charts (PD-25). The embedded frame can shrink again.
A change to the image's inputs: Superset rebuilds on the next deploy.
Bands: Superset. Rules: 2.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Keycloak import for realm petrolyst: two clients, petrolyst with MFA for
Superset and Traefik, petrolyst-app password only. It lists only
app.petrolyst.com and traefik.petrolyst.com, and no customer names, as this
repository is public. public.v_operator shows each customer's group. Dashboards
overview and site, role Petrolyst Guest, filtered by row. Superset refuses a
user with no mapped role. The realm travels with the release: each release's
compose files name their realm and secret file, and a rollback needs only its
target's secret. Not deployed.
Checks earlier on this content: tests/run.sh 109 of 109 and read-only, dashboards
import twice, column drift 0, compose config on old and new trees, the secret
check on a scratch folder, a rehearsal on a throwaway Keycloak 26.4. Never a real
deploy or rollback; shellcheck not installed today, clean when last run. Codex
inspected once; its fixes are not re-inspected, on the owner's word.
Bands: persistence, Superset. Rules: 1, 2, 3, 6, 14.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Draft migrations rewritten in place (PD-16, PD-18), with 0004 for the licence
tables (PD-20) and rule tests in fuel-db/tests. Dashboards' column list
regenerated; coverage_detail selects operator_uid.
Checks: tests/run.sh 106 of 106; 18 views, 686 rows, 0 differences against a
reference from the same corpus. Codex's fixes to its inspection are not
re-inspected.
Bands: persistence, Superset. Rules: 6, 8.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The rename step in init.sh and the guard in deploy/lib.sh are gone. README's
procedure is now "Removing the old project"; it keeps the old names until it
has run on the server. Migrations stay here (open point 8), and their README
says so. AGENTS.md adds the commit-message rule. Not deployed: live still runs
Trino.
Bands: 4 (Superset), persistence (docs). Rules: 2.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
trino/ deleted; the role trino_ro becomes fuel_ro, its password read from a
secret file at connect time; dashboards' SQL and column list for PostgreSQL;
the Compose project is renamed petrolyst, with volumes pinned to their old
names. AGENTS.md points to the architecture context. Not deployed: the next
deploy needs README's one-time steps first.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The file was already gone from the working tree; why is not recorded. README
and AGENTS.md still point to it. Revert this commit to bring it back.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Layout, deploy and dashboard rules, and checks. Correction to da3f803: the
shell lint did run afterwards, through the README's Docker shellcheck command
(koalaman/shellcheck:v0.10.0 -S warning): clean.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ATOMA's users use the Petrolyst app; Superset keeps admins, editors and the
app's embedded dashboards. Removed: the "ATOMA Reader" role and its rules
(petrolyst_reader.py, ReaderAccessMixin, reader.css, the head template, the
SQL-hiding patch), the atoma-reader mapping (it now maps to nothing in
Superset), the iframe allowance for the Map tab, and the "atoma" dashboard
with its Fleet/Map tab, D0 and dashboard.css. The bundle holds atoma-overview
and atoma-site only (byte-identical to before); the guest role keeps the
reader's 12 permissions in roles/atoma_guest.py. Brand files now name
petrolyst-web. SPEC marks the retired parts as history.
Checks (local): bundle checks pass; image rebuilt and healthy; import with
column drift 0 and unchanged embedding ids; the production config loads with
OAuth, embedding off, no reader hook; admin sees atoma-site with its tabs and
filter column; the app's browser tests pass 10/10. shellcheck not run (not
installed). Not deployed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Baseline before the clean-up (PD-13): the PD-11 reader setup and the PD-12 app
dashboards as they ran on the local stack, uncommitted until now. Not deployed,
not independently reviewed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
SPEC.md follows the owner's decisions of 24 Oct. The "eligible" baseline state
asks for >= 30 matched days (was 60). Modelled L/h is in v1 as table B11 on
Baseline & Evidence (v_modelled_lph): titled as modelled from an assumed
runtime, not measured, and never in S1, the map or the M3 sites list; the
datasets table and acceptance check 4 include it. The migrations are
unchanged: the threshold is applied by the loader's baseline propose, not by
SQL.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No runner was ever active, so the pipeline never ran. Removes
.gitea/workflows/deploy.yml and the CI key and runner IP from
host/bootstrap.sh (a re-run removes the key an earlier bootstrap installed).
The README makes "Manual deploy" the one documented procedure: commit on main,
shellcheck in Docker (-S warning; the pipeline's lint step), git archive over
root SSH, deploy.sh as user deploy, the outside checks, then push.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adds stacks/fuel-monitoring/fuel-db/migrations/0001-0003 with their README, and
petrolyst-insights/dashboards/atoma/SPEC.md. Nothing applies the migrations:
deploy.sh never touches fuel-db, and a person applies them by hand in phase P3.
Verified in scratch Docker (timescaledb 2.31.0-pg17 with this repository's
01-roles.sh, trino 484 with its trino/etc): 150 SQL checks pass; the 18 views
have 303 columns with identical types in PostgreSQL and Trino; fm cannot be
read through Trino. Codex (gpt-6-astra) inspected the change in four rounds;
the round-4 fixes are committed without a further inspection, on the owner's
instruction.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
forwardAuth answers unauthenticated requests itself, so a middleware listed
after it never sees that redirect: the dashboard's 302 to Keycloak went out
without HSTS, nosniff and frame options.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`sudo -u deploy deploy.sh` (manual deploy, re-deploy, rollback) keeps
root's working directory /root, which deploy cannot read; GNU find then
fails in preflight and the run stops. Every path is absolute, so lib.sh
now changes to / first.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`pbpaste | ssh petrolyst /root/secrets-init.sh keycloak-secret` sends the
secret without a trailing newline. read then sets the value but returns
non-zero, and set -e ended the script silently before storing it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Traefik as the server-wide edge (TLS via Let's Encrypt, dashboard on
traefik.petrolyst.com behind oauth2-proxy and Keycloak). The
fuel-monitoring stack: Superset on atoma.petrolyst.com with Keycloak login
and Petrolyst branding, Trino reading the TimescaleDB fuel-db as catalog
"fuel". Customization lives in petrolyst-insights/, deployment in the other
folders.
Deploys run server-side (deploy/deploy.sh) from a Gitea workflow or
manually; releases are immutable, Superset metadata is backed up before
migrations, and deploy/rollback.sh restores it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>