diff --git a/community/index.html b/community/index.html index bf4799f..2c3896c 100644 --- a/community/index.html +++ b/community/index.html @@ -22,6 +22,9 @@ + + + diff --git a/demos/index.html b/demos/index.html index cd772dd..f509e40 100644 --- a/demos/index.html +++ b/demos/index.html @@ -71,7 +71,7 @@

Start with one demo

What to look for: demo 1 routes calls through the local gateway and closes the session into a signed record. Software mode does not pass hardware-attestation verification. To explore weight custody, run python demo.py 6; to run the full set without pauses, use python demo.py --no-pause.

Individual commands below: run them from the demos folder with the environment activated. For demos that start cMCP, set export CMCP_BEARER_TOKEN=demo-token first. The demo.py launcher handles this setup for you.

-

What demo 6 actually prints, verbatim from a run on weight-custody-manifest 0.25.0

+

What demo 6 prints on weight-custody-manifest 0.28.2

python demo-06-weight-custody/run.py
@@ -87,10 +87,12 @@

Start with one demo

no human reads 2.8T parameters; the hash does the reading.
4. The fine-tune is the real IP: lineage back to the signed base
lineage verified   : True  depth 1  root is a base: True
-
honest scope       : accountability-grade against an operator who physically
                      owns the silicon (see TEE.fail), not silicon-proof custody.
+
What this is, and is not
+
custody active     : key held under a 1h cadence, wiped on lapse (time_floor sound)
+
honest scope       : accountability-grade against an operator who physically
                      owns the silicon (see TEE.fail), not silicon-proof
                      custody. It IS the provenance the download never gave you.
-

Hashes are truncated here for width; the run prints them in full. Every demo ends with a scope statement like that last one.

+

Shortened for width: hashes are truncated, and the section rules, the gate's enforced: note and the derivative hash are left out. The run prints them all. Every demo ends with a scope statement like that last one.

diff --git a/index.html b/index.html index 3e6ec19..c77cb40 100644 --- a/index.html +++ b/index.html @@ -24,7 +24,7 @@ - + diff --git a/llms.txt b/llms.txt index 40c196f..65e6b2d 100644 --- a/llms.txt +++ b/llms.txt @@ -46,4 +46,7 @@ AgenTrust is the ecosystem at https://agentrust-io.com and the GitHub organizati - [Agent Manifest summary](https://manifest.agentrust-io.com/llms.txt) - [cMCP summary](https://cmcp.agentrust-io.com/llms.txt) - [cA2A summary](https://ca2a.agentrust-io.com/llms.txt) +- [Weight Custody Manifest summary](https://wcm.agentrust-io.com/llms.txt) +- [TRACE conformance suite summary](https://tests.agentrust-io.com/llms.txt) +- [Governance resource directory summary](https://governance.agentrust-io.com/llms.txt) - [Sitemap](https://agentrust-io.com/sitemap.xml): Canonical public pages on this host. diff --git a/marketplace/index.html b/marketplace/index.html index a5befc4..fb95224 100644 --- a/marketplace/index.html +++ b/marketplace/index.html @@ -6,7 +6,7 @@ - + diff --git a/og.png b/og.png index 71e1b18..892e3e3 100644 Binary files a/og.png and b/og.png differ diff --git a/registry/index.html b/registry/index.html index 5865ac3..ad158f0 100644 --- a/registry/index.html +++ b/registry/index.html @@ -16,6 +16,9 @@ + + + diff --git a/tools/DISCOVERY.md b/tools/DISCOVERY.md index 28da6af..0a9f43c 100644 --- a/tools/DISCOVERY.md +++ b/tools/DISCOVERY.md @@ -27,7 +27,7 @@ This fetches both catalogs at one public `agentrust-io/integrations` commit, rec ## Availability checks -After merging, the Public site availability workflow runs every six hours and can be dispatched manually. It reads the deployed sitemap, checks its pages, checks the home/robots/sitemap/AI-guide endpoints of all seven public hosts, and verifies that an unknown URL returns 404. Individual probes retry once. Results are retained as a workflow artifact for 14 days. Maintainers can use GitHub Actions failure notifications to investigate. +After merging, the Public site availability workflow runs every six hours and can be dispatched manually. It reads the deployed sitemap, checks its pages, checks the home/robots/sitemap/AI-guide endpoints of all eight public hosts, and verifies that an unknown URL returns 404. Individual probes retry once. Results are retained as a workflow artifact for 14 days. Maintainers can use GitHub Actions failure notifications to investigate. ```sh python tools/check-availability.py diff --git a/tools/check-availability.py b/tools/check-availability.py index 6825c45..78f8e43 100644 --- a/tools/check-availability.py +++ b/tools/check-availability.py @@ -45,7 +45,7 @@ def main(): urls = {node.text for node in sitemap.findall('.//{http://www.sitemaps.org/schemas/sitemap/0.9}loc')} if not urls or any(not url.startswith(BASE + '/') for url in urls): raise ValueError('Unexpected live sitemap') - for prefix in ['', 'trace.', 'manifest.', 'cmcp.', 'ca2a.', 'governance.', 'tests.']: + for prefix in ['', 'trace.', 'manifest.', 'cmcp.', 'ca2a.', 'governance.', 'tests.', 'wcm.']: urls.update('https://' + prefix + 'agentrust-io.com' + path for path in ['/', '/robots.txt', '/sitemap.xml', '/llms.txt']) targets = [(url, 200) for url in sorted(urls)] + [(BASE + '/missing-availability-probe-404/', 404)] with ThreadPoolExecutor(max_workers=4) as pool: diff --git a/tools/render-og-card.py b/tools/render-og-card.py new file mode 100644 index 0000000..06f0aec --- /dev/null +++ b/tools/render-og-card.py @@ -0,0 +1,90 @@ +"""Render /og.png, the 1200x630 social card for agentrust-io.com, with headless Chrome. + + python tools/render-og-card.py # writes og.png + CHROME=/path/to/chrome python tools/render-og-card.py + +The card is HTML so its words can change with an edit, not a lost design file. +It lives here rather than as a page because every *.html in the repository is a +published page to check-site.py and the sitemap. Keep the words in step with the +homepage hero and with the og:image:alt text the pages use; colours are the brand +navy and red from brand/BRAND.md. + +No --check: a PNG rendered on another machine differs in font hinting, so commit +the rendered file and review it by eye. +""" +import os +from pathlib import Path +import shutil +import subprocess +import sys +import tempfile + +ROOT = Path(__file__).resolve().parents[1] + +EYEBROW = 'Open specifications for verifiable AI' +TITLE = 'AgenTrust' +LEAD = 'Prove what your AI ran, and what it did.' +CHAIN = ['Weights', 'Agent', 'Actions', 'Evidence'] +DOMAIN = 'agentrust-io.com' + +CARD = """ + + + + + + +
+
{eyebrow}
+

{title}

+
+

{lead}

+
{chain}
+
+
{domain}
+
+ + +""" + +CHROME_PATHS = [ + r'C:\Program Files\Google\Chrome\Application\chrome.exe', + '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome', + 'google-chrome', 'chromium', 'chromium-browser', +] + + +def chrome(): + for candidate in [os.environ.get('CHROME')] + CHROME_PATHS: + if candidate and (Path(candidate).is_file() or shutil.which(candidate)): + return candidate + raise SystemExit('Chrome not found. Set CHROME to its path.') + + +def main(): + chain = '  ยท  '.join(f'{i:02d} {step}' for i, step in enumerate(CHAIN, 1)) + html = CARD.format(eyebrow=EYEBROW, title=TITLE, lead=LEAD, chain=chain, domain=DOMAIN) + with tempfile.TemporaryDirectory() as tmp: + card = Path(tmp) / 'og-card.html' + card.write_text(html, encoding='utf-8') + out = ROOT / 'og.png' + subprocess.run([chrome(), '--headless=new', '--disable-gpu', '--hide-scrollbars', + '--force-device-scale-factor=1', '--window-size=1200,630', + f'--screenshot={out}', card.as_uri()], check=True, capture_output=True) + print(f'wrote {out.relative_to(ROOT)}') + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/verify/index.html b/verify/index.html index b03447d..65846f0 100644 --- a/verify/index.html +++ b/verify/index.html @@ -16,6 +16,9 @@ + + +