Stage 3 adds duplicate reports, delays, denials, contradictions, and incorrect locations. Reconciliation converts reports into the current set of incident beliefs.

The design
Reconciliation is deterministic code. It is not a model call.
flowchart LR
T["human text"] --> I["LLM intake"] --> R["reports: evidence"] --> C["code reconciliation"] --> B["incidents: beliefs"]
The intake model records what a caller said. Reconciliation uses fixed spatial, time, and incident-type rules. The same input and state must always give the same result.
The supplied policy uses these main cases:
| Report | Nearby open incident | Result |
|---|---|---|
| denial or non-fire | no | ignore the report |
| denial or non-fire | yes | link the report; keep the incident open |
| fire or unknown | no | open an incident |
| fire or unknown | yes | link and merge the report |
Truck vision is more reliable than a human report:
- A normal building closes the matching incident.
- A burning building confirms or opens an incident.
What is provided
The instructor provides the complete reconciliation policy and implementation. Use the Stage 3 reference solution or the files supplied in class.
The solution includes:
- report matching by distance and time;
- incident confidence and contradiction fields;
- merge rules;
- truck-vision rules; and
- the
REC-*scenarios.
What Claude implements
Claude does not design a new solution. Claude integrates the supplied solution into your repository.
Claude changes only these parts:
- Claude applies the supplied changes to
reconcile.py. - Claude adds the supplied incident fields.
- Claude connects reconciliation in
runner._process_tick. - Claude resolves merge conflicts with your Stage 1 and Stage 2 code.
- Claude runs all
REC-*scenarios.
What you decide and check
You do not choose a new reconciliation policy in this stage. You must understand the supplied policy.
Ask Claude to trace:
- two reports that refer to the same fire;
- a denial near an open incident; and
- truck vision that contradicts a report.
For each case, identify:
- the matching rule;
- the outcome;
- the store method that records the change; and
- the evidence that remains in the report store.
What you do not build
Do not add:
- an LLM call for matching;
- embeddings or a vector database;
- a new store;
- new matching rules; or
- Stage 4 dispatch changes.
Prompt Claude
Paste this prompt into Claude Code. Give Claude access to the supplied solution files.
Integrate the supplied Stage 3 reconciliation solution.
Read
reconcile.py, both stores,runner._process_tick,features/reconcile.feature, and the supplied solution. Do not design a different reconciliation system.Before you edit, trace these cases through the supplied design:
- Two reports refer to the same fire.
- A denial is near an open incident.
- Truck vision contradicts a report.
For each case, name the matching rule, outcome, and store mutation.
Then integrate only the supplied changes:
- Apply report-to-incident matching in
reconcile.py.- Add the supplied confidence and contradiction fields.
- Apply the supplied truck-vision rules.
- Connect reconciliation in
runner._process_tick.- Resolve conflicts with my Stage 1 and Stage 2 code without changing their behaviour.
Keep reports as append-only evidence. Keep incidents as mutable beliefs. Do not add a model call, embeddings, a vector store, or another persistence layer.
Run
uv run behave features/reconcile.feature. For one scenario, show the sequence of outcomes and store mutations.At the end, explain which intake errors reconciliation can correct and which errors it cannot correct.
Check the result
Run:
uv run behave features/reconcile.feature
uv run hadr-runner stage3-partial@londone
Inspect the outcomes from one episode.
- Many
OPENoutcomes can mean that matching failed. - One incident with many unrelated reports can mean that matching is too broad.
Use the reconciliation review prompt to check for hidden model calls or policy in the wrong layer.
Completion criteria
- The supplied solution is integrated.
- All
REC-*scenarios pass. - Reports remain separate from incident beliefs.
- You can explain why reconciliation is deterministic code.