Skip to content

Legacy probe migration checklist

The terminal probe is part of TDN. This is a one-time manual comparison worksheet for replacing the 12 Python/shell probe scripts with the standalone Go probe. Its source remains in tools/probe/; feature slugs come from TDN. All results below start Pending. A mapping is not a claim of verified parity or terminal feature support.

New feature work uses the Go probe now. Extend its native cases rather than adding legacy scripts. The old tools and their just recipes remain available until the maintainer completes this manual review and the gaps below are resolved. Their removal is a later migration step.

Run commands from the repository root, inside the terminal being checked. just probe builds as needed. Use the same terminal version, font, resources, Ops permissions and 80×24 geometry for each pair. Start a fresh terminal between comparisons when a command leaves persistent state. Compare visible behavior, reply bytes, cleanup and usability; the layouts and navigation need not match the old scripts.

Record the terminal/version, font and configuration here: __. Change a result to Pass, Difference: …, or Blocked: … and include enough detail to reproduce it. For a second terminal/configuration, copy this worksheet. Leave missing replacements unresolved until they are implemented or explicitly retired.

In the Go probe, Space/Enter continues; q/Escape exits the test. Keyboard capture treats Space/Enter as input; cooked input needs q/Escape then Enter. The answerback read window treats all bytes as data until its timeout. In the browser, F2 Select text lets you copy a command or slug. Append --help to a new command for its settings. Optional --output /tmp/probe-result.json records evidence; --assess separately enables human assessment prompts.

Colors and rendering

The color samples now use four inspection pages. The old expanded color tour has additional layouts and controls; the table marks that comparison as partial.

Old command New command What to compare / known difference Result
bash tools/probe-color.sh just probe csi-sgr colors-samples SGR attributes, underline styles, 16/256 colors and truecolor forms; inspect all four pages. Pending
python3 tools/probe-colors.py --mode all just probe sgr-256-colors colors-samples Expanded 16/256/truecolor display coverage; redesigned samples, not identical layouts. Also compare old --mode 16, --mode 256 and --mode true. Pending
python3 tools/probe-colors.py --mode tour just probe sgr-256-colors colors-samples Partial: full tour, palette cycling and presentation flags have no complete replacement; see gaps below. Pending
python3 tools/probe-colors.py --query just probe osc-4-palette-query colors-palette-query --index 0 Old queries 0–15 together; new queries one index. Repeat with indices 1–15; compare decoded RGB and silence under GetAnsiColor denial. Pending
python3 tools/probe-colors.py --list-palettes just probe osc-4-palette-set colors-palette-list Same six named palettes and RGB entries. Pending
python3 tools/probe-colors.py --mode palette --apply-palette --palette verify just probe osc-4-palette-set colors-palette-demo --palette verify Inspect installed palette. Old leaves it installed; Go restores queried colors or resets unreadable entries. Repeat for xterm, tango, solarized, gruvbox and nord. Pending
python3 tools/probe-colors.py --reset-palette just probe osc-104-palette-reset colors-palette-reset Reset all indices to configured defaults; persistent request. Pending
No dedicated single-index legacy command just probe osc-4-palette-set colors-palette-set --index 1 --color '#ff0000' Additional Go case: persistent index write; query index 1 and inspect red samples, then reset. Pending
python3 tools/probe-colors.py --spawn --mode all --palette verify --program xterm --geometry 80x24 just probe osc-4-palette-set colors-palette-spawn --palette verify --program xterm --geometry 80x24 New terminal, resource colors and samples. Both accept repeatable --xrm; the remaining old spawn switches are gaps below. Pending
bash tools/probe-reverse-video.sh just probe dec-mode-5-decscnm colors-reverse SGR inverse, DECSCNM repaint of existing rows, explicit RGB, manual widget Reverse Video and restoration. Pending
python3 tools/probe-dynamic-colors.py just probe osc-11-default-background-color colors-dynamic-demo Default foreground/background/cursor versus explicit RGB, query replies and restoration. Pending
python3 tools/probe-dynamic-colors.py --query just probe osc-11-default-background-color colors-dynamic-query Query all three colors; compare RGB replies with displayed pixels. Pending
python3 tools/probe-dynamic-colors.py --background '#142850' just probe osc-11-default-background-color colors-dynamic-set --target background --color '#142850' Persistent set; repeat with foreground and cursor. Old can set different colors in one invocation; new uses separate invocations. Pending
python3 tools/probe-dynamic-colors.py --reset all just probe osc-11-default-background-color colors-dynamic-reset --target all Configured defaults restored; also compare individual foreground/background/cursor resets. Pending
python3 tools/probe-dynamic-colors.py --scheme just probe csi-996-n-color-scheme-query colors-scheme Decoded light/dark query result. Pending
python3 tools/probe-sync.py --mode compare just probe dec-mode-2026-synchronized-output rendering-sync --mode compare Tearing off versus on. Repeat both with --mode off and --mode on; timing flags keep their names. Pending
python3 tools/probe-sync.py --mode on --hold-ms 1500 just probe dec-mode-2026-synchronized-output rendering-sync --mode on --hold-ms 1500 Timeout release during a long hold; resize/expose and exit cleanup. Pending
bash tools/probe-osc8.sh just probe osc-8-hyperlinks links-demo Explicit links versus plain URLs, hover decoration, activation and closing the link. Use the terminal's configured modifier bindings. Pending

Dynamic-color commands use ST by default in both runners; add --bel to both to compare BEL. Keep permission settings stable during demo cleanup. Compare allowed and denied behavior separately. Go's default query timeout is 0.5 s; the old dynamic-color and title scripts use 1 s. Set --timeout 1 on both if timing affects the result.

Clipboard and titles

The old clipboard script defaults to BEL, while Go defaults to ST. The commands below add --bel to preserve the old wire format. For an ST comparison, add --st to the old command and remove --bel from the new one. Use --timeout 2 on both to match the old clipboard query deadline.

Old command New command What to compare Result
python3 tools/probe-clipboard.py --query --target p just probe osc-52-read clipboard-query --target primary --bel --timeout 2 Exact decoded PRIMARY data or silence under GetSelection denial. Pending
python3 tools/probe-clipboard.py --set 'middle-click this' --target p just probe osc-52-write clipboard-set --target primary --text 'middle-click this' --bel Verify with middle-click or xclip -o -selection primary; a sent request alone proves nothing. Pending
python3 tools/probe-clipboard.py --clear --target p just probe osc-52-write clipboard-clear --target primary --bel Named selection cleared; other selections remain intact. Pending
python3 tools/probe-clipboard.py --invalid --target p just probe osc-52-write clipboard-invalid --target primary --bel Compare behavior with a known selection already owned. Pending
python3 tools/probe-titles.py --query --target both just probe csi-21-t-title-report titles-query --target both --timeout 1 Icon and title replies; repeat with title and icon separately and reports denied. Pending
python3 tools/probe-titles.py --target both just probe csi-22-t-push-title titles-stack --target both --timeout 1 Original → A → B → A → original; repeat title/icon separately, normal completion and early exit. Pending

Repeat clipboard rows with old --target c / new --target clipboard, and old --target s / new --target select. Repeat under the relevant Window Ops permissions. Title restoration also depends on working, permitted stack and Title Ops behavior. Clipboard writes and clears are deliberately persistent.

Emoji, fonts and keyboard capture

The old emoji script is one complete run. Its sample sections now have separate case IDs, as well as an all-sections case. Section rows below refer to the corresponding part of that old run, not to nonexistent old command-line flags.

Old command / section New command What to compare Result
python3 tools/probe-emoji.py just probe dec-mode-2027-grapheme-clusters emoji-all All original samples, measured advances, classification, glyphs and mode restoration. Pending
python3 tools/probe-emoji.py — mode off/on comparison just probe dec-mode-2027-grapheme-clusters emoji-mode-2027 Additional short ZWJ/flag comparison; does not replace the full suite. Pending
python3 tools/probe-emoji.py — single emoji just probe dec-mode-2027-grapheme-clusters emoji-single Single-codepoint emoji widths and glyphs. Pending
python3 tools/probe-emoji.py — variation selectors just probe text-vs16-width emoji-variation-selectors Text/emoji presentation and VS16 width under both regimes. Pending
python3 tools/probe-emoji.py — skin tones just probe dec-mode-2027-grapheme-clusters emoji-skin-tones Modifier sequences. Pending
python3 tools/probe-emoji.py — ZWJ just probe dec-mode-2027-grapheme-clusters emoji-zwj Joined sequences and cell advance. Pending
python3 tools/probe-emoji.py — flags just probe dec-mode-2027-grapheme-clusters emoji-flags Regional indicators and tag flags. Pending
python3 tools/probe-emoji.py — boundaries just probe dec-mode-2027-grapheme-clusters emoji-boundaries Sequence boundaries and wrapping classifications. Pending
python3 tools/probe-emoji.py — capacity just probe dec-mode-2027-grapheme-clusters emoji-capacity Long clusters and capacity limits. Pending
python3 tools/probe-fonts.py just probe dec-mode-2027-grapheme-clusters text-fonts Original font/shaping samples, mark placement and width results. Pending
python3 tools/probe-keymodes.py — cooked stage just probe csi-modify-other-keys input-keyboard-cooked Line discipline and encoded input. New stages are separate commands. Pending
python3 tools/probe-keymodes.py --raw-only just probe csi-modify-other-keys input-keyboard-raw Raw key bytes, modifiers and restoration of tty settings. Pending
python3 tools/probe-keymodes.py --kitty-only just probe csi-u-kitty-keyboard input-keyboard-kitty Kitty key events and decoding; protocol stack restored on exit. Pending

Both width runners accept --regime legacy, --regime cluster or --regime both (the default), plus --no-pause. The short emoji-mode-2027 case always compares off/on and has no regime setting. Go keyboard capture is bounded by --seconds (default 20); q/Escape is reserved for navigation. Its cooked/raw feature entry identifies the keyboard family, not a claim that the case exhaustively tests modifyOtherKeys.

Former feature dispatcher

These rows cover every subcommand of tools/probe-features.py, splitting font query/set and cursor inspection/style cycling into separate checks.

Old command New command What to compare Result
python3 tools/probe-features.py answerback just probe c0-enq-answerback identity-answerback Configured bytes verbatim and empty/default silence. Pending
python3 tools/probe-features.py tcap --cap TN --cap Co just probe dcs-xtgettcap identity-tcap --cap TN --cap Co Decoded names/values; TN versus child TERM, GetTcap denial. Pending
python3 tools/probe-features.py mouse --mode 1000 just probe dec-mode-1000-mouse input-mouse --mode 1000 Buttons, wheel, focus and live Mouse Ops toggle; repeat modes 9, 1002 and 1003. Pending
python3 tools/probe-features.py font just probe osc-50-font-query font-query Reply bytes or permitted silence; Font Ops policy. Pending
python3 tools/probe-features.py font --font fixed just probe osc-50-font-set font-set --font fixed Explicit persistent font request; restore font manually afterward. Pending
python3 tools/probe-features.py underline just probe sgr-58-underline-color text-underline Independent underline ink, styles, SGR 59, inverse and default text color. Pending
python3 tools/probe-features.py pointer just probe osc-22-pointer-shape input-pointer Pointer shape over grid and default restored on exit. Pending
python3 tools/probe-features.py cursor just probe csi-decscusr text-cursor Startup cursor appearance and query replies. Pending
python3 tools/probe-features.py cursor --styles just probe csi-decscusr text-cursor --styles Explicit cursor styles and return to configured default. Pending
python3 tools/probe-features.py identity just probe csi-da1 identity-reports DA1, DA2 and XTVERSION; Go additionally queries DA3 and decodes the DA1/DA2 claims. Pending
python3 tools/probe-features.py unknown just probe diagnostics-unknown-apc diagnostics-unknown Unsupported APC diagnostics; no reply required. Pending
python3 tools/probe-features.py cwd --cwd /tmp just probe osc-7-working-directory shell-cwd --cwd /tmp Reported directory in terminal diagnostics; also try an existing path with spaces/Unicode. Pending
python3 tools/probe-features.py prompts just probe osc-133-prompt-marks shell-prompts Synthetic prompt markers and manual prompt navigation. Pending
python3 tools/probe-features.py pipe just probe ui-pipe-command-output shell-pipe Synthetic output boundaries; manually invoke the terminal's pipe action. Pending
python3 tools/probe-features.py notify just probe osc-9-notification notifications-urgency Focus away before delivery, urgency/notification, focus to clear. Pending
python3 tools/probe-features.py progress just probe osc-9-4-progress notifications-progress Progress states and clear on exit. Pending
python3 tools/probe-features.py glyphs just probe text-box-drawing text-glyphs Box, block, braille and powerline joining. Pending
No legacy equivalent just probe text-box-drawing text-procedural-union Visual decision catalog grouped by purpose: meaningful constructions followed by compact code-point sheets. New Go probe
python3 tools/probe-features.py copy just probe selection-copy-feedback selection-copy Manually select/copy; feedback and exact pasted text. Pending
python3 tools/probe-features.py search just probe search-scrollback-literal selection-search Repeated, Unicode and wrapped matches, navigation and viewport restoration. Pending
python3 tools/probe-features.py graphics just probe apc-kitty-static-images graphics-static Four-color inline image, clipping/scroll/resize, deletion of only the probe's image. Pending

Fixtures for terminal UI actions require those actions to be implemented and invoked manually. A silent request or printed fixture does not establish support. Inspect the case's Help for permission and cleanup details.

Gaps and retirement decisions

Legacy surface Current replacement / decision needed Result
probe-colors.py --mode tour / --all-palettes No full tour or automatic all-palette sequence. Run individual palette demos; decide which remaining tour presentations to port or retire. Pending
probe-colors.py --apply-palette --palette verify No persistent whole-palette install command. Go's palette demo restores on exit; single-index set persists. Do not treat demo as an exact replacement. Pending
probe-colors.py --width, --quiet, --ascii, --wait, --no-clear, --compact New layout uses terminal geometry and shared inspection controls; no flag-for-flag parity. Decide which old display modes still matter. Pending
probe-colors.py spawn --exec-flag, --resource-class, --direct-color, --term-name, --font, --font-size, --hold, --dry-run Go has program, geometry, palette and repeatable --xrm, with fixed XTerm resource class and -e. Resource settings can use --xrm; other options need a port or retirement decision. Pending
tools/_width_probe.py Shared helper, not a standalone probe. Go width measurement and embedded samples replace runtime use; compare behavior through emoji/font rows above. Pending

The Markdown Unicode sampler tools/probe-scripts.md is reference material, not one of the executable scripts. Automated tests/ drivers are also outside this manual migration. Neither should be removed as a side effect of retiring the 12 scripts.

Before removal, resolve every difference and gap, then update old just recipes, documentation and any tests importing legacy helpers/data. Preserve the final comparison notes with the migration commit. Ongoing terminal support assessments belong in the per-terminal database, separately from this runner-migration worksheet.