Store opted-in report screenshots as validated local artifacts rather than GitHub attachments. - Add multipart report attachment upload with PNG/JPEG validation and provenance metadata. - Carry validated artifact references through report drafts and filing flows without binary egress. - Update report UI, tests, documentation, and release metadata. Files changed: .changeset/report-screenshot-artifacts.md | 7 + docs/dashboard-guide.md | 2 +- packages/core/src/index.gate.ts | 2 +- packages/core/src/index.ts | 2 +- packages/core/src/types.ts | 7 + packages/dashboard/app/api/report.ts | 14 +- packages/dashboard/app/components/ReportModal.css | 3 +- packages/dashboard/app/components/ReportModal.tsx | 41 ++--- .../app/components/__tests__/ReportModal.test.tsx | 58 +++++-- packages/dashboard/app/utils/report-capture.ts | 47 ++---- .../src/__tests__/report-pipeline.test.ts | 94 ------------ .../dashboard/src/__tests__/report-routes.test.ts | 123 +++++++++++---- packages/dashboard/src/report-pipeline.ts | 128 +++------------- .../dashboard/src/routes/register-report-routes.ts | 169 +++++++-------------- 14 files changed, 279 insertions(+), 418 deletions(-) Fusion-Task-Id: FN-8371 Fusion-Task-Lineage: 48d0e94d-602f-43e2-a63f-cb497221ac29 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
12 lines
1.3 KiB
CSS
12 lines
1.3 KiB
CSS
.report-modal-backdrop { position: fixed; inset: 0; z-index: var(--z-modal); display: grid; place-items: center; padding: var(--space-4); background: color-mix(in srgb, var(--bg-base) 70%, transparent); }
|
|
.report-modal { position: relative; display: grid; gap: var(--space-3); inline-size: min(var(--space-96), 100%); padding: var(--space-5); }
|
|
.report-modal textarea { min-block-size: var(--space-32); resize: vertical; }
|
|
.report-modal__close { position: absolute; inset-block-start: var(--space-2); inset-inline-end: var(--space-2); }
|
|
.report-modal__error { color: var(--color-error); }
|
|
.report-modal__warning { color: var(--color-warning); }
|
|
.report-modal__screenshot-option { display: flex; gap: var(--space-2); align-items: center; }
|
|
.report-modal__screenshot-preview { display: grid; gap: var(--space-2); padding: var(--space-3); border-radius: var(--radius-md); background: color-mix(in srgb, var(--bg-raised) 85%, transparent); }
|
|
.report-modal__activity-trace { padding: var(--space-3); border-radius: var(--radius-md); background: color-mix(in srgb, var(--bg-raised) 85%, transparent); }
|
|
.report-modal__activity-trace ul { margin: var(--space-2) 0 0; padding-inline-start: var(--space-5); }
|
|
@media (max-width: 768px) { .report-modal { inline-size: 100%; padding: var(--space-4); } }
|