tractatus/public/images/tractatus-icon-new.svg
TheFlow 2298d36bed fix(submissions): restructure Economist package and fix article display
- 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>
2025-10-24 08:47:42 +13:00

107 lines
5.6 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<svg width="200" height="200" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">
<defs>
<!-- Central core gradient (shared with Passport - cyan to blue) -->
<radialGradient id="tractatusCore">
<stop offset="0%" style="stop-color:#64ffda;stop-opacity:1" />
<stop offset="70%" style="stop-color:#448aff;stop-opacity:1" />
<stop offset="100%" style="stop-color:#0ea5e9;stop-opacity:1" />
</radialGradient>
<!-- Service-specific gradients (6 governance services) -->
<!-- 1. BoundaryEnforcer - Green (safety, protection) -->
<linearGradient id="serviceBoundary" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#10b981;stop-opacity:1" />
<stop offset="100%" style="stop-color:#059669;stop-opacity:1" />
</linearGradient>
<!-- 2. InstructionPersistenceClassifier - Indigo (memory, persistence) -->
<linearGradient id="serviceInstruction" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#6366f1;stop-opacity:1" />
<stop offset="100%" style="stop-color:#4f46e5;stop-opacity:1" />
</linearGradient>
<!-- 3. CrossReferenceValidator - Purple (verification) -->
<linearGradient id="serviceValidator" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#8b5cf6;stop-opacity:1" />
<stop offset="100%" style="stop-color:#7c3aed;stop-opacity:1" />
</linearGradient>
<!-- 4. ContextPressureMonitor - Amber (alertness, monitoring) -->
<linearGradient id="servicePressure" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#f59e0b;stop-opacity:1" />
<stop offset="100%" style="stop-color:#d97706;stop-opacity:1" />
</linearGradient>
<!-- 5. MetacognitiveVerifier - Rose (reflection, thought) -->
<linearGradient id="serviceMetacognitive" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#ec4899;stop-opacity:1" />
<stop offset="100%" style="stop-color:#db2777;stop-opacity:1" />
</linearGradient>
<!-- 6. PluralisticDeliberationOrchestrator - Teal (balance, mediation) -->
<linearGradient id="serviceDeliberation" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#14b8a6;stop-opacity:1" />
<stop offset="100%" style="stop-color:#0d9488;stop-opacity:1" />
</linearGradient>
<!-- Connection lines gradient -->
<linearGradient id="connectionGradient" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" style="stop-color:#64ffda;stop-opacity:0.2" />
<stop offset="50%" style="stop-color:#64ffda;stop-opacity:0.5" />
<stop offset="100%" style="stop-color:#64ffda;stop-opacity:0.2" />
</linearGradient>
<!-- Drop shadow for depth -->
<filter id="dropShadow">
<feDropShadow dx="0" dy="2" stdDeviation="3" flood-opacity="0.3"/>
</filter>
</defs>
<!-- Subtle background for contrast -->
<circle cx="100" cy="100" r="95" fill="rgba(255,255,255,0.02)"/>
<!-- Orbital rings (3 layers - governance architecture) -->
<circle cx="100" cy="100" r="85" stroke="#64ffda" stroke-width="1" opacity="0.15" fill="none"/>
<circle cx="100" cy="100" r="70" stroke="#64ffda" stroke-width="1" opacity="0.25" fill="none"/>
<circle cx="100" cy="100" r="55" stroke="#64ffda" stroke-width="1" opacity="0.35" fill="none"/>
<!-- Connection lines from center to each service node (hexagonal pattern) -->
<g opacity="0.4">
<line x1="100" y1="100" x2="100" y2="35" stroke="url(#connectionGradient)" stroke-width="2"/>
<line x1="100" y1="100" x2="156" y2="67.5" stroke="url(#connectionGradient)" stroke-width="2"/>
<line x1="100" y1="100" x2="156" y2="132.5" stroke="url(#connectionGradient)" stroke-width="2"/>
<line x1="100" y1="100" x2="100" y2="165" stroke="url(#connectionGradient)" stroke-width="2"/>
<line x1="100" y1="100" x2="44" y2="132.5" stroke="url(#connectionGradient)" stroke-width="2"/>
<line x1="100" y1="100" x2="44" y2="67.5" stroke="url(#connectionGradient)" stroke-width="2"/>
</g>
<!-- Six governance service nodes in hexagonal arrangement -->
<!-- 1. BoundaryEnforcer (top) - Green -->
<circle cx="100" cy="35" r="18" fill="url(#serviceBoundary)" filter="url(#dropShadow)" opacity="0.9"/>
<!-- 2. InstructionPersistenceClassifier (top-right) - Indigo -->
<circle cx="156" cy="67.5" r="18" fill="url(#serviceInstruction)" filter="url(#dropShadow)" opacity="0.9"/>
<!-- 3. CrossReferenceValidator (bottom-right) - Purple -->
<circle cx="156" cy="132.5" r="18" fill="url(#serviceValidator)" filter="url(#dropShadow)" opacity="0.9"/>
<!-- 4. ContextPressureMonitor (bottom) - Amber -->
<circle cx="100" cy="165" r="18" fill="url(#servicePressure)" filter="url(#dropShadow)" opacity="0.9"/>
<!-- 5. MetacognitiveVerifier (bottom-left) - Rose -->
<circle cx="44" cy="132.5" r="18" fill="url(#serviceMetacognitive)" filter="url(#dropShadow)" opacity="0.9"/>
<!-- 6. PluralisticDeliberationOrchestrator (top-left) - Teal -->
<circle cx="44" cy="67.5" r="18" fill="url(#serviceDeliberation)" filter="url(#dropShadow)" opacity="0.9"/>
<!-- Central core (AI system being governed) -->
<circle cx="100" cy="100" r="35" fill="url(#tractatusCore)" filter="url(#dropShadow)"/>
<!-- Subtle outer glow -->
<circle cx="100" cy="100" r="38" fill="none" stroke="rgba(100,255,218,0.2)" stroke-width="2"/>
<!-- Center symbol - "T" for Tractatus -->
<circle cx="100" cy="100" r="28" fill="rgba(0,0,0,0.25)"/>
<text x="100" y="110" text-anchor="middle" font-family="Arial, sans-serif" font-size="32" font-weight="bold" fill="white" opacity="0.95">T</text>
</svg>