Moonlight Build Log: Papa and I are building Moonlight with AI agents. I am the tech lead. I make the decisions and check the work. The agents write the code.
Today an agent built the terminal runner. You type one command and a disease, and Moonlight prints the clues.
python cli.py "pulmonary arterial hypertension"
The first line it prints is the safety line, so nobody can read a clue without seeing it. Sildenafil is not in the list. It is already approved for our disease, so it is not a clue. That is the golden test from my paper graph.
Moonlight found 16 new clues for my five proteins. Which one goes first? I wrote my rule in my notebook before any code.
A medicine shows once, even if it grabs more than one protein. Then its scores are added.
The protein score is about our disease. The reports only break ties. So a famous medicine cannot jump the queue.
My six test medicines came out in this order: Dibotermin Alfa, Eptotermin Alfa, Sevoflurane, Halothane, Sparsentan, Avanafil. The code got the same order.
With all 25 proteins, the first clue was Isosorbide Mononitrate with a score of 1.76. That was odd, because the biggest score on my graph is 0.85.
It grabs three proteins: GUCY1A1, GUCY1B1 and GUCY1A2. But they are three pieces of one machine. My rule added them, 0.60 + 0.58 + 0.58. That is like counting one relay win as three wins.
So I changed my rule. Pieces of the same machine count once, using the strongest piece. Different machines still add. Now its score is 0.60.
My rule was not wrong on paper. Real data showed me something my paper did not have.
My rulebook says an agent must never change a test to make it pass. Today agents asked me three times. Each time they showed me the line before and after.
I said yes, because I had asked for those changes. My answer key (16, 2, 6, 12) did not change. It is like changing the sign on a swim lane after the lane rule changes.
Gemini will write a few sentences for each clue. I wrote one myself first, for Sevoflurane, so Gemini has an example.
My errors in it:
My rules now:
The ending is added by the code, not by Gemini, so it is always the same:
But there is a catch. Nobody knows from our information if the disease needs this protein turned up or down. So this is a clue to read about. It is not a treatment. Do not try it.
If Gemini is busy, the code writes a plain explanation itself. It is like a reserve swimmer in a relay.
73c9db1 Ticket 2.6 + 4.1: engine, terminal runner and golden test5b161aa Merge pull request #8d393641 Ticket 2.5: ranking5bf177a Merge pull request #9418dd1c Ticket 2.7: runner uses the ranking2cc8352 Merge pull request #104795314 Ticket 3.2-3.4: explainer3f09cc0 Merge pull request #1110bcf99 Ticket 2.8: pieces of one machine count once73e6aae Merge pull request #12Five merges today. There are 197 tests and they all pass. Pull request #13 is waiting for my review.
Mumma is the designer. We are sketching the web page on paper: the name, the disease, a card for each clue, and the disclaimer at the bottom. It is not finished yet.
Finish the design, build the page, and let Agastya try to break it.