From e321ac70bffb7ccee6ecc7cb89806b01a40f391e Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 26 May 2026 18:18:27 +0000 Subject: [PATCH 1/3] fix(260526-tcf): update Wiki/gear column assertions to match 1x9 toolbar grid testToolbarHasWikiButton and testToolbarGearMovedToColumn8 in tests/suite/TestFastSenseCompanion.m asserted the pre-PR-#159 toolbar columns (Wiki at 6, gear at 8). The production layout in FastSenseCompanion.m:313-324 is a 1x9 grid with Wiki at col 7 and Settings gear at col 9. Commit e2ded77 updated the parallel TestFastSenseCompanionPlantLogToolbar.m for the new grid but missed these two assertions. Method name testToolbarGearMovedToColumn8 retained per user direction; the matching docstring + method-rename cleanup is deferred to a separate task. Diagnostic-message text on the same verifyEqual calls updated alongside the literals so failure output stays coherent. Expected post-fix: TestFastSenseCompanion 73/73 PASS (or 74/74 if the parallel quick task 260526-r9x PerTag commit lands first). --- tests/suite/TestFastSenseCompanion.m | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/suite/TestFastSenseCompanion.m b/tests/suite/TestFastSenseCompanion.m index a61335a5..d2ec9dde 100644 --- a/tests/suite/TestFastSenseCompanion.m +++ b/tests/suite/TestFastSenseCompanion.m @@ -1199,8 +1199,8 @@ function testToolbarHasWikiButton(testCase) 'testToolbarHasWikiButton: Wiki button missing from toolbar'); testCase.verifyEqual(numel(btn), 1, ... 'testToolbarHasWikiButton: expected exactly one Wiki button'); - testCase.verifyEqual(btn(1).Layout.Column, 6, ... - 'testToolbarHasWikiButton: Wiki button should sit in column 6'); + testCase.verifyEqual(btn(1).Layout.Column, 7, ... + 'testToolbarHasWikiButton: Wiki button should sit in column 7'); end function testToolbarGearMovedToColumn8(testCase) @@ -1211,8 +1211,8 @@ function testToolbarGearMovedToColumn8(testCase) found = false; for k = 1:numel(btns) if ~isempty(btns(k).Text) && strcmp(btns(k).Text, char(9881)) - testCase.verifyEqual(btns(k).Layout.Column, 8, ... - 'testToolbarGearMovedToColumn8: gear button should now sit in column 8'); + testCase.verifyEqual(btns(k).Layout.Column, 9, ... + 'testToolbarGearMovedToColumn8: gear button should now sit in column 9'); found = true; break; end From b0664de43c59e0aafa5535ff7472546c9a6ce724 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 26 May 2026 18:19:36 +0000 Subject: [PATCH 2/3] docs(260526-tcf): record companion toolbar test column fix - STATE.md row appended for 260526-tcf (commit e321ac7) - SUMMARY.md captures root cause, design decisions, deferred follow-ups (method rename + docstring cleanup), and that MATLAB test verification was deferred to the user's local session because the matlab MCP tools do not reach into the remote sandbox. --- .planning/STATE.md | 1 + .../260526-tcf-SUMMARY.md | 111 ++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100644 .planning/quick/260526-tcf-fix-companion-toolbar-1x9-grid-test-cols/260526-tcf-SUMMARY.md diff --git a/.planning/STATE.md b/.planning/STATE.md index f9c18bbd..660990fb 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -89,6 +89,7 @@ Other main PRs (#138, #139, #141, #144, #145, #146) auto-merged without conflict | 260513-sfp | Add auto-y-limit control buttons (V/A/L) to FastSenseWidget WidgetButtonBar — new YLimitMode property (auto-visible / auto-all / locked, default 'auto-visible' reproduces pre-260513-sfp behaviour), setYLimitMode public method (clears UserZoomedY on explicit click so click re-engages autoscale), autoScaleY_ refactored to dispatch on mode AFTER existing precedence guards (YLimits pin / UserZoomedY / FastSense.LiveViewMode=='follow') so 260513-ovt Follow semantics are preserved. DashboardLayout duck-types widget chrome via ismethod(widget,'setYLimitMode'), so future widgets that expose Y-rescale modes opt in without touching DashboardLayout. ASCII glyphs (V/A/L) match existing Info/Detach. reflowChrome_ re-anchors on resize. toStruct omits the default so legacy dashboards stay diff-invisible. test_fastsense_widget_ylimit_modes 11/11, test_fastsense_widget_tag 7/7, test_fastsense_follow_toggle 10/10, test_dashboard_time_sync_all_pages 5/5. Verified on live industrial-plant demo, all 8 scenarios approved. Known caveat: V/A/L cluster butts against Info button (0-px gap) — inherited from pre-existing addInfoIcon 28-px-typo, explicitly out-of-scope per plan; logged in deferred-items.md | 2026-05-13 | 4db9138, cc18c7f, a9cc181 | Verified | [260513-sfp-add-auto-y-limit-control-buttons-to-fast](./quick/260513-sfp-add-auto-y-limit-control-buttons-to-fast/) | | 260513-s0y | Add Tile + Close all buttons to FastSenseCompanion top toolbar — private OpenedFigures_ tracking + syncOpenedFigures_ (walks Engines_ before tile/close-all) + public trackOpenedFigure hook (InspectorPane.onOpenDetail_ and CompanionEventViewer.openEventDashboard_ forward their figure handles). tileOpenedWindows: ceil(sqrt(N))×ceil(N/cols) grid on monitor containing the companion, 24px margin, 8px gutter, row-major top-down. Before set(Position), coerces each figure to WindowState='normal' + Units='pixels' — root cause of initial "Tile does nothing" report was DashboardEngine.render defaulting to Units='normalized' (pixel rects got treated as screen fractions, pushing figures off-canvas). closeAllOpenedWindows: snapshot + close(h) per handle (honors each figure's CloseRequestFcn). Inner toolbar grid 1×4→1×6 (Events / Live / Tile / Close all / spacer / gear; gear Layout.Column 4→6). 9 sub-tests in test_companion_tile_close_buttons.m PASS; TestFastSenseCompanion regression 64/64 PASS. Verified on live industrial-plant demo. Shipped as PR #143. | 2026-05-14 | 182d6f1, 2867caa, 1be2cc8, e58bc35, c47c0c1, db9ef88 | Shipped (PR #143) | [260513-s0y-add-tile-windows-and-close-all-windows-b](./quick/260513-s0y-add-tile-windows-and-close-all-windows-b/) | | 260519-bs4 | Add Tag Status Table window to FastSenseCompanion — new `TagStatusTableWindow.m` (classical figure, not uifigure, per CONTEXT.md), opened via new **Tags ↗** button on companion top toolbar (col 3 in the post-merge 1×7 grid: Events / Live / Tags / Tile / Close all / spacer / gear). Detached-only window with 12-column `uitable`: Key, Name, Type, Criticality, Units, Latest, Status (smart per-type — Monitor→OK/ALARM, State→state label, others→—), Last updated (X(end) timestamp), Activity (Live/Inactive at 5-min threshold), Events (count from EventStore), Samples, Labels. All 18 demo tags listed (snapshot from `TagRegistry.find(@(t)true)`). Two parallel refresh paths: (a) push-on-write via existing `FastSenseCompanion.scanLiveTagUpdates_` → `markStatusTableDirty_(keys)` when companion is in Live mode, (b) window-owned `RefreshTimer_` (1s fixedSpacing, unique UUID name, BusyMode='drop', self-stop after 2 consecutive tick errors) so the table refreshes regardless of companion's IsLive — addresses user feedback that Activity/Last updated must stay correct when companion is idle. Pause/Resume polling toggle freezes both paths (markTagsDirty becomes a no-op while paused; header shows "Last refreshed: HH:MM:SS (paused)"). "Last refreshed" heartbeat label updates every tick. Filter chips mirror TagCatalogPane pattern: Type (Sensor/Monitor/Composite/State/Derived), Criticality (Low/Medium/High/Safety), Activity (Live/Inactive) — multi-toggle, AND-across-groups / OR-within-group; broadened free-text search across Key+Name+Units+Labels. Push-on-write hook in companion stays — both mechanisms run in parallel. Six atomic commits + 1 merge: 01 base class + 11 pure-logic tests; 02 companion wiring + 7 lifecycle tests; 03 Activity column + own timer (+5 logic + 2 lifecycle tests, deviation from "push-on-write only" CONTEXT decision per user); 04 last-refreshed header + chip filters + broader search (+4 logic + 2 lifecycle tests); 05 Pause/Resume polling toggle (+4 lifecycle tests); 06 Events count column (+4 logic + 1 lifecycle test); 07 merge with main (PR #143 toolbar grid conflict). Final test counts post-merge: `test_companion_tag_status_table` 24/24 (pure-logic), `TestTagStatusTableWindow` 16/16 (UI lifecycle), `test_companion_tile_close_buttons` 9/9 (main's new test still PASS), `TestFastSenseCompanion` 64/64 (no regression) = 113/113 total. Verified end-to-end on live industrial-plant demo: 4 MonitorTags showed real event counts (29/32/33/35), 14 others showed 0; Activity flipped Live→Inactive at exactly 5-min boundary via static buildRow_ proof; companion IsLive=0 throughout (window polled itself). Deferred / out-of-scope: (1) polling-scope clarification dismissed by user (heartbeat-only vs. passive-observation vs. only-update-changed-cells — left as-is, table updates all cells every tick); (2) Info button + markdown help — scoped up to a milestone-sized "unified in-app help/wiki" effort, parked as backlog 999.1. | 2026-05-19 | b2ed937, e8a1be5, 43d2d3b, 2a24965, 50d464c, 10df740, 73a3bf1 | Verified | [260519-bs4-implement-a-new-table-view-in-the-compan](./quick/260519-bs4-implement-a-new-table-view-in-the-compan/) | +| 260526-tcf | Fix two pre-existing column assertions in `TestFastSenseCompanion.m` to match the post-PR-#159 1x9 companion toolbar grid — `testToolbarHasWikiButton` now asserts Wiki at col **7** (was 6), `testToolbarGearMovedToColumn8` now asserts Settings gear at col **9** (was 8). Production source-of-truth: `FastSenseCompanion.m:410` (`hWikiBtn_.Layout.Column = 7`) and `FastSenseCompanion.m:423` (`hSettingsBtn_.Layout.Column = 9`); commit `e2ded77` migrated the parallel `TestFastSenseCompanionPlantLogToolbar.m` file but missed these two assertions. Column-value fix only — method name `testToolbarGearMovedToColumn8` retained per user choice; rename to `testToolbarGearAtColumn9` + matching docstring cleanup deferred to a separate task. Diagnostic-message strings on the two `verifyEqual` calls updated alongside the literals so failure messages stay coherent. Pre-existing nature confirmed in briefing: both failures reproduce against HEAD~1 and survived a stash-revert of the parallel quick task `260526-r9x`. MATLAB test verification (expected: 73/73 PASS, or 74/74 if PerTag commit landed first) deferred to the user's local session — `mcp__matlab__*` tools route to local MATLAB and are not reachable from the remote sandbox. | 2026-05-26 | e321ac7 | Ready for verification | [260526-tcf-fix-companion-toolbar-1x9-grid-test-cols](./quick/260526-tcf-fix-companion-toolbar-1x9-grid-test-cols/) | ## Progress Bar diff --git a/.planning/quick/260526-tcf-fix-companion-toolbar-1x9-grid-test-cols/260526-tcf-SUMMARY.md b/.planning/quick/260526-tcf-fix-companion-toolbar-1x9-grid-test-cols/260526-tcf-SUMMARY.md new file mode 100644 index 00000000..bfbbcb6f --- /dev/null +++ b/.planning/quick/260526-tcf-fix-companion-toolbar-1x9-grid-test-cols/260526-tcf-SUMMARY.md @@ -0,0 +1,111 @@ +--- +phase: 260526-tcf +plan: 01 +subsystem: FastSenseCompanion +tags: [tests, fastsensecompanion, toolbar, grid-layout, post-merge-followup] +type: quick +status: ready-for-verification +requirements: + - TCF-01 # Wiki button assertion matches current 1x9 grid (col 7, not col 6) + - TCF-02 # Settings gear assertion matches current 1x9 grid (col 9, not col 8) +dependency_graph: + requires: + - "FastSenseCompanion.m hToolbarGrid 1x9 layout (lines ~313-324) — Wiki at col 7, gear at col 9" + - "Commit e2ded77 (post-second-merge cleanup) — established the 1x9 grid expectation in the parallel test file" + provides: + - "TestFastSenseCompanion testToolbarHasWikiButton + testToolbarGearMovedToColumn8 in agreement with source-of-truth toolbar layout" + affects: + - "tests/suite/TestFastSenseCompanion.m (two verifyEqual assertions and matching diagnostic messages)" +tech_stack: + added: [] + patterns: [] +key_files: + created: + - ".planning/quick/260526-tcf-fix-companion-toolbar-1x9-grid-test-cols/260526-tcf-SUMMARY.md" + modified: + - "tests/suite/TestFastSenseCompanion.m" +decisions: + - "Column-value fix only — method name testToolbarGearMovedToColumn8 retained as-is per user choice. Rename to ...AtColumn9 deferred to a separate cleanup task to avoid touching grep-based references in this commit." + - "Diagnostic-message strings updated alongside the assertion values so a future failure message stays coherent ('should sit in column 7' / 'should now sit in column 9') — these are part of the same verifyEqual call, not the method-name identifier the user asked to leave alone." + - "Docstrings on the two methods (header comments at lines 1194 + 1207) intentionally left untouched — they contain 'column 6' / 'column 8' literals and will be cleaned up as part of the future method-name rename pass." +metrics: + duration_minutes: ~5 + completed: "2026-05-26" +--- + +# Quick Task 260526-tcf: Fix Companion Toolbar 1x9 Grid Test Columns — Summary + +One-liner: Two pre-existing column assertions in `TestFastSenseCompanion.m` were stale against the post-PR-#159 1x9 toolbar grid; updated them to expect Wiki at col 7 and Settings gear at col 9 (was 6 / 8), matching the production layout in `FastSenseCompanion.m`. + +## What Was Built + +A two-line correction to two test assertions: + +| Test method | Asserted column (before) | Asserted column (after) | Source-of-truth | +| ------------------------------------------ | ------------------------ | ----------------------- | --------------- | +| `testToolbarHasWikiButton` | 6 | **7** | `FastSenseCompanion.m:410` (`hWikiBtn_.Layout.Column = 7`) | +| `testToolbarGearMovedToColumn8` | 8 | **9** | `FastSenseCompanion.m:423` (`hSettingsBtn_.Layout.Column = 9`) | + +Diagnostic-message text on the same `verifyEqual` calls was updated in lockstep so any future failure reports a coherent expected-column. + +## Root Cause + +Commit `e2ded77` ("post-second-merge cleanup — Wiki Browser lint + 1x9 toolbar tests") migrated `TestFastSenseCompanionPlantLogToolbar.m` to the new 1x9 layout established by PR #159, but missed the two matching assertions in `TestFastSenseCompanion.m`. The production source (`FastSenseCompanion.m` lines 313–324) defines the canonical 1x9 grid: + +``` +col 1 = Events col 2 = Live col 3 = Tags col 4 = Plant Log… +col 5 = Tile col 6 = Close all col 7 = Wiki col 8 = flex spacer (1x) +col 9 = Settings gear +``` + +The two tests still expected the pre-merge layout where Wiki sat at col 6 and gear at col 8. + +## Final Commit Hash + +- `e321ac7` — `fix(260526-tcf)`: update Wiki/gear column assertions to match 1x9 toolbar grid + +## Files Changed + +| File | Change | LOC delta | Purpose | +| ------------------------------------------- | -------- | --------- | ----------------------------------------------------------------------- | +| `tests/suite/TestFastSenseCompanion.m` | Modified | +4 / -4 | Update `verifyEqual` column values (6→7, 8→9) and matching diagnostic messages in `testToolbarHasWikiButton` (lines 1202–1203) and `testToolbarGearMovedToColumn8` (lines 1214–1215) | +| `.planning/quick/260526-tcf-…/SUMMARY.md` | Created | — | This file | + +Total: 1 production-test file touched, ~4 net LOC modified. + +## Automated Test Results + +⚠️ Verification deferred to the user's local MATLAB session — the `mcp__matlab__*` tools route to the user's MATLAB instance, which is not reachable from this remote sandbox. + +Expected outcome when the user runs `mcp__matlab__run_matlab_test_file` on `tests/suite/TestFastSenseCompanion.m`: + +- Before this commit: **2 failures** (`testToolbarHasWikiButton`, `testToolbarGearMovedToColumn8`) — both assert outdated columns. +- After this commit: **73/73 PASS** (or 74/74 if the parallel quick task `260526-r9x` PerTag commit landed on this branch first). + +## User Verification Result + +Pending — user will run the test file locally and confirm the two failures clear without regressing the other 71 cases. + +## Design Decisions + +1. **Column-value fix only.** Method name `testToolbarGearMovedToColumn8` retained — user explicitly chose the minimum-diff option to avoid grep-based reference churn. Rename to `testToolbarGearAtColumn9` is deferred to a separate cleanup commit. +2. **Diagnostic messages updated alongside the assertion values.** The trailing string arg to `verifyEqual` is part of the same call site as the column literal; leaving `'should sit in column 6'` while asserting `7` would print a misleading failure message. This is not a "method-name identifier" change so it falls inside the user's "two-line verbatim" instruction. +3. **Method-header docstrings (lines 1194, 1207) intentionally not touched.** They contain `column 6` / `column 8` literals that will become misleading, but cleaning them up belongs to the same future pass that renames the method — bundling them into this commit would muddy the "tests vs grep-references" boundary the user drew. + +## Out-of-Scope Follow-ups (not done, deliberately) + +- **Rename `testToolbarGearMovedToColumn8` → `testToolbarGearAtColumn9`** — explicit user deferral; should ship as a separate cleanup task that also touches the method header docstrings on both methods. +- **Audit `TestFastSenseCompanionPlantLogToolbar.m` and any other companion-toolbar test files** for analogous stale-column literals beyond what `e2ded77` and this commit have covered — the briefing implied these are the only two outliers, but a sweep with `grep -rE "column [0-9]" tests/suite/TestFastSenseCompanion*` would close the loop. + +## Deviations from Plan + +None. Briefing was followed verbatim; only the line numbers (1261/1273) differed from the current file state (actual: 1202/1214) — content matched exactly and the fix was unambiguous. + +## Self-Check: PASSED + +Verified all claimed artifacts: + +- `tests/suite/TestFastSenseCompanion.m` lines 1202–1203 now expect column 7 — confirmed via `git diff`. +- `tests/suite/TestFastSenseCompanion.m` lines 1214–1215 now expect column 9 — confirmed via `git diff`. +- `libs/FastSenseCompanion/FastSenseCompanion.m` lines 410 and 423 are the source-of-truth — Layout.Column = 7 (Wiki) and Layout.Column = 9 (gear). +- Working tree shows exactly 4 line-pair changes inside a single file, matching the design-decision scope. From fd8f93f16732de1ee5d8f5271ff9a7e8eb72ebbe Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 29 May 2026 17:19:08 +0000 Subject: [PATCH 3/3] docs(260526-tcf): correct decoupled Wiki-button docstring + record audit sweep MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Post-fix audit sweep (grep for column literals across both companion toolbar test files) surfaced one straggler: the testToolbarHasWikiButton header docstring still read "sits in column 6" above an assertion that now checks 7. The docstring carries no method-name coupling (testToolbarHasWikiButton has no column number), so it is corrected here — same defect class as the assertion, zero rename risk. Left untouched: the testToolbarGearMovedToColumn8 docstring ("column 8"), which mirrors its method name and travels with the deferred rename — a "MovedToColumn8" + "column 9" header would read as a self-contradiction. Sweep also confirmed TestFastSenseCompanionPlantLogToolbar.m is fully consistent with the 1x9 grid (Plant Log col 4; gear col 9 — independently corroborating the gear-at-9 fix) and no other stale column assertions exist. SUMMARY updated with the audit result and scope reasoning. --- .../260526-tcf-SUMMARY.md | 8 ++++---- tests/suite/TestFastSenseCompanion.m | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.planning/quick/260526-tcf-fix-companion-toolbar-1x9-grid-test-cols/260526-tcf-SUMMARY.md b/.planning/quick/260526-tcf-fix-companion-toolbar-1x9-grid-test-cols/260526-tcf-SUMMARY.md index bfbbcb6f..2eb902da 100644 --- a/.planning/quick/260526-tcf-fix-companion-toolbar-1x9-grid-test-cols/260526-tcf-SUMMARY.md +++ b/.planning/quick/260526-tcf-fix-companion-toolbar-1x9-grid-test-cols/260526-tcf-SUMMARY.md @@ -27,7 +27,7 @@ key_files: decisions: - "Column-value fix only — method name testToolbarGearMovedToColumn8 retained as-is per user choice. Rename to ...AtColumn9 deferred to a separate cleanup task to avoid touching grep-based references in this commit." - "Diagnostic-message strings updated alongside the assertion values so a future failure message stays coherent ('should sit in column 7' / 'should now sit in column 9') — these are part of the same verifyEqual call, not the method-name identifier the user asked to leave alone." - - "Docstrings on the two methods (header comments at lines 1194 + 1207) intentionally left untouched — they contain 'column 6' / 'column 8' literals and will be cleaned up as part of the future method-name rename pass." + - "Line-1194 docstring corrected 'column 6' -> 'column 7' — it is decoupled from the method name (testToolbarHasWikiButton carries no column number), so fixing it is the same risk-free defect class as the assertion. Line-1207 docstring ('column 8') is left paired with its method name testToolbarGearMovedToColumn8 and travels with the deferred rename — splitting the doc from the name ('MovedToColumn8' + 'column 9') would read as a self-contradiction worse than a stale-but-self-consistent name+doc pair." metrics: duration_minutes: ~5 completed: "2026-05-26" @@ -68,7 +68,7 @@ The two tests still expected the pre-merge layout where Wiki sat at col 6 and ge | File | Change | LOC delta | Purpose | | ------------------------------------------- | -------- | --------- | ----------------------------------------------------------------------- | -| `tests/suite/TestFastSenseCompanion.m` | Modified | +4 / -4 | Update `verifyEqual` column values (6→7, 8→9) and matching diagnostic messages in `testToolbarHasWikiButton` (lines 1202–1203) and `testToolbarGearMovedToColumn8` (lines 1214–1215) | +| `tests/suite/TestFastSenseCompanion.m` | Modified | +5 / -5 | Update `verifyEqual` column values (6→7, 8→9) + matching diagnostic messages in `testToolbarHasWikiButton` (lines 1202–1203) and `testToolbarGearMovedToColumn8` (lines 1214–1215); plus the decoupled `testToolbarHasWikiButton` header docstring (line 1194, 6→7) surfaced by the post-fix audit sweep | | `.planning/quick/260526-tcf-…/SUMMARY.md` | Created | — | This file | Total: 1 production-test file touched, ~4 net LOC modified. @@ -90,12 +90,12 @@ Pending — user will run the test file locally and confirm the two failures cle 1. **Column-value fix only.** Method name `testToolbarGearMovedToColumn8` retained — user explicitly chose the minimum-diff option to avoid grep-based reference churn. Rename to `testToolbarGearAtColumn9` is deferred to a separate cleanup commit. 2. **Diagnostic messages updated alongside the assertion values.** The trailing string arg to `verifyEqual` is part of the same call site as the column literal; leaving `'should sit in column 6'` while asserting `7` would print a misleading failure message. This is not a "method-name identifier" change so it falls inside the user's "two-line verbatim" instruction. -3. **Method-header docstrings (lines 1194, 1207) intentionally not touched.** They contain `column 6` / `column 8` literals that will become misleading, but cleaning them up belongs to the same future pass that renames the method — bundling them into this commit would muddy the "tests vs grep-references" boundary the user drew. +3. **Line-1194 docstring corrected (`column 6` → `column 7`); line-1207 docstring left as-is.** A post-fix audit sweep (`grep -rE "Layout\.Column,\s*[0-9]|column [0-9]" tests/suite/TestFastSenseCompanion*.m`) found the line-1194 header comment was still stale. It is decoupled from the method name (`testToolbarHasWikiButton` has no column number), so it was corrected — same defect class as the assertion, zero rename risk. Line 1207 (`...lives in column 8`) is deliberately *not* touched: it mirrors the method name `testToolbarGearMovedToColumn8`, and keeping the name+docstring as a coherent (stale) pair until the rename lands is cleaner than a `MovedToColumn8` ↔ `column 9` self-contradiction. The same audit confirmed `TestFastSenseCompanionPlantLogToolbar.m` is fully consistent with the 1×9 grid (Plant Log at col 4 on lines 187/345; gear at col 9 on line 219 — independently corroborating the gear-at-9 fix from a second file) and that no other stale column *assertions* exist anywhere. ## Out-of-Scope Follow-ups (not done, deliberately) - **Rename `testToolbarGearMovedToColumn8` → `testToolbarGearAtColumn9`** — explicit user deferral; should ship as a separate cleanup task that also touches the method header docstrings on both methods. -- **Audit `TestFastSenseCompanionPlantLogToolbar.m` and any other companion-toolbar test files** for analogous stale-column literals beyond what `e2ded77` and this commit have covered — the briefing implied these are the only two outliers, but a sweep with `grep -rE "column [0-9]" tests/suite/TestFastSenseCompanion*` would close the loop. +- **Audit sweep — DONE (clean).** Ran `grep -rE "Layout\.Column,\s*[0-9]|column [0-9]" tests/suite/TestFastSenseCompanion*.m`: no stale column *assertions* remain in either file. `TestFastSenseCompanionPlantLogToolbar.m` is fully consistent with the 1×9 grid (Plant Log col 4, gear col 9). The only residual is the line-1207 docstring, deliberately deferred to the rename (see Design Decision 3). ## Deviations from Plan diff --git a/tests/suite/TestFastSenseCompanion.m b/tests/suite/TestFastSenseCompanion.m index d2ec9dde..520f7d9e 100644 --- a/tests/suite/TestFastSenseCompanion.m +++ b/tests/suite/TestFastSenseCompanion.m @@ -1191,7 +1191,7 @@ function testViewerObjectBeingDestroyedClearsHandle(testCase) % ---- Phase 1034 Plan 06: Wiki toolbar button + openWiki entry point ---- function testToolbarHasWikiButton(testCase) - %TESTTOOLBARHASWIKIBUTTON CompanionWikiBtn exists and sits in column 6. + %TESTTOOLBARHASWIKIBUTTON CompanionWikiBtn exists and sits in column 7. app = FastSenseCompanion('Theme', 'dark'); testCase.addTeardown(@() app.close()); btn = findall(app.getFigForTest_(), 'Tag', 'CompanionWikiBtn');