Developer
Ink Compat Debugging Runbook
This runbook is for renderer parity investigations against upstream Ink apps (for example Gemini CLI).
This runbook is for renderer parity investigations against upstream Ink apps (for example Gemini CLI).
1. Build before running
npm run -w packages/ink-compat build2. Launch with full diagnostics
INK_COMPAT=1 \
INK_COMPAT_TRACE=1 \
INK_COMPAT_TRACE_DETAIL=1 \
INK_COMPAT_TRACE_DETAIL_FULL=1 \
INK_COMPAT_TRACE_ALL_FRAMES=1 \
INK_COMPAT_TRACE_FILE=/tmp/ink-compat.trace.log \
INK_COMPAT_TRACE_JSON_MAX_DEPTH=8 \
INK_COMPAT_TRACE_JSON_ARRAY_LIMIT=400 \
INK_COMPAT_TRACE_JSON_OBJECT_LIMIT=80 \
INK_GRADIENT_TRACE=1 \
FORCE_COLOR=3 \
NO_COLOR= \
GEMINI_CLI_NO_RELAUNCH=true \
node packages/cli/dist/index.js -yUse a less verbose profile when needed:
INK_COMPAT=1 \
INK_COMPAT_TRACE=1 \
INK_COMPAT_TRACE_FILE=/tmp/ink-compat.trace.log \
node packages/cli/dist/index.js -y3. Interpret key frame fields
Important fields in frame#... lines:
layoutViewport: size used for layout pass.gridViewport: size used for ANSI cell grid serialization.staticRowsUsed/full/pending: static channel occupancy.maxBottom: computed content height from layout nodes.hostRootOverflow: translated root overflow mode.opViewportOverflowCount: render ops outside viewport bounds.
Quick triage logic:
- If
opViewportOverflowCount > 0, investigate render op clipping or viewport math first. - If footer/input drifts, compare
layoutViewportandgridViewportplusstaticRows*. - If color is wrong, inspect
colorSupport... hasAnsiSgr... effectiveLevel...and gradient shim traces.
4. Gradient shim validation
Check which shim is active and what it emits:
INK_GRADIENT_TRACE=1 node --input-type=module -e "import g from './packages/cli/node_modules/ink-gradient/index.js'; g({colors:['red','blue'],children:'AB'})"Expected trace includes:
module=.../ink-gradient/index.jsparsedStops=<n>emittedAnsi=truewhen enough gradient stops are present
5. What to capture in bug reports
Include all of:
- Terminal/OS details.
- Launch command.
INK_COMPAT_TRACE_FILEoutput snippet around failing frame.- Screenshot pair (upstream Ink vs compat render).
- Whether issue reproduces with alternate buffer on/off and
-ymode.
6. Guardrails for instrumentation
- Keep diagnostics opt-in through env flags.
- Avoid hardcoded temp-file logging.
- Prefer structured trace fields over free-form log strings.
- Add/adjust tests with every parity fix.