luci-app-usteer: per-SSID settings tabs and known-station tracking - #8869
luci-app-usteer: per-SSID settings tabs and known-station tracking#8869grzegorz914 wants to merge 2 commits into
Conversation
279269a to
ff4374e
Compare
openwrt-ai
left a comment
There was a problem hiding this comment.
Reviewed the two new commits (per-SSID settings UI + translation refresh). The backend dependency (openwrt/usteer#22) is disclosed in the PR body, so the new UCI options / delete_known ubus call are not flagged as frontend-only. Both commit messages match their diffs. Two inline questions about the per-SSID section handling below.
Generated by Claude Code
openwrt-ai
left a comment
There was a problem hiding this comment.
Reviewed the two new commits since ff4374e (aab5f29 lazy per-SSID section creation + collision-free ids, 18f43f1 re-nest SSID tabs after every render). Both previous inline findings are addressed. The lazy-write approach checks out against form.js/uci.js: uci.set() is indeed a no-op on a section that doesn't exist yet, so creating the section inside the write() wrapper rather than at render time is the right hook, and AbstractValue.write() honours ucisection, so the wrapper lands in the correct section.
One follow-on issue with the collision fix and two nits inline.
Commit checks
- 18f43f1 "luci-app-usteer: re-nest SSID tabs after every render, not just the first" — the body's claim "Pre-existing bug, not introduced by the per-SSID tabs commit itself (reproduced on an older build too)" doesn't hold against this tree:
master(96a255d) has no tab-relocation code inusteer.jsat all — nodata-tabDOM manipulation, noknowndevicestab, norelocateSsidTabsequivalent. All of it is added by cd58ab1 in this same PR, so this is fixing a bug introduced two commits earlier in the series, not a pre-existing one. Worth rewording (or dropping the sentence) so the history doesn't mislead someone bisecting later.
Generated by Claude Code
18f43f1 to
cae4bcd
Compare
openwrt-ai
left a comment
There was a problem hiding this comment.
Reviewed the new work since 18f43f1. The branch was force-pushed: e1488b2 squashes the previously reviewed cd58ab1 + aab5f29 + 18f43f1 together with this round's ssidSectionId() fixes, cae4bcd carries the i18n, and 2a5c682 + 1443c8e are genuinely new. All four commit messages match their diffs, so no Commit checks section.
The ssidSectionId() rework addresses the previous round's findings correctly — ids are now resolved from each existing usteer_ssid section's own ssid option before any allocation, usedSsidSectionIds is seeded from the existing section names, and both maps are Object.create(null). uci.load('usteer') is part of load(), so uci.sections() has real data by the time render() calls ssidSectionId(). The known_stations_timeout o.default = '0' removal is right: renderWidget() seeds the input with this.default when cfgvalue is null, which is what was pre-filling a literal 0 over the placeholder.
The band steering toggle itself behaves as the commit message describes — with default = '1' and optional, Flag.parse() removes the option when checked and writes '0' when unchecked, so the daemon's implicit on-by-default is preserved and no section is created just by leaving the box ticked. One issue with how the four dependent fields are wired to it, plus one series nit, inline.
Generated by Claude Code
1443c8e to
3d84344
Compare
openwrt-ai
left a comment
There was a problem hiding this comment.
Reviewed the force-pushed series (now b3f29ea + 3d84344, replacing e1488b2/cae4bcd/2a5c682/1443c8e). The i18n squash asked for last round is done: the only non-reference change in the po files since 1443c8e is one re-wrapped Polish line in po/pl, and the .pot references line up with the final usteer.js (e.g. Band steering → usteer.js:667). Both commit messages match their diffs — b3f29ea touches only usteer.js, 3d84344 only the po files — so no Commit checks section.
The hasBandSteeringToggle hoist resolves the previous round's finding correctly: all four depends(sid + '_band_steering_enabled', '1') sites are now behind the same Initscript.includes() check that guards the toggle itself, so on a usteer build without band_steering_enabled the four parameter fields stay visible and parse() no longer strips their stored values.
New this round: the delete_known plumbing added by b3f29ea looks like it cannot work as shipped — the method is missing from the app's rpcd ACL, and the RPC declaration lacks reject: true, which turns any failure into a silent fake success. Details plus one question about remote nodes inline.
Generated by Claude Code
3d84344 to
17fead0
Compare
openwrt-ai
left a comment
There was a problem hiding this comment.
Reviewed the force-pushed series (now 2516ae3 + 17fead0, replacing b3f29ea/3d84344). The delta since 3d84344 is small: reject: true on the delete_known declaration, the catch() now surfacing err.message via ui.addNotification(), the isLocal flag on collectKnownStaEntries(), and the ACL grant. Both commit messages match their diffs — 2516ae3 touches only usteer.js and acl.d/luci-app-usteer.json, 17fead0 only the po files — so no Commit checks section.
All three findings from the previous round are resolved correctly:
reject: trueis set, sohandleCallReply()now raises on a non-zero ubus status instead of resolving with the status code, and thecatch()branch is reachable.L.raise('RPCError', …)produces a realError, soerr.messageis populated."usteer": [ "delete_known" ]landed underwrite.ubus, which is the right block for a state-mutating call.- The remote-node question is answered by dropping the button on
Remoteinforows rather than shipping one that silently undoes itself on the nextremote_update_interval; both call sites (lines 200-201 and 802-803) pass the flag consistently.
The i18n commit is now purely reference-line churn relative to 3d84344 — no msgid or msgstr changed — and the regenerated references match the final file (e.g. Delete → usteer.js:171). FormalityCheck is green on 17fead0.
One nit inline.
Generated by Claude Code
17fead0 to
ced26b7
Compare
openwrt-ai
left a comment
There was a problem hiding this comment.
Reviewed the force-pushed series (now 9a7e04e + ced26b7, replacing 2516ae3/17fead0). The delta since 17fead0 is one line of usteer.js plus the i18n propagation of that single msgid. Both commit messages match their diffs — 9a7e04e touches only usteer.js and acl.d/luci-app-usteer.json, ced26b7 only the po files — so no Commit checks section.
The previous round's nit is addressed: the Known-stations help text now explains why remote rows carry no Delete button, and it gained the trailing period the two preceding sentences already had. The .pot reference still resolves to the right place (usteer.js:184), the new msgid is propagated to all 31 language files plus the template, and the Polish msgstr is a complete translation of the new wording. All three FormalityCheck runs are green on ced26b7.
Two i18n nits inline, both confined to po/pl/usteer.po; nothing blocking.
Generated by Claude Code
ced26b7 to
c763e7d
Compare
openwrt-ai
left a comment
There was a problem hiding this comment.
Reviewed the force-pushed series (now 8ae5020 + c763e7d, replacing 9a7e04e/ced26b7). 8ae5020 is byte-identical to the previously reviewed 9a7e04e — same tree, same message — so the entire delta is the po/pl/usteer.po rebuild plus the paragraph documenting it in c763e7d.
Both nits from the previous round are resolved, and the rebuild's claims check out against the tree:
- Obsolete entries in
po/pl/usteer.podrop from 52 to 31, and the resulting set is exactly the setpo/de/usteer.po(and the other translated languages) gains from this PR — I compared the two files entry by entry, the msgid sets match with nothing extra on either side. The 21 PR-internal leftovers are gone. - All 165 live entries are still present, none went empty or fuzzy, and the
#:reference lines and msgid ordering are identical topo/de/usteer.po, i.e. the file really was merged against this PR's final.pot(166 entries incl. header, matchingpo/templates/usteer.pot). - The Weblate header block (
Project-Id-Version,PO-Revision-Date: 2026-03-29,Last-Translator,Plural-Forms,X-Generator) is preserved from master's copy rather than replaced by the template's, so the rebuild won't look like a translator change to Weblate. - The
Dostępne→Wypełnianerevert landed and the Polish sentence now tracks the EnglishOnly populated while …again.
All three FormalityCheck runs are green on c763e7d. One wording issue on the new commit message below; nothing blocking.
Commit checks
- c763e7d "luci-app-usteer: update translation template and Polish translation" — the new paragraph ends with "was diffed msgid-by-msgid against the carried-forward copy to confirm all 165 live translations are unchanged", but the commit does change one live translation:
po/pl/usteer.po:587-590restoresDostępne tylko gdy→Wypełniane tylko gdyin the usteer.js:184 description. That revert is correct and was the point of the previous round's second nit — but it is the only substantive msgstr change in the whole commit, and the message currently asserts the opposite. Everything else really is obsolete-entry churn, so a reader trusting the message would skip the one hunk that isn't. Suggest amending the last sentence to something like "…to confirm all 165 live translations are unchanged apart from theOnly populated while …description, whose opening verb is restored to Wypełniane."
Generated by Claude Code
c763e7d to
51a1bf4
Compare
|
Fixed in 51a1bf4 (amend, no file changes): reworded the commit message's last sentence to call out the Dostępne→Wypełniane revert as the one substantive msgstr change, instead of implying nothing changed. |
openwrt-ai
left a comment
There was a problem hiding this comment.
Reviewed 1 new commit; no new issues found.
51a1bf4 replaces c763e7d as the i18n commit and 8ae5020 is carried over unchanged. git diff c763e7d..51a1bf4 is empty — the trees are byte-identical, so the entire delta is the commit-message amend the author described, exactly as stated in the PR comment.
The previous round's Commit checks finding is resolved: the last sentence of the rebuild paragraph now reads "…are unchanged apart from the "Only populated while ..." description, whose opening verb is restored to "Wypełniane"", and a new paragraph explains the choice. That matches the tree — po/pl/usteer.po:584-588 is the one live msgstr the rebuild changed relative to the carried-forward copy, and the message no longer asserts the opposite.
All three FormalityCheck runs are green on 51a1bf4.
Generated by Claude Code
51a1bf4 to
1b0a234
Compare
openwrt-ai
left a comment
There was a problem hiding this comment.
Reviewed the force-pushed series (now 3a4cee1 + 1b0a234, replacing 8ae5020/51a1bf4). This round is substantially bigger than the last few: 3a4cee1 moves thirteen options (sta_block_timeout, local_sta_timeout, max_retry_band, seen_policy_timeout, assoc_steering, probe_steering, max_neighbor_reports, load_balancing_threshold, steer_reject_timeout, roam_process_timeout, roam_kick_delay, initial_connect_delay, node_up_script) out of the global Settings tab into addSsidTab() and reorders the per-SSID field list, and 1b0a234 regenerates the whole i18n set for it.
What checks out:
- The
.potreally was regenerated against the finalusteer.js— spot-checked references resolve (Sta block timeout→ usteer.js:576,Band steering threshold→ usteer.js:602,Node up script→ usteer.js:786), and the msgids dropped by this round's rewording (default false,empty means all,Default: 3) are gone from the template whileDefault:survives because usteer.js:780`` still uses it. - The obsolete-entry claim holds:
po/pl,po/de,po/csandpo/ruall carry exactly 47#~ msgidentries and 162 live ones, matching the 162-entry template, so the pl file is in line with the rest as the commit message says. No fuzzy and no empty msgstr inpo/pl. - All three FormalityCheck runs are green on
1b0a234.
Two problems introduced by this round, plus one question and one nit, inline. The i18n one is the bigger of the two — the rebuild carried in 19 changed Polish translations of msgids this PR doesn't touch on the English side.
Commit checks
- 3a4cee1 "luci-app-usteer: add per-SSID settings tabs and known-station tracking UI" — the message says "The four band-steering parameter fields depend on it and hide when disabled", but after this revision's reorder only three do:
band_steering_thresholdwas moved up into the station-policy cluster at usteer.js:602-604`` and lost itsif (hasBandSteeringToggle) o.depends(…)in the process. Either restore the dependency (see inline) or drop the "four" from the message. - 1b0a234 "luci-app-usteer: update translation template and Polish translation" — the message says the rebuilt
po/pl/usteer.powas "verified msgid-by-msgid against the working copy first to confirm no live translation regressed", but 19 live msgstr differ from the previously reviewed 51a1bf4 copy, and 13 of those had matchedmasterexactly (Event log types,Interval (ms) between sending state updates to other APs,Local sta timeout,Local sta update,Max neighbor reports,Measurement report timeout,Message types to include in log.,Node up script,Remote node timeout,Remote update interval,Seen policy timeout,Setting the interval to 0 disables link-measurements.,Sta block timeout). None of those msgids changed in English in this PR, so the merge should have left them alone. Details inline onpo/pl/usteer.po:288.
Generated by Claude Code
1b0a234 to
bf996b4
Compare
daf4473 to
c5b1468
Compare
643bd11 to
9f1345e
Compare
openwrt-ai
left a comment
There was a problem hiding this comment.
Reviewed the force-pushed series (now 46a98d9 + 9f1345e, replacing 3a4cee1/1b0a234). The code delta since 1b0a234 is 56 lines of usteer.js: hasBandSteeringToggle hoisted to the top of addSsidTab(), the band_steering_threshold dependency restored, local_sta_update moved out of the global Settings tab into the per-SSID tab, and assoc_steering/probe_steering converted from form.Flag to a three-way form.ListValue.
Both fixes from the previous round check out:
band_steering_thresholdis guarded again (usteer.js:633-634), and hoisting theconstabove the field cluster removes the temporal-dead-zone problem; the toggle is still declared later in the same section, which is fine sincedepends()resolves by name atcheckDepends()time.- The tri-state does what the new comment claims. With
o.default = ''andoptional,parse()removes the option when the blank choice is picked — so nousteer_ssidsection is forced into existence — while'0'is a real write that can override a globally-enabled setting, which the old Flag could not express. And because the choice list contains'',ui.Selectreuses that choice's own label instead of prepending a second-- Please choose --entry, so the dropdown has exactly three items.
i18n: the template really was regenerated against the final file — the three new msgids resolve to usteer.js:615-617/621-623 and the reworded local_sta_update description to usteer.js:594. po/de, po/cs and po/ru are clean mechanical merges (exactly the four msgid additions and one removal, no msgstr touched). po/pl has the same msgid set as the template, 0 fuzzy and 0 untranslated, but also rewrites 10 live translations of msgids this PR leaves alone — inline.
All three FormalityCheck runs are green on 9f1345e.
Commit checks
- 9f1345e "luci-app-usteer: update translation template and Polish translation" — the message scopes the regeneration to "the string changed by moving local_sta_update to the per-SSID tab", but this is the PR's only i18n commit: the template it produces adds 61 and drops 48 msgids relative to master, and this revision alone contributes three more (
On,Off,Use global setting) beyond thelocal_sta_updaterewording. The message also says it "translates the new/reworded Polish strings", while the commit additionally rewrites 10 livepo/plmsgstr whose English text this PR does not change (details inline onpo/pl/usteer.po:372). - 46a98d9 "luci-app-usteer: add per-SSID settings tabs and known-station tracking UI" — the content matches the diff, but the body is written as a changelog against states that will never exist in master: "plus fixes from review: reject:true and ACL grant for delete_known, Delete button hidden for remote-owned entries, band_steering_enabled dependencies guarded against builds lacking the toggle…". This is the commit that introduces
delete_known, its ACL entry and those dependencies in the first place, so ingit logthe sentence reads as if an earlier commit had shipped them broken. Dropping "plus fixes from review:" and stating the behaviour directly keeps the same information without the phantom history.
Generated by Claude Code
9f1345e to
aec0084
Compare
openwrt-ai
left a comment
There was a problem hiding this comment.
Reviewed the force-pushed series (now 221882f + aec0084, replacing 46a98d9/9f1345e). The delta since 9f1345e is small: the addSsidTab() header comment rewritten, On/Off renamed to Enable/Disable on both tri-states, and the i18n propagation of that one msgid pair.
Both items from the previous round check out:
Enable/Disablelanded on bothassoc_steeringandprobe_steering(usteer.js:621-622and [627-628](https://github.com/openwrt/luci/blob/aec00843dde2d08c35e50d3182a24a8924f1fc2d/applications/luci-app-usteer/htdocs/luci-static/resources/view/usteer/usteer.js#L627-L628)),`` the.potreferences resolve to exactly those two line pairs, and the PolishWłącz/Wyłączmatches what ~30 other luci apps already carry for these msgids, so nothing new for the translator to decide.- The i18n merge is mechanical in every language:
po/de,po/cs,po/ruand the rest gainEnable/Disable, dropOn/Off, and touch no msgstr. None of the msgids discussed in the previous rounds is rewritten again here, andpo/plhas the same 164 live msgids as the template with 0 fuzzy and 0 untranslated. - The header-comment correction states the fallback the way you established it in the
set_configthread, which makesUse global settingthe right label — but the parenthetical it sits under still says the opposite, inline.
All three FormalityCheck runs are green on aec0084. Two nits and one comment-consistency issue inline; nothing blocking.
Commit checks
- 221882f "luci-app-usteer: add per-SSID settings tabs and known-station tracking UI" — the amend adds a fourth "fix from review" sentence: "Corrected the addSsidTab() header comment, which claimed a blank field falls back to usteer's compiled default unless the SSID's UCI section doesn't exist yet". No commit in master ever contained that comment — this commit is the one that introduces
addSsidTab()and its header — so ingit logthe sentence describes correcting a claim that, from the merged tree's point of view, was never made. Same shape as the "plus fixes from review: reject:true and ACL grant for delete_known …" framing raised last round, which is unchanged. Stating what the comment says (rather than what an intermediate revision said before it) keeps the same information without the phantom history. - aec0084 "luci-app-usteer: update translation template and Polish translation" — "Regenerates usteer.pot for the Enable/Disable strings that replaced On/Off" scopes the commit to this revision's delta, but
On/Offnever reach master either: againsta3cc0e1this commit's template adds 61 msgids and removes 48, of which the Enable/Disable pair is two. A reader of the merged history sees a 61-msgid regeneration explained by a rename that has no visible before-state.
Generated by Claude Code
aec0084 to
2f59d60
Compare
openwrt-ai
left a comment
There was a problem hiding this comment.
Reviewed the force-pushed series (now 9a58cbc + 2f59d60, replacing 221882f/aec0084). git diff aec0084..2f59d60 is 11 lines: the two addSsidTab() header-comment hunks and the removal of the two obsolete po/pl entries. All three items from the previous round are applied verbatim:
- The parenthetical now says "no longer exposed in the global Settings tab - each SSID overrides them independently", which matches the tree — the global
settingstab at usteer.js:969-1077`` retains only genuinely global options (network, `syslog`, `local_mode`, `ipv6`, `debug_level`, `measurement_report_timeout`, `remote_update_interval`, `remote_node_timeout`, `link_measurement_interval`, `event_log_types`, `known_stations*`, `ssid_list`, `reassociation_delay`), and none of the thirteen moved fields is left behind. The sentence no longer contradicts the fallback description two lines down. - The tail paragraph is reflowed to the block's fill.
po/plis back to 48#~ msgidentries, and the obsolete set is now byte-identical topo/de's, as are the live msgid set and its ordering; the live set still matchespo/templates/usteer.potexactly (166 entries incl. header) acrosspl/de/cs/ru, with 0 fuzzy inpl. The onlypo/plchange since aec0084 is those two removals — no msgstr touched.
Both commit messages match their diffs by content and scope (9a58cbc touches only usteer.js + acl.d/luci-app-usteer.json, 2f59d60 only the po files), and the delete_known ACL grant still covers every usteer method the view declares (remote_hosts, remote_info, local_info, get_clients under read.ubus, delete_known under write.ubus). All three FormalityCheck runs are green on 2f59d60.
Commit checks
- 9a58cbc "luci-app-usteer: add per-SSID settings tabs and known-station tracking UI" — the amend adds a fifth review-changelog sentence ("Corrected the addSsidTab() header comment: a blank field always falls back to …"), which is the same phantom-history shape raised in the last two rounds and still unaddressed: this commit is the one that introduces
addSsidTab()and its header, so in the merged history there is no earlier state whose comment was wrong. Not repeating the detail — the correction itself is right, only the "fixes from review / corrected X" framing needs dropping before merge sogit logdescribes the end state rather than the branch's revision history.
Generated by Claude Code
2f59d60 to
3e96166
Compare
|
Fixed in 3e2f5d7: reworded the commit message to describe the final state (per-SSID overrides, known-station tracking, delete_known ACL/reject/notification, Enable/Disable tri-state) instead of narrating the review-round fixes that produced it - dropped the "fixes from review"/"corrected X" framing since this commit is the one that introduces addSsidTab() in the merged history, so there's no earlier state for it to be correcting. Content is identical (git diff 2f59d60..3e96166 is empty), message-only change. |
openwrt-ai
left a comment
There was a problem hiding this comment.
Reviewed the force-pushed series (now 3e2f5d7 + 3e96166, replacing 9a58cbc/2f59d60). The delta is message-only, as described in the PR comment: both revisions point at the same tree (d06d837f46f31ef38a2713ee1d602c3cc6e61adc), git diff 2f59d60..3e96166 is empty, and the i18n commit's message is byte-identical to 2f59d60's — so the only new content is the first commit's rewritten body.
The phantom-history finding raised in the last three rounds is resolved: the "plus fixes from review: …" / "Corrected the addSsidTab() header comment …" changelog framing is gone, and the message now states the end state directly. Everything it asserts holds against the tree — the tri-state is Use global setting/Enable/Disable with default = '' (usteer.js:618-628), the Delete button is gated on the `isLocal` flag ([usteer.js:165-171](https://github.com/openwrt/luci/blob/3e96166549f74c897ebe60a1db2bb5e6ec5e4bbf/applications/luci-app-usteer/htdocs/luci-static/resources/view/usteer/usteer.js#L165-L171)),`` failures go through ui.addNotification() (usteer.js:131-135),`` and "usteer": [ "delete_known" ] is under `write.ubus` in the ACL.
All three FormalityCheck runs are green on 3e96166. One wording gap in the new message below; nothing blocking, and no inline comments this round since the tree is unchanged from the previously reviewed revision.
Commit checks
- 3e2f5d7 "luci-app-usteer: add per-SSID settings tabs and known-station tracking UI" — the rewritten first paragraph enumerates what moves to the per-SSID tab as "station tracking/policy timeouts, SNR/signal thresholds, roaming, band steering, load kick, and local_sta_update's per-node update interval", but
node_up_scriptis also moved and fits none of those categories: master has it as a globals.taboption('settings', …)at usteer.js:695,and this commit re-creates it as the last field of `addSsidTab()` at [usteer.js:810](https://github.com/openwrt/luci/blob/3e96166549f74c897ebe60a1db2bb5e6ec5e4bbf/applications/luci-app-usteer/htdocs/luci-static/resources/view/usteer/usteer.js#L810).`` It also isn't a "roaming-policy field", which is how the sentence characterises everything in the list. Since the practical effect is that the option disappears from the global Settings tab, it's worth naming explicitly (e.g. "…, load kick,local_sta_update's per-node update interval, and the per-node up script"), so someone bisecting a "where did Node up script go" report finds it in the message.
Generated by Claude Code
3e96166 to
7ba9090
Compare
…g UI Adds a per-SSID configuration tab, letting each SSID override the fields that were previously shared across the whole usteer instance: roaming-policy (station tracking/policy timeouts, SNR/signal thresholds, roaming, band steering, load kick, local_sta_update's per-node update interval) and the per-node up script. A field left blank on a per-SSID tab falls back to whatever the shared 'usteer' section has stored for it. assoc_steering and probe_steering use a three-way Enable/Disable/Use global setting choice (matching tools/network.js's convention for this kind of tri-state), since a plain checkbox can't express turning a globally-enabled setting off for just one SSID. Band steering is disabled by setting its interval to 0, matching link_measurement_interval's convention - there is no separate enable/disable toggle for it. Also adds known-station tracking: a per-node table of stations usteer has ever seen, with a Delete button shown only for locally-owned entries (deleting a remote node's synced copy doesn't propagate to the node that actually owns it) that calls the daemon's delete_known method over ubus - granted in acl.d/luci-app-usteer.json's write block, and surfaced through ui.addNotification() on failure. Signed-off-by: Grzegorz Kaczor <grzegorz914@icloud.com>
Regenerates usteer.pot to drop the Band steering toggle's strings (reverted along with the field itself) and pick up the restored "A value of 0 disables band-steering." sentence on the interval field's description, merges into every language's po file, and translates the new/reworded Polish strings. Dropped the resulting pl-only obsolete entries for strings that only ever existed in an intermediate revision of this series, matching every other language. Signed-off-by: Grzegorz Kaczor <grzegorz914@icloud.com>
7ba9090 to
a5976fb
Compare
openwrt-ai
left a comment
There was a problem hiding this comment.
Reviewed the force-pushed series (now b63fae6 + a5976fb, replacing 3e2f5d7/3e96166). The code delta since 3e96166 is 32 lines of usteer.js: the band_steering_enabled Flag, the hasBandSteeringToggle guard and its four depends() sites are all removed, and the interval field's description regains master's "A value of 0 disables band-steering." sentence. The rest is the i18n propagation of that one msgid change plus the two removed msgids.
What checks out:
- The revert is right against the daemon:
openwrt/usteerhas noband_steering_enabledanywhere (code search over the repo returns zero hits), andband_steering.cshort-circuits onif (!config.band_steering_interval) return;, which is exactly the conventionb63fae6's message claims. No leftovers either —hasBandSteeringToggleandband_steering_enabledno longer appear inusteer.jsat all. - The tri-state claim in
b63fae6holds for the structural pattern:tools/network.jsin this branch's tree uses the same''/'1'/'0'ListValueshape with a blank default choice forpseandpse_podl(tools/network.js:1136-1138).`` - The i18n merge is mechanical in every language: the only non-reference changes in
po/de,po/cs,po/ruand the rest are the reworded interval msgid and the removal ofBand steering/This option enables band steering for clients of this SSID; no msgstr is touched.po/pladditionally retranslates the one reworded description and nothing else — none of the "rewritten translations of msgids this PR doesn't change" regressions from the earlier rounds recurs. - The template really was regenerated against the final file: all 194
usteer.js:NNNreferences inpo/templates/usteer.potresolve to a line whose_()call carries that msgid.pl/de/cs/rueach carry 164 live entries matching the template and the same 48 obsolete entries (byte-identical msgid sets), with 0 fuzzy and 0 untranslated inpl. - All three FormalityCheck runs are green on
a5976fb.
One nit inline; nothing blocking.
Commit checks
-
a5976fb "luci-app-usteer: update translation template and Polish translation" — the message is written against intermediate revisions of this branch rather than against master, the same phantom-history shape that was fixed for the first commit in the last few rounds:
- "Regenerates usteer.pot to drop the Band steering toggle's strings (reverted along with the field itself)" — neither
Band steeringnorThis option enables band steering for clients of this SSIDexists in master'susteer.pot, so nothing is dropped in the merged history; the template goes from 151 to 162 msgids, adding 59 and removing 48. - "pick up the restored "A value of 0 disables band-steering." sentence" — master's global field already carries that sentence (usteer.js:677);`` from master's point of view this is the wording of a new per-SSID msgid, not a restoration.
- "Dropped the resulting pl-only obsolete entries for strings that only ever existed in an intermediate revision of this series, matching every other language" — this one describes zero hunks in the commit. That cleanup happened in an earlier revision (
2f59d60);git diff b63fae6..a5976fb -- po/pl/usteer.poremoves no#~line and adds 48 obsolete entries, the same 48 every other language gains.git diff 3e96166..a5976fbtouches no#~line in any file.
Scoping the message to what the commit does relative to master ("regenerate the template for the per-SSID fields, merge into every language, translate the new Polish strings") would keep it accurate without the branch-revision narration.
- "Regenerates usteer.pot to drop the Band steering toggle's strings (reverted along with the field itself)" — neither
Generated by Claude Code
|
Fixed: bullet updated to describe the current state (interval=0 disables, no separate toggle) instead of the reverted band_steering_enabled toggle. |
Summary
Companion LuCI frontend for openwrt/usteer#22 (per-SSID configuration overrides and known-station tracking with cold-start exploratory candidates).
usteer_ssidUCI section, mirroring the daemon's new per-SSID configuration overrides. The SSID list determines which tabs are shown live, without a page reload.delete_knownubus call, granted in the app's rpcd ACL) and a description of the cold-start "exploratory" placeholder semantics. Remote nodes' entries have no Delete button, since removing one only clears the local synced copy, not the owning peer's own record.config.band_steering_interval).Test plan
usteer_ssidUCI section, and fields fall back to the global setting when left blankUpdate
Extended the per-SSID tab with the remaining station/node-scoped policy fields that were still global-only:
sta_block_timeout,local_sta_timeout,max_retry_band,seen_policy_timeout,assoc_steering,probe_steering,max_neighbor_reports,load_balancing_threshold,steer_reject_timeout,roam_process_timeout,roam_kick_delay,initial_connect_delayandnode_up_script(moved from the global Settings tab, matching the daemon's extendedusteer_ssidoverrides).Also fixed a real bug found after the first round landed: the SSID tab nesting was only wired to the very first render -
Map.prototype.save()re-renders the map's content in place on every Save via the samerenderContents()used for the initial render, which silently undid the relocation (SSID tabs would jump back into the top-level tab bar after any Save). Fixed by wrappingrenderContents()itself instead of reacting only to the firstm.render()call, so relocation reruns on every render/Save/Reset.usteer_ssidUCI section, and fall back to the global setting when left blank