Changelog

What we shipped,
when we shipped it.

Reverse-chronological. Hand-edited rather than auto-generated; we want each entry to read like a paragraph in a notebook, not a row in a tracker. Scope tags are honest: feature means something new exists, fix means something used to be wrong, polish means it is now nicer to live with, and infra means the engine room.

feature

Forge Clarity now applies, end to end

The rewrite dialog used to offer Copy and not much else. It now offers Apply: choose a candidate, the server replaces the flagged span in place, every stale finding is dropped, and the analyzer immediately re-reads the cleaned-up text against the four specialists. The loop a careful reader actually wants — flag, propose, accept, re-check — is now one click long.

fix

Findings no longer arrive as partial words

The intelligence layer was occasionally returning findings whose visible text was the middle of a word: “andard” for standard, “n motio” for in motion. Cause: the parser trusted the LLM’s character offsets even when they were obviously wrong. Fix: trust the verbatim text instead, and recover the span by searching the document near the model’s claimed position. Side benefit: clusters that previously looked like duplicates collapse into a single ensemble finding.

polish

Severity bar, per-agent dots, hydrated debate

Three quiet upgrades to the analyzer surface. A severity bar at the top of the findings panel shows the document’s ambiguity profile at a glance — Critical, High, Medium, Low — and clicks through to filter. A row of four token-coloured dots in the toolbar replaces the generic “Reading…” spinner so you can watch each specialist report in. And the Debate tab now hydrates from the persisted transcript on doc load, so coming back to a previously-analysed document doesn’t pretend the panel never met.

feature

Public status, editorial changelog, calmer dead-ends

Three small surfaces, mostly polish. A live status page at /status pings the API every thirty seconds and reports rolling counts of documents and findings, plus a short operations log. The page you are reading now is the second: a handwritten changelog, kept honestly. The third is a rebuilt 404 and a global runtime error boundary, both in the parchment-and-ink palette of the rest of the site. None of it changes how Pellucid sees a document — but it should change how the project feels to read.

feature

Browser extension reaches v0.3

Right-click any selection on any page and choose “Scan with Pellucid.” Results stream into a side panel, source-attributed (rules, lexical, syntactic, domain) the same way they do in the web editor. Quick-fix actions write back through Chrome’s built-in input mutation API, so corrections land in textareas and contenteditable surfaces alike. The Firefox port is gated on Manifest v3 parity.

infra

Postgres + pgvector becomes the default path

The reference deploy now runs Postgres with the pgvector extension; SQLite remains the supported single-process fallback. Embeddings produced by the LiteLLM cache layer write through to a pgvector column, indexed for cosine search, so subsequent runs over similar passages skip the round-trip to the embedding provider entirely. Alembic migrations are the source of truth — no more create_all() on first boot in production.

fix

Failover on rate-limited LiteLLM routes

When an upstream provider rate-limits a single agent in the multi-specialist panel, the LangGraph runner now fails open to the remaining specialists rather than aborting the entire scan. The failed agent surfaces in the audit export with a soft-error marker, so the document-level clarity score still reflects what the rest of the panel saw. Eight minutes of degraded behavior on /api before this landed; that incident is logged on /status.

feature

Compliance templates: DO-178C, IEC 62304

Two new templates join the existing SRS, SOC 2, ISO 27001, Privacy, and MSA set. DO-178C calibrates the risk and ambiguity weights to the airworthiness register — “shall” is graded harder, traceability gaps escalate. IEC 62304 narrows the same machinery for medical-device software, with extra weight on identified hazards and risk-control measures. Both templates are seeds; you can fork either into a custom rule pack from the templates page.

feature

Real-time multi-user collaboration (gated)

Open a document with ?collab=1 and a Yjs document is bound to the Lexical editor. Presence cursors render in soft burnt-orange; selections from other readers shadow your own. Conflict-free merging is handled by the CRDT — the server is just a relay. The flag will come down once we ship per-document permissions and a clean way to invite collaborators by link.

polish

Editorial landing site at /

Replaced the old paste-box landing with a long-form editorial page: warm parchment, deep ink, a single burnt-orange accent, and an interactive ambiguity-reveal exhibit in the hero. The PasteBox itself moved to /app and kept its dark-tinted theme. Set in Fraunces and Geist; the type ramps were tuned by hand rather than rolled off a step scale.

feature

Custom rules + analytics dashboard

Two surfaces shipped together. /rules is a regex-backed editor for user-defined detectors — point at a pattern, set severity, give it a rationale, and the rule joins the rest of the symbolic stage on the next scan. /analytics is the company view: clarity-score trend lines, severity distribution, top finding types, and a per-agent contribution table that shows how often each specialist agrees with at least one peer.

fix

Clarity-badge SVG clipped on iOS 17.5

The shields-style clarity badge attached to public share links was clipping on iOS 17.5 because of a viewBox rounding bug in WebKit. Switched to integer viewBox dimensions and pinned the text baseline; fixed the same day. Existing share links re-render correctly on next request — no migration needed.

feature

Audit export (PDF and CSV)

From any analysis, export a self-contained audit artifact. The PDF carries the full rationale per finding, a severity histogram, the agent-by-agent disagreement table, and any resolution notes captured during review. The CSV is the same data flattened — friendlier to Excel and to downstream traceability tools. PyMuPDF handles layout; the CSV is plain stdlib.

feature

Public share links + clarity badges

Send a read-only link to anyone — no account needed. Each share renders the document, its findings, and a small shields-style SVG badge with the clarity score. Tokens are unguessable and revocable; the share view is a separate route so the editor’s mutating actions never appear in the public surface by accident.

feature

Document comparison at /compare

Side-by-side view of two revisions of the same document, with the clarity-score delta computed at the top and per-finding diffs aligned to the surviving spans. Useful for tracking whether a re-write actually reduced ambiguity, instead of just shifting it around.

feature

Conformal-style calibration in the aggregator

The multi-agent aggregator now passes its raw confidence scores through a Pool-Adjacent-Violators isotonic regression before reporting. The result: a finding tagged 0.82 actually lands, on average, near 0.82 agreement with human reviewers, instead of the model-vendor’s native scale that drifts depending on which specialist fired. This is a quiet upgrade — no UI change — but downstream reliability improves materially.

infra

VS Code extension v0.2 — diagnostics + quick-fix

Findings now appear inline as VS Code diagnostics (squiggle, severity-colored). A code action on each diagnostic offers Pellucid’s suggested rewrite as a quick-fix; accept it and the document round-trips through the editor history like any other refactor. Works in markdown, plain text, and reStructuredText files by default; the language list is configurable.

feature

PDF and DOCX ingestion

Drag a PDF into the editor and PyMuPDF extracts the text layer; drag a DOCX and python-docx walks the document tree. Both paths preserve enough structure (paragraphs, headings, ordered lists) for the per-clause detectors to keep their bearings. Scanned-image PDFs without a text layer are flagged early with a helpful error rather than silently producing empty findings.

We publish changes as they ship. If you would like to follow along without checking back, subscribe to the product feed — it is a quiet email, not a marketing list.