ProjectPulseAI · delivery intelligence

Compute first, narrate second.

A project manager asks four questions: what is at risk, why is it happening, what will it impact, and what should I do next. This system answers all four with rules, graph traversal and arithmetic — then hands the finished answer to a language model whose only job is to put it into sentences it is not permitted to change.

The pipeline

Everything up to and including the assembler is deterministic. The model sits at the far end, receives findings it did not produce, and returns prose — never a figure.

SOURCES Jira Excel Docs PostgreSQL normalized + history FOUR PRODUCERS Rules what is at risk Schedule what it delays Temporal why it happened Retrieval seen this before? Assembler all numbers and dates born here findings + {{tokens}} the only generative step LLM writes sentences validated, substituted Insight card click → evidence deterministic — produces every number and date generative
The orange box is the entire generative surface. Figures reach the model as placeholder tokens — {{delay_days}}, not 12 — and the server fills them in after validation. A wrong number is not merely detectable; it has nowhere to enter from.

What each producer answers

They run in parallel and stay separately inspectable, so a PM who distrusts one finding can open the rule that fired, the records it read, and the version of the table it read them against.

Rules
What is at risk? Editable decision tables, with a replayable trace of what fired on which records.
Schedule
What will it impact? Critical-path arithmetic over the task graph — delay days and the milestones they move.
Temporal
Why is it happening? Ordered state changes, matched against named hypotheses, and only where the timestamps permit the claim.
Retrieval
Has this happened before? Similar past cases and cited passages from meeting minutes and status reports.

The rule that makes root-cause honest

Causality is a claim about ordering, and our two sources do not carry the same time information. A Jira changelog timestamps every transition exactly. A hand-maintained spreadsheet only shows what is true now — so a change found by diffing two scans happened somewhere between them. Treating that interval as a point is how a system starts asserting causes it cannot support.

PROVABLEthe ordering holds, the link is kept time → Environment Setup slipped Jira changelog · exact scan N−1 scan N QA backlog grew 4 → 17 Excel diff · bounded interval The exact point falls before the interval can even begin — the ordering is provable, so the chain is kept. NOT PROVABLEthe link is dropped, not hedged Allocation dropped to 40% QA backlog grew windows overlap Both observed in the same scan window — no ordering is provable, so the link never reaches the model.
The test is interval arithmetic: one event precedes another only when its latest possible time falls before the other’s earliest. Anything that fails is discarded before assembly — the model is never shown a link it could narrate into a cause.

What this architecture rules out

Three things the design deliberately refuses, each because it would put a figure or a claim beyond the reach of an audit trail.