deploy webservice static-file routing for docsite folder URLs, per-instance step-cache db, and constant-height panel title bars.

This commit is contained in:
2026-08-27 14:51:37 +08:00
parent 1fc510af5e
commit 2a98ae7556
1468 changed files with 182837 additions and 18888 deletions
@@ -98,7 +98,7 @@ Class NcRunnerSessionState
</div>
<div class="markdown summary"><p>NC pipeline state held on a <a class="xref" href="Hi.MachiningProcs.MachiningSession.html">MachiningSession</a> and shared across multiple
<a class="xref" href="Hi.Numerical.IControlRunner.html#Hi_Numerical_IControlRunner_RunControlLines_System_String_System_Collections_Generic_IEnumerable_System_String__Hi_MachiningProcs_MachiningSession_Hi_MachiningProcs_SessionProgress_System_Threading_CancellationToken_">RunControlLines(string, IEnumerable&lt;string&gt;, MachiningSession, SessionProgress, CancellationToken)</a> calls within that session. The per-layer
<a class="xref" href="Hi.Numerical.INcRunner.html#Hi_Numerical_INcRunner_RunNcLines_System_String_System_Collections_Generic_IEnumerable_System_String__Hi_MachiningProcs_MachiningSession_Hi_MachiningProcs_StepDiagnosticProgress_Hi_NcParsers_NcDiagnosticProgress_System_Threading_CancellationToken_">RunNcLines(string, IEnumerable&lt;string&gt;, MachiningSession, StepDiagnosticProgress, NcDiagnosticProgress, CancellationToken)</a> calls within that session. The per-layer
<a class="xref" href="Hi.MachiningProcs.NcRunnerSessionState.html#Hi_MachiningProcs_NcRunnerSessionState_SyntaxPieceLayers">SyntaxPieceLayers</a> are extended via <a class="xref" href="Hi.Common.Collections.LazyLinkedList-1.html#Hi_Common_Collections_LazyLinkedList_1_AppendSource_System_Collections_Generic_IEnumerable__0__">AppendSource(IEnumerable&lt;T&gt;)</a>
for each subsequent file so that <code>Previous</code>/<code>Next</code> connectivity (and thus
<code>ModalCarrySyntax</code> deep-clone) crosses file boundaries.</p>
@@ -185,6 +185,258 @@ for each subsequent file so that <code>Previous</code>/<code>Next</code> connect
</h2>
<a id="Hi_MachiningProcs_NcRunnerSessionState_EffectiveNcDependencyList_" data-uid="Hi.MachiningProcs.NcRunnerSessionState.EffectiveNcDependencyList*"></a>
<h3 id="Hi_MachiningProcs_NcRunnerSessionState_EffectiveNcDependencyList" data-uid="Hi.MachiningProcs.NcRunnerSessionState.EffectiveNcDependencyList">
EffectiveNcDependencyList
</h3>
<div class="markdown level1 summary"><p>Proxy-resolved dependency list — output of
<a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_GetEffectiveNcDependencyList">GetEffectiveNcDependencyList()</a>, computed once on
the first <a class="xref" href="Hi.Numerical.INcRunner.html#Hi_Numerical_INcRunner_RunNcLines_System_String_System_Collections_Generic_IEnumerable_System_String__Hi_MachiningProcs_MachiningSession_Hi_MachiningProcs_StepDiagnosticProgress_Hi_NcParsers_NcDiagnosticProgress_System_Threading_CancellationToken_">RunNcLines(string, IEnumerable&lt;string&gt;, MachiningSession, StepDiagnosticProgress, NcDiagnosticProgress, CancellationToken)</a> call and reused for
every file and pipeline stage in the session so each
<a class="xref" href="Hi.NcParsers.Dependencys.INcDependencyProxy.html">INcDependencyProxy</a> resolves to one stable instance.
Set only by <a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_RunNcLines_System_String_System_Collections_Generic_IEnumerable_System_String__Hi_MachiningProcs_MachiningSession_Hi_MachiningProcs_StepDiagnosticProgress_Hi_NcParsers_NcDiagnosticProgress_System_Threading_CancellationToken_">RunNcLines(string, IEnumerable&lt;string&gt;, MachiningSession, StepDiagnosticProgress, NcDiagnosticProgress, CancellationToken)</a> (and cleared by
<a class="xref" href="Hi.MachiningProcs.NcRunnerSessionState.html#Hi_MachiningProcs_NcRunnerSessionState_Reset">Reset()</a>); readable for inspection.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public List&lt;INcDependency&gt; EffectiveNcDependencyList { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a>&gt;</dt>
<dd></dd>
</dl>
<a id="Hi_MachiningProcs_NcRunnerSessionState_EffectiveNcInitializationList_" data-uid="Hi.MachiningProcs.NcRunnerSessionState.EffectiveNcInitializationList*"></a>
<h3 id="Hi_MachiningProcs_NcRunnerSessionState_EffectiveNcInitializationList" data-uid="Hi.MachiningProcs.NcRunnerSessionState.EffectiveNcInitializationList">
EffectiveNcInitializationList
</h3>
<div class="markdown level1 summary"><p>Session-scoped initializer list used to seed the init
<a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html">SyntaxPiece</a> — gated like
<a class="xref" href="Hi.MachiningProcs.NcRunnerSessionState.html#Hi_MachiningProcs_NcRunnerSessionState_EffectiveNcSyntaxList">EffectiveNcSyntaxList</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public List&lt;INcInitializer&gt; EffectiveNcInitializationList { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Hi.NcParsers.Initializers.INcInitializer.html">INcInitializer</a>&gt;</dt>
<dd></dd>
</dl>
<a id="Hi_MachiningProcs_NcRunnerSessionState_EffectiveNcSemanticList_" data-uid="Hi.MachiningProcs.NcRunnerSessionState.EffectiveNcSemanticList*"></a>
<h3 id="Hi_MachiningProcs_NcRunnerSessionState_EffectiveNcSemanticList" data-uid="Hi.MachiningProcs.NcRunnerSessionState.EffectiveNcSemanticList">
EffectiveNcSemanticList
</h3>
<div class="markdown level1 summary"><p>Session-scoped semantic list actually driven over the final syntax
layer — gated like <a class="xref" href="Hi.MachiningProcs.NcRunnerSessionState.html#Hi_MachiningProcs_NcRunnerSessionState_EffectiveNcSyntaxList">EffectiveNcSyntaxList</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public List&lt;INcSemantic&gt; EffectiveNcSemanticList { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Hi.NcParsers.Semantics.INcSemantic.html">INcSemantic</a>&gt;</dt>
<dd></dd>
</dl>
<a id="Hi_MachiningProcs_NcRunnerSessionState_EffectiveNcSyntaxList_" data-uid="Hi.MachiningProcs.NcRunnerSessionState.EffectiveNcSyntaxList*"></a>
<h3 id="Hi_MachiningProcs_NcRunnerSessionState_EffectiveNcSyntaxList" data-uid="Hi.MachiningProcs.NcRunnerSessionState.EffectiveNcSyntaxList">
EffectiveNcSyntaxList
</h3>
<div class="markdown level1 summary"><p>Session-scoped syntax list actually driven by the layer pipeline —
stamped at session initialization by
<a class="xref" href="Hi.NcParsers.SoftNcRunner.html">ResolveEffectivePipeline(SoftNcRunner, NcRunnerSessionState, NcDiagnosticProgress)</a>. Same
reference as <a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_NcSyntaxList">NcSyntaxList</a> unless the
composition gate skipped external units for this session; the
runner's persisted list is never mutated.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public List&lt;INcSyntax&gt; EffectiveNcSyntaxList { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Hi.NcParsers.Syntaxs.INcSyntax.html">INcSyntax</a>&gt;</dt>
<dd></dd>
</dl>
<a id="Hi_MachiningProcs_NcRunnerSessionState_EffectiveSegmenter_" data-uid="Hi.MachiningProcs.NcRunnerSessionState.EffectiveSegmenter*"></a>
<h3 id="Hi_MachiningProcs_NcRunnerSessionState_EffectiveSegmenter" data-uid="Hi.MachiningProcs.NcRunnerSessionState.EffectiveSegmenter">
EffectiveSegmenter
</h3>
<div class="markdown level1 summary"><p>Session-scoped segmenter actually used to split NC text — the
runner's own <a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_Segmenter">Segmenter</a>, or the built-in
fallback when the composition gate rejected an external one.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ISegmenter EffectiveSegmenter { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="Hi.NcParsers.Segmenters.ISegmenter.html">ISegmenter</a></dt>
<dd></dd>
</dl>
<a id="Hi_MachiningProcs_NcRunnerSessionState_FreezeExecutedPieces_" data-uid="Hi.MachiningProcs.NcRunnerSessionState.FreezeExecutedPieces*"></a>
<h3 id="Hi_MachiningProcs_NcRunnerSessionState_FreezeExecutedPieces" data-uid="Hi.MachiningProcs.NcRunnerSessionState.FreezeExecutedPieces">
FreezeExecutedPieces
</h3>
<div class="markdown level1 summary"><p>Whether executed <a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html">SyntaxPiece</a>s are frozen to their compact
UTF-8 form (<a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html#Hi_NcParsers_Syntaxs_SyntaxPiece_Freeze">Freeze()</a>) once they leave the
executing window. Default true — a session retains every executed piece
for its whole lifetime, and the live <code>JsonObject</code> graph costs
~13× the frozen bytes (multi-million-line programs OOM a client
machine without this). Set false only for A/B measurement or when a
custom post-play consumer must mutate executed pieces in place.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool FreezeExecutedPieces { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="Hi_MachiningProcs_NcRunnerSessionState_InitializedByNcRunner_" data-uid="Hi.MachiningProcs.NcRunnerSessionState.InitializedByNcRunner*"></a>
<h3 id="Hi_MachiningProcs_NcRunnerSessionState_InitializedByNcRunner" data-uid="Hi.MachiningProcs.NcRunnerSessionState.InitializedByNcRunner">
InitializedByNcRunner
</h3>
<div class="markdown level1 summary"><p>The runner whose first <a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_RunNcLines_System_String_System_Collections_Generic_IEnumerable_System_String__Hi_MachiningProcs_MachiningSession_Hi_MachiningProcs_StepDiagnosticProgress_Hi_NcParsers_NcDiagnosticProgress_System_Threading_CancellationToken_">RunNcLines(string, IEnumerable&lt;string&gt;, MachiningSession, StepDiagnosticProgress, NcDiagnosticProgress, CancellationToken)</a> call built
the pipeline. The layer count and the cached
<a class="xref" href="Hi.MachiningProcs.NcRunnerSessionState.html#Hi_MachiningProcs_NcRunnerSessionState_EffectiveNcDependencyList">EffectiveNcDependencyList</a> are sized/bound to THIS runner,
so a subsequent call from a DIFFERENT runner (e.g. a CSV play after a
brand-NC play in the same session) must be refused — it would index
past the layer list or silently run with the wrong dependency list.
Cleared by <a class="xref" href="Hi.MachiningProcs.NcRunnerSessionState.html#Hi_MachiningProcs_NcRunnerSessionState_Reset">Reset()</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public INcRunner InitializedByNcRunner { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="Hi.Numerical.INcRunner.html">INcRunner</a></dt>
<dd></dd>
</dl>
<a id="Hi_MachiningProcs_NcRunnerSessionState_IsInitialized_" data-uid="Hi.MachiningProcs.NcRunnerSessionState.IsInitialized*"></a>
<h3 id="Hi_MachiningProcs_NcRunnerSessionState_IsInitialized" data-uid="Hi.MachiningProcs.NcRunnerSessionState.IsInitialized">
@@ -217,39 +469,6 @@ for each subsequent file so that <code>Previous</code>/<code>Next</code> connect
<a id="Hi_MachiningProcs_NcRunnerSessionState_NcDiagnosticProgress_" data-uid="Hi.MachiningProcs.NcRunnerSessionState.NcDiagnosticProgress*"></a>
<h3 id="Hi_MachiningProcs_NcRunnerSessionState_NcDiagnosticProgress" data-uid="Hi.MachiningProcs.NcRunnerSessionState.NcDiagnosticProgress">
NcDiagnosticProgress
</h3>
<div class="markdown level1 summary"><p>Session-shared diagnostic sink. Built lazily on the first
<a class="xref" href="Hi.Numerical.IControlRunner.html#Hi_Numerical_IControlRunner_RunControlLines_System_String_System_Collections_Generic_IEnumerable_System_String__Hi_MachiningProcs_MachiningSession_Hi_MachiningProcs_SessionProgress_System_Threading_CancellationToken_">RunControlLines(string, IEnumerable&lt;string&gt;, MachiningSession, SessionProgress, CancellationToken)</a> call.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public NcDiagnosticProgress NcDiagnosticProgress { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="Hi.NcParsers.NcDiagnosticProgress.html">NcDiagnosticProgress</a></dt>
<dd></dd>
</dl>
<a id="Hi_MachiningProcs_NcRunnerSessionState_SyntaxPieceLayers_" data-uid="Hi.MachiningProcs.NcRunnerSessionState.SyntaxPieceLayers*"></a>
<h3 id="Hi_MachiningProcs_NcRunnerSessionState_SyntaxPieceLayers" data-uid="Hi.MachiningProcs.NcRunnerSessionState.SyntaxPieceLayers">
@@ -260,7 +479,7 @@ for each subsequent file so that <code>Previous</code>/<code>Next</code> connect
<div class="markdown level1 summary"><p>One <a class="xref" href="Hi.Common.Collections.LazyLinkedList-1.html">LazyLinkedList&lt;T&gt;</a> per pipeline layer.
Index 0 is the source layer (init seed + sentence-derived pieces);
indices 1..NcSyntaxList.Count are the post-NcSyntax layers.
Subsequent <a class="xref" href="Hi.Numerical.IControlRunner.html#Hi_Numerical_IControlRunner_RunControlLines_System_String_System_Collections_Generic_IEnumerable_System_String__Hi_MachiningProcs_MachiningSession_Hi_MachiningProcs_SessionProgress_System_Threading_CancellationToken_">RunControlLines(string, IEnumerable&lt;string&gt;, MachiningSession, SessionProgress, CancellationToken)</a> calls extend each layer
Subsequent <a class="xref" href="Hi.Numerical.INcRunner.html#Hi_Numerical_INcRunner_RunNcLines_System_String_System_Collections_Generic_IEnumerable_System_String__Hi_MachiningProcs_MachiningSession_Hi_MachiningProcs_StepDiagnosticProgress_Hi_NcParsers_NcDiagnosticProgress_System_Threading_CancellationToken_">RunNcLines(string, IEnumerable&lt;string&gt;, MachiningSession, StepDiagnosticProgress, NcDiagnosticProgress, CancellationToken)</a> calls extend each layer
in place via <a class="xref" href="Hi.Common.Collections.LazyLinkedList-1.html#Hi_Common_Collections_LazyLinkedList_1_AppendSource_System_Collections_Generic_IEnumerable__0__">AppendSource(IEnumerable&lt;T&gt;)</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
@@ -290,6 +509,44 @@ in place via <a class="xref" href="Hi.Common.Collections.LazyLinkedList-1.html#H
</h2>
<a id="Hi_MachiningProcs_NcRunnerSessionState_DeferFreeze_" data-uid="Hi.MachiningProcs.NcRunnerSessionState.DeferFreeze*"></a>
<h3 id="Hi_MachiningProcs_NcRunnerSessionState_DeferFreeze_Hi_NcParsers_Syntaxs_SyntaxPiece_" data-uid="Hi.MachiningProcs.NcRunnerSessionState.DeferFreeze(Hi.NcParsers.Syntaxs.SyntaxPiece)">
DeferFreeze(SyntaxPiece)
</h3>
<div class="markdown level1 summary"><p>Hands an executed piece to the deferred-freeze window: it stays live
for the next <span class="xref">Hi.MachiningProcs.NcRunnerSessionState.FreezeLagPieceCount</span> piece boundaries, then
freezes. No-op when <a class="xref" href="Hi.MachiningProcs.NcRunnerSessionState.html#Hi_MachiningProcs_NcRunnerSessionState_FreezeExecutedPieces">FreezeExecutedPieces</a> is false or
<code class="paramref">piece</code> is null. Called by
<a class="xref" href="Hi.MachiningProcs.MachiningSession.html#Hi_MachiningProcs_MachiningSession_RunNcLines_Hi_Numerical_INcRunner_System_String_System_Collections_Generic_IEnumerable_System_String__System_Threading_CancellationToken_">RunNcLines(INcRunner, string, IEnumerable&lt;string&gt;, CancellationToken)</a> at each source-command
boundary — the point where the previous piece's syntax builds and
semantics have all completed.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void DeferFreeze(SyntaxPiece piece)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>piece</code> <a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html">SyntaxPiece</a></dt>
<dd></dd>
</dl>
<a id="Hi_MachiningProcs_NcRunnerSessionState_Dispose_" data-uid="Hi.MachiningProcs.NcRunnerSessionState.Dispose*"></a>
<h3 id="Hi_MachiningProcs_NcRunnerSessionState_Dispose" data-uid="Hi.MachiningProcs.NcRunnerSessionState.Dispose">
@@ -317,6 +574,37 @@ in place via <a class="xref" href="Hi.Common.Collections.LazyLinkedList-1.html#H
<a id="Hi_MachiningProcs_NcRunnerSessionState_FlushDeferredFreezes_" data-uid="Hi.MachiningProcs.NcRunnerSessionState.FlushDeferredFreezes*"></a>
<h3 id="Hi_MachiningProcs_NcRunnerSessionState_FlushDeferredFreezes" data-uid="Hi.MachiningProcs.NcRunnerSessionState.FlushDeferredFreezes">
FlushDeferredFreezes()
</h3>
<div class="markdown level1 summary"><p>Freezes everything still in the deferred-freeze window. Called at the
end-of-play action (after the act runner's <code>WaitAll</code>) so a
finished play retains only frozen pieces; when
<a class="xref" href="Hi.MachiningProcs.NcRunnerSessionState.html#Hi_MachiningProcs_NcRunnerSessionState_FreezeExecutedPieces">FreezeExecutedPieces</a> is false the window is just
dropped.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void FlushDeferredFreezes()</code></pre>
</div>
<a id="Hi_MachiningProcs_NcRunnerSessionState_Reset_" data-uid="Hi.MachiningProcs.NcRunnerSessionState.Reset*"></a>
<h3 id="Hi_MachiningProcs_NcRunnerSessionState_Reset" data-uid="Hi.MachiningProcs.NcRunnerSessionState.Reset">
@@ -324,8 +612,8 @@ in place via <a class="xref" href="Hi.Common.Collections.LazyLinkedList-1.html#H
</h3>
<div class="markdown level1 summary"><p>Drops the per-layer pipeline state and the cached diagnostic sink so
the next <a class="xref" href="Hi.Numerical.IControlRunner.html#Hi_Numerical_IControlRunner_RunControlLines_System_String_System_Collections_Generic_IEnumerable_System_String__Hi_MachiningProcs_MachiningSession_Hi_MachiningProcs_SessionProgress_System_Threading_CancellationToken_">RunControlLines(string, IEnumerable&lt;string&gt;, MachiningSession, SessionProgress, CancellationToken)</a> call re-builds
<div class="markdown level1 summary"><p>Drops the per-layer pipeline state so
the next <a class="xref" href="Hi.Numerical.INcRunner.html#Hi_Numerical_INcRunner_RunNcLines_System_String_System_Collections_Generic_IEnumerable_System_String__Hi_MachiningProcs_MachiningSession_Hi_MachiningProcs_StepDiagnosticProgress_Hi_NcParsers_NcDiagnosticProgress_System_Threading_CancellationToken_">RunNcLines(string, IEnumerable&lt;string&gt;, MachiningSession, StepDiagnosticProgress, NcDiagnosticProgress, CancellationToken)</a> call re-builds
from scratch. Use this for a controller power reset (where in-flight
SyntaxPiece JSON dataflow — including <code>Vars.Volatile</code>, modal
carries, and the init seed — must vanish) without disposing the
@@ -333,7 +621,7 @@ owning <a class="xref" href="Hi.MachiningProcs.MachiningSession.html">MachiningS
<p>
Idempotent and reusable: after <a class="xref" href="Hi.MachiningProcs.NcRunnerSessionState.html#Hi_MachiningProcs_NcRunnerSessionState_Reset">Reset()</a> the object is in
the same lazy-uninitialised state as a freshly constructed instance,
so the first subsequent <code>RunControlLines</code> hits the
so the first subsequent <code>RunNcLines</code> hits the
<code>!IsInitialized</code> branch and re-creates everything.
</p>
</div>