# Experimental Research Knowledge Map

Open `experimental.html` on a local HTTP server or GitHub Pages. The full explorer remains outside the main navigation; homepage research nodes expand in place. It uses static HTML, local JSON, vanilla JavaScript and a local D3 7.9.0 distribution (ISC license in `assets/vendor/d3/LICENSE`). No backend, paid service or API key is required.

The homepage’s “Explore the Full Research Universe” link opens `research-universe.html`, a public copy with the catalog, “About the connections,” and catalog shortcut hidden. `experimental.html` retains the complete explorer. Both use the same renderer, graph data, and adapter; the generator keeps both catalogs synchronized. To restore the public catalog, remove `hidden` from `#map-catalog` and `.km-list-link` and update its helper text.

## Regenerate

From the repository root, with Python 3.9 or later:

```sh
python3 scripts/build_research_graph.py
python3 scripts/build_research_graph.py --check
python3 -m http.server 8000
```

The script uses only Python's standard library. It regenerates `assets/data/research-graph.json` and the marked catalogs in `experimental.html` and `research-universe.html`. The `--check` command validates source anchors and graph endpoints, and fails when either generated output is stale. Outputs are deterministic; source SHA-256 fingerprints record which HTML files were used. Run it after editing the source pages. Do not edit generated JSON/catalog entries by hand.

## Sources and fidelity

- `geoai.html`, `robotics.html`, `hydroinformatics.html`: original research-section titles, descriptions, methods and explicitly linked publication DOIs.
- `publications.html`: titles, authors, years, venues, categories/statuses and existing external links. Records must have explicit `geoai`, `robotics` or `hydroinformatics` topic metadata to enter this research map. General intelligent-systems-only records are outside this view; the Publications page remains complete and unchanged.
- `projects.html`: all portfolio project titles, summaries, explicit keyword tags and links. Only the GeoAI portfolio section supplies an explicit research-area classification; other AI/ML projects remain shared/other rather than receiving a guessed area.

Whitespace is normalized without rewriting academic wording. Author ellipses and “et al.” remain as recorded. Venues not specified by a source are explicitly shown as unspecified. In-progress work, preprints, presentations and journal/conference records retain their source categories and years. No bibliographic information is obtained from the chatbot or generated by AI.

The same CLIP DOI currently appears in a 2025 preprint and a 2026 in-progress record, with different author detail. These remain separate website records. The graph's `notices` field and the page's “About the connections” disclosure identify this overlap; they do not silently synthesize a replacement citation. Check the source records when deciding whether to consolidate them in a future content update.

## Evidence and keyword processing

- **`source` / solid line:** an explicit area classification in HTML, a normalized portfolio keyword tag, or a DOI directly linked from a research section. Each such edge records an explanation and the source URL.
- **`keyword-match` / dashed line:** automatic occurrence matching against a small reviewed technical vocabulary. Equivalent hyphenation, capitalization and aliases (for example VLM/CLIP → foundation models, SVM → machine learning) are normalized. These are term associations, not proof of a scientific relationship or collaboration.
- **Legacy `similarity` metadata (not displayed):** TF–IDF cosine similarity of project/publication titles and project summaries. Generic stopwords are removed; at least two technical keywords and one recorded research area must overlap, cosine must be at least 0.18, and at most two inferred links are kept per project. Existing explicit pairs are not duplicated. Scores and matched keywords remain in JSON. The explorer excludes these records from rendering, traversal and forces; there is no text-similarity control. The generator and JSON keep the legacy metadata for source reproducibility.

The vocabulary and stopwords live in the script and are embedded in JSON for review. The workflow does not infer author relationships, new research results or project membership from mere similarity. A color shared by multiple areas indicates cross-cutting vocabulary, not a new formal research field.

## Progressive exploration and accessibility

- The explorer initially shows all three research areas and their area-tagged records with SIS selected. Other AI/ML records remain available through search, the catalog and connected-node exploration. Reset restores this overview. Collapse returns to the three branches, then SIS alone; progressive exploration remains available. The factory’s default collapsed configuration (including future hero mode) starts with SIS only, with a restrained glow. Hovering or keyboard-focusing SIS previews its three branches. Leaving the canvas/focus region dismisses an unpinned preview; clicking/Enter/Space pins it. Clicking an area reveals up to eight connected projects/publications plus up to three keyword nodes, using existing evidence paths. Further selections and **More connections** reveal additional small batches. No data is discarded.
- **Back** retraces up to 24 exploration states; **Collapse** returns from details to branches, then to SIS; **Reset map & filters** clears filters, release anchors and camera position, and restores the initial expanded overview with SIS selected. Search mode can be left with Back/Collapse, or by selecting a record.
- Search reveals matches and a shortest existing connection path to a selected research area, even when that branch was collapsed. Filters remain authoritative; year filtering affects publications only. Other AI/ML projects may have no recorded research-area path and remain unlinked rather than receiving an invented edge. The accessible catalog follows filters/search, independently of visual expansion.
- SIS is a presentation/navigation hub. Its long-dashed spokes are labeled **SIS navigation**, distinct from solid source evidence and dashed keyword matches. Neither hub nor spokes is written into the academic dataset. Text-similarity records are excluded from the explorer.
- The default overview prioritizes visible labels for Remote sensing, Urban Tree Mapping, Foundation models, Machine learning, Deep learning, Multimodal learning and Image classification. Other AI terms receive the same priority when revealed. Displaced priority labels use subtle guide lines to their own marks; these are label guides, not research edges. The duplicate Urban tree mapping keyword label is omitted while its project label is visible. Dense-view anchors and longer SIS navigation springs spread the three areas into a wider triangle; sparse and hero modes retain their earlier targets. Single-area research nodes receive distributed radial targets around their hub, with a gentle centroid correction to keep GeoAI, Robotics and Hydroinformatics in the middle of their smaller-node groups. Shared concepts remain between areas; layout forces do not add research edges.
- Full publication titles, authors, years, venues, DOI links and source links remain unchanged in the detail panel and catalog. Graph labels abbreviate long names and hide collisions; accessible names/tooltips retain the complete titles. Branch names are centered inside their enlarged circles and remain visible when other records are selected. Hydroinformatics uses two lines; the full name remains intact in accessible names and tooltips. Research-area circles stay smaller than SIS, even when selected. Their hover messages show only the research name, without an “area” prefix.
- Arrow/Home/End keys move among currently visible graph nodes; Enter/Space activates; Escape goes back within the graph. The SVG background supports arrow-key pan and +/− zoom. Tab reaches controls and the equivalent catalog. Closing Ask Howard retains its existing Escape behavior.
- Pointer/finger dragging pins the selected node during the gesture and reheats connected spring forces. On release, a soft positional anchor keeps the node near its release point without making it a permanently immovable obstacle. A six-pixel threshold suppresses accidental activation after a drag. Background drag pans; pinch or Ctrl/Command + wheel zooms. Ordinary wheel scrolling continues to scroll the page.
- D3 uses forceSimulation, forceLink, forceManyBody, forceCollide (four iterations), forceCenter and drag, plus positional forces with stronger dense-view area targets and soft release anchors. Link strength 0.12–0.18, velocity decay 0.48 and alpha decay 0.055 damp the motion to a finite stop. Similarities are excluded from the force layout. Bounds keep marks above the controls; visible labels are shifted inside the viewport. Explicit Pause also stops the SIS glow; switching browser tabs pauses motion. Reduced motion computes the layout synchronously, with no entrance/zoom/glow animation.
- Dense views (more than 40 nodes) use at least a 1000 × 800 layout inside the responsive SVG, preserving collision space; zoom/pan remain available on smaller screens. Sparse/collapsed views use the canvas dimensions.
- Mobile filters use native disclosure; details follow the graph. The HTML source catalog works without JavaScript. If D3 fails, search, filters and catalog selection remain available; if JSON fails, the static catalog/source links remain available.

The shared graph styles and renderer serve the homepage figure and full explorer. Research figures/galleries, publication controls, Certificates, Contact and Ask Howard are unchanged.

## Reusable renderer and homepage presentation

`window.SISResearchMap.mount(options)` is a renderer independent of the explorer's search controls and details panel. `research-map-explorer.js` mounts it only when `#knowledge-map` exists; that adapter and its controls/details logic are not loaded on the homepage.

Options: `root`, `canvas`, `svg` (DOM elements), `data: { nodes, edges }`, `mode: 'explorer' | 'presentation' | 'hero'`, `initialView: 'collapsed' | 'network'` (network applies to explorer and presentation), optional `onSelect(node)` and `onChange(state)`. The returned controller supports `select(id)`, `setFilter({ eligible: Set, matches: Set, searching })`, `more()`, `back()`, `collapse()`, `reset()`, `pause()`, `resume()`, `zoomBy(factor)`, `fit()`, `getState()`, and `destroy()`.

Hero mode restricts input to the three area records and skips deeper record expansion. It needs no catalog, filter controls, detail panel or full graph fetch: a future host can supply just the three area records and `edges: []`. Each area record uses the existing shape, for example `{ id: 'geoai', type: 'area', title: 'GeoAI', areas: ['geoai'], keywords: [] }`. Include the local D3 distribution and map stylesheet/script only when embedding; use an accessible SVG label, a sized `.km-canvas` inside a `.km-visual` container, visible pause/reset buttons wired to the controller, and accessible research links outside the SVG. Handle `onSelect` with host-owned navigation when desired. Mount after the component is visible and call `destroy()` when removing it.

The homepage starts with the original academic profile, then the full-network figure and Featured Research. The profile retains its larger portrait, contact and professional links beneath the photo, visible research keywords, action buttons and initially expanded About disclosure. The figure shares the page’s standard container margins, with “EXPLORE MY SIS RESEARCH UNIVERSE” and the adjacent hint “Select a node to expand its connections and view details.” above the graph and the existing area, node-type and connection legend below it. Its `presentation` mode keeps the same initially visible records as the explorer (currently 77 including SIS), colors, shapes, physics, entrance transitions and priority labels. It does not use the three-node `hero` mode. Other unclassified AI/ML records remain discoverable in the full explorer; the shared dataset is unchanged.

`research-universe.js` loads the local D3 distribution, shared renderer and JSON only when the figure approaches the viewport, with immediate initialization if IntersectionObserver is unavailable. The complete network expands automatically and settles; no explorer panels are added. A reserved strip at the bottom-left of the figure holds the existing-style Zoom in, Zoom out and Fit view buttons, using the shared renderer’s controller methods. This strip is outside the SVG viewport so nodes and labels cannot overlap the controls during zooming or dragging. A discreet link below the figure opens the full explorer. Mouse/touch dragging, background panning, pinch/Ctrl-scroll zoom and keyboard navigation remain available. Narrow screens reduce nonpriority labels while retaining every node and full accessible names. Reduced motion computes the complete layout without entrance or physics animation.

Activating a homepage node selects it and expands its existing connections in place, without navigating. Selected connections remain highlighted after the pointer leaves; the existing tooltip shows the full title and year. Clicking a node keeps that message open with text visitors can select and copy manually and a borderless × close control at the top-right; hover messages stay temporary. A click outside, another node selection, Escape, or a drag/zoom/resize dismisses or replaces the message. The academic profile’s separate welcome line is unchanged. Enter/Space and touch taps use the same selection path. Escape on a graph node clears the selection back to SIS and returns focus to the SVG background without collapsing the network. Only the explicit link below the figure opens the full explorer. Its optional `?node=<id>` record links remain supported; the explorer validates IDs against the shared dataset before selecting details, with source and DOI links retained. Static research and explorer links are visible when JavaScript is disabled or loading fails. No new backend, paid dependency, or chatbot request is involved.

Touch/pinch checks use Chromium emulation; physical iOS/Safari testing remains a manual follow-up.

## Browser verification

The repository's existing Playwright development tooling can run the focused smoke suite against a static server:

```sh
SIS_BASE_URL=http://127.0.0.1:8000 node scripts/research-map-smoke.cjs
```

Use `CHROMIUM_PATH` if Chromium is installed outside Playwright's normal cache. Optional `SIS_CDN_FIXTURES` points to a directory containing the unchanged Bootstrap 5.3.0 CSS/JS files when a cloud browser cannot access the existing CDN. `SIS_AXE_PATH` enables local axe-core WCAG audits; `SIS_MAP_SCREENSHOTS` writes review screenshots and the browser report to a chosen directory. These are development-only options; the published page needs no build step or testing dependencies.

The suite checks SIS preview/pinning, progressive batches/history, source paths, elastic dragging/release/collision/settling, reusable hero mode, touch interaction, background panning, zoom gestures, search, filters, removed similarity controls/counters and centered research hubs, reset, settled/reduced motion, keyboard selection, responsive layout, failure fallbacks, SIS branding on all ten pages and representative existing site functionality. It does not submit email or send chat messages to external services.

The explorer omits stage numbering, visible node totals and the long instruction/status footer. A visually hidden live region retains concise announcements for assistive technology, and the SVG description preserves keyboard guidance. Catalog result counts remain available.

Homepage-specific browser checks: `SIS_BASE_URL=http://127.0.0.1:8000 node scripts/homepage-universe-smoke.cjs`. The same Chromium/CDN/axe environment options apply; `SIS_UNIVERSE_SCREENSHOTS` saves desktop/mobile previews and a report.
