.
authorThomas Walker Lynch <eknp9n@reasoningtechnology.com>
Thu, 6 Aug 2026 11:54:32 +0000 (11:54 +0000)
committerThomas Walker Lynch <eknp9n@reasoningtechnology.com>
Thu, 6 Aug 2026 11:54:32 +0000 (11:54 +0000)
14 files changed:
developer/authored/Manuscript.copy/Core/stage_manager.js
developer/authored/Manuscript.copy/Core/theme_make.js
developer/authored/Manuscript.copy/Core/utility.js [new file with mode: 0644]
developer/authored/Manuscript.copy/Document/design.html [new file with mode: 0644]
developer/authored/Manuscript.copy/Document/user.html [new file with mode: 0644]
developer/authored/Manuscript.copy/Element/section.js
developer/authored/Manuscript.copy/Layout/article_tech_ref.js
developer/authored/Manuscript.copy/Theme/inverse_wheat.js
tester/authored/Counter/test_0.html
tester/authored/Counter/test_1.html
tester/authored/Counter/test_2.html
tester/authored/Counter/test_3.html
tester/authored/Counter/test_4.html
tester/authored/Counter/test_5.html

index b21ad8f..fb8777b 100644 (file)
     return;
   }
 
+  // Inject Utilities prior to execution
+  window.RT.load('Core/utility');
+
   // Prevent duplicate initialization
   if(window.RT.Element instanceof Set){
     console.warn("RT stage_manager already initialized. Aborting duplicate run.");
     return;
   }
-
+  
   /* Phase task queues/functions in order the phases are processed.
 
      Generators and element styling must run before pagination. Even styling changes the size of the document.
index 9ed48af..127dc82 100644 (file)
@@ -1,8 +1,8 @@
 // see Theme/manifest, all themes are registered in the library by name
 
-(function() {
+(function(){
 
-   if (!window.RT) {
+   if(!window.RT){
     console.error("RT not defined - was RT-Manuscript_make run?");
     return;
   }
   RT.theme_library = RT.theme_library || {};
 
   // 'read' or 'write' the active theme fields, or 'load' a new theme
-  RT.theme = (function() {
+  RT.theme = (function(){
 
     const dictionary = {
-      meta: { is_dark: false, name: "" },
-      surface: { 0: "", 1: "", 2: "", 3: "", input: "", code: "", select: "" },
-      content: { main: "", muted: "", subtle: "", inverse: "" },
-      brand: { primary: "", secondary: "", tertiary: "", link: "" },
-      border: { faint: "", regular: "", strong: "" },
-      state: { success: "", warning: "", error: "", info: "" },
-      syntax: { keyword: "", string: "", func: "", comment: "" },
-      page: { width: "", min_height: "", padding: "", margin: "", bg_color: "", border_color: "", text_color: "", shadow: "" },
-      custom_css: ""
+      meta: {is_dark: false ,name: ""}
+      ,surface: {screen: "" ,0: "" ,1: "" ,2: "" ,3: "" ,input: "" ,code: "" ,select: ""}
+      ,content: {main: "" ,muted: "" ,subtle: "" ,inverse: ""}
+      ,brand: {primary: "" ,secondary: "" ,tertiary: "" ,link: ""}
+      ,border: {faint: "" ,regular: "" ,strong: ""}
+      ,state: {success: "" ,warning: "" ,error: "" ,info: ""}
+      ,syntax: {keyword: "" ,string: "" ,func: "" ,comment: ""}
+      ,page: {width: "" ,min_height: "" ,padding: "" ,margin: "" ,bg_color: "" ,border_color: "" ,text_color: "" ,shadow: ""}
+      ,custom_css: ""
     };
 
-    function resolve_path(path_array) {
+    function resolve_path(path_array){
       let current = dictionary;
-      for (let i = 0; i < path_array.length - 1; i++) {
+      for(let i = 0; i < path_array.length - 1; i++){
         const step = path_array[i];
-        if (current[step] === undefined) return null;
+        if(current[step] === undefined) return null;
         current = current[step];
       }
-      return { container: current, key: path_array[path_array.length - 1] };
+      return {container: current ,key: path_array[path_array.length - 1]};
     }
 
-    function apply_and_validate_theme(new_theme, fallback_color) {
-      const debug = RT.Debug || { error: function(){} };
+    function apply_and_validate_theme(new_theme ,fallback_color){
+      const debug = RT.Debug || {error: function(){}};
 
       // Pass 1: Walk the structure of the active dictionary
-      function walk_current(curr, source, path) {
-        for (const key in curr) {
+      function walk_current(curr ,source ,path){
+        for(const key in curr){
           const current_path = path ? path + "." + key : key;
-          if (typeof curr[key] === 'object' && curr[key] !== null) {
-            walk_current(curr[key], source[key] || {}, current_path);
-          } else {
-            if (source[key] !== undefined && source[key] !== "") {
+          if(typeof curr[key] === 'object' && curr[key] !== null){
+            walk_current(curr[key] ,source[key] || {} ,current_path);
+          }else{
+            if(source[key] !== undefined && source[key] !== ""){
               curr[key] = source[key];
-            } else {
-              debug.error('theme'`Missing key in loaded theme: ${current_path}. Assigning fallback.`);
+            }else{
+              debug.error('theme' ,`Missing key in loaded theme: ${current_path}. Assigning fallback.`);
               curr[key] = fallback_color;
             }
           }
       }
 
       // Pass 2: Walk the structure of the incoming theme dictionary
-      function walk_new(source, curr, path) {
-        for (const key in source) {
+      function walk_new(source ,curr ,path){
+        for(const key in source){
           const current_path = path ? path + "." + key : key;
-          if (typeof source[key] === 'object' && source[key] !== null) {
-            if (curr[key] === undefined) {
-              debug.error('theme'`Unexpected structure in loaded theme: ${current_path} is an object.`);
-            } else {
-              walk_new(source[key], curr[key] || {}, current_path);
+          if(typeof source[key] === 'object' && source[key] !== null){
+            if(curr[key] === undefined){
+              debug.error('theme' ,`Unexpected structure in loaded theme: ${current_path} is an object.`);
+            }else{
+              walk_new(source[key] ,curr[key] || {} ,current_path);
             }
-          } else {
-            if (curr[key] === undefined) {
-              debug.error('theme'`Unexpected key in loaded theme: ${current_path}.`);
+          }else{
+            if(curr[key] === undefined){
+              debug.error('theme' ,`Unexpected key in loaded theme: ${current_path}.`);
             }
           }
         }
       }
 
-      walk_current(dictionary, new_theme, "");
-      walk_new(new_theme, dictionary, "");
+      walk_current(dictionary ,new_theme ,"");
+      walk_new(new_theme ,dictionary ,"");
     }
 
-    return function(command, ...args) {
-      if (command === 'read') {
+    return function(command ,...args){
+      if(command === 'read'){
         const target = resolve_path(args);
         return (target && target.container.hasOwnProperty(target.key)) ? target.container[target.key] : null;
       } 
       
-      if (command === 'write') {
-        if (args.length < 2) return;
+      if(command === 'write'){
+        if(args.length < 2) return;
         const value = args.pop();
         const target = resolve_path(args);
-        if (target && target.container.hasOwnProperty(target.key)) {
+        if(target && target.container.hasOwnProperty(target.key)){
           target.container[target.key] = value;
         }
         return;
       }
 
-      if (command === 'load') {
+      if(command === 'load'){
         const theme_name = args[0];
         const fallback = args[1] || "#FF00FF";
 
-        if (!RT.theme_library.hasOwnProperty(theme_name)) {
-          RT.Debug.error('theme'`Load aborted: Theme '${theme_name}' is not in the theme_library.`);
+        if(!RT.theme_library.hasOwnProperty(theme_name)){
+          RT.Debug.error('theme' ,`Load aborted: Theme '${theme_name}' is not in the theme_library.`);
           return false;
         }
 
-        apply_and_validate_theme(RT.theme_library[theme_name]fallback);
+        apply_and_validate_theme(RT.theme_library[theme_name] ,fallback);
         
         // --- CSS Fallback for Pseudo-Elements and External Libraries ---
-        let style_el = document.getElementById('rt-theme-custom-css');
-        if (!style_el) {
+        let style_el = document.getElementById('RT·theme-custom-css');
+        if(!style_el){
           style_el = document.createElement('style');
-          style_el.id = 'rt-theme-custom-css';
+          style_el.id = 'RT·theme-custom-css';
           document.head.appendChild(style_el);
         }
         // Write the string if it exists, otherwise clear the block
         return true;
       }
 
-      RT.Debug.error('theme''Invalid command passed to theme dictionary: ' + command);
+      RT.Debug.error('theme' ,'Invalid command passed to theme dictionary: ' + command);
     };
   })();
 
-  RT.theme_preference = function(author_pref, default_color = "#FF00FF") {
+  RT.theme_preference = function(author_pref ,default_color = "#FF00FF"){
     const reader_pref = localStorage.getItem('RT-Manuscript·theme_preference');
     const theme_to_load = reader_pref ? reader_pref : author_pref;
     
-    RT.theme('load', theme_to_load, default_color);
+    RT.theme('load' ,theme_to_load ,default_color);
   };
 
 })();
diff --git a/developer/authored/Manuscript.copy/Core/utility.js b/developer/authored/Manuscript.copy/Core/utility.js
new file mode 100644 (file)
index 0000000..3c131af
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+  Core/utility.js
+  Centralized utility functions for global registry queries and repetitive DOM operations.
+*/
+
+(function(){
+
+  window.RT = window.RT || {};
+  window.RT.Utility = window.RT.Utility || {};
+
+  // Registry Management
+  window.RT.Utility.Registry = {
+    has: function(namespace_obj, key) {
+      return namespace_obj && Object.prototype.hasOwnProperty.call(namespace_obj, key);
+    },
+    
+    register_make: function(namespace_obj, counter_name, node_ref, attributes) {
+      namespace_obj[counter_name] = namespace_obj[counter_name] || {};
+      namespace_obj[counter_name].node = node_ref;
+      
+      if (attributes) {
+         for (let i = 0; i < attributes.length; i++) {
+           namespace_obj[counter_name][attributes[i]] = ""; // Flag presence
+         }
+      }
+    }
+  };
+
+  // DOM Structural Operations
+  window.RT.Utility.Dom = window.RT.Utility.Dom || {};
+  
+  window.RT.Utility.Dom.get_structural_depth = function(element, counter_name) {
+    let depth = 0;
+    let curr = element.parentElement;
+    
+    while(curr) {
+      const tag = (curr.tagName || '').toLowerCase();
+      if (tag === 'rt·section' || (tag === 'rt·counter·step' && curr.getAttribute('counter') === counter_name)) {
+        depth++;
+      }
+      curr = curr.parentElement;
+    }
+    return depth;
+  };
+
+})();
diff --git a/developer/authored/Manuscript.copy/Document/design.html b/developer/authored/Manuscript.copy/Document/design.html
new file mode 100644 (file)
index 0000000..0ef36e1
--- /dev/null
@@ -0,0 +1,94 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8">
+    <title>RT Manuscript: Design & Implementation Manual</title>
+    <script src="RT-Manuscript_locator.js"></script>
+    <script>
+      window.RT.theme_preference('inverse_wheat');
+      window.RT.load('Layout/paginate');
+      window.RT.load('Layout/article_tech_ref');
+      window.RT.load('Element/theme_selector');
+    </script>
+  </head>
+  <body>
+    <RT·theme-selector></RT·theme-selector>
+    <RT·article>
+
+      <RT·title 
+        title="RT Style System: Design & Implementation"
+        author="Thomas Walker Lynch" 
+        date="2026-08-06 16:07Z" 
+        copyright="2026 Reasoning Technology">
+      </RT·title>
+
+      <RT·TOC level="1-2"></RT·TOC>
+
+      <RT·section>
+        <RT·name>Global Variable Methodology</RT·name>
+        <p>
+          The RT-Style layout engine enforces a strict global namespace architecture to manage layout state cleanly and prevent execution collision across asynchronous element evaluations.
+        </p>
+
+        <p>
+          <strong>The `window.RT` Root:</strong> All operational properties, layout configurations, execution queues, and registered semantic elements reside exclusively within the `window.RT` object. 
+        </p>
+
+        <p>
+          <strong>Element State Dictionaries:</strong> Every semantic element module registers its own specific namespace dictionary within the root object (e.g., `RT.Section = {}`). This allows individual modules to track their own initialization state across multiple execution phases. Consequently, an element evaluates its own object to determine if it has already been loaded, preventing duplicate instantiation when the layout engine iterates the DOM tree.
+        </p>
+
+        <p>
+          <strong>DOM Reference & Attribute Tracking:</strong> The element-specific dictionaries maintain explicit references to active layout mechanics, reducing the need for computationally expensive DOM traversal. For example, a section element maps its underlying `<RT·counter·make>` DOM node references by counter name directly into the `RT.Section` dictionary.
+        </p>
+        
+        <p>
+          By tracking the element's object within the dictionary, the semantic code dynamically references the exact attributes an element was created with. The presence of attributes such as `splitable` are stored directly within the counter's dictionary as a key (assigned an empty string or null value). The existence of the key itself acts as a boolean flag for the pagination engine to evaluate physical breaking limits.
+        </p>
+      </RT·section>
+
+      <RT·section>
+        <RT·name>Execution Pipeline Schedule</RT·name>
+        <p>
+          In the RT-Style framework when a page is rendered, the JS code associated with the semantic elements modifies the DOM. It does so in multiple passes so that page numbering, counters, and cross references function without need for forward referencing or concern about dependencies between them. Consequently what is seen in the element view of the browser debug window will not have a one to one correspondence with the elements found in the document.
+        </p>
+
+        <RT·dictionary key="Phase" definition="Operation">
+          <RT·entry key="Phase 1: Elements">
+            Evaluates raw 1D streams. Injects section wrappers, maps counter states, evaluates math tokens, and isolates explicit string payloads.
+          </RT·entry>
+          <RT·entry key="Phase 2: Paginate 0">
+            Initial document chunking. Slices the continuous DOM into discrete <code>&lt;RT·page&gt;</code> boundaries based on height configurations. Modifies the tree aggressively.
+          </RT·entry>
+          <RT·entry key="Phase 3: Page Style">
+            Applies geometric CSS configurations to the generated pages.
+          </RT·entry>
+          <RT·entry key="Phase 4: Counters">
+            Walks the tree to increment the state machines and populates snapshot variables. Must run after pagination to ensure page numbers exist.
+          </RT·entry>
+          <RT·entry key="Phase 5: Cross Reference">
+            Resolves mapping dictionaries bridging logical content with its physically paginated layout geometry.
+          </RT·entry>
+          <RT·entry key="Phase 6: Paginate 1">
+            Absorbs dimensional deltas. Expands page limits to accommodate space consumed by injected cross-references and generated indices.
+          </RT·entry>
+        </RT·dictionary>
+      </RT·section>
+
+      <RT·section>
+        <RT·name>Implementation Notes</RT·name>
+
+        <RT·dictionary key="Component" definition="Current Implementation Constraints">
+          <RT·entry key="Book Environment">
+            The <code>&lt;RT·book&gt;</code> element is a planned extension. We are deliberately delaying its separation from the <code>article</code> layout until the core engine's pagination and state machine logic are fully stabilized. Currently, book mechanics operate by triggering page breaks and section scoping within the standard article stream.
+          </RT·entry>
+          <RT·entry key="Memo Environment">
+            The <RT·code>&lt;RT·memo&gt;</RT·code> container inherits all layout functionality from the Article configuration but enforces a static, print-ready CSS environment. This layout model is currently maintained as a legacy execution branch. Continued parity with the core layout engine is not guaranteed.
+          </RT·entry>
+        </RT·dictionary>
+
+      </RT·section>
+
+    </RT·article>
+  </body>
+</html>
diff --git a/developer/authored/Manuscript.copy/Document/user.html b/developer/authored/Manuscript.copy/Document/user.html
new file mode 100644 (file)
index 0000000..71b2d87
--- /dev/null
@@ -0,0 +1,264 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8">
+    <title>RT Manuscript: User Manual</title>
+    <script src="RT-Manuscript_locator.js"></script>
+    <script>
+      window.RT.theme_preference('inverse_wheat');
+      window.RT.load('Layout/paginate');
+      window.RT.load('Layout/article_tech_ref');
+      window.RT.load('Element/theme_selector');
+    </script>
+  </head>
+  <body>
+    <RT·theme-selector></RT·theme-selector>
+    <RT·article>
+
+      <RT·title 
+        title="RT Style System: User Manual"
+        author="Thomas Walker Lynch" 
+        date="2026-08-06 16:07Z" 
+        copyright="2026 Reasoning Technology">
+      </RT·title>
+
+      <p style="text-align: center; font-size: 1.2em; font-style: italic; margin-bottom: 4rem;">
+        A semantic JavaScript engine for intercepting and compiling raw DOM data graphs into formatted technical manuscripts.
+      </p>
+
+      <RT·TOC level="1-2"></RT·TOC>
+
+      <RT·section>
+        <RT·name>Philosophical Approach</RT·name>
+        <p>
+          An RT-Style document follows an abstraction hierarchy. At the highest level there is <em>theme</em>. The current working theme is <RT·code>inverse_wheat</RT·code>. Theme colors are set by the role played in the document; they do not refer to any DOM elements. The next layer down the abstraction stack is <em>layout</em>. The current working layout is <RT·code>article_tech_ref</RT·code>. The purpose of layout is to set the general size and placement of elements. <RT·code>article_tech_ref</RT·code> assumes the text will be laid out across pages and displayed in a browser. It allows page length to be flexible so that some elements can appear without breaks in them. Then the RT semantic elements are placed in the layout. An RT semantic element is named by the role it plays in the document, such as title page, section, code, math, etc.
+        </p>
+
+        <p>
+          There is no CSS file to edit. CSS is a miniature language for static styling. However, it lacks loops or conditionals, and even variables are an awkward addition. In RT-Style, style is painted onto elements from JavaScript functions. If something isn't working out in the presentation, this is considered to be a design problem, not a reason to be modifying style.
+        </p>
+
+        <p>
+          RT-Style uses the middle dot as a namespace separator in tags. On macOS: Option + Shift + 9. On Windows: Hold Alt and type 0183 on the numeric keypad. Linux: Compose Key followed by . and -.
+        </p>
+
+        <p>
+          As a quick review of terminology, note that <RT·term>content</RT·term> is found between the opening HTML tag and the closing HTML tag. E.g. <RT·code>&lt;RT·noop&gt;This is content.&lt;/RT·noop&gt;</RT·code>. Whereas an <RT·term>attribute</RT·term> is a name-value pair found within an opening HTML tag. E.g. <RT·code>&lt;RT·noop name="value"&gt;</RT·code>.
+        </p>
+      </RT·section>
+
+      <RT·section>
+        <RT·name>Manuscript Types</RT·name>
+        <p>
+          These are the top-level semantic environments. They establish the macro-boundaries that enforce the rendering constraints for all scoped child content.
+        </p>
+
+        <RT·dictionary key="Tag" definition="Description & Arguments">
+          <RT·entry key="&lt;RT·article&gt;">
+            Standard technical document architecture designed for continuous digital reading.
+          </RT·entry>
+          <RT·entry key="&lt;RT·memo&gt;">
+            Strict print layout constraint designed to mirror standard physical paper dimensions.
+          </RT·entry>
+          <RT·entry key="&lt;RT·book&gt;">
+            Multi-chapter assembly architecture.
+          </RT·entry>
+        </RT·dictionary>
+      </RT·section>
+
+      <RT·section>
+        <RT·name><RT·Note·write key="env-setup">Article Environment</RT·Note·write></RT·name>
+        <p>The standard operational header template for an article instance:</p>
+
+        <RT·code>
+          &lt;!DOCTYPE html&gt;
+          &lt;html lang="en"&gt;
+            &lt;head&gt;
+              &lt;meta charset="UTF-8"&gt;
+              &lt;title&gt;RT Manuscript: Reference Manual&lt;/title&gt;
+              &lt;script src="RT-Manuscript_locator.js"&gt;&lt;/script&gt;
+              &lt;script&gt;
+                window.RT.theme_preference('inverse_wheat');
+                window.RT.load('Layout/paginate');
+                window.RT.load('Layout/article_tech_ref');
+                window.RT.load('Element/theme_selector');
+              &lt;/script&gt;
+            &lt;/head&gt;
+          &lt;body&gt;
+            &lt;RT·theme-selector&gt;&lt;/RT·theme-selector&gt;
+            &lt;RT·article&gt;
+              &hellip;
+            &lt;/RT·article&gt;
+          &lt;/body&gt;
+          &lt;/html&gt;
+        </RT·code>
+
+        <RT·section>
+          <RT·name>Decorators</RT·name>
+          <RT·dictionary key="Tag" definition="Description & Arguments">
+            <RT·entry key="&lt;RT·term&gt;">
+              Semantic anchor for technical terminology. Formats the initial occurrence and registers the element ID for index generation. Authors should decorate all occurrences of the term so that they can be indexed.
+            </RT·entry>
+            <RT·entry key="&lt;RT·neologism&gt;">
+              Semantic anchor for a novel term coined within the current document boundaries. Again all instances should be decorated.
+            </RT·entry>
+          </RT·dictionary>
+        </RT·section>
+
+        <RT·section>
+          <RT·name>Layout environments</RT·name>
+          <p>
+            Context-aware formatting blocks. Valid inline or as distinct segments.
+          </p>
+          <RT·dictionary key="Tag" definition="Description & Arguments">
+            <RT·entry key="&lt;RT·section&gt;">
+              Scoped nestable section marker. Each nesting level is styled differently.
+            </RT·entry>
+            <RT·entry key="&lt;RT·name&gt;">
+              Gives a name to the immediately container. Evaluated by sections to set the section heading, by relations to name a relation, and by matrices to name vectors, etc. Multiple instances are concatenated with newlines.
+            </RT·entry>
+            <RT·entry key="&lt;RT·code&gt;">
+              Code span or pre-formatted code block. If opening and closing tags are on the same line, content is considered to be inline span code. Otherwise, the content is considered to be a block of code.
+            </RT·entry>
+            <RT·entry key="&lt;RT·math&gt;">
+              Injects mathematical layout evaluation via the MathJax rendering engine.
+            </RT·entry>
+          </RT·dictionary>
+        </RT·section>
+
+        <RT·section>
+          <RT·name>Grid environments</RT·name>
+          <p>
+            These elements map semantic data into an internal Cartesian grid state prior to CSS projection, isolating the markup from physical layout mechanics.
+          </p>
+          <RT·dictionary key="Tag" definition="Description & Arguments">
+            <RT·entry key="&lt;RT·grid&gt;">
+              Base Cartesian coordinate grid. Projects child <RT·code>&lt;RT·e&gt;</RT·code> elements based on explicitly defined <em>x</em> and <em>y</em> index geometries.<br>
+              <div class="attr-list">
+                <br><strong>Attributes:</strong><br>
+                <code>model</code>: Projection strategy. "html-grid-direct" or "html-grid-transpose". (Default: "html-grid-direct")<br>
+                <code>major</code>: Carriage return trigger direction. "x" or "y". (Default: "x")<br>
+                <br>
+                <strong>Child Element:</strong> <RT·code>&lt;RT·e&gt;</RT·code><br>
+                <code>x</code>: Target <em>x</em>-axis index or index range (e.g., "0-2", where 2 is the maximum index into an array regardless of data type). Default when no y value, is to auto increment, default with a y value is to reset to 0.<br>
+                <code>y</code>: Target <em>y</em>-axis index or index range. Default is to keep the prior value.<br>
+                <code>type</code>: Decoration type. "data", "x-label", "y-label", or "name". (Default: "data")
+              </div>
+            </RT·entry>
+            <RT·entry key="&lt;RT·dictionary&gt;">
+              Two-column associative layout mapping explicitly declared keys to their scoped definitions.<br>
+              <div class="attr-list">
+                <br><strong>Attributes:</strong><br>
+                <code>key</code>: Header text for the identifier column.<br>
+                <code>definition</code>: Header text for the data payload column.<br>
+                <br>
+                <strong>Child Element:</strong> <RT·code>&lt;RT·entry&gt;</RT·code><br>
+                <code>key</code>: The term being defined. The scoped HTML of the entry forms the definition value.
+              </div>
+            </RT·entry>
+            <RT·entry key="&lt;RT·relation&gt;">
+              Relational algebra layout formatter. Enforces multi-line text wrapping limits, calculates row distinction boundaries, and restricts column headers to the tuple scope.<br>
+              <div class="attr-list">
+                <br><strong>Attributes:</strong><br>
+                <code>layout-intention</code>: "row-tuple" or "column-tuple". (Default: "row-tuple")<br>
+                <br>
+                <strong>Child Elements:</strong><br>
+                <RT·code>&lt;RT·tuple-meta&gt;</RT·code>: Describes the components rather than providing them. E.g.<RT·code>&lt;RT·label&gt;</RT·code> provides a component label.<br>
+                <RT·code>&lt;RT·tuple&gt;</RT·code>: Container for components. Each <RT·code>&lt;RT·name&gt;</RT·code> is taken as a first component. Component data values are given in <RT·code>&lt;RT·e&gt;</RT·code> tags, these are taken in the order they occur.
+              </div>
+            </RT·entry>
+            <RT·entry key="&lt;RT·matrix&gt;">
+              Linear algebraic matrix representation. Enforces rigid padding, brackets mathematical delimiters, and suppresses the exterior grid coordinate layout.
+            </RT·entry>
+          </RT·dictionary>
+        </RT·section>
+
+        <RT·section>
+          <RT·name>Generators</RT·name>
+          <p>Data-injection nodes. These elements do not wrap content; execution is governed strictly by the attributes provided.</p>
+          <RT·dictionary key="Tag" definition="Description & Arguments">
+            <RT·entry key="&lt;RT·title&gt;">
+              Constructs the primary document header block.
+            </RT·entry>
+            <RT·entry key="&lt;RT·TOC&gt;">
+              Compiles an automated Table of Contents by scanning the document's nested <code>&lt;RT·section&gt;</code> hierarchy depth.
+            </RT·entry>
+            <RT·entry key="&lt;RT·endnotes&gt;">
+              Generates the numeric list of endnote payloads. Replaces all inline endnote citations with bracketed indices.
+            </RT·entry>
+          </RT·dictionary>
+        </RT·section>
+
+        <RT·section>
+          <RT·name>Counters</RT·name>
+          <p>
+            Counters operate as explicit state machines. Initialization requires a unique identifier. Execution evaluates scope depth and increments the state.
+          </p>
+          <RT·dictionary key="Tag" definition="Description & Arguments">
+            <RT·entry key="&lt;RT·Counter·make&gt;">
+              Initializes the named counter state machine.
+            </RT·entry>
+            <RT·entry key="&lt;RT·Counter·step&gt;">
+              Increments the counter block. Executing a step inside an existing step boundary pushes the state to the next depth index.
+            </RT·entry>
+            <RT·entry key="&lt;RT·Counter·snapshot&gt;">
+              Clones the active count variables into the lookup dictionary. Snapshot processing operates independently of the layout pass, allowing global retrieval regardless of physical placement.
+            </RT·entry>
+            <RT·entry key="&lt;RT·Counter·read&gt;">
+              Retrieves the stored snapshot and projects it as innerHTML.
+            </RT·entry>
+          </RT·dictionary>
+        </RT·section>
+
+        <RT·section>
+          <RT·name>Cross reference</RT·name>
+          <p>
+            A two-pass mechanism bridging logical content with its physically paginated layout geometry.
+          </p>
+          <RT·dictionary key="Tag" definition="Description & Arguments">
+            <RT·entry key="&lt;RT·Note·write&gt;">
+              Registers the scoped content and its finalized layout page index into the reference dictionary.
+            </RT·entry>
+            <RT·entry key="&lt;RT·Note·read&gt;">
+              Queries the reference dictionary and injects the output.
+            </RT·entry>
+          </RT·dictionary>
+        </RT·section>
+
+        <RT·section>
+          <RT·name>Annotation</RT·name>
+          <RT·dictionary key="Tag" definition="Description & Arguments">
+            <RT·entry key="&lt;RT·endnote&gt;">
+              Marks the scoped content for extraction and placement in the endnotes block.
+            </RT·entry>
+            <RT·entry key="&lt;RT·footnote&gt;">
+              Marks the scoped content for layout relocation to the active page's footer.
+            </RT·entry>
+          </RT·dictionary>
+        </RT·section>
+
+        <RT·section>
+          <RT·name>Pagination</RT·name>
+          <RT·dictionary key="Tag" definition="Description & Arguments">
+            <RT·entry key="&lt;RT·page&gt;">
+              Physical document boundary generated dynamically by the paginator. Not for manual insertion.
+            </RT·entry>
+            <RT·entry key="&lt;RT·page-break&gt;">
+              Explicit directive terminating the current <RT·code>&lt;RT·page&gt;</RT·code> evaluation and pushing subsequent data to the next boundary.
+            </RT·entry>
+          </RT·dictionary>
+        </RT·section>
+      </RT·section>
+
+      <RT·section>
+        <RT·name>Global widgets</RT·name>
+        <RT·dictionary key="Tag" definition="Description & Arguments">
+          <RT·entry key="&lt;RT·theme-selector&gt;">
+            Injects a floating overlay permitting real-time CSS theme execution. Writes the selection to the browser's <code>localStorage</code>.
+          </RT·entry>
+        </RT·dictionary>
+      </RT·section>
+
+    </RT·article>
+  </body>
+</html>
index b03500a..cc3c59a 100644 (file)
@@ -1,12 +1,19 @@
 /*
   Element/section.js
   Expands <RT·section> macros into <RT·counter·step> primitives.
+  Utilizes the global RT.Section namespace for state tracking and execution guards.
 */
 
 (function(){
 
   if(!window.RT) return;
 
+  window.RT.Section = window.RT.Section || {};
+  
+  // Guard against multiple script inclusions
+  if(window.RT.Section.is_loaded) return;
+  window.RT.Section.is_loaded = true;
+
   const apply_style = function(title_node ,depth ,config){
     const base_size = 2.25;
     const size = Math.max(1.1 ,base_size - (depth * 0.35));
     const debug = window.RT.Debug || { log: function(){} };
     if(debug.log) debug.log('section' ,'Expanding section macros');
 
+    const U = window.RT.Utility;
     const config = window.RT.layout_config || {};
     const section_seq = document.querySelectorAll('RT·section, rt·section');
 
     if(section_seq.length === 0) return;
 
     const article = document.querySelector('RT·article, rt·article, RT·memo, rt·memo');
-    if(article && !document.querySelector('RT·counter·make[counter="RT_section"], rt·counter·make[counter="RT_section"]')){
+    const counter_name = 'RT·Section·counter';
+
+    // Check the global dictionary for existence rather than traversing the DOM
+    if(article && !U.Registry.has(window.RT.Section, counter_name)){
       const make = document.createElement('RT·counter·make');
-      make.setAttribute('counter' ,'RT_section');
+      make.setAttribute('counter' ,counter_name);
       make.setAttribute('style' ,'CountingNumber');
       make.setAttribute('mode' ,'scoped');
       make.setAttribute('on-first-step' ,'0');
       article.insertBefore(make ,article.firstChild);
+      
+      // Register the physical node and its attributes into the global namespace
+      U.Registry.register_make(window.RT.Section, counter_name, make, ['splitable']);
     }
 
     let section_idx = 0;
 
     section_seq.forEach(section => {
-      let depth = 0;
-      let curr = section.parentElement;
-      while(curr){
-        const tag = (curr.tagName || '').toLowerCase();
-        if(tag === 'rt·section' || (tag === 'rt·counter·step' && curr.getAttribute('counter') === 'RT_section')){
-          depth++;
-        }
-        curr = curr.parentElement;
-      }
+      // Utilize the abstracted structural depth utility
+      let depth = U.Dom.get_structural_depth(section, counter_name);
 
       if(depth === 0){
         if(!section.previousElementSibling?.tagName?.toLowerCase().includes('page-break')){
       const snap_id = section.id || ('section_snap_' + section_idx++);
       
       const step = document.createElement('RT·counter·step');
-      step.setAttribute('counter' ,'RT_section');
-      step.setAttribute('splitable' ,'true');
+      step.setAttribute('counter' ,counter_name);
+      
+      // Query the global dictionary for the splitable flag
+      if(U.Registry.has(window.RT.Section[counter_name], 'splitable')) {
+         step.setAttribute('splitable', 'true');
+      }
+      
       step.id = snap_id; 
 
       const snap = document.createElement('RT·counter·snapshot');
-      snap.setAttribute('counter' ,'RT_section');
+      snap.setAttribute('counter' ,counter_name);
       snap.setAttribute('snapshot' ,snap_id);
       step.appendChild(snap);
 
index eb612b7..a7dd3b6 100644 (file)
@@ -24,7 +24,8 @@
 
   function compile_configuration(){
     window.RT.layout_config = {
-      surface_0: t('surface' ,'0')
+      surface_screen: t('surface', 'screen')
+      ,surface_0: t('surface' ,'0')
       ,surface_code: t('surface' ,'code')
       ,content_main: t('content' ,'main')
       ,brand_primary: t('brand' ,'primary')
 
   function apply_macro_boundaries(){
     const conf = window.RT.layout_config;
+    
+    // Apply viewport screen boundary color, defaulting to surface_0 if undefined
+    const screen_bg = conf.surface_screen || conf.surface_0 || '#000000';
+    document.documentElement.style.backgroundColor = screen_bg;
+    document.body.style.backgroundColor = screen_bg;
+    document.body.style.margin = "0"; // Prevent default browser margin bleeding
+    
     const article_seq = document.querySelectorAll('RT·article');
     
     for(let i = 0; i < article_seq.length; i++){
       }
     }
 
-    required_elements.forEach(name => RT.load('Element/' + name));
-
-    if(RT.Element && RT.PageStyle){
-      RT.Element.add(compile_configuration); // Re-evaluate on render pass
-      RT.Element.add(apply_macro_boundaries);
-      RT.PageStyle.add(apply_macro_boundaries);
-    }
-
     const page_seq = document.querySelectorAll('RT·article RT·page');
     for(let i = 0; i < page_seq.length; i++){
        let p_style = page_seq[i].style;
index 1be5c97..76a88f4 100644 (file)
@@ -2,80 +2,78 @@
 
 (function(){
 
-   if (!window.RT) {
+  if(!window.RT){
     console.error("RT not defined - was RT-Manuscript_make run?");
     return;
   }
 
   // Prevent duplicate initialization
-  if (window.RT.theme_library instanceof Set) {
+  if(window.RT.theme_library instanceof Set){
     console.error("RT.theme_library missing,- was theme_make run?");
     return;
   }
 
   window.RT.theme_library['inverse_wheat'] = {
     meta: {
-      is_dark: true,
-      name: "inverse_wheat"
-    },
-    surface: {
-      0: "oklch(0.157 0 0)",
-      1: "oklch(0.198 0 0)",
-      2: "oklch(0.221 0 0)",
-      3: "oklch(0.240 0 0)",
-      input: "oklch(0.210 0 0)",
-      code: "oklch(0.204 0 0)",
-      select: "oklch(0.358 0.073 88)"
-    },
-    content: {
-      main: "oklch(0.927 0.050 97)",
-      muted: "oklch(0.699 0.030 78)",
-      subtle: "oklch(0.522 0.022 82)",
-      inverse: "oklch(0.157 0 0)"
-    },
-    brand: {
-      primary: "oklch(0.841 0.173 85)",
-      secondary: "oklch(0.827 0.135 78)",
-      tertiary: "oklch(0.795 0.081 66)",
-      link: "oklch(0.865 0.177 90)"
-    },
-    border: {
-      faint: "oklch(0.280 0.018 78)",
-      regular: "oklch(0.386 0.028 82)",
-      strong: "oklch(0.533 0.041 77)"
-    },
-    state: {
-      success: "oklch(0.671 0.168 137)",
-      warning: "oklch(0.767 0.159 68)",
-      error: "oklch(0.591 0.172 24)",
-      info: "oklch(0.661 0.078 232)"
-    },
-    syntax: {
-      keyword: "oklch(0.825 0.146 72)",
-      string: "oklch(0.804 0.132 122)",
-      func: "oklch(0.756 0.134 39)",
-      comment: "oklch(0.573 0.035 78)"
-    },
-    page: {
-      width: "6.5in",
-      min_height: "9in",
-      padding: "0.5in 1in",
-      margin: "20px auto",
-      bg_color: "oklch(0.95 0.02 90)",
-      border_color: "oklch(0.85 0.02 90)",
-      text_color: "oklch(0.20 0.02 25)",
-      shadow: "0 4px 15px rgba(0,0,0,0.1)"
-    },
-    custom_css: `
-    img.RT-diagram { 
+      is_dark: true
+      ,name: "inverse_wheat"
+    }
+    ,surface: {
+      screen: "#000000"
+      ,0: "oklch(0.157 0 0)"
+      ,1: "oklch(0.198 0 0)"
+      ,2: "oklch(0.221 0 0)"
+      ,3: "oklch(0.240 0 0)"
+      ,input: "oklch(0.210 0 0)"
+      ,code: "oklch(0.204 0 0)"
+      ,select: "oklch(0.358 0.073 88)"
+    }
+    ,content: {
+      main: "oklch(0.927 0.050 97)"
+      ,muted: "oklch(0.699 0.030 78)"
+      ,subtle: "oklch(0.522 0.022 82)"
+      ,inverse: "oklch(0.157 0 0)"
+    }
+    ,brand: {
+      primary: "oklch(0.841 0.173 85)"
+      ,secondary: "oklch(0.827 0.135 78)"
+      ,tertiary: "oklch(0.795 0.081 66)"
+      ,link: "oklch(0.865 0.177 90)"
+    }
+    ,border: {
+      faint: "oklch(0.280 0.018 78)"
+      ,regular: "oklch(0.386 0.028 82)"
+      ,strong: "oklch(0.533 0.041 77)"
+    }
+    ,state: {
+      success: "oklch(0.671 0.168 137)"
+      ,warning: "oklch(0.767 0.159 68)"
+      ,error: "oklch(0.591 0.172 24)"
+      ,info: "oklch(0.661 0.078 232)"
+    }
+    ,syntax: {
+      keyword: "oklch(0.825 0.146 72)"
+      ,string: "oklch(0.804 0.132 122)"
+      ,func: "oklch(0.756 0.134 39)"
+      ,comment: "oklch(0.573 0.035 78)"
+    }
+    ,page: {
+      width: "6.5in"
+      ,min_height: "9in"
+      ,padding: "0.5in 1in"
+      ,margin: "20px auto"
+      ,bg_color: "oklch(0.95 0.02 90)"
+      ,border_color: "oklch(0.85 0.02 90)"
+      ,text_color: "oklch(0.20 0.02 25)"
+      ,shadow: "0 4px 15px rgba(0 ,0 ,0 ,0.1)"
+    }
+    ,custom_css: `
+    img.RT·diagram { 
       filter: invert(1) hue-rotate(180deg); 
       max-width: 100%; 
       height: auto; 
     }
     `
-
-
   };
 
 })();
-
index 9ec2a6d..508fe0a 100644 (file)
@@ -1,47 +1,47 @@
 <!-- smoke test
 
-make("A"){}: (empty,)
+make("A"){} : (empty ,)
       ^ scoped by name
 
-snapshot() -> (empty,)
+snapshot() -> (empty ,)
 
 step("A"){
 
-  snapshot() == (preamble,[0])
+  snapshot() == (preamble ,[0])
 
-  step("A"){ 
-    snapshot() == (preamble,[0,0])
-  } 
+  step("A"){
+    snapshot() == (preamble ,[0,0])
+  }
 
-  snapshot() ==  (between,[0,0])
+  snapshot() == (between ,[0,0])
 
   step("A"){
-    snapshot() == (preamble,[0,1])
+    snapshot() == (preamble ,[0,1])
   }
 
-  snapshot() ==  (between,[0,1])
+  snapshot() == (between ,[0,1])
 
-} 
+}
 
-snapshot() == (between,[0])
+snapshot() == (between ,[0])
 
-step("A"){ : (rest,[1])
+step("A"){ : (rest ,[1])
 
-  snapshot() == (preamble,[1])
+  snapshot() == (preamble ,[1])
 
   step("A"){
-    snapshot() == (preamble,[1,0])
+    snapshot() == (preamble ,[1,0])
   }
 
-  snapshot() == (between,[1,0])
+  snapshot() == (between ,[1,0])
 
   step("A"){
-    snapshot() == (preamble,[1,1])
+    snapshot() == (preamble ,[1,1])
   }
 
-} 
+}
 
-snapshot() == (between,[1])
+snapshot() == (between ,[1])
 
 -->
 <!DOCTYPE html>
@@ -79,9 +79,9 @@ snapshot() == (between,[1])
       <div class="line">
         snapshot() -> (
           <RT·Counter·snapshot counter="A" snapshot="s1"></RT·Counter·snapshot>
-          <RT·Counter·read snapshot="s1" key="count.status"></RT·Counter·read> ,
-          [<RT·Counter·read snapshot="s1" key="count.list"></RT·Counter·read>] ,
-          "<RT·Counter·read snapshot="s1" key="count"></RT·Counter·read>"
+          <RT·Counter·read snapshot="s1" key="count.status"></RT·Counter·read>
+          ,[<RT·Counter·read snapshot="s1" key="count.list"></RT·Counter·read>]
+          ,"<RT·Counter·read snapshot="s1" key="count"></RT·Counter·read>"
         )
       </div>
 
@@ -91,11 +91,10 @@ snapshot() == (between,[1])
           <div class="line">
             snapshot() == (
               <RT·Counter·snapshot counter="A" snapshot="s2"></RT·Counter·snapshot>
-              <RT·Counter·read snapshot="s2" key="count.status"></RT·Counter·read> ,
-              [<RT·Counter·read snapshot="s2" key="count.list"></RT·Counter·read>] ,
-              "<RT·Counter·read snapshot="s2" key="count"></RT·Counter·read>"
-            ) 
-            <span class="comment">// Expected: ( preamble ,[0] , "1" )</span>
+              <RT·Counter·read snapshot="s2" key="count.status"></RT·Counter·read>
+              ,[<RT·Counter·read snapshot="s2" key="count.list"></RT·Counter·read>]
+              ,"<RT·Counter·read snapshot="s2" key="count"></RT·Counter·read>"
+            ) <span class="comment">// Expected: ( preamble ,[0] ,"1" )</span>
           </div>
 
           <div class="line">step("A"){</div>
@@ -104,11 +103,10 @@ snapshot() == (between,[1])
               <div class="line">
                 snapshot() == (
                   <RT·Counter·snapshot counter="A" snapshot="s3"></RT·Counter·snapshot>
-                  <RT·Counter·read snapshot="s3" key="count.status"></RT·Counter·read> ,
-                  [<RT·Counter·read snapshot="s3" key="count.list"></RT·Counter·read>] ,
-                  "<RT·Counter·read snapshot="s3" key="count"></RT·Counter·read>"
-                ) 
-                <span class="comment">// Expected: ( preamble ,[0,0] , "1.1" )</span>
+                  <RT·Counter·read snapshot="s3" key="count.status"></RT·Counter·read>
+                  ,[<RT·Counter·read snapshot="s3" key="count.list"></RT·Counter·read>]
+                  ,"<RT·Counter·read snapshot="s3" key="count"></RT·Counter·read>"
+                ) <span class="comment">// Expected: ( preamble ,[0,0] ,"1.1" )</span>
               </div>
             </div>
           </RT·Counter·step>
@@ -117,11 +115,10 @@ snapshot() == (between,[1])
           <div class="line">
             snapshot() == (
               <RT·Counter·snapshot counter="A" snapshot="s4"></RT·Counter·snapshot>
-              <RT·Counter·read snapshot="s4" key="count.status"></RT·Counter·read> ,
-              [<RT·Counter·read snapshot="s4" key="count.list"></RT·Counter·read>] ,
-              "<RT·Counter·read snapshot="s4" key="count"></RT·Counter·read>"
-            ) 
-            <span class="comment">// Expected: ( between ,[0,0] , "1" )</span>
+              <RT·Counter·read snapshot="s4" key="count.status"></RT·Counter·read>
+              ,[<RT·Counter·read snapshot="s4" key="count.list"></RT·Counter·read>]
+              ,"<RT·Counter·read snapshot="s4" key="count"></RT·Counter·read>"
+            ) <span class="comment">// Expected: ( between ,[0,0] ,"1" )</span>
           </div>
 
           <div class="line">step("A"){</div>
@@ -130,11 +127,10 @@ snapshot() == (between,[1])
               <div class="line">
                 snapshot() == (
                   <RT·Counter·snapshot counter="A" snapshot="s5"></RT·Counter·snapshot>
-                  <RT·Counter·read snapshot="s5" key="count.status"></RT·Counter·read> ,
-                  [<RT·Counter·read snapshot="s5" key="count.list"></RT·Counter·read>] ,
-                  "<RT·Counter·read snapshot="s5" key="count"></RT·Counter·read>"
-                ) 
-                <span class="comment">// Expected: ( preamble ,[0,1] , "1.2" )</span>
+                  <RT·Counter·read snapshot="s5" key="count.status"></RT·Counter·read>
+                  ,[<RT·Counter·read snapshot="s5" key="count.list"></RT·Counter·read>]
+                  ,"<RT·Counter·read snapshot="s5" key="count"></RT·Counter·read>"
+                ) <span class="comment">// Expected: ( preamble ,[0,1] ,"1.2" )</span>
               </div>
             </div>
           </RT·Counter·step>
@@ -143,11 +139,10 @@ snapshot() == (between,[1])
           <div class="line">
             snapshot() == (
               <RT·Counter·snapshot counter="A" snapshot="s6"></RT·Counter·snapshot>
-              <RT·Counter·read snapshot="s6" key="count.status"></RT·Counter·read> ,
-              [<RT·Counter·read snapshot="s6" key="count.list"></RT·Counter·read>] ,
-              "<RT·Counter·read snapshot="s6" key="count"></RT·Counter·read>"
-            ) 
-            <span class="comment">// Expected: ( between ,[0,1] , "1" )</span>
+              <RT·Counter·read snapshot="s6" key="count.status"></RT·Counter·read>
+              ,[<RT·Counter·read snapshot="s6" key="count.list"></RT·Counter·read>]
+              ,"<RT·Counter·read snapshot="s6" key="count"></RT·Counter·read>"
+            ) <span class="comment">// Expected: ( between ,[0,1] ,"1" )</span>
           </div>
         </div>
       </RT·Counter·step>
@@ -156,10 +151,10 @@ snapshot() == (between,[1])
       <div class="line">
         snapshot() == (
           <RT·Counter·snapshot counter="A" snapshot="s7"></RT·Counter·snapshot>
-          <RT·Counter·read snapshot="s7" key="count.status"></RT·Counter·read> ,
-          [<RT·Counter·read snapshot="s7" key="count.list"></RT·Counter·read>] ,
-          "<RT·Counter·read snapshot="s7" key="count"></RT·Counter·read>"
-        ) <span class="comment">// Expected: ( between ,[0] , "" )</span>
+          <RT·Counter·read snapshot="s7" key="count.status"></RT·Counter·read>
+          ,[<RT·Counter·read snapshot="s7" key="count.list"></RT·Counter·read>]
+          ,"<RT·Counter·read snapshot="s7" key="count"></RT·Counter·read>"
+        ) <span class="comment">// Expected: ( between ,[0] ,"" )</span>
       </div>
 
       <div class="line">step("A"){</div>
@@ -168,10 +163,10 @@ snapshot() == (between,[1])
           <div class="line">
             snapshot() == (
               <RT·Counter·snapshot counter="A" snapshot="s8"></RT·Counter·snapshot>
-              <RT·Counter·read snapshot="s8" key="count.status"></RT·Counter·read> ,
-              [<RT·Counter·read snapshot="s8" key="count.list"></RT·Counter·read>] ,
-              "<RT·Counter·read snapshot="s8" key="count"></RT·Counter·read>"
-            ) <span class="comment">// Expected: ( preamble ,[1] , "2" )</span>
+              <RT·Counter·read snapshot="s8" key="count.status"></RT·Counter·read>
+              ,[<RT·Counter·read snapshot="s8" key="count.list"></RT·Counter·read>]
+              ,"<RT·Counter·read snapshot="s8" key="count"></RT·Counter·read>"
+            ) <span class="comment">// Expected: ( preamble ,[1] ,"2" )</span>
           </div>
 
           <div class="line">step("A"){</div>
@@ -180,10 +175,10 @@ snapshot() == (between,[1])
               <div class="line">
                 snapshot() == (
                   <RT·Counter·snapshot counter="A" snapshot="s9"></RT·Counter·snapshot>
-                  <RT·Counter·read snapshot="s9" key="count.status"></RT·Counter·read> ,
-                  [<RT·Counter·read snapshot="s9" key="count.list"></RT·Counter·read>] ,
-                  "<RT·Counter·read snapshot="s9" key="count"></RT·Counter·read>"
-                ) <span class="comment">// Expected: ( preamble ,[1,0] , "2.1" )</span>
+                  <RT·Counter·read snapshot="s9" key="count.status"></RT·Counter·read>
+                  ,[<RT·Counter·read snapshot="s9" key="count.list"></RT·Counter·read>]
+                  ,"<RT·Counter·read snapshot="s9" key="count"></RT·Counter·read>"
+                ) <span class="comment">// Expected: ( preamble ,[1,0] ,"2.1" )</span>
               </div>
             </div>
           </RT·Counter·step>
@@ -192,10 +187,10 @@ snapshot() == (between,[1])
           <div class="line">
             snapshot() == (
               <RT·Counter·snapshot counter="A" snapshot="s10"></RT·Counter·snapshot>
-              <RT·Counter·read snapshot="s10" key="count.status"></RT·Counter·read> ,
-              [<RT·Counter·read snapshot="s10" key="count.list"></RT·Counter·read>] ,
-              "<RT·Counter·read snapshot="s10" key="count"></RT·Counter·read>"
-            ) <span class="comment">// Expected: ( between ,[1,0] , "2" )</span>
+              <RT·Counter·read snapshot="s10" key="count.status"></RT·Counter·read>
+              ,[<RT·Counter·read snapshot="s10" key="count.list"></RT·Counter·read>]
+              ,"<RT·Counter·read snapshot="s10" key="count"></RT·Counter·read>"
+            ) <span class="comment">// Expected: ( between ,[1,0] ,"2" )</span>
           </div>
 
           <div class="line">step("A"){</div>
@@ -204,10 +199,10 @@ snapshot() == (between,[1])
               <div class="line">
                 snapshot() == (
                   <RT·Counter·snapshot counter="A" snapshot="s11"></RT·Counter·snapshot>
-                  <RT·Counter·read snapshot="s11" key="count.status"></RT·Counter·read> ,
-                  [<RT·Counter·read snapshot="s11" key="count.list"></RT·Counter·read>] ,
-                  "<RT·Counter·read snapshot="s11" key="count"></RT·Counter·read>"
-                ) <span class="comment">// Expected: ( preamble ,[1,1] , "2.2" )</span>
+                  <RT·Counter·read snapshot="s11" key="count.status"></RT·Counter·read>
+                  ,[<RT·Counter·read snapshot="s11" key="count.list"></RT·Counter·read>]
+                  ,"<RT·Counter·read snapshot="s11" key="count"></RT·Counter·read>"
+                ) <span class="comment">// Expected: ( preamble ,[1,1] ,"2.2" )</span>
               </div>
             </div>
           </RT·Counter·step>
@@ -219,10 +214,10 @@ snapshot() == (between,[1])
       <div class="line">
         snapshot() == (
           <RT·Counter·snapshot counter="A" snapshot="s12"></RT·Counter·snapshot>
-          <RT·Counter·read snapshot="s12" key="count.status"></RT·Counter·read> ,
-          [<RT·Counter·read snapshot="s12" key="count.list"></RT·Counter·read>] ,
-          "<RT·Counter·read snapshot="s12" key="count"></RT·Counter·read>"
-        ) <span class="comment">// Expected: ( between ,[1] , "" )</span>
+          <RT·Counter·read snapshot="s12" key="count.status"></RT·Counter·read>
+          ,[<RT·Counter·read snapshot="s12" key="count.list"></RT·Counter·read>]
+          ,"<RT·Counter·read snapshot="s12" key="count"></RT·Counter·read>"
+        ) <span class="comment">// Expected: ( between ,[1] ,"" )</span>
       </div>
 
     </RT·article>
index 88956ac..08cf6d2 100644 (file)
@@ -33,9 +33,9 @@
       <div class="line">
         snapshot() -> (
           <RT·Counter·snapshot counter="A" snapshot="s1"></RT·Counter·snapshot>
-          <RT·Counter·read snapshot="s1" key="count.status"></RT·Counter·read> ,
-          [<RT·Counter·read snapshot="s1" key="count.list"></RT·Counter·read>] ,
-          "<RT·Counter·read snapshot="s1" key="count"></RT·Counter·read>"
+          <RT·Counter·read snapshot="s1" key="count.status"></RT·Counter·read>
+          ,[<RT·Counter·read snapshot="s1" key="count.list"></RT·Counter·read>]
+          ,"<RT·Counter·read snapshot="s1" key="count"></RT·Counter·read>"
         )
       </div>
 
           <div class="line">
             snapshot() == (
               <RT·Counter·snapshot counter="A" snapshot="s2"></RT·Counter·snapshot>
-              <RT·Counter·read snapshot="s2" key="count.status"></RT·Counter·read> ,
-              [<RT·Counter·read snapshot="s2" key="count.list"></RT·Counter·read>] ,
-              "<RT·Counter·read snapshot="s2" key="count"></RT·Counter·read>"
-            ) 
-            <span class="comment">// Expected: ( preamble ,[0] , "0" )</span>
+              <RT·Counter·read snapshot="s2" key="count.status"></RT·Counter·read>
+              ,[<RT·Counter·read snapshot="s2" key="count.list"></RT·Counter·read>]
+              ,"<RT·Counter·read snapshot="s2" key="count"></RT·Counter·read>"
+            ) <span class="comment">// Expected: ( preamble ,[0] ,"I" )</span>
           </div>
 
           <div class="line">step("A"){</div>
               <div class="line">
                 snapshot() == (
                   <RT·Counter·snapshot counter="A" snapshot="s3"></RT·Counter·snapshot>
-                  <RT·Counter·read snapshot="s3" key="count.status"></RT·Counter·read> ,
-                  [<RT·Counter·read snapshot="s3" key="count.list"></RT·Counter·read>] ,
-                  "<RT·Counter·read snapshot="s3" key="count"></RT·Counter·read>"
-                ) 
-                <span class="comment">// Expected: ( preamble ,[0,0] , "0.A" )</span>
+                  <RT·Counter·read snapshot="s3" key="count.status"></RT·Counter·read>
+                  ,[<RT·Counter·read snapshot="s3" key="count.list"></RT·Counter·read>]
+                  ,"<RT·Counter·read snapshot="s3" key="count"></RT·Counter·read>"
+                ) <span class="comment">// Expected: ( preamble ,[0,0] ,"I.A" )</span>
               </div>
             </div>
           </RT·Counter·step>
           <div class="line">
             snapshot() == (
               <RT·Counter·snapshot counter="A" snapshot="s4"></RT·Counter·snapshot>
-              <RT·Counter·read snapshot="s4" key="count.status"></RT·Counter·read> ,
-              [<RT·Counter·read snapshot="s4" key="count.list"></RT·Counter·read>] ,
-              "<RT·Counter·read snapshot="s4" key="count"></RT·Counter·read>"
-            ) 
-            <span class="comment">// Expected: ( between ,[0,0] , "0" )</span>
+              <RT·Counter·read snapshot="s4" key="count.status"></RT·Counter·read>
+              ,[<RT·Counter·read snapshot="s4" key="count.list"></RT·Counter·read>]
+              ,"<RT·Counter·read snapshot="s4" key="count"></RT·Counter·read>"
+            ) <span class="comment">// Expected: ( between ,[0,0] ,"I" )</span>
           </div>
 
           <div class="line">step("A"){</div>
               <div class="line">
                 snapshot() == (
                   <RT·Counter·snapshot counter="A" snapshot="s5"></RT·Counter·snapshot>
-                  <RT·Counter·read snapshot="s5" key="count.status"></RT·Counter·read> ,
-                  [<RT·Counter·read snapshot="s5" key="count.list"></RT·Counter·read>] ,
-                  "<RT·Counter·read snapshot="s5" key="count"></RT·Counter·read>"
-                ) 
-                <span class="comment">// Expected: ( preamble ,[0,1] , "0.B" )</span>
+                  <RT·Counter·read snapshot="s5" key="count.status"></RT·Counter·read>
+                  ,[<RT·Counter·read snapshot="s5" key="count.list"></RT·Counter·read>]
+                  ,"<RT·Counter·read snapshot="s5" key="count"></RT·Counter·read>"
+                ) <span class="comment">// Expected: ( preamble ,[0,1] ,"I.B" )</span>
               </div>
             </div>
           </RT·Counter·step>
           <div class="line">
             snapshot() == (
               <RT·Counter·snapshot counter="A" snapshot="s6"></RT·Counter·snapshot>
-              <RT·Counter·read snapshot="s6" key="count.status"></RT·Counter·read> ,
-              [<RT·Counter·read snapshot="s6" key="count.list"></RT·Counter·read>] ,
-              "<RT·Counter·read snapshot="s6" key="count"></RT·Counter·read>"
-            ) 
-            <span class="comment">// Expected: ( between ,[0,1] , "0" )</span>
+              <RT·Counter·read snapshot="s6" key="count.status"></RT·Counter·read>
+              ,[<RT·Counter·read snapshot="s6" key="count.list"></RT·Counter·read>]
+              ,"<RT·Counter·read snapshot="s6" key="count"></RT·Counter·read>"
+            ) <span class="comment">// Expected: ( between ,[0,1] ,"I" )</span>
           </div>
         </div>
       </RT·Counter·step>
       <div class="line">
         snapshot() == (
           <RT·Counter·snapshot counter="A" snapshot="s7"></RT·Counter·snapshot>
-          <RT·Counter·read snapshot="s7" key="count.status"></RT·Counter·read> ,
-          [<RT·Counter·read snapshot="s7" key="count.list"></RT·Counter·read>] ,
-          "<RT·Counter·read snapshot="s7" key="count"></RT·Counter·read>"
-        ) <span class="comment">// Expected: ( between ,[0] , "" )</span>
+          <RT·Counter·read snapshot="s7" key="count.status"></RT·Counter·read>
+          ,[<RT·Counter·read snapshot="s7" key="count.list"></RT·Counter·read>]
+          ,"<RT·Counter·read snapshot="s7" key="count"></RT·Counter·read>"
+        ) <span class="comment">// Expected: ( between ,[0] ,"" )</span>
       </div>
 
       <div class="line">step("A"){</div>
           <div class="line">
             snapshot() == (
               <RT·Counter·snapshot counter="A" snapshot="s8"></RT·Counter·snapshot>
-              <RT·Counter·read snapshot="s8" key="count.status"></RT·Counter·read> ,
-              [<RT·Counter·read snapshot="s8" key="count.list"></RT·Counter·read>] ,
-              "<RT·Counter·read snapshot="s8" key="count"></RT·Counter·read>"
-            ) <span class="comment">// Expected: ( preamble ,[1] , "I" )</span>
+              <RT·Counter·read snapshot="s8" key="count.status"></RT·Counter·read>
+              ,[<RT·Counter·read snapshot="s8" key="count.list"></RT·Counter·read>]
+              ,"<RT·Counter·read snapshot="s8" key="count"></RT·Counter·read>"
+            ) <span class="comment">// Expected: ( preamble ,[1] ,"II" )</span>
           </div>
 
           <div class="line">step("A"){</div>
               <div class="line">
                 snapshot() == (
                   <RT·Counter·snapshot counter="A" snapshot="s9"></RT·Counter·snapshot>
-                  <RT·Counter·read snapshot="s9" key="count.status"></RT·Counter·read> ,
-                  [<RT·Counter·read snapshot="s9" key="count.list"></RT·Counter·read>] ,
-                  "<RT·Counter·read snapshot="s9" key="count"></RT·Counter·read>"
-                ) <span class="comment">// Expected: ( preamble ,[1,0] , "I.A" )</span>
+                  <RT·Counter·read snapshot="s9" key="count.status"></RT·Counter·read>
+                  ,[<RT·Counter·read snapshot="s9" key="count.list"></RT·Counter·read>]
+                  ,"<RT·Counter·read snapshot="s9" key="count"></RT·Counter·read>"
+                ) <span class="comment">// Expected: ( preamble ,[1,0] ,"II.A" )</span>
               </div>
             </div>
           </RT·Counter·step>
           <div class="line">
             snapshot() == (
               <RT·Counter·snapshot counter="A" snapshot="s10"></RT·Counter·snapshot>
-              <RT·Counter·read snapshot="s10" key="count.status"></RT·Counter·read> ,
-              [<RT·Counter·read snapshot="s10" key="count.list"></RT·Counter·read>] ,
-              "<RT·Counter·read snapshot="s10" key="count"></RT·Counter·read>"
-            ) <span class="comment">// Expected: ( between ,[1,0] , "I" )</span>
+              <RT·Counter·read snapshot="s10" key="count.status"></RT·Counter·read>
+              ,[<RT·Counter·read snapshot="s10" key="count.list"></RT·Counter·read>]
+              ,"<RT·Counter·read snapshot="s10" key="count"></RT·Counter·read>"
+            ) <span class="comment">// Expected: ( between ,[1,0] ,"II" )</span>
           </div>
 
           <div class="line">step("A"){</div>
               <div class="line">
                 snapshot() == (
                   <RT·Counter·snapshot counter="A" snapshot="s11"></RT·Counter·snapshot>
-                  <RT·Counter·read snapshot="s11" key="count.status"></RT·Counter·read> ,
-                  [<RT·Counter·read snapshot="s11" key="count.list"></RT·Counter·read>] ,
-                  "<RT·Counter·read snapshot="s11" key="count"></RT·Counter·read>"
-                ) <span class="comment">// Expected: ( preamble ,[1,1] , "I.B" )</span>
+                  <RT·Counter·read snapshot="s11" key="count.status"></RT·Counter·read>
+                  ,[<RT·Counter·read snapshot="s11" key="count.list"></RT·Counter·read>]
+                  ,"<RT·Counter·read snapshot="s11" key="count"></RT·Counter·read>"
+                ) <span class="comment">// Expected: ( preamble ,[1,1] ,"II.B" )</span>
               </div>
             </div>
           </RT·Counter·step>
       <div class="line">
         snapshot() == (
           <RT·Counter·snapshot counter="A" snapshot="s12"></RT·Counter·snapshot>
-          <RT·Counter·read snapshot="s12" key="count.status"></RT·Counter·read> ,
-          [<RT·Counter·read snapshot="s12" key="count.list"></RT·Counter·read>] ,
-          "<RT·Counter·read snapshot="s12" key="count"></RT·Counter·read>"
-        ) <span class="comment">// Expected: ( between ,[1] , "" )</span>
+          <RT·Counter·read snapshot="s12" key="count.status"></RT·Counter·read>
+          ,[<RT·Counter·read snapshot="s12" key="count.list"></RT·Counter·read>]
+          ,"<RT·Counter·read snapshot="s12" key="count"></RT·Counter·read>"
+        ) <span class="comment">// Expected: ( between ,[1] ,"" )</span>
       </div>
 
     </RT·article>
index 7b6b3db..1f47d53 100644 (file)
@@ -33,9 +33,9 @@
       <div class="line">
         snapshot() -> (
           <RT·Counter·snapshot counter="A" snapshot="s1"></RT·Counter·snapshot>
-          <RT·Counter·read snapshot="s1" key="count.status"></RT·Counter·read> ,
-          [<RT·Counter·read snapshot="s1" key="count.list"></RT·Counter·read>] ,
-          "<RT·Counter·read snapshot="s1" key="count"></RT·Counter·read>"
+          <RT·Counter·read snapshot="s1" key="count.status"></RT·Counter·read>
+          ,[<RT·Counter·read snapshot="s1" key="count.list"></RT·Counter·read>]
+          ,"<RT·Counter·read snapshot="s1" key="count"></RT·Counter·read>"
         )
       </div>
 
           <div class="line">
             snapshot() == (
               <RT·Counter·snapshot counter="A" snapshot="s2"></RT·Counter·snapshot>
-              <RT·Counter·read snapshot="s2" key="count.status"></RT·Counter·read> ,
-              [<RT·Counter·read snapshot="s2" key="count.list"></RT·Counter·read>] ,
-              "<RT·Counter·read snapshot="s2" key="count"></RT·Counter·read>"
-            ) 
-            <span class="comment">// Expected: ( preamble ,[0] , "I" )</span>
+              <RT·Counter·read snapshot="s2" key="count.status"></RT·Counter·read>
+              ,[<RT·Counter·read snapshot="s2" key="count.list"></RT·Counter·read>]
+              ,"<RT·Counter·read snapshot="s2" key="count"></RT·Counter·read>"
+            ) <span class="comment">// Expected: ( preamble ,[0] ,"I" )</span>
           </div>
 
           <div class="line">step("A"){</div>
               <div class="line">
                 snapshot() == (
                   <RT·Counter·snapshot counter="A" snapshot="s3"></RT·Counter·snapshot>
-                  <RT·Counter·read snapshot="s3" key="count.status"></RT·Counter·read> ,
-                  [<RT·Counter·read snapshot="s3" key="count.list"></RT·Counter·read>] ,
-                  "<RT·Counter·read snapshot="s3" key="count"></RT·Counter·read>"
-                ) 
-                <span class="comment">// Expected: ( preamble ,[0,0] , "I.A" )</span>
+                  <RT·Counter·read snapshot="s3" key="count.status"></RT·Counter·read>
+                  ,[<RT·Counter·read snapshot="s3" key="count.list"></RT·Counter·read>]
+                  ,"<RT·Counter·read snapshot="s3" key="count"></RT·Counter·read>"
+                ) <span class="comment">// Expected: ( preamble ,[0,0] ,"I.A" )</span>
               </div>
             </div>
           </RT·Counter·step>
           <div class="line">
             snapshot() == (
               <RT·Counter·snapshot counter="A" snapshot="s4"></RT·Counter·snapshot>
-              <RT·Counter·read snapshot="s4" key="count.status"></RT·Counter·read> ,
-              [<RT·Counter·read snapshot="s4" key="count.list"></RT·Counter·read>] ,
-              "<RT·Counter·read snapshot="s4" key="count"></RT·Counter·read>"
-            ) 
-            <span class="comment">// Expected: ( between ,[0,0] , "I.A" )</span>
+              <RT·Counter·read snapshot="s4" key="count.status"></RT·Counter·read>
+              ,[<RT·Counter·read snapshot="s4" key="count.list"></RT·Counter·read>]
+              ,"<RT·Counter·read snapshot="s4" key="count"></RT·Counter·read>"
+            ) <span class="comment">// Expected: ( between ,[0,0] ,"I.A" )</span>
           </div>
 
           <div class="line">step("A"){</div>
               <div class="line">
                 snapshot() == (
                   <RT·Counter·snapshot counter="A" snapshot="s5"></RT·Counter·snapshot>
-                  <RT·Counter·read snapshot="s5" key="count.status"></RT·Counter·read> ,
-                  [<RT·Counter·read snapshot="s5" key="count.list"></RT·Counter·read>] ,
-                  "<RT·Counter·read snapshot="s5" key="count"></RT·Counter·read>"
-                ) 
-                <span class="comment">// Expected: ( preamble ,[0,1] , "I.B" )</span>
+                  <RT·Counter·read snapshot="s5" key="count.status"></RT·Counter·read>
+                  ,[<RT·Counter·read snapshot="s5" key="count.list"></RT·Counter·read>]
+                  ,"<RT·Counter·read snapshot="s5" key="count"></RT·Counter·read>"
+                ) <span class="comment">// Expected: ( preamble ,[0,1] ,"I.B" )</span>
               </div>
             </div>
           </RT·Counter·step>
           <div class="line">
             snapshot() == (
               <RT·Counter·snapshot counter="A" snapshot="s6"></RT·Counter·snapshot>
-              <RT·Counter·read snapshot="s6" key="count.status"></RT·Counter·read> ,
-              [<RT·Counter·read snapshot="s6" key="count.list"></RT·Counter·read>] ,
-              "<RT·Counter·read snapshot="s6" key="count"></RT·Counter·read>"
-            ) 
-            <span class="comment">// Expected: ( between ,[0,1] , "I.B" )</span>
+              <RT·Counter·read snapshot="s6" key="count.status"></RT·Counter·read>
+              ,[<RT·Counter·read snapshot="s6" key="count.list"></RT·Counter·read>]
+              ,"<RT·Counter·read snapshot="s6" key="count"></RT·Counter·read>"
+            ) <span class="comment">// Expected: ( between ,[0,1] ,"I.B" )</span>
           </div>
         </div>
       </RT·Counter·step>
       <div class="line">
         snapshot() == (
           <RT·Counter·snapshot counter="A" snapshot="s7"></RT·Counter·snapshot>
-          <RT·Counter·read snapshot="s7" key="count.status"></RT·Counter·read> ,
-          [<RT·Counter·read snapshot="s7" key="count.list"></RT·Counter·read>] ,
-          "<RT·Counter·read snapshot="s7" key="count"></RT·Counter·read>"
-        ) <span class="comment">// Expected: ( between ,[0] , "I" )</span>
+          <RT·Counter·read snapshot="s7" key="count.status"></RT·Counter·read>
+          ,[<RT·Counter·read snapshot="s7" key="count.list"></RT·Counter·read>]
+          ,"<RT·Counter·read snapshot="s7" key="count"></RT·Counter·read>"
+        ) <span class="comment">// Expected: ( between ,[0] ,"I" )</span>
       </div>
 
       <div class="line">step("A"){</div>
           <div class="line">
             snapshot() == (
               <RT·Counter·snapshot counter="A" snapshot="s8"></RT·Counter·snapshot>
-              <RT·Counter·read snapshot="s8" key="count.status"></RT·Counter·read> ,
-              [<RT·Counter·read snapshot="s8" key="count.list"></RT·Counter·read>] ,
-              "<RT·Counter·read snapshot="s8" key="count"></RT·Counter·read>"
-            ) <span class="comment">// Expected: ( preamble ,[1] , "II" )</span>
+              <RT·Counter·read snapshot="s8" key="count.status"></RT·Counter·read>
+              ,[<RT·Counter·read snapshot="s8" key="count.list"></RT·Counter·read>]
+              ,"<RT·Counter·read snapshot="s8" key="count"></RT·Counter·read>"
+            ) <span class="comment">// Expected: ( preamble ,[1] ,"II" )</span>
           </div>
 
           <div class="line">step("A"){</div>
               <div class="line">
                 snapshot() == (
                   <RT·Counter·snapshot counter="A" snapshot="s9"></RT·Counter·snapshot>
-                  <RT·Counter·read snapshot="s9" key="count.status"></RT·Counter·read> ,
-                  [<RT·Counter·read snapshot="s9" key="count.list"></RT·Counter·read>] ,
-                  "<RT·Counter·read snapshot="s9" key="count"></RT·Counter·read>"
-                ) <span class="comment">// Expected: ( preamble ,[1,0] , "II.A" )</span>
+                  <RT·Counter·read snapshot="s9" key="count.status"></RT·Counter·read>
+                  ,[<RT·Counter·read snapshot="s9" key="count.list"></RT·Counter·read>]
+                  ,"<RT·Counter·read snapshot="s9" key="count"></RT·Counter·read>"
+                ) <span class="comment">// Expected: ( preamble ,[1,0] ,"II.A" )</span>
               </div>
             </div>
           </RT·Counter·step>
           <div class="line">
             snapshot() == (
               <RT·Counter·snapshot counter="A" snapshot="s10"></RT·Counter·snapshot>
-              <RT·Counter·read snapshot="s10" key="count.status"></RT·Counter·read> ,
-              [<RT·Counter·read snapshot="s10" key="count.list"></RT·Counter·read>] ,
-              "<RT·Counter·read snapshot="s10" key="count"></RT·Counter·read>"
-            ) <span class="comment">// Expected: ( between ,[1,0] , "II.A" )</span>
+              <RT·Counter·read snapshot="s10" key="count.status"></RT·Counter·read>
+              ,[<RT·Counter·read snapshot="s10" key="count.list"></RT·Counter·read>]
+              ,"<RT·Counter·read snapshot="s10" key="count"></RT·Counter·read>"
+            ) <span class="comment">// Expected: ( between ,[1,0] ,"II.A" )</span>
           </div>
 
           <div class="line">step("A"){</div>
               <div class="line">
                 snapshot() == (
                   <RT·Counter·snapshot counter="A" snapshot="s11"></RT·Counter·snapshot>
-                  <RT·Counter·read snapshot="s11" key="count.status"></RT·Counter·read> ,
-                  [<RT·Counter·read snapshot="s11" key="count.list"></RT·Counter·read>] ,
-                  "<RT·Counter·read snapshot="s11" key="count"></RT·Counter·read>"
-                ) <span class="comment">// Expected: ( preamble ,[1,1] , "II.B" )</span>
+                  <RT·Counter·read snapshot="s11" key="count.status"></RT·Counter·read>
+                  ,[<RT·Counter·read snapshot="s11" key="count.list"></RT·Counter·read>]
+                  ,"<RT·Counter·read snapshot="s11" key="count"></RT·Counter·read>"
+                ) <span class="comment">// Expected: ( preamble ,[1,1] ,"II.B" )</span>
               </div>
             </div>
           </RT·Counter·step>
       <div class="line">
         snapshot() == (
           <RT·Counter·snapshot counter="A" snapshot="s12"></RT·Counter·snapshot>
-          <RT·Counter·read snapshot="s12" key="count.status"></RT·Counter·read> ,
-          [<RT·Counter·read snapshot="s12" key="count.list"></RT·Counter·read>] ,
-          "<RT·Counter·read snapshot="s12" key="count"></RT·Counter·read>"
-        ) <span class="comment">// Expected: ( between ,[1] , "II" )</span>
+          <RT·Counter·read snapshot="s12" key="count.status"></RT·Counter·read>
+          ,[<RT·Counter·read snapshot="s12" key="count.list"></RT·Counter·read>]
+          ,"<RT·Counter·read snapshot="s12" key="count"></RT·Counter·read>"
+        ) <span class="comment">// Expected: ( between ,[1] ,"II" )</span>
       </div>
 
     </RT·article>
index 2090867..e781837 100644 (file)
@@ -1,4 +1,4 @@
-<!-- 
+<!--
 counter splits with continuations
 uses manual primitive page breaks and hard coded splits and continuations
 -->
@@ -23,28 +23,28 @@ uses manual primitive page breaks and hard coded splits and continuations
       <h1>Page 1: Initial Scope</h1>
       <p>The state machine initializes. Scopes 1, 3, and 4 breach the page boundary and are suspended (<code>continued="true"</code>).</p>
 
-      <RT·counter·make counter="C" serial="1" style="outline" on-first-step="1"></RT·counter·make>
+      <RT·Counter·make counter="C" serial="1" style="outline" on-first-step="1"></RT·Counter·make>
 
-      <RT·counter·step counter="C" continued="true"> <!-- Node 1: I -->
-        <RT·counter·snapshot counter="C" snapshot="n1"></RT·counter·snapshot>
-        <p>Node 1 execution: <strong><RT·counter·read snapshot="n1"></RT·counter·read></strong> (Expected: <strong>I</strong>)</p>
+      <RT·Counter·step counter="C" continued="true"> <!-- Node 1: I -->
+        <RT·Counter·snapshot counter="C" snapshot="n1"></RT·Counter·snapshot>
+        <p>Node 1 execution: <strong><RT·Counter·read snapshot="n1"></RT·Counter·read></strong> (Expected: <strong>I</strong>)</p>
 
-        <RT·counter·step counter="C"> <!-- Node 2: I.A -->
-          <RT·counter·snapshot counter="C" snapshot="n2"></RT·counter·snapshot>
-          <p style="margin-left: 2rem;">Node 2 execution: <strong><RT·counter·read snapshot="n2"></RT·counter·read></strong> (Expected: <strong>I.A</strong>) - <em>Closes normally</em></p>
-        </RT·counter·step>
+        <RT·Counter·step counter="C"> <!-- Node 2: I.A -->
+          <RT·Counter·snapshot counter="C" snapshot="n2"></RT·Counter·snapshot>
+          <p style="margin-left: 2rem;">Node 2 execution: <strong><RT·Counter·read snapshot="n2"></RT·Counter·read></strong> (Expected: <strong>I.A</strong>) - <em>Closes normally</em></p>
+        </RT·Counter·step>
 
-        <RT·counter·step counter="C" continued="true"> <!-- Node 3: I.B -->
-          <RT·counter·snapshot counter="C" snapshot="n3"></RT·counter·snapshot>
-          <p style="margin-left: 2rem;">Node 3 execution: <strong><RT·counter·read snapshot="n3"></RT·counter·read></strong> (Expected: <strong>I.B</strong>)</p>
+        <RT·Counter·step counter="C" continued="true"> <!-- Node 3: I.B -->
+          <RT·Counter·snapshot counter="C" snapshot="n3"></RT·Counter·snapshot>
+          <p style="margin-left: 2rem;">Node 3 execution: <strong><RT·Counter·read snapshot="n3"></RT·Counter·read></strong> (Expected: <strong>I.B</strong>)</p>
 
-          <RT·counter·step counter="C" continued="true"> <!-- Node 4: I.B.i -->
-            <RT·counter·snapshot counter="C" snapshot="n4"></RT·counter·snapshot>
-            <p style="margin-left: 4rem;">Node 4 execution: <strong><RT·counter·read snapshot="n4"></RT·counter·read></strong> (Expected: <strong>I.B.i</strong>)</p>
+          <RT·Counter·step counter="C" continued="true"> <!-- Node 4: I.B.i -->
+            <RT·Counter·snapshot counter="C" snapshot="n4"></RT·Counter·snapshot>
+            <p style="margin-left: 4rem;">Node 4 execution: <strong><RT·Counter·read snapshot="n4"></RT·Counter·read></strong> (Expected: <strong>I.B.i</strong>)</p>
             <p style="margin-left: 4rem; color: #B22222;">--- Page Boundary Reached ---</p>
-          </RT·counter·step>
-        </RT·counter·step>
-      </RT·counter·step>
+          </RT·Counter·step>
+        </RT·Counter·step>
+      </RT·Counter·step>
 
       <RT·page-break-primitive></RT·page-break-primitive>
 
@@ -52,28 +52,28 @@ uses manual primitive page breaks and hard coded splits and continuations
       <h1>Page 2: First Continuation</h1>
       <p>The graph is reassembled. Node 4 closes. Node 5 executes. The page boundary is breached again, forcing a second suspension of the outer scopes 1 and 3.</p>
 
-      <RT·counter·make counter="C" serial="2" continues="1"></RT·counter·make>
+      <RT·Counter·make counter="C" serial="2" continues="1"></RT·Counter·make>
 
       <!-- Node 1 Cont: Suspended again -->
-      <RT·counter·step counter="C" continuation="true" continued="true"> 
-        
+      <RT·Counter·step counter="C" continuation="true" continued="true">
+
         <!-- Node 3 Cont: Suspended again -->
-        <RT·counter·step counter="C" continuation="true" continued="true"> 
+        <RT·Counter·step counter="C" continuation="true" continued="true">
 
           <!-- Node 4 Cont: Closes -->
-          <RT·counter·step counter="C" continuation="true"> 
-            <RT·counter·snapshot counter="C" snapshot="n4_cont"></RT·counter·snapshot>
-            <p style="margin-left: 4rem;">Node 4 continued payload. Current state: <strong><RT·counter·read snapshot="n4_cont"></RT·counter·read></strong> (Expected: <strong>I.B.i</strong>) - <em>Closes normally</em></p>
-          </RT·counter·step> 
-
-          <RT·counter·step counter="C"> <!-- Node 5: I.B.ii -->
-            <RT·counter·snapshot counter="C" snapshot="n5"></RT·counter·snapshot>
-            <p style="margin-left: 4rem;">Node 5 execution: <strong><RT·counter·read snapshot="n5"></RT·counter·read></strong> (Expected: <strong>I.B.ii</strong>) - <em>Closes normally</em></p>
+          <RT·Counter·step counter="C" continuation="true">
+            <RT·Counter·snapshot counter="C" snapshot="n4_cont"></RT·Counter·snapshot>
+            <p style="margin-left: 4rem;">Node 4 continued payload. Current state: <strong><RT·Counter·read snapshot="n4_cont"></RT·Counter·read></strong> (Expected: <strong>I.B.i</strong>) - <em>Closes normally</em></p>
+          </RT·Counter·step>
+
+          <RT·Counter·step counter="C"> <!-- Node 5: I.B.ii -->
+            <RT·Counter·snapshot counter="C" snapshot="n5"></RT·Counter·snapshot>
+            <p style="margin-left: 4rem;">Node 5 execution: <strong><RT·Counter·read snapshot="n5"></RT·Counter·read></strong> (Expected: <strong>I.B.ii</strong>) - <em>Closes normally</em></p>
             <p style="margin-left: 4rem; color: #B22222;">--- Page Boundary Reached ---</p>
-          </RT·counter·step>
+          </RT·Counter·step>
 
-        </RT·counter·step>
-      </RT·counter·step>
+        </RT·Counter·step>
+      </RT·Counter·step>
 
       <RT·page-break-primitive></RT·page-break-primitive>
 
@@ -81,26 +81,26 @@ uses manual primitive page breaks and hard coded splits and continuations
       <h1>Page 3: Second Continuation</h1>
       <p>The final graph reassembly. Node 3 closes. Node 6 executes. Node 1 closes.</p>
 
-      <RT·counter·make counter="C" serial="3" continues="2"></RT·counter·make>
+      <RT·Counter·make counter="C" serial="3" continues="2"></RT·Counter·make>
 
       <!-- Node 1 Cont: Closes -->
-      <RT·counter·step counter="C" continuation="true"> 
+      <RT·Counter·step counter="C" continuation="true">
 
         <!-- Node 3 Cont: Closes -->
-        <RT·counter·step counter="C" continuation="true"> 
-          <RT·counter·snapshot counter="C" snapshot="n3_cont"></RT·counter·snapshot>
-          <p style="margin-left: 2rem;">Node 3 continued payload. Current state: <strong><RT·counter·read snapshot="n3_cont"></RT·counter·read></strong> (Expected: <strong>I.B</strong>) - <em>Closes normally</em></p>
-        </RT·counter·step> 
+        <RT·Counter·step counter="C" continuation="true">
+          <RT·Counter·snapshot counter="C" snapshot="n3_cont"></RT·Counter·snapshot>
+          <p style="margin-left: 2rem;">Node 3 continued payload. Current state: <strong><RT·Counter·read snapshot="n3_cont"></RT·Counter·read></strong> (Expected: <strong>I.B</strong>) - <em>Closes normally</em></p>
+        </RT·Counter·step>
 
-        <RT·counter·step counter="C"> <!-- Node 6: I.C -->
-          <RT·counter·snapshot counter="C" snapshot="n6"></RT·counter·snapshot>
-          <p style="margin-left: 2rem;">Node 6 execution: <strong><RT·counter·read snapshot="n6"></RT·counter·read></strong> (Expected: <strong>I.C</strong>) - <em>Closes normally</em></p>
-        </RT·counter·step>
+        <RT·Counter·step counter="C"> <!-- Node 6: I.C -->
+          <RT·Counter·snapshot counter="C" snapshot="n6"></RT·Counter·snapshot>
+          <p style="margin-left: 2rem;">Node 6 execution: <strong><RT·Counter·read snapshot="n6"></RT·Counter·read></strong> (Expected: <strong>I.C</strong>) - <em>Closes normally</em></p>
+        </RT·Counter·step>
 
-        <RT·counter·snapshot counter="C" snapshot="n1_cont"></RT·counter·snapshot>
-        <p>Node 1 continued payload. Current state: <strong><RT·counter·read snapshot="n1_cont"></RT·counter·read></strong> (Expected: <strong>I</strong>) - <em>Closes normally</em></p>
+        <RT·Counter·snapshot counter="C" snapshot="n1_cont"></RT·Counter·snapshot>
+        <p>Node 1 continued payload. Current state: <strong><RT·Counter·read snapshot="n1_cont"></RT·Counter·read></strong> (Expected: <strong>I</strong>) - <em>Closes normally</em></p>
 
-      </RT·counter·step> 
+      </RT·Counter·step>
 
     </RT·article>
   </body>
index ec7bb0d..65e75b7 100644 (file)
       <h1>Page 1: Pre-Split</h1>
       <p>This counter scope initiates normally and is deliberately severed by an explicit structural split break.</p>
 
-      <RT·counter·make counter="C" style="outline" on-first-step="1"></RT·counter·make>
+      <RT·Counter·make counter="C" style="outline" on-first-step="1"></RT·Counter·make>
 
-      <RT·counter·step counter="C" splitable="true"> 
-        <RT·counter·snapshot counter="C" snapshot="n1_pre"></RT·counter·snapshot>
-        <p>Pre-split evaluation: <strong><RT·counter·read snapshot="n1_pre"></RT·counter·read></strong> (Expected: 1)</p>
+      <RT·Counter·step counter="C" splitable="true">
+        <RT·Counter·snapshot counter="C" snapshot="n1_pre"></RT·Counter·snapshot>
+        <p>Pre-split evaluation: <strong><RT·Counter·read snapshot="n1_pre"></RT·Counter·read></strong> (Expected: 1)</p>
 
         <RT·page-break></RT·page-break>
 
         <h1>Page 2: Post-Split Continuation</h1>
-        <RT·counter·snapshot counter="C" snapshot="n1_post"></RT·counter·snapshot>
-        <p>Post-split evaluation: <strong><RT·counter·read snapshot="n1_post"></RT·counter·read></strong> (Expected: 1)</p>
+        <RT·Counter·snapshot counter="C" snapshot="n1_post"></RT·Counter·snapshot>
+        <p>Post-split evaluation: <strong><RT·Counter·read snapshot="n1_post"></RT·Counter·read></strong> (Expected: 1)</p>
         <p>The array extent remains static across the boundary because the continuation flag successfully suppressed the step increment.</p>
-        
-        <RT·counter·step counter="C">
-          <RT·counter·snapshot counter="C" snapshot="n2_nested"></RT·counter·snapshot>
-          <p>Nested step evaluation: <strong><RT·counter·read snapshot="n2_nested"></RT·counter·read></strong> (Expected: 1.A)</p>
-        </RT·counter·step>
 
-      </RT·counter·step>
+        <RT·Counter·step counter="C">
+          <RT·Counter·snapshot counter="C" snapshot="n2_nested"></RT·Counter·snapshot>
+          <p>Nested step evaluation: <strong><RT·Counter·read snapshot="n2_nested"></RT·Counter·read></strong> (Expected: 1.A)</p>
+        </RT·Counter·step>
+
+      </RT·Counter·step>
 
     </RT·article>
   </body>
index e8459ca..1aa8ed1 100644 (file)
       <h1>Page 1: Named Scope Initialization</h1>
       <p>This counter scope is assigned an internal name during evaluation. It is then severed.</p>
 
-      <RT·counter·make counter="Sec" style="outline" on-first-step="1"></RT·counter·make>
+      <RT·Counter·make counter="Sec" style="outline" on-first-step="1"></RT·Counter·make>
 
-      <RT·counter·step counter="Sec" splitable="true">
+      <RT·Counter·step counter="Sec" splitable="true">
         <RT·name>Introduction to Systems Architecture</RT·name>
-        <RT·counter·snapshot counter="Sec" snapshot="s1_pre"></RT·counter·snapshot>
-        
-        <p>Count: <strong><RT·counter·read snapshot="s1_pre"></RT·counter·read></strong> (Expected: <strong>I</strong>)</p>
-        <p>Name: <strong><RT·counter·read snapshot="s1_pre" key="name"></RT·counter·read></strong> (Expected: <strong>Introduction to Systems Architecture</strong>)</p>
+        <RT·Counter·snapshot counter="Sec" snapshot="s1_pre"></RT·Counter·snapshot>
+
+        <p>Count: <strong><RT·Counter·read snapshot="s1_pre"></RT·Counter·read></strong> (Expected: <strong>I</strong>)</p>
+        <p>Name: <strong><RT·Counter·read snapshot="s1_pre" key="name"></RT·Counter·read></strong> (Expected: <strong>Introduction to Systems Architecture</strong>)</p>
 
         <p style="color: #B22222; margin-top: 2rem;">--- Issuing Forced Split Break ---</p>
         <RT·page-break></RT·page-break>
-        
+
         <h1>Page 2: Continuation with Names</h1>
-        <RT·counter·snapshot counter="Sec" snapshot="s1_post"></RT·counter·snapshot>
+        <RT·Counter·snapshot counter="Sec" snapshot="s1_post"></RT·Counter·snapshot>
         <p>The state arrays, including the parallel name array, are successfully cloned across the page boundary.</p>
-        
-        <p>Count: <strong><RT·counter·read snapshot="s1_post"></RT·counter·read></strong> (Expected: <strong>I</strong>)</p>
-        <p>Name: <strong><RT·counter·read snapshot="s1_post" key="name"></RT·counter·read></strong> (Expected: <strong>Introduction to Systems Architecture</strong>)</p>
 
-        <RT·counter·step counter="Sec">
+        <p>Count: <strong><RT·Counter·read snapshot="s1_post"></RT·Counter·read></strong> (Expected: <strong>I</strong>)</p>
+        <p>Name: <strong><RT·Counter·read snapshot="s1_post" key="name"></RT·Counter·read></strong> (Expected: <strong>Introduction to Systems Architecture</strong>)</p>
+
+        <RT·Counter·step counter="Sec">
           <RT·name>Theoretical Foundations</RT·name>
-          <RT·counter·snapshot counter="Sec" snapshot="s2"></RT·counter·snapshot>
-          
-          <p style="margin-top: 1rem; margin-left: 2rem;">Count: <strong><RT·counter·read snapshot="s2"></RT·counter·read></strong> (Expected: <strong>I.A</strong>)</p>
-          <p style="margin-left: 2rem;">Name: <strong><RT·counter·read snapshot="s2" key="name"></RT·counter·read></strong> (Expected: <strong>Theoretical Foundations</strong>)</p>
-        </RT·counter·step>
+          <RT·Counter·snapshot counter="Sec" snapshot="s2"></RT·Counter·snapshot>
+
+          <p style="margin-top: 1rem; margin-left: 2rem;">Count: <strong><RT·Counter·read snapshot="s2"></RT·Counter·read></strong> (Expected: <strong>I.A</strong>)</p>
+          <p style="margin-left: 2rem;">Name: <strong><RT·Counter·read snapshot="s2" key="name"></RT·Counter·read></strong> (Expected: <strong>Theoretical Foundations</strong>)</p>
+        </RT·Counter·step>
 
-      </RT·counter·step>
+      </RT·Counter·step>
 
     </RT·article>
   </body>