Cross-Runtime Integration Demo

Policy-first · Eval-second · chains Admin Policy Engine (Phase 2a) and Feature Flags Service (Phase 2a+) in the browser

Local / Dev only
This is a DEMO page · not a backend service. The browser calls two already-running A-owned local services sequentially: first POST /api/policy/sensitive/check (or GET /access/check), and only if that returns allow does it call GET /api/flags/eval. No auth · no audit sink · no mutation · no persistence. If either service is not running, the panel below surfaces a connection error honestly.
Start each service with bash docs/runtime/admin-control-plane-service/run.sh (port 8090) and bash docs/runtime/feature-flags-service/run.sh (port 8080).

Flow overview

Step 1 · Local Derive sensitivity registry.json lookup
Step 2 · Policy Policy precheck POST /api/policy/sensitive/check
GET /api/policy/access/check
Step 3 · Flags Flag eval (gated) GET /api/flags/eval

Service base URLs

A · Admin Policy Engine POST /api/policy/sensitive/check · GET /api/policy/access/check
unknown · click Check
B · Feature Flags Service GET /api/flags/eval · POST /api/flags/eval/batch
unknown · click Check

Request context

Presets:

Sensitivity profile

sensitive_flag
requires_approval
rollout_stage
precheck required

Policy + Flag panels

A · Policy precheck

not run
Run the chain to see the policy decision · reasons · required approvers · approval matrix row · trace.

B · Flag eval

not run
Runs only if the policy precheck returns allow or is skipped for non-sensitive flags.

Combined result

Awaiting input · pick a preset or fill the form above
can_proceed_to_eval · flag_eval_status · policy_gate_status
Combined trace will appear here after the chain runs.

⚠ Honest limits · what this demo deliberately does NOT do

ItemStatusWhy deferredNext logical phase
JWT / IdP verificationdeferredIdP integration out of scope · dev headers onlyAdmin Phase 2b + FF Phase 2b
Approval store backingdeferredapproval_refs trusted as-presented · no PostgresAdmin Phase 2b
Flag flip / transition APIdeferredeval-only · no mutation pathFF Phase 2c
WORM audit sink (ptt.audit.trail)deferredKafka topic + producer not wiredAdmin Phase 2b+
Redis cache / pubsub invalidationdeferredcache layer not builtFF Phase 2a+ infra
Production authdeferreddev-mode only · localhost bindingPhase 2b
Admin mutation UI / Kanbandeferreddecision service does not mutateAdmin Phase 3
Real rollout persistencedeferredregistry.json file-backed onlyFF Phase 2c
Server-side orchestrator servicenot attemptedbrowser chain sufficient for demowhen gateway layer consolidates