Changelog
Notable changes to the Disclarion SDK, dashboard, and API.
v0.8
2026-10Disclosure render/acknowledge confirmation
- track() now returns ack_token in disclarion_meta whenever a disclosure is owed, a short-lived, single-use token for confirming it was actually shown
- The reference widget reports rendered/acknowledged events back automatically, fire-and-forget, never blocking your chat UI on failure
- New dc.record_disclosure_event() for backends that confirm the event server-side instead of from the browser
- The dashboard's Logs table and Compliance Report now show the confirmed status (acknowledged, rendered, not confirmed, predates confirmation, or not required) as its own column, separate from the self-reported disclosure_shown field
- disclosure_shown in the REST API and n8n node is unchanged but now explicitly labeled self-reported, not verified, everywhere it's shown
v0.5
2026-09Badges link to a public verification page, not just the homepage
- track_content()'s "Labeled by Disclarion" credit now links to https://www.disclarion.com/verify/{id} — a public page confirming that exact record is real (timestamp, provider, content type, disclosure status), never the content itself or which account it belongs to
- The record's id is generated client-side before the log request is sent, so the badge returned synchronously already has the correct link, including when the write falls back to the background retry queue
- New GET /public/verify/{token} backend endpoint, public and rate-limited, returning only non-identifying metadata
v0.4
2026-09Standard content labels: real watermarks and positioned badges
- dc.track_content() now accepts image=<raw bytes> and returns watermarked_image: a fixed, non-customizable "AI-generated"/"AI-assisted" badge baked into the image's own pixels (PNG/JPEG/WebP) rather than only logged as metadata
- Every track_content() call also returns badge_html, a fixed HTML/CSS snippet for text and article content with a real, clickable "Labeled by Disclarion" link — drop it in a position: relative container and it's placed
- A very small image (shorter side under ~320px) skips the watermark rather than shrinking it into unreadability, and reports watermark_skipped instead
- content_labeled, already shown in the dashboard's Logs table, now reflects whether a label was actually applied to that specific piece of content, instead of always reading true
- Dashboard: a new coverage-gap view on the compliance report shows which jurisdiction/interaction-type combinations are being logged with no matching obligation rule, and which configured rules have never fired
v0.3.2
2026-09track_content() for non-chat content
- New dc.track_content(provider, model_name, session_id, ...) for logging AI-generated images, video, audio, or text when you don't have one of track()'s three supported chat response types
- New optional content_type field (free text: "image", "video", "audio", "text", ...) recorded on interaction_logs for future obligation and reporting use
- n8n node: Content Type field added under Additional Fields, matching content_type
v0.3
2026-09Obligation Engine: jurisdiction-aware compliance rules
- dc.track() and the n8n node now take jurisdiction and interaction_type, which decide which obligations (disclosure modal, audit log, content label) apply to a given interaction — defaults match prior behavior exactly, so nothing changes for existing callers
- New interaction_type="generated_content": label non-chat AI-generated content (product descriptions, social posts, articles) with a content_label_required signal, independent of the chatbot disclosure UX
- An inactive or lapsed subscription now raises SubscriptionInactiveError immediately instead of silently failing open — closes a gap where logs could go missing with no visible symptom
- n8n node: Jurisdiction and Interaction Type fields added under Additional Fields, mirroring the SDK
v0.2
2026-09Disclosure UX: modal-once + persistent badge
- SDK default changed from inline disclosure text to a modal_once mode: dc.track() no longer rewrites the assistant's reply, it reports is_first_message instead
- New reference widget (React and vanilla JS) for a one-time disclosure modal plus a small persistent badge
- disclosure_mode is now configurable per client: modal_once (default), inline_every_message (legacy), or off
- Dashboard: per-project disclosure mode setting with a matching SDK code snippet
v0.1
2026-09Initial release
- Python SDK with OpenAI, Anthropic, and Gemini support
- Dashboard: projects, API keys, and interaction logs
- Usage-based Stripe billing