Help us learn about your current experience with the documentation. Take the survey.

Test plan for ncurses component upgrade

Copy the following test plan to a comment of the merge request that upgrades the component.

## Test plan

This test plan verifies the ncurses library upgrade and its integration with dependent components.

### Pre-flight checks

- [ ] Performed a successful GitLab Enterprise Edition (EE) build on all supported platforms.
- [ ] Ran `qa-subset-test` CI/CD test job for both GitLab Enterprise Edition and GitLab Community Edition.

### Library verification

- [ ] Verify ncurses libraries are installed and linked correctly:

  ```shell
  IMAGE='registry.gitlab.com/gitlab-org/omnibus-gitlab/gitlab-ee:<MR_BRANCH_OR_TAG>'

  docker run -it --rm --platform="linux/amd64" $IMAGE bash -c "
    set -e
    echo '=== Checking ncurses libraries exist ==='
    ls -1 /opt/gitlab/embedded/lib/libncurses*.so* /opt/gitlab/embedded/lib/libtinfo*.so*

    echo -e '\n=== Verifying libedit links to ncurses/tinfo ==='
    ldd /opt/gitlab/embedded/lib/libedit.so | grep -E 'libtinfo|libncurses'

    echo -e '\n✓ ncurses libraries present and linked'
  "
  ```

  Expected: Libraries are present and libedit links to ncurses/tinfo (wide or non-wide variants).

### PostgreSQL functionality test

- [ ] Test `gitlab-psql` executes successfully with ncurses-dependent libedit:

  ```shell
  docker run -it --rm --platform="linux/amd64" $IMAGE bash -c "
    set -e
    gitlab-ctl reconfigure > /dev/null 2>&1
    gitlab-ctl start postgresql
    sleep 5

    echo '=== Testing basic psql command execution ==='
    gitlab-psql -d gitlabhq_production -c 'SELECT version();' | head -5

    echo -e '\n=== Testing UTF-8 character support ==='
    gitlab-psql -d gitlabhq_production -c \"SELECT 'ncurses UTF-8 test: 世界 🌍' AS test_output;\"

    echo -e '\n=== Testing multi-line query ==='
    gitlab-psql -d gitlabhq_production <<EOF
SELECT
  schemaname,
  tablename
FROM pg_tables
WHERE schemaname = 'public'
LIMIT 3;
EOF

    echo -e '\n✓ gitlab-psql works correctly with ncurses'
  "
  ```

  Expected: All queries execute successfully, UTF-8 displays correctly, no ncurses/terminfo errors.

### Python3 functionality test

- [ ] Test Python3 executes with ncurses support:

  ```shell
  docker run -it --rm --platform="linux/amd64" $IMAGE bash -c "
    set -e
    echo '=== Testing Python UTF-8 output ==='
    /opt/gitlab/embedded/bin/python3 -c 'print(\"Python ncurses test: 世界 🌍\")'

    echo -e '\n=== Testing Python readline module ==='
    /opt/gitlab/embedded/bin/python3 -c 'import readline; print(\"✓ readline module available\")'
  "
  ```

  Expected: Python executes successfully, UTF-8 output displays correctly.

### Dependency chain verification

- [ ] Verify ncurses consumers can load libraries without errors:

  ```shell
  docker run -it --rm --platform="linux/amd64" $IMAGE bash -c "
    set -e
    echo '=== Checking PostgreSQL binaries ==='
    ldd /opt/gitlab/embedded/postgresql/*/bin/psql | grep -E 'not found' && exit 1 || echo '✓ psql links correctly'

    echo -e '\n=== Checking Python binaries ==='
    ldd /opt/gitlab/embedded/bin/python3.* | grep -E 'not found' && exit 1 || echo '✓ python links correctly'

    echo -e '\n=== Checking for missing ncurses/tinfo dependencies (including widec variants) ==='
    MISSING=0
    for lib in libncurses libncursesw libtinfo libtinfow; do
      while read -r binary; do
        ldd \"\$binary\" 2>/dev/null | grep -q \"\$lib.*not found\" && echo \"ERROR: \$binary missing \$lib\" && MISSING=1
      done < <(find /opt/gitlab/embedded/bin /opt/gitlab/embedded/postgresql -type f -executable 2>/dev/null)
    done
    [ \$MISSING -eq 1 ] && exit 1

    echo -e '\n✓ No missing ncurses dependencies detected'
  "
  ```

  Expected: No "not found" errors for ncurses-related libraries (including widec variants).