Skip to content

Data scientist in public transport, Wuppertal. Bachelor’s in sociology, currently studying for a master’s in Applied Artificial Intelligence at IU.

RailCast

Since March 2026, RailCast has polled Deutsche Bahn’s delay reports every minute and recorded what information passengers had at which moment.

At least 6 minutes already shown share of departures that ended up at least 6 minutes late, in percent 0 25 50 75 100 4 h 2 h 1 h 30 min 15 min 5 min before departure 5% 14% 42% 54% 63% 28% one hour before: just over one in four Source: RailCast, own analysis · as of 5 Oct 2026
Share of departures for which the display already showed a delay of at least 6 minutes at the given lead time, out of all departures that ended up at least 6 minutes late. Display: what Deutsche Bahn’s IRIS interface reported for the departure at that moment, as polled by RailCast about once a minute; without a report, the scheduled time counts. Ended up late: according to Deutsche Bahn’s last reported status, an estimate, not a measured departure. Cancelled departures are not counted. 160,739 departures at 88 measuring points, a fixed selection of stations, scheduled departure 8 September to 1 October 2026 (German local time), fixed evaluation of 5 October 2026. railcast.de recomputes the values every night with new data, so its figures differ.

Of 160,739 departures that ended up at least 6 minutes late, the display showed a delay of that size one hour before departure for only 28% of them, just over one in four. Five minutes before, it was 63%. Conversely, when the display showed at least 6 minutes one hour before, the departure ended up at least 6 minutes late in nine out of ten cases (92%). “Display” here means what Deutsche Bahn’s IRIS interface reported at that moment. Period 8 September to 1 October 2026, as of 5 October 2026.

4,941,733 train stops recorded since March 2026, as of 30 September 2026.

Kombinat

In the Kombinat, AI agents under my direction search for records in mathematical problems whose solutions can be checked exactly; a find only counts once an independently written checking program confirms it.

Cell (15,3) of the degree-diameter tableat most 15 connections per vertex, every vertex reaches every other in at most 3 steps
EnteredByVertices
1985C. Delorme1,215
13 Aug 2026P. Isufi1,224
25 Sep 2026R. Mizuno1,458
30 Sep 2026R. Rajiv1,539
20 Oct 2026M. McCormick1,620
History of the cell according to the record table kept by Comellas and Delorme at UPC Barcelona; retrieved on 24 October 2026.

For every combination of maximum degree and diameter, the table lists the largest known network. On 13 August 2026 my network with 1,224 vertices replaced the 1,215-vertex entry from 1985; since then the cell has been beaten three times, most recently on 20 October 2026 with 1,620 vertices. Ten cells went into the table under my name in August 2026, and all of them have since been beaten. As of 24 October 2026.

Preprint on Zenodo: an independent verification of a counterexample to a conjecture by Goemans on unsplittable flows, doi:10.5281/zenodo.22238190. Its title calls it the second; the research page names earlier verifications that I had missed.

In progress: Radiotherapy certificates. Exact optimality proofs for choosing radiation beam angles in a computational model, with an independent checker.

Agent harnesses

A harness is the framework of rules, scripts and checks an AI agent works in. With mine I assign tasks to several agents and have their results checked in separate runs.

lib/delegate.sh, lines 11–14 and 18–21, verbatim; the comments are in German. As of 29 September 2026.
# report.json: tool model effort sandbox label cwd exit seconds session usage log_dir# Exit:      Code des Werkzeugs (124 = Zeitlimit), 1 = Aufruffehler, 3 = Tiefensperre# Tiefe:     dg_guard setzt AGENT_DELEGATE_DEPTH=1. Ist die Variable schon gesetzt, läuft der#            Aufrufer selbst als Arbeiter: Delegation bricht ohne Modellaufruf mit Exit 3 ab.dg_guard() {  [[ -z "${AGENT_DELEGATE_DEPTH:-}" ]] || { echo "Fehler: Delegation aus einem Arbeiter heraus ist gesperrt (Tiefe 1)." >&2; exit 3; }  export AGENT_DELEGATE_DEPTH=1}

Marked are the rule and the line that enforces it: an agent that is already running as a delegated worker gets exit 3 when it tries to pass the task on, before any model is called.

I assign work to Claude, Codex, OpenCode and DeepSeek through the same interface, with a time limit and a log for every run. An agent that has been assigned a task cannot start further agents through it. As of 30 September 2026.

Whoever finds something does not check it: a second run writes its own checking code with a different method, and at least one deliberately corrupted counter-test has to fail. As of 30 September 2026.

Other work

Security

  • Bug bounty audits

    I look for vulnerabilities in other people’s software, in an audit environment of my own with a fixed set of rules: AI agents work through the source code, and every suspicion is re-checked by a second, separate run before I report it.

    Reports go through bug bounty programmes, where vendors accept vulnerability reports and sometimes pay for them; that has already happened with my reports. As of 30 September 2026.

    Status: active

Products

  • Puzzlekreis

    A swap platform for jigsaw puzzles, as a web app and for iOS and Android.

    The web app and the iOS app have been released; the Android app is in closed testing. As of 24 October 2026.

    Status: online

  • AmtsChecker

    A private service to help people find relevant German social benefits and prepare applications. Focused on North Rhine-Westphalia and Wuppertal.

    Structured conditions and exceptions, sources, application routes and an interface in six languages.

    Status: Password-protected testing

  • Zoopa PN

    A service for messages that delete themselves once read or after a chosen period.

    The message is encrypted in the browser. The key sits only in the link after the # sign, and browsers never send that part to the server; all the server holds of the message is the encrypted text. As of 30 September 2026.

    Status: online

  • Geheimauftrag

    A party game with secret missions, for which guests submit photo, audio and video evidence.

    Status: online

Data

  • Sperrmüll Wuppertal

    A map showing when bulky waste is collected in which Wuppertal street, with a reminder the day before by Telegram bot or email.

    1,825 streets and 442 collection dates for 2026 and 2027, from the data of Wuppertal’s waste company AWG and OpenStreetMap; 1,822 streets are drawn as lines. As of 30 September 2026.

    Status: online

  • Maps from open data

    Small maps and analyses on zoopa.org, mostly about North Rhine-Westphalia.

    Status: online

Setup

My services run on two machines: a small computer at home and a rented server for the public-facing sites. Mail and the zoopa.org website are also hosted by a web hosting provider. Projects and services are backed up on the 3-2-1 rule, meaning three copies on two kinds of storage, one of them off-site; other datasets are backed up locally only or deliberately not at all. The machine at home cannot be reached directly from the internet; outside access goes only through a private network. As of 24 October 2026.

Contact

mail@petrit.dev

For encrypted mail, my OpenPGP key is at pgp-key.txt.