# Tooltip and popover implementation ledger — E1 method This draft records twenty local configurations: sixteen software integrations and four related original browser patterns. It is an implementation comparison, not a ranking or an accessibility assessment. The four native patterns share browser mechanisms; they are not four independent software products. Several libraries also share positioning or component dependencies. Exact dependencies and their licences are preserved with the harness. ## Environment and provenance Each option was loaded in an isolated headless Chromium process through Playwright. Exact browser, Playwright, operating-system version/build, UTC dates and first/last events appear in the row and run log. This is a new E1 environment; P1's interactive-browser observations remain historical evidence and are not silently relabelled as these results. No existing browser profile or logged-in session was used. The server binds only to `127.0.0.1:8772`. Browser requests outside that local origin are blocked and recorded. Package requests occurred during preparation; package implementation bytes are bundled locally before measurement. All third-party implementation code, original integration adapters, preserved package sources, licence notices and executable fixtures stay in `harness/tooltip-popover-options/`. The published data files contain records, not vendor implementations. Versions are pinned in the lockfile. The source ledger lists npm archive URLs and integrity records, contributing package sources and exact retained licence text. Spectrum's published packages omit their licence files; their Apache notice was retrieved from the exact release's upstream commit before execution. The `client-only` browser marker contributes a zero-byte file; its MIT metadata is preserved, and no executable code or absent notice is invented. Code from every former operator is excluded. ## A configuration is the unit The five previously documented options remain: Floating UI, Tippy, Radix Tooltip, React Aria Components and Bootstrap. Their new runtime rows supersede documentation-only status for these exact integrations. Original P1 documentation records remain provenance, not runtime evidence. Each row states its trigger, portal/container choice, placement, delays and relevant options. Floating UI is a set of primitives composed by the fixture author. CSS libraries use their published pseudo-element interface. Native popovers open by activation unless the row explicitly adds focus/hover handlers. A modal dialog deliberately differs from a tooltip. A negative tooltip-style result for a modal is not a product-quality score. The original fixture gives each implementation a native trigger inside a fixed-size container and Before/After controls. Most sequences use a fresh document with visible overflow. The clipping sequence changes only that container to `overflow:hidden`. It is therefore a separate test condition, not the baseline layout. Content styling is original, while opening and dismissal remain the declared implementation's behavior. ## Recorded fields | Field | Operational check | |---|---| | Opens on focus | Click Before, then press Tab; inspect the trigger and visible content. | | Opens on hover | Move the mouse onto the trigger and wait the logged interval. | | Pointer onto content persists | Open content, move onto its measured content box, then inspect visibility after the logged delay. | | Escape closes without moving focus | Record visible content and active element, press Escape, then compare both. | | Escapes overflow:hidden | Open within the clipped container and establish whether content remains visible beyond its boundary. | | Works on touch | In a fresh mobile/hasTouch context, tap the trigger, then tap outside; record opening and dismissal separately. | | Works without JavaScript | Load the same fixture with JavaScript disabled; try keyboard focus, hover and activation. | Y means the bounded check was observed. N means the defined state was reached but the checked behavior did not occur. Partial records a mixed outcome or an inconclusive part, rather than converting it to a pass. Not tested means the required state was unavailable or the available evidence cannot resolve the question. Touch values explicitly say **emulated**: there was no physical touch device. The no-JavaScript check is an actual JavaScript-disabled browser context. DevTools inspection of DOM/style is measurement, not page-script execution. Bare custom-element text that is present before any interaction is not counted as a working tooltip. A client-rendered fixture with no trigger cannot demonstrate a JavaScript-free implementation. ## Visibility and clipping The logs retain active elements, content and trigger rectangles, computed style, pointer positions, screenshots and request/error records. Shadow components are inspected at the visible content box, not an outer `display:contents` host or a viewport-sized overlay. CSS pseudo-element rectangles are derived from their computed dimensions and transforms; screenshots retain the rendered result. These measurements are not assistive-technology output. For overflow, a rectangle alone is insufficient: clipped elements can retain a rectangle. The decision combines the rectangle with hit testing and screenshot evidence outside the clipping boundary. An option that flips its content entirely inside the container receives a qualified result; that observation does not prove it can escape the boundary. Screenshot pixel checks are corroboration for the original blue fixture styling, not a universal detection rule for every component's theme. ## Retests and limits Initial instrumentation trials remain in `run-log/preliminary-instrumentation/`. A generated Floating UI ID and Spectrum's non-box host were initially missed by the probe. Native fixed placement initially did not cross the clipping boundary. Those trials are labelled and do not establish failures. Any later focused retest keeps its prior log and explains which probe or test sequence changed; the ledger cites the exact accepted events. Screen-reader speech, physical touch, other browsers, device hardware, arbitrary configurations, complete keyboard traversal and production integration were not tested. Emulation does not establish physical-device performance or accessibility compliance. No score, sponsored row or product recommendation is calculated. Author and reviewer are unassigned; the human review sheet is unsigned. ## Reproduction and time Use the delivered harness runner with the documented pinned runner dependencies and an explicitly selected Chromium binary. It serves these fixture bytes locally, opens fresh contexts and stores new logs. Preserve original logs before a repeat. The lockfile, integration source, bundles, package source ledger and hashes allow a reviewer to identify the exact tested configuration; rebuilding can change bytes and therefore requires new hashes and observations. Time records are actual agent wall-clock activity and browser observation spans. They are not human engineer-hours, and the two categories must not be added as if they were sequential human labor. Human engineer-hours and review hours remain null. ## Source preservation counts The package ledger records 94 contributing dependency instances and 93 unique package name/version pairs. Its 1,974 distinct bundler input locations map to 1,971 canonical preserved paths. Nine nested dependency copies also remain under parent-package trees, producing 1,980 unique preserved paths and 1,983 ledger references. Every input location maps to preserved identical bytes. The original tally and its dated clarification remain in the harness provenance history; this metadata clarification changes no measured result or frozen dataset hash. ## E2 requested runtime and data licence The requested isolated rerun on Chromium **155.0.8059.80** could not execute. That version is embedded in the installed Codex Framework, but launching its helper headlessly with a fresh temporary profile immediately returned “No packaged Electron app found; exiting without a browser window.” The installed Brave version is 151.1.93.134 and the existing Playwright Chromium cache is 139.0.7258.5. Neither matches the requested engine. No live user profile was attached or opened, and no browser version was spoofed. The timestamped runtime check is saved at [runtime evidence](../../harness/tooltip-popover-options/e2-runtime-check.json). There are **zero new E2 dataset executions**. Existing observations, raw logs and their actual environments remain unchanged: D1's P1 fields use 155, while the D1 emulation/AX additions and D2's E1 measurements use 139. D2 has seven behaviour fields; no absent motion or AX column is invented. A supported independently launchable 155 executable is required for a valid new run. The original observation data and compilation are now [CC BY 4.0](LICENSE-DATA.md). Package implementations keep their own licences; original fixture code remains MIT. The prior E1 index and method are preserved alongside this update. Human technical review and real screen-reader/physical-touch measurements remain uncompleted.