Filter SPARQL query to only return entertainment awards (film, TV,
music, theater) and add a canonical award map to normalize variants
(e.g. all Oscar/Academy Award → "Oscar", all Golden Globe → "Golden
Globe"). Non-entertainment awards (orders, medals, honorary degrees)
are excluded both at SPARQL level and via PHP keyword filter.
Also restart messenger container on cache:clear to avoid stale DI
container errors.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Use a VALUES clause to fetch awards for all actors of a film in a
single SPARQL request, reducing Wikidata API calls from ~20 per film
to 1 and avoiding idle timeout errors from rate limiting.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace batch-level progress (processedBatches/totalBatches) with
film-level progress (processedFilms/totalFilms) for smoother UI updates.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Avoid re-parsing the entire CSV file in each batch handler by including
the film data in the message payload itself.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Move AwardImporter after ImportRepository to fix autowiring order
in compiled container cache.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The popover was invisible because it rendered inside the table's
overflow-x:auto scroll container. FloatingPortal moves it to document.body.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Clear Doctrine identity map after each film import to prevent memory
accumulation. Run messenger with --no-debug and higher PHP memory_limit
to avoid profiling overhead in dev.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove the notification system entirely and show import progress
directly in the user dropdown menu. Block new imports while one
is already running.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Move hint buttons from a separate flex column into the table as the
first <td> of each row, ensuring pixel-perfect alignment with grid rows.
Use position:sticky with box-shadow to keep hints fixed on the left
while scrolling horizontally.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add CSS variables (--cell, --cell-font, --trigger-h) for responsive cell sizing
- Shrink grid cells at 600px and 420px breakpoints
- Add .page-body wrapper with 16px horizontal padding to prevent edge collisions
- Separate hint column from scrollable grid: hints rendered outside the table in a fixed flex column, only the letter grid scrolls horizontally
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Hints should help identify the row actor (to find the highlighted letter),
not reveal the main actor directly. Simplified hint generation: no shared
exclusion pools needed since each row has a different actor.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>