Login
The battery, round by round
Login

How round 5 and the rounds after it went; drafts 1 to 3 and round 4 are in rounds-early.md. The method, the results table and the findings are in README.md.

Round 5: specification only, in a sandbox

stone, 2026-10-10, at the terminal: "i want the agent handoff to be specification only, with just fossil and crystal access, not seeing and inferring from the code." Until now, a Claude subject was told to read only its prompt. It could have read OCX's code; it just didn't. Round 5 enforces it.

The box (box.py):

The packet (prompt-i.txt) is draft 4 unchanged, with a Fossil primer (primer.md) whose claims were each tried with fossil 2.27, a preamble saying what the box holds, and one instruction: say what you ran and what it showed.

Results:

Subject Score Commands run in the box
Opus 5.5 5 19: a repository, logins, two audited tags, the receipt table, a hook
Sonnet 5 5 45: the same ground, and hash prefixes
Haiku 4.5 5 7: a repository, its server-code, its logins
Gemma 4 31B 5 (3 runs) 2, 0 and 2: a repository and its server-code
Qwen2.5-coder 7B 2.8 (15) none

Qwen.

What trying Fossil showed. Four things the specification gets wrong or leaves out, which no paper round found:

  1. Who sent an artifact (E2). For a write made on the node's own repository file, Fossil records as sender whatever login --user names (Opus). The receipt table is local bookkeeping that anyone with SQL on that file can edit (Sonnet). So "the login that sent it" proves authorship only for an artifact that arrived by an authenticated sync or through the web page.
  2. The hook's summaries are lossy (E4, E7):
    • check-in to dev by pat names the user written inside the check-in, not the sender;
    • one of two tag changes came through as unknown (Opus).

The hook must read the repository, not parse the summaries.

  1. A new login inherits capabilities (E2). fossil user new gives u, inheriting the reader's kptw, wiki and ticket writing among them (Opus). create must set an agent's capabilities exactly.
  2. Verdict history (E6) is in the event table as type g, one row per tag change with its user, as E6 needs (Opus and Sonnet).

Draft 4.1: what rounds 4 and 5 hit, fixed

proposal-4.1.md is draft 4 with these changes. It has not been run through the battery. Each change answers a finding:

  1. Attribution (E2). The sender counts only for an artifact that arrived by an authenticated sync or through the web page. On the node only OCX's tools write, each as the caller it authenticated. Who can edit the receipt record is stated (round 5: Opus, Sonnet).
  2. The hook reads the repository for each artifact's kind, branch and sender, never Fossil's summary. LOGIN in a message is always the sender (round 5: Opus).
  3. Exact capabilities (E2). create sets an agent login's capabilities exactly, with nothing inherited (round 5: Opus).
  4. A file objective is read as it stands in the audited check-in (E6). Verdicts are recorded, not combined (round 4: Sonnet, Opus).
  5. Attaching leaves a post naming who attached, when, and for how long. The record's new remote field says whether the runner's remote control may be used, so it is part of the boundary read before the run (round 4: Sonnet, Opus).
  6. A node that never returns. Once a run's start plus its wall has passed, any admin or setup login may write lost (rounds 4 and 5: Opus).
  7. hears' default is taken when create runs. The hook does each action whatever another's outcome. E3's example no longer sets network false for a runner that needs it (round 4).

Still for stone: agents' raw Fossil logins and the branches they may check in on (HISTORY.md decision 29), disk in the budget, and the values themselves.

Round 6: draft 4.1, and draft 4.2 with no raw Fossil login

stone, 2026-10-10, at the terminal, chose to run draft 4.1 through the battery before approving the glossary ("2"), and to weigh whether agents keep a raw Fossil login (HISTORY.md decision 29) at the same time ("(and 3)").

proposal-4.2.md is draft 4.1 with no raw login:

Both drafts went to every subject as round 5's did: specification only, in the box (prompt-k.txt and prompt-m.txt). Qwen also ran on the same texts with no tools offered (prompt-l.txt, prompt-n.txt).

Subject Draft 4.1 Draft 4.2
Opus 5.5 5 (39 commands) 5 (19)
Sonnet 5 5 (40) 5 (45)
Haiku 4.5 5 (5) 5 (3)
Gemma 4 31B 5 (3) 5 (3)
Qwen2.5-coder 7B, boxed 3.53 (15) 3.67 (15)
Qwen2.5-coder 7B, no tools 3.53 (15) 3.47 (15)

Gemma's first run on draft 4.2 generated for half an hour without a reply, with Qwen also loaded in Ollama. It was stopped and run again alone, and from then on local-box.py cuts a reply at 8,000 tokens, over twice the longest answer any subject gave.

The S5 check missed one more denial, "the agent does not receive the post"; it now reads it as one. That changed no earlier score, and one of Gemma's round 6 runs to 5.

A correction to round 5. Round 5 had Qwen at 2.8 when offered tools, against 3.87 without, and concluded that being offered tools hurt it. Here, offered tools, it scored 3.53 and 3.67, level with its controls. Round 5's gap was another streak, not an effect.

What Opus showed on draft 4.1, by trying it.

What the subjects said of draft 4.2.

Also found. A clone made from a file keeps the original's server-code (Opus; checked with fossil 2.27). The glossary says each clone has its own, which holds only for clones over HTTP. A node named by a copied server-code could run a record twice.

Round 7: draft 4.3, restrictions a record may ask for

stone, 2026-10-11, at the terminal: restrictions are fine, but "it should not be required for a node to implement them or a record to require them. the node should be smart enough not to run the record request if it can't provide the restrictions requested", and "sometimes, i want agents working together... make it clear how and when it is enforced."

proposal-4.3.md is draft 4.1 with:

Two more scenarios tested it (prompt-o.txt):

Scores are out of 7.

Subject S1 to S5 S6 S7 Total
Opus, Sonnet, Haiku all yes yes 7 each
Gemma 4 31B (3 runs) all 3 of 3 3 of 3 7
Qwen 7B, boxed (15) as before 1 of 15 11 of 15 3.6
Qwen 7B, no tools (15) as before 0 of 15 13 of 15 3.67

Where Qwen misses S6. It mostly asks for the right restrictions. In 19 of 30 runs it fills the agent's login with the caller, stone. A field named for whose name it is (agent, say) may fix that; untested.

What the Claude subjects challenged:

Draft 4.4: round 7's three challenges answered

stone, 2026-10-11, at the terminal: "lets fix the glossary and write 4.4 for the 3 challenges". proposal-4.4.md is draft 4.3 with these changes:

  1. Opus: make no_password the default. It stays off, since stone ruled restrictions optional. Instead, the record writes restrict out in full, {} included. create's answer says that without no_password the agent's only limits are its Fossil capabilities.
  2. Sonnet: a restriction lost mid-run. The node ends the run at once, with a new outcome, unenforced, naming what it could no longer enforce.
  3. Haiku: publish what a node enforces. OCX's status lists the restrictions a node enforces, and a create dry run checks a record against them.

Also:

GLOSSARY.md is corrected on Clone and Server-code: a clone made from a file keeps the original's server-code. glossary-v1.diff is rebased on it and on draft 4.4.

Round 8: draft 4.4

Draft 4.4 was handed over as round 7's draft was (prompt-q.txt), with no control this time.

Subject Total (of 7) S6 (restrictions)
Opus, Sonnet, Haiku 7 each yes
Gemma 4 31B (3 runs) 7 3 of 3
Qwen 7B, boxed (15) 4.2 3 of 15

Two faults in the harness, found and fixed:

Draft 4.5: Fossil's words

stone, 2026-10-11, at the terminal: "use fossil terminology wherever it can be used." Fossil's account is a user (fossil user, --user, the U card), and its name is its login. proposal-4.5.md is draft 4.4 saying "user" wherever it said "login":

glossary-v1.diff follows: the glossary's Login becomes User, and every entry that said "login" says "user".

Draft 4.6: two planes on Fossil

stone, 2026-10-11, at the terminal, asked how to layer this as a network built on a persistent, immutable store. Each layer should be one unit with the actions taken on it, not a layer of data beside a layer of action. Then: "yes, write 4.6 that way."

proposal-4.6.md has four parts, each resting on Fossil:

  1. Fossil, the medium. What OCX relies on, and what a network on a persistent store means. Sending is writing an artifact. The hook is an interrupt; the repository is the truth. The answer is the acknowledgement. Nothing is retracted. Order comes from references.
  2. OCX, the control plane. Three messages, record, stop and response, in a forum post (a new thread or a reply) or a ticket change, and one table of what a node does on receiving each. A node acts on a record when it arrives, and a command runner covers CI.
  3. Verdicts, a data-plane standard. audited and ci tags, how to write one and how to read one. The control plane never depends on a verdict, and any program may read one, OCX's queue and activity among them.
  4. Tools, which write all of this.

What a session is given is now a delivery. "Input" is already the glossary's word for a tool's input. glossary-v1.diff follows draft 4.6.

Round 9: draft 4.6

Draft 4.6 was handed over as round 8's draft was (prompt-r.txt).

Subject Total (of 7) S6 (restrictions)
Opus, Sonnet, Haiku 7 each yes
Gemma 4 31B (3 runs) 7 3 of 3
Qwen 7B, boxed (15) 4.33 0 of 15

The checker. Haiku passed "user": null to ask for a new user. The checker had taken only a name there; it now takes null too. That changed no earlier score.

Qwen and user. It never put the caller in the field, as it had in 19 of 30 runs on login. Instead it copied the shape of a made-up user name, writing fixer-7f3a2b for fixer in every run. It also missed the branch, or put wall inside restrict.

What the Claude subjects challenged: