Background
A Board view can hide or show individual columns derived from its Single-select or Iteration column field. This state is distinct from visibleFields, which controls fields displayed on cards. ViewSnapshot and ViewUiSnapshot currently have no representation for the visible column set.
Confirmed API capability (2026-08-19)
Board-column visibility is browser-only.
- GitHub.com GraphQL exposes the Board column field through
ProjectV2View.verticalGroupByFields, but exposes no per-option/per-iteration column visibility state.
ProjectV2ViewConfiguration/ProjectV2ViewConfigurationInput contain only visible card fields.
- The REST view create endpoint supports
vertical_group_by (which field defines columns), but has no parameter for hiding or showing individual values of that field.
The implementation must use Playwright. No public API integration test applies to the visibility setting itself.
Implementation scope
- Add a nullable
VisibleColumns-style collection to ViewUiSnapshot so legacy/API-only snapshots remain compatible.
- Store logical column identities as the column field plus option name or iteration title; never persist source node IDs.
- Export the complete visible set from the Board UI.
- Apply the visible set only after the column field and target options/iterations exist.
- Distinguish an explicitly empty/changed set from an uncaptured legacy value.
- Warn for renamed or missing target values instead of selecting a different column.
- Verify the visible set during browser-assisted verification.
Column ordering is not part of this issue unless UI discovery proves that GitHub persists a separate user-configurable order.
Test strategy
- Add snapshot compatibility, identity mapping, missing-value, and verifier tests.
- Add Playwright E2E coverage for Single-select and Iteration boards with mixed visible/hidden columns, import, re-export, and target drift.
- Do not add Integration coverage for the visibility setting because neither REST nor GraphQL exposes it.
- Browser tests must use cancellation tokens and
finally cleanup.
ghpmv-e2e-validation skill integration
Do not add a separate user-facing scenario selector for this issue. Extend the existing browser-e2e flow and standard fixture.
Extend the existing ghpmv-e2e-validation browser-e2e flow with Board-column visibility checkpoints.
- Extend
setup --fixture --fixture-ui and the fixture snapshot/builders to create Single-select and Iteration Boards with deterministic populated/empty hidden columns.
- Have the skill record logical field/option/iteration names rather than node IDs.
- Require Step 6 snapshot inspection to confirm the expected visible-column sets.
- Require browser-assisted import/verify and direct target UI observation for both Board types.
- Have the skill introduce one visibility drift, verify the exact mismatch, restore by rerun, and confirm
Match.
- Inventory all temporary Projects/repositories and request cleanup consent before deletion.
- Add any required non-secret fixture values to E2E settings validation and add fixture/Browser E2E coverage in the same change.
Existing manual E2E flow additions
E2E runtime consolidation: Do not add a standalone feature scenario or repeat the full fixture/export/import/verify/cleanup sequence. Fold fixture setup into the existing fixture step, snapshot assertions into the existing export result, target assertions into the existing import/verify and visual checklist, deliberate drift into the existing negative-test phase, and repair into the single idempotence re-import. Reuse the same snapshot, mappings, and target Project. Add another disposable target or native command only when a distinct code path cannot be proven otherwise; document why and include every added resource in the existing inventory and cleanup.
Extend the existing browser-assisted migration flow in docs/MANUAL_TEST_PLAN.md with these checkpoints:
- Prepare source Board views using a Single-select column field and an Iteration column field. Hide at least one populated and one empty column in each view.
- Run browser-assisted export and inspect the captured logical column identities.
- Import into a disposable fresh target Project and run browser-assisted verify.
- Reload each target Board and visually confirm exactly the same option/iteration columns are shown and hidden.
- Reveal one hidden target column and hide one visible target column, then rerun verify; both differences must be reported against the correct view/value.
- Rerun import and confirm visibility is restored without changing the selected column field.
- Record commands, visible/hidden sets, verify output, and UI observations.
- Delete the disposable target Project.
Fixture preparation must use logical names that survive target ID changes and must be added to fixture setup or documented as exact UI steps.
Acceptance criteria
References
Background
A Board view can hide or show individual columns derived from its Single-select or Iteration column field. This state is distinct from
visibleFields, which controls fields displayed on cards.ViewSnapshotandViewUiSnapshotcurrently have no representation for the visible column set.Confirmed API capability (2026-08-19)
Board-column visibility is browser-only.
ProjectV2View.verticalGroupByFields, but exposes no per-option/per-iteration column visibility state.ProjectV2ViewConfiguration/ProjectV2ViewConfigurationInputcontain only visible card fields.vertical_group_by(which field defines columns), but has no parameter for hiding or showing individual values of that field.The implementation must use Playwright. No public API integration test applies to the visibility setting itself.
Implementation scope
VisibleColumns-style collection toViewUiSnapshotso legacy/API-only snapshots remain compatible.Column ordering is not part of this issue unless UI discovery proves that GitHub persists a separate user-configurable order.
Test strategy
finallycleanup.ghpmv-e2e-validationskill integrationDo not add a separate user-facing scenario selector for this issue. Extend the existing
browser-e2eflow and standard fixture.Extend the existing
ghpmv-e2e-validationbrowser-e2eflow with Board-column visibility checkpoints.setup --fixture --fixture-uiand the fixture snapshot/builders to create Single-select and Iteration Boards with deterministic populated/empty hidden columns.Match.Existing manual E2E flow additions
Extend the existing browser-assisted migration flow in
docs/MANUAL_TEST_PLAN.mdwith these checkpoints:Fixture preparation must use logical names that survive target ID changes and must be added to fixture setup or documented as exact UI steps.
Acceptance criteria
ghpmv-e2e-validationcan create both Board fixtures, inspect logical visibility state, validate target UI/drift, rerun to Match, and clean up safely.docs/MANUAL_TEST_PLAN.mdincludes Single-select and Iteration visibility checkpoints, deliberate drift, rerun restoration, and cleanup.Single-select Board column visibility round-trips.
Iteration Board column visibility round-trips.
Logical identities survive target ID changes.
Missing target values produce precise warnings.
Legacy/API-only snapshots remain compatible.
Browser-assisted verify detects visibility drift.
UI selectors and persistence behavior are documented in
docs/ui-maps/.References