fix: Resolve ESLint errors breaking CI

- audit.controller.js: Remove unused fs/path imports, add AuditLog import,
  fix indentation, use const for userCostFactors, use property shorthand
- crm.controller.js: Remove unused Contact, MediaInquiry, CaseSubmission imports
- cases.controller.js: Remove unused GovernanceLog, BoundaryEnforcer imports
- DiskMetrics.model.js: Use template literals instead of string concatenation
- framework-content-analysis.controller.js: Use template literals, prefix
  unused destructured vars with underscore
- feedback.controller.js: Use template literal for string concat
- DeliberationSession.model.js: Fix line length by moving comments to own lines

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
TheFlow 2026-01-23 12:20:50 +13:00
parent f9ffd44ac8
commit 42a7d95c0f
7 changed files with 34 additions and 32 deletions

View file

@ -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

View file

@ -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');
/**

View file

@ -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

View file

@ -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
});

View file

@ -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';

View file

@ -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?

View file

@ -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)
};