# The four parts, measured

> The four parts named in a system is a graph on the architecture page are each measured here.

Page: Anatomy · Reading
Canonical: https://banes-lab.com/anatomy#the-four-parts-measured

The four parts named in [a system is a graph](https://banes-lab.com/software-architecture/model/a-system-is-a-graph.md) 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](https://banes-lab.com/anatomy#the-four-parts-measured-panel-a), and the order in which it runs in [B1·b logical flow](https://banes-lab.com/anatomy#the-four-parts-measured-panel-b).

### 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](https://banes-lab.com/software-architecture/model/definitions-own-what.md). 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

```mermaid
flowchart LR
n_root["root · 450 files"]
n_configuration["configuration · 160 files"]
n_core["core · 92 files"]
n_domain["domain · 32 files"]
n_presentation["presentation · 126 files"]
n_runtime["runtime · 2 files"]
n_types["types · 31 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 · 32 files · infrastructure"]
n_configuration_icons["icons · 28 files · infrastructure"]
n_configuration_strings["strings · 100 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 · 27 files · infrastructure"]
n_core_buses["buses · 1 file · infrastructure"]
n_core_converters["converters · 5 files · processing"]
n_core_factories["factories · 1 file · infrastructure"]
n_core_ids["ids · 33 files · infrastructure"]
n_core_loaders["loaders · 4 files · infrastructure"]
n_core_matchers["matchers · 2 files · processing"]
n_core_normalizers["normalizers · 3 files · processing"]
n_core_observers["observers · 5 files · application"]
n_core_predicates["predicates · 3 files · infrastructure"]
n_core_registries["registries · 2 files · infrastructure"]
n_core_reporters["reporters · 1 file · operations"]
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_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_stores
n_domain_converters["converters · 26 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 · 19 files · product"]
n_presentation_effects["effects · 4 files · product"]
n_presentation_records["records · 13 files · domain"]
n_presentation_renderers["renderers · 32 files · product"]
n_presentation_styles["styles · 31 files · product"]
n_presentation_tokens["tokens · 8 files · product"]
n_presentation_views["views · 12 files · product"]
n_presentation_widgets["widgets · 7 files · product"]
n_presentation --> n_presentation_components
n_presentation --> n_presentation_effects
n_presentation --> n_presentation_records
n_presentation --> n_presentation_renderers
n_presentation --> n_presentation_styles
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

```mermaid
---
config:
layout: elk
---
flowchart TD
accTitle: anatomy flow: anatomy
accDescr: entry to exit call flow with branches, hooks, and teardown
anchor_3f2242[["anchor"]]
anchorOf_2186a8["anchorOf"]
appendChildren_7f34c9["appendChildren"]
applyAttributes_7c55d7["applyAttributes"]
attachHome_5c99c8["attachHome"]
attachLearningMap_b10609["attachLearningMap"]
attachPrerequisites_331bd2["attachPrerequisites"]
attachSearchToggle_9fba5f["attachSearchToggle"]
backdrop_147b1f[["backdrop"]]
bar_5663b1[["bar"]]
bindRail_57f1cf["bindRail"]
button_41ff9c[["button"]]
cancel_2afa57["cancel"]
cellOf_258a63["cellOf"]
centredTop_43b73d["centredTop"]
chapterOf_639bd3["chapterOf"]
citedPanelOf_3c5a7d["citedPanelOf"]
clearChildren_5ce3d4["clearChildren"]
close_611acf["close"]
closeButton_7f249e[["closeButton"]]
container_6778f7[["container"]]
copyrightText_22cf41["copyrightText"]
countUp_47d887["countUp"]
createAnchorLink_2eb8af["createAnchorLink"]
createBackdrop_6b20f7["createBackdrop"]
createChapterPanel_7d8591["createChapterPanel"]
createCloseButton_515871["createCloseButton"]
createDialog_3183a9["createDialog"]
createElement_5ef66e["createElement"]
createExternalLink_180026["createExternalLink"]
createFilterBox_66b414["createFilterBox"]
createLink_130943["createLink"]
createPageLink_63b616["createPageLink"]
declarationOf_3e2244["declarationOf"]
declarations_1e73ce[["declarations"]]
declareStyle_6e01c9["declareStyle"]
details_768a94[["details"]]
dispose_b69906["dispose"]
document_2367c9[["document"]]
ease_2d3d24["ease"]
easeOut_4be444["easeOut"]
edgeNode_1cca50["edgeNode"]
element_52d001[["element"]]
emitEvent_539fa0["emitEvent"]
entryY_7c7908["entryY"]
event_7e559a[["event"]]
existing_52546b[["existing"]]
expand_3e1974["expand"]
fetchPayload_3fae44["fetchPayload"]
field_7e6091[["field"]]
fragmentOf_255e12["fragmentOf"]
framedOf_2142e0["framedOf"]
geometry_1cfe8f[["geometry"]]
glideBack_23eaf2["glideBack"]
held_22dd2c[["held"]]
hide_629f28["hide"]
iconButton_5b578b["iconButton"]
input_7e99c8[["input"]]
isBox_6175ca["isBox"]
isDashed_3cb506["isDashed"]
isGeometry_4c0312["isGeometry"]
isNamed_249cae["isNamed"]
isRecord_45f77b["isRecord"]
isStaticRender_22789d["isStaticRender"]
item_22ddf7[["item"]]
jump_22de89[["jump"]]
jumpTo_68a635["jumpTo"]
labelledRow_35841d["labelledRow"]
layoutLearning_4b5f08["layoutLearning"]
light_1e5f40["light"]
lightRequired_73f831["lightRequired"]
link_22df6e[["link"]]
linkEnd_7927f9["linkEnd"]
listeners_777c1d[["listeners"]]
listPages_264794["listPages"]
loadContent_f33e5f["loadContent"]
LOADERS_817ff1[["LOADERS"]]
loadPayload_73f79d["loadPayload"]
loadReference_b0cadf["loadReference"]
loadReferences_77d4fb["loadReferences"]
main_22dfd8[["main"]]
markActive_23c92a["markActive"]
MARKS_7c85e8[["MARKS"]]
marksOf_61834b["marksOf"]
measurable_3a687f["measurable"]
metaRow_6b7eb2["metaRow"]
meter_7edd4a[["meter"]]
midpoint_51c9b4["midpoint"]
mountCite_743bd4["mountCite"]
mountCopyright_3c42b4["mountCopyright"]
mountHome_17c99b["mountHome"]
mountMenu_77e4c6["mountMenu"]
mountOverlay_5d48cd["mountOverlay"]
n1006_676045{"if"}
n1012_42443b["textContent"]
n1049_e00aa8["hook mouseover"]
n1053_6e952d{"ternary"}
n1054_24c337["hook addEventListener"]
n1089_3a4baa[["anatomyReference"]]
n1102_e00ae3["hook mouseout"]
n1154_e00aee["hook focusin"]
n1205_e00b27["hook focusout"]
n1238_6f83b0["open"]
n1244_229e8d[["load"]]
n1301_3b66d0["hook click"]
n1344_746769[["unsubscribe"]]
n1371_33e7a2[["dispose"]]
n1442_106743[["search"]]
n1588_6e9543[["remove"]]
n1706_3a4bc7[["withEvidence"]]
n2038_5d46c6[["overlay"]]
n2425_5d47d4["hook keydown"]
n2616_94bc2d["value"]
n2978_6760f9["lit"]
n3159_458209[["disarm"]]
n3748_424572["hook scroll"]
n3814_424576["hook resize"]
n4218_6761f3["hook visibilitychange"]
n4779_145edc[["detach"]]
n504_3be5d3[["onQuery"]]
n649_4f9ca1[["listener"]]
n687_557238["className"]
n7162_45843b[["panel"]]
n847_b886cf["nonce"]
node_22e09f[["node"]]
nodes_7ef49a[["nodes"]]
nonceOf_72d8b3["nonceOf"]
numberAt_1d0a92["numberAt"]
observeCounts_4e352f["observeCounts"]
observer_5badff[["observer"]]
observeRail_277839["observeRail"]
onSearchPage_2146ba["onSearchPage"]
open_13f6d8["open"]
open_22e130[["open"]]
openButton_17f1f3[["openButton"]]
openSheet_5162db["openSheet"]
paceAt_35d24e["paceAt"]
pageFromPath_73300d["pageFromPath"]
pagePath_236be6["pagePath"]
pages_7f112a[["pages"]]
panelsOf_6937ce["panelsOf"]
parent_613c92[["parent"]]
pathOnly_afc730["pathOnly"]
pause_77e8c4["pause"]
payloadOfHref_72db42["payloadOfHref"]
payloadPath_16ef68["payloadPath"]
performance_77d011[["performance"]]
placedOf_513ef3["placedOf"]
placeStops_5c8d17["placeStops"]
plainMarkdown_472a3f["plainMarkdown"]
play_6f2d48["play"]
principleOf_71cda3["principleOf"]
progress_7df786["progress"]
queryPath_136232["queryPath"]
queryValue_2788ba["queryValue"]
rail_22e296[["rail"]]
railMeter_977af8["railMeter"]
reportFailure_5fe141["reportFailure"]
requestResults_727b55["requestResults"]
response_32345c[["response"]]
reveal_45e406["reveal"]
root_22e2d2[["root"]]
routeMap_7b0014["routeMap"]
samplesOf_75080c["samplesOf"]
scroller_1cc519["scroller"]
scrollToId_1d81cc["scrollToId"]
sectionsOf_1d680f["sectionsOf"]
segmentsOf_42779e["segmentsOf"]
settle_47f54d["settle"]
settleAfter_764578["settleAfter"]
shell_7f4b43[["shell"]]
shiftBlock_64acb3["shiftBlock"]
showButtons_2a1fa7["showButtons"]
showField_388c70["showField"]
sideFor_524df2["sideFor"]
sizes_7f4c28[["sizes"]]
spansOf_1f4cbe["spansOf"]
specOf_1cfc9d["specOf"]
subscribeEvent_6a3796["subscribeEvent"]
tabFromPath_668596["tabFromPath"]
target_6a913c[["target"]]
teardown_7b66f2["teardown"]
travel_5dc47a["travel"]
ts_27efcb["anatomy"]
viewOf_347798["viewOf"]
widestOf_5079ff["widestOf"]
window_721f3d[["window"]]
wire_34ecce["wire"]
z_more["plus 135 more"]
anchorOf_2186a8 --> n1053_6e952d
appendChildren_7f34c9 -->|append| parent_613c92
applyAttributes_7c55d7 -->|setAttribute| element_52d001
attachHome_5c99c8 --> n1371_33e7a2
attachHome_5c99c8 --> observeCounts_4e352f
attachHome_5c99c8 --> observeRail_277839
attachLearningMap_b10609 -->|addEventListener| document_2367c9
attachLearningMap_b10609 -->|removeEventListener| document_2367c9
attachLearningMap_b10609 --> ease_2d3d24
attachLearningMap_b10609 --> framedOf_2142e0
attachLearningMap_b10609 -->|getPointAtLength| geometry_1cfe8f
attachLearningMap_b10609 -->|getTotalLength| geometry_1cfe8f
attachLearningMap_b10609 --> glideBack_23eaf2
attachLearningMap_b10609 --> light_1e5f40
attachLearningMap_b10609 --> marksOf_61834b
attachLearningMap_b10609 --> n1006_676045
attachLearningMap_b10609 -.->|writes| n2978_6760f9
attachLearningMap_b10609 ==>|visibilitychange| n4218_6761f3
attachLearningMap_b10609 --> numberAt_1d0a92
attachLearningMap_b10609 -->|disconnect| observer_5badff
attachLearningMap_b10609 -->|observe| observer_5badff
attachLearningMap_b10609 --> paceAt_35d24e
attachLearningMap_b10609 --> pause_77e8c4
attachLearningMap_b10609 -->|now| performance_77d011
attachLearningMap_b10609 --> play_6f2d48
attachLearningMap_b10609 --> settle_47f54d
attachLearningMap_b10609 --> spansOf_1f4cbe
attachLearningMap_b10609 --> widestOf_5079ff
attachPrerequisites_331bd2 --> hide_629f28
attachPrerequisites_331bd2 --> lightRequired_73f831
attachPrerequisites_331bd2 ==>|addEventListener| n1054_24c337
attachPrerequisites_331bd2 --> n4779_145edc
attachPrerequisites_331bd2 -->|addEventListener| target_6a913c
attachPrerequisites_331bd2 -->|removeEventListener| target_6a913c
attachSearchToggle_9fba5f -->|replaceChildren| bar_5663b1
attachSearchToggle_9fba5f --> cancel_2afa57
attachSearchToggle_9fba5f -->|addEventListener| closeButton_7f249e
attachSearchToggle_9fba5f --> createFilterBox_66b414
attachSearchToggle_9fba5f -->|addEventListener| field_7e6091
attachSearchToggle_9fba5f -->|focus| field_7e6091
attachSearchToggle_9fba5f --> iconButton_5b578b
attachSearchToggle_9fba5f --> n1006_676045
attachSearchToggle_9fba5f ==>|addEventListener| n1054_24c337
attachSearchToggle_9fba5f ==>|click| n1301_3b66d0
attachSearchToggle_9fba5f --> n1344_746769
attachSearchToggle_9fba5f -.->|writes| n2616_94bc2d
attachSearchToggle_9fba5f -->|addEventListener| openButton_17f1f3
attachSearchToggle_9fba5f --> queryValue_2788ba
attachSearchToggle_9fba5f --> requestResults_727b55
attachSearchToggle_9fba5f --> showButtons_2a1fa7
attachSearchToggle_9fba5f --> showField_388c70
attachSearchToggle_9fba5f --> subscribeEvent_6a3796
bindRail_57f1cf -->|addEventListener| main_22dfd8
bindRail_57f1cf -->|removeEventListener| main_22dfd8
bindRail_57f1cf -->|progress| meter_7edd4a
bindRail_57f1cf -->|refresh| meter_7edd4a
bindRail_57f1cf --> n1006_676045
bindRail_57f1cf --> n1053_6e952d
bindRail_57f1cf ==>|scroll| n3748_424572
bindRail_57f1cf ==>|resize| n3814_424576
bindRail_57f1cf -->|disconnect| sizes_7f4c28
bindRail_57f1cf -->|observe| sizes_7f4c28
bindRail_57f1cf -->|addEventListener| window_721f3d
bindRail_57f1cf -->|removeEventListener| window_721f3d
cancel_2afa57 --> n1006_676045
cancel_2afa57 --> n3159_458209
cellOf_258a63 --> n1006_676045
centredTop_43b73d -->|getBoundingClientRect| main_22dfd8
centredTop_43b73d -->|getBoundingClientRect| target_6a913c
chapterOf_639bd3 --> n1006_676045
chapterOf_639bd3 --> n1053_6e952d
chapterOf_639bd3 --> plainMarkdown_472a3f
chapterOf_639bd3 --> principleOf_71cda3
chapterOf_639bd3 --> sectionsOf_1d680f
citedPanelOf_3c5a7d -->|getElementById| document_2367c9
citedPanelOf_3c5a7d -->|getAttribute| link_22df6e
citedPanelOf_3c5a7d --> n1053_6e952d
citedPanelOf_3c5a7d -->|closest| node_22e09f
clearChildren_5ce3d4 -->|replaceChildren| parent_613c92
close_611acf -->|removeEventListener| document_2367c9
close_611acf -.->|remove| n1588_6e9543
close_611acf --> teardown_7b66f2
countUp_47d887 --> easeOut_4be444
countUp_47d887 --> n1006_676045
countUp_47d887 -.->|writes| n1012_42443b
countUp_47d887 -->|now| performance_77d011
createAnchorLink_2eb8af --> createElement_5ef66e
createAnchorLink_2eb8af -->|preventDefault| event_7e559a
createAnchorLink_2eb8af --> jumpTo_68a635
createAnchorLink_2eb8af -->|addEventListener| link_22df6e
createAnchorLink_2eb8af ==>|click| n1301_3b66d0
createAnchorLink_2eb8af --> specOf_1cfc9d
createBackdrop_6b20f7 -->|addEventListener| backdrop_147b1f
createBackdrop_6b20f7 --> createElement_5ef66e
createBackdrop_6b20f7 --> emitEvent_539fa0
createBackdrop_6b20f7 --> n1006_676045
createBackdrop_6b20f7 ==>|click| n1301_3b66d0
createChapterPanel_7d8591 --> labelledRow_35841d
createChapterPanel_7d8591 --> metaRow_6b7eb2
createChapterPanel_7d8591 --> n1053_6e952d
createCloseButton_515871 -->|addEventListener| button_41ff9c
createCloseButton_515871 --> createElement_5ef66e
createCloseButton_515871 --> emitEvent_539fa0
createCloseButton_515871 ==>|click| n1301_3b66d0
createDialog_3183a9 --> createCloseButton_515871
createDialog_3183a9 --> createElement_5ef66e
createElement_5ef66e --> appendChildren_7f34c9
createElement_5ef66e --> applyAttributes_7c55d7
createElement_5ef66e -->|createElement| document_2367c9
createElement_5ef66e --> n1006_676045
createElement_5ef66e -.->|writes| n1012_42443b
createElement_5ef66e -.->|writes| n687_557238
createExternalLink_180026 --> createElement_5ef66e
createExternalLink_180026 --> specOf_1cfc9d
createFilterBox_66b414 --> createElement_5ef66e
createFilterBox_66b414 -->|addEventListener| input_7e99c8
createFilterBox_66b414 ==>|addEventListener| n1054_24c337
createFilterBox_66b414 --> n504_3be5d3
createLink_130943 --> createAnchorLink_2eb8af
createLink_130943 --> createExternalLink_180026
createLink_130943 --> createPageLink_63b616
createLink_130943 --> n1006_676045
createLink_130943 --> pageFromPath_73300d
createPageLink_63b616 --> anchorOf_2186a8
createPageLink_63b616 --> createElement_5ef66e
createPageLink_63b616 --> emitEvent_539fa0
createPageLink_63b616 -->|preventDefault| event_7e559a
createPageLink_63b616 --> jumpTo_68a635
createPageLink_63b616 -->|addEventListener| link_22df6e
createPageLink_63b616 --> n1006_676045
createPageLink_63b616 ==>|click| n1301_3b66d0
createPageLink_63b616 --> specOf_1cfc9d
declarationOf_3e2244 -->|get| declarations_1e73ce
declarationOf_3e2244 -->|set| declarations_1e73ce
declarationOf_3e2244 --> n1006_676045
declarationOf_3e2244 -->|insertRule| open_22e130
declarationOf_3e2244 --> openSheet_5162db
declareStyle_6e01c9 --> declarationOf_3e2244
edgeNode_1cca50 --> createLink_130943
edgeNode_1cca50 --> n1053_6e952d
emitEvent_539fa0 -->|get| listeners_777c1d
emitEvent_539fa0 --> n649_4f9ca1
entryY_7c7908 --> n1006_676045
entryY_7c7908 --> n1053_6e952d
expand_3e1974 -->|dispatchEvent| details_768a94
expand_3e1974 --> n1006_676045
expand_3e1974 -.->|writes| n1238_6f83b0
fetchPayload_3fae44 --> n1006_676045
fetchPayload_3fae44 --> reportFailure_5fe141
fetchPayload_3fae44 -->|json| response_32345c
fragmentOf_255e12 --> n1053_6e952d
framedOf_2142e0 --> isGeometry_4c0312
framedOf_2142e0 --> isRecord_45f77b
framedOf_2142e0 --> measurable_3a687f
framedOf_2142e0 --> n1006_676045
framedOf_2142e0 --> n1053_6e952d
glideBack_23eaf2 --> ease_2d3d24
glideBack_23eaf2 --> n1006_676045
hide_629f28 --> cancel_2afa57
hide_629f28 --> clearChildren_5ce3d4
hide_629f28 --> lightRequired_73f831
hide_629f28 -.->|remove| n1588_6e9543
iconButton_5b578b --> createElement_5ef66e
isBox_6175ca --> isRecord_45f77b
isDashed_3cb506 --> isRecord_45f77b
isGeometry_4c0312 --> isRecord_45f77b
jumpTo_68a635 --> scrollToId_1d81cc
labelledRow_35841d --> createElement_5ef66e
layoutLearning_4b5f08 --> cellOf_258a63
layoutLearning_4b5f08 --> entryY_7c7908
layoutLearning_4b5f08 --> placeStops_5c8d17
layoutLearning_4b5f08 --> shiftBlock_64acb3
layoutLearning_4b5f08 --> sideFor_524df2
light_1e5f40 --> n1006_676045
light_1e5f40 -.->|writes| n2978_6760f9
lightRequired_73f831 -->|get| nodes_7ef49a
linkEnd_7927f9 --> n1053_6e952d
listPages_264794 -->|all| pages_7f112a
loadContent_f33e5f --> chapterOf_639bd3
loadContent_f33e5f --> fragmentOf_255e12
loadContent_f33e5f --> loadPayload_73f79d
loadContent_f33e5f --> loadReferences_77d4fb
loadContent_f33e5f --> n1006_676045
loadContent_f33e5f --> n1053_6e952d
loadContent_f33e5f --> n1089_3a4baa
loadContent_f33e5f --> payloadOfHref_72db42
loadPayload_73f79d --> fetchPayload_3fae44
loadPayload_73f79d -->|delete| held_22dd2c
loadPayload_73f79d -->|get| held_22dd2c
loadPayload_73f79d -->|set| held_22dd2c
loadPayload_73f79d --> n1006_676045
loadReference_b0cadf --> loadContent_f33e5f
loadReference_b0cadf --> n1006_676045
loadReference_b0cadf --> n1706_3a4bc7
loadReferences_77d4fb -->|get| LOADERS_817ff1
loadReferences_77d4fb --> n1053_6e952d
loadReferences_77d4fb --> n1244_229e8d
markActive_23c92a -->|getAttribute| item_22ddf7
markActive_23c92a -->|setAttribute| item_22ddf7
markActive_23c92a --> n1053_6e952d
marksOf_61834b --> n1006_676045
marksOf_61834b --> samplesOf_75080c
measurable_3a687f --> isBox_6175ca
measurable_3a687f --> isDashed_3cb506
metaRow_6b7eb2 --> createElement_5ef66e
metaRow_6b7eb2 --> edgeNode_1cca50
metaRow_6b7eb2 --> n1006_676045
midpoint_51c9b4 -->|getBoundingClientRect| element_52d001
mountCite_743bd4 --> citedPanelOf_3c5a7d
mountCite_743bd4 -->|addEventListener| document_2367c9
mountCite_743bd4 -->|removeEventListener| document_2367c9
mountCite_743bd4 ==>|mouseover| n1049_e00aa8
mountCite_743bd4 ==>|mouseout| n1102_e00ae3
mountCite_743bd4 ==>|focusin| n1154_e00aee
mountCite_743bd4 ==>|focusout| n1205_e00b27
mountCite_743bd4 -.->|remove| n1588_6e9543
mountCopyright_3c42b4 -->|replaceChildren| container_6778f7
mountCopyright_3c42b4 --> copyrightText_22cf41
mountCopyright_3c42b4 -.->|writes| n1012_42443b
mountHome_17c99b --> dispose_b69906
mountHome_17c99b --> n1053_6e952d
mountHome_17c99b --> n1344_746769
mountHome_17c99b --> subscribeEvent_6a3796
mountHome_17c99b --> wire_34ecce
mountMenu_77e4c6 --> attachSearchToggle_9fba5f
mountMenu_77e4c6 -->|replaceChildren| container_6778f7
mountMenu_77e4c6 --> createElement_5ef66e
mountMenu_77e4c6 --> listPages_264794
mountMenu_77e4c6 --> markActive_23c92a
mountMenu_77e4c6 --> n1344_746769
mountMenu_77e4c6 -->|dispose| n1442_106743
mountMenu_77e4c6 -.->|dispose| n1442_106743
mountMenu_77e4c6 --> subscribeEvent_6a3796
mountOverlay_5d48cd --> close_611acf
mountOverlay_5d48cd --> n1006_676045
mountOverlay_5d48cd --> n1371_33e7a2
mountOverlay_5d48cd --> open_13f6d8
mountOverlay_5d48cd --> subscribeEvent_6a3796
nonceOf_72d8b3 -->|querySelector| document_2367c9
nonceOf_72d8b3 --> n1053_6e952d
numberAt_1d0a92 --> n1053_6e952d
observeCounts_4e352f --> countUp_47d887
observeCounts_4e352f -->|unobserve| held_22dd2c
observeCounts_4e352f --> n1006_676045
observeCounts_4e352f -->|disconnect| observer_5badff
observeCounts_4e352f -->|observe| observer_5badff
observeCounts_4e352f -->|querySelectorAll| root_22e2d2
observeRail_277839 --> bindRail_57f1cf
observeRail_277839 -->|getElementById| document_2367c9
observeRail_277839 --> n1006_676045
observeRail_277839 --> railMeter_977af8
observeRail_277839 -->|querySelector| root_22e2d2
observeRail_277839 -->|querySelectorAll| root_22e2d2
onSearchPage_2146ba --> pageFromPath_73300d
open_13f6d8 --> createBackdrop_6b20f7
open_13f6d8 --> createDialog_3183a9
open_13f6d8 --> createElement_5ef66e
open_13f6d8 -->|addEventListener| document_2367c9
open_13f6d8 ==>|keydown| n2425_5d47d4
open_13f6d8 --> reveal_45e406
openSheet_5162db --> createElement_5ef66e
openSheet_5162db --> isStaticRender_22789d
openSheet_5162db --> n1006_676045
openSheet_5162db -.->|writes| n847_b886cf
openSheet_5162db --> nonceOf_72d8b3
paceAt_35d24e --> n1053_6e952d
pageFromPath_73300d --> segmentsOf_42779e
pagePath_236be6 --> n1053_6e952d
panelsOf_6937ce --> createChapterPanel_7d8591
panelsOf_6937ce --> n1053_6e952d
pathOnly_afc730 --> n1053_6e952d
payloadOfHref_72db42 --> pageFromPath_73300d
payloadOfHref_72db42 --> payloadPath_16ef68
payloadOfHref_72db42 --> tabFromPath_668596
payloadPath_16ef68 --> n1053_6e952d
placedOf_513ef3 --> n1053_6e952d
placedOf_513ef3 -->|querySelector| shell_7f4b43
placeStops_5c8d17 --> n1053_6e952d
plainMarkdown_472a3f --> linkEnd_7927f9
plainMarkdown_472a3f -->|has| MARKS_7c85e8
plainMarkdown_472a3f --> n1006_676045
plainMarkdown_472a3f --> n1053_6e952d
play_6f2d48 --> n1006_676045
play_6f2d48 -->|now| performance_77d011
principleOf_71cda3 --> n1006_676045
principleOf_71cda3 --> plainMarkdown_472a3f
progress_7df786 --> declareStyle_6e01c9
progress_7df786 -->|getBoundingClientRect| main_22dfd8
progress_7df786 --> n1006_676045
progress_7df786 -->|getBoundingClientRect| rail_22e296
queryPath_136232 --> pagePath_236be6
railMeter_977af8 -->|getBoundingClientRect| anchor_3f2242
railMeter_977af8 --> declareStyle_6e01c9
railMeter_977af8 -->|getBoundingClientRect| main_22dfd8
railMeter_977af8 --> midpoint_51c9b4
railMeter_977af8 --> n1006_676045
railMeter_977af8 --> progress_7df786
railMeter_977af8 -->|getBoundingClientRect| rail_22e296
requestResults_727b55 --> emitEvent_539fa0
requestResults_727b55 --> n1006_676045
requestResults_727b55 --> onSearchPage_2146ba
requestResults_727b55 --> queryPath_136232
reveal_45e406 --> cancel_2afa57
reveal_45e406 --> clearChildren_5ce3d4
reveal_45e406 --> expand_3e1974
reveal_45e406 --> hide_629f28
reveal_45e406 --> loadReference_b0cadf
reveal_45e406 --> n1006_676045
reveal_45e406 -->|append| n7162_45843b
reveal_45e406 --> panelsOf_6937ce
reveal_45e406 -->|closest| target_6a913c
reveal_45e406 -->|querySelectorAll| target_6a913c
routeMap_7b0014 --> emitEvent_539fa0
routeMap_7b0014 -->|preventDefault| event_7e559a
routeMap_7b0014 -->|getAttribute| jump_22de89
routeMap_7b0014 --> n1006_676045
routeMap_7b0014 --> n1053_6e952d
routeMap_7b0014 ==>|click| n1301_3b66d0
routeMap_7b0014 --> pageFromPath_73300d
routeMap_7b0014 -->|addEventListener| shell_7f4b43
routeMap_7b0014 -->|removeEventListener| shell_7f4b43
routeMap_7b0014 -->|closest| target_6a913c
samplesOf_75080c -->|getPointAtLength| geometry_1cfe8f
scroller_1cc519 -->|getElementById| document_2367c9
scrollToId_1d81cc -->|getElementById| document_2367c9
scrollToId_1d81cc --> n1006_676045
scrollToId_1d81cc --> reveal_45e406
scrollToId_1d81cc --> scroller_1cc519
scrollToId_1d81cc --> settleAfter_764578
scrollToId_1d81cc --> travel_5dc47a
sectionsOf_1d680f --> n1006_676045
sectionsOf_1d680f --> n1053_6e952d
segmentsOf_42779e --> pathOnly_afc730
settle_47f54d --> cancel_2afa57
settle_47f54d --> glideBack_23eaf2
settle_47f54d --> n1006_676045
settle_47f54d --> paceAt_35d24e
settleAfter_764578 -->|addEventListener| main_22dfd8
settleAfter_764578 -->|removeEventListener| main_22dfd8
settleAfter_764578 --> n1006_676045
settleAfter_764578 ==>|addEventListener| n1054_24c337
settleAfter_764578 --> travel_5dc47a
settleAfter_764578 -->|setTimeout| window_721f3d
showButtons_2a1fa7 -->|replaceChildren| bar_5663b1
showButtons_2a1fa7 --> cancel_2afa57
showField_388c70 -->|replaceChildren| bar_5663b1
showField_388c70 -->|focus| field_7e6091
showField_388c70 -.->|writes| n2616_94bc2d
spansOf_1f4cbe --> n1006_676045
specOf_1cfc9d --> n1053_6e952d
subscribeEvent_6a3796 -->|add| existing_52546b
subscribeEvent_6a3796 -->|delete| existing_52546b
subscribeEvent_6a3796 --> isNamed_249cae
subscribeEvent_6a3796 -->|get| listeners_777c1d
subscribeEvent_6a3796 -->|set| listeners_777c1d
subscribeEvent_6a3796 --> n1006_676045
subscribeEvent_6a3796 --> n649_4f9ca1
tabFromPath_668596 --> segmentsOf_42779e
teardown_7b66f2 -.->|remove| n1588_6e9543
teardown_7b66f2 -->|remove| n2038_5d46c6
teardown_7b66f2 -.->|remove| n2038_5d46c6
travel_5dc47a --> centredTop_43b73d
travel_5dc47a -->|scrollTo| main_22dfd8
travel_5dc47a --> n1006_676045
ts_27efcb -->|getElementById| document_2367c9
ts_27efcb --> mountCite_743bd4
ts_27efcb --> mountCopyright_3c42b4
ts_27efcb --> mountHome_17c99b
ts_27efcb --> mountMenu_77e4c6
ts_27efcb --> mountOverlay_5d48cd
ts_27efcb --> n1006_676045
ts_27efcb --> n1371_33e7a2
viewOf_347798 --> layoutLearning_4b5f08
viewOf_347798 --> n1006_676045
viewOf_347798 --> n1053_6e952d
viewOf_347798 --> placedOf_513ef3
viewOf_347798 -->|querySelector| shell_7f4b43
wire_34ecce --> attachHome_5c99c8
wire_34ecce --> attachLearningMap_b10609
wire_34ecce --> attachPrerequisites_331bd2
wire_34ecce -->|querySelector| main_22dfd8
wire_34ecce --> n1006_676045
wire_34ecce --> n1053_6e952d
wire_34ecce --> n1371_33e7a2
wire_34ecce --> routeMap_7b0014
wire_34ecce --> viewOf_347798
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,jump_22de89,link_22df6e,listeners_777c1d,LOADERS_817ff1,main_22dfd8,MARKS_7c85e8,meter_7edd4a,n1089_3a4baa,n1244_229e8d,n1344_746769,n1371_33e7a2,n1442_106743,n1588_6e9543,n1706_3a4bc7,n2038_5d46c6,n3159_458209,n4779_145edc,n504_3be5d3,n649_4f9ca1,n7162_45843b,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,target_6a913c,window_721f3d kCollab;
class ts_27efcb kEntry;
class n1006_676045,n1053_6e952d kGate;
class n1049_e00aa8,n1054_24c337,n1102_e00ae3,n1154_e00aee,n1205_e00b27,n1301_3b66d0,n2425_5d47d4,n3748_424572,n3814_424576,n4218_6761f3 kHook;
class anchorOf_2186a8,appendChildren_7f34c9,applyAttributes_7c55d7,attachHome_5c99c8,attachLearningMap_b10609,attachPrerequisites_331bd2,attachSearchToggle_9fba5f,bindRail_57f1cf,cancel_2afa57,cellOf_258a63,centredTop_43b73d,chapterOf_639bd3,citedPanelOf_3c5a7d,clearChildren_5ce3d4,close_611acf,copyrightText_22cf41,countUp_47d887,createAnchorLink_2eb8af,createBackdrop_6b20f7,createChapterPanel_7d8591,createCloseButton_515871,createDialog_3183a9,createElement_5ef66e,createExternalLink_180026,createFilterBox_66b414,createLink_130943,createPageLink_63b616,declarationOf_3e2244,declareStyle_6e01c9,dispose_b69906,ease_2d3d24,easeOut_4be444,edgeNode_1cca50,emitEvent_539fa0,entryY_7c7908,expand_3e1974,fetchPayload_3fae44,fragmentOf_255e12,framedOf_2142e0,glideBack_23eaf2,hide_629f28,iconButton_5b578b,isBox_6175ca,isDashed_3cb506,isGeometry_4c0312,isNamed_249cae,isRecord_45f77b,isStaticRender_22789d,jumpTo_68a635,labelledRow_35841d,layoutLearning_4b5f08,light_1e5f40,lightRequired_73f831,linkEnd_7927f9,listPages_264794,loadContent_f33e5f,loadPayload_73f79d,loadReference_b0cadf,loadReferences_77d4fb,markActive_23c92a,marksOf_61834b,measurable_3a687f,metaRow_6b7eb2,midpoint_51c9b4,mountCite_743bd4,mountCopyright_3c42b4,mountHome_17c99b,mountMenu_77e4c6,mountOverlay_5d48cd,nonceOf_72d8b3,numberAt_1d0a92,observeCounts_4e352f,observeRail_277839,onSearchPage_2146ba,open_13f6d8,openSheet_5162db,paceAt_35d24e,pageFromPath_73300d,pagePath_236be6,panelsOf_6937ce,pathOnly_afc730,pause_77e8c4,payloadOfHref_72db42,payloadPath_16ef68,placedOf_513ef3,placeStops_5c8d17,plainMarkdown_472a3f,play_6f2d48,principleOf_71cda3,progress_7df786,queryPath_136232,queryValue_2788ba,railMeter_977af8,reportFailure_5fe141,requestResults_727b55,reveal_45e406,routeMap_7b0014,samplesOf_75080c,scroller_1cc519,scrollToId_1d81cc,sectionsOf_1d680f,segmentsOf_42779e,settle_47f54d,settleAfter_764578,shiftBlock_64acb3,showButtons_2a1fa7,showField_388c70,sideFor_524df2,spansOf_1f4cbe,specOf_1cfc9d,subscribeEvent_6a3796,tabFromPath_668596,teardown_7b66f2,travel_5dc47a,viewOf_347798,widestOf_5079ff,wire_34ecce kMethod;
class n1012_42443b,n1238_6f83b0,n2616_94bc2d,n2978_6760f9,n687_557238,n847_b886cf kState;
```

## Links to

- [A system is a graph](https://banes-lab.com/software-architecture/model/a-system-is-a-graph.md)
- [Definitions own what, code owns how](https://banes-lab.com/software-architecture/model/definitions-own-what.md)
