27 Anatomy.Reading - Varietyz/Disciplined-AI-Software-Development GitHub Wiki

Anatomy — Bane's Lab

The anatomy page publishes the source of this site as it is on disk, every workspace member parsed on every build. It shows every folder and file, its statistics, its syntax tree, its definitions and their calls, and the problems the parser found.

Canonical: https://banes-lab.com/anatomy

The Anatomy

Source trees, walks and definitions

Reading

This page is derived

This section covers what the rest of the page is made of. This tab is the one part of the page I wrote, and everything else, every panel, every number and the whole tree tab, comes out of the build, which parsed every source file of every published tree, built the call graph, ran the diagnoses and laid every syntax node on a grid. The page renders that output by shape, as described in derived state on the methodology page. The totals across every tree, then each tree on its own line, are shown in the measurements, and the edges between the site's containers in A1·b the import graph.

What the reader is seeing

A page that describes a codebase is prose about the codebase, and prose has no mechanism that makes it wrong when the codebase changes. An architecture page names three containers and the tree holds four, the fourth added the week after the page was written, and every reader of the page reasons about a tree that no longer exists. A description written by hand is a second copy of the tree, and a second copy disagrees with the first from the day one of them moves.

For this reason a page about a system is derived from the system in the same build that renders it, since otherwise it is only a claim. The derivation is published rather than a description of it, so the page can only be as wrong as the build that produced it. In practice, every number on this page is a measurement taken at build time. The tree tab shows the source as it sits on disk, and each file there shows its walk, its definitions and its source. Where a number here disagrees with the tree on disk, the tree is right and this page is stale.

To check this, pick any file on the tree tab and open the same file on disk. The definitions, the line count and the imports on the page match the file, or the page was not derived from it. The page describes the source on its trees and nothing beyond them. Vendor rule text, backups, binaries and rendered media are listed by name and not shown.

The measurements are the same ones the quality tooling reads, namely how many definitions the parser found, how many call edges it resolved between them, how many calls it could not resolve, and the diagnoses it ran. A call the parser cannot resolve is counted and never guessed, so the resolution rate is a measured fraction and not a hope.

The import graph folds every import a file makes to the container that owns the imported file, so an edge is a container reaching into another container, counted. Which way those edges may run is described in the direction axis on the architecture page, and this graph shows which way they do run.

A1·a the measurements

Files 5576

Lines of code 1404357

Definitions 35874

Exported 18296

Callable 11548

Call edges 11360

Unresolved calls 2362

Resolution rate 0.83

Highest in-degree 210

Highest out-degree 53

isolated flow 26955

leaf flow 3629

entry flow 2722

relay flow 2568

Findings no anomalies

Bane's Lab Site 554 files, 5211 definitions

GovLab Extension Host 229 files, 3671 definitions

Bane's Lab Build Scripts 325 files, 3944 definitions

Bane's Lab Content 97 files, 1175 definitions

Coordination Surface 391 files, 5195 definitions

Bane's Lab Deploy 46 files, 780 definitions

Bane's Lab Server 59 files, 998 definitions

Bane's Lab Social Share 643 files, 794 definitions

Codebase Testing 1587 files, 183 definitions

GovLab Constants 12 files, 85 definitions

GovLab Context 291 files, 1865 definitions

GovLab Docs 234 files, 3166 definitions

GovLab Patterns 148 files, 1678 definitions

GovLab Pipeline 37 files, 348 definitions

GovLab Quality 597 files, 5103 definitions

GovLab Stats 72 files, 496 definitions

Argv Contract 14 files, 66 definitions

Canonical Write 11 files, 44 definitions

Code Parse 69 files, 173 definitions

Content Fingerprint 13 files, 41 definitions

GovLab Paths 15 files, 45 definitions

Project Scripts 96 files, 696 definitions

Secrets 28 files, 117 definitions

Configs 8 files, 0 definitions

A1·b the import graph

flowchart LR
    n_configuration["configuration"]
    n_core["core"]
    n_domain["domain"]
    n_presentation["presentation"]
    n_runtime["runtime"]
    n_types["types"]
    n_configuration -- 195 imports --> n_core
    n_configuration -- 28 imports --> n_domain
    n_configuration -- 111 imports --> n_types
    n_core -- 65 imports --> n_configuration
    n_core -- 121 imports --> n_types
    n_domain -- 109 imports --> n_configuration
    n_domain -- 58 imports --> n_core
    n_domain -- 95 imports --> n_types
    n_presentation -- 246 imports --> n_configuration
    n_presentation -- 205 imports --> n_core
    n_presentation -- 37 imports --> n_domain
    n_presentation -- 122 imports --> n_types
    n_runtime -- 1 import --> n_configuration
    n_runtime -- 8 imports --> n_core
    n_runtime -- 1 import --> n_domain
    n_runtime -- 7 imports --> n_presentation
    n_runtime -- 2 imports --> n_types

The four parts, measured

The four parts named in a system is a graph on the architecture page are each measured here. The components are the definitions, the relations are the call edges between them, the schema is the set of diagnoses the parser can run, and the propagation is the fan-in every definition carries. The shape of the whole is shown in B1·a structure, and the order in which it runs in B1·b logical flow.

Components, relations, schema, propagation

Every definition carries an in-degree and an out-degree, and the two decide its flow class. An entry has callees and no callers, a leaf has callers and no callees, a relay has both, and an isolated definition has neither. The flow classes are counted per file, per folder and for the whole tree, so a container that is mostly leaves and a container that is mostly relays read differently before a single file is opened.

The split between the two charts is the one described in definitions own what, code owns how. The structure is what exists and how it is arranged, and the logical flow is what calls what when it runs. Both are read from the same syntax trees, so they cannot disagree with each other, only with a tree that has moved since the build.

B1·a structure

flowchart LR
    n_root["root · 554 files"]
    n_configuration["configuration · 167 files"]
    n_core["core · 156 files"]
    n_domain["domain · 43 files"]
    n_presentation["presentation · 139 files"]
    n_runtime["runtime · 2 files"]
    n_types["types · 40 files"]
    n_root --> n_configuration
    n_root --> n_core
    n_root --> n_domain
    n_root --> n_presentation
    n_root --> n_runtime
    n_root --> n_types
    n_configuration_constants["constants · 38 files · infrastructure"]
    n_configuration_icons["icons · 28 files · infrastructure"]
    n_configuration_strings["strings · 101 files · product"]
    n_configuration --> n_configuration_constants
    n_configuration --> n_configuration_icons
    n_configuration --> n_configuration_strings
    n_core_analyzers["analyzers · 4 files · processing"]
    n_core_assets["assets · 5 files · infrastructure"]
    n_core_buses["buses · 1 file · infrastructure"]
    n_core_converters["converters · 11 files · processing"]
    n_core_factories["factories · 2 files · infrastructure"]
    n_core_generated["generated · 74 files"]
    n_core_ids["ids · 33 files · infrastructure"]
    n_core_loaders["loaders · 5 files · infrastructure"]
    n_core_matchers["matchers · 3 files · processing"]
    n_core_normalizers["normalizers · 3 files · processing"]
    n_core_observers["observers · 5 files · application"]
    n_core_predicates["predicates · 4 files · infrastructure"]
    n_core_registries["registries · 3 files · infrastructure"]
    n_core_reporters["reporters · 1 file · operations"]
    n_core_resolvers["resolvers · 1 file · infrastructure"]
    n_core_stores["stores · 1 file · application"]
    n_core --> n_core_analyzers
    n_core --> n_core_assets
    n_core --> n_core_buses
    n_core --> n_core_converters
    n_core --> n_core_factories
    n_core --> n_core_generated
    n_core --> n_core_ids
    n_core --> n_core_loaders
    n_core --> n_core_matchers
    n_core --> n_core_normalizers
    n_core --> n_core_observers
    n_core --> n_core_predicates
    n_core --> n_core_registries
    n_core --> n_core_reporters
    n_core --> n_core_resolvers
    n_core --> n_core_stores
    n_domain_converters["converters · 37 files · processing"]
    n_domain_loaders["loaders · 4 files · infrastructure"]
    n_domain_registries["registries · 2 files · infrastructure"]
    n_domain --> n_domain_converters
    n_domain --> n_domain_loaders
    n_domain --> n_domain_registries
    n_presentation_components["components · 21 files · product"]
    n_presentation_effects["effects · 5 files · product"]
    n_presentation_generated["generated · 1 file"]
    n_presentation_records["records · 13 files · domain"]
    n_presentation_renderers["renderers · 33 files · product"]
    n_presentation_styles["styles · 36 files · product"]
    n_presentation_timers["timers · 1 file · runtime"]
    n_presentation_tokens["tokens · 9 files · product"]
    n_presentation_views["views · 12 files · product"]
    n_presentation_widgets["widgets · 8 files · product"]
    n_presentation --> n_presentation_components
    n_presentation --> n_presentation_effects
    n_presentation --> n_presentation_generated
    n_presentation --> n_presentation_records
    n_presentation --> n_presentation_renderers
    n_presentation --> n_presentation_styles
    n_presentation --> n_presentation_timers
    n_presentation --> n_presentation_tokens
    n_presentation --> n_presentation_views
    n_presentation --> n_presentation_widgets
    n_runtime_coordinators["coordinators · 1 file · application"]
    n_runtime_entrypoints["entrypoints · 1 file · runtime"]
    n_runtime --> n_runtime_coordinators
    n_runtime --> n_runtime_entrypoints

B1·b logical flow

---
config:
  layout: elk
---
flowchart TD
    accTitle: anatomy flow: anatomy
    accDescr: entry to exit call flow with branches, hooks, and teardown
    aimOf_4f14c0["aimOf"]
    anatomyRecord_777bfa["anatomyRecord"]
    anchor_3f2242["anchor"](/Varietyz/Disciplined-AI-Software-Development/wiki/"anchor")
    appendChildren_465e2c["appendChildren"]
    applyAttributes_186f0e["applyAttributes"]
    attachHome_74edef["attachHome"]
    attachLearningMap_2b8293["attachLearningMap"]
    attachPrerequisites_3c28b3["attachPrerequisites"]
    attachSearchToggle_5b2542["attachSearchToggle"]
    backdrop_147b1f["backdrop"](/Varietyz/Disciplined-AI-Software-Development/wiki/"backdrop")
    bar_5663b1["bar"](/Varietyz/Disciplined-AI-Software-Development/wiki/"bar")
    bindRail_22b93d["bindRail"]
    bracketedAt_7864f9["bracketedAt"]
    button_41ff9c["button"](/Varietyz/Disciplined-AI-Software-Development/wiki/"button")
    cameraFit_2ac18b["cameraFit"]
    cancel_1980a6["cancel"]
    cellOf_754424["cellOf"]
    centredTop_59bb46["centredTop"]
    chapterOf_3ef030["chapterOf"]
    chunkKeyOf_1df68b["chunkKeyOf"]
    citedPanelOf_2a178b["citedPanelOf"]
    clearChildren_6214ed["clearChildren"]
    close_6094d4["close"]
    closeButton_7f249e["closeButton"](/Varietyz/Disciplined-AI-Software-Development/wiki/"closeButton")
    container_6778f7["container"](/Varietyz/Disciplined-AI-Software-Development/wiki/"container")
    copyrightText_5c1111["copyrightText"]
    countUp_24a966["countUp"]
    createAnchorLink_1dad9f["createAnchorLink"]
    createBackdrop_2462c7["createBackdrop"]
    createChapterPanel_5a10f3["createChapterPanel"]
    createCloseButton_3a4300["createCloseButton"]
    createDialog_2c0d08["createDialog"]
    createElement_66e0a5["createElement"]
    createFilterBox_2f3a5a["createFilterBox"]
    createLink_1ceb1c["createLink"]
    declarationOf_460c7b["declarationOf"]
    declarations_1e73ce["declarations"](/Varietyz/Disciplined-AI-Software-Development/wiki/"declarations")
    declareStyle_eca53a["declareStyle"]
    details_768a94["details"](/Varietyz/Disciplined-AI-Software-Development/wiki/"details")
    document_2367c9["document"](/Varietyz/Disciplined-AI-Software-Development/wiki/"document")
    ease_4ba3ac["ease"]
    easeOut_6a60fc["easeOut"]
    edgeNode_577cb7["edgeNode"]
    element_52d001["element"](/Varietyz/Disciplined-AI-Software-Development/wiki/"element")
    emitEvent_5872bb["emitEvent"]
    entryY_1248a9["entryY"]
    event_7e559a["event"](/Varietyz/Disciplined-AI-Software-Development/wiki/"event")
    existing_52546b["existing"](/Varietyz/Disciplined-AI-Software-Development/wiki/"existing")
    expand_515dea["expand"]
    fetchPayload_25514b["fetchPayload"]
    field_7e6091["field"](/Varietyz/Disciplined-AI-Software-Development/wiki/"field")
    fragmentOf_4aa345["fragmentOf"]
    framedOf_776b5b["framedOf"]
    geometry_1cfe8f["geometry"](/Varietyz/Disciplined-AI-Software-Development/wiki/"geometry")
    glideBack_3ecd34["glideBack"]
    graphRelations_4eabe1["graphRelations"]
    held_22dd2c["held"](/Varietyz/Disciplined-AI-Software-Development/wiki/"held")
    hide_3be2ab["hide"]
    iconButton_95a2eb["iconButton"]
    input_7e99c8["input"](/Varietyz/Disciplined-AI-Software-Development/wiki/"input")
    isBox_b89abf["isBox"]
    isDashed_536c88["isDashed"]
    isGeometry_284176["isGeometry"]
    isNamed_1abe41["isNamed"]
    isRecord_786bbe["isRecord"]
    isStaticRender_1b5a95["isStaticRender"]
    item_22ddf7["item"](/Varietyz/Disciplined-AI-Software-Development/wiki/"item")
    jumpTo_450a97["jumpTo"]
    labeledRow_1bc7a4["labeledRow"]
    layoutLearning_1ce1d7["layoutLearning"]
    light_32ae7f["light"]
    lightRequired_677481["lightRequired"]
    link_22df6e["link"](/Varietyz/Disciplined-AI-Software-Development/wiki/"link")
    listeners_777c1d["listeners"](/Varietyz/Disciplined-AI-Software-Development/wiki/"listeners")
    listPages_404b8d["listPages"]
    loadContent_697f3a["loadContent"]
    LOADERS_817ff1["LOADERS"](/Varietyz/Disciplined-AI-Software-Development/wiki/"LOADERS")
    loadPayload_48806f["loadPayload"]
    loadReference_577c63["loadReference"]
    loadReferences_525842["loadReferences"]
    main_22dfd8["main"](/Varietyz/Disciplined-AI-Software-Development/wiki/"main")
    markActive_4eb13b["markActive"]
    MARKS_7c85e8["MARKS"](/Varietyz/Disciplined-AI-Software-Development/wiki/"MARKS")
    marksOf_749574["marksOf"]
    measurable_6242e0["measurable"]
    metaRow_6184e7["metaRow"]
    meter_7edd4a["meter"](/Varietyz/Disciplined-AI-Software-Development/wiki/"meter")
    midpoint_4189b3["midpoint"]
    missingElement_37255f["missingElement"]
    mountCite_3afc0d["mountCite"]
    mountCopyright_521dc4["mountCopyright"]
    mountHome_6d9756["mountHome"]
    mountMenu_5267ed["mountMenu"]
    mountOverlay_7eb685["mountOverlay"]
    n1038_18d5ef["hook mouseover"]
    n1042_354d15{"ternary"}
    n1054_43f9b0["hook addEventListener"]
    n1058_16cd0d{"if"}
    n1091_18d5f0["hook mouseout"]
    n1143_18d5f4["hook focusin"]
    n1155_103975["targetOf"](/Varietyz/Disciplined-AI-Software-Development/wiki/"targetOf")
    n1194_18d5f4["hook focusout"]
    n1203_6a5187["open"]
    n1207_1039af["loadRecords"](/Varietyz/Disciplined-AI-Software-Development/wiki/"loadRecords")
    n1301_ba0a41["hook click"]
    n1419_2e1c3d["unsubscribe"](/Varietyz/Disciplined-AI-Software-Development/wiki/"unsubscribe")
    n1441_6e6f3e["dispose"](/Varietyz/Disciplined-AI-Software-Development/wiki/"dispose")
    n1442_2e1c3e["search"](/Varietyz/Disciplined-AI-Software-Development/wiki/"search")
    n1577_354d2b["remove"](/Varietyz/Disciplined-AI-Software-Development/wiki/"remove")
    n1666_300144["load"](/Varietyz/Disciplined-AI-Software-Development/wiki/"load")
    n2038_405c04["overlay"](/Varietyz/Disciplined-AI-Software-Development/wiki/"overlay")
    n217_30489f["textContent"]
    n2351_1042c3["loadGraph"](/Varietyz/Disciplined-AI-Software-Development/wiki/"loadGraph")
    n2425_405c15["hook keydown"]
    n2621_234fbc["value"]
    n3147_404fe1["disarm"](/Varietyz/Disciplined-AI-Software-Development/wiki/"disarm")
    n3383_12497d["lit"]
    n3721_16ce43["hook scroll"]
    n3787_16ce44["hook resize"]
    n4620_124a15["hook visibilitychange"]
    n504_2188db["onQuery"](/Varietyz/Disciplined-AI-Software-Development/wiki/"onQuery")
    n6407_75dbbd["detach"](/Varietyz/Disciplined-AI-Software-Development/wiki/"detach")
    n649_615175["listener"](/Varietyz/Disciplined-AI-Software-Development/wiki/"listener")
    n687_5a4974["className"]
    n7150_405213["panel"](/Varietyz/Disciplined-AI-Software-Development/wiki/"panel")
    n847_2abee5["nonce"]
    node_22e09f["node"](/Varietyz/Disciplined-AI-Software-Development/wiki/"node")
    nodes_7ef49a["nodes"](/Varietyz/Disciplined-AI-Software-Development/wiki/"nodes")
    nonceOf_6da68b["nonceOf"]
    numberAt_6e4b0e["numberAt"]
    observeCounts_4d0a7a["observeCounts"]
    observer_5badff["observer"](/Varietyz/Disciplined-AI-Software-Development/wiki/"observer")
    observeRail_1d1679["observeRail"]
    onSearchPage_4c169e["onSearchPage"]
    open_22e130["open"](/Varietyz/Disciplined-AI-Software-Development/wiki/"open")
    open_2dfad1["open"]
    openButton_17f1f3["openButton"](/Varietyz/Disciplined-AI-Software-Development/wiki/"openButton")
    openSheet_3705e2["openSheet"]
    paceAt_81f08c["paceAt"]
    pageFromPath_2db7a5["pageFromPath"]
    pagePath_6a23cf["pagePath"]
    pages_7f112a["pages"](/Varietyz/Disciplined-AI-Software-Development/wiki/"pages")
    panelsOf_71a107["panelsOf"]
    parent_613c92["parent"](/Varietyz/Disciplined-AI-Software-Development/wiki/"parent")
    pathOnly_51b45b["pathOnly"]
    pause_53df21["pause"]
    payloadOfHref_41a2d4["payloadOfHref"]
    payloadPath_24424e["payloadPath"]
    performance_77d011["performance"](/Varietyz/Disciplined-AI-Software-Development/wiki/"performance")
    pixelsOfLength_15d356["pixelsOfLength"]
    placedOf_7cbf55["placedOf"]
    placeStops_1faa57["placeStops"]
    plainMarkdown_6d94a3["plainMarkdown"]
    play_300633["play"]
    principleOf_40a4f5["principleOf"]
    progress_34f224["progress"]
    queryPath_1faaaf["queryPath"]
    queryValue_fa617a["queryValue"]
    rail_22e296["rail"](/Varietyz/Disciplined-AI-Software-Development/wiki/"rail")
    railMeter_a4f1a1["railMeter"]
    reportFailure_67cb78["reportFailure"]
    requestResults_10d1bf["requestResults"]
    response_32345c["response"](/Varietyz/Disciplined-AI-Software-Development/wiki/"response")
    reveal_162fc2["reveal"]
    root_22e2d2["root"](/Varietyz/Disciplined-AI-Software-Development/wiki/"root")
    routeMap_11e87d["routeMap"]
    samplesOf_1544f7["samplesOf"]
    scroller_226541["scroller"]
    scrollToId_3385d5["scrollToId"]
    sectionsOf_1e21c4["sectionsOf"]
    segmentsOf_16cbe6["segmentsOf"]
    settle_2bce80["settle"]
    settleAfter_7a0574["settleAfter"]
    shell_7f4b43["shell"](/Varietyz/Disciplined-AI-Software-Development/wiki/"shell")
    shiftBlock_640182["shiftBlock"]
    shortestOf_622bda["shortestOf"]
    showButtons_697b49["showButtons"]
    showField_c9dcae["showField"]
    sideFor_451ea2["sideFor"]
    sizes_7f4c28["sizes"](/Varietyz/Disciplined-AI-Software-Development/wiki/"sizes")
    spansOf_325ee6["spansOf"]
    specOf_3f76de["specOf"]
    style_7f522d["style"](/Varietyz/Disciplined-AI-Software-Development/wiki/"style")
    subscribeEvent_3e8bde["subscribeEvent"]
    tabFromPath_4562e8["tabFromPath"]
    target_6a913c["target"](/Varietyz/Disciplined-AI-Software-Development/wiki/"target")
    teardown_980b37["teardown"]
    TOOLTIPRELATIONS_51898b["TOOLTIP_RELATIONS"](/Varietyz/Disciplined-AI-Software-Development/wiki/"TOOLTIP_RELATIONS")
    touchTargetOf_410c9f["touchTargetOf"]
    travel_7108f0["travel"]
    ts_423ccd["anatomy"]
    viewOf_4a8ab7["viewOf"]
    widestOf_45d12d["widestOf"]
    window_721f3d["window"](/Varietyz/Disciplined-AI-Software-Development/wiki/"window")
    wire_780a91["wire"]
    z_more["plus 152 more"]
    aimOf_4f14c0 --> n1042_354d15
    anatomyRecord_777bfa --> n1042_354d15
    anatomyRecord_777bfa --> n1058_16cd0d
    anatomyRecord_777bfa --> n1155_103975
    anatomyRecord_777bfa --> n1207_1039af
    appendChildren_465e2c -->|append| parent_613c92
    applyAttributes_186f0e -->|setAttribute| element_52d001
    attachHome_74edef --> n1441_6e6f3e
    attachHome_74edef --> observeCounts_4d0a7a
    attachHome_74edef --> observeRail_1d1679
    attachLearningMap_2b8293 --> aimOf_4f14c0
    attachLearningMap_2b8293 --> cameraFit_2ac18b
    attachLearningMap_2b8293 -->|addEventListener| document_2367c9
    attachLearningMap_2b8293 -->|removeEventListener| document_2367c9
    attachLearningMap_2b8293 --> ease_4ba3ac
    attachLearningMap_2b8293 --> framedOf_776b5b
    attachLearningMap_2b8293 -->|getPointAtLength| geometry_1cfe8f
    attachLearningMap_2b8293 -->|getTotalLength| geometry_1cfe8f
    attachLearningMap_2b8293 --> glideBack_3ecd34
    attachLearningMap_2b8293 --> light_32ae7f
    attachLearningMap_2b8293 --> marksOf_749574
    attachLearningMap_2b8293 --> n1058_16cd0d
    attachLearningMap_2b8293 -.->|writes| n3383_12497d
    attachLearningMap_2b8293 ==>|visibilitychange| n4620_124a15
    attachLearningMap_2b8293 --> numberAt_6e4b0e
    attachLearningMap_2b8293 -->|disconnect| observer_5badff
    attachLearningMap_2b8293 -->|observe| observer_5badff
    attachLearningMap_2b8293 --> paceAt_81f08c
    attachLearningMap_2b8293 --> pause_53df21
    attachLearningMap_2b8293 -->|now| performance_77d011
    attachLearningMap_2b8293 --> play_300633
    attachLearningMap_2b8293 --> settle_2bce80
    attachLearningMap_2b8293 --> spansOf_325ee6
    attachLearningMap_2b8293 --> touchTargetOf_410c9f
    attachLearningMap_2b8293 --> widestOf_45d12d
    attachPrerequisites_3c28b3 --> hide_3be2ab
    attachPrerequisites_3c28b3 --> lightRequired_677481
    attachPrerequisites_3c28b3 ==>|addEventListener| n1054_43f9b0
    attachPrerequisites_3c28b3 --> n6407_75dbbd
    attachPrerequisites_3c28b3 -->|addEventListener| target_6a913c
    attachPrerequisites_3c28b3 -->|removeEventListener| target_6a913c
    attachSearchToggle_5b2542 -->|replaceChildren| bar_5663b1
    attachSearchToggle_5b2542 --> cancel_1980a6
    attachSearchToggle_5b2542 -->|addEventListener| closeButton_7f249e
    attachSearchToggle_5b2542 --> createFilterBox_2f3a5a
    attachSearchToggle_5b2542 -->|addEventListener| field_7e6091
    attachSearchToggle_5b2542 -->|focus| field_7e6091
    attachSearchToggle_5b2542 --> iconButton_95a2eb
    attachSearchToggle_5b2542 ==>|addEventListener| n1054_43f9b0
    attachSearchToggle_5b2542 --> n1058_16cd0d
    attachSearchToggle_5b2542 ==>|click| n1301_ba0a41
    attachSearchToggle_5b2542 --> n1419_2e1c3d
    attachSearchToggle_5b2542 -.->|writes| n2621_234fbc
    attachSearchToggle_5b2542 -->|addEventListener| openButton_17f1f3
    attachSearchToggle_5b2542 --> queryValue_fa617a
    attachSearchToggle_5b2542 --> requestResults_10d1bf
    attachSearchToggle_5b2542 --> showButtons_697b49
    attachSearchToggle_5b2542 --> showField_c9dcae
    attachSearchToggle_5b2542 --> subscribeEvent_3e8bde
    bindRail_22b93d -->|addEventListener| main_22dfd8
    bindRail_22b93d -->|removeEventListener| main_22dfd8
    bindRail_22b93d -->|progress| meter_7edd4a
    bindRail_22b93d -->|refresh| meter_7edd4a
    bindRail_22b93d --> n1042_354d15
    bindRail_22b93d --> n1058_16cd0d
    bindRail_22b93d ==>|scroll| n3721_16ce43
    bindRail_22b93d ==>|resize| n3787_16ce44
    bindRail_22b93d -->|disconnect| sizes_7f4c28
    bindRail_22b93d -->|observe| sizes_7f4c28
    bindRail_22b93d -->|addEventListener| window_721f3d
    bindRail_22b93d -->|removeEventListener| window_721f3d
    bracketedAt_7864f9 --> n1042_354d15
    bracketedAt_7864f9 --> n1058_16cd0d
    cameraFit_2ac18b --> n1042_354d15
    cameraFit_2ac18b --> n1058_16cd0d
    cameraFit_2ac18b --> shortestOf_622bda
    cameraFit_2ac18b --> widestOf_45d12d
    cancel_1980a6 --> n1058_16cd0d
    cancel_1980a6 --> n3147_404fe1
    cellOf_754424 --> n1058_16cd0d
    centredTop_59bb46 -->|getBoundingClientRect| main_22dfd8
    centredTop_59bb46 -->|getBoundingClientRect| target_6a913c
    chapterOf_3ef030 --> n1042_354d15
    chapterOf_3ef030 --> n1058_16cd0d
    chapterOf_3ef030 --> plainMarkdown_6d94a3
    chapterOf_3ef030 --> principleOf_40a4f5
    chapterOf_3ef030 --> sectionsOf_1e21c4
    chunkKeyOf_1df68b --> n1042_354d15
    chunkKeyOf_1df68b --> n1058_16cd0d
    citedPanelOf_2a178b -->|getElementById| document_2367c9
    citedPanelOf_2a178b -->|getAttribute| link_22df6e
    citedPanelOf_2a178b --> n1042_354d15
    citedPanelOf_2a178b -->|closest| node_22e09f
    clearChildren_6214ed -->|replaceChildren| parent_613c92
    close_6094d4 -->|removeEventListener| document_2367c9
    close_6094d4 -.->|remove| n1577_354d2b
    close_6094d4 --> teardown_980b37
    countUp_24a966 --> easeOut_6a60fc
    countUp_24a966 --> n1058_16cd0d
    countUp_24a966 -.->|writes| n217_30489f
    countUp_24a966 -->|now| performance_77d011
    createAnchorLink_1dad9f --> createElement_66e0a5
    createAnchorLink_1dad9f -->|preventDefault| event_7e559a
    createAnchorLink_1dad9f --> jumpTo_450a97
    createAnchorLink_1dad9f -->|addEventListener| link_22df6e
    createAnchorLink_1dad9f ==>|click| n1301_ba0a41
    createAnchorLink_1dad9f --> specOf_3f76de
    createBackdrop_2462c7 -->|addEventListener| backdrop_147b1f
    createBackdrop_2462c7 --> createElement_66e0a5
    createBackdrop_2462c7 --> emitEvent_5872bb
    createBackdrop_2462c7 --> n1058_16cd0d
    createBackdrop_2462c7 ==>|click| n1301_ba0a41
    createChapterPanel_5a10f3 --> labeledRow_1bc7a4
    createChapterPanel_5a10f3 --> metaRow_6184e7
    createChapterPanel_5a10f3 --> n1042_354d15
    createCloseButton_3a4300 -->|addEventListener| button_41ff9c
    createCloseButton_3a4300 --> createElement_66e0a5
    createCloseButton_3a4300 --> emitEvent_5872bb
    createCloseButton_3a4300 ==>|click| n1301_ba0a41
    createDialog_2c0d08 --> createCloseButton_3a4300
    createDialog_2c0d08 --> createElement_66e0a5
    createElement_66e0a5 --> appendChildren_465e2c
    createElement_66e0a5 --> applyAttributes_186f0e
    createElement_66e0a5 -->|createElement| document_2367c9
    createElement_66e0a5 --> n1058_16cd0d
    createElement_66e0a5 -.->|writes| n217_30489f
    createElement_66e0a5 -.->|writes| n687_5a4974
    createFilterBox_2f3a5a --> createElement_66e0a5
    createFilterBox_2f3a5a -->|addEventListener| input_7e99c8
    createFilterBox_2f3a5a ==>|addEventListener| n1054_43f9b0
    createFilterBox_2f3a5a --> n504_2188db
    createLink_1ceb1c --> createAnchorLink_1dad9f
    createLink_1ceb1c --> n1058_16cd0d
    createLink_1ceb1c --> pageFromPath_2db7a5
    declarationOf_460c7b -->|get| declarations_1e73ce
    declarationOf_460c7b -->|set| declarations_1e73ce
    declarationOf_460c7b --> n1058_16cd0d
    declarationOf_460c7b -->|insertRule| open_22e130
    declarationOf_460c7b --> openSheet_3705e2
    declareStyle_eca53a --> declarationOf_460c7b
    edgeNode_577cb7 --> createLink_1ceb1c
    edgeNode_577cb7 --> n1042_354d15
    emitEvent_5872bb -->|get| listeners_777c1d
    emitEvent_5872bb --> n649_615175
    entryY_1248a9 --> n1042_354d15
    entryY_1248a9 --> n1058_16cd0d
    expand_515dea -->|dispatchEvent| details_768a94
    expand_515dea --> n1058_16cd0d
    expand_515dea -.->|writes| n1203_6a5187
    fetchPayload_25514b --> n1058_16cd0d
    fetchPayload_25514b --> reportFailure_67cb78
    fetchPayload_25514b -->|json| response_32345c
    fragmentOf_4aa345 --> n1042_354d15
    framedOf_776b5b --> isGeometry_284176
    framedOf_776b5b --> isRecord_786bbe
    framedOf_776b5b --> measurable_6242e0
    framedOf_776b5b --> n1042_354d15
    framedOf_776b5b --> n1058_16cd0d
    glideBack_3ecd34 --> ease_4ba3ac
    glideBack_3ecd34 --> n1058_16cd0d
    graphRelations_4eabe1 --> chunkKeyOf_1df68b
    graphRelations_4eabe1 --> n1042_354d15
    graphRelations_4eabe1 --> n2351_1042c3
    graphRelations_4eabe1 -->|has| TOOLTIPRELATIONS_51898b
    hide_3be2ab --> cancel_1980a6
    hide_3be2ab --> clearChildren_6214ed
    hide_3be2ab --> lightRequired_677481
    hide_3be2ab -.->|remove| n1577_354d2b
    iconButton_95a2eb --> createElement_66e0a5
    isBox_b89abf --> isRecord_786bbe
    isDashed_536c88 --> isRecord_786bbe
    isGeometry_284176 --> isRecord_786bbe
    jumpTo_450a97 --> scrollToId_3385d5
    labeledRow_1bc7a4 --> createElement_66e0a5
    layoutLearning_1ce1d7 --> cellOf_754424
    layoutLearning_1ce1d7 --> entryY_1248a9
    layoutLearning_1ce1d7 --> placeStops_1faa57
    layoutLearning_1ce1d7 --> shiftBlock_640182
    layoutLearning_1ce1d7 --> sideFor_451ea2
    light_32ae7f --> n1058_16cd0d
    light_32ae7f -.->|writes| n3383_12497d
    lightRequired_677481 -->|get| nodes_7ef49a
    listPages_404b8d -->|all| pages_7f112a
    loadContent_697f3a --> anatomyRecord_777bfa
    loadContent_697f3a --> chapterOf_3ef030
    loadContent_697f3a --> fragmentOf_4aa345
    loadContent_697f3a --> loadPayload_48806f
    loadContent_697f3a --> loadReferences_525842
    loadContent_697f3a --> n1042_354d15
    loadContent_697f3a --> n1058_16cd0d
    loadContent_697f3a --> payloadOfHref_41a2d4
    loadPayload_48806f --> fetchPayload_25514b
    loadPayload_48806f -->|delete| held_22dd2c
    loadPayload_48806f -->|get| held_22dd2c
    loadPayload_48806f -->|set| held_22dd2c
    loadPayload_48806f --> n1058_16cd0d
    loadReference_577c63 --> graphRelations_4eabe1
    loadReference_577c63 --> loadContent_697f3a
    loadReference_577c63 --> n1058_16cd0d
    loadReferences_525842 -->|get| LOADERS_817ff1
    loadReferences_525842 --> n1042_354d15
    loadReferences_525842 --> n1666_300144
    markActive_4eb13b -->|getAttribute| item_22ddf7
    markActive_4eb13b -->|setAttribute| item_22ddf7
    markActive_4eb13b --> n1042_354d15
    marksOf_749574 --> n1058_16cd0d
    marksOf_749574 --> samplesOf_1544f7
    measurable_6242e0 --> isBox_b89abf
    measurable_6242e0 --> isDashed_536c88
    metaRow_6184e7 --> createElement_66e0a5
    metaRow_6184e7 --> edgeNode_577cb7
    metaRow_6184e7 --> n1058_16cd0d
    midpoint_4189b3 -->|getBoundingClientRect| element_52d001
    mountCite_3afc0d --> citedPanelOf_2a178b
    mountCite_3afc0d -->|addEventListener| document_2367c9
    mountCite_3afc0d -->|removeEventListener| document_2367c9
    mountCite_3afc0d ==>|mouseover| n1038_18d5ef
    mountCite_3afc0d ==>|mouseout| n1091_18d5f0
    mountCite_3afc0d ==>|focusin| n1143_18d5f4
    mountCite_3afc0d ==>|focusout| n1194_18d5f4
    mountCite_3afc0d -.->|remove| n1577_354d2b
    mountCopyright_521dc4 -->|replaceChildren| container_6778f7
    mountCopyright_521dc4 --> copyrightText_5c1111
    mountCopyright_521dc4 -.->|writes| n217_30489f
    mountHome_6d9756 --> n1042_354d15
    mountHome_6d9756 --> n1419_2e1c3d
    mountHome_6d9756 --> n1441_6e6f3e
    mountHome_6d9756 --> subscribeEvent_3e8bde
    mountHome_6d9756 --> wire_780a91
    mountMenu_5267ed --> attachSearchToggle_5b2542
    mountMenu_5267ed -->|replaceChildren| container_6778f7
    mountMenu_5267ed --> createElement_66e0a5
    mountMenu_5267ed --> listPages_404b8d
    mountMenu_5267ed --> markActive_4eb13b
    mountMenu_5267ed --> n1419_2e1c3d
    mountMenu_5267ed -->|dispose| n1442_2e1c3e
    mountMenu_5267ed -.->|dispose| n1442_2e1c3e
    mountMenu_5267ed --> subscribeEvent_3e8bde
    mountOverlay_7eb685 --> close_6094d4
    mountOverlay_7eb685 --> n1058_16cd0d
    mountOverlay_7eb685 --> n1441_6e6f3e
    mountOverlay_7eb685 --> open_2dfad1
    mountOverlay_7eb685 --> subscribeEvent_3e8bde
    nonceOf_6da68b -->|querySelector| document_2367c9
    nonceOf_6da68b --> n1042_354d15
    numberAt_6e4b0e --> n1042_354d15
    observeCounts_4d0a7a --> countUp_24a966
    observeCounts_4d0a7a -->|unobserve| held_22dd2c
    observeCounts_4d0a7a --> n1058_16cd0d
    observeCounts_4d0a7a -->|disconnect| observer_5badff
    observeCounts_4d0a7a -->|observe| observer_5badff
    observeCounts_4d0a7a -->|querySelectorAll| root_22e2d2
    observeRail_1d1679 --> bindRail_22b93d
    observeRail_1d1679 -->|getElementById| document_2367c9
    observeRail_1d1679 --> n1058_16cd0d
    observeRail_1d1679 --> railMeter_a4f1a1
    observeRail_1d1679 -->|querySelector| root_22e2d2
    observeRail_1d1679 -->|querySelectorAll| root_22e2d2
    onSearchPage_4c169e --> pageFromPath_2db7a5
    open_2dfad1 --> createBackdrop_2462c7
    open_2dfad1 --> createDialog_2c0d08
    open_2dfad1 --> createElement_66e0a5
    open_2dfad1 -->|addEventListener| document_2367c9
    open_2dfad1 ==>|keydown| n2425_405c15
    open_2dfad1 --> reveal_162fc2
    openSheet_3705e2 --> createElement_66e0a5
    openSheet_3705e2 --> isStaticRender_1b5a95
    openSheet_3705e2 --> n1058_16cd0d
    openSheet_3705e2 -.->|writes| n847_2abee5
    openSheet_3705e2 --> nonceOf_6da68b
    paceAt_81f08c --> n1042_354d15
    pageFromPath_2db7a5 --> segmentsOf_16cbe6
    pagePath_6a23cf --> n1042_354d15
    panelsOf_71a107 --> createChapterPanel_5a10f3
    panelsOf_71a107 --> n1042_354d15
    pathOnly_51b45b --> n1042_354d15
    payloadOfHref_41a2d4 --> pageFromPath_2db7a5
    payloadOfHref_41a2d4 --> payloadPath_24424e
    payloadOfHref_41a2d4 --> tabFromPath_4562e8
    payloadPath_24424e --> n1042_354d15
    pixelsOfLength_15d356 --> n1042_354d15
    pixelsOfLength_15d356 --> n1058_16cd0d
    placedOf_7cbf55 --> n1042_354d15
    placedOf_7cbf55 -->|querySelector| shell_7f4b43
    placeStops_1faa57 --> n1042_354d15
    plainMarkdown_6d94a3 --> bracketedAt_7864f9
    plainMarkdown_6d94a3 -->|has| MARKS_7c85e8
    plainMarkdown_6d94a3 --> n1042_354d15
    plainMarkdown_6d94a3 --> n1058_16cd0d
    play_300633 --> n1058_16cd0d
    play_300633 -->|now| performance_77d011
    principleOf_40a4f5 --> n1058_16cd0d
    principleOf_40a4f5 --> plainMarkdown_6d94a3
    progress_34f224 --> declareStyle_eca53a
    progress_34f224 -->|getBoundingClientRect| main_22dfd8
    progress_34f224 --> n1058_16cd0d
    progress_34f224 -->|getBoundingClientRect| rail_22e296
    queryPath_1faaaf --> pagePath_6a23cf
    railMeter_a4f1a1 -->|getBoundingClientRect| anchor_3f2242
    railMeter_a4f1a1 --> declareStyle_eca53a
    railMeter_a4f1a1 -->|getBoundingClientRect| main_22dfd8
    railMeter_a4f1a1 --> midpoint_4189b3
    railMeter_a4f1a1 --> n1058_16cd0d
    railMeter_a4f1a1 --> progress_34f224
    railMeter_a4f1a1 -->|getBoundingClientRect| rail_22e296
    requestResults_10d1bf --> emitEvent_5872bb
    requestResults_10d1bf --> n1058_16cd0d
    requestResults_10d1bf --> onSearchPage_4c169e
    requestResults_10d1bf --> queryPath_1faaaf
    reveal_162fc2 --> cancel_1980a6
    reveal_162fc2 --> clearChildren_6214ed
    reveal_162fc2 --> expand_515dea
    reveal_162fc2 --> hide_3be2ab
    reveal_162fc2 --> loadReference_577c63
    reveal_162fc2 --> n1058_16cd0d
    reveal_162fc2 -->|append| n7150_405213
    reveal_162fc2 --> panelsOf_71a107
    reveal_162fc2 -->|closest| target_6a913c
    reveal_162fc2 -->|querySelectorAll| target_6a913c
    routeMap_11e87d ==>|click| n1301_ba0a41
    routeMap_11e87d -->|addEventListener| shell_7f4b43
    routeMap_11e87d -->|removeEventListener| shell_7f4b43
    samplesOf_1544f7 -->|getPointAtLength| geometry_1cfe8f
    scroller_226541 -->|getElementById| document_2367c9
    scrollToId_3385d5 -->|getElementById| document_2367c9
    scrollToId_3385d5 --> n1058_16cd0d
    scrollToId_3385d5 --> reveal_162fc2
    scrollToId_3385d5 --> scroller_226541
    scrollToId_3385d5 --> settleAfter_7a0574
    scrollToId_3385d5 --> travel_7108f0
    sectionsOf_1e21c4 --> n1042_354d15
    sectionsOf_1e21c4 --> n1058_16cd0d
    segmentsOf_16cbe6 --> pathOnly_51b45b
    settle_2bce80 --> cancel_1980a6
    settle_2bce80 --> glideBack_3ecd34
    settle_2bce80 --> n1058_16cd0d
    settle_2bce80 --> paceAt_81f08c
    settleAfter_7a0574 -->|addEventListener| main_22dfd8
    settleAfter_7a0574 -->|removeEventListener| main_22dfd8
    settleAfter_7a0574 ==>|addEventListener| n1054_43f9b0
    settleAfter_7a0574 --> n1058_16cd0d
    settleAfter_7a0574 --> travel_7108f0
    settleAfter_7a0574 -->|setTimeout| window_721f3d
    shortestOf_622bda --> n1042_354d15
    showButtons_697b49 -->|replaceChildren| bar_5663b1
    showButtons_697b49 --> cancel_1980a6
    showField_c9dcae -->|replaceChildren| bar_5663b1
    showField_c9dcae -->|focus| field_7e6091
    showField_c9dcae -.->|writes| n2621_234fbc
    spansOf_325ee6 --> n1058_16cd0d
    specOf_3f76de --> n1042_354d15
    subscribeEvent_3e8bde -->|add| existing_52546b
    subscribeEvent_3e8bde -->|delete| existing_52546b
    subscribeEvent_3e8bde --> isNamed_1abe41
    subscribeEvent_3e8bde -->|get| listeners_777c1d
    subscribeEvent_3e8bde -->|set| listeners_777c1d
    subscribeEvent_3e8bde --> n1058_16cd0d
    subscribeEvent_3e8bde --> n649_615175
    tabFromPath_4562e8 --> segmentsOf_16cbe6
    teardown_980b37 -.->|remove| n1577_354d2b
    teardown_980b37 -->|remove| n2038_405c04
    teardown_980b37 -.->|remove| n2038_405c04
    touchTargetOf_410c9f --> n1042_354d15
    touchTargetOf_410c9f --> pixelsOfLength_15d356
    touchTargetOf_410c9f -->|getPropertyValue| style_7f522d
    travel_7108f0 --> centredTop_59bb46
    travel_7108f0 -->|scrollTo| main_22dfd8
    travel_7108f0 --> n1058_16cd0d
    ts_423ccd -->|getElementById| document_2367c9
    ts_423ccd --> missingElement_37255f
    ts_423ccd --> mountCite_3afc0d
    ts_423ccd --> mountCopyright_521dc4
    ts_423ccd --> mountHome_6d9756
    ts_423ccd --> mountMenu_5267ed
    ts_423ccd --> mountOverlay_7eb685
    ts_423ccd --> n1058_16cd0d
    ts_423ccd --> n1441_6e6f3e
    viewOf_4a8ab7 --> layoutLearning_1ce1d7
    viewOf_4a8ab7 --> n1042_354d15
    viewOf_4a8ab7 --> n1058_16cd0d
    viewOf_4a8ab7 --> placedOf_7cbf55
    viewOf_4a8ab7 -->|querySelector| shell_7f4b43
    wire_780a91 --> attachHome_74edef
    wire_780a91 --> attachLearningMap_2b8293
    wire_780a91 --> attachPrerequisites_3c28b3
    wire_780a91 -->|querySelector| main_22dfd8
    wire_780a91 --> n1042_354d15
    wire_780a91 --> n1058_16cd0d
    wire_780a91 --> n1441_6e6f3e
    wire_780a91 --> routeMap_11e87d
    wire_780a91 --> viewOf_4a8ab7
    classDef kCollab stroke:#7a5c1e,stroke-width:2px;
    classDef kEntry stroke:#2f6f4f,stroke-width:2px;
    classDef kGate stroke:#8a3324,stroke-width:2px;
    classDef kHook stroke:#3a5a8a,stroke-width:2px;
    classDef kMethod stroke:#555555,stroke-width:2px;
    classDef kState stroke:#5a3a8a,stroke-width:2px;
    class anchor_3f2242,backdrop_147b1f,bar_5663b1,button_41ff9c,closeButton_7f249e,container_6778f7,declarations_1e73ce,details_768a94,document_2367c9,element_52d001,event_7e559a,existing_52546b,field_7e6091,geometry_1cfe8f,held_22dd2c,input_7e99c8,item_22ddf7,link_22df6e,listeners_777c1d,LOADERS_817ff1,main_22dfd8,MARKS_7c85e8,meter_7edd4a,n1155_103975,n1207_1039af,n1419_2e1c3d,n1441_6e6f3e,n1442_2e1c3e,n1577_354d2b,n1666_300144,n2038_405c04,n2351_1042c3,n3147_404fe1,n504_2188db,n6407_75dbbd,n649_615175,n7150_405213,node_22e09f,nodes_7ef49a,observer_5badff,open_22e130,openButton_17f1f3,pages_7f112a,parent_613c92,performance_77d011,rail_22e296,response_32345c,root_22e2d2,shell_7f4b43,sizes_7f4c28,style_7f522d,target_6a913c,TOOLTIPRELATIONS_51898b,window_721f3d kCollab;
    class ts_423ccd kEntry;
    class n1042_354d15,n1058_16cd0d kGate;
    class n1038_18d5ef,n1054_43f9b0,n1091_18d5f0,n1143_18d5f4,n1194_18d5f4,n1301_ba0a41,n2425_405c15,n3721_16ce43,n3787_16ce44,n4620_124a15 kHook;
    class aimOf_4f14c0,anatomyRecord_777bfa,appendChildren_465e2c,applyAttributes_186f0e,attachHome_74edef,attachLearningMap_2b8293,attachPrerequisites_3c28b3,attachSearchToggle_5b2542,bindRail_22b93d,bracketedAt_7864f9,cameraFit_2ac18b,cancel_1980a6,cellOf_754424,centredTop_59bb46,chapterOf_3ef030,chunkKeyOf_1df68b,citedPanelOf_2a178b,clearChildren_6214ed,close_6094d4,copyrightText_5c1111,countUp_24a966,createAnchorLink_1dad9f,createBackdrop_2462c7,createChapterPanel_5a10f3,createCloseButton_3a4300,createDialog_2c0d08,createElement_66e0a5,createFilterBox_2f3a5a,createLink_1ceb1c,declarationOf_460c7b,declareStyle_eca53a,ease_4ba3ac,easeOut_6a60fc,edgeNode_577cb7,emitEvent_5872bb,entryY_1248a9,expand_515dea,fetchPayload_25514b,fragmentOf_4aa345,framedOf_776b5b,glideBack_3ecd34,graphRelations_4eabe1,hide_3be2ab,iconButton_95a2eb,isBox_b89abf,isDashed_536c88,isGeometry_284176,isNamed_1abe41,isRecord_786bbe,isStaticRender_1b5a95,jumpTo_450a97,labeledRow_1bc7a4,layoutLearning_1ce1d7,light_32ae7f,lightRequired_677481,listPages_404b8d,loadContent_697f3a,loadPayload_48806f,loadReference_577c63,loadReferences_525842,markActive_4eb13b,marksOf_749574,measurable_6242e0,metaRow_6184e7,midpoint_4189b3,missingElement_37255f,mountCite_3afc0d,mountCopyright_521dc4,mountHome_6d9756,mountMenu_5267ed,mountOverlay_7eb685,nonceOf_6da68b,numberAt_6e4b0e,observeCounts_4d0a7a,observeRail_1d1679,onSearchPage_4c169e,open_2dfad1,openSheet_3705e2,paceAt_81f08c,pageFromPath_2db7a5,pagePath_6a23cf,panelsOf_71a107,pathOnly_51b45b,pause_53df21,payloadOfHref_41a2d4,payloadPath_24424e,pixelsOfLength_15d356,placedOf_7cbf55,placeStops_1faa57,plainMarkdown_6d94a3,play_300633,principleOf_40a4f5,progress_34f224,queryPath_1faaaf,queryValue_fa617a,railMeter_a4f1a1,reportFailure_67cb78,requestResults_10d1bf,reveal_162fc2,routeMap_11e87d,samplesOf_1544f7,scroller_226541,scrollToId_3385d5,sectionsOf_1e21c4,segmentsOf_16cbe6,settle_2bce80,settleAfter_7a0574,shiftBlock_640182,shortestOf_622bda,showButtons_697b49,showField_c9dcae,sideFor_451ea2,spansOf_325ee6,specOf_3f76de,subscribeEvent_3e8bde,tabFromPath_4562e8,teardown_980b37,touchTargetOf_410c9f,travel_7108f0,viewOf_4a8ab7,widestOf_45d12d,wire_780a91 kMethod;
    class n1203_6a5187,n217_30489f,n2621_234fbc,n3383_12497d,n687_5a4974,n847_2abee5 kState;

Containers on the spine

Every file on the tree tab carries its subject, its concern and, where the name declares one, its variant, read off the file name as described in placement is a grammar, and every concern is tagged to a layer of the layer spine. The layers the tree lands on are shown in C1·a the layers, and what moves between the containers at runtime in C1·b data flow.

Roles, slots and layers

A folder's role is read from its depth and its name. The first folder under the member is a container, a folder whose name is a concern folder is a concern, and anything between is a subject folder that exists only because two sets of one concern must not merge. A file whose name the grammar cannot parse carries no slots and no layer, and the page says so rather than guessing one.

The layer a file lands on is a derivation from its concern and never a fact written by hand, which is why the same file shows the same layer on this page and in every check that reads the tree. A folder shows the layer of its concern, and a container shows none, because a container groups by axis and not by layer.

C1·a the layers

configuration
  constants: infrastructure
  icons: infrastructure
  strings: product
core
  analyzers: processing
  assets: infrastructure
  buses: infrastructure
  converters: processing
  factories: infrastructure
  generated
  ids: infrastructure
  listeners: application
  loaders: infrastructure
  matchers: processing
  normalizers: processing
  observers: application
  predicates: infrastructure
  registries: infrastructure
  reporters: operations
  resolvers: infrastructure
  stores: application
domain
  converters: processing
  loaders: infrastructure
  models: domain
  registries: infrastructure
presentation
  components: product
  effects: product
  generated
  records: domain
  renderers: product
  styles: product
  timers: runtime
  tokens: product
  views: product
  widgets: product
runtime
  coordinators: application
  entrypoints: runtime
types

C1·b data flow

---
config:
  layout: elk
---
flowchart TD
    accTitle: anatomy data flow
    accDescr: construction and data-flow dependency wiring resolved from source
    applyHead_289635["applyHead"]
    attachLearningMap_2b8293["attachLearningMap"]
    attachSearchToggle_5b2542["attachSearchToggle"]
    countUp_24a966["countUp"]
    createElement_66e0a5["createElement"]
    expand_515dea["expand"]
    flash_43c27b["flash"]
    light_32ae7f["light"]
    mountCopyright_521dc4["mountCopyright"]
    n1203_6a5187["open"]
    n217_30489f["textContent"]
    n2621_234fbc["value"]
    n3383_12497d["lit"]
    n687_5a4974["className"]
    n6934_54bff0["title"]
    n847_2abee5["nonce"]
    nodeText_5dd087["nodeText"]
    openSheet_3705e2["openSheet"]
    showField_c9dcae["showField"]
    applyHead_289635 -.->|writes| n217_30489f
    applyHead_289635 -.->|writes| n6934_54bff0
    attachLearningMap_2b8293 -.->|writes| n3383_12497d
    attachSearchToggle_5b2542 -.->|writes| n2621_234fbc
    countUp_24a966 -.->|writes| n217_30489f
    createElement_66e0a5 -.->|writes| n217_30489f
    createElement_66e0a5 -.->|writes| n687_5a4974
    expand_515dea -.->|writes| n1203_6a5187
    flash_43c27b -.->|writes| n687_5a4974
    light_32ae7f -.->|writes| n3383_12497d
    mountCopyright_521dc4 -.->|writes| n217_30489f
    nodeText_5dd087 -.->|writes| n217_30489f
    openSheet_3705e2 -.->|writes| n847_2abee5
    showField_c9dcae -.->|writes| n2621_234fbc
    classDef kCollab stroke:#7a5c1e,stroke-width:2px;
    classDef kEntry stroke:#2f6f4f,stroke-width:2px;
    classDef kGate stroke:#8a3324,stroke-width:2px;
    classDef kHook stroke:#3a5a8a,stroke-width:2px;
    classDef kMethod stroke:#555555,stroke-width:2px;
    classDef kState stroke:#5a3a8a,stroke-width:2px;
    class applyHead_289635,attachLearningMap_2b8293,attachSearchToggle_5b2542,countUp_24a966,createElement_66e0a5,expand_515dea,flash_43c27b,light_32ae7f,mountCopyright_521dc4,nodeText_5dd087,openSheet_3705e2,showField_c9dcae kMethod;
    class n1203_6a5187,n217_30489f,n2621_234fbc,n3383_12497d,n687_5a4974,n6934_54bff0,n847_2abee5 kState;

What the diagnoses found

The diagnoses are the schema applied to the graph, and they look for a call cycle, a definition nothing consumes, a definition declared twice, a file that reaches across too many concerns, and an import cycle between modules. What they found is shown in D1·a the findings, where a zero is a measured zero, as described in unknown is not pass. One concern folder's walk is shown in a walk.

What the schema can say

Each diagnosis names the control whose absence lets the decay in, as described in an anti-pattern is a decay path, and carries the remedy that reverses it. A finding on this page lands on the file it names, in that file's record on the tree tab, so the reader can open the walk and the source the finding is about.

A diagnosis that runs and finds nothing is different from one that never ran, as described in the honest gaps on the architecture page. The diagnoses here are the ones the parser runs on every build, and a predicate the method calls for that this parser does not compute is declared absent on that page, never assumed clean here.

D1·a the findings

Every diagnosis ran over the whole tree and reported nothing, so there is no call cycle, import cycle, dead definition, duplicate or reach across a concern.

D1·b a walk 14 steps

Reading a walk

A walk lays every meaningful syntax node of a file on a hexagonal grid in the order the parser met them, so a file is a path the eye can follow, going down when the code nests, up when it returns and sideways when it continues. The states are shown in E1·a the legend, which marks what declares, what calls, what writes, what reads, what branches and what merely holds structure.

States, arrows and cells

The arrows mark the direction every few steps, and a flagged cell carries the severity of the finding that flagged it. Every cell is a reference into the data the walk ships beside it, so the vector stays a shape and the text lives in a file the page reads by reference, the same way a code panel is cited from the prose.

A walk pans by dragging and zooms by scrolling, and selecting a cell shows its file and line, its syntax kind and its text. A folder's walk is its files in order, and a file's walk is that file alone, so the tree can be read at either scale. A walk shows syntax and never semantics. What a call resolves to comes from the call graph, which the definitions beside each file show.

E1·a the legend

declare: declare
call: call
write: write
read: read
control: control
structure: structure

Schema · GovLab Extension Host