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>
Implemented improvements from AUDIT_ANALYTICS_IMPROVEMENTS.md:
1. Added Service Health (24h) section:
- Shows which services are healthy (allowed, no violations)
- Green/red status indicators per service
- Displays allowed, blocked, and violation counts
2. Added Violations & Blocks (7 days) section:
- Long-term view of violations and blocks
- Shows only days with issues
- Displays "No violations" message when clean
- Lists services involved in violations
3. Fixed Timeline Chart with proper time bucketing:
- Replaced broken hour-of-day aggregation
- Added 3 modes: 6-hourly (24h), Daily (7d), Weekly (4w)
- Proper date-based bucketing instead of hour grouping
- Interactive mode switching with CSP-compliant event delegation
4. Simplified Recent Decisions table:
- Reduced from 50 to 10 most recent decisions
- Updated heading to clarify scope
All changes are CSP-compliant (no inline styles/handlers, Tailwind only).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Root cause: MongoDB ObjectId objects were being inserted into data-id
attributes as '[object Object]' instead of their string representation.
Fix: Explicitly call String() on sub._id when creating data attributes.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Updated cache version parameter to force browsers to reload
the fixed newsletter-management.js file with the DELETE button fix.
Previous fix was deployed but browsers were serving old cached version.
🤖 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>
Created comprehensive Editorial Guidelines Manager to display all 22
publication targets with detailed submission requirements:
**New Page:** `/admin/editorial-guidelines.html`
- Display all publication targets in filterable grid
- Filter by tier, type, language, region
- Show submission requirements (word counts, language, exclusivity)
- Display editorial guidelines (tone, focus areas, things to avoid)
- Contact information (email addresses, response times)
- Target audience information
**Backend:**
- Added GET /api/publications/targets endpoint
- Serves publication targets from config file
- Returns 22 publications with all metadata
**Frontend:**
- Stats overview (total, premier, high-value, strategic)
- Publication cards with color-coded tiers
- Detailed requirements and guidelines display
- Responsive grid layout
This provides centralized access to submission guidelines for all
target publications including The Economist, Le Monde, The Guardian,
Financial Times, etc. Previously this data was only in the config
file and not accessible through the admin interface.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Fixed 401 Unauthorized errors in blog validation/submission modal:
- Added Authorization Bearer token to /api/blog/admin/:id fetch (line 153)
- Added Authorization Bearer token to /api/submissions/by-blog-post/:id fetch (line 162)
- Added Authorization Bearer token to /api/submissions/:id/export fetch (line 818)
All admin API endpoints require authentication. The submission modal
was making unauthenticated requests, causing 401 errors when trying
to load article data or export submission packages.
The 404 error on by-blog-post is expected when no submission exists
for that blog post ID yet.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
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
- Create Economist SubmissionTracking package correctly:
* mainArticle = full blog post content
* coverLetter = 216-word SIR— letter
* Links to blog post via blogPostId
- Archive 'Letter to The Economist' from blog posts (it's the cover letter)
- Fix date display on article cards (use published_at)
- Target publication already displaying via blue badge
Database changes:
- Make blogPostId optional in SubmissionTracking model
- Economist package ID: 68fa85ae49d4900e7f2ecd83
- Le Monde package ID: 68fa2abd2e6acd5691932150
Next: Enhanced modal with tabs, validation, export
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fixed sync script disconnecting Mongoose (prevents production errors)
- Created text search index (fixes search in rule-manager)
- Enhanced inst_024 with closedown protocol, added inst_061
- Added sync infrastructure: API routes, dashboard widget, auto-sync
- Fixed MemoryProxy tests MongoDB connection
- Created ADR-001 and integration tests
Result: Production stable, 52 rules synced, search working
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
- Update integrated implementation roadmap with Phase 2 completions
- Update blog curation admin interface
- Update implementer page with value pluralism content
Reflects October 12 production status
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Framework Service Enhancements:
- ContextPressureMonitor: Enhanced statistics tracking and contextual adjustments
- InstructionPersistenceClassifier: Improved context integration and consistency
- MetacognitiveVerifier: Extended verification capabilities and logging
- All services: 182 unit tests passing
Admin Interface Improvements:
- Blog curation: Enhanced content management and validation
- Audit analytics: Improved analytics dashboard and reporting
- Dashboard: Updated metrics and visualizations
Documentation:
- Architectural overview: Improved markdown formatting for readability
- Added blank lines between sections for better structure
- Fixed table formatting for version history
All tests passing: Framework stable for deployment
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Complete implementation of AI-assisted blog content generation with mandatory
human oversight and Tractatus framework compliance.
Features:
- BlogCuration.service.js: AI-powered blog post drafting
- Tractatus enforcement: inst_016, inst_017, inst_018 validation
- TRA-OPS-0002 compliance: AI suggests, human decides
- Admin UI: blog-curation.html with 3-tab interface
- API endpoints: draft-post, analyze-content, editorial-guidelines
- Moderation queue integration for human approval workflow
- Comprehensive test coverage: 26/26 tests passing (91.46% coverage)
Documentation:
- BLOG_CURATION_WORKFLOW.md: Complete workflow and API docs (608 lines)
- Editorial guidelines with forbidden patterns
- Troubleshooting and monitoring guidance
Boundary Checks:
- No fabricated statistics without sources (inst_016)
- No absolute guarantee terms: guarantee, 100%, never fails (inst_017)
- No unverified production-ready claims (inst_018)
- Mandatory human approval before publication
Integration:
- ClaudeAPI.service.js for content generation
- BoundaryEnforcer.service.js for governance checks
- ModerationQueue model for approval workflow
- GovernanceLog model for audit trail
Total Implementation: 2,215 lines of code
Status: Production ready
Phase 4 Week 1-2: Option C Complete
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Created Apache License 2.0 LICENSE file
- Removed all MIT License references from HTML pages
- Updated all footers with Apache 2.0 license links
- Updated about.html with comprehensive license section explaining why Apache 2.0
- Added patent protection, contributor clarity, and community standard benefits
- Updated package.json license field to "Apache-2.0"
- Updated README.md with Apache 2.0 license information
- Deployed LICENSE file to production server (accessible at /LICENSE)
Why Apache 2.0 over MIT:
- Patent protection for users
- Clear contribution terms
- Permissive use (commercial, modification, distribution)
- Community standard in AI/ML projects (TensorFlow, PyTorch, Apache Spark)
All pages cache-busted and deployed with v1759833751
🤖 Generated with Claude Code (https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added navigation bar to index.html with links to all main sections
- Added "About" link to all page navigation menus
- Fixed "View Live API Status" button - changed from /api/governance (Phase 2) to 27027 demo
- Removed "Framework Status" footer link (Phase 2 backend work)
- Updated footer resources section with complete site navigation
- Cache-busted all pages for deployment
Navigation now consistent across all pages: Researcher, Implementer, Advocate, Documentation, About, Home
🤖 Generated with Claude Code (https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Created /about.html with mission, values, framework overview
- Created /about/values.html with comprehensive values statement
- Included respectful Te Tiriti o Waitangi acknowledgment
- Added CARE Principles for Indigenous Data Governance
- Documented digital sovereignty and Māori data sovereignty
- Updated all page footers with Te Tiriti acknowledgment
- Added links to Te Mana Raraunga and indigenous data resources
- Cache-busted all HTML files for deployment
🤖 Generated with Claude Code (https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fixed download icon size (1.25rem instead of huge black icons)
- Uploaded all 12 PDFs to production server
- Restored table of contents rendering for all documents
- Fixed modal cards with proper CSS and event handlers
- Replaced all docs-viewer.html links with docs.html
- Added nginx redirect from /docs/* to /docs.html
- Fixed duplicate headers in modal sections
- Improved cache-busting with timestamp versioning
All documentation features now working correctly:
✅ Card-based document viewer with modals
✅ PDF downloads with proper icons
✅ Table of contents navigation
✅ Consistent URL structure
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>