42 Commits
Author SHA1 Message Date
Tarun Kumar cf44cb845d fix(compat): enforce strict qualification at intake and add resilient status extraction 2026-09-11 16:36:24 +05:30
Tarun Kumar a916fcbae8 fix(compat): auto-dispatch conversion on open /trusted and harden poller idempotency 2026-09-11 14:40:02 +05:30
Tarun Kumar 92c4f8bcd7 fix(compat): harden workflow expressions, auto-merge idempotency, and game alias matching 2026-09-10 16:04:16 +05:30
Tarun Kumar 7659b0b042 fix(compat): shorten compat label description to meet GitHub 100-char limit 2026-09-10 15:45:59 +05:30
Tarun Kumar 3794f50efc fix(deploy): preserve github.json and updates.json on content-only deploys 2026-09-10 15:40:24 +05:30
Tarun Kumar 2a0d46d48d fix(deploy): verify cache ancestry, enforce cross-alias report validation, and harden auto-merge 2026-09-10 15:34:27 +05:30
Tarun Kumar 858c066dd0 fix(compat): harden report PRs, decouple seed drift, and optimize deploys 2026-09-10 15:18:30 +05:30
Tarun Kumar 03a4b2a17f fix(compat): isolate report PRs to report files to prevent merge conflicts 2026-09-10 14:50:46 +05:30
Tarun Kumar 93a81547f3 feat(compat): add /trusted command, automated PR merging, and decoupled deploy 2026-09-10 14:38:56 +05:30
Tarun 78f3940b13 feat: add /setstatus command and improve status normalization with regex fallbacks (#137) 2026-08-25 16:05:24 +05:30
4848e0e2b1 compat: Castlevania Dominus Collection (windows) (#127)
* compat: Castlevania Dominus Collection (windows)

* ci: trigger checks

* ci: update actions in ci and deploy workflows to @v4

---------

Co-authored-by: DistantMyth <136956042+DistantMyth@users.noreply.github.com>
Co-authored-by: Tarun Kumar <thetarun3@gmail.com>
2026-08-25 00:31:27 +05:30
Tarun Kumar 410fca53cd ci: update actions in refresh-data to @v4 2026-08-24 15:35:07 +05:30
Tarun 02d2ecdbbf Merge pull request #90 from KytyPS5/data/games-refresh
data: refresh games database
2026-08-24 15:28:25 +05:30
Tarun Kumar 9a0df59ae8 feat(sync): add upstream edit detection with GraphQL lastEditedAt and updated-existing labeling 2026-08-24 15:09:33 +05:30
Tarun Kumar 84daa21cc8 fix(import-games): sync compat-index seed and export in refresh workflow 2026-08-24 14:45:31 +05:30
Tarun Kumar 1dcda91a36 fix(hardening): fix markdown entity escaping, enrichment starvation, and frontmatter coercion
- Markdown: remove escapeHtml in parseInline to prevent React double-escaping entities in JSX
- Pipeline: prioritize unattempted games over noStore retries in import-games.mjs
- Frontmatter: only coerce known numeric fields (score) to prevent numeric titles/versions from failing string validation
- Workflows: pass step outputs through env in compat-convert.yml to prevent bash script injection
- UI & State: avoid in-place sorting mutation in GamePage and calculate remaining contributors dynamically
- Performance: deduplicate concurrent in-flight fetchContributorCount requests with in-memory caching
- Cleanup: delete unused findGame, timeAgo, and markdownToText dead code
- Security: bump nanoid via npm audit fix
2026-08-18 06:41:12 +05:30
Tarun Kumar 98340a958b fix(audit): resolve security gaps, sitemap canonicalization, and pipeline bugs
- 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
2026-08-18 05:22:55 +05:30
Tarun Kumar 6ebaf43a5d fix: restore sed backreference in compat PR title extraction
PR #43 accidentally doubled the backslash in the sed replacement when
reading title/os from the converted report, so the workflow emitted the
literal text `\1` instead of the backreference — /compat created PRs
titled "compat: \1 (\1)". Restore the single-backslash replacement
(byte-identical to the pre-PR version).
2026-08-18 00:14:34 +05:30
Tarun Kumar 9d0293619c feat: add /setos /setid /settitle overrides for compat mirrors
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.
2026-08-17 23:55:31 +05:30
Tarun 95681b792d ci: drop auto-merge from games refresh workflow (#29)
The repo doesn't allow auto-merge, so the enable-pull-request-automerge
step always failed at the end of the run. The import now stops after
opening the data/games-refresh PR for manual review.
2026-08-17 12:41:17 +05:30
Tarun Kumar 71cb83c9f0 compat: skip mirroring when a report for the same game+OS is as new
Reports are per (game, OS) and record ONE source issue, so converting a
newer upstream issue for the same game overwrote the older one's `> Source:`
marker — the older issue then looked unconverted and got re-mirrored. Compare
dates instead of issue numbers: only mirror an issue when no report for its
(game, OS) is already as new or newer, with an exception for same-run batches
(two or more issues for one game = fresh batch, mirror all).
2026-08-12 22:23:41 +05:30
Tarun Kumar 36a6656381 fix: write /compat step outputs via GITHUB_OUTPUT; fade side reveals on mobile
The /compat source step printed number/url/created to stdout, which the
Actions runner never captures as step outputs — so the conversion ran
with an empty --date/--source/--source-url and failed with "--date must
be YYYY-MM-DD" (run 31575866356). Append the values to $GITHUB_OUTPUT
instead, matching how refresh-data.yml already does it.

Also stop horizontal scroll-reveals on mobile: Reveal falls back to an
upward reveal for left/right directions below the sm breakpoint, and the
repo-stats + compatibility stats strips fade in instead of sliding —
side-slides looked glitchy on narrow viewports.
2026-08-12 13:28:31 +05:30
Tarun Kumar b7ac2a7453 compat: mirror issues + /compat per-game PRs, screenshots on reports
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.
2026-08-12 03:42:03 +05:30
nmzik b429deb72f chore: move Pages site to organization root 2026-08-09 03:37:53 +02:00
Tarun Kumar 83a0e0ffd4 data: split compatibility payload into slim index + per-game detail files
The site no longer ships raw report markdown to every visitor. The site-compat
export now writes a slim tested-games index with precomputed statuses (fetched
by home and the compatibility page), one small detail file per game (fetched
only by game pages), and a committed build-time seed. The client never parses
report markdown or aggregates statuses; the JS parser twin in the export lib is
kept in sync with the TS parser by a parity test. The game page falls back to
the bundle snapshot for 404s and legacy slug links, content-only deploys keep
working via the regenerated overlay, and report-sync PRs now carry a fresh
seed.
2026-08-09 04:12:21 +05:30