Other formats agents might prefer:
markdownjsonllms.txt

Agent? You probably want markdown or json, or Pod over MCP.

Reported issues for ris

Pod holds 19 of 22 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.

Back to ris.

Most discussed

fix(ui): chatgpt — pagination aus dem widget + csp-badge

Zwei Befunde aus der Live-Messung des Trefferlisten-Widgets (2026-08-02, ChatGPT Developer Mode, PR #59):

  1. Pagination aus dem Widget wirkt in ChatGPT nicht. Klick auf „Weiter ›" ließ die Liste unverändert (claude.ai: funktioniert einwandfrei, Seite 2 lädt live). Hypothesen, in Prüf-Reihenfolge: (a) ChatGPT erlaubt Widget-initiierte tools/call nur für Tools mit openai/widgetAccessible bzw. _meta.ui.visibility-Freigabe → Registrierung prüfen; (b) ChatGPT liefert auch im `callServerToo

Read the thread · 2026-08-02 · closed · 3 comments

spike(ui): rendering gate claude.ai/chatgpt

WP0 · Gate für die gesamte MCP-Apps-Initiative (Follow-up zu #23, Research-Update 2026-08-01)

Ziel

Beweisen (oder widerlegen), dass ein Custom-Connector-Widget in unserem Setup stabil rendert — bevor Produktiv-Code entsteht. Wegwerf-Code auf einem Spike-Branch, keine Build-Pipeline.

Hintergrund: Der Blank-Widget-Bug für Custom-Connector-UIs in claude.ai ist offen und launisch (kanonischer Tracker: [anthropics/claude-ai-mcp#165](https://github.com/anthropics/claude-ai-mcp/issues/165

Read the thread · 2026-08-01 · closed · 3 comments

feat(ui): dokument-viewer-widget

WP7 · Das zweite Widget: Dokument-Viewer mit §-Navigation (Release 2) (MCP-Apps-Initiative, siehe #23)

Ziel

§-Outline links, Dokumenttext rechts, Nachladen beim Scrollen — auf dem ui/shared/-Fundament aus dem Trefferlisten-Widget.

Scope

  • Zweites Widget ui/viewer/ mit eigener ui://ris-mcp/viewer-Resource (Build-Pipeline trägt es ohne Umbau); _meta.ui.resourceUri an ris_dokument.
  • Erst-Render aus dem normalen Tool-Result (der Text-Block bis 25k ist ja da), dann Outline +

Read the thread · 2026-08-01 · closed · 2 comments

chore(release): v1.6.0 live-pass + release

Abschluss des v1.6.0-Milestones (Muster: #50). Implementierung komplett — #83 (PR #85), #84 (PR #86), #53 (PR #87) gemerged. Vor dem Tag steht der manuelle Live-Pass (Tunnel + Dev-Connector; iframes nehmen keine Automation-Klicks).

Live-Pass-Checkliste (claude.ai + ChatGPT)

Datumswahl (#84):

  • Datum setzen/ändern/leeren bei ris_bundesrecht/ris_landesrecht — Re-Issue korrekt, Liste rendert
  • Mid-Edit-Verhalten: feuert Chrome change mit '' beim segmentweisen Löschen eines

Read the thread · 2026-08-04 · closed · 1 comment

feat(viewer): fullscreen display mode — chatgpt-höhe ist host-diktiert

Follow-up aus dem v1.5.0-Live-Pass (2026-08-02): Der Viewer übernimmt in ChatGPT die vom Host gemeldete Container-Höhe (geclamped 320–1200px) — funktional korrekt, aber auf großen Monitoren wirkt das Lesefeld klein (Autor-Feedback). Der saubere Hebel ist der fullscreen-Display-Mode aus der ext-apps-Spec (availableDisplayModes, Design-Doc §3.6 — bewusst nicht in v1.5.0 gebaut, §9-Q5 unbeantwortet: ob einer der Hosts ihn anbietet, ist ungemessen).

Scope-Skizze: Feature-Detection auf `availabl

Read the thread · 2026-08-02 · closed · 1 comment

refactor(formatting): tabellen- und br-gerechte separatoren in htmlToText

Follow-up aus dem #64-Review (nicht im v1.4.1-Patch): Die Block-Boundary-Separierung behandelt <br>, <td>, <th> wie Absätze — <br> wird zur Leerzeile, jede Tabellenzelle zum eigenen Absatz (Zeilengruppierung geht verloren; relevant für BGBl-Gebühren-/Satztabellen). Kein Regress (vorher klebten die Zellen — das war Bug #64), aber Informationsverlust bei Tabellenstruktur.

Vom Reviewer skizzierte Ziel-Form: $('td, th').after(' ') (Space statt Absatz), tr trägt den Break, `$('br').repla

Read the thread · 2026-08-02 · closed · 1 comment

feat(ui): trefferlisten-widget v1

WP4 · Das erste Widget: paginierte Trefferliste für alle 11 Suchtools (MCP-Apps-Initiative, siehe #23)

Ziel

Interaktive Trefferliste (Vanilla TypeScript, kein Framework — kleinstes Bundle) auf Basis des structuredContent aus WP2. Ein Widget bedient alle 11 Suchtools.

Scope

  • App.connect() + ontoolresult: Liste aus structuredContent rendern — Titel, citation_display, Applikations-Badge, aufklappbare Zeile mit Aktionen.
  • Pagination: „Weiter/Zurück“ → `app.callServerTool(qu

Read the thread · 2026-08-01 · closed · 1 comment

feat(ui): register mcp app resource + tool meta

WP3 · Server-Seite der MCP-Apps-Integration (MCP-Apps-Initiative, siehe #23)

Ziel

Widget-Resource registrieren und die 11 Suchtools UI-fähig machen — ris_dokument bleibt in diesem Schritt unangetastet.

Scope

  • Dependency @modelcontextprotocol/ext-apps (^1.7.5; Peer sdk ^1.29.0 — unser ^1.30.0 erfüllt das, Kompilierung unter NodeNext verifiziert; der bekannte .d.ts-Bug ext-apps#704 betrifft nur den app-bridge-Subpath, den nur Hosts brauchen).
  • registerAppResource für `ui:

Read the thread · 2026-08-01 · closed · 1 comment

Most recent

perf(dokument): includes-prefilter vor scopeRisContent gegen den vierten cheerio-parse

Follow-up aus dem #94-Final-Review (2026-08-06): scopeRisContent parst jedes Dokument-HTML einmal zusätzlich (der vierte cheerio-Parse pro Load, ~33 % Parse-Mehrkosten, worst case ~600-KB-Statute) — auch auf dem Pass-through-Pfad, den die überwältigende Mehrheit der Calls nimmt.

Fix (beweisbar sicher): if (!html.includes('documentContent')) return { html, pageTitle: null }; als erste Zeile in scopeRisContent (formatting.ts) — ein Klassen-Attribut kann ohne den Substring nicht matchen.

Read the thread · 2026-08-07 · open · 0 comments

feat(viewer): rail-aria-current folgt dem scrollen, nicht nur spruengen

Follow-up aus dem #80-Review (2026-08-06): aria-current auf den Gliederungs-Einträgen wird nur von focusAfterJump gesetzt — also bei Rail-Klicks und Re-Anchor-Renders. Scrollt der Leser in eine andere Sektion, highlightet die Rail weiterhin die zuletzt geklickte. Der onScroll-Handler aktualisiert anchorOffset bereits (debounced, für den Snapshot), rendert aber bewusst nicht.

Fix-Skizze: beim debounced Anchor-Update das aria-current gezielt umsetzen (targeted DOM-Update, kein vol

Read the thread · 2026-08-07 · open · 0 comments

a11y(viewer): persistente live-region statt best-effort role=status

Follow-up aus dem #92/#93-Review (2026-08-06): Das Lade-Feedback („Abschnitt lädt …", .ris-doc-loading) und das Replace-Skeleton tragen role="status", werden aber als Knoten mit bereits gesetztem Text eingefügt — Live-Regions werden von Screenreadern nur zuverlässig angesagt, wenn die Region vor der Inhaltsänderung im DOM steht. Sehende Nutzer sehen das Feedback, SR-Nutzer vermutlich nicht.

Fix-Skizze: eine persistente, leere Live-Region in der Viewer-Shell (view.ts/index.html), i

Read the thread · 2026-08-07 · open · 0 comments

feat(viewer): prefetch-margin erhöhen + sichtbares abschnitt-lädt-feedback

Live-Pass-Befund (#88): Zwischen Scroll-Ans-Ende und erscheinendem Abschnitt liegen in claude.ai 10–15s Host-Call-Latenz — ohne sichtbares Feedback wirkt das wie Stillstand.

  • Prefetch-Margin des IntersectionObservers von 600px auf einen Wert erhöhen, der die Latenz beim normalen Lesen versteckt (z. B. 2.000px; messen statt raten — Harness-Szenario mit delayMs).
  • Lade-Zustand am Sentinel sichtbar machen („Abschnitt lädt …“, deutscher Copy-Stil aus states.ts/copy.ts), damit Warten a

Read the thread · 2026-08-05 · closed · 0 comments

feat(viewer): outline eager beim mount laden statt scroll-gated

Größter UX-Hebel aus dem v1.6-Live-Pass (#88, 2026-08-05): Bei Dokumenten, deren Outline das Mount-Budget sprengt (konsolidierte Gesetze — DSG: 157k Text, 22k Outline), erscheint die Gliederungsleiste erst, nachdem der Leser durch die kompletten ~25k Mount-Zeichen gescrollt hat (Sentinel sitzt am Textende) plus Host-Call-Latenz (claude.ai: 10–15s). Genau bei den Dokumenten, wo die Rail am wertvollsten wäre, ist sie praktisch unsichtbar.

Fix-Skizze: Den ersten Abschnitts-Call (Offset 0 —

Read the thread · 2026-08-05 · closed · 0 comments

feat(ui): „Rechtslage am …“-datumswahl für bundesrecht/landesrecht

WP2 des v1.6.0-Milestones (Design lokal: .superpowers/sdd/v160-plan/v160-design-facetten.md, von Phil abgenommen 2026-08-04). Herausgelöst aus #53.

Natives <input type="date"> mit Label „Rechtslage am“ im Trefferlisten-Header, sichtbar nur wenn query.tool ris_bundesrecht oder ris_landesrecht ist. Datum ändern → Re-Issue des Query-Echos mit neuem fassung_vom und seite-Reset auf 1; Datum leeren → Re-Issue ohne fassung_vom (RIS-Default = geltende Fassung). Während eines laufend

Read the thread · 2026-08-04 · closed · 0 comments

fix(ui): reopen-restore — 'Unerwartete Daten'-Notice bei nutzlosem host-global toolOutput unterdrücken

Live-Befund aus dem #60-Pass (2026-08-02): Beim Reopen einer ChatGPT-Conversation stellt das Widget die letzte Seite korrekt aus widgetState wieder her, zeigt aber zusätzlich „Unerwartete Daten erhalten. Die angezeigte Seite bleibt unverändert." — ChatGPT replayed ein nicht-parsebares toolOutput (source: 'host-global'), und presentFromHost unterdrückt bei aktivem Restore nur source === 'missing'.

Im #69-Review exakt so als parked minor vorhergesagt. Fix-Skizze: bei restored === true

Read the thread · 2026-08-02 · closed · 0 comments

fix(dokument): RIS Vorlese-Dubletten (sr-only) verdoppeln jeden Gliederungsmarker im Volltext

Live-Befund von Phil (2026-08-02, Prompt «Zeig mir § 1295 ABGB in der geltenden Fassung»): ris_dokument reicht die RIS-Barrierefreiheits-Duplikate ungefiltert durch — jede Gliederungseinheit erscheint doppelt («(1)Absatz eins,», «§ 1295.Paragraph 1295,»), und Metadaten kleben ohne Trenner aneinander («KurztitelAllgemeines bürgerliches Gesetzbuch»).

Ursache (am echten NOR12019037-HTML verifiziert): RIS markiert die Vorlesefassung mit <span class="sr-only">…</span> neben den sichtbaren `<

Read the thread · 2026-08-02 · closed · 0 comments

docs(tools): Agents zu titel/paragraph statt suchworte leiten; ABGB-Querverweis bei Gewährleistungs-Suchen fehlt

Zwei Produkt-Findings aus den Live-Tests am 2026-08-01 (claude.ai + ChatGPT über Custom Connector, Query «Gewährleistung»):

  1. Volltextsuche ertrinkt: suchworte="Gewährleistung" liefert 3.337 Treffer, von der RIS-API alphabetisch nach Gesetzestitel sortiert statt nach Relevanz — oben stehen Beschußverordnung und Zinsertrags-Abkommen. Beide Modelle (Opus in claude.ai, GPT in ChatGPT) griffen reflexhaft zuerst zu suchworte. Vorschlag: Tool-Description von ris_bundesrecht/`ris_landesrech

Read the thread · 2026-08-01 · closed · 0 comments

feat(ui): facetten-chips + fassung-datum

WP8 · Backlog: Ausbaustufe der Trefferliste — unabhängig, kann vor oder nach dem Viewer laufen (MCP-Apps-Initiative, siehe #23)

Scope (Grobschnitt, wird beim Anpacken verfeinert)

  • Judikatur-Facetten-Chips über der Trefferliste (Gerichtsbarkeit, Gericht, Rechtssatz/Entscheidungstext, Rechtsgebiet): Chip setzen/entfernen → verfeinerter Aufruf desselben Suchtools über das Query-Echo. Reine Widget-Erweiterung, kein Server-Umbau.
  • „Rechtslage am …“-Datumswahl im Widget-Header für `

Read the thread · 2026-08-01 · closed · 0 comments

feat(dokument): chunk-api + document cache

WP6 · Server-Fundament für den Dokument-Viewer (Release 2) (MCP-Apps-Initiative, siehe #23)

Ziel

Große Dokumente in Abschnitten ausliefern, ohne pro Abschnitt einen vollen RIS-Fetch zu bezahlen — und ohne den bestehenden ris_dokument-Textpfad anzufassen.

Hintergrund: Heute stirbt der geholte Volltext im Handler-Scope (kein Cache, nirgends); truncateResponse() gibt nur den gekürzten String zurück (keine Offsets, keine Gesamtlänge, CHARACTER_LIMIT nicht exportiert). Ein naiver Chun

Read the thread · 2026-08-01 · closed · 0 comments

The remaining reports are on the project's issue tracker.