Compare commits
10 commits
00d89ce095
...
39070ffa2f
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
39070ffa2f | ||
|
|
be0d87e323 | ||
|
|
2010719540 | ||
|
|
b8c9e297b6 | ||
|
|
5557126f6a | ||
|
|
7f6447baae | ||
|
|
198e586956 | ||
|
|
44cf57e50a | ||
|
|
177021a7c7 | ||
|
|
cfdc1b30a5 |
82 changed files with 3641 additions and 407 deletions
6
.claude/session-complete.marker
Normal file
6
.claude/session-complete.marker
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"session_completed": true,
|
||||
"closedown_timestamp": "2026-02-11T18:54:22.268Z",
|
||||
"next_action": "compaction_expected",
|
||||
"recovery_doc": "SESSION_CLOSEDOWN_2026-02-11.md"
|
||||
}
|
||||
|
|
@ -5,9 +5,9 @@
|
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>About | Tractatus AI Safety Framework</title>
|
||||
<meta name="description" content="Learn about the Tractatus Framework: our mission, values, team, and commitment to preserving human agency through structural AI safety.">
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1774503360480">
|
||||
<style>
|
||||
/* Accessibility: Skip link */
|
||||
.skip-link { position: absolute; left: -9999px; top: 0; }
|
||||
|
|
@ -29,7 +29,7 @@
|
|||
<a href="#main-content" class="skip-link">Skip to main content</a>
|
||||
|
||||
<!-- Navigation (injected by navbar.js) -->
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Breadcrumb Navigation -->
|
||||
<nav class="bg-gray-50 border-b border-gray-200 py-3" aria-label="Breadcrumb">
|
||||
|
|
@ -314,22 +314,22 @@
|
|||
<!-- Footer -->
|
||||
<!-- Footer -->
|
||||
<!-- Internationalization -->
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/language-selector.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/components/language-selector.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Scroll Animations (Phase 3) -->
|
||||
<script src="/js/scroll-animations.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/scroll-animations.js?v=0.1.2.1774503360480"></script>
|
||||
<!-- Page Transitions (Phase 3) -->
|
||||
<script src="/js/page-transitions.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/page-transitions.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Share CTA functionality -->
|
||||
<script src="/js/share-cta.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/share-cta.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Footer Component -->
|
||||
<script src="/js/components/footer.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/footer.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Feedback System (Governed by Tractatus + Agent Lightning) -->
|
||||
<script src="/js/components/feedback.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/feedback.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -4,15 +4,15 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Admin Dashboard | Tractatus Framework</title>
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1773368467758">
|
||||
<script defer src="/js/admin/auth-check.js?v=0.1.2.1773368467758"></script>
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1774503360480">
|
||||
<script defer src="/js/admin/auth-check.js?v=0.1.2.1774503360480"></script>
|
||||
</head>
|
||||
<body class="bg-gray-50">
|
||||
|
||||
<!-- Navigation -->
|
||||
<div id="admin-navbar" data-page-title="Dashboard" data-page-icon="dashboard"></div>
|
||||
<script src="/js/components/navbar-admin.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/navbar-admin.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Main Content -->
|
||||
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
|
||||
|
|
@ -225,7 +225,7 @@
|
|||
<!-- Modals -->
|
||||
<div id="modal-container"></div>
|
||||
|
||||
<script src="/js/admin/dashboard.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/admin/dashboard.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -5,8 +5,8 @@
|
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>API Reference | Tractatus Framework</title>
|
||||
<meta name="description" content="Complete API reference for Tractatus Framework - endpoints, authentication, request/response formats, and examples.">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1774503360480">
|
||||
<style>
|
||||
.endpoint-badge {
|
||||
@apply inline-block px-2 py-1 rounded text-xs font-mono font-semibold;
|
||||
|
|
@ -871,7 +871,7 @@
|
|||
|
||||
<!-- Footer -->
|
||||
<!-- Footer Component -->
|
||||
<script src="/js/components/footer.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/footer.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -25,9 +25,9 @@
|
|||
<link rel="apple-touch-icon" href="/images/tractatus-icon-new.svg">
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon-new.svg">
|
||||
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1774503360480">
|
||||
|
||||
<style>
|
||||
.article-container { max-width: 800px; margin: 0 auto; padding: 2rem 1.5rem 4rem; }
|
||||
|
|
@ -75,7 +75,7 @@
|
|||
<body class="bg-white">
|
||||
|
||||
<!-- Navigation -->
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<article class="article-container">
|
||||
<header class="article-header">
|
||||
|
|
@ -453,7 +453,7 @@
|
|||
</article>
|
||||
|
||||
<!-- Footer -->
|
||||
<script src="/js/components/footer.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/footer.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -25,9 +25,9 @@
|
|||
<link rel="apple-touch-icon" href="/images/tractatus-icon-new.svg">
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon-new.svg">
|
||||
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1774503360480">
|
||||
|
||||
<style>
|
||||
.article-container { max-width: 800px; margin: 0 auto; padding: 2rem 1.5rem 4rem; }
|
||||
|
|
@ -75,7 +75,7 @@
|
|||
<body class="bg-white">
|
||||
|
||||
<!-- Navigation -->
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<article class="article-container">
|
||||
<header class="article-header">
|
||||
|
|
@ -488,7 +488,7 @@
|
|||
</article>
|
||||
|
||||
<!-- Footer -->
|
||||
<script src="/js/components/footer.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/footer.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -25,9 +25,9 @@
|
|||
<link rel="apple-touch-icon" href="/images/tractatus-icon-new.svg">
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon-new.svg">
|
||||
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1774503360480">
|
||||
|
||||
<style>
|
||||
.article-container { max-width: 800px; margin: 0 auto; padding: 2rem 1.5rem 4rem; }
|
||||
|
|
@ -74,7 +74,7 @@
|
|||
<body class="bg-white">
|
||||
|
||||
<!-- Navigation -->
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<article class="article-container">
|
||||
<header class="article-header">
|
||||
|
|
@ -458,7 +458,7 @@
|
|||
</article>
|
||||
|
||||
<!-- Footer -->
|
||||
<script src="/js/components/footer.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/footer.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -25,9 +25,9 @@
|
|||
<meta name="twitter:image" content="https://agenticgovernance.digital/images/social-preview.png">
|
||||
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon-new.svg">
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1774503360480">
|
||||
<style>
|
||||
.skip-link { position: absolute; left: -9999px; }
|
||||
.skip-link:focus { left: 0; z-index: 100; background: white; padding: 1rem; }
|
||||
|
|
@ -46,7 +46,7 @@
|
|||
|
||||
<!-- Navigation (injected by navbar.js) -->
|
||||
<div id="navbar-placeholder" class="min-h-16"></div>
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Breadcrumb Navigation -->
|
||||
<nav class="bg-gray-50 border-b border-gray-200 py-3" aria-label="Breadcrumb">
|
||||
|
|
@ -172,7 +172,7 @@
|
|||
<section id="guardian-agents" class="bg-gradient-to-br from-teal-50 to-emerald-50 py-16 border-y border-teal-200">
|
||||
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||
<div class="text-center mb-10">
|
||||
<span class="inline-block bg-teal-700 text-white px-4 py-2 rounded-lg font-semibold mb-4 text-sm" data-i18n="guardian.badge">DEPLOYED — MARCH 2026</span>
|
||||
<span class="inline-block bg-teal-600 text-white px-4 py-2 rounded-lg font-semibold mb-4 text-sm" data-i18n="guardian.badge">DEPLOYED — MARCH 2026</span>
|
||||
<h2 class="text-4xl font-bold text-gray-900 mb-4" data-i18n="guardian.heading">Guardian Agents</h2>
|
||||
<p class="text-xl text-gray-600 max-w-3xl mx-auto" data-i18n="guardian.subtitle">
|
||||
Verification without common-mode failure. The watcher is not another speaker — it is a measuring instrument.
|
||||
|
|
@ -251,7 +251,7 @@
|
|||
</div>
|
||||
|
||||
<div class="text-center">
|
||||
<a href="/blog-post.html?slug=guardian-agents-philosophy-of-ai-accountability" class="inline-block bg-teal-700 text-white px-6 py-3 rounded-lg font-semibold hover:bg-teal-800 transition text-sm" data-i18n="guardian.cta_paper">
|
||||
<a href="/blog-post.html?slug=guardian-agents-philosophy-of-ai-accountability" class="inline-block bg-teal-600 text-white px-6 py-3 rounded-lg font-semibold hover:bg-teal-700 transition text-sm" data-i18n="guardian.cta_paper">
|
||||
Read the Research Paper
|
||||
</a>
|
||||
<a href="/village-ai.html#guardian-agents" class="inline-block ml-3 text-teal-700 font-semibold hover:text-teal-900 transition text-sm" data-i18n="guardian.cta_production">
|
||||
|
|
@ -466,16 +466,16 @@
|
|||
</main>
|
||||
|
||||
<!-- Internationalization -->
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1773368467758" defer></script>
|
||||
<script src="/js/components/language-selector.js?v=0.1.2.1773368467758" defer></script>
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1774503360480" defer></script>
|
||||
<script src="/js/components/language-selector.js?v=0.1.2.1774503360480" defer></script>
|
||||
|
||||
<!-- Scroll Animations -->
|
||||
<script src="/js/scroll-animations.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/scroll-animations.js?v=0.1.2.1774503360480"></script>
|
||||
<!-- Page Transitions -->
|
||||
<script src="/js/page-transitions.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/page-transitions.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Footer Component -->
|
||||
<script src="/js/components/footer.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/footer.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -31,8 +31,9 @@
|
|||
<!-- RSS Feed -->
|
||||
<link rel="alternate" type="application/rss+xml" title="Tractatus Blog RSS Feed" href="/api/blog/rss">
|
||||
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/blog-presentation.css?v=0.1.2.1774503360480">
|
||||
<style>
|
||||
/* Accessibility: Skip link */
|
||||
.skip-link { position: absolute; left: -9999px; top: 0; }
|
||||
|
|
@ -46,6 +47,10 @@
|
|||
a:focus:not(:focus-visible) { outline: none; }
|
||||
a:focus-visible { outline: 3px solid #3b82f6; outline-offset: 2px; }
|
||||
|
||||
/* Hide article when presentation mode is active */
|
||||
body.presentation-active #main-content,
|
||||
body.presentation-active .bg-white.border-b { display: none; }
|
||||
|
||||
/* Blog content styling */
|
||||
.blog-content {
|
||||
line-height: 1.8;
|
||||
|
|
@ -120,7 +125,7 @@
|
|||
<a href="#main-content" class="skip-link">Skip to main content</a>
|
||||
|
||||
<!-- Navigation (injected by navbar.js) -->
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Breadcrumb -->
|
||||
<div class="bg-white border-b border-gray-200">
|
||||
|
|
@ -210,6 +215,18 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Presentation Mode Button -->
|
||||
<div id="presentation-btn-container" class="mb-8">
|
||||
<button id="enter-presentation"
|
||||
class="inline-flex items-center text-sm text-indigo-600 border border-indigo-200 bg-indigo-50 px-4 py-2 rounded-lg hover:bg-indigo-100 transition"
|
||||
title="View as slide presentation">
|
||||
<svg class="w-4 h-4 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 4v16M17 4v16M3 8h4m10 0h4M3 12h18M3 16h4m10 0h4M4 20h16a1 1 0 001-1V5a1 1 0 00-1-1H4a1 1 0 00-1 1v14a1 1 0 001 1z"/>
|
||||
</svg>
|
||||
Present as Slides
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<!-- Post Body -->
|
||||
<div id="post-body" class="blog-content prose prose-lg max-w-none mb-12"></div>
|
||||
|
||||
|
|
@ -244,13 +261,14 @@
|
|||
<!-- Footer -->
|
||||
|
||||
<!-- Newsletter Component -->
|
||||
<script src="/js/components/newsletter.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/newsletter.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Load Blog Post JavaScript -->
|
||||
<script src="/js/blog-post.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/blog-presentation.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/blog-post.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Footer Component -->
|
||||
<script src="/js/components/footer.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/footer.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -28,8 +28,8 @@
|
|||
<!-- RSS Feed -->
|
||||
<link rel="alternate" type="application/rss+xml" title="Tractatus Blog RSS Feed" href="/api/blog/rss">
|
||||
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1774503360480">
|
||||
<style>
|
||||
/* Accessibility: Skip link */
|
||||
.skip-link { position: absolute; left: -9999px; top: 0; }
|
||||
|
|
@ -52,7 +52,7 @@
|
|||
<a href="#main-content" class="skip-link">Skip to main content</a>
|
||||
|
||||
<!-- Navigation (injected by navbar.js) -->
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Hero Section -->
|
||||
<div class="bg-gradient-to-br from-indigo-50 to-blue-50 py-20">
|
||||
|
|
@ -187,17 +187,17 @@
|
|||
|
||||
<!-- Footer -->
|
||||
<!-- Internationalization (must load first for footer translations) -->
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/language-selector.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/components/language-selector.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Newsletter Component -->
|
||||
<script src="/js/components/newsletter.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/newsletter.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Load Blog JavaScript -->
|
||||
<script src="/js/blog.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/blog.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Footer Component -->
|
||||
<script src="/js/components/footer.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/footer.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -4,9 +4,9 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title data-i18n="page.title">Submit Case Study | Tractatus AI Safety</title>
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1774503360480">
|
||||
<style>
|
||||
/* Accessibility: Skip link */
|
||||
.skip-link { position: absolute; left: -9999px; top: 0; }
|
||||
|
|
@ -80,8 +80,8 @@
|
|||
<a href="#main-content" class="skip-link">Skip to main content</a>
|
||||
|
||||
<!-- Navigation (injected by navbar.js) -->
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Main Content -->
|
||||
<main id="main-content" class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
|
||||
|
|
@ -220,11 +220,11 @@
|
|||
</main>
|
||||
|
||||
<!-- Footer -->
|
||||
<script src="/js/components/language-selector.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/case-submission.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/language-selector.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/case-submission.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Footer Component -->
|
||||
<script src="/js/components/footer.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/footer.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -42,6 +42,6 @@
|
|||
</ol>
|
||||
</div>
|
||||
|
||||
<script src="/js/check-version.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/check-version.js?v=0.1.2.1774503360480"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
385
public/css/blog-presentation.css
Normal file
385
public/css/blog-presentation.css
Normal file
|
|
@ -0,0 +1,385 @@
|
|||
/**
|
||||
* Blog Presentation Mode
|
||||
* Full-viewport slide renderer for blog posts
|
||||
* Zero dependencies — pure CSS
|
||||
*/
|
||||
|
||||
/* ─── Presentation container ─── */
|
||||
.presentation-mode {
|
||||
position: fixed;
|
||||
inset: 0;
|
||||
z-index: 9999;
|
||||
background: #0f172a;
|
||||
color: #f8fafc;
|
||||
overflow: hidden;
|
||||
font-family: 'Inter', system-ui, -apple-system, sans-serif;
|
||||
}
|
||||
|
||||
/* ─── Slide viewport ─── */
|
||||
.presentation-slides {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.presentation-slide {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
padding: 4rem 8rem;
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
transition: opacity 0.4s ease, transform 0.4s ease;
|
||||
transform: translateX(40px);
|
||||
}
|
||||
|
||||
.presentation-slide.active {
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
transform: translateX(0);
|
||||
}
|
||||
|
||||
.presentation-slide.exiting-left {
|
||||
opacity: 0;
|
||||
transform: translateX(-40px);
|
||||
}
|
||||
|
||||
/* ─── Title slide ─── */
|
||||
.presentation-slide.slide-title {
|
||||
text-align: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.presentation-slide.slide-title h1 {
|
||||
font-size: 3rem;
|
||||
font-weight: 800;
|
||||
line-height: 1.15;
|
||||
margin-bottom: 1.5rem;
|
||||
background: linear-gradient(135deg, #818cf8, #6366f1, #a78bfa);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
}
|
||||
|
||||
.presentation-slide.slide-title .slide-subtitle {
|
||||
font-size: 1.25rem;
|
||||
color: #94a3b8;
|
||||
max-width: 40rem;
|
||||
margin: 0 auto 2rem;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.presentation-slide.slide-title .slide-meta {
|
||||
font-size: 0.875rem;
|
||||
color: #64748b;
|
||||
}
|
||||
|
||||
/* ─── Content slides ─── */
|
||||
.slide-heading {
|
||||
font-size: 2.25rem;
|
||||
font-weight: 700;
|
||||
margin-bottom: 2.5rem;
|
||||
color: #e2e8f0;
|
||||
line-height: 1.2;
|
||||
border-bottom: 3px solid #6366f1;
|
||||
padding-bottom: 0.75rem;
|
||||
}
|
||||
|
||||
.slide-bullets {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
max-width: 52rem;
|
||||
}
|
||||
|
||||
.slide-bullets li {
|
||||
font-size: 1.5rem;
|
||||
line-height: 1.5;
|
||||
margin-bottom: 1.25rem;
|
||||
padding-left: 2rem;
|
||||
position: relative;
|
||||
color: #cbd5e1;
|
||||
}
|
||||
|
||||
.slide-bullets li::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0.65rem;
|
||||
width: 0.5rem;
|
||||
height: 0.5rem;
|
||||
border-radius: 50%;
|
||||
background: #6366f1;
|
||||
}
|
||||
|
||||
/* ─── Navigation bar ─── */
|
||||
.presentation-nav {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 0.75rem 2rem;
|
||||
background: rgba(15, 23, 42, 0.9);
|
||||
border-top: 1px solid #1e293b;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.presentation-nav button {
|
||||
background: none;
|
||||
border: 1px solid #334155;
|
||||
color: #94a3b8;
|
||||
padding: 0.5rem 1rem;
|
||||
border-radius: 0.375rem;
|
||||
cursor: pointer;
|
||||
font-size: 0.875rem;
|
||||
transition: all 0.2s;
|
||||
}
|
||||
|
||||
.presentation-nav button:hover {
|
||||
background: #1e293b;
|
||||
color: #e2e8f0;
|
||||
border-color: #475569;
|
||||
}
|
||||
|
||||
.presentation-nav button:disabled {
|
||||
opacity: 0.3;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.presentation-nav button:disabled:hover {
|
||||
background: none;
|
||||
color: #94a3b8;
|
||||
border-color: #334155;
|
||||
}
|
||||
|
||||
.slide-counter {
|
||||
font-size: 0.875rem;
|
||||
color: #64748b;
|
||||
font-variant-numeric: tabular-nums;
|
||||
}
|
||||
|
||||
.slide-progress {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
height: 3px;
|
||||
background: #6366f1;
|
||||
transition: width 0.4s ease;
|
||||
}
|
||||
|
||||
/* ─── Notes panel ─── */
|
||||
.presentation-notes {
|
||||
position: absolute;
|
||||
bottom: 3.5rem;
|
||||
left: 0;
|
||||
right: 0;
|
||||
max-height: 0;
|
||||
overflow: hidden;
|
||||
background: #1e293b;
|
||||
border-top: 1px solid #334155;
|
||||
transition: max-height 0.3s ease;
|
||||
z-index: 5;
|
||||
}
|
||||
|
||||
.presentation-notes.open {
|
||||
max-height: 14rem;
|
||||
}
|
||||
|
||||
.presentation-notes-inner {
|
||||
padding: 1.25rem 2rem;
|
||||
}
|
||||
|
||||
.presentation-notes-label {
|
||||
font-size: 0.75rem;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.05em;
|
||||
color: #6366f1;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.presentation-notes-text {
|
||||
font-size: 0.9375rem;
|
||||
line-height: 1.6;
|
||||
color: #94a3b8;
|
||||
max-height: 10rem;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
/* ─── Keyboard hints (shown briefly on enter) ─── */
|
||||
.presentation-hints {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
background: rgba(30, 41, 59, 0.95);
|
||||
border: 1px solid #334155;
|
||||
border-radius: 0.75rem;
|
||||
padding: 2rem 3rem;
|
||||
z-index: 20;
|
||||
opacity: 0;
|
||||
pointer-events: none;
|
||||
transition: opacity 0.3s;
|
||||
}
|
||||
|
||||
.presentation-hints.visible {
|
||||
opacity: 1;
|
||||
pointer-events: auto;
|
||||
}
|
||||
|
||||
.presentation-hints h3 {
|
||||
font-size: 1rem;
|
||||
font-weight: 600;
|
||||
color: #e2e8f0;
|
||||
margin-bottom: 1rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.presentation-hints dl {
|
||||
display: grid;
|
||||
grid-template-columns: auto 1fr;
|
||||
gap: 0.5rem 1.5rem;
|
||||
}
|
||||
|
||||
.presentation-hints dt {
|
||||
font-family: monospace;
|
||||
font-size: 0.875rem;
|
||||
color: #6366f1;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.presentation-hints dd {
|
||||
font-size: 0.875rem;
|
||||
color: #94a3b8;
|
||||
}
|
||||
|
||||
/* ─── Responsive ─── */
|
||||
@media (max-width: 768px) {
|
||||
.presentation-slide {
|
||||
padding: 3rem 2rem;
|
||||
}
|
||||
|
||||
.presentation-slide.slide-title h1 {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.slide-heading {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
.slide-bullets li {
|
||||
font-size: 1.125rem;
|
||||
}
|
||||
|
||||
.presentation-nav {
|
||||
padding: 0.5rem 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.presentation-slide {
|
||||
padding: 2rem 1.25rem;
|
||||
}
|
||||
|
||||
.presentation-slide.slide-title h1 {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
.slide-heading {
|
||||
font-size: 1.25rem;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.slide-bullets li {
|
||||
font-size: 1rem;
|
||||
margin-bottom: 0.75rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* ─── Print: one slide per page ─── */
|
||||
@media print {
|
||||
.presentation-mode {
|
||||
position: static;
|
||||
background: white;
|
||||
color: #1f2937;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
.presentation-slides {
|
||||
position: static;
|
||||
}
|
||||
|
||||
.presentation-slide {
|
||||
position: static;
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
transform: none;
|
||||
page-break-after: always;
|
||||
min-height: 100vh;
|
||||
padding: 3rem 4rem;
|
||||
border-bottom: 1px solid #e5e7eb;
|
||||
}
|
||||
|
||||
.presentation-slide:last-child {
|
||||
page-break-after: avoid;
|
||||
}
|
||||
|
||||
.presentation-slide.slide-title h1 {
|
||||
background: none;
|
||||
-webkit-text-fill-color: #1f2937;
|
||||
color: #1f2937;
|
||||
}
|
||||
|
||||
.slide-heading {
|
||||
color: #1f2937;
|
||||
border-bottom-color: #6366f1;
|
||||
}
|
||||
|
||||
.slide-bullets li {
|
||||
color: #374151;
|
||||
}
|
||||
|
||||
.slide-bullets li::before {
|
||||
background: #6366f1;
|
||||
}
|
||||
|
||||
.presentation-nav,
|
||||
.slide-progress,
|
||||
.presentation-hints {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.presentation-notes {
|
||||
position: static;
|
||||
max-height: none;
|
||||
overflow: visible;
|
||||
background: #f9fafb;
|
||||
border: 1px solid #e5e7eb;
|
||||
border-radius: 0.5rem;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
.presentation-notes.open,
|
||||
.presentation-notes {
|
||||
max-height: none;
|
||||
}
|
||||
|
||||
.presentation-notes-inner {
|
||||
padding: 1rem 1.5rem;
|
||||
}
|
||||
|
||||
.presentation-notes-label {
|
||||
color: #6366f1;
|
||||
}
|
||||
|
||||
.presentation-notes-text {
|
||||
color: #4b5563;
|
||||
max-height: none;
|
||||
overflow: visible;
|
||||
}
|
||||
}
|
||||
10
public/css/lib/github-dark.min.css
vendored
Normal file
10
public/css/lib/github-dark.min.css
vendored
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*!
|
||||
Theme: GitHub Dark
|
||||
Description: Dark theme as seen on github.com
|
||||
Author: github.com
|
||||
Maintainer: @Hirse
|
||||
Updated: 2021-05-15
|
||||
|
||||
Outdated base version: https://github.com/primer/github-syntax-dark
|
||||
Current colors taken from GitHub's CSS
|
||||
*/.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#79c0ff}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-code,.hljs-comment,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c}
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -4,8 +4,8 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Documentation - Tractatus Framework</title>
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1774503360480">
|
||||
<style>
|
||||
/* Prose styling for document content - uses plain CSS (not @apply, which is build-time only) */
|
||||
.prose h1 { font-size: 1.875rem; font-weight: 700; margin-top: 2rem; margin-bottom: 1rem; color: #111827; line-height: 1.2; }
|
||||
|
|
@ -89,12 +89,12 @@
|
|||
</div>
|
||||
|
||||
<!-- Scripts -->
|
||||
<script src="/js/utils/api.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/utils/router.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/document-viewer.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/code-copy-button.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/toc.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/docs-viewer-app.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/utils/api.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/utils/router.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/components/document-viewer.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/components/code-copy-button.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/components/toc.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/docs-viewer-app.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -38,9 +38,9 @@
|
|||
<meta name="apple-mobile-web-app-title" content="Tractatus">
|
||||
<link rel="apple-touch-icon" href="/images/tractatus-icon-new.svg">
|
||||
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1774503360480">
|
||||
<style>
|
||||
html { scroll-behavior: smooth; }
|
||||
|
||||
|
|
@ -511,7 +511,7 @@
|
|||
<a href="#main-content" class="skip-link">Skip to main content</a>
|
||||
|
||||
<!-- Navigation (injected by navbar.js) -->
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1773368467758" defer></script>
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1774503360480" defer></script>
|
||||
|
||||
<!-- Page Header -->
|
||||
<div class="bg-white border-b border-gray-200">
|
||||
|
|
@ -582,7 +582,7 @@
|
|||
<p class="font-medium">JavaScript is required to browse documentation interactively.</p>
|
||||
<p>You can also access the documentation directly:</p>
|
||||
<ul class="list-disc pl-5 space-y-1">
|
||||
<li><a href="https://github.com/AgenticGovernance/tractatus-framework" class="text-blue-600 hover:underline">GitHub Repository</a></li>
|
||||
<li><a href="/source-code.html" class="text-blue-600 hover:underline">Source Code</a></li>
|
||||
<li><a href="/architecture.html" class="text-blue-600 hover:underline">Architecture Overview</a></li>
|
||||
<li><a href="/implementer.html" class="text-blue-600 hover:underline">Implementation Guide</a></li>
|
||||
<li><a href="/researcher.html" class="text-blue-600 hover:underline">Research Foundations</a></li>
|
||||
|
|
@ -593,37 +593,33 @@
|
|||
<div class="text-sm text-gray-500">Loading...</div>
|
||||
</div>
|
||||
|
||||
<!-- GitHub Section -->
|
||||
<!-- Source Code Section -->
|
||||
<div class="mt-6 pt-6 border-t border-gray-200">
|
||||
<h3 class="font-semibold text-gray-900 mb-3 flex items-center gap-2">
|
||||
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
|
||||
<path fill-rule="evenodd" d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z" clip-rule="evenodd"/>
|
||||
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4"/>
|
||||
</svg>
|
||||
GitHub
|
||||
Source Code
|
||||
</h3>
|
||||
<div class="space-y-2">
|
||||
<a href="https://github.com/AgenticGovernance/tractatus-framework"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
<a href="/source-code.html"
|
||||
class="flex items-center gap-2 p-2 rounded-lg hover:bg-gray-50 transition group">
|
||||
<svg class="w-4 h-4 text-gray-600 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4"/>
|
||||
</svg>
|
||||
<div class="flex-1 min-w-0">
|
||||
<div class="text-sm font-medium text-gray-900 group-hover:text-gray-700 transition">Public Repository</div>
|
||||
<div class="text-xs text-gray-500">Source code, examples & contributions</div>
|
||||
<div class="text-sm font-medium text-gray-900 group-hover:text-gray-700 transition">Sovereign Repository</div>
|
||||
<div class="text-xs text-gray-500">Source code hosted on sovereign infrastructure</div>
|
||||
</div>
|
||||
</a>
|
||||
<a href="https://github.com/AgenticGovernance/tractatus-framework#readme"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
<a href="/implementer.html"
|
||||
class="flex items-center gap-2 p-2 rounded-lg hover:bg-gray-50 transition group">
|
||||
<svg class="w-4 h-4 text-gray-600 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"/>
|
||||
</svg>
|
||||
<div class="flex-1 min-w-0">
|
||||
<div class="text-sm font-medium text-gray-900 group-hover:text-gray-700 transition">README & Quick Start</div>
|
||||
<div class="text-xs text-gray-500">Installation and getting started guide</div>
|
||||
<div class="text-sm font-medium text-gray-900 group-hover:text-gray-700 transition">Implementation Guide</div>
|
||||
<div class="text-xs text-gray-500">Architecture, deployment & integration</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
|
@ -672,7 +668,7 @@
|
|||
</ul>
|
||||
<h3>Source Code</h3>
|
||||
<ul>
|
||||
<li><a href="https://github.com/AgenticGovernance/tractatus-framework">GitHub Repository</a> — Apache 2.0 licensed</li>
|
||||
<li><a href="/source-code.html">Source Code</a> — Apache 2.0 licensed, sovereign infrastructure</li>
|
||||
</ul>
|
||||
</div>
|
||||
</noscript>
|
||||
|
|
@ -915,15 +911,15 @@
|
|||
|
||||
<!-- Version Management & PWA -->
|
||||
|
||||
<script src="/js/version-manager.js?v=0.1.2.1773368467758" defer></script>
|
||||
<script src="/js/version-manager.js?v=0.1.2.1774503360480" defer></script>
|
||||
|
||||
<script src="/js/components/document-cards.js?v=0.1.2.1773368467758" defer></script>
|
||||
<script src="/js/docs-app.js?v=0.1.2.1773368467758" defer></script>
|
||||
<script src="/js/docs-search-enhanced.js?v=0.1.2.1773368467758" defer></script>
|
||||
<script src="/js/components/document-cards.js?v=0.1.2.1774503360480" defer></script>
|
||||
<script src="/js/docs-app.js?v=0.1.2.1774503360480" defer></script>
|
||||
<script src="/js/docs-search-enhanced.js?v=0.1.2.1774503360480" defer></script>
|
||||
|
||||
<!-- Internationalization -->
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1773368467758" defer></script>
|
||||
<script src="/js/components/language-selector.js?v=0.1.2.1773368467758" defer></script>
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1774503360480" defer></script>
|
||||
<script src="/js/components/language-selector.js?v=0.1.2.1774503360480" defer></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -18,21 +18,21 @@
|
|||
<meta name="apple-mobile-web-app-title" content="Tractatus">
|
||||
<link rel="apple-touch-icon" href="/images/tractatus-icon-new.svg">
|
||||
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1774503360480">
|
||||
|
||||
<!-- Syntax highlighting for code blocks -->
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github-dark.min.css?v=0.1.2.1773368467758">
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/bash.min.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/javascript.min.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/json.min.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/yaml.min.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/python.min.js?v=0.1.2.1773368467758"></script>
|
||||
<!-- Syntax highlighting for code blocks (self-hosted) -->
|
||||
<link rel="stylesheet" href="/css/lib/github-dark.min.css?v=0.1.2.1774503360480">
|
||||
<script src="/js/lib/highlight.min.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/lib/highlight-bash.min.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/lib/highlight-javascript.min.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/lib/highlight-json.min.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/lib/highlight-yaml.min.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/lib/highlight-python.min.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Markdown parser -->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/11.0.0/marked.min.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/lib/marked.min.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<style>
|
||||
/* Accessibility: Skip link */
|
||||
|
|
@ -327,7 +327,7 @@
|
|||
<a href="#main-content" class="skip-link">Skip to main content</a>
|
||||
|
||||
<!-- Navigation -->
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Hero -->
|
||||
<div class="bg-gradient-to-br from-blue-50 to-indigo-50 py-16">
|
||||
|
|
@ -446,11 +446,11 @@
|
|||
</svg>
|
||||
<span data-i18n="still_have_questions.submit_case_study_btn">Submit a Case Study</span>
|
||||
</a>
|
||||
<a href="https://github.com/AgenticGovernance/tractatus-framework/issues" target="_blank" rel="noopener noreferrer" class="bg-blue-700 text-white px-6 py-3 rounded-lg font-semibold hover:bg-blue-800 transition border-2 border-white inline-flex items-center gap-2">
|
||||
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
|
||||
<path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.430.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/>
|
||||
<a href="/media-inquiry.html" class="bg-blue-700 text-white px-6 py-3 rounded-lg font-semibold hover:bg-blue-800 transition border-2 border-white inline-flex items-center gap-2">
|
||||
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"/>
|
||||
</svg>
|
||||
<span data-i18n="still_have_questions.github_discussions_btn">GitHub Discussions</span>
|
||||
<span data-i18n="still_have_questions.contact_btn">Contact Us</span>
|
||||
</a>
|
||||
<a href="/media-inquiry.html" class="bg-blue-600 text-white px-6 py-3 rounded-lg font-semibold hover:bg-blue-700 transition border-2 border-blue-400 inline-flex items-center gap-2">
|
||||
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
|
|
@ -632,17 +632,17 @@
|
|||
</div>
|
||||
|
||||
<!-- Internationalization -->
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/language-selector.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/components/language-selector.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Version Management & PWA -->
|
||||
|
||||
<script src="/js/version-manager.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/version-manager.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<script src="/js/faq.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/faq.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Footer Component -->
|
||||
<script src="/js/components/footer.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/footer.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -27,9 +27,9 @@
|
|||
<link rel="manifest" href="/manifest.json">
|
||||
<meta name="theme-color" content="#3b82f6">
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon-new.svg">
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1774503360480">
|
||||
<style>
|
||||
.skip-link { position: absolute; left: -9999px; top: 0; }
|
||||
.skip-link:focus { left: 0; z-index: 100; background: white; padding: 1rem; border: 2px solid #3b82f6; }
|
||||
|
|
@ -72,7 +72,7 @@
|
|||
<body class="bg-gray-50">
|
||||
|
||||
<a href="#main-content" class="skip-link">Skip to main content</a>
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Breadcrumb -->
|
||||
<nav class="bg-gray-50 border-b border-gray-200 py-3" aria-label="Breadcrumb">
|
||||
|
|
@ -356,7 +356,7 @@
|
|||
<div class="border-l-4 border-red-500 bg-red-50 p-4 rounded-r-lg">
|
||||
<h4 class="font-semibold text-gray-900 mb-2"><span data-i18n="hooks.example_1_icon">🚫</span> <span data-i18n="hooks.example_1_title">GitHub URL Protection (inst_084)</span></h4>
|
||||
<p class="text-sm text-gray-700 mb-3" data-i18n="hooks.example_1_desc">
|
||||
AI attempted to change GitHub repository URL from <code class="bg-white px-1 rounded">tractatus-framework</code> (public)
|
||||
AI attempted to change source code repository URL from <code class="bg-white px-1 rounded">tractatus-framework</code> (public)
|
||||
to <code class="bg-white px-1 rounded">tractatus</code> (private).
|
||||
</p>
|
||||
<div class="bg-white rounded p-3 text-xs font-mono mb-2">
|
||||
|
|
@ -452,12 +452,12 @@
|
|||
<li data-i18n="hooks.exit_code_0"><code class="bg-gray-100 px-2 py-1 rounded">0</code> = PASS → Tool executes</li>
|
||||
<li data-i18n="hooks.exit_code_2"><code class="bg-gray-100 px-2 py-1 rounded">2</code> = HARD BLOCK → Tool execution halted, error shown to user</li>
|
||||
</ul>
|
||||
<pre class="bg-gray-900 text-gray-100 p-4 rounded-lg text-xs overflow-x-auto mt-3"><code>// validate-file-edit.js (line 373-382)
|
||||
const githubUrlCheck = checkGitHubURLProtection();
|
||||
if (!githubUrlCheck.passed) {
|
||||
error(githubUrlCheck.reason);
|
||||
console.error(githubUrlCheck.output);
|
||||
logMetrics('blocked', githubUrlCheck.reason);
|
||||
<pre class="bg-gray-900 text-gray-100 p-4 rounded-lg text-xs overflow-x-auto mt-3"><code>// validate-file-edit.js — boundary enforcement example
|
||||
const sovereigntyCheck = checkDataSovereignty();
|
||||
if (!sovereigntyCheck.passed) {
|
||||
error(sovereigntyCheck.reason);
|
||||
console.error(sovereigntyCheck.output);
|
||||
logMetrics('blocked', sovereigntyCheck.reason);
|
||||
process.exit(2); // ← HARD BLOCK: Tool cannot execute
|
||||
}</code></pre>
|
||||
</div>
|
||||
|
|
@ -474,7 +474,7 @@ if (!githubUrlCheck.passed) {
|
|||
"timestamp": "2025-10-26T22:02:15.XXX",
|
||||
"file": "/public/implementer.html",
|
||||
"result": "blocked",
|
||||
"reason": "inst_084: GitHub repository name change detected"
|
||||
"reason": "inst_084: source code repository name change detected"
|
||||
}</code></pre>
|
||||
</div>
|
||||
|
||||
|
|
@ -707,7 +707,7 @@ const result = await orchestrate(decision, stakeholders)
|
|||
<div class="mt-8 bg-blue-50 border-l-4 border-blue-500 p-6 rounded-r-lg">
|
||||
<p class="text-sm text-blue-900 font-medium mb-2" data-i18n="services.source_code_label">📁 Source Code</p>
|
||||
<p class="text-sm text-blue-800" data-i18n="services.source_code_desc">
|
||||
Code patterns and examples are available in the <a href="https://github.com/AgenticGovernance/tractatus-framework" class="underline font-medium hover:text-blue-900" target="_blank" rel="noopener noreferrer">GitHub repository</a>.
|
||||
Code patterns and examples are available in the <a href="/source-code.html" class="underline font-medium hover:text-blue-900" target="_blank" rel="noopener noreferrer">source code repository</a>.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -966,7 +966,7 @@ if (validation.status === 'REJECTED') {
|
|||
<div class="bg-white rounded-lg shadow-lg p-8">
|
||||
<h3 class="text-xl font-bold text-gray-900 mb-4">Installation</h3>
|
||||
<pre class="bg-gray-900 text-gray-100 p-4 rounded-lg overflow-x-auto text-sm mb-4"><code># Clone the framework repository
|
||||
git clone https://github.com/AgenticGovernance/tractatus-framework.git
|
||||
git clone /source-code.html.git
|
||||
cd tractatus-framework
|
||||
|
||||
# Install dependencies
|
||||
|
|
@ -985,7 +985,7 @@ npm start</code></pre>
|
|||
<div class="mt-6 bg-blue-50 border-l-4 border-blue-500 p-4 rounded-r-lg">
|
||||
<p class="text-sm text-blue-900 font-medium mb-2">📖 Full Documentation</p>
|
||||
<p class="text-sm text-blue-800">
|
||||
Complete deployment patterns and examples available in the <a href="https://github.com/AgenticGovernance/tractatus-framework" class="underline font-medium hover:text-blue-900" target="_blank" rel="noopener noreferrer">GitHub repository</a>.
|
||||
Complete deployment patterns and examples available in the <a href="/source-code.html" class="underline font-medium hover:text-blue-900" target="_blank" rel="noopener noreferrer">source code repository</a>.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -1163,7 +1163,7 @@ function routeQuery(query, governanceContext) {
|
|||
|
||||
<div class="mt-6 bg-amber-50 border-l-4 border-amber-600 p-4 rounded-r-lg">
|
||||
<p class="text-sm text-amber-900" data-i18n="village_ai_arch.status_note">
|
||||
<strong>Status:</strong> Inference governance operational. Sovereign training pipeline installation in progress. Production deployment at Village Home Trust validates governance portability across model architectures.
|
||||
<strong>Status:</strong> Inference governance operational. Sovereign training pipeline installation in progress. Production deployment at the Village platform validates governance portability across model architectures.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
|
@ -1785,7 +1785,7 @@ for user_message in conversation:
|
|||
<div class="border-2 border-blue-200 rounded-lg p-4 hover:border-blue-400 transition">
|
||||
<h4 class="font-bold text-gray-900 mb-2" data-i18n="roadmap.contributors_title">Technical Contributors</h4>
|
||||
<p class="text-sm text-gray-600 mb-3" data-i18n="roadmap.contributors_desc">Implement features, fix bugs, improve documentation</p>
|
||||
<a href="https://github.com/AgenticGovernance/tractatus-framework/blob/main/CONTRIBUTING.md"
|
||||
<a href="/source-code.html"
|
||||
class="text-blue-600 hover:text-blue-700 text-sm font-medium"
|
||||
target="_blank" rel="noopener noreferrer">
|
||||
<span data-i18n="roadmap.contributors_link">→ Contributing Guide</span>
|
||||
|
|
@ -1829,11 +1829,11 @@ for user_message in conversation:
|
|||
<h3 class="text-xl font-bold text-gray-900 mb-4" data-i18n="resources.docs_title">Documentation</h3>
|
||||
<ul class="space-y-3">
|
||||
<li>
|
||||
<a href="https://github.com/AgenticGovernance/tractatus-framework"
|
||||
<a href="/source-code.html"
|
||||
class="text-blue-600 hover:text-blue-700 font-medium"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer">
|
||||
<span data-i18n="resources.docs_github">→ GitHub Repository</span>
|
||||
<span data-i18n="resources.docs_source">→ Source Code Repository</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
|
|
@ -1892,7 +1892,7 @@ for user_message in conversation:
|
|||
<span class="text-gray-500 ml-2" data-i18n="resources.reference_tests_value">35 test suites</span>
|
||||
</li>
|
||||
<li class="pt-3">
|
||||
<a href="https://github.com/AgenticGovernance/tractatus-framework"
|
||||
<a href="/source-code.html"
|
||||
class="text-blue-600 hover:text-blue-700 font-medium"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer">
|
||||
|
|
@ -1909,7 +1909,7 @@ for user_message in conversation:
|
|||
</p>
|
||||
<ul class="space-y-3">
|
||||
<li>
|
||||
<a href="https://github.com/AgenticGovernance/tractatus-framework/issues"
|
||||
<a href="/media-inquiry.html"
|
||||
class="text-blue-600 hover:text-blue-700 font-medium"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer">
|
||||
|
|
@ -1917,7 +1917,7 @@ for user_message in conversation:
|
|||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://github.com/AgenticGovernance/tractatus-framework/discussions"
|
||||
<a href="/media-inquiry.html"
|
||||
class="text-blue-600 hover:text-blue-700 font-medium"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer">
|
||||
|
|
@ -1977,23 +1977,23 @@ for user_message in conversation:
|
|||
</section>
|
||||
|
||||
<!-- Footer -->
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/language-selector.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/scroll-animations.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/page-transitions.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/components/language-selector.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/scroll-animations.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/page-transitions.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<script src="/js/version-manager.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/version-manager.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Share CTA functionality -->
|
||||
<script src="/js/share-cta.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/share-cta.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<script src="/js/components/footer.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/footer.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Feedback System (Governed by Tractatus + Agent Lightning) -->
|
||||
<script src="/js/components/feedback.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/feedback.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Newsletter Subscription Modal -->
|
||||
<script src="/js/components/newsletter.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/newsletter.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -33,9 +33,9 @@
|
|||
<link rel="apple-touch-icon" href="/images/tractatus-icon-new.svg">
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon-new.svg">
|
||||
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1774503360480">
|
||||
<style>
|
||||
.skip-link { position: absolute; left: -9999px; }
|
||||
.skip-link:focus { left: 0; z-index: 100; background: white; padding: 1rem; }
|
||||
|
|
@ -53,7 +53,7 @@
|
|||
|
||||
<!-- Navigation -->
|
||||
<div id="navbar-placeholder" class="min-h-16"></div>
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Hero Section -->
|
||||
<header role="banner">
|
||||
|
|
@ -125,7 +125,7 @@
|
|||
</div>
|
||||
<div class="p-5">
|
||||
<h3 class="font-bold text-gray-900 mb-2 group-hover:text-amber-700 transition" data-i18n="whats_new.card3_title">Village: Tractatus in Production</h3>
|
||||
<p class="text-sm text-gray-600" data-i18n="whats_new.card3_desc">The first deployment of constitutional AI governance in a live community platform. Production metrics, honest limitations, and evidence from 17 months of operation.</p>
|
||||
<p class="text-sm text-gray-600" data-i18n="whats_new.card3_desc">The first deployment of constitutional AI governance in a live community platform. Production metrics, honest limitations, and what we have learned since October 2025.</p>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
|
@ -363,7 +363,7 @@
|
|||
<div class="text-teal-200 text-sm" data-i18n="evidence.stat_services">Governance services in the critical path</div>
|
||||
</div>
|
||||
<div class="bg-white/10 backdrop-blur rounded-lg p-5 text-center">
|
||||
<div class="text-3xl font-bold mb-2">17</div>
|
||||
<div class="text-3xl font-bold mb-2">5</div>
|
||||
<div class="text-teal-200 text-sm" data-i18n="evidence.stat_months">Months in production</div>
|
||||
</div>
|
||||
<div class="bg-white/10 backdrop-blur rounded-lg p-5 text-center">
|
||||
|
|
@ -412,7 +412,7 @@
|
|||
<li data-i18n="roles.researcher_f1">Formal foundations and proofs</li>
|
||||
<li data-i18n="roles.researcher_f2">Failure mode analysis</li>
|
||||
<li data-i18n="roles.researcher_f3">Open research questions</li>
|
||||
<li data-i18n="roles.researcher_f4">171,800+ audit decisions analysed</li>
|
||||
<li data-i18n="roles.researcher_f4">Production audit data from live deployment</li>
|
||||
</ul>
|
||||
<div class="mt-5 text-purple-600 font-semibold group-hover:underline text-sm" data-i18n="roles.researcher_cta">Explore research →</div>
|
||||
</div>
|
||||
|
|
@ -535,7 +535,7 @@
|
|||
<div class="text-center mb-10">
|
||||
<h2 class="text-2xl font-bold text-gray-900 mb-4" data-i18n="timeline.heading">Research Evolution</h2>
|
||||
<p class="text-base text-gray-600 max-w-3xl mx-auto" data-i18n="timeline.subtitle">
|
||||
From a port number incident to Guardian Agents in production — 17 months, 1,000+ commits.
|
||||
From a port number incident to Guardian Agents in production — five months, 3,400+ commits across both projects.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
|
@ -616,27 +616,27 @@
|
|||
</main>
|
||||
|
||||
<!-- Version Management -->
|
||||
<script src="/js/version-manager.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/version-manager.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Share CTA functionality -->
|
||||
<script src="/js/share-cta.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/share-cta.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Internationalization -->
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/language-selector.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/components/language-selector.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Scroll Animations -->
|
||||
<script src="/js/scroll-animations.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/page-transitions.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/scroll-animations.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/page-transitions.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Footer Component -->
|
||||
<script src="/js/components/footer.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/footer.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Feedback System -->
|
||||
<script src="/js/components/feedback.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/feedback.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Newsletter Subscription Modal -->
|
||||
<script src="/js/components/newsletter.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/newsletter.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -311,8 +311,8 @@
|
|||
|
||||
<div class="bg-white rounded-lg p-6 border-2 border-purple-300 shadow-md">
|
||||
<h3 class="text-xl font-bold text-gray-900 mb-4">📦 Tractatus Framework</h3>
|
||||
<p class="text-gray-700 mb-4">Governance architecture and framework components. Apache 2.0 licensed on GitHub.</p>
|
||||
<a href="https://github.com/AgenticGovernance/tractatus-framework" target="_blank" rel="noopener noreferrer" class="inline-block bg-purple-600 text-white font-bold px-6 py-3 rounded-lg hover:bg-purple-700 transition shadow-md">View on GitHub (Apache 2.0) →</a>
|
||||
<p class="text-gray-700 mb-4">Governance architecture and framework components. Apache 2.0 licensed, hosted on sovereign infrastructure.</p>
|
||||
<a href="/source-code.html" class="inline-block bg-purple-600 text-white font-bold px-6 py-3 rounded-lg hover:bg-purple-700 transition shadow-md">View Source Code (Apache 2.0) →</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
|
|
|||
|
|
@ -213,7 +213,7 @@ class ProjectEditor {
|
|||
type="url"
|
||||
id="repo-url"
|
||||
name="repositoryUrl"
|
||||
placeholder="https://github.com/user/repo"
|
||||
placeholder="https://codeberg.org/org/repo"
|
||||
class="w-full border-gray-300 rounded-md shadow-sm focus:ring-indigo-500 focus:border-indigo-500"
|
||||
>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
* Handles fetching and displaying individual blog posts with metadata, sharing, and related posts
|
||||
*/
|
||||
|
||||
/* global initPresentationMode */
|
||||
|
||||
let currentPost = null;
|
||||
|
||||
/**
|
||||
|
|
@ -40,6 +42,11 @@ async function loadPost(slug) {
|
|||
|
||||
currentPost = data.post;
|
||||
|
||||
// Check for presentation mode
|
||||
if (typeof initPresentationMode === 'function' && initPresentationMode(currentPost)) {
|
||||
return; // Presentation mode took over
|
||||
}
|
||||
|
||||
// Render post
|
||||
renderPost();
|
||||
|
||||
|
|
@ -363,6 +370,20 @@ function attachEventListeners() {
|
|||
});
|
||||
}
|
||||
|
||||
// Enter presentation mode
|
||||
const presentBtn = document.getElementById('enter-presentation');
|
||||
if (presentBtn) {
|
||||
presentBtn.addEventListener('click', () => {
|
||||
if (typeof initPresentationMode === 'function') {
|
||||
// Update URL to reflect presentation mode
|
||||
const url = new URL(window.location);
|
||||
url.searchParams.set('mode', 'presentation');
|
||||
window.history.pushState({}, '', url.toString());
|
||||
initPresentationMode(currentPost);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Copy link
|
||||
const copyLinkBtn = document.getElementById('copy-link');
|
||||
if (copyLinkBtn) {
|
||||
|
|
|
|||
427
public/js/blog-presentation.js
Normal file
427
public/js/blog-presentation.js
Normal file
|
|
@ -0,0 +1,427 @@
|
|||
/**
|
||||
* Blog Presentation Mode
|
||||
* Renders blog posts as full-viewport slides with presenter notes
|
||||
* Zero dependencies — pure JS
|
||||
*/
|
||||
|
||||
/* eslint-disable no-unused-vars */
|
||||
|
||||
/**
|
||||
* Check if presentation mode is requested and initialize
|
||||
* Called from blog-post.js after post data is loaded
|
||||
*/
|
||||
function initPresentationMode(post) {
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
if (urlParams.get('mode') !== 'presentation') return false;
|
||||
|
||||
const slides = buildSlides(post);
|
||||
if (slides.length === 0) return false;
|
||||
|
||||
renderPresentation(slides);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build slides from post data
|
||||
* Option A: curated slides from post.presentation
|
||||
* Option B: auto-extract from HTML content using <h2> breaks
|
||||
*/
|
||||
function buildSlides(post) {
|
||||
const slides = [];
|
||||
|
||||
// Title slide is always first
|
||||
const authorName = post.author_name || (post.author && post.author.name) || 'Tractatus Team';
|
||||
const publishedDate = post.published_at
|
||||
? new Date(post.published_at).toLocaleDateString('en-US', {
|
||||
year: 'numeric', month: 'long', day: 'numeric'
|
||||
})
|
||||
: '';
|
||||
|
||||
slides.push({
|
||||
type: 'title',
|
||||
heading: post.title,
|
||||
subtitle: post.excerpt || '',
|
||||
meta: [authorName, publishedDate].filter(Boolean).join(' — '),
|
||||
notes: ''
|
||||
});
|
||||
|
||||
// Option A: curated presentation data
|
||||
if (post.presentation && post.presentation.enabled &&
|
||||
post.presentation.slides && post.presentation.slides.length > 0) {
|
||||
for (const slide of post.presentation.slides) {
|
||||
slides.push({
|
||||
type: 'content',
|
||||
heading: slide.heading,
|
||||
bullets: slide.bullets || [],
|
||||
notes: slide.notes || ''
|
||||
});
|
||||
}
|
||||
return slides;
|
||||
}
|
||||
|
||||
// Option B: auto-extract from content HTML
|
||||
const contentHtml = post.content_html || post.content || '';
|
||||
if (!contentHtml) return slides;
|
||||
|
||||
// Parse the HTML to extract sections by <h2>
|
||||
const parser = new DOMParser();
|
||||
const doc = parser.parseFromString(`<div>${contentHtml}</div>`, 'text/html');
|
||||
const wrapper = doc.body.firstChild;
|
||||
|
||||
let currentHeading = null;
|
||||
let currentElements = [];
|
||||
|
||||
const flushSection = () => {
|
||||
if (!currentHeading) return;
|
||||
|
||||
// Extract bullet points from paragraphs
|
||||
const bullets = [];
|
||||
for (const el of currentElements) {
|
||||
if (el.tagName === 'UL' || el.tagName === 'OL') {
|
||||
const items = el.querySelectorAll('li');
|
||||
for (const item of items) {
|
||||
const text = item.textContent.trim();
|
||||
if (text) bullets.push(text);
|
||||
}
|
||||
} else if (el.tagName === 'P') {
|
||||
const text = el.textContent.trim();
|
||||
if (text) {
|
||||
const firstSentence = text.match(/^[^.!?]+[.!?]/);
|
||||
bullets.push(firstSentence ? firstSentence[0] : text.substring(0, 120));
|
||||
}
|
||||
} else if (el.tagName === 'BLOCKQUOTE') {
|
||||
const text = el.textContent.trim();
|
||||
if (text) bullets.push(text);
|
||||
}
|
||||
}
|
||||
|
||||
// Limit to 6 bullets per slide for readability
|
||||
const slideBullets = bullets.slice(0, 6);
|
||||
|
||||
// Use full section text as notes
|
||||
const allText = currentElements
|
||||
.map(el => el.textContent.trim())
|
||||
.filter(Boolean)
|
||||
.join(' ');
|
||||
const notes = allText.length > 200
|
||||
? `${allText.substring(0, 500)}...`
|
||||
: allText;
|
||||
|
||||
slides.push({
|
||||
type: 'content',
|
||||
heading: currentHeading,
|
||||
bullets: slideBullets,
|
||||
notes
|
||||
});
|
||||
};
|
||||
|
||||
for (const node of wrapper.childNodes) {
|
||||
if (node.nodeType !== 1) continue; // skip text nodes
|
||||
|
||||
if (node.tagName === 'H2') {
|
||||
flushSection();
|
||||
currentHeading = node.textContent.trim();
|
||||
currentElements = [];
|
||||
} else if (currentHeading) {
|
||||
currentElements.push(node);
|
||||
}
|
||||
}
|
||||
flushSection();
|
||||
|
||||
return slides;
|
||||
}
|
||||
|
||||
/**
|
||||
* Escape HTML for safe insertion
|
||||
*/
|
||||
function escapeForPresentation(text) {
|
||||
if (!text) return '';
|
||||
const div = document.createElement('div');
|
||||
div.textContent = text;
|
||||
return div.innerHTML;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the presentation UI
|
||||
*/
|
||||
function renderPresentation(slides) {
|
||||
// Hide the normal article view
|
||||
document.body.classList.add('presentation-active');
|
||||
|
||||
// Create presentation container
|
||||
const container = document.createElement('div');
|
||||
container.className = 'presentation-mode';
|
||||
container.id = 'presentation-container';
|
||||
|
||||
// Progress bar
|
||||
const progress = document.createElement('div');
|
||||
progress.className = 'slide-progress';
|
||||
progress.id = 'slide-progress';
|
||||
container.appendChild(progress);
|
||||
|
||||
// Slides container
|
||||
const slidesEl = document.createElement('div');
|
||||
slidesEl.className = 'presentation-slides';
|
||||
|
||||
for (let i = 0; i < slides.length; i++) {
|
||||
const slide = slides[i];
|
||||
const slideEl = document.createElement('div');
|
||||
slideEl.className = `presentation-slide${slide.type === 'title' ? ' slide-title' : ''}`;
|
||||
slideEl.dataset.index = i;
|
||||
if (i === 0) slideEl.classList.add('active');
|
||||
|
||||
if (slide.type === 'title') {
|
||||
const subtitleHtml = slide.subtitle
|
||||
? `<p class="slide-subtitle">${escapeForPresentation(slide.subtitle)}</p>`
|
||||
: '';
|
||||
const metaHtml = slide.meta
|
||||
? `<p class="slide-meta">${escapeForPresentation(slide.meta)}</p>`
|
||||
: '';
|
||||
slideEl.innerHTML =
|
||||
`<h1>${escapeForPresentation(slide.heading)}</h1>${subtitleHtml}${metaHtml}`;
|
||||
} else {
|
||||
let bulletsHtml = '';
|
||||
if (slide.bullets && slide.bullets.length > 0) {
|
||||
const items = slide.bullets
|
||||
.map(b => `<li>${escapeForPresentation(b)}</li>`)
|
||||
.join('');
|
||||
bulletsHtml = `<ul class="slide-bullets">${items}</ul>`;
|
||||
}
|
||||
slideEl.innerHTML =
|
||||
`<h2 class="slide-heading">${escapeForPresentation(slide.heading)}</h2>${bulletsHtml}`;
|
||||
}
|
||||
|
||||
slidesEl.appendChild(slideEl);
|
||||
}
|
||||
|
||||
container.appendChild(slidesEl);
|
||||
|
||||
// Notes panel
|
||||
const notesPanel = document.createElement('div');
|
||||
notesPanel.className = 'presentation-notes';
|
||||
notesPanel.id = 'presentation-notes';
|
||||
notesPanel.innerHTML =
|
||||
'<div class="presentation-notes-inner">' +
|
||||
'<div class="presentation-notes-label">Presenter Notes</div>' +
|
||||
'<div class="presentation-notes-text" id="presentation-notes-text"></div>' +
|
||||
'</div>';
|
||||
container.appendChild(notesPanel);
|
||||
|
||||
// Navigation bar
|
||||
const nav = document.createElement('div');
|
||||
nav.className = 'presentation-nav';
|
||||
nav.innerHTML =
|
||||
'<div style="display:flex;gap:0.5rem;align-items:center;">' +
|
||||
'<button id="pres-exit" title="Exit presentation (Esc)">Exit</button>' +
|
||||
'<button id="pres-notes" title="Toggle notes (N)">Notes</button>' +
|
||||
'</div>' +
|
||||
`<span class="slide-counter" id="slide-counter">1 / ${slides.length}</span>` +
|
||||
'<div style="display:flex;gap:0.5rem;">' +
|
||||
'<button id="pres-prev" title="Previous slide" disabled>← Prev</button>' +
|
||||
'<button id="pres-next" title="Next slide">Next →</button>' +
|
||||
'</div>';
|
||||
container.appendChild(nav);
|
||||
|
||||
// Keyboard hints overlay
|
||||
const hints = document.createElement('div');
|
||||
hints.className = 'presentation-hints';
|
||||
hints.id = 'presentation-hints';
|
||||
hints.innerHTML =
|
||||
'<h3>Keyboard Shortcuts</h3>' +
|
||||
'<dl>' +
|
||||
'<dt>← / →</dt><dd>Previous / Next slide</dd>' +
|
||||
'<dt>N</dt><dd>Toggle presenter notes</dd>' +
|
||||
'<dt>H / ?</dt><dd>Show this help</dd>' +
|
||||
'<dt>Esc</dt><dd>Exit presentation</dd>' +
|
||||
'<dt>F</dt><dd>Toggle fullscreen</dd>' +
|
||||
'</dl>';
|
||||
container.appendChild(hints);
|
||||
|
||||
document.body.appendChild(container);
|
||||
|
||||
// Start presentation controller
|
||||
startController(slides, container);
|
||||
}
|
||||
|
||||
/**
|
||||
* Presentation controller — manages slide state and navigation
|
||||
*/
|
||||
function startController(slides, container) {
|
||||
let currentIndex = 0;
|
||||
let notesOpen = false;
|
||||
let touchStartX = 0;
|
||||
let touchStartY = 0;
|
||||
|
||||
const updateUI = () => {
|
||||
document.getElementById('slide-counter').textContent =
|
||||
`${currentIndex + 1} / ${slides.length}`;
|
||||
|
||||
const pct = ((currentIndex + 1) / slides.length) * 100;
|
||||
document.getElementById('slide-progress').style.width = `${pct}%`;
|
||||
|
||||
document.getElementById('pres-prev').disabled = (currentIndex === 0);
|
||||
document.getElementById('pres-next').disabled = (currentIndex === slides.length - 1);
|
||||
};
|
||||
|
||||
const updateNotes = () => {
|
||||
const notes = slides[currentIndex].notes || '';
|
||||
document.getElementById('presentation-notes-text').textContent = notes;
|
||||
};
|
||||
|
||||
const goTo = index => {
|
||||
if (index < 0 || index >= slides.length) return;
|
||||
|
||||
const slideEls = container.querySelectorAll('.presentation-slide');
|
||||
const currentEl = slideEls[currentIndex];
|
||||
const nextEl = slideEls[index];
|
||||
|
||||
// Direction-aware animation
|
||||
currentEl.classList.remove('active');
|
||||
currentEl.classList.add('exiting-left');
|
||||
nextEl.style.transform = index > currentIndex ? 'translateX(40px)' : 'translateX(-40px)';
|
||||
|
||||
// Trigger reflow then animate in
|
||||
void nextEl.offsetWidth; // eslint-disable-line no-void
|
||||
nextEl.classList.add('active');
|
||||
nextEl.style.transform = '';
|
||||
|
||||
setTimeout(() => {
|
||||
currentEl.classList.remove('exiting-left');
|
||||
}, 400);
|
||||
|
||||
currentIndex = index;
|
||||
updateUI();
|
||||
updateNotes();
|
||||
};
|
||||
|
||||
const next = () => goTo(currentIndex + 1);
|
||||
const prev = () => goTo(currentIndex - 1);
|
||||
|
||||
const exit = () => {
|
||||
document.removeEventListener('keydown', onKeyDown);
|
||||
container.removeEventListener('touchstart', onTouchStart);
|
||||
container.removeEventListener('touchend', onTouchEnd);
|
||||
document.body.style.overflow = '';
|
||||
|
||||
const el = document.getElementById('presentation-container');
|
||||
if (el) el.remove();
|
||||
|
||||
document.body.classList.remove('presentation-active');
|
||||
|
||||
// Remove mode=presentation from URL without reload
|
||||
const url = new URL(window.location);
|
||||
url.searchParams.delete('mode');
|
||||
window.history.replaceState({}, '', url.toString());
|
||||
};
|
||||
|
||||
const toggleNotes = () => {
|
||||
notesOpen = !notesOpen;
|
||||
const panel = document.getElementById('presentation-notes');
|
||||
if (notesOpen) {
|
||||
panel.classList.add('open');
|
||||
} else {
|
||||
panel.classList.remove('open');
|
||||
}
|
||||
};
|
||||
|
||||
const toggleFullscreen = () => {
|
||||
if (!document.fullscreenElement) {
|
||||
container.requestFullscreen().catch(() => {});
|
||||
} else {
|
||||
document.exitFullscreen().catch(() => {});
|
||||
}
|
||||
};
|
||||
|
||||
const showHints = () => {
|
||||
const hintsEl = document.getElementById('presentation-hints');
|
||||
hintsEl.classList.add('visible');
|
||||
setTimeout(() => {
|
||||
hintsEl.classList.remove('visible');
|
||||
}, 3000);
|
||||
};
|
||||
|
||||
const onKeyDown = e => {
|
||||
switch (e.key) {
|
||||
case 'ArrowRight':
|
||||
case 'ArrowDown':
|
||||
case ' ':
|
||||
e.preventDefault();
|
||||
next();
|
||||
break;
|
||||
case 'ArrowLeft':
|
||||
case 'ArrowUp':
|
||||
e.preventDefault();
|
||||
prev();
|
||||
break;
|
||||
case 'Escape':
|
||||
e.preventDefault();
|
||||
exit();
|
||||
break;
|
||||
case 'n':
|
||||
case 'N':
|
||||
e.preventDefault();
|
||||
toggleNotes();
|
||||
break;
|
||||
case 'f':
|
||||
case 'F':
|
||||
e.preventDefault();
|
||||
toggleFullscreen();
|
||||
break;
|
||||
case 'h':
|
||||
case 'H':
|
||||
case '?':
|
||||
e.preventDefault();
|
||||
showHints();
|
||||
break;
|
||||
case 'Home':
|
||||
e.preventDefault();
|
||||
goTo(0);
|
||||
break;
|
||||
case 'End':
|
||||
e.preventDefault();
|
||||
goTo(slides.length - 1);
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
const onTouchStart = e => {
|
||||
touchStartX = e.changedTouches[0].screenX;
|
||||
touchStartY = e.changedTouches[0].screenY;
|
||||
};
|
||||
|
||||
const onTouchEnd = e => {
|
||||
const dx = e.changedTouches[0].screenX - touchStartX;
|
||||
const dy = e.changedTouches[0].screenY - touchStartY;
|
||||
|
||||
// Only trigger if horizontal swipe is dominant and > 50px
|
||||
if (Math.abs(dx) > Math.abs(dy) && Math.abs(dx) > 50) {
|
||||
if (dx < 0) {
|
||||
next();
|
||||
} else {
|
||||
prev();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Bind events
|
||||
document.addEventListener('keydown', onKeyDown);
|
||||
container.addEventListener('touchstart', onTouchStart, { passive: true });
|
||||
container.addEventListener('touchend', onTouchEnd, { passive: true });
|
||||
|
||||
document.getElementById('pres-prev').addEventListener('click', prev);
|
||||
document.getElementById('pres-next').addEventListener('click', next);
|
||||
document.getElementById('pres-exit').addEventListener('click', exit);
|
||||
document.getElementById('pres-notes').addEventListener('click', toggleNotes);
|
||||
|
||||
// Click on slide area to advance
|
||||
container.querySelector('.presentation-slides').addEventListener('click', e => {
|
||||
if (e.target.closest('.presentation-nav') || e.target.closest('.presentation-notes')) return;
|
||||
next();
|
||||
});
|
||||
|
||||
// Initial state
|
||||
updateUI();
|
||||
updateNotes();
|
||||
showHints();
|
||||
document.body.style.overflow = 'hidden';
|
||||
}
|
||||
|
|
@ -106,7 +106,7 @@
|
|||
<li><a href="/privacy.html" class="hover:text-white transition" data-i18n="footer.legal_links.privacy">Privacy Policy</a></li>
|
||||
<li><a href="/gdpr.html" class="hover:text-white transition" data-i18n="footer.legal_links.gdpr">GDPR Compliance</a></li>
|
||||
<li><button id="open-contact-modal" class="hover:text-white transition cursor-pointer text-left" data-i18n="footer.legal_links.contact">Contact Us</button></li>
|
||||
<li><a href="https://github.com/AgenticGovernance/tractatus-framework" class="hover:text-white transition" target="_blank" rel="noopener">GitHub</a></li>
|
||||
<li><a href="/source-code.html" class="hover:text-white transition" data-i18n="footer.legal_links.source_code">Source Code</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -133,7 +133,7 @@ class TractatusNavbar {
|
|||
<!-- Desktop secondary links -->
|
||||
<div class="hidden lg:flex items-center gap-1">
|
||||
<a href="/docs.html" class="px-3 py-2 text-sm text-gray-600 hover:text-blue-700 hover:bg-blue-50 rounded-lg transition" data-i18n="navbar.docs">Docs</a>
|
||||
<a href="https://github.com/AgenticGovernance/tractatus-framework" target="_blank" rel="noopener noreferrer" class="px-3 py-2 text-sm text-gray-600 hover:text-blue-700 hover:bg-blue-50 rounded-lg transition" data-i18n="navbar.github">GitHub</a>
|
||||
<a href="/source-code.html" class="px-3 py-2 text-sm text-gray-600 hover:text-blue-700 hover:bg-blue-50 rounded-lg transition" data-i18n="navbar.source_code">Source Code</a>
|
||||
<a href="/koha.html" class="px-3 py-1.5 text-sm font-medium text-teal-700 bg-teal-50 hover:bg-teal-100 rounded-lg transition border border-teal-200" data-i18n="navbar.koha">Koha</a>
|
||||
</div>
|
||||
|
||||
|
|
@ -230,7 +230,7 @@ class TractatusNavbar {
|
|||
</button>
|
||||
<div class="mobile-nav-section-content overflow-hidden transition-all duration-200" style="max-height:0">
|
||||
<a href="/docs.html" class="block px-3 py-2 text-sm text-gray-700 hover:bg-blue-50 hover:text-blue-700 rounded-lg transition" data-i18n="navbar.documentation">Documentation</a>
|
||||
<a href="https://github.com/AgenticGovernance/tractatus-framework" target="_blank" rel="noopener noreferrer" class="block px-3 py-2 text-sm text-gray-700 hover:bg-blue-50 hover:text-blue-700 rounded-lg transition" data-i18n="navbar.github">GitHub</a>
|
||||
<a href="/source-code.html" class="block px-3 py-2 text-sm text-gray-700 hover:bg-blue-50 hover:text-blue-700 rounded-lg transition" data-i18n="navbar.source_code">Source Code</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -23,11 +23,11 @@ const UI_TRANSLATIONS = {
|
|||
errorLoadingDoc: 'Error loading document',
|
||||
tableOfContents: 'Table of Contents',
|
||||
downloadPdf: 'Download PDF',
|
||||
github: 'GitHub',
|
||||
publicRepository: 'Public Repository',
|
||||
publicRepositoryDesc: 'Source code, examples & contributions',
|
||||
readmeQuickStart: 'README & Quick Start',
|
||||
readmeQuickStartDesc: 'Installation and getting started guide',
|
||||
sourceCode: 'Source Code',
|
||||
sovereignRepo: 'Sovereign Repository',
|
||||
sovereignRepoDesc: 'Source code hosted on sovereign infrastructure',
|
||||
implGuide: 'Implementation Guide',
|
||||
implGuideDesc: 'Architecture, deployment & integration',
|
||||
categories: {
|
||||
'getting-started': 'Getting Started',
|
||||
'resources': 'Resources',
|
||||
|
|
@ -69,7 +69,7 @@ const UI_TRANSLATIONS = {
|
|||
errorLoadingDoc: 'Fehler beim Laden des Dokuments',
|
||||
tableOfContents: 'Inhaltsverzeichnis',
|
||||
downloadPdf: 'PDF herunterladen',
|
||||
github: 'GitHub',
|
||||
sourceCode: 'Source Code',
|
||||
publicRepository: 'Öffentliches Repository',
|
||||
publicRepositoryDesc: 'Quellcode, Beispiele und Beiträge',
|
||||
readmeQuickStart: 'README & Schnellstart',
|
||||
|
|
@ -115,7 +115,7 @@ const UI_TRANSLATIONS = {
|
|||
errorLoadingDoc: 'Erreur lors du chargement du document',
|
||||
tableOfContents: 'Table des matières',
|
||||
downloadPdf: 'Télécharger PDF',
|
||||
github: 'GitHub',
|
||||
sourceCode: 'Source Code',
|
||||
publicRepository: 'Dépôt public',
|
||||
publicRepositoryDesc: 'Code source, exemples et contributions',
|
||||
readmeQuickStart: 'README & Démarrage rapide',
|
||||
|
|
@ -161,7 +161,7 @@ const UI_TRANSLATIONS = {
|
|||
errorLoadingDoc: 'He hapa i te utanga o te tuhinga',
|
||||
tableOfContents: 'Rārangi Kaupapa',
|
||||
downloadPdf: 'Tikiake PDF',
|
||||
github: 'GitHub',
|
||||
sourceCode: 'Source Code',
|
||||
publicRepository: 'Pūtahi Tūmatanui',
|
||||
publicRepositoryDesc: 'Waehere pūtake, tauira me ngā koha',
|
||||
readmeQuickStart: 'README & Tīmata Tere',
|
||||
|
|
@ -232,42 +232,42 @@ function updatePageUI(lang = currentLanguage) {
|
|||
docsHeading.textContent = t.documentsHeading;
|
||||
}
|
||||
|
||||
// Update GitHub section heading
|
||||
const allGithubLabels = Object.values(UI_TRANSLATIONS).map(t => t.github);
|
||||
const githubHeadings = document.querySelectorAll('aside h3');
|
||||
githubHeadings.forEach(heading => {
|
||||
if (allGithubLabels.includes(heading.textContent.trim())) {
|
||||
// Update Source Code section heading
|
||||
const allSourceLabels = Object.values(UI_TRANSLATIONS).map(t => t.sourceCode);
|
||||
const sourceHeadings = document.querySelectorAll('aside h3');
|
||||
sourceHeadings.forEach(heading => {
|
||||
if (allSourceLabels.includes(heading.textContent.trim())) {
|
||||
const textNode = Array.from(heading.childNodes).find(node => node.nodeType === Node.TEXT_NODE);
|
||||
if (textNode) {
|
||||
textNode.textContent = t.github;
|
||||
textNode.textContent = t.sourceCode;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Update GitHub links
|
||||
const allRepoTitles = Object.values(UI_TRANSLATIONS).map(t => t.publicRepository);
|
||||
const allReadmeTitles = Object.values(UI_TRANSLATIONS).map(t => t.readmeQuickStart);
|
||||
const allRepoDescs = Object.values(UI_TRANSLATIONS).map(t => t.publicRepositoryDesc);
|
||||
const allReadmeDescs = Object.values(UI_TRANSLATIONS).map(t => t.readmeQuickStartDesc);
|
||||
// Update Source Code links
|
||||
const allRepoTitles = Object.values(UI_TRANSLATIONS).map(t => t.sovereignRepo);
|
||||
const allReadmeTitles = Object.values(UI_TRANSLATIONS).map(t => t.implGuide);
|
||||
const allRepoDescs = Object.values(UI_TRANSLATIONS).map(t => t.sovereignRepoDesc);
|
||||
const allReadmeDescs = Object.values(UI_TRANSLATIONS).map(t => t.implGuideDesc);
|
||||
|
||||
const githubLinks = document.querySelectorAll('aside a[href*="github.com"]');
|
||||
githubLinks.forEach(link => {
|
||||
const sourceLinks = document.querySelectorAll('aside a[href*="source-code"]');
|
||||
sourceLinks.forEach(link => {
|
||||
const titleDiv = link.querySelector('.text-sm.font-medium');
|
||||
const descDiv = link.querySelector('.text-xs.text-gray-500');
|
||||
|
||||
if (titleDiv) {
|
||||
if (allRepoTitles.includes(titleDiv.textContent)) {
|
||||
titleDiv.textContent = t.publicRepository;
|
||||
titleDiv.textContent = t.sovereignRepo;
|
||||
} else if (allReadmeTitles.includes(titleDiv.textContent)) {
|
||||
titleDiv.textContent = t.readmeQuickStart;
|
||||
titleDiv.textContent = t.implGuide;
|
||||
}
|
||||
}
|
||||
|
||||
if (descDiv) {
|
||||
if (allRepoDescs.includes(descDiv.textContent)) {
|
||||
descDiv.textContent = t.publicRepositoryDesc;
|
||||
descDiv.textContent = t.sovereignRepoDesc;
|
||||
} else if (allReadmeDescs.includes(descDiv.textContent)) {
|
||||
descDiv.textContent = t.readmeQuickStartDesc;
|
||||
descDiv.textContent = t.implGuideDesc;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -277,7 +277,7 @@ See [Implementation Guide](/downloads/implementation-guide.pdf) Section 4: "Conf
|
|||
**Support resources:**
|
||||
- [Implementation Guide](/downloads/implementation-guide.pdf) - Step-by-step
|
||||
- [Troubleshooting Guide](/downloads/tractatus-quickstart.tar.gz) - Common issues
|
||||
- [GitHub Discussions](https://github.com/AgenticGovernance/tractatus-framework/issues) - Community help
|
||||
- [Contact Us](/media-inquiry.html) - Direct support
|
||||
- [Contact form](/media-inquiry.html) - Direct support
|
||||
|
||||
**Expected deployment timeline:**
|
||||
|
|
@ -368,7 +368,7 @@ tractatus/
|
|||
scripts/
|
||||
export-governance-rules.js
|
||||
load-governance-rules.js
|
||||
.github/
|
||||
scripts/ci/
|
||||
workflows/
|
||||
test-rules.yml # CI/CD for rule validation
|
||||
\`\`\`
|
||||
|
|
@ -1085,7 +1085,7 @@ For hallucination detection, use RAG + human review + test-driven development.`,
|
|||
|
||||
**1. Pre-deployment governance checks:**
|
||||
\`\`\`yaml
|
||||
# .github/workflows/deploy.yml
|
||||
# scripts/ci/workflows/deploy.yml
|
||||
name: Deploy with Governance Validation
|
||||
|
||||
jobs:
|
||||
|
|
@ -1148,14 +1148,14 @@ jobs:
|
|||
- name: Deploy governance rules
|
||||
run: |
|
||||
node scripts/load-governance-rules.js \\
|
||||
--file config/governance-rules-\${{ github.ref_name }}.json \\
|
||||
--file config/governance-rules-\$VERSION.json \\
|
||||
--db tractatus_prod
|
||||
|
||||
- name: Verify deployment
|
||||
run: |
|
||||
node scripts/verify-governance-deployment.js \\
|
||||
--expected-rules 10 \\
|
||||
--expected-version \${{ github.ref_name }}
|
||||
--expected-version \$VERSION
|
||||
|
||||
deploy-application:
|
||||
needs: deploy-governance
|
||||
|
|
@ -1303,7 +1303,7 @@ jobs:
|
|||
|
||||
Tractatus treats governance rules as infrastructure-as-code, fully compatible with GitOps workflows.`,
|
||||
audience: ['implementer'],
|
||||
keywords: ['ci/cd', 'pipeline', 'deployment', 'automation', 'github actions', 'integration', 'devops']
|
||||
keywords: ['ci/cd', 'pipeline', 'deployment', 'automation', 'automation', 'integration', 'devops']
|
||||
},
|
||||
{
|
||||
id: 26,
|
||||
|
|
|
|||
20
public/js/lib/chart.umd.min.js
vendored
Normal file
20
public/js/lib/chart.umd.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
20
public/js/lib/highlight-bash.min.js
vendored
Normal file
20
public/js/lib/highlight-bash.min.js
vendored
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
/*! `bash` grammar compiled for Highlight.js 11.9.0 */
|
||||
(()=>{var e=(()=>{"use strict";return e=>{const s=e.regex,t={},n={begin:/\$\{/,
|
||||
end:/\}/,contains:["self",{begin:/:-/,contains:[t]}]};Object.assign(t,{
|
||||
className:"variable",variants:[{
|
||||
begin:s.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},n]});const a={
|
||||
className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},i={
|
||||
begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,
|
||||
end:/(\w+)/,className:"string"})]}},c={className:"string",begin:/"/,end:/"/,
|
||||
contains:[e.BACKSLASH_ESCAPE,t,a]};a.contains.push(c);const o={begin:/\$?\(\(/,
|
||||
end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,t]
|
||||
},r=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10
|
||||
}),l={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,
|
||||
contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{
|
||||
name:"Bash",aliases:["sh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,
|
||||
keyword:["if","then","else","elif","fi","for","while","until","in","do","done","case","esac","function","select"],
|
||||
literal:["true","false"],
|
||||
built_in:["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset","alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","type","typeset","ulimit","unalias","set","shopt","autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp","chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"]
|
||||
},contains:[r,e.SHEBANG(),l,o,e.HASH_COMMENT_MODE,i,{match:/(\/[a-z._-]+)+/},c,{
|
||||
match:/\\"/},{className:"string",begin:/'/,end:/'/},{match:/\\'/},t]}}})()
|
||||
;hljs.registerLanguage("bash",e)})();
|
||||
80
public/js/lib/highlight-javascript.min.js
vendored
Normal file
80
public/js/lib/highlight-javascript.min.js
vendored
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
/*! `javascript` grammar compiled for Highlight.js 11.9.0 */
|
||||
(()=>{var e=(()=>{"use strict"
|
||||
;const e="[A-Za-z$_][0-9A-Za-z$_]*",n=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],a=["true","false","null","undefined","NaN","Infinity"],t=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],s=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],r=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],c=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],i=[].concat(r,t,s)
|
||||
;return o=>{const l=o.regex,b=e,d={begin:/<[A-Za-z0-9\\._:-]+/,
|
||||
end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{
|
||||
const a=e[0].length+e.index,t=e.input[a]
|
||||
;if("<"===t||","===t)return void n.ignoreMatch();let s
|
||||
;">"===t&&(((e,{after:n})=>{const a="</"+e[0].slice(1)
|
||||
;return-1!==e.input.indexOf(a,n)})(e,{after:a})||n.ignoreMatch())
|
||||
;const r=e.input.substring(a)
|
||||
;((s=r.match(/^\s*=/))||(s=r.match(/^\s+extends\s+/))&&0===s.index)&&n.ignoreMatch()
|
||||
}},g={$pattern:e,keyword:n,literal:a,built_in:i,"variable.language":c
|
||||
},u="[0-9](_?[0-9])*",m=`\\.(${u})`,E="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",A={
|
||||
className:"number",variants:[{
|
||||
begin:`(\\b(${E})((${m})|\\.)?|(${m}))[eE][+-]?(${u})\\b`},{
|
||||
begin:`\\b(${E})\\b((${m})\\b|\\.)?|(${m})\\b`},{
|
||||
begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{
|
||||
begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{
|
||||
begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{
|
||||
begin:"\\b0[0-7]+n?\\b"}],relevance:0},y={className:"subst",begin:"\\$\\{",
|
||||
end:"\\}",keywords:g,contains:[]},h={begin:"html`",end:"",starts:{end:"`",
|
||||
returnEnd:!1,contains:[o.BACKSLASH_ESCAPE,y],subLanguage:"xml"}},N={
|
||||
begin:"css`",end:"",starts:{end:"`",returnEnd:!1,
|
||||
contains:[o.BACKSLASH_ESCAPE,y],subLanguage:"css"}},_={begin:"gql`",end:"",
|
||||
starts:{end:"`",returnEnd:!1,contains:[o.BACKSLASH_ESCAPE,y],
|
||||
subLanguage:"graphql"}},f={className:"string",begin:"`",end:"`",
|
||||
contains:[o.BACKSLASH_ESCAPE,y]},v={className:"comment",
|
||||
variants:[o.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{
|
||||
begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",
|
||||
begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,
|
||||
excludeBegin:!0,relevance:0},{className:"variable",begin:b+"(?=\\s*(-)|$)",
|
||||
endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]
|
||||
}),o.C_BLOCK_COMMENT_MODE,o.C_LINE_COMMENT_MODE]
|
||||
},p=[o.APOS_STRING_MODE,o.QUOTE_STRING_MODE,h,N,_,f,{match:/\$\d+/},A]
|
||||
;y.contains=p.concat({begin:/\{/,end:/\}/,keywords:g,contains:["self"].concat(p)
|
||||
});const S=[].concat(v,y.contains),w=S.concat([{begin:/\(/,end:/\)/,keywords:g,
|
||||
contains:["self"].concat(S)}]),R={className:"params",begin:/\(/,end:/\)/,
|
||||
excludeBegin:!0,excludeEnd:!0,keywords:g,contains:w},O={variants:[{
|
||||
match:[/class/,/\s+/,b,/\s+/,/extends/,/\s+/,l.concat(b,"(",l.concat(/\./,b),")*")],
|
||||
scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{
|
||||
match:[/class/,/\s+/,b],scope:{1:"keyword",3:"title.class"}}]},k={relevance:0,
|
||||
match:l.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),
|
||||
className:"title.class",keywords:{_:[...t,...s]}},I={variants:[{
|
||||
match:[/function/,/\s+/,b,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],
|
||||
className:{1:"keyword",3:"title.function"},label:"func.def",contains:[R],
|
||||
illegal:/%/},x={
|
||||
match:l.concat(/\b/,(T=[...r,"super","import"],l.concat("(?!",T.join("|"),")")),b,l.lookahead(/\(/)),
|
||||
className:"title.function",relevance:0};var T;const C={
|
||||
begin:l.concat(/\./,l.lookahead(l.concat(b,/(?![0-9A-Za-z$_(])/))),end:b,
|
||||
excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},M={
|
||||
match:[/get|set/,/\s+/,b,/(?=\()/],className:{1:"keyword",3:"title.function"},
|
||||
contains:[{begin:/\(\)/},R]
|
||||
},B="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+o.UNDERSCORE_IDENT_RE+")\\s*=>",$={
|
||||
match:[/const|var|let/,/\s+/,b,/\s*/,/=\s*/,/(async\s*)?/,l.lookahead(B)],
|
||||
keywords:"async",className:{1:"keyword",3:"title.function"},contains:[R]}
|
||||
;return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:g,exports:{
|
||||
PARAMS_CONTAINS:w,CLASS_REFERENCE:k},illegal:/#(?![$_A-z])/,
|
||||
contains:[o.SHEBANG({label:"shebang",binary:"node",relevance:5}),{
|
||||
label:"use_strict",className:"meta",relevance:10,
|
||||
begin:/^\s*['"]use (strict|asm)['"]/
|
||||
},o.APOS_STRING_MODE,o.QUOTE_STRING_MODE,h,N,_,f,v,{match:/\$\d+/},A,k,{
|
||||
className:"attr",begin:b+l.lookahead(":"),relevance:0},$,{
|
||||
begin:"("+o.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",
|
||||
keywords:"return throw case",relevance:0,contains:[v,o.REGEXP_MODE,{
|
||||
className:"function",begin:B,returnBegin:!0,end:"\\s*=>",contains:[{
|
||||
className:"params",variants:[{begin:o.UNDERSCORE_IDENT_RE,relevance:0},{
|
||||
className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,
|
||||
excludeEnd:!0,keywords:g,contains:w}]}]},{begin:/,/,relevance:0},{match:/\s+/,
|
||||
relevance:0},{variants:[{begin:"<>",end:"</>"},{
|
||||
match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:d.begin,
|
||||
"on:begin":d.isTrulyOpeningTag,end:d.end}],subLanguage:"xml",contains:[{
|
||||
begin:d.begin,end:d.end,skip:!0,contains:["self"]}]}]},I,{
|
||||
beginKeywords:"while if switch catch for"},{
|
||||
begin:"\\b(?!function)"+o.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",
|
||||
returnBegin:!0,label:"func.def",contains:[R,o.inherit(o.TITLE_MODE,{begin:b,
|
||||
className:"title.function"})]},{match:/\.\.\./,relevance:0},C,{match:"\\$"+b,
|
||||
relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},
|
||||
contains:[R]},x,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,
|
||||
className:"variable.constant"},O,M,{match:/\$[(.]/}]}}})()
|
||||
;hljs.registerLanguage("javascript",e)})();
|
||||
7
public/js/lib/highlight-json.min.js
vendored
Normal file
7
public/js/lib/highlight-json.min.js
vendored
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
/*! `json` grammar compiled for Highlight.js 11.9.0 */
|
||||
(()=>{var e=(()=>{"use strict";return e=>{const a=["true","false","null"],n={
|
||||
scope:"literal",beginKeywords:a.join(" ")};return{name:"JSON",keywords:{
|
||||
literal:a},contains:[{className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,
|
||||
relevance:1.01},{match:/[{}[\],:]/,className:"punctuation",relevance:0
|
||||
},e.QUOTE_STRING_MODE,n,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],
|
||||
illegal:"\\S"}}})();hljs.registerLanguage("json",e)})();
|
||||
41
public/js/lib/highlight-python.min.js
vendored
Normal file
41
public/js/lib/highlight-python.min.js
vendored
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
/*! `python` grammar compiled for Highlight.js 11.9.0 */
|
||||
(()=>{var e=(()=>{"use strict";return e=>{
|
||||
const n=e.regex,a=/[\p{XID_Start}_]\p{XID_Continue}*/u,i=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],s={
|
||||
$pattern:/[A-Za-z]\w+|__\w+__/,keyword:i,
|
||||
built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"],
|
||||
literal:["__debug__","Ellipsis","False","None","NotImplemented","True"],
|
||||
type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"]
|
||||
},t={className:"meta",begin:/^(>>>|\.\.\.) /},r={className:"subst",begin:/\{/,
|
||||
end:/\}/,keywords:s,illegal:/#/},l={begin:/\{\{/,relevance:0},b={
|
||||
className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{
|
||||
begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,
|
||||
contains:[e.BACKSLASH_ESCAPE,t],relevance:10},{
|
||||
begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,
|
||||
contains:[e.BACKSLASH_ESCAPE,t],relevance:10},{
|
||||
begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,
|
||||
contains:[e.BACKSLASH_ESCAPE,t,l,r]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,
|
||||
end:/"""/,contains:[e.BACKSLASH_ESCAPE,t,l,r]},{begin:/([uU]|[rR])'/,end:/'/,
|
||||
relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{
|
||||
begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,
|
||||
end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,
|
||||
contains:[e.BACKSLASH_ESCAPE,l,r]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,
|
||||
contains:[e.BACKSLASH_ESCAPE,l,r]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]
|
||||
},o="[0-9](_?[0-9])*",c=`(\\b(${o}))?\\.(${o})|\\b(${o})\\.`,d="\\b|"+i.join("|"),g={
|
||||
className:"number",relevance:0,variants:[{
|
||||
begin:`(\\b(${o})|(${c}))[eE][+-]?(${o})[jJ]?(?=${d})`},{begin:`(${c})[jJ]?`},{
|
||||
begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${d})`},{
|
||||
begin:`\\b0[bB](_?[01])+[lL]?(?=${d})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${d})`
|
||||
},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${d})`},{begin:`\\b(${o})[jJ](?=${d})`
|
||||
}]},p={className:"comment",begin:n.lookahead(/# type:/),end:/$/,keywords:s,
|
||||
contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},m={
|
||||
className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/,
|
||||
end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:s,
|
||||
contains:["self",t,g,b,e.HASH_COMMENT_MODE]}]};return r.contains=[b,g,t],{
|
||||
name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:s,
|
||||
illegal:/(<\/|\?)|=>/,contains:[t,g,{begin:/\bself\b/},{beginKeywords:"if",
|
||||
relevance:0},b,p,e.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,a],scope:{
|
||||
1:"keyword",3:"title.function"},contains:[m]},{variants:[{
|
||||
match:[/\bclass/,/\s+/,a,/\s*/,/\(\s*/,a,/\s*\)/]},{match:[/\bclass/,/\s+/,a]}],
|
||||
scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{
|
||||
className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[g,m,b]}]}}})()
|
||||
;hljs.registerLanguage("python",e)})();
|
||||
25
public/js/lib/highlight-yaml.min.js
vendored
Normal file
25
public/js/lib/highlight-yaml.min.js
vendored
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
/*! `yaml` grammar compiled for Highlight.js 11.9.0 */
|
||||
(()=>{var e=(()=>{"use strict";return e=>{
|
||||
const n="true false yes no null",a="[\\w#;/?:@&=+$,.~*'()[\\]]+",s={
|
||||
className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/
|
||||
},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",
|
||||
variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]}]},i=e.inherit(s,{
|
||||
variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),l={
|
||||
end:",",endsWithParent:!0,excludeEnd:!0,keywords:n,relevance:0},t={begin:/\{/,
|
||||
end:/\}/,contains:[l],illegal:"\\n",relevance:0},g={begin:"\\[",end:"\\]",
|
||||
contains:[l],illegal:"\\n",relevance:0},b=[{className:"attr",variants:[{
|
||||
begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{
|
||||
begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---\\s*$",
|
||||
relevance:10},{className:"string",
|
||||
begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{
|
||||
begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,
|
||||
relevance:0},{className:"type",begin:"!\\w+!"+a},{className:"type",
|
||||
begin:"!<"+a+">"},{className:"type",begin:"!"+a},{className:"type",begin:"!!"+a
|
||||
},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",
|
||||
begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",
|
||||
relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{
|
||||
className:"number",
|
||||
begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b"
|
||||
},{className:"number",begin:e.C_NUMBER_RE+"\\b",relevance:0},t,g,s],r=[...b]
|
||||
;return r.pop(),r.push(i),l.contains=r,{name:"YAML",case_insensitive:!0,
|
||||
aliases:["yml"],contains:b}}})();hljs.registerLanguage("yaml",e)})();
|
||||
1213
public/js/lib/highlight.min.js
vendored
Normal file
1213
public/js/lib/highlight.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
6
public/js/lib/marked.min.js
vendored
Normal file
6
public/js/lib/marked.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
|
|
@ -5,8 +5,8 @@
|
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Koha — Reciprocal Support | Tractatus AI Safety</title>
|
||||
<meta name="description" content="Join a relationship of mutual support for AI safety. Koha is reciprocal giving that maintains community bonds — your contribution sustains this work; our work serves you and the commons.">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1774503360480">
|
||||
<style>
|
||||
.gradient-text { background: linear-gradient(120deg, #3b82f6 0%, #8b5cf6 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; }
|
||||
.skip-link { position: absolute; left: -9999px; }
|
||||
|
|
@ -53,7 +53,7 @@
|
|||
<a href="#main-content" class="skip-link">Skip to main content</a>
|
||||
|
||||
<!-- Navigation (injected by navbar.js) -->
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Main Content -->
|
||||
<main id="main-content" class="max-w-5xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
|
||||
|
|
@ -382,17 +382,17 @@
|
|||
</main>
|
||||
|
||||
<!-- Footer -->
|
||||
<script src="/js/components/footer.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/footer.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Currency utilities and selector -->
|
||||
<script src="/js/utils/currency.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/currency-selector.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/utils/currency.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/components/currency-selector.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Donation form functionality -->
|
||||
<script src="/js/koha-donation.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/koha-donation.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Internationalization -->
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/language-selector.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/components/language-selector.js?v=0.1.2.1774503360480"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
<link rel="stylesheet" href="/css/tailwind.css?v=1761163813">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=1761163813">
|
||||
<!-- Chart.js for visual analytics -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js" integrity="sha256-DiMmxoaAcr7BWSdgxnKQQ8ruopYKK0bO5qIZKqxqv/A=" crossorigin="anonymous"></script>
|
||||
<script src="/js/lib/chart.umd.min.js"></script>
|
||||
<style>
|
||||
.skip-link { position: absolute; left: -9999px; }
|
||||
.skip-link:focus { left: 0; z-index: 100; background: white; padding: 1rem; }
|
||||
|
|
|
|||
|
|
@ -13,9 +13,9 @@
|
|||
<meta name="theme-color" content="#8b5cf6">
|
||||
|
||||
<!-- Stylesheets -->
|
||||
<link rel="stylesheet" href="/css/design-system.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/company-hub-navbar.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/footer.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/design-system.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/company-hub-navbar.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/footer.css?v=0.1.2.1774503360480">
|
||||
|
||||
<style>
|
||||
:root {
|
||||
|
|
@ -761,10 +761,10 @@
|
|||
<!-- Footer -->
|
||||
<div id="main-footer" data-back-to-home="true" data-force-home-url="/index.html"></div>
|
||||
|
||||
<script src="/js/company-hub-i18n.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/theme.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/company-hub-navbar-component.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/company-hub-navbar.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/Footer.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/company-hub-i18n.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/theme.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/company-hub-navbar-component.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/company-hub-navbar.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/components/Footer.js?v=0.1.2.1774503360480"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -35,9 +35,9 @@
|
|||
<link rel="apple-touch-icon" href="/images/tractatus-icon-new.svg">
|
||||
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon-new.svg">
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1774503360480">
|
||||
<style>
|
||||
.hover-lift { transition: all 0.3s ease; }
|
||||
.hover-lift:hover { transform: translateY(-2px); }
|
||||
|
|
@ -83,7 +83,7 @@
|
|||
|
||||
<a href="#main-content" class="skip-link">Skip to main content</a>
|
||||
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Breadcrumb Navigation -->
|
||||
<nav class="bg-gray-50 border-b border-gray-200 py-3" aria-label="Breadcrumb">
|
||||
|
|
@ -370,7 +370,7 @@
|
|||
|
||||
<div class="bg-green-50 border border-green-200 rounded-lg p-4 mb-4">
|
||||
<p class="text-sm text-green-800">
|
||||
<strong>Production context:</strong> While Agent Lightning's RL training integration remains at proof-of-concept stage, the underlying Tractatus governance framework has been validated in production at Village Home Trust (11+ months continuous operation, 171,800+ audit decisions). Persistence and audit integrity are validated for inference governance — the open questions above specifically concern governance during RL training cycles.
|
||||
<strong>Production context:</strong> While Agent Lightning's RL training integration remains at proof-of-concept stage, the underlying Tractatus governance framework has been validated in production through Village AI (since October 2025). Persistence and audit integrity are validated for inference governance — the open questions above specifically concern governance during RL training cycles.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
|
@ -910,7 +910,7 @@
|
|||
<div class="bg-amber-50 border border-amber-200 rounded-lg p-6 mb-6">
|
||||
<p class="text-sm text-amber-900 font-medium mb-2" data-i18n="sections.development_status.warning_title">Production-Validated Research Framework</p>
|
||||
<p class="text-sm text-amber-800" data-i18n="sections.development_status.warning_text">
|
||||
Tractatus has been in active development for 11+ months (April 2025 to present) with production deployment at Village Home Trust, sovereign language model governance through Village AI, and over 171,800 audit decisions recorded. Independent validation and red-team testing remain outstanding research needs.
|
||||
Tractatus has been in active development since October 2025, with production deployment through Village AI and sovereign language model governance. Independent validation and red-team testing remain outstanding research needs.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
|
@ -1102,30 +1102,30 @@
|
|||
|
||||
<!-- Footer -->
|
||||
<!-- Internationalization (must load first for footer translations) -->
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/language-selector.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/components/language-selector.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Scroll Animations (Phase 3) -->
|
||||
<script src="/js/scroll-animations.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/scroll-animations.js?v=0.1.2.1774503360480"></script>
|
||||
<!-- Page Transitions (Phase 3) -->
|
||||
<script src="/js/page-transitions.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/page-transitions.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Version Management & PWA -->
|
||||
|
||||
<script src="/js/version-manager.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/leader-page.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/version-manager.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/leader-page.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Share CTA functionality -->
|
||||
<script src="/js/share-cta.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/share-cta.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Footer Component -->
|
||||
<script src="/js/components/footer.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/footer.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Feedback System (Governed by Tractatus + Agent Lightning) -->
|
||||
<script src="/js/components/feedback.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/feedback.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Newsletter Subscription Modal -->
|
||||
<script src="/js/components/newsletter.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/newsletter.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@
|
|||
"privacy": "Datenschutzerklärung",
|
||||
"gdpr": "DSGVO-Konformität",
|
||||
"contact": "Kontakt",
|
||||
"github": "GitHub"
|
||||
"source_code": "Quellcode"
|
||||
},
|
||||
"te_tiriti_label": "Te Tiriti o Waitangi:",
|
||||
"te_tiriti_text": "Wir erkennen Te Tiriti o Waitangi und unser Bekenntnis zu Partnerschaft, Schutz und Teilhabe an. Dieses Projekt respektiert die Māori-Datensouveränität (rangatiratanga) und kollektive Vormundschaft (kaitiakitanga).",
|
||||
|
|
@ -105,7 +105,7 @@
|
|||
"about_tractatus": "Über Tractatus",
|
||||
"values": "Werte",
|
||||
"docs": "Dokumentation",
|
||||
"github": "GitHub",
|
||||
"source_code": "Quellcode",
|
||||
"koha": "Koha",
|
||||
"navigation": "Navigation",
|
||||
"resources": "Ressourcen",
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -1,4 +1,17 @@
|
|||
{
|
||||
"whats_new": {
|
||||
"badge": "März 2026",
|
||||
"heading": "Was gibt’s Neues?",
|
||||
"card1_label": "Neue Forschung",
|
||||
"card1_title": "Guardian Agents und die Philosophie der KI-Verantwortlichkeit",
|
||||
"card1_desc": "Wie Wittgenstein, Berlin, Ostrom und Te Ao Māori zu denselben architektonischen Anforderungen für die Steuerung von KI in gemeinschaftlichen Kontexten konvergieren.",
|
||||
"card2_label": "Eingesetzt",
|
||||
"card2_title": "Guardian Agents in der Produktion",
|
||||
"card2_desc": "Vier-Phasen-Verifizierung unter Verwendung mathematischer Ähnlichkeit, nicht generativer Prüfung. Konfidenzabzeichen, Analyse auf Anspruchsebene und adaptives Lernen — alles mandantenbezogen.",
|
||||
"card3_label": "Fallstudie",
|
||||
"card3_title": "Village: Tractatus in der Produktion",
|
||||
"card3_desc": "Der erste Einsatz von konstitutioneller KI-Governance in einer Live-Community-Plattform. Produktionsmetriken, erklärte Einschränkungen und was wir seit Oktober 2025 gelernt haben."
|
||||
},
|
||||
"hero": {
|
||||
"title": "Architektonische Governance für KI-Systeme",
|
||||
"subtitle": "Einige Entscheidungen erfordern menschliches Urteilsvermögen — architektonisch erzwungen, nicht dem Ermessen einer noch so gut trainierten KI überlassen.",
|
||||
|
|
@ -14,6 +27,7 @@
|
|||
"corollary_p1": "Im Code führt diese Verzerrung zu messbaren Fehlern — falscher Anschluss, Verbindung verweigert, Vorfall in 14,7ms protokolliert. Derselbe architektonische Fehler tritt aber auch in jeder KI-Konversation auf, wo er viel schwerer zu erkennen ist.",
|
||||
"corollary_p2": "Wenn ein Nutzer aus einer kollektivistischen Kultur um Ratschläge für die Familie bittet, wählt das Modell standardmäßig die westliche individualistische Sprache — da 95% der Trainingsdaten diese widerspiegeln. Fragt ein Māori-Nutzer nach der Vormundschaft für Daten, bietet das Modell die Sprache der Eigentumsrechte anstelle von <em>kaitiakitanga</em>. Wenn jemand nach Entscheidungen über das Lebensende fragt, wird das Modell auf das utilitaristische Kalkül zurückgreifen und nicht auf den religiösen oder kulturellen Rahmen des Benutzers.",
|
||||
"corollary_p3": "Der Mechanismus ist identisch: Die Verteilungen der Trainingsdaten setzen den tatsächlichen Kontext des Benutzers außer Kraft. Im Code ist das Versagen binär und nachweisbar. In der Konversation ist er progressiv und unsichtbar — kulturell unangemessene Ratschläge sehen für das System und oft auch für den Nutzer wie “gute Ratschläge” aus. Es gibt keinen CrossReferenceValidator, der dies in 14,7ms erkennt.",
|
||||
"corollary_summary": "Derselbe Mechanismus funktioniert in jeder KI-Konversation. Wenn ein Nutzer aus einer kollektivistischen Kultur um Ratschläge für die Familie bittet, wählt das Modell die westliche, individualistische Sprache aus. Fragt ein Māori-Benutzer nach der Vormundschaft für seine Daten, bietet das Modell die Sprache der Eigentumsrechte an. Die Verteilung der Trainingsdaten setzt den Benutzerkontext außer Kraft — im Code ist das Versagen binär und nachweisbar, in der Konversation ist es progressiv und unsichtbar.",
|
||||
"corollary_link": "Lesen Sie die vollständige Analyse →",
|
||||
"closing": "Dies ist kein Einzelfall und beschränkt sich nicht auf Code. Es handelt sich um eine Fehlerkategorie, die sich verschlimmert, je leistungsfähiger die Modelle werden: Stärkere Muster erzeugen sicherere Überschreibungen — unabhängig davon, ob die Überschreibung eine Anschlussnummer oder ein Wertesystem ersetzt. Sicherheit durch Training allein ist unzureichend. Es handelt sich um einen strukturellen Fehler, der in allen Bereichen auftritt, in denen KI tätig ist, und die Lösung muss strukturell sein."
|
||||
},
|
||||
|
|
@ -31,8 +45,16 @@
|
|||
"download_pdf": "Herunterladen: Die philosophischen Grundlagen des Village-Projekts (PDF)"
|
||||
},
|
||||
"services": {
|
||||
"heading": "Sechs Governance-Dienste",
|
||||
"subtitle": "Jede KI-Aktion durchläuft vor der Ausführung sechs externe Dienste. Die Steuerung erfolgt auf dem kritischen Pfad — Umgehungen erfordern explizite Kennzeichnungen und werden protokolliert.",
|
||||
"heading": "Governance-Architektur",
|
||||
"subtitle": "Sechs Governance-Dienste im kritischen Pfad, plus Guardian Agents, die jede KI-Antwort überprüfen. Umgehungen erfordern explizite Kennzeichnungen und werden protokolliert.",
|
||||
"guardian_title": "Guardian Agents",
|
||||
"guardian_badge": "NEU — März 2026",
|
||||
"guardian_desc": "Vier-Phasen-Prüfung durch Einbettung der Kosinusähnlichkeit — mathematische Messung, keine generative Prüfung. Der Überwacher operiert in einem grundlegend anderen epistemischen Bereich als das System, das er überwacht, und vermeidet so das Versagen des Common-Mode.",
|
||||
"guardian_p1": "Antwort Verifizierung",
|
||||
"guardian_p2": "Analyse auf Anspruchsebene",
|
||||
"guardian_p3": "Erkennung von Anomalien",
|
||||
"guardian_p4": "Adaptives Lernen",
|
||||
"guardian_cta": "Vollständige Architektur der Guardian Agents →",
|
||||
"boundary_desc": "Hindert die KI daran, Wertentscheidungen zu treffen. Abwägungen zwischen Privatsphäre, ethischen Fragen und kulturellem Kontext erfordern menschliches Urteilsvermögen — architektonisch erzwungen.",
|
||||
"instruction_desc": "Klassifizierung der Anweisungen nach Dauerhaftigkeit (HIGH/MEDIUM/LOW) und Quadrant. Speichert sie extern, damit sie nicht durch Trainingsmuster überschrieben werden können.",
|
||||
"validator_desc": "Validiert KI-Aktionen anhand gespeicherter Anweisungen. Wenn die KI eine Aktion vorschlägt, die im Widerspruch zu einer expliziten Anweisung steht, hat die Anweisung Vorrang.",
|
||||
|
|
@ -45,6 +67,7 @@
|
|||
"badge": "Produktionsnachweis",
|
||||
"heading": "Tractatus in Produktion: Die Village-Plattform",
|
||||
"subtitle": "Village AI wendet alle sechs Governance-Dienste auf jede Nutzerinteraktion in einer Live-Community-Plattform an.",
|
||||
"stat_guardian": "Überprüfungsphasen der Wächter pro Antwort",
|
||||
"stat_services": "Governance-Dienste pro Antwort",
|
||||
"stat_months": "Monate in Produktion",
|
||||
"stat_overhead": "Governance-Overhead pro Interaktion",
|
||||
|
|
@ -61,7 +84,7 @@
|
|||
"researcher_f1": "Formale Grundlagen und Beweise",
|
||||
"researcher_f2": "Fehlermöglichkeitsanalyse",
|
||||
"researcher_f3": "Offene Forschungsfragen",
|
||||
"researcher_f4": "171.800+ analysierte Audit-Entscheidungen",
|
||||
"researcher_f4": "Audit-Daten aus dem Produktionseinsatz",
|
||||
"researcher_cta": "Forschung erkunden →",
|
||||
"implementer_title": "Für Implementierer",
|
||||
"implementer_subtitle": "Code- und Integrationsleitfäden",
|
||||
|
|
@ -95,7 +118,7 @@
|
|||
},
|
||||
"timeline": {
|
||||
"heading": "Entwicklung der Forschung",
|
||||
"subtitle": "Von einem Vorfall mit einer Portnummer zu einer produktiven Governance-Architektur, über 800 Commits und ein Jahr Forschung.",
|
||||
"subtitle": "Von einem Port-Nummern-Vorfall zu Guardian Agents in der Produktion — fünf Monate, über 3.400 Commits in beiden Projekten.",
|
||||
"oct_2025": "Einführung des Rahmens & 6 Governance-Dienste",
|
||||
"oct_nov_2025": "Alexander-Prinzipien, Agent Lightning, i18n",
|
||||
"dec_2025": "Village-Fallstudie & Einsatz von Village AI",
|
||||
|
|
@ -104,7 +127,11 @@
|
|||
"date_oct_2025": "Okt 2025",
|
||||
"date_oct_nov_2025": "Okt-Nov 2025",
|
||||
"date_dec_2025": "Dez 2025",
|
||||
"date_jan_2026": "Jan 2026"
|
||||
"date_jan_2026": "Jan 2026",
|
||||
"date_feb_2026": "Feb 2026",
|
||||
"feb_2026": "Souveräne Ausbildung, Forschung über Lenkungsvektoren",
|
||||
"date_mar_2026": "Mär 2026",
|
||||
"mar_2026": "Guardian Agents im Einsatz, Beta-Pilotphase eröffnet"
|
||||
},
|
||||
"claims": {
|
||||
"heading": "Ein Hinweis zu den Behauptungen",
|
||||
|
|
@ -143,7 +170,7 @@
|
|||
"legal_links": {
|
||||
"privacy": "Datenschutz",
|
||||
"contact": "Kontakt",
|
||||
"github": "GitHub"
|
||||
"source_code": "Quellcode"
|
||||
},
|
||||
"te_tiriti_label": "Te Tiriti o Waitangi:",
|
||||
"te_tiriti_text": "Wir bekennen uns zu Te Tiriti o Waitangi und unserer Verpflichtung zu Partnerschaft, Schutz und Beteiligung. Dieses Projekt respektiert die Datensouveränität der Māori (rangatiratanga) und die kollektive Vormundschaft (kaitiakitanga).",
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@
|
|||
"support_title": "Support",
|
||||
"support_desc": "Holen Sie sich Hilfe bei Implementierung, Integration und Fehlerbehebung.",
|
||||
"docs_title": "Dokumentation",
|
||||
"docs_github": "→ GitHub-Repository",
|
||||
"docs_source": "→ GitHub-Repository",
|
||||
"docs_full": "→ Vollständige Dokumentation",
|
||||
"docs_demos": "→ Live-Demos",
|
||||
"docs_glossary": "→ Glossar der Begriffe",
|
||||
|
|
@ -358,7 +358,7 @@
|
|||
"stat_governance_desc": "Vollständige Tractatus-Governance in der Inferenz-Pipeline",
|
||||
"stat_first": "Erstes Nicht-Claude",
|
||||
"stat_first_desc": "Validiert die Tractatus-Portabilität über Anthropic hinaus",
|
||||
"status_note": "<strong>Status:</strong> Inferenz-Governance betriebsbereit. Installation der souveränen Trainingspipeline in Arbeit. Produktionseinsatz bei Village Home Trust validiert die Governance-Portabilität über Modellarchitekturen hinweg.",
|
||||
"status_note": "<strong>Status:</strong> Inferenz-Governance betriebsbereit. Installation der souveränen Trainingspipeline in Arbeit. Produktionseinsatz bei die Village-Plattform validiert die Governance-Portabilität über Modellarchitekturen hinweg.",
|
||||
"cta": "Village AI Architekturdetails →"
|
||||
},
|
||||
"steering_impl": {
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@
|
|||
"development_status": {
|
||||
"heading": "Entwicklungsstatus",
|
||||
"warning_title": "Produktionsvalidiertes Forschungsframework",
|
||||
"warning_text": "Tractatus befindet sich seit über 11 Monaten in aktiver Entwicklung (April 2025 bis heute) mit Produktionseinsatz bei Village Home Trust, souveräner Sprachmodell-Governance durch Village AI und über 171.800 aufgezeichneten Audit-Entscheidungen. Unabhängige Validierung und Red-Team-Tests sind noch ausstehende Forschungsbedarfe.",
|
||||
"warning_text": "Tractatus befindet sich seit über 5 Monaten in aktiver Entwicklung (Oktober 2025 bis heute) mit Produktionseinsatz bei die Village-Plattform, souveräner Sprachmodell-Governance durch Village AI und Audit-Entscheidungen aus der Produktion. Unabhängige Validierung und Red-Team-Tests sind noch ausstehende Forschungsbedarfe.",
|
||||
"validation_title": "Validiert vs. Nicht Validiert",
|
||||
"validated_label": "Bestätigt:",
|
||||
"validated_text": "Framework regelt erfolgreich Claude Code in Entwicklungsworkflows. Der Anwender berichtet von einer Produktivitätssteigerung in Größenordnungen für nichttechnische Anwender, die Produktionssysteme aufbauen.",
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
"research_context": {
|
||||
"heading": "Forschungskontext & Umfang",
|
||||
"development_note": "Entwicklungskontext",
|
||||
"development_text": "Tractatus wird seit April 2025 entwickelt und befindet sich nun im aktiven Produktionsbetrieb (11+ Monate). Was als Einzelprojekt-Demonstration begann, umfasst nun den Produktionseinsatz bei Village Home Trust und souveräne Sprachmodell-Governance durch Village AI. Beobachtungen stammen aus direktem Engagement mit Claude Code (Anthropic Claude-Modelle, Sonnet 4.5 bis Opus 4.6) über mehr als 1.000 Entwicklungssitzungen. Dies ist explorative Forschung, keine kontrollierte Studie.",
|
||||
"development_text": "Tractatus wird seit Oktober 2025 entwickelt und befindet sich nun im aktiven Produktionsbetrieb (11+ Monate). Was als Einzelprojekt-Demonstration begann, umfasst nun den Produktionseinsatz bei die Village-Plattform und souveräne Sprachmodell-Governance durch Village AI. Beobachtungen stammen aus direktem Engagement mit Claude Code (Anthropic Claude-Modelle, Sonnet 4.5 bis Opus 4.6) über mehr als 900 Entwicklungssitzungen. Dies ist explorative Forschung, keine kontrollierte Studie.",
|
||||
"paragraph_1": "Die Anpassung fortschrittlicher KI an menschliche Werte ist eine der größten Herausforderungen, vor denen wir stehen. Da sich das Wachstum von Fähigkeiten unter dem Einfluss von Big Tech beschleunigt, stehen wir vor einem kategorischen Imperativ: Wir müssen die menschliche Kontrolle über Wertentscheidungen bewahren, oder wir riskieren, die Kontrolle vollständig abzugeben.",
|
||||
"paragraph_2": "Der Rahmen ist aus einer praktischen Notwendigkeit heraus entstanden. Während der Entwicklung beobachteten wir immer wieder, dass sich KI-Systeme über explizite Anweisungen hinwegsetzten, von festgelegten Wertvorgaben abwichen oder unter dem Druck des Kontextes stillschweigend die Qualität verschlechterten. Herkömmliche Governance-Ansätze (Grundsatzdokumente, ethische Richtlinien, Prompt-Engineering) erwiesen sich als unzureichend, um diese Fehler zu verhindern.",
|
||||
"paragraph_3": "Anstatt zu hoffen, dass sich KI-Systeme \"richtig verhalten\", schlägt der Tractatus strukturelle Beschränkungen vor, bei denen bestimmte Entscheidungsarten menschliches Urteilsvermögen erfordern. Diese architektonischen Grenzen können sich an individuelle, organisatorische und gesellschaftliche Normen anpassen - und schaffen so eine Grundlage für einen begrenzten KI-Betrieb, der mit dem Wachstum der Fähigkeiten sicherer skalieren kann.",
|
||||
|
|
@ -114,7 +114,7 @@
|
|||
"resources": {
|
||||
"heading": "Forschungsdokumentation",
|
||||
"audit_explorer_title": "Interaktives Audit-Analyse-Dashboard",
|
||||
"audit_explorer_subtitle": "Erkunden Sie 171.800+ Governance-Entscheidungen aus dem Produktionseinsatz",
|
||||
"audit_explorer_subtitle": "Erkunden Sie Governance-Entscheidungen aus dem Produktionseinsatz",
|
||||
"doc_1_title": "Organisationstheoretische Grundlagen",
|
||||
"doc_2_title": "Kulturelle DNA-Regeln",
|
||||
"doc_3_title": "Fallstudien: LLM-Misserfolgsmodi in der Praxis",
|
||||
|
|
@ -143,11 +143,11 @@
|
|||
"future_research_5": "Formale Überprüfung der Eigenschaften der Grenzdurchsetzung",
|
||||
"future_research_6": "Längsschnittstudie zur Wirksamkeit des Rahmens bei längerem Einsatz",
|
||||
"validated_heading": "Was wir validiert haben (Februar 2026)",
|
||||
"validated_intro": "Nach 11+ Monaten Entwicklung, 1.000+ Claude Code Sitzungen und Produktionseinsatz bei Village Home Trust haben wir fundierte Nachweise für:",
|
||||
"validated_intro": "Nach 11+ Monaten Entwicklung, 900+ Claude Code Sitzungen und Produktionseinsatz bei die Village-Plattform haben wir fundierte Nachweise für:",
|
||||
"validated_1_title": "✅ Architektonische Blockierungsmechanismen Funktionell",
|
||||
"validated_1_item1": "BoundaryEnforcer blockiert erfolgreich Wertentscheidungen vor der Ausführung",
|
||||
"validated_1_item2": "Pre-Commit-Hooks verhindern inst_017-Verletzungen (absolute Sicherheitsbedingungen)",
|
||||
"validated_1_item3": "171.800+ Audit-Entscheidungen in MongoDB aufgezeichnet (tractatus_dev.audit_log)",
|
||||
"validated_1_item3": "Audit-Entscheidungen in MongoDB aufgezeichnet (tractatus_dev.audit_log)",
|
||||
"validated_2_title": "✅ Anweisungspersistenz funktioniert sitzungsübergreifend",
|
||||
"validated_2_item1": "InstructionPersistenceClassifier pflegt 68 aktive Anweisungen (STRATEGIC: 27, SYSTEM: 21, OPERATIONAL: 18, TACTICAL: 2)",
|
||||
"validated_2_item2": "Die Erkennung von Mustern verhindert, dass sich KI über explizite organisatorische Richtlinien hinwegsetzt",
|
||||
|
|
@ -162,7 +162,7 @@
|
|||
"validated_4_item3": "Warnungen zur Erkennung des Verblassens des Rahmens (5/6 veraltete Komponenten = Warnung)",
|
||||
"validated_5_title": "✅ Multi-Deployment-Governance erfolgreich",
|
||||
"validated_5_item1": "Framework steuert agenticgovernance.digital (11+ Monate Dauerbetrieb)",
|
||||
"validated_5_item2": "Village Home Trust Produktionseinsatz: null Governance-Verletzungen",
|
||||
"validated_5_item2": "die Village-Plattform Produktionseinsatz: null Governance-Verletzungen",
|
||||
"validated_5_item3": "Village AI souveräne Inferenz-Governance: betriebsbereit",
|
||||
"validated_5_item4": "Kulturelle DNA-Regeln (inst_085-089) durch Pre-Commit-Hooks durchgesetzt (4+ Monate betriebsbereit)",
|
||||
"validated_5_item5": "Phase 5 Integration: 100% vollständig (alle 6 Dienste, 203/203 Tests bestanden)",
|
||||
|
|
@ -295,7 +295,7 @@
|
|||
"offer_2_title": "Dokumentation",
|
||||
"offer_2_desc": "Architekturspezifikationen, Implementierungsmuster, Governance-Regeln",
|
||||
"offer_3_title": "Data Audit",
|
||||
"offer_3_desc": "171.800+ Governance-Entscheidungen in MongoDB (anonymisierte Exporte verfügbar)",
|
||||
"offer_3_desc": "Produktions-Governance-Entscheidungen in MongoDB (anonymisierte Exporte verfügbar)",
|
||||
"offer_4_title": "Unterstützung bei der Bereitstellung",
|
||||
"offer_4_desc": "Hilfe bei der Einrichtung von lokalen oder Cloud-Instanzen für Tests",
|
||||
"offer_5_title": "Koordinierung",
|
||||
|
|
@ -444,14 +444,14 @@
|
|||
"research_question": "Forschungsfrage: Können architektonische Prinzipien aus dem Bereich der physikalischen Architektur (Alexander) getreu an die KI-Governance mit messbarer Wirksamkeit angepasst werden? Wir überwachen das Verhalten des Frameworks durch eine Audit-Log-Analyse und suchen nach einer empirischen Validierung.",
|
||||
"collaboration_heading": "Möglichkeiten der Forschungskooperation",
|
||||
"collaboration_items": [
|
||||
"Messung der Effektivität: Verbessern die Alexander-Prinzipien die Governance-Ergebnisse im Vergleich zur Ausgangslage? Zugang zu mehr als 171.800 Prüfungsentscheidungen für eine quantitative Analyse.",
|
||||
"Messung der Effektivität: Verbessern die Alexander-Prinzipien die Governance-Ergebnisse im Vergleich zur Ausgangslage? Zugang zu Produktions-Audit-Daten für eine quantitative Analyse.",
|
||||
"Gelehrte Überprüfung: Validierung der getreuen Anwendung von Alexanders Werk - sind wir \"direkt anwendend\" oder \"lose inspiriert von\"? Suche nach Christopher-Alexander-Gelehrten für eine formale Überprüfung.",
|
||||
"Domänenübergreifende Validierung: Wie lassen sich architektonische Prinzipien (Ganzheitlichkeit, lebendiger Prozess, Ungetrenntheit) auf nicht-physische Bereiche übertragen? Was ist eine rigorose Anpassung im Gegensatz zu einer oberflächlichen Terminologieübernahme?",
|
||||
"Musteranalyse: Auditprotokolle zeigen Dienstkoordinierungsmuster - weisen sie eine \"tiefe Verflechtung\" im Sinne von Alexander auf? Empirische Validierung der theoretischen Konstrukte."
|
||||
],
|
||||
"collaborate_text": "Arbeiten Sie mit uns zusammen: Wir freuen uns über Forscher, die diese Anwendung von Architekturprinzipien auf die KI-Governance untersuchen möchten. Wir können Zugang zu Audit-Protokollen, Framework-Code und Integrationsdokumentation für empirische Studien zur Verfügung stellen.",
|
||||
"contact_link": "Kontakt für Zusammenarbeit →",
|
||||
"audit_explorer_link": "171.800+ Audit-Entscheidungen erkunden →",
|
||||
"audit_explorer_link": "Audit-Entscheidungen erkunden →",
|
||||
"values_link": "Werte und Grundsätze →"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@
|
|||
"principle_line3": "Ein Modell, das über verinnerlichte Governance-Regeln verfügt UND innerhalb der Governance-Architektur arbeitet",
|
||||
"principle_line4": "führt zu besseren Ergebnissen als jeder Ansatz allein. Das Modell funktioniert MIT den Leitplanken,",
|
||||
"principle_line5": "nicht gegen sie — Verringerung der Rechenzeitverschwendung und Verbesserung der Antwortqualität.",
|
||||
"caveat": "<strong>Ehrlicher Vorbehalt:</strong> Schicht A (inhärente Governance über Schulungen) wurde empirisch in mehreren Schulungsläufen mit konsistenter Governance-Einhaltung validiert. Schicht B (aktive Governance über die Village-Codebasis) ist seit über 11 Monaten in der Produktion im Einsatz. Die zweischichtige These zeigt Ergebnisse, auch wenn die Bewertung weiterhin auf eigenen Angaben beruht. Eine unabhängige Prüfung ist geplant."
|
||||
"caveat": "<strong>Ehrlicher Vorbehalt:</strong> Schicht A (inhärente Governance über Schulungen) wurde empirisch in mehreren Schulungsläufen mit konsistenter Governance-Einhaltung validiert. Schicht B (aktive Governance über die Village-Codebasis) ist seit 5 Monaten in der Produktion im Einsatz. Die zweischichtige These zeigt Ergebnisse, auch wenn die Bewertung weiterhin auf eigenen Angaben beruht. Eine unabhängige Prüfung ist geplant."
|
||||
},
|
||||
"philosophy": {
|
||||
"heading": "Philosophische Grundlagen",
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@
|
|||
"privacy": "Privacy Policy",
|
||||
"gdpr": "GDPR Compliance",
|
||||
"contact": "Contact Us",
|
||||
"github": "GitHub"
|
||||
"source_code": "Source Code"
|
||||
},
|
||||
"te_tiriti_label": "Te Tiriti o Waitangi:",
|
||||
"te_tiriti_text": "We acknowledge Te Tiriti o Waitangi and our commitment to partnership, protection, and participation. This project respects Māori data sovereignty (rangatiratanga) and collective guardianship (kaitiakitanga).",
|
||||
|
|
@ -105,7 +105,7 @@
|
|||
"about_tractatus": "About Tractatus",
|
||||
"values": "Values",
|
||||
"docs": "Docs",
|
||||
"github": "GitHub",
|
||||
"source_code": "Source Code",
|
||||
"koha": "Koha",
|
||||
"navigation": "Navigation",
|
||||
"resources": "Resources",
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -10,7 +10,7 @@
|
|||
"card2_desc": "Four-phase verification using mathematical similarity, not generative checking. Confidence badges, claim-level analysis, and adaptive learning — all tenant-scoped.",
|
||||
"card3_label": "Case Study",
|
||||
"card3_title": "Village: Tractatus in Production",
|
||||
"card3_desc": "The first deployment of constitutional AI governance in a live community platform. Production metrics, honest limitations, and evidence from 17 months of operation."
|
||||
"card3_desc": "The first deployment of constitutional AI governance in a live community platform. Production metrics, stated limitations, and what we have learned since October 2025."
|
||||
},
|
||||
"hero": {
|
||||
"title": "Architectural Governance for AI Systems",
|
||||
|
|
@ -84,7 +84,7 @@
|
|||
"researcher_f1": "Formal foundations and proofs",
|
||||
"researcher_f2": "Failure mode analysis",
|
||||
"researcher_f3": "Open research questions",
|
||||
"researcher_f4": "171,800+ audit decisions analysed",
|
||||
"researcher_f4": "Production audit data from live deployment",
|
||||
"researcher_cta": "Explore research →",
|
||||
"implementer_title": "For Implementers",
|
||||
"implementer_subtitle": "Code and integration guides",
|
||||
|
|
@ -118,7 +118,7 @@
|
|||
},
|
||||
"timeline": {
|
||||
"heading": "Research Evolution",
|
||||
"subtitle": "From a port number incident to Guardian Agents in production — 17 months, 1,000+ commits.",
|
||||
"subtitle": "From a port number incident to Guardian Agents in production — five months, 3,400+ commits across both projects.",
|
||||
"oct_2025": "Framework inception & 6 governance services",
|
||||
"oct_nov_2025": "Alexander principles, Agent Lightning, i18n",
|
||||
"dec_2025": "Village case study & Village AI deployment",
|
||||
|
|
@ -170,7 +170,7 @@
|
|||
"legal_links": {
|
||||
"privacy": "Privacy Policy",
|
||||
"contact": "Contact Us",
|
||||
"github": "GitHub"
|
||||
"source_code": "Source Code"
|
||||
},
|
||||
"te_tiriti_label": "Te Tiriti o Waitangi:",
|
||||
"te_tiriti_text": "We acknowledge Te Tiriti o Waitangi and our commitment to partnership, protection, and participation. This project respects Māori data sovereignty (rangatiratanga) and collective guardianship (kaitiakitanga).",
|
||||
|
|
|
|||
|
|
@ -263,7 +263,7 @@
|
|||
"stat_governance_desc": "Full Tractatus governance in inference pipeline",
|
||||
"stat_first": "First Non-Claude",
|
||||
"stat_first_desc": "Validates Tractatus portability beyond Anthropic",
|
||||
"status_note": "<strong>Status:</strong> Inference governance operational. Sovereign training pipeline installation in progress. Production deployment at Village Home Trust validates governance portability across model architectures.",
|
||||
"status_note": "<strong>Status:</strong> Inference governance operational. Sovereign training pipeline installation in progress. Production deployment at the Village platform validates governance portability across model architectures.",
|
||||
"cta": "Village AI Architecture Details →"
|
||||
},
|
||||
"steering_impl": {
|
||||
|
|
@ -370,7 +370,7 @@
|
|||
"resources": {
|
||||
"heading": "Resources",
|
||||
"docs_title": "Documentation",
|
||||
"docs_github": "→ GitHub Repository",
|
||||
"docs_source": "→ GitHub Repository",
|
||||
"docs_full": "→ Full Documentation",
|
||||
"docs_demos": "→ Live Demos",
|
||||
"docs_glossary": "→ Glossary of Terms",
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@
|
|||
"development_status": {
|
||||
"heading": "Development Status",
|
||||
"warning_title": "Production-Validated Research Framework",
|
||||
"warning_text": "Tractatus has been in active development for 11+ months (April 2025 to present) with production deployment at Village Home Trust, sovereign language model governance through Village AI, and over 171,800 audit decisions recorded. Independent validation and red-team testing remain outstanding research needs.",
|
||||
"warning_text": "Tractatus has been in active development since October 2025, with production deployment through Village AI and sovereign language model governance. Independent validation and red-team testing remain outstanding research needs.",
|
||||
"validation_title": "Validated vs. Not Validated",
|
||||
"validated_label": "Validated:",
|
||||
"validated_text": "Framework successfully governs Claude Code in development workflows. User reports order-of-magnitude improvement in productivity for non-technical operators building production systems.",
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
"research_context": {
|
||||
"heading": "Research Context & Scope",
|
||||
"development_note": "Development Context",
|
||||
"development_text": "Tractatus has been developed from April 2025 and is now in active production (11+ months). What began as a single-project demonstration has expanded to include production deployment at Village Home Trust and sovereign language model governance through Village AI. Observations derive from direct engagement with Claude Code (Anthropic Claude models, Sonnet 4.5 through Opus 4.6) across over 1,000 development sessions. This is exploratory research, not controlled study.",
|
||||
"development_text": "Tractatus has been developed from October 2025 and is now in active production (5 months). What began as a single-project demonstration has expanded to include production deployment at the Village platform and sovereign language model governance through Village AI. Observations derive from direct engagement with Claude Code (Anthropic Claude models, Sonnet 4.5 through Opus 4.6) across over 900 development sessions. This is exploratory research, not controlled study.",
|
||||
"paragraph_1": "Aligning advanced AI with human values is among the most consequential challenges we face. As capability growth accelerates under big tech momentum, we confront a categorical imperative: preserve human agency over values decisions, or risk ceding control entirely.",
|
||||
"paragraph_2": "The framework emerged from practical necessity. During development, we observed recurring patterns where AI systems would override explicit instructions, drift from established values constraints, or silently degrade quality under context pressure. Traditional governance approaches (policy documents, ethical guidelines, prompt engineering) proved insufficient to prevent these failures.",
|
||||
"paragraph_3": "Instead of hoping AI systems \"behave correctly,\" Tractatus proposes structural constraints where certain decision types require human judgment. These architectural boundaries can adapt to individual, organizational, and societal norms—creating a foundation for bounded AI operation that may scale more safely with capability growth.",
|
||||
|
|
@ -127,7 +127,7 @@
|
|||
"resources": {
|
||||
"heading": "Research Documentation",
|
||||
"audit_explorer_title": "Interactive Audit Analytics Dashboard",
|
||||
"audit_explorer_subtitle": "Explore 171,800+ governance decisions from production deployment",
|
||||
"audit_explorer_subtitle": "Explore Production governance decisions from production deployment",
|
||||
"doc_1_title": "Organisational Theory Foundations",
|
||||
"doc_2_title": "Cultural DNA Rules",
|
||||
"doc_3_title": "Case Studies: Real-World LLM Failure Modes",
|
||||
|
|
@ -151,11 +151,11 @@
|
|||
"heading": "Limitations & Future Research Directions",
|
||||
"title": "Known Limitations & Research Gaps",
|
||||
"validated_heading": "What We've Validated (February 2026)",
|
||||
"validated_intro": "After 11+ months of development, 1,000+ Claude Code sessions, and production deployment at Village Home Trust, we have grounded evidence for:",
|
||||
"validated_intro": "After 5 months of development, 900+ Claude Code sessions, and production deployment at the Village platform, we have grounded evidence for:",
|
||||
"validated_1_title": "✅ Architectural Blocking Mechanisms Functional",
|
||||
"validated_1_item1": "BoundaryEnforcer successfully blocks values decisions before execution",
|
||||
"validated_1_item2": "Pre-commit hooks prevent inst_017 violations (absolute assurance terms)",
|
||||
"validated_1_item3": "171,800+ audit decisions recorded in MongoDB (tractatus_dev.audit_log)",
|
||||
"validated_1_item3": "Production audit decisions recorded in MongoDB (tractatus_dev.audit_log)",
|
||||
"validated_2_title": "✅ Instruction Persistence Works Across Sessions",
|
||||
"validated_2_item1": "InstructionPersistenceClassifier maintains 68 active instructions (STRATEGIC: 27, SYSTEM: 21, OPERATIONAL: 18, TACTICAL: 2)",
|
||||
"validated_2_item2": "Pattern bias detection prevents AI from overriding explicit organizational directives",
|
||||
|
|
@ -169,8 +169,8 @@
|
|||
"validated_4_item2": "Checkpoint triggers at 50k, 100k, 150k tokens",
|
||||
"validated_4_item3": "Framework fade detection alerts (5/6 components stale = warning)",
|
||||
"validated_5_title": "✅ Multi-Deployment Governance Successful",
|
||||
"validated_5_item1": "Framework governs agenticgovernance.digital (11+ months continuous operation)",
|
||||
"validated_5_item2": "Village Home Trust production deployment: zero governance violations",
|
||||
"validated_5_item1": "Framework governs agenticgovernance.digital (5 months continuous operation)",
|
||||
"validated_5_item2": "the Village platform production deployment: zero governance violations",
|
||||
"validated_5_item3": "Village AI sovereign inference governance: operational",
|
||||
"validated_5_item4": "Cultural DNA rules (inst_085-089) enforced through pre-commit hooks (4+ months operational)",
|
||||
"validated_5_item5": "Phase 5 integration: 100% complete (all 6 services, 203/203 tests passing)",
|
||||
|
|
@ -291,7 +291,7 @@
|
|||
"offer_2_title": "Documentation",
|
||||
"offer_2_desc": "Architecture specifications, implementation patterns, governance rules",
|
||||
"offer_3_title": "Audit Data",
|
||||
"offer_3_desc": "171,800+ governance decisions in MongoDB (anonymized exports available)",
|
||||
"offer_3_desc": "Production governance decisions in MongoDB (anonymized exports available)",
|
||||
"offer_4_title": "Deployment Support",
|
||||
"offer_4_desc": "Help setting up local or cloud instances for testing",
|
||||
"offer_5_title": "Coordination",
|
||||
|
|
@ -427,14 +427,14 @@
|
|||
"research_question": "Research Question: Can architectural principles from physical architecture domain (Alexander) be faithfully adapted to AI governance with measurable effectiveness? We are monitoring framework behavior through audit log analysis and seeking empirical validation.",
|
||||
"collaboration_heading": "Research Collaboration Opportunities",
|
||||
"collaboration_items": [
|
||||
"Effectiveness Measurement: Do Alexander principles improve governance outcomes compared to baseline? Access to 171,800+ audit decisions for quantitative analysis.",
|
||||
"Effectiveness Measurement: Do Alexander principles improve governance outcomes compared to baseline? Access to Production audit decisions for quantitative analysis.",
|
||||
"Scholarly Review: Validating faithful application of Alexander's work—are we \"directly applying\" or \"loosely inspired by\"? Seeking Christopher Alexander scholars for formal review.",
|
||||
"Cross-Domain Validation: How do architectural principles (wholeness, living process, not-separateness) translate to non-physical domains? What constitutes rigorous adaptation vs superficial terminology borrowing?",
|
||||
"Pattern Analysis: Audit logs show service coordination patterns—do they exhibit \"deep interlock\" as defined by Alexander? Empirical validation of theoretical constructs."
|
||||
],
|
||||
"collaborate_text": "Collaborate with us: We welcome researchers interested in studying this application of architectural principles to AI governance. We can provide audit log access, framework code, and integration documentation for empirical study.",
|
||||
"contact_link": "Contact for Collaboration →",
|
||||
"audit_explorer_link": "Explore 171,800+ Audit Decisions →",
|
||||
"audit_explorer_link": "Explore Production Audit Decisions →",
|
||||
"values_link": "Values & Principles →"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@
|
|||
"principle_line3": "A model that has internalised governance rules AND operates within governance architecture",
|
||||
"principle_line4": "produces better outputs than either approach alone. The model works WITH the guardrails,",
|
||||
"principle_line5": "not against them — reducing compute waste and improving response quality.",
|
||||
"caveat": "<strong>Honest caveat:</strong> Layer A (inherent governance via training) has been empirically validated across multiple training runs with consistent governance compliance. Layer B (active governance via Village codebase) has been operating in production for 11+ months. The dual-layer thesis is demonstrating results, though evaluation remains self-reported. Independent audit is planned."
|
||||
"caveat": "<strong>Honest caveat:</strong> Layer A (inherent governance via training) has been empirically validated across multiple training runs with consistent governance compliance. Layer B (active governance via Village codebase) has been operating in production for 5 months. The dual-layer thesis is demonstrating results, though evaluation remains self-reported. Independent audit is planned."
|
||||
},
|
||||
"philosophy": {
|
||||
"heading": "Philosophical Foundations",
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@
|
|||
"privacy": "Politique de confidentialité",
|
||||
"gdpr": "Conformité RGPD",
|
||||
"contact": "Nous contacter",
|
||||
"github": "GitHub"
|
||||
"source_code": "Code source"
|
||||
},
|
||||
"te_tiriti_label": "Te Tiriti o Waitangi :",
|
||||
"te_tiriti_text": "Nous reconnaissons Te Tiriti o Waitangi et notre engagement envers le partenariat, la protection et la participation. Ce projet respecte la souveraineté des données māori (rangatiratanga) et la tutelle collective (kaitiakitanga).",
|
||||
|
|
@ -105,7 +105,7 @@
|
|||
"about_tractatus": "À propos de Tractatus",
|
||||
"values": "Valeurs",
|
||||
"docs": "Documentation",
|
||||
"github": "GitHub",
|
||||
"source_code": "Code source",
|
||||
"koha": "Koha",
|
||||
"navigation": "Navigation",
|
||||
"resources": "Ressources",
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -1,4 +1,17 @@
|
|||
{
|
||||
"whats_new": {
|
||||
"badge": "Mars 2026",
|
||||
"heading": "Nouveautés",
|
||||
"card1_label": "Nouvelle recherche",
|
||||
"card1_title": "Guardian Agents et la philosophie de la responsabilité de l’IA",
|
||||
"card1_desc": "Comment Wittgenstein, Berlin, Ostrom et Te Ao Māori convergent vers les mêmes exigences architecturales pour gouverner l’IA dans des contextes communautaires.",
|
||||
"card2_label": "Déployé",
|
||||
"card2_title": "Guardian Agents en production",
|
||||
"card2_desc": "Vérification en quatre phases utilisant la similarité mathématique, et non la vérification générative. Badges de confiance, analyse au niveau des revendications et apprentissage adaptatif — le tout au niveau du locataire.",
|
||||
"card3_label": "Étude de cas",
|
||||
"card3_title": "Village : Tractatus en production",
|
||||
"card3_desc": "Le premier déploiement de la gouvernance constitutionnelle de l’IA dans une plateforme communautaire en direct. Métriques de production, limites énoncées et ce que nous avons appris depuis octobre 2025."
|
||||
},
|
||||
"hero": {
|
||||
"title": "Gouvernance architecturale pour les systèmes d’IA",
|
||||
"subtitle": "Certaines décisions requièrent un jugement humain — imposé par l’architecture, et non laissé à l’appréciation de l’IA, aussi bien formée soit-elle.",
|
||||
|
|
@ -14,6 +27,7 @@
|
|||
"corollary_p1": "Dans le code, ce biais produit des échecs mesurables — mauvais port, connexion refusée, incident enregistré en 14,7 ms. Mais la même faille architecturale est présente dans chaque conversation d’IA, où elle est beaucoup plus difficile à détecter.",
|
||||
"corollary_p2": "Lorsqu’un utilisateur issu d’une culture collectiviste demande des conseils sur la famille, le modèle adopte par défaut un cadre individualiste occidental — parce que c’est ce que reflètent 95 % des données d’apprentissage. Lorsqu’un utilisateur Māori pose une question sur la tutelle des données, le modèle propose un langage axé sur les droits de propriété au lieu de <em>kaitiakitanga</em>. Lorsque quelqu’un s’interroge sur les décisions de fin de vie, le modèle propose par défaut le calcul utilitaire plutôt que le cadre religieux ou culturel de l’utilisateur.",
|
||||
"corollary_p3": "Le mécanisme est identique : les distributions de données d’apprentissage prennent le pas sur le contexte réel de l’utilisateur. Dans le code, l’échec est binaire et détectable. Dans la conversation, il est graduel et invisible — les conseils culturellement inappropriés ressemblent à de “bons conseils” pour le système, et souvent pour l’utilisateur. Il n’y a pas de CrossReferenceValidator qui l’attrape en 14,7 ms.",
|
||||
"corollary_summary": "Le même mécanisme est à l’œuvre dans toutes les conversations d’IA. Lorsqu’un utilisateur issu d’une culture collectiviste demande des conseils sur la famille, le modèle adopte par défaut un cadre individualiste occidental. Lorsqu’un utilisateur Māori s’interroge sur la tutelle des données, le modèle propose un langage axé sur les droits de propriété. La distribution des données d’apprentissage prend le pas sur le contexte de l’utilisateur — dans le code, l’échec est binaire et détectable, dans la conversation, il est graduel et invisible.",
|
||||
"corollary_link": "Lire l’analyse complète →",
|
||||
"closing": "Il ne s’agit pas d’un cas particulier, et il n’est pas limité au code. Il s’agit d’une catégorie de défaillance qui s’aggrave au fur et à mesure que les modèles deviennent plus performants : des modèles plus forts produisent des dérogations plus sûres — que la dérogation remplace un numéro de port ou un système de valeurs. La sécurité par la formation seule est insuffisante. Le mode de défaillance est structurel, il opère dans tous les domaines où l’IA agit, et la solution doit être structurelle."
|
||||
},
|
||||
|
|
@ -31,8 +45,16 @@
|
|||
"download_pdf": "Télécharger : Les fondements philosophiques du projet Village (PDF)"
|
||||
},
|
||||
"services": {
|
||||
"heading": "Six services de gouvernance",
|
||||
"subtitle": "Chaque action d’IA passe par six services externes avant d’être exécutée. La gouvernance opère sur le chemin critique — les contournements nécessitent des drapeaux explicites et sont enregistrés.",
|
||||
"heading": "Architecture de la gouvernance",
|
||||
"subtitle": "Six services de gouvernance sur le chemin critique, plus des Guardian Agents qui vérifient chaque réponse de l’IA. Les contournements nécessitent des drapeaux explicites et sont enregistrés.",
|
||||
"guardian_title": "Guardian Agents",
|
||||
"guardian_badge": "NOUVEAU — Mars 2026",
|
||||
"guardian_desc": "Vérification en quatre phases à l’aide de la similarité de cosinus d’intégration — mesure mathématique et non vérification générative. L’observateur opère dans un domaine épistémique fondamentalement différent de celui du système qu’il surveille, ce qui permet d’éviter les défaillances en mode commun.",
|
||||
"guardian_p1": "Vérification des réponses",
|
||||
"guardian_p2": "Analyse au niveau de l’allégation",
|
||||
"guardian_p3": "Détection des anomalies",
|
||||
"guardian_p4": "Apprentissage adaptatif",
|
||||
"guardian_cta": "Architecture complète des Guardian Agents →",
|
||||
"boundary_desc": "Empêche l’IA de prendre des décisions sur les valeurs. Les compromis en matière de protection de la vie privée, les questions éthiques et le contexte culturel requièrent un jugement humain — imposé par l’architecture.",
|
||||
"instruction_desc": "Classe les instructions en fonction de leur persistance (HIGH/MEDIUM/LOW) et du quadrant. Les stocke à l’extérieur afin qu’elles ne puissent pas être remplacées par des modèles d’entraînement.",
|
||||
"validator_desc": "Valide les actions de l’IA par rapport aux instructions stockées. Lorsque l’IA propose une action qui entre en conflit avec une instruction explicite, c’est cette dernière qui prévaut.",
|
||||
|
|
@ -45,6 +67,7 @@
|
|||
"badge": "Preuves de production",
|
||||
"heading": "Le Tractatus en production : La plateforme Village",
|
||||
"subtitle": "Village AI applique les six services de gouvernance à chaque interaction avec l’utilisateur sur une plateforme communautaire en direct.",
|
||||
"stat_guardian": "Phases de vérification du Guardian par réponse",
|
||||
"stat_services": "Services de gouvernance par réponse",
|
||||
"stat_months": "Mois en production",
|
||||
"stat_overhead": "Frais généraux de gouvernance par interaction",
|
||||
|
|
@ -61,7 +84,7 @@
|
|||
"researcher_f1": "Fondements formels et preuves",
|
||||
"researcher_f2": "Analyse des modes de défaillance",
|
||||
"researcher_f3": "Questions de recherche ouvertes",
|
||||
"researcher_f4": "171 800+ décisions d'audit analysées",
|
||||
"researcher_f4": "Données d'audit issues du déploiement en production",
|
||||
"researcher_cta": "Explorer la recherche →",
|
||||
"implementer_title": "Pour les implémenteurs",
|
||||
"implementer_subtitle": "Code et guides d’intégration",
|
||||
|
|
@ -95,7 +118,7 @@
|
|||
},
|
||||
"timeline": {
|
||||
"heading": "Évolution de la recherche",
|
||||
"subtitle": "D’un incident de numéro de port à une architecture de gouvernance de production, à travers 800 commits et un an de recherche.",
|
||||
"subtitle": "D’un incident de numéro de port à des Guardian Agents en production — cinq mois, plus de 3 400 commits sur les deux projets.",
|
||||
"oct_2025": "Création du cadre & 6 services de gouvernance",
|
||||
"oct_nov_2025": "Principes d’Alexander, Agent Lightning, i18n",
|
||||
"dec_2025": "Étude de cas Village & déploiement de Village AI",
|
||||
|
|
@ -104,7 +127,11 @@
|
|||
"date_oct_2025": "Oct 2025",
|
||||
"date_oct_nov_2025": "Oct-Nov 2025",
|
||||
"date_dec_2025": "Déc 2025",
|
||||
"date_jan_2026": "Jan 2026"
|
||||
"date_jan_2026": "Jan 2026",
|
||||
"date_feb_2026": "Fév 2026",
|
||||
"feb_2026": "Formation à la souveraineté, recherche de vecteurs de direction",
|
||||
"date_mar_2026": "Mars 2026",
|
||||
"mar_2026": "Déploiement des Guardian Agents, ouverture du pilote bêta"
|
||||
},
|
||||
"claims": {
|
||||
"heading": "Une note sur les affirmations",
|
||||
|
|
@ -143,7 +170,7 @@
|
|||
"legal_links": {
|
||||
"privacy": "Politique de confidentialité",
|
||||
"contact": "Nous contacter",
|
||||
"github": "GitHub"
|
||||
"source_code": "Code source"
|
||||
},
|
||||
"te_tiriti_label": "Te Tiriti o Waitangi :",
|
||||
"te_tiriti_text": "Nous reconnaissons Te Tiriti o Waitangi et notre engagement en faveur du partenariat, de la protection et de la participation. Ce projet respecte la souveraineté des données Māori (rangatiratanga) et la tutelle collective (kaitiakitanga).",
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@
|
|||
"support_title": "Support",
|
||||
"support_desc": "Obtenez de l'aide pour l'implémentation, l'intégration et le dépannage.",
|
||||
"docs_title": "Documentation",
|
||||
"docs_github": "→ Dépôt GitHub",
|
||||
"docs_source": "→ Dépôt GitHub",
|
||||
"docs_full": "→ Documentation complète",
|
||||
"docs_demos": "→ Démonstrations en direct",
|
||||
"docs_glossary": "→ Glossaire des Termes",
|
||||
|
|
@ -358,7 +358,7 @@
|
|||
"stat_governance_desc": "Gouvernance Tractatus complète dans le pipeline d'inférence",
|
||||
"stat_first": "Premier non-Claude",
|
||||
"stat_first_desc": "Valide la portabilité de Tractatus au-delà d'Anthropic",
|
||||
"status_note": "<strong>Statut :</strong> Gouvernance d'inférence opérationnelle. Installation du pipeline d'entraînement souverain en cours. Le déploiement en production chez Village Home Trust valide la portabilité de la gouvernance entre architectures de modèles.",
|
||||
"status_note": "<strong>Statut :</strong> Gouvernance d'inférence opérationnelle. Installation du pipeline d'entraînement souverain en cours. Le déploiement en production chez la plateforme Village valide la portabilité de la gouvernance entre architectures de modèles.",
|
||||
"cta": "Détails de l'architecture Village AI →"
|
||||
},
|
||||
"steering_impl": {
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@
|
|||
"development_status": {
|
||||
"heading": "État du Développement",
|
||||
"warning_title": "Framework de recherche validé en production",
|
||||
"warning_text": "Tractatus est en développement actif depuis plus de 11 mois (avril 2025 à aujourd'hui) avec un déploiement en production chez Village Home Trust, une gouvernance souveraine de modèle de langue via Village AI, et plus de 171 800 décisions d'audit enregistrées. La validation indépendante et les tests de type red-team restent des besoins de recherche en suspens.",
|
||||
"warning_text": "Tractatus est en développement actif depuis plus de 5 mois (octobre 2025 à aujourd'hui) avec un déploiement en production chez la plateforme Village, une gouvernance souveraine de modèle de langue via Village AI, et des décisions de gouvernance en production. La validation indépendante et les tests de type red-team restent des besoins de recherche en suspens.",
|
||||
"validation_title": "Validé vs Non Validé",
|
||||
"validated_label": "Validé :",
|
||||
"validated_text": "Le cadre régit avec succès le code Claude dans les flux de travail de développement. L'utilisateur signale une amélioration de l'ordre de grandeur de la productivité pour les opérateurs non techniques qui construisent des systèmes de production.",
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
"research_context": {
|
||||
"heading": "Contexte & Portée de la Recherche",
|
||||
"development_note": "Contexte de Développement",
|
||||
"development_text": "Tractatus est développé depuis avril 2025 et est maintenant en production active (11+ mois). Ce qui a commencé comme une démonstration sur un projet unique s'est élargi pour inclure le déploiement en production chez Village Home Trust et la gouvernance souveraine de modèles linguistiques via Village AI. Les observations proviennent d'un engagement direct avec Claude Code (modèles Anthropic Claude, Sonnet 4.5 à Opus 4.6) sur plus de 1 000 sessions de développement. Il s'agit de recherche exploratoire, pas d'étude contrôlée.",
|
||||
"development_text": "Tractatus est développé depuis octobre 2025 et est maintenant en production active (11+ mois). Ce qui a commencé comme une démonstration sur un projet unique s'est élargi pour inclure le déploiement en production chez la plateforme Village et la gouvernance souveraine de modèles linguistiques via Village AI. Les observations proviennent d'un engagement direct avec Claude Code (modèles Anthropic Claude, Sonnet 4.5 à Opus 4.6) sur plus de 900 sessions de développement. Il s'agit de recherche exploratoire, pas d'étude contrôlée.",
|
||||
"paragraph_1": "L'alignement de l'IA avancée sur les valeurs humaines est l'un des défis les plus importants auxquels nous sommes confrontés. Alors que la croissance des capacités s'accélère sous l'impulsion des grandes technologies, nous sommes confrontés à un impératif catégorique : préserver le pouvoir de l'homme sur les décisions relatives aux valeurs, ou risquer de céder complètement le contrôle.",
|
||||
"paragraph_2": "Le cadre est né d'une nécessité pratique. Au cours du développement, nous avons observé des schémas récurrents dans lesquels les systèmes d'IA passaient outre les instructions explicites, s'écartaient des contraintes de valeurs établies ou dégradaient silencieusement la qualité sous la pression du contexte. Les approches traditionnelles en matière de gouvernance (documents de politique générale, lignes directrices éthiques, ingénierie rapide) se sont révélées insuffisantes pour prévenir ces défaillances.",
|
||||
"paragraph_3": "Au lieu d'espérer que les systèmes d'IA \"se comportent correctement\", Tractatus propose des contraintes structurelles où certains types de décisions requièrent un jugement humain. Ces limites architecturales peuvent s'adapter aux normes individuelles, organisationnelles et sociétales, créant ainsi une base pour un fonctionnement limité de l'IA qui peut s'adapter de manière plus sûre à la croissance des capacités.",
|
||||
|
|
@ -114,7 +114,7 @@
|
|||
"resources": {
|
||||
"heading": "Documentation de Recherche",
|
||||
"audit_explorer_title": "Tableau de bord interactif d'analyse des audits",
|
||||
"audit_explorer_subtitle": "Explorez 171 800+ décisions de gouvernance issues du déploiement en production",
|
||||
"audit_explorer_subtitle": "Explorez décisions de gouvernance issues du déploiement en production",
|
||||
"doc_1_title": "Fondements de la théorie des organisations",
|
||||
"doc_2_title": "Règles de l'ADN culturel",
|
||||
"doc_3_title": "Études de cas : Modes de défaillance du LLM dans le monde réel",
|
||||
|
|
@ -143,11 +143,11 @@
|
|||
"future_research_5": "Vérification formelle des propriétés d'application des limites",
|
||||
"future_research_6": "Étude longitudinale de l'efficacité du cadre au cours d'un déploiement prolongé",
|
||||
"validated_heading": "Ce que nous avons validé (février 2026)",
|
||||
"validated_intro": "Après 11+ mois de développement, 1 000+ sessions Claude Code et un déploiement en production chez Village Home Trust, nous avons des preuves solides pour :",
|
||||
"validated_intro": "Après 11+ mois de développement, 900+ sessions Claude Code et un déploiement en production chez la plateforme Village, nous avons des preuves solides pour :",
|
||||
"validated_1_title": "✅ Mécanismes de blocage architecturaux Fonctionnels",
|
||||
"validated_1_item1": "BoundaryEnforcer bloque avec succès les décisions relatives aux valeurs avant leur exécution",
|
||||
"validated_1_item2": "Les hooks de pré-commission empêchent les violations d'inst_017 (termes d'assurance absolue)",
|
||||
"validated_1_item3": "171 800+ décisions d'audit enregistrées dans MongoDB (tractatus_dev.audit_log)",
|
||||
"validated_1_item3": "Décisions d'audit enregistrées dans MongoDB (tractatus_dev.audit_log)",
|
||||
"validated_2_title": "✅ La persistance des instructions fonctionne entre les sessions",
|
||||
"validated_2_item1": "InstructionPersistenceClassifier maintient 68 instructions actives (STRATEGIC: 27, SYSTEM: 21, OPERATIONAL: 18, TACTICAL: 2)",
|
||||
"validated_2_item2": "La détection des biais empêche l'IA d'outrepasser les directives explicites de l'organisation",
|
||||
|
|
@ -162,7 +162,7 @@
|
|||
"validated_4_item3": "Alertes de détection de l'altération du cadre (5/6 composants altérés = avertissement)",
|
||||
"validated_5_title": "✅ Gouvernance multi-déploiement réussie",
|
||||
"validated_5_item1": "Le framework gouverne agenticgovernance.digital (11+ mois d'opération continue)",
|
||||
"validated_5_item2": "Déploiement en production Village Home Trust : zéro violation de gouvernance",
|
||||
"validated_5_item2": "Déploiement en production la plateforme Village : zéro violation de gouvernance",
|
||||
"validated_5_item3": "Gouvernance d'inférence souveraine Village AI : opérationnelle",
|
||||
"validated_5_item4": "Règles culturelles de l'ADN (inst_085-089) appliquées par le biais de crochets de précommission (4+ mois opérationnels)",
|
||||
"validated_5_item5": "Intégration Phase 5 : 100% complète (les 6 services, 203/203 tests réussis)",
|
||||
|
|
@ -295,7 +295,7 @@
|
|||
"offer_2_title": "Documentation",
|
||||
"offer_2_desc": "Spécifications d'architecture, modèles de mise en œuvre, règles de gouvernance",
|
||||
"offer_3_title": "Audit Data",
|
||||
"offer_3_desc": "171 800+ décisions de gouvernance dans MongoDB (exportations anonymes disponibles)",
|
||||
"offer_3_desc": "Décisions de gouvernance de production dans MongoDB (exportations anonymes disponibles)",
|
||||
"offer_4_title": "Soutien au déploiement",
|
||||
"offer_4_desc": "Aide à la mise en place d'instances locales ou en nuage pour les tests",
|
||||
"offer_5_title": "Coordination",
|
||||
|
|
@ -444,14 +444,14 @@
|
|||
"research_question": "Question de recherche : Les principes architecturaux du domaine de l'architecture physique (Alexander) peuvent-ils être fidèlement adaptés à la gouvernance de l'IA avec une efficacité mesurable ? Nous surveillons le comportement du cadre grâce à l'analyse des journaux d'audit et recherchons une validation empirique.",
|
||||
"collaboration_heading": "Possibilités de collaboration en matière de recherche",
|
||||
"collaboration_items": [
|
||||
"Mesure de l'efficacité : Les principes Alexander améliorent-ils les résultats en matière de gouvernance par rapport à la situation de référence ? Accès à plus de 171 800 décisions d'audit pour une analyse quantitative.",
|
||||
"Mesure de l'efficacité : Les principes Alexander améliorent-ils les résultats en matière de gouvernance par rapport à la situation de référence ? Accès à données d'audit de production pour une analyse quantitative.",
|
||||
"Revue scientifique : Valider l'application fidèle du travail d'Alexander - sommes-nous en train d'appliquer directement ou de nous inspirer librement du travail d'Alexander ? Recherche de spécialistes de Christopher Alexander pour une évaluation formelle.",
|
||||
"Validation inter-domaines : Comment les principes architecturaux (globalité, processus vivant, non-séparation) se traduisent-ils dans les domaines non physiques ? Qu'est-ce qui constitue une adaptation rigoureuse par rapport à un emprunt terminologique superficiel ?",
|
||||
"Analyse des schémas : Les journaux d'audit montrent des schémas de coordination des services - présentent-ils une \"imbrication profonde\" telle que définie par Alexander ? Validation empirique des concepts théoriques."
|
||||
],
|
||||
"collaborate_text": "Collaborez avec nous : Nous accueillons les chercheurs intéressés par l'étude de cette application des principes architecturaux à la gouvernance de l'IA. Nous pouvons fournir un accès aux journaux d'audit, au code du cadre et à la documentation d'intégration pour une étude empirique.",
|
||||
"contact_link": "Contact pour la collaboration →",
|
||||
"audit_explorer_link": "Explorer 171 800+ décisions d'audit →",
|
||||
"audit_explorer_link": "Explorer les décisions d'audit →",
|
||||
"values_link": "Valeurs et principes →"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@
|
|||
"principle_line3": "Un modèle qui a internalisé les règles de gouvernance ET qui fonctionne dans le cadre de l'architecture de gouvernance",
|
||||
"principle_line4": "produit de meilleurs résultats que l'une ou l'autre de ces approches. Le modèle fonctionne AVEC les garde-fous,",
|
||||
"principle_line5": "et non contre eux — réduire le gaspillage de ressources informatiques et améliorer la qualité des réponses.",
|
||||
"caveat": "<strong>Honnête mise en garde:</strong> La couche A (gouvernance inhérente via la formation) a été validée de manière empirique lors de multiples formations, avec une conformité cohérente en matière de gouvernance. La couche B (gouvernance active via la base de code du Village) fonctionne en production depuis plus de 11 mois. La thèse de la double couche donne des résultats, bien que l'évaluation reste autodéclarée. Un audit indépendant est prévu."
|
||||
"caveat": "<strong>Honnête mise en garde:</strong> La couche A (gouvernance inhérente via la formation) a été validée de manière empirique lors de multiples formations, avec une conformité cohérente en matière de gouvernance. La couche B (gouvernance active via la base de code du Village) fonctionne en production depuis 5 mois. La thèse de la double couche donne des résultats, bien que l'évaluation reste autodéclarée. Un audit indépendant est prévu."
|
||||
},
|
||||
"philosophy": {
|
||||
"heading": "Fondements philosophiques",
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@
|
|||
"privacy": "Kaupapahere Tūmataiti",
|
||||
"gdpr": "Whakaūnga GDPR",
|
||||
"contact": "Whakapā Mai",
|
||||
"github": "GitHub"
|
||||
"source_code": "Waehere Pūtake"
|
||||
},
|
||||
"te_tiriti_label": "Te Tiriti o Waitangi:",
|
||||
"te_tiriti_text": "E whakaae ana mātou ki Te Tiriti o Waitangi me tō mātou ngākaunui ki te mahi tahi, te tiaki, me te whai wāhi. E whakanuia ana e tēnei kaupapa te rangatiratanga raraunga Māori me te kaitiakitanga ā-iwi.",
|
||||
|
|
@ -105,7 +105,7 @@
|
|||
"about_tractatus": "Mō Tractatus",
|
||||
"values": "Ngā Uara",
|
||||
"docs": "Ngā Tuhinga",
|
||||
"github": "GitHub",
|
||||
"source_code": "Waehere Pūtake",
|
||||
"koha": "Koha",
|
||||
"navigation": "Whakatere",
|
||||
"resources": "Ngā Rauemi",
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -1,4 +1,17 @@
|
|||
{
|
||||
"whats_new": {
|
||||
"badge": "Māehe 2026",
|
||||
"heading": "He aha ngā mea hou?",
|
||||
"card1_label": "Rangahau Hou",
|
||||
"card1_title": "Guardian Agents me te Arirangi o te Haepapa AI",
|
||||
"card1_desc": "Me pēhea a Wittgenstein, a Berlin, a Ostrom, me Te Ao Māori e whakakotahi ana ki ngā whakaritenga hanganga kotahi mō te whakahaere i te AI i roto i ngā horopaki hapori.",
|
||||
"card2_label": "Kua whakarewahia",
|
||||
"card2_title": "Guardian Agents kei te whakaputanga",
|
||||
"card2_desc": "Whakamana i ngā wāhanga e whā mā te whakamahi i te ōritetanga pāngarau, ehara i te tirotiro whakaputa. Ngā tohu whakawhirinaki, tātaritanga taumata kerēme, me te ako urutau — katoa e hāngai ana ki ngā kaipā.",
|
||||
"card3_label": "Tātaritanga Take",
|
||||
"card3_title": "Village: Tractatus kei te whakaputanga",
|
||||
"card3_desc": "Ko te whakaurunga tuatahi o te whakahaere AI ā-ture i roto i tētahi papanga hapori ora. Ngā ine whakaputa, ngā here kua whakatauhia, me ngā mea kua akohia e mātou mai i te Oketopa 2025."
|
||||
},
|
||||
"hero": {
|
||||
"title": "Te Whakahaere Hanga mō ngā Pūnaha AI",
|
||||
"subtitle": "Ko ētahi whakatau me whai te whakaaro tangata — kua whakaaetia ā-hanga, ehara i te mea ka waiho mā te AI, ahakoa tōna matatau.",
|
||||
|
|
@ -14,6 +27,7 @@
|
|||
"corollary_p1": "I roto i te waehere, ka puta mai ngā hapa inenga i tēnei whakaaro — tauranga hē, ka whakahēngia te hononga, ka tuhia te takahanga i roto i te 14.7ms. Engari ko taua hapa hanga anō e mahi ana i roto i ngā kōrerorero AI katoa, he uaua ake ki te kite.",
|
||||
"corollary_p2": "Ina pātai tētahi kaiwhakamahi nō tētahi ahurea whakakotahi mō te tohutohu ā-whānau, ka hoki te tauira ki te anga takitahi Pākehā — nā te mea ko te 95% o ngā raraunga whakangungu e whakaata ana i tēnā. Ina pātai tētahi kaiwhakamahi Māori mō te tiakitanga raraunga, ka tukuna e te tauira te reo mō ngā motika rawa kē i te <em>kaitiakitanga</em>. Ina pātai tētahi mō ngā whakatau mutunga-ora, ka hoki te tauira ki te tātaitanga whaihua kē i te anga whakapono, ahurea rānei o te kaiwhakamahi.",
|
||||
"corollary_p3": "Ko te tikanga he ōrite: ka takahia te horopaki tūturu o te kaiwhakamahi e ngā tohatohatanga raraunga whakangungu. I roto i te waehere, he mārama te hapa, ka kitea. I roto i te kōrerorero, he āhua kē, kāore e kitea — ko te tohutohu kāore e tika ā-ahurea ka āhua rite ki te “tohutohu pai” ki te pūnaha, ā, i ētahi wā ki te kaiwhakamahi anō. Kāore he CrossReferenceValidator e hopu ana i roto i te 14.7ms.",
|
||||
"corollary_summary": "Ka mahi tonu taua pūnaha i ia kōrero atamai. Ina pātai tētahi kaiwhakamahi nō tētahi ahurea whakakotahi mō ngā tohutohu whānau, ka huri aunoa te tauira ki te anga takitahi o te Hauāuru. Ina pātai tētahi kaiwhakamahi Māori mō te tiakitanga raraunga, ka tuku te tauira i te reo mō ngā mana rawa. Ka whakakore ngā tohatoha raraunga whakangungu i te horopaki o te kaiwhakamahi — i roto i te waehere he hapa rua, ka kitea; i roto i te kōrero he hapa ā-taumata, kāore e kitea.",
|
||||
"corollary_link": "Pānuitia te tātaritanga katoa →",
|
||||
"closing": "Ehara tēnei i te āhuatanga motuhake, ā, ehara i te mea e herea ana ki te waehere anake. He momo hapa ka kino ake i te piki haere o te kaha o ngā tauira: ko ngā tauira kaha ake ka whakaputa tauira takahi māia ake — ahakoa ka whakakapihia he tau tauranga, he pūnaha uara rānei. Kāore e rawaka te haumarutanga mā te whakangungu anake. He ā-hanga te momo hapa, e mahi ana puta noa i ngā rohe katoa e mahi ai te AI, ā, me ā-hanga anō te rongoā."
|
||||
},
|
||||
|
|
@ -31,8 +45,16 @@
|
|||
"download_pdf": "Tikiake: Ngā Tūāpapa Rapunga Whakaaro o te Kaupapa Village (PDF)"
|
||||
},
|
||||
"services": {
|
||||
"heading": "E Ono ngā Ratonga Whakahaere",
|
||||
"subtitle": "Ka haere ngā mahi AI katoa mā ngā ratonga ā-waho e ono i mua i te whakatutuki. Ka mahi te whakahaere i te ara matua — me whai kara mārama ngā kaupare, ā, ka tuhia.",
|
||||
"heading": "Whakangao Whakahaere",
|
||||
"subtitle": "E ono ngā ratonga whakahaere kei te ara matua, ā, kei reira hoki ngā Guardian Agents e whakamana ana i ia whakautu a te AI. Me whai tohu mārama ngā huarahi whakawhiti, ā, ka tuhia ki ngā rangitaki.",
|
||||
"guardian_title": "Guardian Agents",
|
||||
"guardian_badge": "HŌU — Māehe 2026",
|
||||
"guardian_desc": "Whakamana ā-wāhanga e whā mā te whakamahi i te ōritetanga cosine whakaurunga — he ine pāngarau, ehara i te tirotiro whakaputa. Ka mahi te kaitirotiro i roto i tētahi rohe mātauranga tino rerekē ki te pūnaha e tirohia ana e ia, kia karo ai i te hapa aronga-ā-noa.",
|
||||
"guardian_p1": "Whakamana Whakautu",
|
||||
"guardian_p2": "Tātaritanga taumata kerēme",
|
||||
"guardian_p3": "Te kitenga i ngā āhuatanga rerekē",
|
||||
"guardian_p4": "Ako Whakarite",
|
||||
"guardian_cta": "Te hanganga katoa o Guardian Agents →",
|
||||
"boundary_desc": "Ka aukati i te AI i te whakatau uara. Ko ngā whakawhitinga tūmataiti, ngā pātai tikanga, me te horopaki ahurea me whai te whakaaro tangata — kua whakaaetia ā-hanga.",
|
||||
"instruction_desc": "Ka whakarōpū i ngā tohutohu mā te pumautanga (TEITEI/WAENGA/ĪHARA) me te mahere. Ka rongoa ki waho kia kore ai e takahia e ngā tauira whakangungu.",
|
||||
"validator_desc": "Ka whakaū i ngā mahi AI ki ngā tohutohu kua rongoa. Ina tuku te AI i tētahi mahi e pakanga ana ki tētahi tohutohu mārama, ka toa te tohutohu.",
|
||||
|
|
@ -45,6 +67,7 @@
|
|||
"badge": "Taunakitanga Whakamahinga",
|
||||
"heading": "Tractatus i te Whakamahinga: Te Pūhara Village",
|
||||
"subtitle": "Ka whakamahi a Village AI i ngā ratonga whakahaere e ono katoa ki ia tauwhitinga kaiwhakamahi i tētahi pūhara hapori ora.",
|
||||
"stat_guardian": "Ngā wāhanga whakamana kaitiaki mō ia whakautu",
|
||||
"stat_services": "Ngā ratonga whakahaere mō ia whakautu",
|
||||
"stat_months": "Ngā marama i te whakamahinga",
|
||||
"stat_overhead": "Te utu whakahaere mō ia tauwhitinga",
|
||||
|
|
@ -61,7 +84,7 @@
|
|||
"researcher_f1": "Ngā tūāpapa ā-tikanga me ngā whakatūturu",
|
||||
"researcher_f2": "Te tātaritanga momo hapa",
|
||||
"researcher_f3": "Ngā pātai rangahau tuwhera",
|
||||
"researcher_f4": "171,800+ whakatau arotake kua tātaritia",
|
||||
"researcher_f4": "Ngā whakatau arotake mai i te whakamahinga whakaputa",
|
||||
"researcher_cta": "Tūhura rangahau →",
|
||||
"implementer_title": "Mā ngā Kaiwhakatinana",
|
||||
"implementer_subtitle": "Waehere me ngā aratohu whakakotahi",
|
||||
|
|
@ -95,7 +118,7 @@
|
|||
},
|
||||
"timeline": {
|
||||
"heading": "Te Whanake o te Rangahau",
|
||||
"subtitle": "Mai i tētahi takahanga tau tauranga ki tētahi hanga whakahaere whakamahinga, puta noa i ngā tuku 800 me te kotahi tau rangahau.",
|
||||
"subtitle": "Mai i te take nama tauranga ki ngā Guardian Agents i te whakaputanga — rima marama, neke atu i te 3,400 ngā tuku whakarerekētanga puta noa i ngā kaupapa e rua.",
|
||||
"oct_2025": "Te tīmatatanga anga & ngā ratonga whakahaere e 6",
|
||||
"oct_nov_2025": "Ngā mātāpono Alexander, Agent Lightning, i18n",
|
||||
"dec_2025": "Tātaritanga Village & te whakatūranga Village AI",
|
||||
|
|
@ -104,7 +127,11 @@
|
|||
"date_oct_2025": "Oke 2025",
|
||||
"date_oct_nov_2025": "Oke-Now 2025",
|
||||
"date_dec_2025": "Tīh 2025",
|
||||
"date_jan_2026": "Kohi 2026"
|
||||
"date_jan_2026": "Kohi 2026",
|
||||
"date_feb_2026": "Hui 2026",
|
||||
"feb_2026": "Tautuhi rangatira, rangahau aronga whakahaere",
|
||||
"date_mar_2026": "Pou 2026",
|
||||
"mar_2026": "Kua whakarewahia ngā Guardian Agents, kua tuwhera te whakamātautau beta"
|
||||
},
|
||||
"claims": {
|
||||
"heading": "He kupu mō ngā kerēme",
|
||||
|
|
@ -143,7 +170,7 @@
|
|||
"legal_links": {
|
||||
"privacy": "Kaupapahere Tūmataiti",
|
||||
"contact": "Whakapā Mai",
|
||||
"github": "GitHub"
|
||||
"source_code": "Waehere Pūtake"
|
||||
},
|
||||
"te_tiriti_label": "Te Tiriti o Waitangi:",
|
||||
"te_tiriti_text": "E mihi ana mātou ki Te Tiriti o Waitangi me tō mātou manawanui ki te rangapū, te tiakitanga, me te whakauru. E whakaute ana tēnei kaupapa i te rangatiratanga raraunga Māori (rangatiratanga) me te kaitiakitanga ā-rōpū (kaitiakitanga).",
|
||||
|
|
|
|||
|
|
@ -263,7 +263,7 @@
|
|||
"stat_governance_desc": "Whakahaere Tractatus katoa i roto i te paipa whakapae",
|
||||
"stat_first": "Tuatahi Kāore i a Claude",
|
||||
"stat_first_desc": "E whakau ana i te kawea o Tractatus ki tua atu o Anthropic",
|
||||
"status_note": "Tūnga: Kei te whakahaere te whakahaere whakapae. Kei te whakatinanahia te whakaurunga o te ara whakangungu rangatira. E whakamana ana te whakarewatanga whakaputa i Village Home Trust i te kawea o te whakahaere puta noa i ngā hanganga tauira.",
|
||||
"status_note": "Tūnga: Kei te whakahaere te whakahaere whakapae. Kei te whakatinanahia te whakaurunga o te ara whakangungu rangatira. E whakamana ana te whakarewatanga whakaputa i te pūhara Village i te kawea o te whakahaere puta noa i ngā hanganga tauira.",
|
||||
"cta": "Ngā taipitopito o te hanganga Village AI →"
|
||||
},
|
||||
"steering_impl": {
|
||||
|
|
@ -370,7 +370,7 @@
|
|||
"resources": {
|
||||
"heading": "Rauemi",
|
||||
"docs_title": "Tuhipoka",
|
||||
"docs_github": "→ Pātaka GitHub",
|
||||
"docs_source": "→ Pātaka GitHub",
|
||||
"docs_full": "→ Ngā Tuhinga Katoa",
|
||||
"docs_demos": "→ Whakaaturanga Ora",
|
||||
"docs_glossary": "Rārangi Kupu Whakamārama",
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@
|
|||
"development_status": {
|
||||
"heading": "Tūnga Whanaketanga",
|
||||
"warning_title": "Anga Rangahau Kua Whakamanaia e te Hanga",
|
||||
"warning_text": "Kua neke atu i te 11 marama e whakawhanake ana a Tractatus (Mai 2025 ki nāianei), me te whakarewatanga whakaputa ki Village Home Trust, te whakahaere rangatira o te tauira reo mā Village AI, me te neke atu i te 171,800 whakataunga arotake kua tuhia. Kei te toe tonu ngā whakamana motuhake me ngā whakamātautau kapa whero hei hiahia rangahau.",
|
||||
"warning_text": "Kua whakawhanake a Tractatus mai i te Oketopa 2025, me te whakarewatanga whakaputa mā Village AI me te whakahaere rangatira o te tauira reo. Kei te toe tonu ngā whakamana motuhake me ngā whakamātautau kapa whero hei hiahia rangahau.",
|
||||
"validation_title": "Kua whakamanahia vs. Kāore i whakamanahia",
|
||||
"validated_label": "Kua whakamanahia:",
|
||||
"validated_text": "Kei te whakahaere pai te anga i te Waehere Claude i roto i ngā mahinga whakawhanake. E ripoata ana ngā kaiwhakamahi i te pikinga hua mahi e tekau ngā wā mō ngā kaiwhakahaere kāore i te hangarau e hanga ana i ngā pūnaha whakaputa.",
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
"research_context": {
|
||||
"heading": "Horopaki me te Whānuitanga o te Rangahau",
|
||||
"development_note": "Horopaki Whanaketanga",
|
||||
"development_text": "Kua whakawhanakehia a Tractatus mai i Aperira 2025, ā, kei te whakaputa tonu ināianei (neke atu i te 11 marama). I tīmata hei whakaaturanga kaupapa kotahi, kua whakawhānuihia kia whakauru i te whakaurunga whakaputa ki Village Home Trust me te whakahaere rangatira o ngā tauira reo mā Village AI. Nā ngā wheako tūturu i puta mai i te mahi tūhono ki Claude Code (ngā tauira Claude a Anthropic, Sonnet 4.5 ki Opus 4.6) i roto i ngā wānanga whakawhanake neke atu i te 1,000. He rangahau torotoro tēnei, ehara i te rangahau whakahaere.",
|
||||
"development_text": "Kua whakawhanakehia a Tractatus mai i Oketopa 2025, ā, kei te whakaputa tonu ināianei (neke atu i te 5 marama). I tīmata hei whakaaturanga kaupapa kotahi, kua whakawhānuihia kia whakauru i te whakaurunga whakaputa ki te pūhara Village me te whakahaere rangatira o ngā tauira reo mā Village AI. Nā ngā wheako tūturu i puta mai i te mahi tūhono ki Claude Code (ngā tauira Claude a Anthropic, Sonnet 4.5 ki Opus 4.6) i roto i ngā wānanga whakawhanake neke atu i te 900. He rangahau torotoro tēnei, ehara i te rangahau whakahaere.",
|
||||
"paragraph_1": "Ko te whakakotahi i te AI matatau ki ngā uara a te tangata tētahi o ngā wero tino nui e arohia ana e tātou. I te tere haere o te tipu o ngā pūkenga i raro i te kaha o ngā kamupene hangarau nui, ka tū tātou ki tētahi here whakahau: kia tiakina te mana whakahaere a te tangata ki ngā whakataunga uara, kia kore ai e tuku katoa te mana whakahaere.",
|
||||
"paragraph_2": "I puta te anga i te hiahia whaihua. I te wā o te whakawhanaketanga, i kite mātou i ngā tauira e hoki anō ana, ā, i reira ka whakakore ngā pūnaha AI i ngā tohutohu mārama, ka wehe atu i ngā here uara kua whakaritea, ka heke huna te kounga i raro i te pēhanga horopaki. Kāore ngā tikanga whakahaere tuku iho (ngā tuhinga kaupapa here, ngā aratohu matatika, te hangarau tono) i whai hua ki te aukati i ēnei hapa.",
|
||||
"paragraph_3": "Kāore e tūmanakohia kia tika tonu ngā pūnaha AI; e tūtohu ana a Tractatus i ngā here hanganga e hiahiatia ai te whakataunga a te tangata mō ētahi momo whakatau. Ka taea e ēnei here hanganga te urutau ki ngā tikanga takitahi, whakahaere, me te hapori—hei whakatū i tētahi turanga mō te whakahaere AI herea, kia taea ai te whakawhānui haumaru ake i te tipu o tōna āheinga.",
|
||||
|
|
@ -127,7 +127,7 @@
|
|||
"resources": {
|
||||
"heading": "Tuhinga Rangahau",
|
||||
"audit_explorer_title": "Paetukutuku Tātaritanga Arotake Whakauru",
|
||||
"audit_explorer_subtitle": "Tūhuratia ngā whakataunga whakahaere neke atu i te 171,800 mai i te whakaurunga whakaputa",
|
||||
"audit_explorer_subtitle": "Tūhuratia ngā whakataunga whakahaere mai i te whakaurunga whakaputa",
|
||||
"doc_1_title": "Ngā Pūtake o te Arorangi Whakahaere",
|
||||
"doc_2_title": "Ngā Ture o te DNA Ahurea",
|
||||
"doc_3_title": "Ngā rangahau take: Ngā momo hapa o te LLM i te ao tūturu",
|
||||
|
|
@ -151,11 +151,11 @@
|
|||
"heading": "Ngā here me ngā ahunga rangahau ā muri ake",
|
||||
"title": "Ngā here e mōhiotia ana me ngā āputa rangahau",
|
||||
"validated_heading": "Ngā mea kua whakamanahia e mātou (Hui-tanguru 2026)",
|
||||
"validated_intro": "I muri i te neke atu i te 11 marama o te whakawhanaketanga, neke atu i te 1,000 wā whakamahi i te Claude Code, me te whakarewatanga ki te whakaputanga i Village Home Trust, kei a mātou ngā taunakitanga pakari mō:",
|
||||
"validated_intro": "I muri i te neke atu i te 5 marama o te whakawhanaketanga, neke atu i te 900 wā whakamahi i te Claude Code, me te whakarewatanga ki te whakaputanga i te pūhara Village, kei a mātou ngā taunakitanga pakari mō:",
|
||||
"validated_1_title": "✅ Ngā pūnaha aukati hanganga e mahi ana",
|
||||
"validated_1_item1": "Kua angitu a BoundaryEnforcer ki te aukati i ngā whakataunga uara i mua i te whakahaere.",
|
||||
"validated_1_item2": "Ka ārai ngā pūāhua i mua i te whakaae i ngā hē inst_017 (ngā tikanga whakamana mutunga kore)",
|
||||
"validated_1_item3": "Neke atu i te 171,800 ngā whakataunga arotake kua tuhia ki MongoDB (tractatus_dev.audit_log)",
|
||||
"validated_1_item3": "Ngā whakataunga arotake kua tuhia ki MongoDB (tractatus_dev.audit_log)",
|
||||
"validated_2_title": "✅ Ka mahi tonu ngā tohutohu i ngā wāhanga katoa",
|
||||
"validated_2_item1": "Kei te pupuri a InstructionPersistenceClassifier i ngā tohutohu e 68 e mahi ana (Rautaki: 27, Pūnaha: 21, Whakahaere: 18, Tautika: 2)",
|
||||
"validated_2_item2": "Ka ārai te kitenga i ngā tauira whakawhē i te AI kia kore ai e whakakore i ngā tohutohu whakahaere kua tautuhia.",
|
||||
|
|
@ -169,8 +169,8 @@
|
|||
"validated_4_item2": "Ka whakaohohia ngā tohu arotake i te 50,000, 100,000, 150,000 tohu",
|
||||
"validated_4_item3": "Ngā whakatūpato mō te kitenga ngaro anga (5/6 wāhanga tawhito = whakatūpato)",
|
||||
"validated_5_title": "✅ Kua angitu te whakahaere mō ngā whakaurunga maha",
|
||||
"validated_5_item1": "Ka whakahaerehia e te anga te whakahaere ā-mahi matihiko (kei te mahi tonu mō te neke atu i te 11 marama)",
|
||||
"validated_5_item2": "Whakaurunga whakaputanga a Village Home Trust: kāore he hē whakahaere",
|
||||
"validated_5_item1": "Ka whakahaerehia e te anga te whakahaere ā-mahi matihiko (kei te mahi tonu mō te neke atu i te 5 marama)",
|
||||
"validated_5_item2": "Whakaurunga whakaputanga a te pūhara Village: kāore he hē whakahaere",
|
||||
"validated_5_item3": "Kaitiakitanga ā-motu mō te whakatau hinengaro ā-ringa kāinga: whakahaere",
|
||||
"validated_5_item4": "Ngā ture DNA ahurea (inst_085-089) e whakatinanahia ana mā ngā pūāhua whakamātūtū i mua i te tuku (kua whakahaerehia mō te neke atu i te whā marama)",
|
||||
"validated_5_item5": "Whakaurunga Wāhanga 5: 100% kua oti (ngā ratonga e ono katoa, 203/203 whakamātautau e angitu ana)",
|
||||
|
|
@ -183,7 +183,7 @@
|
|||
"not_validated_1_item2": "Kāore i te mōhiotia: Me pēhea te whakahaere a te anga puta noa i ngā whakahaere rerekē, ngā rohe, me ngā pūnaha hangarau",
|
||||
"not_validated_1_item3": "Te hiahia rangahau: Ngā rangahau whakamātautau puta noa i ngā ahumahi (tiaki hauora, pūtea, kāwanatanga)",
|
||||
"not_validated_2_title": "❌ Te pakari ki ngā whakaeke",
|
||||
"not_validated_2_item1": "Kua whakamanahia: ngā rerenga mahi whakawhanaketanga noa (neke atu i te 1,000 wā whakahaere)",
|
||||
"not_validated_2_item1": "Kua whakamanahia: ngā rerenga mahi whakawhanaketanga noa (neke atu i te 900 wā whakahaere)",
|
||||
"not_validated_2_item2": "Kāore i te mōhiotia: te ārai ki ngā whakamātau whakawhitiwhiti ā-tino, ngā whakamōhiotanga whakawāwā pūnaha, me ngā whakamātautau whakahē",
|
||||
"not_validated_2_item3": "Te hiahia rangahau: Te aromatawai a te kapa whero e ngā kairangahau haumarutanga",
|
||||
"not_validated_3_title": "⚠️ Ōritetanga ā-pūnaha maha (wāhanga)",
|
||||
|
|
@ -291,7 +291,7 @@
|
|||
"offer_2_title": "Tuhipoka",
|
||||
"offer_2_desc": "Ngā whakaritenga hoahoanga, ngā tauira whakatinana, ngā ture whakahaere",
|
||||
"offer_3_title": "Raraunga Arotake",
|
||||
"offer_3_desc": "171,800+ whakataunga whakahaere i roto i MongoDB (kei te wātea ngā kaweake kua whakakore ingoa)",
|
||||
"offer_3_desc": "Ngā whakataunga whakahaere whakaputa i roto i MongoDB (kei te wātea ngā kaweake kua whakakore ingoa)",
|
||||
"offer_4_title": "Tautoko Whakaurunga",
|
||||
"offer_4_desc": "Āwhina ki te whakarite i ngā pūnaha ā-rohe, ā-kapua rānei mō ngā whakamātautau",
|
||||
"offer_5_title": "Whakakotahitanga",
|
||||
|
|
@ -427,14 +427,14 @@
|
|||
"research_question": "Pātai Rangahau: Ka taea te whakamāori pono i ngā mātāpono hoahoanga ā-tinana (Alexander) ki te whakahaere AI kia whai hua e taea ana te ine? Kei te aroturuki mātou i te whanonga o te anga mā te tātaritanga o ngā rangitaki arotake, ā, e rapu ana mātou i te whakamana ā-taunakitanga.",
|
||||
"collaboration_heading": "Ngā āheinga mō te mahi ngātahi rangahau",
|
||||
"collaboration_items": [
|
||||
"Te Inenga Whai Hua: Ka whakapai ake ngā mātāpono a Alexander i ngā hua whakahaere i te whakatairite ki te taumata tīmatanga? He uru ki ngā whakataunga arotake neke atu i te 171,800 mō te tātaritanga tauine.",
|
||||
"Te Inenga Whai Hua: Ka whakapai ake ngā mātāpono a Alexander i ngā hua whakahaere i te whakatairite ki te taumata tīmatanga? He uru ki ngā whakataunga arotake whakaputa mō te tātaritanga tauine.",
|
||||
"Arotake Rangahau: He whakamana i te whakamahinga pono o ngā mahi a Alexander—kei te \"whakamahi tika\" tātou, kei te \"whakaaweawe noa\" rānei? E rapu ana i ngā kairangahau a Christopher Alexander mō tētahi arotake ā-ture.",
|
||||
"Whakamana Whakawhiti-Rohe: Me pēhea te whakamāori i ngā mātāpono hoahoanga (te kotahitanga, te tukanga ora, te kore wehewehe) ki ngā rohe kāore e ā-tinana? He aha te āhua o te urutau pakari, ā, he aha te nama kupu mata noa?",
|
||||
"Tātaritanga Tauira: E whakaatu ana ngā rangitaki arotake i ngā tauira whakakotahitanga ratonga—kei te whakaatu rānei i te \"hononga hohonu\" i tautuhia e Alexander? Whakamana ā-tinana i ngā ariā."
|
||||
],
|
||||
"collaborate_text": "Mahihia ngātahi me mātou: Ka pōwhiritia ngā kairangahau e hiahia ana ki te rangahau i tēnei tono o ngā mātāpono hoahoanga ki te whakahaere AI. Ka taea e mātou te whakarato uru ki ngā rangitaki arotake, ki te waehere anga, me ngā tuhinga whakaurunga mō te rangahau whakamātautau.",
|
||||
"contact_link": "Whakapā mō te Mahi Ngātahi →",
|
||||
"audit_explorer_link": "Tūhuratia ngā whakataunga arotake neke atu i te 171,800 →",
|
||||
"audit_explorer_link": "Tūhuratia ngā whakataunga arotake →",
|
||||
"values_link": "Ngā Uara me ngā Mātāpono →"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@
|
|||
"principle_line3": "He tauira kua whakauru i ngā ture whakahaere ki roto, ā, e mahi ana i roto i te hanganga whakahaere",
|
||||
"principle_line4": "Ka whakaputa hua pai ake i tētahi o ngā huarahi e rua anake. Ka mahi te tauira me ngā here haumaru,",
|
||||
"principle_line5": "ehara i te mea ki a rātou — te whakaiti i te para rorohiko me te whakapai ake i te kounga o ngā whakautu",
|
||||
"caveat": "Kia mōhio pono: Kua whakamana ā-taurite a Papanga A (whakahaere taketake mā te whakangungu) i roto i ngā huringa whakangungu maha, me te ū tonu ki ngā tikanga whakahaere. Kei te whakahaere a Papanga B (whakahaere kaha mā te pūtake waehere o Village) i te taiao whakaputa mō te neke atu i te 11 marama. Kei te whakaatu hua te ariā paparua, ahakoa kei te pūrongo a-ringa tonu ngā aromatawai. Kei te whakamahere he arotake motuhake."
|
||||
"caveat": "Kia mōhio pono: Kua whakamana ā-taurite a Papanga A (whakahaere taketake mā te whakangungu) i roto i ngā huringa whakangungu maha, me te ū tonu ki ngā tikanga whakahaere. Kei te whakahaere a Papanga B (whakahaere kaha mā te pūtake waehere o Village) i te taiao whakaputa mō te neke atu i te 5 marama. Kei te whakaatu hua te ariā paparua, ahakoa kei te pūrongo a-ringa tonu ngā aromatawai. Kei te whakamahere he arotake motuhake."
|
||||
},
|
||||
"philosophy": {
|
||||
"heading": "Ngā Pūtake Arorau",
|
||||
|
|
|
|||
|
|
@ -4,9 +4,9 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title data-i18n="page.title">Media Inquiry | Tractatus AI Safety</title>
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1774503360480">
|
||||
<style>
|
||||
.form-group { margin-bottom: 1.5rem; }
|
||||
.form-label {
|
||||
|
|
@ -70,8 +70,8 @@
|
|||
<a href="#main-content" class="skip-link">Skip to main content</a>
|
||||
|
||||
<!-- Navigation (injected by navbar.js) -->
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Main Content -->
|
||||
<main id="main-content" class="max-w-3xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
|
||||
|
|
@ -174,11 +174,11 @@
|
|||
</main>
|
||||
|
||||
<!-- Footer -->
|
||||
<script src="/js/components/language-selector.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/media-inquiry.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/language-selector.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/media-inquiry.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Footer Component -->
|
||||
<script src="/js/components/footer.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/footer.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -5,8 +5,8 @@
|
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title data-i18n="meta.title">Privacy Policy | Tractatus AI Safety Framework</title>
|
||||
<meta name="description" content="Privacy policy for the Tractatus AI Safety Framework. Learn how we collect, use, and protect your data." data-i18n="meta.description">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1774503360480">
|
||||
<style>
|
||||
.skip-link { position: absolute; left: -9999px; }
|
||||
.skip-link:focus { left: 0; z-index: 100; background: white; padding: 1rem; }
|
||||
|
|
@ -28,11 +28,11 @@
|
|||
<a href="#main-content" class="skip-link">Skip to main content</a>
|
||||
|
||||
<!-- Navigation (injected by navbar.js) -->
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- i18n Support -->
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/language-selector.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/components/language-selector.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Main Content -->
|
||||
<main id="main-content" class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
|
||||
|
|
@ -275,7 +275,7 @@
|
|||
</main>
|
||||
|
||||
<!-- Footer -->
|
||||
<script src="/js/components/footer.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/footer.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -35,9 +35,9 @@
|
|||
<link rel="apple-touch-icon" href="/images/tractatus-icon-new.svg">
|
||||
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon-new.svg">
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1774503360480">
|
||||
<style>
|
||||
.skip-link { position: absolute; left: -9999px; }
|
||||
.skip-link:focus { left: 0; z-index: 100; background: white; padding: 1rem; }
|
||||
|
|
@ -89,7 +89,7 @@
|
|||
</div>
|
||||
</noscript>
|
||||
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Breadcrumb Navigation -->
|
||||
<nav class="bg-gray-50 border-b border-gray-200 py-3" aria-label="Breadcrumb">
|
||||
|
|
@ -127,7 +127,7 @@
|
|||
<div class="bg-amber-50 border border-amber-200 rounded-lg p-6 mb-6 animate-on-scroll" data-animation="slide-up" data-stagger="100">
|
||||
<p class="text-sm text-amber-900 font-medium mb-2" data-i18n="sections.research_context.development_note">Development Context</p>
|
||||
<p class="text-sm text-amber-800" data-i18n="sections.research_context.development_text">
|
||||
Tractatus has been developed from April 2025 and is now in active production (11+ months). What began as a single-project demonstration has expanded to include production deployment at Village Home Trust and sovereign language model governance through Village AI. Observations derive from direct engagement with Claude Code (Anthropic Claude models, Sonnet 4.5 through Opus 4.6) across over 1,000 development sessions. This is exploratory research, not controlled study.
|
||||
Tractatus has been developed from October 2025 and is now in active production (5 months). What began as a single-project demonstration has expanded to include production deployment at the Village platform and sovereign language model governance through Village AI. Observations derive from direct engagement with Claude Code (Anthropic Claude models, Sonnet 4.5 through Opus 4.6) across over 900 development sessions. This is exploratory research, not controlled study.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
|
@ -195,7 +195,7 @@
|
|||
<h3 class="text-lg font-bold text-gray-900 mt-6 mb-3" data-i18n="alexander_research.collaboration_heading">Research Collaboration Opportunities</h3>
|
||||
|
||||
<ul class="space-y-2 text-sm">
|
||||
<li data-i18n-html="alexander_research.collaboration_items.0"><strong>Effectiveness Measurement:</strong> Do Alexander principles improve governance outcomes compared to baseline? Access to 171,800+ audit decisions for quantitative analysis.</li>
|
||||
<li data-i18n-html="alexander_research.collaboration_items.0"><strong>Effectiveness Measurement:</strong> Do Alexander principles improve governance outcomes compared to baseline? Access to production audit data for quantitative analysis.</li>
|
||||
<li data-i18n-html="alexander_research.collaboration_items.1"><strong>Scholarly Review:</strong> Validating faithful application of Alexander's work—are we "directly applying" or "loosely inspired by"? Seeking Christopher Alexander scholars for formal review.</li>
|
||||
<li data-i18n-html="alexander_research.collaboration_items.2"><strong>Cross-Domain Validation:</strong> How do architectural principles (wholeness, living process, not-separateness) translate to non-physical domains? What constitutes rigorous adaptation vs superficial terminology borrowing?</li>
|
||||
<li data-i18n-html="alexander_research.collaboration_items.3"><strong>Pattern Analysis:</strong> Audit logs show service coordination patterns—do they exhibit "deep interlock" as defined by Alexander? Empirical validation of theoretical constructs.</li>
|
||||
|
|
@ -211,7 +211,7 @@
|
|||
</button>
|
||||
<a href="/admin/audit-analytics.html"
|
||||
class="inline-block bg-orange-600 text-white px-4 py-2 rounded-lg font-semibold hover:bg-orange-700 transition text-sm">
|
||||
<span data-i18n="alexander_research.audit_explorer_link">Explore 171,800+ Audit Decisions →</span>
|
||||
<span data-i18n="alexander_research.audit_explorer_link">Explore Audit Decisions →</span>
|
||||
</a>
|
||||
<a href="/about/values.html" class="inline-block bg-gray-200 text-gray-900 px-4 py-2 rounded-lg font-semibold hover:bg-gray-300 transition text-sm">
|
||||
<span data-i18n="alexander_research.values_link">Values & Principles →</span>
|
||||
|
|
@ -800,7 +800,7 @@
|
|||
<span class="text-2xl mr-3 text-orange-600">📊</span>
|
||||
<div>
|
||||
<span class="font-bold text-gray-900 block" data-i18n="sections.resources.audit_explorer_title">Interactive Audit Analytics Dashboard</span>
|
||||
<span class="text-xs text-gray-600" data-i18n="sections.resources.audit_explorer_subtitle">Explore 171,800+ governance decisions from production deployment</span>
|
||||
<span class="text-xs text-gray-600" data-i18n="sections.resources.audit_explorer_subtitle">Explore governance decisions from production deployment</span>
|
||||
</div>
|
||||
</div>
|
||||
<svg class="w-5 h-5 text-orange-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
|
|
@ -1064,7 +1064,7 @@
|
|||
<!-- What We've Validated -->
|
||||
<div>
|
||||
<h4 class="font-bold text-gray-900 mb-3" data-i18n="sections.limitations.validated_heading">What We've Validated (February 2026)</h4>
|
||||
<p class="mb-3" data-i18n="sections.limitations.validated_intro">After 11+ months of development, 1,000+ Claude Code sessions, and production deployment at Village Home Trust, we have grounded evidence for:</p>
|
||||
<p class="mb-3" data-i18n="sections.limitations.validated_intro">After 5 months of development, 900+ Claude Code sessions, and production deployment at the Village platform, we have grounded evidence for:</p>
|
||||
|
||||
<div class="space-y-3">
|
||||
<div>
|
||||
|
|
@ -1072,7 +1072,7 @@
|
|||
<ul class="list-disc pl-5 mt-1 space-y-1 text-gray-600">
|
||||
<li data-i18n="sections.limitations.validated_1_item1">BoundaryEnforcer successfully blocks values decisions before execution</li>
|
||||
<li data-i18n="sections.limitations.validated_1_item2">Pre-commit hooks prevent inst_017 violations (absolute assurance terms)</li>
|
||||
<li data-i18n="sections.limitations.validated_1_item3">171,800+ audit decisions recorded in MongoDB (tractatus_dev.audit_log)</li>
|
||||
<li data-i18n="sections.limitations.validated_1_item3">Audit decisions recorded in MongoDB (tractatus_dev.audit_log)</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
|
@ -1106,8 +1106,8 @@
|
|||
<div>
|
||||
<p class="font-semibold text-green-700" data-i18n="sections.limitations.validated_5_title">✅ Multi-Deployment Governance Successful</p>
|
||||
<ul class="list-disc pl-5 mt-1 space-y-1 text-gray-600">
|
||||
<li data-i18n="sections.limitations.validated_5_item1">Framework governs agenticgovernance.digital (11+ months continuous operation)</li>
|
||||
<li data-i18n="sections.limitations.validated_5_item2">Village Home Trust production deployment: zero governance violations</li>
|
||||
<li data-i18n="sections.limitations.validated_5_item1">Framework governs agenticgovernance.digital (5 months continuous operation)</li>
|
||||
<li data-i18n="sections.limitations.validated_5_item2">the Village platform production deployment: zero governance violations</li>
|
||||
<li data-i18n="sections.limitations.validated_5_item3">Village AI sovereign inference governance: operational</li>
|
||||
<li data-i18n="sections.limitations.validated_5_item4">Cultural DNA rules (inst_085-089) enforced through pre-commit hooks (4+ months operational)</li>
|
||||
<li data-i18n="sections.limitations.validated_5_item5">Phase 5 integration: 100% complete (all 6 services, 203/203 tests passing)</li>
|
||||
|
|
@ -1418,7 +1418,7 @@
|
|||
<span class="text-green-600 mr-2">✅</span>
|
||||
<div>
|
||||
<p class="text-sm font-semibold text-gray-900" data-i18n="sections.research_collaboration.offer_3_title">Audit Data</p>
|
||||
<p class="text-xs text-gray-600" data-i18n="sections.research_collaboration.offer_3_desc">171,800+ governance decisions in MongoDB (anonymized exports available)</p>
|
||||
<p class="text-xs text-gray-600" data-i18n="sections.research_collaboration.offer_3_desc">Production governance decisions in MongoDB (anonymised exports available)</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
@ -1736,30 +1736,30 @@
|
|||
|
||||
<!-- Footer -->
|
||||
<!-- Internationalization (must load first for footer translations) -->
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/language-selector.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/components/language-selector.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Scroll Animations (Phase 3) -->
|
||||
<script src="/js/scroll-animations.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/scroll-animations.js?v=0.1.2.1774503360480"></script>
|
||||
<!-- Page Transitions (Phase 3) -->
|
||||
<script src="/js/page-transitions.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/page-transitions.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Version Management & PWA -->
|
||||
|
||||
<script src="/js/version-manager.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/researcher-page.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/version-manager.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/researcher-page.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Share CTA functionality -->
|
||||
<script src="/js/share-cta.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/share-cta.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Footer Component -->
|
||||
<script src="/js/components/footer.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/footer.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Feedback System (Governed by Tractatus + Agent Lightning) -->
|
||||
<script src="/js/components/feedback.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/feedback.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Newsletter Subscription Modal -->
|
||||
<script src="/js/components/newsletter.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/newsletter.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
177
public/source-code.html
Normal file
177
public/source-code.html
Normal file
|
|
@ -0,0 +1,177 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en" data-page="source-code">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Source Code | Tractatus AI Safety Framework</title>
|
||||
<meta name="description" content="Access the Tractatus Framework source code. Apache 2.0 licensed, hosted on sovereign infrastructure.">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1774330886346">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1774330886346">
|
||||
<style>
|
||||
.skip-link { position: absolute; left: -9999px; }
|
||||
.skip-link:focus { left: 0; z-index: 100; background: white; padding: 1rem; }
|
||||
a:focus, button:focus { outline: 3px solid #3b82f6; outline-offset: 2px; }
|
||||
a:focus:not(:focus-visible) { outline: none; }
|
||||
a:focus-visible { outline: 3px solid #3b82f6; outline-offset: 2px; }
|
||||
</style>
|
||||
</head>
|
||||
<body class="bg-gray-50">
|
||||
|
||||
<a href="#main-content" class="skip-link">Skip to main content</a>
|
||||
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1774330886346"></script>
|
||||
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1774330886346"></script>
|
||||
<script src="/js/components/language-selector.js?v=0.1.2.1774330886346"></script>
|
||||
|
||||
<main id="main-content" class="max-w-4xl mx-auto px-4 py-16">
|
||||
|
||||
<!-- Hero -->
|
||||
<div class="text-center mb-12">
|
||||
<div class="inline-flex items-center justify-center w-16 h-16 bg-blue-100 rounded-2xl mb-6">
|
||||
<svg class="w-8 h-8 text-blue-700" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h1 class="text-3xl md:text-4xl font-bold text-gray-900 mb-4">Source Code</h1>
|
||||
<p class="text-lg text-gray-600 max-w-2xl mx-auto">
|
||||
The Tractatus Framework is open source under the Apache 2.0 licence. The source code is hosted
|
||||
on sovereign infrastructure — no US cloud providers in the supply chain.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- Cards -->
|
||||
<div class="grid md:grid-cols-2 gap-6 mb-12">
|
||||
|
||||
<!-- Sovereign Hosting -->
|
||||
<div class="bg-white rounded-xl shadow-sm border border-gray-200 p-6">
|
||||
<div class="flex items-center gap-3 mb-4">
|
||||
<div class="w-10 h-10 bg-green-100 rounded-lg flex items-center justify-center">
|
||||
<svg class="w-5 h-5 text-green-700" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h2 class="text-xl font-semibold text-gray-900">Sovereign Hosting</h2>
|
||||
</div>
|
||||
<p class="text-gray-600 mb-4">
|
||||
The Tractatus source code is hosted on infrastructure governed by
|
||||
My Digital Sovereignty Ltd. No code passes through US cloud providers,
|
||||
Microsoft servers, or surveillance-jurisdiction intermediaries.
|
||||
</p>
|
||||
<div class="bg-gray-50 rounded-lg p-4 text-sm text-gray-700">
|
||||
<div class="font-medium mb-2">Infrastructure</div>
|
||||
<ul class="space-y-1">
|
||||
<li>Primary: OVH France (EU jurisdiction)</li>
|
||||
<li>Secondary: Catalyst Cloud New Zealand</li>
|
||||
<li>Repository: <a href="https://git.mysovereignty.digital" class="text-blue-600 hover:underline">Self-hosted Forgejo</a></li>
|
||||
<li>Public mirror: Codeberg Germany (planned)</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Licence -->
|
||||
<div class="bg-white rounded-xl shadow-sm border border-gray-200 p-6">
|
||||
<div class="flex items-center gap-3 mb-4">
|
||||
<div class="w-10 h-10 bg-blue-100 rounded-lg flex items-center justify-center">
|
||||
<svg class="w-5 h-5 text-blue-700" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h2 class="text-xl font-semibold text-gray-900">Apache 2.0 Licence</h2>
|
||||
</div>
|
||||
<p class="text-gray-600 mb-4">
|
||||
The framework is fully open source. You can use, modify, and distribute
|
||||
the code for any purpose — including commercial use — under the
|
||||
terms of the Apache 2.0 licence.
|
||||
</p>
|
||||
<div class="bg-gray-50 rounded-lg p-4 text-sm text-gray-700">
|
||||
<div class="font-medium mb-2">What this means</div>
|
||||
<ul class="space-y-1">
|
||||
<li>Free to use commercially</li>
|
||||
<li>Free to modify and distribute</li>
|
||||
<li>Patent grant included</li>
|
||||
<li>Attribution required</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Access -->
|
||||
<div class="bg-white rounded-xl shadow-sm border border-gray-200 p-8 mb-12">
|
||||
<h2 class="text-2xl font-bold text-gray-900 mb-4">Access the Source Code</h2>
|
||||
<p class="text-gray-600 mb-6">
|
||||
We are migrating from GitHub to sovereign infrastructure. During this transition,
|
||||
source code access is available through these channels:
|
||||
</p>
|
||||
|
||||
<div class="space-y-4">
|
||||
<div class="flex items-start gap-4 p-4 bg-blue-50 rounded-lg border border-blue-100">
|
||||
<div class="w-8 h-8 bg-blue-100 rounded flex items-center justify-center flex-shrink-0 mt-0.5">
|
||||
<svg class="w-4 h-4 text-blue-700" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4"/>
|
||||
</svg>
|
||||
</div>
|
||||
<div>
|
||||
<div class="font-semibold text-gray-900">Sovereign Forgejo Instance</div>
|
||||
<p class="text-sm text-gray-600 mt-1">
|
||||
Browse the source code, documentation, and releases on our self-hosted
|
||||
Forgejo forge. Hosted on OVH France — no US intermediaries.
|
||||
</p>
|
||||
<a href="https://git.mysovereignty.digital" class="inline-flex items-center gap-1 mt-2 text-sm font-medium text-blue-700 hover:text-blue-800">
|
||||
Browse Source Code
|
||||
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"/>
|
||||
</svg>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex items-start gap-4 p-4 bg-gray-50 rounded-lg border border-gray-200">
|
||||
<div class="w-8 h-8 bg-gray-200 rounded flex items-center justify-center flex-shrink-0 mt-0.5">
|
||||
<svg class="w-4 h-4 text-gray-600" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<div>
|
||||
<div class="font-semibold text-gray-900">Codeberg Mirror (Coming Soon)</div>
|
||||
<p class="text-sm text-gray-600 mt-1">
|
||||
A public mirror on Codeberg (German non-profit) is being set up for
|
||||
open-source visibility, issue tracking, and community contributions.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Why Not GitHub -->
|
||||
<div class="bg-white rounded-xl shadow-sm border border-gray-200 p-8">
|
||||
<h2 class="text-2xl font-bold text-gray-900 mb-4">Why We Left GitHub</h2>
|
||||
<p class="text-gray-600 mb-6">
|
||||
A framework for AI governance cannot credibly route its source code through
|
||||
infrastructure subject to the laws it critiques. GitHub is owned by Microsoft
|
||||
and subject to US jurisdiction — including the CLOUD Act, FISA 702, and
|
||||
executive orders that can compel data access without warrant or notification.
|
||||
</p>
|
||||
<div class="grid md:grid-cols-3 gap-4 text-sm">
|
||||
<div class="bg-red-50 rounded-lg p-4 border border-red-100">
|
||||
<div class="font-semibold text-red-800 mb-1">CLOUD Act</div>
|
||||
<p class="text-red-700">US law compelling disclosure of data stored by US companies, regardless of where the data is physically located.</p>
|
||||
</div>
|
||||
<div class="bg-red-50 rounded-lg p-4 border border-red-100">
|
||||
<div class="font-semibold text-red-800 mb-1">FISA 702</div>
|
||||
<p class="text-red-700">Warrantless surveillance of non-US persons. Source code access patterns, contributor metadata, and issue discussions are all exposed.</p>
|
||||
</div>
|
||||
<div class="bg-red-50 rounded-lg p-4 border border-red-100">
|
||||
<div class="font-semibold text-red-800 mb-1">Copilot Training</div>
|
||||
<p class="text-red-700">GitHub announced in March 2026 that Copilot interaction data will be used for AI model training unless users opt out.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
|
||||
<script src="/js/components/footer.js?v=0.1.2.1774330886346"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -190,7 +190,7 @@
|
|||
<span class="text-xs font-semibold text-orange-600 uppercase tracking-wider">October 19-23, 2025</span>
|
||||
<h3 class="text-xl font-bold text-gray-900 mt-1 mb-3">Interactive Demonstrations</h3>
|
||||
<p class="text-gray-700 text-sm mb-3">
|
||||
Interactive SVG architecture diagram with clickable service nodes. The 27027 incident recreated as a step-by-step demo showing how each governance service intercepts the failure. An interactive audit analytics dashboard was launched with governance decisions from production (initially 3,942; now exceeding 171,800+), allowing independent exploration of real audit data.
|
||||
Interactive SVG architecture diagram with clickable service nodes. The 27027 incident recreated as a step-by-step demo showing how each governance service intercepts the failure. An interactive audit analytics dashboard was launched with governance decisions from production, allowing independent exploration of real audit data.
|
||||
</p>
|
||||
<p class="text-gray-700 text-sm">
|
||||
WCAG accessibility compliance was implemented across all audience pages — skip links, focus indicators, keyboard navigation, and screen reader support.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"version": "0.1.3",
|
||||
"buildDate": "2026-03-13T02:21:07.760Z",
|
||||
"buildDate": "2026-03-26T05:36:00.482Z",
|
||||
"changelog": [
|
||||
"Added Tino Rangatiratanga (Māori) flag to language selector",
|
||||
"Fixed cross-origin flag loading issue"
|
||||
|
|
|
|||
|
|
@ -19,9 +19,9 @@
|
|||
<meta name="twitter:image" content="https://agenticgovernance.digital/images/social-preview.png">
|
||||
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon-new.svg">
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1774503360480">
|
||||
<style>
|
||||
.skip-link { position: absolute; left: -9999px; top: 0; }
|
||||
.skip-link:focus { left: 0; z-index: 100; background: white; padding: 1rem; border: 2px solid #3b82f6; }
|
||||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<!-- Navigation -->
|
||||
<div id="navbar-placeholder" class="min-h-16"></div>
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Breadcrumb -->
|
||||
<nav class="bg-gray-50 border-b border-gray-200 py-3" aria-label="Breadcrumb">
|
||||
|
|
@ -293,7 +293,7 @@
|
|||
|
||||
<div class="bg-amber-50 rounded-lg p-5 border border-amber-200 mt-4">
|
||||
<p class="text-amber-900 text-sm" data-i18n-html="dual_layer.caveat">
|
||||
<strong>Honest caveat:</strong> Layer A (inherent governance via training) has been empirically validated across multiple training runs with consistent governance compliance. Layer B (active governance via Village codebase) has been operating in production for 11+ months. The dual-layer thesis is demonstrating results, though evaluation remains self-reported. Independent audit is planned.
|
||||
<strong>Honest caveat:</strong> Layer A (inherent governance via training) has been empirically validated across multiple training runs with consistent governance compliance. Layer B (active governance via Village codebase) has been operating in production for 5 months. The dual-layer thesis is demonstrating results, though evaluation remains self-reported. Independent audit is planned.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
|
@ -755,12 +755,12 @@
|
|||
</main>
|
||||
|
||||
<!-- Footer & Scripts -->
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/language-selector.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/scroll-animations.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/page-transitions.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/footer.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/feedback.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/components/language-selector.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/scroll-animations.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/page-transitions.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/components/footer.js?v=0.1.2.1774503360480"></script>
|
||||
<script src="/js/components/feedback.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -27,9 +27,9 @@
|
|||
<meta name="twitter:image" content="https://agenticgovernance.digital/images/social-preview.png">
|
||||
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon-new.svg">
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1773368467758">
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.2.1774503360480">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.2.1774503360480">
|
||||
<style>
|
||||
.skip-link { position: absolute; left: -9999px; }
|
||||
.skip-link:focus { left: 0; z-index: 100; background: white; padding: 1rem; }
|
||||
|
|
@ -54,7 +54,7 @@
|
|||
<a href="#main-content" class="skip-link">Skip to main content</a>
|
||||
|
||||
<!-- Navigation -->
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1773368467758" defer></script>
|
||||
<script src="/js/components/navbar.js?v=0.1.2.1774503360480" defer></script>
|
||||
|
||||
<!-- Breadcrumb Navigation -->
|
||||
<nav class="bg-gray-50 border-b border-gray-200 py-3" aria-label="Breadcrumb">
|
||||
|
|
@ -503,13 +503,13 @@
|
|||
</main>
|
||||
|
||||
<!-- Footer Component -->
|
||||
<script src="/js/components/footer.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/components/footer.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Version Management -->
|
||||
<script src="/js/version-manager.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/version-manager.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
<!-- Internationalization -->
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1773368467758"></script>
|
||||
<script src="/js/i18n-simple.js?v=0.1.2.1774503360480"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
412
scripts/expand-glossary-general-ai.js
Normal file
412
scripts/expand-glossary-general-ai.js
Normal file
|
|
@ -0,0 +1,412 @@
|
|||
/**
|
||||
* Expand Glossary with General AI Vocabulary
|
||||
* Adds foundational AI/ML terms for non-technical readers
|
||||
*
|
||||
* Run: node scripts/expand-glossary-general-ai.js
|
||||
*
|
||||
* For production: MONGODB_URI=mongodb://localhost:27017 MONGODB_DB=tractatus_prod node scripts/expand-glossary-general-ai.js
|
||||
*/
|
||||
|
||||
const { MongoClient } = require('mongodb');
|
||||
const marked = require('marked');
|
||||
|
||||
const MONGODB_URI = process.env.MONGODB_URI || 'mongodb://localhost:27017/tractatus_dev';
|
||||
const DB_NAME = process.env.MONGODB_DB || 'tractatus_dev';
|
||||
|
||||
const NEW_SECTION = `
|
||||
|
||||
## General AI Vocabulary
|
||||
|
||||
These terms appear frequently in AI governance discussions. Understanding them helps you navigate conversations about AI safety, sovereignty, and responsible deployment.
|
||||
|
||||
---
|
||||
|
||||
### Agent (AI Agent)
|
||||
|
||||
**What it means:** A software program that can perceive its environment, make decisions, and take actions autonomously to achieve goals — without requiring step-by-step human instructions for every action.
|
||||
|
||||
**Why it matters:** Agents are moving beyond simple chatbots. They can browse the web, write and execute code, manage files, and interact with other systems. This autonomy creates both enormous potential and serious governance challenges — an agent that can act independently can also act incorrectly at scale.
|
||||
|
||||
**Real-world analogy:** Think of the difference between a calculator (you press every button) and a personal assistant (you give a goal, they figure out the steps). An AI agent is the assistant — it decides *how* to accomplish what you ask.
|
||||
|
||||
**In Tractatus:** Every agent action passes through the six governance services. The framework doesn't prevent autonomy — it ensures autonomy operates within boundaries that the human principal has defined.
|
||||
|
||||
---
|
||||
|
||||
### Large Language Model (LLM)
|
||||
|
||||
**What it means:** An AI system trained on vast amounts of text data that can understand, generate, and reason about human language. Examples include Claude, GPT, and Llama.
|
||||
|
||||
**Why it matters:** LLMs are the foundation of most modern AI applications. They power chatbots, code assistants, content generators, and agentic systems. Their capabilities are remarkable but not unlimited — they can produce convincing but incorrect outputs, and their behaviour can be unpredictable in edge cases.
|
||||
|
||||
**Real-world analogy:** Imagine someone who has read millions of books and can discuss any topic fluently — but who sometimes confidently states things that aren't true, because their knowledge comes from pattern matching across texts rather than direct experience.
|
||||
|
||||
**Key distinction:** LLMs generate text by predicting the most likely next word. They don't "understand" in the human sense — they recognise and reproduce patterns. This is why governance frameworks matter: the output *looks* authoritative whether or not it *is* authoritative.
|
||||
|
||||
---
|
||||
|
||||
### Small Language Model (SLM)
|
||||
|
||||
**What it means:** A language model with significantly fewer parameters than an LLM, designed to run efficiently on local hardware rather than requiring cloud infrastructure. Typically under 10 billion parameters.
|
||||
|
||||
**Why it matters:** SLMs enable data sovereignty — your data never leaves your infrastructure. They can be fine-tuned on your organisation's specific knowledge, producing responses that are more relevant to your context while being cheaper and faster to run.
|
||||
|
||||
**Real-world analogy:** If an LLM is a massive central library that everyone accesses remotely, an SLM is your organisation's own specialist reference collection — smaller, but tailored to exactly what you need, and you control who has access.
|
||||
|
||||
**In Tractatus:** The Village project uses locally-trained SLMs that run on sovereign infrastructure in New Zealand, ensuring community data never flows to offshore cloud providers. Tractatus governs these models with the same architectural constraints applied to larger models.
|
||||
|
||||
---
|
||||
|
||||
### Foundation Model
|
||||
|
||||
**What it means:** A large AI model trained on broad data that serves as a starting point for many different applications. It provides general capabilities that can then be specialised through fine-tuning.
|
||||
|
||||
**Why it matters:** Foundation models represent enormous investments in compute and data. Organisations build on top of them rather than training from scratch. This creates dependency — the foundation model's biases, capabilities, and limitations propagate to every application built upon it.
|
||||
|
||||
**Real-world analogy:** Think of a foundation model like the foundation of a building. Many different structures can be built on top of it, but they all inherit its characteristics — its strengths *and* its weaknesses.
|
||||
|
||||
---
|
||||
|
||||
### Fine-Tuning
|
||||
|
||||
**What it means:** The process of taking a pre-trained model and further training it on specialised data to improve its performance on specific tasks or domains.
|
||||
|
||||
**Why it matters:** Fine-tuning transforms a general-purpose model into a specialist. A model fine-tuned on medical literature performs better on medical questions; one fine-tuned on legal documents understands legal reasoning better. It's how organisations make AI their own.
|
||||
|
||||
**Real-world analogy:** A newly qualified doctor has broad medical knowledge (the foundation model). Their residency in cardiology (fine-tuning) transforms them into a heart specialist — they still have general knowledge, but their expertise is now focused.
|
||||
|
||||
**In Tractatus:** Fine-tuning is how sovereign SLMs learn community-specific knowledge. The governance framework ensures fine-tuning data meets quality standards and doesn't introduce biases that conflict with community values.
|
||||
|
||||
---
|
||||
|
||||
### Prompt
|
||||
|
||||
**What it means:** The input text given to an AI model to elicit a response. Prompts can range from simple questions to complex instructions with context, examples, and constraints.
|
||||
|
||||
**Why it matters:** The quality and structure of a prompt dramatically affects the quality of the AI's output. Prompt engineering — the craft of writing effective prompts — has become a skill in itself. From a governance perspective, prompts are where human intent meets AI capability.
|
||||
|
||||
**Real-world analogy:** A prompt is like a brief to a consultant. A vague brief ("make it better") produces vague results. A specific, well-structured brief ("analyse Q3 revenue by region, compare to forecast, highlight risks") produces actionable output.
|
||||
|
||||
---
|
||||
|
||||
### Hallucination
|
||||
|
||||
**What it means:** When an AI model generates information that sounds plausible and confident but is factually incorrect, fabricated, or unsupported by its training data.
|
||||
|
||||
**Why it matters:** Hallucinations are one of the most significant risks in AI deployment. Because AI outputs are fluent and confident, users may not realise when information is fabricated. This is especially dangerous in high-stakes domains like medicine, law, or financial advice.
|
||||
|
||||
**Real-world analogy:** Imagine an employee who, when they don't know the answer, confidently invents one rather than saying "I don't know." The answer sounds reasonable, is delivered with complete confidence, but is entirely made up.
|
||||
|
||||
**In Tractatus:** The Metacognitive Verifier and BlogCuration services specifically guard against hallucination — checking outputs for fabricated statistics (inst_016), absolute guarantees (inst_017), and unverified claims (inst_018).
|
||||
|
||||
---
|
||||
|
||||
### Context Window
|
||||
|
||||
**What it means:** The maximum amount of text (measured in tokens) that an AI model can process in a single interaction. Everything the model "sees" — your prompt, conversation history, and its response — must fit within this window.
|
||||
|
||||
**Why it matters:** Context windows limit what an AI can consider at once. Important instructions can be "forgotten" not because the AI chose to ignore them, but because they fell outside the active context window. This is a fundamental architectural limitation.
|
||||
|
||||
**Real-world analogy:** Imagine a desk that can only hold a certain number of pages. As you add new documents, older ones fall off the desk. The worker can only act on what's currently on the desk — even if critical instructions are in the pile on the floor.
|
||||
|
||||
**In Tractatus:** The Context Pressure Monitor tracks how full the context window is. As pressure increases, the risk of instruction loss rises, and the framework escalates its vigilance accordingly.
|
||||
|
||||
---
|
||||
|
||||
### Training Data
|
||||
|
||||
**What it means:** The collection of text, images, or other information used to train an AI model. The model learns patterns, knowledge, and behaviours from this data.
|
||||
|
||||
**Why it matters:** Training data determines what an AI knows and how it behaves. Biases in training data become biases in the model. Data gaps become knowledge gaps. Data sovereignty questions — who owns the data, where it's stored, who profits from it — are fundamental governance concerns.
|
||||
|
||||
**Real-world analogy:** Training data is to AI what life experience is to a person. A person raised in one culture will have different assumptions and blind spots than someone from another. AI models similarly reflect the data they were trained on.
|
||||
|
||||
---
|
||||
|
||||
### Alignment
|
||||
|
||||
**What it means:** The challenge of ensuring an AI system's goals, behaviours, and outputs are consistent with human values and intentions.
|
||||
|
||||
**Why it matters:** A perfectly capable AI that pursues the wrong goals is more dangerous than a limited AI that pursues the right ones. Alignment is the field of research dedicated to solving this problem — making sure AI does what we *mean*, not just what we *say*.
|
||||
|
||||
**Real-world analogy:** Think of a wish granted by a literal-minded genie. You wish for "world peace" and the genie removes all humans. Technically peaceful — but catastrophically misaligned with what you actually wanted.
|
||||
|
||||
**In Tractatus:** Alignment is not left to the model's training alone. The framework enforces alignment architecturally — through persistent instructions, boundary enforcement, and cross-reference validation. Even a misaligned model is constrained by the governance framework it operates within.
|
||||
|
||||
---
|
||||
|
||||
### Inference
|
||||
|
||||
**What it means:** The process of using a trained AI model to generate outputs (predictions, text, images) from new inputs. This is the "running" phase, as opposed to the "training" phase.
|
||||
|
||||
**Why it matters:** Inference is where AI meets the real world. Every chatbot response, every code suggestion, every image generated is an inference operation. The cost, speed, and accuracy of inference determine whether an AI application is practical for production use.
|
||||
|
||||
**Real-world analogy:** Training is like studying for years to become a doctor. Inference is seeing patients — applying what you've learned to new situations. Training happens once (or periodically); inference happens continuously.
|
||||
|
||||
---
|
||||
|
||||
### Guardrails
|
||||
|
||||
**What it means:** Safety mechanisms built into or around AI systems that prevent harmful, inappropriate, or out-of-scope outputs. Guardrails can be embedded in the model (training-time) or applied externally (runtime).
|
||||
|
||||
**Why it matters:** Guardrails are the practical implementation of AI safety principles. Without them, AI systems can produce harmful content, leak sensitive information, or take dangerous actions. The debate is not whether guardrails are needed, but who controls them and how they are implemented.
|
||||
|
||||
**Real-world analogy:** Highway guardrails don't prevent you from driving — they prevent you from driving off a cliff. AI guardrails work the same way: they define the safe operating space without eliminating useful functionality.
|
||||
|
||||
**In Tractatus:** The framework IS a guardrail system — but one controlled by you, not by the AI vendor. This is a crucial distinction. Vendor guardrails protect the vendor's interests. Tractatus guardrails protect YOUR interests.
|
||||
|
||||
---
|
||||
|
||||
### Data Sovereignty
|
||||
|
||||
**What it means:** The principle that data is subject to the laws and governance structures of the jurisdiction in which it is collected or stored, and that the data subjects maintain control over how their data is used.
|
||||
|
||||
**Why it matters:** When your data is processed by cloud AI services, it typically leaves your jurisdiction and enters the provider's infrastructure. You lose visibility into how it's used, who accesses it, and whether it's used to train future models. Data sovereignty ensures your data remains under your control.
|
||||
|
||||
**Real-world analogy:** The difference between keeping your valuables in your own safe versus depositing them in a foreign bank. In your safe, you have complete control. In the foreign bank, you're subject to their rules, their government's laws, and their business decisions.
|
||||
|
||||
**In Tractatus:** Data sovereignty is a foundational principle. Sovereign SLMs run on local infrastructure. Community data never leaves the community's jurisdiction. The governance framework itself runs locally — no cloud dependencies for safety-critical functions.
|
||||
|
||||
---
|
||||
|
||||
### Polycentric Governance
|
||||
|
||||
**What it means:** A governance approach where multiple independent decision-making centres coexist, each with authority over their own domain, rather than a single central authority dictating rules for everyone.
|
||||
|
||||
**Why it matters:** AI governance cannot be one-size-fits-all. A hospital's AI governance needs differ from a school's, which differ from a business's. Polycentric governance allows each community or organisation to define their own AI boundaries while sharing common principles.
|
||||
|
||||
**Real-world analogy:** Consider how different countries govern differently — each with their own laws, customs, and values — yet coexist within international frameworks. No single country dictates governance to all others. Each adapts governance to its own context.
|
||||
|
||||
**In Tractatus:** The framework is architecturally polycentric. Each deployment maintains its own governance rules, instruction persistence levels, and boundary definitions. There is no central server dictating how your AI should behave. Your community, your rules.
|
||||
|
||||
---
|
||||
|
||||
### Retrieval-Augmented Generation (RAG)
|
||||
|
||||
**What it means:** A technique that enhances AI responses by first retrieving relevant information from a knowledge base, then using that retrieved information to generate more accurate and grounded responses.
|
||||
|
||||
**Why it matters:** RAG addresses one of AI's biggest weaknesses — hallucination. By grounding responses in actual documents, databases, or knowledge bases, RAG reduces the chance of fabricated information. It also keeps AI knowledge current without expensive retraining.
|
||||
|
||||
**Real-world analogy:** The difference between a consultant answering from memory (might be wrong, might be outdated) versus one who checks the latest reports before answering (grounded in current facts).
|
||||
|
||||
---
|
||||
|
||||
### Embedding
|
||||
|
||||
**What it means:** A numerical representation of text (or images, audio) that captures its meaning in a format AI systems can process. Similar meanings produce similar numbers, enabling AI to find related content.
|
||||
|
||||
**Why it matters:** Embeddings are the bridge between human language and machine computation. They power search, recommendation, clustering, and RAG systems. When you search for "dog" and also find results about "puppy" and "canine," embeddings are making those connections.
|
||||
|
||||
**Real-world analogy:** Think of GPS coordinates. Two addresses can look completely different as text ("10 Downing Street" vs "British Prime Minister's residence") but their GPS coordinates are identical. Embeddings do the same for meaning — different words, same conceptual location.
|
||||
|
||||
---
|
||||
|
||||
### Token
|
||||
|
||||
**What it means:** The basic unit of text that AI models process. A token is typically a word or part of a word. The sentence "AI safety matters" is roughly 3-4 tokens.
|
||||
|
||||
**Why it matters:** Everything in AI is measured in tokens — context window size, pricing, output length. Understanding tokens helps you understand the practical constraints and costs of AI systems.
|
||||
|
||||
**Real-world analogy:** Tokens are like syllables in speech. A short word like "cat" is one token. A longer word like "governance" might be two or three tokens. A conversation that uses more tokens costs more and takes longer.
|
||||
|
||||
---
|
||||
|
||||
### Temperature (AI Parameter)
|
||||
|
||||
**What it means:** A setting that controls how creative or deterministic an AI model's outputs are. Low temperature (e.g., 0.1) produces predictable, conservative responses. High temperature (e.g., 0.9) produces more varied, creative — and potentially less accurate — responses.
|
||||
|
||||
**Why it matters:** Temperature is a governance lever. For safety-critical applications (medical advice, legal analysis), low temperature ensures consistency. For creative applications (brainstorming, content generation), higher temperature enables diversity of output.
|
||||
|
||||
**Real-world analogy:** Think of a chef preparing a dish. Low temperature: they follow the recipe exactly every time. High temperature: they improvise, experiment, and each dish is unique — sometimes brilliant, sometimes strange.
|
||||
|
||||
---
|
||||
|
||||
### Federated Learning
|
||||
|
||||
**What it means:** A machine learning approach where a model is trained across multiple decentralised devices or servers, each holding their own data, without that data ever leaving its location.
|
||||
|
||||
**Why it matters:** Federated learning enables collaborative AI improvement while maintaining data sovereignty. Organisations can benefit from collective learning without exposing their data to each other or to a central authority.
|
||||
|
||||
**Real-world analogy:** Imagine ten hospitals want to improve cancer detection AI. Instead of pooling all patient records in one place (privacy nightmare), each hospital trains the model on their own data and only shares what the model *learned* — never the patient data itself.
|
||||
|
||||
**In Tractatus:** Federated learning aligns with our sovereignty principles. Communities can improve their AI models collaboratively while ensuring no community's data leaves its own infrastructure.
|
||||
|
||||
---
|
||||
|
||||
### Edge AI
|
||||
|
||||
**What it means:** AI processing that happens locally on the device or on-premises infrastructure, rather than in a remote cloud data centre.
|
||||
|
||||
**Why it matters:** Edge AI reduces latency (faster responses), maintains privacy (data never leaves the device), and works offline. For sovereign AI deployment, edge computing means your AI operates independently of cloud providers.
|
||||
|
||||
**Real-world analogy:** The difference between doing calculations on your own calculator (edge) versus sending every calculation to a remote service and waiting for the answer (cloud). Your calculator works without an internet connection and nobody else sees your numbers.
|
||||
|
||||
---
|
||||
|
||||
### Model Collapse
|
||||
|
||||
**What it means:** A phenomenon where AI models trained on AI-generated content (rather than human-created content) progressively degrade in quality, losing diversity and accuracy with each generation.
|
||||
|
||||
**Why it matters:** As AI-generated content floods the internet, future models risk being trained on synthetic data rather than genuine human knowledge. This creates a feedback loop where errors compound and diversity of thought diminishes — the AI equivalent of inbreeding.
|
||||
|
||||
**Real-world analogy:** Imagine photocopying a photocopy of a photocopy. Each generation loses detail and introduces artefacts. By the tenth copy, the original information is barely recognisable. Model collapse is the same process, but with knowledge and reasoning ability.
|
||||
|
||||
**In Tractatus:** This is why locally-curated, human-verified training data matters. Sovereign SLMs trained on genuine community knowledge resist model collapse because their training data comes from real human sources, not AI-generated content.
|
||||
|
||||
---
|
||||
|
||||
### Agentic Loop
|
||||
|
||||
**What it means:** The cycle an AI agent follows: perceive the environment, reason about what to do, take an action, observe the result, and repeat. This loop continues until the agent's goal is achieved or it encounters a stopping condition.
|
||||
|
||||
**Why it matters:** Each iteration of the agentic loop is a decision point where things can go right or wrong. Without governance, an agent in a loop can take hundreds of actions — including incorrect ones — before a human notices. The longer the loop runs unsupervised, the greater the risk.
|
||||
|
||||
**Real-world analogy:** A trainee left unsupervised for a day might make one or two mistakes. Left unsupervised for a month, those mistakes compound. The agentic loop is the same — governance needs to monitor every cycle, not just the first and last.
|
||||
|
||||
**In Tractatus:** Every iteration of an agentic loop passes through the governance services. The framework doesn't just check the first instruction — it monitors every action, every iteration, for the life of the session.
|
||||
|
||||
---
|
||||
|
||||
### Responsible AI
|
||||
|
||||
**What it means:** The practice of developing and deploying AI systems in ways that are ethical, transparent, accountable, and aligned with societal values.
|
||||
|
||||
**Why it matters:** "Responsible AI" has become an industry buzzword, but the principles are genuine: AI should be fair, explainable, privacy-respecting, and under human oversight. The challenge is moving from principles to practice — from aspirational statements to architectural enforcement.
|
||||
|
||||
**Real-world analogy:** The difference between a company that says "we value safety" in their annual report versus one that has actual safety engineers, mandatory inspections, and incident reporting systems. Responsible AI requires the latter — real systems, not just good intentions.
|
||||
|
||||
**In Tractatus:** Tractatus turns responsible AI principles into enforceable architectural constraints. Instead of asking an AI to "be responsible," the framework ensures it cannot act irresponsibly — the governance is structural, not aspirational.
|
||||
|
||||
---
|
||||
|
||||
### Open Source AI
|
||||
|
||||
**What it means:** AI models and tools whose source code, training methodology, and sometimes training data are publicly available for anyone to inspect, use, modify, and distribute.
|
||||
|
||||
**Why it matters:** Open source AI enables transparency (you can verify what the model does), sovereignty (you can run it yourself), and community improvement (others can contribute fixes and enhancements). It counters the concentration of AI capability in a few large corporations.
|
||||
|
||||
**Real-world analogy:** The difference between a proprietary medicine (you must trust the manufacturer) and a published formula (anyone can verify the ingredients and make it themselves). Open source AI gives communities the published formula.
|
||||
|
||||
**In Tractatus:** The framework itself is open source (Apache 2.0 licence). Sovereign SLMs are built on open source foundation models. This ensures no single vendor can revoke, modify, or restrict the governance framework a community depends on.
|
||||
|
||||
---
|
||||
`;
|
||||
|
||||
async function main() {
|
||||
console.log('=== Expanding Glossary with General AI Vocabulary ===\n');
|
||||
|
||||
let client;
|
||||
|
||||
try {
|
||||
client = await MongoClient.connect(MONGODB_URI);
|
||||
const db = client.db(DB_NAME);
|
||||
const collection = db.collection('documents');
|
||||
|
||||
// Fetch current document
|
||||
const doc = await collection.findOne({ slug: 'glossary' });
|
||||
|
||||
if (!doc) {
|
||||
throw new Error('Glossary document not found (slug: glossary)');
|
||||
}
|
||||
|
||||
console.log('Current document loaded');
|
||||
console.log(`Current length: ${doc.content_markdown.length} characters`);
|
||||
console.log(`Current version: ${doc.metadata?.version || 'unknown'}\n`);
|
||||
|
||||
// Find insertion point — before "## Questions for Reflection" or "## Glossary Maintenance" or end
|
||||
let updated = doc.content_markdown;
|
||||
|
||||
const insertionPoints = [
|
||||
'## Questions for Reflection',
|
||||
'## Glossary Maintenance',
|
||||
'## License',
|
||||
'## Document Metadata'
|
||||
];
|
||||
|
||||
let insertionPoint = -1;
|
||||
let foundSection = null;
|
||||
|
||||
for (const point of insertionPoints) {
|
||||
const index = updated.indexOf(point);
|
||||
if (index > -1) {
|
||||
insertionPoint = index;
|
||||
foundSection = point;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (insertionPoint > -1) {
|
||||
updated = updated.slice(0, insertionPoint) + NEW_SECTION + '\n\n' + updated.slice(insertionPoint);
|
||||
console.log(`Inserted General AI Vocabulary section before: ${foundSection}`);
|
||||
} else {
|
||||
// Fallback: append to end
|
||||
updated = updated + '\n\n' + NEW_SECTION;
|
||||
console.log('Appended General AI Vocabulary section to end');
|
||||
}
|
||||
|
||||
// Update version
|
||||
updated = updated.replace(/\*\*Version:\*\* \d+\.\d+/, '**Version:** 2.0');
|
||||
updated = updated.replace(/\*\*Last Updated:\*\* \d{4}-\d{2}-\d{2}/, '**Last Updated:** 2026-02-27');
|
||||
|
||||
// Also update introduction to mention general vocabulary
|
||||
const oldIntro = 'This glossary explains the vocabulary and concepts used in the Tractatus Agentic Governance System. The explanations are written for people without a technical background, focusing on *why* these concepts matter and *what* they mean for AI safety and human oversight.';
|
||||
const newIntro = 'This glossary explains the vocabulary and concepts used in the Tractatus Agentic Governance System, along with general AI terminology that appears frequently in governance discussions. The explanations are written for people without a technical background, focusing on *why* these concepts matter and *what* they mean for AI safety and human oversight.';
|
||||
updated = updated.replace(oldIntro, newIntro);
|
||||
|
||||
console.log(`\nNew length: ${updated.length} characters`);
|
||||
console.log(`Change: +${updated.length - doc.content_markdown.length} characters\n`);
|
||||
|
||||
// Regenerate HTML
|
||||
const content_html = marked.parse(updated);
|
||||
|
||||
// Regenerate sections using the section parser
|
||||
let sections = [];
|
||||
try {
|
||||
const { parseDocumentSections } = require('../src/utils/document-section-parser');
|
||||
sections = parseDocumentSections(updated, content_html);
|
||||
console.log(`Regenerated ${sections.length} sections`);
|
||||
} catch (e) {
|
||||
console.warn('Could not regenerate sections:', e.message);
|
||||
console.warn('Sections will be left unchanged');
|
||||
sections = doc.sections || [];
|
||||
}
|
||||
|
||||
// Update document
|
||||
const result = await collection.updateOne(
|
||||
{ slug: 'glossary' },
|
||||
{
|
||||
$set: {
|
||||
content_markdown: updated,
|
||||
content_html: content_html,
|
||||
sections: sections,
|
||||
'metadata.date_updated': new Date(),
|
||||
'metadata.version': '2.0',
|
||||
updated_at: new Date()
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
if (result.modifiedCount > 0) {
|
||||
console.log('\nGlossary updated successfully!');
|
||||
console.log('Version: 2.0');
|
||||
console.log('Date: 2026-02-27');
|
||||
console.log(`\nNew terms added (${NEW_SECTION.match(/^###\s+.+$/gm).length}):`);
|
||||
NEW_SECTION.match(/^###\s+.+$/gm).forEach(h => console.log(' ' + h));
|
||||
} else {
|
||||
console.log('\nNo changes made');
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
console.error('\nError:', error.message);
|
||||
console.error(error.stack);
|
||||
process.exit(1);
|
||||
} finally {
|
||||
if (client) await client.close();
|
||||
}
|
||||
}
|
||||
|
||||
if (require.main === module) {
|
||||
main();
|
||||
}
|
||||
|
||||
module.exports = { main };
|
||||
|
|
@ -18,10 +18,10 @@ function securityHeadersMiddleware(req, res, next) {
|
|||
'Content-Security-Policy',
|
||||
[
|
||||
"default-src 'self'",
|
||||
"script-src 'self' https://cdn.jsdelivr.net", // Allow Chart.js CDN
|
||||
"style-src 'self' 'unsafe-inline' https://fonts.googleapis.com", // Tailwind + Google Fonts
|
||||
"script-src 'self'", // All JS self-hosted
|
||||
"style-src 'self' 'unsafe-inline'", // Tailwind (self-hosted fonts)
|
||||
"img-src 'self' data: https:",
|
||||
"font-src 'self' https://fonts.gstatic.com https://cdnjs.cloudflare.com",
|
||||
"font-src 'self'", // Self-hosted fonts only (no Google, no CDN)
|
||||
"connect-src 'self'",
|
||||
"frame-ancestors 'none'",
|
||||
"base-uri 'self'",
|
||||
|
|
|
|||
|
|
@ -42,7 +42,8 @@ class BlogPost {
|
|||
engagement: {
|
||||
shares: 0,
|
||||
comments: 0
|
||||
}
|
||||
},
|
||||
presentation: data.presentation || null
|
||||
};
|
||||
|
||||
const result = await collection.insertOne(post);
|
||||
|
|
@ -127,6 +128,19 @@ class BlogPost {
|
|||
}
|
||||
);
|
||||
|
||||
// Notify subscribers (async, non-blocking)
|
||||
if (result.modifiedCount > 0) {
|
||||
const post = await collection.findOne({ _id: new ObjectId(id) });
|
||||
if (post) {
|
||||
try {
|
||||
const notifier = require('../services/blogpost-notifier.service');
|
||||
notifier.notifySubscribers(post, 'published').catch(err => {
|
||||
console.error('[BlogPost] Subscriber notification failed (non-blocking):', err.message);
|
||||
});
|
||||
} catch (_) { /* notifier not available — non-critical */ }
|
||||
}
|
||||
}
|
||||
|
||||
return result.modifiedCount > 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -104,7 +104,7 @@ const projectSchema = new mongoose.Schema({
|
|||
},
|
||||
message: 'Repository URL must be a valid URL'
|
||||
},
|
||||
description: 'Git repository URL (e.g., "https://github.com/user/repo")'
|
||||
description: 'Git repository URL (e.g., "https://codeberg.org/org/repo")'
|
||||
},
|
||||
|
||||
// Metadata
|
||||
|
|
|
|||
|
|
@ -279,6 +279,19 @@ async function start() {
|
|||
logger.info(`📊 Security logs: ${process.env.HOME}/var/log/tractatus/security-audit.log`);
|
||||
logger.info(`✨ Ready for development`);
|
||||
console.log(`\n🌐 http://localhost:${config.port}\n`);
|
||||
|
||||
// Scheduled: check for unnotified published posts every hour
|
||||
try {
|
||||
const blogNotifier = require('./services/blogpost-notifier.service');
|
||||
setInterval(() => {
|
||||
blogNotifier.checkAndNotify().catch(err => {
|
||||
logger.error('[Scheduled] Blog notifier check failed:', err.message);
|
||||
});
|
||||
}, 60 * 60 * 1000); // Every hour
|
||||
logger.info('📬 Blog post subscriber notifications: active (hourly check)');
|
||||
} catch (err) {
|
||||
logger.warn('📬 Blog notifier not available:', err.message);
|
||||
}
|
||||
});
|
||||
|
||||
// Graceful shutdown
|
||||
|
|
|
|||
262
src/services/blogpost-notifier.service.js
Normal file
262
src/services/blogpost-notifier.service.js
Normal file
|
|
@ -0,0 +1,262 @@
|
|||
/**
|
||||
* BlogPost Notifier Service
|
||||
*
|
||||
* Automatically notifies newsletter subscribers when blog posts are
|
||||
* published or significantly updated. No human intervention required.
|
||||
*
|
||||
* Interest mapping:
|
||||
* - 'research' subscribers get posts tagged: research, framework, paper, tractatus
|
||||
* - 'implementation' subscribers get posts tagged: implementation, case-study, technical
|
||||
* - 'governance' subscribers get posts tagged: governance, policy, ethics, indigenous
|
||||
* - 'project-updates' subscribers get ALL published posts
|
||||
*
|
||||
* Deduplication: tracks notified post IDs per subscriber to prevent double-sends.
|
||||
*/
|
||||
|
||||
const { getCollection } = require('../utils/db.util');
|
||||
const logger = require('../utils/logger.util');
|
||||
|
||||
const INTEREST_TAG_MAP = {
|
||||
'research': ['research', 'framework', 'paper', 'tractatus', 'working-paper', 'academic'],
|
||||
'implementation': ['implementation', 'case-study', 'technical', 'architecture', 'code', 'guardian-agents'],
|
||||
'governance': ['governance', 'policy', 'ethics', 'indigenous', 'maori', 'māori', 'tikanga', 'sovereignty', 'democracy'],
|
||||
'project-updates': [] // Empty = matches everything
|
||||
};
|
||||
|
||||
class BlogPostNotifier {
|
||||
|
||||
/**
|
||||
* Notify subscribers about a newly published or updated blog post.
|
||||
* Called automatically from BlogPost.publish() or via scheduled task.
|
||||
*
|
||||
* @param {Object} post - The blog post document
|
||||
* @param {string} reason - 'published' or 'updated'
|
||||
* @returns {Object} { sent, failed, skipped }
|
||||
*/
|
||||
async notifySubscribers(post, reason = 'published') {
|
||||
const EmailService = require('./email.service');
|
||||
const emailService = new EmailService();
|
||||
const NewsletterSubscription = require('../models/NewsletterSubscription.model');
|
||||
|
||||
const results = { sent: 0, failed: 0, skipped: 0, reason };
|
||||
|
||||
try {
|
||||
// Get all verified, active subscribers
|
||||
const subscribers = await NewsletterSubscription.findByInterest(null, {
|
||||
verified: true,
|
||||
active: true
|
||||
});
|
||||
|
||||
if (subscribers.length === 0) {
|
||||
logger.info('[BlogNotifier] No active subscribers');
|
||||
return results;
|
||||
}
|
||||
|
||||
// Get notification history to prevent duplicates
|
||||
const notifCollection = await getCollection('blog_notifications');
|
||||
const alreadyNotified = await notifCollection.find({
|
||||
postId: post._id.toString(),
|
||||
reason
|
||||
}).toArray();
|
||||
const notifiedEmails = new Set(alreadyNotified.map(n => n.email));
|
||||
|
||||
// Determine which interests this post matches
|
||||
const postTags = (post.tags || []).map(t => t.toLowerCase());
|
||||
const matchingInterests = this._matchInterests(postTags);
|
||||
|
||||
const postUrl = `https://agenticgovernance.digital/blog-post.html?slug=${post.slug}`;
|
||||
const blogUrl = 'https://agenticgovernance.digital/blog.html';
|
||||
|
||||
for (const subscriber of subscribers) {
|
||||
try {
|
||||
// Skip if already notified
|
||||
if (notifiedEmails.has(subscriber.email)) {
|
||||
results.skipped++;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Check interest match
|
||||
const subscriberInterests = subscriber.interests || [];
|
||||
const isMatch = this._subscriberMatches(subscriberInterests, matchingInterests);
|
||||
if (!isMatch) {
|
||||
results.skipped++;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Build and send email
|
||||
const unsubscribeUrl = `https://agenticgovernance.digital/api/newsletter/unsubscribe?token=${subscriber.verification_token}`;
|
||||
|
||||
const html = this._buildEmailHtml({
|
||||
name: subscriber.name || 'there',
|
||||
title: post.title,
|
||||
excerpt: post.excerpt || '',
|
||||
postUrl,
|
||||
blogUrl,
|
||||
unsubscribeUrl,
|
||||
reason
|
||||
});
|
||||
|
||||
const textVersion = this._buildEmailText({
|
||||
name: subscriber.name || 'there',
|
||||
title: post.title,
|
||||
excerpt: post.excerpt || '',
|
||||
postUrl,
|
||||
unsubscribeUrl,
|
||||
reason
|
||||
});
|
||||
|
||||
const subject = reason === 'updated'
|
||||
? `Updated: ${post.title}`
|
||||
: `New: ${post.title}`;
|
||||
|
||||
const sendResult = await emailService.send({
|
||||
to: subscriber.email,
|
||||
subject,
|
||||
html,
|
||||
text: textVersion
|
||||
});
|
||||
|
||||
if (sendResult.success) {
|
||||
results.sent++;
|
||||
// Record notification to prevent duplicates
|
||||
await notifCollection.insertOne({
|
||||
postId: post._id.toString(),
|
||||
postSlug: post.slug,
|
||||
email: subscriber.email,
|
||||
reason,
|
||||
sentAt: new Date()
|
||||
});
|
||||
} else {
|
||||
results.failed++;
|
||||
}
|
||||
|
||||
} catch (err) {
|
||||
results.failed++;
|
||||
logger.error('[BlogNotifier] Failed for subscriber:', { email: subscriber.email, error: err.message });
|
||||
}
|
||||
}
|
||||
|
||||
logger.info(`[BlogNotifier] ${reason}: "${post.title}" — sent:${results.sent} failed:${results.failed} skipped:${results.skipped}`);
|
||||
return results;
|
||||
|
||||
} catch (err) {
|
||||
logger.error('[BlogNotifier] Error:', err.message);
|
||||
return { ...results, error: err.message };
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Scheduled task: check for recently published posts that haven't been notified.
|
||||
* Run hourly to catch any posts that were published without triggering the hook.
|
||||
*/
|
||||
async checkAndNotify() {
|
||||
try {
|
||||
const collection = await getCollection('blog_posts');
|
||||
const notifCollection = await getCollection('blog_notifications');
|
||||
|
||||
// Find posts published in the last 24 hours
|
||||
const cutoff = new Date(Date.now() - 24 * 60 * 60 * 1000);
|
||||
const recentPosts = await collection.find({
|
||||
status: 'published',
|
||||
published_at: { $gte: cutoff }
|
||||
}).toArray();
|
||||
|
||||
for (const post of recentPosts) {
|
||||
// Check if already notified
|
||||
const existing = await notifCollection.findOne({
|
||||
postId: post._id.toString(),
|
||||
reason: 'published'
|
||||
});
|
||||
|
||||
if (!existing) {
|
||||
logger.info(`[BlogNotifier] Found unnotified post: "${post.title}"`);
|
||||
await this.notifySubscribers(post, 'published');
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
logger.error('[BlogNotifier] Scheduled check error:', err.message);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine which interest categories a post's tags match.
|
||||
*/
|
||||
_matchInterests(postTags) {
|
||||
const matched = new Set();
|
||||
// project-updates always matches
|
||||
matched.add('project-updates');
|
||||
|
||||
for (const [interest, tags] of Object.entries(INTEREST_TAG_MAP)) {
|
||||
if (tags.length === 0) continue; // project-updates handled above
|
||||
if (postTags.some(t => tags.includes(t))) {
|
||||
matched.add(interest);
|
||||
}
|
||||
}
|
||||
|
||||
return matched;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a subscriber's interests overlap with the post's matched interests.
|
||||
*/
|
||||
_subscriberMatches(subscriberInterests, matchingInterests) {
|
||||
if (subscriberInterests.length === 0) return true; // No preferences = get everything
|
||||
return subscriberInterests.some(i => matchingInterests.has(i));
|
||||
}
|
||||
|
||||
/**
|
||||
* Build HTML email for blog post notification.
|
||||
*/
|
||||
_buildEmailHtml({ name, title, excerpt, postUrl, blogUrl, unsubscribeUrl, reason }) {
|
||||
const verb = reason === 'updated' ? 'updated' : 'published';
|
||||
return `<!DOCTYPE html>
|
||||
<html>
|
||||
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"></head>
|
||||
<body style="margin:0; padding:0; background:#f8fafc; font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;">
|
||||
<div style="max-width:600px; margin:0 auto; padding:2rem 1rem;">
|
||||
<div style="background:#fff; border-radius:8px; overflow:hidden; box-shadow:0 1px 3px rgba(0,0,0,0.1);">
|
||||
<div style="background:#1e293b; padding:1.5rem 2rem;">
|
||||
<h1 style="margin:0; color:#fff; font-size:1.25rem; font-weight:600;">Tractatus AI Safety Framework</h1>
|
||||
</div>
|
||||
<div style="padding:2rem;">
|
||||
<p style="color:#374151; margin:0 0 1rem 0;">Kia ora ${name},</p>
|
||||
<p style="color:#374151; margin:0 0 1.5rem 0;">We have ${verb} a new article:</p>
|
||||
<h2 style="margin:0 0 0.75rem 0; color:#111827; font-size:1.25rem;">${title}</h2>
|
||||
${excerpt ? `<p style="color:#6b7280; margin:0 0 1.5rem 0; font-style:italic;">${excerpt}</p>` : ''}
|
||||
<a href="${postUrl}" style="display:inline-block; background:#2563eb; color:#fff; text-decoration:none; padding:0.75rem 1.5rem; border-radius:6px; font-weight:600;">Read Article</a>
|
||||
<p style="color:#9ca3af; margin:1.5rem 0 0 0; font-size:0.875rem;">
|
||||
<a href="${blogUrl}" style="color:#6b7280;">View all articles</a>
|
||||
</p>
|
||||
</div>
|
||||
<div style="padding:1rem 2rem; background:#f8fafc; border-top:1px solid #e5e7eb;">
|
||||
<p style="margin:0; color:#9ca3af; font-size:0.75rem;">
|
||||
You received this because you subscribed to updates from agenticgovernance.digital.
|
||||
<a href="${unsubscribeUrl}" style="color:#6b7280;">Unsubscribe</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build plain text version.
|
||||
*/
|
||||
_buildEmailText({ name, title, excerpt, postUrl, unsubscribeUrl, reason }) {
|
||||
const verb = reason === 'updated' ? 'updated' : 'published';
|
||||
return `Kia ora ${name},
|
||||
|
||||
We have ${verb} a new article:
|
||||
|
||||
${title}
|
||||
${excerpt ? '\n' + excerpt + '\n' : ''}
|
||||
Read it here: ${postUrl}
|
||||
|
||||
---
|
||||
Unsubscribe: ${unsubscribeUrl}
|
||||
Tractatus AI Safety Framework — agenticgovernance.digital`;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new BlogPostNotifier();
|
||||
Loading…
Add table
Reference in a new issue