system-prompts-and-models-o.../salesflow-saas/backend/pyproject.toml
Claude fee51ffb06
feat(dealix): execute ALL automatable blueprint tasks
TASK-001 (prep) — Repository Extraction Script:
  scripts/extract_dealix_repo.sh — automates git filter-repo extraction
  of Dealix-only paths to new GitHub org. Preserves commit history.
  Awaits founder decision on org name.

TASK-003 — Python Dependency Modernization:
  backend/pyproject.toml — full project spec with pinned versions:
    - fastapi, pydantic, sqlalchemy, asyncpg pinned
    - OpenTelemetry packages now included
    - pytest==8.3.4, pytest-asyncio==0.24.0 (stable)
    - Dev group with ruff, mypy, testcontainers
  Ready for uv sync to generate uv.lock.

TASK-004 — Node Dependency Hygiene:
  frontend/package.json — pinned packageManager=pnpm@9.12.0
    and engines.node >=20.10.0 <21.0.0

TASK-005 — Secrets Audit Infrastructure:
  .pre-commit-config.yaml — gitleaks + detect-private-key + detect-aws
    + ruff auto-fix + truth-registry-validator local hook
  docs/internal/rotation_log.md — rotation tracking template with
    scan commands (gitleaks, trufflehog3) and forbidden practices

TASK-006 — Legal Foundation Tracker:
  docs/internal/legal_status.md — tracks:
    - Company incorporation options (MISA vs DIFC vs ADGM)
    - IP assignment requirements
    - Privacy Policy / ToS / DPA review status
    - Trademark filing (KSA, UAE, Egypt, Jordan)
    - PDPL / ZATCA / NCA / SDAIA regulatory status
    - Professional indemnity + cyber + general insurance

TASK-010 (complete) — Truth Registry Tooling:
  scripts/validate_truth_registry.py — validates TRUTH.yaml structure,
    status values, and claims_registry.yaml alignment
  .github/workflows/truth-validation.yml — CI workflow on changes to
    truth registry or claims registry

TASK-101 — Release Readiness Gate (blueprint-spec):
  scripts/release_readiness_gate.py:
    - Required artifacts check (11 files)
    - TRUTH.yaml field validation
    - Forbidden claims scan in public docs
    - Architecture brief sub-gate
  Complements release_readiness_matrix.py (runtime checks).

Blueprint saved:
  DEALIX_EXECUTION_BLUEPRINT.md — authoritative execution doc

Updated:
  release_readiness_matrix.py — now 53/53 checks (was 41/41)
  docs/execution_log.md — full task tracking

All 3 gates GREEN:
  Architecture Brief: 40/40
  Release Readiness Matrix: 53/53
  Release Readiness Gate: PASS

Remaining P0 founder decisions (cannot be automated):
  - TASK-001: GitHub org name + run extraction
  - TASK-006: Entity incorporation + counsel engagement

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-17 10:39:21 +00:00

101 lines
2.1 KiB
TOML

[project]
name = "dealix-api"
version = "0.1.0"
description = "Dealix — Sovereign Deal, Growth & Commitment OS"
requires-python = ">=3.12,<3.13"
readme = "../README.md"
license = { text = "Proprietary" }
dependencies = [
# Core framework
"fastapi>=0.115.0,<0.116.0",
"uvicorn[standard]>=0.32.0,<0.33.0",
"pydantic>=2.10.0,<3.0.0",
"pydantic-settings>=2.10.1,<3.0.0",
"pydantic-extra-types[phonenumbers]>=2.0.0",
"python-multipart==0.0.12",
# Database
"sqlalchemy==2.0.36",
"asyncpg==0.30.0",
"psycopg2-binary==2.9.10",
"alembic==1.14.0",
"pgvector==0.3.6",
# AI / LLM Providers
"litellm>=1.74.0,<2",
"instructor>=1.14.0",
"groq==0.12.0",
"openai>=2.8.0,<3",
# Async tasks
"celery>=5.4.0,<6",
"redis>=5.2.0,<6",
# Auth & Security
"pyjwt>=2.10.0",
"passlib[bcrypt]>=1.7.4",
"bcrypt>=4.2.0",
"python-jose>=3.3.0",
"slowapi>=0.1.9",
# Communication
"httpx>=0.28.1,<0.29.0",
# Arabic NLP
"pyarabic>=0.6.0",
# PDF + docs
"weasyprint>=60.0",
# Observability
"sentry-sdk>=2.0.0",
"prometheus-client>=0.21.0",
"prometheus-fastapi-instrumentator>=7.0.0",
"structlog>=24.0.0",
"opentelemetry-api>=1.27.0,<2",
"opentelemetry-sdk>=1.27.0,<2",
"opentelemetry-instrumentation-fastapi>=0.48b0",
"opentelemetry-instrumentation-sqlalchemy>=0.48b0",
# Utils
"tenacity>=9.0.0",
"python-dotenv>=1.0.0",
]
[dependency-groups]
dev = [
"pytest==8.3.4",
"pytest-asyncio==0.24.0",
"pytest-cov==5.0.0",
"aiosqlite==0.20.0",
"factory-boy>=3.3.0",
"ruff>=0.7.0",
"mypy>=1.13.0",
"testcontainers>=4.8.0",
]
[tool.pytest.ini_options]
testpaths = ["tests"]
asyncio_mode = "auto"
asyncio_default_fixture_loop_scope = "function"
filterwarnings = ["ignore::DeprecationWarning"]
markers = [
"launch: pre-release surface & scenario checks",
"slow: tests that hit external IO or long LangGraph paths",
]
[tool.ruff]
line-length = 120
target-version = "py312"
[tool.ruff.lint]
select = ["E", "W", "F", "I", "B", "C4", "UP"]
ignore = ["E501"] # line too long handled by formatter
[tool.mypy]
python_version = "3.12"
ignore_missing_imports = true
warn_return_any = false
warn_unused_configs = true