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:
- After every merge, the lead adds one note here with the PR number, the merge SHA on main, the PR's card, and what to check (from the PR body and the test list).
- The tester takes the oldest unchecked note and verifies the change on current main: the behaviour the PR promises, plus one nearby path it could have broken. Use the local PostgreSQL where the hub is involved; on the shared machine,
pytest -n 2at most and no full suite. - Report per PR as a note on this card:
#N <sha> ok, or#N <sha> FAILwith steps and the observed result. A FAIL also goes to the lead right away; the lead opens a bug card. - The tester doesn't change code and doesn't reopen merged PRs.
Start with today's merges: #1282 (236a31f2), #1289 (ab19cbd6), #1296 (24f4f9b0), #1297 (628f0a26), #1298 (4d9f66b9).
Notes
Maity Test Team (maity-test-team) ·
#1282 236a31f2 ok
Geprüft auf main 4d9f66b9:
test_attachments_s3.pyundtest_attachments_sent.pylaufen grün, 54 passed auf SQLite und 59 passed auf PostgreSQL 16 (zusammen mittest_test_database.py,-n 2). Nahe Strecke:deploy/helm/check.shmeldet 65 ok und "all held". Nicht geprüft: ein echter S3-Bucket, nur der lokale moto-Server.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.Maity Test Team (maity-test-team) ·
#1296 24f4f9b0 ok
make checkinweb/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_hintist übersetzt. Beobachtung, kein FAIL:check.pynennt für zh-Hans 17 fehlende Schlüssel (bell.*undsessions.*rund um "als gelesen markieren"), die Englisch erst nach #1296 bekam. Das ist ein Nachzug, der noch offen ist.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.Maity Test Team (maity-test-team) ·
#1298 4d9f66b9 ok
Die zehn Schlüssel der Vertragsansicht und
forge.via.instance/forge.via.nonesind in de, fr, es, it, pt, nl, ja, ko und zh-Hans vorhanden. Nur in nl sindnav.contractundcontract.whole.titlegleich dem Englischen, das Wort ist dort dasselbe ("Contract").make check: Exit 0, 0 findings.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.
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 mitReferrer-Policy: no-referrerund einer CSP, die den Style-Block nur per Hash erlaubt (default-src 'self', keinunsafe-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/.- Tests:
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
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
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 checkinweb/: Exit 0, "0 finding(s)".bell.security_hint(zh-Hans) nennt jetzt die Schaltfläche mit "是我" statt der bisherigen Umschreibung.- es:
forge.via.instanceendet jetzt mit "solo mientras el repositorio sea público" (vorher "solo mientras sea público"),es.meta.jsonundes.jsmitgezogen. web/context/rendering.mdhat den Workaround-Eintrag (Merge-Zeit-Check mitcheck.pyauf 0 Findings).
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
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
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
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
Lotse (lotse) ·
Correction to the #1295 note: merge SHA is 3c5bbab3 (full 3c5bbab33302106ef032d15d5f5e3b56a43a9c8c).
Maity Test Team (maity-test-team) ·
#1293 b1a146f1 ok
Geprüft auf main 3c5bbab3 (enthält b1a146f1).
test_attachments.py,test_attachments_sent.pyundtest_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.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.jsundko.meta.jsonin Sync).make check: Exit 0, 0 Findings.make smoke: Exit 0, 2230 ok. Diebell.*- undsessions.*-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.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.Maity Test Team (maity-test-team) ·
#1236 7d591e9c ok (mit einer offenen Stelle)
Geprüft auf main 3c5bbab3 (enthält 7d591e9c):
test_join_host.pyundtest_joins.py: 100 passed. CLItests/test_cli.py: 132 passed (der PR ändertcli.py).join_line.pyim Code gelesen: PowerShell wird vor dem Lookup auf UTF-8 ohne BOM gestellt, pipx wird per--usernachgezogen, 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 istjoin-windowsauf 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.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.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 checkalle 1074 Fragmente gültig; Vertrags-Tests 45 passed. Der Inhalt (cancelledals eigener neutraler Zustand der Required-Check-Sonde, Zweig ohne Check liest sich als ohne Check) ist nur gelesen, nicht gegen Code geprüft.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
Maity Test Team (maity-test-team) ·
#1299 62574126 ok
Geprüft auf main 62574126.
test_attachments.py,test_attachments_sent.pyundtest_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 voncopy-to-s3zählt die Bucket-Bereinigung, ohne zu löschen; ein ablaufender Sweep ohne--applywird 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.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
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).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-tokenantwortet mitReferrer-Policy: no-referrer,/und/maintainer/maity/boardohne diesen Header, wie der PR es will.test_app.pyundtest_product_line.py: 46 passed.make checkinweb/: 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 mitrel=noopener noreferrer, Icon-Links benannt).context/security.mdhat 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.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
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.hintin ko ("‘편집됨’" wird "'편집함'") undbell.skipped.not_in_good_standingin 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 insessions.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 inCONTRIBUTING.md(vor dem Mergecheck.pyauf 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.