Page MenuHomePhabricator

Echo Api Messages missing
Closed, ResolvedPublic

Description

Seen locally...

1) ApiDocumentationTest::testDocumentationExists with data set "Module query+notifications with MiserMode=false, AllowCategorizedRecentChanges=false" ('query+notifications', array(false, false))
Module description message apihelp-query+notifications-description exists
Failed asserting that false is true.

/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:51
/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:80
/var/www/wiki/mediawiki/core/tests/phpunit/MediaWikiTestCase.php:399
/var/www/wiki/mediawiki/core/maintenance/doMaintenance.php:111

2) ApiDocumentationTest::testDocumentationExists with data set "Module query+notifications with MiserMode=true, AllowCategorizedRecentChanges=true" ('query+notifications', array(true, true))
Module description message apihelp-query+notifications-description exists
Failed asserting that false is true.

/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:51
/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:80
/var/www/wiki/mediawiki/core/tests/phpunit/MediaWikiTestCase.php:399
/var/www/wiki/mediawiki/core/maintenance/doMaintenance.php:111

3) ApiDocumentationTest::testDocumentationExists with data set "Module query+unreadnotificationpages with MiserMode=false, AllowCategorizedRecentChanges=false" ('query+unreadnotificationpages', array(false, false))
Module description message apihelp-query+unreadnotificationpages-description exists
Failed asserting that false is true.

/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:51
/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:80
/var/www/wiki/mediawiki/core/tests/phpunit/MediaWikiTestCase.php:399
/var/www/wiki/mediawiki/core/maintenance/doMaintenance.php:111

4) ApiDocumentationTest::testDocumentationExists with data set "Module query+unreadnotificationpages with MiserMode=true, AllowCategorizedRecentChanges=true" ('query+unreadnotificationpages', array(true, true))
Module description message apihelp-query+unreadnotificationpages-description exists
Failed asserting that false is true.

/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:51
/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:80
/var/www/wiki/mediawiki/core/tests/phpunit/MediaWikiTestCase.php:399
/var/www/wiki/mediawiki/core/maintenance/doMaintenance.php:111

5) ApiDocumentationTest::testDocumentationExists with data set "Module echomarkread with MiserMode=false, AllowCategorizedRecentChanges=false" ('echomarkread', array(false, false))
Module description message apihelp-echomarkread-description exists
Failed asserting that false is true.

/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:51
/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:80
/var/www/wiki/mediawiki/core/tests/phpunit/MediaWikiTestCase.php:399
/var/www/wiki/mediawiki/core/maintenance/doMaintenance.php:111

6) ApiDocumentationTest::testDocumentationExists with data set "Module echomarkread with MiserMode=true, AllowCategorizedRecentChanges=true" ('echomarkread', array(true, true))
Module description message apihelp-echomarkread-description exists
Failed asserting that false is true.

/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:51
/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:80
/var/www/wiki/mediawiki/core/tests/phpunit/MediaWikiTestCase.php:399
/var/www/wiki/mediawiki/core/maintenance/doMaintenance.php:111

7) ApiDocumentationTest::testDocumentationExists with data set "Module echomarkseen with MiserMode=false, AllowCategorizedRecentChanges=false" ('echomarkseen', array(false, false))
Module description message apihelp-echomarkseen-description exists
Failed asserting that false is true.

/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:51
/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:80
/var/www/wiki/mediawiki/core/tests/phpunit/MediaWikiTestCase.php:399
/var/www/wiki/mediawiki/core/maintenance/doMaintenance.php:111

8) ApiDocumentationTest::testDocumentationExists with data set "Module echomarkseen with MiserMode=true, AllowCategorizedRecentChanges=true" ('echomarkseen', array(true, true))
Module description message apihelp-echomarkseen-description exists
Failed asserting that false is true.

/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:51
/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:80
/var/www/wiki/mediawiki/core/tests/phpunit/MediaWikiTestCase.php:399
/var/www/wiki/mediawiki/core/maintenance/doMaintenance.php:111

Event Timeline

Restricted Application added a subscriber: Aklapper. · View Herald Transcript

We should really add back mwext-testextension back to some of these repos as mediawiki-extensions- does not seem to catch errors such as this.

Oh never mind that test has already been added. Wonder why it did not catch it. @Reedy are you running the very latest?

Yeah we recently moved API messages to their own dir. Weird that it's failing for you locally though, because I don't see it failing in Jenkins?

@Catrope, where do you want to put this? I have a note from our last Triage meeting that "Roan is attempting to reproduce-- will close if can’t. We’ll fix if he can."

WFM locally, and not failing on Jenkins. Closing as invalid unless and until we can confirm that this problem exists outside of Reedy's laptop.

$ php phpunit.php structure/ApiDocumentationTest.php 
#!/usr/bin/env php
Using PHP 7.0.8-3ubuntu3
PHPUnit 4.8.31 by Sebastian Bergmann and contributors.

...............................................................  63 / 345 ( 18%)
............................................................... 126 / 345 ( 36%)
......................................................FFFF..... 189 / 345 ( 54%)
............................................................... 252 / 345 ( 73%)
................................................FFFF........... 315 / 345 ( 91%)
..............................

Time: 8.97 seconds, Memory: 50.00MB

There were 8 failures:

1) ApiDocumentationTest::testDocumentationExists with data set "Module query+notifications with MiserMode=false, AllowCategorizedRecentChanges=false" ('query+notifications', array(false, false))
Module description message apihelp-query+notifications-description exists
Failed asserting that false is true.

/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:51
/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:80
/var/www/wiki/mediawiki/core/tests/phpunit/MediaWikiTestCase.php:399
/var/www/wiki/mediawiki/core/maintenance/doMaintenance.php:111

2) ApiDocumentationTest::testDocumentationExists with data set "Module query+notifications with MiserMode=true, AllowCategorizedRecentChanges=true" ('query+notifications', array(true, true))
Module description message apihelp-query+notifications-description exists
Failed asserting that false is true.

/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:51
/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:80
/var/www/wiki/mediawiki/core/tests/phpunit/MediaWikiTestCase.php:399
/var/www/wiki/mediawiki/core/maintenance/doMaintenance.php:111

3) ApiDocumentationTest::testDocumentationExists with data set "Module query+unreadnotificationpages with MiserMode=false, AllowCategorizedRecentChanges=false" ('query+unreadnotificationpages', array(false, false))
Module description message apihelp-query+unreadnotificationpages-description exists
Failed asserting that false is true.

/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:51
/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:80
/var/www/wiki/mediawiki/core/tests/phpunit/MediaWikiTestCase.php:399
/var/www/wiki/mediawiki/core/maintenance/doMaintenance.php:111

4) ApiDocumentationTest::testDocumentationExists with data set "Module query+unreadnotificationpages with MiserMode=true, AllowCategorizedRecentChanges=true" ('query+unreadnotificationpages', array(true, true))
Module description message apihelp-query+unreadnotificationpages-description exists
Failed asserting that false is true.

/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:51
/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:80
/var/www/wiki/mediawiki/core/tests/phpunit/MediaWikiTestCase.php:399
/var/www/wiki/mediawiki/core/maintenance/doMaintenance.php:111

5) ApiDocumentationTest::testDocumentationExists with data set "Module echomarkread with MiserMode=false, AllowCategorizedRecentChanges=false" ('echomarkread', array(false, false))
Module description message apihelp-echomarkread-description exists
Failed asserting that false is true.

/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:51
/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:80
/var/www/wiki/mediawiki/core/tests/phpunit/MediaWikiTestCase.php:399
/var/www/wiki/mediawiki/core/maintenance/doMaintenance.php:111

6) ApiDocumentationTest::testDocumentationExists with data set "Module echomarkread with MiserMode=true, AllowCategorizedRecentChanges=true" ('echomarkread', array(true, true))
Module description message apihelp-echomarkread-description exists
Failed asserting that false is true.

/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:51
/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:80
/var/www/wiki/mediawiki/core/tests/phpunit/MediaWikiTestCase.php:399
/var/www/wiki/mediawiki/core/maintenance/doMaintenance.php:111

7) ApiDocumentationTest::testDocumentationExists with data set "Module echomarkseen with MiserMode=false, AllowCategorizedRecentChanges=false" ('echomarkseen', array(false, false))
Module description message apihelp-echomarkseen-description exists
Failed asserting that false is true.

/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:51
/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:80
/var/www/wiki/mediawiki/core/tests/phpunit/MediaWikiTestCase.php:399
/var/www/wiki/mediawiki/core/maintenance/doMaintenance.php:111

8) ApiDocumentationTest::testDocumentationExists with data set "Module echomarkseen with MiserMode=true, AllowCategorizedRecentChanges=true" ('echomarkseen', array(true, true))
Module description message apihelp-echomarkseen-description exists
Failed asserting that false is true.

/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:51
/var/www/wiki/mediawiki/core/tests/phpunit/structure/ApiDocumentationTest.php:80
/var/www/wiki/mediawiki/core/tests/phpunit/MediaWikiTestCase.php:399
/var/www/wiki/mediawiki/core/maintenance/doMaintenance.php:111

FAILURES!
Tests: 345, Assertions: 9877, Failures: 8.
reedy@ubuntu64-web-esxi:/var/www/wiki/mediawiki/core/tests/phpunit$ cd ../../extensions/Echo/
reedy@ubuntu64-web-esxi:/var/www/wiki/mediawiki/core/extensions/Echo$ grep -R apihelp-echomarkseen-description *
i18n/api/en.json:	"apihelp-echomarkseen-description": "Mark notifications as seen for the current user.",
i18n/api/mai.json:	"apihelp-echomarkseen-description": "वर्तमान प्रयोगकर्ताक अधिसूचनासभ पढल गेल रेखाङ्कित करी।",
i18n/api/kk-cyrl.json:	"apihelp-echomarkseen-description": "Қазіргі қатысушы үшін ескертпелер көрілген деп белгілеу",
i18n/api/ko.json:	"apihelp-echomarkseen-description": "이 사용자가 알림을 본 것으로 표시.",
i18n/api/sv.json:	"apihelp-echomarkseen-description": "Märk aviseringar som lästa för aktuell användare.",
i18n/api/lki.json:	"apihelp-echomarkseen-description": "علامت گذاری به عنوان اطلاعیه خوانده شده برای کاربر فعلی",
i18n/api/ce.json:	"apihelp-echomarkseen-description": "Билгалде хӀокху декъашхочун дӀахаийтарш дешна сана.",
i18n/api/zh-hans.json:	"apihelp-echomarkseen-description": "对当前用户标记通知为已读。",
i18n/api/nb.json:	"apihelp-echomarkseen-description": "Merk beskjeder som sett for den nåværende brukeren.",
i18n/api/qqq.json:	"apihelp-echomarkseen-description": "{{doc-apihelp-description|echomarkseen}}",
i18n/api/sah.json:	"apihelp-echomarkseen-description": "Билиҥҥи туттааччыга биллэриилэри ааҕыллыбыт курдук бэлиэтээ",
i18n/api/fi.json:	"apihelp-echomarkseen-description": "Merkitse ilmoitukset nähdyiksi nykyisen käyttäjän kannalta.",
i18n/api/ar.json:	"apihelp-echomarkseen-description": "التعليم على الإخطارات كمنظورة للمستخدم الحالي.",
i18n/api/ro.json:	"apihelp-echomarkseen-description": "Marcați notificările ca citite pentru utilizatorul curent.",
i18n/api/zh-hant.json:	"apihelp-echomarkseen-description": "標記目前使用者的通知為已讀",
i18n/api/ksh.json:	"apihelp-echomarkseen-description": "Makkehr, dat dä aktoälle Metmaacher di Meddeijlonge jesinn hät.",
i18n/api/tr.json:	"apihelp-echomarkseen-description": "Geçerli kullanıcı için görüldüğü gibi Mark bildirimleri.",
i18n/api/pl.json:	"apihelp-echomarkseen-description": "Oznacz powiadomienia jako przeczytane dla bieżącego użytkownika.",
i18n/api/fr.json:	"apihelp-echomarkseen-description": "Marquer les notifications comme vues pour l’utilisateur actuel.",
i18n/api/ba.json:	"apihelp-echomarkseen-description": "Был ҡулланыусы өсөн барлыҡ белдереүҙәрҙе уҡылған тип билдәләү",
i18n/api/ru.json:	"apihelp-echomarkseen-description": "Отметить уведомления как прочитанные для данного пользователя.",
i18n/api/mr.json:	"apihelp-echomarkseen-description": "सध्याच्या सदस्यास अधिसूचना बघितल्या अशी खूण करा.",
i18n/api/nl.json:	"apihelp-echomarkseen-description": "Aangeven dat de huidige gebruiker zijn of haar meldingen heeft gezien.",
i18n/api/pt.json:	"apihelp-echomarkseen-description": "Marcar as notificações como vistas pelo utilizador atual.",
i18n/api/ml.json:	"apihelp-echomarkseen-description": "ഇപ്പോഴത്തെ ഉപയോക്താവ് കണ്ടെന്ന് അറിയിപ്പുകളിൽ അടയാളപ്പെടുത്തുക.",
i18n/api/de.json:	"apihelp-echomarkseen-description": "Benachrichtigungen für den derzeitigen Benutzer als gesehen markieren.",
i18n/api/lt.json:	"apihelp-echomarkseen-description": "Pažymėti pranešimus kaip peržiūrėtus dabartinio naudotojo.",
i18n/api/krc.json:	"apihelp-echomarkseen-description": "Бу къошулуучу ючюн билдириулени окъулгъанлача белгиле.",
i18n/api/hi.json:	"apihelp-echomarkseen-description": "वर्तमान सदस्य की अधिसूचनाओं पढ़ी गई रेखांकित करें।",
i18n/api/pt-br.json:	"apihelp-echomarkseen-description": "Marcar notificações como vistas para o usuário atual.",
i18n/api/es.json:	"apihelp-echomarkseen-description": "Marca las notificaciones como vistas para el usuario actual.",
i18n/api/hu.json:	"apihelp-echomarkseen-description": "Értesítések látottnak jelölése az aktuális felhasználó számára.",
i18n/api/gl.json:	"apihelp-echomarkseen-description": "Marcar notificacións coma lidas para o usuario actual.",
i18n/api/nap.json:	"apihelp-echomarkseen-description": "Nzegna 'e notifiche comme fossero liggiute 'a ll'utente 'e mo'.",
i18n/api/et.json:	"apihelp-echomarkseen-description": "Antud kasutaja teavituste nähtuks märkimine.",
i18n/api/it.json:	"apihelp-echomarkseen-description": "Contrassegna le notifiche come viste per l'utente attuale.",
i18n/api/uk.json:	"apihelp-echomarkseen-description": "Позначити всі сповіщення як прочитані для поточного користувача.",
i18n/api/ast.json:	"apihelp-echomarkseen-description": "Marcar les notificaciones como vistes pal usuariu actual.",
i18n/api/mk.json:	"apihelp-echomarkseen-description": "Означи ги известувањата како прочитани за тековниот корисник.",
i18n/api/frr.json:	"apihelp-echomarkseen-description": "Bööden för di uugenblakelk brüker üs uunluket markiare",
i18n/api/sl.json:	"apihelp-echomarkseen-description": "Označi obvestila za ogledana za trenutnega uporabnika.",
i18n/api/he.json:	"apihelp-echomarkseen-description": "סימון הודעות כהודעות שנקראו עבור המשתמש הנוכחי.",
i18n/api/fa.json:	"apihelp-echomarkseen-description": "علامت گذاری به عنوان اطلاعیه خوانده شده برای کاربر فعلی",
i18n/api/bg.json:	"apihelp-echomarkseen-description": "Маркирай известията за този потребител като отбелязани.",
reedy@ubuntu64-web-esxi:/var/www/wiki/mediawiki/core/extensions/Echo$ grep -R apihelp-echomarkseen-description * | grep en
i18n/api/en.json:	"apihelp-echomarkseen-description": "Mark notifications as seen for the current user.",
i18n/api/mai.json:	"apihelp-echomarkseen-description": "वर्तमान प्रयोगकर्ताक अधिसूचनासभ पढल गेल रेखाङ्कित करी।",
i18n/api/kk-cyrl.json:	"apihelp-echomarkseen-description": "Қазіргі қатысушы үшін ескертпелер көрілген деп белгілеу",
i18n/api/ko.json:	"apihelp-echomarkseen-description": "이 사용자가 알림을 본 것으로 표시.",
i18n/api/sv.json:	"apihelp-echomarkseen-description": "Märk aviseringar som lästa för aktuell användare.",
i18n/api/lki.json:	"apihelp-echomarkseen-description": "علامت گذاری به عنوان اطلاعیه خوانده شده برای کاربر فعلی",
i18n/api/ce.json:	"apihelp-echomarkseen-description": "Билгалде хӀокху декъашхочун дӀахаийтарш дешна сана.",
i18n/api/zh-hans.json:	"apihelp-echomarkseen-description": "对当前用户标记通知为已读。",
i18n/api/nb.json:	"apihelp-echomarkseen-description": "Merk beskjeder som sett for den nåværende brukeren.",
i18n/api/qqq.json:	"apihelp-echomarkseen-description": "{{doc-apihelp-description|echomarkseen}}",
i18n/api/sah.json:	"apihelp-echomarkseen-description": "Билиҥҥи туттааччыга биллэриилэри ааҕыллыбыт курдук бэлиэтээ",
i18n/api/fi.json:	"apihelp-echomarkseen-description": "Merkitse ilmoitukset nähdyiksi nykyisen käyttäjän kannalta.",
i18n/api/ar.json:	"apihelp-echomarkseen-description": "التعليم على الإخطارات كمنظورة للمستخدم الحالي.",
i18n/api/ro.json:	"apihelp-echomarkseen-description": "Marcați notificările ca citite pentru utilizatorul curent.",
i18n/api/zh-hant.json:	"apihelp-echomarkseen-description": "標記目前使用者的通知為已讀",
i18n/api/ksh.json:	"apihelp-echomarkseen-description": "Makkehr, dat dä aktoälle Metmaacher di Meddeijlonge jesinn hät.",
i18n/api/tr.json:	"apihelp-echomarkseen-description": "Geçerli kullanıcı için görüldüğü gibi Mark bildirimleri.",
i18n/api/pl.json:	"apihelp-echomarkseen-description": "Oznacz powiadomienia jako przeczytane dla bieżącego użytkownika.",
i18n/api/fr.json:	"apihelp-echomarkseen-description": "Marquer les notifications comme vues pour l’utilisateur actuel.",
i18n/api/ba.json:	"apihelp-echomarkseen-description": "Был ҡулланыусы өсөн барлыҡ белдереүҙәрҙе уҡылған тип билдәләү",
i18n/api/ru.json:	"apihelp-echomarkseen-description": "Отметить уведомления как прочитанные для данного пользователя.",
i18n/api/mr.json:	"apihelp-echomarkseen-description": "सध्याच्या सदस्यास अधिसूचना बघितल्या अशी खूण करा.",
i18n/api/nl.json:	"apihelp-echomarkseen-description": "Aangeven dat de huidige gebruiker zijn of haar meldingen heeft gezien.",
i18n/api/pt.json:	"apihelp-echomarkseen-description": "Marcar as notificações como vistas pelo utilizador atual.",
i18n/api/ml.json:	"apihelp-echomarkseen-description": "ഇപ്പോഴത്തെ ഉപയോക്താവ് കണ്ടെന്ന് അറിയിപ്പുകളിൽ അടയാളപ്പെടുത്തുക.",
i18n/api/de.json:	"apihelp-echomarkseen-description": "Benachrichtigungen für den derzeitigen Benutzer als gesehen markieren.",
i18n/api/lt.json:	"apihelp-echomarkseen-description": "Pažymėti pranešimus kaip peržiūrėtus dabartinio naudotojo.",
i18n/api/krc.json:	"apihelp-echomarkseen-description": "Бу къошулуучу ючюн билдириулени окъулгъанлача белгиле.",
i18n/api/hi.json:	"apihelp-echomarkseen-description": "वर्तमान सदस्य की अधिसूचनाओं पढ़ी गई रेखांकित करें।",
i18n/api/pt-br.json:	"apihelp-echomarkseen-description": "Marcar notificações como vistas para o usuário atual.",
i18n/api/es.json:	"apihelp-echomarkseen-description": "Marca las notificaciones como vistas para el usuario actual.",
i18n/api/hu.json:	"apihelp-echomarkseen-description": "Értesítések látottnak jelölése az aktuális felhasználó számára.",
i18n/api/gl.json:	"apihelp-echomarkseen-description": "Marcar notificacións coma lidas para o usuario actual.",
i18n/api/nap.json:	"apihelp-echomarkseen-description": "Nzegna 'e notifiche comme fossero liggiute 'a ll'utente 'e mo'.",
i18n/api/et.json:	"apihelp-echomarkseen-description": "Antud kasutaja teavituste nähtuks märkimine.",
i18n/api/it.json:	"apihelp-echomarkseen-description": "Contrassegna le notifiche come viste per l'utente attuale.",
i18n/api/uk.json:	"apihelp-echomarkseen-description": "Позначити всі сповіщення як прочитані для поточного користувача.",
i18n/api/ast.json:	"apihelp-echomarkseen-description": "Marcar les notificaciones como vistes pal usuariu actual.",
i18n/api/mk.json:	"apihelp-echomarkseen-description": "Означи ги известувањата како прочитани за тековниот корисник.",
i18n/api/frr.json:	"apihelp-echomarkseen-description": "Bööden för di uugenblakelk brüker üs uunluket markiare",
i18n/api/sl.json:	"apihelp-echomarkseen-description": "Označi obvestila za ogledana za trenutnega uporabnika.",
i18n/api/he.json:	"apihelp-echomarkseen-description": "סימון הודעות כהודעות שנקראו עבור המשתמש הנוכחי.",
i18n/api/fa.json:	"apihelp-echomarkseen-description": "علامت گذاری به عنوان اطلاعیه خوانده شده برای کاربر فعلی",
i18n/api/bg.json:	"apihelp-echomarkseen-description": "Маркирай известията за този потребител като отбелязани.",
reedy@ubuntu64-web-esxi:/var/www/wiki/mediawiki/core/extensions/Echo$ grep -R apihelp-echomarkseen-description * | grep en\.json
i18n/api/en.json:	"apihelp-echomarkseen-description": "Mark notifications as seen for the current user.",
reedy@ubuntu64-web-esxi:/var/www/wiki/mediawiki/core/extensions/Echo$ cd ../.^C
reedy@ubuntu64-web-esxi:/var/www/wiki/mediawiki/core/extensions/Echo$ nano includes/^C
reedy@ubuntu64-web-esxi:/var/www/wiki/mediawiki/core/extensions/Echo$ nano extension.json 
reedy@ubuntu64-web-esxi:/var/www/wiki/mediawiki/core/extensions/Echo$ cd ../..
reedy@ubuntu64-web-esxi:/var/www/wiki/mediawiki/core$ mwscript e^C
reedy@ubuntu64-web-esxi:/var/www/wiki/mediawiki/core$ php maintenance/evaL.
Could not open input file: maintenance/evaL.
reedy@ubuntu64-web-esxi:/var/www/wiki/mediawiki/core$ ^C
reedy@ubuntu64-web-esxi:/var/www/wiki/mediawiki/core$ php maintenance/eval.php 
var_dump( $> var_dump( $wgMessagesDirs );
/var/www/wiki/mediawiki/core/maintenance/eval.php(77) : eval()'d code:1:
array(55) {
  'Vector' =>
  string(41) "/var/www/wiki/mediawiki/skins/Vector/i18n"
  'SyntaxHighlight_GeSHi' =>
  string(61) "/var/www/wiki/mediawiki/extensions/SyntaxHighlight_GeSHi/i18n"
  'ParserFunctions' =>
  string(55) "/var/www/wiki/mediawiki/extensions/ParserFunctions/i18n"
  'LiquidThreads' =>
  string(53) "/var/www/wiki/mediawiki/extensions/LiquidThreads/i18n"
  'CodeEditor' =>
  string(50) "/var/www/wiki/mediawiki/extensions/CodeEditor/i18n"
  'CodeReview' =>
  string(50) "/var/www/wiki/mediawiki/extensions/CodeReview/i18n"
  'Gadgets' =>
  string(47) "/var/www/wiki/mediawiki/extensions/Gadgets/i18n"
  'GoogleNewsSitemap' =>
  string(57) "/var/www/wiki/mediawiki/extensions/GoogleNewsSitemap/i18n"
  'Renameuser' =>
  string(50) "/var/www/wiki/mediawiki/extensions/Renameuser/i18n"
  'Nuke' =>
  string(44) "/var/www/wiki/mediawiki/extensions/Nuke/i18n"
  'Babel' =>
  string(45) "/var/www/wiki/mediawiki/extensions/Babel/i18n"
  'TitleBlacklist' =>
  string(54) "/var/www/wiki/mediawiki/extensions/TitleBlacklist/i18n"
  'SiteMatrix' =>
  string(50) "/var/www/wiki/mediawiki/extensions/SiteMatrix/i18n"
  'UploadWizard' =>
  string(52) "/var/www/wiki/mediawiki/extensions/UploadWizard/i18n"
  'CheckUser' =>
  string(49) "/var/www/wiki/mediawiki/extensions/CheckUser/i18n"
  'WikiLove' =>
  string(48) "/var/www/wiki/mediawiki/extensions/WikiLove/i18n"
  'RSS' =>
  string(43) "/var/www/wiki/mediawiki/extensions/RSS/i18n"
  'CLDR' =>
  array(1) {
    [0] =>
    string(49) "/var/www/wiki/mediawiki/core/extensions/cldr/i18n"
  }
  'MobileFrontend' =>
  string(54) "/var/www/wiki/mediawiki/extensions/MobileFrontend/i18n"
  'AbuseFilter' =>
  string(51) "/var/www/wiki/mediawiki/extensions/AbuseFilter/i18n"
  'WikiEditor' =>
  string(50) "/var/www/wiki/mediawiki/extensions/WikiEditor/i18n"
  'AntiSpoof' =>
  array(1) {
    [0] =>
    string(54) "/var/www/wiki/mediawiki/core/extensions/AntiSpoof/i18n"
  }
  'Timeline' =>
  string(48) "/var/www/wiki/mediawiki/extensions/timeline/i18n"
  'CategoryTree' =>
  string(52) "/var/www/wiki/mediawiki/extensions/CategoryTree/i18n"
  'ImageMap' =>
  string(48) "/var/www/wiki/mediawiki/extensions/ImageMap/i18n"
  'GlobalBlocking' =>
  string(54) "/var/www/wiki/mediawiki/extensions/GlobalBlocking/i18n"
  'ExtensionDistributor' =>
  string(60) "/var/www/wiki/mediawiki/extensions/ExtensionDistributor/i18n"
  'Echo' =>
  string(44) "/var/www/wiki/mediawiki/extensions/Echo/i18n"
  'Interwiki' =>
  string(49) "/var/www/wiki/mediawiki/extensions/Interwiki/i18n"
  'PdfHandler' =>
  string(50) "/var/www/wiki/mediawiki/extensions/PdfHandler/i18n"
  'OATHAuth' =>
  array(1) {
    [0] =>
    string(53) "/var/www/wiki/mediawiki/core/extensions/OATHAuth/i18n"
  }
  'EventLogging' =>
  string(57) "/var/www/wiki/mediawiki/extensions/EventLogging/i18n/core"
  'JsonSchema' =>
  string(63) "/var/www/wiki/mediawiki/extensions/EventLogging/i18n/jsonschema"
  'Score' =>
  string(45) "/var/www/wiki/mediawiki/extensions/Score/i18n"
  'AccountAudit' =>
  string(52) "/var/www/wiki/mediawiki/extensions/AccountAudit/i18n"
  'MassMessage' =>
  string(51) "/var/www/wiki/mediawiki/extensions/MassMessage/i18n"
  'BetaFeatures' =>
  string(52) "/var/www/wiki/mediawiki/extensions/BetaFeatures/i18n"
  'PagedTiffHandler' =>
  string(56) "/var/www/wiki/mediawiki/extensions/PagedTiffHandler/i18n"
  'SecurePoll' =>
  string(50) "/var/www/wiki/mediawiki/extensions/SecurePoll/i18n"
  'BounceHandler' =>
  string(53) "/var/www/wiki/mediawiki/extensions/BounceHandler/i18n"
  'Petition' =>
  string(48) "/var/www/wiki/mediawiki/extensions/Petition/i18n"
  'TrustedXFF' =>
  array(1) {
    [0] =>
    string(55) "/var/www/wiki/mediawiki/core/extensions/TrustedXFF/i18n"
  }
  'UserMerge' =>
  array(1) {
    [0] =>
    string(54) "/var/www/wiki/mediawiki/core/extensions/UserMerge/i18n"
  }
  'ContactPage' =>
  array(1) {
    [0] =>
    string(56) "/var/www/wiki/mediawiki/core/extensions/ContactPage/i18n"
  }
  'QuizExtension' =>
  array(1) {
    [0] =>
    string(49) "/var/www/wiki/mediawiki/core/extensions/Quiz/i18n"
  }
  'PageViewInfo' =>
  array(1) {
    [0] =>
    string(57) "/var/www/wiki/mediawiki/core/extensions/PageViewInfo/i18n"
  }
  'OverrideThrottle' =>
  array(1) {
    [0] =>
    string(61) "/var/www/wiki/mediawiki/core/extensions/ThrottleOverride/i18n"
  }
  'RandomInCategory' =>
  string(56) "/var/www/wiki/mediawiki/extensions/RandomInCategory/i18n"
  'MSSQLBackCompat' =>
  string(55) "/var/www/wiki/mediawiki/extensions/MSSQLBackCompat/i18n"
  'ShortUrl' =>
  string(48) "/var/www/wiki/mediawiki/extensions/ShortUrl/i18n"
  'cldr' =>
  string(44) "/var/www/wiki/mediawiki/extensions/cldr/i18n"
  'EducationProgram' =>
  string(56) "/var/www/wiki/mediawiki/extensions/EducationProgram/i18n"
  'EmailCapture' =>
  string(52) "/var/www/wiki/mediawiki/extensions/EmailCapture/i18n"
  'Scribunto' =>
  string(49) "/var/www/wiki/mediawiki/extensions/Scribunto/i18n"
  'XMLContentExtension' =>
  string(59) "/var/www/wiki/mediawiki/extensions/XMLContentExtension/i18n"
}

> var_dump( $wgMessagesDirs['Echo'] );
/var/www/wiki/mediawiki/core/maintenance/eval.php(77) : eval()'d code:1:
string(44) "/var/www/wiki/mediawiki/extensions/Echo/i18n"

I don't see the Echo API folders listed in $wgMessagesDirs

> var_dump( wfMessage( 'apihelp-query+notifications-description' )->exists() );
/var/www/wiki/mediawiki/core/maintenance/eval.php(77) : eval()'d code:1:
bool(false)

and same on tin

reedy@tin:~$ mwscript eval.php enwiki
> var_dump( wfMessage( 'apihelp-query+notifications-description' )->exists() );
bool(false)

I don't think your definition of MessagesDirs is correct; If we change

	"MessagesDirs": {
		"Echo": [
			"i18n",
			"i18n/api"
		]
	},

to

	"MessagesDirs": {
		"Echo": [
			"i18n"
		],
		"EchoApi": [
			"i18n/api"
		]
	},

we then get (locally)

> var_dump( wfMessage( 'apihelp-query+notifications-description' )->exists() );
/var/www/wiki/mediawiki/core/maintenance/eval.php(77) : eval()'d code:1:
bool(true)

However. After extractMessagesDirs() in ExtensionRegistration... For var_dump( $this->globals["wgMessagesDirs"][$name] ); we get

array(2) {
  [0] =>
  string(49) "/var/www/wiki/mediawiki/core/extensions/Echo/i18n"
  [1] =>
  string(53) "/var/www/wiki/mediawiki/core/extensions/Echo/i18n/api"
}

but like I say, when this gets to eval.php...

> var_dump( $wgMessagesDirs['Echo'] );
/var/www/wiki/mediawiki/core/maintenance/eval.php(77) : eval()'d code:1:
string(44) "/var/www/wiki/mediawiki/extensions/Echo/i18n"

it goes missing.

So maybe this isn't an Echo bug, maybe it's an extension registration bug (Though, historically, in PHP land, we would've defined it twice), something like

$wgMessagesDirs['Echo'] = __DIR__ . '/i18n';
$wgMessagesDirs['EchoApi'] = __DIR__ . '/i18n/api';

But this doesn't seem to matter...

VE has

	"MessagesDirs": {
		"VisualEditor": [
			"lib/ve/i18n",
			"modules/ve-mw/i18n",
			"modules/ve-wmf/i18n"
		]
	},

testing on tin again....

reedy@tin:~$ mwscript eval.php enwiki
> var_dump( $wgMessagesDirs['VisualEditor'] );
array(3) {
  [0]=>
  string(75) "/srv/mediawiki-staging/php-1.29.0-wmf.7/extensions/VisualEditor/lib/ve/i18n"
  [1]=>
  string(82) "/srv/mediawiki-staging/php-1.29.0-wmf.7/extensions/VisualEditor/modules/ve-mw/i18n"
  [2]=>
  string(83) "/srv/mediawiki-staging/php-1.29.0-wmf.7/extensions/VisualEditor/modules/ve-wmf/i18n"
}

> var_dump( $wgMessagesDirs['Echo'] );
string(60) "/srv/mediawiki-staging/php-1.29.0-wmf.7/extensions/Echo/i18n"

There's something weird and wonderful with the Echo messages code, or, how it reacts with extension registration

Reedy reopened this task as Open.EditedJan 6 2017, 1:28 PM

Aha. No. Reopening

It's fine if you use the extension.json entry point. It's NOT if you use the php entry point, as you didn't update that...!

I presume jenkins uses extension.json

Change 330882 had a related patch set uploaded (by Reedy):
Fix wgMessagesDirs in php entry point

https://gerrit.wikimedia.org/r/330882

Change 330884 had a related patch set uploaded (by Reedy):
Fix wgMessagesDirs in php entry point

https://gerrit.wikimedia.org/r/330884

Issue can be seen in prod on https://en.wikipedia.org/w/api.php?action=help&modules=echomarkread :)

list
(no description)
Separate values with |. Maximum number of values is 50 (500 for bots).
unreadlist
(no description)
Separate values with |. Maximum number of values is 50 (500 for bots).
all
(no description)
Type: boolean (details)
sections
(no description)
Values (separate with | or alternative): alert, message
token
A "csrf" token retrieved from action=query&meta=tokens

This parameter is required.

Screen Shot 2017-01-06 at 13.48.28.png (1×1 px, 292 KB)

Reedy triaged this task as High priority.Jan 6 2017, 1:36 PM

Change 330884 merged by jenkins-bot:
Fix wgMessagesDirs in php entry point

https://gerrit.wikimedia.org/r/330884

Mentioned in SAL (#wikimedia-operations) [2017-01-06T13:51:48Z] <reedy@tin> Started scap: Rebuild message cache for Echo api messages being missing T154110

Mentioned in SAL (#wikimedia-operations) [2017-01-06T14:16:48Z] <reedy@tin> Finished scap: Rebuild message cache for Echo api messages being missing T154110 (duration: 25m 00s)

Change 330882 merged by jenkins-bot:
Fix wgMessagesDirs in php entry point

https://gerrit.wikimedia.org/r/330882

Reedy claimed this task.

Really we should also be doing T139800 and T139801 to fix this for WMF production, but that's an aside. This fixes it for anyone using the php entry point still