---
session: ses_2a6e
updated: 2026-04-04T15:34:15.344Z
---

# Session Summary

## Goal
Analyze and document how the most important motions are defined and ranked in the Stemwijzer codebase, focusing on importance criteria, selection mechanisms, metadata, key files, and user interaction patterns.

## Constraints & Preferences
- Provide detailed findings with file paths and line numbers
- Focus on code analysis without making changes
- Document the complete motion ranking and display system

## Progress
### Done
- [x] Analyzed motion importance criteria (controversy_score, SVD scores, entropy-based discrimination)
- [x] Documented motion selection mechanisms for SVD display, Political Compass, quiz, and similarity search
- [x] Mapped database schema for motions, mp_votes, svd_vectors, similarity_cache tables
- [x] Identified key files and their roles in motion handling
- [x] Documented user interaction flows for SVD components tab, MP quiz, and motion browser
- [x] Cataloged SVD_THEMES dictionary with all 10 component labels and explanations

### In Progress
- (none - analysis complete)

### Blocked
- (none)

## Key Decisions
- **Analysis-only session**: No code modifications were requested or made; this was purely investigative work to understand the existing motion ranking system.

## Next Steps
1. Awaiting further instructions from user on what to do with the analysis (e.g., implement changes, add features, optimize)

## Critical Context
### Motion Importance Metrics
1. **Controversy Score**: `1 - winning_margin` (0.5 = even split, higher = more controversial)
2. **SVD Component Scores**: Absolute projection on each SVD component axis
3. **Entropy Score**: Shannon entropy of vote distribution (for quiz discrimination)

### Motion Selection Strategies
- **SVD Display**: Top 10 per component (5 positive pole, 5 negative pole)
- **Political Compass**: Top 5 at each pole for axis labeling
- **Quiz Seed**: Top 8 controversial motions with individual MP votes
- **Quiz Discriminating**: Entropy-ranked motions that best split candidate MPs

### Database Schema
```sql
motions: id, title, description, date, policy_area, voting_results (JSON), 
         winning_margin, controversy_score, layman_explanation, body_text, url
mp_votes: motion_id, mp_name, party, vote, date
svd_vectors: window_id, entity_type, entity_id, vector (JSON 50-dim)
similarity_cache: source_motion_id, target_motion_id, score, vector_type, window_id
```

### Key Functions
| Function | Location | Purpose |
|----------|----------|---------|
| `get_motions_with_individual_votes()` | database.py:660-692 | Get controversial motions with MP votes |
| `choose_discriminating_motions()` | database.py:817-903 | Entropy-based motion selection |
| `_top_motion_ids()` | axis_classifier.py:274-295 | Top N motions per axis pole |
| `build_svd_components_tab()` | explorer.py:3081-3497 | UI for SVD motion display |
| `build_mp_quiz_tab()` | explorer.py:3499-3724 | MP quiz with adaptive motion selection |

### SVD Themes Location
`explorer.py:432-762` - Dictionary `SVD_THEMES` contains labels, explanations, and party poles for components 1-10.

## File Operations
### Read
- `/home/sgeboers/Projects/stemwijzer/analysis/axis_classifier.py`
- `/home/sgeboers/Projects/stemwijzer/database.py`
- `/home/sgeboers/Projects/stemwijzer/explorer.py` (partial reads at offsets 1860, 3050, 3400)
- `/home/sgeboers/Projects/stemwijzer/pages/1_Stemwijzer.py`
- `/home/sgeboers/Projects/stemwijzer/scripts/generate_svd_json.py`
- `/home/sgeboers/Projects/stemwijzer/similarity/lookup.py`
- `/home/sgeboers/Projects/stemwijzer/src/types/motion_types.py`
- `/home/sgeboers/Projects/stemwijzer/migrations/2026_03_21__create_mp_metadata.sql`
- `/home/sgeboers/Projects/stemwijzer/migrations/2026_03_21__create_mp_votes.sql`
- `/home/sgeboers/Projects/stemwijzer/migrations/2026_03_21__create_svd_vectors.sql`
- `/home/sgeboers/Projects/stemwijzer/migrations/2026-03-22-add-similarity-cache.sql`

### Modified
- (none)
