Your engineering dashboard is lying to you.

Engineers often unblock a teammate or catch a bug in review, but the person who gets credit later is whoever closed the ticket. Witness finds that hidden work and gives credit where it’s due, confirming every finding against a second, independent source before it counts.

Live exampleauto-playing
S

Maria — “looked into this, see ENG-412, should be a one-line fix”

#eng-help · 10:00am

L

ENG-412 — assigned to Chen

closed 2h14m later

Confirmed — Maria unblocked Chen

+1 credited
The proof

Scope it to one connector and watch it happen.

This reproduces the real rule against the real seeded run: Maria referenced ENG-412 in Slack; ENG-412 is assigned to Chen; it closed 2h14m later. Turn Linear off.

This is the real thing — same finding, same data. Turn a source off and watch it react.

MO

Maria Okonkwo

this run

Confirmed

Unblocked Chen on ENG-412 — her Slack message landed two hours before the ticket closed.

SSlack messageLLinear ticket
Can check for unblocks Can check for reviews
How it works

Harvest broadly. Query narrowly.

01

Harvest every source

HydraDB resolves identities and pulls Slack, GitHub, and Linear into one normalized ledger — regardless of what a later run restricts.

02

Confirm inside Postgres

confirm_attributions() joins the ledger against itself: who a ticket is really assigned to, and when it closed after the message that referenced it.

03

Report the blind spot too

Restrict the sources and the join loses rows to join against — not a branch that decided to hide them. The response says exactly what it can no longer see.

Not a guess. A rule.

Every finding has to clear the same three conditions. If a source is turned off, one of them simply can’t be checked anymore.

  1. 1The message names a specific ticket.
  2. 2That ticket is assigned to someone else.
  3. 3It closed within the time window after the message.

All three, every time, no exceptions built in for the demo.

Built on InsForge

The database is the detector.

Not a results table at the end of the pipeline — the part of the system that carries the argument.

Attribution engine

Postgres fn

confirm_attributions() runs the whole temporal join inside InsForge — the core of the demo, executing where you can read it.

Source-scoped views

structural

Every read goes through visible_source_event / visible_ticket_state, gated on the run's enabled_sources. Disable Linear and the join has nothing left.

Classification cache

content-hash

Keyed on message content, not message id. A live re-run after a source toggle re-costs nothing — the LLM never runs twice on the same text.

Row Level Security

auth.uid()

An engineer sees their own findings, a manager sees direct reports, nobody sees the org. Enforced by policy, not by the UI's good behavior.

Storage snapshots

run-snapshots

Every run's raw pull can replay from a bucket — deterministic offline demo if the venue wifi or a rate limit gets in the way.

Realtime stage stream

realtime.publish

run_stage_event rows publish to a per-run channel as the pipeline executes — resolve, harvest, classify, attribute, rank, report, live.

Access control

Who sees what is a policy, not a promise.

A tool that produces performance-review-adjacent claims about named people is one prompt away from a surveillance product. The answer isn’t a promise about our UI — it’s Row Level Security, enforced at the database, that a manager cannot query around.

ViewerSeesEnforced by
EngineerTheir own findingsauth.uid()
ManagerDirect reports onlyreports_to()
Anyone elseNothingno policy grants it
Ranking

Findings, not scores.

  • — A new hire with two Slack messages and zero PRs can’t top the list.
  • — divergence is a sort key computed for ranking, not a field in the response.
  • — The pitch says “not a score.” The schema makes that true.

divergence = invisible / (visible + invisible)

WHEREconfirmed_count >= 2

— never rendered in the API response —

The stack

Division of labor.

Four sponsors, each carrying a piece no other one could.

HydraDB

Cross-source identity resolution

Unifies a Slack handle, a GitHub login, and a Linear assignee into one person. Confirmation is impossible without knowing they're the same human — nothing else in the stack can produce this.

InsForge

The detector itself

The attribution engine, the degradation guarantee, the classification cache, access control, and run snapshots all live here — not a results table, the thing that decides what counts as proof.

RocketRide Cloud

Orchestration and fan-out

The public endpoint, bounded-concurrency classification calls, per-message retry on malformed JSON, and stage checkpointing so a crashed run resumes instead of restarting.

Pipeshift

Message classification

Turns "this message mentions ENG-412" into "this message unblocked someone on ENG-412." Rule (a) confirms the link; Pipeshift characterizes the help.

Roadmap

What’s scaffolded, not wired.

Honest about the gap: schema and functions exist for these; the pipeline code that populates them doesn’t, yet.

Embed harvested messages + tickets (pgvector)Next
Live stage stream on this pageNext
Nightly scheduled runNext
Gmail attribution logicNext
Real reporting-structure RLS demoNext
Rule (b): PR/file attributionNext
FAQ

Questions, answered.

Isn't this just a database join?+

Yes — that's the point. "This message referenced a ticket, it's assigned to someone else, and it closed inside the window" is a temporal join. Running it as a Postgres function inside InsForge, instead of application code, is what lets us prove the degradation instead of asking you to trust it.

How do we know the source toggle above isn't faked?+

Every read in the attribution path goes through a function gated on the run's enabled_sources — visible_ticket_state, visible_source_event. Disable Linear and the underlying rows are structurally absent from the query, not skipped by an if-statement. The function body is nine lines of SQL; we'll put it on screen.

Doesn't this enable manager surveillance?+

Access is enforced by Row Level Security, not a UI promise. An engineer sees their own findings; a manager sees direct reports; nobody sees the org-wide view. There is no query path that returns it — that's a database guarantee, not a feature flag someone could flip.

Why doesn't the divergence score ever show up anywhere?+

We promise cited findings, not a score — a person is not rankable below two confirmed attributions, so a new hire with two Slack messages can't top a list. The number exists as an internal sort key. It never reaches the response, because a visible score is exactly the kind of dashboard number this project is arguing against.

What happens if a workspace only has one connector?+

The response includes a degraded block naming exactly which confirmation rules can't run and why, instead of silently returning fewer results. A tool that reports its own blind spot, not one that hides it.

Does Gmail actually do anything yet?+

Not yet. It stays in the source toggle so the degradation demo has a fourth lever, but no attribution logic reads from it. We'd rather say that plainly than pretend otherwise.

What makes the live re-run fast enough to demo?+

Classification is cached by message content hash, not by run. Toggling sources and re-running only recomputes the attribution join — milliseconds, not a fresh LLM pass over every message in the window.

The claim

“It becomes a confident, wrong performance review.”

That sentence used to be something you had to take on faith. Scroll up — it isn’t anymore.