Backlog
Investigations and plans waiting for implementation, sorted by last updated date.
| Document | Goal | Updated |
|---|---|---|
| --- | Make public reachability a property a service declares, instead of a | 2026-09-19 |
| INVESTIGATE backlog — priority view | — | 2026-09-19 |
| --- | Ship oauth2-proxy as an ordinary UIS service — `uis enable | 2026-09-18 |
| Investigate: exposure is a property of the tunnel, not of the service — and exactly one service has a login | Decide how a UIS service becomes reachable from the internet, and what | 2026-09-18 |
| Plan: a command that loads the data, and a command that reports on it | — | 2026-09-14 |
| Plan: one deliberate pass over the error paths | Every path that runs only when something has already failed is | 2026-09-12 |
| Plan: the definition is pinned by digest, the code that runs is not | uis template install must record, print, and — if the chart allows | 2026-09-12 |
Plan: uis undeploy exits 0 and keeps the data | after an undeploy, an operator must know exactly what still exists — | 2026-09-12 |
| Plan: the install verifies the IngressRoute was created, not that it routes | an install must not report a working URL for a route that cannot serve | 2026-09-12 |
Plan: uis dagster run launches duplicates silently | launching a job that is already running must be a deliberate act, not | 2026-09-12 |
| Plan: what UIS's workflows would need from a self-hosted runner, and why they should not move yet | If UIS's CI ever moves to self-hosted runners, the three properties | 2026-09-11 |
| Plan: this repository is public and names one installation's private network | Decide what a public repository may say about the installation it was | 2026-09-10 |
| Plan: pin and verify the binaries the image installs | — | 2026-09-10 |
| Plan: four dependency alerts on the docs site, and why bumping does not clear them | The repository's open dependency alerts are either cleared or | 2026-09-10 |
| Plan: an unmarked proxy and no StatefulSet is the one revert that warns nothing | uis deploy <svc> cannot roll out an in-cluster workload on top of a | 2026-09-10 |
| Plan: UIS assumes its Postgres Service is its own, and cannot tell if it is not | UIS knows whether the Postgres server it is about to write to is a | 2026-09-10 |
Plan: "leaves the database alone" is not what a failed init: does | When an init: fails part-way through on a database that already | 2026-09-10 |
Plan: configure postgresql --purge, or an honest refusal | A per-app database, its owning role, and the Secret written by | 2026-09-10 |
| Plan: install an application from the catalogue, in one command | ./uis template install <application> installs an application on any UIS | 2026-09-09 |
| Monitor the components that are not in the cluster | The parts of a production install that live outside Kubernetes — the | 2026-09-09 |
| Ship a dashboard with the service | uis deploy <service> on a cluster with Grafana yields a dashboard for | 2026-09-09 |
| Baseline alert rules, and somewhere for them to go | uis stack install observability produces a platform that **tells you | 2026-09-09 |
| Ship container logs to Loki | Logs from every pod are searchable in Grafana, automatically, so that | 2026-09-09 |
| Ship the monitor pipeline as part of the service | uis deploy uptime-kuma gives a watchdog that is **already monitoring | 2026-09-09 |
| Make the watchdog able to wake someone — and watch itself | An alert reaches a human away from home, and the watchdog's own death | 2026-09-09 |
| Define what the watchdog watches | — | 2026-09-09 |
| Deploy Uptime Kuma as an external watchdog | — | 2026-09-09 |
| Plan: The Grafana deploy gate reports the stack, not the race | Make uis deploy grafana succeed deterministically on a healthy stack, | 2026-09-09 |
Plan: reject a valid config: key on the wrong service, at parse time | A template declaring a supported config: key on a service that does | 2026-09-08 |
| --- | — | 2026-09-08 |
| Investigate: install an application that spans several services, from one declaration | Let one declaration install an application that needs several platform | 2026-09-08 |
| Declare external dependencies as shim Services | Every dependency UIS has on something outside the cluster is declared | 2026-09-07 |
| Ship neko as an optional add-on — the honest case for and against | — | 2026-09-07 |
Plan: advertise only the configure handlers that exist | SCRIPT_CONFIGURABLE="true" appears only on services that actually have a | 2026-09-07 |
| --- | — | 2026-08-31 |
A workflow's paths: filter and what the job actually depends on drift apart, silently | Decide how a workflow's declared paths: can be kept honest against what its job really | 2026-08-30 |
| Investigate: should a service bring its own availability probe, and can Uptime Kuma accept one? | Decide how the external watchdog's monitors get created and stay in | 2026-08-30 |
uis deploy reports one exit code for two different outcomes | An operator or a script can tell "the topology change failed" apart from "the topology | 2026-08-30 |
| Investigate: a green UIS test run must not depend on the development topology | — | 2026-08-26 |
| --- | — | 2026-08-25 |
| --- | — | 2026-08-25 |
| --- | — | 2026-08-25 |
| --- | — | 2026-08-24 |
| --- | — | 2026-08-24 |
| --- | — | 2026-08-24 |
Fix: the provisioning rules teach the kubectl run --rm -i idiom that loses output | Stop the platform's own rules document from recommending a test idiom | 2026-08-23 |
| Plan: Registering a verify command is a three-place change | Make every registered verify playbook reachable from both invocation | 2026-08-23 |
| --- | — | 2026-08-23 |
| Investigate: Dagster Orchestration Platform for UIS | UIS today has no data-pipeline orchestrator. Applications that need to ingest, transform, and catalogue data have three options — each with drawbacks: | 2026-08-23 |
Fix: configure postgrest cannot tell "configured" from "was configured once" | A PostgREST instance whose database no longer carries its grants is | 2026-08-22 |
| Review: bring Alloy in line with how other services are deployed and verified | — | 2026-08-22 |
| Investigate: Alloy and the OTel Collector — the consequences nobody scheduled | Act on the consequences the Alloy decision recorded and nobody followed | 2026-08-22 |
| Fix: the provision-host ships a Kubernetes client 12 major versions too old | The Ansible layer talks to the cluster with a client the collection | 2026-08-21 |
| Fix: 16 of 24 Helm-based services take whatever the chart repo serves that day | Every helm upgrade --install in UIS names the chart version it was | 2026-08-21 |
Fix: 21 playbooks declare a variable named namespace, which Ansible reserves | No playbook shadows an Ansible reserved name. | 2026-08-21 |
Fix: test-all hides work in --dry-run and skips a service permanently | test-all reports what it will do and what it did not do. | 2026-08-21 |
| Plan: one constructor for a monitor, not two | provision-host/uis/lib/monitors.py builds a monitor object in one | 2026-08-21 |
| INVESTIGATE: Verification Playbooks Usage and Coverage | The ansible/playbooks/utility/ folder contains a mix of verification playbooks, task includes, setup helpers, and one-off utilities. Several of these files appear to have no active caller in the current repo. | 2026-08-21 |
| Analysis: NAIS and UIS — what transfers, what doesn't, and what UIS already does better | — | 2026-08-21 |
| Investigate: services that run outside the cluster in production, and inside it on a laptop | Make every UIS service deployable on a developer's laptop, including the | 2026-08-14 |
| Investigate: OpenBao — deployable on a laptop, and the same interface in production | — | 2026-08-14 |
| Investigate: a secret that works in dev, and what happens to it in production | — | 2026-08-14 |
| Plan: AKS Manual Setup — variable-by-variable runbook for first-run provisioning | Provide a self-contained runbook for the first manual run-through of platforms/azure-aks/ against an Azure subscription. Explains every config variable (what it is, where to find it, what changes if you change it), every authentication step, and every script in the order it must run. Companion to PLAN-001-aks-step1-verification.md — that plan's Phase 2 lists the eight scripts to run; this plan is the detailed how and why for someone doing it for the first time. | 2026-08-13 |
| INVESTIGATE: Platform Provisioning Layer | — | 2026-08-13 |
Investigate: migrate hosts/* to platforms/* (or formally retire) | — | 2026-08-13 |
| Investigate: Metabase Internal BI / Data Exploration for UIS | Deploy Metabase as the internal data-exploration and validation tool for UIS-hosted applications, providing visual SQL exploration, ad-hoc questions, and dashboards for development teams — starting with Atlas, with reusability for future apps. | 2026-08-13 |
| Investigate: DCT One-Command ArgoCD Deployment | Enable a developer to deploy their current project to the UIS Kubernetes cluster from inside the DCT devcontainer with a single command. | 2026-08-13 |
Investigate: ./uis deploy <service> semantics for services without a playbook | Decide what ./uis deploy <service> should do when the target service has SCRIPT_PLAYBOOK="" (and SCRIPT_MANIFEST="") — the "metadata-only" case introduced when service-postgrest.sh shipped without a playbook (PLAN-001 documentation gate; PLAN-002 will add the playbook). | 2026-08-13 |
| Investigate: UIS Connect Commands for All Services | Build a generic uis service connect <service> [arg] surface that opens an interactive client into any deployed service. Replaces the per-service-verb framing (uis connect postgresql …) with a single umbrella verb under uis service <verb> (alongside future uis service logs, uis service describe, etc.). | 2026-08-13 |
| Ship an availability probe with every service | uis deploy <service> results in that service being monitored by the | 2026-08-09 |
| Plan: Grafana runs with only the datasources that exist | Make Grafana deployable with Prometheus alone, provisioning Loki and | 2026-08-07 |
| Investigate: Registry cache — a UIS cluster cannot currently restart without the internet | Give UIS a pull-through registry cache so a cluster can restart, | 2026-08-07 |
| Investigate: Observability — the stack deploys, but the signals don't arrive | Make a UIS deployment actually observable. The observability stack | 2026-08-07 |
| Investigate: Backup and scheduling — UIS deploys stateful services it cannot back up | Give UIS (a) a backup capability for the stateful services it deploys, | 2026-08-07 |
| Investigate: an external watchdog — does Uptime Kuma overlap the observability stack? | Decide whether UIS needs an availability watchdog that runs outside | 2026-08-07 |
| Investigate: a stack installs the same way on a laptop and a server | Give UIS a way to express how much of a stack to install and *how | 2026-08-07 |
| Fix: default LiteLLM config only works on Docker Desktop | A first-time uis deploy litellm should produce a usable model list on | 2026-08-06 |
Feature: let uis undeploy remove the database it created | Make a genuinely clean reinstall possible, so install bugs cannot hide | 2026-08-06 |
| Fix: pin the LiteLLM chart and image to reproducible versions | Two installs of the same UIS revision must deploy the same LiteLLM. | 2026-08-06 |
Investigate: uis deploy litellm reports success on a broken install | Make uis deploy litellm produce a working install every time from a | 2026-08-06 |
| INVESTIGATE: Top-level UIS CLI doc + keeping command examples in sync | Two related issues: | 2026-05-20 |
INVESTIGATE: Harmonise the UIS CLI grammar — uis <noun> <verb> [target] everywhere | — | 2026-05-20 |
| Investigate: First UIS Stack Template | Decide which UIS stack template to create first, then build it as the reference implementation for uis template. | 2026-05-15 |
| INVESTIGATE: Version Pinning for Helm Charts and Container Images | Everything works today, but 18 of 21 Helm charts and several container images have no version pinning. Any upstream release — intentional or accidental — can break the system without warning. A single ./uis deploy could pull a new chart version with breaking changes. | 2026-05-15 |
| Investigate: Version Metadata in Service Scripts | Decide how service scripts should expose version information for docs generation and CLI display | 2026-05-15 |
| INVESTIGATE: Remote Deployment Targets & Target Management | — | 2026-05-15 |
| INVESTIGATE: Provision-Host Tools and Provider Authentication | — | 2026-05-15 |
| Notes for installing EspoCRM in UIS | — | 2026-05-15 |
| Investigate: Enonic Deployment (apps + content) | Design how artefacts get into the Enonic XP instance running in UIS. Two related artefact types: | 2026-05-15 |
| Investigate: Add an email/SMTP capability to UIS | Provide a single, project-wide way to send email from UIS-deployed services. Today no UIS service can send email because there is no SMTP relay deployed in the cluster and no shared SMTP_* configuration in the secrets layer. This blocks user-onboarding flows in several services we already ship (and several we plan to add). Decide whether to host an SMTP relay inside UIS (dev-only catcher, prod-ish relay) or to point all services at an external provider via shared SMTP credentials, then wire up the chosen pattern once so every service consumes it the same way. | 2026-05-15 |
| Investigate: Backstage Enhancements | Evaluate and prioritize additional Backstage features beyond the initial deployment (PLAN-002) | 2026-05-15 |
| Investigate: Backstage Authentik OIDC Authentication | Investigate adding Authentik OIDC authentication to Backstage (replacing guest access) | 2026-05-15 |
| INVESTIGATE: Authentik User Config Migration | User-configurable Authentik data (test users, domains, protected services, OAuth apps) is hardcoded in manifests/ where users shouldn't be editing files. This data should live in .uis.extend/ so users can customize their setup without touching infrastructure code. | 2026-05-15 |
| --- | — | 2026-05-15 |
Investigate: Surface in-cluster service port on services.json | Add the primary in-cluster Kubernetes Service port to each service entry in website/src/data/services.json so that downstream consumers (documentation generators, template tooling, dashboards) can render accurate <service>.<namespace>.svc.cluster.local:<port> references without hardcoding per-service ports or guessing from conventions. | 2026-05-15 |
| Investigate: Docs Markdown Generator Update Logic | Add logic to uis-docs-markdown.sh to update metadata-driven sections of existing markdown pages without overwriting manually written content | 2026-05-15 |
| Investigate: customer onboarding flow for "I need a database for my app" | — | 2026-05-15 |
| --- | — | 2026-05-15 |
Investigate: ./uis deploy <svc> should auto-regenerate stale kubernetes-secrets.yml | Decide whether (and how) ./uis deploy <svc> should detect a stale generated kubernetes-secrets.yml and either regenerate it automatically or refuse to deploy until the user does. Today, edits to default-secrets.env, 00-common-values.env.template, or 00-master-secrets.yml.template silently no-op for any service that's already deployed unless the user remembers to run ./uis secrets generate && ./uis secrets apply between the template edit and the next deploy. | 2026-05-15 |
Investigate: Make 00-common-values.env.template defaults visibly sourced from default-secrets.env | Eliminate the silent-overwrite confusion in the secrets-template flow. A reader of provision-host/uis/templates/secrets-templates/00-common-values.env.template should see, at the line where a DEFAULT_* value is defined, that the value is auto-populated from provision-host/uis/templates/default-secrets.env at init time. Today the template ships with placeholder values (e.g. DEFAULT_ADMIN_PASSWORD=TestPassword@123) that are sed-overwritten by the seven canonical values from default-secrets.env during init_secrets() — the substitution is invisible to a contributor reading either file in isolation. | 2026-05-07 |