Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 7 additions & 5 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Contributing to PulseEngine

[![PRs Welcome](https://img.shields.io/badge/PRs-Welcome-brightgreen?style=flat-square)](https://github.com/your-username/market-intelligence-platform/pulls)
[![Issues](https://img.shields.io/badge/Issues-Open-blue?style=flat-square)](https://github.com/your-username/market-intelligence-platform/issues)
[![PRs Welcome](https://img.shields.io/badge/PRs-Welcome-brightgreen?style=flat-square)](https://github.com/The-Pulse-Engine/Pulse-Engine_Market_Intelligence_Platform/pulls)
[![Issues](https://img.shields.io/badge/Issues-Open-blue?style=flat-square)](https://github.com/The-Pulse-Engine/Pulse-Engine_Market_Intelligence_Platform/issues)
[![Code Style: PEP8](https://img.shields.io/badge/Code%20Style-PEP%208-4B8BBE?style=flat-square)](https://peps.python.org/pep-0008/)
[![License: MIT](https://img.shields.io/badge/License-MIT-22c55e?style=flat-square)](LICENSE)

Expand Down Expand Up @@ -99,8 +99,8 @@ Additional context:

```bash
# 1. Fork and clone
git clone https://github.com/Codex-Crusader/le_Market_Intelligence_Platform.git
cd le_Market_Intelligence_Platform
git clone https://github.com/The-Pulse-Engine/Pulse-Engine_Market_Intelligence_Platform.git
cd Pulse-Engine_Market_Intelligence_Platform

# 2. Create a virtual environment
# Python 3.11–3.14 are all supported
Expand Down Expand Up @@ -161,9 +161,11 @@ pip install -r requirements-dev.txt
pytest
```

All 14 tests should pass. The suite covers:
All tests should pass. The suite covers:
- Core function invariants (RSI range, signal score range, sentiment range)
- Pipeline smoke tests (`analyse_asset`, `run_full_scan`)
- Edge case coverage for scoring, sentiment, deduplication, and contradictions
- Storage round-trip, retention policy, dry-run scan, and backtest evaluation

The tests are intentionally minimal — they verify the pipeline runs and outputs are sane,
not that every key and value matches exactly. See `tests/MAINTENANCE.md` for guidance on
Expand Down
21 changes: 21 additions & 0 deletions Docs/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,27 @@ All notable changes to this project will be documented in this file.

---

## [0.2.2] - 2026-04-12
### "Dashboard Stability + Security + Test Expansion"

### Added
- `tests/test_logic_coverage.py` — edge case coverage for signal scoring, sentiment, deduplication, and contradiction detection
- `tests/test_storage_and_scan.py` — storage round-trip, retention policy, dry-run scan, and synthetic backtest tests
- Signal score legend added to the sidebar for quick reference
- Loading spinner shown in the dashboard while live analysis is running

### Changed
- Pinned runtime dependencies tightened after `pip audit` security review; no vulnerable packages remain in `requirements.txt`
- Dashboard cache invalidation logic reduced to avoid unnecessary reruns on stale data
- Dashboard stale-refresh handling tightened — refresh now triggers only when data is genuinely outdated
- Signal legend copy in sidebar clarified for readability

### Technical
- Total test count increased from 14 to 37
- All test files use package-based imports consistent with the v0.2.1 modular restructure

---

## [0.2.1] - 2026-04-07
### "Modular Package Restructure + Asset Organisation"
> Partial progress toward v0.3. Arbitrary ticker support, local installer, and open issue backlog (#10, #11, #12) remain outstanding before v0.3.0 is reached.
Expand Down
18 changes: 6 additions & 12 deletions Docs/ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@ The project is split into two surfaces sharing one core engine:

## Current State

[![Version](https://img.shields.io/badge/Version-0.2.0-a16207?style=flat-square)]()
[![Version](https://img.shields.io/badge/Version-0.2.2-a16207?style=flat-square)]()
[![Assets](https://img.shields.io/badge/Assets-24%20Tracked-0ea5e9?style=flat-square)]()
[![Tests](https://img.shields.io/badge/Tests-14%20passing-22c55e?style=flat-square)]()
[![Tests](https://img.shields.io/badge/Tests-37%20passing-22c55e?style=flat-square)]()
[![Sentiment](https://img.shields.io/badge/Sentiment-VADER-7c3aed?style=flat-square)]()
[![Demo](https://img.shields.io/badge/Demo-Live-FF4B4B?style=flat-square&logo=streamlit&logoColor=white)](https://pulseengine.streamlit.app/)

Expand All @@ -47,7 +47,8 @@ What exists right now:
- Compressed snapshot storage with tiered retention (7 / 30 / 60 days)
- Backtesting module with hit-rate evaluation
- Streamlit live demo at [pulseengine.streamlit.app](https://pulseengine.streamlit.app/)
- Docker support, 14 tests, full documentation
- Docker support, 37 tests, full documentation
- Modular package layout (`src/`, `app/`, `dashboard/`, `storage/`, `config/`) — completed in v0.2.1

What is missing:

Expand All @@ -68,14 +69,7 @@ What is missing:

### Repo restructure

```
pulseengine/
core/ <- shared engine (app.py, config.py, storage.py, backtest.py)
local/ <- Streamlit dashboard, full feature set
web/ <- restricted demo build
Docs/
tests/
```
> **Done in v0.2.1.** The codebase is now organised into `src/`, `app/`, `dashboard/`, `storage/`, and `config/` packages. No further structural reorganization is required before v0.3.

### Arbitrary ticker support

Expand All @@ -89,7 +83,7 @@ Right now every asset has a handcrafted keyword list in `config.py`. Scaling bey
### Other v0.3 deliverables

- Local installer script — one command, no friction, no manual dependency wrangling
- Close issue backlog: #10 (last scanned message), #11 (config.py docstrings), #12 (signal score legend)
- Close remaining issue backlog: #10 (last scanned message), #11 (config.py docstrings)
- `ROADMAP.md` published and linked from the README

---
Expand Down
2 changes: 1 addition & 1 deletion Docs/code_flow.md
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ flowchart TD

```mermaid
flowchart TD
CALL([fetch_news_articles called]) --> PARALLEL[ThreadPoolExecutor\nMAX_WORKERS = 8\nfetch each of 12 feeds]
CALL([fetch_news_articles called]) --> PARALLEL[ThreadPoolExecutor\nMAX_WORKERS = 4\nfetch each of 12 feeds]

PARALLEL --> PARSE[feedparser.parse each URL\nwith REQUEST_TIMEOUT = 20s]

Expand Down
35 changes: 19 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

[![Python](https://img.shields.io/badge/Python-3.11%2B-3776AB?style=flat-square&logo=python&logoColor=white)](https://www.python.org/)
[![License: MIT](https://img.shields.io/badge/License-MIT-22c55e?style=flat-square)](LICENSE)
[![Streamlit](https://img.shields.io/badge/Streamlit-1.30%2B-FF4B4B?style=flat-square&logo=streamlit&logoColor=white)](https://streamlit.io/)
[![Streamlit](https://img.shields.io/badge/Streamlit-1.54%2B-FF4B4B?style=flat-square&logo=streamlit&logoColor=white)](https://streamlit.io/)
[![pandas](https://img.shields.io/badge/pandas-2.0%2B-150458?style=flat-square&logo=pandas&logoColor=white)](https://pandas.pydata.org/)
[![Plotly](https://img.shields.io/badge/Plotly-5.18%2B-3F4F75?style=flat-square&logo=plotly&logoColor=white)](https://plotly.com/)
[![Plotly](https://img.shields.io/badge/Plotly-6.6%2B-3F4F75?style=flat-square&logo=plotly&logoColor=white)](https://plotly.com/)
[![Data: Yahoo Finance](https://img.shields.io/badge/Data-Yahoo%20Finance-6001D2?style=flat-square)](https://finance.yahoo.com/)
[![News: RSS Feeds](https://img.shields.io/badge/News-12%20RSS%20Feeds-FFA500?style=flat-square)](https://en.wikipedia.org/wiki/RSS)
[![Assets: 24 Tracked](https://img.shields.io/badge/Assets-24%20Tracked-0ea5e9?style=flat-square)]()
Expand Down Expand Up @@ -132,8 +132,8 @@ flowchart TD

```bash
# 1. Clone the repository
git clone https://github.com/Codex-Crusader/le_Market_Intelligence_Platform.git
cd le_Market_Intelligence_Platform
git clone https://github.com/The-Pulse-Engine/Pulse-Engine_Market_Intelligence_Platform.git
cd Pulse-Engine_Market_Intelligence_Platform

# 2. Create and activate a virtual environment
# Python 3.11–3.14 are all supported
Expand Down Expand Up @@ -179,11 +179,11 @@ Dashboard available at `http://localhost:8501`.

| Package | Minimum Version | Purpose |
|---|---|---|
| streamlit | 1.30.0 | Dashboard framework |
| yfinance | 0.2.30 | Price history via Yahoo Finance |
| pandas | 2.0.0 | DataFrame operations |
| plotly | 5.18.0 | Interactive charts and heatmap |
| feedparser | 6.0.0 | RSS feed ingestion |
| streamlit | 1.54.0 | Dashboard framework |
| yfinance | 1.2.1 | Price history via Yahoo Finance |
| pandas | 2.3.3 | DataFrame operations |
| plotly | 6.6.0 | Interactive charts and heatmap |
| feedparser | 6.0.12 | RSS feed ingestion |
| vaderSentiment | 3.3.2 | Sentiment analysis |

Install the pinned runtime dependencies first:
Expand Down Expand Up @@ -373,16 +373,19 @@ pulse_engine_1/
context.py Sector and market context analysis
explanation.py Human-readable narrative generation
sentiment.py VADER + financial-lexicon sentiment scoring
errors.py Custom exception types (PipelineError hierarchy)
assets/
icons/
favicon.ico
logo/
pulseengine_logo.png
tests/
conftest.py Shared fixtures
test_core.py Sanity and invariant tests for pure functions
test_pipeline.py Smoke tests for end-to-end pipelines
MAINTENANCE.md Guide for updating the test suite
conftest.py Shared fixtures
test_core.py Sanity and invariant tests for pure functions
test_pipeline.py Smoke tests for end-to-end pipelines
test_logic_coverage.py Edge case coverage for scoring, sentiment, dedup
test_storage_and_scan.py Storage round-trip, retention, dry-run scan, backtest
MAINTENANCE.md Guide for updating the test suite
Docs/
code_flow.md Detailed execution flow diagrams
variable_list.md Complete variable and constant reference
Expand Down Expand Up @@ -417,8 +420,8 @@ pulse_engine_1/

Contributions are welcome. Please read [CONTRIBUTING.md](CONTRIBUTING.md) before opening a pull request. All contributors must follow the code style and testing requirements described there.

[![Open Issues](https://img.shields.io/github/issues/Codex-Crusader/le_Market_Intelligence_Platform?style=flat-square)](https://github.com/Codex-Crusader/le_Market_Intelligence_Platform/issues)
[![Pull Requests](https://img.shields.io/github/issues-pr/Codex-Crusader/le_Market_Intelligence_Platform?style=flat-square)](https://github.com/Codex-Crusader/le_Market_Intelligence_Platform/pulls)
[![Open Issues](https://img.shields.io/github/issues/The-Pulse-Engine/Pulse-Engine_Market_Intelligence_Platform?style=flat-square)](https://github.com/The-Pulse-Engine/Pulse-Engine_Market_Intelligence_Platform/issues)
[![Pull Requests](https://img.shields.io/github/issues-pr/The-Pulse-Engine/Pulse-Engine_Market_Intelligence_Platform?style=flat-square)](https://github.com/The-Pulse-Engine/Pulse-Engine_Market_Intelligence_Platform/pulls)

---

Expand All @@ -427,7 +430,7 @@ Contributions are welcome. Please read [CONTRIBUTING.md](CONTRIBUTING.md) before
PulseEngine is being built toward a local-first desktop application — a full-power EXE that runs entirely on your machine with no cloud dependency, no accounts, and no data leaving your device. The Streamlit deployment is a live demo with restricted features.

Planned milestones:
- **v0.3** — Repo restructure, arbitrary ticker support, local installer
- **v0.3** — Arbitrary ticker support, local installer (repo restructure done in v0.2.1)
- **v0.4** — Desktop EXE via PyInstaller, GitHub Actions build pipeline
- **v0.5** — FinBERT running locally, offline mode, export features
- **v1.0** — Full market coverage, dynamic asset discovery, all stocks
Expand Down
Loading