File size: 3,833 Bytes
2deb2c5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | # Engineering Standards
Blum must be developed as a serious open-source technical case study. Every shipped increment should be designed for correctness, efficiency, transparency and maintainability.
## Non-Negotiable Rules
- Do not ship placeholders as working functionality.
- Do not fabricate data.
- Do not generate synthetic market prices, synthetic news, synthetic sentiment, synthetic backtest results or synthetic AI evidence.
- If a data source fails, report the failure clearly instead of filling the gap with fake values.
- If a feature cannot be fully implemented in the current increment, mark it as unavailable, document the limitation and do not present it as complete.
- Keep code, comments, UI copy and documentation in English.
- Treat every score as research triage, not financial advice or a trading recommendation.
## Efficiency Standard
Every implementation should aim for the best practical efficiency available within the current architecture.
Required practices:
- Prefer batch operations over per-row network or database calls.
- Use incremental updates where possible.
- Avoid recomputing indicators, embeddings or model outputs when persisted results are fresh.
- Keep provider calls bounded, retry-aware and observable.
- Keep AI models lazy-loaded and task-specific.
- Cache expensive model or vector operations only when the cache is evidence-preserving and invalidation is clear.
- Avoid blocking frontend rendering on long-running ingestion or model tasks.
- Keep API responses structured, compact and explicit.
## Data Integrity Standard
Every stored data row must preserve its source.
Required practices:
- Persist provider names for OHLCV data.
- Persist model names for sentiment, embeddings and AI explanations.
- Persist timestamps for ingestion, scoring and insight generation.
- Distinguish missing data from zero values.
- Distinguish provider failure from no matching data.
- Never silently downgrade from real data to synthetic data.
## AI Standard
AI modules must be specialized and evidence-bound.
Required practices:
- Use FinBERT or equivalent financial NLP for financial sentiment when available.
- Keep VADER as a baseline or fallback, not the primary engine when FinBERT is available.
- Use sentence-transformers for semantic retrieval and clustering.
- Use the LLM only for structured explanation from retrieved evidence.
- The LLM must not invent facts, prices, events, forward returns, recommendations or catalysts.
- Store model metadata with each AI output.
## Signal Standard
Signals must be explainable and auditable.
Required practices:
- Store factor inputs and normalized score components.
- Version score logic when weights or formulas change.
- Separate signal score, confidence, risk and classification.
- Explain why an asset surfaced.
- Explain what confirms the signal.
- Explain what contradicts the signal.
- Explain what to monitor next.
- Report missing evidence as part of the decision.
## UI Standard
The frontend must behave like a financial intelligence platform, not a decorative landing page.
Required practices:
- Prioritize dense but readable information.
- Show what to watch and why.
- Make loading, empty and error states explicit.
- Use charts and tables to support decisions, not decoration.
- Keep dark professional styling, clear hierarchy and responsive layouts.
- Avoid consumer-style visual filler.
## Verification Standard
Every meaningful increment should include verification.
Minimum checks:
- Python syntax or unit checks for backend changes.
- Type/build checks for frontend changes when dependencies are available.
- API smoke checks for changed endpoints when runtime is available.
- Documentation update when behavior, architecture or limitations change.
- Clear statement of what was and was not verified.
|