# Detailed DD laboratory

Preserved Fractal Arboretum v0.6, recovered from the source dated 28 August 2026.
This lab covers the DD component only. Return to the parent explorer for DD, DO and OO.

The 43,173-ray finite survey is unchanged. The torus is a chosen smooth display embedding, not a theorem about the intrinsic topology of a limiting connectedness locus. Multi-band radial scans preserve sampled losses and re-entries; finite survival is inconclusive. Floating-point exclusion is not an outward-rounded interval certificate.

Data is split into ordered UTF-8 text fragments solely to support static hosting. app.js joins those fragments before JSON parsing. data/index.json records their order, original byte count and SHA-256. No external runtime dependency, analytics or CDN is used. A local HTTP server is required; file:// cannot load the data fragments.

Packaging changes: progressive loading/failure screen, parent navigation, named controls and canvases, keyboard camera controls, worker error reporting, finite-input guard and correct export version. The original recovered HTML remains unchanged outside this distribution.

## Provenance

Original source: fractal_arboretum_immersive_lab_v06.html, version 0.6, dated 28 August 2026.
Author and mathematical project: Bernat Espigulé. No new license has been inferred or granted.
Original UTF-8 source: 6,026,173 bytes. SHA-256: `e713e320d19f6f163148537a4135b697112ad548bb387cf84ff38f7dc96601f0`.
The numerical data and original geometry algorithms are retained; packaging and interface corrections are documented above.

The packaged data retains all arrays, cosine/spline coefficients, 13 weight slices, landmarks, candidate components, guided journeys, and the original status ledger. The export carries the selected DD coordinates, branch ratios, display settings, finite evidence and route information. The live hover/full-resolution specimen has its own state, accessible through `window.FractalArboretumAPI.getLiveState()`.

## Validation on 15 September 2026

- Both original inline scripts and the packaged JavaScript parse successfully.
- Reassembled text fragments match the dataset SHA-256 and byte count.
- Finite-search regression checks pass for separated real maps, the real endpoint at rho=2, the twindragon parameter, noncontractive/NaN inputs and work-cap exhaustion.
- A 60-sample real radial scan locates the survival-to-exclusion transition at rho=2.0000000765.
- Finite exclusions still use ordinary floating-point arithmetic; archival certification needs independent outward-rounded replay.
- Browser testing requires a served URL and is recorded separately by the deployment check.

A depth-two address check with unequal complex multipliers confirms that both the main-thread and worker renderers use outermost-first composition and preserve the first branch. The displayed maximum tail bound now covers every prefix (r_max^depth / (1-r_max)), including late addresses in an unbalanced system.

The finite search prunes disjoint root cylinders, keeps a conservative floating-point comparison margin, and respects work limits at every depth. Local refinement evaluates the displayed specimen without a hidden radial offset; exported evidence retains those evaluated coordinates, and hovering another state clears the live status until that state is refined. This numerical margin is not an interval certificate.

## Devices without WebGL

The laboratory automatically uses a Canvas 2D projection when WebGL 2 is unavailable. It renders the same numerical survey mesh with a responsive display resolution, orbit/zoom and picking, all landscape fields, weight stacks, cutaway and route overlays. Detailed attractor/difference calculations and finite evidence are unchanged. The GPU path retains the original high and ultra meshes. The software path labels its display resolution and uses a smaller graph grid for responsive route planning; it does not change the stored survey or promote a display into mathematical evidence.

## Research interface revision — 15 September 2026

The unreleased revision uses the shared **Connectedness Atlas** research interface.
It replaces the initial modal expedition and large hero with a compact workspace:

- A persistent parameter inspector gives `w`, `alpha`, `gamma` and `rho` as round-trippable decimal representations of the binary64 state. Angles are entered in radians. The derived complex multipliers are explicitly rounded for display.
- The specimen parameter and the angular chart position have distinct labels. An explicit `rho` controls the specimen; the chart remains the smooth interpolated sampled-exit surface. “Use interpolated exit” restores that relationship.
- The default specimen is locked. Hover previews, worked examples, numerical diagnostics and route controls are available explicitly. Display smoothing, relief, mesh and colour occupy a separate disclosure panel.
- Keyboard focus styles, named fields, modal focus containment and return, keyboard orbit/pan/zoom, Escape and pointer-cancel handling are included. Layouts adapt at 1180, 880 and 580 pixels.

### Mathematical vocabulary

The DD component consists of two direct similarities:

```
f_minus(z) = -1 + lambda_minus*z
f_plus(z)  =  1 + lambda_plus*z
lambda_minus = (2*w/rho) exp(i*(alpha-gamma))
lambda_plus  = (2*(1-w)/rho) exp(-i*(alpha+gamma))
```

The chart covers `0.35 <= w <= 0.65`, `0 <= alpha <= pi/2`, and
`0 <= gamma <= pi`. The strict contraction condition is
`rho > 2*max(w, 1-w)`. The parameter inspector validates these conditions.
The equal-contraction slice `w = 1/2` is not, by itself, the homogeneous
slice: equality of the two linear parts also requires equal multipliers.
The displayed marked first-level difference is
`Delta = f_minus(K) - f_plus(K)`, so first-level contact means `0 in Delta`.
A displayed difference centre near zero does not decide limiting membership.

“Finite fingerprint component,” “finite prefix growth,” “cross-depth
agreement score,” and “noncrossing chord core” describe the available
numerical diagnostics. Legacy identifiers in the unchanged dataset and
backwards-compatible state API include `stableChamber`, `wormhole`,
`entropy`, and `lamination`; these identifiers are not additional theorems.
Original guided-example text is retained as authored exploratory material.

The survey has **13 x 41 x 81 = 43,173 parameter rays**. Mesh resolution is
independent: the preserved GPU high mesh has 256 x 512 vertices and the ultra
mesh 384 x 768. Spectral/spline interpolation supplies the additional display
vertices, not additional independently searched parameter rays. The weight
slider can choose interpolated weights between the 13 stored slices.

### Image exports

“Export atlas PNG” and the detailed-prefix view offer 2048 or 4096 pixels
on the long edge, including the caption. The atlas is rerendered at the
export raster size using the selected display mesh and camera. The working
canvas raster and viewport are restored in `finally`; parameter values,
mesh quality and numerical data are not altered. A device limit may reduce
the actual export dimensions. Software exports retain the software mesh
and are labelled accordingly in the metadata.

The detailed view rerenders its **already-computed** prefix arrays into a
separate canvas. It preserves the selected mode, style, pan and zoom; image
resolution does not silently request deeper prefix enumeration. Captions
and metadata record actual depths and prefix counts. Requested depth and
work budget can limit one another: a depth-20 request with a 32768 work
budget renders 32768 prefixes, at depth 15.

Every exported PNG contains an uncompressed UTF-8 `iTXt` chunk with keyword
`ConnectednessAtlas`. Its JSON schema is `connectedness-atlas/figure/v1` and
includes the binary64 parameter, map multipliers, actual raster dimensions,
display mesh, camera, data manifest/SHA-256, relevant finite evidence and
limitations. The full-view record uses the parameter captured when its
worker computation began, not pending depth controls or unrelated later
state. JSON also remains available through the reproducibility record.

The point cache now keys all four binary64 coordinates without rounding;
nearby parameters no longer reuse a point cloud for a different state.

“Prefix-count density” is log-scaled occupancy of the deterministic displayed
prefixes; it is not a natural measure, invariant density or dimension estimate.
“Radius-scaled marks” are clipped screen symbols inherited from the original
renderer. They are not enclosure disks. Analytic tail bounds remain separate
numerical quantities in the record. Selecting Points or Radius-scaled marks
now honours that style even above 300000 prefixes; default density remains
available for responsiveness.

### Reproducible checks and remaining release gate

Run:

```
node --check 4D/lab/app.js
node 4D/lab/qa.cjs
```

The local harness reads the current source and checks PNG metadata/CRC,
exact-coordinate cache separation, deterministic prefix composition,
export drawing with independent context/view, preserved source point arrays,
survey checksum and GPU mesh definitions. Its output names the coverage
and exclusions rather than interpreting the count as scientific validation.

Browser acceptance is maintained in `../qa/browser.mjs`, including the real
software fallback, WebGL profile, mobile layout, parameter validation,
linked survey/specimen updates, session restoration and PNG metadata.
The repository workflow runs these scenarios on the checked-out source.
Numerical tests and visual interpolation do not certify locus topology.

## Laboratory revision 2 — linked survey and portable sessions

The angular torus now has a linked rectangular survey chart. The horizontal
axis is gamma in [0, pi], and the vertical axis is alpha in [0, pi/2]. All
3,321 cells in a selected stored weight slice are displayed without spectral
smoothing or interpolation. The colour scale is computed from that stored
slice and labelled with its endpoints; categorical component IDs are coloured
by ID and unclassified cells are dark. The selected parameter crosshair and
cell inspection ring have distinct roles. Hovering the rectangle reads the
original cell; clicking it sets the stored exit and its nominal grid parameter.
Arrow keys step between cells. The stored-weight selector can inspect another
slice without changing the specimen; the discrepancy is stated beside it.

The original coordinate arrays are Float32. At endpoints they can round just
outside the nominal chart (for example the stored approximation to pi/2).
Selection therefore reconstructs nominal grid coordinates from the uniform
indices and nominal weight. Original Float32 coordinates and raw field values
remain untouched in the CSV export. Every slice CSV has 3,321 data rows, plus
a header, including both outer exits, the first exit, finite band count and
depth discrepancy. It is a raw-data export, not a new calculation.

The explanatory disclosure relates the angular chart to the torus: the major
angle is gamma and the tube angle is 2 alpha, each reflected, giving four
display copies. Increasing rho decreases both contraction ratios at fixed
weight. Tube radius and radial relief are display choices.

Picking now intersects the camera ray with the displayed numerical mesh,
selects the frontmost triangle, and interpolates periodic angular coordinates
without a seam jump. The cutaway quadrant is excluded from hits. This resolves
the former hidden-back-surface selection caused by nearest-screen-vertex
picking. In the software renderer the raster uses a coarser approximation of
that same numerical mesh; selection remains a mesh calculation, not a theorem.
Three camera presets, explicit zoom buttons and two-finger pinch zoom are
available. Slow drags are detected by total movement from pointer-down rather
than per-event movement, so they no longer masquerade as specimen clicks.

WebGL draw calls are skipped while the camera, raster size and rendered data
are unchanged. Mesh/overlay uploads invalidate the draw cache. Label DOM is
updated when its parameter/camera/label state changes. Existing high and ultra
meshes and full-size PNG exports remain available. Pixel count, display mesh
resolution and original survey sample count remain separate quantities.

The session buttons save/restore JSON or copy a URL fragment containing the
DD parameter, explicit/survey radial mode, camera and display settings. Session
restoration validates all fields and the survey checksum before changing the
workspace. No route computation or finite-search certificate is serialized as
new evidence. Hover state and animations are not resumed. Software devices
restore the same parameter and camera with their supported preview mesh.

The schema is `connectedness-atlas/lab-session/v1`. Public API additions are
`getSession()`, `restoreSession(record)`, `getSurveyCell()`,
`selectSurveyCell(alphaIndex, gammaIndex, weightIndex)`, and
`setCameraView("oblique" | "top" | "side")`. Figure metadata now also carries
the corresponding session and the unsmoothed angular survey provenance.

Run `node 4D/lab/research-tools.test.cjs` in addition to the established lab
harness. It checks every rectangular cell centre, boundaries, frontmost
triangle picking, cutaway, periodic seam interpolation, nominal grid endpoints
and session round-trip/rejection. Browser layout, touch gestures and GPU
raster appearance still require live acceptance; no deployment occurred.
