The registry said the dam was 28 feet high.
The legacy drawing said 31.
Three feet is not the interesting part of that story. The interesting part is what software does when two plausible sources disagree.
An early version of Downstream displayed both values and then kept going. I told myself that was transparent because the conflict was visible on screen. But the agent never asked anyone about it. It behaved as if showing uncertainty was the same as helping resolve it.
That realization changed the whole project.
This is not a form-filling problem
Downstream helps assemble a reviewable draft Emergency Action Plan for a synthetic dam.
The facts needed for that work do not live in one place. A public record may have basic inventory fields. A legacy drawing may contain different measurements. An owner knows which access road washes out and who can answer after hours. Emergency managers, engineers, and state reviewers bring knowledge and authority that the software does not have.
I wanted the agent to help those pieces meet over several short sessions. I did not want it to manufacture an engineering answer just because the interface had an empty section.
You can try the guided Downstream workspace, inspect its evidence dashboard, or read the source on GitHub.
Research removed the original headline
The first concept had a strong statistic: count dams with a blank public Emergency Action Plan field and call them dams without a plan.
It was catchy. It was also unsupported.
The USACE National Inventory of Dams exposes useful public inventory fields, but a blank selected field does not prove that a plan does not exist. It proves only that the value is unreported in that field.
So I removed the bigger claim.
I also had to be careful with hazard classifications. High hazard describes the potential consequences if a failure occurs. It does not say that a dam is in poor condition or likely to fail.
Those corrections did more than clean up the landing page. They gave the product a governing rule: preserve what a source actually says, including its silence, without upgrading it into a more dramatic conclusion.
The disagreement became a question
The 28-foot and 31-foot values now remain side by side with their source fragments. Instead of silently selecting one, Downstream opens a focused question for the owner.
An owner can add context or identify the controlling record. The agent then marks that context as recorded. It does not mark the measurement as resolved, because confirmation may still belong to a qualified engineer or an authoritative record.
That wording took more thought than the feature itself.
"Resolved" would make the workflow look satisfyingly complete. "Owner context recorded" is less impressive and more accurate.
This is what collaboration means in the project. The agent should move uncertainty toward the right person, not rename uncertainty as confidence.
A later session has to be genuinely later
The workspace asks one question at a time and explains why it matters. A user can ask for simpler language, answer, correct an earlier answer, or hold a question for later.
At one point, "hold for later" was mostly theatre. The interface accepted held questions, but they did not reliably return in the next session. A user could also hit an error when trying to hold the dynamically created source-conflict question.
That was a useful failure. It exposed the difference between a conversational interface and a collaborative system.
Now a held question reopens in a later saved session. Corrections create a new version instead of overwriting the old answer. The affected plan section is rebuilt, while the earlier statement and the reason for the correction remain visible.
Refreshing the shareable workspace URL restores the same state. The collaboration belongs to the workspace, not to one lucky browser tab.
The most important map is the one it refuses to draw
An inundation map would make the demo visually stronger. It would also make a claim the available evidence cannot support.
FEMA P-64 informed the purpose and expected contents of an Emergency Action Plan. The ASDSO planning guidance reinforces the collaborative roles of owners and emergency managers. The Simplified Inundation Maps methodology describes circumstances in which simplified approaches may be useful while retaining engineering and regulatory responsibilities.
The synthetic case does not prove that a particular mapping method is applicable. It has no approved reference map and no jurisdictional acceptance.
So Downstream shows a documented flow-path input, explains what is missing, and stops. It does not generate an inundation boundary, depth, velocity, arrival time, or evacuation zone.
The blank space is intentional. It tells the next reviewer what evidence or expertise must enter the process before the section can continue.
How it is put together
The application runs on Cloud Run. It combines a public USACE record with a synthetic legacy drawing read by Gemini. Facts keep their provenance and source text. A conflict policy decides when the agent must ask instead of infer.
Firestore preserves sessions, held questions, owner answers, revisions, preferences, and draft sections. Gemma performs a second privacy review of synthetic owner notes after deterministic redaction. A bounded context builder keeps long-running workspaces from turning into an ever-growing prompt.
Each rendered plan section carries an evidence class such as published requirement, owner answer, unresolved gap, or fail-closed mapping policy. The human-readable evidence ledger makes those distinctions visible outside the code.
The complete mapping from public sources to product decisions is in the repository's research ledger.
What I learned
I started with a document I wanted the agent to complete.
I ended with a workspace designed to preserve the reasons it cannot complete some parts yet.
The strongest behavior is not eloquent conversation. It is continuity with restraint: ask for the missing fact, explain why it matters, remember the answer, preserve the correction, and stop when the next step belongs to someone with evidence or authority the system does not have.
The registry still says 28 feet. The drawing still says 31. Downstream does not hide that disagreement. It helps the people responsible decide what should happen next.
I created this piece of content for the purposes of entering the All Things Agentic Hackathon.
When two credible sources disagree, what would you want an agent to do before moving on?

Top comments (0)