Skip to main content

Pattern · Composites

Process Table

Application recipe composed from public TermRock building blocks; domain state and effects remain host-owned.

Kind
paint
Input
interactive
Canvas
120×40

Live preview

Loading terminal preview.

Static terminal poster. Choose Run live to start the Rust demo.

Ghosttyprocess-table/basic
Loading terminal poster…
○ loading posterNo input — rendered state only
Process Table · exact mounted Rust story

01 · Purpose

What it is for

Application recipe composed from public TermRock building blocks; domain state and effects remain host-owned.

Best fit: Composites · composite

02 · Behavior

What the mounted story proves

  1. 01

    ProcessTable

    Representative 120×40 terminal state.

  2. 02

    Passive paint

    No keyboard or pointer action is claimed by this representative story.

  3. 03

    Evidence stays explicit

    0 covered · 9 partial · 5 missing axes.

03 · Implement

Install, then start from exact code

Install

cargo add termrock --git https://github.com/tailrocks/termrock.git --rev 5283c2acf9154d0cfcd37b1ffe821c00faf90ea2

Add TermRock once. Keep domain effects in the host application.

Minimal implementation

Exact Rust setup used by process-table/basic.

Open to load code.

04 · Adapt

Variants and composition

Public building blocks

No canonical component dependency recorded.

Supporting types

ColumnModel · DataColumn · DataColumnWidth · SortSpec · VirtualWindow

05 · Reference

API, tokens, accessibility

API

ProcessTableOpen source ↗

Tokens

DesignSystemInspect exact story code for roles and capability projection.

Accessibility

Input contract mountedNo input claim in the representative story.

Contract

Evidence in progress0/23 axes covered

06 · Go deeper

Advanced guidance

Authored implementation guidance

Process / task monitoring table (btop/htop/procs class). Host projects ProcessRow snapshots; TermRock paints, navigates, sorts/filters, and emits signal / refresh / details requests — never enumerates processes or sends signals itself.

When to use / when not

Use ProcessTablePrefer
Live process / task monitor—
Generic multi-column hierarchyTreeTable
Flat data gridDataTable
Log / output streamsLogStream / TerminalOutput

Ownership

ConcernOwner
Enumerate processes, metrics, kill/signalHost
Cursor, multi-check, filter, sort, confirm chromeProcessTableState
Stable identity across PID reuseHost supplies ProcessKey (pid + start marker)

Stable identity

Selection and multi-check key on ProcessKey { pid, start_ms }, never PID alone. When a process exits and its PID is recycled, the start marker differs so selection does not silently retarget.

On host refresh, call state.reconcile(&live_rows): matching keys are kept; missing selection falls to nearest-neighbor; checked set drops dead keys.

Outcomes (requests)

  • SelectionChanged · CheckToggled · ExpandToggled
  • DetailsRequested · SortChanged · ViewModeChanged
  • FilterChanged · user/status filters
  • SignalRequested { keys, signal } (after confirm when destructive/multi)
  • ConfirmRequired / ConfirmCancelled
  • RefreshRequested · CopyCommand · Scrolled

Keys

KeyAction
j/k · arrows · page · home/endNavigate
/Filter
s / SSort key / direction
tFlat ↔ tree
rRefresh
x · K · C-9TERM / KILL (confirm)
i · EnterDetails
yCopy command
SpaceMulti-check
+ / -Refresh cadence chrome
Ownership boundary

TermRock owns reusable terminal rendering and interaction state. The host owns domain data, policy, persistence, authorization, and side effects.

Evidence status

0 covered, 9 partial, and 5 missing contract axes. Missing evidence is not a behavior claim.