Framework Measurement Scripts (Phase 4.2-4.3): - measure-framework-effectiveness.js: Overall participation rate and service metrics - check-boundary-enforcer-logs.js: Service-specific analysis with recent decision tracking - measure-recent-participation.js: Recent-only metrics to avoid historical data skew Purpose: Discovered that 91.6% of audit logs were created before Phase 3 deployment, creating artificially low participation metrics. These scripts separate historical (pre-Phase 3) data from current performance metrics. Key Findings: - Overall participation: 4.3% (misleading - includes 91.6% pre-Phase 3 data) - Recent BoundaryEnforcer decisions: 100% guidance generation (last 5/5) - CrossReferenceValidator: 56% participation (last 24h) - MetacognitiveVerifier: 43% participation (last 24h) Validates Phase 3 is working correctly - 100% of new decisions include guidance. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
115 lines
4.3 KiB
JavaScript
115 lines
4.3 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
const mongoose = require('mongoose');
|
|
|
|
async function main() {
|
|
await mongoose.connect('mongodb://localhost:27017/tractatus_dev');
|
|
|
|
const db = mongoose.connection.db;
|
|
const auditLogs = db.collection('auditLogs');
|
|
|
|
// Phase 3 was likely deployed around 2025-10-27 (today)
|
|
// Let's check decisions from the last 24 hours
|
|
const oneDayAgo = new Date();
|
|
oneDayAgo.setHours(oneDayAgo.getHours() - 24);
|
|
|
|
console.log('═══════════════════════════════════════════════════════════');
|
|
console.log(' ACTUAL PARTICIPATION RATE (Recent Decisions Only)');
|
|
console.log('═══════════════════════════════════════════════════════════');
|
|
console.log('');
|
|
console.log(`Analyzing decisions since: ${oneDayAgo.toISOString()}`);
|
|
console.log('');
|
|
|
|
// Recent decisions (last 24h)
|
|
const recentTotal = await auditLogs.countDocuments({
|
|
timestamp: { $gte: oneDayAgo }
|
|
});
|
|
|
|
const recentWithGuidance = await auditLogs.countDocuments({
|
|
timestamp: { $gte: oneDayAgo },
|
|
'metadata.framework_backed_decision': true
|
|
});
|
|
|
|
const recentRate = recentTotal > 0
|
|
? ((recentWithGuidance / recentTotal) * 100).toFixed(1)
|
|
: 0;
|
|
|
|
console.log('Overall (Last 24 Hours):');
|
|
console.log('─'.repeat(50));
|
|
console.log(` Total Decisions: ${recentTotal}`);
|
|
console.log(` With Guidance: ${recentWithGuidance}`);
|
|
console.log(` Participation Rate: ${recentRate}%`);
|
|
console.log('');
|
|
|
|
// Break down by service
|
|
const serviceBreakdown = await auditLogs.aggregate([
|
|
{ $match: { timestamp: { $gte: oneDayAgo } } },
|
|
{
|
|
$group: {
|
|
_id: '$service',
|
|
total: { $sum: 1 },
|
|
withGuidance: {
|
|
$sum: {
|
|
$cond: [{ $eq: ['$metadata.framework_backed_decision', true] }, 1, 0]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{ $sort: { total: -1 } }
|
|
]).toArray();
|
|
|
|
console.log('By Service (Last 24 Hours):');
|
|
console.log('─'.repeat(50));
|
|
console.log('Service Name Total With Guidance Rate');
|
|
console.log('───────────────────────────────────────────────────────────────');
|
|
|
|
serviceBreakdown.forEach(service => {
|
|
const serviceName = service._id || 'Unknown';
|
|
const rate = service.total > 0
|
|
? ((service.withGuidance / service.total) * 100).toFixed(0)
|
|
: 0;
|
|
console.log(`${serviceName.padEnd(30)} ${String(service.total).padStart(7)} ${String(service.withGuidance).padStart(13)} ${String(rate).padStart(4)}%`);
|
|
});
|
|
console.log('');
|
|
|
|
// Comparison: All time vs Recent
|
|
const allTimeTotal = await auditLogs.countDocuments({});
|
|
const allTimeWithGuidance = await auditLogs.countDocuments({
|
|
'metadata.framework_backed_decision': true
|
|
});
|
|
const allTimeRate = allTimeTotal > 0
|
|
? ((allTimeWithGuidance / allTimeTotal) * 100).toFixed(1)
|
|
: 0;
|
|
|
|
console.log('Comparison: All Time vs Recent:');
|
|
console.log('─'.repeat(50));
|
|
console.log(` All Time Rate: ${allTimeRate}% (includes pre-Phase 3 data)`);
|
|
console.log(` Recent Rate (24h): ${recentRate}% (Phase 3 active)`);
|
|
console.log('');
|
|
|
|
if (parseFloat(recentRate) > parseFloat(allTimeRate)) {
|
|
const improvement = parseFloat(recentRate) - parseFloat(allTimeRate);
|
|
console.log(` ✓ IMPROVEMENT: +${improvement.toFixed(1)}% since Phase 3 deployment`);
|
|
} else {
|
|
console.log(` → No significant change detected`);
|
|
}
|
|
console.log('');
|
|
|
|
// Target assessment
|
|
console.log('Target Assessment:');
|
|
console.log('─'.repeat(50));
|
|
const target = 60;
|
|
if (parseFloat(recentRate) >= target) {
|
|
console.log(` 🎉 TARGET MET: ${recentRate}% ≥ ${target}% target`);
|
|
} else {
|
|
const gap = target - parseFloat(recentRate);
|
|
console.log(` ⚠ BELOW TARGET: ${recentRate}% (need +${gap.toFixed(1)}% to reach ${target}%)`);
|
|
}
|
|
console.log('');
|
|
|
|
console.log('═══════════════════════════════════════════════════════════');
|
|
|
|
await mongoose.disconnect();
|
|
}
|
|
|
|
main().catch(console.error);
|