feat: add compatibility table endpoint and rendering for game libraries

This commit is contained in:
Patryk Gensch
2026-06-18 23:32:31 +02:00
parent 8875540186
commit 2c785dc87c
8 changed files with 575 additions and 4 deletions

View File

@@ -200,7 +200,8 @@ python -m ams.api.importer --game "Reksio i UFO" snapshots/PIKLIB8.dll.snapshot.
uvicorn ams.api.app:create_app --factory --reload # serwer
```
Endpointy: `POST/GET /games`, `POST/GET /snapshots` (import deduplikowany po sha256),
`GET /diff?old=&new=[&owner=]`, `GET /snapshots/{id}/similar`, `POST/GET /jobs`, `GET /health`.
`GET /diff?old=&new=[&owner=]`, `GET /snapshots/{id}/similar`, `GET /compat?format=md|json`,
`POST/GET /jobs`, `GET /health`.
Testy: `pytest` (28, w tym integracyjne na golden pair).
### Podobne wersje
@@ -211,6 +212,35 @@ Miara jest *cross-compiler*: golden pair PIKLIB8 (MSVC6) ↔ bloomoodll (MSVC8)
(types 95% / methods 87% / events 77% / fields 90%), tam gdzie fuzzy-hash binarki daje 0.
Fuzzy (ssdeep) leci jako sygnał poboczny „prawie ten sam plik", gdy snapshot ma `binary.fuzzy`.
## Tablica kompatybilności (eksport pod dokumentację)
Krosowy widok całego katalogu **grupowany po nazwie biblioteki** (`PIKLIB8.dll`, `bloomoodll.dll`…):
która gra wiezie którą bibliotekę. Haczyk: ta sama nazwa może wystąpić w kilku grach, a *mimo to*
nie być tym samym silnikiem. Dlatego w obrębie jednej nazwy klastrujemy **warianty po powierzchni
silnika** (te same zbiory tożsamości co `diff`/`similarity` — kompilator-agnostyczne), a każdy
wariant inny niż referencyjny (`A`) dostaje **gwiazdkę** `*` z deltą *czym* się różni. Byte-różnice
z rekompilacji nie generują gwiazdki — liczy się API skryptowe.
```bash
# z plików snapshot (bez DB/serwera); Label= ustawia kolumnę-grę
python -m ams.compat \
"Reksio i UFO=snapshots/PIKLIB8.dll.snapshot.json" \
"Reksio i Kapitan Nemo=snapshots/bloomoodll.dll.snapshot.json" \
--format md -o compat.md # albo --format json
```
Z katalogu (DB) przez API — pobiera gotowy plik (`Content-Disposition: attachment`):
```bash
curl -OJ "http://127.0.0.1:8000/compat?format=md" # → compat.md
curl -OJ "http://127.0.0.1:8000/compat?format=json" # → compat.json (grupy + warianty + diffy)
```
W UI: przycisk **⬇ kompat** w panelu *Gry / wersje*. Markdown to macierz `biblioteka × gra`
(`✓` = obecna; `A`/`B*`/… gdy nazwa ma kilka wariantów powierzchni) plus sekcja *Warianty* z
przypisem: dla każdego rozbieżnego wariantu overlap % i `types/methods/events/fields +N/-N/~N`
względem referencyjnego.
## Front — Command Center
Po starcie serwera otwórz **http://127.0.0.1:8000/** (`/``/ui/`). Statyczny UI bez build-stepu