This commit is contained in:
2026-09-15 01:12:50 +08:00
parent 2db889ad89
commit 1a75503105
99 changed files with 4168 additions and 726 deletions
@@ -87,8 +87,9 @@
<article data-uid="Anatomy-ProgramBranch">
<h1 id="program-branch">Program Branch</h1>
<p>Program is the lower of the two Control-Tree branches the Execution page hosts: route <code>/execution</code>,
Control-Tree path <code>execution/program</code>, one node per NC source file the session read. It is a
<p>Program is the lower of the two roots of the Execution page's Control Tree, Mission being the upper:
route <code>/execution</code>, Control-Tree path <code>execution/program</code>, one node per NC source file the session
read. It is a
read-only view of a run — the file's text, the passes that went over it, the per-line marks the run
left behind, and the writeback files the run wrote — assembled from session data rather than from
anything typed into it. Its node ids are positional, so an id addresses a node without surviving the
@@ -97,9 +98,12 @@ branch growing around it.</p>
<p>Mission is what a run executes; Program is what the run read. That one difference sets the rest of
the branch:</p>
<ul>
<li>Mission's nodes edit the project. Program's item types declare a panel and a child builder and
nothing else — no enable checkbox (the tree hides the tick on every node that is not a Mission
command or an enable-bearing Mission section), no control bar, no add, delete, move or duplicate.</li>
<li>Mission's nodes edit the project. Program's item types declare a panel — and, on the root and the
file node, a child builder — and nothing else: no enable checkbox (the tree hides the tick on
every node that is not a Mission command or an enable-bearing Mission section), none of the row
affordances a Mission row carries (no drag handle, no add, delete, move or duplicate button), and
no counterpart to Mission's one panel-side structural edit, the multi-pick insert of the
<a class="xref" href="mission/NcFileCommand-panel.html">Program File editor</a>.</li>
<li>Mission's shape is authored. Program's shape is a consequence: a subprogram file appears on it
only because a run followed a call into it.</li>
<li>Mission belongs to the project. Program's contents belong to the session — the index behind it is
@@ -115,10 +119,10 @@ merge uses, and they share one namespace, so a Program File path and an NC Code
alike collapse into one node. A Program File command whose path is still unset is skipped and seeds
nothing. A placeholder carries no invocations, so its panel shows the file's text with no marks and
an empty, disabled pass selector.</p>
<p>The transport bar is the one control the branch does carry, and it is not the branch's own: the
primary editor pane pins the <a href="execution-tool-bar.html">Execution Tool Bar</a> above the panel of the
Execution root and of every node beneath it, so a run can be started, stepped and reset while a
program file is on screen.</p>
<p>The branch carries no transport of its own either. The <a href="execution-tool-bar.html">Execution Tool Bar</a>
sits in the Control Tree pane's run header — above the tree scroller, beside the execution-status
badge, on the Execution page only — so a run can be started, stepped and reset while a program file
is on screen, and the editor pane below the tree shows nothing but the selected node's panel.</p>
<h2 id="the-nodes-the-branch-mints">The Nodes the Branch Mints</h2>
<p>Three item types, each keyed by position rather than by identity.</p>
<p><strong>The branch root</strong> (<code>execution/program</code>) carries the summary panel and the child builder that
@@ -229,8 +233,8 @@ when it mounts — or through a watcher, when it was already the selected panel.
before the first page of text resolves is parked again and re-applied once the line array is sized.</p>
<h2 id="when-the-branch-is-rebuilt">When the Branch Is Rebuilt</h2>
<ul>
<li><strong>Page initialization.</strong> Building the Execution root builds the branch, and only when a project is
loaded; without one it stays empty.</li>
<li><strong>Page initialization.</strong> Building the Execution page's two roots builds the branch, and only when
a project is loaded; without one the root stands with no children.</li>
<li><strong>Any change in the broadcast execution status.</strong> The status the hub reports is one of
<code>NoProject</code>, <code>Ready</code>, <code>Running</code>, <code>Paused</code> and <code>Finished</code>, and the host re-reads the branch
whenever that value changes. It deliberately does not take the structural-change path used
@@ -239,9 +243,10 @@ keep re-opening a branch the reader had closed. The panels pick up <strong>part<
the replaced nodes: the path caption, the pass selector, the inline wording and the executed-line
count are all derived from the node, but the file text is not — it is fetched once per page on
mount and on scroll, with no watcher on the path, and the panel is not remounted because its key
is built from the node id, which is positional and therefore unchanged. A rebuild that puts a
different file at the same index leaves the previous file's text on screen under the new node's
caption and marks.</li>
— the node id, the node key and the mission stamp — reduces on a Program node to the id alone,
the other two parts being empty, and the id is positional and therefore unchanged. A rebuild that
puts a different file at the same index leaves the previous file's text on screen under the new
node's caption and marks.</li>
<li><strong>The refresh button on the root panel.</strong> This one does take the structural-change path: it
re-reads the file tree from the current session and expands the branch.</li>
</ul>
@@ -315,16 +320,18 @@ selector, the Follow toggle, the paged line viewer, the execution marks, the ste
converted-line badges, and the cursor and hover wiring.</li>
<li><code>wwwroot-src/src/components/controlTree/ProgramConversionFilePanel.vue</code> — one written file: the
paged line viewer and the source-line links back into the file panel.</li>
<li><code>wwwroot-src/src/components/controlTree/useControlTreeHost.ts</code> — declares the branch root under
the Execution root, re-reads it on every execution-status change without expanding it, and hides
the tick on every node that is not a Mission command or an enable-bearing Mission section.</li>
<li><code>wwwroot-src/src/components/controlTree/useControlTreeHost.ts</code> — declares the branch root as the
Execution page's second root, below Mission, re-reads it on every execution-status change without
expanding it, and hides the tick on every node that is not a Mission command or an enable-bearing
Mission section.</li>
<li><code>wwwroot-src/src/components/controlTree/itemTypes.ts</code> — the node shape carrying the program
bookkeeping, the merged item-type registry, and the eager subtree builder.</li>
<li><code>wwwroot-src/src/components/controlTree/ControlTreePanel.vue</code> — the tree pane that renders the
branch's nodes and binds the tree's strict tick strategy.</li>
<li><code>wwwroot-src/src/components/controlTree/PrimarySlavePanel.vue</code> — mounts the selected node's panel,
forwards its selection request to the host, and pins the transport bar above every Execution-scope
node.</li>
branch's nodes, binds the tree's strict tick strategy, and pins the run header — the transport bar
and the execution-status badge — above the tree on the Execution page.</li>
<li><code>wwwroot-src/src/components/controlTree/PrimarySlavePanel.vue</code> — mounts the selected node's panel
under a key built from the node id, the node key and the mission stamp — the last two empty on
every Program node — and forwards its selection request to the host.</li>
<li><code>wwwroot-src/src/api/ncProgram.ts</code> — the typed client for the file tree, the paged lines, the line
marks, the syntax piece, the sentence-to-step mapping and both directions of conversion links.</li>
<li><code>wwwroot-src/src/api/clStrip.ts</code> — the step-select and step-enter posts a line click and a line
@@ -363,8 +370,11 @@ inline node and whose text is that node's only source.</li>
</ul>
<h2 id="see-also">See Also</h2>
<ul>
<li><a class="xref" href="mission/mission-root-panel.html">Mission Root Panel</a> — the editable twin: the command list this branch reports on, and
the only place the NC file list is changed</li>
<li><a class="xref" href="mission/mission-root-panel.html">Mission Root Panel</a> — the editable twin: the command list this branch reports on. Its
Add Command, drag, move, duplicate and delete ops live on the Control Tree rows and act on
commands of any kind; the root's own panel is informational — a no-project note when no project
is loaded, otherwise the command count with an Add Command prompt while that count is zero, and
the run-order hint in either case</li>
<li><a class="xref" href="index.html">Execution Page</a> — the page that hosts both branches, and the transport, canvas and charts
the branch's selections drive</li>
</ul>