hosted/ifttt/api/index.html

57 lines
No EOL
24 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/api/"><title>IF.Trace — Developers / API</title><meta name="description" content="Developer-facing overview of the IF.Trace public receipt surface: stable no-login URLs, HTML fallbacks for sandboxes, and offline verification bundles."><meta property="og:title" content="IF.Trace — Developers / API"><meta property="og:description" content="Developer-facing overview of the IF.Trace public receipt surface: stable no-login URLs, HTML fallbacks for sandboxes, and offline verification bundles."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/iftrace-og.svg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.DjS-2tUw.css">
<style>[data-slot=tile]{--tile-padding: 0px}[data-slot=tile][data-variant=floating]{--tile-padding: 24px}
[data-slot=section]{--section-width: var(--container, var(--breakpoint-xl));--section-py: calc(var(--spacing) * 12);--section-px: max( var(--gutter, 24px), calc((100cqw - var(--section-width)) / 2) )}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 6)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 8)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 24)}@media(min-width:1024px){[data-slot=section]{--section-py: calc(var(--spacing) * 16)}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 16)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 12)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 32)}}
</style></head> <body class="min-h-screen bg-background text-foreground"> <div aria-hidden="true" class="pointer-events-none fixed inset-0 -z-10"> <div class="absolute inset-0 bg-[radial-gradient(1200px_circle_at_20%_0%,rgba(16,185,129,0.18),transparent_60%),radial-gradient(1200px_circle_at_90%_10%,rgba(59,130,246,0.14),transparent_55%),radial-gradient(900px_circle_at_30%_100%,rgba(244,63,94,0.10),transparent_55%)]"></div> <div class="absolute inset-0 bg-[linear-gradient(to_bottom,rgba(2,6,23,0.75),rgba(2,6,23,0.95))]"></div> <div class="absolute inset-0 opacity-[0.06] mix-blend-overlay [background-image:url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22300%22%20height=%22300%22%3E%3Cfilter%20id=%22n%22%3E%3CfeTurbulence%20type=%22fractalNoise%22%20baseFrequency=%220.8%22%20numOctaves=%224%22%20stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect%20width=%22300%22%20height=%22300%22%20filter=%22url(%23n)%22%20opacity=%220.5%22/%3E%3C/svg%3E')]"></div> </div> <header class="fixed left-0 right-0 top-0 z-50"> <div class="mx-auto max-w-6xl px-4 py-4 sm:px-6"> <div class="flex items-center justify-between rounded-2xl border border-white/10 bg-slate-950/40 px-4 py-3 backdrop-blur-md shadow-[0_20px_80px_rgba(0,0,0,0.35)] sm:px-6"> <a href="/" class="text-sm font-semibold tracking-tight text-white/90 hover:text-white">IF.Trace</a> <div class="flex items-center gap-3 sm:gap-4"> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4" aria-label="Primary"> <a class="hover:text-white" href="/verticals/">Sector</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/pricing/">Pricing</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/api/">API</a> </nav> <a class="inline-flex h-7 items-center justify-center rounded-md border border-white/10 bg-white/5 px-2 text-[11px] font-semibold text-white/70 hover:bg-white/10 hover:text-white" href="/fr/" aria-label="Passer en français">FR</a> </div> </div> </div> </header> <main class="pt-28 sm:pt-32"> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <a data-slot="badge" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&#38;>svg]:pointer-events-none [&#38;>svg]:size-3 bg-secondary text-secondary-foreground [a&#38;]:hover:bg-secondary/90 border-transparent" href="/">Public receipt surface (no login)<svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="m12 19-7-7 7-7" />
<path d="M19 12H5" />
</svg></a> <div class="text-foreground w-full space-y-4 [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-4xl text-lg [&#38;_h1]:text-4xl @5xl:[&#38;_h1]:text-5xl [&#38;_h2]:text-4xl [&#38;_h3]:text-3xl [&#38;_h4]:text-2xl [&#38;_h5]:text-xl [&#38;_h6]:text-lg text-center text-balance"> <p>Public receipt surface (no login)</p> <h1>Stable URLs, predictable verification.</h1> <p>
IF.Trace is intentionally boring from a developer perspective: compute
hashes, publish receipts, and keep the proof surface stable. The system is
designed for third parties who are not inside your network.
</p> </div> <div class="relative z-10 flex flex-wrap gap-2 justify-center"><a data-slot="button" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&#38;_svg]:pointer-events-none [&#38;_svg]:shrink-0 [&#38;_svg:not([class*='size-'])]:size-4 bg-primary text-primary-foreground hover:bg-primary/90 h-10 rounded-md px-6 has-[>svg]:px-4" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank"><svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z" />
<path d="M20 2v4" />
<path d="M22 4h-4" />
<circle cx="4" cy="20" r="2" />
</svg>See a live receipt</a><a data-slot="button" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&#38;_svg]:pointer-events-none [&#38;_svg]:shrink-0 [&#38;_svg:not([class*='size-'])]:size-4 bg-secondary text-secondary-foreground hover:bg-secondary/80 h-10 rounded-md px-6 has-[>svg]:px-4" href="/verticals/"><svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z" />
<path d="M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12" />
<path d="M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17" />
</svg>Browse sectors</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Verification flow diagram (example)" src="/assets/iftrace-diagram.svg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section" aria-label="Verification meaning"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base text-center"> <p>What “VERIFIED” means (black/white)</p> <h2>Integrity, not interpretation.</h2> </div> </div> <div class="grid w-full gap-6 grid-cols-1 sm:grid-cols-[repeat(auto-fit,minmax(260px,1fr))] @3xl:grid-cols-3"> <div data-slot="tile" data-variant="floating" class="group/tile focus-visible:border-ring focus-visible:ring-ring/50 [a]:hover:ring-accent/50 relative flex flex-col items-start gap-6 outline-none focus-visible:ring-[3px] [a]:transition-all bg-card text-card-foreground [a]:hover:bg-accent/50 overflow-hidden rounded-sm border p-6 shadow-sm duration-100"> <div class="relative z-10 flex flex-col gap-3"> <h3 class="font-semibold text-xl">Verified</h3> <p class="text-muted-foreground text-sm">
The bytes you can download hash to the same values shown on the trace receipt.
</p> </div> </div> <div data-slot="tile" data-variant="floating" class="group/tile focus-visible:border-ring focus-visible:ring-ring/50 [a]:hover:ring-accent/50 relative flex flex-col items-start gap-6 outline-none focus-visible:ring-[3px] [a]:transition-all bg-card text-card-foreground [a]:hover:bg-accent/50 overflow-hidden rounded-sm border p-6 shadow-sm duration-100"> <div class="relative z-10 flex flex-col gap-3"> <h3 class="font-semibold text-xl">Quantum ready</h3> <p class="text-muted-foreground text-sm">
A postquantum signature receipt can be added (integrity hashes still stand).
</p> </div> </div> <div data-slot="tile" data-variant="floating" class="group/tile focus-visible:border-ring focus-visible:ring-ring/50 [a]:hover:ring-accent/50 relative flex flex-col items-start gap-6 outline-none focus-visible:ring-[3px] [a]:transition-all bg-card text-card-foreground [a]:hover:bg-accent/50 overflow-hidden rounded-sm border p-6 shadow-sm duration-100"> <div class="relative z-10 flex flex-col gap-3"> <h3 class="font-semibold text-xl">Not implied</h3> <p class="text-muted-foreground text-sm">Compliance, intent, or correctness of interpretation.</p> </div> </div> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background border shadow-md w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width) my-(--section-py) overflow-hidden rounded-xl" data-slot="section" data-variant="floating" aria-label="Share surface reference"> <div class="relative z-10 flex flex-col gap-8 @5xl:grid @5xl:grid-cols-2 @5xl:items-start"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>Share surface</p> <h2>Copy/pasteable proof links.</h2> <p>These URLs are stable by design so review packs remain checkable later.</p> </div> <div class="rounded-xl border bg-card p-6 text-card-foreground"> <div class="text-sm font-semibold">Paths</div> <pre class="mt-3 overflow-auto rounded-lg bg-muted p-4 text-xs leading-relaxed text-foreground">https://infrafabric.io/static/trace/&lt;shareId&gt;
https://infrafabric.io/static/dossier/&lt;shareId&gt;
https://infrafabric.io/static/dossier/&lt;shareId&gt;/download
https://infrafabric.io/static/pack/&lt;shareId&gt;.md
https://infrafabric.io/static/review/&lt;shareId&gt;.md
https://infrafabric.io/static/marketing/&lt;shareId&gt;.md
https://infrafabric.io/static/source/&lt;source_sha256&gt;.pdf
</pre> </div> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section" aria-label="HTML fallback"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base text-center"> <p>HTML fallback</p> <h2>For sandboxed reviewers.</h2> <p>
Some external review environments can load HTML but reject downloadable binaries or raw markdown. For those, we publish HTML views alongside the raw assets.
</p> </div> </div> <div class="grid w-full gap-6 grid-cols-1 sm:grid-cols-[repeat(auto-fit,minmax(260px,1fr))] @3xl:grid-cols-2"> <div data-slot="tile" data-variant="floating" class="group/tile focus-visible:border-ring focus-visible:ring-ring/50 [a]:hover:ring-accent/50 relative flex flex-col items-start gap-6 outline-none focus-visible:ring-[3px] [a]:transition-all bg-card text-card-foreground [a]:hover:bg-accent/50 overflow-hidden rounded-sm border p-6 shadow-sm duration-100"> <div class="relative z-10 flex flex-col gap-3"> <h3 class="font-semibold text-xl">Raw</h3> <pre class="mt-3 overflow-auto rounded-lg bg-muted p-4 text-xs leading-relaxed text-foreground">/static/pack/&lt;shareId&gt;.md
/static/review/&lt;shareId&gt;.md
/static/marketing/&lt;shareId&gt;.md
</pre> </div> </div> <div data-slot="tile" data-variant="floating" class="group/tile focus-visible:border-ring focus-visible:ring-ring/50 [a]:hover:ring-accent/50 relative flex flex-col items-start gap-6 outline-none focus-visible:ring-[3px] [a]:transition-all bg-card text-card-foreground [a]:hover:bg-accent/50 overflow-hidden rounded-sm border p-6 shadow-sm duration-100"> <div class="relative z-10 flex flex-col gap-3"> <h3 class="font-semibold text-xl">HTML view</h3> <pre class="mt-3 overflow-auto rounded-lg bg-muted p-4 text-xs leading-relaxed text-foreground">/static/pack/&lt;shareId&gt;
/static/review/&lt;shareId&gt;
/static/marketing/&lt;shareId&gt;
</pre> </div> </div> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background border shadow-md w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width) my-(--section-py) overflow-hidden rounded-xl" data-slot="section" data-variant="floating" aria-label="Offline verification"> <div class="relative z-10 flex flex-col gap-10 @5xl:grid @5xl:grid-cols-2 @5xl:items-start"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>Offline verification</p> <h2>Triage bundles</h2> <p>Download a bundle (light/standard/full) and verify without relying on the live site.</p> </div> <div class="space-y-4"> <div class="rounded-xl border bg-card p-6 text-card-foreground"> <div class="text-sm font-semibold">Bundle selector (demo)</div> <div class="mt-3 space-y-2 text-sm"> <a class="block text-primary hover:underline" href="https://infrafabric.io/static/hosted/review/trace-bundles/d70ed99a/index.html" target="_blank" rel="noreferrer">
https://infrafabric.io/static/hosted/review/trace-bundles/d70ed99a/index.html
</a> <a class="block text-primary hover:underline" href="https://infrafabric.io/static/hosted/iftrace.html" target="_blank" rel="noreferrer">
https://infrafabric.io/static/hosted/iftrace.html
</a> <a class="block text-primary hover:underline" href="https://infrafabric.io/static/hosted/iftrace.py" target="_blank" rel="noreferrer">
https://infrafabric.io/static/hosted/iftrace.py
</a> </div> <p class="mt-3 text-xs text-white/60">
Note: some “web fetchers” reject <code class="rounded bg-white/5 px-1.5 py-0.5">.tar.gz</code> even when browsers/curl succeed. Use HTML views and download bundles locally.
</p> </div> <div class="rounded-xl border bg-card p-6 text-card-foreground"> <div class="text-sm font-semibold">Verify (CLI)</div> <pre class="mt-3 overflow-auto rounded-lg bg-muted p-4 text-xs leading-relaxed text-foreground">curl -fsSL -o iftrace.py 'https://infrafabric.io/static/hosted/iftrace.py'
python3 iftrace.py verify trace_bundle_&lt;id&gt;_standard.tar.gz --expected-sha256 &lt;sha256&gt;
</pre> <p class="mt-3 text-xs text-white/60">If hashes match, the receipts integrity claim is satisfied.</p> </div> </div> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section" aria-label="Docs"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base text-center"> <p>Docs</p> <h2>Review packs</h2> <p>Use the paper update as a reviewer-friendly packet.</p> </div> <div class="mt-6 flex flex-wrap justify-center gap-3"> <a data-slot="button" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&#38;_svg]:pointer-events-none [&#38;_svg]:shrink-0 [&#38;_svg:not([class*='size-'])]:size-4 bg-primary text-primary-foreground hover:bg-primary/90 h-9 px-4 py-2 has-[>svg]:px-3" href="https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html" target="_blank" rel="noreferrer"> <svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z" />
<path d="M14 2v4a2 2 0 0 0 2 2h4" />
<path d="M10 9H8" />
<path d="M16 13H8" />
<path d="M16 17H8" />
</svg>
IF.Trace paper update (review pack)
</a> </div> </div> </section> </main> <a href="mailto:ds@infrafabric.io?subject=IF.Trace%20contact" class="fixed bottom-6 right-6 inline-flex h-10 items-center justify-center rounded-full border border-white/10 bg-slate-950/50 px-4 text-xs font-medium text-white/80 backdrop-blur hover:bg-slate-950/70 hover:text-white">contact</a> </body></html>