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:
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:
- Hosting: GitHub Pages, scope
/cisco-ios-xe-openapi-swagger/. - Releases tracked:
26.1.1(default),17.18.1,17.15.x,17.12.x,17.9.x(releases/index.json). - Top-level pages: 9 user-facing HTML + 1 404 + 2 redirector stubs + 9 Swagger UI viewers (one per model category).
- No build system: vanilla JS, strict CSP, Swagger UI from jsDelivr; data is generated offline by Python scripts under
generators/andscripts/. - PWA: service worker (service-worker.js) precaches the shell;
releases/**,archive/**,tools/**are explicitly bypassed. - Deep linking: every interactive page persists state in URL hash/query (
#spec=,#op=,#ver=,#left=,#right=,q=,cat=,status=).
2. Mind Map (Mermaid)

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)
- Route:
/(index.html) - Purpose: Entry point; surfaces every model category, a universal search box, stats dashboard, Recents/Favorites, and downloads.
- UI:
- Header with dark-mode toggle, release selector (
#versionSelector), badge. - Quick-nav toolbar linking to every top-level page and each Swagger viewer.
- 9 color-coded model cards with per-category spec / path / op counts.
- Universal Search (
#universalSearch) with autocomplete, advanced filters (prefix, has-tree, has-spec), type filters, results panel. - External docs & downloads gradient blocks (Postman collections, env file).
- Statistics dashboard — pie chart + table (Chart.js) per model.
- Project summary info boxes and stat grid.
- Code Snippet Generator modal (
#codeGenModal) — quick curl/Python/Ansible/JS.
- Header with dark-mode toggle, release selector (
- Data sources: search-index.json (or
releases/<ver>/search-index.json), version-stats.json, per-category_paths_index.json. - Scripts: Fuse.js (CDN), Chart.js (CDN), search.js, recent-favorites.js, index-app.js, hub-search-ops.js.
- Permissions: None — static.
- Notes / TODO: Static "Last Updated: April 25, 2026" string in markup (
#L325-ish); stat counts in cards are static numbers but other figures are hydrated fromversion-stats.json.
3.2 about.html — About / Project Mission
- Route:
/about.html - Purpose: Narrative explanation of the project, capabilities, releases, architecture, contribution and feedback channels.
- UI: Static sections (
#mission,#stats,#capabilities,#releases,#architecture,#engage,#credits), CTA buttons linking to GitHub Issues / CONTRIBUTING / CHANGELOG. - Data sources: Static counts (608 specs, 37,072 paths, etc.) — inferred to be hand-maintained and may drift from version-stats.json.
- Scripts: site-chrome only.
3.3 code-generator.html — API Code Generator
- Route:
/code-generator.html - Purpose: Generate
curl,Python (requests),Ansible,JavaScript (fetch)snippets for any RESTCONF call. - UI: Form (host, method, path, username, password, body) + spec picker (
#specPicker) + path picker (#pathPicker) populated from the active release's search index. "Generate Code", "Clear", "Copy Share Link" buttons. Tabbed output pane with per-language copy buttons. - Data sources: search-index.json and per-spec OpenAPI JSON under
releases/<ver>/swagger-*-model/api/<name>.json. - Scripts: deeplink.js, code-generator.js.
- Deep-link hash:
#ver=&category=&spec=&path=&method=.
3.4 tree-compare.html — YANG Tree Comparison
- Route:
/tree-compare.html - Purpose: Side-by-side diff of two YANG trees (any module × any module).
- UI: Two
<select>s (#module1,#module2), per-side filter boxes (#searchLeft,#searchRight), Compare button, stats bar (total/matched/ added/removed/modified), legend, split-pane viewer, Sync Scroll, Highlight Diffs, Export, "Copy as Text", "Copy Share Link". Dark mode toggle (floating). - Data sources:
releases/<ver>/search-index.json; per-tree HTML/text underreleases/<ver>/yang-trees/. - Scripts: version-label.js, tree-compare.js.
- Deep-link hash:
#left=&right=&ver=. - Persistence:
localStoragekeyiosxe-tree-compare-prefsfor toggle state.
3.5 yang-accountability.html — Module Accountability Report
- Route:
/yang-accountability.html - Purpose: Per-release map of every YANG module → spec / tree / excluded-reason (claims 100% coverage). Search, filter, sort, paginate, export.
- UI: Summary stat grid, Category Summary table, search box, classification + status filter rows, module matrix table (pagination, sortable headers), "Export CSV", "Copy as Text", "Copy Share Link", exclusion-categories explainer.
- Data sources: yang_accountability.json (root, legacy) or
releases/<ver>/yang_accountability.json. - Scripts: version-label.js, deeplink.js, yang-accountability.js.
- Deep-link hash:
#ver=&q=&cat=&status=.
3.6 yang-accountability-compare.html — Cross-Version Matrix
- Route:
/yang-accountability-compare.html - Purpose: Cross-release module presence matrix + API growth table + version-to- version deltas.
- UI: Summary cards per release, growth table (Specs / Paths / Ops / Δ), presence filter (
all,any,all-versions,diff), search filter, CSV export, module matrix with pip markers (spec / tree / absent), deltas section. - Data sources: accountability_compare.json, version-stats.json.
- Scripts: inline (no external module beyond site-chrome).
3.7 telemetry.html — MDT XPath Builder
- Route:
/telemetry.html - Purpose: Compute gRPC dial-out
filter xpathfor any (release, category, module, OpenAPI path) per the formula in MDT_XPATH_SPEC.md:/<prefix>:<path-without-leading-slash>. - UI: Release/category/module pickers, path filter, info card, results table (Method / OpenAPI path / Derived xpath / copy), CSV export, subscription configuration template with Copy.
- Data sources: yang-prefix-map.json (or per-release), per-spec OpenAPI JSON.
- Scripts: version-label.js, telemetry.js.
3.8 exports.html — Postman / Bruno Exports
- Route:
/exports.html - Purpose: Browse and download per-(release, model-category) export shards; pre-built to stay under ~50 MB import limits.
- UI: Release filter, format toggle (All / Postman only / Bruno only), per- release blocks with collection tables, environment-file link, helpful empty state pointing at
scripts/build_release.py. - Data sources: releases/index.json,
releases/<ver>/exports/postman-manifest.json,releases/<ver>/exports/bruno-manifest.json. - Scripts: inline (release iteration + table builder).
3.9 platform-coverage.html — YANG × Platform Matrix
- Route:
/platform-coverage.html - Purpose: Show which IOS XE platforms (Catalyst families, IoT, wireless, etc.) expose each YANG module — derived from NETCONF capability files per release.
- UI: Release dropdown, free-text filter, platform dropdown, "Export CSV", scrollable matrix table with color-coded platform headers (
switching,routing,iot,wireless,other). - Data sources: platform-support-index.json,
releases/<ver>/platform-support.json. - Scripts: assets/js/platform-coverage.js.
- CSP note: Page declares its own CSP (no external hosts).
3.10 yang-trees/index.html — Redirector
- Route:
/yang-trees/ - Purpose: Reads releases/index.json and
window.location.replaces to../releases/<default>/yang-trees/. Pure compatibility shim — legacyhref="yang-trees/"links keep working. - UI: Single message and a manual fallback link.
3.11 yang-trees/mib-trees-index.html
- Same pattern as 3.10, redirects to
releases/<default>/yang-trees/mib-trees-index.html.
3.12 404.html — Not Found
- Route: served for unknown paths by GitHub Pages.
- UI: Static "404", main hub link, color-coded quick-links to all 9 viewers.
- Scripts: sw-register only.
3.13 [swagger-{oper,cfg,native-config,openconfig,ietf,mib,rpc,events,other}-model/index.html]
- Route:
/swagger-<category>-model/index.html— one per category. - Purpose: Swagger UI 5.31.0 viewer over the active release's
releases/<ver>/swagger-<category>-model/api/*.jsonspecs. - UI:
- Dark category header with version pill (
.header-version). - Nav bar linking to all 9 viewer categories + Hub + Trees.
- Sidebar: search box, stats (Specs / Paths / Ops), recursive YANG container tree built by yang-tree-sidebar.js.
- Main: welcome card, download bar ("Download JSON", tree link, MDT panel toggle, "Copy Share Link"), platform badges (
platform-support.js), MDT panel, Swagger UI container.
- Dark category header with version pill (
- Scripts: Swagger UI bundle + standalone-preset (CDN), deeplink.js, yang-tree-sidebar.js, assets/js/platform-support.js,
paths-search.js(per-viewer, present alongside eachindex.html). - Version awareness: Hard-coded
__IOSXE_DEFAULT_VER__and__IOSXE_ALLOWED_VERS__, baked byscripts/patch_viewers_version_aware.py. - Deep-link hash:
#ver=&spec=&op=.
3.14 swagger-native-config-model/capabilities.html
- Sub-page of the native viewer. Per-category capability table (paths, ops, schemas, leafs, lists, choices) sourced from
releases/<ver>/native-capabilities.json. Release picker + filter + counts.
3.15 swagger-native-config-model/native-augment-accountability.html
- Inferred-stale: header says "IOS XE 17.18.1 | Phase 2 Complete", numbers are static (163 augments, 146 with trees, 151 with Swagger). Not wired to the release selector. Marked Needs verification for whether it is still linked from the UI.
3.16 swagger-*-model/index-v2.html (×9)
- Tiny redirect stubs (
<title>Redirecting</title>). Forward to the currentindex.html. Safe to ignore; keep as URL stability shims.
3.17 Per-release tree pages
releases/<ver>/yang-trees/index.html— release-scoped tree browser with a filter box and a card per YANG module that links to<module>.html.releases/<ver>/yang-trees/<module>.html— pre-rendered pyang tree per module (HTML). Hundreds per release.releases/<ver>/yang-trees/mib-trees-index.html— MIB tree index variant.
4. Feature Inventory
Grouped by capability, not by page.
4.1 Multi-release version switching
- What: Single "active release" concept (
26.1.1default) drives every data fetch —?ver=,#ver=,localStorage['iosxe-active-version'], or the parent hub'swindow.__IOSXE_ACTIVE_VERSION__. - Where:
#versionSelectoron hub; injected per-viewer dropdown by assets/js/viewer-enhancements.js; silent inheritance everywhere else. - Implements: version-label.js,
__activeVer()in each Swagger viewer, yang-accountability.js_activeVersion(), code-generator.js, telemetry.js, tree-compare.js, search.jsloadSearchIndexForActiveVersion(). - Data: releases/index.json (default + allow-list).
4.2 Universal search (hub)
- What: Fuse.js fuzzy search across all modules with autocomplete, type filters, advanced filters, sort, related modules.
- Where: Hub
#universalSearch+ autocomplete + results pane. - Implements: search.js (debounced, configurable
SEARCH_CONFIG), hub-search-ops.js (lazy per-category operation-level hits via_paths_index.json). - Data: search-index.json, per-category
releases/<ver>/swagger-<cat>-model/api/_paths_index.json.
4.3 Swagger UI rendering & deep-linking
- What: Each model category is a separately-rendered Swagger UI 5.31.0 viewer. Deep links of the form
#spec=<module>&op=<operationId>&ver=<release>open and expand a specific operation. - Where: All 9
swagger-*-model/index.htmlfiles. - Implements: deeplink.js (parseHash, setSpec, setSpecOp, tryExpandOp, MutationObserver auto-expand, click delegate to capture op IDs).
- Helpers: yang-tree-sidebar.js builds the recursive container tree from each module's
pathList/pathOps.
4.4 Code-generation (curl / Python / Ansible / JS)
- What: Two delivery surfaces — the Quick Snippet modal on the hub (index-app.js wires the form), and the full code-generator.html page which can pre-select a real spec + path and reuse RFC 7951 example bodies.
- Implements: code-generator.js; per-language template generators with shareable URLs.
4.5 MDT XPath authoring
- What: Derive gRPC dial-out
filter xpathfor any operation, copy/share, and emit a subscription config template. - Where: telemetry.html; a compact "MDT XPaths for this module" side card embedded in each Swagger viewer.
- Spec: MDT_XPATH_SPEC.md.
- Implements: telemetry.js.
- Data: yang-prefix-map.json, per-spec OpenAPI files,
releases/<ver>/telemetry-index.json.
4.6 YANG tree side-by-side compare
- What: Pick two modules, render their pyang trees, diff (added / removed / modified), sync-scroll, highlight, export, share.
- Where: tree-compare.html.
- Implements: tree-compare.js.
4.7 Accountability reports
- Single-version: yang-accountability.html (1100+ module matrix, filters, CSV, pagination).
- Cross-version: yang-accountability-compare.html (presence matrix, API growth, deltas).
- Native-augment-specific (legacy/static): swagger-native-config-model/native-augment-accountability.html.
- Data producers (inferred from comments):
scripts/build_accountability_compare.py,scripts/build_version_stats.py.
4.8 Platform coverage matrix
- What: YANG-module × platform-id table per release, derived from NETCONF capability files. Family color coding, CSV export.
- Where: platform-coverage.html.
- Implements: assets/js/platform-coverage.js.
- Per-spec badges: assets/js/platform-support.js reuses the same JSON to render chips inside each viewer.
- Data: platform-support-index.json,
releases/<ver>/platform-support.json.
4.9 Postman / Bruno exports
- What: Pre-built per-(release, category) shards (≤50 MB each) + environment files. Top-level repo also ships the big legacy collections under tools/ (linked from the hub).
- Where: exports.html; hub Downloads section.
- Producer:
scripts/build_release.py(referenced in the empty state). - Manifests:
releases/<ver>/exports/{postman,bruno}-manifest.json.
4.10 Recent & Favorites
- What: LocalStorage-backed recently-viewed list and "starred" modules per user. Star entries persist
op+verso re-opens land on the same operation in the same release. - Implements: recent-favorites.js (storage keys
iosxe-recent-modules,iosxe-favorite-modules). - Where: Hub Recents/Favorites cards.
4.11 Dark mode / theming
- Where: Every page. Two legacy mechanisms unified into one toggle.
- Implements: assets/js/site-chrome.js (
data-themeattribute +body.darkclass +prefers-color-schemefallback).
4.12 PWA / Offline shell
- What: Service worker precaches the static shell, stale-while-revalidates HTML/JS/CSS, bypasses
releases/,archive/,tools/, and all cross-origin. - Implements: service-worker.js (
CACHE_VERSION=v30-…acts as cache kill-switch). - Registrar: assets/js/sw-register.js (loaded on every page).
4.13 SEO + structured data
- Every top-level page has injected
og:,twitter:, JSON-LDWebSite/BreadcrumbList, canonical URL. Injection comment markers<!-- BEGIN seo-meta (managed by scripts/inject_seo_meta.py) -->.
4.14 Share links / "Copy Share Link" buttons
- All interactive pages serialize their current state into URL hash/query and copy it to clipboard via
Copy Share Linkcontrols.
5. User Flows
5.1 First-time landing
- User opens
/. Service worker installs. - index-app.js restores theme, populates release dropdown from releases/index.json, fetches
releases/<active>/search-index.json(fallback: root). - Pie chart + stats hydrate from version-stats.json.
- Recent/Favorites populate from
localStorage.
5.2 Universal search → spec
- User types into
#universalSearch(or presses//Ctrl+K). - search.js debounces, runs Fuse query, renders cards.
- hub-search-ops.js lazily fetches per-category
_paths_index.jsonto surface operation-level matches. - Clicking a result opens
swagger-<cat>-model/index.html#spec=<module>&op=<id>&ver=<ver>. - Viewer's deeplink.js auto-expands the matching operation row.
5.3 Build & share a code snippet
- User opens code-generator.html.
- Picks a spec + path (or types a path manually), sets host/method/body.
- Generated snippets render in 4 language tabs with Copy buttons.
- "Copy Share Link" copies a URL containing
#ver=&category=&spec=&path=&method=.
5.4 Diff two YANG trees
- User opens tree-compare.html (often via "Compare" on a tree page that pre-fills one side).
- Picks left + right modules.
- Stats bar + legend + side-by-side panels update; user toggles Sync Scroll / Highlight Diffs (preferences persisted to
localStorage). - Exports, copies as text, or shares via
#left=&right=&ver=.
5.5 Author an MDT subscription
- User opens telemetry.html. Picks release/category/module.
- Table populates with each OpenAPI path and its derived filter xpath.
- Clicking a row populates the subscription template; Copy or CSV-export.
5.6 Accountability deep dive
- User opens yang-accountability.html — sees the stat grid, category summary, paginated module matrix.
- Searches/filters by classification/status, exports CSV, copies as text, or shares the exact filtered view via hash.
- For cross-release context, jumps to yang-accountability-compare.html.
5.7 Platform coverage check
- User opens platform-coverage.html.
- Picks a release, optionally filters by module substring or specific platform.
- Sees the matrix; exports CSV.
5.8 Bulk download
- User opens exports.html.
- Filters by release + format, downloads shards + environment file.
5.9 Error / empty / loading states
- Loading: Sidebar shows
Loading..., hub stats show—, tree panes show empty-state cards with help text. - Empty: Exports page hides itself and shows "Run
python scripts/build_release.py --version <v>"; capabilities page shows similar guidance. - Network: Service worker stale-while-revalidate; viewer toast helper (
window.__showViewerToast) for spec-load failures (assets/js/viewer-enhancements.js). - CSP block: Hub fallback message replaces chart canvas with text status if Chart.js fails to load (index-app.js
_renderChartFallback). - 404: 404.html with quick links to every viewer.
6. Data / API Dependencies
All "APIs" are static JSON fetched over HTTP — no backend.
| File | Producer (inferred) | Consumed by |
|---|---|---|
| releases/index.json | scripts/build_release.py | every page that switches release |
releases/<ver>/search-index.json (+ root search-index.json fallback) | scripts/generate_search_index.py | search.js, code-generator.js, tree-compare.js |
releases/<ver>/swagger-<cat>-model/api/<name>.json | generators/*.py | Swagger UI, code-generator, telemetry |
releases/<ver>/swagger-<cat>-model/api/_paths_index.json | scripts/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*.py | yang-accountability.js |
| accountability_compare.json | scripts/build_accountability_compare.py | yang-accountability-compare.html |
| version-stats.json | scripts/build_version_stats.py | hub stats, about, version compare |
platform-support-index.json + releases/<ver>/platform-support.json | scripts/build_platform_support.py (inferred) | platform-coverage.js, platform-support.js |
| yang-prefix-map.json + per-release variant | generators (inferred) | telemetry.js |
releases/<ver>/exports/{postman,bruno}-manifest.json | scripts/build_release.py | exports.html |
releases/<ver>/native-capabilities.json | scripts/build_native_capabilities.py | swagger-native-config-model/capabilities.html |
releases/<ver>/telemetry-index.json, telemetry-skipped.json | inferred from filenames; presumed telemetry pipeline | telemetry.js / build inputs |
releases/<ver>/mib-metadata.json, mib-platform-matrix.json | inferred | MIB viewer side cards |
releases/<ver>/path_depth_audit.json, tree_audit.json | inferred QA artifacts | not directly bound to UI |
tools/IOS-XE-RESTCONF-v*.postman_collection.json (and v2 parts) | manual / generators | hub 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:
themeiosxe-active-versioniosxe-recent-modulesiosxe-favorite-modulesiosxe-tree-compare-prefs
URL/hash params recognized:
?ver=,#ver=(every page)#spec=,#op=(Swagger viewers, recent-favorites round-trip)#left=,#right=(tree-compare)#q=,#cat=,#status=(yang-accountability)#ver=&category=&spec=&path=&method=(code-generator)
7. Unknowns & Recommended Follow-up
Items flagged Needs verification or that fell outside this static read:
- Stale static numbers — RESOLVED (2026-06-16). about.html now hydrates its "By the numbers" cards from version-stats.json via about-stats.js (
data-stat-abouthooks), 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) viadata-stat-*hydration. Static markup remains only as no-JS fallbacks. - native-augment-accountability.html — REVIEWED, 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.
- per-spec
paths-search.js— referenced from every Swagger viewer but not read here; assume per-category enhancer mirroringhub-search-ops.js. - 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. index-v2.htmlredirect stubs — KEPT (2026-06-16). The 9swagger-*-model/index-v2.htmlfiles are intentional zero-delay redirect stubs (preserving#hash/?query) that catch old external bookmarks to the legacy-v2filenames. Not in the sitemap, nav, or service-worker precache, so they add no user-facing noise; retained as inbound-link safety nets.- 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. - Telemetry-index data flow —
releases/<ver>/telemetry-index.jsonandtelemetry-skipped.jsonexist on disk but the consumption path inside telemetry.js was not traced end-to-end here. - Search index drift — RESOLVED (2026-06-16). search.js prefers
releases/<ver>/search-index.jsonbut falls back to the root file;scripts/generate_search_index.pyrebuilds the rootsearch-index.jsonfromreleases/<default_version>/on every run, so the fallback always matches the default release (no mismatch for users who land mid-deploy). hub-search-ops.jsbakedTARGET_VER = '26.1.1'as a fallback — RESOLVED (2026-06-16).scripts/patch_viewers_version_aware.pynow re-stamps the constant fromreleases/index.json'sdefault, so it advances automatically with the default release.- MIB-specific UI — references to
mib-metadata.jsonandmib-platform-matrix.jsonsuggest extra side cards in the MIB viewer not fully captured here. - Documentation drift —
PROJECT_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.mdall coexist at the root. Confirm which are authoritative.
8. Cleanup / Consolidation Suggestions
Where the audit found duplication, drift, or unfinished surface area.
- 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.jsonviadata-stat-*hooks (about-stats.js / index-app.js). The "April 25, 2026" / "608 specs" drift is resolved. - Retire
index-v2.htmlstubs — KEPT (2026-06-16). Documented above as intentional inbound-link redirect safety nets; not deleted. - Consider moving
native-augment-accountability.htmlintoarchive/— 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. - 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 inassets/js/would prevent subtle behavioural drift. (2026-06-16: hardened against the concrete drift risks rather than forcing a sweeping cross-page refactor — (a) thelocalStoragekey-capitalisation bug incode-generator.js(iosxeActiveVersionvs canonicaliosxe-active-version) is fixed; (b)hub-search-ops.js's bakedTARGET_VERfallback is now re-stamped fromreleases/index.jsonbyscripts/patch_viewers_version_aware.pyso it can no longer go stale when the default advances; (c) that patch script'sbuild_helperwas itself stale — it would have re-introduced a removed default-versionapi/short-circuit (404s) and a space-formCisco IOS XEtitle regex that no longer matches the hyphenatedCisco IOS-XEviewer titles — now corrected so the generator is idempotent against the live viewers; (d)yang-accountability.js's_activeVersion()was missing thelocalStoragefallback tier, so a direct visit toyang-accountability.htmlafter picking a non-default release on the hub silently fell back to the root default — normalised to the canonical?ver=→#ver=→ hub global →localStorageprecedence used bycode-generator.js/tree-compare.js.) - Promote per-viewer inline CSS into shared stylesheets.
tree-compare.html,platform-coverage.html,exports.html, andyang-accountability-compare.htmleach carry hundreds of lines of inline CSS that duplicateassets/css/site.css. - Document the data/build pipeline. A simple Mermaid diagram showing
generators/*.py → releases/<ver>/**andscripts/build_*.py → root JSON indexeswould let new contributors trace any number on the site back to the script that produced it. - 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.
- 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
