diff --git a/docs/post/grove/index.html b/docs/post/grove/index.html index a19a3d8..c311da5 100644 --- a/docs/post/grove/index.html +++ b/docs/post/grove/index.html @@ -5,7 +5,7 @@ - + @@ -17,7 +17,7 @@ - The Grove · Shade Tree Grove + Shade Tree Grove Network Stats @@ -37,7 +37,7 @@
-

The Grove,
observed.

+

Shade Tree Grove
Network Stats

A privacy-preserving view of the Grove, built from signed aggregate reports. One tree appears per announced identity, with no identity or location attached.

diff --git a/test/site.selftest.mjs b/test/site.selftest.mjs index aee5a65..4bf8796 100644 --- a/test/site.selftest.mjs +++ b/test/site.selftest.mjs @@ -111,7 +111,7 @@ check("tree imagery remains behind every surface", /body:not\(\.home-page\)::bef check("landing and README lead with the agent and operator outcomes", /

For agents<\/h2>/.test(landing) && !/Install the Proxy/.test(landing) && /

Run a Shade Tree node<\/h2>/.test(landing) && /Add Shade Tree to an agent/.test(readme) && /Run a Shade Tree node to provide cover/.test(readme)); check("landing hero jumps to both role starts and the canonical protocol", /href="#proxy">For agents/.test(landing) && /href="#node">Run a Shade Tree node/.test(landing) && /href="https:\/\/github\.com\/dmarzzz\/shade-tree-node\/blob\/main\/specs\/protocol\.md">How it works/.test(landing) && /class="role-link" href="\.\/agent\/">Agent guide/.test(landing) && /class="role-link" href="\.\/operator\/">Operator guide/.test(landing)); check("About and README carry the approved linked tagline", /
About<\/h2>[\s\S]*?

The grove of Shade Trees gives agents anonymous egress when the clearnet won’t let them through<\/a>\.<\/p>[\s\S]*?<\/section>/.test(landing) && /# Shade Tree Grove\s+Cover for local agents\.\s+The grove of Shade Trees gives agents anonymous egress when the clearnet \[won’t let them\s+through\]\[research-note\]\./.test(readme)); -check("public site branding names Shade Tree Grove without renaming node roles", /Shade Tree Grove<\/title>/.test(landing) && /<span>Shade Tree Grove<\/span>/.test(landing) && /Agent guide · Shade Tree Grove/.test(agentPage) && /Operator guide · Shade Tree Grove/.test(operatorPage) && /The Grove · Shade Tree Grove/.test(grovePage) && /Access-gated onion egress · Shade Tree Grove/.test(research) && /<h2>Run a Shade Tree node<\/h2>/.test(landing) && /Prepare a Shade Tree node/.test(operatorPage)); +check("public site branding names Shade Tree Grove without renaming node roles", /<title>Shade Tree Grove<\/title>/.test(landing) && /<span>Shade Tree Grove<\/span>/.test(landing) && /Agent guide · Shade Tree Grove/.test(agentPage) && /Operator guide · Shade Tree Grove/.test(operatorPage) && /<title>Shade Tree Grove Network Stats<\/title>/.test(grovePage) && /Access-gated onion egress · Shade Tree Grove/.test(research) && /<h2>Run a Shade Tree node<\/h2>/.test(landing) && /Prepare a Shade Tree node/.test(operatorPage)); check("primary navigation restores Research", /<div class="nav-links">[\s\S]*?<a href="\.\/grove\/">Grove<\/a>[\s\S]*?<a href="\.\/research\/">Research<\/a>[\s\S]*?<a href="https:\/\/github\.com\/dmarzzz\/shade-tree-node">Source<\/a>[\s\S]*?<\/div>/.test(landing)); check("landing separates the reputation gate from the network path", /<h3>Reputation gate<\/h3>/.test(landing) && /admission policy, not the proof/.test(landing) && /Groth16 RLN/.test(landing) && /rate-commitment leaf/.test(landing) && /epoch-scoped nullifiers/i.test(landing) && /<h3>Network path<\/h3>/.test(landing) && /signed Canopy/.test(landing) && /target-bound CONNECT tunnel through <a[^>]+>Tor<\/a> to the node’s <a[^>]+>onion service<\/a>/.test(landing) && /Elder Tree handles discovery and stays off the traffic path/.test(landing)); check("landing stacks one graphic under each mechanism", /class="how-stack"[\s\S]*class="how-mechanism"[\s\S]*shade-tree-reputation-mobile\.svg[\s\S]*shade-tree-reputation\.svg[\s\S]*class="how-mechanism"[\s\S]*shade-tree-path-mobile\.svg[\s\S]*shade-tree-path\.svg/.test(landing) && (landing.match(/class="how-mechanism"/g) || []).length === 2 && !/class="how-parts"/.test(landing));