From e9109a0b077b43030aec267ea1973b298726aa39 Mon Sep 17 00:00:00 2001
From: seonghobae <8172694+seonghobae@users.noreply.github.com>
Date: Sun, 19 Jul 2026 02:30:37 +0000
Subject: [PATCH 1/3] =?UTF-8?q?=F0=9F=8E=A8=20Palette:=20Improve=20table?=
=?UTF-8?q?=20accessibility=20with=20row=20headers?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- Changed the first column in report tables from `
` to ` | ` to improve screen reader navigation.
- Added `font-variant-numeric: tabular-nums;` to table cells to align numerical data properly.
- Updated corresponding CSS selectors to apply standard table cell styles to the new `tbody th` elements, preventing visual regressions.
- Explicitly set `font-weight: normal` on `tbody th` to match previous visual style.
---
.jules/palette.md | 4 ++++
python/fast_mlsirm/report.py | 19 ++++++++++++++-----
2 files changed, 18 insertions(+), 5 deletions(-)
diff --git a/.jules/palette.md b/.jules/palette.md
index 74cddb7ad..2c33fc92e 100644
--- a/.jules/palette.md
+++ b/.jules/palette.md
@@ -19,3 +19,7 @@
## 2024-07-13 - CLI Debugging Stack Traces
**Learning:** Adding a `FAST_MLSIRM_DEBUG` bypass to user-friendly `try/except` blocks is crucial for DX. Otherwise, unexpected runtime errors during development will be swallowed into generic stderr messages, hiding the stack trace needed to actually fix the bug.
**Action:** When adding `try-except` blocks to Python CLI subcommands to improve Developer Experience (DX) by preventing raw tracebacks for users, include a debug bypass (e.g., `if os.environ.get("FAST_MLSIRM_DEBUG"): raise`) in *all* catch blocks (including `RuntimeError` and `Exception`) to ensure tracebacks aren't swallowed during local development and debugging.
+
+## 2024-07-14 - Semantic HTML Updates require CSS Maintenance
+**Learning:** Changing a structural HTML tag (like swapping ` | ` for ` | ` in the table body) for accessibility reasons can break the design if the project's CSS specifically scoped its styles to the old tag. The new semantic element will revert to browser defaults, creating a visual regression.
+**Action:** When altering HTML tags for accessibility, always update existing CSS rules that specifically styled the old tags to include the new ones (e.g., updating `td { ... }` to `td, tbody th { ... }`) to prevent introducing visual regressions.
diff --git a/python/fast_mlsirm/report.py b/python/fast_mlsirm/report.py
index 30ee4276b..97479eceb 100644
--- a/python/fast_mlsirm/report.py
+++ b/python/fast_mlsirm/report.py
@@ -318,8 +318,10 @@ def _table(rows: list[dict[str, Any]], *, label: str, limit: int = 12) -> str:
body_rows = []
for row in rows[:limit]:
cells = "".join(
- f" | {escape(_format_value(row.get(column, '')))} | "
- for column in columns
+ f'{escape(_format_value(row.get(column, "")))} | '
+ if i == 0
+ else f"{escape(_format_value(row.get(column, '')))} | "
+ for i, column in enumerate(columns)
)
body_rows.append(f"{cells}
")
@@ -680,20 +682,27 @@ def _css() -> str:
}
th,
-td {
+td,
+tbody th {
padding: 10px 12px;
text-align: left;
border-bottom: 1px solid var(--line);
white-space: nowrap;
+ font-variant-numeric: tabular-nums;
}
-th {
+thead th {
background: #f1f4ef;
color: #2f3437;
font-size: 0.8rem;
}
-tr:last-child td {
+tbody th {
+ font-weight: normal;
+}
+
+tr:last-child td,
+tr:last-child th {
border-bottom: 0;
}
From 2ed66054c11e95e533dc5845e6e676985705f27d Mon Sep 17 00:00:00 2001
From: Seongho Bae
Date: Wed, 22 Jul 2026 14:23:36 +0900
Subject: [PATCH 2/3] docs(changelog): record the accessible report table
headers; refresh head for re-review
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The previous CHANGES_REQUESTED verdict on this head was an infrastructure
failure (the central coverage-evidence sandbox could not install numpy —
fixed by ContextualWisdomLab/.github#611), not a code judgment. This commit
documents the change and produces a fresh head so the scheduler dispatches
a new review under the repaired pipeline.
---
CHANGELOG.md | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d7d502a0c..7ebda08c9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,12 @@
### Changed
+- Improved generated report table accessibility: the first identifying column
+ of each data row now renders as `` for screen-reader grid
+ navigation, with matching CSS updates (header styles scoped to `thead th`,
+ normal-weight `tbody th`, and `font-variant-numeric: tabular-nums` for
+ aligned numeric columns).
+
- Exposed the Rust MMLE-EM estimator (`mlsirm_core::mmle::fit_mmle_2pl`) through
the PyO3 binding as `fast_mlsirm._core.fit_mmle_2pl`, so
`fit(estimator="mmle")` now runs on the Rust core when the extension is built
From 8aad49da377350d6b750ef87ede883f51778591e Mon Sep 17 00:00:00 2001
From: Seongho Bae
Date: Wed, 29 Jul 2026 21:24:35 +0900
Subject: [PATCH 3/3] chore: revert CHANGELOG to the merge-base version to
clear the base conflict
The changelog entry added for re-review now conflicts with the heavily
extended CHANGELOG on main. Reverting this branch's CHANGELOG to the
merge-base version makes the file untouched by this PR, so the base
branch's version merges cleanly; the PR keeps its report.py change.
---
CHANGELOG.md | 6 ------
1 file changed, 6 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7ebda08c9..d7d502a0c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,12 +4,6 @@
### Changed
-- Improved generated report table accessibility: the first identifying column
- of each data row now renders as `| ` for screen-reader grid
- navigation, with matching CSS updates (header styles scoped to `thead th`,
- normal-weight `tbody th`, and `font-variant-numeric: tabular-nums` for
- aligned numeric columns).
-
- Exposed the Rust MMLE-EM estimator (`mlsirm_core::mmle::fit_mmle_2pl`) through
the PyO3 binding as `fast_mlsirm._core.fit_mmle_2pl`, so
`fit(estimator="mmle")` now runs on the Rust core when the extension is built
| |