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
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
| Field | Type | Default | Role |
|---|---|---|---|
sw | px | ≥1 | Stage width |
sh | px | ≥1 | Stage height |
focusId | string\|null | null | Primary cell |
mode | string | optimize | optimize \| spatial \| temporal \| flat |
layerMask | object | all true | meta, genesis, shadow, mgs booleans |
swarmPressure | 0..1 | 0 | SHADOW reweight from ASEC |
reducedMotion | bool | false | Freeze τ in proof canon |
pointer | {x,y} | 0.5,0.5 | Normalized; spatial proof slot |
tau | seconds | 0 | Temporal epochs |
panels | array | [] | Cell descriptors |
| Field | Default | Role |
|---|---|---|
id | required | Cell id |
layer | mgs | meta \| genesis \| shadow \| mgs |
open | true unless false | Closed → not packed |
priority | — | Weight multiplier |
minW / minH | 200 / 120 | Primary min (runtime often 160/100) |
topoWeight | — | Fitts/topology boost |
heat | 0 | Interaction count |
| Constant | Value |
|---|---|
| Tile gap | 4px |
| LAYER_WEIGHT | meta 1.1 · shadow 1.15 · genesis 1.0 · mgs 1.25 |
| Focus mult | ×1.85 (×1.35 flat) |
| Swarm | if pressure>0.05 on SHADOW: ×(1+pressure×0.55) |
| Heat | ×(1+min(1.5, heat×0.08)) |
| Spatial share | 0.62 |
| Temporal share / epoch | 0.55 · τ/14 s |
| Optimize share | 0.58 w/ focus · 0.42 w/o · clamp [0.35,0.72] |
| Pressure share bump | pressure>0.3 → +p×0.08 cap 0.65 |
| Fitts concentrate | topW/sumW>0.35 → +0.06 share cap 0.70 |
| Split axis | vertical if sw ≥ sh×1.05 else horizontal |
| Hash | FNV-1a 32-bit → 8 hex |
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
| UI | Packer mode | Strategy |
|---|---|---|
| Auto | optimize | Primary by focus/weight + residual grid + Fitts concentrate |
| Spatial | spatial | Focus split 0.62 · primary strip toward pointer |
| Temporal | temporal | Rotate by epoch floor(τ/14)%n |
| Flat | flat | Equal grid |
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
| Field | Meaning |
|---|---|
metrics.utilization | Filled area / viewport |
metrics.waste | 1 − utilization |
metrics.focusShare | Focus cell area fraction |
metrics.visibleCount | Packed cells |
proof.inputsHash | FNV of canonical input |
proof.outputsHash | FNV of sorted visible rects |
panels[].left/top/width/height | Tile geometry (px) |
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.
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.
| id | layer | priority | Default open | Role |
|---|---|---|---|---|
| topology | meta | 1.25 | yes | UI metagraph fractal |
| phases | meta | 1.2 | yes* | Phase-change tests |
| proof | meta | 1.1 | yes | FNV adapt proof |
| coverage | meta | 1.0 | yes | ASEC coverage |
| swarm | shadow | 1.05 | yes | Swarm pressure |
| stream | shadow | 0.95 | yes | Ops log |
| notes | genesis | 0.95 | yes | Scratchpad |
| links | genesis | 0.85 | no | Links (optional) |
| tasks | mgs | 1.15 | yes | Tasks |
| timer | mgs | 0.9 | yes | Timer |
| json | mgs | 0.9 | no | JSON tools |
*phases uses standard non-optional default open.
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
| Regime | Axis |
|---|---|
| sweep | pack modes |
| nucleate | cardinality 0→N |
| collapse | layer mask death |
| oscillate | focus + heat |
| pressure | swarm 0→1 |
| aspect | viewport shapes |
| epoch | temporal τ |
| fractal | topology path |
| heat | Fitts concentrate |
| stress | compound 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
| Key | Action |
|---|---|
] | Topology expand first child |
[ | Topology contract |
Esc | Contract topo / clear focus |
Ctrl/Cmd+S | Save workspace |
| Capability | Status |
|---|---|
| Tile packing (not windows) | yes |
| Deterministic FNV proof | yes |
| M/G/S/MGS mask | yes |
| Four pack modes | yes |
| Focus primary expand | yes |
| Swarm pressure → SHADOW | yes |
| Heat → area (+ half-life decay 300s, reset) | yes |
| Spatial pointer bias (primary side) | yes |
| Shared AUIConfig (config.js) | yes |
| In-UI Intrikata topology | yes |
| Fractal expand/contract | yes |
| Fitts speed gain metric | yes |
| Phase-change pack tests | yes |
| Live regime playback | yes |
| Tasks / notes / timer / json / links | yes |
| Workspace export/import | yes |
| ASEC offline residual | yes |
| Mobile stack | yes |
| Monochrome hard UI | yes |
| Multi-user sync | no (local only) |
| Runtime custom cell plugins | no (catalog fixed) |
| Drag windows | removed |
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}
<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>
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