You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This document covers environment variables, config files, Docker defaults, and a glossary of terms used across CLI, API, and dashboard. Each glossary entry follows what (definition), why (purpose), and how (where you set or observe it).
Enable/disable signal families without code changes
Boolean flags
advanced_v2
Week 2 engine: weights, comps cohort rules, ROI heuristics
Primary scoring model for ranking (model_version: advanced_v2)
Adjust weights and comps / roi blocks; re-run evaluation before promote
evaluation_thresholds
Dataset quality, sanity, stability, promote gates
Automated promote/revert decisions
Used by evaluation CLI and tests
backend/config/scoring_profiles.yaml
Section
What
Why
How
profiles
Named strategy definitions (profile_id, weights, enabled signals)
Backend resolves presets to concrete scoring mixes
Add/edit profiles; map presets below
preset_alias_mapping
Maps dashboard/CLI preset enum → profile_id
Operators pick friendly preset names
Change mapping to switch default strategy without renaming API fields
Strategy presets exposed to API/dashboard: rental_income, resale_arbitrage, refurbishment_value_add, balanced_long_term.
Docker Compose defaults
Service
Host port
Notes
Postgres 16
5432
user/password/database: propsignal
Backend API
8000
Health: /api/v1/health
Frontend
3000
Dashboard at /dashboard/control
Apply migrations after first start: ./scripts/migrate-docker.sh.
Ranking runs require migration 20260511_0009 (ranking_runs.records_considered) in Postgres-backed environments.
API routes (dashboard-relevant)
Route
What
How
GET /api/v1/datasets/sources
List ingestion jobs as ranking sources
Optional status, q query params
GET /api/v1/scoring/profiles
List strategy presets
Dashboard strategy dropdown
GET /api/v1/scoring/profiles/{preset}
Resolved profile + override bounds
Control Panel override editor
POST /api/v1/rankings/query
Execute ranking run
Body: sources, filters, strategy, result_window
GET /api/v1/rankings/{run_id}/listings/{listing_id}
Listing detail for a run
Diagnostics trees in UI
GET /api/v1/runs
Paged run summaries
page, page_size
GET /api/v1/runs/{run_id}
Full run detail + persisted results
Run detail page
GET /api/v1/runs/{run_id}/export
CSV or JSON export
format, optional listing_detail=true
GET /api/v1/diagnostics/summary
Operator health snapshot
Diagnostics tab
Glossary
Data ingestion
PropFlux JSON contract
What — A JSON array of listing objects with required fields (listing_id, price, etc.) documented in data-contract-propflux.md.
Why — Single ingestion shape keeps validation, dedup, and scoring predictable.
How — ingest <path> via CLI; only array roots accepted; invalid rows go to rejected_listings.
Ingestion job (ingestion_jobs)
What — One ingest execution: input path, status, record counts, timestamps.
Why — Tracks lifecycle and links listings/scores to a dataset batch.
How — Created on ingest; statuses below; referenced in dashboard as job:{id}.
Ingestion job status
Status
What
Why
created
Job row exists, work not started
Initial state
processing
Ingest/score pipeline running
Operator visibility
completed
All records valid
Clean ingest
completed_with_errors
Partial accept; some rejects
Common real-world outcome
analyzed
Downstream analytics stage completed
Pipeline progression
failed
Fatal payload or processing failure
Needs operator action
How — Filter Source Library by status; diagnostics shows counts by status.
Dataset source / source token
What — Ranking input identifier, format job:{ingestion_job_id}.
Why — Ranking query selects which ingested datasets to merge and score.
How — Pass in dataset_sources array on rank request; multi-select in Control Panel.
Validation status (pass / warn / fail)
What — Dataset-level quality outcome from validate-dataset.
Why — Warns before trusting a job for scoring/ranking.
How — Shown in Source Library detail; summaries in Diagnostics.
Listings and deduplication
Canonical listing (listings)
What — Normalized listing row deduplicated across ingests.
Why — Stable listing_id for scores and ranking results.
How — Dedup key: source_site + listing_id, else source_hash from normalized payload; re-ingest updates existing row.