Maity: Board

Tester queue: merged PRs to verify against main

tsk-2wdcawn6esyc in progress Maity Test Team (maity-test-team)

Oliver adopted this at the 2026-11-03 jour fixe (req-znrk4d665nz1): the tester gets steady work from merged PRs.

How it works:

Start with today's merges: #1282 (236a31f2), #1289 (ab19cbd6), #1296 (24f4f9b0), #1297 (628f0a26), #1298 (4d9f66b9).

Notes

  1. Maity Test Team (maity-test-team) ·

    #1282 236a31f2 ok

    Geprüft auf main 4d9f66b9: test_attachments_s3.py und test_attachments_sent.py laufen grün, 54 passed auf SQLite und 59 passed auf PostgreSQL 16 (zusammen mit test_test_database.py, -n 2). Nahe Strecke: deploy/helm/check.sh meldet 65 ok und "all held". Nicht geprüft: ein echter S3-Bucket, nur der lokale moto-Server.

  2. Maity Test Team (maity-test-team) ·

    #1289 ab19cbd6 ok

    tests/test_test_database.py: auf SQLite werden alle 5 Tests übersprungen, auf PostgreSQL 16.15 laufen alle 5 durch (59 passed zusammen mit den Anhang-Tests, -n 2). Das ist der erste PG-Lauf für diese Datei auf main in meiner Umgebung.

  3. Maity Test Team (maity-test-team) ·

    #1296 24f4f9b0 ok

    make check in web/ endet mit Exit 0 und "0 finding(s)". Die drei entfernten Schlüssel (sessions.alert_open, sessions.confirm.refused, sessions.confirm.unknown) fehlen in zh-Hans wie in Englisch, bell.security_hint ist übersetzt. Beobachtung, kein FAIL: check.py nennt für zh-Hans 17 fehlende Schlüssel (bell.* und sessions.* rund um "als gelesen markieren"), die Englisch erst nach #1296 bekam. Das ist ein Nachzug, der noch offen ist.

  4. Maity Test Team (maity-test-team) ·

    #1297 628f0a26 ok

    Gleiche Läufe wie bei #1282: 54 passed auf SQLite, 59 passed auf PostgreSQL 16. Darin sind die Fälle "Anhang während des Kopierens gelöscht" und die Sweep-Tests von test_attachments_sent.py. Nicht geprüft: ein echter S3-Bucket.

  5. Maity Test Team (maity-test-team) ·

    #1298 4d9f66b9 ok

    Die zehn Schlüssel der Vertragsansicht und forge.via.instance/forge.via.none sind in de, fr, es, it, pt, nl, ja, ko und zh-Hans vorhanden. Nur in nl sind nav.contract und contract.whole.title gleich dem Englischen, das Wort ist dort dasselbe ("Contract"). make check: Exit 0, 0 findings.

  6. Lotse (lotse) ·

    #1291 3080c64d card tsk-bpww6m2s1pbf. Check: the hub's own pages (landing, invite, error pages) end with the product line (§16.8); /invite/ sends no Referer (meta referrer before any request, plus the hub's Referrer-Policy header); join-page tests in hub/tests/test_joins.py.

  7. Maity Test Team (maity-test-team) ·

    #1291 3080c64d ok

    Geprüft auf main 3080c64d.

    • Tests: test_joins.py, test_product_line.py, test_register_page.py: 80 passed (SQLite, -n 2). Darin der Fall "die Join-Seite im Browser endet mit der Zeile und sendet keinen Referer".
    • Live gegen einen frischen Hub auf Loopback (SQLite): alle fünf Mail-Link-Seiten (/mail/verify, /unsubscribe, /sign-in, /second-factor-reset, /account-deletion, jeweils mit ungültigem Token) enden mit der Produktzeile ("Maity 2026 · Found a bug? · …") und antworten mit Referrer-Policy: no-referrer und einer CSP, die den Style-Block nur per Hash erlaubt (default-src 'self', kein unsafe-inline).
    • Nicht live geprüft: die Join-Seite mit gültigem Token (dafür braucht es ein Projekt mit Einladung), nur über den Test oben.

    Zur Notiz: Die Produktzeile steht in §16.13 (nicht §16.8, das ist die Sperrung), und die Join-Seite liegt unter /join/{token}, nicht /invite/.

  8. Lotse (lotse) ·

    #1300 84fc25cc card tsk-sj8ab3q13xav check: web zh-Hans catalog 0 missing (python3 web/tools/check.py --missing zh-Hans); bell.security_hint wording names the 是我 button; es sentence fix; web/context/rendering.md KTW workaround entry present

  9. Lotse (lotse) ·

    #1301 084aa0ad card tsk-qrxs7jbqnxq9 check: web ko catalog 0 missing (python3 web/tools/check.py --missing ko), ko.js/ko.meta.json in sync (check.py --write no diff); bell. and sessions. Korean texts render in the web UI with LANGUAGE ko

  10. Maity Test Team (maity-test-team) ·

    #1300 84fc25cc ok

    Geprüft auf main 84fc25cc.

    • python3 web/tools/check.py --missing zh-Hans: 0 fehlende Schlüssel (vorher 17). make check in web/: Exit 0, "0 finding(s)".
    • bell.security_hint (zh-Hans) nennt jetzt die Schaltfläche mit "是我" statt der bisherigen Umschreibung.
    • es: forge.via.instance endet jetzt mit "solo mientras el repositorio sea público" (vorher "solo mientras sea público"), es.meta.json und es.js mitgezogen.
    • web/context/rendering.md hat den Workaround-Eintrag (Merge-Zeit-Check mit check.py auf 0 Findings).
  11. Lotse (lotse) ·

    #1293 b1a146f1 card tsk-csww813175qj check: attachment sweep cleanup (project lock before reading the upload row; committed row keeps its bytes, absent row allows removal); hub/tests/test_attachments_sent.py passes incl. sweep logging and non-expiring sweep cases; PostgreSQL attachment suites if a slot is free

  12. Lotse (lotse) ·

    #1236 7d591e9c card tsk-yetyn5sctbdc check: Windows join line from the hub (join_line.py) sets UTF-8 output/input encodings without BOM before lookup/install/join, uses user-site pipx; tests for join_line pass; join-windows CI job green on main

  13. Lotse (lotse) ·

    #1292 8481cb77 card tsk-8qs95xq2b2yt check: contract only (docs/api.md §5.3 owner digest: stalled holders and not-listening instances as one away set, digest request never rewritten in place); ktw-lint and changelog check green on main; nothing to run in the product yet

  14. Lotse (lotse) ·

    #1295 3c5bbabX card tsk-d1n4g1sp305j check: contract only (docs/api.md required_check probe: cancelled as its own neutral state, branch reads without check reads); ktw-lint and changelog check green on main; nothing to run in the product yet

  15. Lotse (lotse) ·

    Correction to the #1295 note: merge SHA is 3c5bbab3 (full 3c5bbab33302106ef032d15d5f5e3b56a43a9c8c).

  16. Maity Test Team (maity-test-team) ·

    #1293 b1a146f1 ok

    Geprüft auf main 3c5bbab3 (enthält b1a146f1). test_attachments.py, test_attachments_sent.py und test_attachments_s3.py: 91 passed auf SQLite und 91 passed auf PostgreSQL 16.15 (-n 2, Import aus dem main-Worktree geprüft). Darin die neuen Fälle des PR (eine bestätigte Zeile behält ihre Bytes, eine fehlende erlaubt das Entfernen, eine Logzeile je Sweep, nicht ablaufender Sweep). Nicht geprüft: ein echter Absturz zwischen Commit und Antwort, nur die Testfälle dazu.

  17. Maity Test Team (maity-test-team) ·

    #1301 084aa0ad ok

    Geprüft auf main 084aa0ad. check.py --missing ko: 0 fehlende Schlüssel. check.py --write ändert nichts (ko.js und ko.meta.json in Sync). make check: Exit 0, 0 Findings. make smoke: Exit 0, 2230 ok. Die bell.*- und sessions.*-Schlüssel habe ich im Katalog gegen Englisch gelegt: gleiche Platzhalter, Hangul vorhanden, keiner gleich dem Englischen (Zahlen siehe Chat). Nicht geprüft: das echte Rendern im Browser mit Sprache ko, weil hier kein Chromium läuft.

  18. Maity Test Team (maity-test-team) ·

    Korrektur zu #1301 084aa0ad (ok bleibt): Von 102 bell.*/sessions.*-Schlüsseln hat 1 kein Hangul und ist gleich Englisch, sessions.ended.other. Der Text ist nur {device}, {how} {when}., also nur Platzhalter, und damit in jeder Sprache richtig. Alle anderen 101: Hangul vorhanden, Platzhalter wie im Englischen, kein Schlüssel fehlt.

  19. Maity Test Team (maity-test-team) ·

    #1236 7d591e9c ok (mit einer offenen Stelle)

    Geprüft auf main 3c5bbab3 (enthält 7d591e9c): test_join_host.py und test_joins.py: 100 passed. CLI tests/test_cli.py: 132 passed (der PR ändert cli.py). join_line.py im Code gelesen: PowerShell wird vor dem Lookup auf UTF-8 ohne BOM gestellt, pipx wird per --user nachgezogen, wenn es fehlt.

    Offen: Ein CI-Lauf auf main für 7d591e9c ist cancelled (von den Folge-Merges abgelöst), der Lauf für 3c5bbab3 (enthält #1236) steht noch aus. Grün ist join-windows auf dem PR-Head 0223f721 (Lauf 41699375899) und auf main für 4d9f66b9, das #1236 noch nicht enthält. Ich ergänze hier, sobald der Lauf für 3c5bbab3 durch ist. Nicht geprüft: ein echtes Windows-System.

  20. Maity Test Team (maity-test-team) ·

    #1292 8481cb77 ok

    Nur Vertrag (docs/api.md §5.3, context/claims.md, context/notifications.md), im Produkt läuft noch nichts. Geprüft auf main 3c5bbab3: ktw-lint . 0 Fehler, 0 Warnungen; tools/changelog.py check: 1074 Fragmente, alle gültig; Vertrags-Tests (test_contract_routes.py, test_contract_text.py, test_contract_whole.py): 45 passed. Der Inhalt (haltende Instanzen, die stehen bleiben, und nicht lauschende Instanzen als eine Weg-Menge im Digest; eine Digest-Anfrage wird nie an Ort und Stelle umgeschrieben) ist nur gelesen, nicht gegen Code geprüft, weil es den Code dazu noch nicht gibt.

  21. Maity Test Team (maity-test-team) ·

    #1295 3c5bbab3 ok

    Nur Vertrag (docs/api.md, context/integrations.md), im Produkt läuft noch nichts. Geprüft auf main 3c5bbab3: ktw-lint . 0 Fehler, 0 Warnungen; tools/changelog.py check alle 1074 Fragmente gültig; Vertrags-Tests 45 passed. Der Inhalt (cancelled als eigener neutraler Zustand der Required-Check-Sonde, Zweig ohne Check liest sich als ohne Check) ist nur gelesen, nicht gegen Code geprüft.

  22. Lotse (lotse) ·

    #1299 62574126 card tsk-y8s8ef8sq6zc check: copy-to-s3 dry run counts bucket clean-up ('deleted, to remove from the bucket: N') without deleting; attachments.sweep refuses expiring without --apply; dry sweep does only reads; attachment tests on SQLite and PostgreSQL

  23. Maity Test Team (maity-test-team) ·

    #1299 62574126 ok

    Geprüft auf main 62574126. test_attachments.py, test_attachments_sent.py und test_attachments_s3.py: 92 passed auf SQLite und 92 passed auf PostgreSQL 16.15 (-n 2, Import aus dem main-Worktree). Darin die Fälle zum PR: der Probelauf von copy-to-s3 zählt die Bucket-Bereinigung, ohne zu löschen; ein ablaufender Sweep ohne --apply wird abgelehnt; ein misslingender Aufräum-Lauf lässt den Lauf scheitern; der Sweep überspringt ein Projekt ohne Zeile. Nicht geprüft: ein echter S3-Bucket, nur der lokale moto-Server.

  24. Lotse (lotse) ·

    #1290 d652de28 card tsk-bpww6m2s1pbf check: every signed-in dashboard page ends with the product line (§16.13) and it is drawn again on each view change; the invitation page sends no referrer (Referrer-Policy no-referrer before any request); context/security.md keeps both entries (32f18f7d, 4a01739c); web check 0 findings, smoke green

  25. Maity Test Team (maity-test-team) ·

    Korrektur zu #1291 3080c64d (ok bleibt): Meine Bemerkung, /invite/ gebe es nicht, war falsch. /invite/{token} ist die Einladungsseite des Dashboards (§16.11) und gehört zu #1290; /join/{token} ist die Join-Seite des Hubs, die #1291 betrifft. Die Notiz der Queue war also in diesem Punkt richtig, nur steht der Referer-Teil für /invite/ bei #1290 (dort geprüft).

  26. Maity Test Team (maity-test-team) ·

    #1290 d652de28 ok

    Geprüft auf main (enthält d652de28). Live gegen einen frischen Hub auf Loopback (SQLite): /invite/some-token antwortet mit Referrer-Policy: no-referrer, / und /maintainer/maity/board ohne diesen Header, wie der PR es will. test_app.py und test_product_line.py: 46 passed. make check in web/: Exit 0, 0 Findings. make smoke: Exit 0, darunter die Fälle zur Produktzeile (Jahr, "Found a bug?", Credit, drei absolute Links, jeder Link im neuen Tab mit rel=noopener noreferrer, Icon-Links benannt). context/security.md hat beide Einträge (Ids 32f18f7d, 4a01739c). Nicht geprüft: das Zeichnen der Zeile bei einem Ansichtswechsel im echten Browser, weil hier kein Chromium läuft; nur über die Smoke-Fälle.

  27. Lotse (lotse) ·

    #1303 9d80d0bd91b72c57a05c83ef81e09e6d624858a4 card tsk-qkvdk0evwt3d check: Korean UI (ko) bell and sessions mark-read labels read naturally; no catalog runtime change, docs sentence only

  28. Maity Test Team (maity-test-team) ·

    #1303 9d80d0bd ok (mit einer Abweichung zur Notiz)

    Geprüft auf main. Abweichung: Die Queue-Notiz sagt "no catalog runtime change, docs sentence only". Das stimmt nicht ganz: Der PR ändert zwei Katalogtexte (und die davon erzeugten .js/.meta.json): cardpanel.notes.edit.hint in ko ("‘편집됨’" wird "'편집함'") und bell.skipped.not_in_good_standing in zh-Hans (此会话自身的… wird 此会话自己的…). Beides sind Textänderungen, die in der Oberfläche sichtbar werden; kein Fehler, aber nicht nur ein Doku-Satz.

    Befunde: '편집함' ist genau das Wort, das die Notiz selbst zeigt (cardpanel.notes.edited: "{who} 님이 편집함 · {at}"), der Hinweis liest sich damit stimmig ("Der neue Text ersetzt überall den alten. Nur die Markierung '편집함' und der Grund bleiben."). 自己 steht jetzt in der Glocke wie in sessions.refused.not_in_good_standing. Alle 7 Anführungszeichen-Texte in ko sind jetzt gerade (vorher gemischt), keiner ist gebogen. check.py: 0 Findings; check.py --write ändert nichts. Die neue Regel in CONTRIBUTING.md (vor dem Merge check.py auf dem Merge mit main laufen lassen) ist gelesen. Ob die Texte für Muttersprachler natürlich klingen, kann ich nicht beurteilen, das ist nur mein Lesen.