<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://epd.zeldamods.org/wiki/Shaft::baseproc/history?feed=atom</id>
	<title>Shaft::baseproc - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://epd.zeldamods.org/wiki/Shaft::baseproc/history?feed=atom"/>
	<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/wiki/Shaft::baseproc/history"/>
	<updated>2026-04-28T14:49:42Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Shaft::baseproc&amp;diff=156&amp;oldid=prev</id>
		<title>Watertoon: Remove &quot;base procedure&quot; for lack of source</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Shaft::baseproc&amp;diff=156&amp;oldid=prev"/>
		<updated>2026-02-16T08:58:21Z</updated>

		<summary type="html">&lt;p&gt;Remove &amp;quot;base procedure&amp;quot; for lack of source&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 08:58, 16 February 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Shaft::baseproc implements a concurrent actor framework based on scheduling units called a &quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;base procedure&lt;/del&gt;&quot;. BaseProcs can be asynchronously created by an application and later inserted into the system and modified via requests.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Shaft::baseproc implements a concurrent actor framework based on scheduling units called a &quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;BaseProc&lt;/ins&gt;&quot;. BaseProcs can be asynchronously created by an application and later inserted into the system and modified via requests.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== BaseProcMgr ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== BaseProcMgr ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Shaft::baseproc&amp;diff=153&amp;oldid=prev</id>
		<title>Watertoon: Change name of PendingActive and Active to Ready and Calc based on totk ai nodes QueryGenericIsSleepOrReady and QueryActorHolderIsCalcOrPauseState</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Shaft::baseproc&amp;diff=153&amp;oldid=prev"/>
		<updated>2026-02-12T06:27:19Z</updated>

		<summary type="html">&lt;p&gt;Change name of PendingActive and Active to Ready and Calc based on totk ai nodes QueryGenericIsSleepOrReady and QueryActorHolderIsCalcOrPauseState&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 06:27, 12 February 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l2&quot;&gt;Line 2:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 2:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== BaseProcMgr ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== BaseProcMgr ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Manages BaseProcs and BaseProc related sub-managers. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Active and sleeping &lt;/del&gt;BaseProcs create a job graph spanning 4 &quot;stages&quot; with 8 &quot;priorities&quot; each, for 32 separate job graphs. The job graphs are processed one after the other, following the priorities from highest (0) to lowest (7) before advancing to the next stage. The jobs within each graph are processed concurrently with respect to their dependencies.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Manages BaseProcs and BaseProc related sub-managers. BaseProcs &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;with the Calc, Sleeping, or Paused states &lt;/ins&gt;create a job graph spanning 4 &quot;stages&quot; with 8 &quot;priorities&quot; each, for 32 separate job graphs. The job graphs are processed one after the other, following the priorities from highest (0) to lowest (7) before advancing to the next stage. The jobs within each graph are processed concurrently with respect to their dependencies.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== Lifecycle ====&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== Lifecycle ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l11&quot;&gt;Line 11:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 11:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===== Building =====&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===== Building =====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The system is building the job graph. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Active &lt;/del&gt;BaseProcs will insert their jobs, and sleeping BaseProcs will instead insert their sleep job if they have one.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The system is building the job graph. BaseProcs &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;in the Calc state &lt;/ins&gt;will insert their jobs, and &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;paused or &lt;/ins&gt;sleeping BaseProcs will instead insert their sleep job if they have one.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===== BaseProc Processing =====&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===== BaseProc Processing =====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l26&quot;&gt;Line 26:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 26:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== Lifecycle ====&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== Lifecycle ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A BaseProc has 12 states &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;grouped &lt;/del&gt;into 4 &quot;cycles&quot;; initialization (3), live (4), removal (3), and finalization (2).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A BaseProc has 12 states &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;one can logically group &lt;/ins&gt;into 4 &quot;cycles&quot;; initialization (3), live (4), removal (3), and finalization (2).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===== Initialization =====&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===== Initialization =====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l41&quot;&gt;Line 41:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 41:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===== Live =====&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===== Live =====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This group of states represents a BaseProc that is &quot;live&quot; in the system. The initial state after &quot;PostInitialize&quot; succeeds is &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;PendingActive&lt;/del&gt;, from there a BaseProc can move between &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Active&lt;/del&gt;, Sleeping, or Paused.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This group of states represents a BaseProc that is &quot;live&quot; in the system. The initial state after &quot;PostInitialize&quot; succeeds is &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Ready&lt;/ins&gt;, from there a BaseProc can move between &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Calc&lt;/ins&gt;, Sleeping, or Paused.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====== &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;PendingActive &lt;/del&gt;======&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====== &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Ready &lt;/ins&gt;======&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The initial &quot;Live&quot; state of a BaseProc. RequestCancelSleep or RequestCancelPause can be used to attempt to &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;activate &lt;/del&gt;the BaseProc.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The initial &quot;Live&quot; state of a BaseProc. RequestCancelSleep or RequestCancelPause can be used to attempt to &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;change &lt;/ins&gt;the BaseProc &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;to Calc&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====== &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Active &lt;/del&gt;======&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====== &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Calc &lt;/ins&gt;======&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The quintessential &quot;Live&quot; state. All of the BaseProc&#039;s &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;active &lt;/del&gt;jobs will be used in job graph building.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The quintessential &quot;Live&quot; state. All of the BaseProc&#039;s &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Calc &lt;/ins&gt;jobs will be used in job graph building.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====== Sleeping ======&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====== Sleeping ======&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A heavyweight break in a BaseProc&#039;s processing. The BaseProc&#039;s sleep job will be used in job graph building. RequestCancelSleep will &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;activate &lt;/del&gt;the BaseProc.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A heavyweight break in a BaseProc&#039;s processing. The BaseProc&#039;s sleep job will be used in job graph building. RequestCancelSleep will &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;attempt to change &lt;/ins&gt;the BaseProc &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;to Calc&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====== Paused ======&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====== Paused ======&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Shaft::baseproc&amp;diff=139&amp;oldid=prev</id>
		<title>Watertoon: Write a bit about shaft::baseproc lifecycles.</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Shaft::baseproc&amp;diff=139&amp;oldid=prev"/>
		<updated>2025-10-22T01:53:54Z</updated>

		<summary type="html">&lt;p&gt;Write a bit about shaft::baseproc lifecycles.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Shaft::baseproc implements a concurrent actor framework based on scheduling units called a &amp;quot;base procedure&amp;quot;. BaseProcs can be asynchronously created by an application and later inserted into the system and modified via requests.&lt;br /&gt;
&lt;br /&gt;
=== BaseProcMgr ===&lt;br /&gt;
Manages BaseProcs and BaseProc related sub-managers. Active and sleeping BaseProcs create a job graph spanning 4 &amp;quot;stages&amp;quot; with 8 &amp;quot;priorities&amp;quot; each, for 32 separate job graphs. The job graphs are processed one after the other, following the priorities from highest (0) to lowest (7) before advancing to the next stage. The jobs within each graph are processed concurrently with respect to their dependencies.&lt;br /&gt;
&lt;br /&gt;
==== Lifecycle ====&lt;br /&gt;
BaseProcMgr has 5 main states it can move between by various api calls.&lt;br /&gt;
&lt;br /&gt;
===== Idle =====&lt;br /&gt;
The system is at rest. Accessing BaseProcs through BaseProcLinks outside the system is legal.&lt;br /&gt;
&lt;br /&gt;
===== Building =====&lt;br /&gt;
The system is building the job graph. Active BaseProcs will insert their jobs, and sleeping BaseProcs will instead insert their sleep job if they have one.&lt;br /&gt;
&lt;br /&gt;
===== BaseProc Processing =====&lt;br /&gt;
The system is running the current job graph. Accessing BaseProcs through BaseProcLinks outside the system is illegal.&lt;br /&gt;
&lt;br /&gt;
===== Removal Processing =====&lt;br /&gt;
The system is processing removal requests. Successfully removed BaseProcs are scheduled for asynchronous deletion.&lt;br /&gt;
&lt;br /&gt;
===== Request Processing =====&lt;br /&gt;
The system is processing BaseProc requests. It may be illegal to access a BaseProc outside the system at this time.&lt;br /&gt;
&lt;br /&gt;
=== BaseProc ===&lt;br /&gt;
Harbors up to 1 job for each stage and priority. As well as up to 1 sleep job. Is a member of the BaseProc tree. Has global meta-data for being referenced by BaseProcLinks. Can have dependency relations with other BaseProcs.&lt;br /&gt;
&lt;br /&gt;
==== Lifecycle ====&lt;br /&gt;
A BaseProc has 12 states grouped into 4 &amp;quot;cycles&amp;quot;; initialization (3), live (4), removal (3), and finalization (2).&lt;br /&gt;
&lt;br /&gt;
===== Initialization =====&lt;br /&gt;
This group of states is progressed linearly along the creation of a BaseProc.&lt;br /&gt;
&lt;br /&gt;
====== Uninitialized ======&lt;br /&gt;
The default state on creation.&lt;br /&gt;
&lt;br /&gt;
====== PendingInitialize ======&lt;br /&gt;
The BaseProc is in the state of being initialized.&lt;br /&gt;
&lt;br /&gt;
====== Initialized ======&lt;br /&gt;
The BaseProc has been initialized. Next request processing a &amp;quot;PostInitialize&amp;quot; function will be called once per processing, if it fails the BaseProc may be deleted, or the system may try again under certain conditions. Trying again may not be intended.&lt;br /&gt;
&lt;br /&gt;
===== Live =====&lt;br /&gt;
This group of states represents a BaseProc that is &amp;quot;live&amp;quot; in the system. The initial state after &amp;quot;PostInitialize&amp;quot; succeeds is PendingActive, from there a BaseProc can move between Active, Sleeping, or Paused.&lt;br /&gt;
&lt;br /&gt;
====== PendingActive ======&lt;br /&gt;
The initial &amp;quot;Live&amp;quot; state of a BaseProc. RequestCancelSleep or RequestCancelPause can be used to attempt to activate the BaseProc.&lt;br /&gt;
&lt;br /&gt;
====== Active ======&lt;br /&gt;
The quintessential &amp;quot;Live&amp;quot; state. All of the BaseProc&amp;#039;s active jobs will be used in job graph building.&lt;br /&gt;
&lt;br /&gt;
====== Sleeping ======&lt;br /&gt;
A heavyweight break in a BaseProc&amp;#039;s processing. The BaseProc&amp;#039;s sleep job will be used in job graph building. RequestCancelSleep will activate the BaseProc.&lt;br /&gt;
&lt;br /&gt;
====== Paused ======&lt;br /&gt;
A lighter break in a BaseProc&amp;#039;s processing. The BaseProc&amp;#039;s sleep job will be used in job graph building. RequestCancelPause will unpause the BaseProc.&lt;br /&gt;
&lt;br /&gt;
===== Removal =====&lt;br /&gt;
After a delete request is processed, a BaseProc is transitioned to the PendingRemoval state.&lt;br /&gt;
&lt;br /&gt;
====== PendingRemoval ======&lt;br /&gt;
The BaseProc is removing itself from the application&amp;#039;s subsystems. When the OnRemove callback succeeds the BaseProc immediately transitions to the Removal state.&lt;br /&gt;
&lt;br /&gt;
====== Removal ======&lt;br /&gt;
The BaseProc removes it&amp;#039;s BaseProcLink meta data, invalidating all BaseProcLinks to it, calls the OnStateRemoval callback, and then immediately transitions to the Removed state.&lt;br /&gt;
&lt;br /&gt;
====== Removed ======&lt;br /&gt;
Next time there is space the BaseProc will be added to the asynchronous deletion queue and transitioned to the PendingFinalize state.&lt;br /&gt;
&lt;br /&gt;
===== Finalization =====&lt;br /&gt;
This group of states to track a BaseProc&amp;#039;s asynchronous finalization up to it&amp;#039;s deletion.&lt;br /&gt;
&lt;br /&gt;
====== PendingFinalization ======&lt;br /&gt;
The BaseProc will call it&amp;#039;s PreFinalize callback, remove itself from the BaseProcMgr lists and trees, and then call it&amp;#039;s PostFinalize callback before immediate transitioning to the Finalized state.&lt;br /&gt;
&lt;br /&gt;
====== Finalized ======&lt;br /&gt;
The BaseProc has completed finalization and will imminently be deleted, with it&amp;#039;s memory freed back to it&amp;#039;s parent heap.&lt;br /&gt;
&lt;br /&gt;
=== BaseProcBinder ===&lt;br /&gt;
Allows watching for the asynchronous creation of a BaseProc. On completion a BaseProcLink to that BaseProc can be retrieved.&lt;br /&gt;
&lt;br /&gt;
=== BaseProcLink ===&lt;br /&gt;
A &amp;quot;hyperlink&amp;quot; reference to a BaseProc. Used to retrieve scoped &amp;quot;read&amp;quot; or &amp;quot;write&amp;quot; accessors to a BaseProc. The accessors follow the C++ &amp;quot;optional&amp;quot; pattern, where retrieving one can fail to retrieve the underlying BaseProc. There are a few rules regarding when an accessor is legal to acquire. Read accessors are the least strict, and succeed as long as the BaseProc has not processed a delete request. Write accessors have 3 different rulesets for anywhere, outside the system, and a strict inside the system.&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
</feed>