This document separates capabilities that are verified today from interfaces that are intentionally blocked from a production claim. It must be updated whenever a blocker is removed or a new runtime dependency is introduced.
- The API and web UI run locally at
127.0.0.1:18080and127.0.0.1:5173. - The file-backed single-instance store survives process restarts and rejects unsafe snapshot paths, oversized snapshots, and symbolic-link indirection.
- Imported artifact bytes are stored outside the JSON snapshot through the filesystem object-store adapter. Retention and launch deletion remove physical objects before deleting metadata.
- A production S3-compatible artifact adapter is runtime-selectable, keeps provider keys behind the authorized content proxy, supports MinIO path-style endpoints, and has bounded metadata/delete contract tests. Docker Compose supplies an isolated bucket and explicit development credentials.
- Launch deletion is API-backed, role/scope checked, refuses active launches, and cascades artifact, upload, and history records.
- Test-case deprecation is API-backed and survives UI reloads.
- Project access, API tokens, integration providers, custom fields, and artifact retention settings are API-backed and authorization checked.
- Result quarantine and unquarantine are API-backed, role/scope checked, append-only, persisted by memory/file/PostgreSQL repositories, and mirrored into the security audit stream.
- Test Plans select automated cases only; CI Jobs, authenticated inbound CI webhooks, and their PostgreSQL repositories are API-backed and represented in the Automation UI.
- Native GitLab pipeline events and GitHub
workflow_runevents are normalized into CI Jobs. GitLab tokens are compared by hash; GitHub signatures are verified over the exact request bytes with AES-256-GCM encrypted webhook secrets underTESTHISTORY_INTEGRATION_MASTER_KEY. Normalized payload fields and external URLs are bounded before persistence. - Notification and issue-tracker integrations use a durable PostgreSQL outbox, worker leases, bounded exponential retry, response-size/time limits, HTTPS/SSRF checks, HMAC webhook signing, and environment-backed credentials which are neither returned nor persisted.
- Jira, YouTrack, GitHub Issues, generic issue HTTP, generic webhook, Slack, Teams, and Pachca request adapters are covered by contract tests. Terminal CI jobs, launch closure/failure, and failed quality gates enqueue idempotent notification deliveries.
- OIDC provider configuration is redacted and environment-backed; discovery metadata is validated through bounded HTTPS/SSRF guards. Project SCIM 2.0 tokens are shown once, hashed at rest, and provision, update, list, or disable project memberships with security-audit evidence.
- Launch comparison classifies automated-test changes from stable identities and final retries. Analytics exposes per-launch series, status counters, pass/failure rates, duration averages, p50, and p95 metrics; both surfaces are wired to the production API rather than fixture-only values.
- Module-size debt is closed: launch lifecycle, launch comparison UI, and in-memory repository construction are separated from their former aggregate modules and protected by the size guard.
- The deterministic UI audit covers 25 screens, tabs, empty states, and dialogs under
docs/screenshots/final.
PostgreSQL startup now migrates and hydrates projects, launches/results, uploads, artifacts, test
cases/history, cleanup and audit state, defect dispositions, Test Plans, CI Jobs, and integration
deliveries. Core mutations write through to repositories and production startup accepts
TESTHISTORY_DATABASE_URL/DATABASE_URL without a file snapshot.
The runtime still maintains a per-process read model after hydration. A single API replica is the supported durable topology. Horizontal API scaling requires repository-first reads or explicit cache invalidation plus a multi-replica consistency test; do not claim active/active support yet.
The base Kubernetes deployment and production overlay enforce that boundary with exactly one API
replica and no API HPA or API PDB. npm run k8s:validate:all rejects a topology that reintroduces any
of those conflicting resources. Worker and web workloads remain independently scalable.
The S3-compatible adapter and authorized proxied download boundary are implemented. Production approval still requires a provider integration drill (write/read/delete and retention), credential rotation evidence. Chunk payloads use the configured object store, but a real provider drill remains an operational release requirement.
Outbound adapters are exercised with deterministic HTTP doubles. Before production, run one write/read lifecycle against each enabled real provider, verify allowlists and secret-manager references, rotate one credential, and prove retry/dead-letter alerting. Provider credentials must remain environment/secret-manager values referenced by project settings.
OIDC configuration/discovery and the SCIM Users lifecycle have deterministic contract coverage. Before enabling a real provider, validate its issuer metadata and client-secret reference in the target network, rotate the SCIM token, provision and deactivate a non-privileged account, and verify the resulting project membership and security-audit records. No identity-provider credential may be committed to project settings, logs, screenshots, or fixtures.
Run these commands from the repository root:
npm run check
npm run lint
npm run openapi:check
npm run security:audit
npm run guard:ui-design
npm run guard:ui-interactions
npm run guard:button-overflow
npm run smoke:api
npm run smoke:ui:local
npm run k8s:validate:all
npm run production:evidence:test
Passing these gates proves build, contract, unit/integration, deterministic UI, local runtime, and
static deployment readiness. Before production traffic, additionally run
npm run production:evidence:check against the approved environment-specific evidence file outside
the repository. Neither the unit test nor static Kubernetes validation overrides the production
blockers above.