hosted/ifttt/about/index.html

80 lines
No EOL
26 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/about/"><title>IF.Trace — About</title><meta name="description" content="IF.Trace is a receipt-first governance protocol: traceable, transparent, trustworthy. This page explains the who/why/what/where/when/how and the traps that break open verification."><meta property="og:title" content="IF.Trace — About"><meta property="og:description" content="IF.Trace is a receipt-first governance protocol: traceable, transparent, trustworthy. This page explains the who/why/what/where/when/how and the traps that break open verification."><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.BM2f01Os.css">
<style>[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)}}
[data-slot=tile]{--tile-padding: 0px}[data-slot=tile][data-variant=floating]{--tile-padding: 24px}
</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> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4"> <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> </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="/about/">Why this exists<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></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>Why this exists</p> <h1>We built the skeleton first.</h1> <p>
Most systems produce answers and call that “governance”. IF.Trace starts
earlier: it produces receipts that a third party can verify without
joining your internal world.
</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>Try a live trace</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="/api/"><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="m16 18 6-6-6-6" />
<path d="m8 6-6 6 6 6" />
</svg>Developer surface</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="Who / Why / What / Where / When / How"> <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>Who / Why / What / Where / When / How</p> <h2>A receipt-first protocol.</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-2 @5xl: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">Who</h3> <p class="text-muted-foreground text-sm">
InfraFabric operators shipping public, nologin verification artifacts.
</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">Why</h3> <p class="text-muted-foreground text-sm">
Because “trust us” fails the moment a reviewer asks for proof.
</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">What</h3> <p class="text-muted-foreground text-sm">
Bind <code>source_sha256</code><code>output_sha256</code> under a 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">Where</h3> <p class="text-muted-foreground text-sm">
On a stable public share surface (no login): trace, dossier, packs, and source.
</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">When</h3> <p class="text-muted-foreground text-sm">
At publication time: the receipt is generated and can be verified later during disputes.
</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">How</h3> <p class="text-muted-foreground text-sm">
Hashes + receipts + optional offline bundles; nothing magical, just opposable proof.
</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="Traps to avoid"> <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>Traps</p> <h2>How receipts break.</h2> <p>These are common ways “open verification” quietly becomes theater.</p> </div> <div> <ul class="list-none space-y-2 p-0"> <li class="flex shrink-0 items-start gap-3 text-start not-first:mt-2 [&#38;_svg]:shrink-0 [&#38;_svg]:translate-y-[30%] [&#38;_svg:not([class*='size-'])]:size-[1em] text-sm"> <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="M20 6 9 17l-5-5" />
</svg> <strong>Broken share surface:</strong> moving URLs or forcing login turns receipts into theater.
</li> <li class="flex shrink-0 items-start gap-3 text-start not-first:mt-2 [&#38;_svg]:shrink-0 [&#38;_svg]:translate-y-[30%] [&#38;_svg:not([class*='size-'])]:size-[1em] text-sm"> <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="M20 6 9 17l-5-5" />
</svg> <strong>Mixing identifiers:</strong> <code>shareId</code> is public; <code>trace_id</code> is chainofcustody. Dont swap them.
</li> <li class="flex shrink-0 items-start gap-3 text-start not-first:mt-2 [&#38;_svg]:shrink-0 [&#38;_svg]:translate-y-[30%] [&#38;_svg:not([class*='size-'])]:size-[1em] text-sm"> <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="M20 6 9 17l-5-5" />
</svg> <strong>“Compliance” claims:</strong> receipts support audits; they do not guarantee scope or behavior.
</li> <li class="flex shrink-0 items-start gap-3 text-start not-first:mt-2 [&#38;_svg]:shrink-0 [&#38;_svg]:translate-y-[30%] [&#38;_svg:not([class*='size-'])]:size-[1em] text-sm"> <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="M20 6 9 17l-5-5" />
</svg> <strong>Unverifiable artifacts:</strong> screenshots and PDFs are not gates unless bound to machinecheckable signals.
</li> <li class="flex shrink-0 items-start gap-3 text-start not-first:mt-2 [&#38;_svg]:shrink-0 [&#38;_svg]:translate-y-[30%] [&#38;_svg:not([class*='size-'])]:size-[1em] text-sm"> <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="M20 6 9 17l-5-5" />
</svg> <strong>WAF surprises:</strong> some clients can fetch HTML but reject binary downloads—publish HTML views.
</li> </ul> </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="What a receipt proves"> <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>Scope</p> <h2>What a receipt proves (and what it doesnt).</h2> </div> </div> <div class="grid w-full gap-6 grid-cols-1 sm:grid-cols-[repeat(auto-fit,minmax(260px,1fr))] @5xl: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">Proves</h3> <ul class="mt-3 list-none space-y-2 p-0"> <li class="flex shrink-0 items-start gap-3 text-start not-first:mt-2 [&#38;_svg]:shrink-0 [&#38;_svg]:translate-y-[30%] [&#38;_svg:not([class*='size-'])]:size-[1em] text-sm"> <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="M20 6 9 17l-5-5" />
</svg> Integrity binding: published bytes match receipt hashes.
</li> <li class="flex shrink-0 items-start gap-3 text-start not-first:mt-2 [&#38;_svg]:shrink-0 [&#38;_svg]:translate-y-[30%] [&#38;_svg:not([class*='size-'])]:size-[1em] text-sm"> <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="M20 6 9 17l-5-5" />
</svg> Traceability: reviewers can point to stable, nologin receipts.
</li> <li class="flex shrink-0 items-start gap-3 text-start not-first:mt-2 [&#38;_svg]:shrink-0 [&#38;_svg]:translate-y-[30%] [&#38;_svg:not([class*='size-'])]:size-[1em] text-sm"> <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="M20 6 9 17l-5-5" />
</svg> Replay: verification works during disputes (offline bundles when needed).
</li> </ul> </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">Does not prove</h3> <ul class="mt-3 list-none space-y-2 p-0"> <li class="flex shrink-0 items-start gap-3 text-start not-first:mt-2 [&#38;_svg]:shrink-0 [&#38;_svg]:translate-y-[30%] [&#38;_svg:not([class*='size-'])]:size-[1em] text-sm"> <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="M20 6 9 17l-5-5" />
</svg> Intent, interpretation, or narrative “correctness”.
</li> <li class="flex shrink-0 items-start gap-3 text-start not-first:mt-2 [&#38;_svg]:shrink-0 [&#38;_svg]:translate-y-[30%] [&#38;_svg:not([class*='size-'])]:size-[1em] text-sm"> <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="M20 6 9 17l-5-5" />
</svg> That a control is effective—only that evidence exists and is bound to the record.
</li> <li class="flex shrink-0 items-start gap-3 text-start not-first:mt-2 [&#38;_svg]:shrink-0 [&#38;_svg]:translate-y-[30%] [&#38;_svg:not([class*='size-'])]:size-[1em] text-sm"> <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="M20 6 9 17l-5-5" />
</svg> Compliance scope (people, policy, contracts); receipts are inputs to governance.
</li> </ul> </div> </div> </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 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="/whitepaper/"> <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>
Read the paper
</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 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-secondary text-secondary-foreground hover:bg-secondary/80 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="M7 7h10v10" />
<path d="M7 17 17 7" />
</svg>
Verify the examples
</a> </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>