---
title: Ship the react-table prefix-column removal fix to production
type: task
status: completed
description: >-
  Push react-table 184451d, bump league's react-table pin to it, rebuild the bundle and deploy, so
  the /data-views column_id TypeError fix reaches users.
base_uri: user:task/league/ship-react-table-prefix-column-removal-fix.md
created_at: '2026-09-06T19:14:18.532Z'
entity_id: 94999ee9-5cc0-4491-9882-bab236f72340
finished_at: '2026-09-06T19:30:29.407Z'
observations:
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
owner_identity_uri: █████████████████████████
priority: Medium
public_read: true
tags:
  - user:tag/league-xo-football.md
updated_at: '2026-09-06T19:30:29.407Z'
visibility_analyzed_at: '2026-11-05T23:50:24.880Z'
---

## Context

Signal #128490 (`TypeError: Cannot read properties of undefined (reading 'column_id')`,
high, one desktop user on /data-views) is a real crash with a verified mechanism.

A **prefix column** is a real leaf column carrying a `column_id`, built in
`src/table/table.js` from `table_state.prefix_columns` — never from
`table_state.columns`. `src/table-header/table-header.js` resolves the removal
index with a `findIndex` over `table_state.columns`, so for a prefix column it
can only answer `-1`, and the header popper offered "Remove column" on the
strength of the `column_id` alone. Clicking it handed `-1` to
`set_column_hidden_by_index`, which read `columns[-1]` and dereferenced
`.column_id` on `undefined` — exactly the reported stack
(`table.js:415` called from `table-header.js:472`).

Verified by rendering the header both ways before the fix: the regular column
resolved to its own index, the prefix column handed the callback `-1`.

Fixed in `mistakia/react-table@184451d` — the header offers removal only for a
column present in `table_state.columns`, and `set_column_hidden_by_index` is now
total. Covered by `test/table-header-remove-column.spec.jsx`, which fails on the
prefix case without the change.

## Why this needs its own task

league pins react-table by GitHub commit
(`package.json`: `"react-table": "mistakia/react-table#f144c244..."`), so the fix
reaches production only through a pin bump, a `yarn install`, a bundle rebuild
and a frontend deploy. Two things make that unsafe to do inline:

- The user-base working tree is shared, and several league sessions were mid-edit
  when the fix landed. A pin bump plus `yarn install` swaps react-table under
  every one of them mid-turn.
- Deploys are human-gated in this repo, and a bulletin held the current deploy
  range at the time.

## Plan

- [ ] Confirm `cli/sync/sync-all.sh` has pushed `react-table` main and read the
      published SHA (expected `184451d`, unless sync rebased it).
- [ ] Bump `"react-table"` in `repository/active/league/package.json` to that SHA,
      run `yarn` at the league root, and commit `package.json` + `yarn.lock`
      together. Pick a moment when no sibling league session is mid-edit.
- [ ] `yarn deploy:all` (never the individual steps — they skip silently). The
      fix is FRONTEND, so the bundle and sourcemap steps are the load-bearing ones.
- [ ] Verify on production /data-views: a view with a pinned prefix column offers
      no "Remove column" in its header popper, and a regular column still removes
      correctly.
- [ ] Confirm no new signal opens on dedup key
      `log_error:league-client:a6345b0c58a73028`.

## Key locations

- `repository/active/react-table/src/table-header/table-header.js` — the index guard
- `repository/active/react-table/src/table/table.js` — `set_column_hidden_by_index`
- `repository/active/react-table/test/table-header-remove-column.spec.jsx`
- `repository/active/league/package.json` — the react-table pin
