tractatus/src/models
TheFlow cf09b66c32 feat(governance): extend framework checks to all external communications
Problem:
- Blog publishing has governance checks (inst_016/017/018/079)
- Media responses and templates had NO checks
- Inconsistent: same risks, different enforcement

Solution - Unified Framework Enforcement:
1. Created ContentGovernanceChecker.service.js (shared service)
2. Enforced in media responses (blocks at API level)
3. Enforced in response templates (scans on create)
4. Scanner for existing templates

Impact:
 Blog posts: Framework checks (existing)
 Media inquiry responses: Framework checks (NEW)
 Response templates: Framework checks (NEW)
 Future: Newsletter content ready for checks

Files Changed:

1. src/services/ContentGovernanceChecker.service.js (NEW)
   - Unified content scanner for all external communications
   - Checks: inst_016 (stats), inst_017 (guarantees), inst_018 (claims), inst_079 (dark patterns)
   - Returns detailed violation reports with context

2. src/controllers/media.controller.js
   - Added governance check in respondToInquiry()
   - Blocks responses with violations (400 error)
   - Logs violations with media outlet context

3. src/models/ResponseTemplate.model.js
   - Added governance check in create()
   - Stores check results in template record
   - Prevents violating templates from being created

4. scripts/scan-response-templates.js (NEW)
   - Scans all existing templates for violations
   - Displays detailed violation reports
   - --fix flag to mark violating templates as inactive

Testing:
 ContentGovernanceChecker: All pattern tests pass
 Clean content: Passes validation
 Fabricated stats: Detected (inst_016)
 Absolute guarantees: Detected (inst_017)
 Dark patterns: Detected (inst_079)
 Template scanner: Works (0 templates in DB)

Enforcement Points:
- Blog posts: publishPost() → blocked at API
- Media responses: respondToInquiry() → blocked at API
- Templates: create() → checked before insertion
- Newsletter: ready for future implementation

Architectural Consistency:
If blog needs governance, ALL external communications need governance.

References:
- inst_016: No fabricated statistics
- inst_017: No absolute guarantees
- inst_018: No unverified production claims
- inst_079: No dark patterns/manipulative urgency
- inst_063: External communications consistency

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-25 09:53:09 +13:00
..
ActivityTimeline.model.js feat(crm): complete Phase 3 multi-project CRM + critical bug fixes 2025-10-24 18:10:14 +13:00
Analytics.model.js fix(analytics): remove SessionSchema.index sessionId duplicate 2025-10-24 10:25:02 +13:00
AuditLog.model.js fix: MongoDB persistence and inst_016-018 content validation enforcement 2025-10-11 00:17:03 +13:00
BlogPost.model.js fix(submissions): restructure Economist package and fix article display 2025-10-24 08:47:42 +13:00
CaseSubmission.model.js fix(submissions): restructure Economist package and fix article display 2025-10-24 08:47:42 +13:00
Contact.model.js feat(crm): implement unified contact form system 2025-10-24 16:56:21 +13:00
DeliberationSession.model.js chore: update dependencies and documentation 2025-10-19 12:48:37 +13:00
Document.model.js fix(submissions): restructure Economist package and fix article display 2025-10-24 08:47:42 +13:00
Donation.model.js refactor(lint): fix code style and unused variables across src/ 2025-10-24 20:15:26 +13:00
GovernanceLog.model.js feat: fix documentation system - cards, PDFs, TOC, and navigation 2025-10-07 22:51:55 +13:00
GovernanceRule.model.js fix(models): remove duplicate schema indexes for clean startup 2025-10-12 16:35:45 +13:00
index.js feat(server): add security middleware and website-specific routes 2025-10-23 10:57:20 +13:00
MediaInquiry.model.js fix(submissions): restructure Economist package and fix article display 2025-10-24 08:47:42 +13:00
ModerationQueue.model.js refactor(lint): fix code style and unused variables across src/ 2025-10-24 20:15:26 +13:00
NewsletterSubscription.model.js fix(submissions): restructure Economist package and fix article display 2025-10-24 08:47:42 +13:00
Organization.model.js feat(crm): complete Phase 3 multi-project CRM + critical bug fixes 2025-10-24 18:10:14 +13:00
Precedent.model.js chore: update dependencies and documentation 2025-10-19 12:48:37 +13:00
Project.model.js refactor(lint): fix code style and unused variables across src/ 2025-10-24 20:15:26 +13:00
PublicationRelationship.model.js fix(submissions): restructure Economist package and fix article display 2025-10-24 08:47:42 +13:00
Resource.model.js fix(submissions): restructure Economist package and fix article display 2025-10-24 08:47:42 +13:00
ResponseTemplate.model.js feat(governance): extend framework checks to all external communications 2025-10-25 09:53:09 +13:00
ScheduledTask.model.js refactor(lint): fix code style and unused variables across src/ 2025-10-24 20:15:26 +13:00
SessionState.model.js fix: MongoDB persistence and inst_016-018 content validation enforcement 2025-10-11 00:17:03 +13:00
SLATracking.model.js refactor(lint): fix code style and unused variables across src/ 2025-10-24 20:15:26 +13:00
SubmissionTracking.model.js fix(submissions): resolve Mongoose populate error for hybrid BlogPost model 2025-10-24 10:19:33 +13:00
UnifiedContact.model.js feat(crm): complete Phase 3 multi-project CRM + critical bug fixes 2025-10-24 18:10:14 +13:00
User.model.js fix(submissions): restructure Economist package and fix article display 2025-10-24 08:47:42 +13:00
VariableValue.model.js refactor(lint): fix code style and unused variables across src/ 2025-10-24 20:15:26 +13:00
VerificationLog.model.js chore(framework): session tracking, test enforcement, and schema improvements 2025-10-21 04:05:09 +13:00