adaptableui reference

Complete capture of adaptation configuration, operator use, and product capabilities. Packer is pure and hash-certified. Geometry is tiles — not OS windows.

← Deck · About · Live proof: open Proof / Phases on the deck

Core model

Layout = Pack(viewport, focusId, layerMask, mode, swarmPressure, heat, topoPath, panels)
// AUIAdapt.adapt(input) → { panels, rulesFired, metrics, proof }
// same canonical inputs → same FNV-1a inputsHash / outputsHash

Adapt input

FieldTypeDefaultRole
swpx≥1Stage width
shpx≥1Stage height
focusIdstring\|nullnullPrimary cell
modestringoptimizeoptimize \| spatial \| temporal \| flat
layerMaskobjectall truemeta, genesis, shadow, mgs booleans
swarmPressure0..10SHADOW reweight from ASEC
reducedMotionboolfalseFreeze τ in proof canon
pointer{x,y}0.5,0.5Normalized; spatial proof slot
tauseconds0Temporal epochs
panelsarray[]Cell descriptors

Panel descriptor fields

FieldDefaultRole
idrequiredCell id
layermgsmeta \| genesis \| shadow \| mgs
opentrue unless falseClosed → not packed
priorityWeight multiplier
minW / minH200 / 120Primary min (runtime often 160/100)
topoWeightFitts/topology boost
heat0Interaction count

Hard packer constants

ConstantValue
Tile gap4px
LAYER_WEIGHTmeta 1.1 · shadow 1.15 · genesis 1.0 · mgs 1.25
Focus mult×1.85 (×1.35 flat)
Swarmif pressure>0.05 on SHADOW: ×(1+pressure×0.55)
Heat×(1+min(1.5, heat×0.08))
Spatial share0.62
Temporal share / epoch0.55 · τ/14 s
Optimize share0.58 w/ focus · 0.42 w/o · clamp [0.35,0.72]
Pressure share bumppressure>0.3 → +p×0.08 cap 0.65
Fitts concentratetopW/sumW>0.35 → +0.06 share cap 0.70
Split axisvertical if sw ≥ sh×1.05 else horizontal
HashFNV-1a 32-bit → 8 hex

Weight composition

w = LAYER_WEIGHT[layer]
  × focus? (flat? 1.35 : 1.85) : 1
  × shadow&&pressure>0.05 ? (1+pressure×0.55) : 1
  × priority?
  × topoWeight?
  × heat>0 ? (1+min(1.5, heat×0.08)) : 1

sort: focus first → weight desc → id asc

Pack modes

UIPacker modeStrategy
AutooptimizePrimary by focus/weight + residual grid + Fitts concentrate
SpatialspatialFocus split 0.62 · primary strip toward pointer
TemporaltemporalRotate by epoch floor(τ/14)%n
FlatflatEqual grid

Named rules

R-closed · R-hide:{layer} · R-admit · R-focus-weight · R-swarm-pressure · R-fitts-topo · R-heat · R-mode-flat-grid · R-mode-spatial-split · R-pointer-bias · R-mode-temporal-epoch · R-mode-optimize · R-max-focus-area · R-fitts-speed · R-primary-by-weight · R-fitts-concentrate · R-split-vertical/horizontal · R-solo-fill · R-pack-grid · R-pack-rect · R-focus-expand · R-hidden · R-empty

Output metrics & proof

FieldMeaning
metrics.utilizationFilled area / viewport
metrics.waste1 − utilization
metrics.focusShareFocus cell area fraction
metrics.visibleCountPacked cells
proof.inputsHashFNV of canonical input
proof.outputsHashFNV of sorted visible rects
panels[].left/top/width/heightTile geometry (px)

Topology & Fitts

FITTS_A=0.05 · FITTS_B=0.12 · T = a + b·log₂(D/W+1)

weight = heatBoost × prox × branch × layerBoost × focus
// prox = 1/(1+D×0.45); branch 1.35; layer 1.2; focus 1.5; heatBoost 1+heatN×1.25
// holodeck → panels[].topoWeight = weight

Fractal path: expand child · contract parent · jump node. Keys ] [ Esc. Double-click opens cell.

Persistence

Key: adaptableui.workspace.v3 · API base: adaptableui.apiBase

{
  "version": 3,
  "mode": "auto|spatial|temporal|flat",
  "layerMask": { "meta", "genesis", "shadow", "mgs" },
  "panels": { "<id>": { "open": true } },
  "data": {
    "notes", "tasks", "links", "timer", "json",
    "apiBase", "heat", "topoPath"
  }
}

Export / Import / Reset on dock. Legacy free-float x,y,w discarded.

Cell catalog

idlayerpriorityDefault openRole
topologymeta1.25yesUI metagraph fractal
phasesmeta1.2yes*Phase-change tests
proofmeta1.1yesFNV adapt proof
coveragemeta1.0yesASEC coverage
swarmshadow1.05yesSwarm pressure
streamshadow0.95yesOps log
notesgenesis0.95yesScratchpad
linksgenesis0.85noLinks (optional)
tasksmgs1.15yesTasks
timermgs0.9yesTimer
jsonmgs0.9noJSON tools

*phases uses standard non-optional default open.

ASEC / Intrikata

Base http://127.0.0.1:8080 · health · mgs_coverage · agents_coverage · swarms_active · pressure = min(1, n/8) · fail-open offline residual · CSP allows localhost:8080

Phase-change test modes

RegimeAxis
sweeppack modes
nucleatecardinality 0→N
collapselayer mask death
oscillatefocus + heat
pressureswarm 0→1
aspectviewport shapes
epochtemporal τ
fractaltopology path
heatFitts concentrate
stresscompound multi-axis

Invariants every step: determinism · no-overlap · in-bounds · visible-count · util≥0.85 or empty · focus-primary (mode-aware). Run: Phases cell · rail All regimes · node scripts/verify.mjs

How to use (operator)

  1. Dock — toggle cells open/closed; packer reflows.
  2. Layer toggles — hide whole M/G/S/MGS classes.
  3. Mode rail — Auto / Spatial / Temporal / Flat.
  4. Click cell — primary focus + heat (larger tile over time).
  5. Topology — expand fractal path; double-click opens tools; speed proof shows Fitts gain.
  6. Phases — validate packing across regime transitions; ▸ = live playback on stage.
  7. Run proof — dual-pass FNV certificate on current inputs.
  8. Export/Import — full workspace JSON; Reset clears localStorage.

Keyboard

KeyAction
]Topology expand first child
[Topology contract
EscContract topo / clear focus
Ctrl/Cmd+SSave workspace

Capabilities

CapabilityStatus
Tile packing (not windows)yes
Deterministic FNV proofyes
M/G/S/MGS maskyes
Four pack modesyes
Focus primary expandyes
Swarm pressure → SHADOWyes
Heat → area (+ half-life decay 300s, reset)yes
Spatial pointer bias (primary side)yes
Shared AUIConfig (config.js)yes
In-UI Intrikata topologyyes
Fractal expand/contractyes
Fitts speed gain metricyes
Phase-change pack testsyes
Live regime playbackyes
Tasks / notes / timer / json / linksyes
Workspace export/importyes
ASEC offline residualyes
Mobile stackyes
Monochrome hard UIyes
Multi-user syncno (local only)
Runtime custom cell pluginsno (catalog fixed)
Drag windowsremoved

Globals

AUIAdapt      — adapt, verifyDeterminism, selfTest, fnv1a
AUITopology   — createNav, interactionBoosts, fractalLayout, bumpHeat, selfTest
AUIPhaseTests — REGIMES, runRegime, runAll, selfTest, checkInvariants
AUIStore      — load, save, exportJson, importJson, defaults, KEY
AUIAsec       — refresh, getBase, setBase, state
__AUI_POINTER__ — {x,y,cx,cy}

Embed packer

<script src="js/adapt.js"></script>
<script>
const r = AUIAdapt.adapt({
  sw: 1200, sh: 800, mode: "optimize", focusId: "tasks",
  layerMask: { meta:true, genesis:true, shadow:true, mgs:true },
  swarmPressure: 0.2, reducedMotion: false,
  pointer: { x:0.5, y:0.5 }, tau: 0,
  panels: [
    { id:"tasks", layer:"mgs", open:true, priority:1.15, heat:4, topoWeight:1.5 },
    { id:"proof", layer:"meta", open:true, priority:1.1 }
  ]
});
// r.panels, r.metrics, r.proof.inputsHash / outputsHash
</script>

Verify & deploy

node scripts/verify.mjs
npx wrangler pages deploy site --project-name adaptableui --branch main --commit-dirty=true

← Open deck · Repo docs: docs/CONFIGURATION.md · docs/USAGE-AND-CAPABILITIES.md