App Map

Architectural map of every page, data file, and user flow in the Cisco IOS XE OpenAPI documentation hub.

Generated 2026-06-17 15:52 UTC from APP_MAP.md

APP_MAP — Cisco IOS XE OpenAPI / YANG Documentation Hub

Generated: 2026-06-09 from source inspection of HTML/JS/JSON in the repo root.
Confirmed = present in checked-in files. Inferred = derived from naming/usage but
not directly read end-to-end. See "Unknowns" at the bottom.


1. Executive Summary

At-a-glance: Executive summary
Slide-ready PNG (docs/exec_summary.png) — 1920×1080,
generated by scripts/build_exec_visual.py.

This workspace is a static, GitHub-Pages-hosted documentation site (no backend, no framework) for the Cisco IOS XE programmability surface. It compiles every YANG model into per-category OpenAPI 3.0 specs, renders them via Swagger UI, and adds purpose-built JS tools on top: universal search, code generation, YANG tree diff, telemetry XPath authoring, accountability/coverage reports, and per-platform support matrices.

Key facts:


2. Mind Map (Mermaid)

Cisco IOS XE Documentation Hub — app mindmap
App-map overview — root node, color-coded category branches, and second-level features. See the source below for the full hierarchy including third-level details.
Show Mermaid source
mindmap
  root((IOS XE Docs Hub))
    Landing
      index.html
      Universal Search (Fuse.js)
      Stats Dashboard (Chart.js)
      Recent + Favorites
      Quick code-gen modal
      Release dropdown
    Swagger Viewers
      Oper
      Config (cfg)
      Native config
      OpenConfig
      IETF
      MIB
      RPC
      Events
      Other
      ::sub
        YANG container tree sidebar
        Module search
        Download spec JSON
        Platform badges
        MDT xpath side card
        Deep-link by spec+op+ver
    Authoring Tools
      code-generator.html
        cURL / Python / Ansible / JS
        Spec & path pickers
      telemetry.html
        Release / category / module
        Derived xpath table
        Subscription template
        CSV export
      tree-compare.html
        Two-module diff
        Sync scroll
        Highlight diffs
        Export / share link
    Reports
      yang-accountability.html
        1103-module matrix
        Status & classification filters
        CSV + plain-text export
      yang-accountability-compare.html
        Cross-version matrix
        Summary cards
        API growth table
        Deltas (added / removed)
      platform-coverage.html
        Module x platform matrix
        Family color coding
        CSV export
      native-augment-accountability.html
        163 native augments
        Tree vs Swagger pivot
    Distribution
      exports.html
        Per-release Postman shards
        Per-release Bruno workspaces
        Environment file
      Top-level Postman / Bruno tools
      yang-trees/
        index.html (redirect to release)
        mib-trees-index.html (redirect)
        Per-release pyang HTML trees
    Meta
      about.html
      404.html (fallback + quick links)
      Service worker (offline shell)
      Dark mode (site-chrome.js)

3. Page Inventory

Files use workspace-relative paths. "Scripts" lists JS dependencies; shared chrome (assets/js/site-chrome.js, assets/js/sw-register.js) is loaded on most pages and is not repeated below.

3.1 index.html — Documentation Hub (Landing)

3.2 about.html — About / Project Mission

3.3 code-generator.html — API Code Generator

3.4 tree-compare.html — YANG Tree Comparison

3.5 yang-accountability.html — Module Accountability Report

3.6 yang-accountability-compare.html — Cross-Version Matrix

3.7 telemetry.html — MDT XPath Builder

3.8 exports.html — Postman / Bruno Exports

3.9 platform-coverage.html — YANG × Platform Matrix

3.10 yang-trees/index.html — Redirector

3.11 yang-trees/mib-trees-index.html

3.12 404.html — Not Found

3.13 [swagger-{oper,cfg,native-config,openconfig,ietf,mib,rpc,events,other}-model/index.html]

3.14 swagger-native-config-model/capabilities.html

3.15 swagger-native-config-model/native-augment-accountability.html

3.16 swagger-*-model/index-v2.html (×9)

3.17 Per-release tree pages


4. Feature Inventory

Grouped by capability, not by page.

4.1 Multi-release version switching

4.2 Universal search (hub)

4.3 Swagger UI rendering & deep-linking

4.4 Code-generation (curl / Python / Ansible / JS)

4.5 MDT XPath authoring

4.6 YANG tree side-by-side compare

4.7 Accountability reports

4.8 Platform coverage matrix

4.9 Postman / Bruno exports

4.10 Recent & Favorites

4.11 Dark mode / theming

4.12 PWA / Offline shell

4.13 SEO + structured data


5. User Flows

5.1 First-time landing

  1. User opens /. Service worker installs.
  2. index-app.js restores theme, populates release dropdown from releases/index.json, fetches releases/<active>/search-index.json (fallback: root).
  3. Pie chart + stats hydrate from version-stats.json.
  4. Recent/Favorites populate from localStorage.

5.2 Universal search → spec

  1. User types into #universalSearch (or presses / / Ctrl+K).
  2. search.js debounces, runs Fuse query, renders cards.
  3. hub-search-ops.js lazily fetches per-category _paths_index.json to surface operation-level matches.
  4. Clicking a result opens swagger-<cat>-model/index.html#spec=<module>&op=<id>&ver=<ver>.
  5. Viewer's deeplink.js auto-expands the matching operation row.

5.3 Build & share a code snippet

  1. User opens code-generator.html.
  2. Picks a spec + path (or types a path manually), sets host/method/body.
  3. Generated snippets render in 4 language tabs with Copy buttons.
  4. "Copy Share Link" copies a URL containing #ver=&category=&spec=&path=&method=.

5.4 Diff two YANG trees

  1. User opens tree-compare.html (often via "Compare" on a tree page that pre-fills one side).
  2. Picks left + right modules.
  3. Stats bar + legend + side-by-side panels update; user toggles Sync Scroll / Highlight Diffs (preferences persisted to localStorage).
  4. Exports, copies as text, or shares via #left=&right=&ver=.

5.5 Author an MDT subscription

  1. User opens telemetry.html. Picks release/category/module.
  2. Table populates with each OpenAPI path and its derived filter xpath.
  3. Clicking a row populates the subscription template; Copy or CSV-export.

5.6 Accountability deep dive

  1. User opens yang-accountability.html — sees the stat grid, category summary, paginated module matrix.
  2. Searches/filters by classification/status, exports CSV, copies as text, or shares the exact filtered view via hash.
  3. For cross-release context, jumps to yang-accountability-compare.html.

5.7 Platform coverage check

  1. User opens platform-coverage.html.
  2. Picks a release, optionally filters by module substring or specific platform.
  3. Sees the matrix; exports CSV.

5.8 Bulk download

  1. User opens exports.html.
  2. Filters by release + format, downloads shards + environment file.

5.9 Error / empty / loading states


6. Data / API Dependencies

All "APIs" are static JSON fetched over HTTP — no backend.

FileProducer (inferred)Consumed by
releases/index.jsonscripts/build_release.pyevery page that switches release
releases/<ver>/search-index.json (+ root search-index.json fallback)scripts/generate_search_index.pysearch.js, code-generator.js, tree-compare.js
releases/<ver>/swagger-<cat>-model/api/<name>.jsongenerators/*.pySwagger UI, code-generator, telemetry
releases/<ver>/swagger-<cat>-model/api/_paths_index.jsonscripts/build_paths_index.py (per hub-search-ops.js comment)hub-search-ops.js
releases/<ver>/yang_accountability.json (+ root yang_accountability.json)scripts/build_accountability*.pyyang-accountability.js
accountability_compare.jsonscripts/build_accountability_compare.pyyang-accountability-compare.html
version-stats.jsonscripts/build_version_stats.pyhub stats, about, version compare
platform-support-index.json + releases/<ver>/platform-support.jsonscripts/build_platform_support.py (inferred)platform-coverage.js, platform-support.js
yang-prefix-map.json + per-release variantgenerators (inferred)telemetry.js
releases/<ver>/exports/{postman,bruno}-manifest.jsonscripts/build_release.pyexports.html
releases/<ver>/native-capabilities.jsonscripts/build_native_capabilities.pyswagger-native-config-model/capabilities.html
releases/<ver>/telemetry-index.json, telemetry-skipped.jsoninferred from filenames; presumed telemetry pipelinetelemetry.js / build inputs
releases/<ver>/mib-metadata.json, mib-platform-matrix.jsoninferredMIB viewer side cards
releases/<ver>/path_depth_audit.json, tree_audit.jsoninferred QA artifactsnot directly bound to UI
tools/IOS-XE-RESTCONF-v*.postman_collection.json (and v2 parts)manual / generatorshub downloads, exports

External: Microsoft Clarity telemetry to *.clarity.ms (always-on in this deployment). Every core third-party UI library is still vendored under assets/vendor/ with SHA-384 SRI verification (Swagger UI 5.31.0, fuse.js 7.0.0, chart.js 4.4.0). No CDN or web-font dependencies for the site shell itself. See docs/SELF_HOSTING.md.

LocalStorage keys observed:

URL/hash params recognized:


Items flagged Needs verification or that fell outside this static read:

  1. Stale static numbersRESOLVED (2026-06-16). about.html now hydrates its "By the numbers" cards from version-stats.json via about-stats.js (data-stat-about hooks), and index.html hub cards, category table, search placeholder, project-summary boxes and "Last Updated" date are all synced to the 26.1.1 default (988 specs / 82,856 paths / 246,677 ops / 1,469 tracked modules) via data-stat-* hydration. Static markup remains only as no-JS fallbacks.
  2. native-augment-accountability.htmlREVIEWED, KEPT (2026-06-16). Labelled "Phase 2 Complete / IOS XE 17.18.1"; has no live inbound links (reachable only by direct URL). Left in place rather than moved/deleted to avoid breaking external bookmarks; the canonical, version-aware reports are yang-accountability.html and yang-accountability-compare.html.
  3. per-spec paths-search.js — referenced from every Swagger viewer but not read here; assume per-category enhancer mirroring hub-search-ops.js.
  4. archive/ vs live pages — archive/debug.html, archive/test-stats.html, archive/test-swagger.html exist; sitemap and nav exclude them, service-worker bypasses archive/. Confirm none are still reachable.
  5. index-v2.html redirect stubsKEPT (2026-06-16). The 9 swagger-*-model/index-v2.html files are intentional zero-delay redirect stubs (preserving #hash/?query) that catch old external bookmarks to the legacy -v2 filenames. Not in the sitemap, nav, or service-worker precache, so they add no user-facing noise; retained as inbound-link safety nets.
  6. Auth model — Not applicable (static site), but the code-generator.html form ships a default password (cisco123) and the hub modal embeds the same. Confirm acceptable for a public DevNet sandbox; do not let real credentials get autofilled by browsers.
  7. Telemetry-index data flowreleases/<ver>/telemetry-index.json and telemetry-skipped.json exist on disk but the consumption path inside telemetry.js was not traced end-to-end here.
  8. Search index driftRESOLVED (2026-06-16). search.js prefers releases/<ver>/search-index.json but falls back to the root file; scripts/generate_search_index.py rebuilds the root search-index.json from releases/<default_version>/ on every run, so the fallback always matches the default release (no mismatch for users who land mid-deploy).
  9. hub-search-ops.js baked TARGET_VER = '26.1.1' as a fallback — RESOLVED (2026-06-16). scripts/patch_viewers_version_aware.py now re-stamps the constant from releases/index.json's default, so it advances automatically with the default release.
  10. MIB-specific UI — references to mib-metadata.json and mib-platform-matrix.json suggest extra side cards in the MIB viewer not fully captured here.
  11. Documentation driftPROJECT_REQUIREMENTS.md, QUICK_REFERENCE.md, ASSURANCE_SPEC.md, MDT_XPATH_SPEC.md, VERSIONING.md, GITHUB_PAGES_DEPLOY.md, YANG_MODULE_ACCOUNTABILITY.md, FAQ.md, CONTRIBUTING.md, AGENTS.md, CHANGELOG.md all coexist at the root. Confirm which are authoritative.

8. Cleanup / Consolidation Suggestions

Where the audit found duplication, drift, or unfinished surface area.

  1. Single source of truth for headline counts. DONE (2026-06-16). Every "specs / paths / ops / modules" number in about.html and the hub project-summary / category-table sections is now bound to version-stats.json via data-stat-* hooks (about-stats.js / index-app.js). The "April 25, 2026" / "608 specs" drift is resolved.
  2. Retire index-v2.html stubsKEPT (2026-06-16). Documented above as intentional inbound-link redirect safety nets; not deleted.
  3. Consider moving native-augment-accountability.html into archive/REVIEWED, KEPT (2026-06-16). No live inbound links (direct-URL only) and pins to 17.18.1. Left in place to avoid breaking external bookmarks; the canonical, version-aware reports are yang-accountability.html and yang-accountability-compare.html.
  4. Centralize the version-detect helper. Five files re-implement _activeVersion() (search.js, yang-accountability.js, code-generator.js, telemetry.js, tree-compare.js, each Swagger viewer). One shared helper in assets/js/ would prevent subtle behavioural drift. (2026-06-16: hardened against the concrete drift risks rather than forcing a sweeping cross-page refactor — (a) the localStorage key-capitalisation bug in code-generator.js (iosxeActiveVersion vs canonical iosxe-active-version) is fixed; (b) hub-search-ops.js's baked TARGET_VER fallback is now re-stamped from releases/index.json by scripts/patch_viewers_version_aware.py so it can no longer go stale when the default advances; (c) that patch script's build_helper was itself stale — it would have re-introduced a removed default-version api/ short-circuit (404s) and a space-form Cisco IOS XE title regex that no longer matches the hyphenated Cisco IOS-XE viewer titles — now corrected so the generator is idempotent against the live viewers; (d) yang-accountability.js's _activeVersion() was missing the localStorage fallback tier, so a direct visit to yang-accountability.html after picking a non-default release on the hub silently fell back to the root default — normalised to the canonical ?ver=#ver= → hub global → localStorage precedence used by code-generator.js / tree-compare.js.)
  5. Promote per-viewer inline CSS into shared stylesheets. tree-compare.html, platform-coverage.html, exports.html, and yang-accountability-compare.html each carry hundreds of lines of inline CSS that duplicate assets/css/site.css.
  6. Document the data/build pipeline. A simple Mermaid diagram showing generators/*.py → releases/<ver>/** and scripts/build_*.py → root JSON indexes would let new contributors trace any number on the site back to the script that produced it.
  7. Audit the archive folder. It mixes one-off debug HTML, completed-phase TODO docs, and stale JSON. A pass to delete vs. preserve would shrink the service-worker bypass list and search-index noise.
  8. Standardize "Copy Share Link" behaviour. Buttons appear on the hub, viewers, accountability, code-generator, tree-compare. Each implementation serializes a slightly different param set; a shared helper would help.

End of APP_MAP.md