@nebulacomponents/citable 1.16.0 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +16 -3
  3. package/dist/universal/.agents/skills/citable/SKILL.md +47 -1
  4. package/dist/universal/.agents/skills/citable/VERSION +1 -1
  5. package/dist/universal/.agents/skills/citable/manifest.json +8 -6
  6. package/dist/universal/.agents/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
  7. package/dist/universal/.agents/skills/citable/schemas/finding.schema.json +69 -0
  8. package/dist/universal/.agents/skills/citable/schemas/remediation-verification.schema.json +98 -0
  9. package/dist/universal/.claude/agents/citable/manifest.json +2 -2
  10. package/dist/universal/.claude/skills/citable/SKILL.md +47 -1
  11. package/dist/universal/.claude/skills/citable/VERSION +1 -1
  12. package/dist/universal/.claude/skills/citable/manifest.json +8 -6
  13. package/dist/universal/.claude/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
  14. package/dist/universal/.claude/skills/citable/schemas/finding.schema.json +69 -0
  15. package/dist/universal/.claude/skills/citable/schemas/remediation-verification.schema.json +98 -0
  16. package/dist/universal/.cursor/skills/citable/SKILL.md +47 -1
  17. package/dist/universal/.cursor/skills/citable/VERSION +1 -1
  18. package/dist/universal/.cursor/skills/citable/manifest.json +8 -6
  19. package/dist/universal/.cursor/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
  20. package/dist/universal/.cursor/skills/citable/schemas/finding.schema.json +69 -0
  21. package/dist/universal/.cursor/skills/citable/schemas/remediation-verification.schema.json +98 -0
  22. package/dist/universal/.gemini/skills/citable/SKILL.md +47 -1
  23. package/dist/universal/.gemini/skills/citable/VERSION +1 -1
  24. package/dist/universal/.gemini/skills/citable/manifest.json +8 -6
  25. package/dist/universal/.gemini/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
  26. package/dist/universal/.gemini/skills/citable/schemas/finding.schema.json +69 -0
  27. package/dist/universal/.gemini/skills/citable/schemas/remediation-verification.schema.json +98 -0
  28. package/dist/universal/.github/skills/citable/SKILL.md +47 -1
  29. package/dist/universal/.github/skills/citable/VERSION +1 -1
  30. package/dist/universal/.github/skills/citable/manifest.json +8 -6
  31. package/dist/universal/.github/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
  32. package/dist/universal/.github/skills/citable/schemas/finding.schema.json +69 -0
  33. package/dist/universal/.github/skills/citable/schemas/remediation-verification.schema.json +98 -0
  34. package/dist/universal/.kiro/skills/citable/SKILL.md +47 -1
  35. package/dist/universal/.kiro/skills/citable/VERSION +1 -1
  36. package/dist/universal/.kiro/skills/citable/manifest.json +8 -6
  37. package/dist/universal/.kiro/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
  38. package/dist/universal/.kiro/skills/citable/schemas/finding.schema.json +69 -0
  39. package/dist/universal/.kiro/skills/citable/schemas/remediation-verification.schema.json +98 -0
  40. package/dist/universal/.opencode/skills/citable/SKILL.md +47 -1
  41. package/dist/universal/.opencode/skills/citable/VERSION +1 -1
  42. package/dist/universal/.opencode/skills/citable/manifest.json +8 -6
  43. package/dist/universal/.opencode/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
  44. package/dist/universal/.opencode/skills/citable/schemas/finding.schema.json +69 -0
  45. package/dist/universal/.opencode/skills/citable/schemas/remediation-verification.schema.json +98 -0
  46. package/dist/universal/.pi/agent/skills/citable/SKILL.md +47 -1
  47. package/dist/universal/.pi/agent/skills/citable/VERSION +1 -1
  48. package/dist/universal/.pi/agent/skills/citable/manifest.json +8 -6
  49. package/dist/universal/.pi/agent/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
  50. package/dist/universal/.pi/agent/skills/citable/schemas/finding.schema.json +69 -0
  51. package/dist/universal/.pi/agent/skills/citable/schemas/remediation-verification.schema.json +98 -0
  52. package/dist/universal/.qoder/skills/citable/SKILL.md +47 -1
  53. package/dist/universal/.qoder/skills/citable/VERSION +1 -1
  54. package/dist/universal/.qoder/skills/citable/manifest.json +8 -6
  55. package/dist/universal/.qoder/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
  56. package/dist/universal/.qoder/skills/citable/schemas/finding.schema.json +69 -0
  57. package/dist/universal/.qoder/skills/citable/schemas/remediation-verification.schema.json +98 -0
  58. package/dist/universal/.rovodev/skills/citable/SKILL.md +47 -1
  59. package/dist/universal/.rovodev/skills/citable/VERSION +1 -1
  60. package/dist/universal/.rovodev/skills/citable/manifest.json +8 -6
  61. package/dist/universal/.rovodev/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
  62. package/dist/universal/.rovodev/skills/citable/schemas/finding.schema.json +69 -0
  63. package/dist/universal/.rovodev/skills/citable/schemas/remediation-verification.schema.json +98 -0
  64. package/dist/universal/.trae/skills/citable/SKILL.md +47 -1
  65. package/dist/universal/.trae/skills/citable/VERSION +1 -1
  66. package/dist/universal/.trae/skills/citable/manifest.json +8 -6
  67. package/dist/universal/.trae/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
  68. package/dist/universal/.trae/skills/citable/schemas/finding.schema.json +69 -0
  69. package/dist/universal/.trae/skills/citable/schemas/remediation-verification.schema.json +98 -0
  70. package/dist/universal/.trae-cn/skills/citable/SKILL.md +47 -1
  71. package/dist/universal/.trae-cn/skills/citable/VERSION +1 -1
  72. package/dist/universal/.trae-cn/skills/citable/manifest.json +8 -6
  73. package/dist/universal/.trae-cn/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
  74. package/dist/universal/.trae-cn/skills/citable/schemas/finding.schema.json +69 -0
  75. package/dist/universal/.trae-cn/skills/citable/schemas/remediation-verification.schema.json +98 -0
  76. package/dist/universal/manifest.json +100 -76
  77. package/package.json +1 -1
  78. package/schemas/cli-output-envelope.schema.json +30 -0
  79. package/schemas/finding.schema.json +69 -0
  80. package/schemas/remediation-verification.schema.json +98 -0
  81. package/skill/SKILL.md +47 -1
  82. package/src/analysis/saliency.js +119 -0
  83. package/src/cli/index.js +269 -6
  84. package/src/commands/audit.js +2 -2
  85. package/src/commands/ciWorkflow.js +63 -0
  86. package/src/commands/compatibility.js +205 -0
  87. package/src/commands/context.js +2 -1
  88. package/src/commands/edgeRules.js +80 -4
  89. package/src/commands/edgeSecurity.js +192 -0
  90. package/src/commands/experimentGuardrails.js +213 -0
  91. package/src/commands/goldenCorpus.js +155 -0
  92. package/src/commands/implementationKit.js +202 -0
  93. package/src/commands/inspectCro.js +60 -0
  94. package/src/commands/planExperiment.js +52 -0
  95. package/src/commands/previewCro.js +241 -0
  96. package/src/commands/remediate.js +461 -0
  97. package/src/commands/verifyRemediation.js +204 -0
  98. package/src/commands/visualRegression.js +165 -0
  99. package/src/components/index.js +556 -0
  100. package/src/detectors/cro.js +48 -0
  101. package/src/detectors/framework.js +31 -1
  102. package/src/reporting/executiveExport.js +113 -1
@@ -114,8 +114,120 @@ export async function exportExecutiveReport(root, runId, {
114
114
  ## Prioritized Action Items
115
115
  ${findings.slice(0, 5).map((f) => `- **[${f.detector_id}]** (${f.severity}): ${f.summary}`).join("\n") || "- No blocking findings detected."}
116
116
  `;
117
+ } else if (format === "slides") {
118
+ const fsa = findings.reduce((acc, f) => {
119
+ const sev = (f.classification?.severity || f.severity || "medium").toLowerCase();
120
+ return acc + (sev === "critical" ? 15 : sev === "high" ? 10 : sev === "medium" ? 5 : 2);
121
+ }, 0);
122
+
123
+ content = `<!DOCTYPE html>
124
+ <html lang="en">
125
+ <head>
126
+ <meta charset="UTF-8">
127
+ <title>Nebula CRO Executive Presentation — ${clientName}</title>
128
+ <style>
129
+ * { box-sizing: border-box; margin: 0; padding: 0; }
130
+ body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; background: #0f172a; color: #f8fafc; height: 100vh; overflow: hidden; display: flex; flex-direction: column; }
131
+ .slide { display: none; padding: 4rem; height: 100%; flex-direction: column; justify-content: center; max-width: 1200px; margin: 0 auto; width: 100%; }
132
+ .slide.active { display: flex; animation: fadeIn 0.3s ease; }
133
+ @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
134
+ h1 { font-size: 3rem; font-weight: 800; color: #38bdf8; margin-bottom: 1.5rem; }
135
+ h2 { font-size: 2.25rem; font-weight: 700; color: #f8fafc; margin-bottom: 1.5rem; }
136
+ p { font-size: 1.25rem; color: #94a3b8; margin-bottom: 1.5rem; line-height: 1.6; }
137
+ .grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 2rem; margin: 2rem 0; }
138
+ .stat-box { background: #1e293b; padding: 2rem; border-radius: 1rem; border: 1px solid #334155; text-align: center; }
139
+ .stat-val { font-size: 3.5rem; font-weight: 900; color: #38bdf8; }
140
+ .stat-val.crit { color: #f87171; }
141
+ .stat-val.good { color: #4ade80; }
142
+ .stat-label { font-size: 1rem; color: #94a3b8; margin-top: 0.5rem; font-weight: 600; text-transform: uppercase; }
143
+ .controls { position: fixed; bottom: 2rem; right: 2rem; display: flex; gap: 1rem; }
144
+ .btn { background: #2563eb; color: #fff; border: none; padding: 0.75rem 1.5rem; border-radius: 0.5rem; font-size: 1rem; font-weight: 600; cursor: pointer; }
145
+ .btn:hover { background: #1d4ed8; }
146
+ .premise { background: #1e293b; border-left: 4px solid #f59e0b; padding: 1rem 1.5rem; font-size: 1rem; color: #cbd5e1; border-radius: 0 0.5rem 0.5rem 0; margin-top: 2rem; }
147
+ </style>
148
+ </head>
149
+ <body>
150
+ <div class="slide active">
151
+ <h1>Executive CRO Briefing</h1>
152
+ <p>Client: <strong>${clientName}</strong> | Run: ${targetRun || "Latest"}</p>
153
+ <p>Deterministic conversion diagnostics, friction surface area elimination, and Nebula Components remediation.</p>
154
+ <div class="premise">
155
+ <strong>Operating Premise:</strong> Citable does not make fabricated revenue or conversion guarantees. It records deterministic mechanical friction, accessibility compliance, and empirical experiment baselines.
156
+ </div>
157
+ </div>
158
+
159
+ <div class="slide">
160
+ <h2>Friction Surface Area (Modeled Index)</h2>
161
+ <div class="grid">
162
+ <div class="stat-box">
163
+ <div class="stat-val crit">${fsa}</div>
164
+ <div class="stat-label">Baseline FSA — modeled index</div>
165
+ </div>
166
+ <div class="stat-box">
167
+ <div class="stat-val good">0</div>
168
+ <div class="stat-label">Target FSA — modeled projection</div>
169
+ </div>
170
+ <div class="stat-box">
171
+ <div class="stat-val good">${findings.length}</div>
172
+ <div class="stat-label">Measured mechanical defects (deterministic detections)</div>
173
+ </div>
174
+ </div>
175
+ <p>FSA is a modeled heuristic index (severity-weighted mechanical defects), not a measured revenue or conversion outcome. Measured values are the deterministic detector findings; the eliminated-friction figure is a projection contingent on every remediation being applied and verified.</p>
176
+ </div>
177
+
178
+ <div class="slide">
179
+ <h2>Measured vs Modeled — Read This Slide First</h2>
180
+ <div class="grid">
181
+ <div class="stat-box" style="text-align:left;">
182
+ <h3 style="color:#4ade80; margin-bottom:0.75rem;">Measured (deterministic)</h3>
183
+ <p style="font-size:1rem;">Detector findings by severity, page conditions captured in evidence packages, experiment sample-size requirements, and observed citation records. Each carries provenance.</p>
184
+ </div>
185
+ <div class="stat-box" style="text-align:left;">
186
+ <h3 style="color:#f59e0b; margin-bottom:0.75rem;">Modeled (heuristic)</h3>
187
+ <p style="font-size:1rem;">Friction Surface Area, CTA Conspicuity Index (PCI), gaze-path ordering, and projected post-remediation values. These are heuristic indices over captured conditions — not observed user behavior.</p>
188
+ </div>
189
+ <div class="stat-box" style="text-align:left;">
190
+ <h3 style="color:#f87171; margin-bottom:0.75rem;">Not claimed</h3>
191
+ <p style="font-size:1rem;">Revenue lift, conversion uplift, ranking gains, or citation counts that were not directly observed and recorded. Citable does not fabricate projections to make a business case.</p>
192
+ </div>
193
+ </div>
194
+ </div>
195
+
196
+ <div class="slide">
197
+ <h2>Prioritized Remediations</h2>
198
+ <p>Every finding maps directly to a production-ready, accessible Nebula Component:</p>
199
+ <div style="background:#1e293b; border-radius:0.75rem; padding:1.5rem; border:1px solid #334155;">
200
+ ${findings.slice(0, 4).map((f) => `<div style="padding:0.5rem 0; border-bottom:1px solid #334155; font-size:1.1rem;"><strong>[${f.detector_id || "CRO"}]</strong>: ${f.summary || "Conversion action friction"}</div>`).join("") || "<p>All conversion pathways verified clean.</p>"}
201
+ </div>
202
+ <div style="margin-top:1.5rem; font-family:monospace; background:#0f172a; padding:1rem; border-radius:0.5rem; border:1px solid #334155; color:#38bdf8;">
203
+ $ npx @nebulacomponents/citable remediate --finding CRO-007 --write
204
+ </div>
205
+ </div>
206
+
207
+ <div class="controls">
208
+ <button class="btn" onclick="prevSlide()">← Prev</button>
209
+ <button class="btn" onclick="nextSlide()">Next →</button>
210
+ </div>
211
+
212
+ <script>
213
+ let cur = 0;
214
+ const slides = document.querySelectorAll('.slide');
215
+ function show(i) {
216
+ slides.forEach(s => s.classList.remove('active'));
217
+ cur = (i + slides.length) % slides.length;
218
+ slides[cur].classList.add('active');
219
+ }
220
+ function nextSlide() { show(cur + 1); }
221
+ function prevSlide() { show(cur - 1); }
222
+ window.addEventListener('keydown', (e) => {
223
+ if (e.key === 'ArrowRight' || e.key === ' ') nextSlide();
224
+ if (e.key === 'ArrowLeft') prevSlide();
225
+ });
226
+ </script>
227
+ </body>
228
+ </html>\n`;
117
229
  } else {
118
- throw new Error(`unsupported executive report format "${format}". Supported: html-brief, markdown-deck`);
230
+ throw new Error(`unsupported executive report format "${format}". Supported: html-brief, markdown-deck, slides`);
119
231
  }
120
232
 
121
233
  if (output) {