---
title: Nest the KeepTradeCut tradesourced and Crowd+Trades columns under picker sub-groups
type: task
status: planned
description: >-
  Six non-crowdsourced KeepTradeCut fields now nest under KEEPTRADECUT via react-table's new
  nest_only group flag. Code shipped and tested in both repos; the frontend deploy is the only step
  left.
base_uri: user:task/league/data-views/nest-keeptradecut-series-subgroups.md
created_at: '2026-09-25T04:40:34.649Z'
entity_id: 578a1090-47b7-412a-aeae-6b39e91e5b7e
owner_identity_uri: █████████████████████████
priority: Low
public_read: true
tags:
  - user:tag/league-xo-football.md
updated_at: '2026-09-25T04:40:34.649Z'
visibility_analyzed_at: '2026-11-05T23:48:55.221Z'
---

## Context

Nine KeepTradeCut fields listed as flat siblings in the data-view column picker. The six non-crowdsourced ones now nest one level under `KEEPTRADECUT`, so the group reads as three leaves plus two expandable nodes.

This is presentation only. `column_groups` is read by react-table's tree builder and by `group-columns-by-groups`, never by the server, so no column id, table alias or cached entry moved — confirmed by the literal alias pin in `test/data-views.keeptradecut-as-of-month-day.spec.mjs`.

It was chosen over collapsing the nine columns into three plus a `series` param; that alternative and why it lost are in [[user:task/league/data-views/collapse-keeptradecut-columns-to-series-param.md]].

## What shipped

**react-table** (pushed to `origin/main`)

- `090e834` — `nest_only` column-group flag, schema entry, and `test/group-columns-into-tree-view.spec.mjs` (6 tests). Without the flag a column is indexed under every group it names, so each sub-group also cross-listed as a top-level node.
- `581d9e5` — observation that `column-group.json` declares a `label` field nothing reads, which is why picker categories render raw ids.

**league**

- `6e980e32b` — the two sub-groups and the six field definitions.
- `814678a86` — react-table pinned to `581d9e5`; both sub-groups set `nest_only: true` and returned to priority 1.

Verified: react-table full suite 675 passing, with a negative control (predicate forced true) giving 2 failing. League field-parity and `as_of_month_day` specs 52 passing. Tree output checked against the installed package, with a control stripping `nest_only` that reproduces the top-level duplicates.

## Remaining: deploy only

The change is frontend-only and has not reached production.

`yarn preflight:deploy` refuses on two counts, and both are about the shared tree rather than this change:

- league master was 8 commits ahead of `origin/master` at 2026-09-25, awaiting the ████████ carve-out debounce. Never push this repo by hand.
- the working tree carries two other sessions' uncommitted backend edits, so `yarn build` from this checkout would bundle them.

The preflight prints the remedy: build from a throwaway worktree pinned to the pushed ref, with a unique path because several sessions share this checkout. Install into the worktree rather than symlinking `node_modules`, which would ship a sibling's dependency state. A `yarn install` there needs the git shim from [[user:guideline/software/develop-react-table.md]], since react-table is a git-pinned dependency and Yarn 4.5.1 trips git 2.55 on `core.autocrlf`.

## Plan

- [ ] Confirm `814678a86` is contained in `origin/master`, then build and deploy the frontend from a throwaway worktree per the preflight's printed recipe
- [ ] Verify in the browser that `KEEPTRADECUT` shows three leaves plus the two sub-groups, and that neither sub-group appears at the picker's top level
