diff --git a/.github/workflows/gates.yml b/.github/workflows/gates.yml index d6c944a..7a5a969 100644 --- a/.github/workflows/gates.yml +++ b/.github/workflows/gates.yml @@ -54,6 +54,8 @@ jobs: run: node governance/harnesses/run-all.js - name: Home navigation history (one Back step per tool) run: node governance/harnesses/verify-home-navigation-history.js + - name: Return navigation and public document reader + run: node governance/harnesses/verify-return-navigation.js - name: Public pinned snapshot card (offline byte identities) run: node research/atlas-snapshot-read-only/tools/verify-release.mjs - name: STP v1.2 public reproduction packet diff --git a/404.html b/404.html index a07559e..bbe63ac 100644 --- a/404.html +++ b/404.html @@ -1,5 +1,5 @@ - + Delta Atlas - Not found + + + +

That page isn't here

The link may be mistyped, or the page moved. Everything in this project lives behind the home page.

-Go to the start
+Go to the start diff --git a/Agentic-AI-Governance-Chat.html b/Agentic-AI-Governance-Chat.html index 0be4638..6977370 100644 --- a/Agentic-AI-Governance-Chat.html +++ b/Agentic-AI-Governance-Chat.html @@ -1,5 +1,5 @@ - + Delta Atlas - Ask + + + +

Delta Atlas - Ask

A fixed search engine over this page's recorded vocabulary snapshot. Ask "what is X?" and it finds the closest match, shows the stored definition and source assertions, and links related terms you can explore. You can also ask structurally: what defends against X, what can go wrong with X, who is accountable for X. One answer shows at a time. A reviewed label is not a per-term review receipt.

diff --git a/Agentic-AI-Governance-GroundTruth.html b/Agentic-AI-Governance-GroundTruth.html index a419bc9..d2a4a21 100644 --- a/Agentic-AI-Governance-GroundTruth.html +++ b/Agentic-AI-Governance-GroundTruth.html @@ -1,5 +1,5 @@ - + Delta Atlas - Curation dashboard + + + +

Delta Atlas - Curation dashboard

The author curation view, not a ranking of the words. Every term here is a textbook pillar or a newer idea; the point is not to score them but to keep them inspectable. This lists entries with a recorded review label, thin source support, or a placeholder so they can be checked and integrated with the rest. Sorting by source support only changes inspection order. A coloured dot reports a repository label; it does not prove correctness, acceptance, or an independently witnessed review.

diff --git a/Agentic-AI-Governance-Query.html b/Agentic-AI-Governance-Query.html index f7d197d..906e65e 100644 --- a/Agentic-AI-Governance-Query.html +++ b/Agentic-AI-Governance-Query.html @@ -1,5 +1,5 @@ - + Delta Atlas - Explore + + + +

Delta Atlas - Explore

See how the words connect by meaning. Browse every term, or tick boxes on the left (like a risk, hard to undo, no human in charge) to narrow it. Each term shows what it does and which other terms it couples with: what defends what, what needs what, what is a kind of what. Try a Try: example below.

diff --git a/Coherence-Audit.html b/Coherence-Audit.html index 4469616..eb171af 100644 --- a/Coherence-Audit.html +++ b/Coherence-Audit.html @@ -1,5 +1,5 @@ - + Delta Atlas - Framework Audit + + + +

Delta Atlas - Framework Audit

Paste a plan, framework, or project and the goal it serves. Think of the goal as the power, and each part as a wire. A solid part carries the current to a real outcome: it says who does what, you can test it, and something backs it up. A hollow part is a broken connection dressed to look whole - confident words with the current jumping the gap, an arc flash of language and nothing on the far side. This traces the circuit, shows where it breaks, names the weakest joints to fix first, and hands you a simple pattern to make them measurable. It judges structure, not subject, so it works on any topic. Heuristic, deterministic, and entirely on your device. In the atlas grammar: the framework is the claim; its own testable commitments are the witness; hollow parts are the difference.

diff --git a/Delta-Atlas-Basin.html b/Delta-Atlas-Basin.html index 6676623..5d51a83 100644 --- a/Delta-Atlas-Basin.html +++ b/Delta-Atlas-Basin.html @@ -1,5 +1,5 @@ - + Delta Atlas - The Basin + + + +

Delta Atlas - The Basin

A resilient thing is not one that never gets hit. It is one that returns to itself after the hit, and holds a wide enough margin that the hit does not throw it somewhere it cannot come back from. This lesson makes both of those measurable, with a bowl, a ball, and a shock you control. Runs entirely on your device; stores nothing.

@@ -90,7 +93,7 @@

Delta Atlas - The Basin

Sources. C.S. Holling, "Resilience and stability of ecological systems," Annual Review of Ecology and Systematics 4 (1973) · S.L. Pimm, "The complexity and stability of ecosystems," Nature 307 (1984) · M. Scheffer et al., "Early-warning signals for critical transitions," Nature 461 (2009) · A.M. Lyapunov (1892) on stability via a descending function · S. Strogatz, Nonlinear Dynamics and Chaos, on basins, bifurcation, and synchronization.
- The simulation is a damped particle in a potential well, integrated in your browser; it is illustrative of the shapes above, not a model of any specific system. Lesson v0.1 (2026-07-11), part of the Delta Atlas explorable series. CC BY 4.0. Back to the atlas · Previous lesson: the Cadence Dial. + The simulation is a damped particle in a potential well, integrated in your browser; it is illustrative of the shapes above, not a model of any specific system. Lesson v0.1 (2026-07-11), part of the Delta Atlas explorable series. CC BY 4.0. Back to the atlas · Previous lesson: the Cadence Dial.
+ +

Delta Atlas - The Cadence Dial

How often should you check on a thing? Physics measured the answer, and there is a trap in the middle: watch constantly and the thing freezes, watch rarely and it drifts on its own schedule, watch at the wrong rhythm in between and the checking itself speeds the decay. An interactive lesson. Runs entirely on your device; stores nothing.

@@ -109,7 +112,7 @@

Delta Atlas - The Cadence Dial

Sources. B. Misra & E.C.G. Sudarshan, "The Zeno's paradox in quantum theory," J. Math. Phys. 18, 756 (1977) · W.M. Itano, D.J. Heinzen, J.J. Bollinger & D.J. Wineland, "Quantum Zeno effect," Phys. Rev. A 41, 2295 (1990) · A.G. Kofman & G. Kurizki, "Acceleration of quantum decay processes by frequent observations," Nature 405, 546 (2000) · M.C. Fischer, B. Gutiérrez-Medina & M.G. Raizen, "Observation of the quantum Zeno and anti-Zeno effects in an unstable system," Phys. Rev. Lett. 87, 040402 (2001).
- The curve above is qualitative, drawn after this literature; the dial positions are illustrative. Lesson v0.1 (2026-07-10), part of the Delta Atlas explorable series. CC BY 4.0. Back to the atlas. + The curve above is qualitative, drawn after this literature; the dial positions are illustrative. Lesson v0.1 (2026-07-10), part of the Delta Atlas explorable series. CC BY 4.0. Back to the atlas.
+ +

Delta Atlas - Continuity Audit

Paste an operations manual, SOP, or workflow — one procedure per line — and the one-sentence goal it serves. Get three readings from one input: a resilience reading (can the manual keep the goal on track when a key person is out, a vendor fails, or an emergency hits — does it absorb, stay anchored, and recover), the gaps (a risk named with no stated control, single points of failure with no documented backup), and a coherence score (is each procedure a clear, testable action, or a vague label). Same engines as Gap Check and Framework Audit, pointed at a new domain. In the atlas grammar: the manual is the claim; its named backups and controls are the witness; brittleness is the difference. Heuristic, deterministic, entirely on your device — nothing you paste here ever leaves your browser.

diff --git a/Delta-Atlas-Document.html b/Delta-Atlas-Document.html new file mode 100644 index 0000000..5a01cf0 --- /dev/null +++ b/Delta-Atlas-Document.html @@ -0,0 +1,39 @@ + + + + + + + + +Document reader - Delta Atlas + + + + + + + +
+ +
+
+

Document reader

+

Public Atlas files

+

Markdown, JSON and plain text are shown as source text. Links inside the document remain text.

+

Preparing the document reader.

+ + +
+ + diff --git a/Delta-Atlas-Evidence.html b/Delta-Atlas-Evidence.html index bdf2936..7e5cb16 100644 --- a/Delta-Atlas-Evidence.html +++ b/Delta-Atlas-Evidence.html @@ -1,5 +1,5 @@ - + @@ -43,8 +43,111 @@ button{font-family:inherit;} ::placeholder{color:var(--dim);opacity:1;} + + +
@@ -67,8 +170,8 @@

A failure and its repair

The shared engine now checks cancellation in everyday-language phrases as well as aliases. The regression cases also preserve genuine review and keep nearby risks visible.

@@ -78,36 +181,36 @@

Reproduce the checks

node gapcheck-corpus.js node coherence-audit-corpus.js node continuity-audit-corpus.js -

These checks need no package installation or model API. For the broader suite and its runtime requirements, inspect the CI workflow.

+

These checks need no package installation or model API. For the broader suite and its runtime requirements, inspect the CI workflow.

Public research to inspect

Protocol preview · PREPARE_ONLY -

Clutch

+

Clutch

Approved task handoffs, explicit recovery routes, deterministic reducers and a reproduction package. Its public preview does not activate routing.

diff --git a/Delta-Atlas-Field.html b/Delta-Atlas-Field.html index 850bdeb..a7dd907 100644 --- a/Delta-Atlas-Field.html +++ b/Delta-Atlas-Field.html @@ -1,5 +1,5 @@ - + Delta Atlas - The Field (an instrument) + + +
+
diff --git a/Delta-Atlas-GapCheck.html b/Delta-Atlas-GapCheck.html index e251fc0..230f0e6 100644 --- a/Delta-Atlas-GapCheck.html +++ b/Delta-Atlas-GapCheck.html @@ -1,5 +1,5 @@ - + Delta Atlas - Gap Check + + + +

Delta Atlas - Gap Check

Paste an AI policy, project plan, or vendor claim. It reads the governance terms you used and flags what is missing: risks named with no control, autonomy with no oversight, and terms that are still thin. It checks structure, not correctness, and it runs entirely on your device. In the atlas grammar: your document is the claim; its own stated controls are the witness; the findings are the difference.

diff --git a/Delta-Atlas-HowItWorks.html b/Delta-Atlas-HowItWorks.html index 8db0abd..2aa3d8f 100644 --- a/Delta-Atlas-HowItWorks.html +++ b/Delta-Atlas-HowItWorks.html @@ -1,5 +1,5 @@ - + Delta Atlas - How it works @@ -43,9 +43,12 @@ textarea,input,select{font-family:inherit;font-size:14px;line-height:1.5;} button{font-family:inherit;} ::placeholder{color:var(--dim);opacity:1;} - + + + +
- ← Delta Atlas + ← Delta Atlas

How it works

One engine, many checks. What every tool here is actually doing — and how much each check is worth.

@@ -63,9 +66,9 @@

Which check fits your job?

Reviewing an AI plan, policy, or system promptGap Check → Checking whether a framework's parts hold upFramework Audit → Reviewing a handover or operations manualContinuity Audit → - Just want a word explainedAsk / glossary → + Just want a word explainedAsk / glossary →
-

Or, if you're an AI agent (or telling one what to do): run these checks from a pipeline on your own output — see llms.txt.

+

Or, if you're an AI agent (or telling one what to do): run these checks from a pipeline on your own output — see llms.txt.

The ladder — how much a check is worth

diff --git a/Delta-Atlas-Library.html b/Delta-Atlas-Library.html index a6fd57e..79cf4dc 100644 --- a/Delta-Atlas-Library.html +++ b/Delta-Atlas-Library.html @@ -1,5 +1,5 @@ - + @@ -43,8 +43,111 @@ button{font-family:inherit;} ::placeholder{color:var(--dim);opacity:1;} + + +
@@ -128,17 +231,17 @@

Read further

diff --git a/Delta-Atlas-Primitives.html b/Delta-Atlas-Primitives.html index 294f234..cf0536d 100644 --- a/Delta-Atlas-Primitives.html +++ b/Delta-Atlas-Primitives.html @@ -1,5 +1,5 @@ - + Delta Atlas - Systems Primitives + + + +

Delta Atlas - Systems Primitives companion library

A separate, cross-domain reference: how the same structural roles show up in finance, crypto, real estate, compute, and AI. Organized by system role (what a thing does in a system), not by field. This is a companion to the AI-governance glossary, not part of it: sourced to each field's own institutions.

diff --git a/Delta-Atlas-Quick.html b/Delta-Atlas-Quick.html index 9e66aaf..6d6c117 100644 --- a/Delta-Atlas-Quick.html +++ b/Delta-Atlas-Quick.html @@ -1,5 +1,5 @@ - + Delta Atlas - Quick check + + + +
+ +
@@ -89,4 +92,4 @@ 'Paste any plan, on any topic. It scores each part on whether it says what to do, can be tested, and stays on goal, then hands you a simple pattern to make the vague parts measurable.', 'Open Framework Audit →','Coherence-Audit.html','Framework Audit'); } home(); - \ No newline at end of file + diff --git a/Delta-Atlas-Tracer-Calibration.md b/Delta-Atlas-Tracer-Calibration.md index 0dab74c..85cdeb6 100644 --- a/Delta-Atlas-Tracer-Calibration.md +++ b/Delta-Atlas-Tracer-Calibration.md @@ -141,3 +141,13 @@ The 14 existing pre-STP workflow commands passed locally on Windows with Node 24 The owner requested darker cards and a concise scope note beneath the three tools, then explicitly retained moving water on arrival. The motion runtime is unchanged: it starts unless reduced motion is requested, can be paused, and suspends while a tool such as Tracer is open. An opt-in motion default was not implemented. Cards now use an opaque dark surface; surrounding content panels are 97–98% opaque. Reducing unused desktop hero space puts the single-sentence tool limit immediately below all three cards and within the inspected 1280 x 720 initial viewport (note bottom at approximately 636.5 CSS pixels). At 390 x 844, the wide garden and vertically stacked cards remain readable; the note follows the third card and requires scrolling. No universal above-the-fold claim is made. Local screenshots checked both layouts and the mobile note; no horizontal document overflow was observed. Opening Tracer hid the garden and stopped its draw count. Cache v92 distributes these CSS/copy changes; tool engines, datasets, artwork bytes and routing logic are retained. The proposal remains queued for independent cold read. + +## 2026-09-05: Return navigation and public document reader + +The owner reported being stranded after following tools and document links, specifically raw JSON/Markdown in the mobile app. Opening the public snapshot JSON reproduced a plain browser document without Atlas controls. Several standalone tools also lacked a visible Home link, while bare Home links in embedded pages could create a nested Atlas. + +The shell brand is now a native Home anchor, enhanced with the existing one-entry route behavior. If frame cleanup or history writes reject, its default navigation remains available. Existing standalone content pages have a sticky native Home link; Field places it in its existing control bar without changing canvas coordinates. Parent-shell detection hides duplicates in embedded tools. Library, Evidence and Six Signals keep their no-script requirements and existing restrictive headers; the shell hides their duplicate bar on load. The initial helper implementation failed the passive-page checks and was corrected before publication. + +Twenty-one local text-document links now use a reader with persistent Home/Library links and an original download. Its 120-path public manifest restricts file selection; textContent rendering keeps document markup inert, with a 1 MiB preview bound. Raw source URLs and machine-readable bytes remain available. Seventeen external-source links now open separately, preserving the Atlas page. This does not add site controls to third-party pages or change a browser's own raw-file viewer. + +Local screenshots at 390 x 844 verified a long Markdown document, JSON and an invalid-path state. Home remained at an 8px top edge after approximately 24,118px of document scrolling and returned to the front page with one click. Standalone Ask/Explore at 390px, Verify/Field/404 at 320px, and desktop embedded sample/Tracer return were inspected. A mobile sidebar-height override was corrected during review. No horizontal document overflow was observed in these checks. These are browser viewport observations, not physical iOS/Android installed-app certification. Cache v93 includes the navigation and reader assets plus directly linked documents; arbitrary manifest-listed files are not all pre-cached. No tool scoring engine, dataset acceptance, artwork or motion policy is changed. diff --git a/Delta-Atlas-Tracer.html b/Delta-Atlas-Tracer.html index a9cb459..40ff888 100644 --- a/Delta-Atlas-Tracer.html +++ b/Delta-Atlas-Tracer.html @@ -1,5 +1,5 @@ - + Delta Atlas - Priority Tracer + + + +

Delta Atlas - Priority Tracer

Paste an agent's reasoning trace or execution log. It looks for ordering drift: the moment the mission climbs over the reference, where a goal is used to override, skip, or reinterpret a rule that should have held. It also marks where the reference held. It reads the grammar of the trace, not its meaning, and runs entirely on your device. In the atlas grammar: the trace is the claim; the rules it started with are the witness; drift is the difference.

diff --git a/Delta-Atlas-Verify.html b/Delta-Atlas-Verify.html index eb97092..83668d0 100644 --- a/Delta-Atlas-Verify.html +++ b/Delta-Atlas-Verify.html @@ -1,5 +1,5 @@ - + Delta Atlas — Verification Checklist + + + +
Delta Atlas · VERIFY
diff --git a/README-Portability.md b/README-Portability.md index 89ae8bb..4ee1cb4 100644 --- a/README-Portability.md +++ b/README-Portability.md @@ -28,6 +28,14 @@ This is the model-agnostic boundary: the fixed engines do not depend on Claude, The homepage's hanging-garden artwork is a local 1672 × 941 WebP. Its CSS, image and optional WebGL water script are declared core cache assets. The water effect needs browser WebGL support; a still image remains visible if animation cannot start. Pause/play and reduced-motion handling affect decoration only, with no role in tool results or authority. Test from HTTP(S), since local `file:` texture restrictions vary. The image adds approximately 598 kB to the initial uncached assets; no model call is needed to display it. Mobile framing shows the full landscape rather than enlarging a portrait crop. +## Returning from tools and documents + +The Atlas header exposes a native Home link while a tool is open. Standalone content pages also carry an always-available Home link, so return navigation does not depend on browser chrome or prior history. The normal shell route still uses one parent history entry; if its JavaScript return fails, the native link can load the front page. Script-free evidence pages retain their restricted policies. + +Website links to public Markdown, JSON and text files open `Delta-Atlas-Document.html` with a sticky Home/Library bar. The reader requires an exact filename in a public manifest, renders source text without interpreting HTML or Markdown links, and limits previews to 1 MiB. Invalid paths or loading failures retain navigation. Download original preserves the source file; the original raw URLs remain unchanged for code and pinned references. External references open separately so Atlas stays available. Installed-app behavior ultimately depends on the host browser; these controls work within the site rather than depending on a visible browser Back button. + +Cache v93 includes the reader, shared return assets and documents directly linked by the current HTML pages. The manifest lists additional public files, which are not all pre-cached merely by being listed. An offline document needs its bytes in the cache; a missing document reports an error with Home still available. + ## Historical map links Map and Reflections are retained as small redirects so older links still reach the project. Their former visualization and Three.js setup instructions do not describe the current files. Opening a redirect offline still requires its destination and that destination's assets to be available. diff --git a/Six-Signal-Method.html b/Six-Signal-Method.html index 73146a0..7deb277 100644 --- a/Six-Signal-Method.html +++ b/Six-Signal-Method.html @@ -1,5 +1,5 @@ - + @@ -54,8 +54,111 @@ } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { scroll-behavior: auto !important; } } + + +

Back to Delta Atlas

@@ -126,8 +229,8 @@

Activity

A small reproducible example

-

The companion Pinned Snapshot Card names seven already-public files at one public Git commit and records their Git object IDs, SHA-256 digests, and byte lengths. Its verifier checks identity only. It deliberately publishes no private evaluation, lamp state, or live result.

-

Inspect the machine-readable card.

+

The companion Pinned Snapshot Card names seven already-public files at one public Git commit and records their Git object IDs, SHA-256 digests, and byte lengths. Its verifier checks identity only. It deliberately publishes no private evaluation, lamp state, or live result.

+

Inspect the machine-readable card.

diff --git a/White-Paper.html b/White-Paper.html index 10adfb4..8f57ccd 100644 --- a/White-Paper.html +++ b/White-Paper.html @@ -1,5 +1,5 @@ - + Delta Atlas - Project Guide and Evidence Boundaries + + + +

Delta Atlas — Project Guide and Evidence Boundaries

@@ -47,7 +50,7 @@

Public tools and their bounded roles

Start herea two-minute orientation to common AI terms.
Ask (home search)a deterministic lookup over a 435-term embedded snapshot. It can return recorded source labels, but those labels are not complete per-term source receipts.
-
Explorebrowses and filters the same 435-term public snapshot. The candidate source inventory contains 439 records; the data-sync baseline records the four missing IDs and status differences.
+
Explorebrowses and filters the same 435-term public snapshot. The candidate source inventory contains 439 records; the data-sync baseline records the four missing IDs and status differences.
Quick checkcompares a short goal with its stated parts. It is a structural prompt, not a correctness or safety judgment.
Gap Checkapplies fixed phrase and structure rules to a plan or policy. The current embedded snapshot has 433 terms; a flag points to text for human review.
Framework Auditchecks whether stated framework parts are actionable and testable. Its score is a heuristic over text, not enforcement or certification.
diff --git a/assets/atlas-document-v1.css b/assets/atlas-document-v1.css new file mode 100644 index 0000000..a6aa720 --- /dev/null +++ b/assets/atlas-document-v1.css @@ -0,0 +1,22 @@ +:root{color-scheme:dark;--bg:#16301f;--panel:#203e2c;--line:#607458;--text:#fafcf7;--dim:#d3decf;--accent:#e3cd91;} +*{box-sizing:border-box;} +[hidden]{display:none!important;} +html{scroll-padding-top:110px;} +body{margin:0;background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Arial,sans-serif;font-size:15px;font-weight:400;line-height:1.65;} +a{color:var(--accent);text-underline-offset:3px;} +a:hover{text-decoration-thickness:2px;} +a:focus-visible,pre:focus-visible,main:focus-visible{outline:3px solid var(--accent);outline-offset:4px;} +.reader-bar{position:sticky;top:0;z-index:5;background:#10281a;border-bottom:1px solid var(--line);padding:8px max(16px,calc((100% - 1040px)/2));} +.reader-bar nav{display:flex;flex-wrap:wrap;gap:4px 14px;align-items:center;} +.reader-bar a{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:8px 10px;border-radius:6px;font-size:14px;} +.reader-bar .home-link{font-weight:650;border:1px solid var(--line);background:var(--panel);} +.reader-wrap{max-width:1040px;margin:0 auto;padding:26px 22px 64px;min-width:0;} +h1{font-size:clamp(26px,4vw,34px);line-height:1.2;margin:0 0 12px;} +.filename{font-weight:650;overflow-wrap:anywhere;margin:0 0 10px;} +.reader-note{color:var(--dim);margin:0 0 18px;font-size:14px;max-width:760px;} +.reader-status{margin:0 0 20px;padding:12px 15px;background:var(--panel);border-left:3px solid var(--accent);border-radius:3px;overflow-wrap:anywhere;} +.reader-status[data-state="error"]{border-left-color:#ffaf8c;} +pre{margin:0;padding:22px;background:#10271d;color:var(--text);border:1px solid var(--line);border-radius:10px;white-space:pre-wrap;overflow-wrap:anywhere;word-break:normal;tab-size:2;font-family:ui-monospace,SFMono-Regular,Consolas,"Liberation Mono",monospace;font-size:13.5px;line-height:1.75;min-width:0;} +.skip{position:fixed;left:12px;top:-100px;z-index:10;padding:12px;background:#10281a;} +.skip:focus{top:8px;} +@media(max-width:600px){.reader-wrap{padding:22px 15px 48px;}.reader-bar{padding-inline:10px;}.reader-bar nav{gap:4px 7px;}.reader-bar a{font-size:13px;padding-inline:8px;}pre{padding:16px;font-size:13px;}.reader-status{padding:11px 12px;}} diff --git a/assets/atlas-document-v1.js b/assets/atlas-document-v1.js new file mode 100644 index 0000000..4243a87 --- /dev/null +++ b/assets/atlas-document-v1.js @@ -0,0 +1,132 @@ +/* Public source-text reader. Exact manifest membership is required before a + * document URL or download link is created. No storage, HTML parsing or API use. */ +(() => { + 'use strict'; + const PREVIEW_LIMIT = 1024 * 1024; + const MANIFEST_LIMIT = 256 * 1024; + const EXCLUDED_SEGMENTS = new Set(['.git', 'node_modules', 'build', 'dist']); + + function validPath(value) { + return typeof value === 'string' && value.length > 0 && value.length <= 1000 && + !/[\\?#:\u0000-\u001f\u007f]/.test(value) && /\.(?:md|json|txt)$/i.test(value) && + value.split('/').every(part => part && part !== '.' && part !== '..' && !EXCLUDED_SEGMENTS.has(part)); + } + + function sizeError() { + const error = new Error('This file is larger than the 1 MiB preview limit. Use Download original to read the complete file.'); + error.code = 'PREVIEW_LIMIT'; + return error; + } + + async function readLimited(response, limit) { + const length = response.headers.get('content-length'); + if (length !== null && /^\d+$/.test(length) && Number(length) > limit) { + if (response.body) await response.body.cancel().catch(() => {}); + throw sizeError(); + } + if (!response.body) return ''; + if (typeof response.body.getReader !== 'function') { + throw new Error('This browser cannot preview the file with a size limit. Use Download original instead.'); + } + const reader = response.body.getReader(); + const decoder = new TextDecoder('utf-8'); + const parts = []; + let bytes = 0; + try { + for (;;) { + const chunk = await reader.read(); + if (chunk.done) break; + bytes += chunk.value.byteLength; + if (bytes > limit) { + await reader.cancel().catch(() => {}); + throw sizeError(); + } + parts.push(decoder.decode(chunk.value, { stream: true })); + } + parts.push(decoder.decode()); + return parts.join(''); + } finally { + reader.releaseLock(); + } + } + + async function request(url) { + const response = await fetch(url, { + mode: 'same-origin', credentials: 'omit', redirect: 'error', + }); + if (!response.ok) throw new Error('The file could not be loaded (HTTP ' + response.status + ').'); + return response; + } + + async function init() { + const main = document.getElementById('content'); + const filename = document.getElementById('document-filename'); + const format = document.getElementById('document-format'); + const status = document.getElementById('document-status'); + const output = document.getElementById('document-text'); + const download = document.getElementById('document-download'); + if (!main || !filename || !format || !status || !output || !download) return; + + function report(state, message) { + status.dataset.state = state; + status.textContent = message; + } + + const requested = new URLSearchParams(location.search).getAll('file'); + if (requested.length !== 1 || !validPath(requested[0])) { + report('error', 'No valid document was selected. Choose a Markdown, JSON or text file from Atlas home or Library.'); + return; + } + const file = requested[0]; + main.setAttribute('aria-busy', 'true'); + report('loading', 'Checking the public document list.'); + let allowed; + try { + const manifestURL = new URL('assets/atlas-documents-v1.json', location.href); + const manifest = JSON.parse(await readLimited(await request(manifestURL.href), MANIFEST_LIMIT)); + if (!manifest || manifest.type !== 'delta-atlas-public-documents' || manifest.version !== 1 || + !Array.isArray(manifest.files) || !manifest.files.every(validPath)) { + throw new Error('Invalid public document list.'); + } + allowed = new Set(manifest.files); + } catch (_) { + main.setAttribute('aria-busy', 'false'); + report('error', 'The public document list could not be loaded. Return to Atlas home or Library and try again.'); + return; + } + if (!allowed.has(file)) { + main.setAttribute('aria-busy', 'false'); + report('error', 'That file is not in the public document list. Choose a file from Atlas home or Library.'); + return; + } + + const url = new URL(file.split('/').map(encodeURIComponent).join('/'), location.href); + if (url.origin !== location.origin) { + main.setAttribute('aria-busy', 'false'); + report('error', 'The document must be a public file on this Atlas site.'); + return; + } + filename.textContent = file; + document.title = file + ' - Delta Atlas'; + const kind = /\.md$/i.test(file) ? 'Markdown' : /\.json$/i.test(file) ? 'JSON' : 'Plain text'; + format.textContent = kind + ' source text. Links and markup are displayed as text. Download original preserves the file itself.'; + download.href = url.href; + download.download = file.split('/').pop(); + download.hidden = false; + report('loading', 'Loading ' + file + '.'); + try { + const text = await readLimited(await request(url.href), PREVIEW_LIMIT); + output.textContent = text; + output.hidden = false; + report('ready', text.length ? 'Document loaded. Preview limit: 1 MiB.' : 'This document is empty.'); + } catch (error) { + report(error.code === 'PREVIEW_LIMIT' ? 'large' : 'error', + error.code === 'PREVIEW_LIMIT' ? error.message : 'The document could not be previewed. Try Download original, or return to Atlas home or Library.'); + } finally { + main.setAttribute('aria-busy', 'false'); + } + } + + if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init, { once: true }); + else init(); +})(); diff --git a/assets/atlas-documents-v1.json b/assets/atlas-documents-v1.json new file mode 100644 index 0000000..efb8936 --- /dev/null +++ b/assets/atlas-documents-v1.json @@ -0,0 +1,126 @@ +{ + "type": "delta-atlas-public-documents", + "version": 1, + "files": [ + "Agentic-AI-Governance-Glossary.md", + "CONTRIBUTING.md", + "Coherence-Ledger-Method.md", + "Coined-Terms-Grounding.md", + "Delta-Atlas-Canon.md", + "Delta-Atlas-Term-Candidates.md", + "Delta-Atlas-Tracer-Calibration.md", + "Fork-Return-Notes.md", + "LICENSE.txt", + "Nine-Seams.md", + "Nozzle-Study.md", + "Nozzle.md", + "Operator-Protocol.md", + "PUBLISHING.md", + "README-Durability.md", + "README-Portability.md", + "README.md", + "Red-Team-Report.md", + "SECURITY.md", + "Skills-Method-Register.md", + "State-Delta-Bridge.md", + "Translator-Framework-Design.md", + "White-Paper-Notes.md", + "assets/hanging-garden-v1.md", + "continuity-overlay.sample.json", + "delta-atlas-canon.json", + "governance/README.md", + "governance/artifact-register.json", + "governance/authority-map.json", + "governance/contracts/atlas-data-materialization-notes.md", + "governance/contracts/atlas-data-materialization.contract.v1.json", + "governance/contracts/atlas-data-sync-baseline.md", + "governance/contracts/atlas-data-sync.contract.v1.json", + "governance/contracts/atlas-data-sync.contract.v2.json", + "governance/contracts/atlas-navigation-history.contract.v1.json", + "governance/contracts/atlas-repair-sources.md", + "governance/contracts/atlas-runtime-contract.v1.json", + "governance/contracts/public-explanation-surfaces.contract.v1.json", + "governance/data-classification.md", + "governance/decision-log/0001-work-packet-0-authority-freeze.md", + "governance/decision-log/0002-public-metadata-release-acceptance.md", + "governance/decision-log/0003-stp-status-vocabulary-boundary.md", + "governance/decision-log/0004-stp-v1.2-public-reproduction-release.md", + "governance/decision-log/0005-six-signal-public-method-release.md", + "governance/decision-log/0006-six-signal-release-binding-correction.md", + "governance/decision-log/0007-git-pages-source-hardening.md", + "governance/decision-log/0008-atlas-foundational-repair-source-review.md", + "governance/decision-log/0009-atlas-data-sync-portability-correction.md", + "governance/decision-log/0010-atlas-navigation-history-correction.md", + "governance/decision-log/0011-public-explanation-surface-cleanup.md", + "governance/deployment-receipts/2026-08-11-current-production.json", + "governance/external-feedback.json", + "governance/ledger/README.md", + "governance/ledger/checkpoints/checkpoint-000001.json", + "governance/ledger/checkpoints/checkpoint-000002.json", + "governance/ledger/checkpoints/checkpoint-000003.json", + "governance/ledger/checkpoints/checkpoint-000004.json", + "governance/ledger/checkpoints/checkpoint-000005.json", + "governance/ledger/checkpoints/checkpoint-000006.json", + "governance/ledger/checkpoints/checkpoint-000007.json", + "governance/ledger/checkpoints/checkpoint-000008.json", + "governance/ledger/checkpoints/checkpoint-000009.json", + "governance/ledger/checkpoints/checkpoint-000010.json", + "governance/ledger/checkpoints/checkpoint-000011.json", + "governance/ledger/checkpoints/checkpoint-000012.json", + "governance/ledger/checkpoints/checkpoint-000013.json", + "governance/ledger/events/deployment/000001-wp0-production-observation.json", + "governance/ledger/events/deployment/000002-public-explanation-production-observed.json", + "governance/ledger/events/deployment/000003-service-worker-drift-closed.json", + "governance/ledger/events/feedback/000001-public-researcher-comment.json", + "governance/ledger/events/governance/000001-wp0-authority-freeze.json", + "governance/ledger/events/governance/000002-public-metadata-release-acceptance.json", + "governance/ledger/events/governance/000003-stp-v1-2-public-reproduction-authorized.json", + "governance/ledger/events/governance/000004-six-signal-public-method-authorized.json", + "governance/ledger/events/governance/000005-six-signal-release-binding-corrected.json", + "governance/ledger/events/governance/000006-git-pages-source-hardening-authorized.json", + "governance/ledger/events/governance/000007-atlas-foundational-repair-source-review.json", + "governance/ledger/events/governance/000008-atlas-data-sync-portability-corrected.json", + "governance/ledger/events/governance/000009-atlas-navigation-history-corrected.json", + "governance/ledger/events/governance/000010-public-explanation-surfaces-prepared.json", + "governance/ledger/events/publication/000001-stp-v1-2-public-release-observed.json", + "governance/ledger/events/research/000001-wp0-artifact-search.json", + "governance/ledger/events/semantics/000001-status-vocabulary-boundary.json", + "governance/ledger/policy/capabilities.v1.json", + "governance/ledger/policy/capabilities.v2.json", + "governance/ledger/schemas/event.v1.schema.json", + "governance/ledger/schemas/event.v2.schema.json", + "governance/observations/2026-08-13-atlas-navigation-local-browser.json", + "governance/releases/atlas-foundational-repair.v1.json", + "governance/status-vocabulary-contract.json", + "llms.txt", + "primitives.json", + "proposals.json", + "research/atlas-snapshot-read-only/README.md", + "research/atlas-snapshot-read-only/release-history-pr6.v1.json", + "research/atlas-snapshot-read-only/release-manifest.json", + "research/atlas-snapshot-read-only/snapshot-card.json", + "research/stp-v1.2/README.md", + "research/stp-v1.2/fixtures/concurrency/conformance-cases.json", + "research/stp-v1.2/fixtures/instrumented-transition/conformance-cases.json", + "research/stp-v1.2/package-lock.json", + "research/stp-v1.2/package.json", + "research/stp-v1.2/release-manifest.json", + "research/stp-v1.2/schemas/concurrency-conformance.schema.json", + "research/stp-v1.2/schemas/instrument-event.schema.json", + "research/stp-v1.2/schemas/instrument-profile.schema.json", + "research/stp-v1.2/schemas/instrumented-transition-conformance.schema.json", + "research/stp-v1.2/sources.json", + "research/stp-v1.2/specs/CONCURRENCY_EFFECT_PROFILE.md", + "research/stp-v1.2/specs/INSTRUMENTED_TRANSITION_AND_SURVIVABILITY_PROFILE.md", + "rung3-power-experiment/Architecture-Boundary.md", + "rung3-power-experiment/Power-Witness-Study-Phase2.md", + "rung3-power-experiment/Power-Witness-Study-Phase3.md", + "rung3-power-experiment/Power-Witness-Study.md", + "rung3-power-experiment/README.md", + "rung3-power-experiment/runs/2026-07-05-run2-manifest.json", + "rung3-power-experiment/runs/2026-07-05-run3-manifest.json", + "rung3-power-experiment/runs/2026-07-05-run4-manifest.json", + "term-candidates-v1.json", + "terms.enriched.json" + ] +} diff --git a/assets/atlas-return-v1.css b/assets/atlas-return-v1.css new file mode 100644 index 0000000..7a19370 --- /dev/null +++ b/assets/atlas-return-v1.css @@ -0,0 +1,98 @@ +/* Standalone recovery navigation. Existing tool controls and engines stay intact. */ +html[data-atlas-return-layout] { + --atlas-return-height: calc(53px + env(safe-area-inset-top, 0px)); + scroll-padding-top: calc(var(--atlas-return-height) + 12px); +} +html[data-atlas-return-embedded="true"] { --atlas-return-height: 0px; } +nav.atlas-return-nav { + box-sizing: border-box; + position: sticky; + top: 0; + z-index: 30; + display: flex; + align-items: center; + flex-wrap: wrap; + flex: none; + gap: 0; + width: 100%; + margin: 0; + padding: calc(4px + env(safe-area-inset-top, 0px)) 14px 4px; + border: 0; + border-bottom: 1px solid #4a6b56; + border-radius: 0; + background: #10281a; + color: #fafcf7; + text-align: left; +} +nav.atlas-return-nav[hidden] { display: none !important; } +nav.atlas-return-nav > a { + box-sizing: border-box; + display: inline-flex; + align-items: center; + justify-content: center; + min-height: 44px; + min-width: 44px; + max-width: 100%; + margin: 0; + padding: 8px 12px; + border: 1px solid #4a6b56; + border-radius: 8px; + background: #16301f; + color: #e3c258; + font: 600 14px/1.4 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Arial, sans-serif; + text-decoration: none; + overflow-wrap: anywhere; +} +nav.atlas-return-nav > a:hover { border-color: #e3c258; text-decoration: underline; } +nav.atlas-return-nav > a:focus-visible { outline: 3px solid #fafcf7; outline-offset: 2px; } +html[data-atlas-return-layout] body > .skip { z-index: 40; } +html[data-atlas-return-layout="query"] { --atlas-return-header-height: 78px; } +html[data-atlas-return-layout="primitives"] { --atlas-return-header-height: 70px; } +html[data-atlas-return-layout="query"] body > header, +html[data-atlas-return-layout="primitives"] body > header, +html[data-atlas-return-layout="chat"] .askbar, +html[data-atlas-return-layout="verify"] body > .bar { + top: var(--atlas-return-height); +} +html[data-atlas-return-layout="query"] .side, +html[data-atlas-return-layout="primitives"] .side { + top: calc(var(--atlas-return-height) + var(--atlas-return-header-height)); + height: calc(100vh - var(--atlas-return-height) - var(--atlas-return-header-height)); +} +html[data-atlas-return-layout="curation"] .side { + top: var(--atlas-return-height); + height: calc(100vh - 80px - var(--atlas-return-height)); +} +html[data-atlas-return-layout="gap"] .wrap, +html[data-atlas-return-layout="tracer"] .wrap { + min-height: calc(100vh - 66px - var(--atlas-return-height)); +} +/* Field's canvas remains at the viewport origin; only its existing bar gains a link. */ +html[data-atlas-return-layout="field"] nav.atlas-return-nav { + position: static; + width: auto; + padding: 0; + border: 0; + background: transparent; +} +/* The error page keeps its original centered flex layout. */ +html[data-atlas-return-layout="guided"]:not([data-atlas-return-embedded="true"]) body { + height: auto; + min-height: 100%; +} +html[data-atlas-return-layout="not-found"] nav.atlas-return-nav { + position: fixed; + left: 0; + right: 0; +} +@media (max-width: 720px) { + html[data-atlas-return-layout="query"] .side, + html[data-atlas-return-layout="primitives"] .side, + html[data-atlas-return-layout="curation"] .side { top: auto; height: auto; } + html[data-atlas-return-layout="gap"] .wrap, + html[data-atlas-return-layout="tracer"] .wrap { min-height: 0; } +} +@media print { + html[data-atlas-return-layout] { --atlas-return-height: 0px; } + nav.atlas-return-nav { display: none; } +} diff --git a/assets/atlas-return-v1.js b/assets/atlas-return-v1.js new file mode 100644 index 0000000..b2d99fb --- /dev/null +++ b/assets/atlas-return-v1.js @@ -0,0 +1,32 @@ +/* Progressive enhancement only: the native Home link works without this script. */ +(() => { + 'use strict'; + const root = document.documentElement; + const nav = document.querySelector('nav.atlas-return-nav'); + if (!nav) return; + try { + if (window.parent !== window && + window.parent.document.documentElement.dataset.atlasShell === 'true') { + root.dataset.atlasReturnEmbedded = 'true'; + nav.hidden = true; + } + } catch (_) { + // Unrecognized/cross-origin embeds retain the standalone recovery link. + } + if (nav.hidden || root.dataset.atlasReturnLayout === 'field') return; + const layout = root.dataset.atlasReturnLayout; + const header = (layout === 'query' || layout === 'primitives') + ? document.querySelector('body > header') : null; + function measure() { + root.style.setProperty('--atlas-return-height', nav.getBoundingClientRect().height + 'px'); + if (header) root.style.setProperty('--atlas-return-header-height', header.getBoundingClientRect().height + 'px'); + } + measure(); + if ('ResizeObserver' in window) { + const observer = new ResizeObserver(measure); + observer.observe(nav); + if (header) observer.observe(header); + } else { + window.addEventListener('resize', measure); + } +})(); diff --git a/evaluate.html b/evaluate.html index f0239fa..9225238 100644 --- a/evaluate.html +++ b/evaluate.html @@ -1,5 +1,5 @@ - + Delta Atlas - Technical Review @@ -29,37 +29,40 @@ textarea,input,select{font-family:inherit;font-size:14px;line-height:1.5;} button{font-family:inherit;} ::placeholder{color:var(--dim);opacity:1;} - + + + +

Technical review

Inspect the code, reproduce a failure and its repair, and assess what the evidence supports.

Delta Atlas is part of Jake Tiller's independent, AI-assisted research and engineering work: browser tools, explicit decision rules, and reproducible checks around uncertain AI work.

Try Gap Check - Inspect the repository + Inspect the repository

Three things to inspect

-
1. Shared implementation
Gap Check and Continuity Audit use the same lexicon engine. Framework Audit and Continuity Audit share a scoring engine. The browser and Node checks reuse those implementations. The tools require no model call at runtime.
-
2. A failure with a concrete repair
The earlier bridge detector counted “Human review was never implemented” as oversight. The corrected detector applies cancellation checks to ordinary-language bridges as well as aliases. The corpus retains positive and negative examples. Finite phrase checks still have limits; the tool does not establish real authorization.
-
3. Research beyond the interface
Clutch specifies approved task handoffs and bounded recovery; its published preview remains PREPARE_ONLY and establishes no general savings claim. The STP candidate packet separates evidence, effects and accepted state. The Stable's findings preserve experiments and failed hypotheses.
+
1. Shared implementation
Gap Check and Continuity Audit use the same lexicon engine. Framework Audit and Continuity Audit share a scoring engine. The browser and Node checks reuse those implementations. The tools require no model call at runtime.
+
2. A failure with a concrete repair
The earlier bridge detector counted “Human review was never implemented” as oversight. The corrected detector applies cancellation checks to ordinary-language bridges as well as aliases. The corpus retains positive and negative examples. Finite phrase checks still have limits; the tool does not establish real authorization.
+
3. Research beyond the interface
Clutch specifies approved task handoffs and bounded recovery; its published preview remains PREPARE_ONLY and establishes no general savings claim. The STP candidate packet separates evidence, effects and accepted state. The Stable's findings preserve experiments and failed hypotheses.

Reproduce a small check

From a repository checkout with Node.js installed, run:

node gapcheck-corpus.js
 node coherence-audit-corpus.js
 node continuity-audit-corpus.js
-

These checks need no package installation or API key. They test specified behavior on labeled cases. For broader validation, inspect the repository workflow and its runtime requirements. Record the commit you checked; a passing historical build does not verify later edits.

+

These checks need no package installation or API key. They test specified behavior on labeled cases. For broader validation, inspect the repository workflow and its runtime requirements. Record the commit you checked; a passing historical build does not verify later edits.

The theory and its current boundary

-

The research question is practical: what must be checked before an AI-assisted proposal changes a record or action we rely on? The work separates proposals, permission, execution, observations and acceptance, then retains failures for bounded recovery. The project guide explains the Atlas methods and their limits. From Model Output to Accepted State, v4 is a separate owner-review paper candidate.

+

The research question is practical: what must be checked before an AI-assisted proposal changes a record or action we rely on? The work separates proposals, permission, execution, observations and acceptance, then retains failures for bounded recovery. The project guide explains the Atlas methods and their limits. From Model Output to Accepted State, v4 is a separate owner-review paper candidate.

My contribution is the problem framing, functional synthesis, task and evidence design, and direction of the implementation and corrections. AI assistance is part of the drafting and development process. Evaluate that work through the source, tests, decisions and preserved failures.

Dataset status

-

The candidate source inventory has 439 records; the current Ask and Explore snapshot has 435. All source records carry the repository label reviewed, but complete reviewer, date, source-locator and digest receipts are not consistently present. That label is not proof of semantic correctness. The data-sync baseline records the older projections and their differences.

+

The candidate source inventory has 439 records; the current Ask and Explore snapshot has 435. All source records carry the repository label reviewed, but complete reviewer, date, source-locator and digest receipts are not consistently present. That label is not proof of semantic correctness. The data-sync baseline records the older projections and their differences.

Atlas checks text against explicit rules. It does not enforce policy or certify safety. Source-support indicators describe recorded sourcing; they do not prove a definition true. General productivity, security and economic benefits remain questions for appropriately scoped evaluation.

Useful feedback

-

A reproducible counterexample is especially useful: include the page or commit, input, expected behavior and observed result. Open an issue or browse the other projects.

-
Updated 5 September 2026. Independent educational research, provided as-is. Not legal, compliance or professional advice; no endorsement by the organizations cited. Content license: CC BY 4.0.
+

A reproducible counterexample is especially useful: include the page or commit, input, expected behavior and observed result. Open an issue or browse the other projects.

+
Updated 5 September 2026. Independent educational research, provided as-is. Not legal, compliance or professional advice; no endorsement by the organizations cited. Content license: CC BY 4.0.
diff --git a/governance/harnesses/verify-atlas-runtime.js b/governance/harnesses/verify-atlas-runtime.js index 86681ee..51c1000 100644 --- a/governance/harnesses/verify-atlas-runtime.js +++ b/governance/harnesses/verify-atlas-runtime.js @@ -7,7 +7,7 @@ const fail=m=>{throw new Error(m);}; const contract=JSON.parse(read('governance/contracts/atlas-runtime-contract.v1.json')); if(contract.type!=='delta-atlas-runtime-contract'||contract.version!==1) fail('contract identity'); const sw=read('sw.js'); -if(!sw.includes("const CACHE='aaig-v92'")) fail('cache version'); +if(!sw.includes("const CACHE='aaig-v93'")) fail('cache version'); if(/allSettled/.test(sw)) fail('install must not accept partial cache'); if(!/Promise\.all\(CORE\.map\(u=>c\.add\(u\)\)\)/.test(sw)) fail('install is not fail-closed'); const coreMatch=sw.match(/const CORE=\[([\s\S]*?)\];/); if(!coreMatch) fail('CORE not found'); diff --git a/governance/harnesses/verify-public-explanation-surfaces.js b/governance/harnesses/verify-public-explanation-surfaces.js index 89fb2f9..3d42993 100644 --- a/governance/harnesses/verify-public-explanation-surfaces.js +++ b/governance/harnesses/verify-public-explanation-surfaces.js @@ -85,7 +85,7 @@ function contentFailures(home, guide, library, evidence) { requireRule(/Ask and Explore snapshot[\s\S]{0,80}435/i.test(home), 'home must identify the 435-record Ask and Explore snapshot'); requireRule(/public data-sync baseline/i.test(home) && - /href=["']governance\/contracts\/atlas-data-sync-baseline\.md["']/i.test(home), + /href=["'](?:Delta-Atlas-Document\.html\?file=)?governance\/contracts\/atlas-data-sync-baseline\.md["']/i.test(home), 'home must expose the recorded projection mismatch baseline'); requireRule(/160 recorded cross-domain primitives/i.test(library) && !/150 cross-domain primitives/i.test(home + library), 'Library must report the pinned 160-record primitives inventory'); diff --git a/governance/harnesses/verify-return-navigation.js b/governance/harnesses/verify-return-navigation.js new file mode 100644 index 0000000..74994f0 --- /dev/null +++ b/governance/harnesses/verify-return-navigation.js @@ -0,0 +1,328 @@ +#!/usr/bin/env node +'use strict'; + +// Offline regression checks for native recovery navigation and the real text reader. +// DOM/fetch mocks test observable decisions, not browser layout or accessibility conformance. +const fs = require('fs'); +const path = require('path'); +const vm = require('vm'); +const assert = require('assert/strict'); +const { TextDecoder } = require('util'); +const root = path.resolve(__dirname, '../..'); +const read = file => fs.readFileSync(path.join(root, file), 'utf8'); +let passed = 0, failed = 0; +async function check(name, fn) { + try { await fn(); passed++; console.log('PASS ' + name); } + catch (error) { failed++; console.error('FAIL ' + name + ': ' + error.message); } +} +function decode(value) { + return value.replace(/&(?:amp|quot|apos|lt|gt|#\d+|#x[\da-f]+);/gi, entity => { + const key = entity.slice(1, -1).toLowerCase(); + if (key.startsWith('#x')) return String.fromCodePoint(parseInt(key.slice(2), 16)); + if (key.startsWith('#')) return String.fromCodePoint(parseInt(key.slice(1), 10)); + return { amp: '&', quot: '"', apos: "'", lt: '<', gt: '>' }[key]; + }); +} +function attrs(tag) { + const result = {}; + const body = tag.replace(/^<\/?[\w:-]+/, '').replace(/\/?\s*>$/, ''); + for (const match of body.matchAll(/([^\s=/>]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s>]+)))?/g)) { + result[match[1].toLowerCase()] = decode(match[2] ?? match[3] ?? match[4] ?? ''); + } + return result; +} +function markup(html) { + return html.replace(//g, '') + .replace(/]*>[\s\S]*?<\/script\s*>/gi, '') + .replace(/]*>[\s\S]*?<\/style\s*>/gi, ''); +} +function anchors(html) { + return [...markup(html).matchAll(/]*>[\s\S]*?<\/a\s*>/gi)].map(match => ({ + attributes: attrs(match[0].slice(0, match[0].indexOf('>') + 1)), + text: decode(match[0].replace(/<[^>]*>/g, '')).trim(), + })); +} +function homeAnchor(html) { + return anchors(html).find(a => /^\/?index\.html$/.test(a.attributes.href || '') && + a.attributes.target === '_top' && /home|atlas|start/i.test(a.text) && + !Object.hasOwn(a.attributes, 'hidden') && !Object.hasOwn(a.attributes, 'onclick')); +} +function extractFunction(source, name) { + const start = source.indexOf('function ' + name + '('); + assert(start >= 0, 'missing function ' + name); + const firstBrace = source.indexOf('{', start); + let depth = 0, quote = '', comment = ''; + for (let i = firstBrace; i < source.length; i++) { + const c = source[i], next = source[i + 1]; + if (comment === 'line') { if (c === '\n') comment = ''; continue; } + if (comment === 'block') { if (c === '*' && next === '/') { comment = ''; i++; } continue; } + if (quote) { if (c === '\\') i++; else if (c === quote) quote = ''; continue; } + if (c === '/' && next === '/') { comment = 'line'; i++; continue; } + if (c === '/' && next === '*') { comment = 'block'; i++; continue; } + if (c === '"' || c === "'" || c === '`') { quote = c; continue; } + if (c === '{') depth++; + if (c === '}' && --depth === 0) return source.slice(start, i + 1); + } + throw new Error('unterminated function ' + name); +} +function invokeBrand(source, outcome, overrides = {}) { + const calls = [], cancellations = []; + const context = { goHome(value) { + calls.push(value); + if (outcome === 'throw') throw new Error('synthetic navigation failure'); + return outcome; + } }; + vm.runInNewContext(extractFunction(source, 'returnToAtlas'), context, { timeout: 1000 }); + const event = { button: 0, metaKey: false, ctrlKey: false, shiftKey: false, altKey: false, + preventDefault() { cancellations.push(true); }, ...overrides }; + context.returnToAtlas(event); + return { calls, cancellations }; +} +function runReturnScript(source, mode) { + const nav = { hidden: false, getBoundingClientRect: () => ({ height: 54 }) }; + const documentElement = { dataset: {}, style: { setProperty() {} } }; + const document = { documentElement, querySelector: selector => selector === 'nav.atlas-return-nav' ? nav : null }; + const window = { addEventListener() {} }; + if (mode === 'top') window.parent = window; + else if (mode === 'cross-origin') { + window.parent = Object.defineProperty({}, 'document', { get() { throw new Error('cross-origin document denied'); } }); + } else window.parent = { document: { documentElement: { dataset: mode === 'atlas' ? { atlasShell: 'true' } : {} } } }; + vm.runInNewContext(source, { document, window }, { timeout: 1000 }); + return { hidden: nav.hidden, identified: documentElement.dataset.atlasReturnEmbedded }; +} + +// Run the actual reader IIFE and captured DOMContentLoaded callback. All responses +// are bounded in-memory fixtures; no network access or production data is needed. +async function runReader(source, html, fixture = {}) { + let init; + let innerHTMLWrites = 0; + const nodes = {}; + for (const match of markup(html).matchAll(/<[a-z][\w:-]*\b[^>]*>/gi)) { + const attributes = attrs(match[0]); + if (!attributes.id) continue; + const element = { attributes, dataset: {}, hidden: Object.hasOwn(attributes, 'hidden'), textContent: '', + setAttribute(key, value) { this.attributes[key] = String(value); } }; + Object.defineProperty(element, 'innerHTML', { set() { innerHTMLWrites++; throw new Error('reader assigned innerHTML'); } }); + nodes[attributes.id] = element; + } + const document = { readyState: 'loading', title: '', + getElementById: id => nodes[id] || null, + addEventListener(type, callback) { if (type === 'DOMContentLoaded') init = callback; } }; + const location = new URL('https://atlas.test/Delta-Atlas-Document.html' + (fixture.query ?? '?file=README.md')); + const calls = [], cancellations = []; + function response(body, options = {}) { + const bytes = Buffer.from(body, 'utf8'); + const chunks = options.chunks || [bytes]; + let index = 0; + return { ok: options.ok !== false, status: options.status || 200, + headers: { get: name => name === 'content-length' ? (options.length ?? null) : null }, + body: { async cancel() { cancellations.push('body'); }, getReader() { return { + async read() { return index < chunks.length ? { done: false, value: chunks[index++] } : { done: true }; }, + async cancel() { cancellations.push('reader'); }, releaseLock() {}, + }; } } }; + } + const fixtureManifest = fixture.manifest ?? { type: 'delta-atlas-public-documents', version: 1, files: ['README.md', 'terms.json'] }; + const fetch = async (url, options) => { + calls.push({ url, options }); + if (new URL(url).pathname === '/assets/atlas-documents-v1.json') { + if (fixture.manifestThrows) throw new Error('synthetic manifest fetch failure'); + return response(typeof fixtureManifest === 'string' ? fixtureManifest : JSON.stringify(fixtureManifest)); + } + if (fixture.fileThrows) throw new Error('synthetic file fetch failure'); + return response(fixture.text ?? '# Atlas\nA readable document.', fixture.fileOptions); + }; + vm.runInNewContext(source, { document, location, URL, URLSearchParams, TextDecoder, fetch }, { timeout: 1000 }); + assert.equal(typeof init, 'function', 'reader did not register DOMContentLoaded initialization'); + await init(); + return { nodes, calls, cancellations, innerHTMLWrites, home: homeAnchor(html), + state: nodes['document-status'].dataset.state, text: nodes['document-text'].textContent, + documentRequests: calls.filter(c => new URL(c.url).pathname !== '/assets/atlas-documents-v1.json') }; +} + +async function main() { + const index = read('index.html'); + const helper = read('assets/atlas-return-v1.js'); + const readerHTML = read('Delta-Atlas-Document.html'); + const reader = read('assets/atlas-document-v1.js'); + const manifest = JSON.parse(read('assets/atlas-documents-v1.json')); + await check('brand is a native top-level Home anchor wired to progressive enhancement', () => { + const brand = anchors(index).find(a => a.attributes.id === 'brand'); + assert(brand, 'brand anchor missing'); + assert.equal(brand.attributes.href, 'index.html'); + assert.equal(brand.attributes.target, '_top'); + assert(/getElementById\(['"]brand['"]\)\.addEventListener\(['"]click['"],\s*returnToAtlas\)/.test(index)); + assert(/\bdata-atlas-shell="true"/.test(index)); + }); + for (const outcome of [true, false, 'throw']) { + await check('brand preserves native fallback when goHome returns ' + outcome, () => { + const result = invokeBrand(index, outcome); + assert.deepEqual(result.calls, [true]); + assert.equal(result.cancellations.length, outcome === true ? 1 : 0); + }); + } + for (const modifier of ['metaKey', 'ctrlKey', 'shiftKey', 'altKey', 'middle', 'right']) { + await check('brand leaves ' + modifier + ' click native', () => { + const change = modifier === 'middle' ? { button: 1 } : modifier === 'right' ? { button: 2 } : { [modifier]: true }; + const result = invokeBrand(index, true, change); + assert.equal(result.calls.length, 0); + assert.equal(result.cancellations.length, 0); + }); + } + const redirects = new Set(['Agentic-AI-Governance-Map.html', 'Agentic-AI-Governance-Reflections.html']); + const passivePages = new Set(['Delta-Atlas-Library.html', 'Delta-Atlas-Evidence.html', 'Six-Signal-Method.html']); + const pages = fs.readdirSync(root).filter(name => name.endsWith('.html')).sort(); + await check('all standalone content pages and 404 retain native Home without JavaScript', () => { + for (const name of pages.filter(name => name !== 'index.html' && !redirects.has(name))) { + const html = read(name); + assert(homeAnchor(html), name + ': missing static top-level Home link'); + if (name !== 'Delta-Atlas-Document.html') { + assert(/]*class="atlas-return-nav"[^>]*>/.test(markup(html)), name + ': shared Home bar missing'); + if (passivePages.has(name)) { + assert(!/]*rel=["']stylesheet["']/i.test(html), name + ': passive return styling must be inline'); + assert([...html.matchAll(/]*>([\s\S]*?)<\/style>/gi)].some(m => /nav\.atlas-return-nav/.test(m[1])), + name + ': inline return-bar styling missing'); + } else { + assert(/]*src="\/?assets\/atlas-return-v1\.js"[^>]*>/.test(html), name + ': return helper missing'); + } + } + } + }); + for (const mode of ['top', 'ordinary-parent', 'cross-origin', 'atlas']) { + await check('shared Home bar is safe in ' + mode + ' context', () => { + const result = runReturnScript(helper, mode); + assert.equal(result.hidden, mode === 'atlas'); + assert.equal(result.identified, mode === 'atlas' ? 'true' : undefined); + }); + } + await check('public document manifest has its declared shape and existing safe text files', () => { + assert.deepEqual(Object.keys(manifest).sort(), ['files', 'type', 'version']); + assert.equal(manifest.type, 'delta-atlas-public-documents'); + assert.equal(manifest.version, 1); + assert(Array.isArray(manifest.files) && manifest.files.length > 0); + for (const file of manifest.files) { + assert.equal(typeof file, 'string'); + assert(!/[\\?#:\x00-\x1f\x7f]/.test(file) && /\.(md|json|txt)$/i.test(file), 'unsafe manifest entry: ' + file); + assert(file.split('/').every(part => part && part !== '.' && part !== '..' && !['.git', 'node_modules', 'build', 'dist'].includes(part))); + const resolved = path.resolve(root, file); + assert(resolved.startsWith(root + path.sep), 'manifest path escaped repository'); + assert(fs.statSync(resolved).isFile(), 'manifest entry is not an existing file: ' + file); + } + }); + await check('static local text links use the reader and exact approved original paths', () => { + let readerLinks = 0; + for (const page of pages) for (const anchor of anchors(read(page))) { + const href = anchor.attributes.href; + // A same-document fragment (e.g. the reader's skip link) does not select a file. + if (!href || href.startsWith('#')) continue; + const url = new URL(href, 'https://atlas.test/' + page); + if (url.origin !== 'https://atlas.test') continue; + assert(!/\.(md|json|txt)$/i.test(url.pathname), page + ': raw text dead end: ' + href); + if (url.pathname !== '/Delta-Atlas-Document.html') continue; + readerLinks++; + const files = url.searchParams.getAll('file'); + assert.equal(files.length, 1, page + ': reader requires one file'); + assert(manifest.files.includes(files[0]), page + ': document is not approved: ' + files[0]); + assert(fs.statSync(path.join(root, files[0])).isFile(), page + ': original file is missing'); + assert.equal(anchor.attributes.target, '_top', page + ': reader link does not leave a possible embedded tool'); + } + assert(readerLinks > 0, 'no document-reader links were found'); + }); + for (const [file, text, kind] of [['README.md', '# Atlas\nSource **text**.', 'Markdown'], ['terms.json', '{"message":"Atlas"}', 'JSON']]) { + await check('actual reader loads approved ' + kind + ' as source text', async () => { + const result = await runReader(reader, readerHTML, { query: '?file=' + file, text }); + assert.equal(result.state, 'ready'); + assert.equal(result.text, text); + assert.equal(result.nodes['document-text'].hidden, false); + assert.equal(result.nodes['content'].attributes['aria-busy'], 'false'); + assert(result.nodes['document-format'].textContent.includes(kind)); + assert.equal(result.documentRequests.length, 1); + assert.equal(result.nodes['document-download'].href, 'https://atlas.test/' + file); + for (const call of result.calls) { + assert.equal(call.options.mode, 'same-origin'); + assert.equal(call.options.redirect, 'error'); + assert.equal(call.options.credentials, 'omit'); + } + }); + } + await check('HTML-shaped document remains literal text, with Home intact', async () => { + const text = ''; + const result = await runReader(reader, readerHTML, { text }); + assert.equal(result.state, 'ready'); + assert.equal(result.text, text); + assert.equal(result.innerHTMLWrites, 0); + assert(result.home); + }); + for (const [name, query] of [ + ['missing query', ''], ['duplicate query', '?file=README.md&file=terms.json'], + ['traversal', '?file=..%2FREADME.md'], ['external URL', '?file=https%3A%2F%2Fevil.test%2Fx.md'], + ['absolute path', '?file=%2FREADME.md'], ['backslash', '?file=governance%5CREADME.md'], + ['wrong extension', '?file=index.html'], ['NUL', '?file=README%00.md'], + ]) { + await check('reader rejects ' + name + ' before fetching', async () => { + const result = await runReader(reader, readerHTML, { query }); + assert.equal(result.state, 'error'); + assert.equal(result.calls.length, 0); + assert.equal(result.nodes['document-text'].hidden, true); + assert(result.home); + }); + } + await check('syntactically valid but unlisted file cannot be fetched', async () => { + const result = await runReader(reader, readerHTML, { query: '?file=private.md' }); + assert.equal(result.state, 'error'); + assert.equal(result.calls.length, 1); + assert.equal(result.documentRequests.length, 0); + assert.equal(result.nodes['document-download'].hidden, true); + }); + for (const [name, invalid] of [ + ['invalid JSON', '{'], ['wrong identity', { type: 'other', version: 1, files: ['README.md'] }], + ['wrong version', { type: 'delta-atlas-public-documents', version: 2, files: ['README.md'] }], + ['non-array files', { type: 'delta-atlas-public-documents', version: 1, files: 'README.md' }], + ['unsafe path', { type: 'delta-atlas-public-documents', version: 1, files: ['README.md', '../private.md'] }], + ['non-string path', { type: 'delta-atlas-public-documents', version: 1, files: ['README.md', 1] }], + ]) { + await check('reader rejects manifest with ' + name, async () => { + const result = await runReader(reader, readerHTML, { manifest: invalid }); + assert.equal(result.state, 'error'); + assert.equal(result.documentRequests.length, 0); + assert(result.home); + }); + } + for (const [name, options] of [ + ['manifest network failure', { manifestThrows: true }], + ['file network failure', { fileThrows: true }], + ['file HTTP 404', { fileOptions: { ok: false, status: 404 } }], + ]) { + await check('reader retains recovery on ' + name, async () => { + const result = await runReader(reader, readerHTML, options); + assert.equal(result.state, 'error'); + assert.equal(result.nodes['content'].attributes['aria-busy'], 'false'); + assert.equal(result.nodes['document-text'].hidden, true); + assert(result.home); + }); + } + await check('reader accepts the exact 1 MiB boundary', async () => { + const text = 'a'.repeat(1024 * 1024); + const result = await runReader(reader, readerHTML, { text, fileOptions: { length: String(text.length) } }); + assert.equal(result.state, 'ready'); + assert.equal(result.text.length, text.length); + assert.equal(result.cancellations.length, 0); + }); + for (const [name, fileOptions] of [ + ['oversized content-length', { length: String(1024 * 1024 + 1) }], + ['oversized streamed body', { chunks: [new Uint8Array(600000), new Uint8Array(500000)] }], + ]) { + await check('reader bounds ' + name + ' while retaining Download and Home', async () => { + const result = await runReader(reader, readerHTML, { fileOptions }); + assert.equal(result.state, 'large'); + assert.equal(result.nodes['document-text'].hidden, true); + assert.equal(result.nodes['document-download'].hidden, false); + assert(result.cancellations.length > 0); + assert(result.home); + }); + } + console.log(`\n${passed}/${passed + failed} RETURN NAVIGATION checks hold`); + console.log('Coverage: static anchors/link membership and mocked actual JavaScript behavior; no browser layout or universal accessibility claim.'); + process.exitCode = failed ? 1 : 0; +} +main().catch(error => { console.error('FAIL return-navigation harness could not load: ' + error.message); process.exitCode = 1; }); diff --git a/governance/harnesses/verify-six-signal-surface.js b/governance/harnesses/verify-six-signal-surface.js index 33190a6..50ea7fe 100644 --- a/governance/harnesses/verify-six-signal-surface.js +++ b/governance/harnesses/verify-six-signal-surface.js @@ -183,6 +183,7 @@ function navigationFailures(source) { const historyCalls = []; const document = { title: 'unchanged', + getElementById() { return null; }, querySelectorAll() { return []; } }; const context = { frame, home, loading, document, history: { pushState(...args) { historyCalls.push(args); } } }; diff --git a/index.html b/index.html index 4b6f5ae..9215ca5 100644 --- a/index.html +++ b/index.html @@ -1,5 +1,5 @@ - + Delta Atlas @@ -17,7 +17,7 @@ the 100vh line above is the fallback for older browsers. */ #bar{flex:none;display:flex;align-items:center;gap:6px;padding:9px 16px;border-bottom:1px solid var(--line); background:#10281a;position:relative;z-index:10;flex-wrap:wrap;} - #brand{font-weight:700;font-size:14.5px;cursor:pointer;margin-right:8px;letter-spacing:.2px;display:flex;align-items:center;gap:8px;border:0;background:transparent;color:var(--txt);padding:0;} + #brand{font-weight:700;font-size:14.5px;cursor:pointer;margin-right:8px;letter-spacing:.2px;display:flex;align-items:center;gap:8px;border:0;background:transparent;color:var(--txt);padding:0;min-height:44px;text-decoration:none;} #brand .dot{width:9px;height:9px;border-radius:50%;background:var(--accent);box-shadow:0 0 8px var(--accent);} .primary-nav{display:flex;align-items:center;gap:6px;flex-wrap:wrap;} .nav{cursor:pointer;border:1px solid transparent;background:transparent;color:var(--dim);font-size:13px;padding:10px 11px;min-height:44px;border-radius:8px;text-decoration:none;display:inline-flex;align-items:center;} @@ -257,7 +257,7 @@ tiles for feDropShadow over large SVG canvases, showing white boxes on iPad. -->
- + Delta Atlas
-
WHAT THE EVIDENCE SUPPORTSinspect the governance boundary →
-

Evidence status. Candidate source inventory: 439 vocabulary records. Ask and Explore snapshot: 435 records. All 439 source records carry the repository label reviewed, but complete per-term review receipts are not consistently recorded. A term can be sourced and still be wrong. The public data-sync baseline records the disagreement. Source-support scores are heuristics, not truth, confidence, acceptance or safety results.

+
WHAT THE EVIDENCE SUPPORTSinspect the governance boundary →
+

Evidence status. Candidate source inventory: 439 vocabulary records. Ask and Explore snapshot: 435 records. All 439 source records carry the repository label reviewed, but complete per-term review receipts are not consistently recorded. A term can be sourced and still be wrong. The public data-sync baseline records the disagreement. Source-support scores are heuristics, not truth, confidence, acceptance or safety results.

Privacy, local storage and offline use

Your plan and search text are analyzed locally. Atlas does not place submitted text in request URLs or send it to a model or API. Cloudflare Web Analytics may collect ordinary request metadata plus page-performance and visit measurements; read Cloudflare's RUM description.

This browser may retain a one-use Quick handoff, missed-search history, or verification checklist.

-

A successful install pre-caches a defined subset of core routes and engines, not every page. Optional assets and an existing browser cache can vary. Inspect the exact cache list and portability notes.

+

A successful install pre-caches a defined subset of core routes and engines, not every page. Optional assets and an existing browser cache can vary. Inspect the exact cache list and portability notes.

-

Provided as-is for learning and review. The tools do not enforce policy or authorize actions. No affiliation with or endorsement by the organizations cited. Content licensed CC BY 4.0. © 2026 Jake Tiller.

+

Provided as-is for learning and review. The tools do not enforce policy or authorize actions. No affiliation with or endorsement by the organizations cited. Content licensed CC BY 4.0. © 2026 Jake Tiller.

The garden remains visible while its water effect prepares.

@@ -415,7 +415,7 @@

The research question

'White-Paper.html':'White Paper' }); function base(f){ return (f||'').split('?')[0]; } - function setActive(f){ var b=base(f); document.querySelectorAll('.nav').forEach(function(x){ x.classList.toggle('on', x.dataset && x.dataset.f===b); }); } + function setActive(f){ var b=base(f); document.querySelectorAll('.nav').forEach(function(x){ x.classList.toggle('on', x.dataset && x.dataset.f===b); }); var brandLabel=document.getElementById('brand-label'); if(brandLabel)brandLabel.textContent=f?'\u2190 Atlas home':'Delta Atlas'; } function routeFromLocation(){ var h=''; try{h=decodeURIComponent((location.hash||'').replace('#',''));}catch(e){return null;} return Object.prototype.hasOwnProperty.call(NAV_ROUTES,h)?h:null; } function canReplaceFrameLocation(target){ try{return !!target&&!!target.contentWindow&&!!target.contentWindow.location&&typeof target.contentWindow.location.replace==='function';} @@ -432,7 +432,11 @@

The research question

if(!canReplaceFrameLocation(frame)) return false; if(writeHistory!==false){try{ history.pushState({route:routePath},'', '#'+encodeURIComponent(routePath)); }catch(e){return false;}} loading.textContent='Loading '+routeLabel+'\u2026'; - frame.onload=function(){ loading.style.display='none'; frame.focus(); }; + frame.onload=function(){ + // Passive reference pages need no script of their own to share shell navigation. + try{var child=frame.contentDocument, returnNav=child&&child.querySelector('nav.atlas-return-nav'); if(returnNav){child.documentElement.dataset.atlasReturnEmbedded='true';returnNav.hidden=true;}}catch(e){} + loading.style.display='none'; frame.focus(); + }; if(!replaceFrameLocation(frame,routePath)){frame.onload=null; if(writeHistory!==false){try{history.back();}catch(e){}} return false;} home.style.display='none'; frame.style.display='block'; loading.style.display='block'; frame.title=routeLabel; setActive(routePath); document.title=routeLabel; @@ -465,6 +469,12 @@

The research question

} function applyLocation(){ var route=routeFromLocation(); if(route){nav(route,false);}else{goHome(false);} } window.addEventListener('popstate',applyLocation); + // Keep the native Home URL as an escape if frame cleanup or history rejects. + function returnToAtlas(event){ + if(event.button!==0||event.metaKey||event.ctrlKey||event.shiftKey||event.altKey)return; + try{if(goHome(true))event.preventDefault();}catch(e){/* The native link still returns home. */} + } + document.getElementById('brand').addEventListener('click',returnToAtlas); (function(){ applyLocation(); })(); if('serviceWorker' in navigator){ window.addEventListener('load',function(){ navigator.serviceWorker.register('sw.js').catch(function(){}); }); } window.doShare=function(){ var url=location.href; var b=document.getElementById('shareBtn'); diff --git a/proposals.json b/proposals.json index a94768e..255ff11 100644 --- a/proposals.json +++ b/proposals.json @@ -638,6 +638,29 @@ "action": "queued" } ] + }, + { + "id": "keep-atlas-home-reachable-from-standalone-tools", + "date": "2026-09-05", + "source": { + "kind": "model", + "name": "Owner observed missing return controls, especially raw JSON and Markdown on mobile; Codex-assisted repair" + }, + "stream": "site-tools", + "type": "tool", + "title": "Keep Atlas home reachable from standalone tools and public text documents", + "status": "cold-read-pending", + "gates": { + "schema": true, + "corpus": "n/a", + "bench": "n/a" + }, + "log": [ + { + "date": "2026-09-05", + "action": "queued" + } + ] } ] } diff --git a/sw.js b/sw.js index b1e7ae2..42b4a24 100644 --- a/sw.js +++ b/sw.js @@ -3,7 +3,7 @@ // and does not collect application inputs. // Installation is all-or-nothing: a claimed offline shell must have every // declared core dependency, not a silently partial cache. -const CACHE='aaig-v92'; +const CACHE='aaig-v93'; const CORE=[ 'index.html','manifest.webmanifest','evaluate.html','404.html','terms.enriched.json', 'Agentic-AI-Governance-Chat.html','Agentic-AI-Governance-GroundTruth.html','Delta-Atlas-Start.html','Delta-Atlas-Field.html', @@ -12,6 +12,10 @@ const CORE=[ 'Delta-Atlas-ContinuityAudit.html','Delta-Atlas-Evidence.html','Delta-Atlas-Library.html', 'lexicon-engine.js','coherence-score-engine.js', 'assets/garden-home-v1.css','assets/garden-water-v1.js','assets/hanging-garden-v1.webp', + 'Delta-Atlas-Document.html','assets/atlas-return-v1.css','assets/atlas-return-v1.js', + 'assets/atlas-document-v1.css','assets/atlas-document-v1.js','assets/atlas-documents-v1.json', + 'governance/README.md','governance/contracts/atlas-data-sync-baseline.md','llms.txt', + 'research/atlas-snapshot-read-only/README.md','research/atlas-snapshot-read-only/snapshot-card.json', 'Agentic-AI-Governance-Glossary.md','README-Portability.md','Translator-Framework-Design.md','Red-Team-Report.md','Coherence-Ledger-Method.md','LICENSE.txt', 'icon-192.png','icon-512.png','icon-maskable-512.png','favicon.png' ];