Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
19e84ba
Document immutable AWS readiness baseline
manuelgrabmayer Jul 28, 2026
af052d6
Document PostgreSQL target architecture
manuelgrabmayer Jul 28, 2026
949c35e
Harden API authentication and authorization
manuelgrabmayer Jul 28, 2026
3c0ee37
Build data-free PostgreSQL container foundation
manuelgrabmayer Jul 28, 2026
f883e77
Define versioned PostgreSQL schema
manuelgrabmayer Jul 28, 2026
262b4a8
Implement deterministic PostgreSQL data migration
manuelgrabmayer Jul 28, 2026
9afbc4a
Preserve exchange-rate month precision
manuelgrabmayer Jul 28, 2026
919aa96
Make migration activation lossless and atomic
manuelgrabmayer Jul 28, 2026
a74d75c
Report explicit foreign-key reconciliation
manuelgrabmayer Jul 28, 2026
d6d2b69
Restore dataset state after migration tests
manuelgrabmayer Jul 28, 2026
e6b3ad7
Complete PostgreSQL data migration gate
manuelgrabmayer Jul 28, 2026
6c208ac
Complete PostgreSQL application runtime
manuelgrabmayer Jul 29, 2026
0e8b37c
Complete PostgreSQL performance and concurrency
manuelgrabmayer Jul 29, 2026
7a7d35e
Complete frontend remediation and browser gates
manuelgrabmayer Jul 29, 2026
c81e705
Complete durable pipeline and storage contracts
manuelgrabmayer Jul 29, 2026
d9baa6f
Complete governance and retention controls
manuelgrabmayer Jul 29, 2026
8ef7b3a
Complete observability contracts and runbooks
manuelgrabmayer Jul 29, 2026
86c794f
Define guarded AWS infrastructure
manuelgrabmayer Jul 29, 2026
6518fbd
Complete guarded CI and deployment workflows
manuelgrabmayer Jul 29, 2026
e70242c
Complete shadow comparison and cutover preparation
manuelgrabmayer Jul 29, 2026
6a00f70
Fix CI pytest invocation and coverage evidence
manuelgrabmayer Jul 29, 2026
5b2fe5e
Validate and format Terraform definitions
manuelgrabmayer Jul 29, 2026
be3630b
Correct Terraform backend evidence
manuelgrabmayer Jul 29, 2026
0554bd5
Add ECS-compatible local deployment path
manuelgrabmayer Aug 6, 2026
d6b0fe7
feat: align frontend runtime with ECS networking
manuelgrabmayer Aug 6, 2026
d1c79a6
feat: add public read-only demo access
manuelgrabmayer Aug 6, 2026
e06ab1e
feat: add AWS demo infrastructure plan
manuelgrabmayer Aug 6, 2026
2bcd68b
fix: require TLS for PostgreSQL migrations
manuelgrabmayer Aug 7, 2026
b1fa757
fix: preserve encoded database passwords
manuelgrabmayer Aug 7, 2026
edd3633
fix: align demo readiness with readonly runtime
manuelgrabmayer Aug 7, 2026
5aba335
fix: run ECS frontend on unprivileged port
manuelgrabmayer Aug 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 63 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
.git
.gitignore
.gitattributes
.github
.env
.env.*

**/__pycache__
**/*.py[cod]
**/.pytest_cache
**/.mypy_cache
**/.ruff_cache
**/.cache
.coverage
.coverage.*
coverage.xml
htmlcov

.venv
venv
env
ENV
**/*.egg-info
build
dist

frontend/node_modules
frontend/dist
frontend/.test-dist
node_modules

*.db
*.db-*
*.sqlite
*.sqlite3
*.sqlite-*
src/data/**
!src/data/*.py
**/raw/**
**/processed/**
**/preprocessed/**
**/browser-profile/**
**/browser_profiles/**
**/playwright-report/**
**/test-results/**

docs
exports
**/exports/**
**/audit-staging/**
**/*.tfstate
**/*.tfstate.*

*.log
*.tmp
*.temp
*.bak
*.swp
*.swo
.DS_Store
._*

*.ipynb
68 changes: 62 additions & 6 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,10 +1,66 @@
# Copy to .env. The real .env is ignored by Git; never commit secrets.
JWT_SECRET_KEY=replace-with-a-long-random-secret
JWT_ALGORITHM=HS256
# Copy to .env for local work only. The real .env is ignored by Git; never commit secrets.
APP_ENV=development
# Operational deployments default to PostgreSQL. The SQLite mode is local/test
# migration compatibility only; shadow_compare requires a separate snapshot.
# DATA_RUNTIME_MODE=postgresql
# SHADOW_SQLITE_PATH=/absolute/path/to/coherent-shadow-snapshot.db
AUTH_MODE=disabled
ACCESS_TOKEN_EXPIRE_MINUTES=30
BFF_ADMIN_USER=admin
BFF_ADMIN_PASSWORD=password
CORE_API_URL=http://localhost:8080
SESSION_COOKIE_SECURE=false
CORS_ORIGINS=http://localhost:5173,http://127.0.0.1:5173

# Production/staging must use OIDC and inject these values through the runtime.
# AUTH_MODE=oidc
# OIDC_ISSUER=https://identity.example.invalid/
# OIDC_AUDIENCE=foundation-intelligence-api
# OIDC_JWKS_URL=https://identity.example.invalid/.well-known/jwks.json
# OIDC_ROLE_CLAIM=roles

# Explicit local-only authentication. Use unique values; no defaults are supplied.
# AUTH_MODE=development
# DEV_AUTH_ENABLED=true
# DEV_AUTH_USERNAME=
# DEV_AUTH_PASSWORD=
# DEV_AUTH_SECRET=
# DEV_AUTH_ALLOWED_HOSTS=127.0.0.1,::1,localhost

# Public, non-production demo only. Both values are required together. This
# mode has no login/session and exposes only the reviewed aggregate route
# allowlist in bff.security; all other API routes remain protected.
# APP_ENV=demo
# DATA_RUNTIME_MODE=postgresql
# AUTH_MODE=public_readonly
# DEV_AUTH_ENABLED=false
# CORE_PROXY_ENABLED=false
# CORS_ORIGINS=

RATE_LIMIT_REQUESTS=120
RATE_LIMIT_WINDOW_SECONDS=60
MAX_REQUEST_BODY_BYTES=1048576
REQUEST_TIMEOUT_SECONDS=30

# PostgreSQL readiness/runtime configuration. Prefer a mounted secret file.
# DATABASE_URL=postgresql+asyncpg://user:password@localhost:5432/foundation_intelligence
DATABASE_HOST=127.0.0.1
DATABASE_PORT=5432
DATABASE_NAME=foundation_intelligence
DATABASE_USER=foundation_app
# DATABASE_PASSWORD_FILE=/absolute/path/to/postgres_password
# AWS/RDS tasks use encrypted PostgreSQL transport.
DATABASE_SSL_MODE=disable
DATABASE_POOL_SIZE=5
DATABASE_MAX_OVERFLOW=5
DATABASE_POOL_TIMEOUT_SECONDS=5
DATABASE_CONNECT_TIMEOUT_SECONDS=5
DATABASE_STATEMENT_TIMEOUT_MS=30000

CORE_PROXY_ENABLED=false
CORE_API_URL=http://127.0.0.1:8080
# CORE_API_ALLOWED_HOSTS=127.0.0.1
# CORE_PROXY_ALLOWED_PATHS=v1/data
# CORE_PROXY_ALLOWED_METHODS=GET
# CORE_PROXY_FORWARD_HEADERS=accept,content-type,x-request-id
# CORE_API_BEARER_TOKEN=
DB_PATH=src/data/charities.db
DATA_PATH=src/data/raw/register_of_charities_results.json
SCORE_CONFIG_PATH=config/scoring.example.json
Expand Down
Loading
Loading