Before and after Chromium Lighthouse a11y result comparison of some Phorge pages for patches I'm going to attach.
(Goodhart's Law applies, as with any misguiding incentives.)
- Queries
- All Stories
- Search
- Advanced Search
- Transactions
- Transaction Logs
Advanced Search
Sun, Jun 1
Sat, May 31
Also nothing seems to use these functions?:
[acko@fedora phorge]$ grep -r compileLiteralQuery . ./phorge/src/applications/search/compiler/__tests__/PhutilSearchQueryCompilerTestCase.php: $literal_query = $compiler->compileLiteralQuery($tokens); ./phorge/src/applications/search/compiler/PhutilSearchQueryCompiler.php: public function compileLiteralQuery(array $tokens) { [acko@fedora phorge]$ grep -r compileStemmedQuery . ./phorge/src/applications/search/compiler/__tests__/PhutilSearchQueryCompilerTestCase.php: $stemmed_query = $compiler->compileStemmedQuery($tokens); ./phorge/src/applications/search/compiler/PhutilSearchQueryCompiler.php: public function compileStemmedQuery(array $tokens) {
Nice find. Applying this patch removes about 250 errors in phpstan output here.
Running phpstan analyse, before this patch I get Call to an undefined method ArcanistWorkflow::runWorkflow(), after this patch I get Method ArcanistWorkflow::runWorkflow() invoked with 1 parameter, 0 required, both in src/workflow/ArcanistWorkflow.php:227. That looks like an improvement indeed.
Fri, May 30
Yes to the idea however a related elephant in the room (IMHO) are those non-standard types like list or map or wild being replaced, no clue if that has any effects on...something™ (Diviner docs? Code?) as I haven't managed to understand the consequences of code in https://we.phorge.it/source/arcanist/browse/master/src/parser/PhutilTypeSpec.php yet. (Technically speaking map and list seem to be just arrays, indeed.)
Thu, May 29
Looking at src/applications/repository/storage/PhabricatorRepository.php I see stuff like $has_shortname = ($this->getRepositorySlug() !== null); so it seems that a repository "slug" is what the UI calls a "short name". That's also seconded by code in DiffusionRepositoryEditEngine.
Copying from Q182:
PhabricatorEditorURIEngine.php:283, occurrences: 4 preg_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated arcanist(head=stable, ref.master=989690868513, ref.stable=05abd055019c), libphremoteuser(head=clarion, ref.master=944307decd9c, ref.clarion=d0da6c048bd5), phorge(head=stable, custom=4), translations(head=wmf/stable, ref.wmf/stable=76bb64361cec) #0 preg_replace(string, string, NULL) called at [<phorge>/src/infrastructure/editor/PhabricatorEditorURIEngine.php:283] #1 PhabricatorEditorURIEngine::escapeToken(NULL) called at [<phorge>/src/infrastructure/editor/PhabricatorEditorURIEngine.php:144] #2 PhabricatorEditorURIEngine::newURITokensForRepository() called at [<phorge>/src/infrastructure/editor/PhabricatorEditorURIEngine.php:128] #3 PhabricatorEditorURIEngine::getURITokensForRepository(string) called at [<phorge>/src/infrastructure/editor/PhabricatorEditorURIEngine.php:84] #4 PhabricatorEditorURIEngine::getURITokensForPath(string) called at [<phorge>/src/applications/differential/view/DifferentialChangesetDetailView.php:371] #5 DifferentialChangesetDetailView::getEditorURITemplate() called at [<phorge>/src/applications/differential/view/DifferentialChangesetDetailView.php:272] #6 DifferentialChangesetDetailView::render() called at [<phorge>/src/applications/differential/view/DifferentialChangesetListView.php:240] #7 DifferentialChangesetListView::render() called at [<phorge>/src/view/AphrontView.php:222] #8 AphrontView::producePhutilSafeHTML() called at [<phorge>/src/infrastructure/markup/render.php:115] #9 phutil_escape_html(DifferentialChangesetListView) called at [<phorge>/src/infrastructure/markup/render.php:139] #10 phutil_escape_html(array) called at [<phorge>/src/infrastructure/markup/render.php:139] #11 phutil_escape_html(array) called at [<phorge>/src/infrastructure/markup/render.php:97] #12 phutil_tag(string, array, array) called at [<phorge>/src/view/phui/PHUITwoColumnView.php:236] #13 PHUITwoColumnView::buildFooter() called at [<phorge>/src/view/phui/PHUITwoColumnView.php:123] #14 PHUITwoColumnView::getTagContent() called at [<phorge>/src/view/AphrontTagView.php:161] #15 AphrontTagView::render() called at [<phorge>/src/view/AphrontView.php:222] #16 AphrontView::producePhutilSafeHTML() called at [<phorge>/src/infrastructure/markup/render.php:115] #17 phutil_escape_html(PHUITwoColumnView) called at [<phorge>/src/infrastructure/markup/render.php:139] #18 phutil_escape_html(array) called at [<phorge>/src/infrastructure/markup/render.php:139] #19 phutil_escape_html(array) called at [<phorge>/src/infrastructure/markup/render.php:97] #20 phutil_tag(string, array, array) called at [<phorge>/src/view/formation/PHUIFormationContentView.php:13] #21 PHUIFormationContentView::render() called at [<phorge>/src/view/AphrontView.php:222] #22 AphrontView::producePhutilSafeHTML() called at [<phorge>/src/infrastructure/markup/render.php:115] #23 phutil_escape_html(PHUIFormationContentView) called at [<phorge>/src/infrastructure/markup/render.php:139] #24 phutil_escape_html(array) called at [<phorge>/src/infrastructure/markup/render.php:97] #25 phutil_tag(string, array, array) called at [<phorge>/src/view/formation/PHUIFormationView.php:58] #26 PHUIFormationView::render() called at [<phorge>/src/view/AphrontView.php:222] #27 AphrontView::producePhutilSafeHTML() called at [<phorge>/src/infrastructure/markup/render.php:115] #28 phutil_escape_html(PHUIFormationView) called at [<phorge>/src/infrastructure/markup/render.php:171] #29 phutil_implode_html(string, array) called at [<phorge>/src/view/page/PhabricatorBarePageView.php:58] #30 PhabricatorBarePageView::willRenderPage() called at [<phorge>/src/view/page/PhabricatorStandardPageView.php:217] #31 PhabricatorStandardPageView::willRenderPage() called at [<phorge>/src/view/page/AphrontPageView.php:46] #32 AphrontPageView::render() called at [<phorge>/src/view/page/PhabricatorStandardPageView.php:918] #33 PhabricatorStandardPageView::produceAphrontResponse() called at [<phorge>/src/aphront/configuration/AphrontApplicationConfiguration.php:724] #34 AphrontApplicationConfiguration::produceResponse(AphrontRequest, PhabricatorStandardPageView) called at [<phorge>/src/aphront/configuration/AphrontApplicationConfiguration.php:299] #35 AphrontApplicationConfiguration::processRequest(AphrontRequest, PhutilDeferredLog, AphrontPHPHTTPSink, MultimeterControl) called at [<phorge>/src/aphront/configuration/AphrontApplicationConfiguration.php:203] #36 AphrontApplicationConfiguration::runHTTPRequest(AphrontPHPHTTPSink) called at [<phorge>/webroot/index.php:35]
Thanks! Oh true I was forget the default fallback option... ah well I guess not a huge difference performance wise plus null feels cleaner to me :)
I'd love to have Phorge skip common words and short words though.
So maybe keeping these functions could even make sense so future improvements could call them?
Hi, thanks a lot for sharing this! I assume you are running 2024.35 and not yet 2025.18.
You shared seven issues above.
- The first issue is unresolved T15824.
- The second issue has not been reported yet about https://we.phorge.it/source/phorge/browse/master/src/applications/oauthserver/controller/PhabricatorOAuthServerTokenController.php$26, I may write/propose a patch later once finishing some other work.
- The last five issues were fixed by rP372316c998362e3530c0e591fe0869e6a7e62af6.
Wed, May 28
In D26000#27480, @valerio.bozzolan wrote:Is getDisplayIconColor() related to these? (spoiler: probably it's not)
remove unused CSS as it's also unhelpful CSS when actually used
These selectors currently do not get applied at all in Conpherence rooms when opening or creating URIs with anchors.
Tue, May 27
git rebase master
Not really what we expected, but nice try
@param loves $name
In T15903#18783, @avivey wrote:pht() also does some escaping, formatting, and other safety related stuff
Mon, May 26
In D26032#27637, @valerio.bozzolan wrote:Probably one screenshot is missing (?)
Sun, May 25
Some small nitpicks only. Makes sense to me, didn't spot any logic flaws, keeps close to already existing code in that very directory
getIsCreateTransaction() should return true here but it doesn't.
I believe that this underlying problem can also trigger an exception, see https://phabricator.wikimedia.org/T361459
Sat, May 24
git rebase master