docs(roadmap): correct stale Phase 1/2 status; drop dead result-view plumbing (#266) - #267
Merged
Merged
Conversation
ROADMAP.md was last edited at 21:46 on 2026-06-10; the review-surface bundling (f1f062c, 22:18) and the navbar de-coupling (d6e6a52, 22:58) landed the same evening and it never caught up. Two months on it still claimed the global navbar was PHP-rendered and that Model B was missing the review surface. - Phase 1: add the completed global-navbar bullet (buildNavbar() is gone; PHP emits only #navbar-root and mountNavbar() hydrates it from GET /api/v1/navbar). Drop the 'still PHP-rendered' remainder. - Phase 1: dated status line -- every mobile-critical surface is shell-free; only the legacy-fragment cleanup is open (#266). - Phase 1: name the nine surviving *_result.php views so the cleanup is concrete rather than 'some fragments'. - Phase 2: Model B remaining cut to on-device QA only; the bundle covers connect/library/reader/review. - Fix the view-template count (94 -> 93) and a pre-existing MD013.
Static audit of the *_result.php mechanism against the views that feed it. Four handlers in word_result_init.ts dispatch on config elements that no PHP view emits any more: data-lwt-delete-result-config data-lwt-insert-wellknown-result-config data-lwt-insert-ignore-result-config data-lwt-delete-multi-result-config word_status_ajax.ts is dead for the same reason -- its only entry point is an onDomReady hook reading #word-status-config, and neither that element nor the #status_change_log it writes to exists anywhere in src/. Word deletion in the modern reader goes through word_store.deleteWord() -> TermsApi.delete(), so nothing here is a missing feature. Removed: - the four handlers, their interfaces and dispatch blocks - word_status_ajax.ts + its barrel export + its test - deleteWordFromDOM / deleteMultiWordFromDOM / updateHoverSaveInDOM, which had no callers left (initHoverSaveResult inlines its own version). markWordWellKnownInDOM / markWordIgnoredInDOM stay -- text_keyboard.ts and simple_interactions.ts still use them. Also fixed a genuinely broken link found on the way: the review table's 'edit term' button pointed at edit_tword.php with target="ro", a route that no longer exists opening into a frame that is no longer rendered. It now uses /word/edit-term, matching review_view.ts. That was the last data-action="show-right-frames" emitter, so that case goes too. The seven views still using this mechanism are listed in the word_result_init.ts docblock so the next drift is visible. Gates: psalm 0 errors, phpcs PSR12 clean, tsc clean, eslint clean, vitest 4418 pass, phpunit 9174 pass. E2E unchanged vs baseline (36 pre-existing failures on develop, identical per-spec breakdown).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes part of #266. Two commits: a documentation correction that motivated the
cleanup, and the cleanup itself.
1.
ROADMAP.mdwas two months staleROADMAP.mdwas last edited at 21:46 on 2026-06-10. The review-surface bundling(
f1f062c24, 22:18) and the navbar de-coupling (d6e6a5203, 22:58) landed thesame evening and it never caught up, so it still claimed the global navbar was
PHP-rendered and that Model B was missing the review surface. Both shipped in
3.2.0.
Verified before rewriting:
PageLayoutHelper::buildNavbar()no longer exists,PHP emits only
<div id="navbar-root">,mountNavbar()is calledunconditionally from
main.ts:169, and greppingnavbar-item|navbar-menu|navbar-brand|navbar-burgeracrosssrc/**/*.phpreturns zero hits.
Phase 1 is therefore complete apart from the legacy-fragment cleanup, which is
the second commit. Phase 2's Model B remaining list drops from three items to
on-device QA only.
2. Dead legacy result-view plumbing
Audited the
*_result.phpmechanism by matching each config element theTypeScript dispatches on against the views that emit it. Four had no emitter:
data-lwt-delete-result-configdata-lwt-insert-wellknown-result-configdata-lwt-insert-ignore-result-configdata-lwt-delete-multi-result-configword_status_ajax.tsis dead for the same reason: its only entry point is anonDomReadyhook reading#word-status-config, and neither that element northe
#status_change_logit writes to exists anywhere insrc/. Its docblockstill pointed at
status_result.php, a view that is already gone.Checked this was dead code rather than a missing feature — the modern reader
deletes through
word_store.deleteWord()→TermsApi.delete(), an entirelyseparate path.
Removed: the four handlers with their interfaces and dispatch blocks;
word_status_ajax.tsplus its barrel export and test; anddeleteWordFromDOM/deleteMultiWordFromDOM/updateHoverSaveInDOM, whichlost their last callers.
markWordWellKnownInDOM/markWordIgnoredInDOMstay—
text_keyboard.tsandsimple_interactions.tsstill use them, so eachhelper was checked individually rather than deleted by association.
A real bug fell out of it
The review table's "edit term" button linked to
edit_tword.php?wid=withtarget="ro". That filename has not been routed since v3, andro/#frames-ris a frame no view renders, so it 404'd into a stray named window. It now uses
/word/edit-term?wid=, matching whatreview_view.ts:376already did for thesame action. That was the last
data-action="show-right-frames"emitter, sothat case goes too.
The seven views still using this mechanism are listed in the
word_result_init.tsdocblock so the next drift is visible.Verification
psalm 0 errors · phpcs PSR12 clean · tsc clean · eslint clean · vitest 4418 pass
· phpunit 9174 pass ·
npm run build:allclean.The 1 PHPUnit warning and 4 deprecations are byte-identical on a stashed
baseline.
E2E: ran the full Cypress suite, then re-ran it against a stashed tree. Both
give 185 passing / 36 failing with the same per-spec breakdown, so this branch
introduces no regression. Those 36 are pre-existing on
developand are beingfixed separately — they cluster into an ambiguous
cy.click()selector (12 ofthe 14 auth failures), the API spec never being updated for the CSRF middleware
(bare
cy.request()POST/PUT now 403), and a missing/wordpress/startlink.