Canon · interpretation · research · implementation · frontier
A way through complexity without pretending the tension is gone.
-
The Interdependent Way is a dense living text and a constellation of attempts to test, explain, implement, challenge, and preserve it. This site starts with orientation. Exact source remains available when intentionally sought.
-
+
The Interdependent Way is a dense living text and a constellation of attempts to test, explain, implement, challenge, and preserve it. The Preamble is directly available here; deeper orientation and exact source remain available without hiding the entrance.
+
+
Canon-derivedRead the Preamble
Enter the opening civic claim directly through a stable route generated from the selected canon.
Canon-derivedRead the Way
Move through the preamble, articles, etiquette, addenda, and their internal structure without beginning at the raw wall of text.
InterpretationEnter the Article Lab
Read the main text and its notes as two speakers. Supporting, dissenting, mixed, and missing research remain visibly separate.
PublicationRead public articles
Follow selected canon units through companion readings, applications, handbook seeds, and script drafts without losing source boundaries.
diff --git a/src/preamble/index.njk b/src/preamble/index.njk
new file mode 100644
index 0000000..0fcc239
--- /dev/null
+++ b/src/preamble/index.njk
@@ -0,0 +1,33 @@
+---
+layout: layouts/base.njk
+title: Preamble
+description: The canonical Preamble of The Interdependent Way, directly accessible from the public entrance.
+permalink: /preamble/
+---
+{% set preambles = generated.canon.units | where("title", "Preamble") %}
+{% set preamble = preambles[0] %}
+
+
+ One-click canon entrance
+ Preamble
+ exact canon-derived unit
+ The Preamble is a first-order entrance to The Interdependent Way. This stable route is generated from the selected canonical source and does not maintain a separate copy.
+
+{% if preamble %}
+
+ Canonical text
+ {{ preamble.content }}
+
+
+ Source evidence
+
+ - Canonical repository
{{ generated.canon.source.repository }}
+ - Canonical path
{{ generated.canon.source.path }}
+ - Source lines
- {{ preamble.startLine }}–{{ preamble.endLine }}
+ - Unit digest
{{ preamble.hash }}
+
+
+
+{% else %}
+
hmmm
The selected canon did not produce a Preamble unit. The release tests must treat this as a broken public contract.
+{% endif %}
diff --git a/tests/accessibility.spec.mjs b/tests/accessibility.spec.mjs
index 5605a07..4696231 100644
--- a/tests/accessibility.spec.mjs
+++ b/tests/accessibility.spec.mjs
@@ -6,7 +6,7 @@ import { test, expect } from '@playwright/test';
const require = createRequire(import.meta.url);
const axePath = require.resolve('axe-core/axe.min.js');
-for (const route of ['/', '/articles/', '/articles/article-two/', '/way/', '/projects/']) {
+for (const route of ['/', '/preamble/', '/articles/', '/articles/article-two/', '/way/', '/projects/']) {
test(`${route} has no serious or critical automated accessibility violations`, async ({ page }) => {
await page.goto(route);
await page.addScriptTag({ path: axePath });
diff --git a/tests/generated-site.test.mjs b/tests/generated-site.test.mjs
index b119a09..43f9d87 100644
--- a/tests/generated-site.test.mjs
+++ b/tests/generated-site.test.mjs
@@ -6,8 +6,9 @@ import { readFile } from 'node:fs/promises';
// Usage: run only after Eleventy has generated _site, normally through npm run test:generated or npm run check.
test('generated deployment artifact contains the unified routes', async () => {
- const [home, artifacts, fourCuts, fallback, articles] = await Promise.all([
+ const [home, preamble, artifacts, fourCuts, fallback, articles] = await Promise.all([
readFile('_site/index.html', 'utf8'),
+ readFile('_site/preamble/index.html', 'utf8'),
readFile('_site/artifacts/index.html', 'utf8'),
readFile('_site/artifacts/four-cuts/index.html', 'utf8'),
readFile('_site/fallback/index.html', 'utf8'),
@@ -15,6 +16,10 @@ test('generated deployment artifact contains the unified routes', async () => {
]);
assert.match(home, /A way through complexity/);
+ assert.match(home, /href="\/preamble\/"[^>]*>Read the Preamble/);
+ assert.match(preamble, /One-click canon entrance/);
+ assert.match(preamble, /Humanity faces extinction/);
+ assert.match(preamble, /Canonical repository/);
assert.match(artifacts, /Artifacts/);
assert.match(fourCuts, /Wealth and tax/);
assert.match(fallback, /Emergency static edition/);
diff --git a/tests/site.spec.mjs b/tests/site.spec.mjs
index f9fec29..e64684e 100644
--- a/tests/site.spec.mjs
+++ b/tests/site.spec.mjs
@@ -4,6 +4,7 @@ import { test, expect } from '@playwright/test';
const routes = [
['/', /A way through complexity/],
+ ['/preamble/', /Humanity faces extinction/],
['/articles/', /Publication drafts/],
['/articles/article-two/', /Freedom without abandonment/],
['/way/', /The Way/],
@@ -22,6 +23,18 @@ test('primary public routes render meaningful headings', async ({ page }) => {
}
});
+test('Preamble is one click from the public entrance and primary navigation', async ({ page }) => {
+ await page.goto('/');
+ const heroLink = page.locator('main a[href="/preamble/"]', { hasText: 'Read the Preamble' }).first();
+ const navLink = page.locator('nav[aria-label="Primary navigation"] a[href="/preamble/"]');
+ await expect(heroLink).toBeVisible();
+ await expect(navLink).toBeVisible();
+ await heroLink.click();
+ await expect(page).toHaveURL(/\/preamble\/$/);
+ await expect(page.locator('h1')).toHaveText('Preamble');
+ await expect(page.locator('.source-block')).toContainText('Humanity faces extinction');
+});
+
test('all eight rights articles are reachable from the article index', async ({ page }) => {
await page.goto('/articles/');
for (const word of ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight']) {