Platform operator console
Publication review, the country capability registry, intake suspension, support cases, readiness alerts and signed launch reviews.
The platform operator console is the internal surface where DineGlobe’s
own operators work: deciding which venues publish, keeping the country
capability registry, suspending intake at a venue in trouble, working
support cases, and signing launch reviews. It lives at
/app/panels behind a normal staff sign-in at
/app/login, it asks search engines not to index it, and its
own header names its probes: “Operator console. Liveness probe:
/health/live · trusted readiness probe: /health/ready”. Nothing on it
is a tenant permission — platform authority is its own axis.
The rules every platform command obeys
Every console action, without exception, requires all of the following, re-checked server-side on each call:
- A live staff session — a real signed-in account; session cookies alone carry no authority.
- An ACTIVE platform role grant for the acting account. A grant that exists but is deactivated counts for nothing.
- An MFA-verified session. A valid grant on a session that never
completed two-step verification answers
MFA_REQUIRED— you finish sign-in with a code first. - A mandatory reason, recorded with the command. Reasons are bounded to 500 characters.
Every command is audited with the actor, the reason and the target. With
no grant the answer is PERMISSION_DENIED; the two denials are
deliberately different so a missing second factor is never mistaken for
missing authority. There is no impersonation surface anywhere in the
console — the module mints no sessions and no tenant data on an
operator’s behalf.
The five platform roles
| Role | What it can do |
|---|---|
TRUST_OPERATOR |
Decide publication reviews, write country capability flags, suspend and resume venue intake. Also reads support cases. |
SUPPORT |
Work the support-case workflow: open, list, inspect, escalate, resolve. |
PRIVACY_OFFICER |
Read support cases (the same reader set as SUPPORT). Venue-side privacy execution stays with the venue’s own roles. |
PLATFORM_FINANCE |
Deliberately excluded from case reading; scoped to billing-adjacent work and reads operational readiness signals. |
SECURITY |
Administer platform roles (grant, reactivate, deactivate, list) and run the release, launch and performance suites; the only role that writes risk-register and assessment evidence. |
Grant lifecycle is narrow by design: the deployment plants the first
SECURITY row directly, and every later grant, reactivation or
deactivation goes through SECURITY-only commands. Deactivation takes
effect immediately — the next command from that account is refused.
Re-granting an existing role/user pair reactivates the one row rather
than adding a second.
Publication review
A venue reaches the console only after its owner has cleared the venue-side
readiness checks: profile content in the venue’s default language, at
least one active table or resource, at least one active offering with an
active weekly schedule, and published accepted booking terms for every
bookable offering. The venue then sits in PENDING_REVIEW — private to
this day, visible to nobody.
The trust operator records a decision with a mandatory reason:
- APPROVE — the venue becomes
PUBLISHED: it gains a public profile page and enters the directory, sitemap and public booking. - REJECT — the venue returns to
DRAFTand stays private; the owner fixes what was named and requests review again.
Deciding a review that is no longer pending — for example one already
decided — answers PUBLICATION_NOT_PENDING instead of re-deciding it.
The country capability registry
Capabilities are deny-by-default and per country. Exactly two capability
kinds exist in this release: payment and sms. The registry rules:
- One row per country and capability configuration; a country with no row is refused, never assumed enabled.
- Every write carries a mandatory evidence reference — including switching a capability off. The evidence is part of the row.
- Enabling a capability in production additionally requires an approved,
non-sandbox provider configuration; a registry row naming a sandbox or
unconfigured provider keeps the capability disabled no matter what the
flag says. Attempting otherwise answers
CAPABILITY_NOT_ACTIVATABLE.
This is why the pilot runs free bookings only: the payment and SMS flags for the pilot country stay closed until real provider evidence is recorded. Payments (pilot posture) describes the guest-visible consequence.
Intake suspension
When a venue must stop taking new bookings — a dispute, a compliance question, an operator decision — the trust operator suspends intake with a mandatory reason. The suspension is deliberately narrow:
- Blocked: new bookings from every path — the public booking page,
staff walk-in/phone intake, and CSV import all refuse with
PLATFORM_INTAKE_SUSPENDED. - Untouched: existing reservations, guest self-service cancellation, refunds and data exports stay fully available. Suspension never deletes or hides what a venue already booked, and publication status does not change.
Resuming intake restores new bookings immediately. Suspending an already suspended venue (or resuming one that is not suspended) answers a plain conflict.
Support cases
Support work runs through a case ladder: OPEN → ESCALATED →
RESOLVED, each step its own act. Opening a case records the
organization, an optional venue, a category and a summary; escalating
carries a mandatory reason; resolving carries a mandatory outcome and
stamps the closure. Doing the steps out of order answers
SUPPORT_CASE_INVALID_TRANSITION.
The inspect view is a safe view on purpose: case metadata plus
venue-level counts — future reservations, active waitlist entries, outbox
states, failed messages, payment-account facts and subscription state.
It contains zero guest personal data: no names, no note bodies, no
reservation rows. Case reading is available to SUPPORT,
TRUST_OPERATOR, PRIVACY_OFFICER and SECURITY; PLATFORM_FINANCE
is deliberately outside that set.
Signed launch reviews
Before a market opens, a supervised review records the eight launch gates
G-01 through G-08 — legal entity and first country, payment account
and funds flow, data protection, SMS/email operation, the
language-readiness and accessibility gate, infrastructure, pricing/tax,
and public listing rights. The review discipline:
- Every gate select defaults to
BLOCKED. Approval is an explicit operator act with an evidence owner and an evidence reference — never a form default. - The review runs the four real end-to-end journeys (
owner-publish,guest-book,host-arrival,finance-paid— an owner publishing a venue, a guest booking, a host-recorded arrival, and a paid deposit booking through the sandbox provider) in a throwaway scratch database it creates and drops itself, so the journeys are proven, not narrated. - The decision is recorded as a signed record and the signature is
verified on every read. If a stored record ever fails verification —
meaning recorded launch evidence was modified outside the review flow —
the system fails closed with
READINESS_SIGNATURE_INVALID. - Requests for country capabilities (
free-booking,paid-booking,sms) are recorded against the same review, and a missing gate, journey or registry row leaves the capability disabled with the blocking owner and next action named.
SECURITY and TRUST_OPERATOR conduct reviews. One approved pilot
country is never presented as support for any other market — see
What works today & known limits for the
exact scope statement.
Readiness, quality and load surfaces
Alongside the decision tools, the console exposes the operational evidence surfaces, all aggregate-only — counts, ages, codes, never guest data:
- Operational alerts — thresholds evaluate against the live system; every firing alert names its runbook action and its owner. Any of the five platform roles can read these.
- Readiness — the dependency summary is the same aggregate body the
trusted
/health/readyprobe serves. - Backup evidence — append-only records of kind
BASE,WALorUPLOADS, each with a mandatory off-server location reference; completion may trail the clock by at most 5 minutes. - Release suite — executes the repository’s own security and
correctness battery; a
READYverdict requires every registered check to pass in the same run, and unselected checks are recorded asNOT_RUNand block the verdict. - Performance workload — runs the real service commands under the declared pilot load against a scratch database the runner creates and drops itself; budgets report measured p95/p99 and every gap is reported, never averaged away.
Running the suites needs SECURITY or TRUST_OPERATOR; writing
risk-register entries and third-party assessment evidence is
SECURITY-only.
Related pages
- Roles & what they can do and the Platform operator guide — how this axis relates to venue roles.
- Venues, slugs & publication — the venue-side half of the review flow.
- Privacy, retention & deletion — what the venue roles (not this console) execute for privacy requests.
- Error codes & fixes — every code on this page in context.