Known Issues

Current limitations and production hardening guidance.

⚠️
OpenFactstore is under active development. The items below represent known limitations in the current release. Each entry includes recommended mitigations for production use.

Current Limitations

✓ Resolved Security Authentication enforcement

API authentication enforcement is now configurable. Set the SECURITY_ENFORCE_AUTH=true environment variable to require authentication on all API endpoints. When enabled, requests must supply a valid API key (X-API-Key) or SSO JWT (Authorization: Bearer <jwt>).

Authentication defaults to permissive for development convenience. Always set SECURITY_ENFORCE_AUTH=true in production. Public paths (Swagger UI, health endpoint, SSO login/callback, OAuth2) remain accessible without authentication regardless of this setting.

✓ Resolved Limitation In-memory H2 database

PostgreSQL is now the default database. The application ships with Flyway migration scripts (V1–V31) that apply cleanly against PostgreSQL. H2 is retained only for unit tests.

Configure the datasource via environment variables: SPRING_DATASOURCE_URL, SPRING_DATASOURCE_USERNAME, and SPRING_DATASOURCE_PASSWORD. A Docker Compose file with a PostgreSQL service is included in the repository root.

✓ Resolved Security SCM token storage

SCM tokens are now encrypted at rest using AES-256-GCM before being persisted to the database. A unique 12-byte IV is generated per token; the ciphertext and IV are stored together as a single Base64-encoded value.

Set the encryption key via the SCM_ENCRYPTION_KEY environment variable (32-character string). A default development key is used when the variable is not set. Existing Base64-only tokens remain readable via backward-compatible legacy decoding. Rotate tokens after enabling encryption for maximum security.

Limitation OPA embedded mode is a simplified stub

The default embedded OPA policy evaluator supports a simplified subset of policy logic. Full Rego language features — including imports, virtual documents, and partial rules — are not available in embedded mode.

Mitigation: Set OPA_MODE=external and configure OPA_URL to point to a full OPA server instance. Full Rego support is available in external mode. WASM-compiled policy modules are also supported via the Policy Management API.

✓ Resolved Limitation Role-based access control

RBAC is now implemented. The application supports four roles: ADMIN, MEMBER, VIEWER, and SERVICE_ACCOUNT (pipeline-bot). Role enforcement on sensitive endpoints (organisation management, policy management) is activated automatically when SECURITY_ENFORCE_AUTH=true.

Assign roles when creating service account API keys. SSO users inherit roles from group→role mappings configured in the SSO settings for your organisation.

✓ Resolved Limitation Incomplete frontend coverage

The following frontend views have been added to the Vue application:

  • Compliance Frameworks (/compliance) — browse and import PCI-DSS v4, SOX ITGC, GDPR Art.32, and SLSA Level 2/3 framework templates.
  • Policy Management (/policies) — create, view, and delete deployment policies; upload WASM policy modules.
  • Drift Detection (/drift) — compare environment allowlists against active snapshots; identify and highlight out-of-compliance artifacts.

All backend features now have dedicated UI coverage.

Planned Enhancements

The following capabilities are on the roadmap for upcoming releases:

✓ Delivered Enhancement CLI binary

A standalone Go CLI (factstore-cli) is available in the cli/ directory. It supports attest and gate commands for use in CI/CD pipelines without requiring curl + jq. Reusable GitHub Actions workflows (factstore-attest.yml, factstore-gate.yml) and a GitLab CI template (gitlab/factstore.yml) are also provided.

✓ Delivered Enhancement Full authentication + RBAC

JWT-based authentication (SSO via OIDC, API keys for service accounts) and role-based access control (ADMIN / MEMBER / VIEWER / SERVICE_ACCOUNT) are implemented. Enable enforcement with SECURITY_ENFORCE_AUTH=true.

✓ Delivered Enhancement PostgreSQL support

PostgreSQL is the default database. Flyway migration scripts (V1–V31) are included, and a Docker Compose profile for a persistent development environment is in the repository root.

Planned Kubernetes operator

A Kubernetes operator for managing OpenFactstore deployments declaratively, with custom resources for Flows and deployment policies.

Reporting Issues

Found a bug or want to request a feature? Open an issue on GitHub:

github.com/MaximumTrainer/OpenFactstore/issues ↗