how to do a release docs
authorThomas Walker Lynch <eknp9n@reasoningtechnology.com>
Tue, 10 Mar 2026 08:02:07 +0000 (08:02 +0000)
committerThomas Walker Lynch <eknp9n@reasoningtechnology.com>
Tue, 10 Mar 2026 08:02:07 +0000 (08:02 +0000)
README.md
administrator/document/Release_howto.html [new file with mode: 0644]
document/Intro.html [deleted file]
document/Product-development_roles-and-workflow.html [new file with mode: 0644]
document/Product-maintenance_roles-and-workflow.html [new file with mode: 0644]
document/Product_Development_Roles_and_Workflow.html [deleted file]
document/temp.html [new file with mode: 0644]

index dc02733..162eeaa 100644 (file)
--- a/README.md
+++ b/README.md
@@ -19,10 +19,20 @@ To create a Harmony-based project, the project administrator performs these step
 
 ## Viewing the Documentation
 
-To view the project documentation with its intended formatting, a person must provide the RT style library. It is recommended to clone the styling repository side-by-side with your new project directory, and then link it into the third-party directory.
+To view the project documentation with its intended formatting, a person must provide the RT style library.  One way to do this is to clone the styling repository side-by-side with your new project directory, and then to link it into the third-party directory.
 
-From the root of your new project repository, run:
+From the parent directory of your new project, clone the required style repository:
+
+```bash
+cd ..
+git clone -b release_v1 https://github.com/Thomas-Walker-Lynch/RT-style-JS_public
+```
+
+Then, from the root of your new project repository, link it:
 
 ```bash
 cd shared/third_party
 ln -s ../../../RT-style-JS_public RT-style-JS_public
+```
+
+Find an introductory document at `document/Introduction_to_Harmony.html'. After the style library is installed, clicking on it in file navigator should open it in a browser.
diff --git a/administrator/document/Release_howto.html b/administrator/document/Release_howto.html
new file mode 100644 (file)
index 0000000..888d414
--- /dev/null
@@ -0,0 +1,101 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8">
+    <title>Release howto</title>
+    <script src="setup.js"></script>
+    <script>
+      window.StyleRT.include('RT/theme');
+      window.StyleRT.include('RT/layout/article_tech_ref');
+    </script>
+  </head>
+  <body>
+    <RT-article>
+      <RT-title 
+        author="Thomas Walker Lynch" 
+        date="2026-03-10" 
+        title="How to release a project">
+      </RT-title>
+
+      <RT-TOC level="1"></RT-TOC>
+
+      <h1>Prerequisites</h1>
+      <p>
+        A release requires a tested promotion candidate. The developer compiles the code and promotes it to the <RT-code>consumer/made</RT-code> directory. The tester validates the candidate. The product manager gives the order to release.
+      </p>
+
+      <h1>Create the release branch</h1>
+      <p>
+        The <RT-term>administrator</RT-term> executes the release. Open a terminal. Enter the project workspace.
+      </p>
+      <RT-code>
+        > . setup administrator
+      </RT-code>
+
+      <p>
+        Switch to the core development branch. Ensure the local repository is current.
+      </p>
+      <RT-code>
+        > git checkout core_developer_branch
+        > git pull
+      </RT-code>
+
+      <p>
+        Create a new branch for the release. Use the major version number.
+      </p>
+      <RT-code>
+        > git checkout -b release_v&lt;major&gt;
+      </RT-code>
+
+      <h1>Issue management and patching</h1>
+      <p>
+        Only critical issues receive patches on a release branch. The product manager defines what is critical. If approved, the release team applies the fix directly to the existing <RT-code>release_v&lt;major&gt;</RT-code> branch.
+      </p>
+      <p>
+        The branch name <RT-code>release_v&lt;major&gt;</RT-code> remains static. The code on the branch is updated. The administrator advances the minor release number in the <RT-code>shared/tool/version</RT-code> file.
+      </p>
+      <p>
+        The administrator tags the new commit with the full version number, such as <RT-code>v&lt;major&gt;.&lt;minor&gt;</RT-code>. Minor versions are edits on the major release branch. They are visible to a person by running the version command.
+      </p>
+      <p>
+        The developer must ensure the fix is also ported to the <RT-code>core_developer_branch</RT-code>. This prevents the defect from reappearing in future major releases.
+      </p>
+
+      <h1>Tag and push</h1>
+      <p>
+        Tag the release with the exact version number.
+      </p>
+      <RT-code>
+        > git tag -a v&lt;major&gt;.&lt;minor&gt; -m "Release v&lt;major&gt;.&lt;minor&gt;"
+      </RT-code>
+
+      <p>
+        Push the branch to the remote repository. Push the tags.
+      </p>
+      <RT-code>
+        > git push origin release_v&lt;major&gt;
+        > git push origin --tags
+      </RT-code>
+
+      <h1>Repository default branch</h1>
+      <p>
+        Set the repository default branch to the new <RT-code>release_v&lt;major&gt;</RT-code> branch on the hosting platform. This ensures a person cloning or pulling the repository receives the most recent major release code by default.
+      </p>
+
+      <h1>Verification</h1>
+      <p>
+        Check the remote repository. Confirm the branch exists. Confirm the tag is visible. Confirm the default branch is updated.
+      </p>
+
+      <h1>Role responsibilities</h1>
+      <ul>
+        <li><strong>Administrator:</strong> Executes the release. Manages branches, tags, and remote pushes. Updates the version file. Sets the repository default branch.</li>
+        <li><strong>Developer:</strong> Compiles and promotes release candidates. Ports release branch fixes back to the core developer branch.</li>
+        <li><strong>Tester:</strong> Validates candidates. Writes a test for every issue in the core developer queue.</li>
+        <li><strong>Product Manager:</strong> Defines critical issues. Orders the release. Participates in release issue triage.</li>
+        <li><strong>Project Manager:</strong> Participates in release issue triage. Assesses impact to the overall project schedule.</li>
+      </ul>
+
+    </RT-article>
+  </body>
+</html>
diff --git a/document/Intro.html b/document/Intro.html
deleted file mode 100644 (file)
index 6852689..0000000
+++ /dev/null
@@ -1,394 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="UTF-8">
-    <title>Introduction to Harmony</title>
-    <script src="setup.js"></script>
-    <script>
-      window.StyleRT.include('RT/theme');
-      window.StyleRT.include('RT/layout/article_tech_ref');
-    </script>
-  </head>
-  <body>
-    <RT-article>
-      <RT-title 
-        author="Thomas Walker Lynch" 
-        date="2026-03-09" 
-        title="Introduction to Harmony">
-      </RT-title>
-
-      <RT-TOC level="1"></RT-TOC>
-
-      <h1>Purpose</h1>
-      <p>
-        Harmony provides a language-agnostic project directory structure and maintenance tools for long-lived, multi-person team software development. The structure exists to enforce:
-      </p>
-      <ol>
-        <li>Clarity about where things live.
-          <ul>
-            <li>Role-based work areas.</li>
-            <li>Separation of skeleton, team member authored, machine-made, and third-party installed software.</li>
-          </ul>
-        </li>
-        <li>A safe, predictable build and promotion workflow.</li>
-      </ol>
-
-      <p>
-        Harmony is a project skeleton, a set of tools and directories that have been checked into a git repository. To create a Harmony-based project, the project administrator performs these steps:
-      </p>
-      <ol>
-        <li>Clone the Harmony project to a local directory.</li>
-        <li>Remove the <RT-code>.git</RT-code> tree.</li>
-        <li>Rename the Harmony directory to the name of the new project.</li>
-        <li>Rename the <RT-code>0pus_Harmony</RT-code> file to reflect the name of the new project.</li>
-        <li>Add a line to the <RT-code>shared/tool/version</RT-code> file for the new project.</li>
-        <li><RT-code>git init -b core_developer_branch</RT-code></li>
-      </ol>
-
-      <p>
-        The order is important so as to protect the Harmony skeleton project from accidental check-ins from users.
-      </p>
-      <p>
-        Leave the Harmony skeleton version in the version file, so that project administrators can understand what has changed in the skeleton over time.
-      </p>
-      <p>
-        The <RT-code>core_developer_branch</RT-code> is the branch that the core development team works on. Project releases are moved to release branches.
-      </p>
-
-      <h1>Environment Setup</h1>
-      <p>
-        Python programmers who use virtual environments will be familiar with an analogous process. The term 'virtual environment' does not invoke any hardware virtualization features; rather, it is a local environment setup. To avoid confusion, a Harmony user refers instead to the 'project setup'. The command to establish the environment is called 'setup' instead of 'activate'. Also note that in Harmony, unlike in Python, there are multiple setups available, each tailored to the specific role a person takes on.
-      </p>
-      <p>
-        As of the time of this writing, the defined roles are: <strong>administrator</strong>, <strong>consumer</strong>, <strong>developer</strong>, and <strong>tester</strong>. A person takes on a role by sourcing the top-level <RT-code>setup</RT-code> script and giving the target role as an argument. For example, in a bash shell with <RT-code>></RT-code> as the prompt, the command is:
-      </p>
-
-      <RT-code>
-        > . setup &lt;role&gt;
-      </RT-code>
-
-      <p>
-        Specifically for the developer role:
-      </p>
-        
-      <RT-code>
-        > . setup developer
-      </RT-code>
-
-      <p>
-        For the administrator role:
-      </p>
-        
-      <RT-code>
-        > . setup administrator
-      </RT-code>
-
-      <p>
-        Instead of starting with a period, the <RT-code>source</RT-code> command can be spelled out explicitly, for example:
-      </p>
-      
-      <RT-code>
-        > source setup tester
-      </RT-code>
-
-      <p>
-        Behind the scenes, the <RT-code>setup</RT-code> script performs the following actions:
-      </p>
-
-      <ul>
-        <li>Sources the project-wide setup (<RT-code>shared/tool/setup</RT-code>) to establish the core environment variables (e.g., <RT-code>REPO_HOME</RT-code> and <RT-code>PROJECT</RT-code>).</li>
-        <li>Conditionally sources <RT-code>shared/authored/setup</RT-code> (if present) to apply administrator-injected, project-specific tool configurations.</li>
-        <li>Configures the <RT-code>PATH</RT-code> to include shared tools, library environments, and the specific <RT-code>&lt;role&gt;/tool</RT-code> directory.</li>
-        <li>Changes the working directory into the specified role's workspace.</li>
-        <li>Sources the <RT-code>&lt;role&gt;/tool/setup</RT-code> script. While the earlier steps apply the standard Harmony skeleton setup, this final step applies the role setup that is customized for this specific project.</li>
-      </ul>
-
-      <h1>After git clone</h1>
-      <p>
-        Because git does not track certain directories (such as <RT-code>shared/third_party/</RT-code> and <RT-code>consumer/made/</RT-code>), a freshly cloned repository lacks external dependencies and consumable products. Team members must perform a few steps to populate these areas.
-      </p>
-
-      <h2>Third-party tools</h2>
-      <p>
-        Harmony is language agnostic. When a project makes use of project-specific C, Python, NodeJS, Java, or other tools, the project administrator configures the project to expect these tools in the <RT-code>shared/third_party</RT-code> directory.
-      </p>
-      <p>
-        Because multiple team members will have to repeat the third-party install process after cloning a project, the administrator should carefully document the third party tools installation steps and place the resulting documents in the <RT-code>shared/document</RT-code> directory. (The most common installation method is to clone the third party tool next to the project, then to symbolic link it under <RT-code>shared/third_party/</RT-code>.)
-      </p>
-      <p>
-        If a person clones the project and does not set up third-party tools, commands will fall through the search path and perhaps find system-installed tools. Using system default tools is generally undesirable because each person who clones the project might be running different versions. This variation makes it harder for team members to coordinate and for consumers of the project work product to build functioning tools.
-      </p>
-
-      <h2>Consumer build</h2>
-      <p>
-        In this section we use the term 'consumer' to mean any team member that wants to make use of the project work product. The tester will want to test it, and the consumer role will want to deploy it, etc.
-      </p>
-      <p>
-        An earlier version of Harmony used platform-specific <RT-code>made</RT-code> directories, but this left binaries in the repository and added excessive complexity.
-        So as to avoid that mess, the current version of Harmony requires a work product consumer to run a local build after cloning the project. The results of the build will appear in the <RT-code>consumer/made</RT-code> directory.
-      </p>
-      <p>
-        To facilitate this, the developer must explicitly document the project's build and promote procedure, saving this guide as <RT-code>developer/document/build.html</RT-code>. 
-      </p>
-      <p>
-        The consumer must then read this document and execute the described steps to compile the source and locally populate the <RT-code>consumer/made</RT-code> directory.
-      </p>
-
-      <p>
-        Typically the consumer build procedure will be a variation of the following:
-      </p>
-
-      <ol>
-        <li>bash</li>
-        <li><RT-code>> cd <project></RT-code></li>
-        <li><RT-code>> . developer</RT-code></li>
-        <li><RT-code>> make CLI</RT-code></li>
-        <li><RT-code>> promote write</RT-code></li>
-        <li><RT-code>> exit</RT-code></li>
-        <li>bash</li>
-        <li><RT-code>> cd <project></RT-code></li>
-        <li><RT-code>> . <role></RT-code></li>
-     </ol>
-
-      <p>This opens a bash shell for the build, makes the work product, then promotes it to the consumer's workspace. The last two lines put the consumer into role specific workspace.  From there the tester can start testing, and the consumer role can work on deployment. (Commonly deployment is a matter of adding the <RT-code>consumer/made</RT-code> directory into the executable search path.)
-      </p>
-
-      <h1>Directory name</h1>
-      <p>
-        This section is discusses our thinking in naming the files and directories found in the Harmony skeleton.
-      </p>
-      <p>
-        A directory name is considered to be a <RT-term>property</RT-term> given to each file contained in the directory. A full path then forms a semantic sentence describing each file.
-      </p>
-      <p>
-        Because a directory name represents a property, it is rarely plural. For example, when each and every file in a directory is a test, the directory is named <RT-code>test</RT-code>.
-      </p>
-      <p>
-        We run into limitations when using a conventional file system as though it were a property based file system. One limitation is that we are forced to choose a single directory name for each file. When a set of files in a directory all share the same multiple properties, we can use a compound directory name with the properties separated by an underscore, but it is impractical to specify overlapping directory groupings, i.e. we can't arbitrarily define any number of properties for a file in this manner. We will see later how this affects Harmony when discussing <RT-term>authored</RT-term> files.
-      </p>
-      <p>
-        The following list presents each property type in order of preference when naming directories.
-      </p>
-      <ul>
-        <li><strong>Role Association</strong> (<RT-code>administrator</RT-code>, <RT-code>developer</RT-code>, <RT-code>tester</RT-code>, <RT-code>consumer</RT-code>): Identifies the persona, whether human or AI, intended to interact with the files.</li>
-        <li><strong>Provenance</strong> (<RT-code>authored</RT-code>, <RT-code>made</RT-code>): Indicates whether the file was created by an intellect or mechanically produced by a tool.</li>
-        <li><strong>Capability</strong> (<RT-code>tool</RT-code>, <RT-code>document</RT-code>, <RT-code>experiment</RT-code>): Describes the primary function or structural nature of the file.</li>
-        <li><strong>Lifecycle State</strong> (<RT-code>scratchpad</RT-code>, <RT-code>stage</RT-code>): Denotes the persistence, volatility, or promotion status of the file.</li>
-        <li><strong>Tracking Status</strong> (<RT-code>tracked</RT-code>, <RT-code>untracked</RT-code>): Specifies the version control expectations for the artifacts.</li>
-      </ul>
-
-      <h1>Document directories</h1>
-      <p>
-        There is a directory for documents that talks about the project as a whole, one for each role, one for tools that are shared among the roles, and the released work product probably comes with a document directory of its own.
-      </p>
-      <ul>
-        <li><RT-code>document/</RT-code> : Top-level onboarding, project-wide structure, such as this document.</li>
-        <li><RT-code>consumer/made/document/</RT-code> : Documentation for end-users of made code (e.g., man pages, application manuals, library API references).</li>
-        <li><RT-code>administrator/document/</RT-code> : Documentation for maintaining the project skeleton and global tools.</li>
-        <li><RT-code>developer/document/</RT-code> : Documentation for developers, including coding standards and internal API guides.</li>
-        <li><RT-code>tester/document/</RT-code> : Documentation for testers detailing test plans and tools.</li>
-        <li><RT-code>shared/document/</RT-code> : Documentation on installing and configuring shared tools.</li>
-      </ul>
-
-      <p>
-        Note that the <RT-code>consumer/made</RT-code> directory is untracked by git and maintained by a tool. (Said tool is <RT-code>developer/tool/promote</RT-code>. It is owned and used by the developer as part of the build process.) Documents that are being promoted for eventual release, and appear in the <RT-code>made</RT-code> directory originate from somewhere from the <RT-code>developer/authored</RT-code> directory depending on how the developer has organized his workspace, but probably in <RT-code>developer/authored/document</RT-code>. Perhaps a future version of Harmony will have a tech-writer role, but that is not the case now.
-      </p>
-
-      <p>
-        Currently, our developers write documents directly in HTML using the RT semantic tags. See the <RT-code>RT-style-JS_public</RT-code> project and the documentation there. A common approach is to copy another document and the <RT-code>setup.js</RT-code> file, then to type over the top of that other document. Only one <RT-code>setup.js</RT-code> file is used per directory. Be sure to edit the relative root path found at the top of <RT-code>setup.js</RT-code>. Plain text, emacs org, and mark down have all been used in prior versions of Harmony.
-      </p>
-
-
-      <h1>Authored, made, scratchpad, third_party, inherited, customizations</h1>
-
-      <p>
-        Files found in a directory named <RT-code>authored</RT-code> were written by project team members. They did not come with the Harmony skeleton, nor with the installation of other software. Project build tools treat <RT-code>authored</RT-code> directories as strictly read-only. Typically these files constitute the intellectual property of a project.
-      </p>
-
-      <p>
-      All source code that gets built into a promotion or project release must be placed in the developers' <RT-code>authored</RT-code> directory. The story is not as clean for build tools and other files. New documents go into document directories, and new tools go into the tool directories, etc. As a specific example, the developer will almost certainly edit the <RT-code>developer/tool/make</RT-code> file.
-      </p>
-
-      <p>
-        When the Harmony version line in the <RT-code>shared/tool/version</RT-code> file is left in place, it is straightforward for a project administrator to determine which Harmony skeleton files have been edited in a project, and which new files have been added.
-      </p>
-
-      <p>
-        [As a historical note, in the first version of Harmony a directory or file was marked as <RT-term>authored</RT-term> by adding a pencil suffix, '🖉'. Tools then respected this, for example by refusing to delete such files. However, this ad hoc approach to properties was awkward, and people had difficulty typing the marker. When the pencils were dropped, a number of authored files, such as an edited <RT-code>developer/tool/make🖉</RT-code> file, were no longer explicitly marked as authored.]
-      </p>
-
-      <p>
-        Files found in a directory named <RT-code>scratchpad</RT-code> are not tracked. Hence, a <RT-code>git clone</RT-code> will always return empty <RT-code>scratchpad</RT-code> directories. It is common for tools to place intermediate files on a scratchpad. It is also common for files to be staged on a scratchpad. Tools play nice and use subdirectories on the pad, so a person who is aware of those subdirectory names can use a scratchpad as a temporary directory. There is a scratchpad maintenance tool that comes with the Harmony, called unimaginatively, <RT-code>scratchpad</RT-code>. Pay attention as one of its commands is <RT-code>clear</RT-code>, and that deletes everything on the current directory's scratchpad.
-      </p>
-
-      <p>
-        Third party software is installed under <RT-code>shared/third_party</RT-code>.
-      </p>
-
-      <p>
-        Other files are said to be <RT-term>inherited</RT-term>, or to be <RT-term>customizations</RT-term>.
-      </p>
-
-      <h2>Untracked directories</h2>
-      <ol>
-        <li><RT-code>consumer/made/</RT-code></li>
-        <li><RT-code>shared/third_party/</RT-code></li>
-        <li><RT-code>**/scratchpad/</RT-code></li>
-      </ol>
-
-      <h1>Top-level repository layout</h1>
-      <p>
-        A team member will source the project setup file to take on a role. As of this writing, the supported roles are: <RT-code>administrator</RT-code>, <RT-code>developer</RT-code>, <RT-code>tester</RT-code>, and <RT-code>consumer</RT-code>.
-      </p>
-
-      <ul>
-        <li><RT-code>administrator/</RT-code> : Project-local tools and skeleton maintenance.</li>
-        <li><RT-code>developer/</RT-code> : Primary workspace for developers.</li>
-        <li><RT-code>tester/</RT-code> : Regression and validation workspace for testers.</li>
-        <li><RT-code>consumer/</RT-code> : Consumption workspace holding the <RT-code>consumer/made</RT-code> directory.</li>
-        <li><RT-code>shared/</RT-code> : Shared ecosystem tools and global environments.</li>
-      </ul>
-
-      <h2>The administrator work area</h2>
-      <p>
-        This directory holds the tools and documentation used to manage the project as a whole. It includes the HTML documentation for the project ontology and workflow, as well as project-local tools utilized by the administrator to maintain the Harmony skeleton.
-      </p>
-
-      <h2>The developer work area</h2>
-      <p>
-        This directory is entered by first going to the top-level directory of the project, then sourcing <RT-code>. setup developer</RT-code>.
-      </p>
-      <ul>
-        <li><RT-code>authored/</RT-code> : Human-written source. Tracked by Git.</li>
-        <li><RT-code>made/</RT-code> : Tracked artifacts generated by tools (e.g., links to CLI entry points).</li>
-        <li><RT-code>experiment/</RT-code> : Try-it-here code. Short-lived spot testing.</li>
-        <li><RT-code>scratchpad/</RT-code> : Git-ignored directory. Holds all intermediate build outputs, including the <RT-code>made</RT-code> directory for promotions.</li>
-        <li><RT-code>tool/</RT-code> : Developer-specific tools (like the promote and make scripts).</li>
-      </ul>
-
-      <h2>The tester work area</h2>
-      <p>
-        This directory is dedicated to formal testing, including regression suites. While a developer can run and keep informal spot tests in their <RT-code>experiment/</RT-code> directory, any experiment promoted to a formal test is moved here. This enforces the boundary between writing code and validating it.
-      </p>
-
-      <h2>The shared tree</h2>
-      <p>
-        This directory contains ecosystem tools and global environments available to all roles. This includes the shared tool directory, as well as third-party installations (like Python virtual environments or compilers) required by the project. To assist in project specific modifications to the Harmony skeleton, Harmony comes with an empty <RT-code>shared/authored</RT-code> directory that is listed earlier in the executable search path than <RT-code>shared/tool</RT-code>.
-      </p>
-
-      <h2>The consumer tree</h2>
-      <p>
-        The <RT-code>consumer/made/</RT-code> tree is where developers put work product that is ready to be consumed. The entire <RT-code>consumer/made</RT-code> directory is git-ignored and treated as a transient deployment target.
-      </p>
-      <p>
-        Artifacts arrive in the <RT-code>consumer/made/</RT-code> tree <em>only</em> when the developer invokes the promote script, which performs a flat-copy from the developer's <RT-code>scratchpad/made</RT-code> directory.
-      </p>
-
-      <h1>Workflow</h1>
-
-      <p> See the document "Product Development Roles and Workflow" for more details.</p>
-
-      <h1>Developer promotion and project releases</h1>
-
-      <p>
-        As a first step, a developer creates a <RT-term>promotion candidate</RT-term> inside of the <RT-code>consumer/made/</RT-code> directory. This is typically done by running <RT-code>make</RT-code> to stage the artifacts into <RT-code>scratchpad/made</RT-code>, where they can be experimented on, followed by running <RT-code>promote write</RT-code>.  The developer will often modify the versions of one or both of those tools that come with the Harmony skeleton. The promotion candidate remains stable until the next <RT-term>promotion</RT-term>.
-      </p>
-      <p>
-        Then the tester runs tests on the promotion candidate. Tests must only read from the <RT-code>consumer/made/</RT-code> directory, though local copies can be made and edited as experiments. Currently bugs are filed using an external issues tool.
-      </p>
-      <p>
-        It is common for a developer to open a second window on his desktop, and then enter the project as a tester in that second window. The developer can then make a promotion candidate, run the tests, edit source code, and perhaps tests, and then quickly spin through the test-debug-fix-promote cycle repeatedly.
-      </p>
-      <p>
-        When the product manager determines the work product to be sufficiently reliable and feature rich, the administrator will make a <RT-term>project release</RT-term>. He will do this by creating a branch called <RT-code>release_v&lt;major&gt;</RT-code> and tagging it. The major release numbers go up incrementally.
-      </p>
-
-      <h1>The version 2.2 Harmony directory tree</h1>
-
-      <RT-code>
-      2026-03-09 01:42:16 Z [Harmony:administrator] Thomas_developer@StanleyPark
-      Â§/home/Thomas/subu_data/developer/project§
-      > tree Harmony
-      Harmony
-      â”œâ”€â”€ 0pus_Harmony
-      â”œâ”€â”€ administrator
-      â”‚ â”œâ”€â”€ authored
-      â”‚ â”œâ”€â”€ document
-      â”‚ â”‚ â””── setup.js
-      â”‚ â””── tool
-      â”‚   â”œâ”€â”€ archive
-      â”‚   â””── setup
-      â”œâ”€â”€ consumer
-      â”‚ â”œâ”€â”€ scratchpad
-      â”‚ â””── tool
-      â”‚   â””── env
-      â”œâ”€â”€ developer
-      â”‚ â”œâ”€â”€ authored
-      â”‚ â”‚ â””── hello.cli.c
-      </RT-code>
-      <RT-code>
-      â”‚ â”œâ”€â”€ document
-      â”‚ â”‚ â”œâ”€â”€ 02_RT_Code_Format.html
-      â”‚ â”‚ â”œâ”€â”€ 03_Naming_and_Directory_Conventions.html
-      â”‚ â”‚ â”œâ”€â”€ 04_Language_Addenda.html
-      â”‚ â”‚ â””── setup.js
-      â”‚ â”œâ”€â”€ experiment
-      â”‚ â”œâ”€â”€ made
-      â”‚ â”œâ”€â”€ scratchpad
-      â”‚ â””── tool
-      â”‚   â”œâ”€â”€ do_all
-      â”‚   â”œâ”€â”€ make
-      â”‚   â”œâ”€â”€ makefile
-      â”‚   â”œâ”€â”€ promote
-      â”‚   â””── setup
-      â”œâ”€â”€ document
-      â”‚ â”œâ”€â”€ Introduction_to_Harmony.html
-      â”‚ â”œâ”€â”€ Product_Development_Roles_and_Workflow.html
-      â”‚ â””── setup.js
-      â”œâ”€â”€ LICENSE
-      </RT-code>
-      <RT-code>
-      â”œâ”€â”€ README.md
-      â”œâ”€â”€ scratchpad
-      â”‚ â”œâ”€â”€ Harmony__79f9d52__2026-03-07_085628Z.tar
-      â”‚ â””── Harmony__e665bb7__2026-03-09_013712Z.tar
-      â”œâ”€â”€ setup
-      â”œâ”€â”€ shared
-      â”‚ â”œâ”€â”€ authored
-      â”‚ â”œâ”€â”€ document
-      â”‚ â”‚ â”œâ”€â”€ install_generic.org
-      â”‚ â”‚ â”œâ”€â”€ install_Python.org
-      â”‚ â”‚ â””── setup.js
-      â”‚ â”œâ”€â”€ made
-      â”‚ â”œâ”€â”€ style_directory_dict.js
-      â”‚ â”œâ”€â”€ third_party
-      â”‚ â”‚ â”œâ”€â”€ RT-style-JS_public -> ../../../RT-style-JS_public/
-      â”‚ â”‚ â””── upstream
-      â”‚ â””── tool
-      â”‚   â”œâ”€â”€ scratchpad
-      â”‚   â”œâ”€â”€ setup
-      </RT-code>
-      <RT-code>
-      â”‚   â”œâ”€â”€ style
-      â”‚   â””── version
-      â””── tester
-          â”œâ”€â”€ authored
-          â”‚ â””── test_routine.sh
-          â”œâ”€â”€ RT_Format
-          â”‚ â”œâ”€â”€ RT_Format
-          â”‚ â”œâ”€â”€ RT_Format.el
-          â”‚ â”œâ”€â”€ test_0_data.c
-          â”‚ â””── test_1_data.py
-          â””── tool
-              â””── setup
-
-      30 directories, 36 files
-
-      2026-03-09 01:42:19 Z [Harmony:administrator] Thomas_developer@StanleyPark
-      Â§/home/Thomas/subu_data/developer/project§
-      > 
-      </RT-code>
-
-    </RT-article>
-  </body>
-</html>
diff --git a/document/Product-development_roles-and-workflow.html b/document/Product-development_roles-and-workflow.html
new file mode 100644 (file)
index 0000000..149624b
--- /dev/null
@@ -0,0 +1,123 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8">
+    <title>Product development roles and workflow</title>
+    <script src="setup.js"></script>
+    <script>
+      window.StyleRT.include('RT/theme');
+      window.StyleRT.include('RT/layout/article_tech_ref');
+    </script>
+  </head>
+  <body>
+    <RT-article>
+      <RT-title 
+        author="Thomas Walker Lynch" 
+        date="2026-03-09" 
+        title="Product development roles and workflow">
+      </RT-title>
+
+      <RT-TOC level="1"></RT-TOC>
+
+      <h1>Roles as hats</h1>
+      <p>
+        In Harmony, a role is a hat a person wears. There can be multiple people sharing a single role, and a single person can wear many hats. Some roles interact directly with the project directory structure, while others guide the process from outside the codebase. 
+      </p>
+
+      <h2>Workspace roles</h2>
+      <p>
+        These roles interact directly with the repository. To enter a workspace, change directory to the top-level of the project and source the setup file for the desired role:
+      </p>
+      <RT-code>
+        > . setup administrator
+        > . setup developer
+        > . setup tester
+        > . setup consumer
+      </RT-code>
+      <p>
+        It is common for a person to have multiple terminal sessions or IDEs open, each running under a different role environment.
+      </p>
+
+      <h3>Administrator role</h3>
+      <p>Responsibilities:</p>
+      <ol>
+        <li>Set up the project directory and keep it in sync with the Harmony skeleton.</li>
+        <li>Maintain role environments (apart from role-specific <RT-code>tool/setup</RT-code> files).</li>
+        <li>Install and maintain shared and third_party tools, addressing issues with the project workflow. Note that the term "third_party" encompasses any software not authored within this specific project.</li>
+      </ol>
+
+      <h3>Developer role</h3>
+      <p>Responsibilities and Boundaries:</p>
+      <ol>
+        <li>Write and modify <RT-code>authored/</RT-code> source.</li>
+        <li>Run builds and place artifacts in <RT-code>scratchpad/made</RT-code>, then execute the <RT-code>promote write</RT-code> script to copy artifacts to <RT-code>consumer/made</RT-code> for testing.</li>
+        <li>Run experiments in <RT-code>experiment/</RT-code>. These experiments can sometimes be promoted to formal tests, but there is no requirement to do so. The developer role should not blur into the tester role; experiments are informal, whereas tests are formal and retained.</li>
+        <li><strong>Strict Boundary:</strong> A developer never writes into the <RT-code>tester/</RT-code> directory. Instead, a developer adds tests to <RT-code>developer/experiment/</RT-code> and offers to share them.</li>
+      </ol>
+
+      <h3>Tester role</h3>
+      <p>Responsibilities and Boundaries:</p>
+      <ol>
+        <li>Evaluate candidates under <RT-code>consumer/made/</RT-code> and run regression suites to confirm:
+          <ul>
+            <li>That the code does not crash.</li>
+            <li>That consumers do not have a bad experience.</li>
+            <li>That the goals specified by the product manager are met.</li>
+          </ul>
+        </li>
+        <li>File issues and communicate feedback to the developers.</li>
+        <li><strong>Strict Boundary:</strong> A tester never patches code in the <RT-code>developer/</RT-code> directory. Instead, the tester files issues or proposes code fixes on a separate branch.</li>
+      </ol>
+
+      <h3>Consumer role</h3>
+      <p>Responsibilities:</p>
+      <ol>
+        <li>Act as the end-user simulation environment.</li>
+        <li>Consume and deploy artifacts exclusively from the <RT-code>consumer/made/</RT-code> target.</li>
+        <li>Never author or modify code; strictly run local builds or deployments for architecture-specific testing.</li>
+        <li>Report issues. (Anyone can report an issue, and consumers regularly do).</li>
+      </ol>
+
+      <h2>External roles</h2>
+      <p>
+        These roles drive the project forward but do not have a dedicated <RT-code>setup &lt;role&gt;</RT-code> workspace, as they do not directly build or test the code in that capacity. If these individuals need to interface with the code, they simply put on a workspace role hat, such as administer, developer, tester, or consumer.
+      </p>
+
+      <h3>Product manager</h3>
+      <p>
+        The product manager receives specifications from the architect and sets the specific goals for a release. When the project manager provides updates indicating readiness, the product manager makes the final decision to cut a project release.
+      </p>
+
+      <h3>Project manager</h3>
+      <p>
+        The project manager owns the schedule (such as the Gantt chart) and monitors progress. They coordinate code reviews, read issues and announcements, reformulate the schedule, and instruct the product manager. When parts of the codebase are outsourced, the project manager serves as the primary point of contact with the external teams.
+      </p>
+
+      <h3>Architect</h3>
+      <p>
+        The architect writes the original specification, sets the technical direction, and performs code reviews. The architect might be a contractor or an in-house team member.
+      </p>
+
+      <h1>The four interacting loops</h1>
+      <p>
+        The project moves forward through the continuous interaction of four distinct operational cycles.
+      </p>
+      
+      <ol>
+        <li><strong>Developer Loop:</strong> Write code, compile to the scratchpad made directory, promote to the consumer made directory, announce the promotion to the tester, read issues, and repeat.</li>
+        <li><strong>Tester Loop:</strong> Read developer announcements, read the consumer made directory, run tests, and file issues.</li>
+        <li><strong>Product Manager Loop:</strong> Provide specifications to the developer, receive progress updates from the project manager, and instruct the project administrator to make new git branch project releases and deploy.</li>
+        <li><strong>Project Manager Loop:</strong> Own the Gantt chart, coordinate code reviews, read issues and announcements, reformulate the Gantt chart, and instruct the product manager.</li>
+      </ol>
+
+      <h1>Promotion mechanics</h1>
+      <p>
+        Building and promotion are separate activities. The developer compiles and places files in <RT-code>developer/scratchpad/made</RT-code>. The developer then runs <RT-code>promote write</RT-code> to transfer those files to <RT-code>consumer/made</RT-code>. 
+      </p>
+      <p>
+        The <RT-code>consumer/made</RT-code> directory is strictly an untracked deployment target. No tools are permitted to rebuild during promotion, and no builds are run directly inside the consumer made directory.
+      </p>
+
+    </RT-article>
+  </body>
+</html>
diff --git a/document/Product-maintenance_roles-and-workflow.html b/document/Product-maintenance_roles-and-workflow.html
new file mode 100644 (file)
index 0000000..6063077
--- /dev/null
@@ -0,0 +1,100 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8">
+    <title>Product maintenance roles and workflow</title>
+    <script src="setup.js"></script>
+    <script>
+      window.StyleRT.include('RT/theme');
+      window.StyleRT.include('RT/layout/article_tech_ref');
+    </script>
+  </head>
+  <body>
+    <RT-article>
+      <RT-title 
+        author="Thomas Walker Lynch" 
+        date="2026-03-10" 
+        title="Product maintenance roles and workflow">
+      </RT-title>
+
+      <RT-TOC level="1"></RT-TOC>
+
+      <h1>Maintenance philosophy</h1>
+      <p>
+        Deployed software must be a usable quality product for the customer, beyond that we favor addressing issues in new releases, and encourage customers who are having issues to upgrade. This approach is purely one of keeping the maintenance problem tractable.
+      </p>
+
+      <h1>Maintenance structure</h1>
+      <p>
+        Teams mentioned in this document:
+      </p>
+      <ol>
+        <li>tester team</li>
+        <li>core developer team</li>
+        <li>branch maintenance team</li>
+        <li>triage team</li>
+      </ol>
+
+      <p>
+        Team membership is a role a person takes on. Multiple people can share a single role, and one person might take on multiple roles.
+      </p>
+
+      <p>
+        The tester team develops and maintains the <RT-term>regression suite</RT-term>, the <RT-term>reliability suite</RT-term>, and <RT-term>additional tests</RT-term>.
+      </p>
+
+      <p>
+        The core developer team writes the source code and compiles promotion candidates.
+      </p>
+
+      <p>
+        The branch maintenance team is typically a subset of the core developer team. This group is dedicated to applying approved fixes to specific release branches.
+      </p>
+
+      <p>
+        The triage team evaluates defects reported against active releases. The team usually includes a developer contact, the project manager, and the product manager.
+      </p>
+
+      <h1>Issue queues</h1>
+      <p>
+        The project maintains two primary issue queues:
+      </p>
+      <ol>
+        <li>released product</li>
+        <li>core developer</li>
+      </ol>
+
+      <p>
+        There can be additional queues for multiple branches of development, and for experiments.
+      </p>
+
+      <h2>Core developer queue</h2>
+      <p>
+        This queue serves the <RT-code>core_developer_branch</RT-code>. A <RT-term>tester</RT-term> writes a test for every issue reported in this queue. Doing so isolates the defect, proves the fix, and guards against future regressions.
+      </p>
+
+      <h2>Released product queue</h2>
+      <p>
+        All issues found in release branches go onto this queue initially. It tracks defects reported against deployed software across any major version. 
+      </p>
+
+      <h1>Triage and patching</h1>
+      <p>
+        Guided by the project philosophy, the triage team reviews each release queue issue to determine its impact. The team assesses whether the defect affects the <RT-code>core_developer_branch</RT-code>, assuming by default that it probably does. The team also determines if the defect is critical enough to warrant a patch on one or more active release branches.
+      </p>
+      <p>
+        Based on this assessment, the triage team files actionable tickets in the core developer queue. A ticket explicitly specifies its target branches. A ticket will be filed against either the core developer branch, specific release branches, or a combination of both.
+      </p>
+      <p>
+        Members of the tester team also file tickets directly into the core developer queue when they discover defects in the core branch.
+      </p>
+      <p>
+        Responsibility for resolving a ticket depends on its target. The core developer team addresses fixes required on the <RT-code>core_developer_branch</RT-code>. The branch maintenance team addresses fixes required on the <RT-code>release_v&lt;major&gt;</RT-code> branches.
+      </p>
+      <p>
+        When a release is patched, the branch name remains static. The administrator advances the minor release number in the <RT-code>shared/tool/version</RT-code> file and tags the commit.
+      </p>
+
+    </RT-article>
+  </body>
+</html>
diff --git a/document/Product_Development_Roles_and_Workflow.html b/document/Product_Development_Roles_and_Workflow.html
deleted file mode 100644 (file)
index 149624b..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="UTF-8">
-    <title>Product development roles and workflow</title>
-    <script src="setup.js"></script>
-    <script>
-      window.StyleRT.include('RT/theme');
-      window.StyleRT.include('RT/layout/article_tech_ref');
-    </script>
-  </head>
-  <body>
-    <RT-article>
-      <RT-title 
-        author="Thomas Walker Lynch" 
-        date="2026-03-09" 
-        title="Product development roles and workflow">
-      </RT-title>
-
-      <RT-TOC level="1"></RT-TOC>
-
-      <h1>Roles as hats</h1>
-      <p>
-        In Harmony, a role is a hat a person wears. There can be multiple people sharing a single role, and a single person can wear many hats. Some roles interact directly with the project directory structure, while others guide the process from outside the codebase. 
-      </p>
-
-      <h2>Workspace roles</h2>
-      <p>
-        These roles interact directly with the repository. To enter a workspace, change directory to the top-level of the project and source the setup file for the desired role:
-      </p>
-      <RT-code>
-        > . setup administrator
-        > . setup developer
-        > . setup tester
-        > . setup consumer
-      </RT-code>
-      <p>
-        It is common for a person to have multiple terminal sessions or IDEs open, each running under a different role environment.
-      </p>
-
-      <h3>Administrator role</h3>
-      <p>Responsibilities:</p>
-      <ol>
-        <li>Set up the project directory and keep it in sync with the Harmony skeleton.</li>
-        <li>Maintain role environments (apart from role-specific <RT-code>tool/setup</RT-code> files).</li>
-        <li>Install and maintain shared and third_party tools, addressing issues with the project workflow. Note that the term "third_party" encompasses any software not authored within this specific project.</li>
-      </ol>
-
-      <h3>Developer role</h3>
-      <p>Responsibilities and Boundaries:</p>
-      <ol>
-        <li>Write and modify <RT-code>authored/</RT-code> source.</li>
-        <li>Run builds and place artifacts in <RT-code>scratchpad/made</RT-code>, then execute the <RT-code>promote write</RT-code> script to copy artifacts to <RT-code>consumer/made</RT-code> for testing.</li>
-        <li>Run experiments in <RT-code>experiment/</RT-code>. These experiments can sometimes be promoted to formal tests, but there is no requirement to do so. The developer role should not blur into the tester role; experiments are informal, whereas tests are formal and retained.</li>
-        <li><strong>Strict Boundary:</strong> A developer never writes into the <RT-code>tester/</RT-code> directory. Instead, a developer adds tests to <RT-code>developer/experiment/</RT-code> and offers to share them.</li>
-      </ol>
-
-      <h3>Tester role</h3>
-      <p>Responsibilities and Boundaries:</p>
-      <ol>
-        <li>Evaluate candidates under <RT-code>consumer/made/</RT-code> and run regression suites to confirm:
-          <ul>
-            <li>That the code does not crash.</li>
-            <li>That consumers do not have a bad experience.</li>
-            <li>That the goals specified by the product manager are met.</li>
-          </ul>
-        </li>
-        <li>File issues and communicate feedback to the developers.</li>
-        <li><strong>Strict Boundary:</strong> A tester never patches code in the <RT-code>developer/</RT-code> directory. Instead, the tester files issues or proposes code fixes on a separate branch.</li>
-      </ol>
-
-      <h3>Consumer role</h3>
-      <p>Responsibilities:</p>
-      <ol>
-        <li>Act as the end-user simulation environment.</li>
-        <li>Consume and deploy artifacts exclusively from the <RT-code>consumer/made/</RT-code> target.</li>
-        <li>Never author or modify code; strictly run local builds or deployments for architecture-specific testing.</li>
-        <li>Report issues. (Anyone can report an issue, and consumers regularly do).</li>
-      </ol>
-
-      <h2>External roles</h2>
-      <p>
-        These roles drive the project forward but do not have a dedicated <RT-code>setup &lt;role&gt;</RT-code> workspace, as they do not directly build or test the code in that capacity. If these individuals need to interface with the code, they simply put on a workspace role hat, such as administer, developer, tester, or consumer.
-      </p>
-
-      <h3>Product manager</h3>
-      <p>
-        The product manager receives specifications from the architect and sets the specific goals for a release. When the project manager provides updates indicating readiness, the product manager makes the final decision to cut a project release.
-      </p>
-
-      <h3>Project manager</h3>
-      <p>
-        The project manager owns the schedule (such as the Gantt chart) and monitors progress. They coordinate code reviews, read issues and announcements, reformulate the schedule, and instruct the product manager. When parts of the codebase are outsourced, the project manager serves as the primary point of contact with the external teams.
-      </p>
-
-      <h3>Architect</h3>
-      <p>
-        The architect writes the original specification, sets the technical direction, and performs code reviews. The architect might be a contractor or an in-house team member.
-      </p>
-
-      <h1>The four interacting loops</h1>
-      <p>
-        The project moves forward through the continuous interaction of four distinct operational cycles.
-      </p>
-      
-      <ol>
-        <li><strong>Developer Loop:</strong> Write code, compile to the scratchpad made directory, promote to the consumer made directory, announce the promotion to the tester, read issues, and repeat.</li>
-        <li><strong>Tester Loop:</strong> Read developer announcements, read the consumer made directory, run tests, and file issues.</li>
-        <li><strong>Product Manager Loop:</strong> Provide specifications to the developer, receive progress updates from the project manager, and instruct the project administrator to make new git branch project releases and deploy.</li>
-        <li><strong>Project Manager Loop:</strong> Own the Gantt chart, coordinate code reviews, read issues and announcements, reformulate the Gantt chart, and instruct the product manager.</li>
-      </ol>
-
-      <h1>Promotion mechanics</h1>
-      <p>
-        Building and promotion are separate activities. The developer compiles and places files in <RT-code>developer/scratchpad/made</RT-code>. The developer then runs <RT-code>promote write</RT-code> to transfer those files to <RT-code>consumer/made</RT-code>. 
-      </p>
-      <p>
-        The <RT-code>consumer/made</RT-code> directory is strictly an untracked deployment target. No tools are permitted to rebuild during promotion, and no builds are run directly inside the consumer made directory.
-      </p>
-
-    </RT-article>
-  </body>
-</html>
diff --git a/document/temp.html b/document/temp.html
new file mode 100644 (file)
index 0000000..ac7bd7a
--- /dev/null
@@ -0,0 +1,91 @@
+
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8">
+    <title>Product maintenance roles and workflow</title>
+    <script src="setup.js"></script>
+    <script>
+      window.StyleRT.include('RT/theme');
+      window.StyleRT.include('RT/layout/article_tech_ref');
+    </script>
+  </head>
+  <body>
+    <RT-article>
+      <RT-title 
+        author="Thomas Walker Lynch" 
+        date="2026-03-10" 
+        title="Product maintenance roles and workflow">
+      </RT-title>
+
+      <RT-TOC level="1"></RT-TOC>
+
+      <h1>Maintenance structure</h1>
+      <p>
+        Teams mentioned in this document:
+      </p>
+      <ol>
+        <li>tester team</li>
+        <li>core developer team</li>
+        <li>triage team</li>
+      </ol>
+
+      <p>
+        Team membership is a role a person takes on. Multiple people share a role. A single person takes on multiple roles.
+      </p>
+
+      <p>
+        The tester team develops and maintains the <RT-term>regression suite</RT-term>, the <RT-term>reliability suite</RT-term>, and <RT-term>additional tests</RT-term>.
+      </p>
+
+      <p>
+        The developer team writes the source code, compiles promotion candidates, and ports patches between branches.
+      </p>
+
+      <p>
+        The triage team evaluates defects reported against active releases. The team includes a developer contact, the project manager, and the product manager.
+      </p>
+
+      <h1>Issue queues</h1>
+      <p>
+        The project maintains two distinct issue queues:
+      </p>
+      <ol>
+        <li>released product</li>
+        <li>core development</li>
+      </ol>
+
+      <p>
+        There can be additional queues for multiple branches of development, and for experiments.
+      </p>
+
+      <h2>Core development queue</h2>
+      <p>
+        This queue serves the <RT-code>core_developer_branch</RT-code>. The <RT-term>tester</RT-term> writes a test for every issue reported in this queue. This isolates the defect, proves the fix, and guards against future regressions.
+      </p>
+
+      <h2>Released product queue</h2>
+      <p>
+        This queue tracks defects reported against deployed software across any major version.
+      </p>
+      <p>
+        Deployed software must be a usable quality product for the customer, beyond that we favor addressing issues in new releases, and encourage customers who are having issues to upgrade. This approach is purely one of keeping the maintenance problem under control. Other business units should address the commercial implications.
+      </p>
+      <p>
+        Thus the triage team reviews each release issue. All issues that affect the core_developer branch are placed on the core development queue. Critical issues are also placed on the released product queue. The core development team is responsible for the core development queue issues, while the triage component of the development team is responsible for the released product queue issues.
+      </p>
+
+      <h1>Patching and backporting</h1>
+      <p>
+        The product manager defines what constitutes a critical issue. Only critical issues receive patches on a release branch. 
+      </p>
+      <p>
+        If approved, the release team applies the fix directly to the existing <RT-code>release_v&lt;major&gt;</RT-code> branch. The branch name remains static. The administrator advances the minor release number and tags the commit.
+      </p>
+      <p>
+        The developer then ports the fix to the <RT-code>core_developer_branch</RT-code>. This step is mandatory. It prevents the defect from resurrecting in future major releases.
+      </p>
+
+    </RT-article>
+  </body>
+</html>