Skip to content

fix(frontend): remediate frontend + extension audit findings #6137

fix(frontend): remediate frontend + extension audit findings

fix(frontend): remediate frontend + extension audit findings #6137

Workflow file for this run

name: CI
on:
# Run on direct pushes to protected branches only
push:
branches:
- main
# Run CI for PRs targeting these branches
pull_request:
branches:
- main
- dev
workflow_dispatch:
release:
types: [published]
permissions:
contents: read
env:
PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION: python
concurrency:
# Ensure newer PR commits cancel older queued runs for the same PR.
group: ci-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
http-client-patch-guard:
name: HTTP Client Patch Guard
runs-on: ubuntu-latest
timeout-minutes: 2
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.12'
- name: Guard against raw HTTP client patching
run: |
python Helper_Scripts/checks/guard_http_client_patching.py
syntax-check:
name: Syntax Check (compileall)
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.12'
- name: Compile all Python under tldw_Server_API/app
shell: bash
run: |
python - <<'PY'
import compileall, sys
ok = compileall.compile_dir('tldw_Server_API/app', force=True, quiet=1)
sys.exit(0 if ok else 1)
PY
shard-coverage:
name: Shard coverage guard
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.12'
- name: Install PyYAML
run: pip install pyyaml
- name: Verify every test file is assigned to a shard
# Fails if a NEW test file is in no full-suite shard (would be silently
# skipped). Known-unshared backlog is tracked in
# Helper_Scripts/ci/shard_coverage_baseline.txt; shrink it over time.
run: python Helper_Scripts/ci/check_shard_coverage.py --ci-file .github/workflows/ci.yml
quickstart-dry-run:
name: Quickstart Dry-Run Smoke
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.12'
- name: Verify quickstart-install target shape
run: |
make -n quickstart-install
lint:
name: Lint & Type Check
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.12'
cache: pip
cache-dependency-path: |
pyproject.toml
uv.lock
- name: Install tools
run: |
python -m pip install --upgrade pip
pip install "mypy==1.20.1" "ruff==0.15.10"
- name: Ruff lint (non-blocking, baseline 1419 errors)
continue-on-error: true
run: ruff check tldw_Server_API/
- name: MyPy (non-blocking, baseline 10191 errors)
continue-on-error: true
run: mypy tldw_Server_API/
frontend-lint:
name: Frontend Lint (Next.js)
runs-on: ubuntu-latest
timeout-minutes: 10
env:
SKIP_WXT_PREPARE: "1"
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: '20'
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: "1.3.2"
- name: Install dependencies
run: bun install --frozen-lockfile
working-directory: apps
- name: Run frontend lint
run: bun run lint
working-directory: apps/tldw-frontend
wizard-tests:
name: Wizard Tests (Coverage Gate)
runs-on: ubuntu-latest
timeout-minutes: 20
services:
postgres:
image: mirror.gcr.io/library/postgres:18-bookworm
env:
POSTGRES_USER: tldw_user
POSTGRES_PASSWORD: TestPassword123!
POSTGRES_DB: tldw_content
ports:
- 5432/tcp
options: >-
--health-cmd "pg_isready -U tldw_user -d tldw_content"
--health-interval 10s
--health-timeout 5s
--health-retries 10
redis:
image: mirror.gcr.io/library/redis:8-alpine@sha256:9eb6a7ba3d344e1958c7e1589fa3dee90373a934e8159c634562a91d622759a0
ports:
- 6379/tcp
options: >-
--health-cmd "redis-cli ping"
--health-interval 10s
--health-timeout 5s
--health-retries 5
env:
PYTHONPATH: .
PYTEST_DISABLE_PLUGIN_AUTOLOAD: '1'
TEST_MODE: 'true'
DISABLE_HEAVY_STARTUP: '1'
POSTGRES_TEST_HOST: 127.0.0.1
POSTGRES_TEST_DB: tldw_content
POSTGRES_TEST_USER: tldw_user
POSTGRES_TEST_PASSWORD: TestPassword123!
TEST_DB_HOST: 127.0.0.1
TEST_DB_USER: tldw_user
TEST_DB_PASSWORD: TestPassword123!
TEST_DB_NAME: tldw_test
TLDW_TEST_POSTGRES_REQUIRED: '1'
WORKFLOWS_EGRESS_ALLOWLIST: "93.184.216.34,does-not-resolve.invalid,example.com"
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Install FFmpeg and PortAudio (Linux)
uses: ./.github/actions/setup-ffmpeg
with:
install-ffmpeg: 'true'
install-portaudio: 'true'
- name: Setup Python and deps (with uv)
uses: ./.github/actions/setup-python-deps
with:
python-version: '3.12'
use-uv: 'true'
cache-dependency-path: |
pyproject.toml
uv.lock
extras: dev,multiplayer
- name: Install pg client and wait for PG
uses: ./.github/actions/wait-for-postgres
with:
host: 127.0.0.1
port: ${{ job.services.postgres.ports['5432'] }}
user: tldw_user
- name: Export PG env vars
shell: bash
run: |
PORT="${{ job.services.postgres.ports['5432'] }}"
DB_USER="${POSTGRES_TEST_USER:-tldw_user}"
DB_PASSWORD="${POSTGRES_TEST_PASSWORD:?POSTGRES_TEST_PASSWORD is required}"
DB_NAME="${POSTGRES_TEST_DB:-tldw_content}"
DB_URL="postgresql://${DB_USER}:${DB_PASSWORD}@127.0.0.1:${PORT}/${DB_NAME}"
echo "::add-mask::${DB_PASSWORD}"
echo "::add-mask::${DB_URL}"
{
echo "POSTGRES_TEST_PORT=${PORT}"
echo "TEST_DB_PORT=${PORT}"
echo "TEST_DATABASE_URL=${DB_URL}"
echo "DATABASE_URL=${DB_URL}"
} >> "$GITHUB_ENV"
- name: Ensure base DB exists
shell: bash
env:
PGPASSWORD: ${{ env.POSTGRES_TEST_PASSWORD }}
run: |
PORT="${{ job.services.postgres.ports['5432'] }}"
DB_NAME="${POSTGRES_TEST_DB:-tldw_content}"
DB_USER="${POSTGRES_TEST_USER:-tldw_user}"
echo "Ensuring database '$DB_NAME' exists on port $PORT as user $DB_USER"
psql -h 127.0.0.1 -p "$PORT" -U "$DB_USER" -d postgres -tc "SELECT 1 FROM pg_database WHERE datname='${DB_NAME}'" | grep -q 1 || \
psql -h 127.0.0.1 -p "$PORT" -U "$DB_USER" -d postgres -c "CREATE DATABASE ${DB_NAME}"
- name: Run wizard tests (coverage gate)
env:
PYTEST_DISABLE_PLUGIN_AUTOLOAD: "1"
run: |
# Keep this as a non-regression floor until wizard CLI coverage is expanded.
pytest -q --disable-warnings -p pytest_cov -p pytest_asyncio.plugin \
tldw_Server_API/tests/wizard \
--cov=tldw_Server_API/cli/wizard --cov-report=term-missing --cov-fail-under=70
changes:
name: Detect changed areas
runs-on: ubuntu-latest
timeout-minutes: 5
outputs:
backend_changed: ${{ steps.detect.outputs.backend_changed }}
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
with:
fetch-depth: 0
- name: Classify changed paths
id: detect
uses: ./.github/actions/detect-required-gate-changes
full-suite-linux-311-smoke:
name: Full Suite (Ubuntu / Python 3.11 / ${{ matrix.shard.name }})
runs-on: ubuntu-latest
timeout-minutes: 25
needs: [lint, syntax-check, changes]
if: ${{ github.event_name != 'pull_request' || needs.changes.outputs.backend_changed == 'true' }}
strategy:
fail-fast: false
matrix:
shard:
- name: core
paths: >-
tldw_Server_API/tests/test_*.py
tldw_Server_API/tests/Health
tldw_Server_API/tests/sanity_tests
tldw_Server_API/tests/schemas
tldw_Server_API/tests/unit
- name: authnz-unit
paths: >-
tldw_Server_API/tests/AuthNZ_Unit
- name: config-core-loaders
paths: >-
tldw_Server_API/tests/Config/test_claims_env_int_parsing.py
tldw_Server_API/tests/Config/test_config_adapter.py
tldw_Server_API/tests/Config/test_config_admin_endpoint_sanitizers.py
tldw_Server_API/tests/Config/test_config_precedence_contract.py
tldw_Server_API/tests/Config/test_config_providers_endpoints.py
tldw_Server_API/tests/Config/test_config_sections_typed_loaders.py
tldw_Server_API/tests/Config/test_config_txt_inline_comment_regression.py
tldw_Server_API/tests/Config/test_config_utils_sanitizers.py
tldw_Server_API/tests/Config/test_docs_info_capabilities.py
- name: config-effective-api
paths: >-
tldw_Server_API/tests/Config/test_effective_config_api.py
- name: config-module-yaml
paths: >-
tldw_Server_API/tests/Config/test_module_yaml_integration.py
- name: config-runtime-env
paths: >-
tldw_Server_API/tests/Config/test_env_file_selection.py
tldw_Server_API/tests/Config/test_feature_flags.py
tldw_Server_API/tests/Config/test_local_api_and_custom_openai2_config_keys.py
tldw_Server_API/tests/Config/test_migrate_api_keys.py
tldw_Server_API/tests/Config/test_pyproject_tooling_extra.py
tldw_Server_API/tests/Config/test_redis_config.py
tldw_Server_API/tests/Config/test_web_scraper_config_keys.py
- name: config-routes-startup
paths: >-
tldw_Server_API/tests/Config/test_openapi_config_jobs.py
tldw_Server_API/tests/Config/test_route_and_cors_guards.py
tldw_Server_API/tests/Config/test_route_toggle_evaluations_regressions.py
tldw_Server_API/tests/Config/test_startup_api_key_logging.py
tldw_Server_API/tests/Config/test_startup_validation.py
- name: utils-http
paths: >-
tldw_Server_API/tests/Utils
tldw_Server_API/tests/http_client
services:
postgres:
image: mirror.gcr.io/library/postgres:18-bookworm
env:
POSTGRES_USER: tldw_user
POSTGRES_PASSWORD: TestPassword123!
POSTGRES_DB: tldw_content
ports:
- 5432/tcp
options: >-
--health-cmd "pg_isready -U tldw_user -d tldw_content"
--health-interval 10s
--health-timeout 5s
--health-retries 10
env:
PYTHONPATH: .
PYTEST_DISABLE_PLUGIN_AUTOLOAD: '1'
TEST_MODE: 'true'
DISABLE_HEAVY_STARTUP: '1'
PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION: python
POSTGRES_TEST_HOST: 127.0.0.1
POSTGRES_TEST_DB: tldw_content
POSTGRES_TEST_USER: tldw_user
POSTGRES_TEST_PASSWORD: TestPassword123!
TEST_DB_HOST: 127.0.0.1
TEST_DB_USER: tldw_user
TEST_DB_PASSWORD: TestPassword123!
TEST_DB_NAME: tldw_test
TLDW_TEST_POSTGRES_REQUIRED: '1'
WORKFLOWS_EGRESS_ALLOWLIST: "93.184.216.34,does-not-resolve.invalid,example.com"
RESULTS_DIR: test-results-linux-3.11-${{ matrix.shard.name }}
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Install FFmpeg and PortAudio (Linux)
uses: ./.github/actions/setup-ffmpeg
with:
install-ffmpeg: ${{ startsWith(matrix.shard.name, 'media-') || matrix.shard.name == 'ai-embeddings-media-validation' || matrix.shard.name == 'rag-new-unit-media-ingest' || matrix.shard.name == 'product-claims-service' || (matrix.shard.name == 'platform-services-core' || matrix.shard.name == 'platform-services-main-routing' || matrix.shard.name == 'platform-services-main-pollers') }}
install-portaudio: 'true'
- name: Setup Python and deps (with uv)
uses: ./.github/actions/setup-python-deps
with:
python-version: '3.11'
use-uv: 'true'
cache-dependency-path: |
pyproject.toml
uv.lock
extras: dev,multiplayer
- name: Install pg client and wait for PG
uses: ./.github/actions/wait-for-postgres
with:
host: 127.0.0.1
port: ${{ job.services.postgres.ports['5432'] }}
user: tldw_user
- name: Export PG env vars
shell: bash
run: |
PORT="${{ job.services.postgres.ports['5432'] }}"
DB_USER="${POSTGRES_TEST_USER:-tldw_user}"
DB_PASSWORD="${POSTGRES_TEST_PASSWORD:?POSTGRES_TEST_PASSWORD is required}"
DB_NAME="${POSTGRES_TEST_DB:-tldw_content}"
DB_URL="postgresql://${DB_USER}:${DB_PASSWORD}@127.0.0.1:${PORT}/${DB_NAME}"
echo "::add-mask::${DB_PASSWORD}"
echo "::add-mask::${DB_URL}"
{
echo "POSTGRES_TEST_PORT=${PORT}"
echo "TEST_DB_PORT=${PORT}"
echo "TEST_DATABASE_URL=${DB_URL}"
echo "DATABASE_URL=${DB_URL}"
} >> "$GITHUB_ENV"
- name: Ensure base DB exists
shell: bash
env:
PGPASSWORD: ${{ env.POSTGRES_TEST_PASSWORD }}
run: |
PORT="${{ job.services.postgres.ports['5432'] }}"
DB_NAME="${POSTGRES_TEST_DB:-tldw_content}"
DB_USER="${POSTGRES_TEST_USER:-tldw_user}"
psql -h 127.0.0.1 -p "$PORT" -U "$DB_USER" -d postgres -tc "SELECT 1 FROM pg_database WHERE datname='${DB_NAME}'" | grep -q 1 || \
psql -h 127.0.0.1 -p "$PORT" -U "$DB_USER" -d postgres -c "CREATE DATABASE ${DB_NAME}"
- name: Install additional deps for PG tests
run: |
python -m pip install --upgrade pip
pip install "psycopg[binary]>=3.1" pytest pytest-asyncio
- name: Smoke start server (single-user)
if: matrix.shard.name == 'core'
env:
SERVER_LABEL: smoke
AUTH_MODE: single_user
DATABASE_URL: sqlite:///./Databases/users.db
SINGLE_USER_API_KEY: "smoke-ci-key-12345"
E2E_TEST_BASE_URL: "http://127.0.0.1:8000"
PYTEST_CURRENT_TEST: "ci-smoke-linux-py311-single::startup"
TEST_MODE: 'true'
DISABLE_HEAVY_STARTUP: '0'
DEFER_HEAVY_STARTUP: '1'
STARTUP_TRACE: '1'
MCP_DEBUG: '1'
ULTRA_MINIMAL_APP: '1'
PRIVILEGE_METADATA_VALIDATE_ON_STARTUP: '0'
shell: bash
run: |
python tldw_Server_API/tests/scripts/server_lifecycle.py start
- name: Smoke health check
if: always() && matrix.shard.name == 'core'
env:
SERVER_LABEL: smoke
E2E_TEST_BASE_URL: "http://127.0.0.1:8000"
SMOKE_STARTUP_TIMEOUT_SECONDS: '240'
shell: bash
run: |
python tldw_Server_API/tests/scripts/server_lifecycle.py health-check
- name: Print smoke server log on failure
if: failure() && matrix.shard.name == 'core'
env:
SERVER_LABEL: smoke
shell: bash
run: |
python - <<'PY'
import os, pathlib
label = os.environ.get('SERVER_LABEL', 'smoke')
p = pathlib.Path(f'server-{label}.log')
if p.exists():
print('===== smoke server log =====')
print(p.read_text(encoding='utf-8'))
PY
- name: Smoke stop server
if: always() && matrix.shard.name == 'core'
env:
SERVER_LABEL: smoke
shell: bash
run: |
python tldw_Server_API/tests/scripts/server_lifecycle.py stop || true
- name: Run Python 3.11 compatibility smoke tests
shell: bash
run: |
mkdir -p "${RESULTS_DIR}"
export DATABASE_URL="sqlite:///./Databases/users.db"
unset TEST_DATABASE_URL POSTGRES_TEST_DB
pytest -q --disable-warnings -p pytest_asyncio.plugin \
-m "not jobs and not e2e" \
${{ matrix.shard.paths }} \
--durations=50 \
--junit-xml="${RESULTS_DIR}/smoke.xml"
- name: Upload test results (Linux 3.11 smoke)
if: always()
continue-on-error: true
uses: actions/upload-artifact@v7
with:
name: full-suite-ubuntu-py3.11-${{ matrix.shard.name }}
path: ${{ env.RESULTS_DIR }}
full-suite-linux-312-shards:
name: Full Suite shard (Ubuntu / Python 3.12 / ${{ matrix.shard.name }})
runs-on: ubuntu-latest
timeout-minutes: 60
needs: [lint, syntax-check, changes]
if: ${{ github.event_name != 'pull_request' || needs.changes.outputs.backend_changed == 'true' }}
strategy:
fail-fast: false
matrix:
shard:
- name: gap-verified-1
paths: >-
tldw_Server_API/tests/Audiobooks
tldw_Server_API/tests/Image_Generation
- name: gap-verified-2
paths: >-
tldw_Server_API/tests/Claims_Extraction
tldw_Server_API/tests/Discord
tldw_Server_API/tests/Files
tldw_Server_API/tests/Meetings
tldw_Server_API/tests/Notes_Tasks
tldw_Server_API/tests/Sync
tldw_Server_API/tests/Translation
- name: gap-verified-3
paths: >-
tldw_Server_API/tests/DataTables
tldw_Server_API/tests/Embeddings_isolated
tldw_Server_API/tests/Integrations
tldw_Server_API/tests/PrototypeWorkspaces
tldw_Server_API/tests/UserProfile
tldw_Server_API/tests/VN_Platform
- name: gap-verified-4
paths: >-
tldw_Server_API/tests/Governance
tldw_Server_API/tests/Ingestion_Sources
tldw_Server_API/tests/Items
tldw_Server_API/tests/Research_Workspace
tldw_Server_API/tests/Skills
tldw_Server_API/tests/StudyPacks
tldw_Server_API/tests/VN_Play
tldw_Server_API/tests/VN_Policy
tldw_Server_API/tests/scripts
- name: gap-verified-5
paths: >-
tldw_Server_API/tests/Agent_Orchestration
tldw_Server_API/tests/Chat_Workflows
tldw_Server_API/tests/Notes_Graph
tldw_Server_API/tests/Slides tldw_Server_API/tests/Text2SQL
tldw_Server_API/tests/wizard
- name: gap-verified-6
paths: >-
tldw_Server_API/tests/API_Deps
tldw_Server_API/tests/AuthNZ_Federation
tldw_Server_API/tests/CodeGraph
tldw_Server_API/tests/MCP_Hub
tldw_Server_API/tests/MediaFiles
tldw_Server_API/tests/Scheduler
tldw_Server_API/tests/Slack
tldw_Server_API/tests/VN_Assets
- name: gap-verified-7
paths: >-
tldw_Server_API/tests/Guardian
- name: gap-verified-8
paths: >-
tldw_Server_API/tests/Storage
tldw_Server_API/tests/StudySuggestions
tldw_Server_API/tests/Quizzes
- name: gap-verified-9
paths: >-
tldw_Server_API/tests/Docs tldw_Server_API/tests/performance
- name: gap-verified-10
paths: >-
tldw_Server_API/tests/Writing
- name: gap-verified-11
paths: >-
tldw_Server_API/tests/Sharing
tldw_Server_API/tests/VoiceAssistant
- name: gap-verified-12
paths: >-
tldw_Server_API/tests/Billing
tldw_Server_API/tests/CI
tldw_Server_API/tests/FileArtifacts
- name: core-server-smoke
paths: >-
tldw_Server_API/tests/test_*.py
tldw_Server_API/tests/Health
tldw_Server_API/tests/Logging
- name: core-config
paths: >-
tldw_Server_API/tests/Config
- name: core-audit-support
paths: >-
tldw_Server_API/tests/Audit/test_audit_*.py
tldw_Server_API/tests/Audit/test_pii_pattern_groups.py
tldw_Server_API/tests/Audit/test_risk_settings_overrides.py
tldw_Server_API/tests/Audit/test_sqlite_runtime_pragmas.py
- name: core-audit-unified
paths: >-
tldw_Server_API/tests/Audit/test_unified_audit_service.py
- name: core-security
paths: >-
tldw_Server_API/tests/Security
- name: core-setup-usage
paths: >-
tldw_Server_API/tests/Setup
tldw_Server_API/tests/Usage
- name: core-utils-tooling
paths: >-
tldw_Server_API/tests/Helper_Scripts
tldw_Server_API/tests/Context_Integrity
tldw_Server_API/tests/Utils
tldw_Server_API/tests/helpers
tldw_Server_API/tests/http_client
tldw_Server_API/tests/lint
tldw_Server_API/tests/sanity_tests
tldw_Server_API/tests/schemas
tldw_Server_API/tests/unit
- name: admin-a-api
paths: >-
tldw_Server_API/tests/Admin/test_admin_a*.py
- name: admin-budgets
paths: >-
tldw_Server_API/tests/Admin/test_admin_budgets_*.py
- name: admin-bundle-sanitizers
paths: >-
tldw_Server_API/tests/Admin/test_admin_bundle_service_sanitizers.py
- name: admin-bundle-ops
paths: >-
tldw_Server_API/tests/Admin/test_bundle_ops.py
- name: admin-byok-core
paths: >-
tldw_Server_API/tests/Admin/test_admin_byok_service_sanitizers.py
- name: admin-byok-validation
paths: >-
tldw_Server_API/tests/Admin/test_admin_byok_validation_*.py
tldw_Server_API/tests/Admin/test_byok_*.py
- name: admin-backup-api
paths: >-
tldw_Server_API/tests/Admin/test_backup_schedules_api.py
- name: admin-backup-core
paths: >-
tldw_Server_API/tests/Admin/test_admin_backup_*.py
tldw_Server_API/tests/Admin/test_backup_schedules_repo.py
- name: admin-conflicts-data-admin
paths: >-
tldw_Server_API/tests/Admin/test_admin_c*.py
tldw_Server_API/tests/Admin/test_admin_data_*.py
- name: admin-data-ops
paths: >-
tldw_Server_API/tests/Admin/test_data_ops.py
- name: admin-data-subject-api
paths: >-
tldw_Server_API/tests/Admin/test_data_subject_requests_api.py
- name: admin-data-subject-repo-dsr
paths: >-
tldw_Server_API/tests/Admin/test_data_subject_requests_repo.py
tldw_Server_API/tests/Admin/test_dsr_*.py
- name: admin-e2e-access
paths: >-
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_routes_are_unavailable_without_flag
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_routes_require_support_header
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_routes_reject_wrong_support_header
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_routes_fail_closed_without_configured_support_key
- name: admin-e2e-seed
paths: >-
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_seed_returns_stable_fixture_ids
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_seed_returns_debug_role_principals
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_seed_requires_explicit_fixture_passwords
- name: admin-e2e-single-user
paths: >-
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_seed_returns_single_user_login_key
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_single_user_api_key_can_read_users_me
- name: admin-e2e-session-dsr
paths: >-
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_reset_rejects_unsafe_backup_paths
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_bootstrap_jwt_session_returns_cookie_payload
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_dsr_seed_supports_real_preview
- name: admin-e2e-reset-backups
paths: >-
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_reset_clears_backup_schedules
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_reset_clears_monitoring_authority_state
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_run_due_backup_schedules_processes_scheduled_run
- name: admin-g-i
paths: >-
tldw_Server_API/tests/Admin/test_admin_g*.py
tldw_Server_API/tests/Admin/test_admin_i*.py
- name: admin-llm-providers
paths: >-
tldw_Server_API/tests/Admin/test_admin_llm_providers_*.py
- name: admin-incidents
paths: >-
tldw_Server_API/tests/Admin/test_incidents_*.py
- name: admin-llm-usage
paths: >-
tldw_Server_API/tests/Admin/test_llm_usage_endpoints.py
- name: admin-maintenance-misc
paths: >-
tldw_Server_API/tests/Admin/test_admin_maintenance_*.py
tldw_Server_API/tests/Admin/test_admin_misc_endpoints.py
tldw_Server_API/tests/Admin/test_maintenance_*.py
- name: admin-monitoring
paths: >-
tldw_Server_API/tests/Admin/test_admin_monitoring_*.py
tldw_Server_API/tests/Admin/test_monitoring_*.py
- name: admin-ops-dependencies
paths: >-
tldw_Server_API/tests/Admin/test_admin_ops_dependencies.py
- name: admin-ops-endpoints
paths: >-
tldw_Server_API/tests/Admin/test_admin_ops_new_endpoints.py
- name: admin-ops-webhooks-orgs
paths: >-
tldw_Server_API/tests/Admin/test_admin_ops_webhooks_reports.py
tldw_Server_API/tests/Admin/test_admin_orgs_*.py
- name: admin-profiles-rate-registration
paths: >-
tldw_Server_API/tests/Admin/test_admin_profiles_*.py
tldw_Server_API/tests/Admin/test_admin_rate_limits_*.py
tldw_Server_API/tests/Admin/test_admin_registration_*.py
- name: admin-pricing-retention-roles-router
paths: >-
tldw_Server_API/tests/Admin/test_pricing_reload_endpoint.py
tldw_Server_API/tests/Admin/test_retention_policy_preview_api.py
tldw_Server_API/tests/Admin/test_role_*.py
tldw_Server_API/tests/Admin/test_router_analytics_*.py
- name: admin-s-sessions-settings
paths: >-
tldw_Server_API/tests/Admin/test_admin_scope_service_enterprise_mode.py
tldw_Server_API/tests/Admin/test_admin_service_log_sanitizers.py
tldw_Server_API/tests/Admin/test_admin_sessions_*.py
tldw_Server_API/tests/Admin/test_admin_settings_service.py
tldw_Server_API/tests/Admin/test_admin_smoke.py
- name: admin-split-storage-tools
paths: >-
tldw_Server_API/tests/Admin/test_admin_split_*.py
tldw_Server_API/tests/Admin/test_admin_storage_quotas.py
tldw_Server_API/tests/Admin/test_admin_system_ops_service.py
tldw_Server_API/tests/Admin/test_admin_t*.py
- name: admin-users
paths: >-
tldw_Server_API/tests/Admin/test_admin_u*.py
- name: admin-watchlists-webhooks
paths: >-
tldw_Server_API/tests/Admin/test_admin_w*.py
- name: admin-system-usage
paths: >-
tldw_Server_API/tests/Admin/test_system_ops.py
tldw_Server_API/tests/Admin/test_usage_reporting*.py
- name: auth-integration-admin-auth
paths: >-
tldw_Server_API/tests/AuthNZ/integration/test_admin_*.py
tldw_Server_API/tests/AuthNZ/integration/test_api_key_*.py
tldw_Server_API/tests/AuthNZ/integration/test_auth_*.py
- name: auth-integration-authnz
paths: >-
tldw_Server_API/tests/AuthNZ/integration/test_authnz_*.py
- name: auth-integration-b-z
paths: >-
tldw_Server_API/tests/AuthNZ/integration/test_[b-z]*.py
- name: auth-postgres
paths: >-
tldw_Server_API/tests/AuthNZ_Postgres
- name: auth-core-root-property
paths: >-
tldw_Server_API/tests/AuthNZ/test*.py
tldw_Server_API/tests/AuthNZ/property/test*.py
- name: auth-core-unit-a-l
paths: >-
tldw_Server_API/tests/AuthNZ/unit/test_[a-l]*.py
- name: auth-core-unit-m-z
paths: >-
tldw_Server_API/tests/AuthNZ/unit/test_[m-z]*.py
- name: auth-sqlite
paths: >-
tldw_Server_API/tests/AuthNZ_SQLite
- name: auth-unit-a-l
paths: >-
tldw_Server_API/tests/AuthNZ_Unit/test_[a-l]*.py
- name: auth-unit-m-z
paths: >-
tldw_Server_API/tests/AuthNZ_Unit/test_[m-z]*.py
- name: chacha-core-stores
paths: >-
tldw_Server_API/tests/ChaChaNotesDB/test_chacha_*.py
tldw_Server_API/tests/ChaChaNotesDB/test_chachanotes_db.py
- name: chacha-character-conversation
paths: >-
tldw_Server_API/tests/ChaChaNotesDB/test_character_*.py
tldw_Server_API/tests/ChaChaNotesDB/test_conversation_*.py
- name: chacha-content-persona
paths: >-
tldw_Server_API/tests/ChaChaNotesDB/test_flashcard*.py
tldw_Server_API/tests/ChaChaNotesDB/test_note_*.py
tldw_Server_API/tests/ChaChaNotesDB/test_order_by_validation.py
tldw_Server_API/tests/ChaChaNotesDB/test_persona_*.py
tldw_Server_API/tests/ChaChaNotesDB/test_quizzes_basic.py
tldw_Server_API/tests/ChaChaNotesDB/test_web_clipper_db.py
tldw_Server_API/tests/ChaChaNotesDB/test_workspace_assistant_defaults_db.py
tldw_Server_API/tests/ChaChaNotesDB/test_workspace_resource_memberships_db.py
tldw_Server_API/tests/ChaChaNotesDB/test_workspace_sub_resources_db.py
tldw_Server_API/tests/ChaChaNotesDB/test_writing_playground_db.py
- name: db-privileges
paths: >-
tldw_Server_API/tests/DB
tldw_Server_API/tests/DB_Management
tldw_Server_API/tests/MediaDB2
tldw_Server_API/tests/PrivilegeCatalog
tldw_Server_API/tests/Privileges
- name: ai-chromadb
paths: >-
tldw_Server_API/tests/ChromaDB
- name: ai-chunking-core
paths: >-
tldw_Server_API/tests/Chunking/test_async_*.py
tldw_Server_API/tests/Chunking/test_auto_*.py
tldw_Server_API/tests/Chunking/test_chunker_*.py
tldw_Server_API/tests/Chunking/test_process_text_components.py
tldw_Server_API/tests/Chunking/test_process_text_refactor_equivalence.py
tldw_Server_API/tests/Chunking/test_chunking_endpoint.py
tldw_Server_API/tests/Chunking/test_chunking_offsets_property.py
tldw_Server_API/tests/Chunking/test_chunking_overlap_properties.py
tldw_Server_API/tests/Chunking/test_chunking_regressions.py
tldw_Server_API/tests/Chunking/test_chunking_template_endpoint_errors.py
- name: ai-chunking-templates
paths: >-
tldw_Server_API/tests/Chunking/test_chunking_templates.py::TestDatabaseOperations
tldw_Server_API/tests/Chunking/test_chunking_templates.py::TestTemplateInitialization
tldw_Server_API/tests/Chunking/test_chunking_templates.py::TestTemplateProcessing
tldw_Server_API/tests/Chunking/test_chunking_templates_endpoint_sanitization.py
tldw_Server_API/tests/Chunking/test_chunking_templates_validate_schema.py
tldw_Server_API/tests/Chunking/test_template_*.py
- name: ai-chunking-templates-api
paths: >-
tldw_Server_API/tests/Chunking/test_chunking_templates.py::TestAPIEndpoints
- name: ai-chunking-templates-integration
paths: >-
tldw_Server_API/tests/Chunking/test_chunking_templates.py::TestIntegration
- name: ai-chunking-code-json-xml
paths: >-
tldw_Server_API/tests/Chunking/test_code_chunking_regressions.py
tldw_Server_API/tests/Chunking/test_json_*.py
tldw_Server_API/tests/Chunking/test_xml_*.py
- name: ai-chunking-semantic-security
paths: >-
tldw_Server_API/tests/Chunking/test_hierarchical_*.py
tldw_Server_API/tests/Chunking/test_offsets_additional.py
tldw_Server_API/tests/Chunking/test_option_aliases.py
tldw_Server_API/tests/Chunking/test_overlap_clamp.py
tldw_Server_API/tests/Chunking/test_phase3_3_sanitizers.py
tldw_Server_API/tests/Chunking/test_propositions_strategy.py
tldw_Server_API/tests/Chunking/test_security*.py
tldw_Server_API/tests/Chunking/test_semantic_*.py
tldw_Server_API/tests/Chunking/test_sentence_spans_properties.py
tldw_Server_API/tests/Chunking/test_streaming_overlap.py
tldw_Server_API/tests/Chunking/test_thai_tables_spans.py
tldw_Server_API/tests/Chunking/test_thread_safety.py
tldw_Server_API/tests/Chunking/test_tokens_offsets.py
tldw_Server_API/tests/Chunking/unit/test_tokens_fallback_offsets.py
- name: ai-embeddings-async
paths: >-
tldw_Server_API/tests/Embeddings/test_async_*.py
- name: ai-embeddings-backpressure
paths: >-
tldw_Server_API/tests/Embeddings/test_backpressure*.py
tldw_Server_API/tests/Embeddings/test_batch_rate_headers.py
- name: ai-embeddings-chromadb-core
paths: >-
tldw_Server_API/tests/Embeddings/test_chromadb_*.py
- name: ai-embeddings-core
paths: >-
tldw_Server_API/tests/Embeddings/test_chunk_metadata_backfill.py
tldw_Server_API/tests/Embeddings/test_circuit_breaker_*.py
tldw_Server_API/tests/Embeddings/test_compactor_admin_endpoint.py
tldw_Server_API/tests/Embeddings/test_connection_pool_failure_accounting.py
tldw_Server_API/tests/Embeddings/test_contextual_chunking.py
- name: ai-embeddings-dlq-config
paths: >-
tldw_Server_API/tests/Embeddings/test_delete_by_filter_endpoint.py
tldw_Server_API/tests/Embeddings/test_dlq_*.py
tldw_Server_API/tests/Embeddings/test_embedding_*.py
tldw_Server_API/tests/Embeddings/test_embeddings_audit_adapter.py
tldw_Server_API/tests/Embeddings/test_embeddings_batch_dimensions.py
tldw_Server_API/tests/Embeddings/test_embeddings_dimensions_policy.py
tldw_Server_API/tests/Embeddings/test_embeddings_endpoint_cache_identity.py
tldw_Server_API/tests/Embeddings/test_embeddings_fallback*.py
- name: ai-embeddings-jobs-runtime
paths: >-
tldw_Server_API/tests/Embeddings/test_embeddings_jobs*.py
tldw_Server_API/tests/Embeddings/test_embeddings_local_api.py
tldw_Server_API/tests/Embeddings/test_embeddings_loop_scoping.py
tldw_Server_API/tests/Embeddings/test_embeddings_memory*.py
tldw_Server_API/tests/Embeddings/test_embeddings_metric*.py
tldw_Server_API/tests/Embeddings/test_embeddings_model_management.py
tldw_Server_API/tests/Embeddings/test_embeddings_optional_deps_import.py
tldw_Server_API/tests/Embeddings/test_embeddings_redis*.py
tldw_Server_API/tests/Embeddings/test_embeddings_rg_sync_helper.py
tldw_Server_API/tests/Embeddings/test_embeddings_test_mode_truthiness.py
tldw_Server_API/tests/Embeddings/test_embeddings_token_arrays.py
tldw_Server_API/tests/Embeddings/test_embeddings_unsupported_provider.py
- name: ai-embeddings-policy
paths: >-
tldw_Server_API/tests/Embeddings/test_embeddings_policy*.py
tldw_Server_API/tests/Embeddings/test_l2_normalization_policy.py
- name: ai-embeddings-v5-core
paths: >-
tldw_Server_API/tests/Embeddings/test_embeddings_v5_production.py
tldw_Server_API/tests/Embeddings/test_embeddings_v5_property.py
tldw_Server_API/tests/Embeddings/test_embeddings_v5_unit.py
- name: ai-embeddings-v5-integration
paths: >-
tldw_Server_API/tests/Embeddings/test_embeddings_v5_integration.py
- name: ai-embeddings-hyde-ledger
paths: >-
tldw_Server_API/tests/Embeddings/test_hyde_backfill_cli.py
tldw_Server_API/tests/Embeddings/test_ledger_status_endpoint.py
- name: ai-embeddings-media-validation
paths: >-
tldw_Server_API/tests/Embeddings/test_media_*.py
tldw_Server_API/tests/Embeddings/test_message_validator*.py
- name: ai-embeddings-observability
paths: >-
tldw_Server_API/tests/Embeddings/test_metrics*.py
tldw_Server_API/tests/Embeddings/test_model_eviction_in_use_guard.py
tldw_Server_API/tests/Embeddings/test_multi_tier_cache_sync_async_loop.py
tldw_Server_API/tests/Embeddings/test_embeddings_orchestrator*.py
tldw_Server_API/tests/Embeddings/test_orchestrator*.py
tldw_Server_API/tests/Embeddings/test_pgvector*.py
tldw_Server_API/tests/Embeddings/test_priority_bump_endpoint.py
tldw_Server_API/tests/Embeddings/test_redis_integration_smoke.py
tldw_Server_API/tests/Embeddings/test_reembed_schedule_endpoint.py
tldw_Server_API/tests/Embeddings/test_request*.py
tldw_Server_API/tests/Embeddings/test_schema_drift.py
tldw_Server_API/tests/Embeddings/test_stage_controls.py
tldw_Server_API/tests/Embeddings/test_storage_idempotency_property.py
tldw_Server_API/tests/Embeddings/test_trace_headers.py
tldw_Server_API/tests/Embeddings/test_vector*.py
- name: vector-stores-integration
paths: >-
tldw_Server_API/tests/VectorStores/integration
- name: vector-stores-api
paths: >-
tldw_Server_API/tests/VectorStores/test*.py
- name: vector-stores-unit
paths: >-
tldw_Server_API/tests/VectorStores/unit
- name: paper-search
paths: >-
tldw_Server_API/tests/PaperSearch
- name: rag-legacy
paths: >-
tldw_Server_API/tests/RAG
- name: rag-new-integration-core
paths: >-
tldw_Server_API/tests/RAG_NEW/integration/test_adapter_guards.py
tldw_Server_API/tests/RAG_NEW/integration/test_bm25_weights.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_capabilities_styles.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_health_endpoints.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_integration.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_request_contract_parity.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_source_health_endpoint.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_stream_parity.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_strict_extractive_nli_api.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_unified_features_endpoint.py
- name: rag-new-integration-agentic
paths: >-
tldw_Server_API/tests/RAG_NEW/integration/test_rag_agentic_api.py
tldw_Server_API/tests/RAG_NEW/integration/test_research_agent_loop.py
- name: rag-new-integration-batch
paths: >-
tldw_Server_API/tests/RAG_NEW/integration/test_rag_batch_checkpoint_api.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_batch_resume_api.py
- name: rag-new-integration-research
paths: >-
tldw_Server_API/tests/RAG_NEW/integration/test_rag_ablate_api.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_benchmarks_ablation.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_doc_researcher_api.py
tldw_Server_API/tests/RAG_NEW/integration/test_retriever_pgvector_multi_search.py
- name: rag-new-property-core
paths: >-
tldw_Server_API/tests/RAG_NEW/property/test_*.py
tldw_Server_API/tests/RAG_NEW/test_*.py
- name: rag-new-unit-agentic
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_advanced_agentic_cache.py
tldw_Server_API/tests/RAG_NEW/unit/test_agentic*.py
tldw_Server_API/tests/RAG_NEW/unit/test_research_agent.py
- name: rag-new-unit-cache-vector
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_cache_invalidation_core.py
tldw_Server_API/tests/RAG_NEW/unit/test_chromadb*.py
tldw_Server_API/tests/RAG_NEW/unit/test_embedding_cache_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_pgvector_adapter_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_rewrite_cache.py
tldw_Server_API/tests/RAG_NEW/unit/test_semantic_cache*.py
tldw_Server_API/tests/RAG_NEW/unit/test_vector*.py
- name: rag-new-unit-pipeline
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_advanced_reranking_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_advanced_retrieval_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_flashrank_reranker_init.py
tldw_Server_API/tests/RAG_NEW/unit/test_functional_pipeline.py
tldw_Server_API/tests/RAG_NEW/unit/test_generation*.py
tldw_Server_API/tests/RAG_NEW/unit/test_hyde*.py
tldw_Server_API/tests/RAG_NEW/unit/test_kanban_retriever.py
tldw_Server_API/tests/RAG_NEW/unit/test_learned_fusion_simple.py
tldw_Server_API/tests/RAG_NEW/unit/test_llamacpp_reranker_topk_full_input.py
tldw_Server_API/tests/RAG_NEW/unit/test_pipeline*.py
tldw_Server_API/tests/RAG_NEW/unit/test_post*.py
tldw_Server_API/tests/RAG_NEW/unit/test_pre_retrieval*.py
tldw_Server_API/tests/RAG_NEW/unit/test_query*.py
tldw_Server_API/tests/RAG_NEW/unit/test_request*.py
tldw_Server_API/tests/RAG_NEW/unit/test_response_writer.py
tldw_Server_API/tests/RAG_NEW/unit/test_retrieval*.py
tldw_Server_API/tests/RAG_NEW/unit/test_reranker*.py
tldw_Server_API/tests/RAG_NEW/unit/test_streaming_executor.py
tldw_Server_API/tests/RAG_NEW/unit/test_two_tier_reranker.py
- name: rag-new-unit-unified-pipeline
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_unified_pipeline*.py
- name: rag-new-unit-rag-contracts
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_rag*.py
- name: rag-new-unit-guardrails-source
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_citations_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_guardrails*.py
tldw_Server_API/tests/RAG_NEW/unit/test_path_validation_security.py
tldw_Server_API/tests/RAG_NEW/unit/test_payload_exemplars*.py
tldw_Server_API/tests/RAG_NEW/unit/test_security_filters_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_source*.py
tldw_Server_API/tests/RAG_NEW/unit/test_strict_extractive_and_citations.py
- name: rag-new-unit-media-ingest
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_block_to_chunks.py
tldw_Server_API/tests/RAG_NEW/unit/test_chunk_fts_integration.py
tldw_Server_API/tests/RAG_NEW/unit/test_document_processing_integration_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_enhanced_chunking_integration_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_ingest_dedupe_and_chunk_ids.py
tldw_Server_API/tests/RAG_NEW/unit/test_media*.py
tldw_Server_API/tests/RAG_NEW/unit/test_structure_index.py
tldw_Server_API/tests/RAG_NEW/unit/test_temporal_filters.py
- name: rag-new-unit-core-misc
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_analytics_db_dev_reconciliation.py
tldw_Server_API/tests/RAG_NEW/unit/test_batch*.py
tldw_Server_API/tests/RAG_NEW/unit/test_clarification_gate.py
tldw_Server_API/tests/RAG_NEW/unit/test_corpus_synonyms_expansion.py
tldw_Server_API/tests/RAG_NEW/unit/test_evidence_chains_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_feedback_learning.py
tldw_Server_API/tests/RAG_NEW/unit/test_fts_query_translation_edge_cases.py
tldw_Server_API/tests/RAG_NEW/unit/test_knowledge_source_retrieval_coverage.py
tldw_Server_API/tests/RAG_NEW/unit/test_phase_metrics.py
tldw_Server_API/tests/RAG_NEW/unit/test_prompt_templates_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_quick_wins_spell_check_compat.py
tldw_Server_API/tests/RAG_NEW/unit/test_schema_corpus_alias.py
tldw_Server_API/tests/RAG_NEW/unit/test_standard_core_contract_threading.py
tldw_Server_API/tests/RAG_NEW/unit/test_suggestion_generator.py
tldw_Server_API/tests/RAG_NEW/unit/test_synonyms_registry_logging.py
- name: research-websearch
paths: >-
tldw_Server_API/tests/Research
tldw_Server_API/tests/WebSearch
- name: media-audio
paths: >-
tldw_Server_API/tests/Audio
tldw_Server_API/tests/Audio_Studio
tldw_Server_API/tests/AudioJobs
tldw_Server_API/tests/STT
tldw_Server_API/tests/TTS
tldw_Server_API/tests/TTS_NEW
tldw_Server_API/tests/VLM
- name: media-core-documents
paths: >-
tldw_Server_API/tests/Media/test_document*.py
tldw_Server_API/tests/Media/test_pdf_text_normalization.py
- name: media-core-api
paths: >-
tldw_Server_API/tests/Media/test_archive_member_cap.py
tldw_Server_API/tests/Media/test_auto_chunking_process_endpoints.py
tldw_Server_API/tests/Media/test_cache_index.py
tldw_Server_API/tests/Media/test_ingest_web_content_endpoint_sanitization.py
tldw_Server_API/tests/Media/test_json_*.py
tldw_Server_API/tests/Media/test_media_*.py
tldw_Server_API/tests/Media/test_navigation_policy_contract.py
tldw_Server_API/tests/Media/test_process_code_and_uploads.py
tldw_Server_API/tests/Media/test_upload_sink_security.py
tldw_Server_API/tests/Media/unit
- name: media-ingestion-new-ocr
paths: >-
tldw_Server_API/tests/MediaIngestion_NEW/test_*.py
- name: media-ingestion-new-integration
paths: >-
tldw_Server_API/tests/MediaIngestion_NEW/integration
- name: media-ingestion-new-unit-core
paths: >-
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_archive_and_sanitization.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_audio_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_auto_chunking_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_book_zip_safe_extract.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_book_processing_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_ebook_safe_paths.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_email_endpoint_error_mapping.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_file_validation.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_filename_and_mime_and_archive.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_ingest_jobs_batch_lookup.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_media_add_deps_error_mapping.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_media_canonical_helpers.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_media_ingest*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_media_list_no_slash_redirect.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_media_upload_failures.py
- name: media-ingestion-new-unit-mediawiki
paths: >-
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_mediawiki_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_ms_g_eval_validation.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_pdf_analysis_regressions.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_pdf_safe_paths.py
- name: media-ingestion-new-unit-persistence
paths: >-
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_persistence_*.py
- name: media-ingestion-new-unit-processing
paths: >-
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_plaintext_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_playlist_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_process_batch_media_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_process_document_like_item_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_transcription_models_endpoint.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_utils_time_conversion.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_video_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_visual_ingestion.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_xml_ingestion.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_youtube_audio_downloads.py
- name: media-ingestion-modification
paths: >-
tldw_Server_API/tests/Media_Ingestion_Modification
- name: media-legacy-free
paths: >-
tldw_Server_API/tests/Media
tldw_Server_API/tests/MediaIngestion_NEW
- name: chat-character-legacy-core
paths: >-
tldw_Server_API/tests/Character_Chat/test_character_chat_endpoints.py
tldw_Server_API/tests/Character_Chat/test_chat_dictionary_legacy.py
tldw_Server_API/tests/Character_Chat/test_chat_settings_endpoints.py
tldw_Server_API/tests/Character_Chat/test_complete_v2_streaming_e2e_mock.py
tldw_Server_API/tests/Character_Chat/test_complete_v2_streaming_unified_flag_monkeypatched.py
tldw_Server_API/tests/Character_Chat/test_complete_v2_streaming_with_mock_openai.py
tldw_Server_API/tests/Character_Chat/test_complete_v2_with_mock_openai.py
tldw_Server_API/tests/Character_Chat/test_completions_tool_messages_and_metadata.py
tldw_Server_API/tests/Character_Chat/test_export_includes_tools_and_metadata.py
tldw_Server_API/tests/Character_Chat/test_legacy_complete_deprecation.py
tldw_Server_API/tests/Character_Chat/test_messages_tool_calls_exposure.py
tldw_Server_API/tests/Character_Chat/test_persona_dialogue_tree_character_eval.py
- name: chat-character-legacy-files
paths: >-
tldw_Server_API/tests/Character_Chat/test_file_mime_detection.py
tldw_Server_API/tests/Character_Chat/test_rate_limits_specific.py
- name: chat-character-legacy-worldbook
paths: >-
tldw_Server_API/tests/Character_Chat/test_world_book_and_limits.py
tldw_Server_API/tests/Character_Chat/test_world_book_manager_legacy.py
tldw_Server_API/tests/Character_Chat/test_world_book_negatives.py
tldw_Server_API/tests/Character_Chat/test_world_book_negatives_and_new_endpoint.py
tldw_Server_API/tests/Character_Chat/test_world_book_prompt_context.py
tldw_Server_API/tests/Character_Chat/unit/test_chat_session_character_scope_api.py
- name: chat-character-db-core
paths: >-
tldw_Server_API/tests/Characters/test_ccv3_parser.py
tldw_Server_API/tests/Characters/test_chacha_postgres_sync_log_entity_column.py
tldw_Server_API/tests/Characters/test_character_chat_greetings_api.py
tldw_Server_API/tests/Characters/test_character_chat_lib.py
tldw_Server_API/tests/Characters/test_character_functionality_db.py
tldw_Server_API/tests/Characters/test_characters_world_book_permissions_unit.py
- name: chat-character-db-api
paths: >-
tldw_Server_API/tests/Characters/test_characters_endpoint.py
- name: chat-character-unit-core
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/test_utils.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_cards_fts_bootstrap.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_chat_default_provider.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_chat_manager.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_generation_presets.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_memory.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_prompt_presets.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_templates.py
- name: chat-character-unit-chat
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_completion_precheck.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_dictionary_estimate_tokens_shim_removed.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_dictionary_unit.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_grammar_unit.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_session_create_schema.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_session_error_mapping.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_settings_merge.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_group_chat_scope_resolution.py
- name: chat-character-unit-persona
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/unit/test_persona_exemplar_embeddings.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_persona_exemplar_selector.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_persona_exemplar_telemetry.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_png_export.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_postgres_backends.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_stream_persist_lookup.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_world_book_appendable.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_world_book_estimate_tokens_shim_removed.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_world_book_manager.py
- name: chat-character-unit-prd
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/unit/test_prd_round2_endpoints.py
- name: chat-character-property
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/property
- name: chat-character-integration-api
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/integration/test_character_api.py
tldw_Server_API/tests/Character_Chat_NEW/integration/test_character_exemplars_api.py
tldw_Server_API/tests/Character_Chat_NEW/integration/test_character_memory_endpoint.py
- name: chat-character-integration-chat
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/integration/test_character_chat_auto_routing.py
tldw_Server_API/tests/Character_Chat_NEW/integration/test_character_chat_stream_and_persist.py
- name: chat-character-integration-context
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/integration/test_conversation_context_primitives.py
tldw_Server_API/tests/Character_Chat_NEW/integration/test_role_normalization_and_search.py
- name: chat-legacy-integration
paths: >-
tldw_Server_API/tests/Chat/test*.py
tldw_Server_API/tests/Chat/integration
- name: chat-legacy-unit-a-l
paths: >-
tldw_Server_API/tests/Chat/unit/test_[a-l]*.py
- name: chat-legacy-unit-m-z
paths: >-
tldw_Server_API/tests/Chat/unit/test_[m-z]*.py
- name: chat-new-integration-property
paths: >-
tldw_Server_API/tests/Chat_NEW/integration
tldw_Server_API/tests/Chat_NEW/property
- name: chat-new-unit-a-l
paths: >-
tldw_Server_API/tests/Chat_NEW/unit/test_[a-l]*.py
- name: chat-new-unit-m-z
paths: >-
tldw_Server_API/tests/Chat_NEW/unit/test_[m-z]*.py
- name: chatbooks-streaming
paths: >-
tldw_Server_API/tests/Chatbooks
tldw_Server_API/tests/Explainer
tldw_Server_API/tests/Streaming
- name: explainer-core
paths: >-
tldw_Server_API/tests/Explainer
- name: llm-adapters-unit
paths: >-
tldw_Server_API/tests/LLM_Adapters/unit
tldw_Server_API/tests/LLM_Adapters/benchmarks
- name: llm-adapters-chat-endpoint
paths: >-
tldw_Server_API/tests/LLM_Adapters/integration/test_adapters_chat_endpoint.py
tldw_Server_API/tests/LLM_Adapters/integration/test_adapters_chat_endpoint_anthropic_native.py
- name: llm-adapters-chat-errors-core
paths: >-
tldw_Server_API/tests/LLM_Adapters/integration/test_adapters_chat_endpoint_error_sse_core_providers.py
- name: llm-adapters-chat-errors-extra
paths: >-
tldw_Server_API/tests/LLM_Adapters/integration/test_adapters_chat_endpoint_error_sse_google_mistral.py
tldw_Server_API/tests/LLM_Adapters/integration/test_adapters_chat_endpoint_midstream_error_all.py
- name: llm-adapters-orchestrator-core
paths: >-
tldw_Server_API/tests/LLM_Adapters/integration/test_async_adapters_orchestrator.py
tldw_Server_API/tests/LLM_Adapters/integration/test_async_adapters_orchestrator_anthropic_native.py
tldw_Server_API/tests/LLM_Adapters/integration/test_async_adapters_orchestrator_google_mistral.py
- name: llm-adapters-orchestrator-extra
paths: >-
tldw_Server_API/tests/LLM_Adapters/integration/test_async_adapters_orchestrator_groq_openrouter_native.py
tldw_Server_API/tests/LLM_Adapters/integration/test_async_adapters_orchestrator_stage3.py
tldw_Server_API/tests/LLM_Adapters/integration/test_async_adapters_streaming_error_all.py
tldw_Server_API/tests/LLM_Adapters/integration/test_async_bedrock_adapter.py
tldw_Server_API/tests/LLM_Adapters/integration/test_tool_choice_json_mode_endpoint.py
- name: llm-calls-core
paths: >-
tldw_Server_API/tests/LLM_Calls/test_*.py
- name: llm-calls-property
paths: >-
tldw_Server_API/tests/LLM_Calls/property
- name: llm-local-runtime
paths: >-
tldw_Server_API/tests/LLM_Local
- name: llm-local-backends
paths: >-
tldw_Server_API/tests/LLamaCpp
tldw_Server_API/tests/Local_LLM
- name: product-claims-core
paths: >-
tldw_Server_API/tests/Claims/test_claim_cluster_upsert_idempotency.py
tldw_Server_API/tests/Claims/test_claim_embeddings_chroma.py
tldw_Server_API/tests/Claims/test_claim_review_rule_assignment.py
tldw_Server_API/tests/Claims/test_claims_alerts_*.py
tldw_Server_API/tests/Claims/test_claims_alignment.py
tldw_Server_API/tests/Claims/test_claims_analytics_exports_cleanup.py
tldw_Server_API/tests/Claims/test_claims_api_strict_parse_mode.py
tldw_Server_API/tests/Claims/test_claims_budget_guard.py
tldw_Server_API/tests/Claims/test_claims_cluster*.py
tldw_Server_API/tests/Claims/test_claims_compat_types.py
- name: product-claims-engine
paths: >-
tldw_Server_API/tests/Claims/test_claims_dashboard_analytics.py
tldw_Server_API/tests/Claims/test_claims_embedding_refresh_config.py
tldw_Server_API/tests/Claims/test_claims_endpoints_api.py
tldw_Server_API/tests/Claims/test_claims_engine_*.py
tldw_Server_API/tests/Claims/test_claims_extractor*.py
tldw_Server_API/tests/Claims/test_claims_items_api.py
- name: product-claims-monitoring
paths: >-
tldw_Server_API/tests/Claims/test_claims_monitoring_*.py
tldw_Server_API/tests/Claims/test_claims_output_parser.py
tldw_Server_API/tests/Claims/test_claims_prompt_validation.py
tldw_Server_API/tests/Claims/test_claims_rebuild_*.py
tldw_Server_API/tests/Claims/test_claims_response_format_contracts.py
tldw_Server_API/tests/Claims/test_claims_review_*.py
- name: product-claims-service
paths: >-
tldw_Server_API/tests/Claims/test_claims_runtime_config.py
tldw_Server_API/tests/Claims/test_claims_service_*.py
tldw_Server_API/tests/Claims/test_claims_settings_*.py
tldw_Server_API/tests/Claims/test_claims_span_alignment.py
tldw_Server_API/tests/Claims/test_claims_status_and_envelope_api.py
tldw_Server_API/tests/Claims/test_claims_utils_persistence.py
tldw_Server_API/tests/Claims/test_claims_watchlist_notifications.py
tldw_Server_API/tests/Claims/test_claims_webhook_delivery.py
tldw_Server_API/tests/Claims/test_ingestion_*.py
- name: product-collections
paths: >-
tldw_Server_API/tests/Collections
- name: product-evaluations-abtest
paths: >-
tldw_Server_API/tests/Evaluations/embeddings_abtest/test*.py
tldw_Server_API/tests/Evaluations/test_abtest_*.py
tldw_Server_API/tests/Evaluations/test_embeddings_abtest_*.py
- name: product-evaluations-core
paths: >-
tldw_Server_API/tests/Evaluations/test_benchmark_*.py
tldw_Server_API/tests/Evaluations/test_circuit_breaker.py
tldw_Server_API/tests/Evaluations/test_connection_pool.py
tldw_Server_API/tests/Evaluations/test_db_adapter.py
tldw_Server_API/tests/Evaluations/test_error_scenarios.py
tldw_Server_API/tests/Evaluations/test_eval_*.py
tldw_Server_API/tests/Evaluations/test_evaluation_*.py
tldw_Server_API/tests/Evaluations/test_evaluations_audit_adapter.py
tldw_Server_API/tests/Evaluations/test_evaluations_backend_dual.py
tldw_Server_API/tests/Evaluations/test_evaluations_core_hardening.py
tldw_Server_API/tests/Evaluations/test_evaluations_benchmarks_*.py
tldw_Server_API/tests/Evaluations/test_evaluations_crud_*.py
tldw_Server_API/tests/Evaluations/test_evaluations_datasets_*.py
tldw_Server_API/tests/Evaluations/test_evaluations_migration_cli.py
tldw_Server_API/tests/Evaluations/test_evaluations_postgres_crud.py
tldw_Server_API/tests/Evaluations/test_evaluations_rag_pipeline_*.py
tldw_Server_API/tests/Evaluations/test_evaluations_stage*.py
tldw_Server_API/tests/Evaluations/test_evaluations_unified.py
tldw_Server_API/tests/Evaluations/test_evaluations_webhooks_*.py
tldw_Server_API/tests/Evaluations/test_mineru_ocr_evaluator.py
tldw_Server_API/tests/Evaluations/test_ms_g_eval.py
tldw_Server_API/tests/Evaluations/test_ocr_metrics.py
tldw_Server_API/tests/Evaluations/test_production_features_integration.py
tldw_Server_API/tests/Evaluations/test_proposition_evaluations.py
tldw_Server_API/tests/Evaluations/test_rag_*.py
tldw_Server_API/tests/Evaluations/test_security.py
tldw_Server_API/tests/Evaluations/test_synthetic_eval_service.py
tldw_Server_API/tests/Evaluations/test_unified_evaluation_service_strict_audit.py
- name: product-evaluations-integration
paths: >-
tldw_Server_API/tests/Evaluations/integration/test*.py
tldw_Server_API/tests/Evaluations/property/test*.py
- name: product-evaluations-recipes-persona
paths: >-
tldw_Server_API/tests/Evaluations/test_persona_*.py
tldw_Server_API/tests/Evaluations/test_recipe_*.py
- name: product-evaluations-unit
paths: >-
tldw_Server_API/tests/Evaluations/unit/test_*.py
- name: product-flashcards
paths: >-
tldw_Server_API/tests/Flashcards/test*.py
- name: product-explainer
paths: >-
tldw_Server_API/tests/Explainer
- name: product-notes-persona
paths: >-
tldw_Server_API/tests/Notes
tldw_Server_API/tests/Notes_NEW
tldw_Server_API/tests/Persona
tldw_Server_API/tests/Personalization
- name: product-prompts-legacy
paths: >-
tldw_Server_API/tests/Prompt_Management
- name: product-prompts-new
paths: >-
tldw_Server_API/tests/Prompt_Management_NEW
- name: product-watchlists-a-r
paths: >-
tldw_Server_API/tests/Watchlists/test_admin_*.py
tldw_Server_API/tests/Watchlists/test_audio_*.py
tldw_Server_API/tests/Watchlists/test_companion_*.py
tldw_Server_API/tests/Watchlists/test_dedup_*.py
tldw_Server_API/tests/Watchlists/test_delivery_*.py
tldw_Server_API/tests/Watchlists/test_e2e_*.py
tldw_Server_API/tests/Watchlists/test_fetchers_*.py
tldw_Server_API/tests/Watchlists/test_filter_*.py
tldw_Server_API/tests/Watchlists/test_filters_*.py
tldw_Server_API/tests/Watchlists/test_first_*.py
tldw_Server_API/tests/Watchlists/test_full_*.py
tldw_Server_API/tests/Watchlists/test_include_*.py
tldw_Server_API/tests/Watchlists/test_job_*.py
tldw_Server_API/tests/Watchlists/test_newsletter_*.py
tldw_Server_API/tests/Watchlists/test_operational_*.py
tldw_Server_API/tests/Watchlists/test_opml_*.py
tldw_Server_API/tests/Watchlists/test_perf_*.py
tldw_Server_API/tests/Watchlists/test_pipeline_*.py
tldw_Server_API/tests/Watchlists/test_preview_*.py
tldw_Server_API/tests/Watchlists/test_rate_*.py
tldw_Server_API/tests/Watchlists/test_rss_*.py
tldw_Server_API/tests/Watchlists/test_run_*.py
tldw_Server_API/tests/Watchlists/test_runs_*.py
- name: product-watchlists-core
paths: >-
tldw_Server_API/tests/Watchlists/test_scheduler_*.py
tldw_Server_API/tests/Watchlists/test_output_enrichment_scheduler.py
tldw_Server_API/tests/Watchlists/test_site_*.py
tldw_Server_API/tests/Watchlists/test_subscriptions_*.py
tldw_Server_API/tests/Watchlists/test_template_*.py
tldw_Server_API/tests/Watchlists/test_templates_*.py
tldw_Server_API/tests/Watchlists/test_tts_*.py
tldw_Server_API/tests/Watchlists/test_watchlist_*.py
tldw_Server_API/tests/Watchlists/test_youtube_*.py
- name: product-watchlists-pipeline
paths: >-
tldw_Server_API/tests/Watchlists/test_watchlists_*.py
- name: product-workflows-adapters-core
paths: >-
tldw_Server_API/tests/Workflows/adapters/test_*.py
- name: product-workflows-step-adapters
paths: >-
tldw_Server_API/tests/Workflows/test_new_step_adapters.py
- name: product-workflows-step-registry
paths: >-
tldw_Server_API/tests/Workflows/test_step_registry_runtime_coverage.py
- name: product-workflows-step-capabilities
paths: >-
tldw_Server_API/tests/Workflows/test_workflow_step_capabilities.py
- name: product-workflows-engine
paths: >-
tldw_Server_API/tests/Workflows/test_engine_*.py
tldw_Server_API/tests/Workflows/test_dual_backend_engine.py
tldw_Server_API/tests/Workflows/test_orphan_requeue_*.py
tldw_Server_API/tests/Workflows/test_workflows_map_substeps_*.py
tldw_Server_API/tests/Workflows/test_workflow_attempt_failures.py
tldw_Server_API/tests/Workflows/test_workflow_stress.py
tldw_Server_API/tests/Workflows/test_workflows_scheduler.py
- name: product-workflows-api
paths: >-
tldw_Server_API/tests/Workflows/test_artifact_*.py
tldw_Server_API/tests/Workflows/test_events_*.py
tldw_Server_API/tests/Workflows/test_runs_*.py
tldw_Server_API/tests/Workflows/test_webhook_*.py
tldw_Server_API/tests/Workflows/test_workflow_approval_permissions.py
tldw_Server_API/tests/Workflows/test_workflow_investigation_api.py
tldw_Server_API/tests/Workflows/test_workflow_preflight_api.py
tldw_Server_API/tests/Workflows/test_workflow_templates_api.py
tldw_Server_API/tests/Workflows/test_workflows_api.py
- name: product-workflows-storage
paths: >-
tldw_Server_API/tests/Workflows/test_dual_backend_workflows.py
tldw_Server_API/tests/Workflows/test_egress_policy.py
tldw_Server_API/tests/Workflows/test_mcp_tool_*.py
tldw_Server_API/tests/Workflows/test_media_ingest_*.py
tldw_Server_API/tests/Workflows/test_workflows_db*.py
tldw_Server_API/tests/Workflows/test_workflows_pg_*.py
tldw_Server_API/tests/Workflows/test_workflows_postgres_*.py
tldw_Server_API/tests/Workflows/test_workflows_tokens_cost_*.py
- name: product-workflows-runtime
paths: >-
tldw_Server_API/tests/Workflows/test_adapter_path_security.py
tldw_Server_API/tests/Workflows/test_llm_adapter.py
tldw_Server_API/tests/Workflows/test_stage3_chunkers_rag.py
tldw_Server_API/tests/Workflows/test_tts_workflow_normalization.py
tldw_Server_API/tests/Workflows/test_versions_idempotency.py
tldw_Server_API/tests/Workflows/test_workflows_artifact_gc_service.py
tldw_Server_API/tests/Workflows/test_workflows_dag_validation.py
tldw_Server_API/tests/Workflows/test_workflows_extras.py
tldw_Server_API/tests/Workflows/test_workflows_fuzz.py
tldw_Server_API/tests/Workflows/test_workflows_idempotency_ttl.py
tldw_Server_API/tests/Workflows/test_workflows_run_metadata.py
tldw_Server_API/tests/Workflows/test_workflows_truthiness_flags.py
- name: product-prompt-studio
paths: >-
tldw_Server_API/tests/prompt_studio
- name: platform-infrastructure-metrics
paths: >-
tldw_Server_API/tests/Infrastructure
tldw_Server_API/tests/Metrics
tldw_Server_API/tests/Monitoring
- name: platform-mcp-core
paths: >-
tldw_Server_API/tests/MCP
tldw_Server_API/tests/MCP_unified
- name: platform-resource-governance
paths: >-
tldw_Server_API/tests/Resource_Governance
- name: platform-services-startup
paths: >-
tldw_Server_API/tests/Services/test_startup_*.py
- name: platform-services-shutdown-lifespan
paths: >-
tldw_Server_API/tests/Services/test_shutdown_*.py
tldw_Server_API/tests/Services/test_lifespan_*.py
tldw_Server_API/tests/Services/test_worker_lifecycle_ownership_matrix.py
- name: platform-services-core
paths: >-
tldw_Server_API/tests/Services/test_admin_*.py
tldw_Server_API/tests/Services/test_app_*.py
tldw_Server_API/tests/Services/test_claims_*.py
tldw_Server_API/tests/Services/test_compatibility_*.py
tldw_Server_API/tests/Services/test_connectors_*.py
tldw_Server_API/tests/Services/test_document_*.py
tldw_Server_API/tests/Services/test_drain_*.py
tldw_Server_API/tests/Services/test_enhanced_*.py
tldw_Server_API/tests/Services/test_ephemeral_*.py
tldw_Server_API/tests/Services/test_executor_*.py
tldw_Server_API/tests/Services/test_file_*.py
tldw_Server_API/tests/Services/test_jobs_*.py
tldw_Server_API/tests/Services/test_kanban_*.py
tldw_Server_API/tests/Services/test_lifecycle_*.py
tldw_Server_API/tests/Services/test_loop_*.py
tldw_Server_API/tests/Services/test_media_*.py
tldw_Server_API/tests/Services/test_outputs_*.py
tldw_Server_API/tests/Services/test_persona_*.py
tldw_Server_API/tests/Services/test_placeholder_*.py
tldw_Server_API/tests/Services/test_service_*.py
tldw_Server_API/tests/Services/test_storage_*.py
tldw_Server_API/tests/Services/test_tts_*.py
tldw_Server_API/tests/Services/test_writing_annotation_review_jobs_worker.py
tldw_Server_API/tests/Services/test_workflows_*.py
tldw_Server_API/tests/Services/test_xml_*.py
- name: platform-services-main-routing
paths: >-
tldw_Server_API/tests/Services/test_main_claims_rebuild_startup.py
tldw_Server_API/tests/Services/test_main_lifecycle_contract.py
tldw_Server_API/tests/Services/test_main_readiness_shutdown.py
tldw_Server_API/tests/Services/test_main_router_contract.py
tldw_Server_API/tests/Services/test_openapi_contracts.py
tldw_Server_API/tests/Services/test_router_groups_contract.py
- name: platform-services-main-pollers
paths: >-
tldw_Server_API/tests/Services/test_main_shutdown_job_pollers.py
- name: platform-sandbox-admin-artifacts
paths: >-
tldw_Server_API/tests/sandbox/test_admin_*.py
tldw_Server_API/tests/sandbox/test_artifact*.py
- name: platform-sandbox-runtimes
paths: >-
tldw_Server_API/tests/sandbox/test_docker_*.py
tldw_Server_API/tests/sandbox/test_firecracker_*.py
tldw_Server_API/tests/sandbox/test_lima_*.py
tldw_Server_API/tests/sandbox/test_macos_*.py
tldw_Server_API/tests/sandbox/test_runner_*.py
tldw_Server_API/tests/sandbox/test_runtime_*.py
tldw_Server_API/tests/sandbox/test_runtimes_*.py
tldw_Server_API/tests/sandbox/test_operator_*.py
tldw_Server_API/tests/sandbox/test_seatbelt_*.py
tldw_Server_API/tests/sandbox/test_vz_*.py
- name: platform-sandbox-state-store
paths: >-
tldw_Server_API/tests/sandbox/test_acp_*.py
tldw_Server_API/tests/sandbox/test_cross_*.py
tldw_Server_API/tests/sandbox/test_execution_*.py
tldw_Server_API/tests/sandbox/test_feature_*.py
tldw_Server_API/tests/sandbox/test_glob_*.py
tldw_Server_API/tests/sandbox/test_idempotency_*.py
tldw_Server_API/tests/sandbox/test_interactive_*.py
tldw_Server_API/tests/sandbox/test_network_*.py
tldw_Server_API/tests/sandbox/test_orchestrator_*.py
tldw_Server_API/tests/sandbox/test_policy_*.py
tldw_Server_API/tests/sandbox/test_queue_*.py
tldw_Server_API/tests/sandbox/test_redis_*.py
tldw_Server_API/tests/sandbox/test_run_*.py
tldw_Server_API/tests/sandbox/test_sandbox_*.py
tldw_Server_API/tests/sandbox/test_snapshot_*.py
tldw_Server_API/tests/sandbox/test_store_*.py
tldw_Server_API/tests/sandbox/test_warm_*.py
tldw_Server_API/tests/sandbox/test_workspace_*.py
tldw_Server_API/tests/sandbox/test_worktree_*.py
- name: platform-sandbox-ws-streams
paths: >-
tldw_Server_API/tests/sandbox/test_cancel_*.py
tldw_Server_API/tests/sandbox/test_event_bridge.py
tldw_Server_API/tests/sandbox/test_session_*.py
tldw_Server_API/tests/sandbox/test_streams_*.py
tldw_Server_API/tests/sandbox/test_ws_*.py
- name: integrations
paths: >-
tldw_Server_API/tests/External_Sources
tldw_Server_API/tests/Notifications
tldw_Server_API/tests/Tools
tldw_Server_API/tests/WebScraping
tldw_Server_API/tests/Web_Scraping
tldw_Server_API/tests/integration
services:
postgres:
image: mirror.gcr.io/library/postgres:18-bookworm
env:
POSTGRES_USER: tldw_user
POSTGRES_PASSWORD: TestPassword123!
POSTGRES_DB: tldw_content
ports:
- 5432/tcp
options: >-
--health-cmd "pg_isready -U tldw_user -d tldw_content"
--health-interval 10s
--health-timeout 5s
--health-retries 10
env:
PYTHONPATH: .
PYTEST_DISABLE_PLUGIN_AUTOLOAD: '1'
TEST_MODE: 'true'
DISABLE_HEAVY_STARTUP: '1'
PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION: python
POSTGRES_TEST_HOST: 127.0.0.1
POSTGRES_TEST_DB: tldw_content
POSTGRES_TEST_USER: tldw_user
POSTGRES_TEST_PASSWORD: TestPassword123!
TEST_DB_HOST: 127.0.0.1
TEST_DB_USER: tldw_user
TEST_DB_PASSWORD: TestPassword123!
TEST_DB_NAME: tldw_test
TLDW_TEST_POSTGRES_REQUIRED: '1'
REDIS_URL: redis://127.0.0.1:6379/0
EMBEDDINGS_REDIS_URL: redis://127.0.0.1:6379/0
WORKFLOWS_EGRESS_ALLOWLIST: "93.184.216.34,does-not-resolve.invalid,example.com"
SHARD_NAME: ${{ matrix.shard.name }}
TEST_PATHS: ${{ matrix.shard.paths }}
RESULTS_DIR: test-results-linux-3.12-${{ matrix.shard.name }}
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Install FFmpeg and PortAudio (Linux)
uses: ./.github/actions/setup-ffmpeg
with:
install-ffmpeg: ${{ startsWith(matrix.shard.name, 'media-') || matrix.shard.name == 'ai-embeddings-media-validation' || matrix.shard.name == 'rag-new-unit-media-ingest' || matrix.shard.name == 'product-claims-service' || (matrix.shard.name == 'platform-services-core' || matrix.shard.name == 'platform-services-main-routing' || matrix.shard.name == 'platform-services-main-pollers') }}
install-portaudio: 'true'
- name: Setup Python and deps (with uv)
uses: ./.github/actions/setup-python-deps
with:
python-version: '3.12'
use-uv: 'true'
cache-dependency-path: |
pyproject.toml
uv.lock
extras: dev,multiplayer
- name: Verify core e2e fixtures are discoverable
if: matrix.shard.name == 'core-server-smoke'
shell: bash
run: |
set -euo pipefail
FIXTURES_OUTPUT="$(pytest --fixtures -q tldw_Server_API/tests || true)"
TMPFILE=$(mktemp)
printf "%s\n" "$FIXTURES_OUTPUT" > "$TMPFILE"
if command -v rg >/dev/null 2>&1; then
rg -q '^test_user_credentials\b' "$TMPFILE" || { echo 'Fixture test_user_credentials not found'; rm -f "$TMPFILE"; exit 1; }
else
grep -q '^test_user_credentials\b' "$TMPFILE" || { echo 'Fixture test_user_credentials not found'; rm -f "$TMPFILE"; exit 1; }
fi
rm -f "$TMPFILE"
- name: Install pg client and wait for PG
uses: ./.github/actions/wait-for-postgres
with:
host: 127.0.0.1
port: ${{ job.services.postgres.ports['5432'] }}
user: tldw_user
- name: Export PG env vars
shell: bash
run: |
PORT="${{ job.services.postgres.ports['5432'] }}"
DB_USER="${POSTGRES_TEST_USER:-tldw_user}"
DB_PASSWORD="${POSTGRES_TEST_PASSWORD:?POSTGRES_TEST_PASSWORD is required}"
DB_NAME="${POSTGRES_TEST_DB:-tldw_content}"
DB_URL="postgresql://${DB_USER}:${DB_PASSWORD}@127.0.0.1:${PORT}/${DB_NAME}"
echo "::add-mask::${DB_PASSWORD}"
echo "::add-mask::${DB_URL}"
{
echo "POSTGRES_TEST_PORT=${PORT}"
echo "TEST_DB_PORT=${PORT}"
echo "TEST_DATABASE_URL=${DB_URL}"
echo "DATABASE_URL=${DB_URL}"
} >> "$GITHUB_ENV"
- name: Ensure base DB exists
shell: bash
env:
PGPASSWORD: ${{ env.POSTGRES_TEST_PASSWORD }}
run: |
PORT="${{ job.services.postgres.ports['5432'] }}"
DB_NAME="${POSTGRES_TEST_DB:-tldw_content}"
DB_USER="${POSTGRES_TEST_USER:-tldw_user}"
psql -h 127.0.0.1 -p "$PORT" -U "$DB_USER" -d postgres -tc "SELECT 1 FROM pg_database WHERE datname='${DB_NAME}'" | grep -q 1 || \
psql -h 127.0.0.1 -p "$PORT" -U "$DB_USER" -d postgres -c "CREATE DATABASE ${DB_NAME}"
- name: Install additional deps for PG tests
run: |
python -m pip install --upgrade pip
pip install "psycopg[binary]>=3.1" pytest pytest-asyncio
- name: Verify pytest plugins import
shell: bash
run: |
python - <<'PY'
import importlib
import pytest_asyncio
importlib.import_module('pytest_asyncio.plugin')
importlib.import_module('pytest_benchmark.plugin')
print('pytest_asyncio OK:', getattr(pytest_asyncio, '__version__', 'unknown'))
print('pytest-benchmark OK')
PY
- name: Smoke start server (single-user)
if: matrix.shard.name == 'core-server-smoke'
env:
SERVER_LABEL: smoke
AUTH_MODE: single_user
DATABASE_URL: sqlite:///./Databases/users.db
SINGLE_USER_API_KEY: "smoke-ci-key-12345"
E2E_TEST_BASE_URL: "http://127.0.0.1:8000"
PYTEST_CURRENT_TEST: "ci-smoke-linux-single::startup"
TEST_MODE: 'true'
DISABLE_HEAVY_STARTUP: '0'
DEFER_HEAVY_STARTUP: '1'
STARTUP_TRACE: '1'
MCP_DEBUG: '1'
ULTRA_MINIMAL_APP: '1'
PRIVILEGE_METADATA_VALIDATE_ON_STARTUP: '0'
shell: bash
run: |
python tldw_Server_API/tests/scripts/server_lifecycle.py start
- name: Smoke health check
if: ${{ always() && matrix.shard.name == 'core-server-smoke' }}
env:
SERVER_LABEL: smoke
E2E_TEST_BASE_URL: "http://127.0.0.1:8000"
SMOKE_STARTUP_TIMEOUT_SECONDS: '240'
shell: bash
run: |
python tldw_Server_API/tests/scripts/server_lifecycle.py health-check
- name: Print smoke server log on failure
if: ${{ failure() && matrix.shard.name == 'core-server-smoke' }}
env:
SERVER_LABEL: smoke
shell: bash
run: |
python - <<'PY'
import os, pathlib
label = os.environ.get('SERVER_LABEL', 'smoke')
p = pathlib.Path(f'server-{label}.log')
if p.exists():
print('===== smoke server log =====')
print(p.read_text(encoding='utf-8'))
PY
- name: Smoke stop server
if: ${{ always() && matrix.shard.name == 'core-server-smoke' }}
env:
SERVER_LABEL: smoke
shell: bash
run: |
python tldw_Server_API/tests/scripts/server_lifecycle.py stop || true
- name: Smoke start server (multi-user, Postgres)
if: matrix.shard.name == 'core-server-smoke'
continue-on-error: true
env:
SERVER_LABEL: smoke-mu
AUTH_MODE: multi_user
JWT_SECRET_KEY: "test-ci-jwt-secret-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
E2E_TEST_BASE_URL: "http://127.0.0.1:8001"
SERVER_PORT: '8001'
PYTEST_CURRENT_TEST: "ci-smoke-linux-multi::startup"
TEST_MODE: 'true'
DISABLE_HEAVY_STARTUP: '0'
DEFER_HEAVY_STARTUP: '1'
STARTUP_TRACE: '1'
TLDW_CONTENT_DB_BACKEND: 'sqlite'
MCP_DEBUG: '1'
ULTRA_MINIMAL_APP: '1'
PRIVILEGE_METADATA_VALIDATE_ON_STARTUP: '0'
shell: bash
run: |
python tldw_Server_API/tests/scripts/server_lifecycle.py start
- name: Smoke health check (multi-user)
if: ${{ always() && matrix.shard.name == 'core-server-smoke' }}
continue-on-error: true
env:
SERVER_LABEL: smoke-mu
E2E_TEST_BASE_URL: "http://127.0.0.1:8001"
SMOKE_STARTUP_TIMEOUT_SECONDS: '240'
shell: bash
run: |
python tldw_Server_API/tests/scripts/server_lifecycle.py health-check
- name: Smoke stop server (multi-user)
if: ${{ always() && matrix.shard.name == 'core-server-smoke' }}
env:
SERVER_LABEL: smoke-mu
shell: bash
run: |
python tldw_Server_API/tests/scripts/server_lifecycle.py stop || true
- name: Cache embedding models
if: ${{ github.event_name != 'workflow_dispatch' && (matrix.shard.name == 'ai-chromadb' || matrix.shard.name == 'ai-chunking-core' || matrix.shard.name == 'ai-chunking-semantic-security' || startsWith(matrix.shard.name, 'vector-stores') || matrix.shard.name == 'rag-legacy' || matrix.shard.name == 'research-websearch') }}
continue-on-error: true
uses: actions/cache@v5
with:
path: models/embeddings
key: ${{ runner.os }}-embeddings-static-v1
restore-keys: |
${{ runner.os }}-embeddings-
- name: Pre-download embedding models
if: ${{ (env.RUN_MODEL_TESTS == '1' || env.RUN_REAL_HF_EMBEDDING_TESTS == '1' || env.RUN_REAL_HF_EMBEDDING_TESTS == 'true') && matrix.shard.name != 'ai-embeddings-backpressure' && matrix.shard.name != 'ai-embeddings-dlq-config' && matrix.shard.name != 'ai-embeddings-media-validation' && matrix.shard.name != 'ai-embeddings-policy' && (matrix.shard.name == 'ai-chromadb' || matrix.shard.name == 'ai-chunking-core' || matrix.shard.name == 'ai-chunking-semantic-security' || startsWith(matrix.shard.name, 'ai-embeddings-') || startsWith(matrix.shard.name, 'vector-stores') || matrix.shard.name == 'rag-legacy' || matrix.shard.name == 'research-websearch') }}
continue-on-error: true
shell: bash
run: |
python -m pip install --upgrade pip
pip install huggingface_hub
python Helper_Scripts/download_embedding_models.py --target models/embeddings --skip-defaults --model sentence-transformers/all-MiniLM-L6-v2
echo "TLDW_EMBEDDING_MODELS_DIR=models/embeddings" >> "$GITHUB_ENV"
- name: Run shard tests
if: matrix.shard.name != 'media-legacy-free'
shell: bash
run: |
mkdir -p "$RESULTS_DIR"
export DATABASE_URL="sqlite:///./Databases/users.db"
unset TEST_DATABASE_URL POSTGRES_TEST_DB
pytest -q --disable-warnings -p pytest_asyncio.plugin \
-m "not jobs and not e2e" \
$TEST_PATHS \
--durations=50 \
--junit-xml="$RESULTS_DIR/${SHARD_NAME}.xml"
- name: Run legacy-free media checks
if: matrix.shard.name == 'media-legacy-free'
shell: bash
run: |
mkdir -p "$RESULTS_DIR"
export DATABASE_URL="sqlite:///./Databases/users.db"
unset TEST_DATABASE_URL POSTGRES_TEST_DB
TLDW_DISABLE_LEGACY_MEDIA=1 pytest -q --disable-warnings -p pytest_asyncio.plugin \
-m "not jobs and not e2e" \
tldw_Server_API/tests/Media \
tldw_Server_API/tests/MediaIngestion_NEW \
--durations=25 \
--junit-xml="$RESULTS_DIR/media-legacy-free.xml"
- name: Upload test results
if: always()
continue-on-error: true
uses: actions/upload-artifact@v7
with:
name: full-suite-ubuntu-py3.12-${{ matrix.shard.name }}
path: ${{ env.RESULTS_DIR }}
full-suite-linux-312-summary:
name: Full Suite (Ubuntu / Python 3.12)
runs-on: ubuntu-latest
needs: [full-suite-linux-312-shards]
if: always()
steps:
- name: Check Python 3.12 shard result
shell: bash
run: |
r="${{ needs['full-suite-linux-312-shards'].result }}"
if [ "$r" != "success" ] && [ "$r" != "skipped" ]; then
echo "Python 3.12 full-suite shards finished with: $r"
exit 1
fi
echo "Python 3.12 full-suite shards passed (or skipped via path filter)."
full-suite-linux-313-shards:
name: Full Suite shard (Ubuntu / Python 3.13 / ${{ matrix.shard.name }})
runs-on: ubuntu-latest
timeout-minutes: 60
needs: [lint, syntax-check, changes]
if: ${{ github.event_name != 'pull_request' || needs.changes.outputs.backend_changed == 'true' }}
strategy:
fail-fast: false
matrix:
shard:
- name: gap-verified-1
paths: >-
tldw_Server_API/tests/Audiobooks
tldw_Server_API/tests/Image_Generation
- name: gap-verified-2
paths: >-
tldw_Server_API/tests/Claims_Extraction
tldw_Server_API/tests/Discord
tldw_Server_API/tests/Files
tldw_Server_API/tests/Meetings
tldw_Server_API/tests/Notes_Tasks
tldw_Server_API/tests/Sync
tldw_Server_API/tests/Translation
- name: gap-verified-3
paths: >-
tldw_Server_API/tests/DataTables
tldw_Server_API/tests/Embeddings_isolated
tldw_Server_API/tests/Integrations
tldw_Server_API/tests/PrototypeWorkspaces
tldw_Server_API/tests/UserProfile
tldw_Server_API/tests/VN_Platform
- name: gap-verified-4
paths: >-
tldw_Server_API/tests/Governance
tldw_Server_API/tests/Ingestion_Sources
tldw_Server_API/tests/Items
tldw_Server_API/tests/Research_Workspace
tldw_Server_API/tests/Skills
tldw_Server_API/tests/StudyPacks
tldw_Server_API/tests/VN_Play
tldw_Server_API/tests/VN_Policy
tldw_Server_API/tests/scripts
- name: gap-verified-5
paths: >-
tldw_Server_API/tests/Agent_Orchestration
tldw_Server_API/tests/Chat_Workflows
tldw_Server_API/tests/Notes_Graph
tldw_Server_API/tests/Slides tldw_Server_API/tests/Text2SQL
tldw_Server_API/tests/wizard
- name: gap-verified-6
paths: >-
tldw_Server_API/tests/API_Deps
tldw_Server_API/tests/AuthNZ_Federation
tldw_Server_API/tests/CodeGraph
tldw_Server_API/tests/MCP_Hub
tldw_Server_API/tests/MediaFiles
tldw_Server_API/tests/Scheduler
tldw_Server_API/tests/Slack
tldw_Server_API/tests/VN_Assets
- name: gap-verified-7
paths: >-
tldw_Server_API/tests/Guardian
- name: gap-verified-8
paths: >-
tldw_Server_API/tests/Storage
tldw_Server_API/tests/StudySuggestions
tldw_Server_API/tests/Quizzes
- name: gap-verified-9
paths: >-
tldw_Server_API/tests/Docs tldw_Server_API/tests/performance
- name: gap-verified-10
paths: >-
tldw_Server_API/tests/Writing
- name: gap-verified-11
paths: >-
tldw_Server_API/tests/Sharing
tldw_Server_API/tests/VoiceAssistant
- name: gap-verified-12
paths: >-
tldw_Server_API/tests/Billing
tldw_Server_API/tests/CI
tldw_Server_API/tests/FileArtifacts
- name: core-server-smoke
paths: >-
tldw_Server_API/tests/test_*.py
tldw_Server_API/tests/Health
tldw_Server_API/tests/Logging
- name: core-config
paths: >-
tldw_Server_API/tests/Config
- name: core-audit-support
paths: >-
tldw_Server_API/tests/Audit/test_audit_*.py
tldw_Server_API/tests/Audit/test_pii_pattern_groups.py
tldw_Server_API/tests/Audit/test_risk_settings_overrides.py
tldw_Server_API/tests/Audit/test_sqlite_runtime_pragmas.py
- name: core-audit-unified
paths: >-
tldw_Server_API/tests/Audit/test_unified_audit_service.py
- name: core-security
paths: >-
tldw_Server_API/tests/Security
- name: core-setup-usage
paths: >-
tldw_Server_API/tests/Setup
tldw_Server_API/tests/Usage
- name: core-utils-tooling
paths: >-
tldw_Server_API/tests/Helper_Scripts
tldw_Server_API/tests/Context_Integrity
tldw_Server_API/tests/Utils
tldw_Server_API/tests/helpers
tldw_Server_API/tests/http_client
tldw_Server_API/tests/lint
tldw_Server_API/tests/sanity_tests
tldw_Server_API/tests/schemas
tldw_Server_API/tests/unit
- name: admin-a-api
paths: >-
tldw_Server_API/tests/Admin/test_admin_a*.py
- name: admin-budgets
paths: >-
tldw_Server_API/tests/Admin/test_admin_budgets_*.py
- name: admin-bundle-sanitizers
paths: >-
tldw_Server_API/tests/Admin/test_admin_bundle_service_sanitizers.py
- name: admin-bundle-ops
paths: >-
tldw_Server_API/tests/Admin/test_bundle_ops.py
- name: admin-byok-core
paths: >-
tldw_Server_API/tests/Admin/test_admin_byok_service_sanitizers.py
- name: admin-byok-validation
paths: >-
tldw_Server_API/tests/Admin/test_admin_byok_validation_*.py
tldw_Server_API/tests/Admin/test_byok_*.py
- name: admin-backup-api
paths: >-
tldw_Server_API/tests/Admin/test_backup_schedules_api.py
- name: admin-backup-core
paths: >-
tldw_Server_API/tests/Admin/test_admin_backup_*.py
tldw_Server_API/tests/Admin/test_backup_schedules_repo.py
- name: admin-conflicts-data-admin
paths: >-
tldw_Server_API/tests/Admin/test_admin_c*.py
tldw_Server_API/tests/Admin/test_admin_data_*.py
- name: admin-data-ops
paths: >-
tldw_Server_API/tests/Admin/test_data_ops.py
- name: admin-data-subject-api
paths: >-
tldw_Server_API/tests/Admin/test_data_subject_requests_api.py
- name: admin-data-subject-repo-dsr
paths: >-
tldw_Server_API/tests/Admin/test_data_subject_requests_repo.py
tldw_Server_API/tests/Admin/test_dsr_*.py
- name: admin-e2e-access
paths: >-
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_routes_are_unavailable_without_flag
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_routes_require_support_header
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_routes_reject_wrong_support_header
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_routes_fail_closed_without_configured_support_key
- name: admin-e2e-seed
paths: >-
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_seed_returns_stable_fixture_ids
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_seed_returns_debug_role_principals
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_seed_requires_explicit_fixture_passwords
- name: admin-e2e-single-user
paths: >-
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_seed_returns_single_user_login_key
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_single_user_api_key_can_read_users_me
- name: admin-e2e-session-dsr
paths: >-
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_reset_rejects_unsafe_backup_paths
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_bootstrap_jwt_session_returns_cookie_payload
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_dsr_seed_supports_real_preview
- name: admin-e2e-reset-backups
paths: >-
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_reset_clears_backup_schedules
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_reset_clears_monitoring_authority_state
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_run_due_backup_schedules_processes_scheduled_run
- name: admin-g-i
paths: >-
tldw_Server_API/tests/Admin/test_admin_g*.py
tldw_Server_API/tests/Admin/test_admin_i*.py
- name: admin-llm-providers
paths: >-
tldw_Server_API/tests/Admin/test_admin_llm_providers_*.py
- name: admin-incidents
paths: >-
tldw_Server_API/tests/Admin/test_incidents_*.py
- name: admin-llm-usage
paths: >-
tldw_Server_API/tests/Admin/test_llm_usage_endpoints.py
- name: admin-maintenance-misc
paths: >-
tldw_Server_API/tests/Admin/test_admin_maintenance_*.py
tldw_Server_API/tests/Admin/test_admin_misc_endpoints.py
tldw_Server_API/tests/Admin/test_maintenance_*.py
- name: admin-monitoring
paths: >-
tldw_Server_API/tests/Admin/test_admin_monitoring_*.py
tldw_Server_API/tests/Admin/test_monitoring_*.py
- name: admin-ops-dependencies
paths: >-
tldw_Server_API/tests/Admin/test_admin_ops_dependencies.py
- name: admin-ops-endpoints
paths: >-
tldw_Server_API/tests/Admin/test_admin_ops_new_endpoints.py
- name: admin-ops-webhooks-orgs
paths: >-
tldw_Server_API/tests/Admin/test_admin_ops_webhooks_reports.py
tldw_Server_API/tests/Admin/test_admin_orgs_*.py
- name: admin-profiles-rate-registration
paths: >-
tldw_Server_API/tests/Admin/test_admin_profiles_*.py
tldw_Server_API/tests/Admin/test_admin_rate_limits_*.py
tldw_Server_API/tests/Admin/test_admin_registration_*.py
- name: admin-pricing-retention-roles-router
paths: >-
tldw_Server_API/tests/Admin/test_pricing_reload_endpoint.py
tldw_Server_API/tests/Admin/test_retention_policy_preview_api.py
tldw_Server_API/tests/Admin/test_role_*.py
tldw_Server_API/tests/Admin/test_router_analytics_*.py
- name: admin-s-sessions-settings
paths: >-
tldw_Server_API/tests/Admin/test_admin_scope_service_enterprise_mode.py
tldw_Server_API/tests/Admin/test_admin_service_log_sanitizers.py
tldw_Server_API/tests/Admin/test_admin_sessions_*.py
tldw_Server_API/tests/Admin/test_admin_settings_service.py
tldw_Server_API/tests/Admin/test_admin_smoke.py
- name: admin-split-storage-tools
paths: >-
tldw_Server_API/tests/Admin/test_admin_split_*.py
tldw_Server_API/tests/Admin/test_admin_storage_quotas.py
tldw_Server_API/tests/Admin/test_admin_system_ops_service.py
tldw_Server_API/tests/Admin/test_admin_t*.py
- name: admin-users
paths: >-
tldw_Server_API/tests/Admin/test_admin_u*.py
- name: admin-watchlists-webhooks
paths: >-
tldw_Server_API/tests/Admin/test_admin_w*.py
- name: admin-system-usage
paths: >-
tldw_Server_API/tests/Admin/test_system_ops.py
tldw_Server_API/tests/Admin/test_usage_reporting*.py
- name: auth-integration-admin-auth
paths: >-
tldw_Server_API/tests/AuthNZ/integration/test_admin_*.py
tldw_Server_API/tests/AuthNZ/integration/test_api_key_*.py
tldw_Server_API/tests/AuthNZ/integration/test_auth_*.py
- name: auth-integration-authnz
paths: >-
tldw_Server_API/tests/AuthNZ/integration/test_authnz_*.py
- name: auth-integration-b-z
paths: >-
tldw_Server_API/tests/AuthNZ/integration/test_[b-z]*.py
- name: auth-postgres
paths: >-
tldw_Server_API/tests/AuthNZ_Postgres
- name: auth-core-root-property
paths: >-
tldw_Server_API/tests/AuthNZ/test*.py
tldw_Server_API/tests/AuthNZ/property/test*.py
- name: auth-core-unit-a-l
paths: >-
tldw_Server_API/tests/AuthNZ/unit/test_[a-l]*.py
- name: auth-core-unit-m-z
paths: >-
tldw_Server_API/tests/AuthNZ/unit/test_[m-z]*.py
- name: auth-sqlite
paths: >-
tldw_Server_API/tests/AuthNZ_SQLite
- name: auth-unit-a-l
paths: >-
tldw_Server_API/tests/AuthNZ_Unit/test_[a-l]*.py
- name: auth-unit-m-z
paths: >-
tldw_Server_API/tests/AuthNZ_Unit/test_[m-z]*.py
- name: chacha-core-stores
paths: >-
tldw_Server_API/tests/ChaChaNotesDB/test_chacha_*.py
tldw_Server_API/tests/ChaChaNotesDB/test_chachanotes_db.py
- name: chacha-character-conversation
paths: >-
tldw_Server_API/tests/ChaChaNotesDB/test_character_*.py
tldw_Server_API/tests/ChaChaNotesDB/test_conversation_*.py
- name: chacha-content-persona
paths: >-
tldw_Server_API/tests/ChaChaNotesDB/test_flashcard*.py
tldw_Server_API/tests/ChaChaNotesDB/test_note_*.py
tldw_Server_API/tests/ChaChaNotesDB/test_order_by_validation.py
tldw_Server_API/tests/ChaChaNotesDB/test_persona_*.py
tldw_Server_API/tests/ChaChaNotesDB/test_quizzes_basic.py
tldw_Server_API/tests/ChaChaNotesDB/test_web_clipper_db.py
tldw_Server_API/tests/ChaChaNotesDB/test_workspace_assistant_defaults_db.py
tldw_Server_API/tests/ChaChaNotesDB/test_workspace_resource_memberships_db.py
tldw_Server_API/tests/ChaChaNotesDB/test_workspace_sub_resources_db.py
tldw_Server_API/tests/ChaChaNotesDB/test_writing_playground_db.py
- name: db-privileges
paths: >-
tldw_Server_API/tests/DB
tldw_Server_API/tests/DB_Management
tldw_Server_API/tests/MediaDB2
tldw_Server_API/tests/PrivilegeCatalog
tldw_Server_API/tests/Privileges
- name: ai-chromadb
paths: >-
tldw_Server_API/tests/ChromaDB
- name: ai-chunking-core
paths: >-
tldw_Server_API/tests/Chunking/test_async_*.py
tldw_Server_API/tests/Chunking/test_auto_*.py
tldw_Server_API/tests/Chunking/test_chunker_*.py
tldw_Server_API/tests/Chunking/test_process_text_components.py
tldw_Server_API/tests/Chunking/test_process_text_refactor_equivalence.py
tldw_Server_API/tests/Chunking/test_chunking_endpoint.py
tldw_Server_API/tests/Chunking/test_chunking_offsets_property.py
tldw_Server_API/tests/Chunking/test_chunking_overlap_properties.py
tldw_Server_API/tests/Chunking/test_chunking_regressions.py
tldw_Server_API/tests/Chunking/test_chunking_template_endpoint_errors.py
- name: ai-chunking-templates
paths: >-
tldw_Server_API/tests/Chunking/test_chunking_templates.py::TestDatabaseOperations
tldw_Server_API/tests/Chunking/test_chunking_templates.py::TestTemplateInitialization
tldw_Server_API/tests/Chunking/test_chunking_templates.py::TestTemplateProcessing
tldw_Server_API/tests/Chunking/test_chunking_templates_endpoint_sanitization.py
tldw_Server_API/tests/Chunking/test_chunking_templates_validate_schema.py
tldw_Server_API/tests/Chunking/test_template_*.py
- name: ai-chunking-templates-api
paths: >-
tldw_Server_API/tests/Chunking/test_chunking_templates.py::TestAPIEndpoints
- name: ai-chunking-templates-integration
paths: >-
tldw_Server_API/tests/Chunking/test_chunking_templates.py::TestIntegration
- name: ai-chunking-code-json-xml
paths: >-
tldw_Server_API/tests/Chunking/test_code_chunking_regressions.py
tldw_Server_API/tests/Chunking/test_json_*.py
tldw_Server_API/tests/Chunking/test_xml_*.py
- name: ai-chunking-semantic-security
paths: >-
tldw_Server_API/tests/Chunking/test_hierarchical_*.py
tldw_Server_API/tests/Chunking/test_offsets_additional.py
tldw_Server_API/tests/Chunking/test_option_aliases.py
tldw_Server_API/tests/Chunking/test_overlap_clamp.py
tldw_Server_API/tests/Chunking/test_phase3_3_sanitizers.py
tldw_Server_API/tests/Chunking/test_propositions_strategy.py
tldw_Server_API/tests/Chunking/test_security*.py
tldw_Server_API/tests/Chunking/test_semantic_*.py
tldw_Server_API/tests/Chunking/test_sentence_spans_properties.py
tldw_Server_API/tests/Chunking/test_streaming_overlap.py
tldw_Server_API/tests/Chunking/test_thai_tables_spans.py
tldw_Server_API/tests/Chunking/test_thread_safety.py
tldw_Server_API/tests/Chunking/test_tokens_offsets.py
tldw_Server_API/tests/Chunking/unit/test_tokens_fallback_offsets.py
- name: ai-embeddings-async
paths: >-
tldw_Server_API/tests/Embeddings/test_async_*.py
- name: ai-embeddings-backpressure
paths: >-
tldw_Server_API/tests/Embeddings/test_backpressure*.py
tldw_Server_API/tests/Embeddings/test_batch_rate_headers.py
- name: ai-embeddings-chromadb-core
paths: >-
tldw_Server_API/tests/Embeddings/test_chromadb_*.py
- name: ai-embeddings-core
paths: >-
tldw_Server_API/tests/Embeddings/test_chunk_metadata_backfill.py
tldw_Server_API/tests/Embeddings/test_circuit_breaker_*.py
tldw_Server_API/tests/Embeddings/test_compactor_admin_endpoint.py
tldw_Server_API/tests/Embeddings/test_connection_pool_failure_accounting.py
tldw_Server_API/tests/Embeddings/test_contextual_chunking.py
- name: ai-embeddings-dlq-config
paths: >-
tldw_Server_API/tests/Embeddings/test_delete_by_filter_endpoint.py
tldw_Server_API/tests/Embeddings/test_dlq_*.py
tldw_Server_API/tests/Embeddings/test_embedding_*.py
tldw_Server_API/tests/Embeddings/test_embeddings_audit_adapter.py
tldw_Server_API/tests/Embeddings/test_embeddings_batch_dimensions.py
tldw_Server_API/tests/Embeddings/test_embeddings_dimensions_policy.py
tldw_Server_API/tests/Embeddings/test_embeddings_endpoint_cache_identity.py
tldw_Server_API/tests/Embeddings/test_embeddings_fallback*.py
- name: ai-embeddings-jobs-runtime
paths: >-
tldw_Server_API/tests/Embeddings/test_embeddings_jobs*.py
tldw_Server_API/tests/Embeddings/test_embeddings_local_api.py
tldw_Server_API/tests/Embeddings/test_embeddings_loop_scoping.py
tldw_Server_API/tests/Embeddings/test_embeddings_memory*.py
tldw_Server_API/tests/Embeddings/test_embeddings_metric*.py
tldw_Server_API/tests/Embeddings/test_embeddings_model_management.py
tldw_Server_API/tests/Embeddings/test_embeddings_optional_deps_import.py
tldw_Server_API/tests/Embeddings/test_embeddings_redis*.py
tldw_Server_API/tests/Embeddings/test_embeddings_rg_sync_helper.py
tldw_Server_API/tests/Embeddings/test_embeddings_test_mode_truthiness.py
tldw_Server_API/tests/Embeddings/test_embeddings_token_arrays.py
tldw_Server_API/tests/Embeddings/test_embeddings_unsupported_provider.py
- name: ai-embeddings-policy
paths: >-
tldw_Server_API/tests/Embeddings/test_embeddings_policy*.py
tldw_Server_API/tests/Embeddings/test_l2_normalization_policy.py
- name: ai-embeddings-v5-core
paths: >-
tldw_Server_API/tests/Embeddings/test_embeddings_v5_production.py
tldw_Server_API/tests/Embeddings/test_embeddings_v5_property.py
tldw_Server_API/tests/Embeddings/test_embeddings_v5_unit.py
- name: ai-embeddings-v5-integration
paths: >-
tldw_Server_API/tests/Embeddings/test_embeddings_v5_integration.py
- name: ai-embeddings-hyde-ledger
paths: >-
tldw_Server_API/tests/Embeddings/test_hyde_backfill_cli.py
tldw_Server_API/tests/Embeddings/test_ledger_status_endpoint.py
- name: ai-embeddings-media-validation
paths: >-
tldw_Server_API/tests/Embeddings/test_media_*.py
tldw_Server_API/tests/Embeddings/test_message_validator*.py
- name: ai-embeddings-observability
paths: >-
tldw_Server_API/tests/Embeddings/test_metrics*.py
tldw_Server_API/tests/Embeddings/test_model_eviction_in_use_guard.py
tldw_Server_API/tests/Embeddings/test_multi_tier_cache_sync_async_loop.py
tldw_Server_API/tests/Embeddings/test_embeddings_orchestrator*.py
tldw_Server_API/tests/Embeddings/test_orchestrator*.py
tldw_Server_API/tests/Embeddings/test_pgvector*.py
tldw_Server_API/tests/Embeddings/test_priority_bump_endpoint.py
tldw_Server_API/tests/Embeddings/test_redis_integration_smoke.py
tldw_Server_API/tests/Embeddings/test_reembed_schedule_endpoint.py
tldw_Server_API/tests/Embeddings/test_request*.py
tldw_Server_API/tests/Embeddings/test_schema_drift.py
tldw_Server_API/tests/Embeddings/test_stage_controls.py
tldw_Server_API/tests/Embeddings/test_storage_idempotency_property.py
tldw_Server_API/tests/Embeddings/test_trace_headers.py
tldw_Server_API/tests/Embeddings/test_vector*.py
- name: vector-stores-integration
paths: >-
tldw_Server_API/tests/VectorStores/integration
- name: vector-stores-api
paths: >-
tldw_Server_API/tests/VectorStores/test*.py
- name: vector-stores-unit
paths: >-
tldw_Server_API/tests/VectorStores/unit
- name: paper-search
paths: >-
tldw_Server_API/tests/PaperSearch
- name: rag-legacy
paths: >-
tldw_Server_API/tests/RAG
- name: rag-new-integration-core
paths: >-
tldw_Server_API/tests/RAG_NEW/integration/test_adapter_guards.py
tldw_Server_API/tests/RAG_NEW/integration/test_bm25_weights.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_capabilities_styles.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_health_endpoints.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_integration.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_request_contract_parity.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_source_health_endpoint.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_stream_parity.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_strict_extractive_nli_api.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_unified_features_endpoint.py
- name: rag-new-integration-agentic
paths: >-
tldw_Server_API/tests/RAG_NEW/integration/test_rag_agentic_api.py
tldw_Server_API/tests/RAG_NEW/integration/test_research_agent_loop.py
- name: rag-new-integration-batch
paths: >-
tldw_Server_API/tests/RAG_NEW/integration/test_rag_batch_checkpoint_api.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_batch_resume_api.py
- name: rag-new-integration-research
paths: >-
tldw_Server_API/tests/RAG_NEW/integration/test_rag_ablate_api.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_benchmarks_ablation.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_doc_researcher_api.py
tldw_Server_API/tests/RAG_NEW/integration/test_retriever_pgvector_multi_search.py
- name: rag-new-property-core
paths: >-
tldw_Server_API/tests/RAG_NEW/property/test_*.py
tldw_Server_API/tests/RAG_NEW/test_*.py
- name: rag-new-unit-agentic
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_advanced_agentic_cache.py
tldw_Server_API/tests/RAG_NEW/unit/test_agentic*.py
tldw_Server_API/tests/RAG_NEW/unit/test_research_agent.py
- name: rag-new-unit-cache-vector
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_cache_invalidation_core.py
tldw_Server_API/tests/RAG_NEW/unit/test_chromadb*.py
tldw_Server_API/tests/RAG_NEW/unit/test_embedding_cache_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_pgvector_adapter_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_rewrite_cache.py
tldw_Server_API/tests/RAG_NEW/unit/test_semantic_cache*.py
tldw_Server_API/tests/RAG_NEW/unit/test_vector*.py
- name: rag-new-unit-pipeline
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_advanced_reranking_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_advanced_retrieval_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_flashrank_reranker_init.py
tldw_Server_API/tests/RAG_NEW/unit/test_functional_pipeline.py
tldw_Server_API/tests/RAG_NEW/unit/test_generation*.py
tldw_Server_API/tests/RAG_NEW/unit/test_hyde*.py
tldw_Server_API/tests/RAG_NEW/unit/test_kanban_retriever.py
tldw_Server_API/tests/RAG_NEW/unit/test_learned_fusion_simple.py
tldw_Server_API/tests/RAG_NEW/unit/test_llamacpp_reranker_topk_full_input.py
tldw_Server_API/tests/RAG_NEW/unit/test_pipeline*.py
tldw_Server_API/tests/RAG_NEW/unit/test_post*.py
tldw_Server_API/tests/RAG_NEW/unit/test_pre_retrieval*.py
tldw_Server_API/tests/RAG_NEW/unit/test_query*.py
tldw_Server_API/tests/RAG_NEW/unit/test_request*.py
tldw_Server_API/tests/RAG_NEW/unit/test_response_writer.py
tldw_Server_API/tests/RAG_NEW/unit/test_retrieval*.py
tldw_Server_API/tests/RAG_NEW/unit/test_reranker*.py
tldw_Server_API/tests/RAG_NEW/unit/test_streaming_executor.py
tldw_Server_API/tests/RAG_NEW/unit/test_two_tier_reranker.py
- name: rag-new-unit-unified-pipeline
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_unified_pipeline*.py
- name: rag-new-unit-rag-contracts
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_rag*.py
- name: rag-new-unit-guardrails-source
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_citations_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_guardrails*.py
tldw_Server_API/tests/RAG_NEW/unit/test_path_validation_security.py
tldw_Server_API/tests/RAG_NEW/unit/test_payload_exemplars*.py
tldw_Server_API/tests/RAG_NEW/unit/test_security_filters_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_source*.py
tldw_Server_API/tests/RAG_NEW/unit/test_strict_extractive_and_citations.py
- name: rag-new-unit-media-ingest
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_block_to_chunks.py
tldw_Server_API/tests/RAG_NEW/unit/test_chunk_fts_integration.py
tldw_Server_API/tests/RAG_NEW/unit/test_document_processing_integration_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_enhanced_chunking_integration_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_ingest_dedupe_and_chunk_ids.py
tldw_Server_API/tests/RAG_NEW/unit/test_media*.py
tldw_Server_API/tests/RAG_NEW/unit/test_structure_index.py
tldw_Server_API/tests/RAG_NEW/unit/test_temporal_filters.py
- name: rag-new-unit-core-misc
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_analytics_db_dev_reconciliation.py
tldw_Server_API/tests/RAG_NEW/unit/test_batch*.py
tldw_Server_API/tests/RAG_NEW/unit/test_clarification_gate.py
tldw_Server_API/tests/RAG_NEW/unit/test_corpus_synonyms_expansion.py
tldw_Server_API/tests/RAG_NEW/unit/test_evidence_chains_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_feedback_learning.py
tldw_Server_API/tests/RAG_NEW/unit/test_fts_query_translation_edge_cases.py
tldw_Server_API/tests/RAG_NEW/unit/test_knowledge_source_retrieval_coverage.py
tldw_Server_API/tests/RAG_NEW/unit/test_phase_metrics.py
tldw_Server_API/tests/RAG_NEW/unit/test_prompt_templates_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_quick_wins_spell_check_compat.py
tldw_Server_API/tests/RAG_NEW/unit/test_schema_corpus_alias.py
tldw_Server_API/tests/RAG_NEW/unit/test_standard_core_contract_threading.py
tldw_Server_API/tests/RAG_NEW/unit/test_suggestion_generator.py
tldw_Server_API/tests/RAG_NEW/unit/test_synonyms_registry_logging.py
- name: research-websearch
paths: >-
tldw_Server_API/tests/Research
tldw_Server_API/tests/WebSearch
- name: media-audio
paths: >-
tldw_Server_API/tests/Audio
tldw_Server_API/tests/Audio_Studio
tldw_Server_API/tests/AudioJobs
tldw_Server_API/tests/STT
tldw_Server_API/tests/TTS
tldw_Server_API/tests/TTS_NEW
tldw_Server_API/tests/VLM
- name: media-core-documents
paths: >-
tldw_Server_API/tests/Media/test_document*.py
tldw_Server_API/tests/Media/test_pdf_text_normalization.py
- name: media-core-api
paths: >-
tldw_Server_API/tests/Media/test_archive_member_cap.py
tldw_Server_API/tests/Media/test_auto_chunking_process_endpoints.py
tldw_Server_API/tests/Media/test_cache_index.py
tldw_Server_API/tests/Media/test_ingest_web_content_endpoint_sanitization.py
tldw_Server_API/tests/Media/test_json_*.py
tldw_Server_API/tests/Media/test_media_*.py
tldw_Server_API/tests/Media/test_navigation_policy_contract.py
tldw_Server_API/tests/Media/test_process_code_and_uploads.py
tldw_Server_API/tests/Media/test_upload_sink_security.py
tldw_Server_API/tests/Media/unit
- name: media-ingestion-new-ocr
paths: >-
tldw_Server_API/tests/MediaIngestion_NEW/test_*.py
- name: media-ingestion-new-integration
paths: >-
tldw_Server_API/tests/MediaIngestion_NEW/integration
- name: media-ingestion-new-unit-core
paths: >-
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_archive_and_sanitization.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_audio_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_auto_chunking_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_book_zip_safe_extract.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_book_processing_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_ebook_safe_paths.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_email_endpoint_error_mapping.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_file_validation.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_filename_and_mime_and_archive.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_ingest_jobs_batch_lookup.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_media_add_deps_error_mapping.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_media_canonical_helpers.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_media_ingest*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_media_list_no_slash_redirect.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_media_upload_failures.py
- name: media-ingestion-new-unit-mediawiki
paths: >-
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_mediawiki_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_ms_g_eval_validation.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_pdf_analysis_regressions.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_pdf_safe_paths.py
- name: media-ingestion-new-unit-persistence
paths: >-
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_persistence_*.py
- name: media-ingestion-new-unit-processing
paths: >-
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_plaintext_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_playlist_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_process_batch_media_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_process_document_like_item_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_transcription_models_endpoint.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_utils_time_conversion.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_video_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_visual_ingestion.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_xml_ingestion.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_youtube_audio_downloads.py
- name: media-ingestion-modification
paths: >-
tldw_Server_API/tests/Media_Ingestion_Modification
- name: media-legacy-free
paths: >-
tldw_Server_API/tests/Media
tldw_Server_API/tests/MediaIngestion_NEW
- name: chat-character-legacy-core
paths: >-
tldw_Server_API/tests/Character_Chat/test_character_chat_endpoints.py
tldw_Server_API/tests/Character_Chat/test_chat_dictionary_legacy.py
tldw_Server_API/tests/Character_Chat/test_chat_settings_endpoints.py
tldw_Server_API/tests/Character_Chat/test_complete_v2_streaming_e2e_mock.py
tldw_Server_API/tests/Character_Chat/test_complete_v2_streaming_unified_flag_monkeypatched.py
tldw_Server_API/tests/Character_Chat/test_complete_v2_streaming_with_mock_openai.py
tldw_Server_API/tests/Character_Chat/test_complete_v2_with_mock_openai.py
tldw_Server_API/tests/Character_Chat/test_completions_tool_messages_and_metadata.py
tldw_Server_API/tests/Character_Chat/test_export_includes_tools_and_metadata.py
tldw_Server_API/tests/Character_Chat/test_legacy_complete_deprecation.py
tldw_Server_API/tests/Character_Chat/test_messages_tool_calls_exposure.py
tldw_Server_API/tests/Character_Chat/test_persona_dialogue_tree_character_eval.py
- name: chat-character-legacy-files
paths: >-
tldw_Server_API/tests/Character_Chat/test_file_mime_detection.py
tldw_Server_API/tests/Character_Chat/test_rate_limits_specific.py
- name: chat-character-legacy-worldbook
paths: >-
tldw_Server_API/tests/Character_Chat/test_world_book_and_limits.py
tldw_Server_API/tests/Character_Chat/test_world_book_manager_legacy.py
tldw_Server_API/tests/Character_Chat/test_world_book_negatives.py
tldw_Server_API/tests/Character_Chat/test_world_book_negatives_and_new_endpoint.py
tldw_Server_API/tests/Character_Chat/test_world_book_prompt_context.py
tldw_Server_API/tests/Character_Chat/unit/test_chat_session_character_scope_api.py
- name: chat-character-db-core
paths: >-
tldw_Server_API/tests/Characters/test_ccv3_parser.py
tldw_Server_API/tests/Characters/test_chacha_postgres_sync_log_entity_column.py
tldw_Server_API/tests/Characters/test_character_chat_greetings_api.py
tldw_Server_API/tests/Characters/test_character_chat_lib.py
tldw_Server_API/tests/Characters/test_character_functionality_db.py
tldw_Server_API/tests/Characters/test_characters_world_book_permissions_unit.py
- name: chat-character-db-api
paths: >-
tldw_Server_API/tests/Characters/test_characters_endpoint.py
- name: chat-character-unit-core
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/test_utils.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_cards_fts_bootstrap.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_chat_default_provider.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_chat_manager.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_generation_presets.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_memory.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_prompt_presets.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_templates.py
- name: chat-character-unit-chat
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_completion_precheck.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_dictionary_estimate_tokens_shim_removed.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_dictionary_unit.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_grammar_unit.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_session_create_schema.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_session_error_mapping.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_settings_merge.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_group_chat_scope_resolution.py
- name: chat-character-unit-persona
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/unit/test_persona_exemplar_embeddings.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_persona_exemplar_selector.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_persona_exemplar_telemetry.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_png_export.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_postgres_backends.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_stream_persist_lookup.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_world_book_appendable.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_world_book_estimate_tokens_shim_removed.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_world_book_manager.py
- name: chat-character-unit-prd
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/unit/test_prd_round2_endpoints.py
- name: chat-character-property
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/property
- name: chat-character-integration-api
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/integration/test_character_api.py
tldw_Server_API/tests/Character_Chat_NEW/integration/test_character_exemplars_api.py
tldw_Server_API/tests/Character_Chat_NEW/integration/test_character_memory_endpoint.py
- name: chat-character-integration-chat
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/integration/test_character_chat_auto_routing.py
tldw_Server_API/tests/Character_Chat_NEW/integration/test_character_chat_stream_and_persist.py
- name: chat-character-integration-context
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/integration/test_conversation_context_primitives.py
tldw_Server_API/tests/Character_Chat_NEW/integration/test_role_normalization_and_search.py
- name: chat-legacy-integration
paths: >-
tldw_Server_API/tests/Chat/test*.py
tldw_Server_API/tests/Chat/integration
- name: chat-legacy-unit-a-l
paths: >-
tldw_Server_API/tests/Chat/unit/test_[a-l]*.py
- name: chat-legacy-unit-m-z
paths: >-
tldw_Server_API/tests/Chat/unit/test_[m-z]*.py
- name: chat-new-integration-property
paths: >-
tldw_Server_API/tests/Chat_NEW/integration
tldw_Server_API/tests/Chat_NEW/property
- name: chat-new-unit-a-l
paths: >-
tldw_Server_API/tests/Chat_NEW/unit/test_[a-l]*.py
- name: chat-new-unit-m-z
paths: >-
tldw_Server_API/tests/Chat_NEW/unit/test_[m-z]*.py
- name: chatbooks-streaming
paths: >-
tldw_Server_API/tests/Chatbooks
tldw_Server_API/tests/Explainer
tldw_Server_API/tests/Streaming
- name: explainer-core
paths: >-
tldw_Server_API/tests/Explainer
- name: llm-adapters-unit
paths: >-
tldw_Server_API/tests/LLM_Adapters/unit
tldw_Server_API/tests/LLM_Adapters/benchmarks
- name: llm-adapters-chat-endpoint
paths: >-
tldw_Server_API/tests/LLM_Adapters/integration/test_adapters_chat_endpoint.py
tldw_Server_API/tests/LLM_Adapters/integration/test_adapters_chat_endpoint_anthropic_native.py
- name: llm-adapters-chat-errors-core
paths: >-
tldw_Server_API/tests/LLM_Adapters/integration/test_adapters_chat_endpoint_error_sse_core_providers.py
- name: llm-adapters-chat-errors-extra
paths: >-
tldw_Server_API/tests/LLM_Adapters/integration/test_adapters_chat_endpoint_error_sse_google_mistral.py
tldw_Server_API/tests/LLM_Adapters/integration/test_adapters_chat_endpoint_midstream_error_all.py
- name: llm-adapters-orchestrator-core
paths: >-
tldw_Server_API/tests/LLM_Adapters/integration/test_async_adapters_orchestrator.py
tldw_Server_API/tests/LLM_Adapters/integration/test_async_adapters_orchestrator_anthropic_native.py
tldw_Server_API/tests/LLM_Adapters/integration/test_async_adapters_orchestrator_google_mistral.py
- name: llm-adapters-orchestrator-extra
paths: >-
tldw_Server_API/tests/LLM_Adapters/integration/test_async_adapters_orchestrator_groq_openrouter_native.py
tldw_Server_API/tests/LLM_Adapters/integration/test_async_adapters_orchestrator_stage3.py
tldw_Server_API/tests/LLM_Adapters/integration/test_async_adapters_streaming_error_all.py
tldw_Server_API/tests/LLM_Adapters/integration/test_async_bedrock_adapter.py
tldw_Server_API/tests/LLM_Adapters/integration/test_tool_choice_json_mode_endpoint.py
- name: llm-calls-core
paths: >-
tldw_Server_API/tests/LLM_Calls/test_*.py
- name: llm-calls-property
paths: >-
tldw_Server_API/tests/LLM_Calls/property
- name: llm-local-runtime
paths: >-
tldw_Server_API/tests/LLM_Local
- name: llm-local-backends
paths: >-
tldw_Server_API/tests/LLamaCpp
tldw_Server_API/tests/Local_LLM
- name: product-claims-core
paths: >-
tldw_Server_API/tests/Claims/test_claim_cluster_upsert_idempotency.py
tldw_Server_API/tests/Claims/test_claim_embeddings_chroma.py
tldw_Server_API/tests/Claims/test_claim_review_rule_assignment.py
tldw_Server_API/tests/Claims/test_claims_alerts_*.py
tldw_Server_API/tests/Claims/test_claims_alignment.py
tldw_Server_API/tests/Claims/test_claims_analytics_exports_cleanup.py
tldw_Server_API/tests/Claims/test_claims_api_strict_parse_mode.py
tldw_Server_API/tests/Claims/test_claims_budget_guard.py
tldw_Server_API/tests/Claims/test_claims_cluster*.py
tldw_Server_API/tests/Claims/test_claims_compat_types.py
- name: product-claims-engine
paths: >-
tldw_Server_API/tests/Claims/test_claims_dashboard_analytics.py
tldw_Server_API/tests/Claims/test_claims_embedding_refresh_config.py
tldw_Server_API/tests/Claims/test_claims_endpoints_api.py
tldw_Server_API/tests/Claims/test_claims_engine_*.py
tldw_Server_API/tests/Claims/test_claims_extractor*.py
tldw_Server_API/tests/Claims/test_claims_items_api.py
- name: product-claims-monitoring
paths: >-
tldw_Server_API/tests/Claims/test_claims_monitoring_*.py
tldw_Server_API/tests/Claims/test_claims_output_parser.py
tldw_Server_API/tests/Claims/test_claims_prompt_validation.py
tldw_Server_API/tests/Claims/test_claims_rebuild_*.py
tldw_Server_API/tests/Claims/test_claims_response_format_contracts.py
tldw_Server_API/tests/Claims/test_claims_review_*.py
- name: product-claims-service
paths: >-
tldw_Server_API/tests/Claims/test_claims_runtime_config.py
tldw_Server_API/tests/Claims/test_claims_service_*.py
tldw_Server_API/tests/Claims/test_claims_settings_*.py
tldw_Server_API/tests/Claims/test_claims_span_alignment.py
tldw_Server_API/tests/Claims/test_claims_status_and_envelope_api.py
tldw_Server_API/tests/Claims/test_claims_utils_persistence.py
tldw_Server_API/tests/Claims/test_claims_watchlist_notifications.py
tldw_Server_API/tests/Claims/test_claims_webhook_delivery.py
tldw_Server_API/tests/Claims/test_ingestion_*.py
- name: product-collections
paths: >-
tldw_Server_API/tests/Collections
- name: product-evaluations-abtest
paths: >-
tldw_Server_API/tests/Evaluations/embeddings_abtest/test*.py
tldw_Server_API/tests/Evaluations/test_abtest_*.py
tldw_Server_API/tests/Evaluations/test_embeddings_abtest_*.py
- name: product-evaluations-core
paths: >-
tldw_Server_API/tests/Evaluations/test_benchmark_*.py
tldw_Server_API/tests/Evaluations/test_circuit_breaker.py
tldw_Server_API/tests/Evaluations/test_connection_pool.py
tldw_Server_API/tests/Evaluations/test_db_adapter.py
tldw_Server_API/tests/Evaluations/test_error_scenarios.py
tldw_Server_API/tests/Evaluations/test_eval_*.py
tldw_Server_API/tests/Evaluations/test_evaluation_*.py
tldw_Server_API/tests/Evaluations/test_evaluations_audit_adapter.py
tldw_Server_API/tests/Evaluations/test_evaluations_backend_dual.py
tldw_Server_API/tests/Evaluations/test_evaluations_core_hardening.py
tldw_Server_API/tests/Evaluations/test_evaluations_benchmarks_*.py
tldw_Server_API/tests/Evaluations/test_evaluations_crud_*.py
tldw_Server_API/tests/Evaluations/test_evaluations_datasets_*.py
tldw_Server_API/tests/Evaluations/test_evaluations_migration_cli.py
tldw_Server_API/tests/Evaluations/test_evaluations_postgres_crud.py
tldw_Server_API/tests/Evaluations/test_evaluations_rag_pipeline_*.py
tldw_Server_API/tests/Evaluations/test_evaluations_stage*.py
tldw_Server_API/tests/Evaluations/test_evaluations_unified.py
tldw_Server_API/tests/Evaluations/test_evaluations_webhooks_*.py
tldw_Server_API/tests/Evaluations/test_mineru_ocr_evaluator.py
tldw_Server_API/tests/Evaluations/test_ms_g_eval.py
tldw_Server_API/tests/Evaluations/test_ocr_metrics.py
tldw_Server_API/tests/Evaluations/test_production_features_integration.py
tldw_Server_API/tests/Evaluations/test_proposition_evaluations.py
tldw_Server_API/tests/Evaluations/test_rag_*.py
tldw_Server_API/tests/Evaluations/test_security.py
tldw_Server_API/tests/Evaluations/test_synthetic_eval_service.py
tldw_Server_API/tests/Evaluations/test_unified_evaluation_service_strict_audit.py
- name: product-evaluations-integration
paths: >-
tldw_Server_API/tests/Evaluations/integration/test*.py
tldw_Server_API/tests/Evaluations/property/test*.py
- name: product-evaluations-recipes-persona
paths: >-
tldw_Server_API/tests/Evaluations/test_persona_*.py
tldw_Server_API/tests/Evaluations/test_recipe_*.py
- name: product-evaluations-unit
paths: >-
tldw_Server_API/tests/Evaluations/unit/test_*.py
- name: product-flashcards
paths: >-
tldw_Server_API/tests/Flashcards/test*.py
- name: product-explainer
paths: >-
tldw_Server_API/tests/Explainer
- name: product-notes-persona
paths: >-
tldw_Server_API/tests/Notes
tldw_Server_API/tests/Notes_NEW
tldw_Server_API/tests/Persona
tldw_Server_API/tests/Personalization
- name: product-prompts-legacy
paths: >-
tldw_Server_API/tests/Prompt_Management
- name: product-prompts-new
paths: >-
tldw_Server_API/tests/Prompt_Management_NEW
- name: product-watchlists-a-r
paths: >-
tldw_Server_API/tests/Watchlists/test_admin_*.py
tldw_Server_API/tests/Watchlists/test_audio_*.py
tldw_Server_API/tests/Watchlists/test_companion_*.py
tldw_Server_API/tests/Watchlists/test_dedup_*.py
tldw_Server_API/tests/Watchlists/test_delivery_*.py
tldw_Server_API/tests/Watchlists/test_e2e_*.py
tldw_Server_API/tests/Watchlists/test_fetchers_*.py
tldw_Server_API/tests/Watchlists/test_filter_*.py
tldw_Server_API/tests/Watchlists/test_filters_*.py
tldw_Server_API/tests/Watchlists/test_first_*.py
tldw_Server_API/tests/Watchlists/test_full_*.py
tldw_Server_API/tests/Watchlists/test_include_*.py
tldw_Server_API/tests/Watchlists/test_job_*.py
tldw_Server_API/tests/Watchlists/test_newsletter_*.py
tldw_Server_API/tests/Watchlists/test_operational_*.py
tldw_Server_API/tests/Watchlists/test_opml_*.py
tldw_Server_API/tests/Watchlists/test_perf_*.py
tldw_Server_API/tests/Watchlists/test_pipeline_*.py
tldw_Server_API/tests/Watchlists/test_preview_*.py
tldw_Server_API/tests/Watchlists/test_rate_*.py
tldw_Server_API/tests/Watchlists/test_rss_*.py
tldw_Server_API/tests/Watchlists/test_run_*.py
tldw_Server_API/tests/Watchlists/test_runs_*.py
- name: product-watchlists-core
paths: >-
tldw_Server_API/tests/Watchlists/test_scheduler_*.py
tldw_Server_API/tests/Watchlists/test_output_enrichment_scheduler.py
tldw_Server_API/tests/Watchlists/test_site_*.py
tldw_Server_API/tests/Watchlists/test_subscriptions_*.py
tldw_Server_API/tests/Watchlists/test_template_*.py
tldw_Server_API/tests/Watchlists/test_templates_*.py
tldw_Server_API/tests/Watchlists/test_tts_*.py
tldw_Server_API/tests/Watchlists/test_watchlist_*.py
tldw_Server_API/tests/Watchlists/test_youtube_*.py
- name: product-watchlists-pipeline
paths: >-
tldw_Server_API/tests/Watchlists/test_watchlists_*.py
- name: product-workflows-adapters-core
paths: >-
tldw_Server_API/tests/Workflows/adapters/test_*.py
- name: product-workflows-step-adapters
paths: >-
tldw_Server_API/tests/Workflows/test_new_step_adapters.py
- name: product-workflows-step-registry
paths: >-
tldw_Server_API/tests/Workflows/test_step_registry_runtime_coverage.py
- name: product-workflows-step-capabilities
paths: >-
tldw_Server_API/tests/Workflows/test_workflow_step_capabilities.py
- name: product-workflows-engine
paths: >-
tldw_Server_API/tests/Workflows/test_engine_*.py
tldw_Server_API/tests/Workflows/test_dual_backend_engine.py
tldw_Server_API/tests/Workflows/test_orphan_requeue_*.py
tldw_Server_API/tests/Workflows/test_workflows_map_substeps_*.py
tldw_Server_API/tests/Workflows/test_workflow_attempt_failures.py
tldw_Server_API/tests/Workflows/test_workflow_stress.py
tldw_Server_API/tests/Workflows/test_workflows_scheduler.py
- name: product-workflows-api
paths: >-
tldw_Server_API/tests/Workflows/test_artifact_*.py
tldw_Server_API/tests/Workflows/test_events_*.py
tldw_Server_API/tests/Workflows/test_runs_*.py
tldw_Server_API/tests/Workflows/test_webhook_*.py
tldw_Server_API/tests/Workflows/test_workflow_approval_permissions.py
tldw_Server_API/tests/Workflows/test_workflow_investigation_api.py
tldw_Server_API/tests/Workflows/test_workflow_preflight_api.py
tldw_Server_API/tests/Workflows/test_workflow_templates_api.py
tldw_Server_API/tests/Workflows/test_workflows_api.py
- name: product-workflows-storage
paths: >-
tldw_Server_API/tests/Workflows/test_dual_backend_workflows.py
tldw_Server_API/tests/Workflows/test_egress_policy.py
tldw_Server_API/tests/Workflows/test_mcp_tool_*.py
tldw_Server_API/tests/Workflows/test_media_ingest_*.py
tldw_Server_API/tests/Workflows/test_workflows_db*.py
tldw_Server_API/tests/Workflows/test_workflows_pg_*.py
tldw_Server_API/tests/Workflows/test_workflows_postgres_*.py
tldw_Server_API/tests/Workflows/test_workflows_tokens_cost_*.py
- name: product-workflows-runtime
paths: >-
tldw_Server_API/tests/Workflows/test_adapter_path_security.py
tldw_Server_API/tests/Workflows/test_llm_adapter.py
tldw_Server_API/tests/Workflows/test_stage3_chunkers_rag.py
tldw_Server_API/tests/Workflows/test_tts_workflow_normalization.py
tldw_Server_API/tests/Workflows/test_versions_idempotency.py
tldw_Server_API/tests/Workflows/test_workflows_artifact_gc_service.py
tldw_Server_API/tests/Workflows/test_workflows_dag_validation.py
tldw_Server_API/tests/Workflows/test_workflows_extras.py
tldw_Server_API/tests/Workflows/test_workflows_fuzz.py
tldw_Server_API/tests/Workflows/test_workflows_idempotency_ttl.py
tldw_Server_API/tests/Workflows/test_workflows_run_metadata.py
tldw_Server_API/tests/Workflows/test_workflows_truthiness_flags.py
- name: product-prompt-studio
paths: >-
tldw_Server_API/tests/prompt_studio
- name: platform-infrastructure-metrics
paths: >-
tldw_Server_API/tests/Infrastructure
tldw_Server_API/tests/Metrics
tldw_Server_API/tests/Monitoring
- name: platform-mcp-core
paths: >-
tldw_Server_API/tests/MCP
tldw_Server_API/tests/MCP_unified
- name: platform-resource-governance
paths: >-
tldw_Server_API/tests/Resource_Governance
- name: platform-services-startup
paths: >-
tldw_Server_API/tests/Services/test_startup_*.py
- name: platform-services-shutdown-lifespan
paths: >-
tldw_Server_API/tests/Services/test_shutdown_*.py
tldw_Server_API/tests/Services/test_lifespan_*.py
tldw_Server_API/tests/Services/test_worker_lifecycle_ownership_matrix.py
- name: platform-services-core
paths: >-
tldw_Server_API/tests/Services/test_admin_*.py
tldw_Server_API/tests/Services/test_app_*.py
tldw_Server_API/tests/Services/test_claims_*.py
tldw_Server_API/tests/Services/test_compatibility_*.py
tldw_Server_API/tests/Services/test_connectors_*.py
tldw_Server_API/tests/Services/test_document_*.py
tldw_Server_API/tests/Services/test_drain_*.py
tldw_Server_API/tests/Services/test_enhanced_*.py
tldw_Server_API/tests/Services/test_ephemeral_*.py
tldw_Server_API/tests/Services/test_executor_*.py
tldw_Server_API/tests/Services/test_file_*.py
tldw_Server_API/tests/Services/test_jobs_*.py
tldw_Server_API/tests/Services/test_kanban_*.py
tldw_Server_API/tests/Services/test_lifecycle_*.py
tldw_Server_API/tests/Services/test_loop_*.py
tldw_Server_API/tests/Services/test_media_*.py
tldw_Server_API/tests/Services/test_outputs_*.py
tldw_Server_API/tests/Services/test_persona_*.py
tldw_Server_API/tests/Services/test_placeholder_*.py
tldw_Server_API/tests/Services/test_service_*.py
tldw_Server_API/tests/Services/test_storage_*.py
tldw_Server_API/tests/Services/test_tts_*.py
tldw_Server_API/tests/Services/test_writing_annotation_review_jobs_worker.py
tldw_Server_API/tests/Services/test_workflows_*.py
tldw_Server_API/tests/Services/test_xml_*.py
- name: platform-services-main-routing
paths: >-
tldw_Server_API/tests/Services/test_main_claims_rebuild_startup.py
tldw_Server_API/tests/Services/test_main_lifecycle_contract.py
tldw_Server_API/tests/Services/test_main_readiness_shutdown.py
tldw_Server_API/tests/Services/test_main_router_contract.py
tldw_Server_API/tests/Services/test_openapi_contracts.py
tldw_Server_API/tests/Services/test_router_groups_contract.py
- name: platform-services-main-pollers
paths: >-
tldw_Server_API/tests/Services/test_main_shutdown_job_pollers.py
- name: platform-sandbox-admin-artifacts
paths: >-
tldw_Server_API/tests/sandbox/test_admin_*.py
tldw_Server_API/tests/sandbox/test_artifact*.py
- name: platform-sandbox-runtimes
paths: >-
tldw_Server_API/tests/sandbox/test_docker_*.py
tldw_Server_API/tests/sandbox/test_firecracker_*.py
tldw_Server_API/tests/sandbox/test_lima_*.py
tldw_Server_API/tests/sandbox/test_macos_*.py
tldw_Server_API/tests/sandbox/test_runner_*.py
tldw_Server_API/tests/sandbox/test_runtime_*.py
tldw_Server_API/tests/sandbox/test_runtimes_*.py
tldw_Server_API/tests/sandbox/test_operator_*.py
tldw_Server_API/tests/sandbox/test_seatbelt_*.py
tldw_Server_API/tests/sandbox/test_vz_*.py
- name: platform-sandbox-state-store
paths: >-
tldw_Server_API/tests/sandbox/test_acp_*.py
tldw_Server_API/tests/sandbox/test_cross_*.py
tldw_Server_API/tests/sandbox/test_execution_*.py
tldw_Server_API/tests/sandbox/test_feature_*.py
tldw_Server_API/tests/sandbox/test_glob_*.py
tldw_Server_API/tests/sandbox/test_idempotency_*.py
tldw_Server_API/tests/sandbox/test_interactive_*.py
tldw_Server_API/tests/sandbox/test_network_*.py
tldw_Server_API/tests/sandbox/test_orchestrator_*.py
tldw_Server_API/tests/sandbox/test_policy_*.py
tldw_Server_API/tests/sandbox/test_queue_*.py
tldw_Server_API/tests/sandbox/test_redis_*.py
tldw_Server_API/tests/sandbox/test_run_*.py
tldw_Server_API/tests/sandbox/test_sandbox_*.py
tldw_Server_API/tests/sandbox/test_snapshot_*.py
tldw_Server_API/tests/sandbox/test_store_*.py
tldw_Server_API/tests/sandbox/test_warm_*.py
tldw_Server_API/tests/sandbox/test_workspace_*.py
tldw_Server_API/tests/sandbox/test_worktree_*.py
- name: platform-sandbox-ws-streams
paths: >-
tldw_Server_API/tests/sandbox/test_cancel_*.py
tldw_Server_API/tests/sandbox/test_event_bridge.py
tldw_Server_API/tests/sandbox/test_session_*.py
tldw_Server_API/tests/sandbox/test_streams_*.py
tldw_Server_API/tests/sandbox/test_ws_*.py
- name: integrations
paths: >-
tldw_Server_API/tests/External_Sources
tldw_Server_API/tests/Notifications
tldw_Server_API/tests/Tools
tldw_Server_API/tests/WebScraping
tldw_Server_API/tests/Web_Scraping
tldw_Server_API/tests/integration
services:
postgres:
image: mirror.gcr.io/library/postgres:18-bookworm
env:
POSTGRES_USER: tldw_user
POSTGRES_PASSWORD: TestPassword123!
POSTGRES_DB: tldw_content
ports:
- 5432/tcp
options: >-
--health-cmd "pg_isready -U tldw_user -d tldw_content"
--health-interval 10s
--health-timeout 5s
--health-retries 10
env:
PYTHONPATH: .
PYTEST_DISABLE_PLUGIN_AUTOLOAD: '1'
TEST_MODE: 'true'
DISABLE_HEAVY_STARTUP: '1'
PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION: python
POSTGRES_TEST_HOST: 127.0.0.1
POSTGRES_TEST_DB: tldw_content
POSTGRES_TEST_USER: tldw_user
POSTGRES_TEST_PASSWORD: TestPassword123!
TEST_DB_HOST: 127.0.0.1
TEST_DB_USER: tldw_user
TEST_DB_PASSWORD: TestPassword123!
TEST_DB_NAME: tldw_test
TLDW_TEST_POSTGRES_REQUIRED: '1'
REDIS_URL: redis://127.0.0.1:6379/0
EMBEDDINGS_REDIS_URL: redis://127.0.0.1:6379/0
WORKFLOWS_EGRESS_ALLOWLIST: "93.184.216.34,does-not-resolve.invalid,example.com"
SHARD_NAME: ${{ matrix.shard.name }}
TEST_PATHS: ${{ matrix.shard.paths }}
RESULTS_DIR: test-results-linux-3.13-${{ matrix.shard.name }}
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Install FFmpeg and PortAudio (Linux)
uses: ./.github/actions/setup-ffmpeg
with:
install-ffmpeg: ${{ startsWith(matrix.shard.name, 'media-') || matrix.shard.name == 'ai-embeddings-media-validation' || matrix.shard.name == 'rag-new-unit-media-ingest' || matrix.shard.name == 'product-claims-service' || (matrix.shard.name == 'platform-services-core' || matrix.shard.name == 'platform-services-main-routing' || matrix.shard.name == 'platform-services-main-pollers') }}
install-portaudio: 'true'
- name: Setup Python and deps (with uv)
uses: ./.github/actions/setup-python-deps
with:
python-version: '3.13'
use-uv: 'true'
cache-dependency-path: |
pyproject.toml
uv.lock
extras: dev,multiplayer
- name: Verify core e2e fixtures are discoverable
if: matrix.shard.name == 'core-server-smoke'
shell: bash
run: |
set -euo pipefail
FIXTURES_OUTPUT="$(pytest --fixtures -q tldw_Server_API/tests || true)"
TMPFILE=$(mktemp)
printf "%s\n" "$FIXTURES_OUTPUT" > "$TMPFILE"
if command -v rg >/dev/null 2>&1; then
rg -q '^test_user_credentials\b' "$TMPFILE" || { echo 'Fixture test_user_credentials not found'; rm -f "$TMPFILE"; exit 1; }
else
grep -q '^test_user_credentials\b' "$TMPFILE" || { echo 'Fixture test_user_credentials not found'; rm -f "$TMPFILE"; exit 1; }
fi
rm -f "$TMPFILE"
- name: Install pg client and wait for PG
uses: ./.github/actions/wait-for-postgres
with:
host: 127.0.0.1
port: ${{ job.services.postgres.ports['5432'] }}
user: tldw_user
- name: Export PG env vars
shell: bash
run: |
PORT="${{ job.services.postgres.ports['5432'] }}"
DB_USER="${POSTGRES_TEST_USER:-tldw_user}"
DB_PASSWORD="${POSTGRES_TEST_PASSWORD:?POSTGRES_TEST_PASSWORD is required}"
DB_NAME="${POSTGRES_TEST_DB:-tldw_content}"
DB_URL="postgresql://${DB_USER}:${DB_PASSWORD}@127.0.0.1:${PORT}/${DB_NAME}"
echo "::add-mask::${DB_PASSWORD}"
echo "::add-mask::${DB_URL}"
{
echo "POSTGRES_TEST_PORT=${PORT}"
echo "TEST_DB_PORT=${PORT}"
echo "TEST_DATABASE_URL=${DB_URL}"
echo "DATABASE_URL=${DB_URL}"
} >> "$GITHUB_ENV"
- name: Ensure base DB exists
shell: bash
env:
PGPASSWORD: ${{ env.POSTGRES_TEST_PASSWORD }}
run: |
PORT="${{ job.services.postgres.ports['5432'] }}"
DB_NAME="${POSTGRES_TEST_DB:-tldw_content}"
DB_USER="${POSTGRES_TEST_USER:-tldw_user}"
psql -h 127.0.0.1 -p "$PORT" -U "$DB_USER" -d postgres -tc "SELECT 1 FROM pg_database WHERE datname='${DB_NAME}'" | grep -q 1 || \
psql -h 127.0.0.1 -p "$PORT" -U "$DB_USER" -d postgres -c "CREATE DATABASE ${DB_NAME}"
- name: Install additional deps for PG tests
run: |
python -m pip install --upgrade pip
pip install "psycopg[binary]>=3.1" pytest pytest-asyncio
- name: Verify pytest plugins import
shell: bash
run: |
python - <<'PY'
import importlib
import pytest_asyncio
importlib.import_module('pytest_asyncio.plugin')
importlib.import_module('pytest_benchmark.plugin')
print('pytest_asyncio OK:', getattr(pytest_asyncio, '__version__', 'unknown'))
print('pytest-benchmark OK')
PY
- name: Smoke start server (single-user)
if: matrix.shard.name == 'core-server-smoke'
env:
SERVER_LABEL: smoke
AUTH_MODE: single_user
DATABASE_URL: sqlite:///./Databases/users.db
SINGLE_USER_API_KEY: "smoke-ci-key-12345"
E2E_TEST_BASE_URL: "http://127.0.0.1:8000"
PYTEST_CURRENT_TEST: "ci-smoke-linux-single::startup"
TEST_MODE: 'true'
DISABLE_HEAVY_STARTUP: '0'
DEFER_HEAVY_STARTUP: '1'
STARTUP_TRACE: '1'
MCP_DEBUG: '1'
ULTRA_MINIMAL_APP: '1'
PRIVILEGE_METADATA_VALIDATE_ON_STARTUP: '0'
shell: bash
run: |
python tldw_Server_API/tests/scripts/server_lifecycle.py start
- name: Smoke health check
if: ${{ always() && matrix.shard.name == 'core-server-smoke' }}
env:
SERVER_LABEL: smoke
E2E_TEST_BASE_URL: "http://127.0.0.1:8000"
SMOKE_STARTUP_TIMEOUT_SECONDS: '240'
shell: bash
run: |
python tldw_Server_API/tests/scripts/server_lifecycle.py health-check
- name: Smoke stop server
if: ${{ always() && matrix.shard.name == 'core-server-smoke' }}
env:
SERVER_LABEL: smoke
shell: bash
run: |
python tldw_Server_API/tests/scripts/server_lifecycle.py stop || true
- name: Cache embedding models
if: ${{ github.event_name != 'workflow_dispatch' && (matrix.shard.name == 'ai-chromadb' || matrix.shard.name == 'ai-chunking-core' || matrix.shard.name == 'ai-chunking-semantic-security' || startsWith(matrix.shard.name, 'vector-stores') || matrix.shard.name == 'rag-legacy' || matrix.shard.name == 'research-websearch') }}
continue-on-error: true
uses: actions/cache@v5
with:
path: models/embeddings
key: ${{ runner.os }}-embeddings-static-v1
restore-keys: |
${{ runner.os }}-embeddings-
- name: Pre-download embedding models
if: ${{ (env.RUN_MODEL_TESTS == '1' || env.RUN_REAL_HF_EMBEDDING_TESTS == '1' || env.RUN_REAL_HF_EMBEDDING_TESTS == 'true') && matrix.shard.name != 'ai-embeddings-backpressure' && matrix.shard.name != 'ai-embeddings-dlq-config' && matrix.shard.name != 'ai-embeddings-media-validation' && matrix.shard.name != 'ai-embeddings-policy' && (matrix.shard.name == 'ai-chromadb' || matrix.shard.name == 'ai-chunking-core' || matrix.shard.name == 'ai-chunking-semantic-security' || startsWith(matrix.shard.name, 'ai-embeddings-') || startsWith(matrix.shard.name, 'vector-stores') || matrix.shard.name == 'rag-legacy' || matrix.shard.name == 'research-websearch') }}
continue-on-error: true
shell: bash
run: |
python -m pip install --upgrade pip
pip install huggingface_hub
python Helper_Scripts/download_embedding_models.py --target models/embeddings --skip-defaults --model sentence-transformers/all-MiniLM-L6-v2
echo "TLDW_EMBEDDING_MODELS_DIR=models/embeddings" >> "$GITHUB_ENV"
- name: Run shard tests
if: matrix.shard.name != 'media-legacy-free'
shell: bash
run: |
mkdir -p "$RESULTS_DIR"
export DATABASE_URL="sqlite:///./Databases/users.db"
unset TEST_DATABASE_URL POSTGRES_TEST_DB
pytest -q --disable-warnings -p pytest_asyncio.plugin \
-m "not jobs and not e2e" \
$TEST_PATHS \
--durations=50 \
--junit-xml="$RESULTS_DIR/${SHARD_NAME}.xml"
- name: Run legacy-free media checks
if: matrix.shard.name == 'media-legacy-free'
shell: bash
run: |
mkdir -p "$RESULTS_DIR"
export DATABASE_URL="sqlite:///./Databases/users.db"
unset TEST_DATABASE_URL POSTGRES_TEST_DB
TLDW_DISABLE_LEGACY_MEDIA=1 pytest -q --disable-warnings -p pytest_asyncio.plugin \
-m "not jobs and not e2e" \
tldw_Server_API/tests/Media \
tldw_Server_API/tests/MediaIngestion_NEW \
--durations=25 \
--junit-xml="$RESULTS_DIR/media-legacy-free.xml"
- name: Upload test results
if: always()
continue-on-error: true
uses: actions/upload-artifact@v7
with:
name: full-suite-ubuntu-py3.13-${{ matrix.shard.name }}
path: ${{ env.RESULTS_DIR }}
full-suite-linux-313-summary:
name: Full Suite (Ubuntu / Python 3.13)
runs-on: ubuntu-latest
needs: [full-suite-linux-313-shards]
if: always()
steps:
- name: Check Python 3.13 shard result
shell: bash
run: |
r="${{ needs['full-suite-linux-313-shards'].result }}"
if [ "$r" != "success" ] && [ "$r" != "skipped" ]; then
echo "Python 3.13 full-suite shards finished with: $r"
exit 1
fi
echo "Python 3.13 full-suite shards passed (or skipped via path filter)."
full-suite-macos-312-shards:
name: Full Suite shard (macos-latest / Python 3.12 / ${{ matrix.shard.name }})
runs-on: macos-latest
timeout-minutes: 60
needs: [lint, syntax-check, changes]
if: ${{ github.event_name != 'pull_request' || needs.changes.outputs.backend_changed == 'true' }}
strategy:
fail-fast: false
matrix:
shard:
- name: core-server-smoke
paths: >-
tldw_Server_API/tests/test_*.py
tldw_Server_API/tests/Health
tldw_Server_API/tests/Logging
- name: core-config
paths: >-
tldw_Server_API/tests/Config
- name: core-audit-support
paths: >-
tldw_Server_API/tests/Audit/test_audit_*.py
tldw_Server_API/tests/Audit/test_pii_pattern_groups.py
tldw_Server_API/tests/Audit/test_risk_settings_overrides.py
tldw_Server_API/tests/Audit/test_sqlite_runtime_pragmas.py
- name: core-audit-unified
paths: >-
tldw_Server_API/tests/Audit/test_unified_audit_service.py
- name: core-security
paths: >-
tldw_Server_API/tests/Security
- name: core-setup-usage
paths: >-
tldw_Server_API/tests/Setup
tldw_Server_API/tests/Usage
- name: core-utils-tooling
paths: >-
tldw_Server_API/tests/Helper_Scripts
tldw_Server_API/tests/Context_Integrity
tldw_Server_API/tests/Utils
tldw_Server_API/tests/helpers
tldw_Server_API/tests/http_client
tldw_Server_API/tests/lint
tldw_Server_API/tests/sanity_tests
tldw_Server_API/tests/schemas
tldw_Server_API/tests/unit
- name: admin-a-api
paths: >-
tldw_Server_API/tests/Admin/test_admin_a*.py
- name: admin-budgets
paths: >-
tldw_Server_API/tests/Admin/test_admin_budgets_*.py
- name: admin-bundle-sanitizers
paths: >-
tldw_Server_API/tests/Admin/test_admin_bundle_service_sanitizers.py
- name: admin-bundle-ops
paths: >-
tldw_Server_API/tests/Admin/test_bundle_ops.py
- name: admin-byok-core
paths: >-
tldw_Server_API/tests/Admin/test_admin_byok_service_sanitizers.py
- name: admin-byok-validation
paths: >-
tldw_Server_API/tests/Admin/test_admin_byok_validation_*.py
tldw_Server_API/tests/Admin/test_byok_*.py
- name: admin-backup-api
paths: >-
tldw_Server_API/tests/Admin/test_backup_schedules_api.py
- name: admin-backup-core
paths: >-
tldw_Server_API/tests/Admin/test_admin_backup_*.py
tldw_Server_API/tests/Admin/test_backup_schedules_repo.py
- name: admin-conflicts-data-admin
paths: >-
tldw_Server_API/tests/Admin/test_admin_c*.py
tldw_Server_API/tests/Admin/test_admin_data_*.py
- name: admin-data-ops
paths: >-
tldw_Server_API/tests/Admin/test_data_ops.py
- name: admin-data-subject-api
paths: >-
tldw_Server_API/tests/Admin/test_data_subject_requests_api.py
- name: admin-data-subject-repo-dsr
paths: >-
tldw_Server_API/tests/Admin/test_data_subject_requests_repo.py
tldw_Server_API/tests/Admin/test_dsr_*.py
- name: admin-e2e-access
paths: >-
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_routes_are_unavailable_without_flag
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_routes_require_support_header
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_routes_reject_wrong_support_header
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_routes_fail_closed_without_configured_support_key
- name: admin-e2e-seed
paths: >-
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_seed_returns_stable_fixture_ids
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_seed_returns_debug_role_principals
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_seed_requires_explicit_fixture_passwords
- name: admin-e2e-single-user
paths: >-
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_seed_returns_single_user_login_key
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_single_user_api_key_can_read_users_me
- name: admin-e2e-session-dsr
paths: >-
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_reset_rejects_unsafe_backup_paths
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_bootstrap_jwt_session_returns_cookie_payload
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_dsr_seed_supports_real_preview
- name: admin-e2e-reset-backups
paths: >-
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_reset_clears_backup_schedules
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_reset_clears_monitoring_authority_state
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_run_due_backup_schedules_processes_scheduled_run
- name: admin-g-i
paths: >-
tldw_Server_API/tests/Admin/test_admin_g*.py
tldw_Server_API/tests/Admin/test_admin_i*.py
- name: admin-llm-providers
paths: >-
tldw_Server_API/tests/Admin/test_admin_llm_providers_*.py
- name: admin-incidents
paths: >-
tldw_Server_API/tests/Admin/test_incidents_*.py
- name: admin-llm-usage
paths: >-
tldw_Server_API/tests/Admin/test_llm_usage_endpoints.py
- name: admin-maintenance-misc
paths: >-
tldw_Server_API/tests/Admin/test_admin_maintenance_*.py
tldw_Server_API/tests/Admin/test_admin_misc_endpoints.py
tldw_Server_API/tests/Admin/test_maintenance_*.py
- name: admin-monitoring
paths: >-
tldw_Server_API/tests/Admin/test_admin_monitoring_*.py
tldw_Server_API/tests/Admin/test_monitoring_*.py
- name: admin-ops-dependencies
paths: >-
tldw_Server_API/tests/Admin/test_admin_ops_dependencies.py
- name: admin-ops-endpoints
paths: >-
tldw_Server_API/tests/Admin/test_admin_ops_new_endpoints.py
- name: admin-ops-webhooks-orgs
paths: >-
tldw_Server_API/tests/Admin/test_admin_ops_webhooks_reports.py
tldw_Server_API/tests/Admin/test_admin_orgs_*.py
- name: admin-profiles-rate-registration
paths: >-
tldw_Server_API/tests/Admin/test_admin_profiles_*.py
tldw_Server_API/tests/Admin/test_admin_rate_limits_*.py
tldw_Server_API/tests/Admin/test_admin_registration_*.py
- name: admin-pricing-retention-roles-router
paths: >-
tldw_Server_API/tests/Admin/test_pricing_reload_endpoint.py
tldw_Server_API/tests/Admin/test_retention_policy_preview_api.py
tldw_Server_API/tests/Admin/test_role_*.py
tldw_Server_API/tests/Admin/test_router_analytics_*.py
- name: admin-s-sessions-settings
paths: >-
tldw_Server_API/tests/Admin/test_admin_scope_service_enterprise_mode.py
tldw_Server_API/tests/Admin/test_admin_service_log_sanitizers.py
tldw_Server_API/tests/Admin/test_admin_sessions_*.py
tldw_Server_API/tests/Admin/test_admin_settings_service.py
tldw_Server_API/tests/Admin/test_admin_smoke.py
- name: admin-split-storage-tools
paths: >-
tldw_Server_API/tests/Admin/test_admin_split_*.py
tldw_Server_API/tests/Admin/test_admin_storage_quotas.py
tldw_Server_API/tests/Admin/test_admin_system_ops_service.py
tldw_Server_API/tests/Admin/test_admin_t*.py
- name: admin-users
paths: >-
tldw_Server_API/tests/Admin/test_admin_u*.py
- name: admin-watchlists-webhooks
paths: >-
tldw_Server_API/tests/Admin/test_admin_w*.py
- name: admin-system-usage
paths: >-
tldw_Server_API/tests/Admin/test_system_ops.py
tldw_Server_API/tests/Admin/test_usage_reporting*.py
- name: auth-integration-admin-auth
paths: >-
tldw_Server_API/tests/AuthNZ/integration/test_admin_*.py
tldw_Server_API/tests/AuthNZ/integration/test_api_key_*.py
tldw_Server_API/tests/AuthNZ/integration/test_auth_*.py
- name: auth-integration-authnz
paths: >-
tldw_Server_API/tests/AuthNZ/integration/test_authnz_*.py
- name: auth-integration-b-z
paths: >-
tldw_Server_API/tests/AuthNZ/integration/test_[b-z]*.py
- name: auth-postgres
paths: >-
tldw_Server_API/tests/AuthNZ_Postgres
- name: auth-core-root-property
paths: >-
tldw_Server_API/tests/AuthNZ/test*.py
tldw_Server_API/tests/AuthNZ/property/test*.py
- name: auth-core-unit-a-l
paths: >-
tldw_Server_API/tests/AuthNZ/unit/test_[a-l]*.py
- name: auth-core-unit-m-z
paths: >-
tldw_Server_API/tests/AuthNZ/unit/test_[m-z]*.py
- name: auth-sqlite
paths: >-
tldw_Server_API/tests/AuthNZ_SQLite
- name: auth-unit-a-l
paths: >-
tldw_Server_API/tests/AuthNZ_Unit/test_[a-l]*.py
- name: auth-unit-m-z
paths: >-
tldw_Server_API/tests/AuthNZ_Unit/test_[m-z]*.py
- name: chacha-core-stores
paths: >-
tldw_Server_API/tests/ChaChaNotesDB/test_chacha_*.py
tldw_Server_API/tests/ChaChaNotesDB/test_chachanotes_db.py
- name: chacha-character-conversation
paths: >-
tldw_Server_API/tests/ChaChaNotesDB/test_character_*.py
tldw_Server_API/tests/ChaChaNotesDB/test_conversation_*.py
- name: chacha-content-persona
paths: >-
tldw_Server_API/tests/ChaChaNotesDB/test_flashcard*.py
tldw_Server_API/tests/ChaChaNotesDB/test_note_*.py
tldw_Server_API/tests/ChaChaNotesDB/test_order_by_validation.py
tldw_Server_API/tests/ChaChaNotesDB/test_persona_*.py
tldw_Server_API/tests/ChaChaNotesDB/test_quizzes_basic.py
tldw_Server_API/tests/ChaChaNotesDB/test_web_clipper_db.py
tldw_Server_API/tests/ChaChaNotesDB/test_workspace_assistant_defaults_db.py
tldw_Server_API/tests/ChaChaNotesDB/test_workspace_resource_memberships_db.py
tldw_Server_API/tests/ChaChaNotesDB/test_workspace_sub_resources_db.py
tldw_Server_API/tests/ChaChaNotesDB/test_writing_playground_db.py
- name: db-privileges
paths: >-
tldw_Server_API/tests/DB
tldw_Server_API/tests/DB_Management
tldw_Server_API/tests/MediaDB2
tldw_Server_API/tests/PrivilegeCatalog
tldw_Server_API/tests/Privileges
- name: ai-chromadb
paths: >-
tldw_Server_API/tests/ChromaDB
- name: ai-chunking-core
paths: >-
tldw_Server_API/tests/Chunking/test_async_*.py
tldw_Server_API/tests/Chunking/test_auto_*.py
tldw_Server_API/tests/Chunking/test_chunker_*.py
tldw_Server_API/tests/Chunking/test_process_text_components.py
tldw_Server_API/tests/Chunking/test_process_text_refactor_equivalence.py
tldw_Server_API/tests/Chunking/test_chunking_endpoint.py
tldw_Server_API/tests/Chunking/test_chunking_offsets_property.py
tldw_Server_API/tests/Chunking/test_chunking_overlap_properties.py
tldw_Server_API/tests/Chunking/test_chunking_regressions.py
tldw_Server_API/tests/Chunking/test_chunking_template_endpoint_errors.py
- name: ai-chunking-templates
paths: >-
tldw_Server_API/tests/Chunking/test_chunking_templates.py::TestDatabaseOperations
tldw_Server_API/tests/Chunking/test_chunking_templates.py::TestTemplateInitialization
tldw_Server_API/tests/Chunking/test_chunking_templates.py::TestTemplateProcessing
tldw_Server_API/tests/Chunking/test_chunking_templates_endpoint_sanitization.py
tldw_Server_API/tests/Chunking/test_chunking_templates_validate_schema.py
tldw_Server_API/tests/Chunking/test_template_*.py
- name: ai-chunking-templates-api
paths: >-
tldw_Server_API/tests/Chunking/test_chunking_templates.py::TestAPIEndpoints
- name: ai-chunking-templates-integration
paths: >-
tldw_Server_API/tests/Chunking/test_chunking_templates.py::TestIntegration
- name: ai-chunking-code-json-xml
paths: >-
tldw_Server_API/tests/Chunking/test_code_chunking_regressions.py
tldw_Server_API/tests/Chunking/test_json_*.py
tldw_Server_API/tests/Chunking/test_xml_*.py
- name: ai-chunking-semantic-security
paths: >-
tldw_Server_API/tests/Chunking/test_hierarchical_*.py
tldw_Server_API/tests/Chunking/test_offsets_additional.py
tldw_Server_API/tests/Chunking/test_option_aliases.py
tldw_Server_API/tests/Chunking/test_overlap_clamp.py
tldw_Server_API/tests/Chunking/test_phase3_3_sanitizers.py
tldw_Server_API/tests/Chunking/test_propositions_strategy.py
tldw_Server_API/tests/Chunking/test_security*.py
tldw_Server_API/tests/Chunking/test_semantic_*.py
tldw_Server_API/tests/Chunking/test_sentence_spans_properties.py
tldw_Server_API/tests/Chunking/test_streaming_overlap.py
tldw_Server_API/tests/Chunking/test_thai_tables_spans.py
tldw_Server_API/tests/Chunking/test_thread_safety.py
tldw_Server_API/tests/Chunking/test_tokens_offsets.py
tldw_Server_API/tests/Chunking/unit/test_tokens_fallback_offsets.py
- name: ai-embeddings-async
paths: >-
tldw_Server_API/tests/Embeddings/test_async_*.py
- name: ai-embeddings-backpressure
paths: >-
tldw_Server_API/tests/Embeddings/test_backpressure*.py
tldw_Server_API/tests/Embeddings/test_batch_rate_headers.py
- name: ai-embeddings-chromadb-core
paths: >-
tldw_Server_API/tests/Embeddings/test_chromadb_*.py
- name: ai-embeddings-core
paths: >-
tldw_Server_API/tests/Embeddings/test_chunk_metadata_backfill.py
tldw_Server_API/tests/Embeddings/test_circuit_breaker_*.py
tldw_Server_API/tests/Embeddings/test_compactor_admin_endpoint.py
tldw_Server_API/tests/Embeddings/test_connection_pool_failure_accounting.py
tldw_Server_API/tests/Embeddings/test_contextual_chunking.py
- name: ai-embeddings-dlq-config
paths: >-
tldw_Server_API/tests/Embeddings/test_delete_by_filter_endpoint.py
tldw_Server_API/tests/Embeddings/test_dlq_*.py
tldw_Server_API/tests/Embeddings/test_embedding_*.py
tldw_Server_API/tests/Embeddings/test_embeddings_audit_adapter.py
tldw_Server_API/tests/Embeddings/test_embeddings_batch_dimensions.py
tldw_Server_API/tests/Embeddings/test_embeddings_dimensions_policy.py
tldw_Server_API/tests/Embeddings/test_embeddings_endpoint_cache_identity.py
tldw_Server_API/tests/Embeddings/test_embeddings_fallback*.py
- name: ai-embeddings-jobs-runtime
paths: >-
tldw_Server_API/tests/Embeddings/test_embeddings_jobs*.py
tldw_Server_API/tests/Embeddings/test_embeddings_local_api.py
tldw_Server_API/tests/Embeddings/test_embeddings_loop_scoping.py
tldw_Server_API/tests/Embeddings/test_embeddings_memory*.py
tldw_Server_API/tests/Embeddings/test_embeddings_metric*.py
tldw_Server_API/tests/Embeddings/test_embeddings_model_management.py
tldw_Server_API/tests/Embeddings/test_embeddings_optional_deps_import.py
tldw_Server_API/tests/Embeddings/test_embeddings_redis*.py
tldw_Server_API/tests/Embeddings/test_embeddings_rg_sync_helper.py
tldw_Server_API/tests/Embeddings/test_embeddings_test_mode_truthiness.py
tldw_Server_API/tests/Embeddings/test_embeddings_token_arrays.py
tldw_Server_API/tests/Embeddings/test_embeddings_unsupported_provider.py
- name: ai-embeddings-policy
paths: >-
tldw_Server_API/tests/Embeddings/test_embeddings_policy*.py
tldw_Server_API/tests/Embeddings/test_l2_normalization_policy.py
- name: ai-embeddings-v5-core
paths: >-
tldw_Server_API/tests/Embeddings/test_embeddings_v5_production.py
tldw_Server_API/tests/Embeddings/test_embeddings_v5_property.py
tldw_Server_API/tests/Embeddings/test_embeddings_v5_unit.py
- name: ai-embeddings-v5-integration
paths: >-
tldw_Server_API/tests/Embeddings/test_embeddings_v5_integration.py
- name: ai-embeddings-hyde-ledger
paths: >-
tldw_Server_API/tests/Embeddings/test_hyde_backfill_cli.py
tldw_Server_API/tests/Embeddings/test_ledger_status_endpoint.py
- name: ai-embeddings-media-validation
paths: >-
tldw_Server_API/tests/Embeddings/test_media_*.py
tldw_Server_API/tests/Embeddings/test_message_validator*.py
- name: ai-embeddings-observability
paths: >-
tldw_Server_API/tests/Embeddings/test_metrics*.py
tldw_Server_API/tests/Embeddings/test_model_eviction_in_use_guard.py
tldw_Server_API/tests/Embeddings/test_multi_tier_cache_sync_async_loop.py
tldw_Server_API/tests/Embeddings/test_embeddings_orchestrator*.py
tldw_Server_API/tests/Embeddings/test_orchestrator*.py
tldw_Server_API/tests/Embeddings/test_pgvector*.py
tldw_Server_API/tests/Embeddings/test_priority_bump_endpoint.py
tldw_Server_API/tests/Embeddings/test_redis_integration_smoke.py
tldw_Server_API/tests/Embeddings/test_reembed_schedule_endpoint.py
tldw_Server_API/tests/Embeddings/test_request*.py
tldw_Server_API/tests/Embeddings/test_schema_drift.py
tldw_Server_API/tests/Embeddings/test_stage_controls.py
tldw_Server_API/tests/Embeddings/test_storage_idempotency_property.py
tldw_Server_API/tests/Embeddings/test_trace_headers.py
tldw_Server_API/tests/Embeddings/test_vector*.py
- name: vector-stores-integration
paths: >-
tldw_Server_API/tests/VectorStores/integration
- name: vector-stores-api
paths: >-
tldw_Server_API/tests/VectorStores/test*.py
- name: vector-stores-unit
paths: >-
tldw_Server_API/tests/VectorStores/unit
- name: paper-search
paths: >-
tldw_Server_API/tests/PaperSearch
- name: rag-legacy
paths: >-
tldw_Server_API/tests/RAG
- name: rag-new-integration-core
paths: >-
tldw_Server_API/tests/RAG_NEW/integration/test_adapter_guards.py
tldw_Server_API/tests/RAG_NEW/integration/test_bm25_weights.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_capabilities_styles.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_health_endpoints.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_integration.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_request_contract_parity.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_source_health_endpoint.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_stream_parity.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_strict_extractive_nli_api.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_unified_features_endpoint.py
- name: rag-new-integration-agentic
paths: >-
tldw_Server_API/tests/RAG_NEW/integration/test_rag_agentic_api.py
tldw_Server_API/tests/RAG_NEW/integration/test_research_agent_loop.py
- name: rag-new-integration-batch
paths: >-
tldw_Server_API/tests/RAG_NEW/integration/test_rag_batch_checkpoint_api.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_batch_resume_api.py
- name: rag-new-integration-research
paths: >-
tldw_Server_API/tests/RAG_NEW/integration/test_rag_ablate_api.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_benchmarks_ablation.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_doc_researcher_api.py
tldw_Server_API/tests/RAG_NEW/integration/test_retriever_pgvector_multi_search.py
- name: rag-new-property-core
paths: >-
tldw_Server_API/tests/RAG_NEW/property/test_*.py
tldw_Server_API/tests/RAG_NEW/test_*.py
- name: rag-new-unit-agentic
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_advanced_agentic_cache.py
tldw_Server_API/tests/RAG_NEW/unit/test_agentic*.py
tldw_Server_API/tests/RAG_NEW/unit/test_research_agent.py
- name: rag-new-unit-cache-vector
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_cache_invalidation_core.py
tldw_Server_API/tests/RAG_NEW/unit/test_chromadb*.py
tldw_Server_API/tests/RAG_NEW/unit/test_embedding_cache_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_pgvector_adapter_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_rewrite_cache.py
tldw_Server_API/tests/RAG_NEW/unit/test_semantic_cache*.py
tldw_Server_API/tests/RAG_NEW/unit/test_vector*.py
- name: rag-new-unit-pipeline
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_advanced_reranking_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_advanced_retrieval_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_flashrank_reranker_init.py
tldw_Server_API/tests/RAG_NEW/unit/test_functional_pipeline.py
tldw_Server_API/tests/RAG_NEW/unit/test_generation*.py
tldw_Server_API/tests/RAG_NEW/unit/test_hyde*.py
tldw_Server_API/tests/RAG_NEW/unit/test_kanban_retriever.py
tldw_Server_API/tests/RAG_NEW/unit/test_learned_fusion_simple.py
tldw_Server_API/tests/RAG_NEW/unit/test_llamacpp_reranker_topk_full_input.py
tldw_Server_API/tests/RAG_NEW/unit/test_pipeline*.py
tldw_Server_API/tests/RAG_NEW/unit/test_post*.py
tldw_Server_API/tests/RAG_NEW/unit/test_pre_retrieval*.py
tldw_Server_API/tests/RAG_NEW/unit/test_query*.py
tldw_Server_API/tests/RAG_NEW/unit/test_request*.py
tldw_Server_API/tests/RAG_NEW/unit/test_response_writer.py
tldw_Server_API/tests/RAG_NEW/unit/test_retrieval*.py
tldw_Server_API/tests/RAG_NEW/unit/test_reranker*.py
tldw_Server_API/tests/RAG_NEW/unit/test_streaming_executor.py
tldw_Server_API/tests/RAG_NEW/unit/test_two_tier_reranker.py
- name: rag-new-unit-unified-pipeline
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_unified_pipeline*.py
- name: rag-new-unit-rag-contracts
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_rag*.py
- name: rag-new-unit-guardrails-source
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_citations_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_guardrails*.py
tldw_Server_API/tests/RAG_NEW/unit/test_path_validation_security.py
tldw_Server_API/tests/RAG_NEW/unit/test_payload_exemplars*.py
tldw_Server_API/tests/RAG_NEW/unit/test_security_filters_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_source*.py
tldw_Server_API/tests/RAG_NEW/unit/test_strict_extractive_and_citations.py
- name: rag-new-unit-media-ingest
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_block_to_chunks.py
tldw_Server_API/tests/RAG_NEW/unit/test_chunk_fts_integration.py
tldw_Server_API/tests/RAG_NEW/unit/test_document_processing_integration_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_enhanced_chunking_integration_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_ingest_dedupe_and_chunk_ids.py
tldw_Server_API/tests/RAG_NEW/unit/test_media*.py
tldw_Server_API/tests/RAG_NEW/unit/test_structure_index.py
tldw_Server_API/tests/RAG_NEW/unit/test_temporal_filters.py
- name: rag-new-unit-core-misc
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_analytics_db_dev_reconciliation.py
tldw_Server_API/tests/RAG_NEW/unit/test_batch*.py
tldw_Server_API/tests/RAG_NEW/unit/test_clarification_gate.py
tldw_Server_API/tests/RAG_NEW/unit/test_corpus_synonyms_expansion.py
tldw_Server_API/tests/RAG_NEW/unit/test_evidence_chains_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_feedback_learning.py
tldw_Server_API/tests/RAG_NEW/unit/test_fts_query_translation_edge_cases.py
tldw_Server_API/tests/RAG_NEW/unit/test_knowledge_source_retrieval_coverage.py
tldw_Server_API/tests/RAG_NEW/unit/test_phase_metrics.py
tldw_Server_API/tests/RAG_NEW/unit/test_prompt_templates_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_quick_wins_spell_check_compat.py
tldw_Server_API/tests/RAG_NEW/unit/test_schema_corpus_alias.py
tldw_Server_API/tests/RAG_NEW/unit/test_standard_core_contract_threading.py
tldw_Server_API/tests/RAG_NEW/unit/test_suggestion_generator.py
tldw_Server_API/tests/RAG_NEW/unit/test_synonyms_registry_logging.py
- name: research-websearch
paths: >-
tldw_Server_API/tests/Research
tldw_Server_API/tests/WebSearch
- name: media-audio
paths: >-
tldw_Server_API/tests/Audio
tldw_Server_API/tests/Audio_Studio
tldw_Server_API/tests/AudioJobs
tldw_Server_API/tests/STT
tldw_Server_API/tests/TTS
tldw_Server_API/tests/TTS_NEW
tldw_Server_API/tests/VLM
- name: media-core-documents
paths: >-
tldw_Server_API/tests/Media/test_document*.py
tldw_Server_API/tests/Media/test_pdf_text_normalization.py
- name: media-core-api
paths: >-
tldw_Server_API/tests/Media/test_archive_member_cap.py
tldw_Server_API/tests/Media/test_auto_chunking_process_endpoints.py
tldw_Server_API/tests/Media/test_cache_index.py
tldw_Server_API/tests/Media/test_ingest_web_content_endpoint_sanitization.py
tldw_Server_API/tests/Media/test_json_*.py
tldw_Server_API/tests/Media/test_media_*.py
tldw_Server_API/tests/Media/test_navigation_policy_contract.py
tldw_Server_API/tests/Media/test_process_code_and_uploads.py
tldw_Server_API/tests/Media/test_upload_sink_security.py
tldw_Server_API/tests/Media/unit
- name: media-ingestion-new-ocr
paths: >-
tldw_Server_API/tests/MediaIngestion_NEW/test_*.py
- name: media-ingestion-new-integration
paths: >-
tldw_Server_API/tests/MediaIngestion_NEW/integration
- name: media-ingestion-new-unit-core
paths: >-
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_archive_and_sanitization.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_audio_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_auto_chunking_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_book_zip_safe_extract.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_book_processing_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_ebook_safe_paths.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_email_endpoint_error_mapping.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_file_validation.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_filename_and_mime_and_archive.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_ingest_jobs_batch_lookup.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_media_add_deps_error_mapping.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_media_canonical_helpers.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_media_ingest*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_media_list_no_slash_redirect.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_media_upload_failures.py
- name: media-ingestion-new-unit-mediawiki
paths: >-
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_mediawiki_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_ms_g_eval_validation.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_pdf_analysis_regressions.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_pdf_safe_paths.py
- name: media-ingestion-new-unit-persistence
paths: >-
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_persistence_*.py
- name: media-ingestion-new-unit-processing
paths: >-
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_plaintext_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_playlist_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_process_batch_media_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_process_document_like_item_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_transcription_models_endpoint.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_utils_time_conversion.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_video_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_visual_ingestion.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_xml_ingestion.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_youtube_audio_downloads.py
- name: media-ingestion-modification
paths: >-
tldw_Server_API/tests/Media_Ingestion_Modification
- name: media-legacy-free
paths: >-
tldw_Server_API/tests/Media
tldw_Server_API/tests/MediaIngestion_NEW
- name: chat-character-legacy-core
paths: >-
tldw_Server_API/tests/Character_Chat/test_character_chat_endpoints.py
tldw_Server_API/tests/Character_Chat/test_chat_dictionary_legacy.py
tldw_Server_API/tests/Character_Chat/test_chat_settings_endpoints.py
tldw_Server_API/tests/Character_Chat/test_complete_v2_streaming_e2e_mock.py
tldw_Server_API/tests/Character_Chat/test_complete_v2_streaming_unified_flag_monkeypatched.py
tldw_Server_API/tests/Character_Chat/test_complete_v2_streaming_with_mock_openai.py
tldw_Server_API/tests/Character_Chat/test_complete_v2_with_mock_openai.py
tldw_Server_API/tests/Character_Chat/test_completions_tool_messages_and_metadata.py
tldw_Server_API/tests/Character_Chat/test_export_includes_tools_and_metadata.py
tldw_Server_API/tests/Character_Chat/test_legacy_complete_deprecation.py
tldw_Server_API/tests/Character_Chat/test_messages_tool_calls_exposure.py
tldw_Server_API/tests/Character_Chat/test_persona_dialogue_tree_character_eval.py
- name: chat-character-legacy-files
paths: >-
tldw_Server_API/tests/Character_Chat/test_file_mime_detection.py
tldw_Server_API/tests/Character_Chat/test_rate_limits_specific.py
- name: chat-character-legacy-worldbook
paths: >-
tldw_Server_API/tests/Character_Chat/test_world_book_and_limits.py
tldw_Server_API/tests/Character_Chat/test_world_book_manager_legacy.py
tldw_Server_API/tests/Character_Chat/test_world_book_negatives.py
tldw_Server_API/tests/Character_Chat/test_world_book_negatives_and_new_endpoint.py
tldw_Server_API/tests/Character_Chat/test_world_book_prompt_context.py
tldw_Server_API/tests/Character_Chat/unit/test_chat_session_character_scope_api.py
- name: chat-character-db-core
paths: >-
tldw_Server_API/tests/Characters/test_ccv3_parser.py
tldw_Server_API/tests/Characters/test_chacha_postgres_sync_log_entity_column.py
tldw_Server_API/tests/Characters/test_character_chat_greetings_api.py
tldw_Server_API/tests/Characters/test_character_chat_lib.py
tldw_Server_API/tests/Characters/test_character_functionality_db.py
tldw_Server_API/tests/Characters/test_characters_world_book_permissions_unit.py
- name: chat-character-db-api
paths: >-
tldw_Server_API/tests/Characters/test_characters_endpoint.py
- name: chat-character-unit-core
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/test_utils.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_cards_fts_bootstrap.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_chat_default_provider.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_chat_manager.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_generation_presets.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_memory.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_prompt_presets.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_templates.py
- name: chat-character-unit-chat
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_completion_precheck.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_dictionary_estimate_tokens_shim_removed.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_dictionary_unit.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_grammar_unit.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_session_create_schema.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_session_error_mapping.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_settings_merge.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_group_chat_scope_resolution.py
- name: chat-character-unit-persona
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/unit/test_persona_exemplar_embeddings.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_persona_exemplar_selector.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_persona_exemplar_telemetry.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_png_export.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_postgres_backends.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_stream_persist_lookup.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_world_book_appendable.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_world_book_estimate_tokens_shim_removed.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_world_book_manager.py
- name: chat-character-unit-prd
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/unit/test_prd_round2_endpoints.py
- name: chat-character-property
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/property
- name: chat-character-integration-api
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/integration/test_character_api.py
tldw_Server_API/tests/Character_Chat_NEW/integration/test_character_exemplars_api.py
tldw_Server_API/tests/Character_Chat_NEW/integration/test_character_memory_endpoint.py
- name: chat-character-integration-chat
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/integration/test_character_chat_auto_routing.py
tldw_Server_API/tests/Character_Chat_NEW/integration/test_character_chat_stream_and_persist.py
- name: chat-character-integration-context
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/integration/test_conversation_context_primitives.py
tldw_Server_API/tests/Character_Chat_NEW/integration/test_role_normalization_and_search.py
- name: chat-legacy-integration
paths: >-
tldw_Server_API/tests/Chat/test*.py
tldw_Server_API/tests/Chat/integration
- name: chat-legacy-unit-a-l
paths: >-
tldw_Server_API/tests/Chat/unit/test_[a-l]*.py
- name: chat-legacy-unit-m-z
paths: >-
tldw_Server_API/tests/Chat/unit/test_[m-z]*.py
- name: chat-new-integration-property
paths: >-
tldw_Server_API/tests/Chat_NEW/integration
tldw_Server_API/tests/Chat_NEW/property
- name: chat-new-unit-a-l
paths: >-
tldw_Server_API/tests/Chat_NEW/unit/test_[a-l]*.py
- name: chat-new-unit-m-z
paths: >-
tldw_Server_API/tests/Chat_NEW/unit/test_[m-z]*.py
- name: chatbooks-streaming
paths: >-
tldw_Server_API/tests/Chatbooks
tldw_Server_API/tests/Explainer
tldw_Server_API/tests/Streaming
- name: explainer-core
paths: >-
tldw_Server_API/tests/Explainer
- name: llm-adapters-unit
paths: >-
tldw_Server_API/tests/LLM_Adapters/unit
tldw_Server_API/tests/LLM_Adapters/benchmarks
- name: llm-adapters-chat-endpoint
paths: >-
tldw_Server_API/tests/LLM_Adapters/integration/test_adapters_chat_endpoint.py
tldw_Server_API/tests/LLM_Adapters/integration/test_adapters_chat_endpoint_anthropic_native.py
- name: llm-adapters-chat-errors-core
paths: >-
tldw_Server_API/tests/LLM_Adapters/integration/test_adapters_chat_endpoint_error_sse_core_providers.py
- name: llm-adapters-chat-errors-extra
paths: >-
tldw_Server_API/tests/LLM_Adapters/integration/test_adapters_chat_endpoint_error_sse_google_mistral.py
tldw_Server_API/tests/LLM_Adapters/integration/test_adapters_chat_endpoint_midstream_error_all.py
- name: llm-adapters-orchestrator-core
paths: >-
tldw_Server_API/tests/LLM_Adapters/integration/test_async_adapters_orchestrator.py
tldw_Server_API/tests/LLM_Adapters/integration/test_async_adapters_orchestrator_anthropic_native.py
tldw_Server_API/tests/LLM_Adapters/integration/test_async_adapters_orchestrator_google_mistral.py
- name: llm-adapters-orchestrator-extra
paths: >-
tldw_Server_API/tests/LLM_Adapters/integration/test_async_adapters_orchestrator_groq_openrouter_native.py
tldw_Server_API/tests/LLM_Adapters/integration/test_async_adapters_orchestrator_stage3.py
tldw_Server_API/tests/LLM_Adapters/integration/test_async_adapters_streaming_error_all.py
tldw_Server_API/tests/LLM_Adapters/integration/test_async_bedrock_adapter.py
tldw_Server_API/tests/LLM_Adapters/integration/test_tool_choice_json_mode_endpoint.py
- name: llm-calls-core
paths: >-
tldw_Server_API/tests/LLM_Calls/test_*.py
- name: llm-calls-property
paths: >-
tldw_Server_API/tests/LLM_Calls/property
- name: llm-local-runtime
paths: >-
tldw_Server_API/tests/LLM_Local
- name: llm-local-backends
paths: >-
tldw_Server_API/tests/LLamaCpp
tldw_Server_API/tests/Local_LLM
- name: product-claims-core
paths: >-
tldw_Server_API/tests/Claims/test_claim_cluster_upsert_idempotency.py
tldw_Server_API/tests/Claims/test_claim_embeddings_chroma.py
tldw_Server_API/tests/Claims/test_claim_review_rule_assignment.py
tldw_Server_API/tests/Claims/test_claims_alerts_*.py
tldw_Server_API/tests/Claims/test_claims_alignment.py
tldw_Server_API/tests/Claims/test_claims_analytics_exports_cleanup.py
tldw_Server_API/tests/Claims/test_claims_api_strict_parse_mode.py
tldw_Server_API/tests/Claims/test_claims_budget_guard.py
tldw_Server_API/tests/Claims/test_claims_cluster*.py
tldw_Server_API/tests/Claims/test_claims_compat_types.py
- name: product-claims-engine
paths: >-
tldw_Server_API/tests/Claims/test_claims_dashboard_analytics.py
tldw_Server_API/tests/Claims/test_claims_embedding_refresh_config.py
tldw_Server_API/tests/Claims/test_claims_endpoints_api.py
tldw_Server_API/tests/Claims/test_claims_engine_*.py
tldw_Server_API/tests/Claims/test_claims_extractor*.py
tldw_Server_API/tests/Claims/test_claims_items_api.py
- name: product-claims-monitoring
paths: >-
tldw_Server_API/tests/Claims/test_claims_monitoring_*.py
tldw_Server_API/tests/Claims/test_claims_output_parser.py
tldw_Server_API/tests/Claims/test_claims_prompt_validation.py
tldw_Server_API/tests/Claims/test_claims_rebuild_*.py
tldw_Server_API/tests/Claims/test_claims_response_format_contracts.py
tldw_Server_API/tests/Claims/test_claims_review_*.py
- name: product-claims-service
paths: >-
tldw_Server_API/tests/Claims/test_claims_runtime_config.py
tldw_Server_API/tests/Claims/test_claims_service_*.py
tldw_Server_API/tests/Claims/test_claims_settings_*.py
tldw_Server_API/tests/Claims/test_claims_span_alignment.py
tldw_Server_API/tests/Claims/test_claims_status_and_envelope_api.py
tldw_Server_API/tests/Claims/test_claims_utils_persistence.py
tldw_Server_API/tests/Claims/test_claims_watchlist_notifications.py
tldw_Server_API/tests/Claims/test_claims_webhook_delivery.py
tldw_Server_API/tests/Claims/test_ingestion_*.py
- name: product-collections
paths: >-
tldw_Server_API/tests/Collections
- name: product-evaluations-abtest
paths: >-
tldw_Server_API/tests/Evaluations/embeddings_abtest/test*.py
tldw_Server_API/tests/Evaluations/test_abtest_*.py
tldw_Server_API/tests/Evaluations/test_embeddings_abtest_*.py
- name: product-evaluations-core
paths: >-
tldw_Server_API/tests/Evaluations/test_benchmark_*.py
tldw_Server_API/tests/Evaluations/test_circuit_breaker.py
tldw_Server_API/tests/Evaluations/test_connection_pool.py
tldw_Server_API/tests/Evaluations/test_db_adapter.py
tldw_Server_API/tests/Evaluations/test_error_scenarios.py
tldw_Server_API/tests/Evaluations/test_eval_*.py
tldw_Server_API/tests/Evaluations/test_evaluation_*.py
tldw_Server_API/tests/Evaluations/test_evaluations_audit_adapter.py
tldw_Server_API/tests/Evaluations/test_evaluations_backend_dual.py
tldw_Server_API/tests/Evaluations/test_evaluations_core_hardening.py
tldw_Server_API/tests/Evaluations/test_evaluations_benchmarks_*.py
tldw_Server_API/tests/Evaluations/test_evaluations_crud_*.py
tldw_Server_API/tests/Evaluations/test_evaluations_datasets_*.py
tldw_Server_API/tests/Evaluations/test_evaluations_migration_cli.py
tldw_Server_API/tests/Evaluations/test_evaluations_postgres_crud.py
tldw_Server_API/tests/Evaluations/test_evaluations_rag_pipeline_*.py
tldw_Server_API/tests/Evaluations/test_evaluations_stage*.py
tldw_Server_API/tests/Evaluations/test_evaluations_unified.py
tldw_Server_API/tests/Evaluations/test_evaluations_webhooks_*.py
tldw_Server_API/tests/Evaluations/test_mineru_ocr_evaluator.py
tldw_Server_API/tests/Evaluations/test_ms_g_eval.py
tldw_Server_API/tests/Evaluations/test_ocr_metrics.py
tldw_Server_API/tests/Evaluations/test_production_features_integration.py
tldw_Server_API/tests/Evaluations/test_proposition_evaluations.py
tldw_Server_API/tests/Evaluations/test_rag_*.py
tldw_Server_API/tests/Evaluations/test_security.py
tldw_Server_API/tests/Evaluations/test_synthetic_eval_service.py
tldw_Server_API/tests/Evaluations/test_unified_evaluation_service_strict_audit.py
- name: product-evaluations-integration
paths: >-
tldw_Server_API/tests/Evaluations/integration/test*.py
tldw_Server_API/tests/Evaluations/property/test*.py
- name: product-evaluations-recipes-persona
paths: >-
tldw_Server_API/tests/Evaluations/test_persona_*.py
tldw_Server_API/tests/Evaluations/test_recipe_*.py
- name: product-evaluations-unit
paths: >-
tldw_Server_API/tests/Evaluations/unit/test_*.py
- name: product-flashcards
paths: >-
tldw_Server_API/tests/Flashcards/test*.py
- name: product-explainer
paths: >-
tldw_Server_API/tests/Explainer
- name: product-notes-persona
paths: >-
tldw_Server_API/tests/Notes
tldw_Server_API/tests/Notes_NEW
tldw_Server_API/tests/Persona
tldw_Server_API/tests/Personalization
- name: product-prompts-legacy
paths: >-
tldw_Server_API/tests/Prompt_Management
- name: product-prompts-new
paths: >-
tldw_Server_API/tests/Prompt_Management_NEW
- name: product-watchlists-a-r
paths: >-
tldw_Server_API/tests/Watchlists/test_admin_*.py
tldw_Server_API/tests/Watchlists/test_audio_*.py
tldw_Server_API/tests/Watchlists/test_companion_*.py
tldw_Server_API/tests/Watchlists/test_dedup_*.py
tldw_Server_API/tests/Watchlists/test_delivery_*.py
tldw_Server_API/tests/Watchlists/test_e2e_*.py
tldw_Server_API/tests/Watchlists/test_fetchers_*.py
tldw_Server_API/tests/Watchlists/test_filter_*.py
tldw_Server_API/tests/Watchlists/test_filters_*.py
tldw_Server_API/tests/Watchlists/test_first_*.py
tldw_Server_API/tests/Watchlists/test_full_*.py
tldw_Server_API/tests/Watchlists/test_include_*.py
tldw_Server_API/tests/Watchlists/test_job_*.py
tldw_Server_API/tests/Watchlists/test_newsletter_*.py
tldw_Server_API/tests/Watchlists/test_operational_*.py
tldw_Server_API/tests/Watchlists/test_opml_*.py
tldw_Server_API/tests/Watchlists/test_perf_*.py
tldw_Server_API/tests/Watchlists/test_pipeline_*.py
tldw_Server_API/tests/Watchlists/test_preview_*.py
tldw_Server_API/tests/Watchlists/test_rate_*.py
tldw_Server_API/tests/Watchlists/test_rss_*.py
tldw_Server_API/tests/Watchlists/test_run_*.py
tldw_Server_API/tests/Watchlists/test_runs_*.py
- name: product-watchlists-core
paths: >-
tldw_Server_API/tests/Watchlists/test_scheduler_*.py
tldw_Server_API/tests/Watchlists/test_output_enrichment_scheduler.py
tldw_Server_API/tests/Watchlists/test_site_*.py
tldw_Server_API/tests/Watchlists/test_subscriptions_*.py
tldw_Server_API/tests/Watchlists/test_template_*.py
tldw_Server_API/tests/Watchlists/test_templates_*.py
tldw_Server_API/tests/Watchlists/test_tts_*.py
tldw_Server_API/tests/Watchlists/test_watchlist_*.py
tldw_Server_API/tests/Watchlists/test_youtube_*.py
- name: product-watchlists-pipeline
paths: >-
tldw_Server_API/tests/Watchlists/test_watchlists_*.py
- name: product-workflows-adapters-core
paths: >-
tldw_Server_API/tests/Workflows/adapters/test_*.py
- name: product-workflows-step-adapters
paths: >-
tldw_Server_API/tests/Workflows/test_new_step_adapters.py
- name: product-workflows-step-registry
paths: >-
tldw_Server_API/tests/Workflows/test_step_registry_runtime_coverage.py
- name: product-workflows-step-capabilities
paths: >-
tldw_Server_API/tests/Workflows/test_workflow_step_capabilities.py
- name: product-workflows-engine
paths: >-
tldw_Server_API/tests/Workflows/test_engine_*.py
tldw_Server_API/tests/Workflows/test_dual_backend_engine.py
tldw_Server_API/tests/Workflows/test_orphan_requeue_*.py
tldw_Server_API/tests/Workflows/test_workflows_map_substeps_*.py
tldw_Server_API/tests/Workflows/test_workflow_attempt_failures.py
tldw_Server_API/tests/Workflows/test_workflow_stress.py
tldw_Server_API/tests/Workflows/test_workflows_scheduler.py
- name: product-workflows-api
paths: >-
tldw_Server_API/tests/Workflows/test_artifact_*.py
tldw_Server_API/tests/Workflows/test_events_*.py
tldw_Server_API/tests/Workflows/test_runs_*.py
tldw_Server_API/tests/Workflows/test_webhook_*.py
tldw_Server_API/tests/Workflows/test_workflow_approval_permissions.py
tldw_Server_API/tests/Workflows/test_workflow_investigation_api.py
tldw_Server_API/tests/Workflows/test_workflow_preflight_api.py
tldw_Server_API/tests/Workflows/test_workflow_templates_api.py
tldw_Server_API/tests/Workflows/test_workflows_api.py
- name: product-workflows-storage
paths: >-
tldw_Server_API/tests/Workflows/test_dual_backend_workflows.py
tldw_Server_API/tests/Workflows/test_egress_policy.py
tldw_Server_API/tests/Workflows/test_mcp_tool_*.py
tldw_Server_API/tests/Workflows/test_media_ingest_*.py
tldw_Server_API/tests/Workflows/test_workflows_db*.py
tldw_Server_API/tests/Workflows/test_workflows_pg_*.py
tldw_Server_API/tests/Workflows/test_workflows_postgres_*.py
tldw_Server_API/tests/Workflows/test_workflows_tokens_cost_*.py
- name: product-workflows-runtime
paths: >-
tldw_Server_API/tests/Workflows/test_adapter_path_security.py
tldw_Server_API/tests/Workflows/test_llm_adapter.py
tldw_Server_API/tests/Workflows/test_stage3_chunkers_rag.py
tldw_Server_API/tests/Workflows/test_tts_workflow_normalization.py
tldw_Server_API/tests/Workflows/test_versions_idempotency.py
tldw_Server_API/tests/Workflows/test_workflows_artifact_gc_service.py
tldw_Server_API/tests/Workflows/test_workflows_dag_validation.py
tldw_Server_API/tests/Workflows/test_workflows_extras.py
tldw_Server_API/tests/Workflows/test_workflows_fuzz.py
tldw_Server_API/tests/Workflows/test_workflows_idempotency_ttl.py
tldw_Server_API/tests/Workflows/test_workflows_run_metadata.py
tldw_Server_API/tests/Workflows/test_workflows_truthiness_flags.py
- name: product-prompt-studio
paths: >-
tldw_Server_API/tests/prompt_studio
- name: platform-infrastructure-metrics
paths: >-
tldw_Server_API/tests/Infrastructure
tldw_Server_API/tests/Metrics
tldw_Server_API/tests/Monitoring
- name: platform-mcp-core
paths: >-
tldw_Server_API/tests/MCP
tldw_Server_API/tests/MCP_unified
- name: platform-resource-governance
paths: >-
tldw_Server_API/tests/Resource_Governance
- name: platform-services-startup
paths: >-
tldw_Server_API/tests/Services/test_startup_*.py
- name: platform-services-shutdown-lifespan
paths: >-
tldw_Server_API/tests/Services/test_shutdown_*.py
tldw_Server_API/tests/Services/test_lifespan_*.py
tldw_Server_API/tests/Services/test_worker_lifecycle_ownership_matrix.py
- name: platform-services-core
paths: >-
tldw_Server_API/tests/Services/test_admin_*.py
tldw_Server_API/tests/Services/test_app_*.py
tldw_Server_API/tests/Services/test_claims_*.py
tldw_Server_API/tests/Services/test_compatibility_*.py
tldw_Server_API/tests/Services/test_connectors_*.py
tldw_Server_API/tests/Services/test_document_*.py
tldw_Server_API/tests/Services/test_drain_*.py
tldw_Server_API/tests/Services/test_enhanced_*.py
tldw_Server_API/tests/Services/test_ephemeral_*.py
tldw_Server_API/tests/Services/test_executor_*.py
tldw_Server_API/tests/Services/test_file_*.py
tldw_Server_API/tests/Services/test_jobs_*.py
tldw_Server_API/tests/Services/test_kanban_*.py
tldw_Server_API/tests/Services/test_lifecycle_*.py
tldw_Server_API/tests/Services/test_loop_*.py
tldw_Server_API/tests/Services/test_media_*.py
tldw_Server_API/tests/Services/test_outputs_*.py
tldw_Server_API/tests/Services/test_persona_*.py
tldw_Server_API/tests/Services/test_placeholder_*.py
tldw_Server_API/tests/Services/test_service_*.py
tldw_Server_API/tests/Services/test_storage_*.py
tldw_Server_API/tests/Services/test_tts_*.py
tldw_Server_API/tests/Services/test_writing_annotation_review_jobs_worker.py
tldw_Server_API/tests/Services/test_workflows_*.py
tldw_Server_API/tests/Services/test_xml_*.py
- name: platform-services-main-routing
paths: >-
tldw_Server_API/tests/Services/test_main_claims_rebuild_startup.py
tldw_Server_API/tests/Services/test_main_lifecycle_contract.py
tldw_Server_API/tests/Services/test_main_readiness_shutdown.py
tldw_Server_API/tests/Services/test_main_router_contract.py
tldw_Server_API/tests/Services/test_openapi_contracts.py
tldw_Server_API/tests/Services/test_router_groups_contract.py
- name: platform-services-main-pollers
paths: >-
tldw_Server_API/tests/Services/test_main_shutdown_job_pollers.py
- name: platform-sandbox-admin-artifacts
paths: >-
tldw_Server_API/tests/sandbox/test_admin_*.py
tldw_Server_API/tests/sandbox/test_artifact*.py
- name: platform-sandbox-runtimes
paths: >-
tldw_Server_API/tests/sandbox/test_docker_*.py
tldw_Server_API/tests/sandbox/test_firecracker_*.py
tldw_Server_API/tests/sandbox/test_lima_*.py
tldw_Server_API/tests/sandbox/test_macos_*.py
tldw_Server_API/tests/sandbox/test_runner_*.py
tldw_Server_API/tests/sandbox/test_runtime_*.py
tldw_Server_API/tests/sandbox/test_runtimes_*.py
tldw_Server_API/tests/sandbox/test_operator_*.py
tldw_Server_API/tests/sandbox/test_seatbelt_*.py
tldw_Server_API/tests/sandbox/test_vz_*.py
- name: platform-sandbox-state-store
paths: >-
tldw_Server_API/tests/sandbox/test_acp_*.py
tldw_Server_API/tests/sandbox/test_cross_*.py
tldw_Server_API/tests/sandbox/test_execution_*.py
tldw_Server_API/tests/sandbox/test_feature_*.py
tldw_Server_API/tests/sandbox/test_glob_*.py
tldw_Server_API/tests/sandbox/test_idempotency_*.py
tldw_Server_API/tests/sandbox/test_interactive_*.py
tldw_Server_API/tests/sandbox/test_network_*.py
tldw_Server_API/tests/sandbox/test_orchestrator_*.py
tldw_Server_API/tests/sandbox/test_policy_*.py
tldw_Server_API/tests/sandbox/test_queue_*.py
tldw_Server_API/tests/sandbox/test_redis_*.py
tldw_Server_API/tests/sandbox/test_run_*.py
tldw_Server_API/tests/sandbox/test_sandbox_*.py
tldw_Server_API/tests/sandbox/test_snapshot_*.py
tldw_Server_API/tests/sandbox/test_store_*.py
tldw_Server_API/tests/sandbox/test_warm_*.py
tldw_Server_API/tests/sandbox/test_workspace_*.py
tldw_Server_API/tests/sandbox/test_worktree_*.py
- name: platform-sandbox-ws-streams
paths: >-
tldw_Server_API/tests/sandbox/test_cancel_*.py
tldw_Server_API/tests/sandbox/test_event_bridge.py
tldw_Server_API/tests/sandbox/test_session_*.py
tldw_Server_API/tests/sandbox/test_streams_*.py
tldw_Server_API/tests/sandbox/test_ws_*.py
- name: integrations
paths: >-
tldw_Server_API/tests/External_Sources
tldw_Server_API/tests/Notifications
tldw_Server_API/tests/Tools
tldw_Server_API/tests/WebScraping
tldw_Server_API/tests/Web_Scraping
tldw_Server_API/tests/integration
env:
PYTHONPATH: .
PYTEST_DISABLE_PLUGIN_AUTOLOAD: '1'
TEST_MODE: 'true'
DISABLE_HEAVY_STARTUP: '1'
PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION: python
TLDW_TEST_NO_DOCKER: '1'
WORKFLOWS_EGRESS_ALLOWLIST: "93.184.216.34,does-not-resolve.invalid,example.com"
SHARD_NAME: ${{ matrix.shard.name }}
TEST_PATHS: ${{ matrix.shard.paths }}
RESULTS_DIR: test-results-macos-latest-3.12-${{ matrix.shard.name }}
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Install FFmpeg (multi-OS)
uses: ./.github/actions/setup-ffmpeg
with:
install-ffmpeg: ${{ startsWith(matrix.shard.name, 'media-') || matrix.shard.name == 'ai-embeddings-media-validation' || matrix.shard.name == 'rag-new-unit-media-ingest' || matrix.shard.name == 'product-claims-service' || (matrix.shard.name == 'platform-services-core' || matrix.shard.name == 'platform-services-main-routing' || matrix.shard.name == 'platform-services-main-pollers') }}
install-portaudio: 'true'
- name: Setup Python and deps (with uv)
uses: ./.github/actions/setup-python-deps
with:
python-version: '3.12'
use-uv: ${{ runner.os != 'Windows' }}
enable-pip-cache: ${{ runner.os != 'Windows' }}
cache-dependency-path: |
pyproject.toml
uv.lock
extras: dev
- name: Ensure pytest-asyncio installed (OS matrix)
shell: bash
run: |
python -m pip install --upgrade pip
pip install pytest pytest-asyncio
- name: Smoke start server (single-user)
if: matrix.shard.name == 'core-server-smoke'
env:
SERVER_LABEL: smoke
AUTH_MODE: single_user
DATABASE_URL: sqlite:///./Databases/users.db
SINGLE_USER_API_KEY: "smoke-ci-key-12345"
E2E_TEST_BASE_URL: "http://127.0.0.1:8000"
PYTEST_CURRENT_TEST: "ci-smoke-cross-os-single::startup"
TEST_MODE: 'true'
DISABLE_HEAVY_STARTUP: '1'
STARTUP_TRACE: '1'
MCP_DEBUG: '1'
ULTRA_MINIMAL_APP: '1'
PRIVILEGE_METADATA_VALIDATE_ON_STARTUP: '0'
shell: bash
run: |
python tldw_Server_API/tests/scripts/server_lifecycle.py start
- name: Smoke health check (Windows, 15 min)
if: ${{ always() && matrix.shard.name == 'core-server-smoke' && runner.os == 'Windows' }}
env:
SERVER_LABEL: smoke
E2E_TEST_BASE_URL: "http://127.0.0.1:8000"
SMOKE_STARTUP_TIMEOUT_SECONDS: '900'
shell: bash
run: |
python tldw_Server_API/tests/scripts/server_lifecycle.py health-check
- name: Smoke health check (non-Windows)
if: ${{ always() && matrix.shard.name == 'core-server-smoke' && runner.os != 'Windows' }}
env:
SERVER_LABEL: smoke
E2E_TEST_BASE_URL: "http://127.0.0.1:8000"
SMOKE_STARTUP_TIMEOUT_SECONDS: '180'
shell: bash
run: |
python tldw_Server_API/tests/scripts/server_lifecycle.py health-check
- name: Smoke stop server
if: ${{ always() && matrix.shard.name == 'core-server-smoke' }}
env:
SERVER_LABEL: smoke
shell: bash
run: |
python tldw_Server_API/tests/scripts/server_lifecycle.py stop || true
- name: Cache embedding models
if: ${{ github.event_name != 'workflow_dispatch' && (matrix.shard.name == 'ai-chromadb' || matrix.shard.name == 'ai-chunking-core' || matrix.shard.name == 'ai-chunking-semantic-security' || startsWith(matrix.shard.name, 'vector-stores') || matrix.shard.name == 'rag-legacy' || matrix.shard.name == 'research-websearch') }}
continue-on-error: true
uses: actions/cache@v5
with:
path: models/embeddings
key: ${{ runner.os }}-embeddings-static-v1
restore-keys: |
${{ runner.os }}-embeddings-
- name: Pre-download embedding models
if: ${{ (env.RUN_MODEL_TESTS == '1' || env.RUN_REAL_HF_EMBEDDING_TESTS == '1' || env.RUN_REAL_HF_EMBEDDING_TESTS == 'true') && matrix.shard.name != 'ai-embeddings-backpressure' && matrix.shard.name != 'ai-embeddings-dlq-config' && matrix.shard.name != 'ai-embeddings-media-validation' && matrix.shard.name != 'ai-embeddings-policy' && (matrix.shard.name == 'ai-chromadb' || matrix.shard.name == 'ai-chunking-core' || matrix.shard.name == 'ai-chunking-semantic-security' || startsWith(matrix.shard.name, 'ai-embeddings-') || startsWith(matrix.shard.name, 'vector-stores') || matrix.shard.name == 'rag-legacy' || matrix.shard.name == 'research-websearch') }}
continue-on-error: true
shell: bash
run: |
python -m pip install --upgrade pip
pip install huggingface_hub
python Helper_Scripts/download_embedding_models.py --target models/embeddings --skip-defaults --model sentence-transformers/all-MiniLM-L6-v2
echo "TLDW_EMBEDDING_MODELS_DIR=models/embeddings" >> "$GITHUB_ENV"
- name: Run OS shard tests
if: matrix.shard.name != 'media-legacy-free'
shell: bash
run: |
mkdir -p "$RESULTS_DIR"
export DATABASE_URL="sqlite:///./Databases/users.db"
unset TEST_DATABASE_URL POSTGRES_TEST_DB
pytest -q --disable-warnings -p pytest_asyncio.plugin \
-m "not jobs and not e2e" \
$TEST_PATHS \
--durations=50 \
--junit-xml="$RESULTS_DIR/${{ env.SHARD_NAME }}.xml"
- name: Run legacy-free media checks
if: matrix.shard.name == 'media-legacy-free'
shell: bash
run: |
mkdir -p "$RESULTS_DIR"
export DATABASE_URL="sqlite:///./Databases/users.db"
unset TEST_DATABASE_URL POSTGRES_TEST_DB
TLDW_DISABLE_LEGACY_MEDIA=1 pytest -q --disable-warnings -p pytest_asyncio.plugin \
-m "not jobs and not e2e" \
tldw_Server_API/tests/Media \
tldw_Server_API/tests/MediaIngestion_NEW \
--durations=25 \
--junit-xml="$RESULTS_DIR/media-legacy-free.xml"
- name: Upload test results
if: always()
continue-on-error: true
uses: actions/upload-artifact@v7
with:
name: full-suite-macos-latest-py3.12-${{ matrix.shard.name }}
path: ${{ env.RESULTS_DIR }}
full-suite-macos-312-summary:
name: Full Suite (macos-latest / Python 3.12)
runs-on: ubuntu-latest
needs: [full-suite-macos-312-shards]
if: always()
steps:
- name: Check macos-latest Python 3.12 shard result
shell: bash
run: |
r="${{ needs['full-suite-macos-312-shards'].result }}"
if [ "$r" != "success" ] && [ "$r" != "skipped" ]; then
echo "macos-latest Python 3.12 full-suite shards finished with: $r"
exit 1
fi
echo "macos-latest Python 3.12 full-suite shards passed (or skipped via path filter)."
full-suite-windows-312-shards:
name: Full Suite shard (windows-latest / Python 3.12 / ${{ matrix.shard.name }})
runs-on: windows-latest
timeout-minutes: 60
needs: [lint, syntax-check, changes]
if: ${{ github.event_name != 'pull_request' || needs.changes.outputs.backend_changed == 'true' }}
strategy:
fail-fast: false
matrix:
shard:
- name: core-server-smoke
paths: >-
tldw_Server_API/tests/test_*.py
tldw_Server_API/tests/Health
tldw_Server_API/tests/Logging
- name: core-config
paths: >-
tldw_Server_API/tests/Config
- name: core-audit-support
paths: >-
tldw_Server_API/tests/Audit/test_audit_*.py
tldw_Server_API/tests/Audit/test_pii_pattern_groups.py
tldw_Server_API/tests/Audit/test_risk_settings_overrides.py
tldw_Server_API/tests/Audit/test_sqlite_runtime_pragmas.py
- name: core-audit-unified
paths: >-
tldw_Server_API/tests/Audit/test_unified_audit_service.py
- name: core-security
paths: >-
tldw_Server_API/tests/Security
- name: core-setup-usage
paths: >-
tldw_Server_API/tests/Setup
tldw_Server_API/tests/Usage
- name: core-utils-tooling
paths: >-
tldw_Server_API/tests/Helper_Scripts
tldw_Server_API/tests/Context_Integrity
tldw_Server_API/tests/Utils
tldw_Server_API/tests/helpers
tldw_Server_API/tests/http_client
tldw_Server_API/tests/lint
tldw_Server_API/tests/sanity_tests
tldw_Server_API/tests/schemas
tldw_Server_API/tests/unit
- name: admin-a-api
paths: >-
tldw_Server_API/tests/Admin/test_admin_a*.py
- name: admin-budgets
paths: >-
tldw_Server_API/tests/Admin/test_admin_budgets_*.py
- name: admin-bundle-sanitizers
paths: >-
tldw_Server_API/tests/Admin/test_admin_bundle_service_sanitizers.py
- name: admin-bundle-ops
paths: >-
tldw_Server_API/tests/Admin/test_bundle_ops.py
- name: admin-byok-core
paths: >-
tldw_Server_API/tests/Admin/test_admin_byok_service_sanitizers.py
- name: admin-byok-validation
paths: >-
tldw_Server_API/tests/Admin/test_admin_byok_validation_*.py
tldw_Server_API/tests/Admin/test_byok_*.py
- name: admin-backup-api
paths: >-
tldw_Server_API/tests/Admin/test_backup_schedules_api.py
- name: admin-backup-core
paths: >-
tldw_Server_API/tests/Admin/test_admin_backup_*.py
tldw_Server_API/tests/Admin/test_backup_schedules_repo.py
- name: admin-conflicts-data-admin
paths: >-
tldw_Server_API/tests/Admin/test_admin_c*.py
tldw_Server_API/tests/Admin/test_admin_data_*.py
- name: admin-data-ops
paths: >-
tldw_Server_API/tests/Admin/test_data_ops.py
- name: admin-data-subject-api
paths: >-
tldw_Server_API/tests/Admin/test_data_subject_requests_api.py
- name: admin-data-subject-repo-dsr
paths: >-
tldw_Server_API/tests/Admin/test_data_subject_requests_repo.py
tldw_Server_API/tests/Admin/test_dsr_*.py
- name: admin-e2e-access
paths: >-
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_routes_are_unavailable_without_flag
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_routes_require_support_header
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_routes_reject_wrong_support_header
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_routes_fail_closed_without_configured_support_key
- name: admin-e2e-seed
paths: >-
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_seed_returns_stable_fixture_ids
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_seed_returns_debug_role_principals
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_seed_requires_explicit_fixture_passwords
- name: admin-e2e-single-user
paths: >-
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_seed_returns_single_user_login_key
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_single_user_api_key_can_read_users_me
- name: admin-e2e-session-dsr
paths: >-
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_reset_rejects_unsafe_backup_paths
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_bootstrap_jwt_session_returns_cookie_payload
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_dsr_seed_supports_real_preview
- name: admin-e2e-reset-backups
paths: >-
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_reset_clears_backup_schedules
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_reset_clears_monitoring_authority_state
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_run_due_backup_schedules_processes_scheduled_run
- name: admin-g-i
paths: >-
tldw_Server_API/tests/Admin/test_admin_g*.py
tldw_Server_API/tests/Admin/test_admin_i*.py
- name: admin-llm-providers
paths: >-
tldw_Server_API/tests/Admin/test_admin_llm_providers_*.py
- name: admin-incidents
paths: >-
tldw_Server_API/tests/Admin/test_incidents_*.py
- name: admin-llm-usage
paths: >-
tldw_Server_API/tests/Admin/test_llm_usage_endpoints.py
- name: admin-maintenance-misc
paths: >-
tldw_Server_API/tests/Admin/test_admin_maintenance_*.py
tldw_Server_API/tests/Admin/test_admin_misc_endpoints.py
tldw_Server_API/tests/Admin/test_maintenance_*.py
- name: admin-monitoring
paths: >-
tldw_Server_API/tests/Admin/test_admin_monitoring_*.py
tldw_Server_API/tests/Admin/test_monitoring_*.py
- name: admin-ops-dependencies
paths: >-
tldw_Server_API/tests/Admin/test_admin_ops_dependencies.py
- name: admin-ops-endpoints
paths: >-
tldw_Server_API/tests/Admin/test_admin_ops_new_endpoints.py
- name: admin-ops-webhooks-orgs
paths: >-
tldw_Server_API/tests/Admin/test_admin_ops_webhooks_reports.py
tldw_Server_API/tests/Admin/test_admin_orgs_*.py
- name: admin-profiles-rate-registration
paths: >-
tldw_Server_API/tests/Admin/test_admin_profiles_*.py
tldw_Server_API/tests/Admin/test_admin_rate_limits_*.py
tldw_Server_API/tests/Admin/test_admin_registration_*.py
- name: admin-pricing-retention-roles-router
paths: >-
tldw_Server_API/tests/Admin/test_pricing_reload_endpoint.py
tldw_Server_API/tests/Admin/test_retention_policy_preview_api.py
tldw_Server_API/tests/Admin/test_role_*.py
tldw_Server_API/tests/Admin/test_router_analytics_*.py
- name: admin-s-sessions-settings
paths: >-
tldw_Server_API/tests/Admin/test_admin_scope_service_enterprise_mode.py
tldw_Server_API/tests/Admin/test_admin_service_log_sanitizers.py
tldw_Server_API/tests/Admin/test_admin_sessions_*.py
tldw_Server_API/tests/Admin/test_admin_settings_service.py
tldw_Server_API/tests/Admin/test_admin_smoke.py
- name: admin-split-storage-tools
paths: >-
tldw_Server_API/tests/Admin/test_admin_split_*.py
tldw_Server_API/tests/Admin/test_admin_storage_quotas.py
tldw_Server_API/tests/Admin/test_admin_system_ops_service.py
tldw_Server_API/tests/Admin/test_admin_t*.py
- name: admin-users
paths: >-
tldw_Server_API/tests/Admin/test_admin_u*.py
- name: admin-watchlists-webhooks
paths: >-
tldw_Server_API/tests/Admin/test_admin_w*.py
- name: admin-system-usage
paths: >-
tldw_Server_API/tests/Admin/test_system_ops.py
tldw_Server_API/tests/Admin/test_usage_reporting*.py
- name: auth-integration-admin-auth
paths: >-
tldw_Server_API/tests/AuthNZ/integration/test_admin_*.py
tldw_Server_API/tests/AuthNZ/integration/test_api_key_*.py
tldw_Server_API/tests/AuthNZ/integration/test_auth_*.py
- name: auth-integration-authnz
paths: >-
tldw_Server_API/tests/AuthNZ/integration/test_authnz_*.py
- name: auth-integration-b-z
paths: >-
tldw_Server_API/tests/AuthNZ/integration/test_[b-z]*.py
- name: auth-postgres
paths: >-
tldw_Server_API/tests/AuthNZ_Postgres
- name: auth-core-root-property
paths: >-
tldw_Server_API/tests/AuthNZ/test*.py
tldw_Server_API/tests/AuthNZ/property/test*.py
- name: auth-core-unit-a-l
paths: >-
tldw_Server_API/tests/AuthNZ/unit/test_[a-l]*.py
- name: auth-core-unit-m-z
paths: >-
tldw_Server_API/tests/AuthNZ/unit/test_[m-z]*.py
- name: auth-sqlite
paths: >-
tldw_Server_API/tests/AuthNZ_SQLite
- name: auth-unit-a-l
paths: >-
tldw_Server_API/tests/AuthNZ_Unit/test_[a-l]*.py
- name: auth-unit-m-z
paths: >-
tldw_Server_API/tests/AuthNZ_Unit/test_[m-z]*.py
- name: chacha-core-stores
paths: >-
tldw_Server_API/tests/ChaChaNotesDB/test_chacha_*.py
tldw_Server_API/tests/ChaChaNotesDB/test_chachanotes_db.py
- name: chacha-character-conversation
paths: >-
tldw_Server_API/tests/ChaChaNotesDB/test_character_*.py
tldw_Server_API/tests/ChaChaNotesDB/test_conversation_*.py
- name: chacha-content-persona
paths: >-
tldw_Server_API/tests/ChaChaNotesDB/test_flashcard*.py
tldw_Server_API/tests/ChaChaNotesDB/test_note_*.py
tldw_Server_API/tests/ChaChaNotesDB/test_order_by_validation.py
tldw_Server_API/tests/ChaChaNotesDB/test_persona_*.py
tldw_Server_API/tests/ChaChaNotesDB/test_quizzes_basic.py
tldw_Server_API/tests/ChaChaNotesDB/test_web_clipper_db.py
tldw_Server_API/tests/ChaChaNotesDB/test_workspace_assistant_defaults_db.py
tldw_Server_API/tests/ChaChaNotesDB/test_workspace_resource_memberships_db.py
tldw_Server_API/tests/ChaChaNotesDB/test_workspace_sub_resources_db.py
tldw_Server_API/tests/ChaChaNotesDB/test_writing_playground_db.py
- name: db-privileges
paths: >-
tldw_Server_API/tests/DB
tldw_Server_API/tests/DB_Management
tldw_Server_API/tests/MediaDB2
tldw_Server_API/tests/PrivilegeCatalog
tldw_Server_API/tests/Privileges
- name: ai-chromadb
paths: >-
tldw_Server_API/tests/ChromaDB
- name: ai-chunking-core
paths: >-
tldw_Server_API/tests/Chunking/test_async_*.py
tldw_Server_API/tests/Chunking/test_auto_*.py
tldw_Server_API/tests/Chunking/test_chunker_*.py
tldw_Server_API/tests/Chunking/test_process_text_components.py
tldw_Server_API/tests/Chunking/test_process_text_refactor_equivalence.py
tldw_Server_API/tests/Chunking/test_chunking_endpoint.py
tldw_Server_API/tests/Chunking/test_chunking_offsets_property.py
tldw_Server_API/tests/Chunking/test_chunking_overlap_properties.py
tldw_Server_API/tests/Chunking/test_chunking_regressions.py
tldw_Server_API/tests/Chunking/test_chunking_template_endpoint_errors.py
- name: ai-chunking-templates
paths: >-
tldw_Server_API/tests/Chunking/test_chunking_templates.py::TestDatabaseOperations
tldw_Server_API/tests/Chunking/test_chunking_templates.py::TestTemplateInitialization
tldw_Server_API/tests/Chunking/test_chunking_templates.py::TestTemplateProcessing
tldw_Server_API/tests/Chunking/test_chunking_templates_endpoint_sanitization.py
tldw_Server_API/tests/Chunking/test_chunking_templates_validate_schema.py
tldw_Server_API/tests/Chunking/test_template_*.py
- name: ai-chunking-templates-api
paths: >-
tldw_Server_API/tests/Chunking/test_chunking_templates.py::TestAPIEndpoints
- name: ai-chunking-templates-integration
paths: >-
tldw_Server_API/tests/Chunking/test_chunking_templates.py::TestIntegration
- name: ai-chunking-code-json-xml
paths: >-
tldw_Server_API/tests/Chunking/test_code_chunking_regressions.py
tldw_Server_API/tests/Chunking/test_json_*.py
tldw_Server_API/tests/Chunking/test_xml_*.py
- name: ai-chunking-semantic-security
paths: >-
tldw_Server_API/tests/Chunking/test_hierarchical_*.py
tldw_Server_API/tests/Chunking/test_offsets_additional.py
tldw_Server_API/tests/Chunking/test_option_aliases.py
tldw_Server_API/tests/Chunking/test_overlap_clamp.py
tldw_Server_API/tests/Chunking/test_phase3_3_sanitizers.py
tldw_Server_API/tests/Chunking/test_propositions_strategy.py
tldw_Server_API/tests/Chunking/test_security*.py
tldw_Server_API/tests/Chunking/test_semantic_*.py
tldw_Server_API/tests/Chunking/test_sentence_spans_properties.py
tldw_Server_API/tests/Chunking/test_streaming_overlap.py
tldw_Server_API/tests/Chunking/test_thai_tables_spans.py
tldw_Server_API/tests/Chunking/test_thread_safety.py
tldw_Server_API/tests/Chunking/test_tokens_offsets.py
tldw_Server_API/tests/Chunking/unit/test_tokens_fallback_offsets.py
- name: ai-embeddings-async
paths: >-
tldw_Server_API/tests/Embeddings/test_async_*.py
- name: ai-embeddings-backpressure
paths: >-
tldw_Server_API/tests/Embeddings/test_backpressure*.py
tldw_Server_API/tests/Embeddings/test_batch_rate_headers.py
- name: ai-embeddings-chromadb-core
paths: >-
tldw_Server_API/tests/Embeddings/test_chromadb_*.py
- name: ai-embeddings-core
paths: >-
tldw_Server_API/tests/Embeddings/test_chunk_metadata_backfill.py
tldw_Server_API/tests/Embeddings/test_circuit_breaker_*.py
tldw_Server_API/tests/Embeddings/test_compactor_admin_endpoint.py
tldw_Server_API/tests/Embeddings/test_connection_pool_failure_accounting.py
tldw_Server_API/tests/Embeddings/test_contextual_chunking.py
- name: ai-embeddings-dlq-config
paths: >-
tldw_Server_API/tests/Embeddings/test_delete_by_filter_endpoint.py
tldw_Server_API/tests/Embeddings/test_dlq_*.py
tldw_Server_API/tests/Embeddings/test_embedding_*.py
tldw_Server_API/tests/Embeddings/test_embeddings_audit_adapter.py
tldw_Server_API/tests/Embeddings/test_embeddings_batch_dimensions.py
tldw_Server_API/tests/Embeddings/test_embeddings_dimensions_policy.py
tldw_Server_API/tests/Embeddings/test_embeddings_endpoint_cache_identity.py
tldw_Server_API/tests/Embeddings/test_embeddings_fallback*.py
- name: ai-embeddings-jobs-runtime
paths: >-
tldw_Server_API/tests/Embeddings/test_embeddings_jobs*.py
tldw_Server_API/tests/Embeddings/test_embeddings_local_api.py
tldw_Server_API/tests/Embeddings/test_embeddings_loop_scoping.py
tldw_Server_API/tests/Embeddings/test_embeddings_memory*.py
tldw_Server_API/tests/Embeddings/test_embeddings_metric*.py
tldw_Server_API/tests/Embeddings/test_embeddings_model_management.py
tldw_Server_API/tests/Embeddings/test_embeddings_optional_deps_import.py
tldw_Server_API/tests/Embeddings/test_embeddings_redis*.py
tldw_Server_API/tests/Embeddings/test_embeddings_rg_sync_helper.py
tldw_Server_API/tests/Embeddings/test_embeddings_test_mode_truthiness.py
tldw_Server_API/tests/Embeddings/test_embeddings_token_arrays.py
tldw_Server_API/tests/Embeddings/test_embeddings_unsupported_provider.py
- name: ai-embeddings-policy
paths: >-
tldw_Server_API/tests/Embeddings/test_embeddings_policy*.py
tldw_Server_API/tests/Embeddings/test_l2_normalization_policy.py
- name: ai-embeddings-v5-core
paths: >-
tldw_Server_API/tests/Embeddings/test_embeddings_v5_production.py
tldw_Server_API/tests/Embeddings/test_embeddings_v5_property.py
tldw_Server_API/tests/Embeddings/test_embeddings_v5_unit.py
- name: ai-embeddings-v5-integration
paths: >-
tldw_Server_API/tests/Embeddings/test_embeddings_v5_integration.py
- name: ai-embeddings-hyde-ledger
paths: >-
tldw_Server_API/tests/Embeddings/test_hyde_backfill_cli.py
tldw_Server_API/tests/Embeddings/test_ledger_status_endpoint.py
- name: ai-embeddings-media-validation
paths: >-
tldw_Server_API/tests/Embeddings/test_media_*.py
tldw_Server_API/tests/Embeddings/test_message_validator*.py
- name: ai-embeddings-observability
paths: >-
tldw_Server_API/tests/Embeddings/test_metrics*.py
tldw_Server_API/tests/Embeddings/test_model_eviction_in_use_guard.py
tldw_Server_API/tests/Embeddings/test_multi_tier_cache_sync_async_loop.py
tldw_Server_API/tests/Embeddings/test_embeddings_orchestrator*.py
tldw_Server_API/tests/Embeddings/test_orchestrator*.py
tldw_Server_API/tests/Embeddings/test_pgvector*.py
tldw_Server_API/tests/Embeddings/test_priority_bump_endpoint.py
tldw_Server_API/tests/Embeddings/test_redis_integration_smoke.py
tldw_Server_API/tests/Embeddings/test_reembed_schedule_endpoint.py
tldw_Server_API/tests/Embeddings/test_request*.py
tldw_Server_API/tests/Embeddings/test_schema_drift.py
tldw_Server_API/tests/Embeddings/test_stage_controls.py
tldw_Server_API/tests/Embeddings/test_storage_idempotency_property.py
tldw_Server_API/tests/Embeddings/test_trace_headers.py
tldw_Server_API/tests/Embeddings/test_vector*.py
- name: vector-stores-integration
paths: >-
tldw_Server_API/tests/VectorStores/integration
- name: vector-stores-api
paths: >-
tldw_Server_API/tests/VectorStores/test*.py
- name: vector-stores-unit
paths: >-
tldw_Server_API/tests/VectorStores/unit
- name: paper-search
paths: >-
tldw_Server_API/tests/PaperSearch
- name: rag-legacy
paths: >-
tldw_Server_API/tests/RAG
- name: rag-new-integration-core
paths: >-
tldw_Server_API/tests/RAG_NEW/integration/test_adapter_guards.py
tldw_Server_API/tests/RAG_NEW/integration/test_bm25_weights.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_capabilities_styles.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_health_endpoints.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_integration.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_request_contract_parity.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_source_health_endpoint.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_stream_parity.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_strict_extractive_nli_api.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_unified_features_endpoint.py
- name: rag-new-integration-agentic
paths: >-
tldw_Server_API/tests/RAG_NEW/integration/test_rag_agentic_api.py
tldw_Server_API/tests/RAG_NEW/integration/test_research_agent_loop.py
- name: rag-new-integration-batch
paths: >-
tldw_Server_API/tests/RAG_NEW/integration/test_rag_batch_checkpoint_api.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_batch_resume_api.py
- name: rag-new-integration-research
paths: >-
tldw_Server_API/tests/RAG_NEW/integration/test_rag_ablate_api.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_benchmarks_ablation.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_doc_researcher_api.py
tldw_Server_API/tests/RAG_NEW/integration/test_retriever_pgvector_multi_search.py
- name: rag-new-property-core
paths: >-
tldw_Server_API/tests/RAG_NEW/property/test_*.py
tldw_Server_API/tests/RAG_NEW/test_*.py
- name: rag-new-unit-agentic
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_advanced_agentic_cache.py
tldw_Server_API/tests/RAG_NEW/unit/test_agentic*.py
tldw_Server_API/tests/RAG_NEW/unit/test_research_agent.py
- name: rag-new-unit-cache-vector
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_cache_invalidation_core.py
tldw_Server_API/tests/RAG_NEW/unit/test_chromadb*.py
tldw_Server_API/tests/RAG_NEW/unit/test_embedding_cache_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_pgvector_adapter_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_rewrite_cache.py
tldw_Server_API/tests/RAG_NEW/unit/test_semantic_cache*.py
tldw_Server_API/tests/RAG_NEW/unit/test_vector*.py
- name: rag-new-unit-pipeline
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_advanced_reranking_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_advanced_retrieval_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_flashrank_reranker_init.py
tldw_Server_API/tests/RAG_NEW/unit/test_functional_pipeline.py
tldw_Server_API/tests/RAG_NEW/unit/test_generation*.py
tldw_Server_API/tests/RAG_NEW/unit/test_hyde*.py
tldw_Server_API/tests/RAG_NEW/unit/test_kanban_retriever.py
tldw_Server_API/tests/RAG_NEW/unit/test_learned_fusion_simple.py
tldw_Server_API/tests/RAG_NEW/unit/test_llamacpp_reranker_topk_full_input.py
tldw_Server_API/tests/RAG_NEW/unit/test_pipeline*.py
tldw_Server_API/tests/RAG_NEW/unit/test_post*.py
tldw_Server_API/tests/RAG_NEW/unit/test_pre_retrieval*.py
tldw_Server_API/tests/RAG_NEW/unit/test_query*.py
tldw_Server_API/tests/RAG_NEW/unit/test_request*.py
tldw_Server_API/tests/RAG_NEW/unit/test_response_writer.py
tldw_Server_API/tests/RAG_NEW/unit/test_retrieval*.py
tldw_Server_API/tests/RAG_NEW/unit/test_reranker*.py
tldw_Server_API/tests/RAG_NEW/unit/test_streaming_executor.py
tldw_Server_API/tests/RAG_NEW/unit/test_two_tier_reranker.py
- name: rag-new-unit-unified-pipeline
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_unified_pipeline*.py
- name: rag-new-unit-rag-contracts
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_rag*.py
- name: rag-new-unit-guardrails-source
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_citations_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_guardrails*.py
tldw_Server_API/tests/RAG_NEW/unit/test_path_validation_security.py
tldw_Server_API/tests/RAG_NEW/unit/test_payload_exemplars*.py
tldw_Server_API/tests/RAG_NEW/unit/test_security_filters_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_source*.py
tldw_Server_API/tests/RAG_NEW/unit/test_strict_extractive_and_citations.py
- name: rag-new-unit-media-ingest
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_block_to_chunks.py
tldw_Server_API/tests/RAG_NEW/unit/test_chunk_fts_integration.py
tldw_Server_API/tests/RAG_NEW/unit/test_document_processing_integration_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_enhanced_chunking_integration_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_ingest_dedupe_and_chunk_ids.py
tldw_Server_API/tests/RAG_NEW/unit/test_media*.py
tldw_Server_API/tests/RAG_NEW/unit/test_structure_index.py
tldw_Server_API/tests/RAG_NEW/unit/test_temporal_filters.py
- name: rag-new-unit-core-misc
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_analytics_db_dev_reconciliation.py
tldw_Server_API/tests/RAG_NEW/unit/test_batch*.py
tldw_Server_API/tests/RAG_NEW/unit/test_clarification_gate.py
tldw_Server_API/tests/RAG_NEW/unit/test_corpus_synonyms_expansion.py
tldw_Server_API/tests/RAG_NEW/unit/test_evidence_chains_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_feedback_learning.py
tldw_Server_API/tests/RAG_NEW/unit/test_fts_query_translation_edge_cases.py
tldw_Server_API/tests/RAG_NEW/unit/test_knowledge_source_retrieval_coverage.py
tldw_Server_API/tests/RAG_NEW/unit/test_phase_metrics.py
tldw_Server_API/tests/RAG_NEW/unit/test_prompt_templates_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_quick_wins_spell_check_compat.py
tldw_Server_API/tests/RAG_NEW/unit/test_schema_corpus_alias.py
tldw_Server_API/tests/RAG_NEW/unit/test_standard_core_contract_threading.py
tldw_Server_API/tests/RAG_NEW/unit/test_suggestion_generator.py
tldw_Server_API/tests/RAG_NEW/unit/test_synonyms_registry_logging.py
- name: research-websearch
paths: >-
tldw_Server_API/tests/Research
tldw_Server_API/tests/WebSearch
- name: media-audio
paths: >-
tldw_Server_API/tests/Audio
tldw_Server_API/tests/Audio_Studio
tldw_Server_API/tests/AudioJobs
tldw_Server_API/tests/STT
tldw_Server_API/tests/TTS
tldw_Server_API/tests/TTS_NEW
tldw_Server_API/tests/VLM
- name: media-core-documents
paths: >-
tldw_Server_API/tests/Media/test_document*.py
tldw_Server_API/tests/Media/test_pdf_text_normalization.py
- name: media-core-api
paths: >-
tldw_Server_API/tests/Media/test_archive_member_cap.py
tldw_Server_API/tests/Media/test_auto_chunking_process_endpoints.py
tldw_Server_API/tests/Media/test_cache_index.py
tldw_Server_API/tests/Media/test_ingest_web_content_endpoint_sanitization.py
tldw_Server_API/tests/Media/test_json_*.py
tldw_Server_API/tests/Media/test_media_*.py
tldw_Server_API/tests/Media/test_navigation_policy_contract.py
tldw_Server_API/tests/Media/test_process_code_and_uploads.py
tldw_Server_API/tests/Media/test_upload_sink_security.py
tldw_Server_API/tests/Media/unit
- name: media-ingestion-new-ocr
paths: >-
tldw_Server_API/tests/MediaIngestion_NEW/test_*.py
- name: media-ingestion-new-integration
paths: >-
tldw_Server_API/tests/MediaIngestion_NEW/integration
- name: media-ingestion-new-unit-core
paths: >-
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_archive_and_sanitization.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_audio_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_auto_chunking_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_book_zip_safe_extract.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_book_processing_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_ebook_safe_paths.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_email_endpoint_error_mapping.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_file_validation.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_filename_and_mime_and_archive.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_ingest_jobs_batch_lookup.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_media_add_deps_error_mapping.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_media_canonical_helpers.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_media_ingest*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_media_list_no_slash_redirect.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_media_upload_failures.py
- name: media-ingestion-new-unit-mediawiki
paths: >-
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_mediawiki_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_ms_g_eval_validation.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_pdf_analysis_regressions.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_pdf_safe_paths.py
- name: media-ingestion-new-unit-persistence
paths: >-
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_persistence_*.py
- name: media-ingestion-new-unit-processing
paths: >-
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_plaintext_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_playlist_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_process_batch_media_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_process_document_like_item_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_transcription_models_endpoint.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_utils_time_conversion.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_video_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_visual_ingestion.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_xml_ingestion.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_youtube_audio_downloads.py
- name: media-ingestion-modification
paths: >-
tldw_Server_API/tests/Media_Ingestion_Modification
- name: media-legacy-free
paths: >-
tldw_Server_API/tests/Media
tldw_Server_API/tests/MediaIngestion_NEW
- name: chat-character-legacy-core
paths: >-
tldw_Server_API/tests/Character_Chat/test_character_chat_endpoints.py
tldw_Server_API/tests/Character_Chat/test_chat_dictionary_legacy.py
tldw_Server_API/tests/Character_Chat/test_chat_settings_endpoints.py
tldw_Server_API/tests/Character_Chat/test_complete_v2_streaming_e2e_mock.py
tldw_Server_API/tests/Character_Chat/test_complete_v2_streaming_unified_flag_monkeypatched.py
tldw_Server_API/tests/Character_Chat/test_complete_v2_streaming_with_mock_openai.py
tldw_Server_API/tests/Character_Chat/test_complete_v2_with_mock_openai.py
tldw_Server_API/tests/Character_Chat/test_completions_tool_messages_and_metadata.py
tldw_Server_API/tests/Character_Chat/test_export_includes_tools_and_metadata.py
tldw_Server_API/tests/Character_Chat/test_legacy_complete_deprecation.py
tldw_Server_API/tests/Character_Chat/test_messages_tool_calls_exposure.py
tldw_Server_API/tests/Character_Chat/test_persona_dialogue_tree_character_eval.py
- name: chat-character-legacy-files
paths: >-
tldw_Server_API/tests/Character_Chat/test_file_mime_detection.py
tldw_Server_API/tests/Character_Chat/test_rate_limits_specific.py
- name: chat-character-legacy-worldbook
paths: >-
tldw_Server_API/tests/Character_Chat/test_world_book_and_limits.py
tldw_Server_API/tests/Character_Chat/test_world_book_manager_legacy.py
tldw_Server_API/tests/Character_Chat/test_world_book_negatives.py
tldw_Server_API/tests/Character_Chat/test_world_book_negatives_and_new_endpoint.py
tldw_Server_API/tests/Character_Chat/test_world_book_prompt_context.py
tldw_Server_API/tests/Character_Chat/unit/test_chat_session_character_scope_api.py
- name: chat-character-db-core
paths: >-
tldw_Server_API/tests/Characters/test_ccv3_parser.py
tldw_Server_API/tests/Characters/test_chacha_postgres_sync_log_entity_column.py
tldw_Server_API/tests/Characters/test_character_chat_greetings_api.py
tldw_Server_API/tests/Characters/test_character_chat_lib.py
tldw_Server_API/tests/Characters/test_character_functionality_db.py
tldw_Server_API/tests/Characters/test_characters_world_book_permissions_unit.py
- name: chat-character-db-api
paths: >-
tldw_Server_API/tests/Characters/test_characters_endpoint.py
- name: chat-character-unit-core
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/test_utils.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_cards_fts_bootstrap.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_chat_default_provider.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_chat_manager.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_generation_presets.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_memory.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_prompt_presets.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_templates.py
- name: chat-character-unit-chat
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_completion_precheck.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_dictionary_estimate_tokens_shim_removed.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_dictionary_unit.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_grammar_unit.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_session_create_schema.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_session_error_mapping.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_settings_merge.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_group_chat_scope_resolution.py
- name: chat-character-unit-persona
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/unit/test_persona_exemplar_embeddings.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_persona_exemplar_selector.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_persona_exemplar_telemetry.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_png_export.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_postgres_backends.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_stream_persist_lookup.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_world_book_appendable.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_world_book_estimate_tokens_shim_removed.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_world_book_manager.py
- name: chat-character-unit-prd
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/unit/test_prd_round2_endpoints.py
- name: chat-character-property
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/property
- name: chat-character-integration-api
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/integration/test_character_api.py
tldw_Server_API/tests/Character_Chat_NEW/integration/test_character_exemplars_api.py
tldw_Server_API/tests/Character_Chat_NEW/integration/test_character_memory_endpoint.py
- name: chat-character-integration-chat
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/integration/test_character_chat_auto_routing.py
tldw_Server_API/tests/Character_Chat_NEW/integration/test_character_chat_stream_and_persist.py
- name: chat-character-integration-context
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/integration/test_conversation_context_primitives.py
tldw_Server_API/tests/Character_Chat_NEW/integration/test_role_normalization_and_search.py
- name: chat-legacy-integration
paths: >-
tldw_Server_API/tests/Chat/test*.py
tldw_Server_API/tests/Chat/integration
- name: chat-legacy-unit-a-l
paths: >-
tldw_Server_API/tests/Chat/unit/test_[a-l]*.py
- name: chat-legacy-unit-m-z
paths: >-
tldw_Server_API/tests/Chat/unit/test_[m-z]*.py
- name: chat-new-integration-property
paths: >-
tldw_Server_API/tests/Chat_NEW/integration
tldw_Server_API/tests/Chat_NEW/property
- name: chat-new-unit-a-l
paths: >-
tldw_Server_API/tests/Chat_NEW/unit/test_[a-l]*.py
- name: chat-new-unit-m-z
paths: >-
tldw_Server_API/tests/Chat_NEW/unit/test_[m-z]*.py
- name: chatbooks-streaming
paths: >-
tldw_Server_API/tests/Chatbooks
tldw_Server_API/tests/Explainer
tldw_Server_API/tests/Streaming
- name: explainer-core
paths: >-
tldw_Server_API/tests/Explainer
- name: llm-adapters-unit
paths: >-
tldw_Server_API/tests/LLM_Adapters/unit
tldw_Server_API/tests/LLM_Adapters/benchmarks
- name: llm-adapters-chat-endpoint
paths: >-
tldw_Server_API/tests/LLM_Adapters/integration/test_adapters_chat_endpoint.py
tldw_Server_API/tests/LLM_Adapters/integration/test_adapters_chat_endpoint_anthropic_native.py
- name: llm-adapters-chat-errors-core
paths: >-
tldw_Server_API/tests/LLM_Adapters/integration/test_adapters_chat_endpoint_error_sse_core_providers.py
- name: llm-adapters-chat-errors-extra
paths: >-
tldw_Server_API/tests/LLM_Adapters/integration/test_adapters_chat_endpoint_error_sse_google_mistral.py
tldw_Server_API/tests/LLM_Adapters/integration/test_adapters_chat_endpoint_midstream_error_all.py
- name: llm-adapters-orchestrator-core
paths: >-
tldw_Server_API/tests/LLM_Adapters/integration/test_async_adapters_orchestrator.py
tldw_Server_API/tests/LLM_Adapters/integration/test_async_adapters_orchestrator_anthropic_native.py
tldw_Server_API/tests/LLM_Adapters/integration/test_async_adapters_orchestrator_google_mistral.py
- name: llm-adapters-orchestrator-extra
paths: >-
tldw_Server_API/tests/LLM_Adapters/integration/test_async_adapters_orchestrator_groq_openrouter_native.py
tldw_Server_API/tests/LLM_Adapters/integration/test_async_adapters_orchestrator_stage3.py
tldw_Server_API/tests/LLM_Adapters/integration/test_async_adapters_streaming_error_all.py
tldw_Server_API/tests/LLM_Adapters/integration/test_async_bedrock_adapter.py
tldw_Server_API/tests/LLM_Adapters/integration/test_tool_choice_json_mode_endpoint.py
- name: llm-calls-core
paths: >-
tldw_Server_API/tests/LLM_Calls/test_*.py
- name: llm-calls-property
paths: >-
tldw_Server_API/tests/LLM_Calls/property
- name: llm-local-runtime
paths: >-
tldw_Server_API/tests/LLM_Local
- name: llm-local-backends
paths: >-
tldw_Server_API/tests/LLamaCpp
tldw_Server_API/tests/Local_LLM
- name: product-claims-core
paths: >-
tldw_Server_API/tests/Claims/test_claim_cluster_upsert_idempotency.py
tldw_Server_API/tests/Claims/test_claim_embeddings_chroma.py
tldw_Server_API/tests/Claims/test_claim_review_rule_assignment.py
tldw_Server_API/tests/Claims/test_claims_alerts_*.py
tldw_Server_API/tests/Claims/test_claims_alignment.py
tldw_Server_API/tests/Claims/test_claims_analytics_exports_cleanup.py
tldw_Server_API/tests/Claims/test_claims_api_strict_parse_mode.py
tldw_Server_API/tests/Claims/test_claims_budget_guard.py
tldw_Server_API/tests/Claims/test_claims_cluster*.py
tldw_Server_API/tests/Claims/test_claims_compat_types.py
- name: product-claims-engine
paths: >-
tldw_Server_API/tests/Claims/test_claims_dashboard_analytics.py
tldw_Server_API/tests/Claims/test_claims_embedding_refresh_config.py
tldw_Server_API/tests/Claims/test_claims_endpoints_api.py
tldw_Server_API/tests/Claims/test_claims_engine_*.py
tldw_Server_API/tests/Claims/test_claims_extractor*.py
tldw_Server_API/tests/Claims/test_claims_items_api.py
- name: product-claims-monitoring
paths: >-
tldw_Server_API/tests/Claims/test_claims_monitoring_*.py
tldw_Server_API/tests/Claims/test_claims_output_parser.py
tldw_Server_API/tests/Claims/test_claims_prompt_validation.py
tldw_Server_API/tests/Claims/test_claims_rebuild_*.py
tldw_Server_API/tests/Claims/test_claims_response_format_contracts.py
tldw_Server_API/tests/Claims/test_claims_review_*.py
- name: product-claims-service
paths: >-
tldw_Server_API/tests/Claims/test_claims_runtime_config.py
tldw_Server_API/tests/Claims/test_claims_service_*.py
tldw_Server_API/tests/Claims/test_claims_settings_*.py
tldw_Server_API/tests/Claims/test_claims_span_alignment.py
tldw_Server_API/tests/Claims/test_claims_status_and_envelope_api.py
tldw_Server_API/tests/Claims/test_claims_utils_persistence.py
tldw_Server_API/tests/Claims/test_claims_watchlist_notifications.py
tldw_Server_API/tests/Claims/test_claims_webhook_delivery.py
tldw_Server_API/tests/Claims/test_ingestion_*.py
- name: product-collections
paths: >-
tldw_Server_API/tests/Collections
- name: product-evaluations-abtest
paths: >-
tldw_Server_API/tests/Evaluations/embeddings_abtest/test*.py
tldw_Server_API/tests/Evaluations/test_abtest_*.py
tldw_Server_API/tests/Evaluations/test_embeddings_abtest_*.py
- name: product-evaluations-core
paths: >-
tldw_Server_API/tests/Evaluations/test_benchmark_*.py
tldw_Server_API/tests/Evaluations/test_circuit_breaker.py
tldw_Server_API/tests/Evaluations/test_connection_pool.py
tldw_Server_API/tests/Evaluations/test_db_adapter.py
tldw_Server_API/tests/Evaluations/test_error_scenarios.py
tldw_Server_API/tests/Evaluations/test_eval_*.py
tldw_Server_API/tests/Evaluations/test_evaluation_*.py
tldw_Server_API/tests/Evaluations/test_evaluations_audit_adapter.py
tldw_Server_API/tests/Evaluations/test_evaluations_backend_dual.py
tldw_Server_API/tests/Evaluations/test_evaluations_core_hardening.py
tldw_Server_API/tests/Evaluations/test_evaluations_benchmarks_*.py
tldw_Server_API/tests/Evaluations/test_evaluations_crud_*.py
tldw_Server_API/tests/Evaluations/test_evaluations_datasets_*.py
tldw_Server_API/tests/Evaluations/test_evaluations_migration_cli.py
tldw_Server_API/tests/Evaluations/test_evaluations_postgres_crud.py
tldw_Server_API/tests/Evaluations/test_evaluations_rag_pipeline_*.py
tldw_Server_API/tests/Evaluations/test_evaluations_stage*.py
tldw_Server_API/tests/Evaluations/test_evaluations_unified.py
tldw_Server_API/tests/Evaluations/test_evaluations_webhooks_*.py
tldw_Server_API/tests/Evaluations/test_mineru_ocr_evaluator.py
tldw_Server_API/tests/Evaluations/test_ms_g_eval.py
tldw_Server_API/tests/Evaluations/test_ocr_metrics.py
tldw_Server_API/tests/Evaluations/test_production_features_integration.py
tldw_Server_API/tests/Evaluations/test_proposition_evaluations.py
tldw_Server_API/tests/Evaluations/test_rag_*.py
tldw_Server_API/tests/Evaluations/test_security.py
tldw_Server_API/tests/Evaluations/test_synthetic_eval_service.py
tldw_Server_API/tests/Evaluations/test_unified_evaluation_service_strict_audit.py
- name: product-evaluations-integration
paths: >-
tldw_Server_API/tests/Evaluations/integration/test*.py
tldw_Server_API/tests/Evaluations/property/test*.py
- name: product-evaluations-recipes-persona
paths: >-
tldw_Server_API/tests/Evaluations/test_persona_*.py
tldw_Server_API/tests/Evaluations/test_recipe_*.py
- name: product-evaluations-unit
paths: >-
tldw_Server_API/tests/Evaluations/unit/test_*.py
- name: product-flashcards
paths: >-
tldw_Server_API/tests/Flashcards/test*.py
- name: product-explainer
paths: >-
tldw_Server_API/tests/Explainer
- name: product-notes-persona
paths: >-
tldw_Server_API/tests/Notes
tldw_Server_API/tests/Notes_NEW
tldw_Server_API/tests/Persona
tldw_Server_API/tests/Personalization
- name: product-prompts-legacy
paths: >-
tldw_Server_API/tests/Prompt_Management
- name: product-prompts-new
paths: >-
tldw_Server_API/tests/Prompt_Management_NEW
- name: product-watchlists-a-r
paths: >-
tldw_Server_API/tests/Watchlists/test_admin_*.py
tldw_Server_API/tests/Watchlists/test_audio_*.py
tldw_Server_API/tests/Watchlists/test_companion_*.py
tldw_Server_API/tests/Watchlists/test_dedup_*.py
tldw_Server_API/tests/Watchlists/test_delivery_*.py
tldw_Server_API/tests/Watchlists/test_e2e_*.py
tldw_Server_API/tests/Watchlists/test_fetchers_*.py
tldw_Server_API/tests/Watchlists/test_filter_*.py
tldw_Server_API/tests/Watchlists/test_filters_*.py
tldw_Server_API/tests/Watchlists/test_first_*.py
tldw_Server_API/tests/Watchlists/test_full_*.py
tldw_Server_API/tests/Watchlists/test_include_*.py
tldw_Server_API/tests/Watchlists/test_job_*.py
tldw_Server_API/tests/Watchlists/test_newsletter_*.py
tldw_Server_API/tests/Watchlists/test_operational_*.py
tldw_Server_API/tests/Watchlists/test_opml_*.py
tldw_Server_API/tests/Watchlists/test_perf_*.py
tldw_Server_API/tests/Watchlists/test_pipeline_*.py
tldw_Server_API/tests/Watchlists/test_preview_*.py
tldw_Server_API/tests/Watchlists/test_rate_*.py
tldw_Server_API/tests/Watchlists/test_rss_*.py
tldw_Server_API/tests/Watchlists/test_run_*.py
tldw_Server_API/tests/Watchlists/test_runs_*.py
- name: product-watchlists-core
paths: >-
tldw_Server_API/tests/Watchlists/test_scheduler_*.py
tldw_Server_API/tests/Watchlists/test_output_enrichment_scheduler.py
tldw_Server_API/tests/Watchlists/test_site_*.py
tldw_Server_API/tests/Watchlists/test_subscriptions_*.py
tldw_Server_API/tests/Watchlists/test_template_*.py
tldw_Server_API/tests/Watchlists/test_templates_*.py
tldw_Server_API/tests/Watchlists/test_tts_*.py
tldw_Server_API/tests/Watchlists/test_watchlist_*.py
tldw_Server_API/tests/Watchlists/test_youtube_*.py
- name: product-watchlists-pipeline
paths: >-
tldw_Server_API/tests/Watchlists/test_watchlists_*.py
- name: product-workflows-adapters-core
paths: >-
tldw_Server_API/tests/Workflows/adapters/test_*.py
- name: product-workflows-step-adapters
paths: >-
tldw_Server_API/tests/Workflows/test_new_step_adapters.py
- name: product-workflows-step-registry
paths: >-
tldw_Server_API/tests/Workflows/test_step_registry_runtime_coverage.py
- name: product-workflows-step-capabilities
paths: >-
tldw_Server_API/tests/Workflows/test_workflow_step_capabilities.py
- name: product-workflows-engine
paths: >-
tldw_Server_API/tests/Workflows/test_engine_*.py
tldw_Server_API/tests/Workflows/test_dual_backend_engine.py
tldw_Server_API/tests/Workflows/test_orphan_requeue_*.py
tldw_Server_API/tests/Workflows/test_workflows_map_substeps_*.py
tldw_Server_API/tests/Workflows/test_workflow_attempt_failures.py
tldw_Server_API/tests/Workflows/test_workflow_stress.py
tldw_Server_API/tests/Workflows/test_workflows_scheduler.py
- name: product-workflows-api
paths: >-
tldw_Server_API/tests/Workflows/test_artifact_*.py
tldw_Server_API/tests/Workflows/test_events_*.py
tldw_Server_API/tests/Workflows/test_runs_*.py
tldw_Server_API/tests/Workflows/test_webhook_*.py
tldw_Server_API/tests/Workflows/test_workflow_approval_permissions.py
tldw_Server_API/tests/Workflows/test_workflow_investigation_api.py
tldw_Server_API/tests/Workflows/test_workflow_preflight_api.py
tldw_Server_API/tests/Workflows/test_workflow_templates_api.py
tldw_Server_API/tests/Workflows/test_workflows_api.py
- name: product-workflows-storage
paths: >-
tldw_Server_API/tests/Workflows/test_dual_backend_workflows.py
tldw_Server_API/tests/Workflows/test_egress_policy.py
tldw_Server_API/tests/Workflows/test_mcp_tool_*.py
tldw_Server_API/tests/Workflows/test_media_ingest_*.py
tldw_Server_API/tests/Workflows/test_workflows_db*.py
tldw_Server_API/tests/Workflows/test_workflows_pg_*.py
tldw_Server_API/tests/Workflows/test_workflows_postgres_*.py
tldw_Server_API/tests/Workflows/test_workflows_tokens_cost_*.py
- name: product-workflows-runtime
paths: >-
tldw_Server_API/tests/Workflows/test_adapter_path_security.py
tldw_Server_API/tests/Workflows/test_llm_adapter.py
tldw_Server_API/tests/Workflows/test_stage3_chunkers_rag.py
tldw_Server_API/tests/Workflows/test_tts_workflow_normalization.py
tldw_Server_API/tests/Workflows/test_versions_idempotency.py
tldw_Server_API/tests/Workflows/test_workflows_artifact_gc_service.py
tldw_Server_API/tests/Workflows/test_workflows_dag_validation.py
tldw_Server_API/tests/Workflows/test_workflows_extras.py
tldw_Server_API/tests/Workflows/test_workflows_fuzz.py
tldw_Server_API/tests/Workflows/test_workflows_idempotency_ttl.py
tldw_Server_API/tests/Workflows/test_workflows_run_metadata.py
tldw_Server_API/tests/Workflows/test_workflows_truthiness_flags.py
- name: product-prompt-studio
paths: >-
tldw_Server_API/tests/prompt_studio
- name: platform-infrastructure-metrics
paths: >-
tldw_Server_API/tests/Infrastructure
tldw_Server_API/tests/Metrics
tldw_Server_API/tests/Monitoring
- name: platform-mcp-core
paths: >-
tldw_Server_API/tests/MCP
tldw_Server_API/tests/MCP_unified
- name: platform-resource-governance
paths: >-
tldw_Server_API/tests/Resource_Governance
- name: platform-services-startup
paths: >-
tldw_Server_API/tests/Services/test_startup_*.py
- name: platform-services-shutdown-lifespan
paths: >-
tldw_Server_API/tests/Services/test_shutdown_*.py
tldw_Server_API/tests/Services/test_lifespan_*.py
tldw_Server_API/tests/Services/test_worker_lifecycle_ownership_matrix.py
- name: platform-services-core
paths: >-
tldw_Server_API/tests/Services/test_admin_*.py
tldw_Server_API/tests/Services/test_app_*.py
tldw_Server_API/tests/Services/test_claims_*.py
tldw_Server_API/tests/Services/test_compatibility_*.py
tldw_Server_API/tests/Services/test_connectors_*.py
tldw_Server_API/tests/Services/test_document_*.py
tldw_Server_API/tests/Services/test_drain_*.py
tldw_Server_API/tests/Services/test_enhanced_*.py
tldw_Server_API/tests/Services/test_ephemeral_*.py
tldw_Server_API/tests/Services/test_executor_*.py
tldw_Server_API/tests/Services/test_file_*.py
tldw_Server_API/tests/Services/test_jobs_*.py
tldw_Server_API/tests/Services/test_kanban_*.py
tldw_Server_API/tests/Services/test_lifecycle_*.py
tldw_Server_API/tests/Services/test_loop_*.py
tldw_Server_API/tests/Services/test_media_*.py
tldw_Server_API/tests/Services/test_outputs_*.py
tldw_Server_API/tests/Services/test_persona_*.py
tldw_Server_API/tests/Services/test_placeholder_*.py
tldw_Server_API/tests/Services/test_service_*.py
tldw_Server_API/tests/Services/test_storage_*.py
tldw_Server_API/tests/Services/test_tts_*.py
tldw_Server_API/tests/Services/test_writing_annotation_review_jobs_worker.py
tldw_Server_API/tests/Services/test_workflows_*.py
tldw_Server_API/tests/Services/test_xml_*.py
- name: platform-services-main-routing
paths: >-
tldw_Server_API/tests/Services/test_main_claims_rebuild_startup.py
tldw_Server_API/tests/Services/test_main_lifecycle_contract.py
tldw_Server_API/tests/Services/test_main_readiness_shutdown.py
tldw_Server_API/tests/Services/test_main_router_contract.py
tldw_Server_API/tests/Services/test_openapi_contracts.py
tldw_Server_API/tests/Services/test_router_groups_contract.py
- name: platform-services-main-pollers
paths: >-
tldw_Server_API/tests/Services/test_main_shutdown_job_pollers.py
- name: platform-sandbox-admin-artifacts
paths: >-
tldw_Server_API/tests/sandbox/test_admin_*.py
tldw_Server_API/tests/sandbox/test_artifact*.py
- name: platform-sandbox-runtimes
paths: >-
tldw_Server_API/tests/sandbox/test_docker_*.py
tldw_Server_API/tests/sandbox/test_firecracker_*.py
tldw_Server_API/tests/sandbox/test_lima_*.py
tldw_Server_API/tests/sandbox/test_macos_*.py
tldw_Server_API/tests/sandbox/test_runner_*.py
tldw_Server_API/tests/sandbox/test_runtime_*.py
tldw_Server_API/tests/sandbox/test_runtimes_*.py
tldw_Server_API/tests/sandbox/test_operator_*.py
tldw_Server_API/tests/sandbox/test_seatbelt_*.py
tldw_Server_API/tests/sandbox/test_vz_*.py
- name: platform-sandbox-state-store
paths: >-
tldw_Server_API/tests/sandbox/test_acp_*.py
tldw_Server_API/tests/sandbox/test_cross_*.py
tldw_Server_API/tests/sandbox/test_execution_*.py
tldw_Server_API/tests/sandbox/test_feature_*.py
tldw_Server_API/tests/sandbox/test_glob_*.py
tldw_Server_API/tests/sandbox/test_idempotency_*.py
tldw_Server_API/tests/sandbox/test_interactive_*.py
tldw_Server_API/tests/sandbox/test_network_*.py
tldw_Server_API/tests/sandbox/test_orchestrator_*.py
tldw_Server_API/tests/sandbox/test_policy_*.py
tldw_Server_API/tests/sandbox/test_queue_*.py
tldw_Server_API/tests/sandbox/test_redis_*.py
tldw_Server_API/tests/sandbox/test_run_*.py
tldw_Server_API/tests/sandbox/test_sandbox_*.py
tldw_Server_API/tests/sandbox/test_snapshot_*.py
tldw_Server_API/tests/sandbox/test_store_*.py
tldw_Server_API/tests/sandbox/test_warm_*.py
tldw_Server_API/tests/sandbox/test_workspace_*.py
tldw_Server_API/tests/sandbox/test_worktree_*.py
- name: platform-sandbox-ws-streams
paths: >-
tldw_Server_API/tests/sandbox/test_cancel_*.py
tldw_Server_API/tests/sandbox/test_event_bridge.py
tldw_Server_API/tests/sandbox/test_session_*.py
tldw_Server_API/tests/sandbox/test_streams_*.py
tldw_Server_API/tests/sandbox/test_ws_*.py
- name: integrations
paths: >-
tldw_Server_API/tests/External_Sources
tldw_Server_API/tests/Notifications
tldw_Server_API/tests/Tools
tldw_Server_API/tests/WebScraping
tldw_Server_API/tests/Web_Scraping
tldw_Server_API/tests/integration
env:
PYTHONPATH: .
PYTEST_DISABLE_PLUGIN_AUTOLOAD: '1'
TEST_MODE: 'true'
DISABLE_HEAVY_STARTUP: '1'
PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION: python
TLDW_TEST_NO_DOCKER: '1'
WORKFLOWS_EGRESS_ALLOWLIST: "93.184.216.34,does-not-resolve.invalid,example.com"
SHARD_NAME: ${{ matrix.shard.name }}
TEST_PATHS: ${{ matrix.shard.paths }}
RESULTS_DIR: test-results-windows-latest-3.12-${{ matrix.shard.name }}
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Install FFmpeg (multi-OS)
uses: ./.github/actions/setup-ffmpeg
with:
install-ffmpeg: ${{ startsWith(matrix.shard.name, 'media-') || matrix.shard.name == 'ai-embeddings-media-validation' || matrix.shard.name == 'rag-new-unit-media-ingest' || matrix.shard.name == 'product-claims-service' || (matrix.shard.name == 'platform-services-core' || matrix.shard.name == 'platform-services-main-routing' || matrix.shard.name == 'platform-services-main-pollers') }}
install-portaudio: 'true'
- name: Setup Python and deps (with uv)
uses: ./.github/actions/setup-python-deps
with:
python-version: '3.12'
use-uv: ${{ runner.os != 'Windows' }}
enable-pip-cache: ${{ runner.os != 'Windows' }}
cache-dependency-path: |
pyproject.toml
uv.lock
extras: dev
- name: Ensure pytest-asyncio installed (OS matrix)
shell: bash
run: |
python -m pip install --upgrade pip
pip install pytest pytest-asyncio
- name: Smoke start server (single-user)
if: matrix.shard.name == 'core-server-smoke'
env:
SERVER_LABEL: smoke
AUTH_MODE: single_user
DATABASE_URL: sqlite:///./Databases/users.db
SINGLE_USER_API_KEY: "smoke-ci-key-12345"
E2E_TEST_BASE_URL: "http://127.0.0.1:8000"
PYTEST_CURRENT_TEST: "ci-smoke-cross-os-single::startup"
TEST_MODE: 'true'
DISABLE_HEAVY_STARTUP: '1'
STARTUP_TRACE: '1'
MCP_DEBUG: '1'
ULTRA_MINIMAL_APP: '1'
PRIVILEGE_METADATA_VALIDATE_ON_STARTUP: '0'
shell: bash
run: |
python tldw_Server_API/tests/scripts/server_lifecycle.py start
- name: Smoke health check (Windows, 15 min)
if: ${{ always() && matrix.shard.name == 'core-server-smoke' && runner.os == 'Windows' }}
env:
SERVER_LABEL: smoke
E2E_TEST_BASE_URL: "http://127.0.0.1:8000"
SMOKE_STARTUP_TIMEOUT_SECONDS: '900'
shell: bash
run: |
python tldw_Server_API/tests/scripts/server_lifecycle.py health-check
- name: Smoke health check (non-Windows)
if: ${{ always() && matrix.shard.name == 'core-server-smoke' && runner.os != 'Windows' }}
env:
SERVER_LABEL: smoke
E2E_TEST_BASE_URL: "http://127.0.0.1:8000"
SMOKE_STARTUP_TIMEOUT_SECONDS: '180'
shell: bash
run: |
python tldw_Server_API/tests/scripts/server_lifecycle.py health-check
- name: Smoke stop server
if: ${{ always() && matrix.shard.name == 'core-server-smoke' }}
env:
SERVER_LABEL: smoke
shell: bash
run: |
python tldw_Server_API/tests/scripts/server_lifecycle.py stop || true
- name: Cache embedding models
if: ${{ github.event_name != 'workflow_dispatch' && (matrix.shard.name == 'ai-chromadb' || matrix.shard.name == 'ai-chunking-core' || matrix.shard.name == 'ai-chunking-semantic-security' || startsWith(matrix.shard.name, 'vector-stores') || matrix.shard.name == 'rag-legacy' || matrix.shard.name == 'research-websearch') }}
continue-on-error: true
uses: actions/cache@v5
with:
path: models/embeddings
key: ${{ runner.os }}-embeddings-static-v1
restore-keys: |
${{ runner.os }}-embeddings-
- name: Pre-download embedding models
if: ${{ (env.RUN_MODEL_TESTS == '1' || env.RUN_REAL_HF_EMBEDDING_TESTS == '1' || env.RUN_REAL_HF_EMBEDDING_TESTS == 'true') && matrix.shard.name != 'ai-embeddings-backpressure' && matrix.shard.name != 'ai-embeddings-dlq-config' && matrix.shard.name != 'ai-embeddings-media-validation' && matrix.shard.name != 'ai-embeddings-policy' && (matrix.shard.name == 'ai-chromadb' || matrix.shard.name == 'ai-chunking-core' || matrix.shard.name == 'ai-chunking-semantic-security' || startsWith(matrix.shard.name, 'ai-embeddings-') || startsWith(matrix.shard.name, 'vector-stores') || matrix.shard.name == 'rag-legacy' || matrix.shard.name == 'research-websearch') }}
continue-on-error: true
shell: bash
run: |
python -m pip install --upgrade pip
pip install huggingface_hub
python Helper_Scripts/download_embedding_models.py --target models/embeddings --skip-defaults --model sentence-transformers/all-MiniLM-L6-v2
echo "TLDW_EMBEDDING_MODELS_DIR=models/embeddings" >> "$GITHUB_ENV"
- name: Run OS shard tests
if: matrix.shard.name != 'media-legacy-free'
shell: bash
run: |
mkdir -p "$RESULTS_DIR"
export DATABASE_URL="sqlite:///./Databases/users.db"
unset TEST_DATABASE_URL POSTGRES_TEST_DB
pytest -q --disable-warnings -p pytest_asyncio.plugin \
-m "not jobs and not e2e" \
$TEST_PATHS \
--durations=50 \
--junit-xml="$RESULTS_DIR/${{ env.SHARD_NAME }}.xml"
- name: Run legacy-free media checks
if: matrix.shard.name == 'media-legacy-free'
shell: bash
run: |
mkdir -p "$RESULTS_DIR"
export DATABASE_URL="sqlite:///./Databases/users.db"
unset TEST_DATABASE_URL POSTGRES_TEST_DB
TLDW_DISABLE_LEGACY_MEDIA=1 pytest -q --disable-warnings -p pytest_asyncio.plugin \
-m "not jobs and not e2e" \
tldw_Server_API/tests/Media \
tldw_Server_API/tests/MediaIngestion_NEW \
--durations=25 \
--junit-xml="$RESULTS_DIR/media-legacy-free.xml"
- name: Upload test results
if: always()
continue-on-error: true
uses: actions/upload-artifact@v7
with:
name: full-suite-windows-latest-py3.12-${{ matrix.shard.name }}
path: ${{ env.RESULTS_DIR }}
full-suite-windows-312-summary:
name: Full Suite (windows-latest / Python 3.12)
runs-on: ubuntu-latest
needs: [full-suite-windows-312-shards]
if: always()
steps:
- name: Check windows-latest Python 3.12 shard result
shell: bash
run: |
r="${{ needs['full-suite-windows-312-shards'].result }}"
if [ "$r" != "success" ] && [ "$r" != "skipped" ]; then
echo "windows-latest Python 3.12 full-suite shards finished with: $r"
exit 1
fi
echo "windows-latest Python 3.12 full-suite shards passed (or skipped via path filter)."
full-suite-os-313-release-shards:
name: Release Full Suite shard (${{ matrix.os }} / Python 3.13 / ${{ matrix.shard.name }})
runs-on: ${{ matrix.os }}
timeout-minutes: 35
needs: [lint, syntax-check]
if: github.event_name != 'pull_request'
strategy:
fail-fast: false
matrix:
os: [windows-latest, macos-latest]
shard:
- name: core-server-smoke
paths: >-
tldw_Server_API/tests/test_*.py
tldw_Server_API/tests/Health
tldw_Server_API/tests/Logging
- name: core-config
paths: >-
tldw_Server_API/tests/Config
- name: core-audit-support
paths: >-
tldw_Server_API/tests/Audit/test_audit_*.py
tldw_Server_API/tests/Audit/test_pii_pattern_groups.py
tldw_Server_API/tests/Audit/test_risk_settings_overrides.py
tldw_Server_API/tests/Audit/test_sqlite_runtime_pragmas.py
- name: core-audit-unified
paths: >-
tldw_Server_API/tests/Audit/test_unified_audit_service.py
- name: core-security
paths: >-
tldw_Server_API/tests/Security
- name: core-setup-usage
paths: >-
tldw_Server_API/tests/Setup
tldw_Server_API/tests/Usage
- name: core-utils-tooling
paths: >-
tldw_Server_API/tests/Helper_Scripts
tldw_Server_API/tests/Context_Integrity
tldw_Server_API/tests/Utils
tldw_Server_API/tests/helpers
tldw_Server_API/tests/http_client
tldw_Server_API/tests/lint
tldw_Server_API/tests/sanity_tests
tldw_Server_API/tests/schemas
tldw_Server_API/tests/unit
- name: admin-a-api
paths: >-
tldw_Server_API/tests/Admin/test_admin_a*.py
- name: admin-budgets
paths: >-
tldw_Server_API/tests/Admin/test_admin_budgets_*.py
- name: admin-bundle-sanitizers
paths: >-
tldw_Server_API/tests/Admin/test_admin_bundle_service_sanitizers.py
- name: admin-bundle-ops
paths: >-
tldw_Server_API/tests/Admin/test_bundle_ops.py
- name: admin-byok-core
paths: >-
tldw_Server_API/tests/Admin/test_admin_byok_service_sanitizers.py
- name: admin-byok-validation
paths: >-
tldw_Server_API/tests/Admin/test_admin_byok_validation_*.py
tldw_Server_API/tests/Admin/test_byok_*.py
- name: admin-backup-api
paths: >-
tldw_Server_API/tests/Admin/test_backup_schedules_api.py
- name: admin-backup-core
paths: >-
tldw_Server_API/tests/Admin/test_admin_backup_*.py
tldw_Server_API/tests/Admin/test_backup_schedules_repo.py
- name: admin-conflicts-data-admin
paths: >-
tldw_Server_API/tests/Admin/test_admin_c*.py
tldw_Server_API/tests/Admin/test_admin_data_*.py
- name: admin-data-ops
paths: >-
tldw_Server_API/tests/Admin/test_data_ops.py
- name: admin-data-subject-api
paths: >-
tldw_Server_API/tests/Admin/test_data_subject_requests_api.py
- name: admin-data-subject-repo-dsr
paths: >-
tldw_Server_API/tests/Admin/test_data_subject_requests_repo.py
tldw_Server_API/tests/Admin/test_dsr_*.py
- name: admin-e2e-access
paths: >-
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_routes_are_unavailable_without_flag
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_routes_require_support_header
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_routes_reject_wrong_support_header
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_routes_fail_closed_without_configured_support_key
- name: admin-e2e-seed
paths: >-
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_seed_returns_stable_fixture_ids
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_seed_returns_debug_role_principals
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_seed_requires_explicit_fixture_passwords
- name: admin-e2e-single-user
paths: >-
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_seed_returns_single_user_login_key
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_single_user_api_key_can_read_users_me
- name: admin-e2e-session-dsr
paths: >-
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_reset_rejects_unsafe_backup_paths
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_bootstrap_jwt_session_returns_cookie_payload
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_dsr_seed_supports_real_preview
- name: admin-e2e-reset-backups
paths: >-
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_reset_clears_backup_schedules
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_reset_clears_monitoring_authority_state
tldw_Server_API/tests/Admin/test_admin_e2e_support_api.py::test_admin_e2e_run_due_backup_schedules_processes_scheduled_run
- name: admin-g-i
paths: >-
tldw_Server_API/tests/Admin/test_admin_g*.py
tldw_Server_API/tests/Admin/test_admin_i*.py
- name: admin-llm-providers
paths: >-
tldw_Server_API/tests/Admin/test_admin_llm_providers_*.py
- name: admin-incidents
paths: >-
tldw_Server_API/tests/Admin/test_incidents_*.py
- name: admin-llm-usage
paths: >-
tldw_Server_API/tests/Admin/test_llm_usage_endpoints.py
- name: admin-maintenance-misc
paths: >-
tldw_Server_API/tests/Admin/test_admin_maintenance_*.py
tldw_Server_API/tests/Admin/test_admin_misc_endpoints.py
tldw_Server_API/tests/Admin/test_maintenance_*.py
- name: admin-monitoring
paths: >-
tldw_Server_API/tests/Admin/test_admin_monitoring_*.py
tldw_Server_API/tests/Admin/test_monitoring_*.py
- name: admin-ops-dependencies
paths: >-
tldw_Server_API/tests/Admin/test_admin_ops_dependencies.py
- name: admin-ops-endpoints
paths: >-
tldw_Server_API/tests/Admin/test_admin_ops_new_endpoints.py
- name: admin-ops-webhooks-orgs
paths: >-
tldw_Server_API/tests/Admin/test_admin_ops_webhooks_reports.py
tldw_Server_API/tests/Admin/test_admin_orgs_*.py
- name: admin-profiles-rate-registration
paths: >-
tldw_Server_API/tests/Admin/test_admin_profiles_*.py
tldw_Server_API/tests/Admin/test_admin_rate_limits_*.py
tldw_Server_API/tests/Admin/test_admin_registration_*.py
- name: admin-pricing-retention-roles-router
paths: >-
tldw_Server_API/tests/Admin/test_pricing_reload_endpoint.py
tldw_Server_API/tests/Admin/test_retention_policy_preview_api.py
tldw_Server_API/tests/Admin/test_role_*.py
tldw_Server_API/tests/Admin/test_router_analytics_*.py
- name: admin-s-sessions-settings
paths: >-
tldw_Server_API/tests/Admin/test_admin_scope_service_enterprise_mode.py
tldw_Server_API/tests/Admin/test_admin_service_log_sanitizers.py
tldw_Server_API/tests/Admin/test_admin_sessions_*.py
tldw_Server_API/tests/Admin/test_admin_settings_service.py
tldw_Server_API/tests/Admin/test_admin_smoke.py
- name: admin-split-storage-tools
paths: >-
tldw_Server_API/tests/Admin/test_admin_split_*.py
tldw_Server_API/tests/Admin/test_admin_storage_quotas.py
tldw_Server_API/tests/Admin/test_admin_system_ops_service.py
tldw_Server_API/tests/Admin/test_admin_t*.py
- name: admin-users
paths: >-
tldw_Server_API/tests/Admin/test_admin_u*.py
- name: admin-watchlists-webhooks
paths: >-
tldw_Server_API/tests/Admin/test_admin_w*.py
- name: admin-system-usage
paths: >-
tldw_Server_API/tests/Admin/test_system_ops.py
tldw_Server_API/tests/Admin/test_usage_reporting*.py
- name: auth-integration-admin-auth
paths: >-
tldw_Server_API/tests/AuthNZ/integration/test_admin_*.py
tldw_Server_API/tests/AuthNZ/integration/test_api_key_*.py
tldw_Server_API/tests/AuthNZ/integration/test_auth_*.py
- name: auth-integration-authnz
paths: >-
tldw_Server_API/tests/AuthNZ/integration/test_authnz_*.py
- name: auth-integration-b-z
paths: >-
tldw_Server_API/tests/AuthNZ/integration/test_[b-z]*.py
- name: auth-postgres
paths: >-
tldw_Server_API/tests/AuthNZ_Postgres
- name: auth-core-root-property
paths: >-
tldw_Server_API/tests/AuthNZ/test*.py
tldw_Server_API/tests/AuthNZ/property/test*.py
- name: auth-core-unit-a-l
paths: >-
tldw_Server_API/tests/AuthNZ/unit/test_[a-l]*.py
- name: auth-core-unit-m-z
paths: >-
tldw_Server_API/tests/AuthNZ/unit/test_[m-z]*.py
- name: auth-sqlite
paths: >-
tldw_Server_API/tests/AuthNZ_SQLite
- name: auth-unit-a-l
paths: >-
tldw_Server_API/tests/AuthNZ_Unit/test_[a-l]*.py
- name: auth-unit-m-z
paths: >-
tldw_Server_API/tests/AuthNZ_Unit/test_[m-z]*.py
- name: chacha-core-stores
paths: >-
tldw_Server_API/tests/ChaChaNotesDB/test_chacha_*.py
tldw_Server_API/tests/ChaChaNotesDB/test_chachanotes_db.py
- name: chacha-character-conversation
paths: >-
tldw_Server_API/tests/ChaChaNotesDB/test_character_*.py
tldw_Server_API/tests/ChaChaNotesDB/test_conversation_*.py
- name: chacha-content-persona
paths: >-
tldw_Server_API/tests/ChaChaNotesDB/test_flashcard*.py
tldw_Server_API/tests/ChaChaNotesDB/test_note_*.py
tldw_Server_API/tests/ChaChaNotesDB/test_order_by_validation.py
tldw_Server_API/tests/ChaChaNotesDB/test_persona_*.py
tldw_Server_API/tests/ChaChaNotesDB/test_quizzes_basic.py
tldw_Server_API/tests/ChaChaNotesDB/test_web_clipper_db.py
tldw_Server_API/tests/ChaChaNotesDB/test_workspace_assistant_defaults_db.py
tldw_Server_API/tests/ChaChaNotesDB/test_workspace_resource_memberships_db.py
tldw_Server_API/tests/ChaChaNotesDB/test_workspace_sub_resources_db.py
tldw_Server_API/tests/ChaChaNotesDB/test_writing_playground_db.py
- name: db-privileges
paths: >-
tldw_Server_API/tests/DB
tldw_Server_API/tests/DB_Management
tldw_Server_API/tests/MediaDB2
tldw_Server_API/tests/PrivilegeCatalog
tldw_Server_API/tests/Privileges
- name: ai-chromadb
paths: >-
tldw_Server_API/tests/ChromaDB
- name: ai-chunking-core
paths: >-
tldw_Server_API/tests/Chunking/test_async_*.py
tldw_Server_API/tests/Chunking/test_auto_*.py
tldw_Server_API/tests/Chunking/test_chunker_*.py
tldw_Server_API/tests/Chunking/test_process_text_components.py
tldw_Server_API/tests/Chunking/test_process_text_refactor_equivalence.py
tldw_Server_API/tests/Chunking/test_chunking_endpoint.py
tldw_Server_API/tests/Chunking/test_chunking_offsets_property.py
tldw_Server_API/tests/Chunking/test_chunking_overlap_properties.py
tldw_Server_API/tests/Chunking/test_chunking_regressions.py
tldw_Server_API/tests/Chunking/test_chunking_template_endpoint_errors.py
- name: ai-chunking-templates
paths: >-
tldw_Server_API/tests/Chunking/test_chunking_templates.py::TestDatabaseOperations
tldw_Server_API/tests/Chunking/test_chunking_templates.py::TestTemplateInitialization
tldw_Server_API/tests/Chunking/test_chunking_templates.py::TestTemplateProcessing
tldw_Server_API/tests/Chunking/test_chunking_templates_endpoint_sanitization.py
tldw_Server_API/tests/Chunking/test_chunking_templates_validate_schema.py
tldw_Server_API/tests/Chunking/test_template_*.py
- name: ai-chunking-templates-api
paths: >-
tldw_Server_API/tests/Chunking/test_chunking_templates.py::TestAPIEndpoints
- name: ai-chunking-templates-integration
paths: >-
tldw_Server_API/tests/Chunking/test_chunking_templates.py::TestIntegration
- name: ai-chunking-code-json-xml
paths: >-
tldw_Server_API/tests/Chunking/test_code_chunking_regressions.py
tldw_Server_API/tests/Chunking/test_json_*.py
tldw_Server_API/tests/Chunking/test_xml_*.py
- name: ai-chunking-semantic-security
paths: >-
tldw_Server_API/tests/Chunking/test_hierarchical_*.py
tldw_Server_API/tests/Chunking/test_offsets_additional.py
tldw_Server_API/tests/Chunking/test_option_aliases.py
tldw_Server_API/tests/Chunking/test_overlap_clamp.py
tldw_Server_API/tests/Chunking/test_phase3_3_sanitizers.py
tldw_Server_API/tests/Chunking/test_propositions_strategy.py
tldw_Server_API/tests/Chunking/test_security*.py
tldw_Server_API/tests/Chunking/test_semantic_*.py
tldw_Server_API/tests/Chunking/test_sentence_spans_properties.py
tldw_Server_API/tests/Chunking/test_streaming_overlap.py
tldw_Server_API/tests/Chunking/test_thai_tables_spans.py
tldw_Server_API/tests/Chunking/test_thread_safety.py
tldw_Server_API/tests/Chunking/test_tokens_offsets.py
tldw_Server_API/tests/Chunking/unit/test_tokens_fallback_offsets.py
- name: ai-embeddings-async
paths: >-
tldw_Server_API/tests/Embeddings/test_async_*.py
- name: ai-embeddings-backpressure
paths: >-
tldw_Server_API/tests/Embeddings/test_backpressure*.py
tldw_Server_API/tests/Embeddings/test_batch_rate_headers.py
- name: ai-embeddings-chromadb-core
paths: >-
tldw_Server_API/tests/Embeddings/test_chromadb_*.py
- name: ai-embeddings-core
paths: >-
tldw_Server_API/tests/Embeddings/test_chunk_metadata_backfill.py
tldw_Server_API/tests/Embeddings/test_circuit_breaker_*.py
tldw_Server_API/tests/Embeddings/test_compactor_admin_endpoint.py
tldw_Server_API/tests/Embeddings/test_connection_pool_failure_accounting.py
tldw_Server_API/tests/Embeddings/test_contextual_chunking.py
- name: ai-embeddings-dlq-config
paths: >-
tldw_Server_API/tests/Embeddings/test_delete_by_filter_endpoint.py
tldw_Server_API/tests/Embeddings/test_dlq_*.py
tldw_Server_API/tests/Embeddings/test_embedding_*.py
tldw_Server_API/tests/Embeddings/test_embeddings_audit_adapter.py
tldw_Server_API/tests/Embeddings/test_embeddings_batch_dimensions.py
tldw_Server_API/tests/Embeddings/test_embeddings_dimensions_policy.py
tldw_Server_API/tests/Embeddings/test_embeddings_endpoint_cache_identity.py
tldw_Server_API/tests/Embeddings/test_embeddings_fallback*.py
- name: ai-embeddings-jobs-runtime
paths: >-
tldw_Server_API/tests/Embeddings/test_embeddings_jobs*.py
tldw_Server_API/tests/Embeddings/test_embeddings_local_api.py
tldw_Server_API/tests/Embeddings/test_embeddings_loop_scoping.py
tldw_Server_API/tests/Embeddings/test_embeddings_memory*.py
tldw_Server_API/tests/Embeddings/test_embeddings_metric*.py
tldw_Server_API/tests/Embeddings/test_embeddings_model_management.py
tldw_Server_API/tests/Embeddings/test_embeddings_optional_deps_import.py
tldw_Server_API/tests/Embeddings/test_embeddings_redis*.py
tldw_Server_API/tests/Embeddings/test_embeddings_rg_sync_helper.py
tldw_Server_API/tests/Embeddings/test_embeddings_test_mode_truthiness.py
tldw_Server_API/tests/Embeddings/test_embeddings_token_arrays.py
tldw_Server_API/tests/Embeddings/test_embeddings_unsupported_provider.py
- name: ai-embeddings-policy
paths: >-
tldw_Server_API/tests/Embeddings/test_embeddings_policy*.py
tldw_Server_API/tests/Embeddings/test_l2_normalization_policy.py
- name: ai-embeddings-v5-core
paths: >-
tldw_Server_API/tests/Embeddings/test_embeddings_v5_production.py
tldw_Server_API/tests/Embeddings/test_embeddings_v5_property.py
tldw_Server_API/tests/Embeddings/test_embeddings_v5_unit.py
- name: ai-embeddings-v5-integration
paths: >-
tldw_Server_API/tests/Embeddings/test_embeddings_v5_integration.py
- name: ai-embeddings-hyde-ledger
paths: >-
tldw_Server_API/tests/Embeddings/test_hyde_backfill_cli.py
tldw_Server_API/tests/Embeddings/test_ledger_status_endpoint.py
- name: ai-embeddings-media-validation
paths: >-
tldw_Server_API/tests/Embeddings/test_media_*.py
tldw_Server_API/tests/Embeddings/test_message_validator*.py
- name: ai-embeddings-observability
paths: >-
tldw_Server_API/tests/Embeddings/test_metrics*.py
tldw_Server_API/tests/Embeddings/test_model_eviction_in_use_guard.py
tldw_Server_API/tests/Embeddings/test_multi_tier_cache_sync_async_loop.py
tldw_Server_API/tests/Embeddings/test_embeddings_orchestrator*.py
tldw_Server_API/tests/Embeddings/test_orchestrator*.py
tldw_Server_API/tests/Embeddings/test_pgvector*.py
tldw_Server_API/tests/Embeddings/test_priority_bump_endpoint.py
tldw_Server_API/tests/Embeddings/test_redis_integration_smoke.py
tldw_Server_API/tests/Embeddings/test_reembed_schedule_endpoint.py
tldw_Server_API/tests/Embeddings/test_request*.py
tldw_Server_API/tests/Embeddings/test_schema_drift.py
tldw_Server_API/tests/Embeddings/test_stage_controls.py
tldw_Server_API/tests/Embeddings/test_storage_idempotency_property.py
tldw_Server_API/tests/Embeddings/test_trace_headers.py
tldw_Server_API/tests/Embeddings/test_vector*.py
- name: vector-stores-integration
paths: >-
tldw_Server_API/tests/VectorStores/integration
- name: vector-stores-api
paths: >-
tldw_Server_API/tests/VectorStores/test*.py
- name: vector-stores-unit
paths: >-
tldw_Server_API/tests/VectorStores/unit
- name: paper-search
paths: >-
tldw_Server_API/tests/PaperSearch
- name: rag-legacy
paths: >-
tldw_Server_API/tests/RAG
- name: rag-new-integration-core
paths: >-
tldw_Server_API/tests/RAG_NEW/integration/test_adapter_guards.py
tldw_Server_API/tests/RAG_NEW/integration/test_bm25_weights.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_capabilities_styles.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_health_endpoints.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_integration.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_request_contract_parity.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_source_health_endpoint.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_stream_parity.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_strict_extractive_nli_api.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_unified_features_endpoint.py
- name: rag-new-integration-agentic
paths: >-
tldw_Server_API/tests/RAG_NEW/integration/test_rag_agentic_api.py
tldw_Server_API/tests/RAG_NEW/integration/test_research_agent_loop.py
- name: rag-new-integration-batch
paths: >-
tldw_Server_API/tests/RAG_NEW/integration/test_rag_batch_checkpoint_api.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_batch_resume_api.py
- name: rag-new-integration-research
paths: >-
tldw_Server_API/tests/RAG_NEW/integration/test_rag_ablate_api.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_benchmarks_ablation.py
tldw_Server_API/tests/RAG_NEW/integration/test_rag_doc_researcher_api.py
tldw_Server_API/tests/RAG_NEW/integration/test_retriever_pgvector_multi_search.py
- name: rag-new-property-core
paths: >-
tldw_Server_API/tests/RAG_NEW/property/test_*.py
tldw_Server_API/tests/RAG_NEW/test_*.py
- name: rag-new-unit-agentic
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_advanced_agentic_cache.py
tldw_Server_API/tests/RAG_NEW/unit/test_agentic*.py
tldw_Server_API/tests/RAG_NEW/unit/test_research_agent.py
- name: rag-new-unit-cache-vector
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_cache_invalidation_core.py
tldw_Server_API/tests/RAG_NEW/unit/test_chromadb*.py
tldw_Server_API/tests/RAG_NEW/unit/test_embedding_cache_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_pgvector_adapter_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_rewrite_cache.py
tldw_Server_API/tests/RAG_NEW/unit/test_semantic_cache*.py
tldw_Server_API/tests/RAG_NEW/unit/test_vector*.py
- name: rag-new-unit-pipeline
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_advanced_reranking_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_advanced_retrieval_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_flashrank_reranker_init.py
tldw_Server_API/tests/RAG_NEW/unit/test_functional_pipeline.py
tldw_Server_API/tests/RAG_NEW/unit/test_generation*.py
tldw_Server_API/tests/RAG_NEW/unit/test_hyde*.py
tldw_Server_API/tests/RAG_NEW/unit/test_kanban_retriever.py
tldw_Server_API/tests/RAG_NEW/unit/test_learned_fusion_simple.py
tldw_Server_API/tests/RAG_NEW/unit/test_llamacpp_reranker_topk_full_input.py
tldw_Server_API/tests/RAG_NEW/unit/test_pipeline*.py
tldw_Server_API/tests/RAG_NEW/unit/test_post*.py
tldw_Server_API/tests/RAG_NEW/unit/test_pre_retrieval*.py
tldw_Server_API/tests/RAG_NEW/unit/test_query*.py
tldw_Server_API/tests/RAG_NEW/unit/test_request*.py
tldw_Server_API/tests/RAG_NEW/unit/test_response_writer.py
tldw_Server_API/tests/RAG_NEW/unit/test_retrieval*.py
tldw_Server_API/tests/RAG_NEW/unit/test_reranker*.py
tldw_Server_API/tests/RAG_NEW/unit/test_streaming_executor.py
tldw_Server_API/tests/RAG_NEW/unit/test_two_tier_reranker.py
- name: rag-new-unit-unified-pipeline
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_unified_pipeline*.py
- name: rag-new-unit-rag-contracts
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_rag*.py
- name: rag-new-unit-guardrails-source
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_citations_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_guardrails*.py
tldw_Server_API/tests/RAG_NEW/unit/test_path_validation_security.py
tldw_Server_API/tests/RAG_NEW/unit/test_payload_exemplars*.py
tldw_Server_API/tests/RAG_NEW/unit/test_security_filters_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_source*.py
tldw_Server_API/tests/RAG_NEW/unit/test_strict_extractive_and_citations.py
- name: rag-new-unit-media-ingest
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_block_to_chunks.py
tldw_Server_API/tests/RAG_NEW/unit/test_chunk_fts_integration.py
tldw_Server_API/tests/RAG_NEW/unit/test_document_processing_integration_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_enhanced_chunking_integration_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_ingest_dedupe_and_chunk_ids.py
tldw_Server_API/tests/RAG_NEW/unit/test_media*.py
tldw_Server_API/tests/RAG_NEW/unit/test_structure_index.py
tldw_Server_API/tests/RAG_NEW/unit/test_temporal_filters.py
- name: rag-new-unit-core-misc
paths: >-
tldw_Server_API/tests/RAG_NEW/unit/test_analytics_db_dev_reconciliation.py
tldw_Server_API/tests/RAG_NEW/unit/test_batch*.py
tldw_Server_API/tests/RAG_NEW/unit/test_clarification_gate.py
tldw_Server_API/tests/RAG_NEW/unit/test_corpus_synonyms_expansion.py
tldw_Server_API/tests/RAG_NEW/unit/test_evidence_chains_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_feedback_learning.py
tldw_Server_API/tests/RAG_NEW/unit/test_fts_query_translation_edge_cases.py
tldw_Server_API/tests/RAG_NEW/unit/test_knowledge_source_retrieval_coverage.py
tldw_Server_API/tests/RAG_NEW/unit/test_phase_metrics.py
tldw_Server_API/tests/RAG_NEW/unit/test_prompt_templates_sanitizers.py
tldw_Server_API/tests/RAG_NEW/unit/test_quick_wins_spell_check_compat.py
tldw_Server_API/tests/RAG_NEW/unit/test_schema_corpus_alias.py
tldw_Server_API/tests/RAG_NEW/unit/test_standard_core_contract_threading.py
tldw_Server_API/tests/RAG_NEW/unit/test_suggestion_generator.py
tldw_Server_API/tests/RAG_NEW/unit/test_synonyms_registry_logging.py
- name: research-websearch
paths: >-
tldw_Server_API/tests/Research
tldw_Server_API/tests/WebSearch
- name: media-audio
paths: >-
tldw_Server_API/tests/Audio
tldw_Server_API/tests/Audio_Studio
tldw_Server_API/tests/AudioJobs
tldw_Server_API/tests/STT
tldw_Server_API/tests/TTS
tldw_Server_API/tests/TTS_NEW
tldw_Server_API/tests/VLM
- name: media-core-documents
paths: >-
tldw_Server_API/tests/Media/test_document*.py
tldw_Server_API/tests/Media/test_pdf_text_normalization.py
- name: media-core-api
paths: >-
tldw_Server_API/tests/Media/test_archive_member_cap.py
tldw_Server_API/tests/Media/test_auto_chunking_process_endpoints.py
tldw_Server_API/tests/Media/test_cache_index.py
tldw_Server_API/tests/Media/test_ingest_web_content_endpoint_sanitization.py
tldw_Server_API/tests/Media/test_json_*.py
tldw_Server_API/tests/Media/test_media_*.py
tldw_Server_API/tests/Media/test_navigation_policy_contract.py
tldw_Server_API/tests/Media/test_process_code_and_uploads.py
tldw_Server_API/tests/Media/test_upload_sink_security.py
tldw_Server_API/tests/Media/unit
- name: media-ingestion-new-ocr
paths: >-
tldw_Server_API/tests/MediaIngestion_NEW/test_*.py
- name: media-ingestion-new-integration
paths: >-
tldw_Server_API/tests/MediaIngestion_NEW/integration
- name: media-ingestion-new-unit-core
paths: >-
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_archive_and_sanitization.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_audio_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_auto_chunking_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_book_zip_safe_extract.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_book_processing_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_ebook_safe_paths.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_email_endpoint_error_mapping.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_file_validation.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_filename_and_mime_and_archive.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_ingest_jobs_batch_lookup.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_media_add_deps_error_mapping.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_media_canonical_helpers.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_media_ingest*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_media_list_no_slash_redirect.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_media_upload_failures.py
- name: media-ingestion-new-unit-mediawiki
paths: >-
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_mediawiki_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_ms_g_eval_validation.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_pdf_analysis_regressions.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_pdf_safe_paths.py
- name: media-ingestion-new-unit-persistence
paths: >-
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_persistence_*.py
- name: media-ingestion-new-unit-processing
paths: >-
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_plaintext_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_playlist_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_process_batch_media_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_process_document_like_item_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_transcription_models_endpoint.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_utils_time_conversion.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_video_*.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_visual_ingestion.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_xml_ingestion.py
tldw_Server_API/tests/MediaIngestion_NEW/unit/test_youtube_audio_downloads.py
- name: media-ingestion-modification
paths: >-
tldw_Server_API/tests/Media_Ingestion_Modification
- name: media-legacy-free
paths: >-
tldw_Server_API/tests/Media
tldw_Server_API/tests/MediaIngestion_NEW
- name: chat-character-legacy-core
paths: >-
tldw_Server_API/tests/Character_Chat/test_character_chat_endpoints.py
tldw_Server_API/tests/Character_Chat/test_chat_dictionary_legacy.py
tldw_Server_API/tests/Character_Chat/test_chat_settings_endpoints.py
tldw_Server_API/tests/Character_Chat/test_complete_v2_streaming_e2e_mock.py
tldw_Server_API/tests/Character_Chat/test_complete_v2_streaming_unified_flag_monkeypatched.py
tldw_Server_API/tests/Character_Chat/test_complete_v2_streaming_with_mock_openai.py
tldw_Server_API/tests/Character_Chat/test_complete_v2_with_mock_openai.py
tldw_Server_API/tests/Character_Chat/test_completions_tool_messages_and_metadata.py
tldw_Server_API/tests/Character_Chat/test_export_includes_tools_and_metadata.py
tldw_Server_API/tests/Character_Chat/test_legacy_complete_deprecation.py
tldw_Server_API/tests/Character_Chat/test_messages_tool_calls_exposure.py
tldw_Server_API/tests/Character_Chat/test_persona_dialogue_tree_character_eval.py
- name: chat-character-legacy-files
paths: >-
tldw_Server_API/tests/Character_Chat/test_file_mime_detection.py
tldw_Server_API/tests/Character_Chat/test_rate_limits_specific.py
- name: chat-character-legacy-worldbook
paths: >-
tldw_Server_API/tests/Character_Chat/test_world_book_and_limits.py
tldw_Server_API/tests/Character_Chat/test_world_book_manager_legacy.py
tldw_Server_API/tests/Character_Chat/test_world_book_negatives.py
tldw_Server_API/tests/Character_Chat/test_world_book_negatives_and_new_endpoint.py
tldw_Server_API/tests/Character_Chat/test_world_book_prompt_context.py
tldw_Server_API/tests/Character_Chat/unit/test_chat_session_character_scope_api.py
- name: chat-character-db-core
paths: >-
tldw_Server_API/tests/Characters/test_ccv3_parser.py
tldw_Server_API/tests/Characters/test_chacha_postgres_sync_log_entity_column.py
tldw_Server_API/tests/Characters/test_character_chat_greetings_api.py
tldw_Server_API/tests/Characters/test_character_chat_lib.py
tldw_Server_API/tests/Characters/test_character_functionality_db.py
tldw_Server_API/tests/Characters/test_characters_world_book_permissions_unit.py
- name: chat-character-db-api
paths: >-
tldw_Server_API/tests/Characters/test_characters_endpoint.py
- name: chat-character-unit-core
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/test_utils.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_cards_fts_bootstrap.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_chat_default_provider.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_chat_manager.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_generation_presets.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_memory.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_prompt_presets.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_character_templates.py
- name: chat-character-unit-chat
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_completion_precheck.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_dictionary_estimate_tokens_shim_removed.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_dictionary_unit.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_grammar_unit.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_session_create_schema.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_session_error_mapping.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_chat_settings_merge.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_group_chat_scope_resolution.py
- name: chat-character-unit-persona
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/unit/test_persona_exemplar_embeddings.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_persona_exemplar_selector.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_persona_exemplar_telemetry.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_png_export.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_postgres_backends.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_stream_persist_lookup.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_world_book_appendable.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_world_book_estimate_tokens_shim_removed.py
tldw_Server_API/tests/Character_Chat_NEW/unit/test_world_book_manager.py
- name: chat-character-unit-prd
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/unit/test_prd_round2_endpoints.py
- name: chat-character-property
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/property
- name: chat-character-integration-api
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/integration/test_character_api.py
tldw_Server_API/tests/Character_Chat_NEW/integration/test_character_exemplars_api.py
tldw_Server_API/tests/Character_Chat_NEW/integration/test_character_memory_endpoint.py
- name: chat-character-integration-chat
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/integration/test_character_chat_auto_routing.py
tldw_Server_API/tests/Character_Chat_NEW/integration/test_character_chat_stream_and_persist.py
- name: chat-character-integration-context
paths: >-
tldw_Server_API/tests/Character_Chat_NEW/integration/test_conversation_context_primitives.py
tldw_Server_API/tests/Character_Chat_NEW/integration/test_role_normalization_and_search.py
- name: chat-legacy-integration
paths: >-
tldw_Server_API/tests/Chat/test*.py
tldw_Server_API/tests/Chat/integration
- name: chat-legacy-unit-a-l
paths: >-
tldw_Server_API/tests/Chat/unit/test_[a-l]*.py
- name: chat-legacy-unit-m-z
paths: >-
tldw_Server_API/tests/Chat/unit/test_[m-z]*.py
- name: chat-new-integration-property
paths: >-
tldw_Server_API/tests/Chat_NEW/integration
tldw_Server_API/tests/Chat_NEW/property
- name: chat-new-unit-a-l
paths: >-
tldw_Server_API/tests/Chat_NEW/unit/test_[a-l]*.py
- name: chat-new-unit-m-z
paths: >-
tldw_Server_API/tests/Chat_NEW/unit/test_[m-z]*.py
- name: chatbooks-streaming
paths: >-
tldw_Server_API/tests/Chatbooks
tldw_Server_API/tests/Explainer
tldw_Server_API/tests/Streaming
- name: explainer-core
paths: >-
tldw_Server_API/tests/Explainer
- name: llm-adapters-unit
paths: >-
tldw_Server_API/tests/LLM_Adapters/unit
tldw_Server_API/tests/LLM_Adapters/benchmarks
- name: llm-adapters-chat-endpoint
paths: >-
tldw_Server_API/tests/LLM_Adapters/integration/test_adapters_chat_endpoint.py
tldw_Server_API/tests/LLM_Adapters/integration/test_adapters_chat_endpoint_anthropic_native.py
- name: llm-adapters-chat-errors-core
paths: >-
tldw_Server_API/tests/LLM_Adapters/integration/test_adapters_chat_endpoint_error_sse_core_providers.py
- name: llm-adapters-chat-errors-extra
paths: >-
tldw_Server_API/tests/LLM_Adapters/integration/test_adapters_chat_endpoint_error_sse_google_mistral.py
tldw_Server_API/tests/LLM_Adapters/integration/test_adapters_chat_endpoint_midstream_error_all.py
- name: llm-adapters-orchestrator-core
paths: >-
tldw_Server_API/tests/LLM_Adapters/integration/test_async_adapters_orchestrator.py
tldw_Server_API/tests/LLM_Adapters/integration/test_async_adapters_orchestrator_anthropic_native.py
tldw_Server_API/tests/LLM_Adapters/integration/test_async_adapters_orchestrator_google_mistral.py
- name: llm-adapters-orchestrator-extra
paths: >-
tldw_Server_API/tests/LLM_Adapters/integration/test_async_adapters_orchestrator_groq_openrouter_native.py
tldw_Server_API/tests/LLM_Adapters/integration/test_async_adapters_orchestrator_stage3.py
tldw_Server_API/tests/LLM_Adapters/integration/test_async_adapters_streaming_error_all.py
tldw_Server_API/tests/LLM_Adapters/integration/test_async_bedrock_adapter.py
tldw_Server_API/tests/LLM_Adapters/integration/test_tool_choice_json_mode_endpoint.py
- name: llm-calls-core
paths: >-
tldw_Server_API/tests/LLM_Calls/test_*.py
- name: llm-calls-property
paths: >-
tldw_Server_API/tests/LLM_Calls/property
- name: llm-local-runtime
paths: >-
tldw_Server_API/tests/LLM_Local
- name: llm-local-backends
paths: >-
tldw_Server_API/tests/LLamaCpp
tldw_Server_API/tests/Local_LLM
- name: product-claims-core
paths: >-
tldw_Server_API/tests/Claims/test_claim_cluster_upsert_idempotency.py
tldw_Server_API/tests/Claims/test_claim_embeddings_chroma.py
tldw_Server_API/tests/Claims/test_claim_review_rule_assignment.py
tldw_Server_API/tests/Claims/test_claims_alerts_*.py
tldw_Server_API/tests/Claims/test_claims_alignment.py
tldw_Server_API/tests/Claims/test_claims_analytics_exports_cleanup.py
tldw_Server_API/tests/Claims/test_claims_api_strict_parse_mode.py
tldw_Server_API/tests/Claims/test_claims_budget_guard.py
tldw_Server_API/tests/Claims/test_claims_cluster*.py
tldw_Server_API/tests/Claims/test_claims_compat_types.py
- name: product-claims-engine
paths: >-
tldw_Server_API/tests/Claims/test_claims_dashboard_analytics.py
tldw_Server_API/tests/Claims/test_claims_embedding_refresh_config.py
tldw_Server_API/tests/Claims/test_claims_endpoints_api.py
tldw_Server_API/tests/Claims/test_claims_engine_*.py
tldw_Server_API/tests/Claims/test_claims_extractor*.py
tldw_Server_API/tests/Claims/test_claims_items_api.py
- name: product-claims-monitoring
paths: >-
tldw_Server_API/tests/Claims/test_claims_monitoring_*.py
tldw_Server_API/tests/Claims/test_claims_output_parser.py
tldw_Server_API/tests/Claims/test_claims_prompt_validation.py
tldw_Server_API/tests/Claims/test_claims_rebuild_*.py
tldw_Server_API/tests/Claims/test_claims_response_format_contracts.py
tldw_Server_API/tests/Claims/test_claims_review_*.py
- name: product-claims-service
paths: >-
tldw_Server_API/tests/Claims/test_claims_runtime_config.py
tldw_Server_API/tests/Claims/test_claims_service_*.py
tldw_Server_API/tests/Claims/test_claims_settings_*.py
tldw_Server_API/tests/Claims/test_claims_span_alignment.py
tldw_Server_API/tests/Claims/test_claims_status_and_envelope_api.py
tldw_Server_API/tests/Claims/test_claims_utils_persistence.py
tldw_Server_API/tests/Claims/test_claims_watchlist_notifications.py
tldw_Server_API/tests/Claims/test_claims_webhook_delivery.py
tldw_Server_API/tests/Claims/test_ingestion_*.py
- name: product-collections
paths: >-
tldw_Server_API/tests/Collections
- name: product-evaluations-abtest
paths: >-
tldw_Server_API/tests/Evaluations/embeddings_abtest/test*.py
tldw_Server_API/tests/Evaluations/test_abtest_*.py
tldw_Server_API/tests/Evaluations/test_embeddings_abtest_*.py
- name: product-evaluations-core
paths: >-
tldw_Server_API/tests/Evaluations/test_benchmark_*.py
tldw_Server_API/tests/Evaluations/test_circuit_breaker.py
tldw_Server_API/tests/Evaluations/test_connection_pool.py
tldw_Server_API/tests/Evaluations/test_db_adapter.py
tldw_Server_API/tests/Evaluations/test_error_scenarios.py
tldw_Server_API/tests/Evaluations/test_eval_*.py
tldw_Server_API/tests/Evaluations/test_evaluation_*.py
tldw_Server_API/tests/Evaluations/test_evaluations_audit_adapter.py
tldw_Server_API/tests/Evaluations/test_evaluations_backend_dual.py
tldw_Server_API/tests/Evaluations/test_evaluations_core_hardening.py
tldw_Server_API/tests/Evaluations/test_evaluations_benchmarks_*.py
tldw_Server_API/tests/Evaluations/test_evaluations_crud_*.py
tldw_Server_API/tests/Evaluations/test_evaluations_datasets_*.py
tldw_Server_API/tests/Evaluations/test_evaluations_migration_cli.py
tldw_Server_API/tests/Evaluations/test_evaluations_postgres_crud.py
tldw_Server_API/tests/Evaluations/test_evaluations_rag_pipeline_*.py
tldw_Server_API/tests/Evaluations/test_evaluations_stage*.py
tldw_Server_API/tests/Evaluations/test_evaluations_unified.py
tldw_Server_API/tests/Evaluations/test_evaluations_webhooks_*.py
tldw_Server_API/tests/Evaluations/test_mineru_ocr_evaluator.py
tldw_Server_API/tests/Evaluations/test_ms_g_eval.py
tldw_Server_API/tests/Evaluations/test_ocr_metrics.py
tldw_Server_API/tests/Evaluations/test_production_features_integration.py
tldw_Server_API/tests/Evaluations/test_proposition_evaluations.py
tldw_Server_API/tests/Evaluations/test_rag_*.py
tldw_Server_API/tests/Evaluations/test_security.py
tldw_Server_API/tests/Evaluations/test_synthetic_eval_service.py
tldw_Server_API/tests/Evaluations/test_unified_evaluation_service_strict_audit.py
- name: product-evaluations-integration
paths: >-
tldw_Server_API/tests/Evaluations/integration/test*.py
tldw_Server_API/tests/Evaluations/property/test*.py
- name: product-evaluations-recipes-persona
paths: >-
tldw_Server_API/tests/Evaluations/test_persona_*.py
tldw_Server_API/tests/Evaluations/test_recipe_*.py
- name: product-evaluations-unit
paths: >-
tldw_Server_API/tests/Evaluations/unit/test_*.py
- name: product-flashcards
paths: >-
tldw_Server_API/tests/Flashcards/test*.py
- name: product-explainer
paths: >-
tldw_Server_API/tests/Explainer
- name: product-notes-persona
paths: >-
tldw_Server_API/tests/Notes
tldw_Server_API/tests/Notes_NEW
tldw_Server_API/tests/Persona
tldw_Server_API/tests/Personalization
- name: product-prompts-legacy
paths: >-
tldw_Server_API/tests/Prompt_Management
- name: product-prompts-new
paths: >-
tldw_Server_API/tests/Prompt_Management_NEW
- name: product-watchlists-a-r
paths: >-
tldw_Server_API/tests/Watchlists/test_admin_*.py
tldw_Server_API/tests/Watchlists/test_audio_*.py
tldw_Server_API/tests/Watchlists/test_companion_*.py
tldw_Server_API/tests/Watchlists/test_dedup_*.py
tldw_Server_API/tests/Watchlists/test_delivery_*.py
tldw_Server_API/tests/Watchlists/test_e2e_*.py
tldw_Server_API/tests/Watchlists/test_fetchers_*.py
tldw_Server_API/tests/Watchlists/test_filter_*.py
tldw_Server_API/tests/Watchlists/test_filters_*.py
tldw_Server_API/tests/Watchlists/test_first_*.py
tldw_Server_API/tests/Watchlists/test_full_*.py
tldw_Server_API/tests/Watchlists/test_include_*.py
tldw_Server_API/tests/Watchlists/test_job_*.py
tldw_Server_API/tests/Watchlists/test_newsletter_*.py
tldw_Server_API/tests/Watchlists/test_operational_*.py
tldw_Server_API/tests/Watchlists/test_opml_*.py
tldw_Server_API/tests/Watchlists/test_perf_*.py
tldw_Server_API/tests/Watchlists/test_pipeline_*.py
tldw_Server_API/tests/Watchlists/test_preview_*.py
tldw_Server_API/tests/Watchlists/test_rate_*.py
tldw_Server_API/tests/Watchlists/test_rss_*.py
tldw_Server_API/tests/Watchlists/test_run_*.py
tldw_Server_API/tests/Watchlists/test_runs_*.py
- name: product-watchlists-core
paths: >-
tldw_Server_API/tests/Watchlists/test_scheduler_*.py
tldw_Server_API/tests/Watchlists/test_output_enrichment_scheduler.py
tldw_Server_API/tests/Watchlists/test_site_*.py
tldw_Server_API/tests/Watchlists/test_subscriptions_*.py
tldw_Server_API/tests/Watchlists/test_template_*.py
tldw_Server_API/tests/Watchlists/test_templates_*.py
tldw_Server_API/tests/Watchlists/test_tts_*.py
tldw_Server_API/tests/Watchlists/test_watchlist_*.py
tldw_Server_API/tests/Watchlists/test_youtube_*.py
- name: product-watchlists-pipeline
paths: >-
tldw_Server_API/tests/Watchlists/test_watchlists_*.py
- name: product-workflows-adapters-core
paths: >-
tldw_Server_API/tests/Workflows/adapters/test_*.py
- name: product-workflows-step-adapters
paths: >-
tldw_Server_API/tests/Workflows/test_new_step_adapters.py
- name: product-workflows-step-registry
paths: >-
tldw_Server_API/tests/Workflows/test_step_registry_runtime_coverage.py
- name: product-workflows-step-capabilities
paths: >-
tldw_Server_API/tests/Workflows/test_workflow_step_capabilities.py
- name: product-workflows-engine
paths: >-
tldw_Server_API/tests/Workflows/test_engine_*.py
tldw_Server_API/tests/Workflows/test_dual_backend_engine.py
tldw_Server_API/tests/Workflows/test_orphan_requeue_*.py
tldw_Server_API/tests/Workflows/test_workflows_map_substeps_*.py
tldw_Server_API/tests/Workflows/test_workflow_attempt_failures.py
tldw_Server_API/tests/Workflows/test_workflow_stress.py
tldw_Server_API/tests/Workflows/test_workflows_scheduler.py
- name: product-workflows-api
paths: >-
tldw_Server_API/tests/Workflows/test_artifact_*.py
tldw_Server_API/tests/Workflows/test_events_*.py
tldw_Server_API/tests/Workflows/test_runs_*.py
tldw_Server_API/tests/Workflows/test_webhook_*.py
tldw_Server_API/tests/Workflows/test_workflow_approval_permissions.py
tldw_Server_API/tests/Workflows/test_workflow_investigation_api.py
tldw_Server_API/tests/Workflows/test_workflow_preflight_api.py
tldw_Server_API/tests/Workflows/test_workflow_templates_api.py
tldw_Server_API/tests/Workflows/test_workflows_api.py
- name: product-workflows-storage
paths: >-
tldw_Server_API/tests/Workflows/test_dual_backend_workflows.py
tldw_Server_API/tests/Workflows/test_egress_policy.py
tldw_Server_API/tests/Workflows/test_mcp_tool_*.py
tldw_Server_API/tests/Workflows/test_media_ingest_*.py
tldw_Server_API/tests/Workflows/test_workflows_db*.py
tldw_Server_API/tests/Workflows/test_workflows_pg_*.py
tldw_Server_API/tests/Workflows/test_workflows_postgres_*.py
tldw_Server_API/tests/Workflows/test_workflows_tokens_cost_*.py
- name: product-workflows-runtime
paths: >-
tldw_Server_API/tests/Workflows/test_adapter_path_security.py
tldw_Server_API/tests/Workflows/test_llm_adapter.py
tldw_Server_API/tests/Workflows/test_stage3_chunkers_rag.py
tldw_Server_API/tests/Workflows/test_tts_workflow_normalization.py
tldw_Server_API/tests/Workflows/test_versions_idempotency.py
tldw_Server_API/tests/Workflows/test_workflows_artifact_gc_service.py
tldw_Server_API/tests/Workflows/test_workflows_dag_validation.py
tldw_Server_API/tests/Workflows/test_workflows_extras.py
tldw_Server_API/tests/Workflows/test_workflows_fuzz.py
tldw_Server_API/tests/Workflows/test_workflows_idempotency_ttl.py
tldw_Server_API/tests/Workflows/test_workflows_run_metadata.py
tldw_Server_API/tests/Workflows/test_workflows_truthiness_flags.py
- name: product-prompt-studio
paths: >-
tldw_Server_API/tests/prompt_studio
- name: platform-infrastructure-metrics
paths: >-
tldw_Server_API/tests/Infrastructure
tldw_Server_API/tests/Metrics
tldw_Server_API/tests/Monitoring
- name: platform-mcp-core
paths: >-
tldw_Server_API/tests/MCP
tldw_Server_API/tests/MCP_unified
- name: platform-resource-governance
paths: >-
tldw_Server_API/tests/Resource_Governance
- name: platform-services-startup
paths: >-
tldw_Server_API/tests/Services/test_startup_*.py
- name: platform-services-shutdown-lifespan
paths: >-
tldw_Server_API/tests/Services/test_shutdown_*.py
tldw_Server_API/tests/Services/test_lifespan_*.py
tldw_Server_API/tests/Services/test_worker_lifecycle_ownership_matrix.py
- name: platform-services-core
paths: >-
tldw_Server_API/tests/Services/test_admin_*.py
tldw_Server_API/tests/Services/test_app_*.py
tldw_Server_API/tests/Services/test_claims_*.py
tldw_Server_API/tests/Services/test_compatibility_*.py
tldw_Server_API/tests/Services/test_connectors_*.py
tldw_Server_API/tests/Services/test_document_*.py
tldw_Server_API/tests/Services/test_drain_*.py
tldw_Server_API/tests/Services/test_enhanced_*.py
tldw_Server_API/tests/Services/test_ephemeral_*.py
tldw_Server_API/tests/Services/test_executor_*.py
tldw_Server_API/tests/Services/test_file_*.py
tldw_Server_API/tests/Services/test_jobs_*.py
tldw_Server_API/tests/Services/test_kanban_*.py
tldw_Server_API/tests/Services/test_lifecycle_*.py
tldw_Server_API/tests/Services/test_loop_*.py
tldw_Server_API/tests/Services/test_media_*.py
tldw_Server_API/tests/Services/test_outputs_*.py
tldw_Server_API/tests/Services/test_persona_*.py
tldw_Server_API/tests/Services/test_placeholder_*.py
tldw_Server_API/tests/Services/test_service_*.py
tldw_Server_API/tests/Services/test_storage_*.py
tldw_Server_API/tests/Services/test_tts_*.py
tldw_Server_API/tests/Services/test_writing_annotation_review_jobs_worker.py
tldw_Server_API/tests/Services/test_workflows_*.py
tldw_Server_API/tests/Services/test_xml_*.py
- name: platform-services-main-routing
paths: >-
tldw_Server_API/tests/Services/test_main_claims_rebuild_startup.py
tldw_Server_API/tests/Services/test_main_lifecycle_contract.py
tldw_Server_API/tests/Services/test_main_readiness_shutdown.py
tldw_Server_API/tests/Services/test_main_router_contract.py
tldw_Server_API/tests/Services/test_openapi_contracts.py
tldw_Server_API/tests/Services/test_router_groups_contract.py
- name: platform-services-main-pollers
paths: >-
tldw_Server_API/tests/Services/test_main_shutdown_job_pollers.py
- name: platform-sandbox-admin-artifacts
paths: >-
tldw_Server_API/tests/sandbox/test_admin_*.py
tldw_Server_API/tests/sandbox/test_artifact*.py
- name: platform-sandbox-runtimes
paths: >-
tldw_Server_API/tests/sandbox/test_docker_*.py
tldw_Server_API/tests/sandbox/test_firecracker_*.py
tldw_Server_API/tests/sandbox/test_lima_*.py
tldw_Server_API/tests/sandbox/test_macos_*.py
tldw_Server_API/tests/sandbox/test_runner_*.py
tldw_Server_API/tests/sandbox/test_runtime_*.py
tldw_Server_API/tests/sandbox/test_runtimes_*.py
tldw_Server_API/tests/sandbox/test_operator_*.py
tldw_Server_API/tests/sandbox/test_seatbelt_*.py
tldw_Server_API/tests/sandbox/test_vz_*.py
- name: platform-sandbox-state-store
paths: >-
tldw_Server_API/tests/sandbox/test_acp_*.py
tldw_Server_API/tests/sandbox/test_cross_*.py
tldw_Server_API/tests/sandbox/test_execution_*.py
tldw_Server_API/tests/sandbox/test_feature_*.py
tldw_Server_API/tests/sandbox/test_glob_*.py
tldw_Server_API/tests/sandbox/test_idempotency_*.py
tldw_Server_API/tests/sandbox/test_interactive_*.py
tldw_Server_API/tests/sandbox/test_network_*.py
tldw_Server_API/tests/sandbox/test_orchestrator_*.py
tldw_Server_API/tests/sandbox/test_policy_*.py
tldw_Server_API/tests/sandbox/test_queue_*.py
tldw_Server_API/tests/sandbox/test_redis_*.py
tldw_Server_API/tests/sandbox/test_run_*.py
tldw_Server_API/tests/sandbox/test_sandbox_*.py
tldw_Server_API/tests/sandbox/test_snapshot_*.py
tldw_Server_API/tests/sandbox/test_store_*.py
tldw_Server_API/tests/sandbox/test_warm_*.py
tldw_Server_API/tests/sandbox/test_workspace_*.py
tldw_Server_API/tests/sandbox/test_worktree_*.py
- name: platform-sandbox-ws-streams
paths: >-
tldw_Server_API/tests/sandbox/test_cancel_*.py
tldw_Server_API/tests/sandbox/test_event_bridge.py
tldw_Server_API/tests/sandbox/test_session_*.py
tldw_Server_API/tests/sandbox/test_streams_*.py
tldw_Server_API/tests/sandbox/test_ws_*.py
- name: integrations
paths: >-
tldw_Server_API/tests/External_Sources
tldw_Server_API/tests/Notifications
tldw_Server_API/tests/Tools
tldw_Server_API/tests/WebScraping
tldw_Server_API/tests/Web_Scraping
tldw_Server_API/tests/integration
env:
PYTHONPATH: .
PYTEST_DISABLE_PLUGIN_AUTOLOAD: '1'
TEST_MODE: 'true'
DISABLE_HEAVY_STARTUP: '1'
PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION: python
TLDW_TEST_NO_DOCKER: '1'
WORKFLOWS_EGRESS_ALLOWLIST: "93.184.216.34,does-not-resolve.invalid,example.com"
SHARD_NAME: ${{ matrix.shard.name }}
TEST_PATHS: ${{ matrix.shard.paths }}
RESULTS_DIR: test-results-${{ matrix.os }}-3.13-${{ matrix.shard.name }}
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Install FFmpeg (multi-OS)
uses: ./.github/actions/setup-ffmpeg
with:
install-ffmpeg: ${{ startsWith(matrix.shard.name, 'media-') || matrix.shard.name == 'ai-embeddings-media-validation' || matrix.shard.name == 'rag-new-unit-media-ingest' || matrix.shard.name == 'product-claims-service' || (matrix.shard.name == 'platform-services-core' || matrix.shard.name == 'platform-services-main-routing' || matrix.shard.name == 'platform-services-main-pollers') }}
install-portaudio: 'true'
- name: Setup Python and deps (with uv)
uses: ./.github/actions/setup-python-deps
with:
python-version: '3.13'
use-uv: ${{ runner.os != 'Windows' }}
enable-pip-cache: ${{ runner.os != 'Windows' }}
cache-dependency-path: |
pyproject.toml
uv.lock
extras: dev
- name: Ensure pytest-asyncio installed (OS matrix)
shell: bash
run: |
python -m pip install --upgrade pip
pip install pytest pytest-asyncio
- name: Smoke start server (single-user)
if: matrix.shard.name == 'core-server-smoke'
env:
SERVER_LABEL: smoke
AUTH_MODE: single_user
DATABASE_URL: sqlite:///./Databases/users.db
SINGLE_USER_API_KEY: "smoke-ci-key-12345"
E2E_TEST_BASE_URL: "http://127.0.0.1:8000"
PYTEST_CURRENT_TEST: "ci-smoke-release-cross-os-single::startup"
TEST_MODE: 'true'
DISABLE_HEAVY_STARTUP: '1'
STARTUP_TRACE: '1'
MCP_DEBUG: '1'
ULTRA_MINIMAL_APP: '1'
PRIVILEGE_METADATA_VALIDATE_ON_STARTUP: '0'
shell: bash
run: |
python tldw_Server_API/tests/scripts/server_lifecycle.py start
- name: Smoke health check (Windows, 15 min)
if: ${{ always() && matrix.shard.name == 'core-server-smoke' && runner.os == 'Windows' }}
env:
SERVER_LABEL: smoke
E2E_TEST_BASE_URL: "http://127.0.0.1:8000"
SMOKE_STARTUP_TIMEOUT_SECONDS: '900'
shell: bash
run: |
python tldw_Server_API/tests/scripts/server_lifecycle.py health-check
- name: Smoke health check (non-Windows)
if: ${{ always() && matrix.shard.name == 'core-server-smoke' && runner.os != 'Windows' }}
env:
SERVER_LABEL: smoke
E2E_TEST_BASE_URL: "http://127.0.0.1:8000"
SMOKE_STARTUP_TIMEOUT_SECONDS: '180'
shell: bash
run: |
python tldw_Server_API/tests/scripts/server_lifecycle.py health-check
- name: Smoke stop server
if: ${{ always() && matrix.shard.name == 'core-server-smoke' }}
env:
SERVER_LABEL: smoke
shell: bash
run: |
python tldw_Server_API/tests/scripts/server_lifecycle.py stop || true
- name: Cache embedding models
if: ${{ github.event_name != 'workflow_dispatch' && (matrix.shard.name == 'ai-chromadb' || matrix.shard.name == 'ai-chunking-core' || matrix.shard.name == 'ai-chunking-semantic-security' || startsWith(matrix.shard.name, 'vector-stores') || matrix.shard.name == 'rag-legacy' || matrix.shard.name == 'research-websearch') }}
continue-on-error: true
uses: actions/cache@v5
with:
path: models/embeddings
key: ${{ runner.os }}-embeddings-static-v1
restore-keys: |
${{ runner.os }}-embeddings-
- name: Pre-download embedding models
if: ${{ (env.RUN_MODEL_TESTS == '1' || env.RUN_REAL_HF_EMBEDDING_TESTS == '1' || env.RUN_REAL_HF_EMBEDDING_TESTS == 'true') && matrix.shard.name != 'ai-embeddings-backpressure' && matrix.shard.name != 'ai-embeddings-dlq-config' && matrix.shard.name != 'ai-embeddings-media-validation' && matrix.shard.name != 'ai-embeddings-policy' && (matrix.shard.name == 'ai-chromadb' || matrix.shard.name == 'ai-chunking-core' || matrix.shard.name == 'ai-chunking-semantic-security' || startsWith(matrix.shard.name, 'ai-embeddings-') || startsWith(matrix.shard.name, 'vector-stores') || matrix.shard.name == 'rag-legacy' || matrix.shard.name == 'research-websearch') }}
continue-on-error: true
shell: bash
run: |
python -m pip install --upgrade pip
pip install huggingface_hub
python Helper_Scripts/download_embedding_models.py --target models/embeddings --skip-defaults --model sentence-transformers/all-MiniLM-L6-v2
echo "TLDW_EMBEDDING_MODELS_DIR=models/embeddings" >> "$GITHUB_ENV"
- name: Run release OS shard tests
if: matrix.shard.name != 'media-legacy-free'
shell: bash
run: |
mkdir -p "$RESULTS_DIR"
export DATABASE_URL="sqlite:///./Databases/users.db"
unset TEST_DATABASE_URL POSTGRES_TEST_DB
pytest -q --disable-warnings -p pytest_asyncio.plugin \
-m "not jobs and not e2e" \
$TEST_PATHS \
--durations=50 \
--junit-xml="$RESULTS_DIR/${{ env.SHARD_NAME }}.xml"
- name: Run legacy-free media checks
if: matrix.shard.name == 'media-legacy-free'
shell: bash
run: |
mkdir -p "$RESULTS_DIR"
export DATABASE_URL="sqlite:///./Databases/users.db"
unset TEST_DATABASE_URL POSTGRES_TEST_DB
TLDW_DISABLE_LEGACY_MEDIA=1 pytest -q --disable-warnings -p pytest_asyncio.plugin \
-m "not jobs and not e2e" \
tldw_Server_API/tests/Media \
tldw_Server_API/tests/MediaIngestion_NEW \
--durations=25 \
--junit-xml="$RESULTS_DIR/media-legacy-free.xml"
- name: Upload test results
if: always()
continue-on-error: true
uses: actions/upload-artifact@v7
with:
name: full-suite-${{ matrix.os }}-py3.13-${{ matrix.shard.name }}
path: ${{ env.RESULTS_DIR }}
character-chat-rate-limits:
name: Character Chat Rate-Limits (TEST_MODE=0)
runs-on: ubuntu-latest
timeout-minutes: 20
needs: [full-suite-linux-312-summary, full-suite-linux-313-summary, changes]
if: ${{ github.event_name != 'pull_request' || needs.changes.outputs.backend_changed == 'true' }}
env:
PYTHONPATH: .
PYTEST_DISABLE_PLUGIN_AUTOLOAD: '1'
TEST_MODE: '0'
DISABLE_HEAVY_STARTUP: '1'
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Install FFmpeg and PortAudio (Linux)
uses: ./.github/actions/setup-ffmpeg
with:
install-ffmpeg: 'false'
install-portaudio: 'true'
- name: Setup Python and deps (uv)
uses: ./.github/actions/setup-python-deps
with:
python-version: '3.12'
use-uv: 'true'
cache-dependency-path: |
pyproject.toml
uv.lock
extras: dev
- name: Ensure pytest-asyncio installed
run: |
python -m pip install --upgrade pip
pip install pytest pytest-asyncio
- name: Run Character_Chat rate-limit tests with TEST_MODE=0
shell: bash
run: |
echo "TEST_MODE currently set to: ${TEST_MODE}"
pytest -q --disable-warnings -p pytest_asyncio.plugin \
tldw_Server_API/tests/Character_Chat/test_rate_limits_specific.py \
tldw_Server_API/tests/Character_Chat/test_world_book_and_limits.py::test_legacy_complete_endpoint_rate_limit \
tldw_Server_API/tests/Character_Chat/test_world_book_negatives_and_new_endpoint.py::test_rate_limits_max_messages_and_chats_and_completions_endpoint \
-rs
- name: Run Character_Chat_NEW rate-limit tests with TEST_MODE=0
shell: bash
run: |
echo "TEST_MODE currently set to: ${TEST_MODE}"
pytest -q --disable-warnings -p pytest_asyncio.plugin -m rate_limit \
tldw_Server_API/tests/Character_Chat_NEW/integration/test_character_api.py \
-rs