feat: Add Kōrero HTML page, remove umami analytics
- Create korero-counter-arguments.html (STO-INN-0004) with styled critique cards - Remove umami-tracker.js and all references from HTML files - Update privacy.html Section 6 to reflect "No Analytics" policy Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
9b95c364d2
commit
403a54decf
24 changed files with 777 additions and 228 deletions
|
|
@ -21,8 +21,6 @@
|
|||
a:focus:not(:focus-visible) { outline: none; }
|
||||
a:focus-visible { outline: 3px solid #3b82f6; outline-offset: 2px; }
|
||||
</style>
|
||||
<!-- Privacy-Preserving Analytics (Umami - GDPR Compliant, No Cookies) -->
|
||||
<script src="/js/components/umami-tracker.js"></script>
|
||||
<!-- Auto-reload on service worker update -->
|
||||
</head>
|
||||
<body class="bg-gray-50">
|
||||
|
|
|
|||
|
|
@ -42,8 +42,6 @@
|
|||
a:focus-visible { outline: 3px solid #3b82f6; outline-offset: 2px; }
|
||||
</style>
|
||||
|
||||
<!-- Privacy-Preserving Analytics (Umami - GDPR Compliant, No Cookies) -->
|
||||
<script src="/js/components/umami-tracker.js"></script>
|
||||
</head>
|
||||
<body class="bg-gray-50">
|
||||
|
||||
|
|
|
|||
|
|
@ -17,8 +17,6 @@
|
|||
.method-DELETE { @apply bg-red-100 text-red-800; }
|
||||
</style>
|
||||
|
||||
<!-- Privacy-Preserving Analytics (Umami - GDPR Compliant, No Cookies) -->
|
||||
<script src="/js/components/umami-tracker.js"></script>
|
||||
<!-- Auto-reload on service worker update -->
|
||||
</head>
|
||||
<body class="bg-gray-50">
|
||||
|
|
|
|||
|
|
@ -43,8 +43,6 @@
|
|||
.gradient-text { background: linear-gradient(120deg, #3b82f6 0%, #8b5cf6 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; }
|
||||
</style>
|
||||
|
||||
<!-- Privacy-Preserving Analytics (Umami - GDPR Compliant, No Cookies) -->
|
||||
<script src="/js/components/umami-tracker.js"></script>
|
||||
<!-- Auto-reload on service worker update -->
|
||||
</head>
|
||||
<body class="bg-gray-50">
|
||||
|
|
|
|||
|
|
@ -112,8 +112,6 @@
|
|||
}
|
||||
</style>
|
||||
|
||||
<!-- Privacy-Preserving Analytics (Umami - GDPR Compliant, No Cookies) -->
|
||||
<script src="/js/components/umami-tracker.js"></script>
|
||||
<!-- Auto-reload on service worker update -->
|
||||
</head>
|
||||
<body class="bg-gray-50">
|
||||
|
|
|
|||
|
|
@ -44,8 +44,6 @@
|
|||
a:focus-visible { outline: 3px solid #3b82f6; outline-offset: 2px; }
|
||||
</style>
|
||||
|
||||
<!-- Privacy-Preserving Analytics (Umami - GDPR Compliant, No Cookies) -->
|
||||
<script src="/js/components/umami-tracker.js"></script>
|
||||
<!-- Auto-reload on service worker update -->
|
||||
</head>
|
||||
<body class="bg-gray-50">
|
||||
|
|
|
|||
|
|
@ -72,8 +72,6 @@
|
|||
}
|
||||
</style>
|
||||
|
||||
<!-- Privacy-Preserving Analytics (Umami - GDPR Compliant, No Cookies) -->
|
||||
<script src="/js/components/umami-tracker.js"></script>
|
||||
<!-- Auto-reload on service worker update -->
|
||||
</head>
|
||||
<body class="bg-gray-50">
|
||||
|
|
|
|||
|
|
@ -15,8 +15,6 @@
|
|||
pre { background: #1f2937; color: #f3f4f6; padding: 1rem; border-radius: 0.5rem; overflow-x: auto; }
|
||||
</style>
|
||||
|
||||
<!-- Privacy-Preserving Analytics (Umami - GDPR Compliant, No Cookies) -->
|
||||
<script src="/js/components/umami-tracker.js"></script>
|
||||
<!-- Auto-reload on service worker update -->
|
||||
</head>
|
||||
<body>
|
||||
|
|
|
|||
|
|
@ -23,8 +23,6 @@
|
|||
.prose em { @apply italic; }
|
||||
</style>
|
||||
|
||||
<!-- Privacy-Preserving Analytics (Umami - GDPR Compliant, No Cookies) -->
|
||||
<script src="/js/components/umami-tracker.js"></script>
|
||||
<!-- Auto-reload on service worker update -->
|
||||
</head>
|
||||
<body class="bg-gray-50">
|
||||
|
|
|
|||
|
|
@ -497,8 +497,6 @@
|
|||
}
|
||||
</style>
|
||||
|
||||
<!-- Privacy-Preserving Analytics (Umami - GDPR Compliant, No Cookies) -->
|
||||
<script src="/js/components/umami-tracker.js"></script>
|
||||
<!-- Auto-reload on service worker update -->
|
||||
</head>
|
||||
<body class="bg-gray-50">
|
||||
|
|
|
|||
|
|
@ -319,8 +319,6 @@
|
|||
}
|
||||
</style>
|
||||
|
||||
<!-- Privacy-Preserving Analytics (Umami - GDPR Compliant, No Cookies) -->
|
||||
<script src="/js/components/umami-tracker.js"></script>
|
||||
<!-- Auto-reload on service worker update -->
|
||||
</head>
|
||||
<body class="bg-gray-50">
|
||||
|
|
|
|||
|
|
@ -20,8 +20,6 @@
|
|||
a:focus-visible { outline: 3px solid #3b82f6; outline-offset: 2px; }
|
||||
</style>
|
||||
|
||||
<!-- Privacy-Preserving Analytics (Umami - GDPR Compliant, No Cookies) -->
|
||||
<script src="/js/components/umami-tracker.js"></script>
|
||||
<!-- Auto-reload on service worker update -->
|
||||
</head>
|
||||
<body class="bg-gray-50">
|
||||
|
|
|
|||
|
|
@ -67,8 +67,6 @@
|
|||
}
|
||||
</style>
|
||||
|
||||
<!-- Privacy-Preserving Analytics (Umami - GDPR Compliant, No Cookies) -->
|
||||
<script src="/js/components/umami-tracker.js"></script>
|
||||
<!-- Auto-reload on service worker update -->
|
||||
</head>
|
||||
<body class="bg-gray-50">
|
||||
|
|
|
|||
|
|
@ -1,131 +0,0 @@
|
|||
/**
|
||||
* Umami Analytics - Privacy-First Tracking
|
||||
* No cookies, no personal data, GDPR-compliant
|
||||
*
|
||||
* Features:
|
||||
* - Respects Do Not Track (DNT) browser setting
|
||||
* - Honors user opt-out preference
|
||||
* - Disabled in development environment
|
||||
* - Lightweight async loading
|
||||
*/
|
||||
|
||||
(function() {
|
||||
'use strict';
|
||||
|
||||
// Configuration
|
||||
const CONFIG = {
|
||||
websiteId: 'e09dad07-361b-453b-9e2c-2132c657d203',
|
||||
domain: 'agenticgovernance.digital',
|
||||
scriptSrc: 'https://analytics.agenticgovernance.digital/script.js',
|
||||
autoTrack: true
|
||||
};
|
||||
|
||||
// Development environment check
|
||||
const isDevelopment =
|
||||
window.location.hostname === 'localhost' ||
|
||||
window.location.hostname === '127.0.0.1' ||
|
||||
window.location.hostname === '' ||
|
||||
window.location.port === '9000'; // Local dev server
|
||||
|
||||
if (isDevelopment) {
|
||||
console.log('[Umami Analytics] Disabled in development environment');
|
||||
return;
|
||||
}
|
||||
|
||||
// Respect Do Not Track (DNT) browser setting
|
||||
const dnt = navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack;
|
||||
const dntEnabled = dnt === '1' || dnt === 'yes' || dnt === 'on';
|
||||
|
||||
if (dntEnabled) {
|
||||
console.log('[Umami Analytics] Tracking disabled - Do Not Track enabled');
|
||||
return;
|
||||
}
|
||||
|
||||
// Check for user opt-out preference (localStorage)
|
||||
try {
|
||||
const optedOut = localStorage.getItem('umami.disabled') === 'true';
|
||||
if (optedOut) {
|
||||
console.log('[Umami Analytics] Tracking disabled - User opted out');
|
||||
return;
|
||||
}
|
||||
} catch (e) {
|
||||
// localStorage may not be available (privacy mode, etc.)
|
||||
console.warn('[Umami Analytics] Cannot check opt-out preference:', e);
|
||||
}
|
||||
|
||||
// Website ID validation
|
||||
if (CONFIG.websiteId === 'REPLACE_WITH_ACTUAL_WEBSITE_ID') {
|
||||
console.warn('[Umami Analytics] Website ID not configured. Update umami-tracker.js after Umami setup.');
|
||||
return;
|
||||
}
|
||||
|
||||
// Load Umami tracking script
|
||||
const script = document.createElement('script');
|
||||
script.async = true;
|
||||
script.defer = true;
|
||||
script.src = CONFIG.scriptSrc;
|
||||
script.setAttribute('data-website-id', CONFIG.websiteId);
|
||||
// Note: data-domains attribute removed to allow tracking on all subdomains
|
||||
script.setAttribute('data-auto-track', CONFIG.autoTrack.toString());
|
||||
|
||||
// Error handling
|
||||
script.onerror = function() {
|
||||
console.error('[Umami Analytics] Failed to load tracking script from:', CONFIG.scriptSrc);
|
||||
};
|
||||
|
||||
// Success callback
|
||||
script.onload = function() {
|
||||
console.log('[Umami Analytics] Tracking initialized (privacy-first, cookie-free)');
|
||||
};
|
||||
|
||||
// Append script to head
|
||||
document.head.appendChild(script);
|
||||
|
||||
// Expose opt-out function for privacy page
|
||||
window.umamiOptOut = function() {
|
||||
try {
|
||||
localStorage.setItem('umami.disabled', 'true');
|
||||
console.log('[Umami Analytics] User opted out successfully');
|
||||
alert('Analytics tracking has been disabled. Reload the page to apply changes.');
|
||||
return true;
|
||||
} catch (e) {
|
||||
console.error('[Umami Analytics] Failed to save opt-out preference:', e);
|
||||
alert('Failed to save opt-out preference. Please ensure cookies/localStorage is enabled.');
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
// Expose opt-in function (to reverse opt-out)
|
||||
window.umamiOptIn = function() {
|
||||
try {
|
||||
localStorage.removeItem('umami.disabled');
|
||||
console.log('[Umami Analytics] User opted in successfully');
|
||||
alert('Analytics tracking has been enabled. Reload the page to apply changes.');
|
||||
return true;
|
||||
} catch (e) {
|
||||
console.error('[Umami Analytics] Failed to save opt-in preference:', e);
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
// Expose status check function
|
||||
window.umamiStatus = function() {
|
||||
const status = {
|
||||
enabled: true,
|
||||
development: isDevelopment,
|
||||
dnt: dntEnabled,
|
||||
optedOut: false,
|
||||
websiteId: CONFIG.websiteId
|
||||
};
|
||||
|
||||
try {
|
||||
status.optedOut = localStorage.getItem('umami.disabled') === 'true';
|
||||
} catch (e) {
|
||||
status.optedOut = null;
|
||||
}
|
||||
|
||||
console.table(status);
|
||||
return status;
|
||||
};
|
||||
|
||||
})();
|
||||
|
|
@ -45,8 +45,6 @@
|
|||
}
|
||||
</style>
|
||||
|
||||
<!-- Privacy-Preserving Analytics (Umami - GDPR Compliant, No Cookies) -->
|
||||
<script src="/js/components/umami-tracker.js"></script>
|
||||
<!-- Auto-reload on service worker update -->
|
||||
</head>
|
||||
<body class="bg-gray-50">
|
||||
|
|
|
|||
|
|
@ -62,8 +62,6 @@
|
|||
.delay-5 { animation-delay: 0.5s; }
|
||||
</style>
|
||||
|
||||
<!-- Privacy-Preserving Analytics (Umami - GDPR Compliant, No Cookies) -->
|
||||
<script src="/js/components/umami-tracker.js"></script>
|
||||
</head>
|
||||
<body class="bg-gray-50">
|
||||
|
||||
|
|
|
|||
|
|
@ -35,8 +35,6 @@
|
|||
}
|
||||
</style>
|
||||
|
||||
<!-- Privacy-Preserving Analytics (Umami - GDPR Compliant, No Cookies) -->
|
||||
<script src="/js/components/umami-tracker.js"></script>
|
||||
</head>
|
||||
<body class="bg-gray-50">
|
||||
|
||||
|
|
|
|||
770
public/korero-counter-arguments.html
Normal file
770
public/korero-counter-arguments.html
Normal file
|
|
@ -0,0 +1,770 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Formal Kōrero - Counter-Arguments to Tractatus Framework Critiques</title>
|
||||
<meta name="description" content="Counter-Arguments to Tractatus Framework Critiques - Ten critiques addressed through formal academic dialogue">
|
||||
|
||||
<!-- Favicon & PWA -->
|
||||
<link rel="icon" href="/favicon.ico" sizes="16x16 32x32 48x48">
|
||||
<link rel="icon" href="/icons/favicon_192.png" type="image/png" sizes="192x192">
|
||||
<link rel="apple-touch-icon" href="/icons/favicon_192.png">
|
||||
<meta name="theme-color" content="#8b5cf6">
|
||||
|
||||
<!-- Stylesheets -->
|
||||
<link rel="stylesheet" href="/css/design-system.css">
|
||||
<link rel="stylesheet" href="/css/company-hub-navbar.css">
|
||||
<link rel="stylesheet" href="/css/footer.css">
|
||||
|
||||
<style>
|
||||
:root {
|
||||
--max-width: 800px;
|
||||
--text-primary: #1f2937;
|
||||
--text-secondary: #4b5563;
|
||||
--border-color: #e5e7eb;
|
||||
--bg-code: #f3f4f6;
|
||||
--accent: #8b5cf6;
|
||||
--accent-light: #a78bfa;
|
||||
--success: #10b981;
|
||||
--warning: #f59e0b;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
|
||||
line-height: 1.7;
|
||||
color: var(--text-primary);
|
||||
background: #fff;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.article-container {
|
||||
max-width: var(--max-width);
|
||||
margin: 0 auto;
|
||||
padding: 2rem 1.5rem 4rem;
|
||||
}
|
||||
|
||||
.article-header {
|
||||
text-align: center;
|
||||
margin-bottom: 3rem;
|
||||
padding-bottom: 2rem;
|
||||
border-bottom: 1px solid var(--border-color);
|
||||
}
|
||||
|
||||
.article-header h1 {
|
||||
font-size: 2.25rem;
|
||||
font-weight: 700;
|
||||
margin: 0 0 0.5rem;
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
.article-header h2 {
|
||||
font-size: 1.25rem;
|
||||
font-weight: 400;
|
||||
color: var(--text-secondary);
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
|
||||
.article-header h3 {
|
||||
font-size: 1rem;
|
||||
font-weight: 500;
|
||||
color: var(--accent);
|
||||
margin: 0 0 1.5rem;
|
||||
}
|
||||
|
||||
.article-meta {
|
||||
font-size: 0.875rem;
|
||||
color: var(--text-secondary);
|
||||
}
|
||||
|
||||
.article-meta strong {
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
.collaboration-note {
|
||||
background: #f5f3ff;
|
||||
border-left: 4px solid var(--accent);
|
||||
padding: 1rem 1.5rem;
|
||||
margin: 2rem 0;
|
||||
font-style: italic;
|
||||
color: var(--text-secondary);
|
||||
}
|
||||
|
||||
.executive-summary {
|
||||
background: #fafafa;
|
||||
padding: 1.5rem 2rem;
|
||||
border-radius: 8px;
|
||||
margin: 2rem 0;
|
||||
}
|
||||
|
||||
.executive-summary h2 {
|
||||
font-size: 1.125rem;
|
||||
margin-top: 0;
|
||||
border: none;
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
.executive-summary ul {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 600;
|
||||
margin: 2.5rem 0 1rem;
|
||||
padding-top: 1rem;
|
||||
border-top: 1px solid var(--border-color);
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 1.25rem;
|
||||
font-weight: 600;
|
||||
margin: 2rem 0 0.75rem;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 1.1rem;
|
||||
font-weight: 600;
|
||||
margin: 1.5rem 0 0.5rem;
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
border-left: 4px solid var(--accent);
|
||||
margin: 1.5rem 0;
|
||||
padding: 0.5rem 1.5rem;
|
||||
color: var(--text-secondary);
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
ul, ol {
|
||||
margin: 1rem 0;
|
||||
padding-left: 1.5rem;
|
||||
}
|
||||
|
||||
li {
|
||||
margin: 0.5rem 0;
|
||||
}
|
||||
|
||||
hr {
|
||||
border: none;
|
||||
border-top: 1px solid var(--border-color);
|
||||
margin: 2rem 0;
|
||||
}
|
||||
|
||||
/* Critique cards */
|
||||
.critique-card {
|
||||
background: #fff;
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: 12px;
|
||||
padding: 1.5rem;
|
||||
margin: 1.5rem 0;
|
||||
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
|
||||
}
|
||||
|
||||
.critique-card h3 {
|
||||
margin-top: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.verdict-badge {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.25rem;
|
||||
font-size: 0.75rem;
|
||||
font-weight: 600;
|
||||
padding: 0.25rem 0.75rem;
|
||||
border-radius: 9999px;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.025em;
|
||||
}
|
||||
|
||||
.verdict-survives {
|
||||
background: #d1fae5;
|
||||
color: #065f46;
|
||||
}
|
||||
|
||||
.verdict-partial {
|
||||
background: #fef3c7;
|
||||
color: #92400e;
|
||||
}
|
||||
|
||||
.critique-section {
|
||||
margin: 1rem 0;
|
||||
padding: 0.75rem 1rem;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.critique-section.critique {
|
||||
background: #fef2f2;
|
||||
border-left: 3px solid #ef4444;
|
||||
}
|
||||
|
||||
.critique-section.counter {
|
||||
background: #f0fdf4;
|
||||
border-left: 3px solid #22c55e;
|
||||
}
|
||||
|
||||
.critique-section.synthesis {
|
||||
background: #f5f3ff;
|
||||
border-left: 3px solid var(--accent);
|
||||
}
|
||||
|
||||
.critique-section strong {
|
||||
display: block;
|
||||
margin-bottom: 0.5rem;
|
||||
font-size: 0.875rem;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.05em;
|
||||
}
|
||||
|
||||
.critique-section.critique strong {
|
||||
color: #dc2626;
|
||||
}
|
||||
|
||||
.critique-section.counter strong {
|
||||
color: #16a34a;
|
||||
}
|
||||
|
||||
.critique-section.synthesis strong {
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
/* Assessment section */
|
||||
.assessment-grid {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 1.5rem;
|
||||
margin: 1.5rem 0;
|
||||
}
|
||||
|
||||
@media (max-width: 640px) {
|
||||
.assessment-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
.assessment-card {
|
||||
padding: 1.25rem;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.assessment-card.strong {
|
||||
background: #f0fdf4;
|
||||
border: 1px solid #bbf7d0;
|
||||
}
|
||||
|
||||
.assessment-card.strengthen {
|
||||
background: #fef3c7;
|
||||
border: 1px solid #fde68a;
|
||||
}
|
||||
|
||||
.assessment-card h4 {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0.75rem;
|
||||
}
|
||||
|
||||
.assessment-card ul {
|
||||
margin: 0;
|
||||
padding-left: 1.25rem;
|
||||
}
|
||||
|
||||
.assessment-card li {
|
||||
margin: 0.25rem 0;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
/* Final verdict */
|
||||
.final-verdict {
|
||||
background: linear-gradient(135deg, #f5f3ff 0%, #ede9fe 100%);
|
||||
padding: 2rem;
|
||||
border-radius: 12px;
|
||||
margin: 2rem 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.final-verdict h2 {
|
||||
border: none;
|
||||
padding-top: 0;
|
||||
margin-top: 0;
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
.final-verdict p {
|
||||
font-size: 1.1rem;
|
||||
max-width: 600px;
|
||||
margin: 0 auto 1rem;
|
||||
}
|
||||
|
||||
.final-verdict .highlight {
|
||||
font-weight: 600;
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
/* Maori proverb */
|
||||
.maori-proverb {
|
||||
text-align: center;
|
||||
margin: 3rem 0;
|
||||
padding: 2rem;
|
||||
background: linear-gradient(135deg, #f5f3ff 0%, #ede9fe 100%);
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
.maori-proverb blockquote {
|
||||
border: none;
|
||||
font-size: 1.1rem;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.maori-proverb .call-to-action {
|
||||
margin-top: 1.5rem;
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.korero-subtext {
|
||||
font-style: italic;
|
||||
color: var(--text-secondary);
|
||||
}
|
||||
|
||||
.document-footer {
|
||||
text-align: center;
|
||||
color: var(--text-secondary);
|
||||
font-size: 0.875rem;
|
||||
}
|
||||
|
||||
/* Additions list */
|
||||
.additions-list {
|
||||
background: #fafafa;
|
||||
padding: 1.5rem 2rem;
|
||||
border-radius: 8px;
|
||||
margin: 1.5rem 0;
|
||||
}
|
||||
|
||||
.additions-list h3 {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.additions-list ol {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
@media (max-width: 640px) {
|
||||
.article-container {
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
.article-header h1 {
|
||||
font-size: 1.75rem;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
|
||||
.critique-card {
|
||||
padding: 1rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<!-- Navbar -->
|
||||
<header id="company-hub-navbar"></header>
|
||||
|
||||
<article class="article-container">
|
||||
<header class="article-header">
|
||||
<h1>FORMAL KORERO</h1>
|
||||
<h2>Counter-Arguments to Tractatus Framework Critiques</h2>
|
||||
<h3>Ten Critiques Addressed Through Scholarly Dialogue</h3>
|
||||
|
||||
<div class="article-meta">
|
||||
<p><strong>Authors:</strong> John Stroh & Claude (Anthropic)</p>
|
||||
<p><strong>Document Code:</strong> STO-INN-0004 | <strong>Version:</strong> 1.0 | January 2026</p>
|
||||
<p><strong>Primary Quadrant:</strong> STO | <strong>Related Quadrants:</strong> STR, OPS, TAC</p>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="collaboration-note">
|
||||
This document responds to ten formal critiques of the Tractatus Framework (STO-INN-0003). The critiques were generated through adversarial analysis; the counter-arguments demonstrate that the Framework survives rigorous examination when properly positioned. The kōrero reveals not fatal flaws but necessary elaborations.
|
||||
</div>
|
||||
|
||||
<section class="executive-summary">
|
||||
<h2>Executive Summary</h2>
|
||||
<p>The ten critiques collectively reveal important tensions in the Tractatus Framework, but none are fatal. The document survives critique when properly positioned as:</p>
|
||||
<ul>
|
||||
<li><strong>A Layer 2 component</strong> in multi-layer containment (not a complete solution)</li>
|
||||
<li><strong>Appropriate for current/near-term AI</strong> (not claiming to solve superintelligence alignment)</li>
|
||||
<li><strong>Focused on operational & catastrophic risk</strong> (not strict existential risk prevention)</li>
|
||||
<li><strong>A design pattern</strong> (inference-time constraints) with multiple valid implementations</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<h2>Key Counter-Arguments by Domain</h2>
|
||||
|
||||
<!-- Critique 1 -->
|
||||
<div class="critique-card">
|
||||
<h3>
|
||||
1. Decision Theory & Existential Risk
|
||||
<span class="verdict-badge verdict-survives">Framework Survives</span>
|
||||
</h3>
|
||||
|
||||
<div class="critique-section critique">
|
||||
<strong>Critique</strong>
|
||||
<p>Expected-value reasoning doesn't "break down" for existential risks; probabilistic approaches still apply.</p>
|
||||
</div>
|
||||
|
||||
<div class="critique-section counter">
|
||||
<strong>Counter</strong>
|
||||
<p>The Framework employs <em>precautionary satisficing under radical uncertainty</em>, not categorical rejection of probability. Three pillars support this approach:</p>
|
||||
<ol>
|
||||
<li><strong>Bounded rationality (Herbert Simon):</strong> When cognitive limits prevent accurate probability assignment to novel threats, satisfice rather than optimize</li>
|
||||
<li><strong>Maximin under uncertainty (Rawls):</strong> When genuine uncertainty (not just unknown probabilities) meets irreversible stakes, maximin is rational</li>
|
||||
<li><strong>Strong precautionary principle:</strong> Appropriate when irreversibility + high uncertainty + public goods all present</li>
|
||||
</ol>
|
||||
<p>Nuclear safety uses probabilities because we have 80+ years of operational data. We have zero for superintelligent AI. The situations are epistemologically distinct.</p>
|
||||
</div>
|
||||
|
||||
<div class="critique-section synthesis">
|
||||
<strong>Synthesis</strong>
|
||||
<p>Update framing from "probabilistic reasoning fails" to "precautionary satisficing appropriate under radical uncertainty with irreversible stakes." As AI systems mature and generate operational data, probabilistic approaches become more justified.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Critique 2 -->
|
||||
<div class="critique-card">
|
||||
<h3>
|
||||
2. Necessity of Architectural Gating
|
||||
<span class="verdict-badge verdict-survives">Framework Survives</span>
|
||||
</h3>
|
||||
|
||||
<div class="critique-section critique">
|
||||
<strong>Critique</strong>
|
||||
<p>Alternative containment exists (air-gapping, capability limits); current deployments use rate limits/API scoping more than formal gates.</p>
|
||||
</div>
|
||||
|
||||
<div class="critique-section counter">
|
||||
<strong>Counter</strong>
|
||||
<p>Four clarifications address this critique:</p>
|
||||
<ol>
|
||||
<li><strong>"Necessary" means "required in complete solution" not "uniquely necessary"</strong> — the Framework presents five layers where all are needed</li>
|
||||
<li><strong>Air-gapping is Layer 1 (capability constraint), not a replacement</strong> — you still need governance within the air gap</li>
|
||||
<li><strong>Current API controls prove the pattern</strong> — rate limits, scoping, HITL workflows ARE inference-time architectural constraints; the Framework systematizes informal practices</li>
|
||||
<li><strong>Complementarity, not exclusivity</strong> — explicitly stated in Section 2.3 of the original document</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div class="critique-section synthesis">
|
||||
<strong>Synthesis</strong>
|
||||
<p>Clarify "constitutional gates" as a design pattern (architectural constraints at inference) instantiated through various mechanisms: formal proposal schemas, API scoping + rate limits, or air-gapping + internal HITL workflows.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Critique 3 -->
|
||||
<div class="critique-card">
|
||||
<h3>
|
||||
3. Faithful Translation & Deceptive Alignment
|
||||
<span class="verdict-badge verdict-partial">Partial Acknowledgment Required</span>
|
||||
</h3>
|
||||
|
||||
<div class="critique-section critique">
|
||||
<strong>Critique</strong>
|
||||
<p>Framework cites extensive evidence that faithful translation assumption likely fails for advanced systems, undermining the central mechanism.</p>
|
||||
</div>
|
||||
|
||||
<div class="critique-section counter">
|
||||
<strong>Counter</strong>
|
||||
<p>Accept the vulnerability while arguing continued value:</p>
|
||||
<ol>
|
||||
<li><strong>Honest acknowledgment is superior</strong> to proposals that ignore the deception problem</li>
|
||||
<li><strong>Layered defense provides value even with compromised layers</strong> — gates create detection opportunities, force complex deception, generate audit trails, buy time</li>
|
||||
<li><strong>The alternative is worse</strong> — training-time alignment also vulnerable to deception; capability limits prevent beneficial use; no development forgoes benefits</li>
|
||||
<li><strong>Interpretability progress</strong> (70% at scale via sparse autoencoders) may enable future deception detection integrated with gates</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div class="critique-section synthesis">
|
||||
<strong>Synthesis</strong>
|
||||
<p>Adopt capability threshold approach: constitutional gates appropriate for systems below specified deception-robustness thresholds. Above threshold, escalate to air-gapping or development pause. Framework is for "pre-superintelligence" systems with explicit limits.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Critique 4 -->
|
||||
<div class="critique-card">
|
||||
<h3>
|
||||
4. Interpretability & Limits of the Sayable
|
||||
<span class="verdict-badge verdict-survives">Framework Survives</span>
|
||||
</h3>
|
||||
|
||||
<div class="critique-section critique">
|
||||
<strong>Critique</strong>
|
||||
<p>Claiming neural networks are categorically "unspeakable" overstates limits; interpretability is progressing empirically (70% at scale).</p>
|
||||
</div>
|
||||
|
||||
<div class="critique-section counter">
|
||||
<strong>Counter</strong>
|
||||
<p>The Wittgensteinian framing is about <em>current practical limits</em> justifying architectural rather than introspective verification:</p>
|
||||
<ol>
|
||||
<li><strong>Present-tense claim about current capabilities</strong>, not eternal impossibility</li>
|
||||
<li><strong>70% ≠ sufficient for real-time safety verification</strong> (30% opaque is enough for hidden capabilities)</li>
|
||||
<li><strong>Interpretability and architecture are complementary</strong> — gates create structured checkpoints where interpretability tools apply</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div class="critique-section synthesis">
|
||||
<strong>Synthesis</strong>
|
||||
<p>Update framing from "categorical limits" to "current practical limits." Position gates as current best practice that integrates interpretability as it matures, rather than permanent solution to inherent impossibility.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Critique 5 -->
|
||||
<div class="critique-card">
|
||||
<h3>
|
||||
5. Multi-Layer Defense Empirics
|
||||
<span class="verdict-badge verdict-survives">Framework Survives with Additions</span>
|
||||
</h3>
|
||||
|
||||
<div class="critique-section critique">
|
||||
<strong>Critique</strong>
|
||||
<p>Five-layer model lacks empirical validation with quantified thresholds like aviation/nuclear safety.</p>
|
||||
</div>
|
||||
|
||||
<div class="critique-section counter">
|
||||
<strong>Counter</strong>
|
||||
<p>Absence of validation is the problem being solved, not a flaw:</p>
|
||||
<ol>
|
||||
<li><strong>No learning from existential failures</strong> — aviation/nuclear iterate based on accidents; existential risk permits no iteration</li>
|
||||
<li><strong>Honest gap assessment</strong> — Table 4.3 IS the empirical assessment showing we lack validated solutions</li>
|
||||
<li><strong>Backwards demand</strong> — requiring empirical validation before deploying existential-risk containment means waiting for catastrophe</li>
|
||||
<li><strong>Can borrow validation methodologies:</strong> red-team testing, containment metrics, near-miss analysis, analogous domain failures</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div class="critique-section synthesis">
|
||||
<strong>Synthesis</strong>
|
||||
<p>Add "Validation Methodology" section with: (1) quantitative targets for each layer, (2) red-team protocols, (3) systematic analysis of analogous domain failures, (4) explicit acknowledgment that full empirical validation impossible for existential risks.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Critique 6 -->
|
||||
<div class="critique-card">
|
||||
<h3>
|
||||
6. Governance & Regulatory Capture
|
||||
<span class="verdict-badge verdict-survives">Framework Survives with Specification</span>
|
||||
</h3>
|
||||
|
||||
<div class="critique-section critique">
|
||||
<strong>Critique</strong>
|
||||
<p>Regulation can entrench incumbents and stifle innovation, potentially increasing systemic risk.</p>
|
||||
</div>
|
||||
|
||||
<div class="critique-section counter">
|
||||
<strong>Counter</strong>
|
||||
<p>Conflates bad regulation with regulation per se:</p>
|
||||
<ol>
|
||||
<li><strong>Market failures justify intervention</strong> for existential risk (externalities, public goods, time horizon mismatches, coordination failures)</li>
|
||||
<li><strong>Alternative is unaccountable private governance</strong> by frontier labs with no democratic input</li>
|
||||
<li><strong>Design matters</strong> — application-layer regulation (outcomes, not compute thresholds), performance standards, independent oversight, anti-capture mechanisms</li>
|
||||
<li><strong>Empirical success in other existential risks</strong> (NPT for nuclear, Montreal Protocol for ozone)</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div class="critique-section synthesis">
|
||||
<strong>Synthesis</strong>
|
||||
<p>Specify principles for good AI governance rather than merely asserting necessity. Include explicit anti-capture provisions and acknowledge trade-offs. Necessity claim is for "democratic governance with accountability," not bureaucratic command-and-control.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Critique 7 -->
|
||||
<div class="critique-card">
|
||||
<h3>
|
||||
7. Constitutional Pluralism
|
||||
<span class="verdict-badge verdict-partial">Acknowledge Normative Commitments</span>
|
||||
</h3>
|
||||
|
||||
<div class="critique-section critique">
|
||||
<strong>Critique</strong>
|
||||
<p>Core principles encode normative commitments (procedural liberalism) while claiming to preserve pluralism; complexity creates participation fatigue.</p>
|
||||
</div>
|
||||
|
||||
<div class="critique-section counter">
|
||||
<strong>Counter</strong>
|
||||
<p>All governance encodes values; transparency is the virtue:</p>
|
||||
<ol>
|
||||
<li><strong>Explicit acknowledgment</strong> in Section 5 superior to claiming neutrality</li>
|
||||
<li><strong>Bounded pluralism enables community variation</strong> within safety constraints (analogous to federalism)</li>
|
||||
<li><strong>Complexity solvable through UX design:</strong> sensible defaults, delegation, attention-aware presentation, tiered engagement (apply Christopher Alexander's pattern language methodology)</li>
|
||||
<li><strong>Alternatives are worse</strong> (global monoculture, no constraints, race to bottom)</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div class="critique-section synthesis">
|
||||
<strong>Synthesis</strong>
|
||||
<p>Reframe from "preserving pluralism" to "maximizing meaningful choice within safety constraints." Apply pattern language UX design to minimize fatigue. Measure actual engagement and iterate.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Critique 8 -->
|
||||
<div class="critique-card">
|
||||
<h3>
|
||||
8. Application-Layer vs. Global Leverage
|
||||
<span class="verdict-badge verdict-survives">Framework Survives with Positioning</span>
|
||||
</h3>
|
||||
|
||||
<div class="critique-section critique">
|
||||
<strong>Critique</strong>
|
||||
<p>Framework operates at platform layer while most risk originates at foundation model layer; limited leverage on systemic risk.</p>
|
||||
</div>
|
||||
|
||||
<div class="critique-section counter">
|
||||
<strong>Counter</strong>
|
||||
<p>Creates complementarity, not irrelevance:</p>
|
||||
<ol>
|
||||
<li><strong>Different risks require different layers</strong> — existential risk needs upstream controls (compute governance); operational risk needs application-layer governance</li>
|
||||
<li><strong>Proof-of-concept for eventual foundation model integration</strong> — demonstrates pattern for upstream adoption</li>
|
||||
<li><strong>Not all risk from frontier models</strong> — fine-tuned, open-source, edge deployments need governance too</li>
|
||||
<li><strong>Sovereignty requires application control</strong> — different communities need different policies even with aligned foundation models</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div class="critique-section synthesis">
|
||||
<strong>Synthesis</strong>
|
||||
<p>Position explicitly as Layer 2 focusing on operational risk and sovereignty. Add "Integration with Foundation Model Governance" section showing consumption of upstream safety metadata and reporting deployment patterns.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Critique 9 -->
|
||||
<div class="critique-card">
|
||||
<h3>
|
||||
9. Scaling Uncertainty
|
||||
<span class="verdict-badge verdict-partial">Add Capability Thresholds</span>
|
||||
</h3>
|
||||
|
||||
<div class="critique-section critique">
|
||||
<strong>Critique</strong>
|
||||
<p>Framework admits it doesn't scale to superintelligence; if existential risk is the motivation but the solution fails for that scenario, it's just ordinary software governance.</p>
|
||||
</div>
|
||||
|
||||
<div class="critique-section counter">
|
||||
<strong>Counter</strong>
|
||||
<p>Staged safety for staged capability:</p>
|
||||
<ol>
|
||||
<li><strong>Appropriate for stages 1-3</strong> (current through advanced narrow AI), not claiming to solve stage 4 (superintelligence)</li>
|
||||
<li><strong>Infrastructure for detecting assumption breaks</strong> — explicit monitoring enables escalation before catastrophic failure</li>
|
||||
<li><strong>Continuous risk matters</strong> — preventing civilizational collapse (99% → 0.01% risk) has enormous value even if not preventing literal extinction</li>
|
||||
<li><strong>Enables practical middle path</strong> — deploy with best-available containment while researching harder problems, vs. premature halt or uncontained deployment</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div class="critique-section synthesis">
|
||||
<strong>Synthesis</strong>
|
||||
<p>Add "Capability Threshold and Escalation" section: define specific metrics, specify thresholds for escalation to air-gapping/pause, continuous monitoring with automatic alerts. Explicitly: "This framework is for pre-superintelligence systems."</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Critique 10 -->
|
||||
<div class="critique-card">
|
||||
<h3>
|
||||
10. Measurement & Goodhart's Law
|
||||
<span class="verdict-badge verdict-survives">Framework Survives with Elaboration</span>
|
||||
</h3>
|
||||
|
||||
<div class="critique-section critique">
|
||||
<strong>Critique</strong>
|
||||
<p>Section 7 proposes mechanisms but under-specifies implementation at scale.</p>
|
||||
</div>
|
||||
|
||||
<div class="critique-section counter">
|
||||
<strong>Counter</strong>
|
||||
<p>Mechanisms are real and deployable with detail:</p>
|
||||
<ol>
|
||||
<li><strong>Metric rotation:</strong> Maintain suite of 10-15 metrics, rotate emphasis quarterly, systems can't predict which emphasized next</li>
|
||||
<li><strong>Multi-horizon evaluation:</strong> Immediate + short + medium + long-term assessment prevents gaming immediate metrics</li>
|
||||
<li><strong>Holdout evaluation + red-teaming:</strong> Standard ML practice formalized in governance</li>
|
||||
<li><strong>Multiple perspectives:</strong> Natural tension (user vs. community vs. moderator) forces genuine solutions over gaming</li>
|
||||
<li><strong>Qualitative integration:</strong> Narrative feedback resists quantification</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div class="critique-section synthesis">
|
||||
<strong>Synthesis</strong>
|
||||
<p>Expand Section 7 from "principles" to "protocols" with operational specifics: rotation schedules, timeframes, red-team procedures, case studies from analogous domains.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2>Overall Assessment</h2>
|
||||
|
||||
<div class="assessment-grid">
|
||||
<div class="assessment-card strong">
|
||||
<h4>The Framework Is Strong:</h4>
|
||||
<ul>
|
||||
<li>Intellectual honesty about limitations</li>
|
||||
<li>Coherent philosophical grounding (bounded rationality, precautionary satisficing)</li>
|
||||
<li>Practical value for current AI systems</li>
|
||||
<li>Multi-layer defense contribution</li>
|
||||
<li>Sovereignty preservation</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="assessment-card strengthen">
|
||||
<h4>Requires Strengthening:</h4>
|
||||
<ul>
|
||||
<li>Empirical validation methodology</li>
|
||||
<li>Implementation specifications</li>
|
||||
<li>Foundation model integration</li>
|
||||
<li>Capability threshold formalization</li>
|
||||
<li>Explicit normative acknowledgment</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="additions-list">
|
||||
<h3>Recommended Additions:</h3>
|
||||
<ol>
|
||||
<li>Capability thresholds with escalation triggers</li>
|
||||
<li>Quantitative targets (borrowing from nuclear/aviation)</li>
|
||||
<li>Foundation model integration pathways</li>
|
||||
<li>Pattern language UX for constitutional interfaces</li>
|
||||
<li>Validation protocols (red-teaming, analogous domains)</li>
|
||||
<li>Normative transparency in core principles</li>
|
||||
<li>Operational measurement protocols</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div class="final-verdict">
|
||||
<h2>Final Verdict</h2>
|
||||
<p>The Framework survives critique when properly positioned as a <span class="highlight">necessary Layer 2 component</span> appropriate for <span class="highlight">current and near-term AI systems</span>, focused on <span class="highlight">operational and catastrophic (not strict existential) risk</span>, instantiated as a <span class="highlight">design pattern with multiple implementations</span>.</p>
|
||||
<p class="korero-subtext">The kōrero reveals not fatal flaws but necessary elaborations to move from diagnostic paper to deployable architecture.</p>
|
||||
</div>
|
||||
|
||||
<div class="maori-proverb">
|
||||
<blockquote>
|
||||
<p>"Ko te kōrero te mouri o te tangata."</p>
|
||||
<p><em>(Speech is the life essence of a person.)</em></p>
|
||||
<p>—Māori proverb</p>
|
||||
</blockquote>
|
||||
<p class="call-to-action"><strong>Let us continue speaking together about the future we are making.</strong></p>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
<p class="document-footer"><em>Document generated through human-AI collaboration, January 2026</em></p>
|
||||
</article>
|
||||
|
||||
<!-- 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=1768693921"></script>
|
||||
<script src="/js/theme.js?v=1763348204"></script>
|
||||
<script src="/js/company-hub-navbar-component.js?v=1768690764"></script>
|
||||
<script src="/js/company-hub-navbar.js?v=1768687458"></script>
|
||||
<script src="/js/components/Footer.js?v=1768693921"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -77,8 +77,6 @@
|
|||
}
|
||||
</style>
|
||||
|
||||
<!-- Privacy-Preserving Analytics (Umami - GDPR Compliant, No Cookies) -->
|
||||
<script src="/js/components/umami-tracker.js"></script>
|
||||
<!-- Auto-reload on service worker update -->
|
||||
</head>
|
||||
<body class="bg-white">
|
||||
|
|
|
|||
|
|
@ -62,8 +62,6 @@
|
|||
a:focus-visible { outline: 3px solid var(--tractatus-core-end); outline-offset: 2px; }
|
||||
</style>
|
||||
|
||||
<!-- Privacy-Preserving Analytics (Umami - GDPR Compliant, No Cookies) -->
|
||||
<script src="/js/components/umami-tracker.js"></script>
|
||||
<!-- Auto-reload on service worker update -->
|
||||
</head>
|
||||
<body class="bg-gray-50">
|
||||
|
|
|
|||
|
|
@ -21,8 +21,6 @@
|
|||
a:focus-visible { outline: 3px solid #3b82f6; outline-offset: 2px; }
|
||||
</style>
|
||||
|
||||
<!-- Privacy-Preserving Analytics (Umami - GDPR Compliant, No Cookies) -->
|
||||
<script src="/js/components/umami-tracker.js"></script>
|
||||
<!-- Auto-reload on service worker update -->
|
||||
</head>
|
||||
<body class="bg-gray-50">
|
||||
|
|
|
|||
|
|
@ -20,8 +20,6 @@
|
|||
a:focus-visible { outline: 3px solid #3b82f6; outline-offset: 2px; }
|
||||
</style>
|
||||
|
||||
<!-- Privacy-Preserving Analytics (Umami - GDPR Compliant, No Cookies) -->
|
||||
<script src="/js/components/umami-tracker.js"></script>
|
||||
<!-- Auto-reload on service worker update -->
|
||||
</head>
|
||||
<body class="bg-gray-50">
|
||||
|
|
@ -160,70 +158,24 @@
|
|||
|
||||
<!-- 6. Analytics and Tracking -->
|
||||
<section class="bg-white shadow rounded-lg p-8">
|
||||
<h2 class="text-2xl font-bold text-gray-900 mb-4" data-i18n="section_6.title">6. Analytics and Tracking</h2>
|
||||
<h2 class="text-2xl font-bold text-gray-900 mb-4">6. Analytics and Tracking</h2>
|
||||
|
||||
<div class="bg-green-50 border-l-4 border-green-500 p-4 mb-6 rounded">
|
||||
<p class="text-green-900">
|
||||
<strong data-i18n="section_6.privacy_badge">Privacy-First Analytics:</strong> <span data-i18n="section_6.privacy_text">We use Umami Analytics, a privacy-respecting, GDPR-compliant analytics platform that collects no personal data and uses no cookies.</span>
|
||||
<strong>No Analytics:</strong> <span>We currently do not use any analytics or tracking on this website. Your browsing activity is not monitored or recorded.</span>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<h3 class="text-xl font-semibold text-gray-900 mt-6 mb-3" data-i18n="section_6.umami_heading">About Umami Analytics</h3>
|
||||
<p class="text-gray-700 mb-4" data-i18n="section_6.umami_intro">
|
||||
Umami helps us understand how visitors use our website so we can improve it. Unlike traditional analytics tools, Umami is designed with privacy at its core.
|
||||
</p>
|
||||
<h3 class="text-xl font-semibold text-gray-900 mt-6 mb-3">Cookies</h3>
|
||||
<p class="text-gray-700 mb-4">We use minimal cookies for essential purposes only:</p>
|
||||
|
||||
<h3 class="text-xl font-semibold text-gray-900 mt-6 mb-3" data-i18n="section_6.collected_heading">What Umami Collects:</h3>
|
||||
<ul class="list-disc pl-6 text-gray-700 space-y-2">
|
||||
<li data-i18n="section_6.collected_items.0"><strong>Page Views:</strong> Which pages you visit on our site</li>
|
||||
<li data-i18n="section_6.collected_items.1"><strong>Referrers:</strong> Which website referred you (if any)</li>
|
||||
<li data-i18n="section_6.collected_items.2"><strong>Browser Type:</strong> Your browser name (e.g., Chrome, Firefox, Safari)</li>
|
||||
<li data-i18n="section_6.collected_items.3"><strong>Device Type:</strong> Whether you're on desktop, tablet, or mobile</li>
|
||||
<li data-i18n="section_6.collected_items.4"><strong>Country:</strong> Your country based on IP address (not stored)</li>
|
||||
</ul>
|
||||
<p class="text-gray-700 mb-4"><strong>Essential Cookies:</strong> Required for site functionality (session management, authentication)</p>
|
||||
|
||||
<h3 class="text-xl font-semibold text-gray-900 mt-6 mb-3" data-i18n="section_6.not_collected_heading">What Umami Does NOT Collect:</h3>
|
||||
<ul class="list-disc pl-6 text-gray-700 space-y-2">
|
||||
<li data-i18n="section_6.not_collected_items.0">❌ <strong>IP Addresses:</strong> Not stored or logged</li>
|
||||
<li data-i18n="section_6.not_collected_items.1">❌ <strong>Personal Information:</strong> No names, emails, or identifiers</li>
|
||||
<li data-i18n="section_6.not_collected_items.2">❌ <strong>Cookies:</strong> Completely cookie-free tracking</li>
|
||||
<li data-i18n="section_6.not_collected_items.3">❌ <strong>Cross-Site Tracking:</strong> We don't track you across other websites</li>
|
||||
<li data-i18n="section_6.not_collected_items.4">❌ <strong>Precise Location:</strong> Only country-level, no city or GPS data</li>
|
||||
</ul>
|
||||
<p class="text-gray-700 mb-4"><strong>Preference Cookies:</strong> Remember your settings (currency selection, language preference)</p>
|
||||
|
||||
<h3 class="text-xl font-semibold text-gray-900 mt-6 mb-3" data-i18n="section_6.dnt_heading">Do Not Track Support</h3>
|
||||
<p class="text-gray-700 mb-4" data-i18n="section_6.dnt_text">
|
||||
We respect the Do Not Track (DNT) browser setting. If you have DNT enabled in your browser, our analytics will not track your visit at all.
|
||||
</p>
|
||||
|
||||
<h3 class="text-xl font-semibold text-gray-900 mt-6 mb-3" data-i18n="section_6.optout_heading">How to Opt Out</h3>
|
||||
<p class="text-gray-700 mb-4" data-i18n="section_6.optout_text">
|
||||
You can opt out of analytics tracking at any time:
|
||||
</p>
|
||||
<ul class="list-disc pl-6 text-gray-700 space-y-2 mb-4">
|
||||
<li data-i18n="section_6.optout_items.0"><strong>Browser Console Method:</strong> Open your browser's Developer Console (F12), and run: <code class="bg-gray-100 px-2 py-1 rounded">window.umamiOptOut()</code></li>
|
||||
<li data-i18n="section_6.optout_items.1"><strong>Enable DNT:</strong> Turn on "Do Not Track" in your browser settings</li>
|
||||
<li data-i18n="section_6.optout_items.2"><strong>Development Mode:</strong> Analytics are automatically disabled on localhost</li>
|
||||
</ul>
|
||||
<p class="text-gray-700 mb-6" data-i18n="section_6.optout_note">
|
||||
<em>Note: Your opt-out preference is stored in your browser's localStorage. You'll need to opt out again if you clear your browser data.</em>
|
||||
</p>
|
||||
|
||||
<h3 class="text-xl font-semibold text-gray-900 mt-6 mb-3" data-i18n="section_6.cookies_heading">Cookies</h3>
|
||||
<p class="text-gray-700 mb-4" data-i18n="section_6.cookies_intro">While Umami is cookie-free, we use cookies for other essential purposes:</p>
|
||||
|
||||
<p class="text-gray-700 mb-4" data-i18n="section_6.essential"><strong>Essential Cookies:</strong> Required for site functionality (session management, authentication)</p>
|
||||
|
||||
<p class="text-gray-700 mb-4" data-i18n="section_6.preference"><strong>Preference Cookies:</strong> Remember your settings (currency selection, language preference)</p>
|
||||
|
||||
<p class="text-gray-700" data-i18n="section_6.control">
|
||||
<p class="text-gray-700">
|
||||
You can control cookies through your browser settings. Disabling cookies may affect site functionality.
|
||||
</p>
|
||||
|
||||
<h3 class="text-xl font-semibold text-gray-900 mt-6 mb-3" data-i18n="section_6.hosting_heading">Analytics Data Storage</h3>
|
||||
<p class="text-gray-700" data-i18n="section_6.hosting_text">
|
||||
Analytics data is stored on our self-hosted Umami instance running on OVHCloud servers in France (EU). All analytics data remains within EU jurisdiction and is never shared with third parties.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -76,8 +76,6 @@
|
|||
}
|
||||
</style>
|
||||
|
||||
<!-- Privacy-Preserving Analytics (Umami - GDPR Compliant, No Cookies) -->
|
||||
<script src="/js/components/umami-tracker.js"></script>
|
||||
<!-- Auto-reload on service worker update -->
|
||||
</head>
|
||||
<body class="bg-white">
|
||||
|
|
|
|||
|
|
@ -6,8 +6,6 @@
|
|||
<title>Test - Pressure Chart</title>
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=1761163813">
|
||||
|
||||
<!-- Privacy-Preserving Analytics (Umami - GDPR Compliant, No Cookies) -->
|
||||
<script src="/js/components/umami-tracker.js"></script>
|
||||
<!-- Auto-reload on service worker update -->
|
||||
</head>
|
||||
<body class="p-10 bg-gray-50">
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue