Inspiration

Western Cape road information is scattered across government pages, dated images, PDFs, transit notices and interactive maps. The hard part is not drawing a map. It is repeatedly checking each source, retaining defensible evidence and normalizing changes without turning an automated guess into public advice.

What it does

Is The Road Open? already provides a reviewed map and list of 95 source-backed reports. Its Taskmaster workflow monitors six configured source families, compares approved and observed hashes, retains changed evidence, and passes a bounded snapshot to a Google ADK agent using Gemini 3.5 Flash.

The agent drafts a structured candidate only. Deterministic gates verify source identity, evidence path and SHA-256, dates, verbatim excerpts, supported status and prohibited safety language. A successful candidate is written to an unpublished review queue. The Agent Activity screen exposes every step, evidence hashes, queue result, model/runtime and proof that the reviewed public dataset did not change.

Gemini output is always untrusted. The agent has no publication tool and never declares a road safe. A human must render the cited source, accept, edit or reject the candidate, and use the separate evidence-hash publisher before anything can appear publicly.

How we built it

  • React 19, TypeScript, Vite and Leaflet for the public map and visible agent activity.
  • The existing Node.js source monitor for six configured source families, normalized comparisons, linked-image evidence and atomic queue writes.
  • Python 3.11, FastAPI and Google ADK 2.6.3 with Gemini 3.5 Flash for structured candidate extraction.
  • Pydantic plus deterministic path, source-identity, SHA-256, ISO-date, quote, status-support and safety-language gates.
  • A multi-stage container on Google Cloud Run in africa-south1.
  • Vertex AI with Cloud Run service identity; no API-key secret is mounted in the public runtime.
  • Deterministic mock/no-key mode and bounded synthetic evidence for repeatable tests.

Challenges

The central design challenge was preserving useful autonomy without giving the model authority it should not have. We made the model a narrow, untrusted transformer; kept evidence gathering in the existing monitor; enforced deterministic gates outside the model; and omitted any publication function from the agent runtime.

Cloud Run filesystems are ephemeral. The public proof therefore keeps browser-triggered evidence explicitly synthetic and bounded. Durable multi-instance operation would swap the queue/evidence storage adapter for Firestore or Cloud Storage without changing the human publication boundary.

Accomplishments

  • Preserved 95 reviewed, cited reports.
  • Implemented a visible seven-step agent workflow ending in a real unpublished queue mutation.
  • Hashed the reviewed public dataset before and after every run.
  • Preserved six-source monitoring, retained evidence and reviewed-only publishing.
  • Passed 31 web tests, 11 agent tests, lint, production build, data validation and container checks.
  • Ran a public Cloud Run proof using Google ADK, Gemini 3.5 Flash and Vertex AI: one untrusted candidate, zero publication, reviewed dataset unchanged.

What we learned

For public-information agents, the most valuable autonomy is not removing the human from the final decision. It is removing repetitive evidence work while making the human decision faster and better supported.

What's next

A durable queue/evidence adapter is the next production step. Human review, cited official-source provenance and the prohibition on road-safety claims remain permanent product boundaries.

Source scope

Western Cape Government Infrastructure notices, MyCiTi planned disruptions, i-TRAFFIC Western Cape, SANRAL and City of Cape Town source families. The registry is discovery scope, not a claim that every source currently contributes a public road record.

Built With

Share this project:

Updates

Submission history