- Security: restrict /compat and /set* comment workflows to maintainers (OWNER, MEMBER, COLLABORATOR)
- Sitemap: use siteGameKey for canonical URLs matching internal routes
- Sync: pass GITHUB_TOKEN to upstream fetchCandidates to prevent 60 req/hr rate limiting
- Intake: guard slug derivation against missing title in issue-to-compat.mjs and escape frontmatter strings
- Forms: whitelist known template group headings in parseIssueBody to preserve user markdown headings
- Accuracy: fetch true contributor total from GitHub API pagination headers in RepoStats
- Cleanup: delete unused ReportCard component and rename markdown.tsx to markdown-view.tsx
- Content: fix title and filename typos in The Thing and GTA Vice City reports
Replace majority-vote aggregation with the single verified report's status:
the intake pipeline now keeps exactly one report per (game, OS), keyed by
title ID so region variants and punctuation-differing titles dedup against
the same report. validate-compat.mjs fails the build on duplicates,
issue-to-compat.mjs retires stale same-(game, OS) reports, and the site and
export aggregations throw instead of silently voting. Retire the duplicate
Demon's Souls and GTA III: DE reports and rebuild compat-index.json.
Let a maintainer fix fields an issue can't express cleanly (OS that
doesn't normalize, missing/Unknown PPSA serial, wrong title) by
commenting /setos /setid /settitle on the mirror issue. The command
records the value in a ## Overrides section of the mirror body, which
the /compat conversion prefers over parsed fields and which survives
poller refreshes. Failure messages are also posted back on the issue
as comments so the reason is visible without reading the workflow log.
Submitters sometimes list several region-variant serials in "Game ID /
serial" (e.g. Balan Wonderworld: "PPSA-02058 , PPSA-02057"). The report
stores one titleId and the games DB already tracks every variant
(allTitleIds), so the converter now picks the first valid PPSA code
instead of failing the whole /compat conversion.
Replace the standing report PR (which piled every converted game into
one branch) with an issue-driven flow: the poller mirrors each
unconverted KytyPS5 game-status issue here as a `compat`-labeled issue,
and commenting /compat converts one mirror into its own per-game report
PR (updated in place on re-runs, mirror closed on success).
Screenshots from the issue now travel with their report: the converter
copies the `<img>` URLs out of the mirrored issue into a `screenshots`
frontmatter array, the game page hotlinks the latest accepted report's
images (nothing is downloaded into the repo), and the validator
requires each to be an http(s) URL on a report with a linked source.
The /getss download flow is removed.
README and the contributing page document the /compat workflow.
Adopt the KytyPS5 Game Emulation Status Report statuses (doesnt-boot →
logo → main-menu → in-game) end to end: the sync workflow now polls
KytyPS5 game-status issues into report PRs instead of mirroring local
issues, and the GUI export maps 1:1 to the new ladder. Every report's
status was re-derived from its source issue (bodies + retest comments)
rather than mechanically mapped from the old 4-tier values; retest-driven
statuses carry an updated build/date and a retest note.
The issue template now asks for optional "Steps to reproduce" and "Extra
notes" alongside the required notes. The /compat workflow extracts them
(blank "No response" textareas are skipped) and the converter renders
them as ## Steps to reproduce / ## Extra notes sections in the report
body, which the game page already renders as markdown headings. Also
hardened two parser edges exposed by free-text notes: exact-token flag
matching in the converter (--title can't shadow --title-id), and the
site's extractSource now takes the LAST `> Source:` line so a blockquote
inside the notes can't be mistaken for the report's provenance.
Reduce the status ladder from 6 tiers to the community 4-tier system with the
new colors/definitions (grey Nothing, red Boots, orange Playable, green
Perfect). Existing reports migrate ingame → playable, and old 6-tier issue
statuses remap on /compat intake. Untested games are hidden from the
compatibility list and game page instead of showing grey.
Also ships the earlier uncommitted pipeline work together so the deploy is
coherent: runtime compat JSON (content-only deploys without rebuilds), split
deploy/CI fast paths, and locally-hosted carousel screenshots.
Strip every mention of the external reference project from code comments,
scripts and workflows, and rewrite the README as a standalone project doc
(functionality, building, derived data, compatibility database, games
database, automation, deployment) with no outside references except the
KytyPS5 emulator itself.
Every stored game now has per-OS results instead of one mixed aggregate:
reports carry a required os tag (one report per game+OS), "Any" shows the
best status across the per-OS majorities (playable on Windows + ingame on
macOS → Playable on Any, Playable on Windows, Ingame on macOS), and each
OS filter/stats/game-page slot reflects only that OS's reports. Seed data
is retagged to game-os.md: the 5 screenshot games are Windows (the README
states Windows is the primary, most-tested platform) and Dreaming Sarah is
Linux (PR #146); macOS stays grey until a macOS test is filed. Conversion
workflow now requires --os and names files by game+os so re-running after
verification overwrites that OS's status; the GUI export's top-level status
mirrors the site's best-across-OS rule.
Official site for KytyPS5 — React 19 + Vite + TypeScript + Tailwind v4.
Pages: Home, Download, Documentation, FAQ, Contributing, About, 404,
Compatibility with per-game report pages. Includes GitHub data fetching,
the GUI-compatible compatibility JSON export, the issue-template report
pipeline (template + conversion workflow), CI and GitHub Pages deploy.