diff --git a/src/controllers/audit.controller.js b/src/controllers/audit.controller.js index 99269c59..48186727 100644 --- a/src/controllers/audit.controller.js +++ b/src/controllers/audit.controller.js @@ -19,9 +19,8 @@ * Serves audit logs from MemoryProxy for analytics dashboard */ -const fs = require('fs').promises; -const path = require('path'); const logger = require('../utils/logger.util'); +const AuditLog = require('../models/AuditLog.model'); // Default cost factors (user-configurable) const DEFAULT_COST_FACTORS = { @@ -31,7 +30,7 @@ const DEFAULT_COST_FACTORS = { LOW: { amount: 500, currency: 'USD', rationale: 'Average developer time cost to fix low-impact issue' } }; -let userCostFactors = { ...DEFAULT_COST_FACTORS }; +const userCostFactors = { ...DEFAULT_COST_FACTORS }; /** * Get audit logs for analytics @@ -193,7 +192,7 @@ async function getAuditAnalytics(req, res) { timestamp: d.timestamp, reason: d.violations[0].ruleText || d.violations[0].details, ruleId: d.violations[0].ruleId, - severity: severity, + severity, file: d.metadata?.filePath || d.metadata?.file || 'N/A', service: d.service }); @@ -416,9 +415,11 @@ async function getAuditAnalytics(req, res) { severityScore: Math.round(severityScore) }, trend: recentBlockRate < avgBlockRate ? 'improving' : 'stable', - message: recentBlockRate < 0.05 ? 'Excellent - Framework teaching good practices' : - recentBlockRate < 0.10 ? 'Good - Team adapting well to governance' : - 'Learning - Framework actively preventing violations' + message: recentBlockRate < 0.05 + ? 'Excellent - Framework teaching good practices' + : recentBlockRate < 0.10 + ? 'Good - Team adapting well to governance' + : 'Learning - Framework actively preventing violations' }; // ROI Projections diff --git a/src/controllers/cases.controller.js b/src/controllers/cases.controller.js index 27b1f133..62e91700 100644 --- a/src/controllers/cases.controller.js +++ b/src/controllers/cases.controller.js @@ -5,8 +5,6 @@ const CaseSubmission = require('../models/CaseSubmission.model'); const ModerationQueue = require('../models/ModerationQueue.model'); -const GovernanceLog = require('../models/GovernanceLog.model'); -const BoundaryEnforcer = require('../services/BoundaryEnforcer.service'); const logger = require('../utils/logger.util'); /** diff --git a/src/controllers/crm.controller.js b/src/controllers/crm.controller.js index 8e7d0a49..c0f66d9b 100644 --- a/src/controllers/crm.controller.js +++ b/src/controllers/crm.controller.js @@ -8,9 +8,6 @@ const Organization = require('../models/Organization.model'); const ActivityTimeline = require('../models/ActivityTimeline.model'); const ResponseTemplate = require('../models/ResponseTemplate.model'); const SLATracking = require('../models/SLATracking.model'); -const Contact = require('../models/Contact.model'); -const MediaInquiry = require('../models/MediaInquiry.model'); -const CaseSubmission = require('../models/CaseSubmission.model'); /** * Get CRM dashboard statistics diff --git a/src/controllers/feedback.controller.js b/src/controllers/feedback.controller.js index 0d345c65..6e3c385f 100644 --- a/src/controllers/feedback.controller.js +++ b/src/controllers/feedback.controller.js @@ -130,7 +130,7 @@ async function getStatus(req, res) { submittedAt: feedback.created_at, hasResponse: !!feedback.response.content, responsePreview: feedback.response.content - ? feedback.response.content.substring(0, 200) + '...' + ? `${feedback.response.content.substring(0, 200)}...` : null }); diff --git a/src/controllers/framework-content-analysis.controller.js b/src/controllers/framework-content-analysis.controller.js index 9c73e60f..de232b17 100644 --- a/src/controllers/framework-content-analysis.controller.js +++ b/src/controllers/framework-content-analysis.controller.js @@ -147,7 +147,7 @@ exports.analyzeBlogPost = async (req, res) => { * Body: { title, content, category, tags, status: 'draft' } */ exports.saveBlogDraft = async (req, res) => { - const { title, content, category, tags } = req.body; + const { title, content: _content, category: _category, tags: _tags } = req.body; logger.info('[Framework Content Analysis] Saving blog draft', { userId: req.user.id, @@ -159,7 +159,7 @@ exports.saveBlogDraft = async (req, res) => { res.json({ success: true, message: 'Draft saved successfully', - draftId: 'draft_' + Date.now() + draftId: `draft_${Date.now()}` }); }; @@ -170,7 +170,7 @@ exports.saveBlogDraft = async (req, res) => { * Body: { title, content, category, tags, status: 'published' } */ exports.publishBlogPost = async (req, res) => { - const { title, content, category, tags } = req.body; + const { title, content: _content, category: _category, tags: _tags } = req.body; logger.info('[Framework Content Analysis] Publishing blog post', { userId: req.user.id, @@ -182,7 +182,7 @@ exports.publishBlogPost = async (req, res) => { res.json({ success: true, message: 'Post published successfully', - postId: 'post_' + Date.now() + postId: `post_${Date.now()}` }); }; @@ -279,7 +279,7 @@ exports.analyzeFeedback = async (req, res) => { * Body: { source, relatedPost, content, notes } */ exports.saveFeedbackAnalysis = async (req, res) => { - const { source, relatedPost, content, notes } = req.body; + const { source, relatedPost: _relatedPost, content: _content, notes: _notes } = req.body; logger.info('[Framework Content Analysis] Saving feedback analysis', { userId: req.user.id, @@ -290,7 +290,7 @@ exports.saveFeedbackAnalysis = async (req, res) => { res.json({ success: true, message: 'Feedback analysis saved successfully', - analysisId: 'feedback_' + Date.now() + analysisId: `feedback_${Date.now()}` }); }; @@ -301,7 +301,7 @@ exports.saveFeedbackAnalysis = async (req, res) => { * Body: { source, relatedPost, content } */ exports.exportFeedbackReport = async (req, res) => { - const { source, relatedPost, content } = req.body; + const { source, relatedPost: _relatedPost, content: _content } = req.body; logger.info('[Framework Content Analysis] Exporting feedback report', { userId: req.user.id, @@ -337,7 +337,7 @@ function analyzeSentiment(content) { // Question indicators const questionWords = ['how', 'what', 'why', 'when', 'where', '?']; - const questionCount = questionWords.filter(word => lowerContent.includes(word)).length; + const _questionCount = questionWords.filter(word => lowerContent.includes(word)).length; // Determine overall sentiment let overall = 'neutral'; diff --git a/src/models/DeliberationSession.model.js b/src/models/DeliberationSession.model.js index 13be36ac..d00aadc1 100644 --- a/src/models/DeliberationSession.model.js +++ b/src/models/DeliberationSession.model.js @@ -190,14 +190,18 @@ class DeliberationSession { const interventionRecord = { timestamp: new Date(), - intervener: intervention.intervener, // Name/ID of human who intervened - trigger: intervention.trigger, // "safety_concern" | "ai_error" | "stakeholder_request" | "quality_issue" | "manual" + intervener: intervention.intervener, + // "safety_concern" | "ai_error" | "stakeholder_request" | "quality_issue" | "manual" + trigger: intervention.trigger, round_number: intervention.round_number || null, description: intervention.description, - ai_action_overridden: intervention.ai_action_overridden || null, // What AI was doing when intervention occurred - corrective_action: intervention.corrective_action, // What human did instead - stakeholder_informed: intervention.stakeholder_informed || false, // Were stakeholders told about the intervention? - resolution: intervention.resolution || null // How was the situation resolved? + // What AI was doing when intervention occurred + ai_action_overridden: intervention.ai_action_overridden || null, + corrective_action: intervention.corrective_action, + // Were stakeholders told about the intervention? + stakeholder_informed: intervention.stakeholder_informed || false, + // How was the situation resolved? + resolution: intervention.resolution || null }; const result = await collection.updateOne( @@ -229,7 +233,8 @@ class DeliberationSession { const escalationRecord = { timestamp: new Date(), detected_by: escalation.detected_by, // "ai" | "human" | "stakeholder" - escalation_type: escalation.escalation_type, // "pattern_bias" | "stakeholder_distress" | "disengagement" | "hostile_exchange" | "ai_malfunction" + // "pattern_bias" | "stakeholder_distress" | "disengagement" | "hostile_exchange" | "ai_malfunction" + escalation_type: escalation.escalation_type, severity: escalation.severity, // "low" | "moderate" | "high" | "critical" round_number: escalation.round_number || null, description: escalation.description, @@ -280,7 +285,8 @@ class DeliberationSession { values_prioritized: outcome.values_prioritized || [], values_deprioritized: outcome.values_deprioritized || [], deliberation_summary: outcome.deliberation_summary, - consensus_level: outcome.consensus_level, // "full_consensus" | "strong_accommodation" | "moderate_accommodation" | "documented_dissent" | "no_resolution" + // "full_consensus" | "strong_accommodation" | "moderate_accommodation" | "documented_dissent" | "no_resolution" + consensus_level: outcome.consensus_level, dissenting_perspectives: outcome.dissenting_perspectives || [], justification: outcome.justification, moral_remainder: outcome.moral_remainder || null, // What was sacrificed/lost? diff --git a/src/models/DiskMetrics.model.js b/src/models/DiskMetrics.model.js index fefbc358..84e56a04 100644 --- a/src/models/DiskMetrics.model.js +++ b/src/models/DiskMetrics.model.js @@ -49,9 +49,9 @@ class DiskMetrics { const totalMem = os.totalmem(); const freeMem = os.freemem(); metrics.memory = { - total: (totalMem / (1024 ** 3)).toFixed(2) + 'GB', - used: ((totalMem - freeMem) / (1024 ** 3)).toFixed(2) + 'GB', - free: (freeMem / (1024 ** 3)).toFixed(2) + 'GB', + total: `${(totalMem / (1024 ** 3)).toFixed(2)}GB`, + used: `${((totalMem - freeMem) / (1024 ** 3)).toFixed(2)}GB`, + free: `${(freeMem / (1024 ** 3)).toFixed(2)}GB`, usedPercent: Math.round(((totalMem - freeMem) / totalMem) * 100) };