diff --git a/package.json b/package.json index cb87ef1a..8824bd8c 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,8 @@ "version": "1.0.0", "description": "PR Readiness Checker - Track and monitor GitHub Pull Request status", "scripts": { - "dev": "wrangler dev", + "fingerprint": "node scripts/fingerprint.js", + "dev": "npm run fingerprint && wrangler dev", "deploy": "wrangler deploy", "db:create": "wrangler d1 create pr_tracker", "db:migrate:local": "wrangler d1 migrations apply pr_tracker --local", diff --git a/public/asset-manifest.json b/public/asset-manifest.json new file mode 100644 index 00000000..ce531fb2 --- /dev/null +++ b/public/asset-manifest.json @@ -0,0 +1,5 @@ +{ + "error-reporter.js": "error-reporter.1b9dc33f.js", + "how-it-works.js": "how-it-works.3ebd3397.js", + "theme.js": "theme.196e3e21.js" +} diff --git a/public/diagnostics.html b/public/diagnostics.html index 1f294302..5a8fca38 100644 --- a/public/diagnostics.html +++ b/public/diagnostics.html @@ -23,7 +23,7 @@ } })(); - + GitHub - @@ -168,8 +168,8 @@

0) { + var primary = errors[0]; + reportError( + primary.name || 'ConsoleError', + (primary.name || 'ConsoleError') + ': ' + (primary.message || ''), + primary.stack || msg, + { + url: getPageUrl(), + source: 'console.error:unhandled', + report_channel: 'dedupe-candidate', + error_count: String(errors.length), + } + ); + } else if (msg) { + reportError('ConsoleError', msg, msg, { + url: getPageUrl(), + source: 'console.error', + }); + } + } catch (e) {} + + return original.apply(console, arguments); + }; + })(); +})(); diff --git a/public/how-it-works.3ebd3397.js b/public/how-it-works.3ebd3397.js new file mode 100644 index 00000000..43ad62aa --- /dev/null +++ b/public/how-it-works.3ebd3397.js @@ -0,0 +1,123 @@ +// Interactive Score Calculator for BLT-Leaf "How It Works" Page + +function calculateScore() { + // Get input values + const ciPassed = parseInt(document.getElementById('ciPassed').value); + const ciFailed = parseInt(document.getElementById('ciFailed').value); + const approvals = parseInt(document.getElementById('approvals').value); + const changesRequested = parseInt(document.getElementById('changesRequested').value); + const conversations = parseInt(document.getElementById('conversations').value); + const responseRate = parseInt(document.getElementById('responseRate').value); + + // Update displayed values + document.getElementById('ciPassedValue').textContent = ciPassed; + document.getElementById('ciFailedValue').textContent = ciFailed; + document.getElementById('approvalsValue').textContent = approvals; + document.getElementById('changesRequestedValue').textContent = changesRequested; + document.getElementById('conversationsValue').textContent = conversations; + document.getElementById('responseRateValue').textContent = responseRate + '%'; + + // Calculate CI Score + const totalChecks = ciPassed + ciFailed; + let ciScore = 0; + let ciConfidence = 'Low'; + let ciConfidenceBadge = 'badge-low'; + + if (totalChecks > 0) { + ciScore = (ciPassed / totalChecks) * 100; + ciConfidence = 'High'; + ciConfidenceBadge = 'badge-high'; + } else { + // No checks run - low confidence, assume failure + ciScore = 0; + ciConfidence = 'Low'; + ciConfidenceBadge = 'badge-low'; + } + + // Calculate Review Score + let reviewScore = 0; + let reviewConfidence = 'Medium'; + let reviewConfidenceBadge = 'badge-medium'; + + if (approvals > 0 && changesRequested === 0) { + reviewScore = 100; + reviewConfidence = 'High'; + reviewConfidenceBadge = 'badge-high'; + } else if (approvals > 0 && changesRequested > 0) { + reviewScore = 50; + reviewConfidence = 'Medium'; + reviewConfidenceBadge = 'badge-medium'; + } else if (approvals === 0 && changesRequested > 0) { + reviewScore = 0; + reviewConfidence = 'High'; + reviewConfidenceBadge = 'badge-high'; + } else { + // No approvals, no changes requested + reviewScore = 0; + reviewConfidence = 'Medium'; + reviewConfidenceBadge = 'badge-medium'; + } + + // Response Score (direct mapping) + const responseScore = responseRate; + let responseConfidence = 'High'; + let responseConfidenceBadge = 'badge-high'; + + if (responseRate < 50) { + responseConfidence = 'Low'; + responseConfidenceBadge = 'badge-low'; + } else if (responseRate < 80) { + responseConfidence = 'Medium'; + responseConfidenceBadge = 'badge-medium'; + } + + // Calculate Overall Score + // Formula: (CI × 0.4) + (Review × 0.4) + (Response × 0.2) - (3 × conversations) + let overallScore = (ciScore * 0.4) + (reviewScore * 0.4) + (responseScore * 0.2); + + // Deduct 3 points per unresolved conversation + overallScore = Math.max(0, overallScore - (conversations * 3)); + + // Determine overall status + let overallStatus = ''; + let overallColor = ''; + + if (overallScore >= 80) { + overallStatus = '✅ Merge Ready'; + overallColor = 'text-green-600 dark:text-green-400'; + } else if (overallScore >= 60) { + overallStatus = '⚠️ Needs Attention'; + overallColor = 'text-yellow-600 dark:text-yellow-400'; + } else { + overallStatus = '❌ Not Ready'; + overallColor = 'text-red-600 dark:text-red-400'; + } + + // Update UI + const overallScoreElement = document.getElementById('overallScore'); + overallScoreElement.textContent = Math.round(overallScore) + '%'; + overallScoreElement.className = overallColor + ' text-5xl font-bold mb-2'; + + document.getElementById('overallStatus').textContent = overallStatus; + + document.getElementById('ciScoreDisplay').innerHTML = + `${Math.round(ciScore)}% ${ciConfidence}`; + + document.getElementById('reviewScoreDisplay').innerHTML = + `${Math.round(reviewScore)}% ${reviewConfidence}`; + + document.getElementById('responseScoreDisplay').innerHTML = + `${Math.round(responseScore)}% ${responseConfidence}`; +} + +// Initialize calculator on page load +document.addEventListener('DOMContentLoaded', function () { + // Attach event listeners to all range inputs + const rangeInputs = document.querySelectorAll('input[type="range"]'); + rangeInputs.forEach(input => { + input.addEventListener('input', calculateScore); + }); + + // Initial calculation + calculateScore(); +}); diff --git a/public/how-it-works.html b/public/how-it-works.html index 6f5261f6..e3f3690a 100644 --- a/public/how-it-works.html +++ b/public/how-it-works.html @@ -8,22 +8,7 @@ How It Works — BLT-Leaf - - + GitHub - @@ -1098,53 +1083,12 @@

- - + - + diff --git a/public/index.html b/public/index.html index ff0b2152..dc707537 100644 --- a/public/index.html +++ b/public/index.html @@ -28,7 +28,7 @@ } })(); - +