Repository navigation
feat(roadmap): standalone HTML renderer for the roadmap data (ROADMAP-1b) - #1597
Merged
Merged
Conversation
The renderer module does not exist yet, so the whole file is red on the merge base. The tests pin the public renderRoadmap contract: escaping, section order, supplied stand and numbers, honest empty/stale states, Hängt without actions, direction lanes, package details, a standalone page and the real buildRoadmap output. Plan-ID: ROADMAP-1b Test-First: scripts/lib/roadmap-page.test.mjs::hostile strings from every input stay inert text Test-First: scripts/lib/roadmap-page.test.mjs::sections follow the reading order and directions list Jetzt before Später Test-First: scripts/lib/roadmap-page.test.mjs::head shows the supplied stand and exactly four supplied numbers Test-First: scripts/lib/roadmap-page.test.mjs::missing facts read Unbekannt instead of a number or an invented date Test-First: scripts/lib/roadmap-page.test.mjs::an empty plan and a stale stand and absent auxiliary sources do not pass as proof Test-First: scripts/lib/roadmap-page.test.mjs::Hängt shows the five fields without action controls and keeps every row Test-First: scripts/lib/roadmap-page.test.mjs::directions keep every lane and status and show only the supplied forecast Test-First: scripts/lib/roadmap-page.test.mjs::package details name source line and PR and unresolved dependencies with g-st state forms Test-First: scripts/lib/roadmap-page.test.mjs::page is standalone without external references or animation under a strict policy Test-First: scripts/lib/roadmap-page.test.mjs::inputs stay unmodified and css cannot close the style element Test-First: scripts/lib/roadmap-page.test.mjs::real buildRoadmap output renders with its owner and package facts Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
renderRoadmap(data, options) turns buildRoadmap output (plus optional releases, plan findings and plan changes) into one self-contained HTML string. Sections in order: Hängt, Zeitleiste, Richtungen, Abhängigkeiten, Plan-Mängel, Plan-Änderungen. It recomputes nothing: forecast, state, version and dates are shown as supplied, missing facts read Unbekannt and absent auxiliary sources read "noch nicht verbunden". All input is escaped, the page carries a strict CSP (script by hash), no external assets, no animation, native details/select controls only. Plan-ID: ROADMAP-1b Test-First: scripts/lib/roadmap-page.test.mjs::hostile strings from every input stay inert text Test-First: scripts/lib/roadmap-page.test.mjs::sections follow the reading order and directions list Jetzt before Später Test-First: scripts/lib/roadmap-page.test.mjs::head shows the supplied stand and exactly four supplied numbers Test-First: scripts/lib/roadmap-page.test.mjs::missing facts read Unbekannt instead of a number or an invented date Test-First: scripts/lib/roadmap-page.test.mjs::an empty plan and a stale stand and absent auxiliary sources do not pass as proof Test-First: scripts/lib/roadmap-page.test.mjs::Hängt shows the five fields without action controls and keeps every row Test-First: scripts/lib/roadmap-page.test.mjs::directions keep every lane and status and show only the supplied forecast Test-First: scripts/lib/roadmap-page.test.mjs::package details name source line and PR and unresolved dependencies with g-st state forms Test-First: scripts/lib/roadmap-page.test.mjs::page is standalone without external references or animation under a strict policy Test-First: scripts/lib/roadmap-page.test.mjs::inputs stay unmodified and css cannot close the style element Test-First: scripts/lib/roadmap-page.test.mjs::real buildRoadmap output renders with its owner and package facts Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
PLAN rows changed on main; merge (no rebase) so the ROADMAP-1b row can be added on a current PLAN. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
R1597-F1: without options.now the stale-stand comparison used new Date(undefined) (NaN), so a 2000 stand showed no warning. R1597-F2: with the direction filter set, a matching card behind the closed "weitere n anzeigen" overflow stayed hidden and the count still included filtered-out cards. Plan-ID: ROADMAP-1b Test-First: scripts/lib/roadmap-page.test.mjs::a missing or unusable options.now still warns about an old stand Test-First: scripts/lib/roadmap-page.test.mjs::the direction filter opens overflow hits and counts only the cards that match Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
R1597-F1: a missing or unparsable options.now now falls back to the real clock, so an old stand always shows the "veraltet" banner. R1597-F2: the direction filter now opens every overflow list that holds a matching card, hides overflow lists without a match and rewrites the "weitere n anzeigen" count to the cards that match. Plan-ID: ROADMAP-1b Test-First: scripts/lib/roadmap-page.test.mjs::a missing or unusable options.now still warns about an old stand Test-First: scripts/lib/roadmap-page.test.mjs::the direction filter opens overflow hits and counts only the cards that match Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
R1597-P1: the package row ROADMAP-1b now states what is true after this PR is opened (renderer in review, caller/regeneration/hosting open) and ROADMAP-1 records the partial state (data #1580, renderer #1597). Plan-ID: ROADMAP-1b No-Test: documentation only Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The PR's own PLAN rows must describe what is true after the merge (AGENTS.md review rule), not "in review". Both rows now say the standalone HTML renderer is delivered with the merge of #1597 and keep callers, automatic regeneration, hosting and Root's browser acceptance as open. Fixes R1597-P1. No-Test: plan status row Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Cuarroc
marked this pull request as ready for review
October 16, 2026 01:49
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
Owner
Author
|
Root: head 5177034 accepted (Codex + Gemini APPROVE on this head), required checks pass. @Mergifyio queue |
45 of 69 tasks
Owner
Author
|
Root auto-queue: head 5177034 unchanged since review-ok, all checks green. @Mergifyio queue |
Contributor
Merge Queue Status
This pull request spent 18 minutes 19 seconds in the queue, including 13 minutes 20 seconds running CI. Required conditions to merge
|
This was referenced Oct 16, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Dieser PR liefert den Baustein, der aus den schon vorhandenen Plan- und GitHub-Daten eine eigenständige, private Roadmap-Seite als HTML erzeugt, damit du den echten Plan statt des statischen Entwurfs siehst. Die Seite zeigt zuerst, was hängt, dann die Zeitleiste, die Richtungen (Jetzt, Als Nächstes, Später), die Abhängigkeiten sowie Plan-Mängel und Plan-Änderungen, und schreibt „Unbekannt“ oder „noch nicht verbunden“, wo Angaben fehlen, statt etwas zu erfinden. Es gibt noch keinen Aufruf, der die Seite wirklich erzeugt oder veröffentlicht; die Prüfung im Browser und die Freigabe liegen bei Root.
Report
Plan-ID: ROADMAP-1b
Was sich ändert (nur zwei neue Dateien, 227 Zeilen inkl. Tests, keine Naht):
scripts/lib/roadmap-page.mjs:renderRoadmap(data, options)gibt ein vollständiges HTML-Dokument als String zurück.dataist die Ausgabe vonbuildRoadmap;optionskanntokensCss,stateCss,releases,findings,changesundnowliefern (ohnetokensCss/stateCsswerdensrc/design/tokens.cssundsrc/design/state/state.cssgelesen).generatedAtundmainShawörtlich), Hängt, Zeitleiste, Richtungen, Abhängigkeiten, Plan-Mängel, Plan-Änderungen.buildRoadmapsie liefert. Zustandsformen und -farben nur über die vorhandeneng-st-Klassen, nur wenn ein Zustand mitgeliefert wurde. Fehlendes heißtUnbekannt, fehlende Zusatzquellen heißen „noch nicht verbunden“ mit Erklärung. Leerer Plan, unbekannter oder (mitoptions.now) über 12 Stunden alter Stand zeigen einen Hinweis und kein „0“ als Beleg.Datei:Zeile, PR-Nummer, Abhängigkeiten (nicht im Plan = markiert). Nur die ersten 3/7/5 Einträge sind sichtbar, der Rest steckt hinter nativem „weitere n anzeigen“; nichts wird verworfen. Richtungen ohne „Jetzt“ sind zu einer Zeile „n Richtungen ruhen“ zusammengefasst; erledigte und verschobene Pakete bleiben sichtbar.default-src 'none', Skript nur per Hash), keine externen Dateien, kein Netz, keine Animation (Hover-Übergang nur bei erlaubter Bewegung). Bedienung nur mit nativen Elementen (details,select) und einem kleinen Skript für Theme (System/Hell/Dunkel) und Richtungsfilter; der Filter wirkt nur auf Richtungen und Abhängigkeiten, nie auf die Kopfzahlen.Belege (alle im eigenen Arbeitsbaum, Linux)
node --test scripts/lib/roadmap-page.test.mjsan43c04272(nur Test)roadmap-page.mjsfehltnode --test scripts/lib/roadmap-page.test.mjsanc621479fbash scripts/ci/red-first.shc7a43fbdrot/fehlend, am Kopf grünbash scripts/ci/secret-scan.shbash scripts/ci/gates.sh lane prepushanc621479fgit ls-remote origin claude/roadmap-page-1c621479f1c68fe169dabefdc355cb5c1ad5fb79bMessung im Browser (Chromium aus dem Playwright-Cache, Wegwerfseite außerhalb des Repos, erzeugt aus dem
docs/PLAN.mddieses Stands mit sechs erfundenen Test-PRs; nichts davon ist committet): Seitenbreite = Fensterbreite bei 390 und 1440 px, hell und dunkel (scrollWidth390/390 und 1440/1440); keine Konsolen- oder CSP-Fehler; Richtungsfilter lässt die Kopfzahlen unverändert; Theme-Wechsel setzt/entferntdata-theme; Tab-Fokus aufsummaryzeigt 2 px solid Ring. Ich habe 1440 hell (Kopf, Hängt, Zeitleiste), 390 dunkel (Kopf, Hängt), Richtungen/Abhängigkeiten bei 1440 und Abhängigkeiten bei 390 als Screenshot angesehen. Die Abnahme im Browser liegt bei Root.Architecture drift: keine Meldung (Gate grün), nichts auf die Allowlist gesetzt.
Offene Anforderungen und Grenzen (ehrlich)
buildRoadmapgeliefert), „ruht seit“-Datum, „neu seit letztem Besuch“, Liste hinter jeder Kopfzahl, aufklappbare Prognose-Basis über die einzeilige Angabe hinaus. Releases stehen als geordnete Liste, nicht maßstäblich auf einer Zeitachse.details-Elemente; kein Pfeiltasten-Roving.plan-stale) und greift nur, wenn der Aufruferoptions.nowübergibt.buildRoadmapohne PR-Liste aufgerufen wurde: dann steht „Offene Paket-PRs 0“ als gelieferte Zahl da. Der spätere Aufrufer muss PRs und Releases wirklich laden.releases= Ausgabe vongh release list --json tagName,publishedAt,isDraft,isPrerelease;findings= Ergebnis voncheckPlan(kind,id,file,line,detail,pr);changes=[{ date, text }](odersubjectstatttext).docs/PLAN.md: die eigenen Zeilen ROADMAP-1b und ROADMAP-1 dieses PR tragen den Stand nach dem Merge (siehe Fix round 2); keine Zeile wird später von Root ergänzt.NICHT ABGEDECKT
#[cfg(windows)]-Tests und Windows-Arme von clippy nicht geprüft; die Windows-Bahn läuft in der Merge-Queue. Dieses Paket enthält keinen plattformabhängigen Code.linux(nicht inprepush).Review: ausstehend (Stufe B). Root bestellt einen unabhängigen Prüfer aus einer nicht-Anthropic-Familie; Autor ist Claude, keine Selbstfreigabe. Kein
review-ok, kein Label, kein Merge von mir.Fix round 1 (NACHBESSERN)
Source: independent Codex gpt-6.1-sol review of head
c621479f(REQUEST CHANGES). Plan-ID: ROADMAP-1b. This section supersedes three statements above: "nur zwei neue Dateien, 227 Zeilen" (now three files, 268 lines againstmain, below the 300-line limit, so no overrun), "docs/PLAN.mdist nicht angefasst" (the ROADMAP-1b and ROADMAP-1 rows are updated, see R1597-P1) and "greift nur, wenn der Aufruferoptions.nowübergibt" (see R1597-F1).renderRoadmap(data)withoutoptions.nowcompared againstnew Date(undefined)(NaN), so an old stand showed no bannerec0b769c, fixff001324: a missing or unparsablenowfalls back to the real clock.ec0b769c, fixff001324: the filter opens overflow lists that hold a match, hides overflow lists without a match and rewrites the count to the matching cards. Header numbers stay unchanged.Plan-ID: ROADMAP-1b68b07446. After mergingorigin/main, the row ROADMAP-1b already existed with "Geplant"; it now reads "In Prüfung: #1597 …" (never "Erledigt" for itself), and ROADMAP-1 records "teilweise erledigt: Daten #1580, Renderer #1597 in Prüfung; Aufrufer und automatische Neuerzeugung offen". ThePlan-ID: ROADMAP-1bline of this PR is unchanged and correct.No finding was rejected.
New head:
68b074463e3e036a9f5b4e8cdedf055dfaf1d319(git ls-remote origin claude/roadmap-page-1confirms it). Commits sincec621479f:846010b3merge oforigin/main(reason: PLAN rows changed on main; merge, no rebase),ec0b769cfailing tests,ff001324fix,68b07446PLAN rows.Evidence (own worktree, Linux)
node --test scripts/lib/roadmap-page.test.mjsatec0b769c(tests only)veraltetbanner; 0 visible Beta cards), 11 old tests greennode --test scripts/lib/roadmap-page.test.mjs scripts/lib/roadmap-data.test.mjsat68b07446RF_BASE_BRANCH=main bash scripts/ci/red-first.shnpm run plan:checkmain; none mentions ROADMAP (--jsongrep count 0). Not caused by this PR: rows PLAN-CLEAN-1 (#1591) and PLAN-CLEAN-2 (#1592) still read "In Prüfung"/"Geplant" although both PRs are merged; their owner has to update them.bash scripts/ci/secret-scan.shnode scripts/ci/architecture-drift.mjs checkandgit diff --check origin/main...HEADbash scripts/ci/gates.sh lane prepushat68b07446Architecture drift: no finding, nothing added to the allowlist.
NICHT ABGEDECKT
#[cfg(windows)]tests and Windows arms are not checked, the Windows lane runs in the merge queue. This package has no platform-dependent code.linuxworkflow gates are not part ofprepush.plan-stale).Review: pending, Root commissions the delta review (tier B fix round: one outside reviewer, non-Anthropic family). No
review-ok, no label, no ready, no merge from me.🤖 Generated with Claude Code on the ProjectA server worker
Fix round 2 (NACHBESSERN)
Source: independent Codex gpt-6.1-sol delta review of head
68b07446(APPROVE WITH CONDITIONS, condition R1597-P1). Plan-ID: ROADMAP-1b. This section supersedes the R1597-P1 line of fix round 1 ("In Prüfung: #1597 …") and the statement in the report above that the state of ROADMAP-1b belongs to Root: the PR's own PLAN rows carry the state after the merge, so no row is added later.docs/PLAN.mdrows ROADMAP-1b and ROADMAP-1 still said "In Prüfung" / "Renderer #1597 in Prüfung", which is stale after the merge (AGENTS.md review rule: the PR's own row states what is true after merge)5177034e. ROADMAP-1b now reads "Teilweise erledigt: eigenständiger HTML-Rendererscripts/lib/roadmap-page.mjsmit Merge von #1597 geliefert (16.10.); offen bleiben Aufrufer, automatische Neuerzeugung bei jedem Merge, Hosting und Root-Browserabnahme". ROADMAP-1 now reads "teilweise erledigt: Daten #1580 und HTML-Renderer mit Merge von #1597 geliefert; Aufrufer und automatische Neuerzeugung offen; Aufteilung in ROADMAP-1a und ROADMAP-1b bleibt bestehen". The wording follows the reviewer's proposal; the row is not "Erledigt" because callers, regeneration and hosting stay open.No finding was rejected. Code, tests and trailers are unchanged since
68b07446(diff of this round: 2 lines indocs/PLAN.md; total againstmainunchanged at 268 lines, below 300).New head:
5177034e07e346564361ff7ff313e908113e59d0(git ls-remote origin claude/roadmap-page-1). Commit since68b07446:5177034e(docs only,No-Test: plan status row).Evidence (own worktree, Linux)
node scripts/plan-check.mjs --jsonbefore and after the editmain); count 33 before, 33 after; no finding mentions ROADMAP or #1597node --test scripts/lib/roadmap-page.test.mjs scripts/lib/roadmap-data.test.mjsbash scripts/ci/secret-scan.shbash scripts/ci/gates.sh lane prepushat5177034e07e346564361ff7ff313e908113e59d0Architecture drift: no finding, nothing added to the allowlist.
NICHT ABGEDECKT
#[cfg(windows)]tests and Windows arms are not checked, the Windows lane runs in the merge queue. This round changes only a docs table row.plan:checkfindings that remain (duplicate IDs, PLAN-CLEAN-1/-2 status rows, unknown v2 dependencies, PRs without a Plan-ID) exist onmainand are not caused by this PR.Review: pending, Root commissions the delta review (tier B fix round; docs-only delta). No
review-ok, no label, no ready, no merge from me.🤖 Generated with Claude Code on the ProjectA server worker
Second review (Root acceptance, 16.10.2026 ~04:05 MESZ)