Files
trail-mate/docs/engineering/package-diagrams/apps-linux_sim_shell/package-diagram.html
T

175 lines
37 KiB
HTML

<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<title>模块边界:apps/linux_sim_shell</title>
</head>
<body>
<main class="praxis-engineering-map" data-praxis-anchor="engineering:package:apps-linux_sim_shell" data-praxis-kind="engineering_package_diagram" data-praxis-status="candidate" data-praxis-confidence="high" data-praxis-document-path="docs/engineering/package-diagrams/apps-linux_sim_shell/package-diagram.html" data-praxis-drilldowns="[]">
<header class="praxis-design-map-header">
<p>Praxis Software Structure Model</p>
<h1>模块边界:apps/linux_sim_shell</h1>
<p>解释 apps/linux_sim_shell 的包/模块边界、文件数量、符号数量和跨模块依赖。</p>
<div class="meta-row">
<span>Package Diagrams</span>
<span>candidate / high</span>
<span>0.1.0 · 34aad0bffa2f / main</span>
</div>
</header>
<section class="semantic-layer" data-praxis-anchor="engineering:reading-guide" data-praxis-kind="engineering_document_section">
<h2>图的读法</h2>
<ul>
<li>这张 Package Diagram 以 apps/linux_sim_shell 为中心,展示它作为工程模块边界时观察到的文件规模、符号规模和跨模块依赖。</li>
<li>图中的箭头表示本地仓库证据观察到的跨模块关系,主要用于理解技术依赖方向;它不是业务流程顺序,也不是运行时消息时序。</li>
<li>当前观察到的主要外部依赖包括:apps/esp32_lvgl。</li>
</ul>
</section>
<section class="semantic-layer" data-praxis-anchor="engineering:technical-analysis" data-praxis-kind="engineering_document_section">
<h2>技术复杂度分析</h2>
<ul>
<li>apps/linux_sim_shell 当前包含 15 个文件和 102 个符号,属于软件结构模型识别出的技术组织边界。</li>
<li>跨模块关系呈现为:被其它模块引用或调用 6 次,主动依赖或调用外部模块 12 次,因此它依赖外部模块更多。</li>
<li>当前对外依赖未形成明显异常,但仍应结合具体业务入口判断依赖方向是否稳定。</li>
</ul>
</section>
<section class="semantic-layer" data-praxis-anchor="engineering:business-relation" data-praxis-kind="engineering_document_section">
<h2>与业务复杂度的关联</h2>
<ul>
<li>apps/linux_sim_shell 不是业务故事本身,而是业务能力落地时可能经过的技术边界。</li>
<li>如果组织/过程模型中某个 Use Case 的证据、入口或下钻图落在 apps/linux_sim_shell,该 Use Case 应当反向链接到这张 Package Diagram,说明业务故事由哪个工程模块承载。</li>
<li>当前关联仍是 CANDIDATE:这里只能根据仓库证据解释技术边界,不能替代组织/过程模型对业务故事、参与者和业务目标的确认。</li>
</ul>
</section>
<section class="semantic-layer" data-praxis-anchor="engineering:governance-notes" data-praxis-kind="engineering_document_section">
<h2>治理建议</h2>
<ul>
<li>新增功能时,优先确认它属于该模块的稳定职责,而不是因为调用方便而落入该模块。</li>
<li>保持该模块的依赖方向可解释,避免形成隐式公共工具箱。</li>
<li>当业务 Use Case 文档引用该模块时,应在 Use Case 下钻文档中记录具体入口、调用链或配置证据。</li>
</ul>
</section>
<section class="semantic-layer diagram-section" data-praxis-anchor="engineering:diagram-body" data-praxis-kind="engineering_diagram_body">
<h2>UML / 技术图</h2>
<pre class="mermaid" data-praxis-anchor="engineering:package:apps-linux_sim_shell:uml" data-praxis-kind="engineering_package_uml" data-praxis-drilldowns="[]">flowchart LR
package_node[&quot;apps/linux_sim_shell&quot;]
dependency_1[&quot;apps/esp32_lvgl&quot;]
package_node --&gt; dependency_1</pre>
</section>
<section class="semantic-layer" data-praxis-anchor="engineering:coverage" data-praxis-kind="engineering_document_section">
<h2>覆盖范围</h2>
<ul>
<li>模块路径:apps/linux_sim_shell</li>
<li>文件数:15</li>
<li>符号数:102</li>
<li>被其他模块依赖或调用:6</li>
<li>依赖或调用外部模块:12</li>
</ul>
</section>
<section class="semantic-layer engineering-element-drilldowns" data-praxis-anchor="engineering:package:apps-linux_sim_shell:element-drilldowns" data-praxis-kind="engineering_element_drilldown_index">
<h2>图内语义元素下钻</h2>
<ol>
<li data-praxis-anchor="engineering:package:apps-linux_sim_shell" data-praxis-kind="engineering_uml_element" data-praxis-mermaid-id="package_node" data-praxis-drilldowns="[]">
<strong>apps/linux_sim_shell</strong>
<span>package</span>
<p>apps/linux_sim_shell 是当前 Package Diagram 的中心工程边界,用来观察它自身规模、依赖方向和可下钻技术复杂度。</p>
<dl>
<div><dt>技术角色</dt><dd>技术组织边界:它把 apps/linux_sim_shell 下的文件、符号和跨模块关系聚合成一个可讨论的工程单元。</dd></div>
<div><dt>为什么出现</dt><dd>本地仓库证据在 apps/linux_sim_shell 下观察到足够文件、符号或跨模块关系,因此它值得被提升为软件结构模型中的 package 级入口。</dd></div>
<div><dt>关系意义</dt><dd>图中从 apps/linux_sim_shell 指向其它节点的箭头表示当前边界依赖外部 package/module;被其他模块依赖或调用 6 次、依赖或调用外部模块 12 次,用于判断它更像稳定复用边界还是编排/桥接边界。</dd></div>
<div><dt>下钻意图</dt><dd>下钻该节点可以继续查看 apps/linux_sim_shell 内的关键组件、结构协作切片、运行链路、部署节点和复杂度热点,从而理解这个工程边界如何承载功能变化。</dd></div>
<div><dt>业务关联</dt><dd>该节点不是业务故事本身,但组织/过程模型中落到 apps/linux_sim_shell 的 Use Case 可以把这里作为技术承载边界引用。当前关联仍是 CANDIDATE。</dd></div>
<div><dt>变更影响</dt><dd>修改 apps/linux_sim_shell 的公共入口、依赖方向或目录边界,可能影响引用它的组件图、sequence 片段、部署配置和相关业务故事的验证路径。</dd></div>
<div><dt>置信度</dt><dd>high</dd></div>
</dl>
<section><h3>证据</h3>
<ul>
<li>package scope: apps/linux_sim_shell</li>
<li>模块路径:apps/linux_sim_shell</li>
<li>文件数:15</li>
<li>符号数:102</li>
<li>被其他模块依赖或调用:6</li>
<li>依赖或调用外部模块:12</li>
<li>apps/linux_sim_shell/APP_SHELL_MANIFEST.md</li>
<li>apps/linux_sim_shell/CMakeLists.txt</li>
</ul>
</section>
<section><h3>风险</h3>
<ul>
<li>如果只把该节点当作目录名,会遗漏它作为稳定工程边界的职责判断。</li>
<li>如果依赖外部模块的迹象持续增加,可能说明该边界承担过多编排或桥接职责。</li>
</ul>
</section>
<section><h3>问题</h3>
<ul>
<li>当前仓库证据尚未把该 package 明确 Trace 到某个 Use Case;因此业务关联保持候选。</li>
</ul>
</section>
</li>
<li data-praxis-anchor="engineering:package:apps-esp32_lvgl" data-praxis-kind="engineering_uml_element" data-praxis-mermaid-id="dependency_1" data-praxis-drilldowns="[{&quot;id&quot;:&quot;engineering:diagram:package:apps-esp32_lvgl&quot;,&quot;kind&quot;:&quot;package&quot;,&quot;title&quot;:&quot;模块边界:apps/esp32_lvgl&quot;,&quot;summary&quot;:&quot;解释 apps/esp32_lvgl 的包/模块边界、文件数量、符号数量和跨模块依赖。&quot;,&quot;docPath&quot;:&quot;docs/engineering/package-diagrams/apps-esp32_lvgl/package-diagram.md&quot;,&quot;htmlPath&quot;:&quot;docs/engineering/package-diagrams/apps-esp32_lvgl/package-diagram.html&quot;,&quot;anchor&quot;:&quot;engineering:package:apps-esp32_lvgl&quot;,&quot;relation&quot;:&quot;parent_boundary&quot;,&quot;reason&quot;:&quot;打开 apps/esp32_lvgl 自己的包级边界,检查 apps/linux_sim_shell 依赖它时借用的是运行命令、共享能力、治理工具、模型适配还是基础设施职责。&quot;},{&quot;id&quot;:&quot;engineering:diagram:component:apps-esp32_lvgl-main&quot;,&quot;kind&quot;:&quot;component&quot;,&quot;title&quot;:&quot;函数节点:main&quot;,&quot;summary&quot;:&quot;function 位于 apps/esp32_lvgl/tests/esp32_lvgl_sd_coredump_contract_smoke.cpp#L33,协调多个外部对象或能力,用于解释技术协作和变更影响面。&quot;,&quot;docPath&quot;:&quot;docs/engineering/component-diagrams/apps-esp32_lvgl-main/component-diagram.md&quot;,&quot;htmlPath&quot;:&quot;docs/engineering/component-diagrams/apps-esp32_lvgl-main/component-diagram.html&quot;,&quot;anchor&quot;:&quot;engineering:component:function:main:apps-esp32_lvgl-tests-esp32_lvgl_sd_coredump_contract_smoke.cpp:33&quot;,&quot;relation&quot;:&quot;contains&quot;,&quot;reason&quot;:&quot;打开 函数节点:main 是为了确认 apps/esp32_lvgl 内部哪一个具体对象承担入口、编排、适配、契约或共享职责。重点查看代码锚点 apps/esp32_lvgl/tests/esp32_lvgl_sd_coredump_contract_smoke.cpp,以及它的被引用/调用关系和对外依赖/调用关系是否意味着变更会扩散。&quot;},{&quot;id&quot;:&quot;engineering:diagram:component:apps-esp32_lvgl-contains&quot;,&quot;kind&quot;:&quot;component&quot;,&quot;title&quot;:&quot;函数节点:contains&quot;,&quot;summary&quot;:&quot;function 位于 apps/esp32_lvgl/tests/esp32_lvgl_sd_coredump_contract_smoke.cpp#L19,被多个对象复用或依赖,用于解释技术协作和变更影响面。&quot;,&quot;docPath&quot;:&quot;docs/engineering/component-diagrams/apps-esp32_lvgl-contains/component-diagram.md&quot;,&quot;htmlPath&quot;:&quot;docs/engineering/component-diagrams/apps-esp32_lvgl-contains/component-diagram.html&quot;,&quot;anchor&quot;:&quot;engineering:component:function:contains:apps-esp32_lvgl-tests-esp32_lvgl_sd_coredump_contract_smoke.cpp:19&quot;,&quot;relation&quot;:&quot;contains&quot;,&quot;reason&quot;:&quot;打开 函数节点:contains 是为了确认 apps/esp32_lvgl 内部哪一个具体对象承担入口、编排、适配、契约或共享职责。重点查看代码锚点 apps/esp32_lvgl/tests/esp32_lvgl_sd_coredump_contract_smoke.cpp,以及它的被引用/调用关系和对外依赖/调用关系是否意味着变更会扩散。&quot;},{&quot;id&quot;:&quot;engineering:diagram:component:apps-esp32_lvgl-companion_enter&quot;,&quot;kind&quot;:&quot;component&quot;,&quot;title&quot;:&quot;函数节点:companion_enter&quot;,&quot;summary&quot;:&quot;function 位于 apps/esp32_lvgl/src/esp32_lvgl_idf_app_registry.cpp#L72,协调多个外部对象或能力,用于解释技术协作和变更影响面。&quot;,&quot;docPath&quot;:&quot;docs/engineering/component-diagrams/apps-esp32_lvgl-companion_enter/component-diagram.md&quot;,&quot;htmlPath&quot;:&quot;docs/engineering/component-diagrams/apps-esp32_lvgl-companion_enter/component-diagram.html&quot;,&quot;anchor&quot;:&quot;engineering:component:function:companion_enter:apps-esp32_lvgl-src-esp32_lvgl_idf_app_registry.cpp:72&quot;,&quot;relation&quot;:&quot;contains&quot;,&quot;reason&quot;:&quot;打开 函数节点:companion_enter 是为了确认 apps/esp32_lvgl 内部哪一个具体对象承担入口、编排、适配、契约或共享职责。重点查看代码锚点 apps/esp32_lvgl/src/esp32_lvgl_idf_app_registry.cpp,以及它的被引用/调用关系和对外依赖/调用关系是否意味着变更会扩散。&quot;},{&quot;id&quot;:&quot;engineering:diagram:sequence:tick-calls-log_loop_interval&quot;,&quot;kind&quot;:&quot;sequence&quot;,&quot;title&quot;:&quot;动态协作:tick 调用 log_loop_interval&quot;,&quot;summary&quot;:&quot;apps/esp32_lvgl/src/esp32_lvgl_arduino_loop_runtime.cpp 中的 tick calls apps/esp32_lvgl/src/esp32_lvgl_arduino_loop_runtime.cpp 中的 log_loop_interval。&quot;,&quot;docPath&quot;:&quot;docs/engineering/sequence-diagrams/tick-calls-log_loop_interval/sequence-diagram.md&quot;,&quot;htmlPath&quot;:&quot;docs/engineering/sequence-diagrams/tick-calls-log_loop_interval/sequence-diagram.html&quot;,&quot;anchor&quot;:&quot;engineering:runtime-flow:tick:log_loop_interval:apps-esp32_lvgl-src-esp32_lvgl_arduino_loop_runtime.cpp:apps-esp32_lvgl-src-esp32_lvgl_arduino_loop_runtime.cpp&quot;,&quot;relation&quot;:&quot;dynamic_flow&quot;,&quot;reason&quot;:&quot;打开这条 sequence 是为了把 apps/esp32_lvgl 的静态依赖还原成一段可读协作:tick -&gt; log_loop_interval。重点判断这是 import、调用、引用还是消息方向,以及它是否真的影响运行路径。&quot;},{&quot;id&quot;:&quot;engineering:diagram:sequence:add_status_line-calls-add_label&quot;,&quot;kind&quot;:&quot;sequence&quot;,&quot;title&quot;:&quot;动态协作:add_status_line 调用 add_label&quot;,&quot;summary&quot;:&quot;apps/esp32_lvgl/src/esp32_lvgl_idf_app_registry.cpp 中的 add_status_line calls apps/esp32_lvgl/src/esp32_lvgl_idf_app_registry.cpp 中的 add_label。&quot;,&quot;docPath&quot;:&quot;docs/engineering/sequence-diagrams/add_status_line-calls-add_label/sequence-diagram.md&quot;,&quot;htmlPath&quot;:&quot;docs/engineering/sequence-diagrams/add_status_line-calls-add_label/sequence-diagram.html&quot;,&quot;anchor&quot;:&quot;engineering:runtime-flow:add_status_line:add_label:apps-esp32_lvgl-src-esp32_lvgl_idf_app_registry.cpp:apps-esp32_lvgl-src-esp32_lvgl_idf_app_registry.cpp&quot;,&quot;relation&quot;:&quot;dynamic_flow&quot;,&quot;reason&quot;:&quot;打开这条 sequence 是为了把 apps/esp32_lvgl 的静态依赖还原成一段可读协作:add_status_line -&gt; add_label。重点判断这是 import、调用、引用还是消息方向,以及它是否真的影响运行路径。&quot;},{&quot;id&quot;:&quot;engineering:diagram:sequence:add_u32_line-calls-add_label&quot;,&quot;kind&quot;:&quot;sequence&quot;,&quot;title&quot;:&quot;动态协作:add_u32_line 调用 add_label&quot;,&quot;summary&quot;:&quot;apps/esp32_lvgl/src/esp32_lvgl_idf_app_registry.cpp 中的 add_u32_line calls apps/esp32_lvgl/src/esp32_lvgl_idf_app_registry.cpp 中的 add_label。&quot;,&quot;docPath&quot;:&quot;docs/engineering/sequence-diagrams/add_u32_line-calls-add_label/sequence-diagram.md&quot;,&quot;htmlPath&quot;:&quot;docs/engineering/sequence-diagrams/add_u32_line-calls-add_label/sequence-diagram.html&quot;,&quot;anchor&quot;:&quot;engineering:runtime-flow:add_u32_line:add_label:apps-esp32_lvgl-src-esp32_lvgl_idf_app_registry.cpp:apps-esp32_lvgl-src-esp32_lvgl_idf_app_registry.cpp&quot;,&quot;relation&quot;:&quot;dynamic_flow&quot;,&quot;reason&quot;:&quot;打开这条 sequence 是为了把 apps/esp32_lvgl 的静态依赖还原成一段可读协作:add_u32_line -&gt; add_label。重点判断这是 import、调用、引用还是消息方向,以及它是否真的影响运行路径。&quot;},{&quot;id&quot;:&quot;engineering:diagram:sequence:add_hex_line-calls-add_status_line&quot;,&quot;kind&quot;:&quot;sequence&quot;,&quot;title&quot;:&quot;动态协作:add_hex_line 调用 add_status_line&quot;,&quot;summary&quot;:&quot;apps/esp32_lvgl/src/esp32_lvgl_idf_app_registry.cpp 中的 add_hex_line calls apps/esp32_lvgl/src/esp32_lvgl_idf_app_registry.cpp 中的 add_status_line。&quot;,&quot;docPath&quot;:&quot;docs/engineering/sequence-diagrams/add_hex_line-calls-add_status_line/sequence-diagram.md&quot;,&quot;htmlPath&quot;:&quot;docs/engineering/sequence-diagrams/add_hex_line-calls-add_status_line/sequence-diagram.html&quot;,&quot;anchor&quot;:&quot;engineering:runtime-flow:add_hex_line:add_status_line:apps-esp32_lvgl-src-esp32_lvgl_idf_app_registry.cpp:apps-esp32_lvgl-src-esp32_lvgl_idf_app_registry.cpp&quot;,&quot;relation&quot;:&quot;dynamic_flow&quot;,&quot;reason&quot;:&quot;打开这条 sequence 是为了把 apps/esp32_lvgl 的静态依赖还原成一段可读协作:add_hex_line -&gt; add_status_line。重点判断这是 import、调用、引用还是消息方向,以及它是否真的影响运行路径。&quot;},{&quot;id&quot;:&quot;engineering:diagram:sequence:companion_enter-calls-add_label&quot;,&quot;kind&quot;:&quot;sequence&quot;,&quot;title&quot;:&quot;动态协作:companion_enter 调用 add_label&quot;,&quot;summary&quot;:&quot;apps/esp32_lvgl/src/esp32_lvgl_idf_app_registry.cpp 中的 companion_enter calls apps/esp32_lvgl/src/esp32_lvgl_idf_app_registry.cpp 中的 add_label。&quot;,&quot;docPath&quot;:&quot;docs/engineering/sequence-diagrams/companion_enter-calls-add_label/sequence-diagram.md&quot;,&quot;htmlPath&quot;:&quot;docs/engineering/sequence-diagrams/companion_enter-calls-add_label/sequence-diagram.html&quot;,&quot;anchor&quot;:&quot;engineering:runtime-flow:companion_enter:add_label:apps-esp32_lvgl-src-esp32_lvgl_idf_app_registry.cpp:apps-esp32_lvgl-src-esp32_lvgl_idf_app_registry.cpp&quot;,&quot;relation&quot;:&quot;dynamic_flow&quot;,&quot;reason&quot;:&quot;打开这条 sequence 是为了把 apps/esp32_lvgl 的静态依赖还原成一段可读协作:companion_enter -&gt; add_label。重点判断这是 import、调用、引用还是消息方向,以及它是否真的影响运行路径。&quot;}]">
<strong>apps/esp32_lvgl</strong>
<span>package</span>
<p>apps/esp32_lvgl 是 apps/linux_sim_shell 当前观察到的外部技术边界依赖;它说明当前模块不是孤立实现,而是需要借助另一组工程能力完成职责。</p>
<dl>
<div><dt>技术角色</dt><dd>跨模块技术依赖边界:当前 package 需要另一个 package/module 提供能力、契约、配置或运行支撑。</dd></div>
<div><dt>为什么出现</dt><dd>本地仓库证据在 apps/linux_sim_shell 与 apps/esp32_lvgl 之间观察到跨模块事实关系,因此该依赖被放入 Package Diagram,而不是只藏在代码 import/call 里。</dd></div>
<div><dt>关系意义</dt><dd>apps/linux_sim_shell -&gt; apps/esp32_lvgl 表示本地仓库证据观察到跨模块关系;它解释技术依赖方向,但不直接证明业务流程。</dd></div>
<div><dt>下钻意图</dt><dd>下钻 apps/esp32_lvgl 可以查看它自己的 Package Diagram,再继续进入其组件、结构、sequence 或热点,判断当前依赖究竟落在入口、运行时、工具注册、模型适配还是基础设施边界。</dd></div>
<div><dt>业务关联</dt><dd>apps/linux_sim_shell 如果承载用户可见能力,那么对 apps/esp32_lvgl 的依赖可能是该能力的运行机制、扩展点或治理约束。该业务关联需要由组织/过程模型的 Use Case 证据确认。</dd></div>
<div><dt>变更影响</dt><dd>修改 apps/esp32_lvgl 的公共接口、路径或运行方式,可能让 apps/linux_sim_shell 的调用链、打包入口、agent 工作流或 UI 行为发生连锁变化。</dd></div>
<div><dt>置信度</dt><dd>high</dd></div>
</dl>
<section><h3>证据</h3>
<ul>
<li>dependency edge: apps/linux_sim_shell -&gt; apps/esp32_lvgl</li>
<li>apps/esp32_lvgl/APP_SHELL_MANIFEST.md</li>
<li>apps/esp32_lvgl/CMakeLists.txt</li>
<li>apps/esp32_lvgl/library.json</li>
<li>apps/esp32_lvgl/README.md</li>
<li>apps/esp32_lvgl/src/esp32_lvgl_app_shell.cpp</li>
<li>apps/esp32_lvgl/src/esp32_lvgl_app_shell.h</li>
<li>apps/esp32_lvgl/src/esp32_lvgl_arduino_app_registry.cpp</li>
</ul>
</section>
<section><h3>风险</h3>
<ul>
<li>跨模块依赖只能证明技术关系,不能直接证明业务关系。</li>
<li>如果该依赖只是因为实现方便而存在,未来变更可能形成边界漂移或隐式公共工具箱。</li>
</ul>
</section>
<section><h3>问题</h3>
<ul>
<li>当前证据尚未证明 apps/linux_sim_shell 依赖 apps/esp32_lvgl 与某个 Use Case、runtime command 或配置决策直接相关。</li>
<li>当前依赖方向按仓库事实记录为候选,尚未发现架构决策文档证明它是稳定边界。</li>
</ul>
</section>
</li>
</ol>
</section>
<section class="semantic-layer engineering-drilldowns" data-praxis-anchor="engineering:package:apps-linux_sim_shell:drilldowns" data-praxis-kind="engineering_drilldown_options" data-praxis-drilldowns="[]">
<h2>可下钻 UML</h2>
<p>当前没有根据证据关联到更细图。</p>
</section>
<section class="semantic-layer" data-praxis-anchor="engineering:evidence" data-praxis-kind="engineering_document_section">
<h2>证据</h2>
<ul>
<li>apps/linux_sim_shell/APP_SHELL_MANIFEST.md</li>
<li>apps/linux_sim_shell/CMakeLists.txt</li>
<li>apps/linux_sim_shell/README.md</li>
<li>apps/linux_sim_shell/src/linux_sim_app_shell.cpp</li>
<li>apps/linux_sim_shell/src/linux_sim_app_shell.h</li>
<li>apps/linux_sim_shell/src/linux_sim_runtime_entry_adoption_probe.cpp</li>
<li>apps/linux_sim_shell/src/linux_sim_runtime_entry_adoption_probe.h</li>
<li>apps/linux_sim_shell/src/linux_sim_runtime_entry.cpp</li>
</ul>
</section>
<section class="semantic-layer" data-praxis-anchor="engineering:questions" data-praxis-kind="engineering_document_section">
<h2>问题</h2>
<ul>
<li>暂无未决问题。</li>
</ul>
</section>
<script type="application/json" id="praxis-engineering-diagram-document">{"id":"engineering:diagram:package:apps-linux_sim_shell","kind":"package","title":"模块边界:apps/linux_sim_shell","summary":"解释 apps/linux_sim_shell 的包/模块边界、文件数量、符号数量和跨模块依赖。","docPath":"docs/engineering/package-diagrams/apps-linux_sim_shell/package-diagram.md","htmlPath":"docs/engineering/package-diagrams/apps-linux_sim_shell/package-diagram.html","anchor":"engineering:package:apps-linux_sim_shell","status":"candidate","confidence":"high","mermaidKind":"flowchart","mermaid":"flowchart LR\n package_node[\"apps/linux_sim_shell\"]\n dependency_1[\"apps/esp32_lvgl\"]\n package_node --\u003e dependency_1","readingGuide":["这张 Package Diagram 以 apps/linux_sim_shell 为中心,展示它作为工程模块边界时观察到的文件规模、符号规模和跨模块依赖。","图中的箭头表示本地仓库证据观察到的跨模块关系,主要用于理解技术依赖方向;它不是业务流程顺序,也不是运行时消息时序。","当前观察到的主要外部依赖包括:apps/esp32_lvgl。"],"technicalAnalysis":["apps/linux_sim_shell 当前包含 15 个文件和 102 个符号,属于软件结构模型识别出的技术组织边界。","跨模块关系呈现为:被其它模块引用或调用 6 次,主动依赖或调用外部模块 12 次,因此它依赖外部模块更多。","当前对外依赖未形成明显异常,但仍应结合具体业务入口判断依赖方向是否稳定。"],"businessRelation":["apps/linux_sim_shell 不是业务故事本身,而是业务能力落地时可能经过的技术边界。","如果组织/过程模型中某个 Use Case 的证据、入口或下钻图落在 apps/linux_sim_shell,该 Use Case 应当反向链接到这张 Package Diagram,说明业务故事由哪个工程模块承载。","当前关联仍是 CANDIDATE:这里只能根据仓库证据解释技术边界,不能替代组织/过程模型对业务故事、参与者和业务目标的确认。"],"governanceNotes":["新增功能时,优先确认它属于该模块的稳定职责,而不是因为调用方便而落入该模块。","保持该模块的依赖方向可解释,避免形成隐式公共工具箱。","当业务 Use Case 文档引用该模块时,应在 Use Case 下钻文档中记录具体入口、调用链或配置证据。"],"coverage":["模块路径:apps/linux_sim_shell","文件数:15","符号数:102","被其他模块依赖或调用:6","依赖或调用外部模块:12"],"evidencePaths":["apps/linux_sim_shell/APP_SHELL_MANIFEST.md","apps/linux_sim_shell/CMakeLists.txt","apps/linux_sim_shell/README.md","apps/linux_sim_shell/src/linux_sim_app_shell.cpp","apps/linux_sim_shell/src/linux_sim_app_shell.h","apps/linux_sim_shell/src/linux_sim_runtime_entry_adoption_probe.cpp","apps/linux_sim_shell/src/linux_sim_runtime_entry_adoption_probe.h","apps/linux_sim_shell/src/linux_sim_runtime_entry.cpp"],"questions":[],"scope":{"packageId":"apps/linux_sim_shell","filePath":"apps/linux_sim_shell"},"drilldowns":[],"elements":[{"id":"engineering:diagram:package:apps-linux_sim_shell:element:apps-linux_sim_shell","mermaidId":"package_node","label":"apps/linux_sim_shell","kind":"package","anchor":"engineering:package:apps-linux_sim_shell","summary":"apps/linux_sim_shell 是当前 Package Diagram 的中心工程边界,用来观察它自身规模、依赖方向和可下钻技术复杂度。","role":"技术组织边界:它把 apps/linux_sim_shell 下的文件、符号和跨模块关系聚合成一个可讨论的工程单元。","whyItExists":"本地仓库证据在 apps/linux_sim_shell 下观察到足够文件、符号或跨模块关系,因此它值得被提升为软件结构模型中的 package 级入口。","relationshipMeaning":"图中从 apps/linux_sim_shell 指向其它节点的箭头表示当前边界依赖外部 package/module;被其他模块依赖或调用 6 次、依赖或调用外部模块 12 次,用于判断它更像稳定复用边界还是编排/桥接边界。","drilldownIntent":"下钻该节点可以继续查看 apps/linux_sim_shell 内的关键组件、结构协作切片、运行链路、部署节点和复杂度热点,从而理解这个工程边界如何承载功能变化。","businessRelevance":"该节点不是业务故事本身,但组织/过程模型中落到 apps/linux_sim_shell 的 Use Case 可以把这里作为技术承载边界引用。当前关联仍是 CANDIDATE。","changeImpact":"修改 apps/linux_sim_shell 的公共入口、依赖方向或目录边界,可能影响引用它的组件图、sequence 片段、部署配置和相关业务故事的验证路径。","evidence":["package scope: apps/linux_sim_shell","模块路径:apps/linux_sim_shell","文件数:15","符号数:102","被其他模块依赖或调用:6","依赖或调用外部模块:12","apps/linux_sim_shell/APP_SHELL_MANIFEST.md","apps/linux_sim_shell/CMakeLists.txt"],"risks":["如果只把该节点当作目录名,会遗漏它作为稳定工程边界的职责判断。","如果依赖外部模块的迹象持续增加,可能说明该边界承担过多编排或桥接职责。"],"questions":["当前仓库证据尚未把该 package 明确 Trace 到某个 Use Case;因此业务关联保持候选。"],"confidence":"high","drilldowns":[]},{"id":"engineering:diagram:package:apps-linux_sim_shell:element:apps-esp32_lvgl","mermaidId":"dependency_1","label":"apps/esp32_lvgl","kind":"package","anchor":"engineering:package:apps-esp32_lvgl","summary":"apps/esp32_lvgl 是 apps/linux_sim_shell 当前观察到的外部技术边界依赖;它说明当前模块不是孤立实现,而是需要借助另一组工程能力完成职责。","role":"跨模块技术依赖边界:当前 package 需要另一个 package/module 提供能力、契约、配置或运行支撑。","whyItExists":"本地仓库证据在 apps/linux_sim_shell 与 apps/esp32_lvgl 之间观察到跨模块事实关系,因此该依赖被放入 Package Diagram,而不是只藏在代码 import/call 里。","relationshipMeaning":"apps/linux_sim_shell -\u003e apps/esp32_lvgl 表示本地仓库证据观察到跨模块关系;它解释技术依赖方向,但不直接证明业务流程。","drilldownIntent":"下钻 apps/esp32_lvgl 可以查看它自己的 Package Diagram,再继续进入其组件、结构、sequence 或热点,判断当前依赖究竟落在入口、运行时、工具注册、模型适配还是基础设施边界。","businessRelevance":"apps/linux_sim_shell 如果承载用户可见能力,那么对 apps/esp32_lvgl 的依赖可能是该能力的运行机制、扩展点或治理约束。该业务关联需要由组织/过程模型的 Use Case 证据确认。","changeImpact":"修改 apps/esp32_lvgl 的公共接口、路径或运行方式,可能让 apps/linux_sim_shell 的调用链、打包入口、agent 工作流或 UI 行为发生连锁变化。","evidence":["dependency edge: apps/linux_sim_shell -\u003e apps/esp32_lvgl","apps/esp32_lvgl/APP_SHELL_MANIFEST.md","apps/esp32_lvgl/CMakeLists.txt","apps/esp32_lvgl/library.json","apps/esp32_lvgl/README.md","apps/esp32_lvgl/src/esp32_lvgl_app_shell.cpp","apps/esp32_lvgl/src/esp32_lvgl_app_shell.h","apps/esp32_lvgl/src/esp32_lvgl_arduino_app_registry.cpp"],"risks":["跨模块依赖只能证明技术关系,不能直接证明业务关系。","如果该依赖只是因为实现方便而存在,未来变更可能形成边界漂移或隐式公共工具箱。"],"questions":["当前证据尚未证明 apps/linux_sim_shell 依赖 apps/esp32_lvgl 与某个 Use Case、runtime command 或配置决策直接相关。","当前依赖方向按仓库事实记录为候选,尚未发现架构决策文档证明它是稳定边界。"],"confidence":"high","drilldowns":[{"id":"engineering:diagram:package:apps-esp32_lvgl","kind":"package","title":"模块边界:apps/esp32_lvgl","summary":"解释 apps/esp32_lvgl 的包/模块边界、文件数量、符号数量和跨模块依赖。","docPath":"docs/engineering/package-diagrams/apps-esp32_lvgl/package-diagram.md","htmlPath":"docs/engineering/package-diagrams/apps-esp32_lvgl/package-diagram.html","anchor":"engineering:package:apps-esp32_lvgl","relation":"parent_boundary","reason":"打开 apps/esp32_lvgl 自己的包级边界,检查 apps/linux_sim_shell 依赖它时借用的是运行命令、共享能力、治理工具、模型适配还是基础设施职责。"},{"id":"engineering:diagram:component:apps-esp32_lvgl-main","kind":"component","title":"函数节点:main","summary":"function 位于 apps/esp32_lvgl/tests/esp32_lvgl_sd_coredump_contract_smoke.cpp#L33,协调多个外部对象或能力,用于解释技术协作和变更影响面。","docPath":"docs/engineering/component-diagrams/apps-esp32_lvgl-main/component-diagram.md","htmlPath":"docs/engineering/component-diagrams/apps-esp32_lvgl-main/component-diagram.html","anchor":"engineering:component:function:main:apps-esp32_lvgl-tests-esp32_lvgl_sd_coredump_contract_smoke.cpp:33","relation":"contains","reason":"打开 函数节点:main 是为了确认 apps/esp32_lvgl 内部哪一个具体对象承担入口、编排、适配、契约或共享职责。重点查看代码锚点 apps/esp32_lvgl/tests/esp32_lvgl_sd_coredump_contract_smoke.cpp,以及它的被引用/调用关系和对外依赖/调用关系是否意味着变更会扩散。"},{"id":"engineering:diagram:component:apps-esp32_lvgl-contains","kind":"component","title":"函数节点:contains","summary":"function 位于 apps/esp32_lvgl/tests/esp32_lvgl_sd_coredump_contract_smoke.cpp#L19,被多个对象复用或依赖,用于解释技术协作和变更影响面。","docPath":"docs/engineering/component-diagrams/apps-esp32_lvgl-contains/component-diagram.md","htmlPath":"docs/engineering/component-diagrams/apps-esp32_lvgl-contains/component-diagram.html","anchor":"engineering:component:function:contains:apps-esp32_lvgl-tests-esp32_lvgl_sd_coredump_contract_smoke.cpp:19","relation":"contains","reason":"打开 函数节点:contains 是为了确认 apps/esp32_lvgl 内部哪一个具体对象承担入口、编排、适配、契约或共享职责。重点查看代码锚点 apps/esp32_lvgl/tests/esp32_lvgl_sd_coredump_contract_smoke.cpp,以及它的被引用/调用关系和对外依赖/调用关系是否意味着变更会扩散。"},{"id":"engineering:diagram:component:apps-esp32_lvgl-companion_enter","kind":"component","title":"函数节点:companion_enter","summary":"function 位于 apps/esp32_lvgl/src/esp32_lvgl_idf_app_registry.cpp#L72,协调多个外部对象或能力,用于解释技术协作和变更影响面。","docPath":"docs/engineering/component-diagrams/apps-esp32_lvgl-companion_enter/component-diagram.md","htmlPath":"docs/engineering/component-diagrams/apps-esp32_lvgl-companion_enter/component-diagram.html","anchor":"engineering:component:function:companion_enter:apps-esp32_lvgl-src-esp32_lvgl_idf_app_registry.cpp:72","relation":"contains","reason":"打开 函数节点:companion_enter 是为了确认 apps/esp32_lvgl 内部哪一个具体对象承担入口、编排、适配、契约或共享职责。重点查看代码锚点 apps/esp32_lvgl/src/esp32_lvgl_idf_app_registry.cpp,以及它的被引用/调用关系和对外依赖/调用关系是否意味着变更会扩散。"},{"id":"engineering:diagram:sequence:tick-calls-log_loop_interval","kind":"sequence","title":"动态协作:tick 调用 log_loop_interval","summary":"apps/esp32_lvgl/src/esp32_lvgl_arduino_loop_runtime.cpp 中的 tick calls apps/esp32_lvgl/src/esp32_lvgl_arduino_loop_runtime.cpp 中的 log_loop_interval。","docPath":"docs/engineering/sequence-diagrams/tick-calls-log_loop_interval/sequence-diagram.md","htmlPath":"docs/engineering/sequence-diagrams/tick-calls-log_loop_interval/sequence-diagram.html","anchor":"engineering:runtime-flow:tick:log_loop_interval:apps-esp32_lvgl-src-esp32_lvgl_arduino_loop_runtime.cpp:apps-esp32_lvgl-src-esp32_lvgl_arduino_loop_runtime.cpp","relation":"dynamic_flow","reason":"打开这条 sequence 是为了把 apps/esp32_lvgl 的静态依赖还原成一段可读协作:tick -\u003e log_loop_interval。重点判断这是 import、调用、引用还是消息方向,以及它是否真的影响运行路径。"},{"id":"engineering:diagram:sequence:add_status_line-calls-add_label","kind":"sequence","title":"动态协作:add_status_line 调用 add_label","summary":"apps/esp32_lvgl/src/esp32_lvgl_idf_app_registry.cpp 中的 add_status_line calls apps/esp32_lvgl/src/esp32_lvgl_idf_app_registry.cpp 中的 add_label。","docPath":"docs/engineering/sequence-diagrams/add_status_line-calls-add_label/sequence-diagram.md","htmlPath":"docs/engineering/sequence-diagrams/add_status_line-calls-add_label/sequence-diagram.html","anchor":"engineering:runtime-flow:add_status_line:add_label:apps-esp32_lvgl-src-esp32_lvgl_idf_app_registry.cpp:apps-esp32_lvgl-src-esp32_lvgl_idf_app_registry.cpp","relation":"dynamic_flow","reason":"打开这条 sequence 是为了把 apps/esp32_lvgl 的静态依赖还原成一段可读协作:add_status_line -\u003e add_label。重点判断这是 import、调用、引用还是消息方向,以及它是否真的影响运行路径。"},{"id":"engineering:diagram:sequence:add_u32_line-calls-add_label","kind":"sequence","title":"动态协作:add_u32_line 调用 add_label","summary":"apps/esp32_lvgl/src/esp32_lvgl_idf_app_registry.cpp 中的 add_u32_line calls apps/esp32_lvgl/src/esp32_lvgl_idf_app_registry.cpp 中的 add_label。","docPath":"docs/engineering/sequence-diagrams/add_u32_line-calls-add_label/sequence-diagram.md","htmlPath":"docs/engineering/sequence-diagrams/add_u32_line-calls-add_label/sequence-diagram.html","anchor":"engineering:runtime-flow:add_u32_line:add_label:apps-esp32_lvgl-src-esp32_lvgl_idf_app_registry.cpp:apps-esp32_lvgl-src-esp32_lvgl_idf_app_registry.cpp","relation":"dynamic_flow","reason":"打开这条 sequence 是为了把 apps/esp32_lvgl 的静态依赖还原成一段可读协作:add_u32_line -\u003e add_label。重点判断这是 import、调用、引用还是消息方向,以及它是否真的影响运行路径。"},{"id":"engineering:diagram:sequence:add_hex_line-calls-add_status_line","kind":"sequence","title":"动态协作:add_hex_line 调用 add_status_line","summary":"apps/esp32_lvgl/src/esp32_lvgl_idf_app_registry.cpp 中的 add_hex_line calls apps/esp32_lvgl/src/esp32_lvgl_idf_app_registry.cpp 中的 add_status_line。","docPath":"docs/engineering/sequence-diagrams/add_hex_line-calls-add_status_line/sequence-diagram.md","htmlPath":"docs/engineering/sequence-diagrams/add_hex_line-calls-add_status_line/sequence-diagram.html","anchor":"engineering:runtime-flow:add_hex_line:add_status_line:apps-esp32_lvgl-src-esp32_lvgl_idf_app_registry.cpp:apps-esp32_lvgl-src-esp32_lvgl_idf_app_registry.cpp","relation":"dynamic_flow","reason":"打开这条 sequence 是为了把 apps/esp32_lvgl 的静态依赖还原成一段可读协作:add_hex_line -\u003e add_status_line。重点判断这是 import、调用、引用还是消息方向,以及它是否真的影响运行路径。"},{"id":"engineering:diagram:sequence:companion_enter-calls-add_label","kind":"sequence","title":"动态协作:companion_enter 调用 add_label","summary":"apps/esp32_lvgl/src/esp32_lvgl_idf_app_registry.cpp 中的 companion_enter calls apps/esp32_lvgl/src/esp32_lvgl_idf_app_registry.cpp 中的 add_label。","docPath":"docs/engineering/sequence-diagrams/companion_enter-calls-add_label/sequence-diagram.md","htmlPath":"docs/engineering/sequence-diagrams/companion_enter-calls-add_label/sequence-diagram.html","anchor":"engineering:runtime-flow:companion_enter:add_label:apps-esp32_lvgl-src-esp32_lvgl_idf_app_registry.cpp:apps-esp32_lvgl-src-esp32_lvgl_idf_app_registry.cpp","relation":"dynamic_flow","reason":"打开这条 sequence 是为了把 apps/esp32_lvgl 的静态依赖还原成一段可读协作:companion_enter -\u003e add_label。重点判断这是 import、调用、引用还是消息方向,以及它是否真的影响运行路径。"}]}]}</script>
</main>
</body>
</html>