--- /dev/null
+// RT-style.js
+window.RT = window.RT || {};
+
+// Configuration
+window.RT.project_name = "RT-style";
+window.RT.server_url = "http://localhost:8000/shared/linked-project/RT-style/consumer/made";
+
+(function() {
+ let style_path = window.RT.server_url;
+
+ if (window.RT.project_name) {
+ const path = window.location.pathname;
+ const project_root_index = path.indexOf('/' + window.RT.project_name + '/');
+
+ if (project_root_index !== -1) {
+ const absolute_project_root = path.substring(0, project_root_index + window.RT.project_name.length + 1);
+ style_path = absolute_project_root + "/shared/linked-project/RT-style/consumer/made";
+ } else {
+ console.warn("RT-style: Cannot locate project root '/" + window.RT.project_name + "/'. Falling back to server URL.");
+ }
+ }
+
+ window.RT.dirpr_library = style_path;
+
+ // 1. Inject the loader script
+ document.write('<script src="' + window.RT.dirpr_library + '/Core/loader.js"><\/script>');
+
+ // 2. Inject a secondary script block for the core dependencies.
+ // This guarantees the browser waits for loader.js to finish parsing before executing.
+ document.write(
+ '<script>' +
+ 'window.RT.load("Core/utility");' +
+ 'window.RT.load("Core/block_visibility_during_layout");' +
+ 'window.RT.load("Theme");' +
+ 'window.RT.load("Element/theme_selector");' +
+ '<\/script>'
+ );
+})();
--- /dev/null
+// RT-style.js (External consumer project router)
+window.RT = window.RT || {};
+
+// --- Configuration ---
+// Define the consumer project name to allow dynamic local file:// calculation.
+window.RT.project_name = "Harmony";
+
+// Fallback URL when served over a network where the project root is not in the URI.
+window.RT.server_url = "http://localhost:8000/shared/linked-project/RT-style/consumer/made/Manuscript";
+
+(function() {
+ let style_path = window.RT.server_url;
+
+ if (window.RT.project_name) {
+ const path = window.location.pathname;
+ const project_root_index = path.indexOf('/' + window.RT.project_name + '/');
+
+ if (project_root_index !== -1) {
+ // substring(0, stop) extracts up to the project name, leaving off the trailing slash.
+ // We append the explicit forward slash before navigating into the shared boundary.
+ const absolute_project_root = path.substring(0, project_root_index + window.RT.project_name.length + 1);
+ style_path = absolute_project_root + "/shared/linked-project/RT-style/consumer/made/Manuscript";
+ } else {
+ console.warn("RT-style: Cannot locate project root '/" + window.RT.project_name + "/' in URI. Falling back to server_url.");
+ }
+ }
+
+ window.RT.dirpr_library = style_path;
+
+ // 1. Inject the loader script
+ document.write('<script src="' + window.RT.dirpr_library + '/Core/loader.js"><\/script>');
+
+ // 2. Inject the secondary script block for core dependencies
+ document.write(
+ '<script>' +
+ 'window.RT.load("Core/utility");' +
+ 'window.RT.load("Core/block_visibility_during_layout");' +
+ 'window.RT.load("Theme");' +
+ 'window.RT.load("Element/theme_selector");' +
+ '<\/script>'
+ );
+})();
<head>
<meta charset="UTF-8">
<title>Release howto</title>
+ <script src="RT-style.js"></script>
<script>
- window.RT = window.RT || {};
- window.RT.dirpr_library = "RT-style";
- document.write('<script src="' + window.RT.dirpr_library + '/core/loader.js"></' + 'script>');
- </script>
- <script>
- window.RT.load('core/utility');
- window.RT.load('core/block_visibility_during_layout');
- window.RT.load('theme');
- window.RT.load('layout/article_tech_ref');
+ window.RT.load('Layout/article_tech_ref');
</script>
</head>
<body>
--- /dev/null
+#+TITLE: Installing Python in Harmony
+#+AUTHOR: Thomas Walker Lynch
+#+OPTIONS: toc:2 num:nil
+
+* Overview
+
+This document describes how to install a project-local Python environment under:
+
+#+begin_src bash
+shared/linked-project/Python
+#+end_src
+
+* Precondition
+
+Ensure the following:
+
+- You are in a POSIX shell with =python3= installed.
+- The =python3-venv= package is available (on Debian: =sudo apt install python3-venv=).
+- You have sourced the Harmony environment via =env_toolsmith= to initialize =REPO_HOME= and related variables.
+
+* Step-by-Step Installation
+
+1. Source the Harmony environment:
+ #+begin_src bash
+ source env_toolsmith
+ #+end_src
+
+2. Create the virtual environment:
+ #+begin_src bash
+ python3 -m venv "$REPO_HOME/shared/linked-project/Python"
+ #+end_src
+
+3. Activate it temporarily to install required packages:
+ #+begin_src bash
+ source "$REPO_HOME/shared/linked-project/Python/bin/activate"
+ pip install --upgrade pip
+ pip install pytest # Add any shared packages here
+ deactivate
+ #+end_src
+
+4. Rename Python's default activate and deactivate:
+ Harmony provides its own role-aware environment management. Using Python’s default activation scripts may interfere with prompt logic, PATH order, and role-specific behavior.
+
+ Disable the default scripts by renaming them:
+ #+begin_src bash
+ mv "$REPO_HOME/shared/linked-project/Python/bin/activate" \
+ "$REPO_HOME/shared/linked-project/Python/bin/activate_deprecated"
+ #+end_src
+
+ This ensures that accidental sourcing of Python’s =activate= script won't override Harmony's environment setup.
+
+5. Verify installation:
+ #+begin_src bash
+ ls "$REPO_HOME/shared/linked-project/Python/bin/python3"
+ #+end_src
+
+ The binary should exist and report a working Python interpreter when run.
+
+* Notes
+
+- The virtual environment is deliberately named =Python=, not =venv=, to reflect its role as a shared system component.
+- Harmony environment scripts define and control =VIRTUAL_ENV=, =PYTHON_HOME=, and =PATH=, making Python activation seamless and uniform.
+- There is no need to use Python’s =bin/activate= directly — it is fully replaced by Harmony’s environment logic.
+
+* Related Files
+
+- =shared/authored/env=
+- =shared/authored/env_source=
+- =env_developer=, =env_tester=, =env_toolsmith=
+
+* Last Verified
+
+2025-05-19 :: Activate/deactivate renamed post-install. Requires Harmony environment sourcing prior to execution.
--- /dev/null
+
+This is the generic install.org doc that comes with the skeleton.
+
+1. $REPO_HOME/shared/linked-project/.gitignore:
+
+ *
+ !/.gitignore
+ !/patch
+
+ The only things from the third party directory that will be pushed to the repo origin is the .gitignore file and the patches.
+
+
+2. downloaded tar files etc. go into the directory `upstream`
+
+ $REPO_HOME/shared/upstream
+
+ Typically the contents of upstream are deleted after the install.
+
+3. for the base install
+
+ cd $REPO_HOME/shared/linked-project
+ do whatever it takes to install tool, as examples:
+ git clone <tool_path>
+ tar -xzf ../upstream/tar
+ ...
+
+ Be sure to add the path to the tool executable(s) in the $REPO_HOME/env_$ROLE files for the $ROLE who uses the tool.
+
+ Assuming you are not also developing the tool, for safety
+ change each installed git project to a local branch:
+
+ b=<site>_<project>_local_$USER
+ git switch -c "$b"
+
+
+4. Define some variables to simplify our discussion. Lowercase variable names
+ are not exported from the shell.
+
+ # already set in the environment
+ # REPO_HOME
+ # PROJECT
+ # USER
+
+ # example tool names: 'RT_gcc' 'RT-project share` etc.
+ tool=<tool-name>
+ tool_dpath="$REPO_HOME/shared/linked-project/$tool"
+ patch_dpath="$REPO_HOME/shared/patch/"
+
+
+5. create a patch series (from current vendor state → your local edits)
+
+ # this can be repeated and will create an encompassing diff file
+
+ # optionally crate a new branch after cloning the third party tool repo and work from there. You won't make any commits, but in case you plan to ever check the changes in, or have a the bad habit of doing ommits burned into your brain-stem, making a brnch will help.
+
+ # make changes
+
+ cd "$tool_dpath"
+
+ # do your edits
+
+ # Stage edits. Do not commit them!! Be sure you are in the third party
+ # tool directory when doing `git add -A` and `git diff` commands.
+ git add -A
+
+ # diff the stage from the current repo to create the patch file
+ git diff --staged > "$patch_dpath/$tool"
+
+ # the diff file can be added to the project and checked in at the project level.
+
+
+6. how to apply an existing patch
+
+ Get a fresh clone of the tool into $tool_dpath.
+
+ cd "$tool_dpath"
+ git apply "$patch_dpath/$tool"
+
+ You can see what `git apply` would do by running
+
+ git apply --check /path/to/your/patch_dpath/$tool
--- /dev/null
+// RT-style.js (External consumer project router)
+window.RT = window.RT || {};
+
+// --- Configuration ---
+// Define the consumer project name to allow dynamic local file:// calculation.
+window.RT.project_name = "Harmony";
+
+// Fallback URL when served over a network where the project root is not in the URI.
+window.RT.server_url = "http://localhost:8000/shared/linked-project/RT-style/consumer/made/Manuscript";
+
+(function() {
+ let style_path = window.RT.server_url;
+
+ if (window.RT.project_name) {
+ const path = window.location.pathname;
+ const project_root_index = path.indexOf('/' + window.RT.project_name + '/');
+
+ if (project_root_index !== -1) {
+ // substring(0, stop) extracts up to the project name, leaving off the trailing slash.
+ // We append the explicit forward slash before navigating into the shared boundary.
+ const absolute_project_root = path.substring(0, project_root_index + window.RT.project_name.length + 1);
+ style_path = absolute_project_root + "/shared/linked-project/RT-style/consumer/made/Manuscript";
+ } else {
+ console.warn("RT-style: Cannot locate project root '/" + window.RT.project_name + "/' in URI. Falling back to server_url.");
+ }
+ }
+
+ window.RT.dirpr_library = style_path;
+
+ // 1. Inject the loader script
+ document.write('<script src="' + window.RT.dirpr_library + '/Core/loader.js"><\/script>');
+
+ // 2. Inject the secondary script block for core dependencies
+ document.write(
+ '<script>' +
+ 'window.RT.load("Core/utility");' +
+ 'window.RT.load("Core/block_visibility_during_layout");' +
+ 'window.RT.load("Theme");' +
+ 'window.RT.load("Element/theme_selector");' +
+ '<\/script>'
+ );
+})();
<head>
<meta charset="UTF-8">
<title>File and directory naming conventions</title>
+ <script src="RT-style.js"></script>
<script>
- window.RT = window.RT || {};
- window.RT.dirpr_library = "RT-style";
- document.write('<script src="' + window.RT.dirpr_library + '/core/loader.js"></' + 'script>');
- </script>
- <script>
- window.RT.load('core/utility');
- window.RT.load('core/block_visibility_during_layout');
- window.RT.load('theme');
- window.RT.load('layout/article_tech_ref');
+ window.RT.load('Layout/article_tech_ref');
</script>
</head>
<body>
<head>
<meta charset="UTF-8">
<title>C modules, namespaces, and the build lifecycle</title>
+ <script src="RT-style.js"></script>
<script>
- window.RT = window.RT || {};
- window.RT.dirpr_library = "RT-style";
- document.write('<script src="' + window.RT.dirpr_library + '/core/loader.js"></' + 'script>');
- </script>
- <script>
- window.RT.load('core/utility');
- window.RT.load('core/block_visibility_during_layout');
- window.RT.load('theme');
- window.RT.load('layout/article_tech_ref');
+ window.RT.load('Layout/article_tech_ref');
</script>
</head>
<body>
--- /dev/null
+// RT-style.js (External consumer project router)
+window.RT = window.RT || {};
+
+// --- Configuration ---
+// Define the consumer project name to allow dynamic local file:// calculation.
+window.RT.project_name = "Harmony";
+
+// Fallback URL when served over a network where the project root is not in the URI.
+window.RT.server_url = "http://localhost:8000/shared/linked-project/RT-style/consumer/made/Manuscript";
+
+(function() {
+ let style_path = window.RT.server_url;
+
+ if (window.RT.project_name) {
+ const path = window.location.pathname;
+ const project_root_index = path.indexOf('/' + window.RT.project_name + '/');
+
+ if (project_root_index !== -1) {
+ // substring(0, stop) extracts up to the project name, leaving off the trailing slash.
+ // We append the explicit forward slash before navigating into the shared boundary.
+ const absolute_project_root = path.substring(0, project_root_index + window.RT.project_name.length + 1);
+ style_path = absolute_project_root + "/shared/linked-project/RT-style/consumer/made/Manuscript";
+ } else {
+ console.warn("RT-style: Cannot locate project root '/" + window.RT.project_name + "/' in URI. Falling back to server_url.");
+ }
+ }
+
+ window.RT.dirpr_library = style_path;
+
+ // 1. Inject the loader script
+ document.write('<script src="' + window.RT.dirpr_library + '/Core/loader.js"><\/script>');
+
+ // 2. Inject the secondary script block for core dependencies
+ document.write(
+ '<script>' +
+ 'window.RT.load("Core/utility");' +
+ 'window.RT.load("Core/block_visibility_during_layout");' +
+ 'window.RT.load("Theme");' +
+ 'window.RT.load("Element/theme_selector");' +
+ '<\/script>'
+ );
+})();
<head>
<meta charset="UTF-8">
<title>Introduction to Harmony</title>
+ <script src="RT-style.js"></script>
<script>
- window.RT = window.RT || {};
- window.RT.dirpr_library = "RT-style";
- document.write('<script src="' + window.RT.dirpr_library + '/core/loader.js"></' + 'script>');
- </script>
- <script>
- window.RT.load('core/utility');
- window.RT.load('core/block_visibility_during_layout');
- window.RT.load('theme');
- window.RT.load('layout/article_tech_ref');
+ window.RT.load('Layout/article_tech_ref');
</script>
</head>
<body>
<head>
<meta charset="UTF-8">
<title>Product development roles and workflow</title>
+ <script src="RT-style.js"></script>
<script>
- window.RT = window.RT || {};
- window.RT.dirpr_library = "RT-style";
- document.write('<script src="' + window.RT.dirpr_library + '/core/loader.js"></' + 'script>');
- </script>
- <script>
- window.RT.load('core/utility');
- window.RT.load('core/block_visibility_during_layout');
- window.RT.load('theme');
- window.RT.load('layout/article_tech_ref');
+ window.RT.load('Layout/article_tech_ref');
</script>
</head>
<body>
<head>
<meta charset="UTF-8">
<title>Product maintenance roles and workflow</title>
+ <script src="RT-style.js"></script>
<script>
- window.RT = window.RT || {};
- window.RT.dirpr_library = "RT-style";
- document.write('<script src="' + window.RT.dirpr_library + '/core/loader.js"></' + 'script>');
- </script>
- <script>
- window.RT.load('core/utility');
- window.RT.load('core/block_visibility_during_layout');
- window.RT.load('theme');
- window.RT.load('layout/article_tech_ref');
+ window.RT.load('Layout/article_tech_ref');
</script>
</head>
<body>
--- /dev/null
+// RT-style.js (External consumer project router)
+window.RT = window.RT || {};
+
+// --- Configuration ---
+// Define the consumer project name to allow dynamic local file:// calculation.
+window.RT.project_name = "Harmony";
+
+// Fallback URL when served over a network where the project root is not in the URI.
+window.RT.server_url = "http://localhost:8000/shared/linked-project/RT-style/consumer/made/Manuscript";
+
+(function() {
+ let style_path = window.RT.server_url;
+
+ if (window.RT.project_name) {
+ const path = window.location.pathname;
+ const project_root_index = path.indexOf('/' + window.RT.project_name + '/');
+
+ if (project_root_index !== -1) {
+ // substring(0, stop) extracts up to the project name, leaving off the trailing slash.
+ // We append the explicit forward slash before navigating into the shared boundary.
+ const absolute_project_root = path.substring(0, project_root_index + window.RT.project_name.length + 1);
+ style_path = absolute_project_root + "/shared/linked-project/RT-style/consumer/made/Manuscript";
+ } else {
+ console.warn("RT-style: Cannot locate project root '/" + window.RT.project_name + "/' in URI. Falling back to server_url.");
+ }
+ }
+
+ window.RT.dirpr_library = style_path;
+
+ // 1. Inject the loader script
+ document.write('<script src="' + window.RT.dirpr_library + '/Core/loader.js"><\/script>');
+
+ // 2. Inject the secondary script block for core dependencies
+ document.write(
+ '<script>' +
+ 'window.RT.load("Core/utility");' +
+ 'window.RT.load("Core/block_visibility_during_layout");' +
+ 'window.RT.load("Theme");' +
+ 'window.RT.load("Element/theme_selector");' +
+ '<\/script>'
+ );
+})();
+++ /dev/null
-#+TITLE: Installing Python in Harmony
-#+AUTHOR: Thomas Walker Lynch
-#+OPTIONS: toc:2 num:nil
-
-* Overview
-
-This document describes how to install a project-local Python environment under:
-
-#+begin_src bash
-shared/linked-project/Python
-#+end_src
-
-* Precondition
-
-Ensure the following:
-
-- You are in a POSIX shell with =python3= installed.
-- The =python3-venv= package is available (on Debian: =sudo apt install python3-venv=).
-- You have sourced the Harmony environment via =env_toolsmith= to initialize =REPO_HOME= and related variables.
-
-* Step-by-Step Installation
-
-1. Source the Harmony environment:
- #+begin_src bash
- source env_toolsmith
- #+end_src
-
-2. Create the virtual environment:
- #+begin_src bash
- python3 -m venv "$REPO_HOME/shared/linked-project/Python"
- #+end_src
-
-3. Activate it temporarily to install required packages:
- #+begin_src bash
- source "$REPO_HOME/shared/linked-project/Python/bin/activate"
- pip install --upgrade pip
- pip install pytest # Add any shared packages here
- deactivate
- #+end_src
-
-4. Rename Python's default activate and deactivate:
- Harmony provides its own role-aware environment management. Using Python’s default activation scripts may interfere with prompt logic, PATH order, and role-specific behavior.
-
- Disable the default scripts by renaming them:
- #+begin_src bash
- mv "$REPO_HOME/shared/linked-project/Python/bin/activate" \
- "$REPO_HOME/shared/linked-project/Python/bin/activate_deprecated"
- #+end_src
-
- This ensures that accidental sourcing of Python’s =activate= script won't override Harmony's environment setup.
-
-5. Verify installation:
- #+begin_src bash
- ls "$REPO_HOME/shared/linked-project/Python/bin/python3"
- #+end_src
-
- The binary should exist and report a working Python interpreter when run.
-
-* Notes
-
-- The virtual environment is deliberately named =Python=, not =venv=, to reflect its role as a shared system component.
-- Harmony environment scripts define and control =VIRTUAL_ENV=, =PYTHON_HOME=, and =PATH=, making Python activation seamless and uniform.
-- There is no need to use Python’s =bin/activate= directly — it is fully replaced by Harmony’s environment logic.
-
-* Related Files
-
-- =shared/authored/env=
-- =shared/authored/env_source=
-- =env_developer=, =env_tester=, =env_toolsmith=
-
-* Last Verified
-
-2025-05-19 :: Activate/deactivate renamed post-install. Requires Harmony environment sourcing prior to execution.
+++ /dev/null
-
-This is the generic install.org doc that comes with the skeleton.
-
-1. $REPO_HOME/shared/linked-project/.gitignore:
-
- *
- !/.gitignore
- !/patch
-
- The only things from the third party directory that will be pushed to the repo origin is the .gitignore file and the patches.
-
-
-2. downloaded tar files etc. go into the directory `upstream`
-
- $REPO_HOME/shared/upstream
-
- Typically the contents of upstream are deleted after the install.
-
-3. for the base install
-
- cd $REPO_HOME/shared/linked-project
- do whatever it takes to install tool, as examples:
- git clone <tool_path>
- tar -xzf ../upstream/tar
- ...
-
- Be sure to add the path to the tool executable(s) in the $REPO_HOME/env_$ROLE files for the $ROLE who uses the tool.
-
- Assuming you are not also developing the tool, for safety
- change each installed git project to a local branch:
-
- b=<site>_<project>_local_$USER
- git switch -c "$b"
-
-
-4. Define some variables to simplify our discussion. Lowercase variable names
- are not exported from the shell.
-
- # already set in the environment
- # REPO_HOME
- # PROJECT
- # USER
-
- # example tool names: 'RT_gcc' 'RT-project share` etc.
- tool=<tool-name>
- tool_dpath="$REPO_HOME/shared/linked-project/$tool"
- patch_dpath="$REPO_HOME/shared/patch/"
-
-
-5. create a patch series (from current vendor state → your local edits)
-
- # this can be repeated and will create an encompassing diff file
-
- # optionally crate a new branch after cloning the third party tool repo and work from there. You won't make any commits, but in case you plan to ever check the changes in, or have a the bad habit of doing ommits burned into your brain-stem, making a brnch will help.
-
- # make changes
-
- cd "$tool_dpath"
-
- # do your edits
-
- # Stage edits. Do not commit them!! Be sure you are in the third party
- # tool directory when doing `git add -A` and `git diff` commands.
- git add -A
-
- # diff the stage from the current repo to create the patch file
- git diff --staged > "$patch_dpath/$tool"
-
- # the diff file can be added to the project and checked in at the project level.
-
-
-6. how to apply an existing patch
-
- Get a fresh clone of the tool into $tool_dpath.
-
- cd "$tool_dpath"
- git apply "$patch_dpath/$tool"
-
- You can see what `git apply` would do by running
-
- git apply --check /path/to/your/patch_dpath/$tool
+++ /dev/null
-#!/usr/bin/env python3
-import os
-import sys
-import shutil
-from pathlib import Path
-
-def run():
- repo_home_env = os.environ.get('REPO_HOME')
- if not repo_home_env:
- print("Error: REPO_HOME environment variable is missing.", file=sys.stderr)
- sys.exit(1)
-
- repo_home = Path(repo_home_env)
-
- # Define the canonical target location
- target_src = repo_home / 'shared' / 'linked-project' / 'RT-style-JS_public' / 'consumer' / 'release' / 'RT'
-
- # Determine the destination directory
- if len(sys.argv) > 1:
- dest_dir = Path(sys.argv[1]).resolve()
- else:
- dest_dir = Path.cwd()
-
- if not dest_dir.is_dir():
- print(f"Error: Directory '{dest_dir}' does not exist.", file=sys.stderr)
- sys.exit(1)
-
- link_dest = dest_dir / 'RT'
-
- # Clobber existing file, link, or directory named 'RT'
- if link_dest.is_symlink() or link_dest.is_file():
- link_dest.unlink()
- elif link_dest.is_dir():
- shutil.rmtree(link_dest)
-
- # Establish the new symbolic link
- try:
- link_dest.symlink_to(target_src)
- print(f"Established link: {link_dest} -> {target_src}")
- except OSError as e:
- print(f"Failed to establish link: {e}", file=sys.stderr)
- sys.exit(1)
-
-if __name__ == '__main__':
- run()
\ No newline at end of file