Skip to content
This repository was archived by the owner on Oct 23, 2026. It is now read-only.

Commit 01fe6a6

Browse files
authored
Mark the map as no longer maintained, and show each title ID's own stage (#117)
1 parent b4edbfb commit 01fe6a6

8 files changed

Lines changed: 74 additions & 9 deletions

File tree

‎README.md‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
# AnyPS5 blocker map
22

3-
[![CI](https://github.com/AlxcBTW/anyps5-roadmap/actions/workflows/ci.yml/badge.svg)](https://github.com/AlxcBTW/anyps5-roadmap/actions/workflows/ci.yml)
4-
[![Pages](https://github.com/AlxcBTW/anyps5-roadmap/actions/workflows/roadmap.yml/badge.svg)](https://github.com/AlxcBTW/anyps5-roadmap/actions/workflows/roadmap.yml)
3+
> [!WARNING]
4+
> **No longer maintained, as of 24 October 2026.** The repository is archived and the page is no longer rebuilt.
5+
> It stays online with its last build, so its stages and blockers are as of that day. Newer test reports are in
6+
> AnyPS5's [Game bring-up discussions](https://github.com/boykopovar/AnyPS5/discussions/categories/game-bring-up).
7+
> The code is MIT licensed, and anyone can fork it to carry the map on.
58
69
Which open issues stop which PS5 games in [AnyPS5](https://github.com/boykopovar/AnyPS5), the tool that ports PS5 executables to Linux and Windows,
710
ranked by how many games a fix would move, plus how much of the PS5's system libraries and GPU AnyPS5
811
implements.
912

10-
**Live: <https://alxcbtw.github.io/anyps5-roadmap/>**. A merge to `main` goes live within minutes. Otherwise
11-
GitHub's schedule rebuilds the page: an hourly build, and a check several times an hour that builds once an upstream
12-
issue or PR changed and costs no API quota when nothing did (`.github/workflows/update-check.yml`). GitHub runs
13-
schedules best effort and started both far less often than their cron asks, so the rebuilds come irregularly: in
14-
mid-October 2026 about 1.7 hours apart at the median and at most about 5 hours apart
13+
**Last build: <https://alxcbtw.github.io/anyps5-roadmap/>**. While the map was maintained, a merge to `main` went
14+
live within minutes, and GitHub's schedule rebuilt the page from upstream every few hours
1515
([#70](https://github.com/AlxcBTW/anyps5-roadmap/issues/70) has the details).
1616

1717
A community project, not an official AnyPS5 page. Every stage and link on it comes from public GitHub

‎web/src/App.tsx‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { lazy, Suspense, useCallback, useEffect, useMemo, useRef } from "react";
2+
import { Archived } from "./components/Archived";
23
import { Drawer } from "./components/Drawer";
34
import { Footer } from "./components/Footer";
45
import { TopBar } from "./components/TopBar";
@@ -72,6 +73,7 @@ export function App() {
7273
</a>
7374
<TopBar view={view} project={data?.model.project ?? "AlxcBTW/anyps5-roadmap"} />
7475
<main id="main" ref={main} tabIndex={-1} className="page main">
76+
<Archived builtAt={data?.model.doc.generated_at ?? null} repo={data?.model.repo ?? "boykopovar/AnyPS5"} />
7577
{roadmap.status === "loading" && (
7678
<p className="loading" role="status">
7779
Loading the games…

‎web/src/components/Archived.tsx‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { fmtDate } from "../lib/format";
2+
import { External } from "./ui";
3+
4+
/** The map is no longer maintained: every view opens with the date its data is from. */
5+
export function Archived({ builtAt, repo }: { builtAt: string | null; repo: string }) {
6+
const date = fmtDate(builtAt);
7+
return (
8+
<p className="archived">
9+
<strong>This map is no longer updated.</strong>
10+
{date && <> Stages and blockers are as of {date}.</>} For newer test reports, see the{" "}
11+
<External href={`https://github.com/${repo}/discussions/categories/game-bring-up`}>Game bring-up discussions</External> on
12+
AnyPS5.
13+
</p>
14+
);
15+
}

‎web/src/components/Footer.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export function Footer({ model }: { model: Model | null }) {
2929
</External>
3030
</>
3131
)}
32-
. Rebuilt every few hours. Merged corrections go live within minutes.
32+
. This is the last build.
3333
</p>
3434
)}
3535
<p className="foot-fine">

‎web/src/styles/app.css‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,21 @@ a {
129129
.main:focus {
130130
outline: none;
131131
}
132+
/* the map is no longer maintained: ink on a sunken surface, not a warning color */
133+
.archived {
134+
margin-top: var(--s-5);
135+
padding: var(--s-3) var(--s-4);
136+
border-radius: 12px;
137+
background: var(--sunken);
138+
color: var(--text-2);
139+
font-size: var(--text-ui);
140+
line-height: 1.5;
141+
text-wrap: pretty;
142+
}
143+
.archived strong {
144+
color: var(--text);
145+
font-weight: 550;
146+
}
132147
.loading {
133148
padding-block: var(--s-9);
134149
color: var(--text-2);
@@ -1220,6 +1235,11 @@ details.detail-sec[open] > summary::after {
12201235
gap: 6px var(--s-3);
12211236
font-size: var(--text-small);
12221237
}
1238+
.stage-others {
1239+
color: var(--text-2);
1240+
font-size: var(--text-small);
1241+
line-height: 1.5;
1242+
}
12231243
.source {
12241244
color: var(--text-2);
12251245
}

‎web/src/views/About.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export function About({ loc }: { loc: Location }) {
3939
return (
4040
<div className="view about">
4141
<ViewHead title="About this map">
42-
A community map of how far PS5 games get on AnyPS5, rebuilt every few hours from public issues and pull requests in{" "}
42+
A community map of how far PS5 games get on AnyPS5, built from public issues and pull requests in{" "}
4343
<External href={`https://github.com/${model.repo}`}>{model.repo}</External>. Every stage and every blocker links
4444
its source.
4545
</ViewHead>

‎web/src/views/GameDetail.tsx‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ export function GameDetail({ id, loc }: { id: string; loc: Location }) {
3737
const evidence = game.evidence ?? [];
3838
const meaning = model.stages.find((s) => s.name === g.stage)?.meaning;
3939
const several = game.title_ids.length > 1;
40+
// the game's stage is its furthest title ID's; the others can be lower or have none (#114)
41+
const others = (game.titles ?? []).filter((t) => t.id !== best?.title && t.stage !== g.stage);
4042
const timeline = game.timeline ?? [];
4143
const mentions = game.issues.length + game.prs.length + (game.discussions?.length ?? 0);
4244
// one link per kind of source: two region IDs often both have a store page
@@ -101,6 +103,18 @@ export function GameDetail({ id, loc }: { id: string; loc: Location }) {
101103
{g.reports && <span className={`tag sure sure-${g.confidence.level ?? "reported"}`}>{g.reports}</span>}
102104
</p>
103105
)}
106+
{others.length > 0 && (
107+
<p className="stage-others">
108+
{others.map((t, i) => (
109+
<Fragment key={t.id}>
110+
{i > 0 && " "}
111+
<span className="mono">{t.id}</span>
112+
{t.name && t.name.toLowerCase() !== g.name.toLowerCase() && ` (${t.name})`}{" "}
113+
{t.stage ? `is at ${t.stage}.` : "has no stage yet."}
114+
</Fragment>
115+
))}
116+
</p>
117+
)}
104118
</section>
105119

106120
{g.claim && (

‎web/src/views/views.test.tsx‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,20 @@ describe("Game drawer", () => {
153153
expect(screen.queryByText(/Cover art from/)).toBeNull();
154154
});
155155

156+
it("names the title IDs that are not as far as the game", () => {
157+
const doc = structuredClone(fixture);
158+
const game = doc.games.find((x) => x.id === "kena-bridge-of-spirits")!;
159+
game.stage = { stage: "Presents", title: "PPSA01802", url: "https://github.com/boykopovar/AnyPS5/issues/1", origin: "mined" } as typeof game.stage;
160+
game.titles = game.titles.map((t) => ({ ...t, stage: t.id === "PPSA01802" ? "Presents" : null }));
161+
const loc = { route: { item: null }, under: { view: "games" } } as unknown as Parameters<typeof GameDetail>[0]["loc"];
162+
render(
163+
<DataContext.Provider value={{ ...data, model: buildModel(doc) }}>
164+
<GameDetail id="kena-bridge-of-spirits" loc={loc} />
165+
</DataContext.Provider>,
166+
);
167+
expect(document.querySelector(".stage-others")!.textContent).toBe("PPSA01746 has no stage yet.");
168+
});
169+
156170
it("shows how far a game gets off main and the open PRs it needs", () => {
157171
render(<Drawer id="kena-bridge-of-spirits" />);
158172
const box = screen.getByRole("region", { name: "Off main" });

0 commit comments

Comments
 (0)