Fixed broken "Decisions Over Time" chart that wasn't displaying bars.
Root cause: Empty divs with percentage heights collapsed in flex containers.
Fixes applied:
1. **Pixel heights instead of percentages**
- Calculate absolute pixel heights from h-48 container (192px)
- Percentage heights don't work in flex containers with items-end
2. **Non-breaking space inside bars**
- Added to prevent empty div collapse
- Even with height set, empty divs can collapse in some layouts
3. **Decision count labels**
- Display count above each bar for exact numbers
- Shows both visual proportion (bar height) and exact value (label)
4. **Minimum 10px height**
- Ensures small values are always visible
- Prevents bars from disappearing for low counts
5. **Wider bars**
- Changed from max-w-16 (64px) to w-3/4 (75% width)
- More visible and easier to interact with
Timeline modes working:
- ✅ 6-Hourly (24h) - 4 bars showing last 24 hours in 6-hour buckets
- ✅ Daily (7d) - 7 bars showing last 7 days
- ✅ Weekly (4w) - 4 bars showing last 4 weeks
All modes show current snapshot updated on refresh.
Files changed:
- public/js/admin/audit-analytics.js: Timeline rendering logic
- public/admin/audit-analytics.html: Updated cache version
- public/*.html: Cache version bump for consistency
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Updated cache-busting version to force browser reload of fixed JavaScript.
Root cause: Browser serving cached version of newsletter-management.js
with old arrow function bug, even though production file had the fix.
Changes:
- Bumped version to 0.1.0.1761283486841 across all HTML files
- Updated public/admin/newsletter-management.html (missed by auto-script)
- Updated version.json and service worker
Related fix: Newsletter DELETE button sending [object Object]
Fixed in commit edb1540 but cached version prevented fix from loading.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
CRITICAL FIX: Economist submission package was showing no data because
the frontend was storing the entire API response wrapper instead of
extracting the actual post and submission data.
Changes:
- submission-modal-enhanced.js: Extract .post from blog API response
- submission-modal-enhanced.js: Extract .data from submissions API response
- publications.routes.js: Restore original routes and add /targets endpoint
- Cache version bumped to force browser updates
Fixes: #economist-submission-data-missing
Fixed inconsistent cache version parameters across admin pages.
All HTML files now use v=0.1.0.1761262254119 to ensure mobile
browsers fetch fresh assets.
Changes:
- Updated all 12 admin HTML files to consistent cache version
- Updated all 17 public HTML files via update-cache-version script
- Service worker version: 0.1.1
- Version.json: 0.1.1
This ensures service worker cache invalidation triggers properly
and all pages reference matching asset versions.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Updated to v0.1.1 to force browser refresh
- Ensures users get fixed submissions controller code
- Removed BlogPost populate() calls that caused 500 errors
- Added detailed console logs to track submission loading
- Check if API response is ok
- Log all submissions found
- Log filtering logic for standalone submissions
- Cache version updated
- Modified loadValidationArticles() to load standalone submissions (no blogPostId)
- Updated rendering to handle both blog posts and standalone packages
- Fixed API endpoint from /api/blog/posts/:id to /api/blog/admin/:id
- Standalone packages show with purple 'STANDALONE PACKAGE' badge
- Button text changes to 'View Package' for standalone submissions
- Cache version bumped to 0.1.1
- Enhanced update-cache-version.js to update service worker and version.json
- Added inst_075 governance instruction (HIGH persistence)
- Integrated cache check into deployment script (Step 1/5)
- Created CACHE_MANAGEMENT_ENFORCEMENT.md documentation
- Bumped version to 0.1.1
- Updated all HTML cache parameters
BREAKING: Deployment now blocks if JS changed without cache update
Add comprehensive About page emphasizing moral philosophy foundation over organizational theory. PluralisticDeliberationOrchestrator positioned as primary research focus. Te Tiriti o Waitangi content integrated to establish indigenous data sovereignty principles.
Also implements auto-compact tracking system to gather empirical data on Claude Code context compression events, enabling future heuristic predictions.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Updated i18n-simple.js and language-selector.js version to 1761023171
to force browser reload after translation fixes (inst_017 violations).
This ensures users see the corrected 'architectural constraints'
instead of cached 'architectural guarantees' text.
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
SUMMARY:
Enhanced About page with democratic legitimacy themes and published new blog
article addressing Tractatus scaling strategy. Preserves Economist first
publication rights by creating substantially different content.
ABOUT PAGE ENHANCEMENTS:
- Added "Why This Matters" section (4 paragraphs on democratic legitimacy)
- Added "Pluralism" as 5th core value (teal border, values-sensitive content)
- Enhanced Mission section with values pluralism opening paragraph
- Updated locale file (about.json) with all new i18n keys
- Themes: constitutional governance, affected communities, plural values
BLOG ARTICLE - "How to Scale Tractatus: Breaking the Chicken-and-Egg Problem":
- 3,500+ words on staged scaling roadmap
- Stage 1: Proof of Concept ✅ Complete (October 2025)
- Stage 2: Enterprise Pilots 🔄 In Progress (Q1-Q2 2026 target)
- Stage 3: Critical Workloads ⏳ (Q3-Q4 2026)
- Stage 4: Industry Standards ⏳ (2027+)
- Call to action: Pilot partners needed for Stage 2
- Published: https://agenticgovernance.digital/blog-post.html?slug=scaling-tractatus-roadmap
CONTENT DIFFERENTIATION:
- 40%+ unique content from Economist article
- Different audience: Implementers/CTOs vs. business leaders/policymakers
- Different angle: Practical scaling vs. philosophical values argument
- Preserves Economist first publication rights (submit tomorrow)
FILES:
- public/about.html: Democratic legitimacy, Why This Matters, Pluralism
- public/locales/en/about.json: New i18n keys for enhanced content
- docs/outreach/Blog-Article-Scaling-Tractatus.md: Source markdown
- docs/outreach/PUBLISHING_RIGHTS_ANALYSIS.md: Publishing research
- scripts/seed-scaling-blog-post.js: Blog database seeding script
- .claude/metrics/hooks-metrics.json: Session activity tracking
PUBLISHING WORKFLOW:
- Local: Seeded successfully (6 total blog posts)
- Production: Seeded via `node -r dotenv/config scripts/seed-scaling-blog-post.js`
- Accessible via /api/blog and /blog-post.html?slug=scaling-tractatus-roadmap
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
SUMMARY:
Fixed About page to accurately reflect all 6 Tractatus Framework components.
PluralisticDeliberationOrchestrator was missing from the "How It Works" section.
CHANGES:
- Updated intro text: "five" → "six" integrated components
- Added PluralisticDeliberationOrchestrator component card
- Updated locale file (about.json) with 6th component description
- Removed lock file from docs/outreach
DETAILS:
All other pages (architecture, researcher, leader, implementer, index) correctly
showed 6 components. About page was the only page with the discrepancy.
TESTED:
- Verified locally at http://localhost:9000/about.html
- All 6 components now display correctly
- Locale strings properly applied
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Language Selector Issues Resolved:
- Add cache-busting version (v0.1.0.1760643941) to i18n-simple.js
- Add cache-busting version to language-selector.js on all pages
- Previously: Scripts cached without versions, causing stale JS to load
- Now: Browser forced to reload latest language selector code
Pages Updated with Cache-Busting:
- index.html: Added ?v= to both i18n scripts
- about.html: Added ?v= to both i18n scripts
- researcher.html: Added ?v= to both i18n scripts
- leader.html: Added ?v= to both i18n scripts
- implementer.html: Added ?v= to both i18n scripts
- faq.html: Added ?v= to both i18n scripts
- docs.html: Added missing i18n scripts + cache-busting
Root Cause Analysis:
- navbar.js had cache-busting (?v=0.1.0.1760254958072)
- i18n scripts had NO cache-busting
- Browsers served cached old versions of language-selector.js
- Language selector container created by navbar, but old selector code failed
Technical Details:
- Desktop language selector: Already correctly shows dropdown only (hidden md:block)
- Mobile language selector: Already correctly shows icons only (flex md:hidden)
- No code changes needed - cache was the issue
- Script loading order: navbar.js → i18n-simple.js → language-selector.js
Deployment:
- All 7 HTML pages deployed to production
- Language selector now appears on all pages including index.html
- Cache invalidation forces browser to fetch new JavaScript
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Critical Bug Fix:
- about.html had 55 data-i18n attributes but NO i18n scripts loaded
- Language selector appeared but clicking did nothing (confusing UX)
Added Before </body>:
- <script src="/js/i18n-simple.js"></script>
- <script src="/js/components/language-selector.js"></script>
Impact:
✅ about.html now fully functional in 3 languages (en/de/fr)
✅ All 55 translation keys now active
✅ Language switching works correctly
Testing:
- Verified scripts load after footer content
- Confirmed translation files accessible via HTTP
- Language selector now triggers content updates
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>